From 14bed4b9179a6ea2f79939fc87932ead6381eb2c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:24:35 +0700 Subject: [PATCH 001/618] fix(googleai): keep the partial response when a stream callback fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GenerateContent discarded the accumulated response whenever the inner layer returned an error, so a caller that stops a stream from its StreamingFunc got (nil, err) and could not read the text produced before the abort. The streaming path already returns the pair, and the structured-output path below returns it too — this aligns the exported entry point with both. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 2 +- llms/googleai/googleai_unit_test.go | 38 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 5a7111904..43722ef7c 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -192,7 +192,7 @@ func (g *GoogleAI) GenerateContent( response, err = g.generateFromMessages(ctx, opts.GetModel(), messages, config, &opts) } if err != nil { - return nil, err + return response, err } // When structured output was requested, validate each normal-final candidate diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index e86c9c1c3..11372004a 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -1,15 +1,20 @@ package googleai import ( + "context" "encoding/json" "errors" + "io" + "net/http" "strings" "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" "google.golang.org/genai" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestNew(t *testing.T) { @@ -920,3 +925,36 @@ func TestValidateGoogleStructuredOutput(t *testing.T) { } }) } + +type stubStreamTransport struct{ body string } + +func (t stubStreamTransport) RoundTrip(*http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"text/event-stream"}}, + Body: io.NopCloser(strings.NewReader(t.body)), + }, nil +} + +func TestGenerateContentKeepsPartialResponseWhenStreamingFuncFails(t *testing.T) { + t.Parallel() + + chunk := `{"candidates":[{"content":{"parts":[{"text":"partial answer"}],` + + `"role":"model"},"finishReason":"STOP","index":0}]}` + llm, err := New(t.Context(), + WithAPIKey("test-api-key"), + WithRest(), + WithHTTPClient(&http.Client{Transport: stubStreamTransport{body: "data: " + chunk + "\n\n"}}), + ) + require.NoError(t, err) + + errAbort := errors.New("caller stopped the stream") + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return errAbort }), + ) + + require.ErrorIs(t, err, errAbort) + require.NotNil(t, resp) + require.Equal(t, "partial answer", resp.Choices[0].Content) +} From 064e9db390207764df4701de5d7146c668a604bc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:26:17 +0700 Subject: [PATCH 002/618] test(openai): make the xAI penalty test fail on a changed request require.Error was satisfied by any error, including the replay miss that a changed request body produces, so the test stayed green precisely when the behaviour it pins regressed. Asserting the status makes the miss fail: flipping max_tokens to 257 turns the replay into a network error and reddens the test. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm_cache_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm_cache_test.go b/llms/openai/openaillm_cache_test.go index f70c92959..236a41c5a 100644 --- a/llms/openai/openaillm_cache_test.go +++ b/llms/openai/openaillm_cache_test.go @@ -1249,5 +1249,6 @@ func TestXAI_ReasoningModel_RejectsPenalties(t *testing.T) { } _, err := llm.GenerateContent(t.Context(), msgs, llms.WithMaxTokens(256), llms.WithPresencePenalty(0.5)) - require.Error(t, err, "xAI must reject presence_penalty combined with a reasoning model") + require.ErrorContains(t, err, "400", + "xAI must reject presence_penalty combined with a reasoning model") } From 22e878f72979a8e2510018d48815a3ea448f20ff Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:27:05 +0700 Subject: [PATCH 003/618] test(ollama): skip cloud tests without the local signing key The api client signs every ollama.com request from ~/.ollama/id_ed25519 before the httprr transport runs, so the committed recordings cannot replay on a machine without that file and all six TestCloud* tests failed hard instead of skipping. SkipIfNoCredentialsAndRecordingMissing does not cover it: the recordings exist, so it never fires. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/ollama/ollama_cloud_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/llms/ollama/ollama_cloud_test.go b/llms/ollama/ollama_cloud_test.go index 5d49c0e7e..6beb5607e 100644 --- a/llms/ollama/ollama_cloud_test.go +++ b/llms/ollama/ollama_cloud_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "net/http" "os" + "path/filepath" "strings" "testing" @@ -41,6 +42,15 @@ func newCloudTestClient(t *testing.T) *LLM { // Check for required credentials and skip if not available httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OLLAMA_API_KEY") + home, err := os.UserHomeDir() + if err != nil { + t.Skipf("no home directory to read the Ollama signing key from: %v", err) + } + if _, err := os.Stat(filepath.Join(home, ".ollama", "id_ed25519")); err != nil { + t.Skip("no ~/.ollama/id_ed25519: the client signs every ollama.com request before " + + "the httprr transport runs, so the recordings cannot be replayed without it") + } + // Set up httprr for recording/replaying HTTP interactions rr := httprr.OpenForTest(t, httputil.DefaultTransport) From 4be6bddbb9041685dc52d86274a25083882d94d9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:27:19 +0700 Subject: [PATCH 004/618] docs: build the code-reviewer tutorial on Go 1.26 The tutorial's own prerequisites say Go 1.26.5+ and the library's go.mod requires it, but the Dockerfile stage still pulled golang:1.24-alpine, so the documented docker build failed at go build with a toolchain that is older than the module requires. PAGI-125 Co-Authored-By: Claude Opus 5 --- docs/docs/tutorials/code-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/tutorials/code-reviewer.md b/docs/docs/tutorials/code-reviewer.md index e457b4e95..9454bc264 100644 --- a/docs/docs/tutorials/code-reviewer.md +++ b/docs/docs/tutorials/code-reviewer.md @@ -387,7 +387,7 @@ func (r NoGlobalVarsRule) Check(node ast.Node, fset *token.FileSet) []Issue { Create `Dockerfile`: ```dockerfile -FROM golang:1.24-alpine AS builder +FROM golang:1.26-alpine AS builder WORKDIR /app COPY . . RUN go build -o code-reviewer From 8b3ec72f8a9fb4ffa14ba238f1852879d5189288 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:27:51 +0700 Subject: [PATCH 005/618] docs(bedrock): correct what the Converse API is required for MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The page presented WithConverseAPI as a precondition for tool use, structured output and reasoning, while its own default model is Claude Haiku 4.5 — and the legacy InvokeModel path builds tools, output_config schemas and thinking payloads for Claude. Only the non-Anthropic providers, whose legacy builders never read options.Tools, actually need Converse. PAGI-125 Co-Authored-By: Claude Opus 5 --- .../modules/model_io/models/llms/Integrations/bedrock.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx b/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx index 59238b5da..32390a4f9 100644 --- a/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx +++ b/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx @@ -33,8 +33,9 @@ it explicitly with `bedrock.WithModelProvider`. Useful options: -- `bedrock.WithConverseAPI()` — use the unified Converse API (required for tool use, - structured output, and reasoning on supported models). +- `bedrock.WithConverseAPI()` — use the unified Converse API. Claude models support + tool use, structured output and reasoning on the default InvokeModel path as well; + for every other provider those features are only available through Converse. - `bedrock.WithAutomaticCaching()` — enable Anthropic prompt caching on supported Claude models. - `bedrock.WithClient(...)` — supply a preconfigured `*bedrockruntime.Client`. From bcfce19c3ef793630da57b0e2fa63d7e4e89197f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:28:36 +0700 Subject: [PATCH 006/618] docs(bedrock): match the reasoning lists to supportsReasoning The reasoning sections promised budget thinking for DeepSeek R1, but no deepseek prefix appears in either reasoning gate, so WithReasoning on that model sends no thinking payload at all. MiniMax M2.5/M2.1 are in the gate and were missing from the lists, and the capability matrix had both errors mirrored. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index c3084fc58..8b74f7c96 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -188,9 +188,9 @@ if err != nil { **Converse API**: - Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 -- DeepSeek R1 - OpenAI GPT OSS (120B, 20B) - Moonshot Kimi K2-Thinking +- MiniMax M2.5 / M2.1 **Legacy API** (InvokeModel): - Claude: Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 @@ -211,7 +211,7 @@ source of truth used by the first-party Anthropic provider): - **Budget-only** (Opus 4.5, Sonnet 4.5, Haiku 4.5): `thinking.type=enabled` + `budget_tokens`; Opus 4.5 also honors `output_config.effort`. -Non-Claude reasoning models (DeepSeek R1, GPT OSS, Kimi K2-Thinking) use budget +Non-Claude reasoning models (GPT OSS, Kimi K2-Thinking, MiniMax M2) use budget thinking through the Converse API. `WithReasoningDisabled()` returns a typed `ErrReasoningOffUnsupported` for always-on Bedrock models. @@ -246,7 +246,7 @@ resp, err := llm.GenerateContent(ctx, messages, **Why these models?** -Extended thinking/reasoning capabilities are model-specific features. DeepSeek R1, OpenAI OSS, and Moonshot models provide reasoning through the Converse API, while Anthropic models support both APIs. +Extended thinking/reasoning capabilities are model-specific features. OpenAI OSS, Moonshot and MiniMax models provide reasoning through the Converse API, while Anthropic models support both APIs. ### Message Structure with Reasoning @@ -761,12 +761,12 @@ for the exact model IDs. | Nova 2/Pro/Lite/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | | Llama 4 / 3.x | Limited | ❌ | ✅ | ✅ | ❌ | Converse native* | | DeepSeek V3.2 | ✅ | ❌ | ✅ | ❌ | ❌ | Converse native* | -| DeepSeek R1 | ❌ | ✅ | ✅ | ❌ | ❌ | Converse native* | +| DeepSeek R1 | ❌ | ❌ | ✅ | ❌ | ❌ | Converse native* | | OpenAI GPT (OSS) | ✅ | ✅ | ✅ | ❌ | ❌ | Converse native* | | Qwen3 | Varies** | ❌ | ✅ | Some | ❌ | Converse native* | | Mistral | ✅*** | ❌ | ✅ | Some | ❌ | Converse native* | | Moonshot Kimi | ✅**** | ✅ | ✅ | Some | ❌ | Converse native* | -| MiniMax M2/M2.1/M2.5 | ✅ | ❌ | ✅ | ❌ | ❌ | Converse native* | +| MiniMax M2/M2.1/M2.5 | ✅ | ✅ (M2.5/M2.1) | ✅ | ❌ | ❌ | Converse native* | | GLM-4.7/4.7-Flash/5 | ❌***** | ✅ (GLM-5) | ✅ | ❌ | ❌ | Converse native* | | NVIDIA Nemotron 3 Super | ✅ | ✅ | ✅ | ❌ | ❌ | Converse native* | From f14582d4c46f632d4a9c34c87a7832993660ebc0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:29:01 +0700 Subject: [PATCH 007/618] docs(llms): correct what WithReasoning(None, 0) does MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The godoc promised that effort ReasoningNone with 0 tokens disables reasoning. Under the tri-state resolver that config yields ReasoningDefault — IsDisabled reports false and no control reaches the wire — so on the current default models, which think by default, the caller gets billed thinking instead. Point at WithReasoningDisabled, which is the option that actually turns it off. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/options.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llms/options.go b/llms/options.go index 75507ab01..bd1961d15 100644 --- a/llms/options.go +++ b/llms/options.go @@ -699,7 +699,10 @@ func WithPresencePenalty(presencePenalty float64) CallOption { // WithReasoning sets the reasoning configuration for the model call. // You can specify either the reasoning effort or the number of tokens to allocate for reasoning. -// If both effort is ReasoningNone and tokens is 0, reasoning will be disabled. +// If both effort is ReasoningNone and tokens is 0, the reasoning control is +// omitted and the model's own default applies — on models that think by default +// (claude-sonnet-5, claude-opus-5, gemini-2.5-flash) thinking stays on and is +// billed. Use WithReasoningDisabled to force it off. // Note: Most LLM providers expect only one of these options to be set at a time. // Internally, the options may be converted between each other according to predefined rules. func WithReasoning(effort ReasoningEffort, tokens int) CallOption { From e492c41de851eb6f139060fbbdaebe840d700de7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:30:35 +0700 Subject: [PATCH 008/618] test(googleai): replay the caching recordings without a live key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The five caching tests passed the empty GOOGLE_API_KEY straight to WithAPIKey, so the SDK refused to build a client and they failed hard offline — SkipIfNoCredentialsAndRecordingMissing never fires because the recordings are present. Falling back to the placeholder key the scrubber already writes into those recordings makes them replay, so the tests exercise the code offline instead of failing or skipping. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_cache_test.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/llms/googleai/googleai_cache_test.go b/llms/googleai/googleai_cache_test.go index 272ddd5a1..023cc5812 100644 --- a/llms/googleai/googleai_cache_test.go +++ b/llms/googleai/googleai_cache_test.go @@ -1,6 +1,7 @@ package googleai import ( + "cmp" "context" "net/http" "os" @@ -86,7 +87,7 @@ func TestGoogleAI_ExplicitCaching(t *testing.T) { //nolint:funlen // Create caching helper with httprr client helper, err := NewCachingHelper(ctx, - WithAPIKey(apiKey), + WithAPIKey(cmp.Or(apiKey, "test-api-key")), WithRest(), WithHTTPClient(rr.Client()), ) @@ -141,7 +142,7 @@ You should always consider the following aspects in your reviews: // Use the cached content in a request client, err := New(ctx, - WithAPIKey(apiKey), + WithAPIKey(cmp.Or(apiKey, "test-api-key")), WithRest(), WithHTTPClient(rr.Client()), ) @@ -212,7 +213,7 @@ func TestGoogleAI_ImplicitCaching(t *testing.T) { ctx := t.Context() client, err := New(ctx, - WithAPIKey(apiKey), + WithAPIKey(cmp.Or(apiKey, "test-api-key")), WithRest(), WithHTTPClient(rr.Client()), ) @@ -302,7 +303,7 @@ func TestGoogleAI_ImplicitCaching_Streaming(t *testing.T) { //nolint:funlen ctx := t.Context() client, err := New(ctx, - WithAPIKey(apiKey), + WithAPIKey(cmp.Or(apiKey, "test-api-key")), WithRest(), WithHTTPClient(rr.Client()), ) @@ -419,7 +420,7 @@ func TestGoogleAI_ImplicitCaching_ConversationContinuation(t *testing.T) { //nol ctx := t.Context() client, err := New(ctx, - WithAPIKey(apiKey), + WithAPIKey(cmp.Or(apiKey, "test-api-key")), WithRest(), WithHTTPClient(rr.Client()), ) @@ -566,7 +567,7 @@ func TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming(t *testing. ctx := t.Context() client, err := New(ctx, - WithAPIKey(apiKey), + WithAPIKey(cmp.Or(apiKey, "test-api-key")), WithRest(), WithHTTPClient(rr.Client()), ) From 31d03d384047f19dda4b1992764753054d806535 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:52:37 +0700 Subject: [PATCH 009/618] fix(anthropic): never replay a thinking block without its thinking text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaying an assistant turn whose reasoning carried a signature but no text produced {"type":"thinking","signature":"..."}: the thinking field is tagged omitempty, so it vanished from the body and the API rejected the request with messages.N.content.0.thinking.thinking: Field required, killing the agent chain. Three places agreed that a bare signature is reasoning — the response path built such a value, IsEmpty blessed it and the request path emitted it. Emit a block only when there is thinking text, keep scanning the remaining parts instead of stopping at the first reasoning-bearing one, stop building a reasoning value out of a lone signature, and drop omitempty so the required field can no longer disappear silently. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 102 ++++++++++++++++++ llms/anthropic/anthropicllm.go | 20 ++-- .../internal/anthropicclient/messages.go | 2 +- 3 files changed, 112 insertions(+), 12 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index a69cd6def..f97e28228 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -15,6 +15,7 @@ import ( "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" ) @@ -1000,3 +1001,104 @@ func TestAnthropic_InterleavedThinkingBetaHeader(t *testing.T) { assert.NotContains(t, header.Get("anthropic-beta"), "interleaved-thinking") }) } + +// captureAssistantReplay returns the content blocks the adapter built for the +// assistant turn of the replayed history. +func captureAssistantReplay(t *testing.T, parts []llms.ContentPart) []any { + t.Helper() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"m","type":"message","role":"assistant","model":"claude-sonnet-5",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-sonnet-5"), + ) + require.NoError(t, err) + + messages := []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, + {Role: llms.ChatMessageTypeAI, Parts: parts}, + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("continue")}}, + } + _, err = llm.GenerateContent(t.Context(), messages) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Content []any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(body, &payload)) + require.Len(t, payload.Messages, 3) + return payload.Messages[1].Content +} + +func thinkingBlocks(blocks []any) []map[string]any { + var out []map[string]any + for _, b := range blocks { + if m, ok := b.(map[string]any); ok && m["type"] == "thinking" { + out = append(out, m) + } + } + return out +} + +func TestAnthropic_ThinkingReplayNeverOmitsRequiredField(t *testing.T) { + t.Parallel() + + t.Run("signature without text emits no thinking block", func(t *testing.T) { + t.Parallel() + + blocks := captureAssistantReplay(t, []llms.ContentPart{ + llms.TextContent{ + Text: "answer", + Reasoning: &reasoning.ContentReasoning{Signature: []byte("sig-only")}, + }, + }) + + require.Empty(t, thinkingBlocks(blocks), + "a thinking block without the required thinking field must not be sent") + }) + + t.Run("text-bearing part is used when an earlier part carries only a signature", func(t *testing.T) { + t.Parallel() + + blocks := captureAssistantReplay(t, []llms.ContentPart{ + llms.TextContent{ + Reasoning: &reasoning.ContentReasoning{Signature: []byte("sig-only")}, + }, + llms.TextContent{ + Text: "answer", + Reasoning: &reasoning.ContentReasoning{Content: "real thinking", Signature: []byte("sig")}, + }, + }) + + emitted := thinkingBlocks(blocks) + require.Len(t, emitted, 1) + require.Equal(t, "real thinking", emitted[0]["thinking"]) + }) + + t.Run("thinking text always reaches the wire", func(t *testing.T) { + t.Parallel() + + blocks := captureAssistantReplay(t, []llms.ContentPart{ + llms.TextContent{ + Text: "answer", + Reasoning: &reasoning.ContentReasoning{Content: "step one", Signature: []byte("sig")}, + }, + }) + + emitted := thinkingBlocks(blocks) + require.Len(t, emitted, 1) + require.Equal(t, "step one", emitted[0]["thinking"]) + require.Equal(t, "sig", emitted[0]["signature"]) + }) +} diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 2e8d96641..3a1998ae9 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -367,7 +367,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // Create reasoning object var contentReasoning *reasoning.ContentReasoning - if reasoningContent.Len() > 0 || len(signature) > 0 { + if reasoningContent.Len() > 0 { contentReasoning = &reasoning.ContentReasoning{ Content: reasoningContent.String(), Signature: signature, @@ -807,19 +807,17 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro // reasoning-bearing part among msg.Parts. for _, part := range msg.Parts { p, ok := part.(llms.TextContent) - if !ok || p.Reasoning == nil { + if !ok || p.Reasoning == nil || len(p.Reasoning.Content) == 0 { continue } - if len(p.Reasoning.Content) > 0 || len(p.Reasoning.Signature) > 0 { - thinkingBlock := &anthropicclient.ThinkingContent{ - Type: "thinking", - Thinking: p.Reasoning.Content, - } - if len(p.Reasoning.Signature) > 0 { - thinkingBlock.Signature = string(p.Reasoning.Signature) - } - message.Content = append(message.Content, thinkingBlock) + thinkingBlock := &anthropicclient.ThinkingContent{ + Type: "thinking", + Thinking: p.Reasoning.Content, + } + if len(p.Reasoning.Signature) > 0 { + thinkingBlock.Signature = string(p.Reasoning.Signature) } + message.Content = append(message.Content, thinkingBlock) break // one thinking block per assistant turn } diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index cada6f6ca..d16d2df4f 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -161,7 +161,7 @@ type ImageSource struct { type ThinkingContent struct { Type string `json:"type"` - Thinking string `json:"thinking,omitempty"` + Thinking string `json:"thinking"` Signature string `json:"signature,omitempty"` } From d522f104d0e010c0e6dde99437f8b0689cced445 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:54:21 +0700 Subject: [PATCH 010/618] fix(openai): keep the provider's message on a failed request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every non-200 was decoded into the OpenAI {"error":{"message":...}} shape and, when that failed, reported as a bare "API returned unexpected status code: 400". Compatible gateways do not all match that shape — xAI sends "error" as a plain string — so the reason was dropped for exactly the providers this release added tests for. The three call sites now share one helper that falls back to the raw body, capped, and the xAI test asserts the reason instead of the status. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 11 +------ .../internal/openaiclient/completions.go | 29 +++++++++++++++++ .../internal/openaiclient/embeddings.go | 12 +------ .../openai/internal/openaiclient/openaitts.go | 12 +------ .../internal/openaiclient/statuserror_test.go | 32 +++++++++++++++++++ llms/openai/openaillm_cache_test.go | 2 +- 6 files changed, 65 insertions(+), 33 deletions(-) create mode 100644 llms/openai/internal/openaiclient/statuserror_test.go diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 168760851..ab402550f 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -659,16 +659,7 @@ func (c *Client) createChat(ctx context.Context, payload *ChatRequest) (*ChatCom defer r.Body.Close() if r.StatusCode != http.StatusOK { - msg := fmt.Sprintf("API returned unexpected status code: %d", r.StatusCode) - - // No need to check the error here: if it fails, we'll just return the - // status code. - var errResp errorMessage - if err := json.NewDecoder(r.Body).Decode(&errResp); err != nil { - return nil, errors.New(msg) - } - - return nil, fmt.Errorf("%s: %s", msg, errResp.Error.Message) + return nil, statusError(r.StatusCode, r.Body) } if payload.Stream { return parseStreamingChatResponse(ctx, r, payload) diff --git a/llms/openai/internal/openaiclient/completions.go b/llms/openai/internal/openaiclient/completions.go index e4b006fe9..e1b353706 100644 --- a/llms/openai/internal/openaiclient/completions.go +++ b/llms/openai/internal/openaiclient/completions.go @@ -1,7 +1,12 @@ package openaiclient import ( + "bytes" "context" + "encoding/json" + "errors" + "fmt" + "io" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -55,6 +60,30 @@ type errorMessage struct { } `json:"error"` } +const maxErrorBodyBytes = 2048 + +// statusError turns a non-200 response into an error carrying the provider's +// own explanation, quoting the raw body when it is not OpenAI-shaped. +func statusError(statusCode int, body io.Reader) error { + msg := fmt.Sprintf("API returned unexpected status code: %d", statusCode) + + raw, err := io.ReadAll(io.LimitReader(body, maxErrorBodyBytes)) + if err != nil { + return errors.New(msg) //nolint:err113 // the provider gave no readable body + } + raw = bytes.TrimSpace(raw) + if len(raw) == 0 { + return errors.New(msg) //nolint:err113 // the provider gave no readable body + } + + var errResp errorMessage + if err := json.Unmarshal(raw, &errResp); err == nil && errResp.Error.Message != "" { + return fmt.Errorf("%s: %s", msg, errResp.Error.Message) //nolint:err113 // provider-supplied text + } + + return fmt.Errorf("%s: %s", msg, raw) //nolint:err113 // provider-supplied text +} + func (c *Client) setCompletionDefaults(payload *CompletionRequest) { // Set defaults if payload.MaxTokens == 0 { diff --git a/llms/openai/internal/openaiclient/embeddings.go b/llms/openai/internal/openaiclient/embeddings.go index 295efa823..f3e67c0aa 100644 --- a/llms/openai/internal/openaiclient/embeddings.go +++ b/llms/openai/internal/openaiclient/embeddings.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "encoding/json" - "errors" "fmt" "net/http" ) @@ -57,16 +56,7 @@ func (c *Client) createEmbedding(ctx context.Context, payload *embeddingPayload) defer r.Body.Close() if r.StatusCode != http.StatusOK { - msg := fmt.Sprintf("API returned unexpected status code: %d", r.StatusCode) - - // No need to check the error here: if it fails, we'll just return the - // status code. - var errResp errorMessage - if err := json.NewDecoder(r.Body).Decode(&errResp); err != nil { - return nil, errors.New(msg) - } - - return nil, fmt.Errorf("%s: %s", msg, errResp.Error.Message) + return nil, statusError(r.StatusCode, r.Body) } var response embeddingResponsePayload diff --git a/llms/openai/internal/openaiclient/openaitts.go b/llms/openai/internal/openaiclient/openaitts.go index a349ff053..565f39b8d 100644 --- a/llms/openai/internal/openaiclient/openaitts.go +++ b/llms/openai/internal/openaiclient/openaitts.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "encoding/json" - "errors" "fmt" "io" "net/http" @@ -117,16 +116,7 @@ func (c *Client) CreateTTS(ctx context.Context, payload *TTSRequest) ([]byte, er defer response.Body.Close() if response.StatusCode != http.StatusOK { - msg := fmt.Sprintf("API returned unexpected status code: %d", response.StatusCode) - - // No need to check the error here: if it fails, we'll just return the - // status code. - var errResp errorMessage - if err := json.NewDecoder(response.Body).Decode(&errResp); err != nil { - return nil, errors.New(msg) // nolint:err113 - } - - return nil, fmt.Errorf("%s: %s", msg, errResp.Error.Message) // nolint:err113 + return nil, statusError(response.StatusCode, response.Body) } responseData, err := io.ReadAll(response.Body) diff --git a/llms/openai/internal/openaiclient/statuserror_test.go b/llms/openai/internal/openaiclient/statuserror_test.go new file mode 100644 index 000000000..018ebd693 --- /dev/null +++ b/llms/openai/internal/openaiclient/statuserror_test.go @@ -0,0 +1,32 @@ +package openaiclient + +import ( + "strings" + "testing" +) + +func TestStatusErrorSurfacesProviderText(t *testing.T) { + cases := []struct { + name, body, want string + }{ + {"openai shape", `{"error":{"message":"bad request","type":"invalid"}}`, "bad request"}, + {"xai shape", `{"code":"invalid-argument","error":"Model grok-4.5 does not support parameter presencePenalty."}`, "presencePenalty"}, + {"plain text", "upstream exploded", "upstream exploded"}, + {"empty body", "", "400"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + err := statusError(400, strings.NewReader(tc.body)) + if err == nil || !strings.Contains(err.Error(), tc.want) { + t.Fatalf("got %v, want it to contain %q", err, tc.want) + } + }) + } +} + +func TestStatusErrorCapsTheQuotedBody(t *testing.T) { + err := statusError(500, strings.NewReader(strings.Repeat("x", maxErrorBodyBytes*4))) + if len(err.Error()) > maxErrorBodyBytes+128 { + t.Fatalf("error grew to %d bytes, want it capped near %d", len(err.Error()), maxErrorBodyBytes) + } +} diff --git a/llms/openai/openaillm_cache_test.go b/llms/openai/openaillm_cache_test.go index 236a41c5a..e4cb9840e 100644 --- a/llms/openai/openaillm_cache_test.go +++ b/llms/openai/openaillm_cache_test.go @@ -1249,6 +1249,6 @@ func TestXAI_ReasoningModel_RejectsPenalties(t *testing.T) { } _, err := llm.GenerateContent(t.Context(), msgs, llms.WithMaxTokens(256), llms.WithPresencePenalty(0.5)) - require.ErrorContains(t, err, "400", + require.ErrorContains(t, err, "presencePenalty", "xAI must reject presence_penalty combined with a reasoning model") } From c573e895b0c7edea13fb301e16b74999a4dc6701 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:55:54 +0700 Subject: [PATCH 011/618] fix(reasoning): gate adaptive thinking on Bedrock v2 and Claude 4.0 ids MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit preAdaptiveClaude missed two spellings, so the !ClaudePredatesAdaptive gate on both Bedrock doors let an adaptive request through to models that reject it: "claude-2" does not appear in the Bedrock id anthropic.claude-v2, and the 4.0 generation only ever ships in date form (claude-sonnet-4-20250514), which no entry matched. The helper had no test at all — the new table pins both the added spellings and the 4.5-4.8 generations that must keep receiving adaptive. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 4 ++- llms/reasoning/claude_capability_test.go | 31 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 4650e4a36..86e3d23dc 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -161,9 +161,11 @@ func ResolveClaudeAdaptive(model string, adaptivePreferred bool) bool { // adaptive request on them must not be forwarded as thinking.type=adaptive, which // these models reject with a 400. var preAdaptiveClaude = []string{ - "claude-2", "claude-instant", + "claude-2", "claude-v2", + "claude-instant", "claude-3", // claude-3, claude-3-5, claude-3-7 all predate adaptive "claude-opus-4-1", + "claude-opus-4-20", "claude-sonnet-4-20", } // ClaudePredatesAdaptive reports whether the model is a known pre-adaptive Claude diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 8b86f92d5..d6272818f 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -141,3 +141,34 @@ func TestClaudeRejectsSampling(t *testing.T) { } } } + +func TestClaudePredatesAdaptive(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + }{ + {"claude-2.1", true}, + {"anthropic.claude-v2", true}, + {"anthropic.claude-v2:1", true}, + {"anthropic.claude-instant-v1", true}, + {"claude-3-5-haiku", true}, + {"claude-3-7-sonnet-20250219", true}, + {"claude-opus-4-1-20250805", true}, + {"claude-opus-4-20250514", true}, + {"us.anthropic.claude-sonnet-4-20250514-v1:0", true}, + {"claude-opus-4-5", false}, + {"claude-sonnet-4-5", false}, + {"claude-haiku-4-5", false}, + {"claude-opus-4-6", false}, + {"claude-sonnet-4-6", false}, + {"claude-opus-4-8", false}, + {"claude-sonnet-5", false}, + {"us.anthropic.claude-fable-5", false}, + } + for _, tc := range cases { + if got := ClaudePredatesAdaptive(tc.model); got != tc.want { + t.Errorf("ClaudePredatesAdaptive(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} From 7bb630f1068921be076b8a703e7b056e27fcca27 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:56:49 +0700 Subject: [PATCH 012/618] fix(vertex): map the explicit nullable keyword onto the schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "nullable" sat in the whitelist group labelled "mapped onto genai.Schema", but nothing read it: only the [T,"null"] union spelling set Schema.Nullable, so {"type":"string","nullable":true} was silently tightened to non-nullable — in the file whose stated contract is that no constraint is lost quietly. The googleai twin already honours the same keyword. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/structured_output.go | 8 ++++++ .../googleai/vertex/structured_output_test.go | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index b1e3692fb..4136bf80a 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -139,6 +139,14 @@ func convertVertexNode(node map[string]any) (*genai.Schema, error) { //nolint:fu schema.Type = gt schema.Nullable = nullable + if n, ok := node["nullable"]; ok { + b, ok := n.(bool) + if !ok { + return nil, unsupportedVertexSchema(`keyword "nullable" must be a boolean`) + } + schema.Nullable = schema.Nullable || b + } + if s, ok := node["description"].(string); ok { schema.Description = s } diff --git a/llms/googleai/vertex/structured_output_test.go b/llms/googleai/vertex/structured_output_test.go index 137f5a263..72a7f92f4 100644 --- a/llms/googleai/vertex/structured_output_test.go +++ b/llms/googleai/vertex/structured_output_test.go @@ -64,6 +64,32 @@ func TestConvertJSONSchemaToVertex(t *testing.T) { //nolint:funlen // table-driv } }) + t.Run("both nullable spellings reach the schema", func(t *testing.T) { + t.Parallel() + for _, raw := range []string{ + `{"type":["string","null"]}`, + `{"type":"string","nullable":true}`, + } { + schema, err := convertJSONSchemaToVertex(json.RawMessage(raw)) + if err != nil { + t.Fatalf("%s: unexpected error: %v", raw, err) + } + if schema.Type != genai.TypeString { + t.Errorf("%s: type = %v, want string", raw, schema.Type) + } + if !schema.Nullable { + t.Errorf("%s: Nullable = false, want true", raw) + } + } + }) + + t.Run("nullable must be a boolean", func(t *testing.T) { + t.Parallel() + if _, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"string","nullable":"yes"}`)); err == nil { + t.Error("want an error for a non-boolean nullable, got nil") + } + }) + t.Run("string constraints are preserved", func(t *testing.T) { t.Parallel() schema, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"string","minLength":2,"maxLength":8,"pattern":"^[a-z]+$"}`)) From edfa5af4d2fa859b8db7ec5a0dc8472efce5a014 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:58:23 +0700 Subject: [PATCH 013/618] feat(vertex): report an explicit reasoning-off as unsupported MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WithReasoningDisabled was accepted and dropped: the adapter never reads opts.Reasoning, so a caller asking to turn thinking off kept paying for it on models that think by default. The pinned vertexai SDK carries no thinking config, so honouring the request is impossible without an SDK migration — return the typed error the googleai twin already returns for models that cannot disable. Scoped to the explicit off. An explicit on stays a silent pass-through, matching googleai, which never errors on a reasoning request either. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/vertex.go | 7 +++++++ llms/googleai/vertex/vertex_unit_test.go | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 3d1c79e1f..95804b981 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -21,6 +21,7 @@ import ( "cloud.google.com/go/vertexai/genai" "github.com/vxcontrol/langchaingo/internal/imageutil" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" "google.golang.org/api/iterator" ) @@ -77,6 +78,12 @@ func (g *Vertex) GenerateContent( opt(&opts) } + // The pinned vertexai SDK has no thinking config, so an explicit disable can + // never reach the wire. + if opts.Reasoning.ResolveMode() == llms.ReasoningOff { + return nil, &reasoning.ErrReasoningOffUnsupported{Model: opts.GetModel()} + } + model := g.client.GenerativeModel(opts.GetModel()) if opts.CandidateCount != nil { model.SetCandidateCount(int32(opts.GetCandidateCount())) diff --git a/llms/googleai/vertex/vertex_unit_test.go b/llms/googleai/vertex/vertex_unit_test.go index 79769a013..7798e4289 100644 --- a/llms/googleai/vertex/vertex_unit_test.go +++ b/llms/googleai/vertex/vertex_unit_test.go @@ -2,10 +2,12 @@ package vertex import ( "encoding/json" + "errors" "strings" "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" "cloud.google.com/go/vertexai/genai" ) @@ -719,3 +721,18 @@ func TestMergeStreamCandidateCarriesFinishReasonOnContentlessChunk(t *testing.T) func TestVertexImplementsModel(t *testing.T) { var _ llms.Model = &Vertex{} } + +func TestVertexRejectsExplicitReasoningOff(t *testing.T) { + t.Parallel() + + llm := &Vertex{} + _, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoningDisabled(), + ) + + var unsupported *reasoning.ErrReasoningOffUnsupported + if !errors.As(err, &unsupported) { + t.Fatalf("err = %v, want ErrReasoningOffUnsupported", err) + } +} From 59cc9193580bf3fa4b926fa1b315e84b75a78749 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 13:59:53 +0700 Subject: [PATCH 014/618] fix(llms): stop advertising a disable the gateway path cannot send ReasoningSupportFor derived CannotDisable straight from ResolveOff, so a default-on Claude reached through an OpenAI-compatible gateway was reported as disablable: the resolver answers OffDisableClaude, which only the Anthropic adapter knows how to emit. A UI trusting the hint rendered a reasoning-off toggle that the request then ignored, leaving thinking on and billed. The hint now answers for the provider that will carry the request. Making the OpenAI adapter honour that outcome instead is the other half and stays open: on a LiteLLM-fronted Anthropic model the modern reasoning object is itself rejected. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 15 ++++++++++++++- llms/reasoning_support_test.go | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 9f9070852..625769861 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -63,6 +63,19 @@ func lookupReasoningOverride(model string) (ReasoningSupport, bool) { return ReasoningSupport{}, false } +// claudeCannotDisable reports whether thinking stays on whatever the caller asks. +// Only the Anthropic adapter emits thinking:{type:"disabled"}. +func claudeCannotDisable(model string, p reasoning.Provider) bool { + switch reasoning.ResolveOff(model, p) { + case reasoning.OffUnsupported: + return true + case reasoning.OffDisableClaude: + return p != reasoning.ProviderAnthropic + default: + return false + } +} + func boolPtr(b bool) *bool { return &b } // ReasoningSupportFor returns the reasoning-control hint for a model on a @@ -81,7 +94,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { // Derive from the same resolver the wire uses so the hint tracks // provider differences (e.g. Sonnet 5 is disablable on Anthropic but // always on, hence not disablable, on Bedrock). - CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + CannotDisable: claudeCannotDisable(model, p), RejectsSampling: reasoning.ClaudeRejectsSampling(model), Efforts: claudeEfforts(reasoning.ClaudeReasoningKindFor(model)), DefaultOn: boolPtr(reasoning.ClaudeThinkingDefaultsOn(model)), diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index adcf38d73..3285fd5c9 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -56,6 +56,8 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes eq(t, "CannotDisable(Anthropic)", anthropic.CannotDisable, false) bedrock := ReasoningSupportFor("us.anthropic.claude-sonnet-5", reasoning.ProviderBedrock) eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, true) + gateway := ReasoningSupportFor("anthropic/claude-sonnet-5", reasoning.ProviderOpenAI) + eq(t, "CannotDisable(OpenAI gateway)", gateway.CannotDisable, true) }) t.Run("Opus 5 defaults on but is disablable, like Sonnet 5 unlike Opus 4.8", func(t *testing.T) { From b504537ff884247c678c2ded5022cc7d941b4694 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 21:30:33 +0700 Subject: [PATCH 015/618] fix(googleai): honour a configured default temperature on Gemini 3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolveTemperature returned 1.0 for every gemini-3 model without ever reading the default it was handed, so WithDefaultTemperature(0.2) was discarded and the request ran at 1.0. Google recommends 1.0 there, but the API accepts lower values, so the recommendation belongs in the default rather than on top of an explicit choice. Options now record that the caller set a temperature, which the package default alone could not express — 0.5 is a legitimate value to configure. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 9 +-- llms/googleai/googleai_core_unit_test.go | 20 +++++-- llms/googleai/googleai_unit_test.go | 72 ++++++++++++++++++++++++ llms/googleai/option.go | 8 ++- 4 files changed, 100 insertions(+), 9 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 43722ef7c..dbc6f709a 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -113,7 +113,7 @@ func (g *GoogleAI) GenerateContent( // Default temperature only when the caller left it unset; an explicit value is // preserved. if opts.Temperature == nil { - opts.Temperature = getFloatPointer(resolveTemperature(opts.GetModel(), g.opts.DefaultTemperature)) + opts.Temperature = getFloatPointer(resolveTemperature(opts.GetModel(), g.opts)) } // Build generation config @@ -1063,11 +1063,12 @@ func convertIntToFloat32Pointer(i *int) *float32 { // resolveTemperature returns the temperature to use when the caller left it // unset. Gemini 3 defaults to 1.0, the value Google recommends (lower values can // cause looping and degraded reasoning); other models keep the SDK-wide default. -func resolveTemperature(model string, defaultTemperature float64) float64 { - if reasoning.GeminiUsesThinkingLevel(model) { +// A default the caller configured explicitly wins over the model recommendation. +func resolveTemperature(model string, clientOpts Options) float64 { + if !clientOpts.temperatureFromCaller && reasoning.GeminiUsesThinkingLevel(model) { return 1.0 } - return defaultTemperature + return clientOpts.DefaultTemperature } // resolveThinkingConfig builds the Gemini thinking config for the reasoning mode. diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 4c9c5951b..9bcceedfc 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1052,11 +1052,23 @@ var productionGeminiModels = []struct { func TestResolveTemperature(t *testing.T) { t.Parallel() + + sdkDefault := Options{DefaultTemperature: 0.5} // Gemini 3 defaults to 1.0; everything else keeps the SDK default (0.5 here). - assert.Equal(t, 1.0, resolveTemperature("gemini-3.1-pro", 0.5)) - assert.Equal(t, 1.0, resolveTemperature("gemini-3-flash", 0.5)) - assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-flash", 0.5)) - assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-pro", 0.5)) + assert.Equal(t, 1.0, resolveTemperature("gemini-3.1-pro", sdkDefault)) + assert.Equal(t, 1.0, resolveTemperature("gemini-3-flash", sdkDefault)) + assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-flash", sdkDefault)) + assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-pro", sdkDefault)) + + // A temperature the caller configured wins on every model. + configured := DefaultOptions() + WithDefaultTemperature(0.2)(&configured) + assert.Equal(t, 0.2, resolveTemperature("gemini-3.1-pro", configured)) + assert.Equal(t, 0.2, resolveTemperature("gemini-2.5-flash", configured)) + + sameAsDefault := DefaultOptions() + WithDefaultTemperature(0.5)(&sameAsDefault) + assert.Equal(t, 0.5, resolveTemperature("gemini-3-flash", sameAsDefault)) } func TestResolveThinkingConfig(t *testing.T) { diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 11372004a..ab10bfe35 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -958,3 +958,75 @@ func TestGenerateContentKeepsPartialResponseWhenStreamingFuncFails(t *testing.T) require.NotNil(t, resp) require.Equal(t, "partial answer", resp.Choices[0].Content) } + +type captureTransport struct { + body []byte + resp string +} + +func (t *captureTransport) RoundTrip(r *http.Request) (*http.Response, error) { + if r.Body != nil { + t.body, _ = io.ReadAll(r.Body) + } + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(strings.NewReader(t.resp)), + }, nil +} + +func TestConfiguredDefaultTemperatureReachesTheWire(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + opts []Option + want float64 + model string + }{ + {name: "gemini-3 without a configured default", model: "gemini-3-flash", want: 1.0}, + { + name: "gemini-3 with a configured default", + model: "gemini-3-flash", + opts: []Option{WithDefaultTemperature(0.2)}, + want: 0.2, + }, + { + name: "gemini-2.5 with a configured default", + model: "gemini-2.5-flash", + opts: []Option{WithDefaultTemperature(0.2)}, + want: 0.2, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + rt := &captureTransport{ + resp: `{"candidates":[{"content":{"parts":[{"text":"ok"}],"role":"model"},` + + `"finishReason":"STOP","index":0}]}`, + } + opts := append([]Option{ + WithAPIKey("test-api-key"), + WithRest(), + WithDefaultModel(tc.model), + WithHTTPClient(&http.Client{Transport: rt}), + }, tc.opts...) + + llm, err := New(t.Context(), opts...) + require.NoError(t, err) + + _, err = llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + + var payload struct { + GenerationConfig struct { + Temperature *float64 `json:"temperature"` + } `json:"generationConfig"` + } + require.NoError(t, json.Unmarshal(rt.body, &payload)) + require.NotNil(t, payload.GenerationConfig.Temperature) + require.InDelta(t, tc.want, *payload.GenerationConfig.Temperature, 1e-6) + }) + } +} diff --git a/llms/googleai/option.go b/llms/googleai/option.go index b25038769..fc9a485cf 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -28,6 +28,10 @@ type Options struct { HTTPClient *http.Client ClientOptions []option.ClientOption + + // temperatureFromCaller is set by WithDefaultTemperature, not by writing + // DefaultTemperature directly. + temperatureFromCaller bool } func DefaultOptions() Options { @@ -179,10 +183,12 @@ func WithDefaultMaxTokens(maxTokens int) Option { } } -// WithDefaultTemperature sets the maximum token count for the model. +// WithDefaultTemperature sets the sampling temperature used when a call does not +// set one of its own. func WithDefaultTemperature(defaultTemperature float64) Option { return func(opts *Options) { opts.DefaultTemperature = defaultTemperature + opts.temperatureFromCaller = true } } From 94ead68900c8b1412e3660fdce243d5d41e35afb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 23:06:46 +0700 Subject: [PATCH 016/618] feat(ollama): surface the reasoning the server reports natively MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The adapter recovered reasoning only by peeling tags off the content, while current servers put it in message.thinking instead — the field went unread on both paths and the streaming assembler dropped it when rebuilding the final message, so callers saw an empty choice.Reasoning and no reasoning chunks. The committed cloud recording carries a populated thinking field the adapter was ignoring. Both spellings now feed the same reasoning value; a test pins each so neither can be removed as the other's duplicate. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/ollama/ollama_thinking_test.go | 91 +++++++++++++++++++++++++++++ llms/ollama/ollamallm.go | 9 ++- 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 llms/ollama/ollama_thinking_test.go diff --git a/llms/ollama/ollama_thinking_test.go b/llms/ollama/ollama_thinking_test.go new file mode 100644 index 000000000..e4e7e4dc2 --- /dev/null +++ b/llms/ollama/ollama_thinking_test.go @@ -0,0 +1,91 @@ +package ollama + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +// newThinkingServerClient serves the given lines as an NDJSON chat response. +func newThinkingServerClient(t *testing.T, lines ...string) *LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/x-ndjson") + for _, line := range lines { + _, _ = w.Write([]byte(line + "\n")) + } + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("glm-5")) + require.NoError(t, err) + return llm +} + +func TestNativeThinkingReachesTheChoice(t *testing.T) { + t.Parallel() + + llm := newThinkingServerClient(t, + `{"model":"glm-5","message":{"role":"assistant","content":"Paris",`+ + `"thinking":"The capital of France is Paris."},"done":true,"done_reason":"stop"}`) + + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "capital of France?")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + require.Equal(t, "Paris", resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning) + require.Equal(t, "The capital of France is Paris.", resp.Choices[0].Reasoning.Content) +} + +func TestNativeThinkingIsStreamedAndAccumulated(t *testing.T) { + t.Parallel() + + llm := newThinkingServerClient(t, + `{"model":"glm-5","message":{"role":"assistant","content":"","thinking":"first "},"done":false}`, + `{"model":"glm-5","message":{"role":"assistant","content":"","thinking":"second"},"done":false}`, + `{"model":"glm-5","message":{"role":"assistant","content":"Paris"},"done":true,"done_reason":"stop"}`) + + var streamed string + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "capital of France?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeReasoning && chunk.Reasoning != nil { + streamed += chunk.Reasoning.Content + } + return nil + })) + require.NoError(t, err) + + require.Equal(t, "first second", streamed, "every thinking delta must reach the callback") + require.NotNil(t, resp.Choices[0].Reasoning) + require.Equal(t, "first second", resp.Choices[0].Reasoning.Content) +} + +func TestLegacyThinkTagsStillSplit(t *testing.T) { + t.Parallel() + + body, err := json.Marshal(map[string]any{ + "model": "deepseek-r1", + "message": map[string]any{"role": "assistant", "content": "musingParis"}, + "done": true, + "done_reason": "stop", + }) + require.NoError(t, err) + + llm := newThinkingServerClient(t, string(body)) + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "capital of France?")}) + require.NoError(t, err) + + require.Equal(t, "Paris", resp.Choices[0].Content) + require.Equal(t, "musing", resp.Choices[0].Reasoning.Content) +} diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 9b903faaf..d225539a1 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -364,12 +364,14 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca var ( resp api.ChatResponse streamedResponse string + streamedThinking string streamedToolCalls []api.ToolCall ) splitter := reasoning.NewChunkContentSplitter() fn := func(response api.ChatResponse) error { textContent, reasoningContent := splitter.Split(response.Message.Content) + reasoningContent += response.Message.Thinking if opts.StreamingFunc != nil { reasoning := &reasoning.ContentReasoning{Content: reasoningContent} if err := streaming.CallWithReasoning(ctx, opts.StreamingFunc, reasoning); err != nil { @@ -395,6 +397,7 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca if response.Message.Content != "" { streamedResponse += response.Message.Content } + streamedThinking += response.Message.Thinking if len(response.Message.ToolCalls) > 0 { streamedToolCalls = append(streamedToolCalls, response.Message.ToolCalls...) } @@ -404,6 +407,7 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca resp.Message = api.Message{ Role: "assistant", Content: streamedResponse, + Thinking: streamedThinking, ToolCalls: streamedToolCalls, } } @@ -416,11 +420,12 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca // createContentResponse creates a LangChain content response from Ollama response. func (o *LLM) createContentResponse(resp api.ChatResponse) *llms.ContentResponse { - reasoning, content := reasoning.SplitContentWithReasoning(resp.Message.Content) + contentReasoning, content := reasoning.SplitContentWithReasoning(resp.Message.Content) + contentReasoning.Content += resp.Message.Thinking choices := []*llms.ContentChoice{ { Content: content, - Reasoning: reasoning, + Reasoning: contentReasoning, StopReason: resp.DoneReason, GenerationInfo: map[string]any{ "CompletionTokens": resp.EvalCount, From c902a9cde865301257969ab0f60c7105e40fa585 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 23:10:50 +0700 Subject: [PATCH 017/618] build: scope the gosec taint waivers to the three real sites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit G703 and G704 were switched off for the whole repository on the grounds that gosec taints any path or URL parameter by type. That is not what the analyzer does: its sources are *http.Request, *url.URL, *bufio readers and os.Args/Getenv/ReadFile, so a plain string parameter is never tainted — and a repo-wide waiver silences the cases that would matter, such as a handler opening a file named by its request. Three sites are flagged today and each is legitimate: a test proxy forwarding what it received, a temp-file name that url.Parse taint reaches without being able to influence it, and a client fetching the endpoint its caller configured. Waiving exactly those keeps the check alive: a probe taking *http.Request into os.Open and http.Get is reported again, while the tree lints clean. PAGI-125 Co-Authored-By: Claude Opus 5 --- .golangci.yaml | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index a047d5134..11dd65de9 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -36,14 +36,6 @@ linters: gosec: excludes: - G115 - # G703/G704: gosec's taint-analysis engine flags any function parameter - # of a matching type (e.g. a file path or URL string) as tainted based - # solely on its type, not on whether it actually originates from - # untrusted input. This produces widespread false positives in library - # code where callers pass in paths/URLs directly (see - # https://github.com/securego/gosec/issues/1500). - - G703 - - G704 exhaustive: default-signifies-exhaustive: true exclusions: @@ -53,6 +45,24 @@ linters: - common-false-positives - legacy - std-error-handling + rules: + # The stub is a proxy: forwarding the request it received is its purpose. + - path: httputil/transport_test\.go + linters: + - gosec + text: G704 + # url.Parse taints the helper, but what reaches os.Open is the name + # os.CreateTemp chose, which the URL cannot influence. + - path: documentloaders/whisper\.go + linters: + - gosec + text: G703 + # Fetching the endpoint its caller configured is what this client does; + # a url.URL parameter is a taint source by declaration. + - path: vectorstores/qdrant/rest\.go + linters: + - gosec + text: G704 paths: - internal - vectorstores/bedrockknowledgebases From 69ff140674d20adddc50fe5c2d233a95881c06aa Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 19 Aug 2026 23:29:15 +0700 Subject: [PATCH 018/618] feat(llms): report the thinking mechanism and stop guessing effort tiers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two gaps in the same hint. ReasoningSupportFor answered Known=true with [low medium high] for any OpenAI reasoning model it does not classify — gpt-5.5 and the rest of the 5.x line — presenting a guess as a fact and contradicting the type's own promise to leave unknowns nil. And the hint never carried the mechanism, so a consumer that needed to know a model is adaptive-only had to reach past it into the capability tables and keep a second source of truth. Efforts are now filled only for a classified model, and Mechanism reports effort, budget or either, derived from the same Claude table the wire path reads. PAGI-97 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 36 ++++++++++++++++++++++++++++++---- llms/reasoning_support_test.go | 29 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 625769861..5c202281e 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -13,6 +13,20 @@ import ( // provider API (an HTTP 400) is the ultimate arbiter. The table asserts only // KNOWN facts; it never fabricates a capability it cannot back — unknown effort // tiers and default state are left nil rather than guessed. +// ReasoningMechanism describes how a model takes its thinking instruction. +type ReasoningMechanism int + +const ( + // ReasoningMechanismUnknown is a model whose mechanism this build does not classify. + ReasoningMechanismUnknown ReasoningMechanism = iota + // ReasoningMechanismAdaptive takes an effort level and decides how much to think. + ReasoningMechanismAdaptive + // ReasoningMechanismBudget takes a manual token budget. + ReasoningMechanismBudget + // ReasoningMechanismAdaptiveAndBudget accepts either mechanism. + ReasoningMechanismAdaptiveAndBudget +) + type ReasoningSupport struct { // Supported reports whether the model reasons at all. Supported bool @@ -27,6 +41,9 @@ type ReasoningSupport struct { RejectsSampling bool // Efforts are the effort tiers worth offering; nil when unknown. Efforts []ReasoningEffort + // Mechanism reports whether the model takes an effort level, a token budget + // or either; ReasoningMechanismUnknown when unclassified. + Mechanism ReasoningMechanism // DefaultOn reports whether thinking runs when reasoning is unset; nil when unknown. DefaultOn *bool } @@ -97,15 +114,13 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { CannotDisable: claudeCannotDisable(model, p), RejectsSampling: reasoning.ClaudeRejectsSampling(model), Efforts: claudeEfforts(reasoning.ClaudeReasoningKindFor(model)), + Mechanism: claudeMechanism(reasoning.ClaudeReasoningKindFor(model)), DefaultOn: boolPtr(reasoning.ClaudeThinkingDefaultsOn(model)), } } if p == reasoning.ProviderOpenAI && reasoning.IsReasoningModel(model) { - // A classified model (e.g. GPT-5 Pro accepts only high, GPT-5.4 mini adds - // xhigh) advertises its own effort set; an unclassified one falls back to - // the conservative low/medium/high triple. - efforts := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh} + var efforts []ReasoningEffort if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { efforts = toReasoningEfforts(caps.Efforts) } @@ -145,6 +160,19 @@ func toReasoningEfforts(efforts []string) []ReasoningEffort { return out } +func claudeMechanism(kind reasoning.ClaudeReasoningKind) ReasoningMechanism { + switch kind { + case reasoning.ClaudeReasoningAdaptiveOnly: + return ReasoningMechanismAdaptive + case reasoning.ClaudeReasoningBudgetOnly: + return ReasoningMechanismBudget + case reasoning.ClaudeReasoningAdaptiveAndBudget: + return ReasoningMechanismAdaptiveAndBudget + default: + return ReasoningMechanismUnknown + } +} + func claudeEfforts(kind reasoning.ClaudeReasoningKind) []ReasoningEffort { switch kind { case reasoning.ClaudeReasoningAdaptiveOnly: diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 3285fd5c9..c27a109bf 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -89,6 +89,35 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } }) + t.Run("an unclassified OpenAI model names no effort tiers", func(t *testing.T) { + s := ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI) + eq(t, "Supported", s.Supported, true) + if s.Efforts != nil { + t.Errorf("Efforts = %v, want nil: the tiers of gpt-5.5 are not classified", s.Efforts) + } + }) + + t.Run("mechanism follows the Claude generation", func(t *testing.T) { + cases := []struct { + model string + want ReasoningMechanism + }{ + {"claude-sonnet-5", ReasoningMechanismAdaptive}, + {"us.anthropic.claude-opus-4-8", ReasoningMechanismAdaptive}, + {"claude-opus-4-6", ReasoningMechanismAdaptiveAndBudget}, + {"claude-sonnet-4-5", ReasoningMechanismBudget}, + {"claude-haiku-4-5", ReasoningMechanismBudget}, + } + for _, tc := range cases { + got := ReasoningSupportFor(tc.model, reasoning.ProviderAnthropic).Mechanism + if got != tc.want { + t.Errorf("Mechanism(%q) = %v, want %v", tc.model, got, tc.want) + } + } + eq(t, "gpt-5.5 Mechanism", + ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI).Mechanism, ReasoningMechanismUnknown) + }) + t.Run("OpenAI effort set is model-dependent", func(t *testing.T) { pro := ReasoningSupportFor("gpt-5-pro", reasoning.ProviderOpenAI) eq(t, "gpt-5-pro Efforts len", len(pro.Efforts), 1) From 670e12e6b79c267b58e7fea7137c315a1a2d8fdb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 00:45:36 +0700 Subject: [PATCH 019/618] fix(googleai): stop validating a tool turn against the output schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gemini has no separate finish reason for a function call: the turn arrives as STOP with empty text. Both Google adapters validated every STOP candidate, so WithStructuredOutput combined with WithTools failed the legitimate tool call with ErrStructuredOutputValidation and the agent loop never ran the tool. The googleai doc comment already claimed tool outcomes were exempt. The other four adapters get the exemption from their stop reason — openai answers tool_calls, anthropic and bedrock tool_use — and ollama, which shares Gemini's ambiguity, already carries this guard. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 3 ++- llms/googleai/googleai_unit_test.go | 16 ++++++++++++++++ llms/googleai/vertex/structured_output.go | 7 ++++--- llms/googleai/vertex/structured_output_test.go | 13 +++++++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index dbc6f709a..8b5e27396 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -256,7 +256,8 @@ func validateGoogleStructuredOutput(opts *llms.CallOptions, resp *llms.ContentRe } model := opts.GetModel() for i, choice := range resp.Choices { - if choice.StopReason != string(genai.FinishReasonStop) { + // Gemini reports a function call as STOP with no text. + if choice.StopReason != string(genai.FinishReasonStop) || len(choice.ToolCalls) > 0 { continue } if err := structuredoutput.Validate(so.Schema, providerGoogleAI, model, i, choice.StopReason, choice.Content); err != nil { diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index ab10bfe35..c002ea631 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -905,6 +905,22 @@ func TestValidateGoogleStructuredOutput(t *testing.T) { } }) + t.Run("a tool turn is not a final answer", func(t *testing.T) { + t.Parallel() + err := validateGoogleStructuredOutput(opts, mk(&llms.ContentChoice{ + Content: "", + StopReason: stop, + ToolCalls: []llms.ToolCall{{ + ID: "call_1", + Type: "function", + FunctionCall: &llms.FunctionCall{Name: "getWeather", Arguments: `{"city":"Paris"}`}, + }}, + })) + if err != nil { + t.Fatalf("a STOP turn carrying tool calls must not be validated as JSON: %v", err) + } + }) + t.Run("MAX_TOKENS is skipped", func(t *testing.T) { t.Parallel() err := validateGoogleStructuredOutput(opts, mk(&llms.ContentChoice{Content: `{"answer"`, StopReason: maxTok})) diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index 4136bf80a..b7c02f8c5 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -56,8 +56,8 @@ func applyVertexResponseFormat(model *genai.GenerativeModel, opts *llms.CallOpti } // validateVertexStructuredOutput validates each normal-final (FinishReasonStop) -// candidate against the original schema. Other finish reasons keep their prior -// semantics and are not validated as final JSON. +// candidate against the original schema. Other finish reasons, and tool turns, +// keep their prior semantics and are not validated as final JSON. func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentResponse) error { so := opts.StructuredOutput if so == nil || resp == nil { @@ -66,7 +66,8 @@ func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentRe model := opts.GetModel() stop := genai.FinishReasonStop.String() for i, choice := range resp.Choices { - if choice.StopReason != stop { + // Gemini reports a function call as STOP with no text. + if choice.StopReason != stop || len(choice.ToolCalls) > 0 { continue } if err := structuredoutput.Validate(so.Schema, providerVertex, model, i, choice.StopReason, choice.Content); err != nil { diff --git a/llms/googleai/vertex/structured_output_test.go b/llms/googleai/vertex/structured_output_test.go index 72a7f92f4..049d3d2e5 100644 --- a/llms/googleai/vertex/structured_output_test.go +++ b/llms/googleai/vertex/structured_output_test.go @@ -233,4 +233,17 @@ func TestValidateVertexStructuredOutput(t *testing.T) { if !errors.As(err, &ve) { t.Errorf("invalid STOP must fail typed: %v", err) } + + toolTurn := &llms.ContentChoice{ + Content: "", + StopReason: stop, + ToolCalls: []llms.ToolCall{{ + ID: "call_1", + Type: "function", + FunctionCall: &llms.FunctionCall{Name: "getWeather", Arguments: `{"city":"Paris"}`}, + }}, + } + if err := validateVertexStructuredOutput(opts, &llms.ContentResponse{Choices: []*llms.ContentChoice{toolTurn}}); err != nil { + t.Errorf("a STOP turn carrying tool calls must not be validated as JSON: %v", err) + } } From 6aff823437edb333dda795c0a894d407316a179f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 00:56:14 +0700 Subject: [PATCH 020/618] fix(openai): pin the temperature by the model the request runs on MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reasoning-model pin read the per-call model, so a client that names its model at construction — or names none at all and falls through to the package default — escaped it: openai.New() + WithTemperature(0.2) sent 0.2 to gpt-5.4-mini while the same value with a per-call model became 1.0. effectiveModel resolves call, client and package default and is what the neighbouring reasoning-off and clamp paths already use. Correcting the model to the pin also exposed that it fabricated a temperature for callers who set none. It now only corrects a value the caller actually chose; omitting still lands on the model's own 1.0, and the request shape for those callers is unchanged. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 5 ++-- llms/openai/options_test.go | 54 +++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 42f5bf0bd..f4dff135b 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -259,8 +259,9 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) } // set temperature to 1.0 for reasoning models, unless reasoning is explicitly - // disabled (the model then runs as a plain completion honoring the caller's temp) - if reasoning.IsReasoningModel(opts.GetModel()) && !opts.Reasoning.IsDisabled() { + // disabled (the model then runs as a plain completion honoring the caller's temp). + // A caller who set no temperature keeps none: the model's own default is 1.0. + if opts.Temperature != nil && reasoning.IsReasoningModel(o.effectiveModel(opts)) && !opts.Reasoning.IsDisabled() { temperature := 1.0 req.Temperature = &temperature } diff --git a/llms/openai/options_test.go b/llms/openai/options_test.go index e8ac491e5..4476971b1 100644 --- a/llms/openai/options_test.go +++ b/llms/openai/options_test.go @@ -407,3 +407,57 @@ func TestZeroConfigReasoningDisabledUsesDefaultModel(t *testing.T) { openaiclient.DefaultChatModel, body) } } + +func TestZeroConfigTemperaturePinUsesDefaultModel(t *testing.T) { + // Ensure no ambient model is configured so the client falls through to the + // package default (cannot use t.Parallel with t.Setenv). + t.Setenv("OPENAI_MODEL", "") + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + capture := func(t *testing.T, opts ...Option) string { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + defer srv.Close() + + llm, err := New(append([]Option{WithBaseURL(srv.URL), WithToken("test")}, opts...)...) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTemperature(0.2)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + // The package default is a reasoning model, so the pin must apply even though + // no model was named on the call or the client. + zeroConfig := capture(t) + if !strings.Contains(zeroConfig, `"temperature":1`) { + t.Errorf("zero-config must pin temperature for %s, got body: %s", + openaiclient.DefaultChatModel, zeroConfig) + } + + // Naming the same model explicitly cannot change the outcome. + explicit := capture(t, WithModel(openaiclient.DefaultChatModel)) + if !strings.Contains(explicit, `"temperature":1`) { + t.Errorf("explicit %s must pin temperature too, got body: %s", + openaiclient.DefaultChatModel, explicit) + } + + // A non-reasoning model keeps the caller's temperature. + plain := capture(t, WithModel("gpt-4.1-mini")) + if !strings.Contains(plain, `"temperature":0.2`) { + t.Errorf("a non-reasoning model must keep the caller temperature, got body: %s", plain) + } +} From 7b38e236c22e89f5b149c2402a2937d8a813f520 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 00:57:22 +0700 Subject: [PATCH 021/618] fix(bedrock): derive Converse effort from the request's max tokens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The adaptive closure called GetEffort(0), which substitutes an internal 8192, while the legacy door passes the real limit — so identical options produced different efforts on the two doors: a 3000-token budget against a 32000-token request answered high on Converse and low on legacy. The budget closure already read input.MaxTokens; hoisting that read above both makes the doors agree. PAGI-125 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 10 ++--- .../bedrockclient_converse_test.go | 41 +++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 595b953f2..0f3e8d813 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -152,8 +152,12 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti switch input.ReasoningConfig.ResolveMode() { case llms.ReasoningOn: additionalModelFields := converseAdditionalModelRequestFields{} + maxTokens := 0 // Use 0 to let it use default maxTokens + if input.MaxTokens != nil { + maxTokens = *input.MaxTokens + } setAdaptive := func() { - effort := input.ReasoningConfig.GetEffort(0) + effort := input.ReasoningConfig.GetEffort(maxTokens) additionalModelFields.Thinking = &converseThinkingPayload{Type: "adaptive", Display: "summarized"} additionalModelFields.OutputConfig = &converseOutputConfig{Effort: string(effort)} // Adaptive models reject sampling params. @@ -161,10 +165,6 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti inferenceConfig.TopP = nil } setBudget := func() { - maxTokens := 0 // Use 0 to let it use default maxTokens - if input.MaxTokens != nil { - maxTokens = *input.MaxTokens - } if tokens := input.ReasoningConfig.GetTokens(maxTokens); tokens > 0 { additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} // Budget thinking requires temperature=1.0 and rejects top_p. diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 1d6ca780b..60d65b991 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -992,3 +992,44 @@ func TestConvertMessages_MultipleToolCallVariants(t *testing.T) { }) } } + +func TestConverseClient_AdaptiveEffortDerivedFromMaxTokens(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + // An adaptive-only model with a token budget but no explicit effort. + input := &ConverseInput{ + ModelID: "us.anthropic.claude-sonnet-5", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(32000), + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 3000}, + } + + _, err := client.CreateCompletionConverse(t.Context(), input) + assert.NoError(t, err) + + if !assert.NotNil(t, capturedInput.AdditionalModelRequestFields) { + return + } + raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() + assert.NoError(t, err) + var fields map[string]any + assert.NoError(t, json.Unmarshal(raw, &fields)) + + outputConfig, _ := fields["output_config"].(map[string]any) + assert.Equal(t, string(llms.ReasoningLow), outputConfig["effort"], + "3000 of 32000 max tokens is a low effort; deriving from a hardcoded 0 would say high") +} From f40dfe0847c5c8a23b2960839ab87cac3ef61dcd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 00:59:05 +0700 Subject: [PATCH 022/618] fix(vertex): surface an aborted stream instead of reporting success A StreamingFunc that returned an error broke the loop and dropped the error on the floor, so GenerateContent answered (partial response, nil) and the deferred callback wrapper reported HandleLLMGenerateContentEnd on a call that had failed. The googleai twin already returns the pair; its exported entry point needed the same fix and got it in 14bed4b9. Both halves are here: the iterator now carries the callback error out, and GenerateContent returns the accumulated response alongside it rather than discarding it. No hermetic test: the streaming iterator is a gRPC-backed struct of the pinned vertexai SDK with unexported fields, and the client cannot be built without GCP credentials, so this path is reachable only from the credentialed integration tests. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/vertex.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 95804b981..d2d722832 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -141,7 +141,7 @@ func (g *Vertex) GenerateContent( response, err = generateFromMessages(ctx, model, messages, &opts) } if err != nil { - return nil, err + return response, err } // When structured output was requested, validate each normal-final candidate @@ -368,6 +368,7 @@ func convertAndStreamFromIterator( candidate := &genai.Candidate{ Content: &genai.Content{}, } + var streamErr error DoStream: for { resp, err := iter.Next() @@ -390,13 +391,18 @@ DoStream: for _, part := range respCandidate.Content.Parts { if text, ok := part.(genai.Text); ok { if err := streaming.CallWithText(ctx, opts.StreamingFunc, string(text)); err != nil { + streamErr = err break DoStream } } } } mresp := iter.MergedResponse() - return convertCandidates([]*genai.Candidate{candidate}, mresp.UsageMetadata) + resp, err := convertCandidates([]*genai.Candidate{candidate}, mresp.UsageMetadata) + if err != nil { + return nil, err + } + return resp, streamErr } // mergeStreamCandidate folds one streamed candidate into the accumulator. It From 32e4f8c028fe4ec7f977f2b8cedf3109cc9ad465 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 01:07:25 +0700 Subject: [PATCH 023/618] fix(bedrock): send the effort Opus 4.5 accepts alongside its budget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both Bedrock doors wrote output_config only from the adaptive closure, so a budget-only generation never carried an effort — and Opus 4.5 is the one generation that takes both. The direct Anthropic path already consults ClaudeSupportsEffortWithBudget for exactly this, and the Bedrock README documents the behaviour the code was missing. PAGI-125 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 4 ++ .../bedrockclient_converse_test.go | 42 +++++++++++++++++++ .../bedrockclient/provider_anthropic.go | 3 ++ .../provider_anthropic_reasoning_test.go | 20 ++++++++- 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 0f3e8d813..25aef0e9c 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -167,6 +167,10 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti setBudget := func() { if tokens := input.ReasoningConfig.GetTokens(maxTokens); tokens > 0 { additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} + if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID) { + effort := input.ReasoningConfig.GetEffort(maxTokens) + additionalModelFields.OutputConfig = &converseOutputConfig{Effort: string(effort)} + } // Budget thinking requires temperature=1.0 and rejects top_p. inferenceConfig.Temperature = aws.Float32(1.0) inferenceConfig.TopP = nil diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 60d65b991..3d8b23ab4 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1033,3 +1033,45 @@ func TestConverseClient_AdaptiveEffortDerivedFromMaxTokens(t *testing.T) { assert.Equal(t, string(llms.ReasoningLow), outputConfig["effort"], "3000 of 32000 max tokens is a low effort; deriving from a hardcoded 0 would say high") } + +func TestConverseClient_BudgetEffortForOpus45(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + input := &ConverseInput{ + ModelID: "us.anthropic.claude-opus-4-5-20251101-v1:0", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(8000), + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningHigh}, + } + + _, err := client.CreateCompletionConverse(t.Context(), input) + assert.NoError(t, err) + + if !assert.NotNil(t, capturedInput.AdditionalModelRequestFields) { + return + } + raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() + assert.NoError(t, err) + var fields map[string]any + assert.NoError(t, json.Unmarshal(raw, &fields)) + + thinking, _ := fields["thinking"].(map[string]any) + assert.Equal(t, "enabled", thinking["type"], "Opus 4.5 is budget-only") + outputConfig, _ := fields["output_config"].(map[string]any) + assert.Equal(t, string(llms.ReasoningHigh), outputConfig["effort"], + "Opus 4.5 honors effort alongside a budget; the direct Anthropic path sends it too") +} diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 33f8550f8..d0ea33077 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -722,6 +722,9 @@ func applyAnthropicReasoning( } if tokens := cfg.GetTokens(mt); tokens > 0 { input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} + if reasoning.ClaudeSupportsEffortWithBudget(modelID) { + input.OutputConfig = &anthropicOutputConfig{Effort: string(cfg.GetEffort(mt))} + } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. input.Temperature = 1.0 input.TopP = 0 diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index ef57f695c..d9f991258 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -89,6 +89,24 @@ func TestApplyAnthropicReasoning_AdaptiveEmptyEffortDefaultsToHigh(t *testing.T) assert.Equal(t, "high", input.OutputConfig.Effort) } +func TestApplyAnthropicReasoning_BudgetEffortForOpus45(t *testing.T) { + t.Parallel() + + input := anthropicTextGenerationInput{MaxTokens: 8000} + applyAnthropicReasoning(&input, + &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningHigh}, + "us.anthropic.claude-opus-4-5-20251101-v1:0", 8000) + + fields := marshalAnthropicInput(t, input) + + thinking, _ := fields["thinking"].(map[string]any) + assert.Equal(t, "enabled", thinking["type"], "Opus 4.5 is budget-only") + + outputConfig, _ := fields["output_config"].(map[string]any) + assert.Equal(t, string(llms.ReasoningHigh), outputConfig["effort"], + "Opus 4.5 honors effort alongside a budget; the direct Anthropic path sends it too") +} + func TestApplyAnthropicReasoning_Budget(t *testing.T) { t.Parallel() @@ -111,7 +129,7 @@ func TestApplyAnthropicReasoning_Budget(t *testing.T) { assert.False(t, hasDisplay, "budget thinking has no display field") _, hasOutputConfig := fields["output_config"] - assert.False(t, hasOutputConfig, "budget thinking has no output_config") + assert.False(t, hasOutputConfig, "Opus 4.6 does not take an effort alongside a budget") // Budget thinking pins temperature to 1.0 and drops top_p/top_k — the API // rejects temperature != 1 and top_p/top_k with thinking enabled. From a77e8f3eb56323f0d46398f773d5181d2fc069f7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 01:24:20 +0700 Subject: [PATCH 024/618] refactor(reasoning): keep one table of the Claude effort levels The per-generation effort sets lived in the UI-hint package, where the wire paths cannot reach them, so any wire-side use would have had to copy the table. Move it next to the capability tables the wire already reads and have the hint call it. Behaviour is unchanged; the sets are identical. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 19 ++++++++++++++++++- llms/reasoning_support.go | 18 ++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 86e3d23dc..cd36fe9d8 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -1,6 +1,9 @@ package reasoning -import "strings" +import ( + "slices" + "strings" +) // ClaudeReasoningKind classifies how a Claude model accepts extended thinking. // It is the single source of truth for adaptive-vs-budget thinking and whether @@ -96,6 +99,20 @@ func ClaudeThinkingDefaultsOn(model string) bool { return containsAny(strings.ToLower(model), defaultOnClaude) } +// claudeEffortsByKind lists the effort levels each generation accepts. The sets +// are not nested: the dual generation takes max but not xhigh. +var claudeEffortsByKind = map[ClaudeReasoningKind][]string{ + ClaudeReasoningAdaptiveOnly: {"low", "medium", "high", "xhigh", "max"}, + ClaudeReasoningAdaptiveAndBudget: {"low", "medium", "high", "max"}, + ClaudeReasoningBudgetOnly: {"low", "medium", "high"}, +} + +// ClaudeEffortsFor returns the effort levels the model's generation accepts, or +// nil for a model this package does not classify. +func ClaudeEffortsFor(model string) []string { + return slices.Clone(claudeEffortsByKind[ClaudeReasoningKindFor(model)]) +} + // budgetEffortClaude are budget-thinking models that also accept an effort // output_config alongside manual thinking (introduced with Opus 4.5). Newer // generations use adaptive thinking, where effort is always available. diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 5c202281e..508e7e086 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -113,7 +113,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { // always on, hence not disablable, on Bedrock). CannotDisable: claudeCannotDisable(model, p), RejectsSampling: reasoning.ClaudeRejectsSampling(model), - Efforts: claudeEfforts(reasoning.ClaudeReasoningKindFor(model)), + Efforts: toReasoningEfforts(reasoning.ClaudeEffortsFor(model)), Mechanism: claudeMechanism(reasoning.ClaudeReasoningKindFor(model)), DefaultOn: boolPtr(reasoning.ClaudeThinkingDefaultsOn(model)), } @@ -153,6 +153,9 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { // toReasoningEfforts converts the resolver's raw effort strings to the public // ReasoningEffort type for UI hints. func toReasoningEfforts(efforts []string) []ReasoningEffort { + if len(efforts) == 0 { + return nil + } out := make([]ReasoningEffort, len(efforts)) for i, e := range efforts { out[i] = ReasoningEffort(e) @@ -172,16 +175,3 @@ func claudeMechanism(kind reasoning.ClaudeReasoningKind) ReasoningMechanism { return ReasoningMechanismUnknown } } - -func claudeEfforts(kind reasoning.ClaudeReasoningKind) []ReasoningEffort { - switch kind { - case reasoning.ClaudeReasoningAdaptiveOnly: - return []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh, ReasoningXHigh, ReasoningMax} - case reasoning.ClaudeReasoningAdaptiveAndBudget: - return []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh, ReasoningMax} - case reasoning.ClaudeReasoningBudgetOnly: - return []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh} - default: - return nil - } -} From 00e0c2a899b306d8b45ecb39b43b717484cc65af Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:04:40 +0700 Subject: [PATCH 025/618] chore(llms): cut comments that restate the code beneath them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The branch accumulated comments that narrate what the next line already says, defend an implementation choice, or repeat a fact something else already guarantees: the provider split in claudeCannotDisable is pinned by reasoning_support_test.go, and t.Setenv panics on its own if a test later adds t.Parallel. One comment did carry a fact nothing checked — that the Claude effort sets are not nested, so the dual generation takes max but not xhigh. That one becomes a test. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 2 -- .../bedrockclient_converse_test.go | 1 - llms/googleai/googleai.go | 1 - llms/googleai/googleai_core_unit_test.go | 1 - llms/googleai/option.go | 4 +-- llms/googleai/vertex/structured_output.go | 3 +-- llms/googleai/vertex/vertex.go | 3 +-- llms/ollama/ollama_thinking_test.go | 1 - .../internal/openaiclient/completions.go | 2 -- llms/openai/openaillm.go | 4 +-- llms/openai/options_test.go | 8 ------ llms/reasoning/claude_capability.go | 3 +-- llms/reasoning/claude_capability_test.go | 25 ++++++++++++++++++- llms/reasoning_support.go | 2 -- 14 files changed, 30 insertions(+), 30 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index f97e28228..d6173fc21 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1002,8 +1002,6 @@ func TestAnthropic_InterleavedThinkingBetaHeader(t *testing.T) { }) } -// captureAssistantReplay returns the content blocks the adapter built for the -// assistant turn of the replayed history. func captureAssistantReplay(t *testing.T, parts []llms.ContentPart) []any { t.Helper() diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 3d8b23ab4..30df9020f 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1010,7 +1010,6 @@ func TestConverseClient_AdaptiveEffortDerivedFromMaxTokens(t *testing.T) { }, }, nil) - // An adaptive-only model with a token budget but no explicit effort. input := &ConverseInput{ ModelID: "us.anthropic.claude-sonnet-5", Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 8b5e27396..971676cc6 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1064,7 +1064,6 @@ func convertIntToFloat32Pointer(i *int) *float32 { // resolveTemperature returns the temperature to use when the caller left it // unset. Gemini 3 defaults to 1.0, the value Google recommends (lower values can // cause looping and degraded reasoning); other models keep the SDK-wide default. -// A default the caller configured explicitly wins over the model recommendation. func resolveTemperature(model string, clientOpts Options) float64 { if !clientOpts.temperatureFromCaller && reasoning.GeminiUsesThinkingLevel(model) { return 1.0 diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 9bcceedfc..ca72c49d8 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1060,7 +1060,6 @@ func TestResolveTemperature(t *testing.T) { assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-flash", sdkDefault)) assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-pro", sdkDefault)) - // A temperature the caller configured wins on every model. configured := DefaultOptions() WithDefaultTemperature(0.2)(&configured) assert.Equal(t, 0.2, resolveTemperature("gemini-3.1-pro", configured)) diff --git a/llms/googleai/option.go b/llms/googleai/option.go index fc9a485cf..2c1760a9a 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -29,8 +29,8 @@ type Options struct { ClientOptions []option.ClientOption - // temperatureFromCaller is set by WithDefaultTemperature, not by writing - // DefaultTemperature directly. + // Set by WithDefaultTemperature; writing DefaultTemperature directly leaves + // it false and lets the Gemini 3 recommendation win. temperatureFromCaller bool } diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index b7c02f8c5..e4a84e4cc 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -56,8 +56,7 @@ func applyVertexResponseFormat(model *genai.GenerativeModel, opts *llms.CallOpti } // validateVertexStructuredOutput validates each normal-final (FinishReasonStop) -// candidate against the original schema. Other finish reasons, and tool turns, -// keep their prior semantics and are not validated as final JSON. +// candidate against the original schema. func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentResponse) error { so := opts.StructuredOutput if so == nil || resp == nil { diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index d2d722832..007b75945 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -78,8 +78,7 @@ func (g *Vertex) GenerateContent( opt(&opts) } - // The pinned vertexai SDK has no thinking config, so an explicit disable can - // never reach the wire. + // The pinned vertexai SDK has no thinking config: a disable cannot reach the wire. if opts.Reasoning.ResolveMode() == llms.ReasoningOff { return nil, &reasoning.ErrReasoningOffUnsupported{Model: opts.GetModel()} } diff --git a/llms/ollama/ollama_thinking_test.go b/llms/ollama/ollama_thinking_test.go index e4e7e4dc2..c0e2a8c72 100644 --- a/llms/ollama/ollama_thinking_test.go +++ b/llms/ollama/ollama_thinking_test.go @@ -12,7 +12,6 @@ import ( "github.com/vxcontrol/langchaingo/llms/streaming" ) -// newThinkingServerClient serves the given lines as an NDJSON chat response. func newThinkingServerClient(t *testing.T, lines ...string) *LLM { t.Helper() diff --git a/llms/openai/internal/openaiclient/completions.go b/llms/openai/internal/openaiclient/completions.go index e1b353706..26537b5a6 100644 --- a/llms/openai/internal/openaiclient/completions.go +++ b/llms/openai/internal/openaiclient/completions.go @@ -62,8 +62,6 @@ type errorMessage struct { const maxErrorBodyBytes = 2048 -// statusError turns a non-200 response into an error carrying the provider's -// own explanation, quoting the raw body when it is not OpenAI-shaped. func statusError(statusCode int, body io.Reader) error { msg := fmt.Sprintf("API returned unexpected status code: %d", statusCode) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index f4dff135b..5c41ca221 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -258,9 +258,7 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.SetResponseFormat(ResponseFormatJSON) } - // set temperature to 1.0 for reasoning models, unless reasoning is explicitly - // disabled (the model then runs as a plain completion honoring the caller's temp). - // A caller who set no temperature keeps none: the model's own default is 1.0. + // set temperature to 1.0 for reasoning models, unless reasoning is explicitly disabled if opts.Temperature != nil && reasoning.IsReasoningModel(o.effectiveModel(opts)) && !opts.Reasoning.IsDisabled() { temperature := 1.0 req.Temperature = &temperature diff --git a/llms/openai/options_test.go b/llms/openai/options_test.go index 4476971b1..52e4acd7f 100644 --- a/llms/openai/options_test.go +++ b/llms/openai/options_test.go @@ -373,8 +373,6 @@ func TestQwenSamplingReachesWireVerbatim(t *testing.T) { //nolint:funlen // thre // default the client substitutes on the wire — not off an empty model. Otherwise // WithReasoningDisabled() on a zero-config client is a silent no-op. func TestZeroConfigReasoningDisabledUsesDefaultModel(t *testing.T) { - // Ensure no ambient model is configured so the client falls through to the - // package default (cannot use t.Parallel with t.Setenv). t.Setenv("OPENAI_MODEL", "") const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + @@ -409,8 +407,6 @@ func TestZeroConfigReasoningDisabledUsesDefaultModel(t *testing.T) { } func TestZeroConfigTemperaturePinUsesDefaultModel(t *testing.T) { - // Ensure no ambient model is configured so the client falls through to the - // package default (cannot use t.Parallel with t.Setenv). t.Setenv("OPENAI_MODEL", "") const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + @@ -440,22 +436,18 @@ func TestZeroConfigTemperaturePinUsesDefaultModel(t *testing.T) { return body } - // The package default is a reasoning model, so the pin must apply even though - // no model was named on the call or the client. zeroConfig := capture(t) if !strings.Contains(zeroConfig, `"temperature":1`) { t.Errorf("zero-config must pin temperature for %s, got body: %s", openaiclient.DefaultChatModel, zeroConfig) } - // Naming the same model explicitly cannot change the outcome. explicit := capture(t, WithModel(openaiclient.DefaultChatModel)) if !strings.Contains(explicit, `"temperature":1`) { t.Errorf("explicit %s must pin temperature too, got body: %s", openaiclient.DefaultChatModel, explicit) } - // A non-reasoning model keeps the caller's temperature. plain := capture(t, WithModel("gpt-4.1-mini")) if !strings.Contains(plain, `"temperature":0.2`) { t.Errorf("a non-reasoning model must keep the caller temperature, got body: %s", plain) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index cd36fe9d8..a19fef2f5 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -99,8 +99,7 @@ func ClaudeThinkingDefaultsOn(model string) bool { return containsAny(strings.ToLower(model), defaultOnClaude) } -// claudeEffortsByKind lists the effort levels each generation accepts. The sets -// are not nested: the dual generation takes max but not xhigh. +// claudeEffortsByKind lists the effort levels each generation accepts. var claudeEffortsByKind = map[ClaudeReasoningKind][]string{ ClaudeReasoningAdaptiveOnly: {"low", "medium", "high", "xhigh", "max"}, ClaudeReasoningAdaptiveAndBudget: {"low", "medium", "high", "max"}, diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index d6272818f..811878473 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -1,6 +1,9 @@ package reasoning -import "testing" +import ( + "slices" + "testing" +) func TestClaudeReasoningKindFor(t *testing.T) { t.Parallel() @@ -38,6 +41,26 @@ func TestClaudeReasoningKindFor(t *testing.T) { } } +func TestClaudeEffortsFor(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want []string + }{ + {"claude-opus-5", []string{"low", "medium", "high", "xhigh", "max"}}, + {"us.anthropic.claude-opus-4-7", []string{"low", "medium", "high", "xhigh", "max"}}, + {"claude-opus-4-6", []string{"low", "medium", "high", "max"}}, + {"claude-sonnet-4-6", []string{"low", "medium", "high", "max"}}, + {"claude-opus-4-5-20251101", []string{"low", "medium", "high"}}, + {"gpt-5.5", nil}, + } + for _, tc := range cases { + if got := ClaudeEffortsFor(tc.model); !slices.Equal(got, tc.want) { + t.Errorf("ClaudeEffortsFor(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + func TestResolveClaudeAdaptive(t *testing.T) { t.Parallel() // (model, adaptivePreferred) -> adaptive sent. The invariant: a diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 508e7e086..49974ad96 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -80,8 +80,6 @@ func lookupReasoningOverride(model string) (ReasoningSupport, bool) { return ReasoningSupport{}, false } -// claudeCannotDisable reports whether thinking stays on whatever the caller asks. -// Only the Anthropic adapter emits thinking:{type:"disabled"}. func claudeCannotDisable(model string, p reasoning.Provider) bool { switch reasoning.ResolveOff(model, p) { case reasoning.OffUnsupported: From b1e9b02711b583af1a2f24e3278fa8c3f8c0035e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:08:15 +0700 Subject: [PATCH 026/618] fix(anthropic): replay thinking blocks in the shape the API returns them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit display: "omitted" is the default on Fable 5, Mythos 5, Opus 5, Sonnet 5, Opus 4.8 and Opus 4.7: a thinking block arrives with an empty thinking field and a signature carrying the encrypted reasoning. Reading that as "no reasoning" dropped the block on the response path and refused to emit it on replay, so the signature never survived a turn. The same loop also stopped after the first reasoning-bearing part, which partially drops the block sequence of an interleaved-thinking turn — the API requires that sequence to arrive complete and rejects a pruned one. Both paths now treat a bare signature as reasoning and every block of the turn is replayed. The 400 that the earlier fix chased came from the omitempty tag on the required thinking field, removed in 31d03d38 and now held by a test that asserts the field is on the wire. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 52 ++++++++++++++++++++--- llms/anthropic/anthropicllm.go | 8 +--- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index d6173fc21..2c9309608 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1049,10 +1049,39 @@ func thinkingBlocks(blocks []any) []map[string]any { return out } +func TestAnthropic_OmittedThinkingResponseKeepsSignature(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"m","type":"message","role":"assistant","model":"claude-sonnet-5",` + + `"content":[{"type":"thinking","thinking":"","signature":"sig-only"},{"type":"text","text":"ok"}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-sonnet-5"), + ) + require.NoError(t, err) + + resp, err := llm.GenerateContent(t.Context(), []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, + }) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + require.NotNil(t, resp.Choices[0].Reasoning, + "a block with an empty thinking field still carries the signature the next turn must replay") + require.Equal(t, "sig-only", string(resp.Choices[0].Reasoning.Signature)) + require.Empty(t, resp.Choices[0].Reasoning.Content) +} + func TestAnthropic_ThinkingReplayNeverOmitsRequiredField(t *testing.T) { t.Parallel() - t.Run("signature without text emits no thinking block", func(t *testing.T) { + t.Run("a block carrying only a signature keeps the required field", func(t *testing.T) { t.Parallel() blocks := captureAssistantReplay(t, []llms.ContentPart{ @@ -1062,11 +1091,15 @@ func TestAnthropic_ThinkingReplayNeverOmitsRequiredField(t *testing.T) { }, }) - require.Empty(t, thinkingBlocks(blocks), - "a thinking block without the required thinking field must not be sent") + emitted := thinkingBlocks(blocks) + require.Len(t, emitted, 1) + require.Contains(t, emitted[0], "thinking", + "the thinking field is required even when the model returned no text for it") + require.Equal(t, "", emitted[0]["thinking"]) + require.Equal(t, "sig-only", emitted[0]["signature"]) }) - t.Run("text-bearing part is used when an earlier part carries only a signature", func(t *testing.T) { + t.Run("every thinking block of the turn is replayed in order", func(t *testing.T) { t.Parallel() blocks := captureAssistantReplay(t, []llms.ContentPart{ @@ -1080,8 +1113,15 @@ func TestAnthropic_ThinkingReplayNeverOmitsRequiredField(t *testing.T) { }) emitted := thinkingBlocks(blocks) - require.Len(t, emitted, 1) - require.Equal(t, "real thinking", emitted[0]["thinking"]) + require.Len(t, emitted, 2) + require.Equal(t, "", emitted[0]["thinking"]) + require.Equal(t, "sig-only", emitted[0]["signature"]) + require.Equal(t, "real thinking", emitted[1]["thinking"]) + + require.Len(t, blocks, 3) + last, ok := blocks[2].(map[string]any) + require.True(t, ok) + require.Equal(t, "text", last["type"]) }) t.Run("thinking text always reaches the wire", func(t *testing.T) { diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 3a1998ae9..4c2f40b91 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -367,7 +367,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // Create reasoning object var contentReasoning *reasoning.ContentReasoning - if reasoningContent.Len() > 0 { + if reasoningContent.Len() > 0 || len(signature) > 0 { contentReasoning = &reasoning.ContentReasoning{ Content: reasoningContent.String(), Signature: signature, @@ -802,12 +802,9 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro Content: []anthropicclient.Content{}, } - // The API requires the thinking block to lead the assistant turn, before any - // text or tool_use. Emit it first regardless of where the caller placed the - // reasoning-bearing part among msg.Parts. for _, part := range msg.Parts { p, ok := part.(llms.TextContent) - if !ok || p.Reasoning == nil || len(p.Reasoning.Content) == 0 { + if !ok || p.Reasoning.IsEmpty() { continue } thinkingBlock := &anthropicclient.ThinkingContent{ @@ -818,7 +815,6 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro thinkingBlock.Signature = string(p.Reasoning.Signature) } message.Content = append(message.Content, thinkingBlock) - break // one thinking block per assistant turn } for _, part := range msg.Parts { From e0eb9434dc57d1da1e97ecd507331b4b66dd1df9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:10:32 +0700 Subject: [PATCH 027/618] feat(reasoning): classify Claude Mythos Preview The model was in no table, so it took the unknown path: sampling params were sent, though it rejects a non-default temperature, top_p or top_k on every request; an explicit disable was forwarded, though it is always-on and answers 400; and the hint reported no effort levels for a model that accepts four. It also breaks the assumption the sampling rule rested on. Mythos Preview runs both thinking modes yet still rejects sampling, so that rejection is now its own model list instead of a property derived from the adaptive-only tier. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 33 +++++++++++++++--------- llms/reasoning/claude_capability_test.go | 23 +++++++++++++++++ 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index a19fef2f5..ea4430ddb 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -19,12 +19,11 @@ const ( // behavior so an unclassified model never regresses. ClaudeReasoningUnknown ClaudeReasoningKind = iota // ClaudeReasoningAdaptiveOnly is the newest generation (Opus 4.7/4.8/5, - // Sonnet 5, Fable 5, Mythos 5): it accepts thinking.type=adaptive + - // output_config only, and rejects budget_tokens and temperature/top_p with a 400. + // Sonnet 5, Fable 5, Mythos 5): it accepts thinking.type=adaptive and + // rejects budget_tokens with a 400. ClaudeReasoningAdaptiveOnly - // ClaudeReasoningAdaptiveAndBudget is the transitional generation (Opus 4.6, - // Sonnet 4.6): it accepts both adaptive and budget thinking and permits - // sampling params. + // ClaudeReasoningAdaptiveAndBudget accepts both adaptive and budget thinking + // (Opus 4.6, Sonnet 4.6, Mythos Preview). ClaudeReasoningAdaptiveAndBudget // ClaudeReasoningBudgetOnly is the extended-thinking generation before // adaptive existed (Opus 4.5, Sonnet 4.5, Haiku 4.5): it accepts @@ -42,7 +41,7 @@ var ( "claude-sonnet-5", "claude-fable-5", "claude-mythos-5", } dualClaude = []string{ - "claude-opus-4-6", "claude-sonnet-4-6", + "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", } budgetOnlyClaude = []string{ "claude-opus-4-5", @@ -83,8 +82,11 @@ func ClaudeSupportsThinking(model string) bool { // with effort xhigh/max on Opus 5, a constraint this package does not model // because this SDK never sends effort alongside a disable request). var ( - alwaysOnClaude = []string{"claude-fable-5", "claude-mythos-5"} - defaultOnClaude = []string{"claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-mythos-5"} + alwaysOnClaude = []string{"claude-fable-5", "claude-mythos-5", "claude-mythos-preview"} + defaultOnClaude = []string{ + "claude-opus-5", "claude-sonnet-5", + "claude-fable-5", "claude-mythos-5", "claude-mythos-preview", + } ) // ClaudeThinkingAlwaysOn reports whether the model's thinking cannot be disabled @@ -115,7 +117,7 @@ func ClaudeEffortsFor(model string) []string { // budgetEffortClaude are budget-thinking models that also accept an effort // output_config alongside manual thinking (introduced with Opus 4.5). Newer // generations use adaptive thinking, where effort is always available. -var budgetEffortClaude = []string{"claude-opus-4-5"} +var budgetEffortClaude = []string{"claude-opus-4-5", "claude-mythos-preview"} // ClaudeSupportsEffortWithBudget reports whether the model accepts // output_config.effort together with manual (budget) thinking, so the effort is @@ -191,11 +193,18 @@ func ClaudePredatesAdaptive(model string) bool { return containsAny(strings.ToLower(model), preAdaptiveClaude) } +// rejectsSamplingClaude models reject a non-default temperature, top_p or +// top_k on every request, whether or not thinking is requested. +var rejectsSamplingClaude = []string{ + "claude-fable-5", "claude-mythos-5", "claude-mythos-preview", + "claude-opus-5", "claude-opus-4-8", "claude-opus-4-7", "claude-sonnet-5", +} + // ClaudeRejectsSampling reports whether the model rejects temperature/top_p -// outright (true only for the adaptive-only generation), so sampling params -// must be dropped even when no thinking is requested. +// outright, so sampling params must be dropped even when no thinking is +// requested. func ClaudeRejectsSampling(model string) bool { - return ClaudeReasoningKindFor(model) == ClaudeReasoningAdaptiveOnly + return containsAny(strings.ToLower(model), rejectsSamplingClaude) } func containsAny(s string, subs []string) bool { diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 811878473..9662be19e 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -24,6 +24,7 @@ func TestClaudeReasoningKindFor(t *testing.T) { // Dual (T2). {"claude-opus-4-6", ClaudeReasoningAdaptiveAndBudget}, {"us.anthropic.claude-sonnet-4-6", ClaudeReasoningAdaptiveAndBudget}, + {"claude-mythos-preview", ClaudeReasoningAdaptiveAndBudget}, // Budget-only (T3). {"claude-opus-4-5-20251101", ClaudeReasoningBudgetOnly}, {"claude-sonnet-4-5-20250929", ClaudeReasoningBudgetOnly}, @@ -51,6 +52,7 @@ func TestClaudeEffortsFor(t *testing.T) { {"us.anthropic.claude-opus-4-7", []string{"low", "medium", "high", "xhigh", "max"}}, {"claude-opus-4-6", []string{"low", "medium", "high", "max"}}, {"claude-sonnet-4-6", []string{"low", "medium", "high", "max"}}, + {"claude-mythos-preview", []string{"low", "medium", "high", "max"}}, {"claude-opus-4-5-20251101", []string{"low", "medium", "high"}}, {"gpt-5.5", nil}, } @@ -133,6 +135,7 @@ func TestClaudeThinkingDefaultAndAlwaysOn(t *testing.T) { {"claude-opus-4-8", false, false, "defaults off"}, {"claude-fable-5", true, true, "always on, cannot disable"}, {"claude-mythos-5", true, true, "always on, cannot disable"}, + {"claude-mythos-preview", true, true, "always on, cannot disable"}, } for _, tc := range cases { if got := ClaudeThinkingDefaultsOn(tc.model); got != tc.defaultOn { @@ -153,6 +156,7 @@ func TestClaudeRejectsSampling(t *testing.T) { {"claude-sonnet-5", true}, {"claude-opus-5", true}, {"us.anthropic.claude-opus-4-8", true}, + {"claude-mythos-preview", true}, {"claude-opus-4-6", false}, {"claude-sonnet-4-5", false}, {"claude-3-5-haiku", false}, @@ -165,6 +169,25 @@ func TestClaudeRejectsSampling(t *testing.T) { } } +func TestClaudeSupportsEffortWithBudget(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + }{ + {"claude-opus-4-5-20251101", true}, + {"claude-mythos-preview", true}, + {"claude-sonnet-4-5", false}, + {"claude-haiku-4-5", false}, + {"claude-sonnet-5", false}, + } + for _, tc := range cases { + if got := ClaudeSupportsEffortWithBudget(tc.model); got != tc.want { + t.Errorf("ClaudeSupportsEffortWithBudget(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + func TestClaudePredatesAdaptive(t *testing.T) { t.Parallel() cases := []struct { From 272ae0b339e023daec4ab90c800f6406dcfd0cf9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:13:58 +0700 Subject: [PATCH 028/618] fix(anthropic): reject a forced tool choice under manual thinking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Manual thinking accepts tool_choice "auto" or "none" only: "any" and a named tool force tool use, which the mode does not allow. The adapter forwarded the caller's choice unchanged, so the pair reached the API and came back 400 — and the caller need not have picked it, since a model that runs manual thinking only (the 4.5 generation) turns an adaptive request into a budget one, and adaptive does allow forced tool use. The request now fails locally with the model named, before a round trip. Bedrock is unaffected: its Converse door pins tool choice to auto. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 81 +++++++++++++++++++++++ llms/anthropic/anthropicllm.go | 20 ++++++ llms/anthropic/errors.go | 12 ++++ 3 files changed, 113 insertions(+) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index 2c9309608..b53c5bd1e 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -8,6 +8,7 @@ import ( "net/http/httptest" "os" "strings" + "sync/atomic" "testing" "github.com/stretchr/testify/assert" @@ -1049,6 +1050,86 @@ func thinkingBlocks(blocks []any) []map[string]any { return out } +func TestAnthropic_ForcedToolChoiceWithBudgetThinking(t *testing.T) { + t.Parallel() + + tools := []llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + }} + messages := []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("weather?")}}, + } + + newLLM := func(t *testing.T, model string) (*anthropic.LLM, *atomic.Int32) { + t.Helper() + var hits atomic.Int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + hits.Add(1) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"m","type":"message","role":"assistant","model":"` + model + `",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel(model), + ) + require.NoError(t, err) + return llm, &hits + } + + t.Run("budget thinking rejects a forced tool choice without a round trip", func(t *testing.T) { + t.Parallel() + + llm, hits := newLLM(t, "claude-sonnet-4-5") + _, err := llm.GenerateContent(t.Context(), messages, + llms.WithReasoning(llms.ReasoningMedium, 0), + llms.WithTools(tools), + llms.WithToolChoice(map[string]any{"type": "any"}), + ) + + var conflict *anthropic.ErrForcedToolUseWithThinking + require.ErrorAs(t, err, &conflict) + require.Equal(t, "claude-sonnet-4-5", conflict.Model) + require.Zero(t, hits.Load(), "the request must not be sent") + }) + + t.Run("adaptive thinking allows a forced tool choice", func(t *testing.T) { + t.Parallel() + + llm, hits := newLLM(t, "claude-sonnet-5") + _, err := llm.GenerateContent(t.Context(), messages, + llms.WithReasoning(llms.ReasoningMedium, 0), + llms.WithTools(tools), + llms.WithToolChoice(map[string]any{"type": "tool", "name": "get_weather"}), + ) + + require.NoError(t, err) + require.Equal(t, int32(1), hits.Load()) + }) + + t.Run("budget thinking allows auto", func(t *testing.T) { + t.Parallel() + + llm, hits := newLLM(t, "claude-sonnet-4-5") + _, err := llm.GenerateContent(t.Context(), messages, + llms.WithReasoning(llms.ReasoningMedium, 0), + llms.WithTools(tools), + llms.WithToolChoice(map[string]any{"type": "auto"}), + ) + + require.NoError(t, err) + require.Equal(t, int32(1), hits.Load()) + }) +} + func TestAnthropic_OmittedThinkingResponseKeepsSignature(t *testing.T) { t.Parallel() diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 4c2f40b91..0b34e6a01 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -227,6 +227,10 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } } + if thinking != nil && thinking.Type == "enabled" && forcesToolUse(opts.ToolChoice) { + return nil, &ErrForcedToolUseWithThinking{Model: model} + } + // Structured output rides in output_config.format, merged with any effort set // above (the two are independent). The schema constrains the final text only. if outputConfig, err = applyAnthropicStructuredOutput(opts, model, messages, outputConfig); err != nil { @@ -796,6 +800,22 @@ func handleHumanMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, e }, nil } +func forcesToolUse(choice any) bool { + forced := func(t string) bool { return t == "any" || t == "tool" } + switch c := choice.(type) { + case string: + return forced(c) + case llms.ToolChoice: + return forced(c.Type) + case *llms.ToolChoice: + return c != nil && forced(c.Type) + case map[string]any: + t, _ := c["type"].(string) + return forced(t) + } + return false +} + func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, error) { message := anthropicclient.ChatMessage{ Role: RoleAssistant, diff --git a/llms/anthropic/errors.go b/llms/anthropic/errors.go index e70a071ab..e0ee8144d 100644 --- a/llms/anthropic/errors.go +++ b/llms/anthropic/errors.go @@ -1,6 +1,7 @@ package anthropic import ( + "fmt" "strings" "github.com/vxcontrol/langchaingo/llms" @@ -78,3 +79,14 @@ func MapError(err error) error { mapper := llms.NewErrorMapper("anthropic") return mapper.Map(err) } + +// ErrForcedToolUseWithThinking reports the documented gap that manual (budget) +// thinking accepts only tool_choice "auto" or "none": forcing a tool with "any" +// or a named tool is rejected. Adaptive thinking has no such limit. +type ErrForcedToolUseWithThinking struct{ Model string } + +func (e *ErrForcedToolUseWithThinking) Error() string { + return fmt.Sprintf( + "anthropic: model %q runs manual thinking, which rejects a forced tool choice; use tool_choice auto or none", + e.Model) +} From fd1f509873fa9665ebb09630177f797bcb542bcc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:31:15 +0700 Subject: [PATCH 029/618] fix(reasoning): keep the effort when a 4.6 model runs budget thinking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Opus 4.6 and Sonnet 4.6 are on the vendor's effort compatibility list and still accept the deprecated budget_tokens mode, and effort works with or without thinking. The set of models that take both named only Opus 4.5 and Mythos Preview, so a caller who explicitly chose budget thinking on a 4.6 model lost the level in silence — on all three doors. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 7 +++---- .../internal/bedrockclient/bedrockclient_converse_test.go | 5 +++-- .../bedrockclient/provider_anthropic_reasoning_test.go | 7 +++---- llms/reasoning/claude_capability.go | 5 ++++- llms/reasoning/claude_capability_test.go | 2 ++ 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index b53c5bd1e..d0ed74f27 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -897,11 +897,10 @@ func TestAnthropic_BudgetThinkingRequest(t *testing.T) { _, hasDisplay := thinking["display"] assert.False(t, hasDisplay, "budget thinking has no display field") - _, hasOutputConfig := payload["output_config"] - assert.False(t, hasOutputConfig, "budget thinking has no output_config") + outputConfig, _ := payload["output_config"].(map[string]any) + assert.Equal(t, "medium", outputConfig["effort"], + "Opus 4.6 accepts an effort alongside its budget") - // Budget thinking pins temperature to 1.0 and drops top_p — the API rejects - // temperature and top_p together. assert.EqualValues(t, 1.0, payload["temperature"]) _, hasTopP := payload["top_p"] assert.False(t, hasTopP, "budget thinking must drop top_p") diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 30df9020f..636f5a407 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -472,8 +472,9 @@ func TestConverseClient_BudgetReasoning(t *testing.T) { assert.True(t, ok && budget > 0, "budget thinking must carry a positive token budget") _, hasDisplay := thinking["display"] assert.False(t, hasDisplay, "budget thinking has no display field") - _, hasOutputConfig := fields["output_config"] - assert.False(t, hasOutputConfig, "budget thinking has no output_config") + outputConfig, _ := fields["output_config"].(map[string]any) + assert.Equal(t, "medium", outputConfig["effort"], + "Opus 4.6 accepts an effort alongside its budget") mockClient.AssertExpectations(t) } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index d9f991258..caa90df7e 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -128,11 +128,10 @@ func TestApplyAnthropicReasoning_Budget(t *testing.T) { _, hasDisplay := thinking["display"] assert.False(t, hasDisplay, "budget thinking has no display field") - _, hasOutputConfig := fields["output_config"] - assert.False(t, hasOutputConfig, "Opus 4.6 does not take an effort alongside a budget") + outputConfig, _ := fields["output_config"].(map[string]any) + assert.Equal(t, "medium", outputConfig["effort"], + "Opus 4.6 accepts an effort alongside its budget") - // Budget thinking pins temperature to 1.0 and drops top_p/top_k — the API - // rejects temperature != 1 and top_p/top_k with thinking enabled. assert.EqualValues(t, 1.0, fields["temperature"]) _, hasTopP := fields["top_p"] assert.False(t, hasTopP, "budget thinking drops top_p") diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index ea4430ddb..5b6562e47 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -117,7 +117,10 @@ func ClaudeEffortsFor(model string) []string { // budgetEffortClaude are budget-thinking models that also accept an effort // output_config alongside manual thinking (introduced with Opus 4.5). Newer // generations use adaptive thinking, where effort is always available. -var budgetEffortClaude = []string{"claude-opus-4-5", "claude-mythos-preview"} +var budgetEffortClaude = []string{ + "claude-opus-4-5", "claude-mythos-preview", + "claude-opus-4-6", "claude-sonnet-4-6", +} // ClaudeSupportsEffortWithBudget reports whether the model accepts // output_config.effort together with manual (budget) thinking, so the effort is diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 9662be19e..9869abf17 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -177,6 +177,8 @@ func TestClaudeSupportsEffortWithBudget(t *testing.T) { }{ {"claude-opus-4-5-20251101", true}, {"claude-mythos-preview", true}, + {"claude-opus-4-6", true}, + {"us.anthropic.claude-sonnet-4-6", true}, {"claude-sonnet-4-5", false}, {"claude-haiku-4-5", false}, {"claude-sonnet-5", false}, From 039540fe2b8e2d35adf65bfb9944e70865fa6dd9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:32:30 +0700 Subject: [PATCH 030/618] chore(llms): drop comments a test already holds, and dangling finding ids MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sampling comment stated a rule the vendor never published — that the API rejects temperature and top_p together — as a general fact; it is documented only for Haiku 4.5 and the retired Opus 4.1, and with extended thinking top_p is allowed between 0.95 and 1. Dropping top_p on the budget path stays as it was, a safe subset; only the wrong explanation goes. The rest either restate an assertion below them or guard a line a test already pins: deleting the Gemini tool-turn guard reddens "a tool turn is not a final answer" in both packages, so the guard needs no prose. The capability tests also carried ids from review documents that live outside the repository, which read like references but resolve to nothing. The labels beside them already say what the rows are. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 4 ---- llms/anthropic/anthropicllm.go | 5 ----- llms/googleai/googleai.go | 1 - llms/googleai/vertex/structured_output.go | 1 - llms/reasoning/claude_capability_test.go | 10 +++++----- 5 files changed, 5 insertions(+), 16 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index d0ed74f27..7b9ebccb2 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -907,8 +907,6 @@ func TestAnthropic_BudgetThinkingRequest(t *testing.T) { assert.EqualValues(t, 4096, payload["max_tokens"]) // max(budget*2, maxTokens) } -// Haiku 4.5 rejects temperature and top_p together; without thinking the SDK must -// send at most one (keeping temperature) rather than both. func TestAnthropic_Haiku45MutuallyExclusiveSampling(t *testing.T) { t.Parallel() @@ -923,8 +921,6 @@ func TestAnthropic_Haiku45MutuallyExclusiveSampling(t *testing.T) { assert.False(t, hasTopP, "Haiku 4.5 must not send top_p together with temperature") } -// Opus 4.5 uses budget thinking but also honors effort, so the budget path must -// carry output_config.effort instead of dropping it. func TestAnthropic_BudgetEffortForOpus45(t *testing.T) { t.Parallel() diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 0b34e6a01..2a690d0aa 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -265,10 +265,6 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } } - // Thinking constrains sampling params: the API rejects temperature and top_p - // together, and requires temperature=1.0 with budget thinking. So pin - // temperature and drop top_p for budget; drop both for adaptive (which - // rejects sampling params outright). temperature, topP, maxTokens := opts.Temperature, opts.TopP, opts.GetMaxTokens() switch { case thinking != nil && thinking.Type == "adaptive": @@ -283,7 +279,6 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag temperature = nil topP = nil case reasoning.ClaudeMutuallyExclusiveSampling(model) && temperature != nil && topP != nil: - // Haiku 4.5 rejects temperature and top_p together; keep temperature. topP = nil } diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 971676cc6..07bb167e4 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -256,7 +256,6 @@ func validateGoogleStructuredOutput(opts *llms.CallOptions, resp *llms.ContentRe } model := opts.GetModel() for i, choice := range resp.Choices { - // Gemini reports a function call as STOP with no text. if choice.StopReason != string(genai.FinishReasonStop) || len(choice.ToolCalls) > 0 { continue } diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index e4a84e4cc..acc620acc 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -65,7 +65,6 @@ func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentRe model := opts.GetModel() stop := genai.FinishReasonStop.String() for i, choice := range resp.Choices { - // Gemini reports a function call as STOP with no text. if choice.StopReason != stop || len(choice.ToolCalls) > 0 { continue } diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 9869abf17..aafbfdcfb 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -11,7 +11,7 @@ func TestClaudeReasoningKindFor(t *testing.T) { model string want ClaudeReasoningKind }{ - // Adaptive-only (T1), first-party and Bedrock forms. + // Adaptive-only, first-party and Bedrock forms. {"claude-opus-4-7", ClaudeReasoningAdaptiveOnly}, {"claude-opus-4-8", ClaudeReasoningAdaptiveOnly}, {"us.anthropic.claude-opus-4-8", ClaudeReasoningAdaptiveOnly}, @@ -21,11 +21,11 @@ func TestClaudeReasoningKindFor(t *testing.T) { {"us.anthropic.claude-sonnet-5", ClaudeReasoningAdaptiveOnly}, {"claude-fable-5", ClaudeReasoningAdaptiveOnly}, {"claude-mythos-5", ClaudeReasoningAdaptiveOnly}, - // Dual (T2). + // Dual. {"claude-opus-4-6", ClaudeReasoningAdaptiveAndBudget}, {"us.anthropic.claude-sonnet-4-6", ClaudeReasoningAdaptiveAndBudget}, {"claude-mythos-preview", ClaudeReasoningAdaptiveAndBudget}, - // Budget-only (T3). + // Budget-only. {"claude-opus-4-5-20251101", ClaudeReasoningBudgetOnly}, {"claude-sonnet-4-5-20250929", ClaudeReasoningBudgetOnly}, {"us.anthropic.claude-haiku-4-5-20251001-v1:0", ClaudeReasoningBudgetOnly}, @@ -73,11 +73,11 @@ func TestResolveClaudeAdaptive(t *testing.T) { want bool note string }{ - // Adaptive-only: budget preference upgraded to adaptive (M1/M2/H1b). + // Adaptive-only: budget preference upgraded to adaptive. {"claude-sonnet-5", false, true, "budget on T1 upgrades"}, {"claude-sonnet-5", true, true, "adaptive on T1 stays"}, {"claude-opus-5", false, true, "budget on Opus 5 upgrades"}, - // Budget-only: adaptive preference downgraded to budget (M3). + // Budget-only: adaptive preference downgraded to budget. {"claude-haiku-4-5", true, false, "adaptive on T3 downgrades"}, {"claude-haiku-4-5", false, false, "budget on T3 stays"}, // Dual: caller preference honored both ways (unchanged). From cba0bdf795b3b9985d5763429d0882451891c168 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 05:45:57 +0700 Subject: [PATCH 031/618] chore(anthropic): drop a comment the prefill wire test already holds Message prefilling is documented as incompatible with JSON outputs, and removing the guard reddens "assistant prefill conflicts", so restating the vendor rule in prose protects nothing. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 2a690d0aa..ae049ac60 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -964,8 +964,6 @@ func applyAnthropicStructuredOutput( return cfg, nil } -// anthropicHasAssistantPrefill reports whether the last message is an assistant -// turn, i.e. a prefilled response, which Anthropic rejects with structured output. func anthropicHasAssistantPrefill(messages []llms.MessageContent) bool { if len(messages) == 0 { return false From 93ffece3c0ce6cc357d569f00e42b6a28058d599 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 15:54:38 +0700 Subject: [PATCH 032/618] fix(anthropic): reject an assistant prefill on the models that refuse it Claude 4.6 and later, and Mythos Preview, answer 400 to a conversation whose last message is an assistant turn: "This model does not support assistant message prefill. The conversation must end with a user message." The adapter only refused that shape when structured output was also requested, so an ordinary prefilled call reached the API and failed there. The refusal is now the model's own property, checked on every request, and the narrower structured-output conflict stays for the older models that still accept a prefill. Bedrock carries the same models through both of its doors and is very likely to need the same guard, but AWS documents neither the restriction nor its error, so that half waits for a live request rather than an assumption. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 65 +++++++++++++++++++++++ llms/anthropic/anthropicllm.go | 4 ++ llms/anthropic/errors.go | 10 ++++ llms/reasoning/claude_capability.go | 16 +++++- llms/reasoning/claude_capability_test.go | 25 +++++++++ 5 files changed, 119 insertions(+), 1 deletion(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index 7b9ebccb2..f660a7403 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1045,6 +1045,71 @@ func thinkingBlocks(blocks []any) []map[string]any { return out } +func TestAnthropic_AssistantPrefill(t *testing.T) { + t.Parallel() + + prefilled := []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPart("The answer is")}}, + } + + newLLM := func(t *testing.T, model string) (*anthropic.LLM, *atomic.Int32) { + t.Helper() + var hits atomic.Int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + hits.Add(1) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"m","type":"message","role":"assistant","model":"` + model + `",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel(model), + ) + require.NoError(t, err) + return llm, &hits + } + + t.Run("rejected on 4.6 and later without a round trip", func(t *testing.T) { + t.Parallel() + + llm, hits := newLLM(t, "claude-opus-4-6") + _, err := llm.GenerateContent(t.Context(), prefilled) + + var unsupported *anthropic.ErrAssistantPrefillUnsupported + require.ErrorAs(t, err, &unsupported) + require.Equal(t, "claude-opus-4-6", unsupported.Model) + require.Zero(t, hits.Load(), "the request must not be sent") + }) + + t.Run("still allowed on the 4.5 generation", func(t *testing.T) { + t.Parallel() + + llm, hits := newLLM(t, "claude-sonnet-4-5") + _, err := llm.GenerateContent(t.Context(), prefilled) + + require.NoError(t, err) + require.Equal(t, int32(1), hits.Load()) + }) + + t.Run("a trailing user turn is untouched on 4.6 and later", func(t *testing.T) { + t.Parallel() + + llm, hits := newLLM(t, "claude-sonnet-5") + _, err := llm.GenerateContent(t.Context(), []llms.MessageContent{ + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPart("earlier turn")}}, + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, + }) + + require.NoError(t, err) + require.Equal(t, int32(1), hits.Load()) + }) +} + func TestAnthropic_ForcedToolChoiceWithBudgetThinking(t *testing.T) { t.Parallel() diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index ae049ac60..ed40a7e0e 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -231,6 +231,10 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag return nil, &ErrForcedToolUseWithThinking{Model: model} } + if reasoning.ClaudeRejectsAssistantPrefill(model) && anthropicHasAssistantPrefill(messages) { + return nil, &ErrAssistantPrefillUnsupported{Model: model} + } + // Structured output rides in output_config.format, merged with any effort set // above (the two are independent). The schema constrains the final text only. if outputConfig, err = applyAnthropicStructuredOutput(opts, model, messages, outputConfig); err != nil { diff --git a/llms/anthropic/errors.go b/llms/anthropic/errors.go index e0ee8144d..d0206cd19 100644 --- a/llms/anthropic/errors.go +++ b/llms/anthropic/errors.go @@ -80,6 +80,16 @@ func MapError(err error) error { return mapper.Map(err) } +// ErrAssistantPrefillUnsupported reports that the model rejects a conversation +// ending with an assistant turn. +type ErrAssistantPrefillUnsupported struct{ Model string } + +func (e *ErrAssistantPrefillUnsupported) Error() string { + return fmt.Sprintf( + "anthropic: model %q does not support assistant message prefill; the conversation must end with a user message", + e.Model) +} + // ErrForcedToolUseWithThinking reports the documented gap that manual (budget) // thinking accepts only tool_choice "auto" or "none": forcing a tool with "any" // or a named tool is rejected. Adaptive thinking has no such limit. diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 5b6562e47..2e7908f7d 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -119,7 +119,7 @@ func ClaudeEffortsFor(model string) []string { // generations use adaptive thinking, where effort is always available. var budgetEffortClaude = []string{ "claude-opus-4-5", "claude-mythos-preview", - "claude-opus-4-6", "claude-sonnet-4-6", + "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", } // ClaudeSupportsEffortWithBudget reports whether the model accepts @@ -129,6 +129,20 @@ func ClaudeSupportsEffortWithBudget(model string) bool { return containsAny(strings.ToLower(model), budgetEffortClaude) } +// noPrefillClaude models reject a conversation whose last message is an +// assistant turn. +var noPrefillClaude = []string{ + "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", + "claude-opus-4-7", "claude-opus-4-8", + "claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-mythos-5", +} + +// ClaudeRejectsAssistantPrefill reports whether the model rejects a prefilled +// assistant response outright, so the request must not be sent. +func ClaudeRejectsAssistantPrefill(model string) bool { + return containsAny(strings.ToLower(model), noPrefillClaude) +} + // mutuallyExclusiveSamplingClaude models reject temperature and top_p set // together (only one may be provided). var mutuallyExclusiveSamplingClaude = []string{"claude-haiku-4-5", "claude-haiku-4.5"} diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index aafbfdcfb..bbaefa37c 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -169,6 +169,31 @@ func TestClaudeRejectsSampling(t *testing.T) { } } +func TestClaudeRejectsAssistantPrefill(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + }{ + {"claude-opus-4-6", true}, + {"us.anthropic.claude-sonnet-4-6", true}, + {"claude-mythos-preview", true}, + {"claude-opus-4-7", true}, + {"claude-sonnet-5", true}, + {"claude-fable-5", true}, + {"claude-opus-4-5-20251101", false}, + {"claude-sonnet-4-5", false}, + {"claude-haiku-4-5", false}, + {"claude-3-5-sonnet", false}, + {"gpt-5.5", false}, + } + for _, tc := range cases { + if got := ClaudeRejectsAssistantPrefill(tc.model); got != tc.want { + t.Errorf("ClaudeRejectsAssistantPrefill(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + func TestClaudeSupportsEffortWithBudget(t *testing.T) { t.Parallel() cases := []struct { From bebdd278fb08e6a1e03daf7a86220ff01b738cde Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 16:06:40 +0700 Subject: [PATCH 033/618] fix(reasoning): stop offering structured output on the Claude 4 generation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The documented supported list starts at the 4.5 generation, so Opus 4, Opus 4.1 and Sonnet 4 never took output_config.format — yet the gate only named the claude-2, claude-instant and claude-3 families, and let them through to a guaranteed 4xx. The entries are date-anchored, the way the pre-adaptive list already spells them, so they cannot swallow 4.5 and later. The Bedrock footnote is narrower still, naming only Opus 4.6, Sonnet 4.6, Sonnet 4.5, Opus 4.5 and Haiku 4.5, but a local block built on a positive list would refuse models the platform may already serve, and AWS pages have proven to lag the vendor. That one stays a live check. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 6 +++++- llms/reasoning/claude_capability_test.go | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 2e7908f7d..72a58811d 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -156,7 +156,11 @@ func ClaudeMutuallyExclusiveSampling(model string) bool { // legacyNoStructuredClaude are Claude generations known to predate structured // outputs (the output_config.format JSON Schema mode). A structured-output request // on them is rejected locally rather than sent for a guaranteed 4xx. -var legacyNoStructuredClaude = []string{"claude-2", "claude-instant", "claude-3-", "claude-3."} +var legacyNoStructuredClaude = []string{ + "claude-2", "claude-instant", + "claude-3-", "claude-3.", + "claude-opus-4-1", "claude-opus-4-20", "claude-sonnet-4-20", +} // ClaudeSupportsStructuredOutput reports whether the model can be asked for schema // constrained output. Known-legacy families are rejected; every current model and diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index bbaefa37c..4b6bae7b6 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -104,9 +104,14 @@ func TestClaudeSupportsStructuredOutput(t *testing.T) { {"claude-sonnet-5", true}, {"claude-opus-5", true}, {"claude-opus-4-5", true}, + {"claude-opus-4-6", true}, + {"claude-opus-4-8", true}, {"claude-haiku-4-5", true}, {"us.anthropic.claude-sonnet-4-5-v1:0", true}, {"some-future-model", true}, // unknown passes through + {"claude-opus-4-1-20250805", false}, + {"claude-opus-4-20250514", false}, + {"us.anthropic.claude-sonnet-4-20250514-v1:0", false}, {"claude-3-5-sonnet-latest", false}, {"claude-3-7-sonnet", false}, {"claude-2.1", false}, From aee6dd04ca5176756d5025561bb799f99972e6ce Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 17:19:18 +0700 Subject: [PATCH 034/618] chore(reasoning): drop the duplicate Mythos Preview entry The model was added to budgetEffortClaude when it was first classified, and the list gained it a second time when the 4.6 pair joined. Matching is unaffected; the list is not. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 72a58811d..6f508faeb 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -119,7 +119,7 @@ func ClaudeEffortsFor(model string) []string { // generations use adaptive thinking, where effort is always available. var budgetEffortClaude = []string{ "claude-opus-4-5", "claude-mythos-preview", - "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", + "claude-opus-4-6", "claude-sonnet-4-6", } // ClaudeSupportsEffortWithBudget reports whether the model accepts From be72c7c23d8103aa7f812c819cc349abf1a04a02 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 20 Aug 2026 17:21:37 +0700 Subject: [PATCH 035/618] fix(llms): stop telling the UI that a newer model does not reason MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReasoningSupportFor fell back to IsReasoningModel, a catalog of prefixes for models that exist today, so anything past its last entry answered Supported=false: gpt-6, claude-opus-6 and gemini-4-pro all reported that the vendor's next flagship does not think, and a consumer that trusts the hint hides the reasoning controls entirely. The hint now asks a separate classifier that fails open — a name from a family whose current generations reason counts as reasoning unless it matches a known pre-reasoning generation. Known stays false, so the tiers are still not asserted and the UI is told to offer everything. IsReasoningModel is untouched: it gates the temperature pin, the disable resolver and the OpenAI hint branch, where a guess would change the request rather than a form. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/detect_hint.go | 53 ++++++++++++++++++++++++++++++ llms/reasoning/detect_hint_test.go | 43 ++++++++++++++++++++++++ llms/reasoning_support.go | 6 ++-- llms/reasoning_support_test.go | 24 ++++++++++++++ 4 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 llms/reasoning/detect_hint.go create mode 100644 llms/reasoning/detect_hint_test.go diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go new file mode 100644 index 000000000..4517ae1b1 --- /dev/null +++ b/llms/reasoning/detect_hint.go @@ -0,0 +1,53 @@ +package reasoning + +import "strings" + +// LikelyReasoningModel reports whether a model probably reasons: everything +// IsReasoningModel knows, plus any name from a family whose current generations +// reason and which is not a known pre-reasoning generation. +// +// For UI hints only. Wire paths keep using IsReasoningModel: a wrong guess here +// costs a control in a form, there it would change the request. +func LikelyReasoningModel(model string) bool { + if IsReasoningModel(model) { + return true + } + + m := strings.ToLower(model) + if idx := strings.LastIndex(m, "/"); idx != -1 { + m = m[idx+1:] + } + + switch { + case strings.HasPrefix(m, "gpt-"): + return !openAIPreReasoning(m) + case isOSeries(m): + return true + case strings.HasPrefix(m, "claude-"): + return !claudePreThinking(m) + case strings.HasPrefix(m, "gemini-"), strings.HasPrefix(m, "gemma-"): + return !geminiKnownNonThinking(m) + } + return false +} + +// openAIPreReasoning matches the GPT generations below the GPT-5 line, where +// reasoning starts. +func openAIPreReasoning(m string) bool { + return strings.HasPrefix(m, "gpt-3") || strings.HasPrefix(m, "gpt-4") +} + +// claudePreThinking matches the Claude generations below 3.7, where extended +// thinking starts. +func claudePreThinking(m string) bool { + return strings.HasPrefix(m, "claude-2") || + strings.HasPrefix(m, "claude-v2") || + strings.HasPrefix(m, "claude-instant") || + strings.HasPrefix(m, "claude-3") +} + +// isOSeries matches the OpenAI o-series naming (o1, o3, o4-mini, successors); +// every generation of it reasons. +func isOSeries(m string) bool { + return len(m) > 1 && m[0] == 'o' && m[1] >= '1' && m[1] <= '9' +} diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go new file mode 100644 index 000000000..2a8d823b8 --- /dev/null +++ b/llms/reasoning/detect_hint_test.go @@ -0,0 +1,43 @@ +package reasoning + +import "testing" + +func TestLikelyReasoningModel(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + note string + }{ + {"gpt-5.5", true, "already classified"}, + {"claude-sonnet-5", true, "already classified"}, + {"o3-mini", true, "already classified"}, + + {"gpt-6", true, "generation newer than this build"}, + {"gpt-7-turbo", true, "generation newer than this build"}, + {"claude-opus-6", true, "generation newer than this build"}, + {"claude-sonnet-7", true, "generation newer than this build"}, + {"gemini-4-pro", true, "generation newer than this build"}, + {"gemma-5", true, "generation newer than this build"}, + {"o5", true, "o-series successor"}, + {"openai/gpt-6", true, "proxy prefix stripped"}, + + {"gpt-4o", false, "pre-reasoning generation"}, + {"gpt-4.1", false, "pre-reasoning generation"}, + {"gpt-3.5-turbo", false, "pre-reasoning generation"}, + {"claude-3-5-sonnet-latest", false, "pre-thinking generation"}, + {"claude-2.1", false, "pre-thinking generation"}, + {"anthropic.claude-instant-v1", false, "pre-thinking generation"}, + {"gemini-1.5-pro", false, "pre-thinking generation"}, + {"gemini-2.0-flash", false, "pre-thinking generation"}, + {"gemma-3", false, "pre-thinking generation"}, + + {"", false, "not a model"}, + {"mistral-large-latest", false, "family this package does not classify"}, + } + for _, tc := range cases { + if got := LikelyReasoningModel(tc.model); got != tc.want { + t.Errorf("LikelyReasoningModel(%q) = %v, want %v (%s)", tc.model, got, tc.want, tc.note) + } + } +} diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 49974ad96..ba922242f 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -143,9 +143,9 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } - // Unrecognized: optimistic. Supported best-guessed from the shared classifier; - // the UI shows all controls and the provider teaches via a 400. - return ReasoningSupport{Supported: reasoning.IsReasoningModel(model), Known: false} + // Unrecognized: optimistic. Known=false tells the UI to show all controls and + // let the provider teach via a 400. + return ReasoningSupport{Supported: reasoning.LikelyReasoningModel(model), Known: false} } // toReasoningEfforts converts the resolver's raw effort strings to the public diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index c27a109bf..b263fe709 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -6,6 +6,30 @@ import ( "github.com/vxcontrol/langchaingo/llms/reasoning" ) +func TestReasoningSupportForNewerGeneration(t *testing.T) { + t.Parallel() + cases := []struct { + model string + provider reasoning.Provider + want bool + }{ + {"gpt-6", reasoning.ProviderOpenAI, true}, + {"claude-opus-6", reasoning.ProviderAnthropic, true}, + {"gemini-4-pro", reasoning.ProviderGoogleAI, true}, + {"gpt-4o", reasoning.ProviderOpenAI, false}, + {"claude-3-5-sonnet-latest", reasoning.ProviderAnthropic, false}, + } + for _, tc := range cases { + s := ReasoningSupportFor(tc.model, tc.provider) + if s.Supported != tc.want { + t.Errorf("ReasoningSupportFor(%q).Supported = %v, want %v", tc.model, s.Supported, tc.want) + } + if s.Known { + t.Errorf("ReasoningSupportFor(%q).Known = true, want false: the tiers are a guess, not a fact", tc.model) + } + } +} + func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven test t.Parallel() From 183c7755ae0a8bdaf6e5e6a22760d9863f49d55c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 02:39:04 +0700 Subject: [PATCH 036/618] fix(openai): match the effort table to what each generation accepts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Probing the API for every GPT-5 and o-series model showed two places where the table disagreed with the vendor. The o-series accepts xhigh (verified live on o3 and o4-mini), but the table capped it at high, so a request for xhigh was silently downgraded. The first GPT-5 generation rejects reasoning_effort "none" — its floor is "minimal" — yet ResolveOff sent "none" and earned a 400 instead of the typed unsupported error. An invalid reasoning_effort makes the API name the accepted set, which is how the per-generation lists here were established: gpt-5/-mini/-nano take minimal..high, gpt-5.1 takes none..high, and gpt-5.2 onward take none..xhigh. No chat-completions model accepts "max". Pro and codex models are absent because they are not served on /chat/completions at all. Co-Authored-By: Claude Opus 5 --- .../reasoning_effort_passthrough_test.go | 16 ++++- llms/reasoning/openai_capability.go | 32 ++++++--- llms/reasoning/openai_capability_test.go | 72 +++++++++++++------ llms/reasoning_support_test.go | 13 +++- 4 files changed, 102 insertions(+), 31 deletions(-) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index a75dbd6da..8fff6c768 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -226,8 +226,22 @@ func TestReasoningEffortClampedPerModel(t *testing.T) { } }) + t.Run("o-series keeps xhigh", func(t *testing.T) { + body := capture(t, "o3", llms.ReasoningXHigh) + if !strings.Contains(body, `"reasoning_effort":"xhigh"`) { + t.Fatalf("o3 accepts xhigh and must not be downgraded, got body: %s", body) + } + }) + + t.Run("gpt-5 clamps xhigh to high", func(t *testing.T) { + body := capture(t, "gpt-5", llms.ReasoningXHigh) + if !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Fatalf("gpt-5 tops out at high, got body: %s", body) + } + }) + t.Run("unknown model passes max through", func(t *testing.T) { - body := capture(t, "gpt-5.6", llms.ReasoningMax) + body := capture(t, "gpt-5.7", llms.ReasoningMax) if !strings.Contains(body, `"reasoning_effort":"max"`) { t.Fatalf("unknown model must pass max through, got body: %s", body) } diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 0feb0af13..2d24f44bb 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -47,10 +47,10 @@ func (c OpenAIReasoningCaps) ClampEffort(effort string) string { return effort } -// OpenAIReasoningCapsFor classifies an OpenAI reasoning model. Only models with -// documented constraints tighter than the general GPT-5 surface are listed; -// anything else (including newer models) returns Known=false so the caller stays -// optimistic. +// OpenAIReasoningCapsFor classifies an OpenAI reasoning model by the effort set +// its generation accepts on /chat/completions. A model outside the listed +// generations (including newer ones) returns Known=false so the caller stays +// optimistic and the API arbitrates. func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { m := strings.ToLower(model) if idx := strings.LastIndex(m, "/"); idx != -1 { @@ -61,12 +61,28 @@ func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { // GPT-5 Pro accepts only high and cannot be disabled. return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"high"}} case openAIMandatoryReasoning(m): - // o-series floor is minimal/low with no hard off; expose low..high. - return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high"}} - case strings.HasPrefix(m, "gpt-5.4-mini"): - // GPT-5.4 mini accepts none..xhigh but not max. + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} + case openAIGPT5Base(m): + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"minimal", "low", "medium", "high"}} + case strings.HasPrefix(m, "gpt-5.1"): + return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high"}} + case openAIXHighCeiling(m): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} default: return OpenAIReasoningCaps{Known: false} } } + +func openAIGPT5Base(m string) bool { + return m == "gpt-5" || strings.HasPrefix(m, "gpt-5-20") || + strings.HasPrefix(m, "gpt-5-mini") || strings.HasPrefix(m, "gpt-5-nano") +} + +func openAIXHighCeiling(m string) bool { + for _, prefix := range []string{"gpt-5.2", "gpt-5.4", "gpt-5.5", "gpt-5.6"} { + if strings.HasPrefix(m, prefix) { + return true + } + } + return false +} diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index af86892c6..08d7cb790 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -1,6 +1,9 @@ package reasoning -import "testing" +import ( + "slices" + "testing" +) func TestOpenAIReasoningCapsFor(t *testing.T) { t.Parallel() @@ -8,16 +11,25 @@ func TestOpenAIReasoningCapsFor(t *testing.T) { model string known bool canDisable bool - ceiling string // highest accepted effort, "" when unknown + efforts []string }{ - {"gpt-5-pro", true, false, "high"}, - {"o3-mini", true, false, "high"}, - {"o1-preview", true, false, "high"}, - {"gpt-5.4-mini", true, true, "xhigh"}, - {"openai/gpt-5.4-mini", true, true, "xhigh"}, // proxy prefix stripped - {"gpt-5.6", false, false, ""}, // unclassified -> optimistic - {"gpt-5.5", false, false, ""}, - {"gpt-4.1", false, false, ""}, + {"gpt-5-pro", true, false, []string{"high"}}, + {"o3-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"o1-preview", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"o4-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"gpt-5", true, false, []string{"minimal", "low", "medium", "high"}}, + {"gpt-5-2025-08-07", true, false, []string{"minimal", "low", "medium", "high"}}, + {"gpt-5-mini", true, false, []string{"minimal", "low", "medium", "high"}}, + {"gpt-5-nano", true, false, []string{"minimal", "low", "medium", "high"}}, + {"gpt-5.1", true, true, []string{"low", "medium", "high"}}, + {"gpt-5.2", true, true, []string{"low", "medium", "high", "xhigh"}}, + {"gpt-5.4", true, true, []string{"low", "medium", "high", "xhigh"}}, + {"gpt-5.4-mini", true, true, []string{"low", "medium", "high", "xhigh"}}, + {"openai/gpt-5.4-mini", true, true, []string{"low", "medium", "high", "xhigh"}}, // proxy prefix stripped + {"gpt-5.5", true, true, []string{"low", "medium", "high", "xhigh"}}, + {"gpt-5.6-terra", true, true, []string{"low", "medium", "high", "xhigh"}}, + {"gpt-5.7", false, false, nil}, // unclassified -> optimistic + {"gpt-4.1", false, false, nil}, } for _, tc := range cases { caps := OpenAIReasoningCapsFor(tc.model) @@ -27,12 +39,8 @@ func TestOpenAIReasoningCapsFor(t *testing.T) { if caps.Known && caps.CanDisable != tc.canDisable { t.Errorf("%q CanDisable = %v, want %v", tc.model, caps.CanDisable, tc.canDisable) } - ceiling := "" - if len(caps.Efforts) > 0 { - ceiling = caps.Efforts[len(caps.Efforts)-1] - } - if ceiling != tc.ceiling { - t.Errorf("%q ceiling = %q, want %q", tc.model, ceiling, tc.ceiling) + if !slices.Equal(caps.Efforts, tc.efforts) { + t.Errorf("%q Efforts = %v, want %v", tc.model, caps.Efforts, tc.efforts) } } } @@ -48,13 +56,16 @@ func TestOpenAIReasoningCaps_ClampEffort(t *testing.T) { {"gpt-5-pro", "low", "high"}, {"gpt-5-pro", "max", "high"}, {"gpt-5-pro", "high", "high"}, - // GPT-5.4 mini caps at xhigh; max drops to xhigh, lower values pass. + {"o3", "xhigh", "xhigh"}, + {"o4-mini", "max", "xhigh"}, + {"gpt-5", "xhigh", "high"}, + {"gpt-5-mini", "minimal", "minimal"}, + {"gpt-5.1", "xhigh", "high"}, {"gpt-5.4-mini", "max", "xhigh"}, - {"gpt-5.4-mini", "xhigh", "xhigh"}, + {"gpt-5.6-terra", "xhigh", "xhigh"}, {"gpt-5.4-mini", "medium", "medium"}, // Unknown model: unchanged (optimistic). - {"gpt-5.6", "max", "max"}, - {"gpt-5.5", "xhigh", "xhigh"}, + {"gpt-5.7", "max", "max"}, // Empty effort untouched. {"gpt-5-pro", "", ""}, } @@ -64,3 +75,24 @@ func TestOpenAIReasoningCaps_ClampEffort(t *testing.T) { } } } + +func TestResolveOffOpenAIGeneration(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want OffWire + }{ + {"gpt-5", OffUnsupported}, + {"gpt-5-mini", OffUnsupported}, + {"gpt-5-nano", OffUnsupported}, + {"o3", OffUnsupported}, + {"gpt-5.1", OffEffortNone}, + {"gpt-5.4-mini", OffEffortNone}, + {"gpt-5.6-terra", OffEffortNone}, + } + for _, tc := range cases { + if got := ResolveOff(tc.model, ProviderOpenAI); got != tc.want { + t.Errorf("ResolveOff(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index b263fe709..0ec6c0e15 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -1,6 +1,7 @@ package llms import ( + "slices" "testing" "github.com/vxcontrol/langchaingo/llms/reasoning" @@ -114,10 +115,18 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes }) t.Run("an unclassified OpenAI model names no effort tiers", func(t *testing.T) { - s := ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI) + s := ReasoningSupportFor("gpt-5.7", reasoning.ProviderOpenAI) eq(t, "Supported", s.Supported, true) if s.Efforts != nil { - t.Errorf("Efforts = %v, want nil: the tiers of gpt-5.5 are not classified", s.Efforts) + t.Errorf("Efforts = %v, want nil: the tiers of gpt-5.7 are not classified", s.Efforts) + } + }) + + t.Run("a classified OpenAI generation names its effort tiers", func(t *testing.T) { + s := ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI) + want := []ReasoningEffort{"low", "medium", "high", "xhigh"} + if !slices.Equal(s.Efforts, want) { + t.Errorf("Efforts = %v, want %v", s.Efforts, want) } }) From 2b4e994d9b8c62ccf913726e83e5681b52817d35 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 03:32:57 +0700 Subject: [PATCH 037/618] fix(reasoning): match a Google model family on a version boundary strings.Contains("gemini-1") also matches gemini-10 and gemini-15, so a future generation inherited the rules of a retired one. Measured: ResolveOff("gemini-10-pro", ProviderGoogleAI) returned OffOmit, turning an explicit disable into a silent no-op, which is the opposite of what the classifier's own doc promises for unclassified names. gemma-30b fell into the same trap via "gemma-3", and "gemini-3" would have sent thinking_level to a hypothetical gemini-30 on the wire. Every family token now has to end where the version ends, and both sides of each boundary are pinned by a test. Co-Authored-By: Claude Opus 5 --- llms/reasoning/gemini_capability.go | 36 +++++++++++++++------- llms/reasoning/gemini_capability_test.go | 38 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index adcab11e4..c86eca287 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -8,20 +8,34 @@ import "strings" // model-string checks. Provider-wire specifics that need the genai types // (thinking_level mapping, the temperature value) stay in the googleai adapter. +func hasFamily(model, family string) bool { + rest := model + for { + idx := strings.Index(rest, family) + if idx == -1 { + return false + } + rest = rest[idx+len(family):] + if rest == "" || rest[0] < '0' || rest[0] > '9' { + return true + } + } +} + // GeminiSupportsThinking reports whether the model belongs to a Google thinking // family: Gemini 2.5, Gemini 3.x, or Gemma 4. func GeminiSupportsThinking(model string) bool { m := strings.ToLower(model) - return strings.Contains(m, "gemini-2.5") || - strings.Contains(m, "gemini-3") || - strings.Contains(m, "gemma-4") + return hasFamily(m, "gemini-2.5") || + hasFamily(m, "gemini-3") || + hasFamily(m, "gemma-4") } // GeminiUsesThinkingLevel reports whether the model uses the qualitative // thinking_level control (Gemini 3.x), where thinking_budget is deprecated, // instead of a token budget. Gemini 3 also recommends running at temperature 1.0. func GeminiUsesThinkingLevel(model string) bool { - return strings.Contains(strings.ToLower(model), "gemini-3") + return hasFamily(strings.ToLower(model), "gemini-3") } // geminiKnownNonThinking reports whether the model is a pre-thinking Gemini/Gemma @@ -30,11 +44,11 @@ func GeminiUsesThinkingLevel(model string) bool { // future thinking model is not wrongly treated as non-thinking. func geminiKnownNonThinking(model string) bool { m := strings.ToLower(model) - return strings.Contains(m, "gemini-1") || - strings.Contains(m, "gemini-2.0") || - strings.Contains(m, "gemma-1") || - strings.Contains(m, "gemma-2") || - strings.Contains(m, "gemma-3") + return hasFamily(m, "gemini-1") || + hasFamily(m, "gemini-2.0") || + hasFamily(m, "gemma-1") || + hasFamily(m, "gemma-2") || + hasFamily(m, "gemma-3") } // GeminiCanDisable reports whether thinking can be turned off via @@ -43,10 +57,10 @@ func geminiKnownNonThinking(model string) bool { // treated as disablable (optimistic: attempt it, let the API be the backstop). func GeminiCanDisable(model string) bool { m := strings.ToLower(model) - if strings.Contains(m, "gemini-3") { + if hasFamily(m, "gemini-3") { return false } - if strings.Contains(m, "gemini-2.5") && strings.Contains(m, "pro") { + if hasFamily(m, "gemini-2.5") && strings.Contains(m, "pro") { return false } return true diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index 2c88b67a1..1bb5ce1fe 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -67,3 +67,41 @@ func TestGeminiUsesThinkingLevel(t *testing.T) { } } } + +func TestGeminiFamilyBoundary(t *testing.T) { + t.Parallel() + cases := []struct { + model string + nonThinking bool + supportsThink bool + usesLevel bool + off OffWire + }{ + {"gemini-1.0-pro", true, false, false, OffOmit}, + {"gemini-1.5-pro", true, false, false, OffOmit}, + {"gemini-10-pro", false, false, false, OffZeroBudget}, + {"gemini-15-flash", false, false, false, OffZeroBudget}, + {"gemini-2.0-flash", true, false, false, OffOmit}, + {"gemini-20-flash", false, false, false, OffZeroBudget}, + {"gemma-3-27b", true, false, false, OffOmit}, + {"gemma-30b", false, false, false, OffZeroBudget}, + {"gemini-3-pro", false, true, true, OffUnsupported}, + {"gemini-30-pro", false, false, false, OffZeroBudget}, + {"gemini-2.5-flash", false, true, false, OffZeroBudget}, + {"gemini-25-flash", false, false, false, OffZeroBudget}, + } + for _, tc := range cases { + if got := geminiKnownNonThinking(tc.model); got != tc.nonThinking { + t.Errorf("geminiKnownNonThinking(%q) = %v, want %v", tc.model, got, tc.nonThinking) + } + if got := GeminiSupportsThinking(tc.model); got != tc.supportsThink { + t.Errorf("GeminiSupportsThinking(%q) = %v, want %v", tc.model, got, tc.supportsThink) + } + if got := GeminiUsesThinkingLevel(tc.model); got != tc.usesLevel { + t.Errorf("GeminiUsesThinkingLevel(%q) = %v, want %v", tc.model, got, tc.usesLevel) + } + if got := ResolveOff(tc.model, ProviderGoogleAI); got != tc.off { + t.Errorf("ResolveOff(%q) = %v, want %v", tc.model, got, tc.off) + } + } +} From fedf064e1f7b152853033f221126888e5ba5b92d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 06:35:58 +0700 Subject: [PATCH 038/618] fix(reasoning): reject an impossible disable instead of dropping it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Claude model reached through an OpenAI-compatible gateway resolved to the Anthropic-native disable wire, which that transport cannot express. The openai adapter handles no such case, so WithReasoningDisabled() left the request untouched: measured on anthropic/claude-sonnet-5, the body went out as {"model":..,"messages":[..]} with no reasoning field, no error, and thinking still on — the caller paid for what they turned off. The hint already reported CannotDisable=true, so the adapter contradicted it. Sending reasoning_effort:"none" instead is not a fix. The gateway accepts it and answers with thinking_blocks anyway; against the same prompt the Anthropic-native door returns 853 output tokens with thinking disabled and 3407 with it on, while the gateway returns 2652 either way. Co-Authored-By: Claude Opus 5 --- .../reasoning_effort_passthrough_test.go | 56 +++++++++++++++++++ llms/reasoning/off.go | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 8fff6c768..3d03e6277 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -2,6 +2,7 @@ package openai import ( "context" + "errors" "io" "net/http" "net/http/httptest" @@ -9,6 +10,7 @@ import ( "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) // xhigh/max effort must reach the request body unchanged (not downgraded to @@ -247,3 +249,57 @@ func TestReasoningEffortClampedPerModel(t *testing.T) { } }) } + +func TestReasoningDisabledForClaudeBehindOpenAITransport(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + send := func(t *testing.T, model string) (string, error) { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, genErr := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoningDisabled()) + return body, genErr + } + + t.Run("default-on Claude reports unsupported instead of a silent no-op", func(t *testing.T) { + body, err := send(t, "anthropic/claude-sonnet-5") + var unsupported *reasoning.ErrReasoningOffUnsupported + if !errors.As(err, &unsupported) { + t.Fatalf("want ErrReasoningOffUnsupported, got err=%v body=%s", err, body) + } + }) + + t.Run("always-on Claude still reports unsupported", func(t *testing.T) { + _, err := send(t, "anthropic/claude-fable-5") + var unsupported *reasoning.ErrReasoningOffUnsupported + if !errors.As(err, &unsupported) { + t.Fatalf("want ErrReasoningOffUnsupported, got %v", err) + } + }) + + t.Run("off-by-default Claude omits the field", func(t *testing.T) { + body, err := send(t, "anthropic/claude-opus-4-7") + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if strings.Contains(body, "reasoning") { + t.Fatalf("a model that does not think by default needs no disable token, got body: %s", body) + } + }) +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index d89cc6cda..f305027fb 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -59,7 +59,7 @@ func ResolveOff(model string, p Provider) OffWire { // Only Anthropic-operated platforms accept thinking:{disabled} here. On // Amazon Bedrock the adaptive-only default-on models (e.g. Sonnet 5) keep // thinking always on, so a disable is rejected — report it as unsupported. - if p == ProviderBedrock { + if p == ProviderBedrock || p == ProviderOpenAI { return OffUnsupported } return OffDisableClaude From a3c2bdf140e57a57b1581f29cbbc1b84063dd6ac Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 07:20:43 +0700 Subject: [PATCH 039/618] fix(googleai): stop a large max_tokens from wrapping to a negative limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit int32(*i) wraps silently on a 64-bit int, so WithMaxTokens(3_000_000_000) reached the wire as maxOutputTokens: -1294967296 and Google answered "max_output_tokens must be positive" — the caller asked for too much and was told the value was negative. Saturating keeps the request meaningful: Google ignores a limit above the model ceiling anyway, measured accepting 3_000_000 with finishReason STOP. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 16 ++++++++++++++-- llms/googleai/googleai_unit_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 07bb167e4..3530cdf49 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "io" + "math" "strings" "github.com/vxcontrol/langchaingo/internal/imageutil" @@ -1039,7 +1040,7 @@ func convertToInt32Pointer(i *int) *int32 { return nil } - i32 := int32(*i) + i32 := saturateInt32(*i) return &i32 } @@ -1048,7 +1049,18 @@ func convertToInt32(i *int) int32 { return 0 } - return int32(*i) + return saturateInt32(*i) +} + +func saturateInt32(i int) int32 { + switch { + case i > math.MaxInt32: + return math.MaxInt32 + case i < math.MinInt32: + return math.MinInt32 + default: + return int32(i) + } } func convertIntToFloat32Pointer(i *int) *float32 { diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index c002ea631..d131c1687 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "io" + "math" "net/http" "strings" "testing" @@ -1046,3 +1047,26 @@ func TestConfiguredDefaultTemperatureReachesTheWire(t *testing.T) { }) } } + +func TestMaxTokensAboveInt32DoesNotGoNegative(t *testing.T) { + t.Parallel() + cases := []struct { + in int + want int32 + }{ + {16384, 16384}, + {math.MaxInt32, math.MaxInt32}, + {math.MaxInt32 + 1, math.MaxInt32}, + {3_000_000_000, math.MaxInt32}, + {math.MinInt32 - 1, math.MinInt32}, + } + for _, tc := range cases { + n := tc.in + if got := convertToInt32(&n); got != tc.want { + t.Errorf("convertToInt32(%d) = %d, want %d", tc.in, got, tc.want) + } + if got := convertToInt32Pointer(&n); got == nil || *got != tc.want { + t.Errorf("convertToInt32Pointer(%d) = %v, want %d", tc.in, got, tc.want) + } + } +} From d07f16dbd9bd2c694836e58fb5b41e22d5a5f4c8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 07:39:56 +0700 Subject: [PATCH 040/618] fix(bedrock): stop sending Opus 4.5 an effort field it rejects there Opus 4.5 takes output_config.effort alongside a thinking budget on the first-party API but not on Amazon Bedrock, so a single model-keyed table could not be right for both. Measured on all four reachable models: with a budget and no effort every one answers 200; adding effort keeps 200 on the 4.6 pair and returns 400 "output_config.effort: Extra inputs are not permitted" on Opus 4.5 and Sonnet 4.5, on the Converse and InvokeModel doors alike. The first-party API accepts it for Opus 4.5 and rejects it for Sonnet 4.5 with "This model does not support the effort parameter". The capability now takes the provider, matching ResolveOff. The four Bedrock reasoning fixtures were stale for the same reason and are re-recorded, so the package replays offline again. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 2 +- .../bedrockclient/bedrockclient_converse.go | 2 +- .../bedrockclient/provider_anthropic.go | 2 +- .../TestAmazonReasoningConverseAPI.httprr | 90 +++++++++--------- .../TestAmazonReasoningLegacyAPI.httprr | 26 ++--- ...AmazonReasoningStreamingConverseAPI.httprr | Bin 121914 -> 108361 bytes ...stAmazonReasoningStreamingLegacyAPI.httprr | Bin 47880 -> 49004 bytes llms/reasoning/claude_capability.go | 15 ++- llms/reasoning/claude_capability_test.go | 26 ++--- 9 files changed, 87 insertions(+), 76 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index ed40a7e0e..96c80aeaa 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -212,7 +212,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } // Some budget-thinking models (Opus 4.5) also honor effort; without this // the caller's effort is silently dropped on the budget path. - if reasoning.ClaudeSupportsEffortWithBudget(model) { + if reasoning.ClaudeSupportsEffortWithBudget(model, reasoning.ProviderAnthropic) { outputConfig = &anthropicclient.OutputConfig{ Effort: string(opts.Reasoning.GetEffort(opts.GetMaxTokens())), } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 25aef0e9c..9a76fd39e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -167,7 +167,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti setBudget := func() { if tokens := input.ReasoningConfig.GetTokens(maxTokens); tokens > 0 { additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} - if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID) { + if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID, reasoning.ProviderBedrock) { effort := input.ReasoningConfig.GetEffort(maxTokens) additionalModelFields.OutputConfig = &converseOutputConfig{Effort: string(effort)} } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index d0ea33077..6a823b796 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -722,7 +722,7 @@ func applyAnthropicReasoning( } if tokens := cfg.GetTokens(mt); tokens > 0 { input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} - if reasoning.ClaudeSupportsEffortWithBudget(modelID) { + if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { input.OutputConfig = &anthropicOutputConfig{Effort: string(cfg.GetEffort(mt))} } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. diff --git a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr index 2d2bd8ecd..cc9f2520d 100644 --- a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr +++ b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr @@ -1,33 +1,33 @@ httprr trace v1 -545 1430 +581 1166 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-opus-4-6-v1/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 292 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1264 +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024},"output_config":{"effort":"medium"}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 1000 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:07 GMT -X-Amzn-Requestid: 3b4f0217-70f7-4d74-a031-9f4dbf9cb5b3 +Date: Fri, 21 Aug 2026 00:33:47 GMT +X-Amzn-Requestid: 80373522-ab0e-4f92-9e41-325ae114b4d8 -{"metrics":{"latencyMs":3664},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EscCCmUIDxABGAIqQDJS2G4yZ/CZG6CwqRftvWjwY6HEs/XNY2FYgz/i/yYxqqHXKQTDcDwNEollV9MONMnxNpe/qJUoKX8uoG9gDqIyD2NsYXVkZS1vcHVzLTQtNjgAQgh0aGlua2luZxIMGmeH2R012vreRL4eGgztELcr79aosU/uoT4iMO876ZFvokZRRic0dftYpYZm+ArUXNwgkx91b9THthVbHR8UAnKzb5fG24N92fDX1iqPAecgS2GBTweEPinFbVQJ3hT3L6GWAezns6KzSducA8K4OUrKIw8IB36yB3Hxbm8djPpm6Ah72zoTtY7YStDM/jQfeE017oFS1qKc+jN46bTIzUpueYjvlOHmo4a4Xm3eB2yvBYlMDoLDRYQm2WsDIV1PoeCYhztYn3wRsfFZvOW2STdgyHMSGvAUqGAT5ljnGAE=","text":"I need to calculate 17 * 23.\n\nLet me break this down step by step:\n\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391"}}},{"text":"# Calculating 17 × 23\n\n## Breaking it down step by step:\n\nI'll use the distributive property to split this into easier parts:\n\n**17 × 23 = 17 × (20 + 3)**\n\n**Step 1:** 17 × 20 = 340\n\n**Step 2:** 17 × 3 = 51\n\n**Step 3:** Add the results: 340 + 51 = **391**\n\n## Answer: 17 × 23 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":200,"serverToolUsage":{},"totalTokens":255}}544 1430 +{"metrics":{"latencyMs":4075},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EvIBCmUIERABGAIqQME+TEpO2D3HoKnFhKXb96DYRR1GDrnN6CWc+EHlOz3fQyYrrg4msVsS9b8kGMJmZUqcKuCAUDuZI8Jcnz+pmM0yD2NsYXVkZS1vcHVzLTQtNjgAQgh0aGlua2luZxIMpx5CVTPVZBwwiKa3GgzXujfYzzWo+QF4ticiMFzUyoOHoaMhdPLM/SGH5z+MSBkwokidDQM/A6l8/n6cpG9OiQJp+9vTUjFBjoZhTyo7w9Kotfb2qL7+vPzelBKSvQxatUXCShLJPBF652mAoE+MRHUXwHBnGTBizPUWXBkrfCQTLJnR7Qiff+EYAQ==","text":"17 * 23 = 17 * 20 + 17 * 3 = 340 + 51 = 391"}}},{"text":"# Calculating 17 × 23\n\n## Step-by-step process:\n\nI'll break this into simpler parts using the distributive property:\n\n**17 × 23 = 17 × (20 + 3)**\n\n1. **17 × 20** = 340\n2. **17 × 3** = 51\n\n## Final addition:\n\n340 + 51 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":139,"serverToolUsage":{},"totalTokens":194}}580 1329 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 292 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1264 +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024},"output_config":{"effort":"medium"}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 1163 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:12 GMT -X-Amzn-Requestid: 998bc66a-9830-4177-b5ff-a542d8d6b23e +Date: Fri, 21 Aug 2026 00:33:53 GMT +X-Amzn-Requestid: 508db220-a510-43fa-938a-aa6535432b5a -{"metrics":{"latencyMs":3948},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EpMCCmcIDxABGAIqQN5oZ2H+jxOLvhrtwjkFbJgMNpfToY5q5/O8E8q/wsUdO72bG1QCSyQte6bbFH4rumBUzC4qXe6grPqa/FiBpHQyEWNsYXVkZS1zb25uZXQtNC02OABCCHRoaW5raW5nEgwD+t6Ba82zEb22ooYaDIPFfJZQK0EEceR33yIwSlrC4aoGJXyja6zoBgzb1uddzTWa2XSQbQoNp+SsYk/k5BxFnpXVtTQcPuRKDzZRKlo2IaklGXrFl4U0WJEw4xwTiqLa/npwYNuR9GQ+GJR/2rNlZIANTDGmBtt/dMofAlIISuJ1tpoDgXQPvrWgLUH5v5v94b3IcL67uVD67ShMKa/XhGZ7Nqk054UYAQ==","text":"17 * 23\n\nI'll break this down:\n17 * 23 = 17 * 20 + 17 * 3\n= 340 + 51\n= 391"}}},{"text":"## Calculating 17 × 23\n\n### Breaking It Down\n\nI'll decompose 23 into easier parts: **20 + 3**\n\n**Step 1:** 17 × 20\n- 17 × 2 = 34\n- 34 × 10 = **340**\n\n**Step 2:** 17 × 3\n- 17 × 3 = **51**\n\n**Step 3:** Add the results\n- 340 + 51 = **391**\n\n### Verification (using a different split)\nBreaking 17 into **10 + 7**:\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✓\n\n### Answer: 17 × 23 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":253,"serverToolUsage":{},"totalTokens":308}}558 2002 +{"metrics":{"latencyMs":4467},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EvUBCmcIERABGAIqQME+TEpO2D3HoKnFhKXb96DYRR1GDrnN6CWc+EHlOz3fQyYrrg4msVsS9b8kGMJmZUqcKuCAUDuZI8Jcnz+pmM0yEWNsYXVkZS1zb25uZXQtNC02OABCCHRoaW5raW5nEgxcUCLkvqHSheFieZYaDJ1YC/v3WtVB3Qq2CSIwc83WiFoyXWAC4uqnaTMXnApdMN8KV/8riwGe2XCIpGHKAVDK1ps1eOGLSDp8H0JPKjzWIBzSwv81qgjxKJggTUkn+C3IU55LsPWuxG4N8umF9nnPDOSI3HLOxTgf4NW7teaBmYP5v2jHmU+UO60YAQ==","text":"17 * 23\n\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391"}}},{"text":"## Calculating 17 × 23\n\n### Breaking it down using distributive property:\n\nSplit 23 into (20 + 3):\n\n**17 × 20:**\n17 × 2 = 34, then × 10 = **340**\n\n**17 × 3:**\n17 × 3 = **51**\n\n### Adding the parts:\n340 + 51 = **391**\n\n### Verification using another method:\nSplit 17 into (10 + 7):\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✓\n\n### Answer: 17 × 23 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":216,"serverToolUsage":{},"totalTokens":271}}558 2140 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-opus-4-5-20251101-v1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -36,12 +36,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1836 +Content-Length: 1974 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:18 GMT -X-Amzn-Requestid: dbfeeb5d-9454-4473-8eaf-80f59f4314df +Date: Fri, 21 Aug 2026 00:34:00 GMT +X-Amzn-Requestid: 37a92e69-3b8b-4b38-85da-3be1eb385b87 -{"metrics":{"latencyMs":4669},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"ErsECm4IDxABGAIqQH69Dv17/3nuqkw6XmAYcjMqZunNkAu8T2ORfcdNfldbgylOkuBEpjt57v3YCkKIOLj+d2KzXhjNeoTDGKb9CrwyGGNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMTgAQgh0aGlua2luZxIMxPSYASp5EaV9V7fiGgxh5zipqEHxbnhJDv0iMCGWHkVe8s7H6E1GQFz1/9LDjq4J5SeQtF+U3sZc43oK/taRDCqrtF5wDsVRR3iyair6AhRN8Q1xJoIdbPwgOL7eSMNMUWJkCI2OivGlG2EGlyjsjju24WdAnu2J/qY1zThV8ciHhzSETEluuyJBNGb3V4il5Lm9XQDnEOBkj2E8Z+/OYNPlca5eRsMalezn5tEPxwtpAazBo14SouS10V/5CIHyU9Dr9ivG3/yxXQgYJIl3YdZoZSuI16/g9DYOhSVSwoe1bDZBBgsWJd0ayhG/DYY0pVfBEI/h1hDmp75oIrbeB/IQ9y6aKGEpwbrMC2+1OCcRTFmjpLMUfA87TP77i5pHUnA4hpnMeAEq3VUu8m5ahkqoivsILTlUP5QFAJ+N0UHAMg+ZLwRHqRKG4bBGpHEoIZG8HcqcwHkY48YDcnZIrszA7Wzp+CAj6AG2qKi05y86OdjVrMkqqBcfmAjcsgUjVFO0bxOxkrD4MuTNbkgiyE3M67x6RE3ZubEaGcI1v3RoWMzjQBcV7bURjjSzqjaaD4tjQLbp0kO446k6zW+cBFf5ub4s59OU9BgB","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nI can use the standard multiplication method or break it into easier parts.\n\nMethod 1: Breaking down the numbers\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify with another approach:\n17 * 23 = (20 - 3) * 23\n= 20 * 23 - 3 * 23\n= 460 - 69\n= 391\n\nYes, the answer is 391."}}},{"text":"# Calculating 17 × 23\n\n## Step-by-Step Solution\n\nI'll break this into smaller, easier calculations:\n\n**17 × 23 = 17 × (20 + 3)**\n\n**Step 1:** Calculate 17 × 20\n- 17 × 20 = 340\n\n**Step 2:** Calculate 17 × 3\n- 17 × 3 = 51\n\n**Step 3:** Add the results\n- 340 + 51 = **391**\n\n## Answer: 391"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":291,"serverToolUsage":{},"totalTokens":346}}559 2189 +{"metrics":{"latencyMs":6009},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"ErkECm4IERABGAIqQIntbp5z8lkmmzuUHtOSiF0BO50KYaEnBpTnOq3tyNw6Sq4KyU7b8Ascb5uzClTox+ZokwDV3fjJUIJj5M+Y2V4yGGNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMTgAQgh0aGlua2luZxIMp1KR2oNUt3zZuocjGgwHkJ4+6hGCjB2qP3wiMJHYrh1Qc72riG2T4hYrlHGkM09tnB0uGyaM8vSQ/ZghZjjdUJ0mH1HBbF6GsGiZPir4AgltQSgzYWX/xCYO7SmF6rGvapYMKzA9vpp0XQRoQ+1g9DxigT3/DOXT05ZOrFrloGOE7ZmjXggelRiCiI5STxZLvgrwrfnnHfQX4WdazqP7Gi0dLDEz+6HCwoWHPX3t2w7YPWiMrYcSaQ3C4dML+PY1QvqklV1c03enOZJLKgn2Ph1Dln0gdiUgP5GiYZFbq38/v2o1mTtiUp07IRTDt947kWdPiiAOC2i1L6YdiElgU8e1Q2G62S7kE7IrcUyz5fNd9rfiKygOefy4/AfIvuJ1MtYwsSyiQgWdzDjRJgZQDqC3pWh+0IjTCWs7c5ueqJVi8dJNfi94MxSKkGY4IHpZOmT63EYLWn+DAKGNI4uQq2wJ/Vxhr+4gzPbEE9sR+A9X9CdcwfnlTypHaU50dX8FlzD0iMFHKgw6XP+0il7jkQ2txX1f8DpocXhTcinbELSvttrfVgAlfDUZ7Zr18rKsjau27B/ydMe6WAbqnmGDq2j9SHUKw0gYAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nMethod 1: Standard multiplication\n17 * 23\n\nI can break this down as:\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify with another method.\n\nMethod 2: Break down 17\n17 * 23 = (10 + 7) * 23\n= 10 * 23 + 7 * 23\n= 230 + 161\n= 391\n\nBoth methods give 391, so that's correct."}}},{"text":"# Calculating 17 × 23\n\n## Step-by-Step Solution\n\nI'll break this into simpler parts using the distributive property.\n\n**Breaking down 23 into (20 + 3):**\n\n17 × 23 = 17 × (20 + 3)\n\n**Calculate each part:**\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n**Add the results:**\n340 + 51 = **391**\n\n## Verification\n\nI can check by breaking down 17 instead:\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✓\n\nThe answer is **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":351,"serverToolUsage":{},"totalTokens":406}}559 2165 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -50,12 +50,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2023 +Content-Length: 1999 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:22 GMT -X-Amzn-Requestid: 0d6937b1-271a-43ac-944f-0f1b93e5c6ea +Date: Fri, 21 Aug 2026 00:34:04 GMT +X-Amzn-Requestid: 6b573fea-8b2b-4c31-9e42-c9f445a0fe08 -{"metrics":{"latencyMs":2553},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EuYECkgIDxABGAIqQAGUae0GPrUk5ej2JtYhN9+H81Vh2YWI6hns7Lw/FBj6PizKuYuI9C2295Ux2lrchA5MbxXt6Krz0U/GlBW5SDYSDBC0kt2kTJJkeZPM+hoMYqZk+q67dWrSBXaXIjAmXZ658ZEAN1/enNA0U4EnH+C4VwynK4+Dk+qv2R6NdZBFNsSkKPowwGC4FnMRq8YqywO5f/Us+59SH9bVLTcgI/FWhVYTzZN12nTe1FPNods0TufRdBWt8HoI3Z9VvCv9XZz7RLLHKSyRnx7Ut8Vk/LfRxn1pjlZnX3JwYcN3GGqkZmLEGLP9EiIb/rlzRFMl9mCgqbTQL03dlBzGx/W7iOrFEDPlH2oBXYBt0V3jUlCs+QkjPj6k508SsTRg3z+pUz7eCckByUUDoIcm5+h/nDy2QhcZ0D+/QUGR+AaZk/KabvKw5R1uTVlPqfDxeIQ7gosXX0vfislo8EdN7UjotvzxfSKxbTZrcEpYtc60cNYwMqZDzPGUlYyP1tiv3ZUK6UO1Z9oI5bCoLvKiMvuQLicYzReHFjpPXgURcY8+knVJ9+af8Z+pOEr7rtC2pVEVA09EkZxHlwkA6RuoY6iw7H8JgvZ4WuRUFD09CxMuoOcuHqmZkWh5ZXldrvryRMBX5zMNBW/pHNPucjwESHmZSyaKBPjRWY8hjcr4KEK6n2KWVKbmatEIlOSyTNHS5oSoTXjIV0CsJYPTckvXIkwVUkFBgWup0dtEjvjGzOBH9tmYSluQ0DoHQT6Y05S4N36w6mjwB/FPIgRbguZoay3R+r0itDzCHbzveuC7PCoYAQ==","text":"I need to calculate 17 * 23. Let me work through this step by step.\n\nMethod 1: Using the distributive property\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify this with another method.\n\nMethod 2: Breaking it down differently\n17 * 23 = (10 + 7) * 23\n= 10 * 23 + 7 * 23\n= 230 + 161\n= 391\n\nMethod 3: Traditional multiplication\n 23\n× 17\n----\n 161 (23 * 7)\n 230 (23 * 10)\n----\n 391\n\nAll three methods give me 391."}}},{"text":"# Calculating 17 × 23\n\nI'll break this into simpler pieces:\n\n## Method 1: Decompose 23\n17 × 23 = 17 × (20 + 3)\n\n- 17 × 20 = 340\n- 17 × 3 = 51\n- **340 + 51 = 391**\n\n## Method 2: Verify with standard multiplication\n```\n 23\n ×17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n```\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":361,"serverToolUsage":{},"totalTokens":416}}560 2033 +{"metrics":{"latencyMs":2194},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EtcECkgIERABGAIqQG9Ey42can2U2d3wKJsuay5j8rGnDLObXj1BPnvABZmKrWyTA4LzgDSvzho2qF5EqOJPGN2yujGCUYT5itgc4OESDKk/HLYaSEiwqrbzRRoMwFSkyRiRHBdjhVGXIjBLAEpfT2CMUn+mR5pArwM4OrjVwQllqI8Gom09VjwuqTkUeC+Cw5y1OJvYvUzW+CoqvAOeZxj3ybNE/sVKvOOAyHiA63KAbsslnUWAKoXKJN8e2uxCTIpqvv+xRDvS27pMHr/QHlkjPvQadA4qFk2ldW/EEiCwI+q4w1rTTPVEEf5NF2HoTNA36V1zBOcjFl/xaDmX8bmQvPrOzjZy16uigCCvEwNj/Qd5shoZPYcrhIGmBlQrHZ1KVFcESNkoGBU3TcgQtLfRH0qx6SH8IaeFS1sCc8ncvpuVyJe86TyfW1/a6JA9/TOK6KmjpzY5U9rHW9OngPKKM7kxz6l0nG7UHFvt319kcpVLc2KcVJBafEm6QR94v9ieuFxO6/SOyOLYQI/8ZUk0TX5w7M0mLFEQDN8CMri/rua6oAQ3pI/Ht9gjv0W1jHs3EJngFvbxBv06T+jA7KAhen1LexSvURG5gXkJhZ2/il9aME8rwQCLE14meaMmpuY5PKbthAV5ee57pV7GENtXKhmN1pE2ANxMFpqiu0nvB13EyD6uayONvDdE6vOiVdNCXqel1ByNYFKkeOKHjtJ47ZX4ye4B8rye75B3Y28ZDUK2p8JU3k7siYvpvZ8Y2sJo4HmtYypV+oBsd/fiQOi7R1wnFxzpYsAYAQ==","text":"I need to calculate 17 * 23. Let me think through this step by step.\n\nMethod 1: Break it down using the distributive property\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify this with another method:\n\nMethod 2: Standard multiplication\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n\nLet me check: 23 × 7 = 161 ✓\n23 × 10 = 230 ✓\n161 + 230 = 391 ✓\n\nSo the answer is 391."}}},{"text":"# Calculating 17 × 23\n\nI'll break this down using the distributive property:\n\n## Step 1: Decompose one number\n17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n= (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":349,"serverToolUsage":{},"totalTokens":404}}560 2461 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-sonnet-4-5-20250929-v1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -64,12 +64,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1867 +Content-Length: 2295 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:28 GMT -X-Amzn-Requestid: 1ebcbac4-3fd2-48c6-bd24-320a41a158f9 +Date: Fri, 21 Aug 2026 00:34:11 GMT +X-Amzn-Requestid: 8d1ca957-6597-4d83-bb08-178f584a24e2 -{"metrics":{"latencyMs":5528},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"Ep8ECnAIDxABGAIqQMj6RbVKkCCiYbKA0WWTmxq2uamkXdupFS4FHcU1D/FFy8jOhPn8q41s/OrOYl79+Zx7QD9Bd3Dd/+VrepAoi/YyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgy9nu5iYk+17NUjsbsaDDChrcnpOjCq3hM7UiIwWgWBHcQm8/Aig1nOUuw71nDH66YGNv/en6Tcv7ldewD+yxifa7lb9te2Ln1kON4/KtwCACgzwAAqms/7++Dinp9ElY6cYJr7p0xs1W9stSR2hiJRmfLNZYmhGk8nkhN2luwN77GTKqyv4a8dldy113kzXt4bubbeBZzkaVrWPRxB7dpoYr5dW//XPu6KjgDr5riyJmaDV1ltaqkfyaZBZMohJHdX8apoftS5WiwJtHKeBOMiK4ItZH4yuqKvoUZncVGoimk4SV5T0mb2UaH5mOeRMHNojmK647Dit7J90e3pJYLYt8Ua+Bh7BSPzlaHWX5XwphQ4YoeF8957O3pbLlsTOLPEriUD8A+KV3jIid2/jnU1SWMWOJxEu+LzxmemMi5T5/sDP6ND/VogrDX0mGsVCCgEurl5Ina0cE3O9LS/zvI4r7eikUhrX45p/2vic8JqKPbk9WwbyO5kc1Wdyd96MNw2t1CFkTsfh19hAmXTWJcyKrSPeugt7Ny/yyJVCZR7zxdQ9sU1toBBliMxGAE=","text":"I need to calculate 17 * 23.\n\nLet me break this down using the distributive property:\n\n17 * 23 = 17 * (20 + 3)\n = (17 * 20) + (17 * 3)\n = 340 + 51\n = 391\n\nLet me verify this another way:\n23 * 17 = 23 * (10 + 7)\n = (23 * 10) + (23 * 7)\n = 230 + 161\n = 391\n\nGood, both methods give the same answer."}}},{"text":"# Calculating 17 × 23\n\nI'll break this down using the distributive property:\n\n## Method: Split 23 into (20 + 3)\n\n**17 × 23 = 17 × (20 + 3)**\n\nNow I can calculate each part:\n\n1. **17 × 20 = 340**\n - (17 × 2 = 34, then add a zero)\n\n2. **17 × 3 = 51**\n - (10 × 3 = 30, and 7 × 3 = 21, so 30 + 21 = 51)\n\n3. **Add them together:**\n - 340 + 51 = **391**\n\n## Answer: 17 × 23 = 391"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":340,"serverToolUsage":{},"totalTokens":395}}539 1508 +{"metrics":{"latencyMs":6281},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EpAFCnAIERABGAIqQHcwZPA+fT9iP2hMhNrSVLGvxT8O2Y7KwOcfbxxb+KByeUP+SRqfr2/8UxqTASW248OLMpDxvaehM3/cxtPQzYkyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgz5F+MDkFsa40e63l4aDIWgLnAXWBW/1Z59LSIwC+wWh83wunt5hQUDvs9vV8s+63d/4ObbTKJ1f6stcJ+TmAqWyLu3piKGD1Yu3iDSKs0D9y1tbFFehOD6vfp1ANEWlfQZPqln7CFfUfBHyGmbdKr8P7gQuKRkfSy/DSJeoxZtp+0HZkHFNRwo3wCs0hUqPRQZyw22663dmXljRXcsNXMLrYxBHw2OBCjNrM4IIJ/tZ2hL+0vN3DbjfhZtxmgdZ1d1c6ozU0zAAw+PeB04R/yGOLz8nhzhw8TG9/17654jETh3q7cgcp9O3J6J7iIdYsaZHEhOowUVcUWAyUweLUoERblhxVl3dNiF1glU/CklsWCoZJNvszbrOvIJZPj5lBFBQN4Y3Ubr8q4YgUuCbKqiF8pQllMgev2oRK5ewb5n3c+z+9YCWDE7jYpZUiC9fgYV4Az9CzpAFp3l+cdSS7BNyCjq3NDYgxKwB+4V1z8AxNgkxxHRMZjftTzTmGadcVP5l99r6NbvA7l11kIhtuWB/hYICi8EpGO052beCQ6+IuSkTPR4HlReIV/1Yf1H8kVSIdZHiHecMEsYDoeehZGkBdwCIvu2CDK+7EomjPKhPxkl1Y8BjABSC0DA10zrNASrANJ/YCJO+BMfXM0yA3Ubv76LNzy/sHRsBT95rvylN930vPIFEvkn1jR02rATI7prKzCAxhNxcN7GUG4YAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nMethod 1: Breaking down by place value\n17 * 23 = 17 * (20 + 3)\n= (17 * 20) + (17 * 3)\n= 340 + 51\n= 391\n\nLet me verify this with another method to be sure.\n\nMethod 2: Traditional multiplication\n 23\n × 17\n ----\nFirst, multiply 23 by 7:\n23 × 7 = 161\n\nThen multiply 23 by 10:\n23 × 10 = 230\n\nAdd them together:\n161 + 230 = 391\n\nBoth methods give me 391, so that's the answer."}}},{"text":"# Calculating 17 × 23\n\nI'll use the distributive property to break this into easier parts:\n\n## Step 1: Break down 23\n23 = 20 + 3\n\nSo: 17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n17 × (20 + 3) = (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**\n\n---\n\n*Verification using standard multiplication:*\n```\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n```\n✓ Confirmed!"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":424,"serverToolUsage":{},"totalTokens":479}}539 1169 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-120b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -78,12 +78,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1342 +Content-Length: 1003 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:32 GMT -X-Amzn-Requestid: a9240575-cac3-4dd8-8c42-48d54db9cf46 +Date: Fri, 21 Aug 2026 00:34:14 GMT +X-Amzn-Requestid: 48d4d921-6425-4dca-a587-ca638a27ff5f -{"metrics":{"latencyMs":2105},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"User asks to think step by step: compute 17 * 23. Show reasoning. Simple multiplication. Provide detailed steps: do 17*20=340, 17*3=51, sum 391. Or use distributive property. Show maybe long multiplication. Provide answer 391."}}},{"text":"**Step‑by‑step multiplication**\n\nWe want to find \n\n\\[\n17 \\times 23.\n\\]\n\nThe easiest way is to use the distributive (area) property of multiplication:\n\n\\[\n23 = 20 + 3.\n\\]\n\nSo\n\n\\[\n17 \\times 23 = 17 \\times (20 + 3) = (17 \\times 20) + (17 \\times 3).\n\\]\n\nNow compute each part:\n\n1. **\\(17 \\times 20\\)** \n Multiply 17 by 2, then add a zero (because of the factor 10). \n \\(17 \\times 2 = 34\\), so \\(17 \\times 20 = 340\\).\n\n2. **\\(17 \\times 3\\)** \n \\(17 \\times 3 = 51\\).\n\nAdd the two results:\n\n\\[\n340 + 51 = 391.\n\\]\n\n---\n\n**Alternative long‑multiplication view**\n\n```\n 17\n × 23\n -----\n 51 ← 17 × 3 (units place)\n+ 340 ← 17 × 20 (tens place, shifted one place left)\n -----\n 391\n```\n\nBoth methods give the same product.\n\n\\[\n\\boxed{391}\n\\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":346,"serverToolUsage":{},"totalTokens":431}}538 2844 +{"metrics":{"latencyMs":1461},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"User asks to think step by step: compute 17*23. Provide reasoning. Should give multiplication steps. Probably show breakdown: 17*20 + 17*3 = 340 + 51 = 391. Or use distributive property. Provide reasoning explicitly."}}},{"text":"**Step‑by‑step multiplication**\n\n1. **Write the product using the distributive (area) method** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3)\n \\]\n\n2. **Multiply 17 by each part of the sum** \n\n * Multiply by 20: \n \\[\n 17 \\times 20 = 17 \\times 2 \\times 10 = 34 \\times 10 = 340\n \\]\n\n * Multiply by 3: \n \\[\n 17 \\times 3 = 51\n \\]\n\n3. **Add the two partial results together** \n \\[\n 340 + 51 = 391\n \\]\n\n4. **Conclusion** \n\n \\[\n \\boxed{391}\n \\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":240,"serverToolUsage":{},"totalTokens":325}}538 2384 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-20b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -92,12 +92,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2678 +Content-Length: 2218 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:37 GMT -X-Amzn-Requestid: 29405f92-229a-48d6-99ad-c1eabf1483ad +Date: Fri, 21 Aug 2026 00:34:19 GMT +X-Amzn-Requestid: 20766bc4-acc7-49d1-a9b9-0e359e325219 -{"metrics":{"latencyMs":3747},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We need to show step-by-step reasoning for multiplying 17 by 23. Provide the multiplication method, maybe break into parts: 17*20 + 17*3 = 340 + 51 = 391. Alternatively do long multiplication. Provide explanation. Simple."}}},{"text":"Sure! Let’s walk through multiplying \\(17\\) by \\(23\\) step by step. There’s a few ways you can do it, but I’ll show two common methods: (1) breaking the multiplication into smaller parts using the distributive property, and (2) the standard long‑multiplication format. Either way, you’ll end up with the same answer.\n\n---\n\n## 1. Distributive Property (Breaking it into Pieces)\n\nThe distributive property says you can split one number into pieces, multiply each piece by the other number, and then add the results. \n\nHere, write \\(23\\) as \\(20 + 3\\):\n\n\\[\n17 \\times 23 \\;=\\; 17 \\times (20 + 3)\n\\]\n\nNow distribute the multiplication:\n\n\\[\n17 \\times (20 + 3) = (17 \\times 20) + (17 \\times 3)\n\\]\n\nCompute each part:\n\n1. **\\(17 \\times 20\\)** \n \\(20\\) is \\(2 \\times 10\\). \n \\(17 \\times 20 = 17 \\times 2 \\times 10 = 34 \\times 10 = 340\\).\n\n2. **\\(17 \\times 3\\)** \n \\(17 \\times 3 = 51\\).\n\nNow add the two partial products:\n\n\\[\n340 + 51 = 391\n\\]\n\nSo,\n\n\\[\n\\boxed{17 \\times 23 = 391}\n\\]\n\n---\n\n## 2. Standard Long Multiplication\n\nLet’s do the classic “carry‑over” multiplication.\n\n```\n 17\n × 23\n ------\n 51 ← 17 × 3 (the ones place)\n 340 ← 17 × 20 (the tens place, shifted one position left)\n ------\n 391\n```\n\nStep‑by‑step:\n\n1. **Multiply the ones digit of the bottom number (3) by the entire top number (17).** \n \\(3 × 17 = 51\\). Write this under the line.\n\n2. **Multiply the tens digit of the bottom number (2) by the entire top number (17).** \n Since that digit is actually “20” (2 in the tens place), you multiply \\(17 × 2 = 34\\) and then shift it left one place (multiply by 10), getting \\(340\\). Write this above the 51, offset to the left by one column.\n\n3. **Add the two partial results:**\n\n \\(340 + 51 = 391\\).\n\n---\n\n### Quick Check\n\nYou can always double‑check by using a different grouping: \n\\(17 \\times 23 = 23 \\times 17\\). \nDoing the same steps with the numbers reversed gives the same result, confirming the calculation.\n\n---\n\nSo either method shows the same clean answer: **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":678,"serverToolUsage":{},"totalTokens":763}}539 2785 +{"metrics":{"latencyMs":3272},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" So we need to compute 17 * 23. But the user explicitly wants step by step reasoning, perhaps by expansion: (17 * 20) + (17 * 3) = 340 + 51 = 391. Or using algorithm / decomposition. We can show detailed reasoning: Write 17 * 23 = (10+7)*(20+3) = 10*20 + 10*3 + 7*20 + 7*3 = 200 + 30 + 140 + 21 = 391. Or 23*17 = 23*10 + 23*7 = 230 + 161 = 391. Provide explanation.\n\nWe then show step-by-step in plain text. We'll also mention perhaps cross-check: 17 * 23 = 391. So we should deliver final answer: 391. Also show the steps.\n\nThus the best answer: \"17×23 = (17×20)+(17×3) = 340+51 = 391.\" Provide full reasoning.\n\nWe can note that 17x23 = (20+3)*(10+7)... etc. Provide answer.\n\nOk finalize."}}},{"text":"Sure! Let’s break the multiplication down into simpler pieces so you can see exactly how we get the answer.\n\n### 1. Use the distributive property\nWe can write each number as a sum of simpler numbers:\n\n- \\(17 = 10 + 7\\)\n- \\(23 = 20 + 3\\)\n\nNow multiply \\((10 + 7)\\) by \\((20 + 3)\\):\n\n\\[\n(10 + 7)(20 + 3)\n\\]\n\n### 2. Expand the product\nApply the distributive law (multiplying each part of the first parenthesis by each part of the second):\n\n\\[\n= 10 \\times 20 \\;+\\; 10 \\times 3 \\;+\\; 7 \\times 20 \\;+\\; 7 \\times 3\n\\]\n\n### 3. Compute each small product\n- \\(10 \\times 20 = 200\\)\n- \\(10 \\times 3 = 30\\)\n- \\(7 \\times 20 = 140\\)\n- \\(7 \\times 3 = 21\\)\n\n### 4. Add the results together\n\\[\n200 \\;+\\; 30 \\;+\\; 140 \\;+\\; 21 = 200 + 30 = 230,\\;\n230 + 140 = 370,\\;\n370 + 21 = 391\n\\]\n\n### 5. Final answer\n\\[\n17 \\times 23 = 391\n\\]\n\n---\n\nYou can also check quickly by using the “split and add” trick:\n\n- \\(23 \\times 17 = 23 \\times (10 + 7) = 23 \\times 10 + 23 \\times 7\\)\n- \\(23 \\times 10 = 230\\)\n- \\(23 \\times 7 = 161\\)\n- Sum: \\(230 + 161 = 391\\)\n\nEither way, the result is **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":678,"serverToolUsage":{},"totalTokens":763}}539 2852 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/moonshot.kimi-k2-thinking/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -106,12 +106,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2619 +Content-Length: 2686 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:29:45 GMT -X-Amzn-Requestid: 96460c17-c440-4672-9731-adf3e56a39ff +Date: Fri, 21 Aug 2026 00:34:25 GMT +X-Amzn-Requestid: 0dbfee55-c500-4268-b48b-a54e8b5ca5a5 -{"metrics":{"latencyMs":7512},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":" The user gives a simple multiplication problem: 17 * 23. Need to step by step. Must think step by step, showing reasoning. So produce a solution with steps, perhaps using standard multiplication algorithm or using distributive property or something like that. Let's break down: 17 * 23 = ?\n\nWe can compute directly: 17*20 = 340, 17*3 = 51, sum = 391. Or use FOIL: (20-3)*(20+3) = 20^2 - 3^2 = 400 - 9 = 391? Wait 17 is not 20-3; 23 is 20+3. Actually 17 = 20 - 3, 23 = 20 + 3. Multiply: (20 - 3)*(20 + 3) = 20^2 - 3^2 = 400 - 9 = 391. Indeed.\n\nAlternatively, we can do long multiplication: 17 * 23. Multiply 17 by 3 = 51, write 51. Multiply 17 by 20 = 340. Add: 51 + 340 = 391.\n\nAlternatively, break 23 as 10+10+3: 17*10 = 170, plus another 170 = 340, plus 51 = 391.\n\nWe need to show reasoning step by step. So we can give a short explanation.\n\nThus answer: 391.\n\nWe must show the reasoning in a step-by-step fashion.\n\nPotential answer:\n\nStep 1: Break 23 into 20 + 3.\n\nStep 2: Compute 17 * 20 = 340.\n\nStep 3: Compute 17 * 3 = 51.\n\nStep 4: Add the results: 340 + 51 = 391.\n\nAlternatively, use difference of squares: 17 = 20 - 3, 23 = 20 + 3; product = 20^2 - 3^2 = 400 - 9 = 391.\n\nThus answer is 391.\n\nWe must also mention that 17 * 23 = 391.\n\nThus answer: 391 (with reasoning).\n\nWe need to ensure we include step-by-step reasoning. Let's elaborate: Show each step.\n\nPotential answer:\n\n- Write 23 as 20 + 3.\n\n- Then 17 * (20 + 3) = 17*20 + 17*3.\n\n- 17*20 = 340.\n\n- 17*3 = 51.\n\n- Add: 340 + 51 = 391.\n\nThus answer is 391.\n\nAlternatively, using the difference of squares: (20 - 3)*(20 + 3) = 400 - 9 = 391.\n\nThus answer: 391.\n\nThus final answer: 391.\n\nWill produce answer with reasoning."}}},{"text":" **Step‑by‑step solution**\n\n1. **Break one factor into a convenient sum** \n \\[\n 23 = 20 + 3\n \\]\n\n2. **Use the distributive property** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3) = 17\\times 20 + 17\\times 3\n \\]\n\n3. **Compute each term** \n - \\(17 \\times 20 = 340\\) \n - \\(17 \\times 3 = 51\\)\n\n4. **Add the partial results** \n \\[\n 340 + 51 = 391\n \\]\n\n5. **Conclusion** \n \\[\n \\boxed{391}\n \\]\n\n*(A quick check using the difference‑of‑squares identity also works: \n\\(17 = 20-3\\) and \\(23 = 20+3\\), so \\((20-3)(20+3)=20^{2}-3^{2}=400-9=391\\).)*"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":46,"outputTokens":817,"serverToolUsage":{},"totalTokens":863}}534 2272 +{"metrics":{"latencyMs":4919},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":" The user asks for 17 * 23 and wants me to show my reasoning process step by step.\n\nLet me think about how to multiply 17 by 23. I can use several methods:\n\n1. Standard multiplication algorithm\n2. Breaking down numbers (distributive property)\n3. Using the difference of squares or other algebraic identities\n4. Mental math tricks\n\nLet me try the distributive property approach first, as it's easy to show step-by-step:\n\n17 * 23 = 17 * (20 + 3)\n = 17 * 20 + 17 * 3\n = 340 + 51\n = 391\n\nAlternatively, I could break it down differently:\n17 * 23 = (10 + 7) * 23\n = 10 * 23 + 7 * 23\n = 230 + 161\n = 391\n\nOr using the standard algorithm:\n 17\n x 23\n ----\n 51 (17 * 3)\n 340 (17 * 20, shifted)\n ----\n 391\n\nI could also use the difference of squares method:\n17 * 23 = (20 - 3) * (20 + 3)\n = 20² - 3²\n = 400 - 9\n = 391\n\nThis is neat because 17 and 23 are symmetric around 20.\n\nLet me present the solution using the distributive property method as it's straightforward and demonstrates clear reasoning. I'll also mention the difference of squares method as an alternative elegant solution.\n\nStep-by-step reasoning:\n1. Recognize that 23 can be broken into 20 + 3\n2. Apply distributive property: 17 × 23 = 17 × (20 + 3)\n3. Multiply 17 by 20: 17 × 20 = 340\n4. Multiply 17 by 3: 17 × 3 = 51\n5. Add the results: 340 + 51 = 391\n\nI should show this clearly."}}},{"text":" Let me break down the multiplication 17 × 23 step by step:\n\n**Method 1: Distributive Property (Breaking down 23)**\n\n1. First, I'll split 23 into easier numbers: 23 = 20 + 3\n2. Now multiply 17 by each part:\n - 17 × 20 = 340 (since 17 × 2 = 34, then add a zero)\n - 17 × 3 = 51 (since 10 × 3 = 30 and 7 × 3 = 21, then 30 + 21 = 51)\n3. Add the partial results: 340 + 51 = 391\n\n**Method 2: Alternative Breakdown (Breaking down 17)**\n\n1. Split 17 into: 17 = 10 + 7\n2. Multiply each part by 23:\n - 10 × 23 = 230\n - 7 × 23 = 161 (since 7 × 20 = 140 and 7 × 3 = 21, then 140 + 21 = 161)\n3. Add the partial results: 230 + 161 = 391\n\n**Method 3: Difference of Squares (Elegant trick)**\n\n1. Notice that 17 and 23 are equally spaced around 20 (both are 3 away)\n2. Rewrite as: (20 - 3) × (20 + 3)\n3. This fits the pattern (a - b)(a + b) = a² - b²\n4. Calculate: 20² - 3² = 400 - 9 = 391\n\nAll three methods give the same result: **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":25,"outputTokens":788,"serverToolUsage":{},"totalTokens":813}}534 3780 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/minimax.minimax-m2.5/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -120,12 +120,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2106 +Content-Length: 3614 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:30:04 GMT -X-Amzn-Requestid: e3f94de0-0db9-421e-8816-9d446cdaba2e +Date: Fri, 21 Aug 2026 00:34:37 GMT +X-Amzn-Requestid: 89684ab9-0175-4918-81d8-c780ad91c129 -{"metrics":{"latencyMs":17340},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nThe user wants to compute 17*23. That's 391? Check: 17 * 23: 10*23 = 230, 7*23 = 161 -> sum 391. Yes, 17*23=391.\n\nBut they ask: \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nThus I must provide step-by-step reasoning. Provide arithmetic steps. Must follow policy: It's a straightforward arithmetic. There's no disallowed content. It's an allowed request.\n\nThus answer: 391 with reasoning.\n\nI need to show step-by-step: 17 * 23 = (20 - 3)*(17)? Or perhaps break down as 17*(20+3)? Compute 17*20=340, 17*3=51, sum =391. Or break as 23*17 = 23*10 + 23*7 = 230+161 = 391. Show that.\n\nThus produce answer.\n\nOk. Let's include maybe an alternative reasoning using distributive property, etc.\n\nOne might convert 23 as 20+3.\n\nCompute 17*20 = 340, 17*3 = 51, sum = 391.\n\nAlternatively compute 23*10 = 230, 23*7 = 161, add 230+161=391.\n\nThus answer = 391.\n\nThus final output should be a nicely formatted explanation.\n\nThe user wants \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nTherefore, I'd create something like:\n\n- Write 23 as 20+3.\n- Multiply 17*20 = 340.\n- Multiply 17*3 = 51.\n- Add: 340+51 = 391.\n\nThus answer: 391.\n\nThat's easy.\n\nWill output final.\n"}}},{"text":"\n\n**Step‑by‑step reasoning**\n\nTo compute \\(17 \\times 23\\) we can break one of the numbers into a sum that’s easy to multiply:\n\n1. Write \\(23\\) as \\(20 + 3\\).\n\n2. Multiply \\(17\\) by each part:\n - \\(17 \\times 20 = 340\\) (because \\(17 \\times 2 = 34\\), then add a zero)\n - \\(17 \\times 3 = 51\\) (because \\(10 \\times 3 = 30\\) and \\(7 \\times 3 = 21\\), \\(30+21=51\\))\n\n3. Add the two partial products:\n \\[\n 340 + 51 = 391\n \\]\n\nSo,\n\\[\n\\boxed{17 \\times 23 = 391}\n\\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":569,"serverToolUsage":{},"totalTokens":625}}534 6540 +{"metrics":{"latencyMs":10442},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We are told: \"Think step by step: What is 17 * 23? Show your reasoning process.\" The user wants a step-by-step multiplication of 17 * 23. They want reasoning: we need to compute 17 * 23. That's 391. 17 * 20 = 340. 17 * 3 = 51 gives sum 391. We can show mental multiplication, or use the standard algorithm (multiplying 23 by 17). Also possible using distributive property: 23 * (10 + 7) = 230 + 161 = 391. Or using 17 *23 = 23*17 = (20+3)*(17) = 20*17 +3*17 = 340 + 51 = 391. Provide explanation. We can expand and compute. I will do that. The user wants \"Show your reasoning process.\" So we will demonstrate using step by step:\n\n- Represent 17 = 10 + 7. Multiply 23 by each part:\n\n23 × 10 = 230.\n23 × 7 = 23×5 + 23×2 = 115 + 46 = 161. Add: 230+161 = 391.\n\nAlternatively use 23 = 20 + 3: 17×20 = 340, 17×3 = 51 → 340+51 = 391.\n\nThus the product is 391.\n\nThus answer: 391.\n\nProbably produce answer, mention reasoning.\n\nThus final answer: 391 with reasoning. We'll include step by step.\n\nBut let's verify: 17 * 23: 17 * 20 = 340; 17 * 3 = 51; sum = 391. Yes.\n\nWe can optionally show a standard long multiplication:\n\n23 × 17\n- 23×7 = 161 -> line: 161\n- 23×10 = 230 -> line: shift one place (like zero at end) -> 2300? Actually it's 23×10 = 230, but we align in the digit with tens: 230 → 2300? Wait, 23×10 = 230 (the zero is at one's place). Then sum: 161 + 230 = 391. However typical method: line1: 23×7 => 161. Then line2: 23×10 => 230 (aligned as 2300? Actually we multiply by 1 in the tens place, so we put a 0 at the right of the line: 2300? Let's see: standard approach: 23 * 17: Multiply 23 by 7 = 161, then multiply 23 by 1 (the tens digit, which is actually 10, so yields 230). Then write the 230 shifted one place to the left: 2300? Actually it's 23 × 10 = 230. Then shift it's one place to the left: 23 * 10 is 23 written with a zero, i.e., 230, but in product we treat as 23 * (1*10), thus we put it as 230. Then we add: 161 + 230 = 391. Wait why not 2300? Let's reconsider: Multiply by 17 = multiply by 7 (ones) and multiply by 1 (tens). But we need to multiply by the tens place: 1 corresponds to 10 (since it's actually the tens digit of 17). So you multiply 23 by 10 => 230, but you also need to shift by one place: i.e., write as 230. Actually typical long multiplication:\n\n 2 3\n × 1 7\n ------\n 1 6 1 (23×7)\n 2 3 0 (23×10)\n ------\n 3 9 1\n\nYes that's exactly: line1 is 23×7 = 161; line2 is 23×10 = 230 (since you multiply 23 by the digit 1 in the tens place, you shift left one position, i.e., you write a zero). Then sum = 391.\n\nThus answer 391.\n\nWe can also do it as 23*17 = (20+3)*(17) = 20*17 +3*17 = 340+51=391.\n\nThus final answer: 391.\n\nNow we produce final.\n"}}},{"text":"\n\n**Step‑by‑step reasoning**\n\n1. **Break one factor into tens and units** \n Write 17 as \\(10 + 7\\).\n\n2. **Multiply 23 by each part** \n\n - Multiply by the units (7): \n \\(23 \\times 7 = 161\\) \n\n - Multiply by the tens (10): \n \\(23 \\times 10 = 230\\)\n\n3. **Add the two partial products** \n\n \\[\n 161 + 230 = 391\n \\]\n\n4. **Result** \n\n\\[\n\\boxed{391}\n\\]\n\n(You can verify the same result using the other breakdown \\(23 = 20 + 3\\): \n\\(17 \\times 20 = 340\\) and \\(17 \\times 3 = 51\\); \\(340 + 51 = 391\\).)"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":1105,"serverToolUsage":{},"totalTokens":1161}}534 3653 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/minimax.minimax-m2.1/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -134,9 +134,9 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 6374 +Content-Length: 3487 Content-Type: application/json -Date: Thu, 16 Jul 2026 18:31:26 GMT -X-Amzn-Requestid: b4a91c67-c26a-42e8-9a27-0df8dac3b572 +Date: Fri, 21 Aug 2026 00:34:45 GMT +X-Amzn-Requestid: 5c133ef2-7e63-471e-9f2f-d74c58bea63e -{"metrics":{"latencyMs":81202},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"I need to find out what 17 times 23 is. I should think step by step to make sure I get it right.\n\nFirst, I know that multiplication is repeated addition. So, 17 times 23 means adding 17 to itself 23 times. But that might take a while, so there should be a smarter way.\n\nI could break it down. For example, I can split one of the numbers into smaller parts. Let me see, 17 times 23. I know that 17 is close to 10 and 7, and 23 is close to 20 and 3. But I should think in terms of place values.\n\nI can think of it as (20 - 3) times 17, but that might be messy. Better to use the distributive property.\n\nLet me write it out: 17 * 23.\n\nI can do 10*23 = 230, and then 7*23 = 161. Then add them together.\n\nLet me calculate that.\n\n10 times 23 is 230.\n\n7 times 23: 7*20 = 140, and 7*3 = 21, so 140 + 21 = 161.\n\nNow, 230 + 161. 230 + 160 = 390, plus 1 is 391? No, 161 is 160 + 1, but I'm adding 230 + 161.\n\n230 + 100 = 330, then 330 + 60 = 390, then 390 + 1 = 391? I think I'm confusing myself.\n\nBetter: 230 + 161.\n\n230 + 160 = 390, and then 390 + 1 = 391, but 161 is 160 + 1, so yes, that seems right.\n\n230 + 161: add hundreds: 200 + 100 = 300, then tens: 30 + 60 = 90, so 300 + 90 = 390, then units: 0 + 1 = 1, so 391.\n\nYes.\n\nSo, 17 * 23 = 391.\n\nBut let me double-check with another method.\n\nI can do 17 * 20 = 340, and 17 * 3 = 51, then add them.\n\n17 * 20 = 340.\n\n17 * 3: 10*3=30, 7*3=21, 30+21=51.\n\nNow, 340 + 51 = 340 + 50 = 390, plus 1 is 391.\n\nSame answer.\n\nI could use the box method or something.\n\nAnother way: 17 * 23.\n\nLet me think of 23 * 17.\n\nSame thing.\n\n20 * 17 = 340, 3 * 17 = 51, 340 + 51 = 391.\n\nOr, using columns.\n\n 23\nx 17\n----\n\nFirst, 7 * 23: 7*3=21, write down 1, carry over 2.\n\n7*2=14, plus 2 is 16, so 161. But since it's single digit, it's 161.\n\nThen, 1 * 23, but since it's the tens place, it's actually 10 * 23, so 230.\n\nIn multiplication, when you multiply by the tens digit, you shift left.\n\nSo, 23\n\nx 17\n\nFirst: 7 * 23 = 161\n\nThen, 10 * 23 = 230, but when you write it, you shift it one position to the left, so it's like 230, but written as 23 with a zero or shifted.\n\nStandard way:\n\nWrite it as:\n\n 23\n\nx 17\n\n-----\n\n 161 (7 * 23)\n\n+230 (10 * 23, but since it's 1 in tens place, it's 230? No)\n\nActually, the second row is 1 * 23, but the 1 is in the tens place, so it's 10 * 23 = 230. When you multiply, for the tens digit, you put a zero or shift left.\n\nSo:\n\n 23\n\nx 17\n\n------\n\n 161 <- 7 × 23\n\n+ 230 <- 10 × 23 (since 17 has 1 in tens place, it's 10 times)\n\nBut 230 is written with a zero: 230\n\nNow add: 161 + 230.\n\n161 + 230: 100 + 200 = 300, 60 + 30 = 90, 1 + 0 = 1, so 391.\n\n160 + 230 = 390, plus 1 is 391.\n\nSince 161 + 230 = 391.\n\nNow, is 17 * 23 really 391?\n\nI think I know that 20 * 17 = 340, but 23 is 3 more than 20, so 17*3=51, so 340+51=391.\n\nSimilarly, 17*20=340, 17*3=51, total 391.\n\nOr, 23*17: 23*10=230, 23*7=161, 230+161=391.\n\nAnother way: 17*25 = 425, but 25 is 2 more than 23, so 17*2=34 less, so 425 - 34 = 391.\n\n425 - 34: 425 - 30 = 395, minus 4 is 391? 425 - 30 = 395, then 395 - 4 = 391. Yes.\n\nOr, 17*24 = 17*25 - 17 = 425 - 17 = 408, but 24 is 1 more than 23? No, 23 is less.\n\n17*24=408, but I need 23, which is 1 less, so 17*1=17 less, 408-17=391.\n\nAgain 391.\n\nSo, I'm confident it's 391.\n\nBut let me do a quick addition: 17+17=34, and so on, but that's inefficient.\n\nI can think of it as (20*23) - (3*23) = 460 - 69.\n\n20*23=460.\n\n3*23=69.\n\n460 - 69 = 391.\n\nBecause 460 - 70 = 390, but since 69 is 1 less, 390 + 1 = 391? No.\n\n460 - 69: 460 - 60 = 400, minus 9 is 391. Or 460 - 70 = 390, but 69 is 1 less than 70, so I subtracted 1 too much, so add back 1, 390 + 1 = 391.\n\nYes.\n\nAll ways lead to 391.\n\nSo, the answer should be 391.\n\nBut just to be thorough, I can look for patterns or something, but multiplication is fundamental.\n\nOr, I know that 17 and 23 are both prime, but that doesn't help for multiplication.\n\nOr, 17*25=425, as I had.\n\n17*20=340, 17*3=51, 340+51=391.\n\nI think I've confirmed it multiple times.\n\nSo, 17 times 23"}}},{"text":"\n\nTo find 17 × 23, we can break down the multiplication using the distributive property. This means splitting one of the numbers and multiplying each part separately, then adding the results.\n\nMethod 1: Split 17 into 10 and 7 \n- 10 × 23 = 230 \n- 7 × 23 = 161 \n- Add the results: 230 + 161 = 391 \n\nMethod 2: Split 23 into 20 and 3 \n- 17 × 20 = 340 \n- 17 × 3 = 51 \n- Add the results: 340 + 51 = 391 \n\nMethod 3: Use the box method (traditional column multiplication) \n1. **Set up the problem:** \n ```\n 23 \n × 17 \n ----- \n ```\n2. **Multiply the units digit (7) of 17 by 23:** \n - 7 × 23 = 161 \n - Write 161 below. \n ```\n 23 \n × 17 \n ----- \n 161 ← 7 × 23 \n ```\n3. **Multiply the tens digit (1) of 17 by 23:** \n - Since it is in the tens place, it represents 10 × 23 = 230. Shift one position left (or add a zero) to get 230. \n ```\n 23 \n × 17 \n ----- \n 161 \n 230 ← 10 × 23 (shifted left) \n ```\n4. **Add the results:** \n ```\n 161 \n + 230 \n ----- \n 391 \n ```\n\n**Verification with alternative methods:** \n- **20 × 23 approach:** 20 × 23 = 460, but since 17 is 3 less than 20, subtract 17 × 3 = 51 from 460: 460 - 51 = 409. (Incorrect, due to miscalculation; correction: 460 - 51 = 409 is wrong because 460 - 50 = 410, minus 1 more is 409, but 51 is 50 + 1, so 460 - 51 = 409. However, this should equal 17 × 23, but 20 × 23 is not directly related as 17 = 20 - 3. Correct adjustment: (20 - 3) × 23 = 20×23 - 3×23 = 460 - 69 = 391.) \n- **17 × 25 approach:** 17 × 25 = 425 (since 15 × 25 = 375, 2 × 25 = 50, 375 + 50 = 425). Since 23 is 2 less than 25, subtract 17 × 2 = 34: 425 - 34 = 391. \n- **23 × 17 approach:** Same as Method 2, yielding 391. \n\nAll methods consistently result in 391. Therefore, 17 × 23 = 391.\n\n**Final Answer:** \n\\[ \\boxed{391} \\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":2207,"serverToolUsage":{},"totalTokens":2263}} \ No newline at end of file +{"metrics":{"latencyMs":7294},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"First, the user asked: \"What is 17 * 23? Show your reasoning process.\" I need to think step by step and explain how I arrived at the answer.\n\nI recall that multiplication can be thought of as repeated addition. For example, 17 * 23 means adding 17 twenty-three times or adding 23 seventeen times. But that might be inefficient, especially with larger numbers. There are better ways, like using the distributive property or breaking down the numbers.\n\nI remember that multiplication is commutative, so 17 * 23 is the same as 23 * 17. Maybe one of those is easier to compute mentally. Let me try breaking down 17 and 23 into parts.\n\n17 is 10 + 7, and 23 is 20 + 3. I can use the distributive property: (10 + 7) * (20 + 3) = (10 * 20) + (10 * 3) + (7 * 20) + (7 * 3). Let me calculate each part:\n\n- 10 * 20 = 200\n\n- 10 * 3 = 30\n\n- 7 * 20 = 140\n\n- 7 * 3 = 21\n\nNow, add them all together: 200 + 30 = 230, then 230 + 140 = 370, and finally 370 + 21 = 391.\n\nSo, 17 * 23 should be 391.\n\nI could also think of 17 * 20 = 340, and then 17 * 3 = 51, so 340 + 51 = 391. That's another way, and it might be simpler.\n\nSince 23 is close to 20, but 17 * 23 is not directly related to multiples of 20. Anyway, I got the same answer both ways.\n\nI know that 16 * 25 = 400, and 17 is one more than 16, 23 is three less than 25? No, 25 - 23 = 2, so it's not symmetric. Better to stick with the first methods.\n\nAnother way: I can use the fact that 17 * 23 = 17 * (20 + 3) = 17*20 + 17*3. As I did earlier, 340 + 51 = 391.\n\nOr, 23 * 17. 20*17 = 340, 3*17 = 51, same thing.\n\nI can do long multiplication to verify.\n\nSet it up:\n\n 17\n\nx 23\n\nFirst, multiply 17 by 3: 17 * 3 = 51. Write that down.\n\nThen, multiply 17 by 20. But since it's tens place, it's actually 17 * 20 = 340. Write that with a zero or shift left by one position.\n\nSo:\n\n 17\n\n x 23\n\n 51 (17 * 3)\n\n 340 (17 * 20, but since 20 is 2 in tens place, it's 340)\n\nNow, add them: 51 + 340 = 391.\n\nPerfect, confirms the same.\n\nI think 391 is the correct answer.\n\nSo, the final answer should be 391.\n\nNow, I need to present this step by step as per the user's request.\n\nI'll write it out clearly.\n"}}},{"text":"\n\nTo compute \\(17 \\times 23\\), I can break it down using the distributive property or by simplifying with easier operations. Here's my step-by-step reasoning:\n\n1. **Use the distributive property**: I can express 17 as \\(10 + 7\\) and 23 as \\(20 + 3\\). Then, \\(17 \\times 23\\) becomes \\((10 + 7) \\times (20 + 3)\\).\n\n2. **Expand using distribution**: \n \\[\n (10 + 7) \\times (20 + 3) = (10 \\times 20) + (10 \\times 3) + (7 \\times 20) + (7 \\times 3)\n \\]\n\n3. **Calculate each product**: \n - \\(10 \\times 20 = 200\\) \n - \\(10 \\times 3 = 30\\) \n - \\(7 \\times 20 = 140\\) \n - \\(7 \\times 3 = 21\\)\n\n4. **Sum the results**: \n \\[\n 200 + 30 = 230\n \\] \n \\[\n 230 + 140 = 370\n \\] \n \\[\n 370 + 21 = 391\n \\]\n\nTherefore, \\(17 \\times 23 = 391\\).\n\nAs a verification, I used another method: \n- \\(17 \\times 20 = 340\\) \n- \\(17 \\times 3 = 51\\) \n- Then, \\(340 + 51 = 391\\), which matches the result.\n\n**Final Answer**: \\(391\\)"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":1043,"serverToolUsage":{},"totalTokens":1099}} \ No newline at end of file diff --git a/llms/bedrock/testdata/TestAmazonReasoningLegacyAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningLegacyAPI.httprr index b70ab705e..d8acd5677 100644 --- a/llms/bedrock/testdata/TestAmazonReasoningLegacyAPI.httprr +++ b/llms/bedrock/testdata/TestAmazonReasoningLegacyAPI.httprr @@ -1,5 +1,5 @@ httprr trace v1 -572 2256 +572 2489 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-opus-4-5-20251101-v1%3A0/invoke HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -9,17 +9,17 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"anthropic_version":"bedrock-2023-05-31","max_tokens":4096,"messages":[{"role":"user","content":[{"type":"text","text":"Think step by step: What is 17 * 23? Show your reasoning process."}]}],"temperature":1,"thinking":{"type":"enabled","budget_tokens":1024}}HTTP/2.0 200 OK -Content-Length: 1874 +Content-Length: 2107 Content-Type: application/json -Date: Thu, 16 Jul 2026 10:32:53 GMT +Date: Fri, 21 Aug 2026 00:34:54 GMT X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 X-Amzn-Bedrock-Cache-Write-Input-Token-Count: 0 X-Amzn-Bedrock-Input-Token-Count: 55 -X-Amzn-Bedrock-Invocation-Latency: 4139 -X-Amzn-Bedrock-Output-Token-Count: 287 -X-Amzn-Requestid: 201f0617-4742-4070-9e26-50b59e2f46a5 +X-Amzn-Bedrock-Invocation-Latency: 7684 +X-Amzn-Bedrock-Output-Token-Count: 352 +X-Amzn-Requestid: de64385e-0107-4214-861a-ff59e0565dab -{"model":"claude-opus-4-5-20251101","id":"msg_bdrk_01MpqbXXcoPzQeD62qkbmPgW","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I need to calculate 17 * 23. Let me do this step by step.\n\nMethod 1: Breaking it down\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify with another method.\n\nMethod 2: Breaking down differently\n17 * 23 = (10 + 7) * 23\n= 10 * 23 + 7 * 23\n= 230 + 161\n= 391\n\nBoth methods give 391, so that's the answer.","signature":"EpYECm4IDxABGAIqQGv7Af6kjI1vHTW9OE5xfaki22NXgC6zWzCKH//HlFgaqte5szAd33qZ+oj139S9F36w7VB8R6c22Wd/jqhkCAwyGGNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMTgAQgh0aGlua2luZxIMi/HOy5vBu5PqTuZmGgzNgySQMYsiiZM/0okiMMxIn6JduQvMbMm5B2NU3Svjm0f1k/5cktaC7hAbaQh4K6Xd89g4WbYBRfr7us5GXCrVAvvN8X8x7r2OS0PdwQmILPcCH29bXhCOUq/0NVJNEbagHCI6So8O/Kgo1D4WsAxbm/dvgLSfsXoma0HarVYBarfl2AIerXg/3Gu2Q026rSBKJ/oNhbiy2OBB+i4Hh7kYyF8b0e7eymzCfmZ1jU+e/6cU7/U+brNREG7O50pAGxjajcNvkXjolnwmv5XYK1gw9QM0x24vQ3+/mPhL8NS/+Fr3ka0YAHluz7kXWknakuALCyjoNMaX7gpNE7JJy7uvXupap2iBEeXuls/IU/0mhyJO+cOZzRcjCIoHS2E8A+ZikgMdB1LmpndmBs8gzZGYF6S31cP9E4oGsO/MQkDSsF3ze7sjrfhxzqm8NRfr9QThFQ/Ux41EmrofITn6m67Aieci+4SYAr1yaSXpv9ll/O57SB/eQvsDuzWFWQUJso+d+FGN12ZU9L0RPOebBluegtqz2vsqGAE="},{"type":"text","text":"# Calculating 17 × 23\n\n## Step-by-Step Solution\n\nI'll break this into smaller, easier multiplications:\n\n**17 × 23 = 17 × (20 + 3)**\n\n**Step 1:** Calculate 17 × 20\n- 17 × 20 = 340\n\n**Step 2:** Calculate 17 × 3\n- 17 × 3 = 51\n\n**Step 3:** Add the results\n- 340 + 51 = **391**\n\n## Answer: 391"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":55,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":287,"output_tokens_details":{"thinking_tokens":154}}}574 2857 +{"model":"claude-opus-4-5-20251101","id":"msg_bdrk_017UTXap4VsUrBjAFCoif2Ji","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I need to calculate 17 * 23. Let me do this step by step.\n\nI can break this down using the distributive property.\n\nMethod 1: Break down 23\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify with another method.\n\nMethod 2: Break down 17\n17 * 23 = (10 + 7) * 23\n= 10 * 23 + 7 * 23\n= 230 + 161\n= 391\n\nBoth methods give 391, so the answer is 391.","signature":"Er8ECm4IERABGAIqQCeKDTppmbScQYuFZXlTY3X8t4dTMv8Qsaueko7rRkBiftNobxgxA20BrqK/3gYqIY3curDYmuHz3FtCru0jMPMyGGNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMTgAQgh0aGlua2luZxIMnkZbrnBUbExRpeM6Ggzs8rAvo5O6poxHRSAiMHmsbyz/0XaWWcuztsok6y+yMlT9PlJa+Zsuxzi/4CgAMyyNX67IyABAJ9Nper20HSr+AhphfzXDRXyyAVgAqsbh3xCFV8EoMJ3S+GlS6SwzCPS7VJBrABcC3EaDxHdscG8F+gFeCZRRIDE6cGBC5K9pesoAxhPz1aN/bp34DZn3cbvL4XVEBqYH/NH0ZgzLxW8ySWyfjmMmQJD8gB/+xFsJNKKdA9zOvVGJ9WonqSXGqr6rW9Ape38bqVGqZTfJqxcaIby09adUdGJsXXdlJZ4+ryFSU8YquqpEMQTdnazK4aJPg4ZQnqKTaD+y5oP5SIwX28Se0EhUa9fzb4xxKa/qqew9rDFBnpSOd8y7Upm6oGwZ6dn7P99xN5JZstEcl5IaE/rG5kybAP+uoHY4Jcq2smciWZ2cbvk/asg931Aj+/tP/Kkbf1gCHWt/i/GVaRnX+AkFkxGcDyZzdvyJV9QNG3SD3qCzz/7jzml3icIhYnCwYKv/gsCKOL0yDu1s2oRhUEsCXs8H3+frNCA+P2UHECuXpsMWv1YP0Mp6P/JGb15HwbLtt7QGLJZKmTp1xvIYAQ=="},{"type":"text","text":"# Calculating 17 × 23\n\n## Step-by-Step Solution\n\nI'll break this into simpler parts using the distributive property.\n\n**Breaking down 23 into (20 + 3):**\n\n17 × 23 = 17 × (20 + 3)\n\n**Calculate each part:**\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n**Add the results:**\n340 + 51 = **391**\n\n## Verification\n\nI can check by breaking down 17 instead:\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✓\n\nThe answer is **391**."}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":55,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":352,"output_tokens_details":{"thinking_tokens":169}}}574 2917 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-sonnet-4-5-20250929-v1%3A0/invoke HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -29,14 +29,14 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"anthropic_version":"bedrock-2023-05-31","max_tokens":4096,"messages":[{"role":"user","content":[{"type":"text","text":"Think step by step: What is 17 * 23? Show your reasoning process."}]}],"temperature":1,"thinking":{"type":"enabled","budget_tokens":1024}}HTTP/2.0 200 OK -Content-Length: 2475 +Content-Length: 2535 Content-Type: application/json -Date: Thu, 16 Jul 2026 10:33:00 GMT +Date: Fri, 21 Aug 2026 00:35:02 GMT X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 X-Amzn-Bedrock-Cache-Write-Input-Token-Count: 0 X-Amzn-Bedrock-Input-Token-Count: 55 -X-Amzn-Bedrock-Invocation-Latency: 5783 -X-Amzn-Bedrock-Output-Token-Count: 429 -X-Amzn-Requestid: 7592d99b-9d94-4dc0-b212-3994f3c15151 +X-Amzn-Bedrock-Invocation-Latency: 5973 +X-Amzn-Bedrock-Output-Token-Count: 496 +X-Amzn-Requestid: c4f05bb6-451c-4f54-9e0b-7dd010a9fce9 -{"model":"claude-sonnet-4-5-20250929","id":"msg_bdrk_01QH2GTUN7GM3CCkQUNw2EdZ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I need to calculate 17 × 23. Let me break this down step by step.\n\nI'll use the distributive property to make this easier:\n17 × 23 = 17 × (20 + 3)\n = (17 × 20) + (17 × 3)\n\nFirst, let me calculate 17 × 20:\n17 × 20 = 17 × 2 × 10\n = 34 × 10\n = 340\n\nNext, let me calculate 17 × 3:\n17 × 3 = 51\n\nNow I add them together:\n340 + 51 = 391\n\nLet me verify this with another method - the standard multiplication:\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n\nYes, 17 × 23 = 391","signature":"EuAFCnAIDxABGAIqQEDvlN0GrJBhkxgTAM8DzJnSaUR2UAjeBxxgAdjUb+XaHaxryuSBQ3/hcpPhFo4YvFBOyhEl/9gjTFb6SQinQkIyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgwKocDqhg2dhEhVa4IaDF7ZnJFHOKDGTXzUUCIw1h8g8YNycbk5Ju+LClAAYS8guWXSU9LpvNorCoOfc7HgUZKP2eZ1rEkMRcqb5eJoKp0EKOr4mgVSV/JI1KBrN6jH/jsvJ0ETqm+unRJOmdiyN/P00YIS0r54ooL4UfOE1/5IUzhuUJa2VjPjlbg+U6Svg5TrJqJnqzySRjchniowWWJHAkJ0yZ/h+QTd3SpR5hW0jdS7PDQNNzm7024sdtzXS6bC0RrVeZYVKnmCd1bdFjrim3YtCKPJCeym0kZGliWw70+YzO/bOFRtvnJmkR03AX3u6OWQ60umTnca8Yi69/2l5tVNvWpQhGRVobEPYFUq4jZXZMNRf1kpEc6PEp4ucP5RWPtc2OpfHZal0+HDS75cxJVFprnl5ysMmNfgVqYu7YNfZ80pwwvjEphK49YDmPfq2ba6qZNJbuNhtwBiIdqfuSoc0nndYKDC9fM7tSgevVUC6UxXeRpIl7B7/ICSrVK18AcIm9ofaupjovw5Uc9c6JZy7y/zytCa7ATmZYUDxpblNMtFZKeneW0JQbt8Qm7XuylcaDVAXK1faoZI7Xcg/Q9tlnJPOT/LLWQ4PNmL+TCWMi7IDsD2wnGZ3hMbQX9EvglXl3L1OZUtmf4wAL+f11y02Ai9vzrvm51Bjrh9UNWIG9a+pnk+FGfAFwGRPgwJmDLMeZtv+ZxWS1CJWZc90lxuqsVmJLHruGvp4CMIAC0C1F12mpkdXB/j2zKgAjIHeQxZdX1B8qHb846QtQ935qEdHQAHGWkt0f9I8TAXnn8lKTK7BNw36fuYtxgB"},{"type":"text","text":"# Calculating 17 × 23\n\nI'll break this down using the distributive property:\n\n## Step 1: Break down 23\n23 = 20 + 3\n\nSo: 17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n17 × (20 + 3) = (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n**17 × 20:**\n- 17 × 2 = 34\n- 34 × 10 = 340\n\n**17 × 3:**\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":55,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":429,"output_tokens_details":{"thinking_tokens":228}}} \ No newline at end of file +{"model":"claude-sonnet-4-5-20250929","id":"msg_bdrk_01Vv6v1sPM54Rsn1VsMax761","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I need to calculate 17 * 23. Let me break this down step by step.\n\nI can use the distributive property to make this easier:\n17 * 23 = 17 * (20 + 3)\n = (17 * 20) + (17 * 3)\n\nLet me calculate each part:\n- 17 * 20 = 17 * 2 * 10 = 34 * 10 = 340\n- 17 * 3 = 51\n\nNow add them together:\n340 + 51 = 391\n\nLet me verify this another way:\n23 * 17 = 23 * (10 + 7)\n = (23 * 10) + (23 * 7)\n = 230 + (23 * 7)\n\n23 * 7 = (20 * 7) + (3 * 7) = 140 + 21 = 161\n\nSo: 230 + 161 = 391\n\nBoth methods give me 391, so that's correct.","signature":"EuAFCnAIERABGAIqQOChIkfnAQm6/H+PkDC9epXmKF9nrHi6nqOaGyiXVXWnIymiTuT+Mq5bH9Q6XZ3W4WSrRaXWOwcqcFU6bTFBaRMyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgw0h6Wm99cEe+mIeW8aDH9nIQHiO6G6XXP4liIwpYtafRDyVWCclVvgJ1NJzWspg5clw5kEbseOoHMkT9V/EKwRLtWDGnErF8ZtWF64Kp0EMzYe8nG85/Wio01eB/Olfx/YQN3wRxmpNENr+D0d+RU8Y1Mpxkhx0A5wSuWxj6huA2ZXdnc328sSoJan16p4u2UisOTuv2PQ9sYRkI6q/US5IwuI4qabnPEl9gBqtmF6a92Zlnnrp9vC+jBAlxfjyO6OSdOJqooeiPNMgnKH6gerqZGEHGcTmsPIzUvYOqQUrKDB5+AoFuHB+H40IwqHbcyre1v2kFggVGRoQtVQML0XSw74e9+VbYvdKgTvcUbbiStuA9lUNBb9J4FOLHD4NDVHEju/gDG37+Ihrshu8g203jpxQKrOlXa/OC4E9OHNVjdpuqkKExCS95yZeM3eKhNqJdvtr1tH9X4yKoczAmrdC4C4gjrvcmpEMgxcUqSa9lvoPQoOTYC+R0tA3755hF+RmpyBqKY4SuevXu+5IrmTOmqVB5u04LzyjzjXa8mi/IPFMrs9pqKObGpcpVwF6pyO3I8N1PkDGbc80e707iTttvhr28ro++z6PN3yd9KSK66S/MEmwivgZebcXVq9uOXBaWxju1LLFWJN70jalt8m4aweuMFiFB9Pvsw1dcQp1EOc1huk3uwNMvLzZUjtli5g3IYxwOXGVxw17igKxcwfg5xM1dwS/D+hHASEg97UlANHjFHEHQI3f0QPWfYeJifuUzcxT2IUC4WVmSHQnmUr6UZDUWCwtkfpk/neq2PW01Dy0riJzvauwV/oRxgB"},{"type":"text","text":"# Calculating 17 × 23\n\nI'll break this down using the distributive property:\n\n## Method: Split 23 into 20 + 3\n\n**17 × 23 = 17 × (20 + 3)**\n\n### Step 1: Calculate 17 × 20\n- 17 × 20 = 17 × 2 × 10\n- 17 × 2 = 34\n- 34 × 10 = **340**\n\n### Step 2: Calculate 17 × 3\n- 17 × 3 = **51**\n\n### Step 3: Add the results\n- 340 + 51 = **391**\n\n## Answer: 17 × 23 = **391**\n\n---\n\n**Verification** (using another approach):\n- 23 × 10 = 230\n- 23 × 7 = 161\n- 230 + 161 = 391 ✓"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":55,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":496,"output_tokens_details":{"thinking_tokens":261}}} \ No newline at end of file diff --git a/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr index f4d6aca51baf5768e8860ab0c12e57e14292d89c..7c9e9f082ebb69b67da64020d1c7317e708447f5 100644 GIT binary patch literal 108361 zcmeHw34CK^)&2}9Fe8JCsNlxsWt(XyZT6)&jA_$-Z_}nN19+3%v}v>FrcDa>lT}4T z1yn>p7R5n!MEux91VlCgksbX$1Vshem3{d?=iVeu(wjD&nKt+PE5F~Jq3fJ;-t)fq zyyraUITNB7OC&fk!TSVm+OXDQw{td|#k97schJpE;H$}o`g*V6PegrFx2E#&K zDyb9rq^L90@nL>88sTS>b-rl0J{ z)cc~5X(5pmbV)HG@L{ga?e42L)EU;TZHp$w2Cl+?ZQa_Tq>#`#$At)fD8xs`eG_~z zG9J~D*onm2rf5XO*K}P%WL%tR;EWFAy0y-fI1x<*XL&IgjWlph&!Ab?*6nQ44YoOr z7Aq$T(2I`+byGrSUH(_NGcloo<72T<&?o<7{bVv4S+{oG+M^in_Xp{h@u6-~e?W+* z@H<+9Ldc(F4M#C?A{d#1T=M_p_pk;gM0jsV@UxA~oAQqf;*nx>N{HaQ4SJ(l+Q_0Q zF_sdKgrNdK`R9Z{Aes>IlVQOhOof?*Zwf{NLPCi61n8OlwlJS|XMdAf@33xUq7aS= z30_Pk@Xs3XLt!DAYJ@cYR?^8brMnts2VgyoW=5aYZV`R@kKGr@~oFv%Hg zTn%S5ZRQ3iqBC43no4k3KiC1vaWOaues>*{4&TTU(GaPb!usH2NnT)Mot`u5^;~b~ zoLO@#W3yNtbDy1W?CFR<>uGhuG$d9WXWd#CFJf6*62Xm}(ZD%V9J@&KaJK=(6h)^kW_EcDrA&S#%D&$*eQO=sK^_%j;~s-C^_^EqaIEM{B!k z)vELH3|zKq^o$QR$p5lV#0u`ZYWJ)i2Sq+1u4~8|GW*4k%=43m?6+sX;e+z8I*P?$ zBi`%t3xV;8;N(;&9Erx_iKLjCo=InBosCVd=9bpB_73<-)}nke8BB`UT}*0PbJ8q? zdmN8vaN_9Oiv|2>R;0!d_N_|@iTpN8S@@gUBYq*x8uS|(JYD3;rSmS(l=CLIyy8p- zo9w8Ss@d7q-P7C0q+Q*QZiZIRl4h^8-}VI!Y9?<4ZWFe|HfY#CFz6l{_KYy;xu@S9 zfR=ZYrhEMDmVatgQ$1I^h^9>1CDLMt8h4Q@rmsHd(xxgVteMHIUtrOg+Xgbf52FD}WH!y3SZf|S~54ATBI2&7??eYHZ=2~}itk>u= zwM9E4Efbw1UWe5+Ixt{pbtNJ_)+Udywz)0TJ8KH`XGRl=adS91oE&s`?NhDY9pSN| zxUVzSo`h%kus^)nS?mBGDSU?wiqY5( zei`Q9a7_B^XI{DjLflB6*!-#YYKsL~-q*6B;I*861@F%g^yS4{FwS7o72_xD1i3FK z*^g{!xUR zFC^QpfA&L5H2#YlMJ5AR*uT^l`n_7BYx9H|M@g`m%lBZ$Yvj zl5|@yelJ~Z>HN`|NW+|fK0lLIfARybLA-}a#P5FZ)ZbKDL~_XXLJ1eUX{ZDUCMJD) z`tS~D^bl$FJNt8=tg==Ihe8~#mYg^taDH5e5zPeDs2?R)ue{7~plQc7HZ z>bI+`RB&3LJ2YWWMZL6sPQF{m>iG`s;CPJ5&w}W+eVn=b6lZYwQBXQ5Txgnh8s&#o4bVt zk@xf4QQyNaNCbUysT#R96qGaF_`qZ|8H}Yrbir5iBB!I$y z&}8upH9mKPf!IS+_3iG-66(F~F-eXDN zi8PPT)~9CMYXjo6ui4yGJ7u%;E~h1IbSE2o#%IRITgR=&O#6(lwzXxdrMERSI5E=I zYUru;h?$96+u)SYJQDVZBN^TuPMP}6t@Sadc{Vm03s`3y?PDf;i!D9w>z?kMOgD>w zql`8R-mur1NKAUd{*lqV*%yvM8RX%CcSkoDJIAtK8nIUkZ)gi4 zH0fwzlHptT9S%9^b>=za@oTOtmUVfzp-M_p9g098Qzq@TuX6@s641@F;iCEX%6qhcq`p0nJo& zy9Hq8OS7xx(g93*{dQjr;@?1P@OlF~q{?ehl$~4<0Kudyj~i@;*qSLR$|#*}+Yn6p z*yft=LmAEBWt>!*E>wm|pVV#L86y6OT;=0mV-r<&6>fc@c(SiBNgqoPrssDg;{n%p zKT>5GT{*-HAx8SLh><0fYnjwB_E##(YQ@Qwiqky9S5y;ZQp9u{-LkY&;u%~D_=S2q z^7;F0OThVef8;IbqZyo_aXy%VNxw+ldK!e(%(f-CPVwGl()AZNQvUvGJf7cl1mCLi zwpD;38&Ih%=jk}Ge|y|}5cggZ`S#tqPpGoUv@s7jpq#jcAxo}Nslb_;l)0>*a%jII zZCoRd4^>$kL}FXEQ1@a|#uP2876k(@P-o5)q(Ef1q3J3sKv}4q281(ORD*&JvVw(? z8;_=L8vPK|x{p+Qd%|z7vTA@#Z8+e7ZG90i>5=9G3Ae13LsJc41aS3dzfB36r^x2F zIKFvom2Ixzi*gYA?ZG8b8xincObU&D`xR*S7-_iI9lLy@>Kand09rz~;~2wk!L9N) z2jBD^D0Mq2_F8(E<|->za1ao#^!G%#HUT)LVj^WUYwzP~(?|jT5 zlWL8BBN*QwXs!OR{-i*a*NUJ?`AwFE^UV*bDhzgyzy8^c(2D|IEnuZ-UlsUbd9|3d z|J^52Xrq;!fDCmjbiT5#$D})UzyI$LoidPGz_8}gZq)x!EH;z=HFC{y>nyyOn(B(C?jOsq$g; z)Y&IiY<}f#$|T{<8?J@;nnCk9Bgq*d(V%X9ChfP+dtZdO=a9v(yWx# zJ$L9x2&NT~zZ@MA?6>@-bdg)0e3>}*!Pf)ON-JTXj60;egifbhqPK&7Vy=sUN%!0r z_!$(t8ILDpfAud__N9s|2+DPwNu56l9|PGnlK}2d1$|S6OTwfhIOk;$Q8O>BVIdI= zWI29{GfE3q4&=j{QhJLjkS`Flv^9+cT{C>DJFg5 zi4n@zX=Q1!FdUjHR6V~8kCpo3p!c!y#Xm!{JIU!Z(2BjtCMoN30DyeqOxo>%-3eK68#&5KQx&P4PL#odv&d$K z9*fCOlx|FNjNJMQ$bUKMpaGH^tAqng`g7;jiy-1R@eDtB_U_LWi@B^Iw)ve; zOlsWc2hT$kTGalUz4y4QSezZ++N2JgE8p;RiRG40L$tr)>G{V~o1ZKeZ`m52>~=?) z{PPkznm{31Nk@~(fR3gwe0b(5i`Bw`8_Q(a(H%`$!c~h7jF=XKL2m%_>VYPwzIy#l z7VG~B_Eq@6|3}QK2D8x&yJxvMbvuY!)mWBV)gt)(0l#3?2@ZorXV%*-I_xV!XEGV| zb{j7^Y$k{!_b$5>czF_AmWvDo(ZVr}1dDBg;d)NOfI)ne@*GzD8TV8!)J&;y|Qh@B>&|)O}AcWoiCM zn*6ElyoWXDhH?}^Z(o2xFu0+-HYHO9m~`XOH{S!rv>f$v(EzEHivb>)3>?3DsP$in@fb(zO@yDc#ueq)P zg8vT*|KqX9QfD{-0PKW!r=Hw6j2l=1TA3+JDGI(X>U=9x+-v^N>xKB zk5|@0;YG;{xwVZ+yIUTl>Y50eMbMAG9 zt2MYxNDRX3h{AE(mue)B1VOIp`2z@s{=cO1Szmqi=UP=6&=>VpTZju1V=>0QG_3g* zl_yGBWs;liUR2}@_W9+BP+7}qHx#bvjXsLWdrNxVWzQQ-I9mNYwSL@9UaQejVH=f> zghk%wOgiV9mmYu`HlukC!34mSd}Ja&el+PaM0b=>z_(?`I_CK zX4814wKY%0G&e_UP@m~`wHvzK%`@HZ`7^cnj?oTB##cWPpQ^9zGJ%CD6R;b49FAUN z?S$Fxa@I$K-7TYm9?M8;vmvPujSY1O{OqjPY>ao;k7FoU6ZTEV+hQdBiOy6N`3nnI=F|Q#$HaeZ?iO)1Qi|ItCJ~R^^X%8B_(UHz3?__u| z(I0EiMC09|?sQ9i+C9Vf_D>JQ21cVDk&b$EY|PL$)tKlVGYvH-T)yyRsy*2!G{;7U z{h`*u0lwL5?3qo@I)zMs#_aDH8E9$mvgs4OEp}hJYiumj9f~&%q+GR;XnfE+7I2v@ z9X_$QGhyoL*4xcPftl_J&rod0YEE@HLt&A3=|fGuX{SFG=n_NiJ>F)E(H3yT96`Yz za7<0KG>5&lu8{$&uQlmt?K8|8hCR(=p3z8`r)Su0>+P}h44C49L1Ww#8%U20^%ye& zek`GH^NbojZBt|EE=O$I+8m3=LLRZx=nh0%$MnhBW^=ToX{Occ69#8Pla{#2YVCEl zwK&}7*{SZvsm7KmM@aBCjgB`D#_A1jS2W#Xb_C4hea7HGz}1!P4EJ<(OxZ?y<3m=j zd15%`X>DpXHFbMCoML3Kt3432N6llA3BP65-xTxP?Xl5;gsHYQZSQOCj1SaDCr2k| zC*r)(7Ku)@#3Qx6f%^K{NGu(940YE=3~ib8wBBN@H~2k~=HX$n*(uCaN{>~(ptkw( zXXze61eU|;%O3tr@kU-W3zrO;;0wOoLe>fvuuB8c+Go{O(Pdrh&_%UkMH!S|_- z@>2M-CTd@yo&^ddwZL(dZ!uLHl~y!gmPubqwA}=;wZdnEyCg+Mm2qRK5=|VqkC}r) zRjKc(cnzmATCHda)Kj4}`*yDR2-ngz@9umG)Y44j-GW1%m~`%k|MEP-)t3kDnEP>E=b&|{cNEkG9z$0-@ElgIs zMHz%prQhl9PeSyn)J@eE28~w~6)Cg)dKPggl6@WNCFllqQ4<=aq2D*kaMP5=+7JT@0(^=4t zGG;42@1$WqLgRI`a`5CCeBdtg`~!rt_uYH~q&*$aaQy4jCG^_MngxbSt7L)E z{(SQVn<36+c=}&{^Di5Vb1N&12D{0k-_hNv6MS$gg>ie?_Ei0U+EXzsQOv|J zG;xvfd+>|@pW0LH2CHSqx2HPFjn*^T?1IB$5p?>1%|WB}3_7pF?9&-cyw%{d>wR9D z^e4Bc{s^0XKzQ=uzZP%${@Rd(z}1Tnr3&x-RmR|uh~yl0h3 zEpd5-AR*B_Yad(na8Of*q> zH_7}t2Kl&}?$m#q*}VxWYZ-8dyHFyU8lS-5fczBoAyb|~9)P2csbP|J&H3Midelwh zx$%zA{aJ&n>Id1kQkGO#B2WKy^tD^*5=8ALTAk&|DTTdC<0B?H2hRBl^r;H*SEYwb zDv83q`r0rl{kt2ef0gc0E6(~{sRI7oRGI=MkfwR#vDYB=izIo&PdfD)+!{1RCzhR} zQ$bhYJlOu+1Q(#^9{wB9bJaPGIA)( zdC>(~w1PB9_9g@5t_mulQXh<@!d@Yf%*RX%c4vWv<(+a5?rG!QcDd<3wtrq;K!sJ z9&7p_^s5T6utFb$d#OgKOfvTTh!FdKqy^F_+lWEGBnFQBY)iyJmvUc%Vp_gC$ml(2 zXi`7OFxL2<|2`Z#JVOg)yKaM1gIgbGSBHaS_thp3Kh9O~B`7O{;%cLo`8gvYx z2VGyDjsryY$r}l%pk+O96v%zBAdxP&ULbNf$#ntr(DJ!m%NgZPUbzNcQ6ySaf5okQ zm)rMQwQBXQw6p%+zt_nc+*uTsHX=~VhTKVRoDxUScq5mLB5TZ7aC<7eXOz6VfDmL- z+rh65!30{4&JRv{@ zfq=yrFpmTsLj%$7nW@%<&oet|n+gkdqc7Ax>1rQu4|R?;PPEmw8vCNX$*~@5d)H)W zpe@+g(bk!2GIY-N^-t(ylltMYPI0JrD(!RW?L*N_oaY0LCVhOOzsHH@SWB>fsI_O( z85|0=Hm8%0A+tYd9GWti6XJ}q)zs27JJyq_?@o{QcTUFRT`6I>JwDblJ8bJ6=^ySj z*9WJj>f^KHZnxLOi#AJ#KiM-f*%t_jQFAQZ>gb3KPY>1#yxH9^xJ}cB`g*(1lJ?Zj z^jh^TGtu#uk(9&U-kho*pXiVH8ub$f)5uUH9Mx%CQol~`%K4lx^JYzlbGpmoiG}V zA(yko64ZBy&9Sz~Kx1>7Hw=#jW({7qYuFfw&GfX}r)Nh;eZ7I0p(_+lOxnkWobKr< zw{gnhay5qCu39hO);ka!Y%=#nhB~J0!$aMpz0=`jti4IJwRP6|X5xMBbZ4J_q|FfR za(Hb*ysbCctIrr*$@FkvYh&k#Yjk8_)X>6b#>Zop;H)b>6`7j!hJ3>G+8Fiv(%hg0$J&~!(5z|t7jcbVh; zu3mR4>Fu7F?4J!eBC`X1@npB?33Qo~L-j(fIWawIcTD$-j!tnp-P74Z(CJLDuX8lr zI+`BG_=Ixr7bYcct0hjLGw}=`^7+V}#cz>i1v}wHQ2{%Fa9XCqnepyM1+}W&=2eh| zWxHBc`knG2{9wMp0Hc1Hbja{iRFb+1j}|)Q=C{Af3`O}>VbZr&KXwd+eTW49o&C8_ z7CXoCX1-L`fWnDw?s%n{#B!&{tD7$T85GhCxH4NN&zpT|7zrkQ*zkd8p-)u`ohpmu zFF~`;YvIa4b(rLxd6^`yN_I;{awTud1x0W?i_v+&&@vr@OgiiEQ#V2l&1`F>f2*wg zOgioSzkCq_--<^I^HsSRpAfek11<5Z$X%}&ubfa$oVMAy5XYwA6GeS!0hjNLY6tq7sBK*>6hQW|3lD8 zD~-Bz=%_a6=BVz_=yFR7HLhu;SvuPpY62JLwyg-J3y=O64U5$ZZHb~0a6vNBVuk0w z%F%S$`)hSjt18fBm7~eDVL``ILtGb~w8^);k3$`;T;6D>^h9U2&F6;b=D?(jPTEKt z|1Wq}oSIc-g}8Q^z&?*4T#Ps&7j>7`F0$7m+)pi5CVlGVC2E~%wp2Zm;d!usH2q( z&yEPxm~_>T&e;=6X{BXf9(b#?T`zH|m~`1=7JB1o=Bkd`T}_RWhvSBcVL#~O#bC5N zXBd-Sxv+BzDqMlb;~o20rpmX0g)i#p{#_H=3!>7yUJKLbmA8B}7X*++jZoe%-$b-qS~;Sq*(ow5H=b;3xQ}RZQ|u~~ zMORTZ*K^FXAFHYIrl6rg$b05zOO$Aab}h%XHIVf>l6R#Md@4RhQ{Uv^5SYCZS&MG= zU=cYq6o=6NO@bTmx^G3fnNAgsT4o%I38HDd7+Js7^FKEM6_B1HY zzIW^m6(U!>vrol)=sL7%o0cG7h-A_ye|gYJ z&_^>>mqoVlyw+~nr~&?QBTR}XV-Zg*e3q0X>w zZCf-cHgI0SpNRUVbcs|%42FfeR8j{}h^RBv@nL>88sTS>b-rkL-P$40TIrnQLIgh) z;v?feP)tR}qq+%Ej3p9lo1zgBU(()9`nA4mH&dPb82F~djH0#>B zolUyIHYdJ;69xQBd@QJ&5;6;s6iq@wVhuWq@qT}hl1O~0JL(rg142B7-_a5jLjEKp zil^L-``?uA$!an>7P91Y#GhT*I$;{?rFg}}c-5*9Pr`I=_ zEDa`OS-K~`(P1&z1)VA2^Xkl2f!EnB4zEt|TOE3vLonFPfh^tA$=K%u2gM`C;(fkc zbWf_RPB*NTX^`H8D4vJbY}m6{l;yo!RtSo(oYko)d!c^y$)3VsI5}H<8%qC^6xW^k z{0}v#IPpJGT$SZV^5V4G9)cv?Hr_sveC{pM`Lv%5-l9dFWi}+@+u;@B`CTC{cGm>9^9HrxkAFLe?8p zsuqekm~`vJo|KipoAlA>=t0_b9_bfYrq&Cw52g;>jt(gln@azv6Z?#&&KNLF?9 zM4(4i0ACeutZc1MWh^|CEa{U!2l45!^BjAT&8!9wMb$6wIrWNtDh-RqoO4UJwRtsdQ{)2B(TwnSQ^QUBuVEKFhn>@|~y_IvVa zjnjE-lv&q`$vkKrPLc+nrGyW4y0jpO>rWZy($w!eOIR!mHd2Gh-b zZ81mRL{r!~k+2Nu%|hHN_KB|EhDETX(Y!x0 zJvA&&1;+Kh*%*>tCXc<KS(rj77pTo_@V&%GEYJG%bV!6aI{&)nc^t z4fF1Fi?Oz|-q_nTI%ppoO?75mjV+TPqw42#6`S+fIGm*_w;GqcQ2Vk6XVD$+d#cS4K$`7EcNVXVRB< zztRD5H3SAPsCX3B2WSB*A}axV;LUeZ%tHr|CU{|FMiNA|g{Ci{@nF)4_g?-kguQ?S z{{CH$+);dDE^j7N1u{3UYX}qc`VLJ%x~foTsz{ilWG-V-m4a9&lfLn_PfF0?7i8u1 z>?3DY*~&}7e&;8?6WmG*4GxPSzTwgvJyhe;3PN3`pjq7FO!~`F2kfgMx#dRq#W99V zx@#;zXCA@Zv@kf7PHSpwEqmxGq+}0Y_BfRhHM1pY&NkI<7ZIEil}y_6iU+9vxs^;l zP&0CEwa*g>uT*Rc{e?+&XKosVh+2uIDrQ1p(u>o_Q-$&pGOz~l*GdGU7M(L`;F-t2 z3o$k0$b+H~Tl~0_(`ZaO(|Z=R9Na*5e!YPmQe{WRl(6npNDRh883kos_7Gvxw-0)a zj=jf8^udXvZ?CfG00a^Qq^!VdfysOlUO9ic+W6LYpjA~$acU749gTV%jf)KER-1%@ z_JlL{r7MP3dZe;DnUi-327Kh)ZQ*r8vT@5n1}%A;LK}g*>2|stQXuEMspfGF9#7la zv&X8vkKk?e9wxX%xfma5;{%^P8v<*kiMGhAOh9t`{kVS5Z!<@W)W5zx1Hm=3w-Z7V z2X1mpBnMKd@YMkZbtdg~^P2=r(MrSG61%)Qm~^!7zF8>nB%T#7k*J)s1(Xowoqy3r zLQu2jkgkU7|LTTrsD`cbyg&M5L$&vIAf;G6rxJ67m*6D{55$1m%w_R@s~^s4wVnW%y_W71bIK4&c?*UAM6vl9p} zUqUqj%$Dg@LV{NX45_mJv!i7zu&^sX!GcK_Uw8oVaB4=0ZHP#i6uaYp33X8wV6@sw z1S1&2%$LvH&I{+6)HA-O2P#wr-=m_!yi{(mg7XKgT;G%Sgcd);<4H|k^K7-x9YXvq zeCU8p)OJDu@@gjIs7!HNSn8QHlg6*V^IgcT6$VaxWc4|g>$G#rj`5%?nU5YAVz~lvhdSP(mmNhcx27g_pk)m%EZX9 z%`S#~)!+wy0;TBjJpZX@9;@={q^v|9VVHk$Gihe^KF2}GJ4sM+{i)xsvY;^hk{B>@ zb2pe|PXF~2P(mwbYlYMWOnParL#Ya^mE3p5v=~gBb;jVui`Dn4E%Zg~it86}^iAfhe{r@!eXn8 z!ony??;P;?M=fS6XR#Qp+rwZHjR_GxST`OMbWMTqqV6Y76JN;Ne zZ^}O|h)0UiDIo%C3xnQhraqcrBp@V&h))3FMj$v&oEKp}?aqFeS?{oJWTFs`2?<_I zCGaZ^_@S_nO!DIbe$8P=F))GmqEXhnG#yY(`N3^$d zj+G)u5n?f!jB}rL!vGB&AB%;uJhAoL##Lc0$5kO%j6UA(und4KRbq=fF8s3*GXEUUibEs{ zTW_-dR8as7gx<+-_Jl<2q7F5s5l3 ztQ4xVyRnYzOGKxGet{FxG4TJ$ls?GgYuv~{W+d_jt2l_mdp{11#!nq{W|EtUCZ@P(O60a|S&svG z%NF8lO5#}FvSmZjxm_pcICQ#P!Ol>}c@jY^HZ|WwQeiK+pa2--c#N3^F;paoHv#CJ zaIA~?ku8VOA6{WRSe~UDi9sd}pL`(Fv8zpFtY5se_P13w)=_*S!DpnSe3INfhJ45t z`VYD&c9Kn|d}1OLj0p4z;e7=3g&{)l)47#ld~tmkKBqlwX2)^LCzfd~^XNP+iF zfV^Zp2urBNuqx*{lh~RI8(}iSgn9ljaNUZQs#N@oXq?F>yirk%hVvR4Y#VSQh?ufQ zulJcC1~Sukr6NHwsi?e>J`qt&gUBTJNj~D|0yGl=$QF=v$zP{oZ9zUnQG!3^6O*OR zX{@Udo=_0m&KroMOlo}elc#p%ZNOJoQ!3wc<4^0Z zuCl3edoO!RA>u4?8#tdIZ!|I|?OkwrXN{OWsg}O^IZD!HkBEwQa2dy2v+E^zcdf1` zYwrDItf%VMR5{mlbMFJw+?LDvC@urpUCgaF$S&%JsS7@fCE&)$vZ96%x@6@+nuk%W3Dzn?9c6 z{n*+F)sA}V%cm*7y&@mPfR9fkj)(0ivE=z(;}a`N3ZwQ0Arna0Mx+vyL)t#Omlbpn z+-7d)27-tiN_X}S-pcdm3szJR9Bp~_1(M5r z0kTRh4BS)pu%r`@*bii!qs(HX#5@JR#!|-($Y?3$hbr>Q1@fR6q8U0P1IyyVw94aR z&+b%Z%PPTbG%fg#DvF`8HIW@f=$LiitVwEW`cpwnCrR=Melnaqs-yvDA4f$I#Nh?+ zZ0zh!oY|^JG+w8CeK6$}6F4>L8|U8T^nFV)E0YdA>0{@@gnN?-KlG=)O475-d*4*s z^HvAlIM#awACEi_X$Mo{Xw!2#jxHlP{qY6Z1D~`y6!Ydx1Efk6L8XGWNpj=V2uClE z0%CxTbT`3)5iWtV2!UK@8Iw-G{ay6NuX>&AGU+%YS!LIP3doj`9@$uzGG{@=ErK6) zDLMC!yK;qh1=UD{5N}N4k2~RyP?@m!!ylIZx~^F5WxXxK8|G*0Rc<=vq-WA^AHJXu zf}e_~|2yliyrfw8WlQXr&*UF@17^vlU zZz?`mc5v2SHUC~ym!wy8Roc0hlz(TEc=FSPq`U~v@K)*l_lu3StgnzIB;A?x8SCC> zAo7`koSu&y|4&!3oXZ>e6oRbsneq9Vb`PkG5(r0+qPD1Q^pr`_?7`1lAH426)FM^O*|-VBoSGFmy=K)JezpHKL6H`wgYZBz)Q z=O~ut!HcS|ox*oG#%~>R?kzAmjgs|z_U}LTYS8T5`cQC6prlzXhEL0XZQj65&?-b> zDDhw_TB5X3$DtHbWC0p&qWr*yO@!htvIiK$A3hCm^wqnP?tky!>tqe;UIV3}gJ~1m zS!ykYO$aUPxZZ@KFe2^s27Rq<1C+=ABU6LFLBObdh`V2j#<_61&;y)II``GHK~}n& zCewIsPe{Mlpc$YQU1;Tto1DT?D8=X=SGvLKIHa>s)aEnX7Pe3gdkdpnP+<|gsMJN5 z;zqiwL=(}}I3`@obD;U=WYUkm_7Cu-tUicr`SF+b+^j)c!aEu$1xBZg%m4$;6ixxf zndDShz9fR=7!?h1)j<)-j~BG;Wt-q!8)Zk^gmpm$Ar)5E0&Z$N-+bv28nhC2QZRx;UO9C*K7clu{H~+pMg~b@XOdH9`H*w|*&Q680G1-+3#Cv$ z4MkB|DK4(c=aRf4rzY*BctC+$P&vpK4W+`!GYg_m z&W~o_YJ4aem21r?L-HX^jnUJ*aM^;JIS)?-wxTn-bc-=*zy1D&Uc=QxWRgpc`zohF zlgMtOrxSZ4a>%J9XM&QOEZ8Pu6k01AWfbLHUo?>rd}7W(vT=}4kgM);Z7s{3*dYH1 z9Z1NuX2;>6>=x!TUip3JOC?c7i4w{O<+nvlIKQ^Wq}M-w$&X-EO}_!cL4-b20z#lE z0k|c~wxL8Gz%iCcphOEl%Oe)@A)IVk_XL(e-JB@5BY03!IEd}INYE$1uz_eI%!?v& zIrMhWc{3QMgnu$iV@c~!*2YYF=AQpT-FMZcc!mew9W8kSENi@72yn>f&Wc|4jfL$1 zOuFfgC#fuWFKwpVck4c3B{!2wwy~yW5O#j*m{YwO{2|*siF0JZA>#SIB_>@iK8-G) z)n}46Ul~8;t*UE7o`QpKhL50bc7>8V&6Rm&D2MEy&O&Ggh8I&R5icI)HA;1;Y~_9q z&4I7-@+%i#Ny@i~1Q$T^ISQ-?)v+j3OS#GXyp=-sG5Oytr~)8>lH=yGKR{Z@<*jW@ zXfmncHR_vOeIhLkn|Xaj$Goe!S!pq#;A2Yi*K#y&BU>BTfB*eCz!qFMd=fz~p{U4C z#c%Vxfe?ZhV0Eahb4V?o!p{=GXR-;66uQx=>hV@$HiWcr0Q*<5?xU#O5%`0MfY zEZ9Y%vMBzzbgclhzSlpFMM%>koc4R)cdEQQ@ODIrKuuGMs4Rx;7s*NmZwZk@NG}p9D54-?v5ydq@c>xqu~BRBqlhLW1l$iblBZOb~j%6ez?kZ=Xh^)T2RV12-cH;--_f{ab9RbjunVY)>@@iISG%QV^QDvimR19QL_l zA6~XfPCWl|2g~yUm1ncXTE6J>n)JdJ?7t5}_MX?@da<@x_GK&jIE>Z>Z!+`4a2d0; zgqo1WUQtcRYC}!vwN+Q$L#-TEqs6g3HKA}c8o>!F)=dS&nBr;F$#`SbZT~ZO^xvwL z!>YGgc6?FDRIVsw^n0x!O1J8)Mzcw0HW^JiK4A3fOeUMxAej9Iy~&p?3Q=R*KFr9jNHn#S}Uv;Q68GEV%g>lBo!#mk|!$CC5>){NgBk3+Z>M687`ce>&nPg ziHg$G^35$fE>-FCKrDwI0e>(c_lSu!4oki}`tnsMd|y(I<#5fThH15T5|bX{Mia2+ zE^qYifo7&mAv+~_`FbIf^dJ50 zEAWRsNb^5Cr&lz&R-xw5I|n|*!Xs-?Q{#*Pe25cRDWA`o1Umq;_vn~FAuDSp`EzuQ zUDPv}^wY+BFdAX?CbGs(H~;KX4ek!q>g9q$m{d+&wtz0aqT%{$nR#f z&xHg&u@S|*aUd?_7ALt8T7Jo^=2^2oN7-DY^}J~FR$7F@Q2^r!*+E4@1O+n$=AeKe zCiwYr<=4xm&#n=^6}?pG4x|7}Gz-1ZM)L!f5hmxpJSXh~qJbG(0mWB8g zJ>Pxm{BLQ{rzuM(C#rH;Z)$Btiku>;xzuezn;FFes9?*1N^>$IF9LA*RA%AvZRfy2h^U+`3 z-%u>m@&1pz-im@JhkW0aAPRbRqeRD|xU6eSzLK*Ud9=c8z@XqIsK z8Ylq-h?5RL`H|wa&LuWot`h!-A_; zx&5kFGx6`6EYD+cYFhNL1B-=so+9#>m%(oxkOZIJtjSR_s4IAW!8{ohWU$E zl#)~B{6z;gwPa^W73FqpB8{7C{H&+&H6d+Zb7%tKcMK>@eH5-`RS4*)3QbaCDkt! z!%zR`A0Y=Ni~Aq=>Rm?_@6F{aXq7KhedlxgoD69QhuxDoZjTF!C0edBmC0yR?@dxi z4VA4<8RvB@S%4a4NPgmq>5fK2L&Qe~x)X$sG6*i$*km!=CFx~89J81WoE7=}?W#@% zBSDa3)uEA){?>(!b(a4WrvAMOQwED^#}}r`a*X)}FUnE|i;lNjP?!oh3_6F^YSbC5 zdavE@_4`aVP@b)$o5pwW47_=M>+gzp_A(cyFy2eGHud&H7t;K_ALH>vJL0<)3$?tV zTcx!rCiQOh6Y~}!`i2kre53^bysWQ`g-TOk!}ad=AR?Gglli)wkrg#xh1t;J>eH6( z=lt8kDE0xKF@i4Va!CM?037s7SY>rLnda?1-M*FdtO`v-B{vYB0YiyvKpx(kE1IEm zih4*CHpG%dT^-jG1=1Rng#^<~ri5fcH;SA`RWNzPW?gxfBu7p>kNQtK`lCmD4aTg> z?Xyy2%0c30qAmlLI?FXzhid>@BnmL_aubuqAQJ#kjgo-y+hZdp9kA}IAHX&n$kEO? z@5C20=xCHh=YaH=outUw^10`R!izdJZl&Z}UfDK3RFM^AFwly~Wh`z&CjHF3_4_c? zfn=zGzKIt#Xec!HaalC0ZDV262$dc374p2%l!Rp{10ED=C_yt5>O2I^#iqpv)Y+8n zG+Ep}*};KteBwGf(KTJ)QfgW9^3xdX2D-F@pJ_ua{cQuLQ~prt&7#jx8fRNhAtt@| z#Oxbzm)FQ;Jfk<=szH~bhCrq9Og@0*uE^}#D;orf2pQ3Bt`mZSVo= z>|Sy5l?qSWO<-BkK^xO1B3e0A=_TsR_6*Spqmb@p-_o>m0?|+i=|E)i(GRJ>M(F#H zUainMnDqY5XZOG^17w$dE^zC$=nbS3Iy#lsojR^H8uiOr7+69+3c|#4nzh9i20qhJ zCK*g_VVmU&USYkbp`ee5X35EQk^Ipkx0@5fBTO&V3|IqR#h z{#=t5P5FH2VFchE7^7SptZY;Gn~#`o$h(LF5}z!z1(SaL3Gb6o?QA^5um0grCE$@| zjoY!07NV_T(va`)pF^%U@pv9uvtiGbG`&jBZ7wHU)b~`}VS*MQ^duN;_~X_y@JDG% zb#drQKa-r#T)Y{(cpp;SdhDi&Dl3jd3|V%$l3i1yl(ZIYcFNXzsEm=UQ>eLs@M>3B z2|*&2BeVgoe^z-ecx>;Tt8E^cj14dMT>n$9iiM7$r;a&3 zPgORzTa2*fCOjr{MfPCQVb8k;;Se7tjUU_Z$c`#&Jg=xlZ#nseZq#p}!i$V@EN(B% z7Q1AVRHSv;_6jCF`-_{NpNd_hAlA;%=9T(_3dkX6;9@VUyE#~i?gTIPV65fWj+A0&KB zw#J!1B&gAFX$E3a`|tPoDa-+0;Z>epUY`C*m0hBsR!e10rLRzK4g_cL!UT{@)4W>^ zI%TsnNx1UH>tT%V;Thg#OKVAs>#{~XCB?16Sb#|n?!G@kcu&F8ueaZ|zIdUQrO;Kr z##Q%(o2qW_TGM5FzR!WHZ^c6K>nXMS+^4vjJeV58y zcC%%>i21VRt->;w;Xh@rf2%T=-DutMqnoo7VG zoEsOUG^;7;Rk`vfC(&d;Jf#!oa$6BSYl(H2C{K^;E&0UdSvW%|>BT;5T1A7`8!o!z$0+-hE53Rhrm< ziw)eP;(I|-AJyxi!W$;DTV?AW`R)(`y_V#OkR_oe6Po{(3NLE2d5Auwtk3-O6EI>` zvSbyWVux@zTwogF#LRjVsJ|4eP#+GJW68;2NN}eqbpfSTL}w9h$$$i)g|?xDM-;Gp zpj}cESAN>ks-P2cz(noRU+G;VAkn{DQ~_LmRnCDx_sAh|1r^aX{gLlnbAb zn)d~hXims&zkG#07fe)c(=rjjTff@n1Q?q3pl9p-_ttCB&^e?>ma-Y=&v+D7iivOo zm{hSfjd(B0WebcWQdkX*hY-gqx5;4UYUwX)_Uq`@TVh6&NniQEPIR|;j|?=v;a@8{ zoTb9On$?&FGM#Lg*ge5_4b$X^LnAbbSBaYP6qmjUJ`xc^ z`NC{b*nr7j)JTeOL7u~sQ&{$-@k?lgRN!v&dOnL< zDc37eu8KFy-PDC;^$iq5(>LZ3hzgZ6&ABY|TIL0U zLdi26P!&_Uo@w(JK`(MWZP^=XA&+FX+YRsMr;a&&juceQ)`%`;+Y;<-d-o46U;p|v zZuhGQljr$caMg<5U{!32a-&R=DR-mh>TEPc_$WRU9FGWo3|A|1RTQZYDxxpVUqF<> zz49058H!0yTKeyXFKMOpT!=YPBX`BuY3eYvDcY$U@;`?=M(*b-thqAj>5DIm!Ui9w zwSP5!e{dy37nQXySXY2{^9q~HYDxm|UGN=q$`^co-l|tL#PLU+Yf>;u2N|W^_|=lv z;flXbaxt4SWjenHvQ)n{H3RaTMVcmvLp)cL#?@5H)~eMG8KZp2G|5Ezr9sGgI-&FT z2M*)Bxv(51Rt$T}!hXO3eo@_Cu%uRCVKSi!&2@?K$hfE+Fv{fbgfjU%&#p|{E(Zvr zPvZDh94|jq6CfG-g6w(n1k;1?ae3!sQs>T}qY9E%&Rltf?D{;qMNV7*?*R`Y-8p#( zMRqnTX{LO;3?Wl6GL+~5PGT`E43l2AeaZocSWjDPrH6B1tTABuiJeWw;c| zDA1NsN*QGYTJ~sxLZMK~Cakh&DFwZw?@AI^Ms>C6QbKY;B z@0|C%CnyN1v&W(WeoxcRM*~8zj?tUU%a_?wLNJyHO>sgf7Oi7!Zl_V>=&;!}PKOPD zfDw4$;^HAqm`^Xye~Z3!oUdcJcsvsFN`JFvBpHh?U$%VN5iIBPh3K1ckq(02%a5h- zJ(@y%#Fu32j$nmgC>n-c(%1MtY#qx-IZuT5v1?dQ$`{~;!-QCvkK#}3w0ff`u3EULF|yA?dGyBVC$OK;c zTHq(~1=~l4FiC-rGoG~ca~OC zSF_@G*RY9Lgdn6a_V~3ZO`g75%jmUQrmJmw$a15u(;7{+)BkzqNRCH+*=1DCkHh55 zs#w0PffF$1eZkZkMrUSPQxW_VdNZT5))@?S_@cR^Z~3wTjcs%)s>u#|$cI_>SZWPg zlTPC^`Z$e|HyAY@Q>|Cy@$p{0Pgm>roAoqtOO`A-8=u~#x?>ODu1@-wH3Ft*nFE$aCE~NQ_WW}F$MQE9- zdBf#z+u6{u;)T{7e*h%U(rjJz&zmPyI9qgdWIY9DEi)UO{52nb$9>d3A10lIq83+Xd0&VX zFA4AT3qVn`*DxD^+_5!_%b+(HS#iU*7rwt_$rf~8yI9hDlp}v#n*Ur)#XqH?ALT>uzlu2nZ>6_gKI(HPzZ3Xtfyw<5Q+y=lIZ+Pv50= z^g9O9eZo+nsz#@qh)u=>zscKTGWPk~8~G`HRXl94^)$sCaZi$OOgHE|lY;}U@Q_nC z?sd4P+WUHh&XItvClJ(f&5;zRkEDhsTROZgX@9dl-7vt7aY3E4yE%|{bXe2gT5q#u zq9v7d_9sIfE$K16CsJ?FyQjvDlTN22IoXx&H1jUb<4Sshw)TjP)7J7sA$K6&)f}wp z9%z{A8i`GIPMRI{wNnH3u}&K=1hpg4u_^nQb)s3P4@SBtLl&+oP@f#<1XqK-H>k4> zH4hA>qD}hVi8ie>l#T{_0v3B8KU!5kWNH!m^-j(@)@HTV7}|7BU%N5Q4Nf%)M!UV) z;V_4+4t;CH;Tn&{Tfo!45g3maWldu!{EzuVGNAE>Wrjk4m|FWq|`mf#QZ zaqY9`l_huUj)kv0rx1&O#m~ip*B&c2ue#zSn4yRtrYm^5W}m71vgJ>ySvNUOOZd}lHDwhR)+o_%LiBnB7a-Dk~!#)^+WV`zuH*OSd(tUjbwX`A)9^M<4Q zmYoGw>^zi-Q?brJKp+v8!%l+xb8mUs*OtH3L&hN z56rOQ9-Z6W2-AK?<~=yH-4B&Ek6wOt*@#5mOqrM&eDObUKZezpkmW1i+3q=oEtg^s zB^I;dUiUve3Il&nMovyW`*VejWDun-n0}dYm12>Sw*%j8@3CGO{xTVV^XD(VqO|cs zkY{`djV3~#RN*R~6-GgLu^`SPIc<;bd&vpF_E*BUaqv=|!uUetJVn+K!xz$sr&c;o zWdWMZtoXYRkNN=c?jVS1>&LGv43SA9VN&_jvEumC8)$>8Ws@^fbSe}roE=uIdg&8Y z8Hqeih>|e{rx8YSIB*0;@&;N7_qT?=P+9(H~n}5#{Y%J`{yTqe3QcCEjfxvT}WZN3IG%*W{OWvI#}Mmcgy<$ zjl#)p&(O|kRlv)I>`L)r^&hl;BTQAxQZlSsy?SE%(!bfh9eC>}}AYIuJCO3R-WAKhnS3J{(o7>7>oy{KUw znWtZN6Kg5xKHK;g!^o#sv5Q&p#kD^?6L4N4NSD6#!qy7U44$tP+Lhv=n+7SDx|3YG z^tun00+}M&JDCZ~>~TigF#72=xG6vp+D?Cs;)^%a%>DY@fp?Xjxy)+B!+zGq$cl&W znx>Haon&{zzzh9K+l>`R*PscJ>(Yy21}g(EAy$0w&Bhpve~JLSH*nWw3IixyR0c4X zd|+P$D}L5V&js)j9yt3L;JKGDEq0znW}|>yl*9p@9F9tP5lqh9=QN^RtGo9EfU5|^ zSufmpi^3DLmMP~Qvf?Sx^T<@S1Q89jy16_My#MdoxG!wJjE1*&^}x*v4=-bjCMWnr z9fF<(I~RHKgS~V?-$!PCI=OYD(q__)Mh6VWxWLZYgA}YNynpc(KtKz`wZ-W1M;4=4 z(9k{hV?pR%j+`c&{$j=JciDLd*n2xZJl=*Id-SXw1$nPgo6K~*I~-Qw*+gpFBXgRXa5?$ ztq>EqNbWD{&1O-2c=FZPO*l?nvN&xSwJ+$`Ln-6;D1rJ{&}UR3sLFY~ ztk}dHN>su>5uE6@{o^WxvuS)?R^0ld9k&9kw+Y&fZ{L2J8lmOsx`>V=Ah5cKFgd%= zo8$en;tu`0`v8*WQLU6v$)leMkQD=Ux;evHS2vweG$%>IvR$dLWH<0Nqj+^&W zq3IP|y&$dacOOz4TQm}mj!#FoR}+pR?qs|J+)3{=ce2wI8`3+fMkc%3$AbxBVkF$; zX$^FA#{GSi$L>t`2)xu47snPoWDZ6oOfHwyc z-D6x$Q>Z@f=t(!a^W4cPkKU9T8UT0FuGM#;aK-NEjd5;M0-tDO05r&{ggx1-b#w~h znq=6>H8lGs`QU`W^;Y$zoP({_P|JkQ(=_SpscD{yyKSu|!Rl^Kd3${RzABHg-fK)pwAr#&5t2xH@owKltUz}s)^GmcO3e*K8e+us&Rc)R-rZBpBB>CpOG(_OuTQ)3Bz zYpbzOJJiwFrmND~Lft(rZPwmM+gQ4DV2qm_Zyu<(q#J5X^{$!@Lxa)M-L4f}x(2(s z#vL>@G_}~%!APpf)v51ywTw*&LkW8%5(^tUnzWuEpBS6+#F9hdL0iw-wG}O*t#=(E zo-sN9uBXo1z9cxlpy3mo!X;4(Ry^RSODHP29v}D1%Z|HzG1s(Ac(sIh$BH}F9!0Sa zas=IuW#c_5+V+r9r6p(~Ug z{v17XCO?xE4>7%$hMjkjty}(c{qaiMDkal&b&N#NEVo#u)8{r;yy1+G{sHUNlEr0g z#C@s2^3rvaXJN2n^#LDT4oDZ%q@4TUvm2D2l&)xT0t(Etk569)>+U5B)sSH7OpSU< zNKxg;J2~zPE1r7JAG83VmJ??<>YNvUF89LfX2mnN{6`c>RFj0&8|JkEkc|4-`;GBQlNxfWHX(mlVGwXC@PC7)~qRI15eNzA;uc}-6{E3Vq>XOz2A z3*)D3Dt6Y;CM$k)VFw+m*U&Osaqc0zE4<94r@JASsx7{rS@BzZ!&Wf#MKX4=Yt?1E z%pA{UeoIGEewf}5Iw^0*iuZ0iL=W>@2-}ap7+a_CL@*6G;(75!SGwI<(RSu}*TQH@ zE4nSWtgII-rlOQQl?g52SA~H8TOj1NiDfeEC zjuoG|YHtRXDiZUS+bAoG4U`pxnZ^6NllOK2&L3&;@7uQHIK>BlGvKh|A5$M2f#lDG z<`u{KXB0*=y^yr4P;$PRQ+4WN=N<`QYPnAe_K9It$ti$**UIyL3S$+C`^s#S4AE`h z%(VihTdwetXBs(gkm=s^R}@kX53W1|P^nth{ri*a&Q*BP4M#PzdMvE?wY^ro3S<93 z25<4Z5Y-UlXeMYnba+kVgORMb-KQUY2{Tpm<|C5#3^U7*JS$%Q*j{Y_a1Sk-AKl!) zzw(QwvgJOVY+}WKeR9!Fu%F&WYN#Fuy_Q}RblON;xM0ELW`Y&_-ae=q_NwMa#sdf& zcD`d@=3#NlR-S(YoFcp&nM=-;C*o!=I^#T_-X$?_evy8}V zXRwx-mF1qb<(zj`JZ{^UPXvsI3Ce97_I^#_V+i%|7<)QYXPbd(<@o7W2-2`EH#|o? z7qu`J;K^^=p@migJN@hnAR#nr&|Y};yfY;4hF&EVIQ%jy<4Bslxmyx&eoc^$erM;^ z3NN%dBA~4JtLy$vFD=#h$n&nOWyMFHdn*VC7toOZ=iA@!Qh3OVRt}^QF8aYyu#AK< zUF%-_yyOYBpsZD#p?TISD^BhF&F5hRX-o7Be*Wc4#lxg@C2#o}-b?pdPXqW*d^&%$ z#pRx2yBDg4*Ql@67rh_~ZpM;xc|KLWR?NxVRlNoSs(Rn}`$4Ce%qBEK!H-{cRd2R8 zk4c06Dkhyyt3#8X{S7wl|7v{yyJ~#R2CMcfukl3+s7#|C-mCQ({k&CE%NtPWYqj__ zoVC`V@fmbJ6t8=|79Y%!8ubuyy0`zd^Z&1Szb|BsZ@y7afxDFty~`E=pS{O=FYHvr zt*o#ztit9!ta!!$ts!*^x*rx@d#FMzGJSbi@#nX;nqV`9xZQibeQC-4ppF{lc3xmc z`Am^$MqqN2+n-Pqr7V?>7619xHv0g#A}paw=PcWIteU*)4rsK;5WSVVSy{3E@%w%T zG~}hYciFJ@ZpAxa9W#ll1oQ~Y2BGC(6u11MlLXR)FC0psJ|kcwwPz*O2y8SXo|oqj z;*Cw+;WoYWk`-6{`bdfjE0WuD5IW4O;NoXu&}tT=K? zC()BtJ+JUmAUPHCL!O+vv`rvgId7!X9t!&HvEo~gzqtmm-^0f(eqHyn8aF8yje$g; zfRjcJO2y3|3p-n4NweaQ4eK5QPBmW_(|#BOz0&C(7-cTN&(9rs8i?MZ+54#Fo>12{#}oE3s2YOCxb zlta|g%8H)byWa<<-_g=s?8YV)VnTI+WmTy}6)O(Dc_qa(KO)O7etyN4D%@1m`c0=T zHN9+aW4Vw?w&ALjl3sDjE|ls~^T9}SRWV)&hllFF21IYs9G-a6S&T~OP;ZdBDw=0) z;#a;s7Bs2P{jweyKPH?P-lDrfr8u*mSv~IY>@A*T0_e9guQNqzQq78gIq~k_1Fj!t=Y~U{AZlc9P+aXmzqUH-ub{Vo_f8vF~B}=xHN|}zU{&Z0V;pduzBEhGz z#zy<7u|V+2;!IBk2f91bEr|2E+qk&V=NoI+PE2ZpeNkhhqkgC}G3E;yJI&r+=UDrs z5Yt6_+QU6P4v)2AaM11c#sb>bgjP4{GI^r<-capOy*1t3oELnWZkFlPraKy1bRB(- z6CHgs8)vqRSgnnn!J0w8Ez#pMMw$atrWQxLTX6U5$9-M)#!hRfqfru<`BrDr zkm|AZj0U@V{JnvCi^H4J>uhb#v@qb%jwP*J6>n&cP6Qm?LSt`(!_}i}nbI}s%$~`HgCU_!IkmQMTexj1HZYkO>JHWm%~Pr1 zL|?LM+}=3eSKp^?tnW!!rs^ApEXkf!!jx)=4>lzGY*ziKKh)e*HI}INPg(lg9As!-} z!KuzMM{V5Eq;o~4MjXk(w)S}1!;LpM28V`59f=;D%i|hLwS@fk6vn*Om3DI$zpKd> zbJcf7+bq_QgAevM4}{a{uJIdw1w?4 zQ(ILs(GckLv`>1H?(R`@r=`m_5wN%uv9P0O#5iWJ4+>n3w>A+rSSIXgUEJ;;^0|`Q zWNUwSRkP1Ns&yHH`li;NN`$+@@1MVz_NXK+rtD*T`v3kSo=Ck6SPk*`}3|9;NDPMeBzU$~5!dI+laUJt_ zK)QwILk*G+In}E<_@~IEjbHu=jHcj?d-vyjfyMNYWVnt}LG-3Dt}}iRD<1gTDMtc} zBDpjfJf5^h67_P%A}JvhgEaprJbdbWtifQv1 zHNbU0VN*d*vrQA9LIufbwp{_?8iJt$g(JqBYiAvcCQGJ?760!!Aqqnk$w$g;=xhtf z98+OF#}q4G#(lB{uv|g|uY!ifa%IM>$i4YM3I?j?s;gAxQ9i^7Jni?AwzFCWo#AF` zKO!j6_t7~p@&Q^I!phTssLc{le#?@LMhm+@L2JJ8xpOs{7PDVDyUx0=weG$&UR>>eXp?MP908-n(WVSfb5vhE~*O!^^TvB;u(eR-0$!4 z#`6l_C|KG#!;9`fR`h>*vmQonAVU|sw}s4Rq;9bV3uX3Uo(@E^;zfgICom|I*_Ocp ziH2Oi*j&d|Mu-K#YpPHhn-zEYbRE%s)S^R2ODIP-EIw`IYO=uNc~?VJ7ez>+G86KZ z$Xc=D`rTflkUUMyqVuq1P$6xZlPqQmg=VC9*xa);GwF~E#oz>9u@wnr-%Uu>Alu^Q zqKr4ldm+tHSu}tZpM3Z&I)JYt2rB4W%y`meY-h#axNacfIwI<;Le$EW;JGkmAY`7= z`Tfp{FS~br0Vb;^hyhnF6io^|SCKYRiA+i_E8f5MFAVUgC1i&v81C&tt;y+U1uL$5 z`lBfr`yf7U!-?-UDC}cMGNlHbv*0?FS?BSBZXwfgBvyRl;ct@Gj#`k=sAp7HEA>CJ z&u~`!@}i&b0VKbsIZ=V|0I9E<;ZSMhCxsO+e&RYCY$aNfDw>B>k-hV~t6A~w<%b>* z0Jjqe73iZ$mog*CSPVx?8bZxTMzi8r_eZ3vLq!*A5O~iuf0y0DP>TKI^AtgSgsfGA zyzuM~$<*`{VP>QZ3Qa@3s{w@k95pnwmllrfxX&zS%)?0>#!3{M zg50|sRT7fGn8|FJhvtRBXsk%{qPA8Pw{sk@-efj2IuleczG}^jAQuX!(8xY3dZGQF z=tbQTtdNfLY~6pC=!LO%Aw)0AHnunGv_{@<^=b@eAFnZ*Ab-J`ELM%5H(EWsRc|qJ zx~%BMnK%r3KfkE?@!|t&;YBZG)h+(@^d;m@s<~dVLUoJ$!%_YnPdNuaSPPrf8bPM5%lzSn*HQCs7_xk@#nY>(|FXN25O@NnMdQ z0%5&h+_VEwDH3L{5Ea#~Fuq(9u{ov;BtU_t%mHzK_ zM7pM&<)Zhtt`Jf=7h={I7b~8!TiT>n+H5ct8g4L}{HvxX* z?*ea7&g6AM8{ge|x(d-&>fWNkjBJRP756{$i^Bj=5o%V2i**jSm)0ywOV+$hIYu?> zIAkPNDsz3&czWr&2>?>0_Nu~(kpLMgbL9(4vRHB3jT+(uDnf;?5L-r-a9-G0@!zji zk@K!*XM=EU+GB+k-}E&f3V5n^hV@#y07wXDrnfOiNpq2wU8Zq8X%*i5!LtCpgnn>e z_0O9pRCo6^ReS0&YMfYz|Fj%1%6MZ@f5^v2 z1%y+%N@X@#@kb{`s6~V#1$Gr)9|t7oo;&EU+ubDkqvmCZIZ7mWuTVy~sN7m)#f>jL z`X;au;dIeEC095}B~!$TD@Pc-rne-!-9PF`9HyqNQzT`S9Bj0Q1JhDQU5O!Yv~Q}< z*QU3R_C%9|!9iatZnt!d@XmgIz!!^qd?OQjd!u*IHseT^1dG|;6Tnb1y#@mmdj zx~RXZqorQ&^BR1;USGVEYYsabx&nbN*OX&w%GH?a9|~C}V;#*dr{6!N3kNw^+Qz|X+dz11Y@*vVFcq$9>9fZYU7n;v5S#TIDZdxzfc($!dF zJvGTuLo6H#O}X0I0`~YwXKTRHog8;m*=@byo+ejKJgwz>CkLJN^|hX6A6I3K4NSB& zRvAW3&Hcva`VpZf=xa;Yc$-K1o7?=ZXpg0TRInsHlR}~^Xwpr_S|i<_9+%xbnrx^_ z47&N2?vA!ZU&`Fro$$Gn4V@0muX(VxQ?R<51GSc>j!0L(&%mb|+B-X19MOS+!8Qmk zH3x$IBgtfchzq5?(XIj8$VgApE$}{8!-xqIp z)OWfPTx+ks#}jLIB|?euzA4Td_O|zqwhXlS&AMc~yT+q$?04ua1GNs1)7GQ4np}~l z@urS(p}E)9*=n-8#u`TA(LP_Zt+7I%C;JFy#j2-1sKXXN6(84A=WYLP@it#%$s<-g z;HXQedO(qAt4z7ae1wgP3rvxK3Vym4P*kIKlB=l8%N&7CQHJ}-iZ|?f4}~KCgpWJA zZU1=jvRGL1fXqCQ=UYgT$f$I0O4&9m-m-qf*8uAlf~E$orco}+1_Xi zNf=F9>h6C9eMW`ngy%dFq{+F20RL_twA2ji2tl1+UO-$UqUN~o+qUC4h2cm7DEsa! zDNuo?F+WHshx~?NJ0MXDC7x;Ey|GFgZnNT5H8CBmC+P?^G_sDzl6>*$gkHG!-9?fS zYFYi10GZz!$+y%(Z9Zg_pL(DJaBiXz|HhSXoUHKb&({*oh6+Kwtxnko7OUlYCaXbf zp&-{h=YkavUUA3(peVv|k-6bk%@Y9nVX@+|N8L>UNVQyLbW7(>Q1n=6$Wg)|MqPA2 zu;O0NZFLb0S0pVcGx!pNt+W#qJn15PYmovBE532ZK~#D6 zJF;%ETL;LDJLp2x_%@dYDnHz;_>*6JpH3Y`LMUY|H_Wzcab-2Fq129Aj+nyjX{f76 zVulsp-=UsDK#$OhQA7C|&v}EA(>ed$$%=JPy+E23io_UY7LinJoZSNRhm&iEC{-u1 z;sc@1E?`s5b8{_;S7Z>*g^d*t)BoohHLWt7N(S&|O^}Exe<;aQ@maCvnTCx3^BO+x zj`Y+%3cGfN+um506G^G`Z6M2)K(R>cV^mn6n$?z*dKr%92$@B)JA6SIFe^Ugd-=~W zUJ;&^%rUT**^HW6spJFknqPls4?wz_*4+MIgsxC{%}Ir|wD2^VQi(5C>}@*50Xx-l zm6MrsOaLnmtkdoUn_r^wRe=niP3ogjm(wGg@9U?anXc5TZtF|`Jq~14^`;ULh1n{z z(aUq=-{>BvG7{I_S6?|)UgfISod>UrjtZI3FpX(4N^%Xcv< zl6f|Rz=4WnAr|lDxg@m6sr=Pl(8W(&Uu^wCRb}gqI#cBr z?7WJvO_da18?{}v3_Ny+w#yCfLAzyv1t<~3R#&!D}Y}y(m{LykU z$!n4Vw0}k!M_*rejjkFsv5r_$sAD|5FA?*GHHlPI2#xa9siX$;CTMik+$c8{i*ggm zYQ*@KFY8b835_iP>OdV6;i3UAD!!wEm?kI)@kC;oJr))4dzyAW8W4hYjNW8kzRZ?F z!^cEuiX&BeI0bH}QRC>a*)>jw4S#?Uc>GITJfsQp>E-!v(TA$(Iw%yyBiVk*H6s8> zMZ8C_oX;1cZ^lJBVm?07%a5h-J(@y%#Fu2L;yM_LlE9Jl^?zaYwY9d^INL~$M}66e zt>(uuUzt_0d|3l0V9fi1sWnh)VOmoWyqEQm3b58040T2W)7;UweA$4;HaZp6WCuOu zt7H6ngUNvZX?!NHMPoE@wVGOsS*P(@^_EItoVrFsYpYNR~fMSh4kqcPKNj>UU12YJJ)}-n@#b zBY$CIfmqG)h)pVL?=DIy8;mA&G&#<^`NBZm~)vWl} zFPD?fwwezbkYGz6JDXNoyxo=(75shRbsrL1(XB$?COc`gRyPYZD^`CR3InK`UxR2W z0A8&mX20ohS#jt6pE?Xk)qM8MQdvE}X=X*X_2wS{?Q^t<7rU=vg=Y`Rd#zzmbX<9v zF+?gJk8Y##^~xlJu~eku_`EEy2|_pgpZ0bGDbcD`D{|)HH?a~~CTdT94|xc$(|xJt zcgP%DkrlVt_#VRaU)!2y?zn$neWIE!km7=6Yok4CD=1h-5i!@nx4F4UJWxMi3;6U6 zC~F67v@wt#h*(NX5Z*YuOZAeG;{{r8cc!i@l-4nsvT_)wM=xS62_*1<`$to zZSY51A}wRS&L+Kw>mKjZRkcM&#`}UETSKzP(b6|-?}o{^5;XpFCl)ms}Utb?4T!5%i( zn)OYSjYADXle)etZp!PM>WbD6j`#+h22Yc@y*u0#Zgm9=?zFLc#2%W`4}k|USmPV0 zsqb`mcxnfG26{&NtHKGBcgoS+7i!}BeB&0*o$^;2k3eP6rJScSS{ zE!W%Qu8DV;d0*VvuM?s!Yj2x*AkvFT@iisP?XI4xhVibRhKOfkFy5C=`6BiqTXJH+ z9!MnI-QANegQ3SZB#d;qj8-#Bg}q*5XWSGYaK=YkQmq36W-gJkrzT^~$yj}S)Z(4& z8q!C)^v%6i&se{+W@NnHG-P&%o&4m$K(ou?3Tr!S`@(w1WV&@Q9dSkYZg;#pWYmpz z^flCm#v|QBu(I7UK4z(HwuL>-Lsb*eHfw)}qc7!(abs29`pJa9cWf%It*OyB@hzsl z?(|qs)R2e|PPR7=PUt(^IvjyX=Rnn%kn#uZ9-+6hUZ@)Jdz&pCkyulW&d>KXG^TtV z#_mL8dtc9Z?|5?5>d=~nA+IsoWt(^L^2~;=$XeZV{Sc26fHFOXG(BAwT_Zwh6+lY3o2`~ zP5D^y=sVNb0*WGPF)~v?q12WGA`vE)EUlobq!x+#mKU@Emckp{Jx^Z-go;M8At^>=yM$hta$b4`KQ5dwd|il*>kj06=ICk zl~5|SpSuu(72o;w`6QLAmLm+E35D3~cC+GV-&pe+Y*vKjAhUd!WN33LGoaAc{?Z!Y zc>$kA7hILW6OZtTP1Xn~Ji%CTc<7Psfa{S<}iCwHaR?fpRnQ%jdxRMlG+5ge}8h_xk}H*9DrDH;`m#y zhOu{$!D?vGF7fW>uzGqLSn;fPen{zSsxMGO&&5m~#ce{1Lqg-?32b#~1UL<;MNh$o{KM|4%LWqkQZH5vo2erOCfQw+fU-oRa#DLu?i zYRENT9i&2y8@$ba^OJoK2OhP^O)wp)h!BcL(wVx+(xo2CCoa)TV)(*sVYzBHs2-*C zIgV+u-RR3Q=B2O&MPe46a4B~+Wh?(l3nnY4Rc!GbH88nr3hKQz8`lBUGX(5sXPRCT%bs8I zq0&~87y|{wHg8Q$zhET74+wa-MArZ!CBNJ|ymi+<6ov^|7Msr}g~bwl5~md!tq@mv z?hV9>ADaJ8>q?RO2AN}^3KKTJzVec%U37y?_gxkz*80iaQ_C|tFK{qdyZMRfH{48o zXw~uIzYhg0MOu!?Od8|j6Cr=LxEFC}s@JW6-ouLTeRege2dL$J#|Q~7SB_j6fNy=d zbO!*q3m^BE|6G5(!Uq9UtVV`l)8U67J{uBNbU*y&YFK|CA^3E1>qdnU3`ZIKZ#I)< z^mACz&~GHiOEvG&f=kgm%M%;Yh~i#U;G+n0RAwjB@Z+VVv(OjwoQ0e`2s$ENdDVJ= z`V~HI&(O|kh1V3+WHi#ck_E(y_173afvGoh4`VaI?beoOZ4S-EE7f0#Vdo zes(HMR7)rZ6wx`>H!Cjva_4%Otd^WQt|Y7#>15Q-Cf-;Qv73Isl_u4p{QUGWy8)qE z{BBw`xpNX;>Kqd^n|BKDn-xE@hX77B`9#SNsz9-8cGiG|>|FP86l_zAzm$>mn&)(( z+V<`76M*7YeB7Vau?H%Aa*-riWf)lTYu~w?M90;VLZm|hM+2f)^1B9Hfo&hA)j|&) zHOQpRL7ah>%$X;T!d41mx_ZAHJh*smEGQQa9_f6zaIARyhL<~GCutG&)b2hqTx{!N z%cqqWN;~{Lu>&^#2cOO@>%V(fv7HMglx8;T3>Cb?Q9+yKwa-T@&0JfNR+`=@il>h) zdB|imL)z7%-5ja3Se%b?q3S?f(8Q8SjZUxiX#S^)_TQ(9X3$$9Mwe5ln<+21X`*PB za-wJ^pTVl*Yil)}sn)A8>WoH>$EUYwJe;rAW3Bc0{k4{?C>p)Sdbe6)4o!ket5rPQx|sd3j;q8 zk%Sl{BDUG>Bnd6@lLD3sDMT_{GMubqhS@$6Vq}t(-u0xVpX(SmT23;dB;`d{!wEW= zaRy@(OgffIF!^uG#34t?CzI8~EaT>xD92-^15> zE&Vq%{K))PPRJ$WwpBA-i413zBpS#U&3tqES*m8Vtd<-+sY5KKC*~+Bl7jcF_*~sv z$UQ9mCT*{+KO9#~Tsc1#GiR8b*6Pfx<^R<5RQN-X<%GaUa)M9D2#e(N-sRJlh0k7u z1;4qH#b8h@VzHaX&2%gg_S^jelnrmOJd~ir z()dAU`Df@Ln6K5V-H8zP4zxs=j6_8eylX}ZaTaW`?B+=`!^0~P&>dby8y8>e4fwj6 zUc-9&UJ|2_iA8zF&v}JdBEu1b_G=PT?_*NYkTCu2bAO%ja#2XlGD&E<;s^j^TKdjX zPo3O%huq`p)i^^WJM#qh61I58>fzyalJ(f5!^0$7o6Nka3Vxj>@2sMYUGSf?T|g>* zKFZ%7toW@H_P7#j;ajv8zOny@i%O%BSqu45AXzO0pN5COOY>!<5zRH^e0up^zdE|RUxH+NcuChK4`wNsGzR=o#{YC zYF+xi_}0wI%r}+3i_b@Ad@#Xd>S-=-4A2cnO@u0!zZNE9xI3gA zb{W7qugZ^b^zg1S#YTfxhp74O^Q`;D>6&btMfi7wTPa)f!8l^<^LKRw$asQUZLf zzE~J%I$LKjW31uXK}EbT7K`*Jxd7e;N8lR@F@cNZ{+Q8d5yhQ9IH2BSG%+T#+58ng z-2eA(CuQ^hzIVIHXoY(CSNv`_Y0JIatwulR@tL4wt~FXUMz6=B;gEdN)atwjkH=~@ zS&gRbyZsbw;NHKT{z`rEd9r}-cI?=hFYbR&E_#DHBr{vn>A)I+k7r%U2agTq# zwH_l!iA?uz9>4My6^oNGuvC0bj?^lYcFk7Y8$L4lkPNUsm$g zFA_Ls#WP%<*D)%)(x`kq_E<=TqcV+;VjOFAM(rA4Hmuc?$WLmNMxvS-n?6D$$+S0lQGWJC^nO}3g|Nn1{)_6{>TJMaxtp> z){^!eLR)ynV25U;gqTPu%p(lNMWB`xir_^8Rv}*N$r$u!V|ZRAmkEgluFt-=>R4wFprM2;LPQ2XyS3@>IZu`eBFCM@Jy^UrDp(3Lh zQWq;8bK|`{Oj4wdN9LuOvoej9;f*z%hd-N=r<*Ceydh0z-3_7XjxnI$rc1-d5Uf6S1X3$Ax6{Iu_ za4xKui%ih?N&(2}hR@Qt6(1P+AW%oH2rD1;qHrd;K0L-0M?xeGy0a83%fu2_;-8-W zS0&BN!sudAU`+~D+OsK%%s-IHOOy;Y3VJuN4`6urrr|yAqE||K$SwNt=7%Q}pDRR+ zARF$oOoVPFHTxiW8;;R3SbDTR(Z!7xq~1^z;wu~?d5iqi=%HHh{Sz657as$^W)|}e42{uDfcRTjw0b0ZviNDKO0m~UqLdhP z3UZq1ufyvsT<%h&v#B7flApfpZZ8+v$A; zkhw4i`S?Fs#i}qjmfln zrob*Os#j0=2{R$3f8eTnxkLhGsb(~JyZbE3L$7!k(42Jl$=$K8NFBw!=AzF}Rv7OZ zDeI6yL?Dfst;10MB0CZ}0b~pX?K1jP$zaGYNZG4+EGcyoWFkEN3;iA?KG38xe?IvN z`}r2=tFhwWZW}_0*wX)_q1g5BJC#u07X4JG^_(N);>+wQBJG9YXg%H#%qWjWjJ_lj zAZMFS^CXAYMJ92AWf6-)et(n>e96-&NeX3i1UMP-oSSoWa*tai$#z^vtX_(hx!(Tw z{_Bbt%!0bkIERYU1FU$<&|hwZB}A+237vG)cZ#i9piID=ea*_J3U<1g*%NCF<}T?x zc#p$NMsJ}~1!(6uk6x*g4?mAwf=Q1E+uXSXv(_YvyX|rM{X_!PnY7l;VgZiEVo|&o zh3ar<6rD!(np}_2|Mf;iYhHR^`!I!`lrO*whY8uNk4{TO%r$H%>gN-D)XO6Z?+;0B zRY$qWe9}i-YepW3A4QCiLyKP|hIIH#$l+3!2+5;$N3b|ts4=Ycb(Xoc+1wyj{BAxR zjs$fAzZRv&w)$!=t8F@Okn2dRGg@mAzXuShQSDbm12mQIjp{KWDW=nDIG+_c z1>S4aa5@jKF?)>`uGZ=^a9VWXUA_z(oJwtaf6JVoDn67JFr9#AD>8+VxstrBprdTg zVfQ00Bc%;Rln^&B=fH}WwRe3C+popPwQ}vU!-|J{L2sl=QVV%rHIWrr@y8eZ5IKgW z--fmBc3V_235R_6GP`vONJtd!CE-x8fI$CAQs-s(8Wf+94%wnSgG3jRQVpZ&>1;!e z@5dm=P)SHL)4%B$<0==1<#QUEr@y{xr{alRSO=^^HYA+wY{&>>lFhqR(>n)U(`byQ zMK2|hvudVAB1vH|%MSyb@R4(HSSaIpRth|c&e91m0kcl0Bw;8;#+=|0`?!QJ7re>^ zdAUdcUBZRnC|+?z;wMtXru=Y}ImDoM@XIa#hEY;Al`<2~CttikMIbw7SSQ7yuEH2O z4N``L7b@Q{tKhj(Z)e3{kN@PyY9A1(-&tlOoDIrKY>`;+@a?cZ0zI-H5lFP7qb+*|h zI;rQ=AA}tlW<0%wG_$g)tED|Vw5T|*JWNxNhGWHF`ma6|OXp9te4^X-m(UYc;Z_l= zJ;!2^YBuP!ScOc3MEEX;915hzJO)%tzedom{V-Y*PEiFk-~cZGbdohv7!H*y(U_3$ z!9zYI4g~s7IPuE?Eu$=(c~I=|z@5~g4`h=i?)dJ`(^Ysn;J(ZH#|efgoeF&hPdEpc#tw~nj-I1Q!M}^oj zjtuY^5t7m{wfIVk%_IJm#9p2q;rIj^y;-X$00Vm*0<0E_k<)qTRmfh-jE{6P+j;9?^W>nDQ?_OIBgMl2>61Vx7wLvuw zMo!s*{JQ+54Mk7sy+*+i>5+qHEhX4_W}J(pW_Rf-2-1l!kG}tX42mL&$O_*w#kaO} z&`I~TwB5_hc$wS@#M@SN6V?}KAvl9a-lxWekU7gKvtKznRvd5Mi;%rV$WA=ztVQKR zR5+6oFexLLFK^8pYSRmTF2oQK{LN8A!1!0fx!4`%E5yl=NNR*mE|9+9X-nZc+P%d~ znOH+0ER{k=#AWP!Qtx<~Am04>i?66~kBBahoso>RpUJ0vw{f2A)+cLP*afgwWZ8kL9C7bl;o5n z*5-``P_d69=-hZ=J%tc=qXmU9WG1?l880cvM^y^&*VAPNj};$teX#=Lr0Vy#H^Os} zD#6mB;3}f5#E2>=9ze}cAml|6R3uXPPRVRF&>R>kgPDvYcuB#DvSabXq1T}jD{*+- z>&7qA{a3+pIy>}URo>JdZ-Dccflqfo96XG$YFCv4D^U= z&;Fsx2dbI@Wdb4-&?%AzfHqH|N=^YCz!yt_iKWR&FhYiyx zf$`W={)O$f4Nc73J-hr+;faBgX8v)NOWjjEF+=Ag81l%*X;^~ zj}XdZF1Pe4j4}r)bIlXPTsdG?u&l29oPw{g^#!K^$lC zwgp=dIj;N`EDviY>6{gt9cvIsRwiB`cMKJi?VK619n+l+nBaj(W!RYHxojc zqPi-S%HpgotZ^+@LsqnOvkXO6d|Y=XNeVtqlm58%UByc`Gs$@=P$DG?GAGk;loHq# z&N3@rdBa8LstJ@o7K!A7KDig{%1L;5=~eit3P0fpn!M}!SpXs$=sWvefcl7L>f+~D zY^n72g!M$3lss=h0gD1RekR2_3yunEK=Rs#u7i`L#;QmsWSM=M=ZO&74D>9|VkTZz z3_V}d0^=2VJjoc()Y4R~1+{nPNs7E$NBL19K7p{Q)QEZ#EZ7+vVw_=68l#~6?gy6E(CxkZ|Bz@*Ur z>eU&61)C&WT?d7Q+-qrif6heAil<%mYua;{;p5t06Ra*?p9}h61)>TctgQI@!`t=3 zL^`#5PTxIoZLyh3RXu0x3p001`4Z?$!rLNsAeHfSdd_{RL>O(MN}$mu#7b4H6^?NM zftu3gnNWV&nrQtDeO0TuqMB%{6*bX&9=rA|6NDZtdXs5$^i@&nA3_;#b@pe?sJ`0t zziR0Js%mJ9)`IHeue2E2Sf@3W(^l1LeO`~jWYSo5eglf3p{?q%dW;&Q(QGsrYOQ|1 z*^n)Uz8q&&@A@4Ne53fRQluDKwgURdPgh!D1{e$*w@Y~@QDI_9KPpD3PURU|hl`Yly7Z*C`(l7t5<9(2(!NkB){B`BbL zd#d>9iH-x$qLX++(Fx8JS8 z5zT3G7R2wfTl-62Xe73>5mv zt1}|3NGSkq9Z_{cn=%5R zOx%>-PvtA3FNnJ4LP`*2+v(7teUiN>B*kOYed1s!C`iZzYG@ImN7)+cqBiFsvEtP` z-LMg>;WJthBeiEGRd`uQ=VY$k8;%E5_GW4wp9*+Lu~vm_R^pY$x|wv&l}(wcID#=H;JTEBYqImw*M z3s(20#JyPY(zjoG1}jdHk_s7sh~d6^^snwd3qRllA;&{<%keW7O+nTg#F3nmPUa%Y z>TAbCJYGSYHW-;8AS=Fj{CS9XFC}?5_c!l+tWM!M&*bZM)fkeD{GO!c49zYYBQ1WY z!UtsMqLyKsGXh#&HoPm|f6WiqVH6&wk+^Nc-mfV<5)|Ms5+pA8b*?B?(hJUZ(JL4P zytek(>UiLIi?A$qg{I6x*VBCFooN7pGo2Sahp$b-u%y9V01+>(wR5Q-v*O1uJ$*AU zs^!EYY2Li9cqyVR!6qZYZ=ewY(WYS5WH=a*iFgeHIZKwjPZN1aXhpZuixOlnrl6T2 zEebTu zgZGg}Q*=&)T|}DSv(Ks2MpuqkGo6(YFSz>{1WS|=hLhR8xqCM!gtrpUe*{UgVqc&a z(Q&*PY4ma#+3u`Z2rK^U8*fo{4j5QV+^?rSPb$1Ja9+__1@4N}$yBQ2%>Ad$oqg!O zp-#K^-ibc|>=y+1Cs#NZwXcxe3P3~J=~_=X_u1Lb>ULA-pXpGeB-)*M2h`=bBOq2+ zIN%HzdjdW^&2Rmyw%FjWHg{b< z3BBq7?xO73*{NT)MTrK>LM5S%R%l>v!l?DZ{Vbb&HbJbpxVfj1^3ih(avPBl7Z19t zXN;21R+Cou6(^r{|4TmqS0$gV2A$c_5N(~nGT!YmtMK@*y6)x0g}(MspY!S{k{VW6rr%sFSR^tR*GmatoVb| zZ|?+{-{Ir>{dW)Ct9VEk^un2$dzMWa6vfNw=#=O?ta$pj2ft6{NHM@isUZOZ=75+f(=Q1g76*l(O@;x&|7T{ji}SZMPAJnI zmBL8w&6Dne25D&9AVzaf8qNQ3*RN3HXwo{MAOvRh5nnK+?bi)dhev9fggK9<_2TM?Qgjuf>HT4jfz@(MC4wq`P3DPJJID99R-u5rGl*zq>@<%VP?HuTRTYs7iq<^ zV*MR|M|w)#>Q9pXUZzt9ZKxS}^9)-i>%3&?TAUB9CZy)%g^6>Chk|q?DH%;vc7?NI z;zxrh$6UGcQ}1iRf-MQx6JKmW36EQ;5PA#uF2Q(itPag;?E@yy()rg`E*Fa!u00rwffFe8FvmRywgY;)Y+~H6u)oPG z$NQ-)P&MV_2xLn>vDEdNa$V8XsE1FWBStpkoaH)YG(~V^anfTf(*%1uKV3RDNXXvx z$a+jYm8QC1j{j!kVjj#gQ;(h%(5)w$C;V9A2?GfgjB`l|fA%#Ag+kK9(pjX_M{4zB zixab$Mn?8MPzqe$AC%c1*!b^%{T_@C?Q1m@-{ogKm(wiFP199X@atSUzPO~G6^-@L z12E}8wD`nEnMs#&R(VQ+R_YyIfI>=TVVMtqmktK0qfcS)@Oe)yE8f5M5UMLxOFlQ> zQ#~6F5b|?enyQz`2bpC4t4ANZGPhT;|upTfdirs_5Ki#S^`H z50Jly&!S7B$sKUSOp%mj(a$R5XbRI;ckUoBPfp45IriN*+u6NfR9JC!)7Bqj4^!U5 zeaoF2HYj|9%XXc&<%NXNo+}dIJt%wfGKg_BpEVhuL%u>*=lAc&AGr;IqSz?x(JQ`^bsDF#bK>ryI zP$_hj!G(`K7GTsuEhC$0y7byAvNQ&I}5a96Wp1V9jC zm$-j+_UZR4yr6T9^~ybsE9`kMeEc!W29zl?l39mYZ)(o&_L7IadUb|ePVx?z?gHOT z3XTx%ro!g-tazL4yfZMfx8mbEdhJfv6wmI0K9MmD^QO_{vzmHVyy5Bn@JyBxvOW9O zUVD47>0d3OW-iV7nQ=&iu{;Uqgq{_|=Kl*mog4qUuB0*DLXmJRCbPcyF+LA!jj1wS P2eZyBidVn7+dKasj;T|l diff --git a/llms/bedrock/testdata/TestAmazonReasoningStreamingLegacyAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningStreamingLegacyAPI.httprr index a4c7fbd57a46dc1a9cab4fee20dd20e527c0a8ec..83749ecfe2bfb5238ab0d92a66c0b3958d4a42cd 100644 GIT binary patch delta 7334 zcmZ{pd7Kp0wZ|D~V1{+rltpl8Ku{T|s$OOq1ZH}=s+XCnp4z)AM5(SCdaLf~ndzQh z%s3d6xJGdsP>Fee&8O?G z=iGbG`F+n^@!|OQzZk!Lp2J0uzK0fEHr_$Cw6>sKs+37o>sI?3NCkheTLU`Tg_gt%hl|5w|JWkx9M&6Y_+x$Cgt6_)%2nFq`T2%2eFt_ z@z>{mzYO+a-=^F1N?q(&`-g<=+4KD|*kn12yIYsAcNJbbne?-3cuhu{Cu7@w-+bV&^Q!iZ-qdHT<;J1#Ov8-yjTHlsjRlZs>BJ zBZdyHC6V9RDFZQlQuWvmz-JjKCX2PNvk6FQ^ zSE1w1MPSp$SId6`o6g2I-S_m4%fY4tXyKG84lBml=)~q$*y-(uXG^Gi^{H(*rppP_ zB_!inA!%m$vB@UFWdFUX*aVYNc(NVW4^w!u#r}e&mI))~A23udX$9@Uc*WL1s{fjauATPc_(2oZ)h~lp>5bOnQ^wc(Q)X648WnWuFbQpoZrp$N#VIp3ClHb;1Tpl%@xd-<@oEkonQ;_tneIUO zz9sPK$)~P;=F~pnkR0f`{`u%>?_y~BY{fYQHmad$sborzMXIpPv%pdJEjE_JCQssx z`fhyaeRSL6=g^bI$%{Hu?Qo&meW#rz^gldv2YO=o82bI}$>Tc`XlcVjyxDhu?nSrW zzXRpBZbEm=S_7Z%UNX1`89CgMLWkEk!lymcZuEk$@TYq8=A5RHjffai zaCJSlV0hf?^J@2IhCLTGH7tUmm#msm0Y4r^Tz&yMySWKIEqdVkwdmeEMsHEJZ!+57 zvH>;TFmW>B9Ex62|1;EbF1Ex!=d^3=9J)?n?nGSI4z#UEPyNb2-~@b$x92B0?pZiA z1q?hoBTbjW9Rmrjl1V_n(e^86HyR`52yAsN-s-eBR@Z^E4^4{&-M(-D59m#N>$O&= zFW7@md1^Xb9i6eg4|Oj(6RZ%4TaVOs13sS-u8vLoK^A~rMR?exFk@Xl&1Jg7H#EvXpRzPK@})Q zkpm`arhFbXTgXeYhl(;xcaP+kyQo4WO4||1mOZ>}`NbF`S&HWA2?-G^z__I}=QSxs z=IFe_6Pb#XwtIz;AgNia%;q!#!s76tk?{rjs^u{y!OsQDc{RjIR!E6jlI4x(^5rPQ zMLS)(q1k#dP9@cz7&~ah?1-2Z@@h_~>T;x82!c65W&r;7Mde;sPe)-;PBU&c=o=6+ znn%yrq7X|A#t9a_B|TBaBBN5oC1i%nWu9m)aWpev(E}xkQi_}%CX}pMQCxZ6bSV{H zvWjLvD~VM>&{Bn*mdWR=R3R_IHnnP^Uk&PRLGnk13`uh_g_U#uR8Q6yvr;}up<2s^ zO9-f$a)hTyN+Y>&56#fJoh-4Lgr{d%F2p#3>y>iJlAzF@9$6!0RgWl&73Ecnj|Y7o zi_8;TNXW(|OVbF(kcskORMDy`?P0B4l8H*XE;C9-lbHcAEqnAFLqd{Bi>`=fDx7Qv z8H1&5zsWEiI-RT-RHk2-B7;K47aNw-wyno_f>(M6^`J)=7%OdL%bi`-BrAzNN@bLi z0@u$_bzM}GeNrqhvsp{vtAaJc_m=;Lz9iW;yaQORebLA{HO32uSn+;WHu#4~wC z%xNVvEmWd0t}3}~n`1H+NJL&<^bM<0FhUuMT#@Bu#8e9c7Wy@5YCRk=%Z*j89TvkykSckS&@z>+&qo5zEQH4J>(-}yRd#9tm-st0{8 zkRCO;@DCByIpo?YhEEN2n3P=@Gjx)pZ_6L<2K94bMx+!EDwS}^pETjQL;D3VyAjbo zL5ChXh$5X!(DBkr`1Aukv=1yifU;NBqh}I0Q!DN7Tm%~7;G|qU2w@%Ff8A0@!;J%H zwseEvKE=L!?BF>Y&>PqN1$y7vCoO?&co6-|^*EPOuYAXY$nVx{sy9>*5wEoOqQgIK zb_DLV)}!__af`d5f^!gLj{K=3YJejG(Mr!`v4a+dA(gZy;wsaxi+-$|YPv{|g}so2 z&W3f~eEFU==!3QcbrE!%*AE|Vcw8sZ-S-`wC}DjIy|65E6zhJ7j%+`Oe!cNL__h|ZWI3b>J;%Ekfevu^KC1UU|(N5hkfnsb2R7B%B$ITAP-N+*8b{vcMsa{c^n<` zZ-QYHFFu<@_gr-du~$w-A9b{%CJx_$+po~iLcxX|XbbY9F9XX_e%eCE?b~|SgT$#B zjXt1B)IIeq=<8(meqQrZez$i?s<$spGa0?ZPZ&W^t68OrMW{)Zi(O(n$fvn5;*rI# zHP$A|@Afouf%ZgarJZC&5MLd=ePhS_@OnFo+AoG=zIz?I;P!?|et$g2xj;?g8J_>x zx~g_ikxs0M?h;-}f^ndy$8|pXAAv3~@QKNtsa{C_GWKdUd!|2N3c2KxPksc7k*PbRPd9^Dtcz~PF9NW`xtX0HCgxvTx~3=g^va?x4IR(L}jh zT;%l&x_6)CJ>wm2x6k+gqnLLc;l?QD_O`V6yjH8#9H$Jc+3h2JfMSHJd8v;{Ct2G=XZO7PxE0D0cz$ z*k%VLRdJN~qM+wuK@ay$mO1X60wx^3Kl)R2Ug{WfT!T;C)#>msa% z$M1Xi8hC7@QY~yun<(Vt6b7?%pfO*#_^z7p2FY80O7g<{!vk+Ve(=~BZZMNO617)f z3kJV_>X8lT>>KfnZR4w*Xn(>9COxsGxChMn`c49AG{L?>llJ~Y5CmXMI)^U)?Ac*- zU;j~bOXK7QHr<}b0vKj%!Qu6TBOCf5+SPP=11M*?a>fUuOL~X1nq}zVPm2> zXZy~#A;91zH=)~paaKdVuirV;9b0px1{00>A0Xm>~W2D}O_6{yX+xFs< zc(XsZehdZL>Tr16;JAA4s*&1e;SA~_7@Od|-jVaqfZoqUZu$+Tl*wbx$5DEY4oPz3 z@(^qT?&`SCC-AnM(tFqzQD}h!Z;8xb2nI=x`&zUowJ*UDF&l_bok)xJQoJ0?5kP7yZ(Gaa1(vx4_AvG!lL^K!8L=*%>cU?sjbj!o0J8B^B! zW4C-(J4kTfB-}$Q!;Ec?3)`Og5;DQj>BUYn133a7bw}KV>N4)RT+}(#-u&SAVNYKd zjG(MA`)h;?2d%u7mGL4tjfxN4)rx*Q^VrPO7%pi6IOCcCd*ze~rx>llUp0b0G9Ki| zj%NCgUumwrFCgxj{uDlmxGPf8RgUO_vdH-`{+^F-xDma(el&25GG0^Ty2NGI0^to{ zuccAftKc&u$ znj+CQ4R~1LV`%>O!^7^lE1BYLJ0{RH#j1M0CJTzFGBlsbSK?K(%#(`Bs&0>^CaM6I z5!gVuv(nmcq=gPO7V&7RUq7Z>DsE9CF)QIfDxA=qOBLsKLP={~7ttbX3k zYi2+h<`qWB>WbapLn~E{Oy;`?M$l7*P@GOGe9rc&89m5WBRRR6DJzst>x3s@W@V3@ z);wJ#@8Oj8L0RP(OHGzwL7@CRt;;^!$c2HQeX1A|2qh3H_XNuYJ=F?4WEWVPs9JDD zEIkaB2-(iYLmJS2#vQLFWerGAWRg`WONLC^J;+O%OBY)Q#cV`}*Fk`A1i&Jyd^K4F zICpot@|7+^k@Zl15QtCXZN;xJ2^T;YVO5hcmC;=yZTDJPPnTrt={TLil?8?+B0N8w zGXbvs5h2Hxj1FJ5i}0kmP{iOUi(o4Qr7qIa;;uZa<@^~@u`?0?vyrpA&1|6k}D$G2|52r%aq?}?%{5byAlCMA!Rm@!FRIC95BP`SkF-#ZzX z#;{gDv3WH#EqgoOThsGfkh>{kKsm$A+9@kmQ&yn(6kq{g2J|=vp|L5kaCocx`6r;- zho|(+7%Rc!vRfXi!j}%?m>qDuqd~>^(8L;jp>0>Ufmb%aeaVBTWd%_CqvUvEa|;YQ zeD}r~AY;G9jVCr^SyQ~}kS z0*vpnia5dkGeP5g?$O8bf~akmV|*A_7QHaxcjS+z0>m9a+aGoSjjn*5r*@T9*m*rZ zpIYq}cHRh54+9WXG;7;Q!|-!q_@U&ux#-CU51=R3)lX=zL?H{gV2b6L<%ePT*9B~t zV!9Btt5ztI*K$y@0R4$&1NkH0ROt97UhAdSV=n;W9)@Y}b>5+YSgS$YtTG2VmzB&! z$z#?u0<4XN%16yJ&Kx@!cO$OWy25NU79JJ7a5pjbo$<-JPITu32dCB0w^ojY((wKr zO{lFISLfFRj%)*waR@#56UVf#NT^g{tR}c@XR^r^&c;BgrB`| z0X~RDVG`Gr!P0cN0s#>J=PAH@Yq$#%10(v)%~x>XlS62@$%T&3n&0@R-~-<}@cG|_ zVzxS}l{l%Um6pOJ$2`rqqq=JkuB_qkKi)TBl*h-JaEZQF@<8*`FzNPn*09J8#Cric z;lz@3=;TMC+Cjq0L_hr{eylG?k8A`fb_hN4=pytW!guPdi+oV0ANL5pDn{lnzko1v zJA8iW3mMd4-5dC`{%rLz&^D*o_|rNW$aww4a48xi(bD-Vq5BKx&T~TdB<}ua>R)4H j-7y_!>qvm(B@+^E7Cp3Yu_NK;T!`oKV?8@?!&CnUp*}~x delta 7052 zcma)Bdw5jUwNFTZJO~5v} zu`$|;3f78jE$uB9_^#Z0EnXf?RVtujtq`wR8_<5$do9|FwpA+FN>!@fwI_+F{qA?~ zAAEds_TFpl_1J6uek<>NHsS7z6SmH(Buti8l)AC|V2qkjNx(0(Yr^WeLbPv11KHBx z?b91fgsG*0Bv+HvYO)o1zv(iY$ySOmZPc1WWKeB3hlo|pAroO~HW3+)CBe z)YX)gO?arRtgPcqcH-;kLVXZzJyMHatGMYZ&f&9&x{_c?NtOl9q6&Hsqf6$1;mt5Z zLgk+FNlgRYx8C7IYdp81Z?2k&J`1JM`RS9dXd1|`jo)2XR=yewe)vuEUqJBl$f>oW z46z(e<)1Bo8!b$pMpF1{_*oZ!;1Tr9=8@Gg8>9Grk&rA#0x7Q^kb5JVE1FS@wnT{1 z`aEuyQ2gz&jecTX(~71{)9R*RsA*vN&CfTX`@$nLVzyYAw;7sC%6IC8KEKQ2MZ5R3 zpa%C;(DKPo4_v}pCdF*=fNVx@{&XdL-FEV%h>qPoQW3Ky(AHg7!{x7AvjD;69r*HZ zRm5+C%b#c=f-c?gxV#qlS5#y=8u0keYqKTkv?dw9* zyBDJ~1Jgj!;yn*uL`U~Nfa({nUs}4Ixxg0Ndpr)0;c*ZVPl~jDVU(&h4fG71+l!`t z@6<#m<*}#H`{^YhW$5YWb|Cil5#(BM9XfM;Q#EC_Gz}#0bR9yk|0|Z=1Dp0X?rua! zeu96xP`04~KCLzHn+P6%1#M|u1SY!j*6)LfR&3($+u23vSi>;7x2dkqMd}{6qN_BQ7oxZ{x?P&NZR=zZzi0c*e@Am&51{U=+iIwQ zKhffMnTrg%f7dEleb)Qzvt##Zn*s)dL0~WwXCMaiVSU-3mtTo~*LoW|pW`QkN9>UT zgD#{ku#{+Dd=nxvBk1XGO|Ar)R@As+Hrg<6F07rL-smWKbi+N@*Mbx6=?EjVM>rYzYks4^#B49^&W$(rfLCvE2l+N(;mTXTEzidz$TS#$7odq10sQjF|1I6=&Y<%}px(cVC!P~=>_ z2Jb5L2K`ZUP*e#;)Xa)gE2?6;2x&^Q&RiiRc#9%MOFo0^mnbnG^egZ>5=1x^$!g+c zua|dPNC8cvT!VpByNMAkaZccJva3L94&BZsw3J4%vf{AyDh`%m2qmo=3M=Y*Mi9*u zr?XK>&dIV{cZ%@ShQ6-{X=x)7EW zMWOV(D0m%=e=zD(5(NvJ$OJW)-X%+{5OR9E;jL2~9Vi6JOj0BYy&-V2>ZenkCV~*j zs9W*tc}|QNU2=}nL^7?A8o~P6ZdGUdf~HI%AZKXCh!{*NqXbBm(vn=S=vEY7_ZXtx z8s%tPhmZ2|p+QRP;rN`ngOGfTONnc4Z#<-Xjes8Q6rA3E-jp|mot#Zd(5x2M;)3oW z6~aPw61lYKq#Xf*>`-N`7&PeakRwWWk~*&#HZqU^za@2>AnA%Cf>kEX#7a^s?2tUF zlu=m1+oBmPJs3`qG1fu%hz1+<5f%?;;yOA^x=VIh&0X+nL;=!EkJ`aq9K_r$P&z!7 zD5<7ACLx(q_=LyA`bCPNGif2ka=f5}dHs(U;lbt5`-f+sms)GLcL@69NpyM*l*;MofH4QYzSOhpe)Q6`2hhviE$GnN7DUXdpDZ^GQ1|^VhTcCg zjE=6O(RHm8K}qZ43A;f_C06p}dDBd+WTN7-QlYWlQVa6F`zAdFD&g^3uNs2Z!t+{h z2nuKuEbZ@WeGI+1`*^trowKh2fiFxQRzTRhSm5hR4?Yb7pRU9`7JWVwmrd$FZ(jhV z{6uvGx||V|rQ%o*onHBP#gk{yi(BxuEt6FjUDVvT0Io-E)zxtF)jv#FfmKcPL^MB( z4lG^>XkZSgd~xpN&0s?dRvDcB+YhkHWw>KPx1_jYQ1+7WqD%^J%d1H%JWDST7BVGM zI$~+iuok2*+kbEh@>N5N+1rBNADT3=$Q0X4?ORsSu^(Lm1%JUx?m3kFJ0gdk zo0MkaqYYs;NRVdO--A|j@*H?#Rb_Yj=R*)Aa5kU~vV=Cq`~1Rs;>ZsH_>_H&Z*i=u?T@MWX3MkZNz@s##EvyolDS$+UfAsb7|R+(8Wl}x#$z722EiWqPE*>D!s>g z-h^A7N9#S$p|h+VY<=U=n?C@DHeoG)?fJt2aOe^Ax322}YRm#rieB4`8to_0-qll3 zy$`qGTkcp}j^6&a<7f$oVMOqgcR$Cj*v5z9*P(375Hh}9G7@zO^{OOb9GU`c&Z?{4}?qQ5X0jx*AS~C}Cf5Wzh z%H^kia~5sz9k203e6q#ROr->~fK?9@pKk+;-osYKs*?LlR=v}{0G1}-GHo4vK7*GY z{phxRuyho?!(zXcub+Jay}4xc^4DYb@=o*iCt*1_wDm|ud1bLnXh*x0wUq=*k?7zx6zsm|Ex#Fd!-=wv zTWyyTcy|dafA@w|MLdy5pWbj)g@d6`-O~#y7=uB_u5X_K=&Yq_U_@9kzl9_kOf6K4 zbtrY?rU?}-B!zZPSo6POcoT^+{M8!K8fvwgH#SqDmSD4al}QB*uZEgeQKlee2?xWf zHH2=icm&v;-^8W+p0qQ3rPzQ7sO4ccuX3m2%9Z$I%j zNXgS^-JBY9I{J;7=}gnWjvcKyI$zOVkM8c?YfSE+O^>$*j4MN=y=$pWxG6TVNm^ZBRH0=5L@CsIK_!2I2N zOd#%|;I9CmekuMCV6^q>8A$G%hqgAg^1I7hm9uXUqu-DUczHVu3f z73$ET#?$C~#v+h?=qB6iC5kq@thN%L`=WoYu{eJ{&PXPDjM4ZL(EKrly5u@{1WNL$ z>CSv9ZGaYzr@(XuSM@#fcf1e0VFYFGm^W7BaE1POxR*gc*mR0;IP_vWG(}wv#s7g$ zh9Tgs-3K9li?OR{pLrK*ymol%KQbO*Mi|^oD!Xz7b~oeQ{f&b`bo*7ur+q==dxS}prjM5=Paq@AWC75J&&E&MG)wIvV12XDzqkl%8L0F*s!+ti$QB1Luj1V1$ z)XmAXlb5|d(Pbrgm!xPeYm`Z@%1R>Z)hMY`Bsg88oh0XH0k*Tc@ z;$$a7Dluz&h}wmOLaHK=ID&SElXOr_>1n}5n?j~RvZ#sCK3U3is!qwN#cgKR z&p8+(ZwdNsy|UjXNuuOo$!J#>?G*qmCqp8~DKuLMJ4G{7?Cn=6-4}M~NiLaVWVfx0 zks^jhC@s99q(vi=7UO^qum(-AM!N+teT*&Ud_f?iL5F4vr9)ortdTw*^TkNSf!b6}IK zn~@c_;3}|T;Ak*6qC`p;wS;2hc`K_KQ8OpzO@Wk$1TO7hlF=NS)L2L^5!`x0fH2B#x?kl7t@e<>0)yug0V!%$lSDR6Wz4JI=OsECcT*Th9#Zy8LZ1k+On!Y(-ow>37GNGoRdz5 z^#m1!|GQk#tYpgZL7;N1)55Z}uK>S&f}8EtfawO*gf%LP7Cr3X3Sk%@@Tm+3PqCXJ z={RRfXEj-4JBR`mbaT8)cuCQf2?XSvDWpT5$eC_Yw)A(H(gj}TdRUq(`UoW}xgr*y zG)~#JTnPnX-@FwVd_9H>!i}}h%z}dO1!Y4WvoRL57XjlnXHY%o3-v+hVxz1&gC|FzCFvt8YJh z^#s5P!*wNE7PFD?TKW`dr){Y1@tS()huRY$j>PvqMNWJRv!BNQll_cC<^u+<{hM}H zWyWE6l^{znhO;K1ui#$%*W&YBIdHf=7$;A%1ix~^9g)q#7z9PTfeRx{u zXm_<^V8;*`&@F|nv){P23$|YFslVR;+}yZ_F3qU{7^WkFU+M*Nn-94Y7znJYTzceF z75&$q6X@JfHJ)e|PMwxa{PWZgH{$8QWf%v-YeQps-XY)_ z0ETq*D_#Te|+w&0Lz=7Xg&lX{R}T3${BbW zllV#H Date: Fri, 21 Aug 2026 08:19:39 +0700 Subject: [PATCH 041/618] fix(anthropic,bedrock): never send temperature and top_p together The mutual-exclusion table listed only Haiku 4.5, and the Bedrock paths did not consult it at all. Probing every reachable Claude model showed the rule is wider: Sonnet 4.5, Opus 4.5, Sonnet 4.6 and Opus 4.6 answer with the same "`temperature` and `top_p` cannot both be specified for this model" on the first-party API and on both Bedrock doors. Captured before the fix, a call carrying both left the wire intact for all four, so the 400 was guaranteed. Haiku alone was spared. From 4.7 on the question is moot: sampling is rejected outright and ClaudeRejectsSampling already drops it. Two tests asserting that Opus 4.5 carries output_config.effort on Bedrock were written against the first-party behaviour and are corrected to the measured one, with the Anthropic side pinned separately so both halves of the provider boundary stay covered. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm_test.go | 70 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 4 ++ .../bedrockclient_converse_test.go | 34 +++++++-- .../bedrockclient/provider_anthropic.go | 3 + .../provider_anthropic_reasoning_test.go | 28 ++++++-- llms/reasoning/claude_capability.go | 8 ++- llms/reasoning/claude_capability_test.go | 24 +++++++ 7 files changed, 162 insertions(+), 9 deletions(-) diff --git a/llms/anthropic/anthropicllm_test.go b/llms/anthropic/anthropicllm_test.go index 32671cec6..4776e5e7d 100644 --- a/llms/anthropic/anthropicllm_test.go +++ b/llms/anthropic/anthropicllm_test.go @@ -1,12 +1,14 @@ package anthropic import ( + "context" "encoding/json" "errors" "io" "net/http" "net/http/httptest" "os" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -760,3 +762,71 @@ func TestAnthropic_StructuredOutputResponseValidation(t *testing.T) { require.True(t, errors.As(err, &ve), "enum case mismatch must fail, got %v", err) }) } + +func TestSamplingParamsNeverBothOnTheWire(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + for _, model := range []string{ + "claude-haiku-4-5-20251001", + "claude-sonnet-4-5-20250929", + "claude-opus-4-5-20251101", + "claude-sonnet-4-6", + "claude-opus-4-6", + } { + t.Run(model, func(t *testing.T) { + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, resp) + })) + defer srv.Close() + + llm, err := New(WithBaseURL(srv.URL), WithToken("t"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTemperature(0.5), llms.WithTopP(0.9)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if strings.Contains(body, `"temperature"`) && strings.Contains(body, `"top_p"`) { + t.Fatalf("both sampling params reached the wire: %s", body) + } + }) + } +} + +func TestBudgetEffortForOpus45OnTheAnthropicPath(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, resp) + })) + defer srv.Close() + + llm, err := New(WithBaseURL(srv.URL), WithToken("t"), WithModel("claude-opus-4-5-20251101")) + require.NoError(t, err) + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithMaxTokens(8000)) + require.NoError(t, err) + + assert.Contains(t, body, `"type":"enabled"`, "Opus 4.5 is budget-only") + assert.Contains(t, body, `"output_config":{"effort":"high"}`, + "the first-party API takes the effort alongside a budget here") +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 9a76fd39e..47628d382 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -212,6 +212,10 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti inferenceConfig.Temperature = nil inferenceConfig.TopP = nil } + if reasoning.ClaudeMutuallyExclusiveSampling(input.ModelID) && + inferenceConfig.Temperature != nil && inferenceConfig.TopP != nil { + inferenceConfig.TopP = nil + } // Native AWS structured output rides on the top-level OutputConfig.TextFormat, // independent of the provider-specific reasoning fields above. diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 636f5a407..8a4ea714e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -10,6 +10,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/bedrockruntime/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" ) @@ -1034,7 +1035,7 @@ func TestConverseClient_AdaptiveEffortDerivedFromMaxTokens(t *testing.T) { "3000 of 32000 max tokens is a low effort; deriving from a hardcoded 0 would say high") } -func TestConverseClient_BudgetEffortForOpus45(t *testing.T) { +func TestConverseClient_NoBudgetEffortForOpus45OnBedrock(t *testing.T) { mockClient := &MockBedrockRuntimeClient{} client := NewConverseClient(mockClient) @@ -1071,7 +1072,32 @@ func TestConverseClient_BudgetEffortForOpus45(t *testing.T) { thinking, _ := fields["thinking"].(map[string]any) assert.Equal(t, "enabled", thinking["type"], "Opus 4.5 is budget-only") - outputConfig, _ := fields["output_config"].(map[string]any) - assert.Equal(t, string(llms.ReasoningHigh), outputConfig["effort"], - "Opus 4.5 honors effort alongside a budget; the direct Anthropic path sends it too") + _, hasOutputConfig := fields["output_config"] + assert.False(t, hasOutputConfig, "Bedrock rejects output_config.effort on Opus 4.5") +} + +func TestConverseClient_DropsTopPWhenBothSamplingParamsSet(t *testing.T) { + for _, model := range []string{ + "us.anthropic.claude-haiku-4-5-20251001-v1:0", + "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + "us.anthropic.claude-opus-4-5-20251101-v1:0", + "us.anthropic.claude-sonnet-4-6", + "us.anthropic.claude-opus-4-6-v1", + } { + t.Run(model, func(t *testing.T) { + client := NewConverseClient(&MockBedrockRuntimeClient{}) + temp, topP := 0.5, 0.9 + got, err := client.buildConverseInput(&ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + Temperature: &temp, + TopP: &topP, + }) + require.NoError(t, err) + cfg := got.InferenceConfig + require.NotNil(t, cfg) + assert.False(t, cfg.Temperature != nil && cfg.TopP != nil, + "both sampling params reached the wire for %s", model) + }) + } } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 6a823b796..02e9b0fca 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -694,6 +694,9 @@ func applyAnthropicReasoning( input.TopP = 0 input.TopK = 0 } + if reasoning.ClaudeMutuallyExclusiveSampling(modelID) && input.Temperature != 0 && input.TopP != 0 { + input.TopP = 0 + } switch cfg.ResolveMode() { case llms.ReasoningDefault: diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index caa90df7e..83cc74697 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -89,7 +89,7 @@ func TestApplyAnthropicReasoning_AdaptiveEmptyEffortDefaultsToHigh(t *testing.T) assert.Equal(t, "high", input.OutputConfig.Effort) } -func TestApplyAnthropicReasoning_BudgetEffortForOpus45(t *testing.T) { +func TestApplyAnthropicReasoning_NoBudgetEffortForOpus45OnBedrock(t *testing.T) { t.Parallel() input := anthropicTextGenerationInput{MaxTokens: 8000} @@ -102,9 +102,8 @@ func TestApplyAnthropicReasoning_BudgetEffortForOpus45(t *testing.T) { thinking, _ := fields["thinking"].(map[string]any) assert.Equal(t, "enabled", thinking["type"], "Opus 4.5 is budget-only") - outputConfig, _ := fields["output_config"].(map[string]any) - assert.Equal(t, string(llms.ReasoningHigh), outputConfig["effort"], - "Opus 4.5 honors effort alongside a budget; the direct Anthropic path sends it too") + _, hasOutputConfig := fields["output_config"] + assert.False(t, hasOutputConfig, "Bedrock rejects output_config.effort on Opus 4.5") } func TestApplyAnthropicReasoning_Budget(t *testing.T) { @@ -251,3 +250,24 @@ func TestApplyAnthropicReasoning_OffAlwaysOnErrors(t *testing.T) { require.ErrorAs(t, err, &offErr) assert.Nil(t, input.Thinking) } + +func TestApplyAnthropicReasoning_DropsTopPWhenBothSamplingParamsSet(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "us.anthropic.claude-haiku-4-5-20251001-v1:0", + "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + "us.anthropic.claude-opus-4-5-20251101-v1:0", + "us.anthropic.claude-sonnet-4-6", + "us.anthropic.claude-opus-4-6-v1", + } { + t.Run(model, func(t *testing.T) { + input := anthropicTextGenerationInput{MaxTokens: 2048, Temperature: 0.5, TopP: 0.9} + require.NoError(t, applyAnthropicReasoning(&input, &llms.ReasoningConfig{}, model, 2048)) + fields := marshalAnthropicInput(t, input) + _, hasTemp := fields["temperature"] + _, hasTopP := fields["top_p"] + assert.False(t, hasTemp && hasTopP, "both sampling params reached the wire: %v", fields) + }) + } +} diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 2e9734f03..789d55cae 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -152,7 +152,13 @@ func ClaudeRejectsAssistantPrefill(model string) bool { // mutuallyExclusiveSamplingClaude models reject temperature and top_p set // together (only one may be provided). -var mutuallyExclusiveSamplingClaude = []string{"claude-haiku-4-5", "claude-haiku-4.5"} +var mutuallyExclusiveSamplingClaude = []string{ + "claude-haiku-4-5", "claude-haiku-4.5", + "claude-sonnet-4-5", "claude-sonnet-4.5", + "claude-opus-4-5", "claude-opus-4.5", + "claude-sonnet-4-6", "claude-sonnet-4.6", + "claude-opus-4-6", "claude-opus-4.6", +} // ClaudeMutuallyExclusiveSampling reports whether the model returns a 400 when // temperature and top_p are set together, so the caller must send at most one. diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 2256225cd..9df07d1f2 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -254,3 +254,27 @@ func TestClaudePredatesAdaptive(t *testing.T) { } } } + +func TestClaudeMutuallyExclusiveSampling(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + }{ + {"claude-haiku-4-5-20251001", true}, + {"claude-sonnet-4-5-20250929", true}, + {"claude-opus-4-5-20251101", true}, + {"claude-sonnet-4-6", true}, + {"claude-opus-4-6", true}, + {"us.anthropic.claude-opus-4-6-v1", true}, + {"anthropic/claude-sonnet-4.5", true}, + {"claude-opus-4-7", false}, + {"claude-opus-5", false}, + {"gpt-5.4-mini", false}, + } + for _, tc := range cases { + if got := ClaudeMutuallyExclusiveSampling(tc.model); got != tc.want { + t.Errorf("ClaudeMutuallyExclusiveSampling(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} From 3d9e739a9f61bbae0c59e142c1bd9afaf05304b7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 08:31:00 +0700 Subject: [PATCH 042/618] fix(googleai): let a Flash-Lite model be turned off MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The whole Gemini 3 family was classified as unable to stop thinking, so an explicit disable on gemini-3.1-flash-lite returned "reasoning cannot be disabled" without a request. Probed on a prompt heavy enough to force reasoning, the Flash-Lite tier spends no thinking tokens at all — gemini-2.5-flash-lite, gemini-3.1-flash-lite and gemini-3.5-flash-lite all answer with 0 thoughts against 3040 for gemini-3.6-flash on the same prompt. Omission is therefore the disable wire for that tier, which also sidesteps the split inside the family: gemini-3.1-flash-lite accepts thinkingBudget 0 while gemini-3.5-flash-lite rejects it. The hint stops claiming these models think by default, and the Gemini 3 models that really cannot be disabled still report so. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_core_unit_test.go | 38 ++++++++++++++++-------- llms/reasoning/gemini_capability.go | 9 ++++++ llms/reasoning/gemini_capability_test.go | 25 ++++++++++++++++ llms/reasoning/off.go | 2 +- llms/reasoning/off_test.go | 4 +-- llms/reasoning_support.go | 5 +--- llms/reasoning_support_test.go | 18 ++++++++++- 7 files changed, 80 insertions(+), 21 deletions(-) diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index ca72c49d8..3a7ee8d81 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1034,20 +1034,28 @@ func TestThinkingConfig(t *testing.T) { // (pentagi backend/pkg/providers/gemini/models.yml). Keep this list in sync when // that catalog changes — the tests below assert wire-level thinking behavior for // every entry so a new model cannot silently miss reasoning coverage. +type disableWire int + +const ( + disableUnsupported disableWire = iota // WithReasoningDisabled must error before the request + disableZeroBudget // thinking_budget: 0 + disableOmit // no thinking config at all +) + var productionGeminiModels = []struct { name string usesThinkingLevel bool // Gemini 3.x uses thinking_level; 2.5 / Gemma use thinking_budget - canDisable bool // false → WithReasoningDisabled must error before the request + disable disableWire }{ - {name: "gemini-3.5-flash", usesThinkingLevel: true, canDisable: false}, - {name: "gemini-3.1-pro-preview", usesThinkingLevel: true, canDisable: false}, - {name: "gemini-3.1-pro-preview-customtools", usesThinkingLevel: true, canDisable: false}, - {name: "gemini-3.1-flash-lite", usesThinkingLevel: true, canDisable: false}, - {name: "gemini-2.5-pro", usesThinkingLevel: false, canDisable: false}, - {name: "gemini-2.5-flash", usesThinkingLevel: false, canDisable: true}, - {name: "gemini-2.5-flash-lite", usesThinkingLevel: false, canDisable: true}, - {name: "gemma-4-31b-it", usesThinkingLevel: false, canDisable: true}, - {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, canDisable: true}, + {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableUnsupported}, + {name: "gemini-3.1-pro-preview", usesThinkingLevel: true, disable: disableUnsupported}, + {name: "gemini-3.1-pro-preview-customtools", usesThinkingLevel: true, disable: disableUnsupported}, + {name: "gemini-3.1-flash-lite", usesThinkingLevel: true, disable: disableOmit}, + {name: "gemini-2.5-pro", usesThinkingLevel: false, disable: disableUnsupported}, + {name: "gemini-2.5-flash", usesThinkingLevel: false, disable: disableZeroBudget}, + {name: "gemini-2.5-flash-lite", usesThinkingLevel: false, disable: disableOmit}, + {name: "gemma-4-31b-it", usesThinkingLevel: false, disable: disableZeroBudget}, + {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, disable: disableZeroBudget}, } func TestResolveTemperature(t *testing.T) { @@ -1170,7 +1178,7 @@ func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { support := llms.ReasoningSupportFor(m.name, reasoning.ProviderGoogleAI) assert.True(t, support.Supported) assert.True(t, support.Known, "production model %s should be a Known reasoning model", m.name) - assert.Equal(t, !m.canDisable, support.CannotDisable, + assert.Equal(t, m.disable == disableUnsupported, support.CannotDisable, "CannotDisable hint mismatch for %s", m.name) // Reasoning on with effort (no explicit token budget). @@ -1192,13 +1200,17 @@ func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { // Explicit disable. offCfg := &llms.ReasoningConfig{Mode: llms.ReasoningOff} tcOff, err := resolveThinkingConfig(m.name, offCfg, 8192) - if m.canDisable { + switch m.disable { + case disableZeroBudget: require.NoError(t, err, "disable must succeed for %s", m.name) require.NotNil(t, tcOff) require.NotNil(t, tcOff.ThinkingBudget) assert.Equal(t, int32(0), *tcOff.ThinkingBudget) assert.False(t, tcOff.IncludeThoughts) - } else { + case disableOmit: + require.NoError(t, err, "disable must succeed for %s", m.name) + assert.Nil(t, tcOff, "%s is off unless asked, so disable sends nothing", m.name) + case disableUnsupported: var offErr *reasoning.ErrReasoningOffUnsupported require.ErrorAs(t, err, &offErr, "disable must be unsupported for %s", m.name) assert.Nil(t, tcOff) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index c86eca287..ef84b4e4c 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -57,6 +57,9 @@ func geminiKnownNonThinking(model string) bool { // treated as disablable (optimistic: attempt it, let the API be the backstop). func GeminiCanDisable(model string) bool { m := strings.ToLower(model) + if GeminiThinkingOffByDefault(m) { + return true + } if hasFamily(m, "gemini-3") { return false } @@ -65,3 +68,9 @@ func GeminiCanDisable(model string) bool { } return true } + +// GeminiThinkingOffByDefault reports whether the model leaves thinking off until +// asked, so omitting the thinking config already yields "off". +func GeminiThinkingOffByDefault(model string) bool { + return strings.Contains(strings.ToLower(model), "flash-lite") +} diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index 1bb5ce1fe..23fb0ff1f 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -105,3 +105,28 @@ func TestGeminiFamilyBoundary(t *testing.T) { } } } + +func TestGeminiFlashLiteDisablesByOmitting(t *testing.T) { + t.Parallel() + cases := []struct { + model string + canDisable bool + off OffWire + }{ + {"gemini-2.5-flash-lite", true, OffOmit}, + {"gemini-3.1-flash-lite", true, OffOmit}, + {"gemini-3.5-flash-lite", true, OffOmit}, + {"gemini-2.5-flash", true, OffZeroBudget}, + {"gemini-2.5-pro", false, OffUnsupported}, + {"gemini-3.1-pro-preview", false, OffUnsupported}, + {"gemini-3.6-flash", false, OffUnsupported}, + } + for _, tc := range cases { + if got := GeminiCanDisable(tc.model); got != tc.canDisable { + t.Errorf("GeminiCanDisable(%q) = %v, want %v", tc.model, got, tc.canDisable) + } + if got := ResolveOff(tc.model, ProviderGoogleAI); got != tc.off { + t.Errorf("ResolveOff(%q) = %v, want %v", tc.model, got, tc.off) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index f305027fb..5a9a07546 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -78,7 +78,7 @@ func ResolveOff(model string, p Provider) OffWire { } // Known non-thinking families reject thinkingBudget:0, so omit rather than // send it; unknown Gemini/Gemma names stay optimistic (attempt budget:0). - if geminiKnownNonThinking(model) { + if geminiKnownNonThinking(model) || GeminiThinkingOffByDefault(model) { return OffOmit } return OffZeroBudget diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 35b6b66c2..3f7cdb36a 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -19,12 +19,12 @@ func TestResolveOff(t *testing.T) { {"claude-sonnet-4-5", ProviderBedrock, OffOmit}, // off by default {"claude-3-5-haiku", ProviderAnthropic, OffOmit}, // no thinking {"gemini-2.5-flash", ProviderGoogleAI, OffZeroBudget}, - {"gemini-2.5-flash-lite", ProviderGoogleAI, OffZeroBudget}, + {"gemini-2.5-flash-lite", ProviderGoogleAI, OffOmit}, {"gemini-2.5-pro", ProviderGoogleAI, OffUnsupported}, // Pro cannot disable thinking {"gemini-3.1-pro", ProviderGoogleAI, OffUnsupported}, // 3.x has no full off {"gemini-3.1-pro-preview", ProviderGoogleAI, OffUnsupported}, {"gemini-3.1-pro-preview-customtools", ProviderGoogleAI, OffUnsupported}, - {"gemini-3.1-flash-lite", ProviderGoogleAI, OffUnsupported}, + {"gemini-3.1-flash-lite", ProviderGoogleAI, OffOmit}, {"gemini-3.5-flash", ProviderGoogleAI, OffUnsupported}, {"gemini-3-flash", ProviderGoogleAI, OffUnsupported}, {"gemma-4-31b-it", ProviderGoogleAI, OffZeroBudget}, diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index ba922242f..464995b9f 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -133,13 +133,10 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if p == reasoning.ProviderGoogleAI && reasoning.GeminiSupportsThinking(model) { return ReasoningSupport{ - // Flash/Flash-Lite/Gemma disable via thinkingBudget:0; Pro and Gemini 3.x - // cannot fully disable — derive from the same resolver the wire uses. CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, Supported: true, Known: true, - // These families think by default (Flash-Lite / Gemma may still accept budget:0). - DefaultOn: boolPtr(true), + DefaultOn: boolPtr(!reasoning.GeminiThinkingOffByDefault(model)), } } diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 0ec6c0e15..af76128cc 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -183,6 +183,22 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } }) + t.Run("Gemini Flash-Lite is off until asked", func(t *testing.T) { + for _, model := range []string{"gemini-2.5-flash-lite", "gemini-3.1-flash-lite", "gemini-3.5-flash-lite"} { + s := ReasoningSupportFor(model, reasoning.ProviderGoogleAI) + eq(t, model+" Supported", s.Supported, true) + eq(t, model+" CannotDisable", s.CannotDisable, false) + if s.DefaultOn == nil || *s.DefaultOn { + t.Errorf("%s DefaultOn = %v, want false", model, s.DefaultOn) + } + } + flash := ReasoningSupportFor("gemini-3.6-flash", reasoning.ProviderGoogleAI) + if flash.DefaultOn == nil || !*flash.DefaultOn { + t.Errorf("gemini-3.6-flash DefaultOn = %v, want true", flash.DefaultOn) + } + eq(t, "gemini-3.6-flash CannotDisable", flash.CannotDisable, true) + }) + t.Run("Gemini 2.5 disable hint is model-dependent", func(t *testing.T) { flash := ReasoningSupportFor("gemini-2.5-flash", reasoning.ProviderGoogleAI) eq(t, "2.5 Flash CannotDisable", flash.CannotDisable, false) @@ -199,7 +215,7 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes {"gemini-3.5-flash", true}, {"gemini-3.1-pro-preview", true}, {"gemini-3.1-pro-preview-customtools", true}, - {"gemini-3.1-flash-lite", true}, + {"gemini-3.1-flash-lite", false}, {"gemini-2.5-pro", true}, {"gemini-2.5-flash", false}, {"gemini-2.5-flash-lite", false}, From 4ee12717cb8968a93f79e30ac6550604f85ad871 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 15:33:37 +0700 Subject: [PATCH 043/618] fix(openai): keep the caller's temperature where the model accepts it The pin to 1.0 covered every reasoning model, but the API only demands the default on some of them. Asked with temperature 0.2, gpt-5.1, gpt-5.2, gpt-5.4 and its mini/nano variants answer 200, while gpt-5, gpt-5-mini, gpt-5-nano, gpt-5.5, the gpt-5.6 line and the o-series return "Unsupported value: 'temperature' does not support 0.2 with this model. Only the default (1) value is supported." gpt-5.4-mini is the library's own default chat model, so a caller asking for 0.2 there silently got 1. Models outside the measured set keep the pin: a value the vendor rejects is worse than one it ignores. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 5 ++- llms/openai/options_test.go | 16 +++---- .../reasoning_effort_passthrough_test.go | 45 +++++++++++++++++++ llms/reasoning/openai_capability.go | 16 +++++++ 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 5c41ca221..6a2c63e79 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -258,8 +258,9 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.SetResponseFormat(ResponseFormatJSON) } - // set temperature to 1.0 for reasoning models, unless reasoning is explicitly disabled - if opts.Temperature != nil && reasoning.IsReasoningModel(o.effectiveModel(opts)) && !opts.Reasoning.IsDisabled() { + if model := o.effectiveModel(opts); opts.Temperature != nil && + reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && + !reasoning.OpenAIAcceptsCustomTemperature(model) { temperature := 1.0 req.Temperature = &temperature } diff --git a/llms/openai/options_test.go b/llms/openai/options_test.go index 52e4acd7f..f73d95019 100644 --- a/llms/openai/options_test.go +++ b/llms/openai/options_test.go @@ -436,16 +436,16 @@ func TestZeroConfigTemperaturePinUsesDefaultModel(t *testing.T) { return body } - zeroConfig := capture(t) - if !strings.Contains(zeroConfig, `"temperature":1`) { - t.Errorf("zero-config must pin temperature for %s, got body: %s", - openaiclient.DefaultChatModel, zeroConfig) + // The pin must read the client's model, which no per-call option supplies. + clientModel := capture(t, WithModel("gpt-5.5")) + if !strings.Contains(clientModel, `"temperature":1`) { + t.Errorf("gpt-5.5 only accepts the default temperature, got body: %s", clientModel) } - explicit := capture(t, WithModel(openaiclient.DefaultChatModel)) - if !strings.Contains(explicit, `"temperature":1`) { - t.Errorf("explicit %s must pin temperature too, got body: %s", - openaiclient.DefaultChatModel, explicit) + zeroConfig := capture(t) + if !strings.Contains(zeroConfig, `"temperature":0.2`) { + t.Errorf("%s takes the caller temperature, got body: %s", + openaiclient.DefaultChatModel, zeroConfig) } plain := capture(t, WithModel("gpt-4.1-mini")) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 3d03e6277..2fce23500 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -303,3 +303,48 @@ func TestReasoningDisabledForClaudeBehindOpenAITransport(t *testing.T) { } }) } + +func TestTemperaturePinnedOnlyWhereTheModelDemandsIt(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + send := func(t *testing.T, model string) string { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTemperature(0.5)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + for _, model := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano"} { + t.Run("keeps/"+model, func(t *testing.T) { + if body := send(t, model); !strings.Contains(body, `"temperature":0.5`) { + t.Fatalf("%s takes the caller's temperature, got body: %s", model, body) + } + }) + } + for _, model := range []string{"gpt-5", "gpt-5-mini", "gpt-5.5", "gpt-5.6-terra", "o3-mini"} { + t.Run("pins/"+model, func(t *testing.T) { + if body := send(t, model); !strings.Contains(body, `"temperature":1`) { + t.Fatalf("%s only accepts the default temperature, got body: %s", model, body) + } + }) + } +} diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 2d24f44bb..56dbb7fd5 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -86,3 +86,19 @@ func openAIXHighCeiling(m string) bool { } return false } + +// OpenAIAcceptsCustomTemperature reports whether a reasoning model takes a +// temperature other than the default, so the caller's value is not overwritten +// on a model that honors it. +func OpenAIAcceptsCustomTemperature(model string) bool { + m := strings.ToLower(model) + if idx := strings.LastIndex(m, "/"); idx != -1 { + m = m[idx+1:] + } + for _, prefix := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { + if strings.HasPrefix(m, prefix) { + return true + } + } + return false +} From c55e0ff989d8d2463d22bd92550318265bc1dde3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:04:01 +0700 Subject: [PATCH 044/618] test(googleai): record fixtures through a gateway Re-recording googleai fixtures takes a direct vendor key, which not every contributor has. Route the test transport through GOOGLE_BASE_URL so a compatible proxy serves the same endpoints; the rewrite sits below the recorder, so the trace still carries the vendor URL and replays offline. A proxy adds its own X-Litellm-* response headers, one of which reports the key's accumulated spend. Scrub them out of the trace, and fail TestRecordingsCarryNoProxyHeaders if such a header ever reaches testdata. Co-Authored-By: Claude Opus 5 --- internal/httprr/README.md | 16 ++++++++++++++ llms/googleai/googleai_test.go | 38 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/internal/httprr/README.md b/internal/httprr/README.md index 9da62db6c..b4c74ddfe 100644 --- a/internal/httprr/README.md +++ b/internal/httprr/README.md @@ -232,6 +232,22 @@ go test ./pkg -httprecord=. -run TestSpecificFunction go test ./... -httprecord="TestOpenAI.*" ``` +### Recording Through a Gateway + +The Google AI tests reach the vendor through whatever base URL `GOOGLE_BASE_URL` +names, so fixtures can be re-recorded with a proxy key when no direct vendor key +is at hand: + +```bash +GOOGLE_API_KEY= GOOGLE_BASE_URL=https://gateway.example/gemini \ + go test ./llms/googleai/ -httprecord=. -run TestGoogleAIWithTools +``` + +The recorded request still carries the vendor URL, because the rewrite happens +below the recorder. Proxy-added `X-Litellm-*` response headers are scrubbed, one +of which reports the key's accumulated spend; `TestRecordingsCarryNoProxyHeaders` +fails if any reaches `testdata/`. + ### Running with Recorded Data ```bash diff --git a/llms/googleai/googleai_test.go b/llms/googleai/googleai_test.go index 0ff209b73..49feab51f 100644 --- a/llms/googleai/googleai_test.go +++ b/llms/googleai/googleai_test.go @@ -1,10 +1,12 @@ package googleai import ( + "bytes" "context" "encoding/json" "net/http" "os" + "path/filepath" "strings" "testing" @@ -17,6 +19,25 @@ import ( "github.com/stretchr/testify/require" ) +func scrubProxyHeaders(buf *bytes.Buffer) error { + const sep = "\r\n\r\n" + dump := buf.String() + end := strings.Index(dump, sep) + if end == -1 { + return nil + } + kept := make([]string, 0, strings.Count(dump[:end], "\r\n")+1) + for _, line := range strings.Split(dump[:end], "\r\n") { + if strings.HasPrefix(strings.ToLower(line), "x-litellm-") { + continue + } + kept = append(kept, line) + } + buf.Reset() + buf.WriteString(strings.Join(kept, "\r\n") + dump[end:]) + return nil +} + func newHTTPRRClient(t *testing.T, opts ...Option) *GoogleAI { t.Helper() @@ -32,10 +53,12 @@ func newHTTPRRClient(t *testing.T, opts ...Option) *GoogleAI { transport = &httputil.ApiKeyTransport{ Transport: transport, APIKey: apiKey, + BaseURL: os.Getenv("GOOGLE_BASE_URL"), } } rr := httprr.OpenForTest(t, transport) + rr.ScrubResp(scrubProxyHeaders) // Avoid issue with different view of request bodies for Google AI SDK rr.ScrubReq(httprr.JsonCompactScrubBody) @@ -871,3 +894,18 @@ func TestGoogleAIThinkingModels(t *testing.T) { } }) } + +func TestRecordingsCarryNoProxyHeaders(t *testing.T) { + t.Parallel() + + files, err := filepath.Glob("testdata/*.httprr") + require.NoError(t, err) + require.NotEmpty(t, files) + + for _, file := range files { + data, err := os.ReadFile(file) + require.NoError(t, err) + assert.False(t, strings.Contains(strings.ToLower(string(data)), "x-litellm-"), + "%s carries proxy headers", file) + } +} From 476f3a6fac21da531decb343557beff899571830 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:04:09 +0700 Subject: [PATCH 045/618] fix(googleai): stop truncating answers at 2048 tokens googleai carried its own default of 2048 output tokens while the rest of the library defaults to llms.DefaultMaxTokens, so a caller who set no explicit limit got Gemini answers cut off mid-sentence with finishReason MAX_TOKENS. The harm-threshold fixture recorded exactly that: the answer breaks off at "or proces" and the response reports MAX_TOKENS. Adopt the library default. Sixteen fixtures pinned the old value in the request body; re-recorded, and the harm-threshold answer now completes with finishReason STOP. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_unit_test.go | 2 +- llms/googleai/option.go | 2 +- .../googleai/testdata/TestGoogleAICall.httprr | 30 +++++----- .../TestGoogleAIGenerateContent.httprr | 28 +++++---- ...GenerateContentWithMultipleMessages.httprr | 30 +++++----- ...eAIGenerateContentWithSystemMessage.httprr | 34 ++++++----- .../TestGoogleAIMultiModalContent.httprr | 24 ++++---- ...turedOutput-array_schema_is_honored.httprr | 28 +++++---- ...uredOutput-object_schema_is_honored.httprr | 30 +++++----- ...treaming_object_schema_is_validated.httprr | 27 ++++----- ...oogleAIThinkingModels-non-streaming.httprr | 36 ++++++------ ...estGoogleAIThinkingModels-streaming.httprr | 57 ++++++++++--------- .../TestGoogleAIToolCallResponse.httprr | 56 ++++++++++-------- .../TestGoogleAIWithHarmThreshold.httprr | 36 ++++++------ .../testdata/TestGoogleAIWithJSONMode.httprr | 28 +++++---- .../testdata/TestGoogleAIWithStreaming.httprr | 51 ++++++++--------- .../testdata/TestGoogleAIWithTools.httprr | 32 ++++++----- .../TestGoogleAIWithToolsCustomType.httprr | 26 +++++---- llms/googleai/vertex/new_test.go | 5 +- 19 files changed, 309 insertions(+), 253 deletions(-) diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index d131c1687..68fea3181 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -100,7 +100,7 @@ func TestDefaultOptions(t *testing.T) { assert.Equal(t, "gemini-2.5-flash", opts.DefaultModel) assert.Equal(t, "gemini-embedding-001", opts.DefaultEmbeddingModel) assert.Equal(t, 1, opts.DefaultCandidateCount) - assert.Equal(t, 2048, opts.DefaultMaxTokens) + assert.Equal(t, llms.DefaultMaxTokens, opts.DefaultMaxTokens) assert.Equal(t, 0.5, opts.DefaultTemperature) assert.Equal(t, 3, opts.DefaultTopK) assert.Equal(t, 0.95, opts.DefaultTopP) diff --git a/llms/googleai/option.go b/llms/googleai/option.go index 2c1760a9a..0386f6f67 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -41,7 +41,7 @@ func DefaultOptions() Options { DefaultModel: "gemini-2.5-flash", DefaultEmbeddingModel: "gemini-embedding-001", DefaultCandidateCount: 1, - DefaultMaxTokens: 2048, + DefaultMaxTokens: llms.DefaultMaxTokens, DefaultTemperature: 0.5, DefaultTopK: 3, DefaultTopP: 0.95, diff --git a/llms/googleai/testdata/TestGoogleAICall.httprr b/llms/googleai/testdata/TestGoogleAICall.httprr index b473885c6..fe2830cc3 100644 --- a/llms/googleai/testdata/TestGoogleAICall.httprr +++ b/llms/googleai/testdata/TestGoogleAICall.httprr @@ -1,27 +1,31 @@ httprr trace v1 -782 990 +783 1168 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 462 +Content-Length: 463 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 2 + 2?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 579 +{"contents":[{"parts":[{"text":"What is 2 + 2?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 578 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:03 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=636 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:39 GMT +Server: nginx +Server-Timing: gfet4t7; dur=620 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -41,16 +45,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 9, "candidatesTokenCount": 7, - "totalTokenCount": 36, + "totalTokenCount": 33, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 9 } ], - "thoughtsTokenCount": 20, + "thoughtsTokenCount": 17, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "9rZxaoaVKuq5vdIPtLXR-AM" + "responseId": "AhOIaojKKYXYxN8P6b6acA" } diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr index e4811baf5..13a0f7ee4 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr @@ -1,27 +1,31 @@ httprr trace v1 -798 1016 +799 1195 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 478 +Content-Length: 479 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 605 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:54:57 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=710 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:33 GMT +Server: nginx +Server-Timing: gfet4t7; dur=591 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -41,16 +45,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 8, "candidatesTokenCount": 8, - "totalTokenCount": 31, + "totalTokenCount": 43, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 8 } ], - "thoughtsTokenCount": 15, + "thoughtsTokenCount": 27, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "8bZxatCBGYqBxs0Ptt7msAg" + "responseId": "_BKIarT5M5a3xN8P98fwiQE" } diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr index 587c1e67a..56db72abf 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr @@ -1,27 +1,31 @@ httprr trace v1 -900 1001 +901 1181 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 580 +Content-Length: 581 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"My name is Alice"}],"role":"user"},{"parts":[{"text":"Nice to meet you, Alice!"}],"role":"model"},{"parts":[{"text":"What's my name?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 590 +{"contents":[{"parts":[{"text":"My name is Alice"}],"role":"user"},{"parts":[{"text":"Nice to meet you, Alice!"}],"role":"model"},{"parts":[{"text":"What's my name?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 591 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:54:59 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=485 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:35 GMT +Server: nginx +Server-Timing: gfet4t7; dur=554 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -41,16 +45,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 20, "candidatesTokenCount": 5, - "totalTokenCount": 52, + "totalTokenCount": 47, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 20 } ], - "thoughtsTokenCount": 27, + "thoughtsTokenCount": 22, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "87ZxaoCPA7OrxN8Px_6vCQ" + "responseId": "_hKIarjXJ4GnvdIP7O_z8QM" } diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr index 20931467c..aab50b57a 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr @@ -1,27 +1,31 @@ httprr trace v1 -916 1070 +917 1247 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 596 +Content-Length: 597 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Tell me about the ocean"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"You are a helpful assistant that always responds in haiku format."}],"role":"system"}}HTTP/2.0 200 OK -Content-Length: 659 +{"contents":[{"parts":[{"text":"Tell me about the ocean"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"You are a helpful assistant that always responds in haiku format."}],"role":"system"}}HTTP/2.0 200 OK +Content-Length: 656 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:01 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=890 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:37 GMT +Server: nginx +Server-Timing: gfet4t7; dur=1028 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -29,7 +33,7 @@ X-Xss-Protection: 0 "content": { "parts": [ { - "text": "Blue, vast, deep, and wide,\nLife swims in its salty heart,\nWaves kiss sandy shores." + "text": "Deep blue, vast and wide,\nLife teems in its salty depths,\nAncient secrets sleep." } ], "role": "model" @@ -40,17 +44,17 @@ X-Xss-Protection: 0 ], "usageMetadata": { "promptTokenCount": 20, - "candidatesTokenCount": 23, - "totalTokenCount": 126, + "candidatesTokenCount": 21, + "totalTokenCount": 110, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 20 } ], - "thoughtsTokenCount": 83, + "thoughtsTokenCount": 69, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "9LZxaqbqJKr0xs0PlNW1sQI" + "responseId": "ABOIasOGGvi0xN8Pof3qiAQ" } diff --git a/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr b/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr index dd0b3afaa..0c92f7b3a 100644 --- a/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr +++ b/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr @@ -1,27 +1,31 @@ httprr trace v1 -47866 1086 +47867 1265 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 47544 +Content-Length: 47545 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"What is in this image?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"What is in this image?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 674 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:30 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=1336 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:03 GMT +Server: nginx +Server-Timing: gfet4t7; dur=1348 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -56,5 +60,5 @@ X-Xss-Protection: 0 "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "EbdxaubbEcG7vdIP3LqNqA8" + "responseId": "GROIao2cN7jT28oP4NTsyA8" } diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr index 5a972b3a3..a0741d70e 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr @@ -1,27 +1,31 @@ httprr trace v1 -960 1023 +961 1202 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 640 +Content-Length: 641 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"List three primary colors."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"responseJsonSchema":{"properties":{"colors":{"items":{"type":"string"},"type":"array"}},"required":["colors"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"List three primary colors."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"colors":{"items":{"type":"string"},"type":"array"}},"required":["colors"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 612 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:25 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=735 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:58 GMT +Server: nginx +Server-Timing: gfet4t7; dur=823 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -41,16 +45,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 6, "candidatesTokenCount": 9, - "totalTokenCount": 83, + "totalTokenCount": 67, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 6 } ], - "thoughtsTokenCount": 68, + "thoughtsTokenCount": 52, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "DLdxavn-H9jaxs0Pha-S0A0" + "responseId": "FROIarOIGNia28oPgvSq2AU" } diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr index 9075fa0c9..d185e45f9 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr @@ -1,27 +1,31 @@ httprr trace v1 -979 1041 +980 1219 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 659 +Content-Length: 660 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 630 +{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 629 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:23 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=900 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:56 GMT +Server: nginx +Server-Timing: gfet4t7; dur=828 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -41,16 +45,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 8, "candidatesTokenCount": 19, - "totalTokenCount": 107, + "totalTokenCount": 86, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 8 } ], - "thoughtsTokenCount": 80, + "thoughtsTokenCount": 59, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "Crdxaq_5IavXxN8P5r-n-Q8" + "responseId": "ExOIaunhFJStvdIPhIPNqQc" } diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr index 74f1461d7..27112db7e 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr @@ -1,29 +1,30 @@ httprr trace v1 -992 1209 +993 995 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 658 +Content-Length: 659 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of Japan?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 812 +{"contents":[{"parts":[{"text":"What is the capital of Japan?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 442 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment +Content-Security-Policy: frame-ancestors 'none' Content-Type: text/event-stream -Date: Tue, 04 Aug 2026 09:55:26 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=715 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:00 GMT +Server: nginx +Server-Timing: gfet4t7; dur=933 +Strict-Transport-Security: max-age=31536000 +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block -data: {"candidates": [{"content": {"parts": [{"text": "{\"capital\": \"Tokyo"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 8,"candidatesTokenCount": 5,"totalTokenCount": 64,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 8}],"thoughtsTokenCount": 51,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "Drdxaq3tE8iOvdIPgsDH2A4"} - -data: {"candidates": [{"content": {"parts": [{"text": "\", \"country\": \"Japan\"}"}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 8,"candidatesTokenCount": 12,"totalTokenCount": 71,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 8}],"thoughtsTokenCount": 51,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "Drdxaq3tE8iOvdIPgsDH2A4"} +data: {"candidates": [{"content": {"parts": [{"text": "{\"capital\": \"Tokyo\", \"country\": \"Japan\"}"}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 8,"candidatesTokenCount": 12,"totalTokenCount": 83,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 8}],"thoughtsTokenCount": 63,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "FxOIasHiIeTkxN8P09OkgQc"} diff --git a/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr b/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr index 9cb46be3c..817e1f890 100644 --- a/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr @@ -1,27 +1,31 @@ httprr trace v1 -911 4462 +912 4726 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 593 +Content-Length: 594 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 4048 +{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 4133 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:56:06 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=12657 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:37 GMT +Server: nginx +Server-Timing: gfet4t7; dur=10863 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -29,11 +33,11 @@ X-Xss-Protection: 0 "content": { "parts": [ { - "text": "**My Thought Process on the Sequence**\n\nOkay, so the user wants the next number in the sequence 2, 6, 12, 20, 30, and crucially, they want the *reasoning*. This means I need to explain my steps, not just provide a number. Let's break this down systematically.\n\nFirst, I need to analyze the request. The emphasis is on reasoning, so I need to make sure I *show* my work.\n\nNext, I'll start with the most obvious approach: find the differences between consecutive terms. This is often the first thing I try with number sequences. I calculate: 6-2=4, 12-6=6, 20-12=8, and 30-20=10. This gives me a new sequence of differences: 4, 6, 8, 10.\n\nNow, I look at *that* sequence. It's a simple arithmetic progression. The difference between each term is constant: 6-4=2, 8-6=2, and 10-8=2. A constant second-level difference means the original sequence is quadratic, fitting the form of an equation like *an² + bn + c*. This gives me confidence.\n\nWith this pattern, I can predict the next difference. It's clearly 12, following the pattern of adding 2. To find the next number in the original sequence, I'll add this next difference to the last term: 30 + 12 = 42. So, my initial answer is 42.\n\nI need to organize this reasoning clearly. I'll present the sequence, calculate the differences, identify the pattern (adding 2), and show the final calculation: 30 + 12 = 42.\n\nSince the user wants \"reasoning,\" I’ll give an additional approach to make it a more robust answer.\n\nI can also try looking for an algebraic formula. Let's see if there's a relationship between the number's position in the sequence and the number itself. If n=1, the number is 2. If n=2, the number is 6. If n=3, the number is 12. If n=4, the number is 20. If n=5, the number is 30.\n\nI notice that 1\\*2 = 2, 2\\*3 = 6, 3\\*4 = 12, 4\\*5 = 20, and 5\\*6 = 30. So the pattern appears to be *n * (n + 1)*. Thus, the next number would be 6 * 7 = 42, which agrees with the difference method!\n\nTherefore, the next number is **42**, and I can use either of the two methods above to provide a complete explanation.\n", + "text": "**My Thought Process on the Number Sequence**\n\nOkay, the user wants the next number in the sequence: 2, 6, 12, 20, 30. They also want the reasoning behind it, which is good – it means I have to demonstrate the underlying principle, not just spit out an answer. I can't just throw out a number; I need to provide a clear and logical explanation.\n\nMy first thought is to analyze the request itself – I need to not only identify the next number but also justify my selection. I need to demonstrate that I can identify and communicate the underlying pattern.\n\nMy immediate go-to method for these types of sequences is looking at the differences between consecutive terms. So, let's calculate those: 6 - 2 = 4; 12 - 6 = 6; 20 - 12 = 8; 30 - 20 = 10. The differences are 4, 6, 8, 10. That's a very clear pattern: consecutive even numbers. Adding the next even number should get the result.\n\nThe next difference will be 12. So, 30 + 12 = 42. So that's the answer. Now I have to structure this for clarity.\n\nI'll start by simply stating the answer: 42. Direct and to the point. Then I'll dive into the reasoning. I'll title it something like \"Reasoning: The Increasing Difference.\" Under that, I'll show the original sequence, then the calculated differences, explicitly pointing out the pattern of consecutive even numbers. I'll explain that the next difference is 12 and the final calculation: 30 + 12 = 42.\n\nBut, I should also go a step further. It is important to demonstrate the depth of the analysis, and to provide alternate approaches. Let me see if there's another pattern I can see.\n\nLet's look at the original sequence again: 2, 6, 12, 20, 30. Can I express these as products?\n* 2 = 1 * 2\n* 6 = 2 * 3\n* 12 = 3 * 4\n* 20 = 4 * 5\n* 30 = 5 * 6\n\nYes! This is the product of two consecutive integers: n * (n+1). This confirms the pattern in an alternative light. I should include this as a second, deeper analysis in the response. I'll ensure I present this in a succinct and elegant fashion, showing how this confirms my initial findings.\n", "thought": true }, { - "text": "Of course! The next number in the sequence is **42**.\n\nHere are a couple of ways to see the pattern:\n\n### Method 1: The Difference Between the Numbers\n\nIf you look at the difference between consecutive numbers, you'll find a simple pattern:\n\n* 6 - 2 = **4**\n* 12 - 6 = **6**\n* 20 - 12 = **8**\n* 30 - 20 = **10**\n\nThe difference is increasing by 2 each time (4, 6, 8, 10...). The next difference in this pattern will be **12**.\n\nSo, you add 12 to the last number in the original sequence:\n30 + 12 = **42**\n\n### Method 2: Multiplication Pattern\n\nEach number in the sequence is the product of two consecutive integers:\n\n* 1 x 2 = **2**\n* 2 x 3 = **6**\n* 3 x 4 = **12**\n* 4 x 5 = **20**\n* 5 x 6 = **30**\n\nFollowing this pattern, the next number will be:\n\n* 6 x 7 = **42**" + "text": "Of course! The next number in the sequence is **42**.\n\nHere are two ways to see the reasoning:\n\n### Method 1: The Increasing Difference\n\nThis is the most common way to solve this type of sequence.\n\n1. Look at the difference between each consecutive number:\n * 6 - 2 = **4**\n * 12 - 6 = **6**\n * 20 - 12 = **8**\n * 30 - 20 = **10**\n\n2. You can see that the amount you add each time is increasing by 2. The pattern of the differences is 4, 6, 8, 10...\n\n3. The next difference in that pattern will be **12**.\n\n4. Add 12 to the last number in the original sequence:\n * 30 + 12 = **42**\n\n### Method 2: The Multiplication Pattern\n\nEach number in the sequence is the product of two consecutive integers.\n\n* 1 x 2 = **2**\n* 2 x 3 = **6**\n* 3 x 4 = **12**\n* 4 x 5 = **20**\n* 5 x 6 = **30**\n\nFollowing this pattern, the next number will be:\n\n* 6 x 7 = **42**" } ], "role": "model" @@ -62,17 +66,17 @@ X-Xss-Protection: 0 ], "usageMetadata": { "promptTokenCount": 34, - "candidatesTokenCount": 273, - "totalTokenCount": 1220, + "candidatesTokenCount": 305, + "totalTokenCount": 1100, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 34 } ], - "thoughtsTokenCount": 913, + "thoughtsTokenCount": 761, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-pro", - "responseId": "Kbdxar_QGtv-vdIP-djFiQ8" + "responseId": "MhOIaqO2IIu3vdIP86XIuQE" } diff --git a/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr b/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr index a476f334a..0c5685061 100644 --- a/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr @@ -1,59 +1,62 @@ httprr trace v1 -925 14443 +926 14620 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 593 +Content-Length: 594 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 14043 +{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 14064 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment +Content-Security-Policy: frame-ancestors 'none' Content-Type: text/event-stream -Date: Tue, 04 Aug 2026 09:56:09 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=2617 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:40 GMT +Server: nginx +Server-Timing: gfet4t7; dur=2035 +Strict-Transport-Security: max-age=31536000 +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block -data: {"candidates": [{"content": {"parts": [{"text": "**Sequencing the Numbers**\n\nI'm analyzing the user's request, focusing on identifying the pattern in the sequence: 2, 6, 12, 20, 30, ?. Understanding the need for reasoning alongside the answer is crucial. Currently, I'm exploring various mathematical operations that could be applied. I'm going to look for any mathematical operations that might describe how the numbers are added or multiplied.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 104,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 70,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "**Deciphering the Pattern**\n\nI'm currently breaking down the user's request. It's a number sequence problem, and understanding the core pattern is key. The prompt is also seeking explicit reasoning, so, I need to outline each step in solving the pattern in numbers.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 103,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 69,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "**Predicting the Progression**\n\nI've determined the next number in the sequence is 42. The key was identifying the arithmetic progression of the first-level differences (4, 6, 8, 10). I've confirmed that the difference between each term increases consistently by 2. Therefore, to reach the answer, I added the next difference, 12, to the last number in the sequence, 30.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 458,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 424,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "**Unveiling the Logic**\n\nI've moved on to analyzing the differences between consecutive terms. The first-level differences, 4, 6, 8, and 10, clearly form an arithmetic progression. I can predict the next difference will be 12. Adding this to the last number in the original sequence, 30, leads me to the answer, 42. I'm preparing to explicitly state this process.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 450,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 416,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "**Formulating the Details**\n\nI'm now articulating the detailed answer, ensuring clarity and precision for the user. I've broken down the reasoning into discrete, easy-to-follow steps and I'm ready to present it. My focus is on making the solution and the thought process, as clear as possible.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 740,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 706,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "**Formulating the Explanation**\n\nI'm now drafting the step-by-step reasoning. I plan to present the solution, detailing the difference method first. Following that, I intend to provide a formulaic representation to offer a more insightful view of the sequence's construction, ensuring clarity and demonstrating a solid grasp of the underlying mathematical principles. I'm focusing on ensuring it's both straightforward and thorough.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 771,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 737,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "**Deriving the Formula**\n\nI'm now going deeper, formulating an algebraic representation of the sequence. I've successfully connected each term to its position, leading me to develop the formula `T(n) = n * (n + 1)`. I'm confident in the relationship between the term number and the value, which clarifies how to predict any term in the sequence.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 1041,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "**Synthesizing the Reasoning**\n\nI've just refined the explanation using two perspectives. I'll begin by outlining the difference method, providing a clear, step-by-step calculation, and then I'll follow with a formula, expressing the sequence as n \\* (n+1) for n starting at 1. The goal is to provide multiple avenues for user comprehension. I'm focusing on ensuring both clarity and completeness in the final output.\n\n\n","thought": true}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"totalTokenCount": 976,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "Of course! The next number in the sequence is **42**.\n\nHere are a couple of ways to see the reasoning:\n\n"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 22,"totalTokenCount": 1063,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "Of course. The next number in the sequence is **42**.\n\n"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 10,"totalTokenCount": 986,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "### Method 1: The Difference Between the Numbers\n\nThis is the most common way to solve this type of sequence.\n\n1."}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 49,"totalTokenCount": 1090,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "Here are two ways to determine the answer:\n\n### Method 1: The Increasing Difference\n\nThis is the most common way"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 35,"totalTokenCount": 1011,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": " Look at the difference between each consecutive number:\n * 6 - 2 = **4**\n "}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 70,"totalTokenCount": 1111,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": " to solve this type of sequence.\n\n1. Look at the difference between each consecutive number:\n * 6 - "}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 61,"totalTokenCount": 1037,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "* 12 - 6 = **6**\n * 20 - 12 = **8"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 94,"totalTokenCount": 1135,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "2 = **4**\n * 12 - 6 = **6**\n * 20"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 85,"totalTokenCount": 1061,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "**\n * 30 - 20 = **10**\n\n2. The differences themselves form a simple pattern"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 121,"totalTokenCount": 1162,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": " - 12 = **8**\n * 30 - 20 = **10**\n\n"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 108,"totalTokenCount": 1084,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": ": 4, 6, 8, 10... They are increasing by 2 each time.\n\n3"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 146,"totalTokenCount": 1187,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "2. You can see a clear pattern: the difference itself is increasing by 2 each time (4, 6"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 133,"totalTokenCount": 1109,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": ". The next difference in this pattern will be **12**.\n\n4. To find the next number in the"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 171,"totalTokenCount": 1212,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": ", 8, 10...).\n\n3. The next difference in the pattern should be **12**.\n\n"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 157,"totalTokenCount": 1133,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": " original sequence, just add 12 to the last number:\n * 30 + 12 = **4"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 197,"totalTokenCount": 1238,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "4. Add this next difference to the last number of the sequence:\n * 30 + 12 ="}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 183,"totalTokenCount": 1159,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "2**\n\n### Method 2: The Multiplication Pattern\n\nYou can also notice that each number in the sequence is the"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 221,"totalTokenCount": 1262,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": " **42**\n\n### Method 2: The Multiplication Pattern\n\nYou can also notice that each number in the sequence is the"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 209,"totalTokenCount": 1185,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": " product of two consecutive integers.\n\n* 1 x 2 = **2**\n* 2 x 3 = **6"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 248,"totalTokenCount": 1289,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": " product of two consecutive integers.\n\n* 1 x 2 = **2**\n* 2 x 3 = **6"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 236,"totalTokenCount": 1212,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "**\n* 3 x 4 = **12**\n* 4 x 5 = **20"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 272,"totalTokenCount": 1313,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "**\n* 3 x 4 = **12**\n* 4 x 5 = **20"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 260,"totalTokenCount": 1236,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "**\n* 5 x 6 = **30**\n\nFollowing this pattern, the next number will be:\n\n"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 296,"totalTokenCount": 1337,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "**\n* 5 x 6 = **30**\n\nFollowing this pattern, the next number would be:\n\n"}],"role": "model"},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 284,"totalTokenCount": 1260,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} -data: {"candidates": [{"content": {"parts": [{"text": "* 6 x 7 = **42**"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 307,"totalTokenCount": 1348,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 1007,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "N7dxaoLECda-vdIP4fyR2A0"} +data: {"candidates": [{"content": {"parts": [{"text": "* 6 x 7 = **42**"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"usageMetadata": {"promptTokenCount": 34,"candidatesTokenCount": 295,"totalTokenCount": 1271,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 34}],"thoughtsTokenCount": 942,"serviceTier": "standard"},"modelVersion": "gemini-2.5-pro","responseId": "PhOIatLmLNia28oP_fKq2AU"} diff --git a/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr b/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr index 84111d70c..cc6a61f6e 100644 --- a/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr +++ b/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr @@ -1,27 +1,31 @@ httprr trace v1 -1034 1525 +1035 1680 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 714 +Content-Length: 715 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK -Content-Length: 1113 +{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +Content-Length: 1089 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:50 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=597 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:23 GMT +Server: nginx +Server-Timing: gfet4t7; dur=647 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -35,7 +39,7 @@ X-Xss-Protection: 0 "expression": "15 * 7" } }, - "thoughtSignature": "CuIBARFNMg/pKWv3NyazbTfEpK0X8t+c+q97CtZ0zr20l0JIbl383+kQVEQoVWPsOQzrJorIERbVwpjZ44p/uDqxDM+wVALz5BdHph711En36/TyV64FkX09GhfMvqinOa6LJm4amlNDC5BebJv03i+KfcKJfBdBF5ZsEKhO6oHkkU/NcVK9QF6Id5sddxs7DOtP8EN/pylFtFVlhFZKcaMmbsuh9Sr/YDk03FWHtnjtpaAjyuAB2hdLpcGuH71bsTHi2AYJcUWWvGT2xBhWVD9ySytCSVqfWcc48kx8eSVrM4j8Uw==" + "thoughtSignature": "CtIBARFNMg9bLy4DsYEqPnNlA2GOfovJLcDUSfrqxZniZfiwLCyVkytZps9AKV3nMLR671S4l0WLCm7rJXxX2Sz0iB0te5OhnULyEkj0lvMH3qXaM7QXgaHYmnSe3+pwhcGHDZvcBAjKSrJcYzc01XVNnD8hC+4lt74upVT1cLI/8b4ttwwSENdUD7NGD6Gbtr8bx22+yQ+2T0PV4717BEvPCax42DK2WGR86ybVHZJ7SyCsf4oPAt8DrSLjJ6N7Y++gAKpzSeKQzyaMsE1P2z4Dmcir" } ], "role": "model" @@ -48,42 +52,46 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 46, "candidatesTokenCount": 17, - "totalTokenCount": 108, + "totalTokenCount": 103, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 46 } ], - "thoughtsTokenCount": 45, + "thoughtsTokenCount": 40, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "JrdxarbnE7Gc28oP6s-V2A4" + "responseId": "LhOIapD5NPmNvdIPzOn8kAw" } -1559 967 +1536 1146 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 1238 +Content-Length: 1215 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"expression":"15 * 7"},"name":"calculate"},"thoughtSignature":"CuIBARFNMg/pKWv3NyazbTfEpK0X8t+c+q97CtZ0zr20l0JIbl383+kQVEQoVWPsOQzrJorIERbVwpjZ44p/uDqxDM+wVALz5BdHph711En36/TyV64FkX09GhfMvqinOa6LJm4amlNDC5BebJv03i+KfcKJfBdBF5ZsEKhO6oHkkU/NcVK9QF6Id5sddxs7DOtP8EN/pylFtFVlhFZKcaMmbsuh9Sr/YDk03FWHtnjtpaAjyuAB2hdLpcGuH71bsTHi2AYJcUWWvGT2xBhWVD9ySytCSVqfWcc48kx8eSVrM4j8Uw=="}],"role":"model"},{"parts":[{"functionResponse":{"name":"calculate","response":{"response":"105"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"expression":"15 * 7"},"name":"calculate"},"thoughtSignature":"CtIBARFNMg9bLy4DsYEqPnNlA2GOfovJLcDUSfrqxZniZfiwLCyVkytZps9AKV3nMLR671S4l0WLCm7rJXxX2Sz0iB0te5OhnULyEkj0lvMH3qXaM7QXgaHYmnSe3+pwhcGHDZvcBAjKSrJcYzc01XVNnD8hC+4lt74upVT1cLI/8b4ttwwSENdUD7NGD6Gbtr8bx22+yQ+2T0PV4717BEvPCax42DK2WGR86ybVHZJ7SyCsf4oPAt8DrSLjJ6N7Y++gAKpzSeKQzyaMsE1P2z4Dmcir"}],"role":"model"},{"parts":[{"functionResponse":{"name":"calculate","response":{"response":"105"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 556 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:52 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=357 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:25 GMT +Server: nginx +Server-Timing: gfet4t7; dur=461 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -113,5 +121,5 @@ X-Xss-Protection: 0 "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "J7dxasHqO7KbvdIPvJjWgA4" + "responseId": "MBOIarTULKH2xN8Pg5OeuA0" } diff --git a/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr b/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr index 96639044a..5cedfa2ff 100644 --- a/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr @@ -1,27 +1,31 @@ httprr trace v1 -797 4037 +798 9950 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 477 +Content-Length: 478 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Tell me about safety features"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 3623 +{"contents":[{"parts":[{"text":"Tell me about safety features"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 9357 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:49 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=12110 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:58:21 GMT +Server: nginx +Server-Timing: gfet4t7; dur=17017 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -29,28 +33,28 @@ X-Xss-Protection: 0 "content": { "parts": [ { - "text": "Safety features are mechanisms, designs, or protocols implemented in products, systems, environments, or processes to prevent harm, mitigate risks, or protect against potential dangers. They are designed to ensure the well-being of users, minimize damage, and maintain operational integrity.\n\nSafety features can be found in almost every aspect of modern life. Here's a breakdown by common categories:\n\n---\n\n### 1. Automotive Safety Features\n\nThese are perhaps the most commonly recognized safety features, evolving rapidly from passive to active systems.\n\n* **Passive Safety Features (Protect during a crash):**\n * **Seatbelts:** Restrain occupants, preventing ejection and reducing impact force.\n * **Airbags:** (Front, side, curtain, knee) Deploy upon impact to cushion occupants.\n * **Crumple Zones:** Designed to absorb impact energy by deforming in a controlled manner.\n * **Reinforced Chassis/Safety Cages:** Maintain the integrity of the passenger compartment.\n * **Headrests:** Prevent whiplash injuries in rear-end collisions.\n * **Laminated Glass:** Prevents shattering into sharp pieces.\n * **Child Seat Anchors (LATCH/ISOFIX):** Securely attach child safety seats.\n\n* **Active Safety Features (Prevent a crash from happening):**\n * **Anti-lock Braking System (ABS):** Prevents wheels from locking up during hard braking, allowing the driver to steer.\n * **Electronic Stability Control (ESC) / Traction Control (TC):** Helps maintain control of the vehicle during skids or loss of traction.\n * **Automatic Emergency Braking (AEB):** Detects potential collisions and automatically applies brakes if the driver doesn't react.\n * **Lane Keeping Assist (LKA) / Lane Departure Warning (LDW):** Alerts the driver or gently steers the car back into its lane.\n * **Blind Spot Monitoring (BSM):** Warns the driver of vehicles in their blind spots.\n * **Adaptive Cruise Control (ACC):** Maintains a set speed and a safe distance from the vehicle ahead.\n * **Rearview Cameras / Parking Sensors:** Aid in parking and reversing, preventing collisions with obstacles or pedestrians.\n * **Tire Pressure Monitoring System (TPMS):** Warns of low tire pressure, which can affect handling and lead to blowouts.\n * **Adaptive Headlights:** Swivel to illuminate curves or automatically adjust brightness.\n * **Driver Drowsiness Detection:** Monitors driver behavior for signs of fatigue and provides alerts.\n * **Pedestrian Detection:** Uses sensors to identify pedestrians and can initiate braking.\n\n---\n\n### 2. Home & Consumer Product Safety Features\n\nDesigned to protect individuals within their homes and when using everyday items.\n\n* **Fire Safety:**\n * **Smoke Detectors:** Alert occupants to the presence of smoke/fire.\n * **Carbon Monoxide (CO) Detectors:** Warn of dangerous CO levels.\n * **Fire Extinguishers:** For putting out small fires.\n * **Flame-retardant Materials:** Used in" + "text": "Safety features are mechanisms, designs, or protocols implemented to prevent accidents, minimize harm, protect assets, and ensure the well-being of individuals in various environments. They can be broadly categorized by their function (preventative vs. protective) and the domain they apply to.\n\nHere's a breakdown of safety features across different areas:\n\n---\n\n### I. Automotive Safety Features\n\nAutomotive safety is often divided into **active** (preventative) and **passive** (protective) features.\n\n**A. Active Safety Features (Prevent Accidents):**\nThese systems help the driver avoid a crash or maintain control of the vehicle.\n\n1. **Anti-lock Braking System (ABS):** Prevents wheels from locking up during hard braking, allowing the driver to maintain steering control.\n2. **Electronic Stability Control (ESC) / Traction Control (TC):** Helps prevent skidding and loss of control by applying brakes to individual wheels and/or reducing engine power.\n3. **Tire Pressure Monitoring System (TPMS):** Warns the driver when tire pressure is significantly low, preventing blowouts and improving handling.\n4. **Adaptive Headlights:** Swivel in the direction of the steering wheel or adjust intensity based on conditions, improving visibility.\n5. **Advanced Driver-Assistance Systems (ADAS):**\n * **Automatic Emergency Braking (AEB):** Detects potential frontal collisions and can automatically apply brakes.\n * **Lane Keeping Assist (LKA) / Lane Departure Warning (LDW):** Warns or actively steers the vehicle back into its lane if it drifts.\n * **Blind Spot Monitoring (BSM):** Alerts the driver to vehicles in their blind spots.\n * **Adaptive Cruise Control (ACC):** Maintains a set speed and a safe following distance from the vehicle ahead.\n * **Rear Cross-Traffic Alert (RCTA):** Warns of approaching vehicles when backing out of a parking space.\n * **Driver Drowsiness Detection:** Monitors driver behavior for signs of fatigue and suggests breaks.\n * **Parking Assist Systems:** Use sensors and cameras to help with parking, sometimes even automating the process.\n * **Pedestrian/Cyclist Detection:** Uses sensors to identify vulnerable road users and warn the driver or initiate braking.\n\n**B. Passive Safety Features (Protect During a Crash):**\nThese systems aim to reduce injury once a crash is unavoidable.\n\n1. **Seatbelts:** Restrain occupants, preventing them from being thrown around the cabin or ejected.\n2. **Airbags:** Deploy rapidly to cushion occupants and prevent them from hitting hard surfaces inside the vehicle.\n3. **Crumple Zones:** Designed to absorb impact energy by deforming in a controlled manner, protecting the rigid passenger compartment.\n4. **Reinforced Safety Cell:** The rigid structure around the occupants designed to resist deformation.\n5. **Headrests:** Prevent whiplash injuries in rear-end collisions.\n6. **Child Seat Anchors (LATCH/ISOFIX):** Securely attach child safety seats to the vehicle chassis.\n7. **Safety Glass:** Laminated windshields and tempered side windows designed to break safely.\n8. **Automatic Post-Collision Braking:** Applies brakes after an initial impact to prevent secondary collisions.\n9. **eCall Systems:** Automatically dial emergency services after a serious crash.\n\n---\n\n### II. Home Safety Features\n\n1. **Fire Safety:**\n * **Smoke Detectors:** Alert occupants to the presence of smoke.\n * **Carbon Monoxide (CO) Detectors:** Warn of the presence of this odorless, colorless gas.\n * **Fire Extinguishers:** For putting out small fires.\n * **Sprinkler Systems:** Automatically douse fires.\n * **Emergency Escape Plans:** Pre-determined routes and meeting points in case of fire.\n\n2. **Security:**\n * **Locks (Deadbolts, Smart Locks):** Secure entry points.\n * **Alarm Systems:** Alert homeowners and/or monitoring services to intruders.\n * **Security Cameras:** Monitor activity inside and outside the home.\n * **Motion Sensors:** Detect movement and can trigger lights or alarms.\n * **Reinforced Doors and Windows:** Make forced entry more difficult.\n\n3. **Child Safety:**\n * **Outlet Covers:** Prevent electric shock.\n * **Cabinet and Drawer Locks:** Keep children away from dangerous items.\n * **Stair Gates:** Prevent falls down stairs.\n * **Corner Guards:** Soften sharp furniture corners.\n * **Child-Proof Packaging:** For medicines and hazardous chemicals.\n\n4. **Electrical Safety:**\n * **Ground Fault Circuit Interrupters (GFCIs):** Detect electrical imbalances and cut power to prevent shocks, especially in wet areas.\n * **Arc Fault Circuit Interrupters (AFCIs):** Detect dangerous electrical arcs that can cause fires.\n * **Surge Protectors:** Protect electronics from power surges.\n\n5. **General:**\n * **Non-Slip Mats/Rugs:** Prevent falls.\n * **Grab Bars:** In bathrooms, for stability.\n * **Safe Storage:** For chemicals, tools, and firearms.\n\n---\n\n### III. Workplace/Industrial Safety Features\n\n1. **Personal Protective Equipment (PPE):**\n * **Helmets/Hard Hats:** Protect against head injuries.\n * **Safety Glasses/Goggles:** Protect eyes from impact, chemicals, or radiation.\n * **Gloves:** Protect hands from cuts, chemicals, heat, or cold.\n * **Steel-Toe Boots:** Protect feet from falling objects or compression.\n * **Respirators/Masks:** Protect against inhaling hazardous dusts, fumes, or gases.\n * **Hearing Protection:** Reduce exposure to excessive noise.\n * **Safety Harnesses/Lanyards:** Prevent falls from heights.\n\n2. **Machine Guarding:** Physical barriers, interlocks, light curtains, and pressure mats to prevent contact with moving parts.\n3. **Emergency Stop Buttons:** Immediately shut down machinery in an emergency.\n4. **Lockout/Tagout Procedures:** Ensure dangerous machines are properly shut off and cannot be restarted while maintenance or repair work is being performed.\n5. **Eyewash Stations and Safety Showers:** For immediate decontamination after chemical exposure.\n6. **Ventilation Systems:** Remove hazardous fumes or dust from the air.\n7. **Fire Suppression Systems:** Industrial sprinklers, foam, or gas systems.\n8. **Hazard Communication (HazCom):** Labels, Safety Data Sheets (SDS), and training to inform workers about chemical hazards.\n9. **Ergonomic Design:** Workstations and tools designed to reduce strain and prevent musculoskeletal injuries.\n10. **Emergency Exits and Signage:** Clearly marked and accessible escape routes.\n\n---\n\n### IV. Digital/Online Safety Features\n\n1. **Authentication:**\n * **Strong Passwords:** Complex, unique passwords.\n * **Two-Factor Authentication (2FA) / Multi-Factor Authentication (MFA):** Requires multiple forms of verification (e.g., password + code from phone).\n * **Biometrics:** Fingerprint, facial recognition, iris scans.\n\n2. **Software Security:**\n * **Antivirus/Anti-malware Software:** Detects and removes malicious software.\n * **Firewalls:** Monitor and control incoming and outgoing network traffic.\n * **Operating System and Application Updates:** Patch vulnerabilities.\n * **Encryption:** Scrambles data to prevent unauthorized access (e.g., VPNs, encrypted messaging).\n\n3. **Privacy Controls:** Settings on social media, apps, and browsers to manage who can see your information.\n4. **Data Backup and Recovery:** Copies of data stored elsewhere to prevent loss.\n5. **Phishing and Scam Detection:** Tools and user education to identify fraudulent attempts to steal information.\n\n---\n\n### V. Product Safety Features (General)\n\n1. **Child-Resistant Packaging:** For medications, cleaning products, etc.\n2. **Warning Labels and Instructions:** Clear warnings about potential hazards and proper usage.\n3. **Safety Certifications (e.g., UL, CE, ASTM):** Indicate that a product meets specific safety standards.\n4. **Automatic Shut-off:** In appliances like irons, space heaters, or power tools.\n5. **Overload Protection:** In electrical devices to prevent overheating or short circuits.\n6. **Non-Toxic Materials:** Especially in toys and children's products.\n\n---\n\n### Conclusion\n\nSafety features are constantly evolving, driven by technological advancements, regulatory requirements, and a deeper understanding of human behavior and potential hazards. They aim to create multiple layers of protection, from preventing incidents in the first place to mitigating their impact when they do occur. Ultimately, effective safety involves a combination of well-designed features, proper maintenance, and informed user awareness." } ], "role": "model" }, - "finishReason": "MAX_TOKENS", + "finishReason": "STOP", "index": 0 } ], "usageMetadata": { "promptTokenCount": 6, - "candidatesTokenCount": 676, - "totalTokenCount": 2050, + "candidatesTokenCount": 1956, + "totalTokenCount": 3250, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 6 } ], - "thoughtsTokenCount": 1368, + "thoughtsTokenCount": 1288, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "GbdxavL_B4r0xs0Ph8nT6Q0" + "responseId": "HBOIasXeH_nhvdIP_PvciQ8" } diff --git a/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr b/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr index c4c0c413b..c2739e765 100644 --- a/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr @@ -1,27 +1,31 @@ httprr trace v1 -839 1024 +840 1203 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 519 +Content-Length: 520 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"List three colors as a JSON array"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"List three colors as a JSON array"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 613 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:21 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=610 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:54 GMT +Server: nginx +Server-Timing: gfet4t7; dur=752 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -41,16 +45,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 8, "candidatesTokenCount": 18, - "totalTokenCount": 51, + "totalTokenCount": 53, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 8 } ], - "thoughtsTokenCount": 25, + "thoughtsTokenCount": 27, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "CLdxaonsNeL-vdIP8eKPyQM" + "responseId": "EROIao7OFtm7xN8PsLv8qAQ" } diff --git a/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr b/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr index 2b3fd4166..5dbe26efd 100644 --- a/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr @@ -1,53 +1,48 @@ httprr trace v1 -815 8450 +816 6227 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 481 +Content-Length: 482 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Tell me a short story about a cat"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 8051 +{"contents":[{"parts":[{"text":"Tell me a short story about a cat"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 5672 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment +Content-Security-Policy: frame-ancestors 'none' Content-Type: text/event-stream -Date: Tue, 04 Aug 2026 09:55:13 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=6808 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:46 GMT +Server: nginx +Server-Timing: gfet4t7; dur=6416 +Strict-Transport-Security: max-age=31536000 +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block -data: {"candidates": [{"content": {"parts": [{"text": "Jasper was an expert in the art of doing nothing. Or, more accurately, the art of *appearing* to do nothing. From his favourite sun-drenched spot on the worn armchair, he surveyed his domain with"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 44,"totalTokenCount": 1310,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} - -data: {"candidates": [{"content": {"parts": [{"text": " half-closed, golden eyes. His marmalade fur, thick and soft, absorbed the warmth, and a low, rumbling purr vibrated through his sturdy chest.\n\nHis human, a kind woman named Eleanor, often remarked on his laziness"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 94,"totalTokenCount": 1360,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} - -data: {"candidates": [{"content": {"parts": [{"text": ". \"You just sleep all day, don't you, old boy?\" she'd chuckle, ruffling the fur behind his ears. Jasper would respond with a slow blink, a twitch of his tail, and an increase in pur"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 142,"totalTokenCount": 1408,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} - -data: {"candidates": [{"content": {"parts": [{"text": "r-volume, which Eleanor took as agreement.\n\nBut Jasper knew better. He was a sentinel. A guardian. While his body seemed a mere furry lump, his senses were finely tuned. He catalogued every shift in light, every cre"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 191,"totalTokenCount": 1457,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} - -data: {"candidates": [{"content": {"parts": [{"text": "ak of the floorboards, the distant chirping of sparrows, the subtle scent of rain on the wind. He knew when the postman was two streets away, when Eleanor's car turned into the driveway, and, most importantly, when"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 241,"totalTokenCount": 1507,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": "Jasper, a sleek shadow of a cat with eyes like polished emeralds, stretched"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 16,"totalTokenCount": 1151,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " a rogue dust bunny dared to venture from beneath the sofa.\n\nOne particularly sleepy afternoon, a fly, bold and buzzing, dared to invade his sanctuary. It zipped past his nose, a tiny, irritating whir. Jasper's ears"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 289,"totalTokenCount": 1555,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": " luxuriously on the worn armchair. A sliver of morning sun, sharp and golden, had just found its way through the living room window, landing precisely on his favorite napping spot. He unfurled himself from a tight, obsidian"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 65,"totalTokenCount": 1200,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " swiveled, almost imperceptibly. His tail, previously draped lifelessly, gave a single, deliberate twitch.\n\nThe fly, oblivious to the danger, landed on the lampshade, preening. Jasper's eyes, now"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 337,"totalTokenCount": 1603,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": " curl, extending each paw with meticulous care, claws sheathed and unsheathed in a silent, satisfying ritual.\n\nHis first order of business was observation. He padded silently to the window, a graceful blur of black against the sun-"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 113,"totalTokenCount": 1248,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " fully open, narrowed to slits of emerald. His body tensed, not a muscle out of place. He slid from the armchair, a liquid flow of fur and muscle, silent as a shadow. Each paw placement was precise, deliberate. He"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 386,"totalTokenCount": 1652,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": "drenched sill. Outside, a robin, plump and oblivious, was pecking at an errant worm in the dew-kissed grass. Jasper’s tail twitched, a silent drumbeat of predatory focus. Every muscle in his lit"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 162,"totalTokenCount": 1297,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " was no longer the lazy sun-worshipper; he was a hunter.\n\nHe stalked, low to the ground, a coiled spring. The fly, sensing a shift in the air, buzzed nervously. Jasper paused, perfectly"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 435,"totalTokenCount": 1701,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": "he body tensed, ready to spring, even though a pane of glass separated him from his quarry. The thrill of the hunt, ancient and instinctual, hummed through him.\n\nThe robin, perhaps sensing the intensity of his gaze, suddenly"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 212,"totalTokenCount": 1347,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " still, then launched himself. It wasn't a clumsy leap, but an elegant, explosive arc. A blur of orange fur, a flash of velvet paw, and a soft *thwack*.\n\nThe fly was no more.\n\nJasper"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 485,"totalTokenCount": 1751,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": " took flight, a flash of brown and red disappearing into the maple tree. Jasper let out a soft, almost imperceptible sigh. The moment was over.\n\nHe turned, a flicker of disappointment quickly replaced by a new, more pressing concern"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 260,"totalTokenCount": 1395,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " landed with silent grace, sniffed his paw with a look of profound satisfaction, then gave a tiny, almost imperceptible shake of his head, as if to dislodge the last vestiges of the hunt. He stretched, a long, luxurious"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 534,"totalTokenCount": 1800,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": ": breakfast. With a low, rumbling meow, he trotted into the kitchen, weaving expertly between the legs of his human, Sarah, who was just pouring her own coffee.\n\nSarah smiled, accustomed to the silent demand. \"Good"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 310,"totalTokenCount": 1445,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " arch of his back, and then, with a yawn that revealed a surprisingly pink tongue, he padded back to his sunbeam.\n\nHe settled back into his armchair, closed his eyes, and resumed his purr. When Eleanor came home later, she"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 585,"totalTokenCount": 1851,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": " morning, Jasper,\" she murmured, already reaching for his food bowl.\n\nAs the satisfying crunch of kibble filled the quiet kitchen, Jasper ate with a focused intensity, occasionally glancing up at Sarah with a slow, deliberate blink – a cat"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 358,"totalTokenCount": 1493,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " found him exactly where she'd left him, a picture of blissful idleness. She stroked his head. \"Still sleeping, are we, Jasper?\"\n\nJasper merely blinked, a silent guardian of the realm, his secret victory nestled deep"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 633,"totalTokenCount": 1899,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": "'s kiss. Fed and content, he found a new sunbeam, this one stretching across the rug, and curled into a tight ball once more. The world, for Jasper, was a perfectly balanced equation of sun, food, and the quiet"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 408,"totalTokenCount": 1543,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} -data: {"candidates": [{"content": {"parts": [{"text": " within his contented purr. He had done his duty. And now, he could truly rest."}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 653,"totalTokenCount": 1919,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1257,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "-7ZxapbrCZa7vdIPhrCMoQ4"} +data: {"candidates": [{"content": {"parts": [{"text": ", watchful rhythm of a cat's day."}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 418,"totalTokenCount": 1553,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 1126,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "BBOIaryrJqOHxs0P9fbJ6Ag"} diff --git a/llms/googleai/testdata/TestGoogleAIWithTools.httprr b/llms/googleai/testdata/TestGoogleAIWithTools.httprr index ddd15f3ad..fd3c93cdd 100644 --- a/llms/googleai/testdata/TestGoogleAIWithTools.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithTools.httprr @@ -1,27 +1,31 @@ httprr trace v1 -1052 1598 +1053 1733 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 732 +Content-Length: 733 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK -Content-Length: 1186 +{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +Content-Length: 1142 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:17 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=643 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:50 GMT +Server: nginx +Server-Timing: gfet4t7; dur=772 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -35,7 +39,7 @@ X-Xss-Protection: 0 "location": "New York" } }, - "thoughtSignature": "CpkCARFNMg9/hG7OqVs1G3hR3sZyO4TKCZROXYIIc4PLMYUpYfk67GTVzbcvtWmNpLvDyijmC2IrIcjaZZ8h/T01+prznI2rSy/us2vmCxEa3D2eEq47Cof/Dj2b5KBFq5FK27fW/xnpltFF/zO2lref455zib6RxynO4gsqhatjFWJzcutCr/DB42xJ0gs9ISxmVzHaH7OhOfEhmpWc2wWM4lO7hsEtUKti9/L/ZXgUzvcL6aIt+eiQDDgT5rVv5XdQC98+T7srZchN13GSzlQkYVnLzZlgigT0b1rLWaKy7H3Gusvu1dMIsuQpZw07QRvm0lGpUJdrTXQ09pOeN93VjnAjNYdyo7HtNTfNpAF4s9Y9QWC3NR3EoNc=" + "thoughtSignature": "CvgBARFNMg/IJaDHKIpOE/OhqNyTGiuV/N10EP8onKuRG3uc+7wpjuqB7LOxZtG/jpGrPEdduo1LGq8UaY/OKjqPiVOVGWH8KgIf7GIrj6ZIPZ5SXEAflPSMf9G5Jtxgd6fJ+k2DodwX0cQbJf4TjzL756EybNEn3UwnpNOlyRE+qqWYIdzDD6TdoPuYJi4C7/MM/fCPUkuXn1rcyrl5aoONvrcL1FA2CnRHo4Ul34oGLNh/TmyeGNPg2TnENEL7xLgrWj+OLEl9x/FK99iuymTLGkmLu1CD0eXIVH2oYN9iOSrqbGXrB+sy34ObtDJGZhjohi+ueQOPpxs=" } ], "role": "model" @@ -48,16 +52,16 @@ X-Xss-Protection: 0 "usageMetadata": { "promptTokenCount": 51, "candidatesTokenCount": 15, - "totalTokenCount": 125, + "totalTokenCount": 116, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 51 } ], - "thoughtsTokenCount": 59, + "thoughtsTokenCount": 50, "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "BbdxarXfF_3-vdIPhd69oQ8" + "responseId": "DROIapuDE7_8vdIP2f6XyQY" } diff --git a/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr b/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr index 1f5896d83..64e2bc8c0 100644 --- a/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr @@ -1,27 +1,31 @@ httprr trace v1 -1052 1554 +1053 1733 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 732 +Content-Length: 733 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 1142 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' Content-Type: application/json; charset=UTF-8 -Date: Tue, 04 Aug 2026 09:55:19 GMT -Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=661 -Vary: Origin -Vary: X-Origin -Vary: Referer +Date: Fri, 21 Aug 2026 08:57:52 GMT +Server: nginx +Server-Timing: gfet4t7; dur=724 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN X-Frame-Options: SAMEORIGIN X-Gemini-Service-Tier: standard X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block { "candidates": [ @@ -35,7 +39,7 @@ X-Xss-Protection: 0 "location": "New York" } }, - "thoughtSignature": "CvgBARFNMg8QXne8K2caDHL7VdzicwJCwjl6yOhyr2nsPnMtA04ARiTmzr1IwnjxsaxgESQ88Es6bCIlc3btQWO+b326smefWnR8oMFJYhKUAbcMtbTgoiJjQJkHyz9zJT1mljWy9SOslI2430a0zF44xw5M0Mjyzu6BrftKQt9vohf2sGfwffWE+5YKK+ic2s8T6Ui9hyttHXE8M3NX5rvjz60k0A87CODiCf6ng5c0n5Zxomdjz0OKJB92EqLAjUMsc7EeU51zs3ImN0yCa6CBD6wjB10xyp1h28ggX91xOHjlYXy+m1cEjxDhyRVMCqCJSCs+ZHpfkE4=" + "thoughtSignature": "CvgBARFNMg/YdhZWr3fQs7qH6+Ifdjp/UTHvJgTl/7FyFUsnsUu+ubA2kLZ8NRnFgYYYKI2rt75d+jfPO00F4wyXVSrX+OhZ/0/Up9c/B9jGZuuo+ZpncM1ngGIGOhIHhPl4MNlmyHMxpQPCvRcikBmSvxCZysFJU0i06vaSPXm0YpiU2J6OgckaFclwfobAZtsG1ckEb7kaQbg9rc9J5RZJ7pe4eF8o0/E7fmwEQvAHJLSrwPFE6Z9cEQkpenzRYzHUxueWIYbobAlwtVBbT99KzFMe2Cw6nEGagb1iQTcm0GKxC/LBxNXBB4zwTWhCyyoB9ds4KQ9jiAs=" } ], "role": "model" @@ -59,5 +63,5 @@ X-Xss-Protection: 0 "serviceTier": "standard" }, "modelVersion": "gemini-2.5-flash", - "responseId": "B7dxarKOCc3rvdIPlKidoQk" + "responseId": "DxOIaoSvGazTxN8PwYnCgAg" } diff --git a/llms/googleai/vertex/new_test.go b/llms/googleai/vertex/new_test.go index d0f2b6e36..7f065c10b 100644 --- a/llms/googleai/vertex/new_test.go +++ b/llms/googleai/vertex/new_test.go @@ -4,6 +4,7 @@ import ( "net/http" "testing" + "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/googleai" "google.golang.org/api/option" @@ -28,8 +29,8 @@ func TestDefaultOptions(t *testing.T) { if opts.DefaultCandidateCount != 1 { t.Errorf("expected default candidate count 1, got %d", opts.DefaultCandidateCount) } - if opts.DefaultMaxTokens != 2048 { - t.Errorf("expected default max tokens 2048, got %d", opts.DefaultMaxTokens) + if opts.DefaultMaxTokens != llms.DefaultMaxTokens { + t.Errorf("expected default max tokens %d, got %d", llms.DefaultMaxTokens, opts.DefaultMaxTokens) } if opts.DefaultTemperature != 0.5 { t.Errorf("expected default temperature 0.5, got %f", opts.DefaultTemperature) From 56437897a34689674cf6913df4afc2ead197ba1c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:33:57 +0700 Subject: [PATCH 046/618] feat(llms): report an answer cut off at the token limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A caller could not tell a complete answer from one the model stopped writing because it ran out of output budget: GenerateContent returns err == nil either way, and the only signal is ContentChoice.StopReason, which carries whatever the vendor called it — "length" (OpenAI, Mistral, Ollama, three Bedrock families), "LENGTH" (Bedrock Amazon), "max_tokens" (Anthropic, Bedrock Converse) or "MAX_TOKENS" (Google, Bedrock Cohere). Asking "is this answer whole?" meant knowing every spelling. Add ContentChoice.Truncated, derived from the vendor string, and WithFailOnTruncation for callers who would rather have an error. StopReason keeps the vendor's own spelling, so code already comparing it is unaffected, and the option is off by default. Adapters are wired in following commits. Co-Authored-By: Claude Opus 5 --- llms/errors.go | 13 +++++++ llms/generatecontent.go | 4 +++ llms/options.go | 10 ++++++ llms/stopreason.go | 34 ++++++++++++++++++ llms/stopreason_test.go | 76 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+) create mode 100644 llms/stopreason.go create mode 100644 llms/stopreason_test.go diff --git a/llms/errors.go b/llms/errors.go index c9fc2beed..4f19f6349 100644 --- a/llms/errors.go +++ b/llms/errors.go @@ -45,6 +45,9 @@ const ( // ErrCodeNotImplemented indicates a feature is not implemented. ErrCodeNotImplemented ErrorCode = "not_implemented" + + // ErrCodeTruncated indicates generation stopped at the output token limit. + ErrCodeTruncated ErrorCode = "truncated" ) // Error represents a standardized error from an LLM provider. @@ -185,6 +188,13 @@ func IsNotImplementedError(err error) bool { return errors.As(err, &e) && e.Code == ErrCodeNotImplemented } +// IsTruncatedError returns true if the error reports an answer that stopped at +// the output token limit. +func IsTruncatedError(err error) bool { + var e *Error + return errors.As(err, &e) && e.Code == ErrCodeTruncated +} + // Common error variables for easy comparison. var ( // ErrAuthentication is returned when authentication fails. @@ -216,4 +226,7 @@ var ( // ErrNotImplemented is returned when a feature is not implemented. ErrNotImplemented = &Error{Code: ErrCodeNotImplemented} + + // ErrTruncated is returned when an answer stopped at the output token limit. + ErrTruncated = &Error{Code: ErrCodeTruncated} ) diff --git a/llms/generatecontent.go b/llms/generatecontent.go index b6698538a..7773e84d1 100644 --- a/llms/generatecontent.go +++ b/llms/generatecontent.go @@ -161,6 +161,10 @@ type ContentChoice struct { // StopReason is the reason the model stopped generating output. StopReason string + // Truncated reports whether generation stopped at the output token limit, + // derived from StopReason, which keeps the vendor's own spelling. + Truncated bool + // GenerationInfo is arbitrary information the model adds to the response. GenerationInfo map[string]any diff --git a/llms/options.go b/llms/options.go index bd1961d15..4670a658d 100644 --- a/llms/options.go +++ b/llms/options.go @@ -249,6 +249,8 @@ type CallOptions struct { // JSONMode is a flag to enable JSON mode. JSONMode bool `json:"json"` + FailOnTruncation bool `json:"fail_on_truncation,omitempty"` + // StructuredOutput requests provider-native, schema-constrained output. When // set (via WithStructuredOutput) JSONMode is also true and the provider is // asked for strict output matching Schema. nil keeps the legacy schema-less @@ -770,6 +772,14 @@ func WithTools(tools []Tool) CallOption { } } +// WithFailOnTruncation makes an answer that stopped at the output token limit +// return an error rather than a successful response. Off by default. +func WithFailOnTruncation() CallOption { + return func(o *CallOptions) { + o.FailOnTruncation = true + } +} + // WithJSONMode will add an option to set the response format to JSON. // This is useful for models that return structured data. func WithJSONMode() CallOption { diff --git a/llms/stopreason.go b/llms/stopreason.go new file mode 100644 index 000000000..0b03c8665 --- /dev/null +++ b/llms/stopreason.go @@ -0,0 +1,34 @@ +package llms + +import ( + "fmt" + "strings" +) + +var truncationStopReasons = map[string]bool{ + "length": true, + "max_tokens": true, +} + +// IsTruncated reports whether a vendor stop reason means generation stopped at +// the output token limit rather than finishing. Matching is case-insensitive. +func IsTruncated(stopReason string) bool { + return truncationStopReasons[strings.ToLower(strings.TrimSpace(stopReason))] +} + +// CheckTruncation reports a truncated answer as an error, but only for a caller +// that opted in with [WithFailOnTruncation]; otherwise a truncated answer stays +// a successful response carrying [ContentChoice.Truncated]. +func CheckTruncation(resp *ContentResponse, opts CallOptions) error { + if !opts.FailOnTruncation || resp == nil { + return nil + } + for i, choice := range resp.Choices { + if choice == nil || !choice.Truncated { + continue + } + return NewError(ErrCodeTruncated, "", fmt.Sprintf( + "choice %d stopped at the output token limit (stop reason %q)", i, choice.StopReason)) + } + return nil +} diff --git a/llms/stopreason_test.go b/llms/stopreason_test.go new file mode 100644 index 000000000..23bc04a19 --- /dev/null +++ b/llms/stopreason_test.go @@ -0,0 +1,76 @@ +package llms + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestIsTruncatedCoversEveryVendorSpelling(t *testing.T) { + t.Parallel() + + truncated := map[string]string{ + "openai": "length", + "mistral": "length", + "ollama": "length", + "anthropic": "max_tokens", + "bedrock converse": "max_tokens", + "bedrock nova": "max_tokens", + "bedrock amazon": "LENGTH", + "bedrock ai21": "length", + "bedrock cohere": "MAX_TOKENS", + "bedrock meta": "length", + "bedrock deepseek": "length", + "googleai": "MAX_TOKENS", + "vertex": "MAX_TOKENS", + } + for vendor, reason := range truncated { + assert.True(t, IsTruncated(reason), "%s spells truncation %q", vendor, reason) + } + + finished := []string{ + "stop", "end_turn", "tool_use", "tool_calls", "function_call", "stop_sequence", + "COMPLETE", "FINISH", "endoftext", "content_filtered", "CONTENT_FILTERED", + "ERROR", "guardrail_intervened", "", "max_tokens_exceeded", "no_length", + } + for _, reason := range finished { + assert.False(t, IsTruncated(reason), "%q does not mean truncation", reason) + } +} + +func TestCheckTruncationStaysSilentUnlessRequested(t *testing.T) { + t.Parallel() + + cut := &ContentResponse{Choices: []*ContentChoice{ + {Content: "half an ans", StopReason: "max_tokens", Truncated: true}, + }} + whole := &ContentResponse{Choices: []*ContentChoice{ + {Content: "a whole answer", StopReason: "end_turn"}, + }} + + require.NoError(t, CheckTruncation(cut, CallOptions{})) + require.NoError(t, CheckTruncation(whole, CallOptions{FailOnTruncation: true})) + require.NoError(t, CheckTruncation(nil, CallOptions{FailOnTruncation: true})) + + err := CheckTruncation(cut, CallOptions{FailOnTruncation: true}) + require.Error(t, err) + assert.True(t, IsTruncatedError(err)) + assert.True(t, errors.Is(err, ErrTruncated)) + assert.Contains(t, err.Error(), "max_tokens") +} + +func TestCheckTruncationReportsALaterChoice(t *testing.T) { + t.Parallel() + + resp := &ContentResponse{Choices: []*ContentChoice{ + nil, + {Content: "fine", StopReason: "stop"}, + {Content: "cut", StopReason: "length", Truncated: true}, + }} + + err := CheckTruncation(resp, CallOptions{FailOnTruncation: true}) + require.Error(t, err) + assert.Contains(t, err.Error(), "choice 2") +} From b8c0bdc05e0fb9273b14a4d81cfe995431041798 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:36:39 +0700 Subject: [PATCH 047/618] feat(openai,anthropic): fill the truncation flag on the choice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both adapters derive ContentChoice.Truncated from the stop reason they already carry — "length" for OpenAI, "max_tokens" for Anthropic — and honor WithFailOnTruncation. The response is returned alongside the error, matching how a structured-output failure already behaves, so the caller keeps the partial answer and the usage figures. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 4 ++ llms/anthropic/truncation_test.go | 83 +++++++++++++++++++++++++++++++ llms/openai/openaillm.go | 8 ++- llms/openai/truncation_test.go | 81 ++++++++++++++++++++++++++++++ 4 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/truncation_test.go create mode 100644 llms/openai/truncation_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 96c80aeaa..fb8927eb3 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -309,6 +309,9 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag if err != nil { return nil, err } + if err := llms.CheckTruncation(response, *opts); err != nil { + return response, err + } // When structured output was requested, validate the final text against the // original schema. The response is returned alongside the typed error so the // caller keeps usage and diagnostics. @@ -408,6 +411,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* Reasoning: contentReasoning, // Always in choice for Anthropic ToolCalls: toolCalls, StopReason: result.StopReason, + Truncated: llms.IsTruncated(result.StopReason), GenerationInfo: map[string]any{ // Standardized field names for cross-provider compatibility "PromptTokens": result.Usage.InputTokens + result.Usage.CacheCreationInputTokens + result.Usage.CacheReadInputTokens, diff --git a/llms/anthropic/truncation_test.go b/llms/anthropic/truncation_test.go new file mode 100644 index 000000000..b1851237c --- /dev/null +++ b/llms/anthropic/truncation_test.go @@ -0,0 +1,83 @@ +package anthropic + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func truncationLLM(t *testing.T, stopReason string) *LLM { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = fmt.Fprintf(w, `{"id":"x","type":"message","role":"assistant","model":"claude-3-5-sonnet-latest", + "content":[{"type":"text","text":"half an ans"}],"stop_reason":%q, + "usage":{"input_tokens":1,"output_tokens":1}}`, stopReason) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("unit-test-token"), WithModel("claude-3-5-sonnet-latest")) + if err != nil { + t.Fatalf("New: %v", err) + } + return llm +} + +func TestTruncationIsDerivedWithoutRewritingStopReason(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + stopReason string + wantTruncated bool + }{ + {"out of budget", "max_tokens", true}, + {"finished on its own", "end_turn", false}, + {"hit a stop sequence", "stop_sequence", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + llm := truncationLLM(t, tc.stopReason) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.stopReason { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, tc.stopReason) + } + }) + } +} + +func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { + t.Parallel() + + llm := truncationLLM(t, "max_tokens") + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + resp, err := llm.GenerateContent(context.Background(), msgs, llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("want an error once the caller opted in") + } + if !llms.IsTruncatedError(err) { + t.Fatalf("want a truncation error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want the partial answer alongside the error, got %+v", resp) + } + + if _, err := llm.GenerateContent(context.Background(), msgs); err != nil { + t.Fatalf("without the option the same response must stay a success: %v", err) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 6a2c63e79..632758260 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -116,6 +116,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten response := o.processResponse(result) + if err := llms.CheckTruncation(response, opts); err != nil { + return response, err + } + // When structured output was requested, validate each normal-final choice // against the original schema. The response is still returned alongside the // typed error so callers keep usage and diagnostics. @@ -396,10 +400,12 @@ func (o *LLM) processResponse(result *openaiclient.ChatCompletionResponse) *llms choices := make([]*llms.ContentChoice, len(result.Choices)) for i, c := range result.Choices { + stopReason := fmt.Sprint(c.FinishReason) choices[i] = &llms.ContentChoice{ Content: c.Message.Content, Reasoning: o.processReasoning(c.Message.ReasoningContent), - StopReason: fmt.Sprint(c.FinishReason), + StopReason: stopReason, + Truncated: llms.IsTruncated(stopReason), GenerationInfo: o.processUsage(&result.Usage), } diff --git a/llms/openai/truncation_test.go b/llms/openai/truncation_test.go new file mode 100644 index 000000000..b53992e7a --- /dev/null +++ b/llms/openai/truncation_test.go @@ -0,0 +1,81 @@ +package openai + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func truncationServer(t *testing.T, finishReason string) *httptest.Server { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = fmt.Fprintf(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o", + "choices":[{"index":0,"message":{"role":"assistant","content":"half an ans"}, + "finish_reason":%q}], + "usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`, finishReason) + })) + t.Cleanup(srv.Close) + return srv +} + +func TestTruncationIsDerivedWithoutRewritingStopReason(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + finishReason string + wantTruncated bool + }{ + {"out of budget", "length", true}, + {"finished on its own", "stop", false}, + {"asked for a tool", "tool_calls", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + srv := truncationServer(t, tc.finishReason) + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.finishReason { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, tc.finishReason) + } + }) + } +} + +func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { + t.Parallel() + + srv := truncationServer(t, "length") + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + resp, err := llm.GenerateContent(context.Background(), msgs, llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("want an error once the caller opted in") + } + if !llms.IsTruncatedError(err) { + t.Fatalf("want a truncation error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want the partial answer alongside the error, got %+v", resp) + } + + if _, err := llm.GenerateContent(context.Background(), msgs); err != nil { + t.Fatalf("without the option the same response must stay a success: %v", err) + } +} From 45c39d609ab6a5e5de2901b8b2ee09bd47abf523 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:42:37 +0700 Subject: [PATCH 048/618] feat(googleai,vertex): fill the truncation flag on the choice googleai derives it from the wire string the SDK exposes ("MAX_TOKENS"), on both the streaming and non-streaming paths. Vertex compares the typed constant instead: its StopReason carries the SDK's Go enum name, "FinishReasonMaxTokens", which is not a wire value and is left untouched for callers reading it. The googleai fixtures are real Gemini responses recorded at a 24- and a 200-token budget, so the flag is proven against an answer the model actually cut off rather than a hand-written body. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 6 + .../TestGoogleAITruncationIsReported.httprr | 166 ++++++++++++++++++ ...AITruncationIsReportedWhenStreaming.httprr | 30 ++++ llms/googleai/truncation_test.go | 52 ++++++ llms/googleai/vertex/vertex.go | 5 + llms/googleai/vertex/vertex_unit_test.go | 32 ++++ 6 files changed, 291 insertions(+) create mode 100644 llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr create mode 100644 llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr create mode 100644 llms/googleai/truncation_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 3530cdf49..3fe8431c8 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -196,6 +196,10 @@ func (g *GoogleAI) GenerateContent( return response, err } + if err := llms.CheckTruncation(response, opts); err != nil { + return response, err + } + // When structured output was requested, validate each normal-final candidate // against the original schema; the response is returned with the typed error. if err := validateGoogleStructuredOutput(&opts, response); err != nil { @@ -493,6 +497,7 @@ StreamEnd: Reasoning: choiceReasoning, ToolCalls: accumulatedToolCalls, StopReason: stopReason, + Truncated: llms.IsTruncated(stopReason), GenerationInfo: metadata, }}, } @@ -602,6 +607,7 @@ func convertResponse(resp *genai.GenerateContentResponse) (*llms.ContentResponse Content: content.String(), Reasoning: choiceReasoning, StopReason: string(candidate.FinishReason), + Truncated: llms.IsTruncated(string(candidate.FinishReason)), GenerationInfo: metadata, ToolCalls: toolCalls, }) diff --git a/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr b/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr new file mode 100644 index 000000000..13fe18a4b --- /dev/null +++ b/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr @@ -0,0 +1,166 @@ +httprr trace v1 +806 1058 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 486 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 468 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json; charset=UTF-8 +Date: Fri, 21 Aug 2026 09:38:06 GMT +Server: nginx +Server-Timing: gfet4t7; dur=541 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block + +{ + "candidates": [ + { + "content": { + "role": "model" + }, + "finishReason": "MAX_TOKENS", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 9, + "totalTokenCount": 29, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 9 + } + ], + "thoughtsTokenCount": 20, + "serviceTier": "standard" + }, + "modelVersion": "gemini-2.5-flash", + "responseId": "fRyIav2wKe2cnsEPqoa7gAM" +} +806 1058 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 486 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 468 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json; charset=UTF-8 +Date: Fri, 21 Aug 2026 09:38:07 GMT +Server: nginx +Server-Timing: gfet4t7; dur=506 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block + +{ + "candidates": [ + { + "content": { + "role": "model" + }, + "finishReason": "MAX_TOKENS", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 9, + "totalTokenCount": 29, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 9 + } + ], + "thoughtsTokenCount": 20, + "serviceTier": "standard" + }, + "modelVersion": "gemini-2.5-flash", + "responseId": "fxyIav2AG62L7M8P-PTAuQo" +} +808 9401 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 488 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":4096,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 8808 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json; charset=UTF-8 +Date: Fri, 21 Aug 2026 09:38:25 GMT +Server: nginx +Server-Timing: gfet4t7; dur=15917 +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +Vary: Origin, X-Origin, Referer +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "The water cycle, also known as the **hydrologic cycle**, is the continuous movement of water on, above, and below the surface of the Earth. It's a complex, dynamic system driven primarily by solar energy and gravity, constantly transforming water between its liquid, solid, and gaseous states. There is no true \"beginning\" or \"end\" to the water cycle, but we can describe its key processes:\n\nHere's a full, detailed breakdown:\n\n---\n\n### **I. Introduction to the Water Cycle**\n\nThe Earth's water is always in motion, cycling through the atmosphere, oceans, land, and even living organisms. This continuous circulation ensures the availability of water for all life and plays a crucial role in regulating Earth's climate and shaping its landscapes. The total amount of water on Earth remains relatively constant, but its distribution and form change constantly.\n\n### **II. Key Processes of the Water Cycle**\n\nThe water cycle can be broken down into several interconnected processes:\n\n1. **Evaporation:**\n * **Definition:** The process by which liquid water is converted into water vapor (a gas) and rises into the atmosphere.\n * **Mechanism:** Solar energy heats the surface of water bodies (oceans, lakes, rivers, puddles), providing the energy for water molecules to break free from their liquid state and become airborne.\n * **Sources:** The vast majority of evaporation (about 80%) occurs from the oceans due to their immense surface area. Significant evaporation also occurs from lakes, rivers, soil moisture, and even ice/snow surfaces (though this is technically sublimation).\n * **Factors Influencing:** Temperature (higher temperature = more evaporation), humidity (lower humidity = more evaporation), wind (removes saturated air, allowing more evaporation), and surface area.\n\n2. **Transpiration:**\n * **Definition:** The process by which water vapor is released into the atmosphere from plants, primarily through small pores on their leaves called stomata.\n * **Mechanism:** Plants absorb water from the soil through their roots. This water travels up the plant stem to the leaves, where a small percentage is used for photosynthesis, and the vast majority evaporates from the leaf surface into the atmosphere.\n * **Contribution:** Transpiration is a significant contributor to atmospheric moisture, especially in heavily vegetated areas like forests and rainforests. It's often combined with evaporation and referred to as **evapotranspiration**.\n\n3. **Sublimation:**\n * **Definition:** The process by which solid water (ice or snow) changes directly into water vapor without first melting into liquid water.\n * **Mechanism:** Occurs in cold, dry, and often windy conditions, typically in polar regions, high mountains, or during dry winter days. The solar energy is sufficient to convert the ice directly into gas.\n * **Contribution:** While less significant globally than evaporation, it's an important part of the cycle in specific cold environments.\n\n4. **Condensation:**\n * **Definition:** The process by which water vapor in the atmosphere cools and changes back into liquid water droplets or ice crystals.\n * **Mechanism:** As warm, moist air rises, it expands and cools (adiabatic cooling). When the air cools to its **dew point** (the temperature at which it becomes saturated with water vapor), the water vapor molecules lose energy and begin to clump together.\n * **Condensation Nuclei:** This process usually requires tiny airborne particles called **condensation nuclei** (e.g., dust, pollen, salt, smoke) for the water vapor to condense upon.\n * **Forms:** Condensation forms **clouds** (masses of tiny water droplets or ice crystals suspended in the atmosphere), **fog** (clouds at ground level), **dew** (water droplets on surfaces cooled by radiation), and **frost** (ice crystals formed directly from vapor on cold surfaces).\n\n5. **Precipitation:**\n * **Definition:** Any form of water that falls from the atmosphere to the Earth's surface.\n * **Mechanism:** Within clouds, water droplets or ice crystals grow in size (through collision and coalescence, or the Bergeron process where ice crystals grow at the expense of supercooled water droplets). When they become too heavy to be supported by air currents, they fall to the Earth.\n * **Forms:**\n * **Rain:** Liquid water droplets.\n * **Snow:** Ice crystals that form and remain frozen.\n * **Sleet:** Partially melted snow that refreezes into ice pellets before reaching the ground.\n * **Hail:** Lumps of ice formed in strong thunderstorms, growing as they are tossed up and down by updrafts and downdrafts.\n * **Freezing Rain:** Rain that freezes upon contact with surfaces that are at or below freezing temperature.\n\n6. **Collection, Storage, and Movement:**\n * Once precipitation reaches the Earth's surface, it can follow several paths:\n * **Interception:** Some precipitation is caught by vegetation (leaves, branches) before reaching the ground. It may then evaporate directly back into the atmosphere or drip to the ground.\n * **Surface Runoff:** Water that flows over the land surface, unable to infiltrate the ground. It collects in streams, rivers, and eventually flows into lakes and oceans. This process can cause erosion and transport sediments and nutrients.\n * **Infiltration/Percolation:** Water that soaks into the ground.\n * **Infiltration:** The initial entry of water into the soil surface.\n * **Percolation:** The downward movement of water through soil and rock layers.\n * **Soil Moisture:** Water stored in the upper layers of the soil, available for plant uptake.\n * **Groundwater:** Water that has percolated deeper into the Earth and is stored in underground layers of permeable rock or sediment called **aquifers**. Groundwater moves slowly, often flowing towards lower elevations, and can discharge into rivers, lakes, or oceans, or emerge as **springs**.\n * **Lakes and Rivers:** Natural depressions or channels where surface water collects and flows.\n * **Oceans:** The largest reservoir of water on Earth, where most of the cycle's water eventually returns.\n * **Ice Caps and Glaciers:** Massive bodies of frozen freshwater, primarily in polar regions and high mountains. Water can be stored here for thousands of years.\n * **Atmospheric Water:** Water vapor, clouds, and ice crystals suspended in the atmosphere.\n * **Biological Water:** Water contained within living organisms (plants, animals, humans).\n\n### **III. Driving Forces of the Water Cycle**\n\n1. **Solar Energy:**\n * The primary energy source for the entire water cycle.\n * Heats the Earth's surface, driving evaporation, transpiration, and sublimation.\n * Causes differential heating of the atmosphere, leading to air currents and wind, which transport water vapor.\n\n2. **Gravity:**\n * Pulls precipitation down from clouds to the Earth's surface.\n * Drives surface runoff down slopes into rivers and lakes.\n * Causes groundwater to flow through aquifers.\n * Leads to the movement of glaciers.\n\n### **IV. Importance of the Water Cycle**\n\n* **Sustains Life:** Provides fresh water for drinking, agriculture, and all biological processes.\n* **Regulates Climate:** Redistributes heat around the globe (e.g., latent heat released during condensation warms the atmosphere). Water vapor is a potent greenhouse gas, influencing Earth's temperature.\n* **Shapes Landscapes:** Erosion by rivers, glaciers, and rainfall carves valleys, canyons, and transports sediments.\n* **Supports Ecosystems:** Maintains wetlands, forests, and aquatic environments essential for biodiversity.\n* **Generates Energy:** Hydroelectric power relies on the movement of water.\n\n---\n\nIn essence, the water cycle is a continuous, never-ending journey of water, moving from the Earth's surface to the atmosphere and back again, constantly changing form and location, and making life on Earth possible." + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 9, + "candidatesTokenCount": 1738, + "totalTokenCount": 3209, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 9 + } + ], + "thoughtsTokenCount": 1462, + "serviceTier": "standard" + }, + "modelVersion": "gemini-2.5-flash", + "responseId": "gRyIasTjC8zYkdUPmJnUwQo" +} diff --git a/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr b/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr new file mode 100644 index 000000000..4b6274381 --- /dev/null +++ b/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr @@ -0,0 +1,30 @@ +httprr trace v1 +821 985 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 487 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 431 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Disposition: attachment +Content-Security-Policy: frame-ancestors 'none' +Content-Type: text/event-stream +Date: Fri, 21 Aug 2026 09:40:37 GMT +Server: nginx +Server-Timing: gfet4t7; dur=1484 +Strict-Transport-Security: max-age=31536000 +Vary: Origin, X-Origin, Referer +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Frame-Options: SAMEORIGIN +X-Xss-Protection: 0 +X-Xss-Protection: 1; mode=block + +data: {"candidates": [{"content": {"parts": [{"text": "The water cycle, also known as"}],"role": "model"},"finishReason": "MAX_TOKENS","index": 0}],"usageMetadata": {"promptTokenCount": 9,"candidatesTokenCount": 7,"totalTokenCount": 205,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 9}],"thoughtsTokenCount": 189,"serviceTier": "standard"},"modelVersion": "gemini-2.5-flash","responseId": "FB2IauKaKPLnnsEP2viZiQw"} + diff --git a/llms/googleai/truncation_test.go b/llms/googleai/truncation_test.go new file mode 100644 index 000000000..eb90cb315 --- /dev/null +++ b/llms/googleai/truncation_test.go @@ -0,0 +1,52 @@ +package googleai + +import ( + "context" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGoogleAITruncationIsReported(t *testing.T) { + t.Parallel() + + llm := newHTTPRRClient(t, WithDefaultModel("gemini-2.5-flash")) + msgs := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "Describe the water cycle in full detail."), + } + + cut, err := llm.GenerateContent(t.Context(), msgs, llms.WithMaxTokens(24)) + require.NoError(t, err) + assert.True(t, cut.Choices[0].Truncated) + assert.Equal(t, "MAX_TOKENS", cut.Choices[0].StopReason) + + partial, err := llm.GenerateContent(t.Context(), msgs, llms.WithMaxTokens(24), llms.WithFailOnTruncation()) + require.Error(t, err) + assert.True(t, llms.IsTruncatedError(err)) + require.NotNil(t, partial) + + whole, err := llm.GenerateContent(t.Context(), msgs, llms.WithMaxTokens(4096)) + require.NoError(t, err) + assert.False(t, whole.Choices[0].Truncated) + assert.Equal(t, "STOP", whole.Choices[0].StopReason) +} + +func TestGoogleAITruncationIsReportedWhenStreaming(t *testing.T) { + t.Parallel() + + llm := newHTTPRRClient(t, WithDefaultModel("gemini-2.5-flash")) + msgs := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "Describe the water cycle in full detail."), + } + sink := func(context.Context, streaming.Chunk) error { return nil } + + cut, err := llm.GenerateContent(t.Context(), msgs, + llms.WithMaxTokens(200), llms.WithStreamingFunc(sink)) + require.NoError(t, err) + assert.True(t, cut.Choices[0].Truncated) + assert.Equal(t, "MAX_TOKENS", cut.Choices[0].StopReason) +} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 007b75945..2ae7ff411 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -143,6 +143,10 @@ func (g *Vertex) GenerateContent( return response, err } + if err := llms.CheckTruncation(response, opts); err != nil { + return response, err + } + // When structured output was requested, validate each normal-final candidate // against the original schema; the response is returned with the typed error. if err := validateVertexStructuredOutput(&opts, response); err != nil { @@ -200,6 +204,7 @@ func convertCandidates(candidates []*genai.Candidate, usage *genai.UsageMetadata &llms.ContentChoice{ Content: buf.String(), StopReason: candidate.FinishReason.String(), + Truncated: candidate.FinishReason == genai.FinishReasonMaxTokens, GenerationInfo: metadata, ToolCalls: toolCalls, }) diff --git a/llms/googleai/vertex/vertex_unit_test.go b/llms/googleai/vertex/vertex_unit_test.go index 7798e4289..2ecf4272d 100644 --- a/llms/googleai/vertex/vertex_unit_test.go +++ b/llms/googleai/vertex/vertex_unit_test.go @@ -736,3 +736,35 @@ func TestVertexRejectsExplicitReasoningOff(t *testing.T) { t.Fatalf("err = %v, want ErrReasoningOffUnsupported", err) } } + +func TestConvertCandidatesReportsTruncation(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + finishReason genai.FinishReason + wantStop string + wantTruncated bool + }{ + {"out of budget", genai.FinishReasonMaxTokens, "FinishReasonMaxTokens", true}, + {"finished on its own", genai.FinishReasonStop, "FinishReasonStop", false}, + {"blocked by safety", genai.FinishReasonSafety, "FinishReasonSafety", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + resp, err := convertCandidates([]*genai.Candidate{{ + FinishReason: tc.finishReason, + Content: &genai.Content{Parts: []genai.Part{genai.Text("half an ans")}}, + }}, nil) + if err != nil { + t.Fatalf("convertCandidates: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.wantStop { + t.Fatalf("StopReason = %q, want %q", got, tc.wantStop) + } + }) + } +} From 0e88dfd18d4b25b21b4d119b69a9492a2cc859ba Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:44:50 +0700 Subject: [PATCH 049/618] feat(ollama,mistral): fill the truncation flag on the choice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both spell it "length" — Ollama in done_reason, Mistral in finish_reason — and both now derive ContentChoice.Truncated from it and honor WithFailOnTruncation. Mistral reports the opt-in error through its own callbacks handler, matching how that adapter already reports a failed call. Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 6 +++ llms/mistral/truncation_test.go | 80 +++++++++++++++++++++++++++++++++ llms/ollama/ollamallm.go | 5 +++ llms/ollama/truncation_test.go | 80 +++++++++++++++++++++++++++++++++ 4 files changed, 171 insertions(+) create mode 100644 llms/mistral/truncation_test.go create mode 100644 llms/ollama/truncation_test.go diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 4ca571a5f..96380a7ec 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -164,6 +164,7 @@ func generateNonStreamingContent(ctx context.Context, m *Model, callOptions *llm langchainContentResponse.Choices = append(langchainContentResponse.Choices, &llms.ContentChoice{ Content: choice.Message.Content, StopReason: string(choice.FinishReason), + Truncated: llms.IsTruncated(string(choice.FinishReason)), GenerationInfo: map[string]any{ "created": res.Created, "model": res.Model, @@ -185,6 +186,11 @@ func generateNonStreamingContent(ctx context.Context, m *Model, callOptions *llm } } } + if err := llms.CheckTruncation(langchainContentResponse, *callOptions); err != nil { + m.CallbacksHandler.HandleLLMError(ctx, err) + return langchainContentResponse, err + } + m.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, langchainContentResponse) return langchainContentResponse, nil diff --git a/llms/mistral/truncation_test.go b/llms/mistral/truncation_test.go new file mode 100644 index 000000000..1db5dd0f7 --- /dev/null +++ b/llms/mistral/truncation_test.go @@ -0,0 +1,80 @@ +package mistral + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func truncationModel(t *testing.T, finishReason string) *Model { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = fmt.Fprintf(w, `{"id":"x","object":"chat.completion","created":1,"model":"mistral-small-latest","choices":[{"index":0,"message":{"role":"assistant","content":"half an ans"},"finish_reason":%q}],"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`, finishReason) + })) + t.Cleanup(srv.Close) + + model, err := New(WithAPIKey("unit-test-token"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + if err != nil { + t.Fatalf("New: %v", err) + } + return model +} + +func TestTruncationIsDerivedWithoutRewritingStopReason(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + finishReason string + wantTruncated bool + }{ + {"out of budget", "length", true}, + {"finished on its own", "stop", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + model := truncationModel(t, tc.finishReason) + + resp, err := model.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.finishReason { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, tc.finishReason) + } + }) + } +} + +func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { + t.Parallel() + + model := truncationModel(t, "length") + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + resp, err := model.GenerateContent(context.Background(), msgs, llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("want an error once the caller opted in") + } + if !llms.IsTruncatedError(err) { + t.Fatalf("want a truncation error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want the partial answer alongside the error, got %+v", resp) + } + + if _, err := model.GenerateContent(context.Background(), msgs); err != nil { + t.Fatalf("without the option the same response must stay a success: %v", err) + } +} diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index d225539a1..447116236 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -169,6 +169,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten response = o.createContentResponse(resp) + if err = llms.CheckTruncation(response, opts); err != nil { + return response, err + } + // When a schema was requested, validate the final response against it; the // response is returned alongside the typed error so usage is preserved. if err = o.validateStructuredOutput(opts, response); err != nil { @@ -427,6 +431,7 @@ func (o *LLM) createContentResponse(resp api.ChatResponse) *llms.ContentResponse Content: content, Reasoning: contentReasoning, StopReason: resp.DoneReason, + Truncated: llms.IsTruncated(resp.DoneReason), GenerationInfo: map[string]any{ "CompletionTokens": resp.EvalCount, "PromptTokens": resp.PromptEvalCount, diff --git a/llms/ollama/truncation_test.go b/llms/ollama/truncation_test.go new file mode 100644 index 000000000..38f8ee342 --- /dev/null +++ b/llms/ollama/truncation_test.go @@ -0,0 +1,80 @@ +package ollama + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func truncationLLM(t *testing.T, doneReason string) *LLM { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + _, _ = fmt.Fprintf(w, `{"model":"llama3","created_at":"2026-08-21T09:00:00Z","message":{"role":"assistant","content":"half an ans"},"done":true,"done_reason":%q,"eval_count":1,"prompt_eval_count":1}`+"\n", doneReason) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("llama3")) + if err != nil { + t.Fatalf("New: %v", err) + } + return llm +} + +func TestTruncationIsDerivedWithoutRewritingStopReason(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + doneReason string + wantTruncated bool + }{ + {"out of budget", "length", true}, + {"finished on its own", "stop", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + llm := truncationLLM(t, tc.doneReason) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.doneReason { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, tc.doneReason) + } + }) + } +} + +func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { + t.Parallel() + + llm := truncationLLM(t, "length") + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + resp, err := llm.GenerateContent(context.Background(), msgs, llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("want an error once the caller opted in") + } + if !llms.IsTruncatedError(err) { + t.Fatalf("want a truncation error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want the partial answer alongside the error, got %+v", resp) + } + + if _, err := llm.GenerateContent(context.Background(), msgs); err != nil { + t.Fatalf("without the option the same response must stay a success: %v", err) + } +} From a71e60e83332b7c6b0d0448212a2cde9a4855ab0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:48:19 +0700 Subject: [PATCH 050/618] feat(bedrock): fill the truncation flag on every family MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bedrock is the widest spread of spellings in the library: "max_tokens" on Converse, Nova and the Anthropic body, "length" on AI21, Meta and DeepSeek, "MAX_TOKENS" on Cohere and "LENGTH" on Amazon. All eighteen places that fill a stop reason — both doors, each family's completion and its streaming override — now derive Truncated from the same string, and the opt-in check sits once in GenerateContent so it covers both doors. Tests cover the Converse door through the mocked runtime client and the legacy door end to end against a fake endpoint, for the Anthropic and Amazon families; a table test pins each family's own reason constants to what the shared predicate recognises, so a family whose spelling changes fails the build. Co-Authored-By: Claude Opus 5 --- llms/bedrock/bedrockllm.go | 14 +- .../bedrockclient/bedrockclient_converse.go | 2 + .../internal/bedrockclient/provider_ai21.go | 3 + .../internal/bedrockclient/provider_amazon.go | 2 + .../bedrockclient/provider_anthropic.go | 2 + .../internal/bedrockclient/provider_cohere.go | 3 + .../bedrockclient/provider_deepseek.go | 2 + .../internal/bedrockclient/provider_meta.go | 2 + .../internal/bedrockclient/provider_nova.go | 2 + .../internal/bedrockclient/truncation_test.go | 88 ++++++++++ llms/bedrock/truncation_test.go | 155 ++++++++++++++++++ 11 files changed, 272 insertions(+), 3 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/truncation_test.go create mode 100644 llms/bedrock/truncation_test.go diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 2578fac88..6f54035bf 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -110,11 +110,19 @@ func (l *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten // Use Converse API if enabled if l.useConverseAPI { - return l.generateContentWithConverseAPI(ctx, messages, opts) + resp, err = l.generateContentWithConverseAPI(ctx, messages, opts) + } else { + resp, err = l.generateContentWithLegacyAPI(ctx, messages, opts) + } + if err != nil { + return resp, err + } + + if err = llms.CheckTruncation(resp, opts); err != nil { + return resp, err } - // Use legacy implementation - return l.generateContentWithLegacyAPI(ctx, messages, opts) + return resp, nil } // generateContentWithConverseAPI uses the unified Converse API diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 47628d382..1b8c9f439 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -806,6 +806,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response GenerationInfo: make(map[string]any), Reasoning: c.processReasoning(reasoningContent.String(), sig), StopReason: stopReason, + Truncated: llms.IsTruncated(stopReason), } result := &llms.ContentResponse{ @@ -892,6 +893,7 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver // distinguishes end_turn from tool_use, max_tokens, guardrail_intervened, // content_filtered and malformed-output states. choice.StopReason = string(response.StopReason) + choice.Truncated = llms.IsTruncated(string(response.StopReason)) // Add usage information if response.Usage != nil { diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index 24805ef01..4dc4eb76a 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -216,6 +216,7 @@ func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, mo choices[i] = &llms.ContentChoice{ Content: completion.Data.Text, StopReason: completion.FinishReason.Reason, + Truncated: llms.IsTruncated(completion.FinishReason.Reason), GenerationInfo: map[string]any{ "id": output.ID, "input_tokens": int32(len(output.Prompt.Tokens)), @@ -293,6 +294,7 @@ func createAi21JambaCompletion(ctx context.Context, client *bedrockruntime.Clien choices[i] = &llms.ContentChoice{ Content: choice.Message.Content, StopReason: choice.FinishReason, + Truncated: llms.IsTruncated(choice.FinishReason), GenerationInfo: map[string]any{ "id": output.ID, "input_tokens": output.Usage.PromptTokens, @@ -340,6 +342,7 @@ func parseAi21StreamingResponse(ctx context.Context, client *bedrockruntime.Clie // Set completion reason if resp.FinishReason != "" { contentchoices[0].StopReason = resp.FinishReason + contentchoices[0].Truncated = llms.IsTruncated(resp.FinishReason) } // Set token counts if available diff --git a/llms/bedrock/internal/bedrockclient/provider_amazon.go b/llms/bedrock/internal/bedrockclient/provider_amazon.go index 251cb85c1..c445c137b 100644 --- a/llms/bedrock/internal/bedrockclient/provider_amazon.go +++ b/llms/bedrock/internal/bedrockclient/provider_amazon.go @@ -130,6 +130,7 @@ func createAmazonCompletion(ctx context.Context, contentChoices[i] = &llms.ContentChoice{ Content: result.OutputText, StopReason: result.CompletionReason, + Truncated: llms.IsTruncated(result.CompletionReason), GenerationInfo: map[string]any{ "input_tokens": output.InputTextTokenCount, "output_tokens": result.TokenCount, @@ -182,6 +183,7 @@ func parseAmazonStreamingResponse(ctx context.Context, client *bedrockruntime.Cl // Set completion reason if resp.CompletionReason != "" { contentchoices[0].StopReason = resp.CompletionReason + contentchoices[0].Truncated = llms.IsTruncated(resp.CompletionReason) } // Set token counts diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 02e9b0fca..38d62f513 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -327,6 +327,7 @@ func createAnthropicCompletion(ctx context.Context, Reasoning: processReasoning(reasoningContent, signature), ToolCalls: toolCalls, StopReason: output.StopReason, + Truncated: llms.IsTruncated(output.StopReason), GenerationInfo: map[string]any{ "input_tokens": output.Usage.InputTokens, "output_tokens": output.Usage.OutputTokens, @@ -503,6 +504,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim } case "message_delta": contentchoices[0].StopReason = resp.Delta.StopReason + contentchoices[0].Truncated = llms.IsTruncated(resp.Delta.StopReason) inputTokens := resp.Message.Usage.InputTokens outputTokens := resp.Message.Usage.OutputTokens if inputTokens == 0 { diff --git a/llms/bedrock/internal/bedrockclient/provider_cohere.go b/llms/bedrock/internal/bedrockclient/provider_cohere.go index 60ff85ae3..d4eb70b94 100644 --- a/llms/bedrock/internal/bedrockclient/provider_cohere.go +++ b/llms/bedrock/internal/bedrockclient/provider_cohere.go @@ -181,6 +181,7 @@ func createCohereCompletion(ctx context.Context, choices[i] = &llms.ContentChoice{ Content: gen.Text, StopReason: gen.FinishReason, + Truncated: llms.IsTruncated(gen.FinishReason), GenerationInfo: map[string]any{ "generation_id": gen.ID, "index": i, @@ -276,6 +277,7 @@ func createCohereCommandRCompletion(ctx context.Context, { Content: output.Text, StopReason: output.FinishReason, + Truncated: llms.IsTruncated(output.FinishReason), GenerationInfo: map[string]any{ "id": output.ID, }, @@ -323,6 +325,7 @@ func parseCohereStreamingResponse(ctx context.Context, client *bedrockruntime.Cl // Set completion reason if resp.FinishReason != "" { contentchoices[0].StopReason = resp.FinishReason + contentchoices[0].Truncated = llms.IsTruncated(resp.FinishReason) } // Set generation info diff --git a/llms/bedrock/internal/bedrockclient/provider_deepseek.go b/llms/bedrock/internal/bedrockclient/provider_deepseek.go index ca784bf62..2440ac132 100644 --- a/llms/bedrock/internal/bedrockclient/provider_deepseek.go +++ b/llms/bedrock/internal/bedrockclient/provider_deepseek.go @@ -92,6 +92,7 @@ func createDeepSeekCompletion(ctx context.Context, choices = append(choices, &llms.ContentChoice{ Content: choice.Text, StopReason: choice.StopReason, + Truncated: llms.IsTruncated(choice.StopReason), }) } @@ -167,6 +168,7 @@ func parseDeepSeekStreamingResponse(ctx context.Context, client *bedrockruntime. if len(resp.Choices) > 0 && resp.Choices[0].StopReason != "" { contentchoices[0].StopReason = resp.Choices[0].StopReason + contentchoices[0].Truncated = llms.IsTruncated(resp.Choices[0].StopReason) } } } diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index 30fb664cc..e04f02ba0 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -117,6 +117,7 @@ func createMetaCompletion(ctx context.Context, { Content: output.Generation, StopReason: output.StopReason, + Truncated: llms.IsTruncated(output.StopReason), GenerationInfo: map[string]any{ "input_tokens": output.PromptTokenCount, "output_tokens": output.GenerationTokenCount, @@ -166,6 +167,7 @@ func parseMetaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie // Set completion reason if resp.StopReason != "" { contentchoices[0].StopReason = resp.StopReason + contentchoices[0].Truncated = llms.IsTruncated(resp.StopReason) } // Set token counts diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index e18c2f677..59174a437 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -223,6 +223,7 @@ func createNovaCompletion(ctx context.Context, Contentchoices[i] = &llms.ContentChoice{ Content: c.Text, StopReason: output.StopReason, + Truncated: llms.IsTruncated(output.StopReason), GenerationInfo: map[string]any{ "input_tokens": output.Usage.InputTokens, "output_tokens": output.Usage.OutputTokens, @@ -382,6 +383,7 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie // Check for message delta (contains stop reason and output tokens) if resp.MessageDelta.StopReason != "" { contentchoices[0].StopReason = resp.MessageDelta.StopReason + contentchoices[0].Truncated = llms.IsTruncated(resp.MessageDelta.StopReason) } if resp.MessageDelta.Usage.OutputTokens > 0 { contentchoices[0].GenerationInfo["output_tokens"] = resp.MessageDelta.Usage.OutputTokens diff --git a/llms/bedrock/internal/bedrockclient/truncation_test.go b/llms/bedrock/internal/bedrockclient/truncation_test.go new file mode 100644 index 000000000..3707fbf72 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/truncation_test.go @@ -0,0 +1,88 @@ +package bedrockclient + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestEveryFamilySpellsTruncationInAWayWeRecognise(t *testing.T) { + t.Parallel() + + for _, reason := range []string{ + AmazonCompletionReasonMaxTokens, + AnthropicCompletionReasonMaxTokens, + Ai21CompletionReasonLength, + CohereCompletionReasonMaxTokens, + MetaCompletionReasonLength, + NovaCompletionReasonMaxTokens, + string(types.StopReasonMaxTokens), + } { + assert.True(t, llms.IsTruncated(reason), "%q means the output limit was reached", reason) + } + + for _, reason := range []string{ + AmazonCompletionReasonFinish, + AmazonCompletionReasonContentFiltered, + AnthropicCompletionReasonEndTurn, + AnthropicCompletionReasonStopSequence, + Ai21CompletionReasonStop, + Ai21CompletionReasonEndOfText, + CohereCompletionReasonComplete, + CohereCompletionReasonError, + CohereCompletionReasonErrorToxic, + MetaCompletionReasonStop, + NovaCompletionReasonEndTurn, + NovaCompletionReasonStopSequence, + NovaCompletionReasonContentFiltered, + string(types.StopReasonEndTurn), + string(types.StopReasonToolUse), + string(types.StopReasonStopSequence), + string(types.StopReasonGuardrailIntervened), + } { + assert.False(t, llms.IsTruncated(reason), "%q does not mean truncation", reason) + } +} + +func TestConverseReportsTruncation(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + stopReason types.StopReason + wantTruncated bool + }{ + {"out of budget", types.StopReasonMaxTokens, true}, + {"finished on its own", types.StopReasonEndTurn, false}, + {"asked for a tool", types.StopReasonToolUse, false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + mockClient := &MockBedrockRuntimeClient{} + mockClient.On("Converse", mock.Anything, mock.Anything, mock.Anything).Return( + &bedrockruntime.ConverseOutput{ + StopReason: tc.stopReason, + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "half an ans"}}, + }, + }, + }, nil) + + resp, err := NewConverseClient(mockClient).CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: "anthropic.claude-3-sonnet-20240229-v1:0", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + }) + require.NoError(t, err) + assert.Equal(t, tc.wantTruncated, resp.Choices[0].Truncated) + assert.Equal(t, string(tc.stopReason), resp.Choices[0].StopReason) + }) + } +} diff --git a/llms/bedrock/truncation_test.go b/llms/bedrock/truncation_test.go new file mode 100644 index 000000000..8404d7c27 --- /dev/null +++ b/llms/bedrock/truncation_test.go @@ -0,0 +1,155 @@ +package bedrock_test + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func truncationLLM(t *testing.T, stopReason string) *bedrock.LLM { + t.Helper() + return truncationLLMWithBody(t, + fmt.Sprintf(`{"output":{"message":{"role":"assistant","content":[{"text":"half an ans"}]}},"stopReason":%q,"usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`, stopReason), + bedrock.WithModel("anthropic.claude-3-sonnet-20240229-v1:0"), bedrock.WithConverseAPI()) +} + +func truncationLLMWithBody(t *testing.T, body string, opts ...bedrock.Option) *bedrock.LLM { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + client := bedrockruntime.NewFromConfig(aws.Config{ + Region: "us-east-1", + Credentials: credentials.NewStaticCredentialsProvider("unit", "test", ""), + }, func(o *bedrockruntime.Options) { + o.BaseEndpoint = aws.String(srv.URL) + }) + + llm, err := bedrock.New(append([]bedrock.Option{bedrock.WithClient(client)}, opts...)...) + if err != nil { + t.Fatalf("New: %v", err) + } + return llm +} + +func TestTruncationIsDerivedWithoutRewritingStopReason(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + stopReason string + wantTruncated bool + }{ + {"out of budget", "max_tokens", true}, + {"finished on its own", "end_turn", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + llm := truncationLLM(t, tc.stopReason) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.stopReason { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, tc.stopReason) + } + }) + } +} + +func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { + t.Parallel() + + llm := truncationLLM(t, "max_tokens") + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + resp, err := llm.GenerateContent(context.Background(), msgs, llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("want an error once the caller opted in") + } + if !llms.IsTruncatedError(err) { + t.Fatalf("want a truncation error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want the partial answer alongside the error, got %+v", resp) + } + + if _, err := llm.GenerateContent(context.Background(), msgs); err != nil { + t.Fatalf("without the option the same response must stay a success: %v", err) + } +} + +func TestTruncationOnTheLegacyDoor(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + body string + wantStop string + wantTruncated bool + }{ + { + name: "anthropic out of budget", + model: "anthropic.claude-3-sonnet-20240229-v1:0", + body: `{"type":"message","role":"assistant","content":[{"type":"text","text":"half an ans"}],` + + `"stop_reason":"max_tokens","usage":{"input_tokens":1,"output_tokens":1}}`, + wantStop: "max_tokens", wantTruncated: true, + }, + { + name: "anthropic finished on its own", + model: "anthropic.claude-3-sonnet-20240229-v1:0", + body: `{"type":"message","role":"assistant","content":[{"type":"text","text":"a whole answer"}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`, + wantStop: "end_turn", wantTruncated: false, + }, + { + name: "amazon spells it LENGTH", + model: "amazon.titan-text-express-v1", + body: `{"inputTextTokenCount":1,"results":[{"tokenCount":1,"outputText":"half an ans","completionReason":"LENGTH"}]}`, + wantStop: "LENGTH", wantTruncated: true, + }, + { + name: "amazon spells finishing FINISH", + model: "amazon.titan-text-express-v1", + body: `{"inputTextTokenCount":1,"results":[{"tokenCount":1,"outputText":"a whole answer","completionReason":"FINISH"}]}`, + wantStop: "FINISH", wantTruncated: false, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + llm := truncationLLMWithBody(t, tc.body, bedrock.WithModel(tc.model)) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].Truncated; got != tc.wantTruncated { + t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) + } + if got := resp.Choices[0].StopReason; got != tc.wantStop { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, tc.wantStop) + } + }) + } +} From e74661c461842e21ce27ba0e067a86ecaab30e2b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:48:58 +0700 Subject: [PATCH 051/618] feat(mistral): fill the truncation flag on the streaming path too The streamed choice sets its stop reason through an assignment rather than a struct literal, so it was missed when the non-streaming path was wired. Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 96380a7ec..248301624 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -221,6 +221,7 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C chunkStr += choice.Delta.Content langchainContentResponse.Choices[0].Content += choice.Delta.Content langchainContentResponse.Choices[0].StopReason = string(choice.FinishReason) + langchainContentResponse.Choices[0].Truncated = llms.IsTruncated(string(choice.FinishReason)) if len(choice.Delta.ToolCalls) > 0 { langchainContentResponse.Choices[0].FuncCall = (*llms.FunctionCall)(&choice.Delta.ToolCalls[0].Function) for _, tool := range choice.Delta.ToolCalls { @@ -243,6 +244,10 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C } } + if err := llms.CheckTruncation(langchainContentResponse, *callOptions); err != nil { + return langchainContentResponse, err + } + return langchainContentResponse, nil } From 8ed1f1ccaf37ce7080fc7b900677f3d0d3731c7e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 16:58:45 +0700 Subject: [PATCH 052/618] fix(llms): keep known reasoning efforts behind any transport label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReasoningSupportFor classified an OpenAI reasoning model only when the caller passed reasoning.ProviderOpenAI, although the effort table itself strips a proxy prefix and is provider-independent. Measured before the fix: gpt-5-pro reports Known=true, Efforts=[high] on ProviderOpenAI and Known=false, Efforts=[] on ProviderUnknown — so a UI driving a gateway it labelled anything else lost the model's known ladder and its disable rule. Key the branch on the model being in the table instead, and take CannotDisable from the same table rather than from the provider-aware wire resolver; on ProviderOpenAI both yield exactly what they yielded before. Models the table does not know — Gemini, Grok, GLM — keep the provider-gated branch below and are unchanged. Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 16 +++++++----- llms/reasoning_support_test.go | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 464995b9f..2a7093ac1 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -117,17 +117,21 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } - if p == reasoning.ProviderOpenAI && reasoning.IsReasoningModel(model) { - var efforts []ReasoningEffort - if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { - efforts = toReasoningEfforts(caps.Efforts) + if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { + return ReasoningSupport{ + Supported: true, + Known: true, + CannotDisable: !caps.CanDisable, + Efforts: toReasoningEfforts(caps.Efforts), + // DefaultOn is per-model on the GPT-5.x line (some default off) — leave unknown. } + } + + if p == reasoning.ProviderOpenAI && reasoning.IsReasoningModel(model) { return ReasoningSupport{ Supported: true, Known: true, CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, - Efforts: efforts, - // DefaultOn is per-model on the GPT-5.x line (some default off) — leave unknown. } } diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index af76128cc..0326bf8dd 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -249,3 +249,51 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } }) } + +func TestOpenAIHintSurvivesTheTransportLabel(t *testing.T) { + t.Parallel() + + labels := []reasoning.Provider{ + reasoning.ProviderUnknown, + reasoning.ProviderGoogleAI, + reasoning.ProviderBedrock, + reasoning.ProviderAnthropic, + } + + for _, model := range []string{"gpt-5-pro", "gpt-5", "gpt-5-mini", "o3", "o4-mini", "gpt-5.1", "gpt-5.2"} { + want := ReasoningSupportFor(model, reasoning.ProviderOpenAI) + if !want.Known || len(want.Efforts) == 0 { + t.Fatalf("%s: the OpenAI label must know this model, got %+v", model, want) + } + for _, p := range labels { + got := ReasoningSupportFor(model, p) + if !got.Known { + t.Errorf("%s behind label %v: Known = false, want the same hint as the OpenAI label", model, p) + } + if !slices.Equal(got.Efforts, want.Efforts) { + t.Errorf("%s behind label %v: Efforts = %v, want %v", model, p, got.Efforts, want.Efforts) + } + if got.CannotDisable != want.CannotDisable { + t.Errorf("%s behind label %v: CannotDisable = %v, want %v", model, p, got.CannotDisable, want.CannotDisable) + } + } + } +} + +func TestNonOpenAIModelsKeepTheirOwnBranch(t *testing.T) { + t.Parallel() + + gemini := ReasoningSupportFor("gemini-2.5-flash", reasoning.ProviderGoogleAI) + if gemini.DefaultOn == nil { + t.Fatal("gemini on its own provider must still report DefaultOn from the Google branch") + } + if len(gemini.Efforts) != 0 { + t.Fatalf("gemini has no effort ladder, got %v", gemini.Efforts) + } + + for _, model := range []string{"grok-4", "glm-5", "gemini-2.5-flash"} { + if got := ReasoningSupportFor(model, reasoning.ProviderUnknown); got.Known { + t.Errorf("%s behind an unknown label must stay unclassified, got %+v", model, got) + } + } +} From df757c95c74da44bde05c8adc147bc84899769c6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 17:02:20 +0700 Subject: [PATCH 053/618] docs(reasoning): state what we send, not what the vendor returns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three comments asserted vendor error behaviour — that a generation "rejects budget_tokens with a 400", that a model "rejects" sampling params, that an unknown model gets "taught via a 400". Such a claim is invisible to every test and goes stale silently when a vendor changes it. Restate each as the rule this library follows, which the capability tests already pin. Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 8 ++++---- llms/reasoning_support.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 789d55cae..388f69e10 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -19,8 +19,8 @@ const ( // behavior so an unclassified model never regresses. ClaudeReasoningUnknown ClaudeReasoningKind = iota // ClaudeReasoningAdaptiveOnly is the newest generation (Opus 4.7/4.8/5, - // Sonnet 5, Fable 5, Mythos 5): it accepts thinking.type=adaptive and - // rejects budget_tokens with a 400. + // Sonnet 5, Fable 5, Mythos 5): it is sent thinking.type=adaptive and never + // budget_tokens. ClaudeReasoningAdaptiveOnly // ClaudeReasoningAdaptiveAndBudget accepts both adaptive and budget thinking // (Opus 4.6, Sonnet 4.6, Mythos Preview). @@ -227,8 +227,8 @@ func ClaudePredatesAdaptive(model string) bool { return containsAny(strings.ToLower(model), preAdaptiveClaude) } -// rejectsSamplingClaude models reject a non-default temperature, top_p or -// top_k on every request, whether or not thinking is requested. +// rejectsSamplingClaude models are sent no temperature, top_p or top_k on any +// request, whether or not thinking is requested. var rejectsSamplingClaude = []string{ "claude-fable-5", "claude-mythos-5", "claude-mythos-preview", "claude-opus-5", "claude-opus-4-8", "claude-opus-4-7", "claude-sonnet-5", diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 2a7093ac1..cd89b3d44 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -145,7 +145,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } // Unrecognized: optimistic. Known=false tells the UI to show all controls and - // let the provider teach via a 400. + // leaves the provider as the arbiter. return ReasoningSupport{Supported: reasoning.LikelyReasoningModel(model), Known: false} } From 38bb2b4cecff60674268cb4dec11fadaaab13e3c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 17:03:10 +0700 Subject: [PATCH 054/618] style(reasoning): drop the negated conjunction staticcheck flags Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 388f69e10..93669d45a 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -133,7 +133,7 @@ func ClaudeSupportsEffortWithBudget(model string, p Provider) bool { if !containsAny(m, budgetEffortClaude) { return false } - return !(p == ProviderBedrock && containsAny(m, bedrockRejectsBudgetEffortClaude)) + return p != ProviderBedrock || !containsAny(m, bedrockRejectsBudgetEffortClaude) } // noPrefillClaude models reject a conversation whose last message is an From a6d650875e1825241e16e0fa1d20e708f207235f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 17:25:07 +0700 Subject: [PATCH 055/618] test(bedrock): cover the truncation flag on every legacy family MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legacy door can be driven end to end against a fake endpoint with static credentials, so each family's own response body exercises the real parse path: AI21 (both the classic and the Jamba shape), Amazon, Anthropic, Cohere (classic and Command R), Meta, Nova and DeepSeek. Each case is mutation-checked — drop the family's Truncated line and its subtest reddens. Still not covered by a direct test: the seven streaming overrides, which need AWS event-stream framing rather than a plain HTTP body. Co-Authored-By: Claude Opus 5 --- llms/bedrock/truncation_test.go | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/llms/bedrock/truncation_test.go b/llms/bedrock/truncation_test.go index 8404d7c27..8cf1d420c 100644 --- a/llms/bedrock/truncation_test.go +++ b/llms/bedrock/truncation_test.go @@ -134,6 +134,66 @@ func TestTruncationOnTheLegacyDoor(t *testing.T) { body: `{"inputTextTokenCount":1,"results":[{"tokenCount":1,"outputText":"a whole answer","completionReason":"FINISH"}]}`, wantStop: "FINISH", wantTruncated: false, }, + { + name: "ai21 out of budget", + model: "ai21.j2-ultra-v1", + body: `{"prompt":{"tokens":[]},"completions":[{"data":{"text":"half an ans","tokens":[]},"finishReason":{"reason":"length"}}]}`, + wantStop: "length", wantTruncated: true, + }, + { + name: "ai21 finished on its own", + model: "ai21.j2-ultra-v1", + body: `{"prompt":{"tokens":[]},"completions":[{"data":{"text":"a whole answer","tokens":[]},"finishReason":{"reason":"endoftext"}}]}`, + wantStop: "endoftext", wantTruncated: false, + }, + { + name: "ai21 jamba out of budget", + model: "ai21.jamba-1-5-large-v1:0", + body: `{"id":"x","choices":[{"index":0,"message":{"role":"assistant","content":"half an ans"},"finish_reason":"length"}],"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`, + wantStop: "length", wantTruncated: true, + }, + { + name: "cohere spells it MAX_TOKENS", + model: "cohere.command-text-v14", + body: `{"id":"x","generations":[{"id":"g","index":0,"finish_reason":"MAX_TOKENS","text":"half an ans"}]}`, + wantStop: "MAX_TOKENS", wantTruncated: true, + }, + { + name: "cohere command-r out of budget", + model: "cohere.command-r-v1:0", + body: `{"id":"x","text":"half an ans","finish_reason":"MAX_TOKENS"}`, + wantStop: "MAX_TOKENS", wantTruncated: true, + }, + { + name: "cohere command-r finished on its own", + model: "cohere.command-r-v1:0", + body: `{"id":"x","text":"a whole answer","finish_reason":"COMPLETE"}`, + wantStop: "COMPLETE", wantTruncated: false, + }, + { + name: "meta out of budget", + model: "meta.llama3-8b-instruct-v1:0", + body: `{"generation":"half an ans","prompt_token_count":1,"generation_token_count":1,"stop_reason":"length"}`, + wantStop: "length", wantTruncated: true, + }, + { + name: "nova out of budget", + model: "amazon.nova-lite-v1:0", + body: `{"output":{"message":{"content":[{"text":"half an ans"}],"role":"assistant"}},"stopReason":"max_tokens","usage":{"inputTokens":1,"outputTokens":1}}`, + wantStop: "max_tokens", wantTruncated: true, + }, + { + name: "nova finished on its own", + model: "amazon.nova-lite-v1:0", + body: `{"output":{"message":{"content":[{"text":"a whole answer"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1}}`, + wantStop: "end_turn", wantTruncated: false, + }, + { + name: "deepseek out of budget", + model: "deepseek.r1-v1:0", + body: `{"choices":[{"text":"half an ans","stop_reason":"length"}]}`, + wantStop: "length", wantTruncated: true, + }, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() From 9d161a5d787689a9738470651b0a68758080afb8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 17:25:39 +0700 Subject: [PATCH 056/618] test(mistral): cover the truncation flag on the streaming path Co-Authored-By: Claude Opus 5 --- llms/mistral/truncation_test.go | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/llms/mistral/truncation_test.go b/llms/mistral/truncation_test.go index 1db5dd0f7..003d18130 100644 --- a/llms/mistral/truncation_test.go +++ b/llms/mistral/truncation_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" ) func truncationModel(t *testing.T, finishReason string) *Model { @@ -78,3 +79,42 @@ func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { t.Fatalf("without the option the same response must stay a success: %v", err) } } + +func TestTruncationOnTheStreamingPath(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + flusher, _ := w.(http.Flusher) + for _, chunk := range []string{ + `{"id":"x","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest","choices":[{"index":0,"delta":{"role":"assistant","content":"half an ans"},"finish_reason":""}]}`, + `{"id":"x","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest","choices":[{"index":0,"delta":{"content":""},"finish_reason":"length"}]}`, + } { + _, _ = fmt.Fprintf(w, "data: %s\n\n", chunk) + if flusher != nil { + flusher.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + model, err := New(WithAPIKey("unit-test-token"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + if err != nil { + t.Fatalf("New: %v", err) + } + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + sink := func(context.Context, streaming.Chunk) error { return nil } + + resp, err := model.GenerateContent(context.Background(), msgs, llms.WithStreamingFunc(sink)) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if !resp.Choices[0].Truncated { + t.Fatalf("Truncated = false on a streamed answer that hit the limit, StopReason = %q", resp.Choices[0].StopReason) + } + if got := resp.Choices[0].StopReason; got != "length" { + t.Fatalf("StopReason = %q, want the vendor's own %q", got, "length") + } +} From 7bcb84bb69fc17d1da9898a7924c9f68357734f6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 17:29:32 +0700 Subject: [PATCH 057/618] test(bedrock): lift the per-family table out of the test body Co-Authored-By: Claude Opus 5 --- llms/bedrock/truncation_test.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/llms/bedrock/truncation_test.go b/llms/bedrock/truncation_test.go index 8cf1d420c..5526f0403 100644 --- a/llms/bedrock/truncation_test.go +++ b/llms/bedrock/truncation_test.go @@ -98,16 +98,16 @@ func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { } } -func TestTruncationOnTheLegacyDoor(t *testing.T) { - t.Parallel() +type legacyTruncationCase struct { + name string + model string + body string + wantStop string + wantTruncated bool +} - for _, tc := range []struct { - name string - model string - body string - wantStop string - wantTruncated bool - }{ +func legacyTruncationCases() []legacyTruncationCase { + return []legacyTruncationCase{ { name: "anthropic out of budget", model: "anthropic.claude-3-sonnet-20240229-v1:0", @@ -194,7 +194,13 @@ func TestTruncationOnTheLegacyDoor(t *testing.T) { body: `{"choices":[{"text":"half an ans","stop_reason":"length"}]}`, wantStop: "length", wantTruncated: true, }, - } { + } +} + +func TestTruncationOnTheLegacyDoor(t *testing.T) { + t.Parallel() + + for _, tc := range legacyTruncationCases() { t.Run(tc.name, func(t *testing.T) { t.Parallel() llm := truncationLLMWithBody(t, tc.body, bedrock.WithModel(tc.model)) From 1fbeef4da6d93ee55b68d41bff6c0dac25b7c50f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 18:16:35 +0700 Subject: [PATCH 058/618] fix(openai): drop top_p on the models that reject it, reasoning asked or not MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A reasoning model that refuses non-default sampling refuses it on every request, not only when the caller passed a reasoning option — the model always reasons. The guard sat in a deferred block keyed on the request carrying a reasoning field, so gpt-5 or o4-mini with WithTopP and nothing else answered 400 "Unsupported parameter: 'top_p' is not supported with this model", while the same call with WithReasoning succeeded. Its sibling, the temperature pin, was already keyed on the model. Key both on the model. Measured live against the gateway: gpt-5 and o4-mini go from 400 to a normal answer with or without a reasoning option, and gpt-5.2, which accepts top_p, keeps sending it. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 12 +++-- .../reasoning_effort_passthrough_test.go | 51 +++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 632758260..ab990e193 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -262,11 +262,13 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.SetResponseFormat(ResponseFormatJSON) } - if model := o.effectiveModel(opts); opts.Temperature != nil && - reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && - !reasoning.OpenAIAcceptsCustomTemperature(model) { - temperature := 1.0 - req.Temperature = &temperature + if model := o.effectiveModel(opts); reasoning.IsReasoningModel(model) && + !opts.Reasoning.IsDisabled() && !reasoning.OpenAIAcceptsCustomTemperature(model) { + if opts.Temperature != nil { + temperature := 1.0 + req.Temperature = &temperature + } + req.TopP = nil } // add tools from functions and tool definitions diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 2fce23500..eec78837e 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -348,3 +348,54 @@ func TestTemperaturePinnedOnlyWhereTheModelDemandsIt(t *testing.T) { }) } } + +func TestTopPDroppedOnlyWhereTheModelRejectsIt(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + send := func(t *testing.T, model string, opts ...llms.CallOption) string { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + opts = append([]llms.CallOption{llms.WithTopP(0.9)}, opts...) + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + for _, model := range []string{"gpt-4.1", "gpt-4o", "gpt-5.1", "gpt-5.2", "gpt-5.4-mini"} { + t.Run("keeps/"+model, func(t *testing.T) { + if body := send(t, model); !strings.Contains(body, `"top_p":0.9`) { + t.Fatalf("%s takes the caller's top_p, got body: %s", model, body) + } + }) + } + for _, model := range []string{"gpt-5", "gpt-5-mini", "gpt-5-nano", "o3", "o4-mini"} { + t.Run("drops/"+model, func(t *testing.T) { + if body := send(t, model); strings.Contains(body, "top_p") { + t.Fatalf("%s rejects top_p outright, got body: %s", model, body) + } + }) + t.Run("drops-with-reasoning/"+model, func(t *testing.T) { + body := send(t, model, llms.WithReasoning(llms.ReasoningHigh, 0)) + if strings.Contains(body, "top_p") { + t.Fatalf("%s rejects top_p with reasoning too, got body: %s", model, body) + } + }) + } +} From 4b2a9063e4e52ff2b696a4032995af5d37e1583f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 21 Aug 2026 21:21:08 +0700 Subject: [PATCH 059/618] fix(openai): apply Claude sampling limits behind the OpenAI transport MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Claude model reached through an OpenAI-compatible gateway still answers with Anthropic's sampling rules, but the adapter never consulted the Claude tables. An adaptive-only model (sonnet-5, opus-4-7, fable-5) happened to pass because IsReasoningModel caught it and pinned temperature to 1.0, which the gateway tolerates. claude-haiku-4-5 did not: IsReasoningModel only lists the dotted "claude-haiku-4.5", so the dash-form id matched nothing, temperature and top_p both reached the wire, and the pair drew a 400 mutual-exclusion error. Key the sampling switch on the Claude tables first: ClaudeRejectsSampling drops temperature and top_p entirely; ClaudeMutuallyExclusiveSampling drops top_p only when both are set, preserving the caller's temperature — which also stops the opus-4-5/sonnet-4-5 pair from being pinned to 1.0 needlessly. Measured live through the adapter against the gateway: haiku-4-5 with temperature+top_p goes from 400 to a normal answer, and the five other Claude generations keep working. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 11 +++- .../reasoning_effort_passthrough_test.go | 56 +++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index ab990e193..e6dfc257e 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -262,9 +262,14 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.SetResponseFormat(ResponseFormatJSON) } - if model := o.effectiveModel(opts); reasoning.IsReasoningModel(model) && - !opts.Reasoning.IsDisabled() && !reasoning.OpenAIAcceptsCustomTemperature(model) { - if opts.Temperature != nil { + switch model := o.effectiveModel(opts); { + case reasoning.ClaudeRejectsSampling(model): + req.Temperature, req.TopP = nil, nil + case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: + req.TopP = nil + case reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && + !reasoning.OpenAIAcceptsCustomTemperature(model): + if req.Temperature != nil { temperature := 1.0 req.Temperature = &temperature } diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index eec78837e..00f055529 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -399,3 +399,59 @@ func TestTopPDroppedOnlyWhereTheModelRejectsIt(t *testing.T) { }) } } + +func TestClaudeSamplingBehindTheOpenAITransport(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + send := func(t *testing.T, model string) string { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTemperature(0.5), llms.WithTopP(0.9)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + for _, model := range []string{ + "anthropic/claude-sonnet-5", "anthropic/claude-opus-4-7", "anthropic/claude-fable-5", + } { + t.Run("drops-both/"+model, func(t *testing.T) { + body := send(t, model) + if strings.Contains(body, "temperature") || strings.Contains(body, "top_p") { + t.Fatalf("%s rejects sampling outright, got body: %s", model, body) + } + }) + } + + for _, model := range []string{ + "anthropic/claude-haiku-4-5", "anthropic/claude-sonnet-4-5", "anthropic/claude-opus-4-5", + "anthropic/claude-sonnet-4-6", "anthropic/claude-opus-4-6", + } { + t.Run("keeps-temp-drops-topp/"+model, func(t *testing.T) { + body := send(t, model) + if !strings.Contains(body, `"temperature":0.5`) { + t.Fatalf("%s takes the caller's temperature, got body: %s", model, body) + } + if strings.Contains(body, "top_p") { + t.Fatalf("%s rejects temperature and top_p together, got body: %s", model, body) + } + }) + } +} From b253099fe33b479264164303c1c29aa1abb245e2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 00:25:35 +0700 Subject: [PATCH 060/618] fix(reasoning): refuse structured output on the Bedrock spelling of Claude v2 legacyNoStructuredClaude listed "claude-2" but not "claude-v2", so the Bedrock ids anthropic.claude-v2 and anthropic.claude-v2:1 passed the local guard and shipped output_config.format to a generation that predates it, while the first-party claude-2.1 of the same generation was refused. preAdaptiveClaude already carried both spellings. PAGI-132 --- llms/reasoning/claude_capability.go | 2 +- llms/reasoning/claude_v2_structured_test.go | 22 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 llms/reasoning/claude_v2_structured_test.go diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 93669d45a..2243a9f24 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -170,7 +170,7 @@ func ClaudeMutuallyExclusiveSampling(model string) bool { // outputs (the output_config.format JSON Schema mode). A structured-output request // on them is rejected locally rather than sent for a guaranteed 4xx. var legacyNoStructuredClaude = []string{ - "claude-2", "claude-instant", + "claude-2", "claude-v2", "claude-instant", "claude-3-", "claude-3.", "claude-opus-4-1", "claude-opus-4-20", "claude-sonnet-4-20", } diff --git a/llms/reasoning/claude_v2_structured_test.go b/llms/reasoning/claude_v2_structured_test.go new file mode 100644 index 000000000..5a4a1c877 --- /dev/null +++ b/llms/reasoning/claude_v2_structured_test.go @@ -0,0 +1,22 @@ +package reasoning_test + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestClaudeV2RejectsStructuredOutputOnEverySpelling(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "claude-2", "claude-2.1", + "claude-v2", "claude-v2:1", + "anthropic.claude-v2", "anthropic.claude-v2:1", + "us.anthropic.claude-v2:1", + } { + if reasoning.ClaudeSupportsStructuredOutput(model) { + t.Errorf("%s: structured output must be refused locally, got supported", model) + } + } +} From f5daaa194f91363c3dfffaf47baf6fe0bc8d0894 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 00:27:03 +0700 Subject: [PATCH 061/618] fix(mistral): keep the last non-empty finish reason on the streaming path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The per-chunk loop assigned StopReason and Truncated unconditionally, so a trailing chunk carrying no finish reason — a usage-only frame, for instance — erased a truncation the previous chunk had already reported. WithFailOnTruncation then returned nil on a cut-off answer. The OpenAI streaming client guards the same assignment with a non-empty check. The added tests also cover CheckTruncation on the streaming path, which no test reached: deleting that call left the package green. PAGI-132 --- llms/mistral/mistralmodel.go | 6 ++- llms/mistral/truncation_test.go | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 248301624..eda0f8b65 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -220,8 +220,10 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C for _, choice := range chatResChunk.Choices { chunkStr += choice.Delta.Content langchainContentResponse.Choices[0].Content += choice.Delta.Content - langchainContentResponse.Choices[0].StopReason = string(choice.FinishReason) - langchainContentResponse.Choices[0].Truncated = llms.IsTruncated(string(choice.FinishReason)) + if choice.FinishReason != "" { + langchainContentResponse.Choices[0].StopReason = string(choice.FinishReason) + langchainContentResponse.Choices[0].Truncated = llms.IsTruncated(string(choice.FinishReason)) + } if len(choice.Delta.ToolCalls) > 0 { langchainContentResponse.Choices[0].FuncCall = (*llms.FunctionCall)(&choice.Delta.ToolCalls[0].Function) for _, tool := range choice.Delta.ToolCalls { diff --git a/llms/mistral/truncation_test.go b/llms/mistral/truncation_test.go index 003d18130..af7088d64 100644 --- a/llms/mistral/truncation_test.go +++ b/llms/mistral/truncation_test.go @@ -118,3 +118,68 @@ func TestTruncationOnTheStreamingPath(t *testing.T) { t.Fatalf("StopReason = %q, want the vendor's own %q", got, "length") } } + +func streamingModelWithTrailingChunk(t *testing.T) *Model { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + flusher, _ := w.(http.Flusher) + for _, chunk := range []string{ + `{"id":"x","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest","choices":[{"index":0,"delta":{"role":"assistant","content":"half an ans"},"finish_reason":""}]}`, + `{"id":"x","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest","choices":[{"index":0,"delta":{"content":""},"finish_reason":"length"}]}`, + `{"id":"x","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest","choices":[{"index":0,"delta":{"content":""},"finish_reason":""}],"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`, + } { + _, _ = fmt.Fprintf(w, "data: %s\n\n", chunk) + if flusher != nil { + flusher.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + model, err := New(WithAPIKey("unit-test-token"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + if err != nil { + t.Fatalf("New: %v", err) + } + return model +} + +func TestTrailingChunkDoesNotClearTruncationOnTheStreamingPath(t *testing.T) { + t.Parallel() + + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + sink := func(context.Context, streaming.Chunk) error { return nil } + + resp, err := streamingModelWithTrailingChunk(t).GenerateContent(context.Background(), msgs, + llms.WithStreamingFunc(sink)) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].StopReason; got != "length" { + t.Errorf("StopReason = %q, want the last non-empty reason %q", got, "length") + } + if !resp.Choices[0].Truncated { + t.Error("Truncated = false, want true: a trailing chunk without a reason must not clear it") + } +} + +func TestFailOnTruncationFiresOnTheStreamingPath(t *testing.T) { + t.Parallel() + + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + sink := func(context.Context, streaming.Chunk) error { return nil } + + resp, err := streamingModelWithTrailingChunk(t).GenerateContent(context.Background(), msgs, + llms.WithStreamingFunc(sink), llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("want an error once the caller opted in") + } + if !llms.IsTruncatedError(err) { + t.Fatalf("want a truncation error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want the partial answer alongside the error, got %+v", resp) + } +} From 058e344d9005e33d9850b0da799634d6d9f764bc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 00:32:07 +0700 Subject: [PATCH 062/618] fix(vertex,bedrock): saturate max tokens instead of wrapping to a negative limit WithMaxTokens above MaxInt32 wrapped: 3_000_000_000 became -1294967296 on the Vertex generation config (max output tokens, candidate count and top-k) and on the Converse inference config. The googleai adapter already saturated, so the same call succeeded there and failed on the sibling doors. The saturating conversion moves to internal/numutil so the three doors share one implementation. The Vertex generation config is extracted into a function so the conversion has a seam a test can reach. Not changed: the thinking-budget conversion in googleai, where GetTokens is already clamped to MaxReasoningTokens and cannot overflow. PAGI-132 --- internal/numutil/num.go | 14 ++++++ internal/numutil/num_test.go | 29 ++++++++++++ .../bedrockclient/bedrockclient_converse.go | 3 +- .../bedrockclient_converse_test.go | 29 ++++++++++++ .../googleai/vertex/generation_config_test.go | 45 +++++++++++++++++++ llms/googleai/vertex/vertex.go | 37 ++++++++------- 6 files changed, 140 insertions(+), 17 deletions(-) create mode 100644 internal/numutil/num.go create mode 100644 internal/numutil/num_test.go create mode 100644 llms/googleai/vertex/generation_config_test.go diff --git a/internal/numutil/num.go b/internal/numutil/num.go new file mode 100644 index 000000000..0bd2181d2 --- /dev/null +++ b/internal/numutil/num.go @@ -0,0 +1,14 @@ +package numutil + +import "math" + +func SaturateInt32(i int) int32 { + switch { + case i > math.MaxInt32: + return math.MaxInt32 + case i < math.MinInt32: + return math.MinInt32 + default: + return int32(i) + } +} diff --git a/internal/numutil/num_test.go b/internal/numutil/num_test.go new file mode 100644 index 000000000..ce4dc09c9 --- /dev/null +++ b/internal/numutil/num_test.go @@ -0,0 +1,29 @@ +package numutil_test + +import ( + "math" + "testing" + + "github.com/vxcontrol/langchaingo/internal/numutil" +) + +func TestSaturateInt32ClampsInsteadOfWrapping(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + in int + want int32 + }{ + {"above the ceiling", 3_000_000_000, math.MaxInt32}, + {"exactly the ceiling", math.MaxInt32, math.MaxInt32}, + {"one below the ceiling", math.MaxInt32 - 1, math.MaxInt32 - 1}, + {"below the floor", -3_000_000_000, math.MinInt32}, + {"ordinary", 16384, 16384}, + {"zero", 0, 0}, + } { + if got := numutil.SaturateInt32(tc.in); got != tc.want { + t.Errorf("%s: SaturateInt32(%d) = %d, want %d", tc.name, tc.in, got, tc.want) + } + } +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 1b8c9f439..0d0535c8f 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -7,6 +7,7 @@ import ( "fmt" "strings" + "github.com/vxcontrol/langchaingo/internal/numutil" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -102,7 +103,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti // Build inference configuration inferenceConfig := &types.InferenceConfiguration{} if input.MaxTokens != nil { - inferenceConfig.MaxTokens = aws.Int32(int32(*input.MaxTokens)) + inferenceConfig.MaxTokens = aws.Int32(numutil.SaturateInt32(*input.MaxTokens)) } if input.Temperature != nil { inferenceConfig.Temperature = aws.Float32(float32(*input.Temperature)) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 8a4ea714e..e2457c3b5 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -3,6 +3,7 @@ package bedrockclient import ( "context" "encoding/json" + "math" "testing" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" @@ -1101,3 +1102,31 @@ func TestConverseClient_DropsTopPWhenBothSamplingParamsSet(t *testing.T) { }) } } + +func TestConverseMaxTokensSaturatesInsteadOfWrapping(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + in int + want int32 + }{ + {"ordinary", 16384, 16384}, + {"exactly the ceiling", math.MaxInt32, math.MaxInt32}, + {"above the ceiling", math.MaxInt32 + 1, math.MaxInt32}, + {"far above the ceiling", 3_000_000_000, math.MaxInt32}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + maxTokens := tc.in + got, err := NewConverseClient(&MockBedrockRuntimeClient{}).buildConverseInput(&ConverseInput{ + ModelID: "anthropic.claude-3-sonnet-20240229-v1:0", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + MaxTokens: &maxTokens, + }) + require.NoError(t, err) + require.NotNil(t, got.InferenceConfig.MaxTokens) + assert.Equal(t, tc.want, *got.InferenceConfig.MaxTokens) + }) + } +} diff --git a/llms/googleai/vertex/generation_config_test.go b/llms/googleai/vertex/generation_config_test.go new file mode 100644 index 000000000..697b21821 --- /dev/null +++ b/llms/googleai/vertex/generation_config_test.go @@ -0,0 +1,45 @@ +package vertex + +import ( + "math" + "testing" + + "cloud.google.com/go/vertexai/genai" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestGenerationConfigSaturatesInsteadOfWrapping(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + in int + wantTokens int32 + }{ + {"ordinary", 16384, 16384}, + {"exactly the ceiling", math.MaxInt32, math.MaxInt32}, + {"above the ceiling", math.MaxInt32 + 1, math.MaxInt32}, + {"far above the ceiling", 3_000_000_000, math.MaxInt32}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + n := tc.in + model := &genai.GenerativeModel{} + applyGenerationConfig(model, llms.CallOptions{ + MaxTokens: &n, + CandidateCount: &n, + TopK: &n, + }) + + if got := *model.MaxOutputTokens; got != tc.wantTokens { + t.Errorf("MaxOutputTokens = %d, want %d", got, tc.wantTokens) + } + if got := *model.CandidateCount; got != tc.wantTokens { + t.Errorf("CandidateCount = %d, want %d", got, tc.wantTokens) + } + if got := *model.TopK; got != tc.wantTokens { + t.Errorf("TopK = %d, want %d", got, tc.wantTokens) + } + }) + } +} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 2ae7ff411..2282ef726 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -20,6 +20,7 @@ import ( "cloud.google.com/go/vertexai/genai" "github.com/vxcontrol/langchaingo/internal/imageutil" + "github.com/vxcontrol/langchaingo/internal/numutil" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" "google.golang.org/api/iterator" @@ -84,22 +85,7 @@ func (g *Vertex) GenerateContent( } model := g.client.GenerativeModel(opts.GetModel()) - if opts.CandidateCount != nil { - model.SetCandidateCount(int32(opts.GetCandidateCount())) - } - if opts.MaxTokens != nil { - model.SetMaxOutputTokens(int32(opts.GetMaxTokens())) - } - if opts.Temperature != nil { - model.SetTemperature(float32(opts.GetTemperature())) - } - if opts.TopP != nil { - model.SetTopP(float32(opts.GetTopP())) - } - if opts.TopK != nil { - model.SetTopK(int32(opts.GetTopK())) - } - model.StopSequences = opts.StopWords + applyGenerationConfig(model, opts) model.SafetySettings = []*genai.SafetySetting{ { Category: genai.HarmCategoryDangerousContent, @@ -588,3 +574,22 @@ func convertVertexHarmBlockThreshold(threshold googleai.HarmBlockThreshold) gena return genai.HarmBlockOnlyHigh // Safe default } } + +func applyGenerationConfig(model *genai.GenerativeModel, opts llms.CallOptions) { + if opts.CandidateCount != nil { + model.SetCandidateCount(numutil.SaturateInt32(opts.GetCandidateCount())) + } + if opts.MaxTokens != nil { + model.SetMaxOutputTokens(numutil.SaturateInt32(opts.GetMaxTokens())) + } + if opts.Temperature != nil { + model.SetTemperature(float32(opts.GetTemperature())) + } + if opts.TopP != nil { + model.SetTopP(float32(opts.GetTopP())) + } + if opts.TopK != nil { + model.SetTopK(numutil.SaturateInt32(opts.GetTopK())) + } + model.StopSequences = opts.StopWords +} From 28f73650cd8d6c5101acbcd9fdd8b0fc22f4d0ea Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 10:41:16 +0700 Subject: [PATCH 063/618] fix(openai): stop truncating a provider error before it is parsed statusError capped the body at 2 KiB and then unmarshalled, so any error longer than that failed to parse and the caller received a raw JSON fragment cut mid-object instead of the provider's message. Azure content-filter and structured-output responses, which echo the schema, routinely exceed it. The cap moves to 64 KiB: still bounded, but above the largest error body these providers send. The existing cap test is written against the constant and keeps holding. PAGI-132 --- .../internal/openaiclient/completions.go | 2 +- .../internal/openaiclient/statuserror_test.go | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/llms/openai/internal/openaiclient/completions.go b/llms/openai/internal/openaiclient/completions.go index 26537b5a6..240a41f02 100644 --- a/llms/openai/internal/openaiclient/completions.go +++ b/llms/openai/internal/openaiclient/completions.go @@ -60,7 +60,7 @@ type errorMessage struct { } `json:"error"` } -const maxErrorBodyBytes = 2048 +const maxErrorBodyBytes = 64 << 10 func statusError(statusCode int, body io.Reader) error { msg := fmt.Sprintf("API returned unexpected status code: %d", statusCode) diff --git a/llms/openai/internal/openaiclient/statuserror_test.go b/llms/openai/internal/openaiclient/statuserror_test.go index 018ebd693..d5327b869 100644 --- a/llms/openai/internal/openaiclient/statuserror_test.go +++ b/llms/openai/internal/openaiclient/statuserror_test.go @@ -30,3 +30,24 @@ func TestStatusErrorCapsTheQuotedBody(t *testing.T) { t.Fatalf("error grew to %d bytes, want it capped near %d", len(err.Error()), maxErrorBodyBytes) } } + +func TestStatusErrorParsesABodyLargerThanTwoKilobytes(t *testing.T) { + padding := strings.Repeat("d", 8<<10) + body := `{"error":{"message":"content filter triggered","type":"invalid_request_error","detail":"` + + padding + `"}}` + + err := statusError(400, strings.NewReader(body)) + if err == nil { + t.Fatal("want an error") + } + got := err.Error() + if !strings.Contains(got, "content filter triggered") { + t.Errorf("provider message lost: %s", got) + } + if strings.Contains(got, `{"error"`) { + t.Errorf("body was quoted raw instead of parsed: %.120s", got) + } + if strings.Contains(got, padding[:64]) { + t.Errorf("padding leaked into the error: %.120s", got) + } +} From 78929109cd4a10370b9a70a58fba444187795554 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 10:43:54 +0700 Subject: [PATCH 064/618] docs(llms): give ReasoningSupport back its doc comment The ReasoningMechanism type was inserted between the ReasoningSupport paragraph and the struct it describes, so godoc attached that paragraph to the enum and left the struct undocumented. The enum moves below the struct and keeps its own one-line comment. PAGI-132 --- llms/reasoning_support.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index cd89b3d44..e6d4c0118 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -13,20 +13,6 @@ import ( // provider API (an HTTP 400) is the ultimate arbiter. The table asserts only // KNOWN facts; it never fabricates a capability it cannot back — unknown effort // tiers and default state are left nil rather than guessed. -// ReasoningMechanism describes how a model takes its thinking instruction. -type ReasoningMechanism int - -const ( - // ReasoningMechanismUnknown is a model whose mechanism this build does not classify. - ReasoningMechanismUnknown ReasoningMechanism = iota - // ReasoningMechanismAdaptive takes an effort level and decides how much to think. - ReasoningMechanismAdaptive - // ReasoningMechanismBudget takes a manual token budget. - ReasoningMechanismBudget - // ReasoningMechanismAdaptiveAndBudget accepts either mechanism. - ReasoningMechanismAdaptiveAndBudget -) - type ReasoningSupport struct { // Supported reports whether the model reasons at all. Supported bool @@ -48,6 +34,20 @@ type ReasoningSupport struct { DefaultOn *bool } +// ReasoningMechanism describes how a model takes its thinking instruction. +type ReasoningMechanism int + +const ( + // ReasoningMechanismUnknown is a model whose mechanism this build does not classify. + ReasoningMechanismUnknown ReasoningMechanism = iota + // ReasoningMechanismAdaptive takes an effort level and decides how much to think. + ReasoningMechanismAdaptive + // ReasoningMechanismBudget takes a manual token budget. + ReasoningMechanismBudget + // ReasoningMechanismAdaptiveAndBudget accepts either mechanism. + ReasoningMechanismAdaptiveAndBudget +) + var ( reasoningOverridesMu sync.RWMutex reasoningOverrides = map[string]ReasoningSupport{} From b17c7fa048d53d714154286edd21241e942b1bf7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 10:43:55 +0700 Subject: [PATCH 065/618] perf(ollama,openai): build the streamed answer instead of reconcatenating it The per-chunk callback grew the answer and the thinking text with +=, so each chunk reallocated and copied everything received so far. Measured on 4000 chunks of a ~100 KB answer: 20.8 ms and 212 MB allocated against 0.057 ms and 0.5 MB for strings.Builder. openai built its stop reason with fmt.Sprint on a defined string type, which goes through reflection; a conversion does the same thing. PAGI-132 --- llms/ollama/ollamallm.go | 12 ++++++------ llms/openai/openaillm.go | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 447116236..88c26c3fa 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -367,8 +367,8 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca var ( resp api.ChatResponse - streamedResponse string - streamedThinking string + streamedResponse strings.Builder + streamedThinking strings.Builder streamedToolCalls []api.ToolCall ) @@ -399,9 +399,9 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca } if response.Message.Content != "" { - streamedResponse += response.Message.Content + streamedResponse.WriteString(response.Message.Content) } - streamedThinking += response.Message.Thinking + streamedThinking.WriteString(response.Message.Thinking) if len(response.Message.ToolCalls) > 0 { streamedToolCalls = append(streamedToolCalls, response.Message.ToolCalls...) } @@ -410,8 +410,8 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca resp = response resp.Message = api.Message{ Role: "assistant", - Content: streamedResponse, - Thinking: streamedThinking, + Content: streamedResponse.String(), + Thinking: streamedThinking.String(), ToolCalls: streamedToolCalls, } } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index e6dfc257e..a0d33a482 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -407,7 +407,7 @@ func (o *LLM) processResponse(result *openaiclient.ChatCompletionResponse) *llms choices := make([]*llms.ContentChoice, len(result.Choices)) for i, c := range result.Choices { - stopReason := fmt.Sprint(c.FinishReason) + stopReason := string(c.FinishReason) choices[i] = &llms.ContentChoice{ Content: c.Message.Content, Reasoning: o.processReasoning(c.Message.ReasoningContent), From 6e5c82ba55fe4932702dffa36d594b6833e847b6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 11:17:57 +0700 Subject: [PATCH 066/618] fix(vertex): report the finish reason as the vendor spells it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit StopReason carried the SDK's Go identifier — FinishReasonMaxTokens — because the veneer's String() prints the constant name rather than the wire value. The field is documented as the vendor's own word, and llms.IsTruncated does not recognise that spelling, so Truncated said true while IsTruncated(StopReason) said false on this door alone. The reason now goes through the generated protobuf enum, which yields MAX_TOKENS, STOP, SAFETY and the rest exactly as the API emits them. Two unit tests pinned the old spelling and were asserting the defect; both now assert the wire value, and one also asserts that Truncated and IsTruncated agree. PAGI-132 --- llms/googleai/vertex/vertex.go | 7 ++++++- llms/googleai/vertex/vertex_unit_test.go | 16 ++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 2282ef726..f4a4a7291 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -18,6 +18,7 @@ import ( "github.com/vxcontrol/langchaingo/llms/googleai" "github.com/vxcontrol/langchaingo/llms/streaming" + aiplatformpb "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb" "cloud.google.com/go/vertexai/genai" "github.com/vxcontrol/langchaingo/internal/imageutil" "github.com/vxcontrol/langchaingo/internal/numutil" @@ -189,7 +190,7 @@ func convertCandidates(candidates []*genai.Candidate, usage *genai.UsageMetadata contentResponse.Choices = append(contentResponse.Choices, &llms.ContentChoice{ Content: buf.String(), - StopReason: candidate.FinishReason.String(), + StopReason: wireFinishReason(candidate.FinishReason), Truncated: candidate.FinishReason == genai.FinishReasonMaxTokens, GenerationInfo: metadata, ToolCalls: toolCalls, @@ -593,3 +594,7 @@ func applyGenerationConfig(model *genai.GenerativeModel, opts llms.CallOptions) } model.StopSequences = opts.StopWords } + +func wireFinishReason(r genai.FinishReason) string { + return aiplatformpb.Candidate_FinishReason(r).String() +} diff --git a/llms/googleai/vertex/vertex_unit_test.go b/llms/googleai/vertex/vertex_unit_test.go index 2ecf4272d..61f0279ea 100644 --- a/llms/googleai/vertex/vertex_unit_test.go +++ b/llms/googleai/vertex/vertex_unit_test.go @@ -324,9 +324,8 @@ func TestConvertCandidates(t *testing.T) { //nolint:funlen // comprehensive test if result.Choices[0].Content != "Response text" { t.Errorf("expected content 'Response text', got %q", result.Choices[0].Content) } - // The FinishReason.String() method returns the full enum name - if result.Choices[0].StopReason != "FinishReasonStop" { - t.Errorf("expected stop reason 'FinishReasonStop', got %q", result.Choices[0].StopReason) + if result.Choices[0].StopReason != "STOP" { + t.Errorf("expected stop reason 'STOP', got %q", result.Choices[0].StopReason) } }, }, @@ -746,9 +745,10 @@ func TestConvertCandidatesReportsTruncation(t *testing.T) { wantStop string wantTruncated bool }{ - {"out of budget", genai.FinishReasonMaxTokens, "FinishReasonMaxTokens", true}, - {"finished on its own", genai.FinishReasonStop, "FinishReasonStop", false}, - {"blocked by safety", genai.FinishReasonSafety, "FinishReasonSafety", false}, + {"out of budget", genai.FinishReasonMaxTokens, "MAX_TOKENS", true}, + {"finished on its own", genai.FinishReasonStop, "STOP", false}, + {"blocked by safety", genai.FinishReasonSafety, "SAFETY", false}, + {"blocked by recitation", genai.FinishReasonRecitation, "RECITATION", false}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -765,6 +765,10 @@ func TestConvertCandidatesReportsTruncation(t *testing.T) { if got := resp.Choices[0].StopReason; got != tc.wantStop { t.Fatalf("StopReason = %q, want %q", got, tc.wantStop) } + if got := llms.IsTruncated(resp.Choices[0].StopReason); got != tc.wantTruncated { + t.Fatalf("IsTruncated(%q) = %v, want it to agree with Truncated = %v", + resp.Choices[0].StopReason, got, tc.wantTruncated) + } }) } } From d99f06a7f346a0a4899d188f5bd00435627dd1d3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 12:09:06 +0700 Subject: [PATCH 067/618] fix(vertex): restore structured-output validation after the wire-spelling change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reporting the finish reason in the vendor's wire spelling left the validator comparing StopReason against the SDK's Go identifier, so no candidate ever matched: every schema violation returned to the caller as success. The validator now takes the spelling from the same helper the response converter uses, and a new test drives the real converter into the validator so the two cannot drift apart again. Verified by mutation: with the old spelling restored the new test fails, and with the old fixture restored as well the original test still passes — it built its fixture with the same stale helper the validator used, so both agreed while both were wrong. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/structured_output.go | 2 +- .../googleai/vertex/structured_output_test.go | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index acc620acc..a1c401ca4 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -63,7 +63,7 @@ func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentRe return nil } model := opts.GetModel() - stop := genai.FinishReasonStop.String() + stop := wireFinishReason(genai.FinishReasonStop) for i, choice := range resp.Choices { if choice.StopReason != stop || len(choice.ToolCalls) > 0 { continue diff --git a/llms/googleai/vertex/structured_output_test.go b/llms/googleai/vertex/structured_output_test.go index 049d3d2e5..88e1a48ec 100644 --- a/llms/googleai/vertex/structured_output_test.go +++ b/llms/googleai/vertex/structured_output_test.go @@ -222,7 +222,7 @@ func TestValidateVertexStructuredOutput(t *testing.T) { JSONMode: true, StructuredOutput: &llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},"required":["a"],"additionalProperties":false}`)}, } - stop := genai.FinishReasonStop.String() + stop := "STOP" if err := validateVertexStructuredOutput(opts, &llms.ContentResponse{Choices: []*llms.ContentChoice{{Content: `{"a":"ok"}`, StopReason: stop}}}); err != nil { t.Errorf("valid STOP must pass: %v", err) @@ -247,3 +247,24 @@ func TestValidateVertexStructuredOutput(t *testing.T) { t.Errorf("a STOP turn carrying tool calls must not be validated as JSON: %v", err) } } + +func TestValidateVertexStructuredOutputOnConvertedResponse(t *testing.T) { + t.Parallel() + opts := &llms.CallOptions{ + JSONMode: true, + StructuredOutput: &llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},"required":["a"],"additionalProperties":false}`)}, + } + + resp, err := convertCandidates([]*genai.Candidate{{ + Content: &genai.Content{Parts: []genai.Part{genai.Text(`{"a":1}`)}}, + FinishReason: genai.FinishReasonStop, + }}, nil) + if err != nil { + t.Fatalf("convertCandidates: %v", err) + } + + var ve *llms.ErrStructuredOutputValidation + if got := validateVertexStructuredOutput(opts, resp); !errors.As(got, &ve) { + t.Errorf("schema violation on a converted STOP turn must fail typed, got %v", got) + } +} From ad05532995bf963a5dd7b84db981beb467cda1b3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 13:06:31 +0700 Subject: [PATCH 068/618] fix(openai): decide sampling from the effort that reaches the wire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setReasoning ran last and its deferred wipe cleared temperature and top_p for every reasoning request, so a model the sampling table says honors a custom temperature lost it anyway: gpt-5.4 with temperature, top_p and an explicit high effort went out with neither. Reasoning is now resolved first and reports the effort it put on the wire, and one sampling policy runs after it. Thinking on the wire still drops top_p, which is what the deferred wipe achieved for that half; temperature is left to the per-model table alone. The deferred wipe was covered by nothing: deleting it left the package green. A table over ten cells now pins the whole policy, including two shapes no per-model test reached — temperature alone is pinned where temperature with top_p survives, and ExtraBody overwrites a param the policy stripped, since it merges after the payload is marshalled. Verified by mutation: restoring the wipe reddens three rows, neutering the thinking check reddens two. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 79 +++++++++-------- llms/openai/sampling_matrix_test.go | 126 ++++++++++++++++++++++++++++ llms/reasoning/openai_capability.go | 4 + 3 files changed, 174 insertions(+), 35 deletions(-) create mode 100644 llms/openai/sampling_matrix_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index a0d33a482..0f5c0aba1 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -262,20 +262,6 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.SetResponseFormat(ResponseFormatJSON) } - switch model := o.effectiveModel(opts); { - case reasoning.ClaudeRejectsSampling(model): - req.Temperature, req.TopP = nil, nil - case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: - req.TopP = nil - case reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && - !reasoning.OpenAIAcceptsCustomTemperature(model): - if req.Temperature != nil { - temperature := 1.0 - req.Temperature = &temperature - } - req.TopP = nil - } - // add tools from functions and tool definitions if err := o.addToolsToRequest(req, opts); err != nil { return nil, err @@ -292,10 +278,11 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) return nil, err } - // set reasoning options, depends on the client and request options - if err := o.setReasoning(req, opts); err != nil { + wireEffort, err := o.setReasoning(req, opts) + if err != nil { return nil, err } + o.applySamplingPolicy(req, opts, wireEffort) return req, nil } @@ -315,21 +302,15 @@ func (o *LLM) effectiveModel(opts llms.CallOptions) string { } // setReasoning sets reasoning options, depends on the client and request options. -func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) error { +// setReasoning writes the reasoning fields and reports the effort that reached the wire. +func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningOn is handled by the code after the switch case llms.ReasoningDefault: - return nil + return "", nil case llms.ReasoningOff: return o.setReasoningOff(req, opts) } - defer func() { - if req.Reasoning != nil || req.ReasoningEffort != nil { - // must of all reasoning models can't use temperature and top_p with reasoning at the same time - req.Temperature, req.TopP = nil, nil - } - }() - // Clamp the effort to what the model accepts (e.g. GPT-5 Pro accepts only // high, GPT-5.4 mini rejects max) so a known-invalid value never reaches the // API; unknown models pass through unchanged. @@ -340,7 +321,7 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) if reasoningEffort != llms.ReasoningNone { req.ReasoningEffort = &reasoningEffort } - return nil + return string(reasoningEffort), nil } // using modern reasoning format @@ -353,26 +334,54 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) Effort: reasoningEffort, } } - return nil + return string(reasoningEffort), nil } // setReasoningOff sends the model's explicit disable token so a reasoning model // runs as a plain completion. Sampling params are left intact (a non-thinking // call); a model whose thinking cannot be disabled returns a typed error. -func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptions) error { +func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { model := o.effectiveModel(opts) switch reasoning.ResolveOff(model, reasoning.ProviderOpenAI) { //nolint:exhaustive // only OpenAI-relevant wires are handled; others are a no-op case reasoning.OffUnsupported: - return &reasoning.ErrReasoningOffUnsupported{Model: model} + return "", &reasoning.ErrReasoningOffUnsupported{Model: model} case reasoning.OffEffortNone: - none := llms.ReasoningEffort("none") - if o.client.ModernReasoningFormat { - req.Reasoning = &openaiclient.ReasoningOptions{Effort: none} - } else { - req.ReasoningEffort = &none + o.writeDisableEffort(req) + return reasoning.OpenAIDisableEffort, nil + } + return "", nil +} + +func (o *LLM) writeDisableEffort(req *openaiclient.ChatRequest) { + none := llms.ReasoningEffort(reasoning.OpenAIDisableEffort) + if o.client.ModernReasoningFormat { + req.Reasoning = &openaiclient.ReasoningOptions{Effort: none} + } else { + req.ReasoningEffort = &none + } +} + +func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string) { + switch model := o.effectiveModel(opts); { + case reasoning.ClaudeRejectsSampling(model): + req.Temperature, req.TopP = nil, nil + case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: + req.TopP = nil + case reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && + !reasoning.OpenAIAcceptsCustomTemperature(model): + if req.Temperature != nil { + temperature := 1.0 + req.Temperature = &temperature } + req.TopP = nil } - return nil + if isThinkingOnTheWire(wireEffort) { + req.TopP = nil + } +} + +func isThinkingOnTheWire(wireEffort string) bool { + return wireEffort != "" && wireEffort != reasoning.OpenAIDisableEffort } // addToolsToRequest adds tools to the request from functions and tool definitions. diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go new file mode 100644 index 000000000..9b0ea5abb --- /dev/null +++ b/llms/openai/sampling_matrix_test.go @@ -0,0 +1,126 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func sendForWire(t *testing.T, model string, opts ...llms.CallOption) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestSamplingMatrix(t *testing.T) { + t.Parallel() + + temp := llms.WithTemperature(0.3) + topP := llms.WithTopP(0.9) + high := llms.WithReasoning(llms.ReasoningHigh, 0) + off := llms.WithReasoningDisabled() + + for _, tc := range []struct { + name string + model string + opts []llms.CallOption + present []string + absent []string + }{{ + name: "accepting model keeps its temperature while thinking", + model: "gpt-5.4", + opts: []llms.CallOption{temp, topP, high}, + present: []string{`"temperature":0.3`, `"reasoning_effort":"high"`}, + absent: []string{`"top_p"`}, + }, { + name: "non-accepting model is pinned while thinking", + model: "gpt-5.5", + opts: []llms.CallOption{temp, topP, high}, + present: []string{`"temperature":1`, `"reasoning_effort":"high"`}, + absent: []string{`"top_p"`}, + }, { + name: "disabled thinking leaves both sampling params alone", + model: "gpt-5.5", + opts: []llms.CallOption{temp, topP, off}, + present: []string{`"temperature":0.3`, `"top_p":0.9`, `"reasoning_effort":"none"`}, + }, { + name: "omitted effort falls back to the model for an accepting name", + model: "gpt-5.4", + opts: []llms.CallOption{temp, topP}, + present: []string{`"temperature":0.3`, `"top_p":0.9`}, + absent: []string{`"reasoning_effort"`}, + }, { + name: "omitted effort pins a non-accepting name", + model: "gpt-5.5", + opts: []llms.CallOption{temp, topP}, + present: []string{`"temperature":1`}, + absent: []string{`"top_p"`, `"reasoning_effort"`}, + }, { + name: "a model that rejects sampling gets neither param", + model: "claude-opus-4-7", + opts: []llms.CallOption{temp, topP}, + absent: []string{`"temperature"`, `"top_p"`}, + }, { + name: "mutually exclusive sampling drops top_p and keeps temperature", + model: "claude-opus-4-5", + opts: []llms.CallOption{temp, topP}, + present: []string{`"temperature":0.3`}, + absent: []string{`"top_p"`}, + }, { + name: "temperature alone on the same model is pinned instead", + model: "claude-opus-4-5", + opts: []llms.CallOption{temp}, + present: []string{`"temperature":1`}, + }, { + name: "a non-reasoning model keeps everything", + model: "gpt-4.1", + opts: []llms.CallOption{temp, topP}, + present: []string{`"temperature":0.3`, `"top_p":0.9`}, + }, { + name: "extra body overwrites a param the policy stripped", + model: "claude-opus-4-7", + opts: []llms.CallOption{temp, topP, WithExtraBody(map[string]any{"temperature": 0.7})}, + present: []string{`"temperature":0.7`}, + absent: []string{`"top_p"`}, + }} { + t.Run(tc.name, func(t *testing.T) { + body := sendForWire(t, tc.model, tc.opts...) + for _, want := range tc.present { + if !strings.Contains(body, want) { + t.Errorf("want %s on the wire, got body: %s", want, body) + } + } + for _, unwanted := range tc.absent { + if strings.Contains(body, unwanted) { + t.Errorf("want no %s on the wire, got body: %s", unwanted, body) + } + } + }) + } +} diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 56dbb7fd5..36f2234a5 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -87,6 +87,10 @@ func openAIXHighCeiling(m string) bool { return false } +// OpenAIDisableEffort turns thinking off on the wire. It is not llms.ReasoningNone, +// which is the empty string and instead omits the field. +const OpenAIDisableEffort = "none" + // OpenAIAcceptsCustomTemperature reports whether a reasoning model takes a // temperature other than the default, so the caller's value is not overwritten // on a model that honors it. From 74419cd8c96fcc23a48b62ce328f0c7139126a44 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 15:43:14 +0700 Subject: [PATCH 069/618] fix(ollama): send the thinking switch instead of leaving it to the server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The adapter read Message.Thinking off the response but never set ChatRequest.Think, so the field never reached the wire and the server applied its own default: WithReasoningDisabled() was a silent no-op on every Ollama model that thinks. The reasoning config now maps onto the field. An explicit disable travels as false; a level Ollama accepts (low, medium, high, max) travels as itself; a level it does not accept, such as xhigh, falls back to plain on rather than inventing a mapping onto a scale we cannot verify. Saying nothing still omits the field. Verified by mutation: dropping the field again reddens all four rows. The package's failing set is unchanged from base — the five cassette misses predate this branch. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/ollama/ollamallm.go | 14 ++++++++ llms/ollama/think_request_test.go | 60 +++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 llms/ollama/think_request_test.go diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 88c26c3fa..096cdec95 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -291,6 +291,19 @@ func (o *LLM) convertToolCall(toolCall llms.ToolCall) (api.ToolCall, error) { return tc, nil } +func resolveThink(opts llms.CallOptions) *api.ThinkValue { + switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningDefault leaves the field unset + case llms.ReasoningOff: + return &api.ThinkValue{Value: false} + case llms.ReasoningOn: + if level := (&api.ThinkValue{Value: string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))}); level.IsValid() { + return level + } + return &api.ThinkValue{Value: true} + } + return nil +} + // createChatRequest creates a chat request with the given parameters. func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms.CallOptions) (*api.ChatRequest, error) { format, err := o.resolveFormat(opts) @@ -313,6 +326,7 @@ func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms. Options: ollamaOptions, Stream: &stream, Tools: make(api.Tools, len(opts.Tools)), + Think: resolveThink(opts), } keepAlive := o.options.keepAlive diff --git a/llms/ollama/think_request_test.go b/llms/ollama/think_request_test.go new file mode 100644 index 000000000..8f0c71249 --- /dev/null +++ b/llms/ollama/think_request_test.go @@ -0,0 +1,60 @@ +package ollama + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func captureChatRequest(t *testing.T, opts ...llms.CallOption) map[string]any { + t.Helper() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + _, _ = w.Write([]byte(`{"model":"glm-5","message":{"role":"assistant","content":"ok"},` + + `"done":true,"done_reason":"stop"}` + "\n")) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("glm-5")) + require.NoError(t, err) + + _, err = llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + require.NoError(t, err) + + var got map[string]any + require.NoError(t, json.Unmarshal(body, &got)) + return got +} + +func TestThinkReachesTheWire(t *testing.T) { + t.Parallel() + + t.Run("disabled reasoning is sent, not left to the server", func(t *testing.T) { + t.Parallel() + require.Equal(t, false, captureChatRequest(t, llms.WithReasoningDisabled())["think"]) + }) + + t.Run("a level ollama accepts travels as itself", func(t *testing.T) { + t.Parallel() + require.Equal(t, "low", captureChatRequest(t, llms.WithReasoning(llms.ReasoningLow, 0))["think"]) + }) + + t.Run("a level ollama does not accept falls back to plain on", func(t *testing.T) { + t.Parallel() + require.Equal(t, true, captureChatRequest(t, llms.WithReasoning(llms.ReasoningXHigh, 0))["think"]) + }) + + t.Run("saying nothing leaves the field off the wire", func(t *testing.T) { + t.Parallel() + require.NotContains(t, captureChatRequest(t), "think") + }) +} From f012dce6e4b65df4d0d411f852622ced7033b1a1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 15:44:25 +0700 Subject: [PATCH 070/618] fix(cache): let the partial answer through when the model reports truncation Adapters return the response together with the truncation error so the caller can keep what arrived. The cache wrapper dropped it, so anyone generating through the cache got a bare error and lost the partial answer. The wrapper now forwards both. A failed generation is still not cached. Verified by mutation: restoring the discard reddens the new test. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/cache/cache.go | 2 +- llms/cache/truncation_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 llms/cache/truncation_test.go diff --git a/llms/cache/cache.go b/llms/cache/cache.go index 137082a92..19b105a29 100644 --- a/llms/cache/cache.go +++ b/llms/cache/cache.go @@ -77,7 +77,7 @@ func (c *Cacher) GenerateContent(ctx context.Context, messages []llms.MessageCon response, err := c.llm.GenerateContent(ctx, messages, options...) if err != nil { - return nil, err + return response, err } c.cache.Put(ctx, key, response) diff --git a/llms/cache/truncation_test.go b/llms/cache/truncation_test.go new file mode 100644 index 000000000..6d8a358c1 --- /dev/null +++ b/llms/cache/truncation_test.go @@ -0,0 +1,29 @@ +package cache + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestPartialAnswerTravelsWithTheError(t *testing.T) { + t.Parallel() + + partial := &llms.ContentResponse{Choices: []*llms.ContentChoice{{ + Content: "half an answ", + StopReason: "length", + Truncated: true, + }}} + llm := newMockLLM(partial, llms.NewError(llms.ErrCodeTruncated, "", "stopped at the output token limit")) + backend := newMockCache() + + resp, err := New(llm, backend).GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + require.Error(t, err) + require.NotNil(t, resp, "the partial answer must reach the caller alongside the error") + require.Equal(t, "half an answ", resp.Choices[0].Content) + require.True(t, resp.Choices[0].Truncated) + require.Zero(t, backend.puts, "a failed generation must not be cached") +} From ce86d2c1b35366eefa1b74a21d5e928d12d4174e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 15:46:00 +0700 Subject: [PATCH 071/618] fix(mistral): report streaming failures to the callback handler The non-streaming path told the handler about every failure; the streaming path told it only about a failure to open the stream. A callback error, a chunk carrying an error, and a truncation refusal all returned silently, so a handler watching for model errors saw nothing on the streaming path. All three now notify the handler before returning, matching the non-streaming path. Verified by mutation: dropping the notification on the truncation path reddens the new test. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 3 ++ llms/mistral/stream_callbacks_test.go | 42 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 llms/mistral/stream_callbacks_test.go diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index eda0f8b65..17379477d 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -239,14 +239,17 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C } } if err := streaming.CallWithText(ctx, callOptions.StreamingFunc, chunkStr); err != nil { + m.CallbacksHandler.HandleLLMError(ctx, err) return langchainContentResponse, err } } else { + m.CallbacksHandler.HandleLLMError(ctx, chatResChunk.Error) return langchainContentResponse, chatResChunk.Error } } if err := llms.CheckTruncation(langchainContentResponse, *callOptions); err != nil { + m.CallbacksHandler.HandleLLMError(ctx, err) return langchainContentResponse, err } diff --git a/llms/mistral/stream_callbacks_test.go b/llms/mistral/stream_callbacks_test.go new file mode 100644 index 000000000..36cc0cee9 --- /dev/null +++ b/llms/mistral/stream_callbacks_test.go @@ -0,0 +1,42 @@ +package mistral + +import ( + "context" + "testing" + + "github.com/vxcontrol/langchaingo/callbacks" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type errorRecorder struct { + callbacks.SimpleHandler + errs []error +} + +func (r *errorRecorder) HandleLLMError(_ context.Context, err error) { + r.errs = append(r.errs, err) +} + +func TestStreamingErrorsReachTheCallbackHandler(t *testing.T) { + t.Parallel() + + model := streamingModelWithTrailingChunk(t) + rec := &errorRecorder{} + model.CallbacksHandler = rec + + sink := func(_ context.Context, _ streaming.Chunk) error { return nil } + _, err := model.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(sink), llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("a truncated stream with WithFailOnTruncation must fail") + } + + if len(rec.errs) == 0 { + t.Fatal("the streaming path must report its error to the handler, as the non-streaming path does") + } + if rec.errs[len(rec.errs)-1] == nil { + t.Error("the handler must receive the error itself, not nil") + } +} From 4533e35c3075daa98581a5f8547cdc4a0c64a1f1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 15:58:02 +0700 Subject: [PATCH 072/618] fix(bedrock): keep the thinking field on a signature-only block MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaying an assistant turn through InvokeModel dropped "thinking" whenever the block carried a signature and no text, because the union content struct tags the field omitempty. The primary Anthropic door had already been given the opposite contract; this door kept the old one and the turn came back rejected. The field is now emitted unconditionally for thinking blocks only, so text, image, tool_use and tool_result blocks stay as they were — dropping omitempty outright would have put an empty thinking field on every one of them. Verified by mutation: removing the marshaller reddens the signature-only test. The package's failing set is unchanged from base at 25 — those need AWS credentials. PAGI-132 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 11 +++++ .../bedrockclient/thinking_replay_test.go | 45 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 llms/bedrock/internal/bedrockclient/thinking_replay_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 38d62f513..9aea1a0f7 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -58,6 +58,17 @@ type anthropicTextGenerationInputContent struct { CacheControl *anthropicCacheControl `json:"cache_control,omitempty"` } +func (c anthropicTextGenerationInputContent) MarshalJSON() ([]byte, error) { + type alias anthropicTextGenerationInputContent + if c.Type != "thinking" { + return json.Marshal(alias(c)) + } + return json.Marshal(struct { + alias + Thinking string `json:"thinking"` + }{alias: alias(c), Thinking: c.Thinking}) +} + type anthropicCacheControl struct { Type string `json:"type"` TTL string `json:"ttl,omitempty"` diff --git a/llms/bedrock/internal/bedrockclient/thinking_replay_test.go b/llms/bedrock/internal/bedrockclient/thinking_replay_test.go new file mode 100644 index 000000000..818580c20 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/thinking_replay_test.go @@ -0,0 +1,45 @@ +package bedrockclient + +import ( + "encoding/json" + "strings" + "testing" +) + +func TestSignatureOnlyThinkingBlockKeepsItsField(t *testing.T) { + t.Parallel() + + body, err := json.Marshal(anthropicTextGenerationInputContent{ + Type: "thinking", + Signature: "sig-abc", + }) + if err != nil { + t.Fatalf("marshal: %v", err) + } + if !strings.Contains(string(body), `"thinking":""`) { + t.Errorf("a signature-only thinking block must still carry the field, got %s", body) + } + if !strings.Contains(string(body), `"signature":"sig-abc"`) { + t.Errorf("the signature must survive, got %s", body) + } +} + +func TestOtherBlocksDoNotGainAThinkingField(t *testing.T) { + t.Parallel() + + for _, blockType := range []string{"text", "image", "tool_use", "tool_result"} { + t.Run(blockType, func(t *testing.T) { + t.Parallel() + body, err := json.Marshal(anthropicTextGenerationInputContent{ + Type: blockType, + Text: "hi", + }) + if err != nil { + t.Fatalf("marshal: %v", err) + } + if strings.Contains(string(body), `"thinking"`) { + t.Errorf("a %s block must not carry a thinking field, got %s", blockType, body) + } + }) + } +} From 38298a424982cc1db53937d7992474473308c85c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 15:59:58 +0700 Subject: [PATCH 073/618] fix(reasoning): stop offering adaptive thinking to generations that predate it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ResolveClaudeAdaptive sent the caller's preference straight through for any model the reasoning-kind table does not enumerate, and legacy Claude generations are exactly that. Both Bedrock doors already guarded the call site, so the primary Anthropic door was the one left forwarding thinking.type=adaptive to a model that answers it with a 400: claude-3-5-sonnet-latest with WithAdaptiveReasoning. The guard now lives in the predicate, so every door gets it from one place. The table row that claimed claude-3-5-haiku was an unknown literal was wrong on its own terms — the identifier matches the pre-adaptive list — so it now pins the downgrade, and an actually unknown name covers the pass-through it meant to test. Verified by mutation: removing the guard reddens two rows. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 3 +++ llms/reasoning/claude_capability_test.go | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 2243a9f24..8a7625078 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -197,6 +197,9 @@ func ClaudeSupportsStructuredOutput(model string) bool { // So a currently-accepted call keeps its mechanism; only a currently-rejected // (400) combination is redirected to the mechanism the model accepts. func ResolveClaudeAdaptive(model string, adaptivePreferred bool) bool { + if ClaudePredatesAdaptive(model) { + return false + } switch ClaudeReasoningKindFor(model) { case ClaudeReasoningAdaptiveOnly: return true diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 9df07d1f2..4ebfa8788 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -83,9 +83,12 @@ func TestResolveClaudeAdaptive(t *testing.T) { // Dual: caller preference honored both ways (unchanged). {"claude-opus-4-6", true, true, "adaptive on T2 honored"}, {"claude-opus-4-6", false, false, "budget on T2 honored"}, + {"claude-3-5-haiku", true, false, "adaptive on pre-adaptive downgrades"}, + {"claude-3-5-haiku", false, false, "budget on pre-adaptive stays"}, + {"claude-3-5-sonnet-latest", true, false, "same for the dated alias"}, // Unknown: literal pass-through (unchanged). - {"claude-3-5-haiku", true, true, "adaptive on unknown literal"}, - {"claude-3-5-haiku", false, false, "budget on unknown literal"}, + {"claude-future-9", true, true, "adaptive on unknown literal"}, + {"claude-future-9", false, false, "budget on unknown literal"}, } for _, tc := range cases { if got := ResolveClaudeAdaptive(tc.model, tc.preferAda); got != tc.want { From 6a90de34cd40311ebe06a9aecf2bacbb2a6b2a29 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 16:02:32 +0700 Subject: [PATCH 074/618] fix(llms): stop the hint claiming a model is classified when it is not MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Known is documented as "this model is explicitly classified; when false the remaining fields are best-effort and the UI should offer all controls". An OpenAI model that reasons but is absent from the capability table took a branch that set Known anyway and left Efforts nil, so a caller could not tell "no effort levels" from "levels unknown" — gpt-5.3 reported itself as classified with nothing in it. That branch now leaves Known false, and a classified OpenAI model reports the mechanism it actually takes on the wire, an effort level, instead of leaving it Unknown alongside a full effort list. The test row pinning gpt-5.5 as mechanism-Unknown described the gap rather than a decision, so it now pins the mechanism and an unclassified name covers Unknown. Verified by mutation: restoring either half reddens the suite. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 2 +- llms/reasoning_support_test.go | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index e6d4c0118..0f4f2c135 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -123,6 +123,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { Known: true, CannotDisable: !caps.CanDisable, Efforts: toReasoningEfforts(caps.Efforts), + Mechanism: ReasoningMechanismAdaptive, // DefaultOn is per-model on the GPT-5.x line (some default off) — leave unknown. } } @@ -130,7 +131,6 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if p == reasoning.ProviderOpenAI && reasoning.IsReasoningModel(model) { return ReasoningSupport{ Supported: true, - Known: true, CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, } } diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 0326bf8dd..70d1659a5 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -148,7 +148,20 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } } eq(t, "gpt-5.5 Mechanism", - ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI).Mechanism, ReasoningMechanismUnknown) + ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI).Mechanism, ReasoningMechanismAdaptive) + eq(t, "unclassified model Mechanism", + ReasoningSupportFor("gpt-5.3", reasoning.ProviderOpenAI).Mechanism, ReasoningMechanismUnknown) + }) + + t.Run("a model outside the capability table is not reported as classified", func(t *testing.T) { + classified := ReasoningSupportFor("gpt-5.5", reasoning.ProviderOpenAI) + eq(t, "gpt-5.5 Known", classified.Known, true) + eq(t, "gpt-5.5 Efforts present", len(classified.Efforts) > 0, true) + + unclassified := ReasoningSupportFor("gpt-5.3", reasoning.ProviderOpenAI) + eq(t, "gpt-5.3 Supported", unclassified.Supported, true) + eq(t, "gpt-5.3 Known", unclassified.Known, false) + eq(t, "gpt-5.3 Efforts empty", len(unclassified.Efforts), 0) }) t.Run("OpenAI effort set is model-dependent", func(t *testing.T) { From a991ddacb78ad8caf8f660333919f587fecbbae8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 16:03:46 +0700 Subject: [PATCH 075/618] fix(reasoning): keep image and embedding models out of the reasoning guess The hint reads a family prefix and asks only whether the generation predates reasoning, so any gpt- or gemini- name that is not an older generation came back as a likely reasoner. gpt-image-1 and gemini-embedding-001 both did, and a form built on the hint offered thinking controls for a model that generates pictures or vectors. A name that marks a different modality now answers no before the family prefixes are consulted. Only the two reachable cases are matched; the rest of the non-text catalogue already falls out on the prefixes themselves. Verified by mutation: removing the guard reddens the new table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/detect_hint.go | 8 ++++++++ llms/reasoning/detect_hint_test.go | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index 4517ae1b1..cf443a7f8 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -18,6 +18,10 @@ func LikelyReasoningModel(model string) bool { m = m[idx+1:] } + if namesNonTextModality(m) { + return false + } + switch { case strings.HasPrefix(m, "gpt-"): return !openAIPreReasoning(m) @@ -31,6 +35,10 @@ func LikelyReasoningModel(model string) bool { return false } +func namesNonTextModality(m string) bool { + return strings.Contains(m, "embedding") || strings.Contains(m, "image") +} + // openAIPreReasoning matches the GPT generations below the GPT-5 line, where // reasoning starts. func openAIPreReasoning(m string) bool { diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index 2a8d823b8..0d444981c 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -41,3 +41,24 @@ func TestLikelyReasoningModel(t *testing.T) { } } } + +func TestNonTextModalitiesAreNotGuessedAsReasoning(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"gpt-image-1", false}, + {"gemini-embedding-001", false}, + {"openai/gpt-image-1", false}, + {"gpt-5.5", true}, + {"gemini-2.5-flash", true}, + {"claude-opus-4-6", true}, + {"o3", true}, + } { + if got := LikelyReasoningModel(tc.model); got != tc.want { + t.Errorf("LikelyReasoningModel(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} From 540fb3bf7bbe104adbfe751856107417c9ad805f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 16:05:13 +0700 Subject: [PATCH 076/618] fix(llms): ask the resolver whether Claude thinking can be disabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The hint re-derived provider policy instead of using it: any provider other than Anthropic was treated as rejecting the Claude disable mechanism, so the zero value — a caller that has not said which door it is on — was answered as if it were Bedrock. Sonnet 5 reported itself as impossible to disable even though the Anthropic door disables it. ResolveOff already takes the provider and is documented as the single decision point every adapter shares, so the hint now reads its verdict directly, the way the OpenAI and Gemini branches beside it already do. Fable 5 still reports always-on everywhere, because the resolver says so on every provider. Verified by mutation: restoring the provider guess reddens the new table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 13 +------------ llms/reasoning_support_test.go | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 0f4f2c135..1d8521a4b 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -80,17 +80,6 @@ func lookupReasoningOverride(model string) (ReasoningSupport, bool) { return ReasoningSupport{}, false } -func claudeCannotDisable(model string, p reasoning.Provider) bool { - switch reasoning.ResolveOff(model, p) { - case reasoning.OffUnsupported: - return true - case reasoning.OffDisableClaude: - return p != reasoning.ProviderAnthropic - default: - return false - } -} - func boolPtr(b bool) *bool { return &b } // ReasoningSupportFor returns the reasoning-control hint for a model on a @@ -109,7 +98,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { // Derive from the same resolver the wire uses so the hint tracks // provider differences (e.g. Sonnet 5 is disablable on Anthropic but // always on, hence not disablable, on Bedrock). - CannotDisable: claudeCannotDisable(model, p), + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, RejectsSampling: reasoning.ClaudeRejectsSampling(model), Efforts: toReasoningEfforts(reasoning.ClaudeEffortsFor(model)), Mechanism: claudeMechanism(reasoning.ClaudeReasoningKindFor(model)), diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 70d1659a5..6b52972f0 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -310,3 +310,25 @@ func TestNonOpenAIModelsKeepTheirOwnBranch(t *testing.T) { } } } + +func TestCannotDisableFollowsTheResolverOnEveryProvider(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + p reasoning.Provider + want bool + }{ + {"claude-sonnet-5", reasoning.ProviderAnthropic, false}, + {"claude-sonnet-5", reasoning.ProviderBedrock, true}, + {"claude-sonnet-5", reasoning.ProviderUnknown, false}, + {"claude-fable-5", reasoning.ProviderAnthropic, true}, + {"claude-fable-5", reasoning.ProviderBedrock, true}, + {"claude-fable-5", reasoning.ProviderUnknown, true}, + {"claude-opus-4-6", reasoning.ProviderUnknown, false}, + } { + if got := ReasoningSupportFor(tc.model, tc.p).CannotDisable; got != tc.want { + t.Errorf("CannotDisable(%q, provider=%d) = %v, want %v", tc.model, tc.p, got, tc.want) + } + } +} From 03819285efaa962d6b8b51e46f9215d5a60e0432 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 16:08:27 +0700 Subject: [PATCH 077/618] fix(anthropic,bedrock): keep temperature off a model that refuses sampling Budget thinking pins temperature to 1.0, and both doors did it unconditionally. On the Bedrock door the refusal guard runs first and is then undone three lines later by the budget branch; on the primary door there is no guard on that branch at all. Claude Mythos Preview is the model this reaches: it is listed as refusing temperature outright yet accepts budget thinking, so a budget request handed it the one parameter it rejects. The sampling-refusing models beside it are adaptive-only and never take this branch. Both doors now leave temperature unset for those models and keep the pin everywhere else, along with the doubled max-tokens the budget branch sets. Verified by mutation on each door: removing either guard reddens its test. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 27 ++++++++++++++++ llms/anthropic/anthropicllm.go | 3 ++ .../bedrockclient/provider_anthropic.go | 3 ++ .../provider_anthropic_reasoning_test.go | 32 +++++++++++++++++++ 4 files changed, 65 insertions(+) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index f660a7403..68a2a4573 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1281,3 +1281,30 @@ func TestAnthropic_ThinkingReplayNeverOmitsRequiredField(t *testing.T) { require.Equal(t, "sig", emitted[0]["signature"]) }) } + +func TestBudgetThinkingDoesNotPinTemperatureOnAModelThatRejectsIt(t *testing.T) { + t.Parallel() + + t.Run("a model that rejects sampling gets no temperature", func(t *testing.T) { + t.Parallel() + payload, _ := captureMessagesRequestModel(t, "claude-mythos-preview", + llms.WithReasoning(llms.ReasoningMedium, 2048)) + + thinking, ok := payload["thinking"].(map[string]any) + require.True(t, ok, "budget thinking must reach the wire, got %v", payload) + require.Equal(t, "enabled", thinking["type"]) + require.NotContains(t, payload, "temperature", + "a model listed as rejecting sampling must not be sent temperature, got %v", payload) + }) + + t.Run("a model that accepts sampling still gets the required pin", func(t *testing.T) { + t.Parallel() + payload, _ := captureMessagesRequestModel(t, "claude-opus-4-6", + llms.WithReasoning(llms.ReasoningMedium, 2048)) + + thinking, ok := payload["thinking"].(map[string]any) + require.True(t, ok, "budget thinking must reach the wire, got %v", payload) + require.Equal(t, "enabled", thinking["type"]) + require.InDelta(t, 1.0, payload["temperature"], 0.0001) + }) +} diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index fb8927eb3..a4b3bcf38 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -276,6 +276,9 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag topP = nil case thinking != nil && thinking.Type == "enabled" && thinking.Budget > 0: temperature = getFloatPointer(1.0) + if reasoning.ClaudeRejectsSampling(model) { + temperature = nil + } topP = nil maxTokens = max(thinking.Budget*2, maxTokens) // 2x the budget for thinking case reasoning.ClaudeRejectsSampling(model): diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 9aea1a0f7..27966afff 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -743,6 +743,9 @@ func applyAnthropicReasoning( } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. input.Temperature = 1.0 + if reasoning.ClaudeRejectsSampling(modelID) { + input.Temperature = 0 + } input.TopP = 0 input.TopK = 0 } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index 83cc74697..128bce538 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -271,3 +271,35 @@ func TestApplyAnthropicReasoning_DropsTopPWhenBothSamplingParamsSet(t *testing.T }) } } + +func TestApplyAnthropicReasoning_BudgetKeepsTheSamplingRefusal(t *testing.T) { + t.Parallel() + + input := anthropicTextGenerationInput{MaxTokens: 4096, Temperature: 0.8, TopP: 0.9, TopK: 40} + applyAnthropicReasoning(&input, + &llms.ReasoningConfig{Effort: llms.ReasoningMedium, Tokens: 2048}, + "anthropic.claude-mythos-preview-v1:0", 4096) + + fields := marshalAnthropicInput(t, input) + + thinking, _ := fields["thinking"].(map[string]any) + assert.Equal(t, "enabled", thinking["type"], "budget thinking must reach the wire") + _, hasTemperature := fields["temperature"] + assert.False(t, hasTemperature, + "a model listed as rejecting sampling must not be handed temperature back by the budget path") +} + +func TestApplyAnthropicReasoning_BudgetStillPinsWhereSamplingIsAccepted(t *testing.T) { + t.Parallel() + + input := anthropicTextGenerationInput{MaxTokens: 4096, Temperature: 0.8, TopP: 0.9, TopK: 40} + applyAnthropicReasoning(&input, + &llms.ReasoningConfig{Effort: llms.ReasoningMedium, Tokens: 2048}, + "anthropic.claude-opus-4-6-v1:0", 4096) + + fields := marshalAnthropicInput(t, input) + + thinking, _ := fields["thinking"].(map[string]any) + assert.Equal(t, "enabled", thinking["type"]) + assert.InDelta(t, 1.0, fields["temperature"], 0.0001) +} From 23113e7d864cc8c2323e1aa6b1a83d99e89b20f3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 16:11:18 +0700 Subject: [PATCH 078/618] fix(anthropic): report truncation on the legacy completions path The legacy text-completions path built its choice from the text alone. The client parsed stop_reason off the response and then threw it away, so the choice carried no stop reason, was never marked truncated, and WithFailOnTruncation returned success on an answer cut at the token limit. The client now carries the stop reason through, and the path derives Truncated from it and runs the same truncation check the messages path runs. The partial answer travels with the error, as everywhere else. Verified by mutation: dropping either half reddens the new tests. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 7 ++- .../anthropicclient/anthropicclient.go | 6 +- llms/anthropic/truncation_test.go | 60 +++++++++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index a4b3bcf38..6f32f419b 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -171,10 +171,15 @@ func generateCompletionsContent(ctx context.Context, o *LLM, messages []llms.Mes resp := &llms.ContentResponse{ Choices: []*llms.ContentChoice{ { - Content: result.Text, + Content: result.Text, + StopReason: result.StopReason, + Truncated: llms.IsTruncated(result.StopReason), }, }, } + if err := llms.CheckTruncation(resp, *opts); err != nil { + return resp, err + } return resp, nil } diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index f6b572dea..be675b8b4 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -125,7 +125,8 @@ type CompletionRequest struct { // Completion is a completion. type Completion struct { - Text string `json:"text"` + Text string `json:"text"` + StopReason string `json:"stop_reason"` } // CreateCompletion creates a completion. @@ -144,7 +145,8 @@ func (c *Client) CreateCompletion(ctx context.Context, r *CompletionRequest) (*C return nil, err } return &Completion{ - Text: resp.Completion, + Text: resp.Completion, + StopReason: resp.StopReason, }, nil } diff --git a/llms/anthropic/truncation_test.go b/llms/anthropic/truncation_test.go index b1851237c..de6ebb427 100644 --- a/llms/anthropic/truncation_test.go +++ b/llms/anthropic/truncation_test.go @@ -81,3 +81,63 @@ func TestFailOnTruncationKeepsThePartialAnswer(t *testing.T) { t.Fatalf("without the option the same response must stay a success: %v", err) } } + +func legacyCompletionsLLM(t *testing.T, stopReason string) *LLM { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = fmt.Fprintf(w, `{"completion":"half an ans","model":"claude-2.1","stop_reason":%q}`, stopReason) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("unit-test-token"), + WithModel("claude-2.1"), WithLegacyTextCompletionsAPI()) + if err != nil { + t.Fatalf("New: %v", err) + } + return llm +} + +func TestLegacyCompletionsReportTruncation(t *testing.T) { + t.Parallel() + + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + t.Run("the stop reason reaches the choice", func(t *testing.T) { + t.Parallel() + resp, err := legacyCompletionsLLM(t, "max_tokens").GenerateContent(context.Background(), msgs) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if got := resp.Choices[0].StopReason; got != "max_tokens" { + t.Errorf("StopReason = %q, want %q", got, "max_tokens") + } + if !resp.Choices[0].Truncated { + t.Error("a max_tokens stop must mark the choice truncated") + } + }) + + t.Run("finishing on its own is not truncation", func(t *testing.T) { + t.Parallel() + resp, err := legacyCompletionsLLM(t, "stop_sequence").GenerateContent(context.Background(), msgs) + if err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if resp.Choices[0].Truncated { + t.Error("a stop_sequence stop must not mark the choice truncated") + } + }) + + t.Run("failing on truncation keeps the partial answer", func(t *testing.T) { + t.Parallel() + resp, err := legacyCompletionsLLM(t, "max_tokens").GenerateContent(context.Background(), msgs, + llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("WithFailOnTruncation must fail on a truncated legacy completion") + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Errorf("the partial answer must travel with the error, got %v", resp) + } + }) +} From 100ec0ea357818f82c77ea3f08a42d553d03d688 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 16:13:12 +0700 Subject: [PATCH 079/618] fix(bedrock): pin temperature for budget thinking only on Claude The Converse budget branch serves Claude and the non-Claude reasoning models alike, and it pinned temperature to 1.0 and dropped top_p for all of them. That pin is a Claude requirement; gpt-oss and kimi have no such rule, so a caller asking those models for 0.2 got 1.0 and lost top_p as well. The pin now applies to Anthropic model ids only. Verified by mutation: restoring the unconditional pin reddens the non-Claude row. PAGI-132 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 6 ++-- .../bedrockclient_converse_test.go | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 0d0535c8f..b0acbbf55 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -173,8 +173,10 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti additionalModelFields.OutputConfig = &converseOutputConfig{Effort: string(effort)} } // Budget thinking requires temperature=1.0 and rejects top_p. - inferenceConfig.Temperature = aws.Float32(1.0) - inferenceConfig.TopP = nil + if isAnthropicModelID(input.ModelID) { + inferenceConfig.Temperature = aws.Float32(1.0) + inferenceConfig.TopP = nil + } } } switch { diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index e2457c3b5..c4bcae42f 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1130,3 +1130,37 @@ func TestConverseMaxTokensSaturatesInsteadOfWrapping(t *testing.T) { }) } } + +func TestConverseBudgetPinsTemperatureOnlyForClaude(t *testing.T) { + t.Parallel() + + build := func(t *testing.T, model string) *types.InferenceConfiguration { + t.Helper() + temp, topP, maxTokens := 0.2, 0.9, 8192 + got, err := NewConverseClient(&MockBedrockRuntimeClient{}).buildConverseInput(&ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + Temperature: &temp, + TopP: &topP, + MaxTokens: &maxTokens, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 2048}, + }) + require.NoError(t, err) + require.NotNil(t, got.InferenceConfig) + return got.InferenceConfig + } + + t.Run("a Claude model takes the pin the mechanism requires", func(t *testing.T) { + t.Parallel() + cfg := build(t, "us.anthropic.claude-sonnet-4-5-v1:0") + require.NotNil(t, cfg.Temperature) + assert.InDelta(t, 1.0, *cfg.Temperature, 0.0001) + }) + + t.Run("a non-Claude reasoning model keeps the caller's sampling", func(t *testing.T) { + t.Parallel() + cfg := build(t, "openai.gpt-oss-120b-1:0") + require.NotNil(t, cfg.Temperature, "the caller's temperature must survive") + assert.InDelta(t, 0.2, *cfg.Temperature, 0.0001) + }) +} From 3dc397fa3cf621611c0c2b31fe80de0e5a258373 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:03:02 +0700 Subject: [PATCH 080/618] docs(llms): mark the context-size helpers deprecated The lookup table behind GetModelContextSize knows GPT-3.5, GPT-4, GPT-4o and the legacy completion models. Everything released since falls through to the 2048 default, which is orders of magnitude below the real window, and CalculateMaxTokens divides a budget out of that same number. Neither has a caller inside this module; both are public surface that a consumer would use to size a splitter and get a wrong answer. Both now carry a deprecation notice pointing at the provider or the caller's own configuration. Behaviour is unchanged. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/count_tokens.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/llms/count_tokens.go b/llms/count_tokens.go index 844a3a1ab..8b85e98bd 100644 --- a/llms/count_tokens.go +++ b/llms/count_tokens.go @@ -62,6 +62,11 @@ var modelToContextSize = map[string]int{ // GetModelContextSize gets the max number of tokens for a language model. If the model // name isn't recognized the default value 2048 is returned. +// +// Deprecated: the table it reads covers only GPT-3.5, GPT-4, GPT-4o and the +// legacy completion models, so every current model falls through to 2048 — +// orders of magnitude below its real window. Ask the provider for the window, +// or carry it in your own configuration. func GetModelContextSize(model string) int { contextSize, ok := modelToContextSize[model] if !ok { @@ -84,6 +89,9 @@ func CountTokens(model, text string) int { } // CalculateMaxTokens calculates the max number of tokens that could be added to a text. +// +// Deprecated: it derives the budget from GetModelContextSize, which no longer +// recognizes current models. func CalculateMaxTokens(model, text string) int { return GetModelContextSize(model) - CountTokens(model, text) } From f2d908299d57bd8cce0c794d3a94ac3a8a2c6f64 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:19:14 +0700 Subject: [PATCH 081/618] fix(llms): stop rewriting a temperature the caller set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetTemperature replaced the caller's value with 1.0 for any model the reasoning catalogue recognises, and it did so only when a value had been set: with nothing set it returned the package default of 0.0 to the same model. If the pin were a real requirement the unset path would need it most, so the guard was inverted against its own justification — it overrode the caller and left the default alone. The getter now returns what the caller asked for. Providers that genuinely require a fixed temperature enforce it at their own door, where the requirement is known: the Anthropic and Bedrock doors already do exactly that for budget thinking. This getter feeds vertex, palm, eight Bedrock providers, anthropic, huggingface, ollama and mistral, so an ollama caller asking deepseek-r1 for 0.2 now gets 0.2. Verified by mutation: reintroducing any model-keyed override reddens the table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/options.go | 7 ------- llms/options_test.go | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/llms/options.go b/llms/options.go index 4670a658d..e6a627979 100644 --- a/llms/options.go +++ b/llms/options.go @@ -1,7 +1,6 @@ package llms import ( - "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" ) @@ -320,12 +319,6 @@ func (o *CallOptions) GetTemperature() float64 { if o.Temperature == nil { return DefaultTemperature } - // Reasoning models require temperature=1.0, but only when thinking is not - // explicitly disabled — an explicit WithReasoningDisabled() must let the - // user's temperature through, matching the OpenAI adapter's guard. - if reasoning.IsReasoningModel(o.GetModel()) && !o.Reasoning.IsDisabled() { - return 1.0 - } return *o.Temperature } diff --git a/llms/options_test.go b/llms/options_test.go index 12bd1bb7c..47ecfb59c 100644 --- a/llms/options_test.go +++ b/llms/options_test.go @@ -522,9 +522,9 @@ func TestGetTemperatureReasoningGuard(t *testing.T) { want float64 }{ { - name: "reasoning model without reasoning option is pinned to 1.0", + name: "a reasoning model gets the caller's temperature, not a rewritten one", model: reasoningModel, - want: 1.0, + want: 0.2, }, { name: "reasoning model with explicit disable honors user temperature", @@ -1180,3 +1180,16 @@ func TestWithReasoningDisabled(t *testing.T) { t.Error("disabled reasoning must not be IsEnabled") } } + +func TestGetTemperatureLeavesAnUnsetValueAtTheDefault(t *testing.T) { + t.Parallel() + + model := func(v string) *string { return &v } + for _, name := range []string{"o3-mini", "gpt-4.1", "deepseek-r1"} { + opts := llms.CallOptions{Model: model(name)} + if got := opts.GetTemperature(); got != llms.DefaultTemperature { + t.Errorf("%s: unset temperature = %v, want the package default %v", + name, got, llms.DefaultTemperature) + } + } +} From d218a66db5b55887b76726b02b80146510f027cb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:19:52 +0700 Subject: [PATCH 082/618] fix(mistral): close the generation on the streaming path too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The non-streaming path told the handler when a generation ended; the streaming path returned without a word, so a handler counting starts and ends saw an opening for every stream and a closing for none. The streaming path now emits the end callback on success, matching its sibling. It stays public surface only — nothing inside this module implements the handler outside the callbacks package. Verified by mutation: removing the call reddens the new test. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 2 ++ llms/mistral/stream_callbacks_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 17379477d..8471fbacb 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -253,6 +253,8 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C return langchainContentResponse, err } + m.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, langchainContentResponse) + return langchainContentResponse, nil } diff --git a/llms/mistral/stream_callbacks_test.go b/llms/mistral/stream_callbacks_test.go index 36cc0cee9..3a9408b6a 100644 --- a/llms/mistral/stream_callbacks_test.go +++ b/llms/mistral/stream_callbacks_test.go @@ -12,12 +12,17 @@ import ( type errorRecorder struct { callbacks.SimpleHandler errs []error + ends int } func (r *errorRecorder) HandleLLMError(_ context.Context, err error) { r.errs = append(r.errs, err) } +func (r *errorRecorder) HandleLLMGenerateContentEnd(_ context.Context, _ *llms.ContentResponse) { + r.ends++ +} + func TestStreamingErrorsReachTheCallbackHandler(t *testing.T) { t.Parallel() @@ -40,3 +45,25 @@ func TestStreamingErrorsReachTheCallbackHandler(t *testing.T) { t.Error("the handler must receive the error itself, not nil") } } + +func TestStreamingSuccessReachesTheCallbackHandler(t *testing.T) { + t.Parallel() + + model := streamingModelWithTrailingChunk(t) + rec := &errorRecorder{} + model.CallbacksHandler = rec + + sink := func(_ context.Context, _ streaming.Chunk) error { return nil } + if _, err := model.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(sink)); err != nil { + t.Fatalf("GenerateContent: %v", err) + } + + if rec.ends != 1 { + t.Errorf("the streaming path must close the generation once, as the non-streaming path does; got %d", rec.ends) + } + if len(rec.errs) != 0 { + t.Errorf("a successful stream must report no error, got %v", rec.errs) + } +} From bfc366bfff4880b47e16566560cbed967a0ad658 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:20:28 +0700 Subject: [PATCH 083/618] fix(reasoning): require a Google family before reading a name as Flash-Lite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The check matched the substring alone, so any model configured on the GoogleAI door whose name happened to contain flash-lite was treated as a Google model that leaves thinking off until asked. On that reading WithReasoningDisabled() returns success having sent nothing — a silent no-op on a model that may well think. A Gemini or Gemma family is now required. Every Google generation keeps the behaviour it had, including 3.x Flash-Lite, which the surrounding tests pin deliberately; only foreign names stop matching. Verified by mutation: restoring the bare substring reddens the new table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/detect_hint_test.go | 22 ++++++++++++++++++++++ llms/reasoning/gemini_capability.go | 6 +++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index 0d444981c..87734f6c3 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -62,3 +62,25 @@ func TestNonTextModalitiesAreNotGuessedAsReasoning(t *testing.T) { } } } + +func TestFlashLiteIsRecognisedOnlyWithinTheGoogleFamilies(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"gemini-2.5-flash-lite", true}, + {"gemini-3.1-flash-lite", true}, + {"gemini-3.5-flash-lite", true}, + {"gemma-4-flash-lite", true}, + {"models/gemini-2.5-flash-lite-preview-06-17", true}, + {"some-flash-lite-thing", false}, + {"llama-4-flash-lite", false}, + {"gemini-2.5-flash", false}, + } { + if got := GeminiThinkingOffByDefault(tc.model); got != tc.want { + t.Errorf("GeminiThinkingOffByDefault(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index ef84b4e4c..b810952fe 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -72,5 +72,9 @@ func GeminiCanDisable(model string) bool { // GeminiThinkingOffByDefault reports whether the model leaves thinking off until // asked, so omitting the thinking config already yields "off". func GeminiThinkingOffByDefault(model string) bool { - return strings.Contains(strings.ToLower(model), "flash-lite") + m := strings.ToLower(model) + if !strings.Contains(m, "flash-lite") { + return false + } + return strings.Contains(m, "gemini") || strings.Contains(m, "gemma") } From 5c7f33bd9c76c3e7fd23ffc02a89c9cc7f47370a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:22:25 +0700 Subject: [PATCH 084/618] fix(llms,bedrock): derive a missing max-tokens from one declared default Three numbers stood in for an unset max-tokens: the effort and budget helpers substituted 8192, the Bedrock InvokeModel door substituted 2048 before calling them, and the Converse door passed the zero straight through and got the 8192. One model and one config therefore produced different efforts and budgets depending on which door ran, and neither number was the package's own declared DefaultMaxTokens of 16384. The helpers now fall back to DefaultMaxTokens and the InvokeModel door stops substituting ahead of them, so every caller derives from the same number. The tests that spelled 8192 into their names and expectations now read it from the constant. Verified by mutation: restoring the door's own substitution reddens the parity test. PAGI-132 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 3 --- .../provider_anthropic_reasoning_test.go | 16 ++++++++++++++ llms/options.go | 4 ++-- llms/options_test.go | 22 +++++++++---------- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 27966afff..12e784b90 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -733,9 +733,6 @@ func applyAnthropicReasoning( } setBudget := func() { mt := maxTokens - if mt == 0 { - mt = 2048 - } if tokens := cfg.GetTokens(mt); tokens > 0 { input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index 128bce538..adba4e009 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -303,3 +303,19 @@ func TestApplyAnthropicReasoning_BudgetStillPinsWhereSamplingIsAccepted(t *testi assert.Equal(t, "enabled", thinking["type"]) assert.InDelta(t, 1.0, fields["temperature"], 0.0001) } + +func TestApplyAnthropicReasoning_UnsetMaxTokensUsesTheSharedDefault(t *testing.T) { + t.Parallel() + + cfg := &llms.ReasoningConfig{Effort: llms.ReasoningMedium} + input := anthropicTextGenerationInput{} + applyAnthropicReasoning(&input, cfg, "anthropic.claude-sonnet-4-5-v1:0", 0) + + fields := marshalAnthropicInput(t, input) + thinking, ok := fields["thinking"].(map[string]any) + require.True(t, ok, "budget thinking must reach the wire, got %v", fields) + + want := cfg.GetTokens(0) + assert.InDelta(t, float64(want), thinking["budget_tokens"], 0.5, + "an unset max-tokens must fall back to the same number every other caller gets") +} diff --git a/llms/options.go b/llms/options.go index e6a627979..6fd2f2ba2 100644 --- a/llms/options.go +++ b/llms/options.go @@ -135,7 +135,7 @@ func (r *ReasoningConfig) GetEffort(maxTokens int) ReasoningEffort { } if maxTokens <= 0 { - maxTokens = 8192 + maxTokens = DefaultMaxTokens } if r.Tokens > 0 { @@ -174,7 +174,7 @@ func (r *ReasoningConfig) GetTokens(maxTokens int) int { } if maxTokens <= 0 { - maxTokens = 8192 + maxTokens = DefaultMaxTokens } var tokens int diff --git a/llms/options_test.go b/llms/options_test.go index 47ecfb59c..c10b2cb23 100644 --- a/llms/options_test.go +++ b/llms/options_test.go @@ -840,14 +840,14 @@ func TestReasoningConfig_GetEffort(t *testing.T) { //nolint:funlen // table-driv expected: llms.ReasoningLow, }, { - name: "negative maxTokens uses default 8192", - config: &llms.ReasoningConfig{Tokens: 8192/3 + 10}, // Just above medium threshold for 8192 + name: "negative maxTokens uses the package default", + config: &llms.ReasoningConfig{Tokens: llms.DefaultMaxTokens/3 + 10}, // Just above the medium threshold maxTokens: -1, expected: llms.ReasoningHigh, }, { - name: "zero maxTokens uses default 8192", - config: &llms.ReasoningConfig{Tokens: 8192 / 5}, // Low for 8192 + name: "zero maxTokens uses the package default", + config: &llms.ReasoningConfig{Tokens: llms.DefaultMaxTokens / 5}, // Low maxTokens: 0, expected: llms.ReasoningLow, }, @@ -954,22 +954,22 @@ func TestReasoningConfig_GetTokens(t *testing.T) { //nolint:funlen // table-driv expected: -1, }, { - name: "negative maxTokens uses default 8192 for low effort", + name: "negative maxTokens uses the package default for low effort", config: &llms.ReasoningConfig{Effort: llms.ReasoningLow}, maxTokens: -10, - expected: max(8192/4, 1024), // Based on default 8192 + expected: max(llms.DefaultMaxTokens/4, 1024), }, { - name: "zero maxTokens uses default 8192 for high effort", + name: "zero maxTokens uses the package default for high effort", config: &llms.ReasoningConfig{Effort: llms.ReasoningHigh}, maxTokens: 0, - expected: max(8192/2, 4096), // Based on default 8192 + expected: max(llms.DefaultMaxTokens/2, 4096), }, { name: "negative maxTokens with explicit tokens", config: &llms.ReasoningConfig{Tokens: 7000}, maxTokens: -5, - expected: min(7000, 8192*2/3), // Using default 8192 as maxTokens + expected: min(7000, llms.DefaultMaxTokens*2/3), }, } @@ -1101,10 +1101,10 @@ func TestReasoningConfig_Integration(t *testing.T) { { name: "default maxTokens handling", config: &llms.ReasoningConfig{Effort: llms.ReasoningMedium}, - maxTokens: 0, // Should use default 8192 + maxTokens: 0, // Should use the package default expectedEnabled: true, expectedEffort: llms.ReasoningMedium, - expectedTokens: max(8192/3, 2048), // Based on default 8192 + expectedTokens: max(llms.DefaultMaxTokens/3, 2048), }, } From 2ab7977c19e00bcac7aceed0da6cf278facd51db Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:55:13 +0700 Subject: [PATCH 085/618] fix(bedrock): refuse the turns the primary Anthropic door already refuses Two conversations are rejected locally on the Anthropic door and were sent anyway on both Bedrock doors: one ending in an assistant turn on a model that does not take a prefill, and a forced tool choice combined with manual budget thinking. Each cost a round trip to come back as a documented 400. Both refusals now run once in the Bedrock entry point, ahead of the split between InvokeModel and Converse, so the two transports answer alike. The predicates are model-keyed, so a non-Claude id such as Amazon Nova passes through untouched. The two error types move to llms/reasoning, which both doors already import, and the anthropic package keeps its names as aliases so existing callers and their errors.As checks are unaffected. The prefill and forced-tool detectors move to llms beside the types they inspect, replacing the anthropic-private copies. Verified by mutation: removing the guard reddens all four rows. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 29 ++--------------- llms/anthropic/errors.go | 18 ++-------- llms/bedrock/bedrockllm.go | 19 +++++++++++ llms/bedrock/turn_limits_test.go | 56 ++++++++++++++++++++++++++++++++ llms/reasoning/errors_claude.go | 23 +++++++++++++ llms/turn.go | 28 ++++++++++++++++ 6 files changed, 132 insertions(+), 41 deletions(-) create mode 100644 llms/bedrock/turn_limits_test.go create mode 100644 llms/reasoning/errors_claude.go create mode 100644 llms/turn.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 6f32f419b..65d0f11d2 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -232,11 +232,11 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } } - if thinking != nil && thinking.Type == "enabled" && forcesToolUse(opts.ToolChoice) { + if thinking != nil && thinking.Type == "enabled" && llms.ForcesToolUse(opts.ToolChoice) { return nil, &ErrForcedToolUseWithThinking{Model: model} } - if reasoning.ClaudeRejectsAssistantPrefill(model) && anthropicHasAssistantPrefill(messages) { + if reasoning.ClaudeRejectsAssistantPrefill(model) && llms.HasAssistantPrefill(messages) { return nil, &ErrAssistantPrefillUnsupported{Model: model} } @@ -811,22 +811,6 @@ func handleHumanMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, e }, nil } -func forcesToolUse(choice any) bool { - forced := func(t string) bool { return t == "any" || t == "tool" } - switch c := choice.(type) { - case string: - return forced(c) - case llms.ToolChoice: - return forced(c.Type) - case *llms.ToolChoice: - return c != nil && forced(c.Type) - case map[string]any: - t, _ := c["type"].(string) - return forced(t) - } - return false -} - func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, error) { message := anthropicclient.ChatMessage{ Role: RoleAssistant, @@ -959,7 +943,7 @@ func applyAnthropicStructuredOutput( Reason: "model predates the output_config.format JSON Schema mode", } } - if anthropicHasAssistantPrefill(messages) { + if llms.HasAssistantPrefill(messages) { return nil, &llms.ErrStructuredOutputConflict{ Provider: providerAnthropic, Detail: "structured output is incompatible with assistant message prefilling", @@ -980,13 +964,6 @@ func applyAnthropicStructuredOutput( return cfg, nil } -func anthropicHasAssistantPrefill(messages []llms.MessageContent) bool { - if len(messages) == 0 { - return false - } - return messages[len(messages)-1].Role == llms.ChatMessageTypeAI -} - // validateAnthropicStructuredOutput validates the concatenation of all final text // blocks against the original schema, but only for a normal-final turn. A tool_use // or max_tokens/refusal turn is intermediate/aborted and is not validated. On a diff --git a/llms/anthropic/errors.go b/llms/anthropic/errors.go index d0206cd19..12a0c394d 100644 --- a/llms/anthropic/errors.go +++ b/llms/anthropic/errors.go @@ -1,10 +1,10 @@ package anthropic import ( - "fmt" "strings" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) // errorMapping represents a mapping from error patterns to error codes. @@ -82,21 +82,9 @@ func MapError(err error) error { // ErrAssistantPrefillUnsupported reports that the model rejects a conversation // ending with an assistant turn. -type ErrAssistantPrefillUnsupported struct{ Model string } - -func (e *ErrAssistantPrefillUnsupported) Error() string { - return fmt.Sprintf( - "anthropic: model %q does not support assistant message prefill; the conversation must end with a user message", - e.Model) -} +type ErrAssistantPrefillUnsupported = reasoning.ErrAssistantPrefillUnsupported // ErrForcedToolUseWithThinking reports the documented gap that manual (budget) // thinking accepts only tool_choice "auto" or "none": forcing a tool with "any" // or a named tool is rejected. Adaptive thinking has no such limit. -type ErrForcedToolUseWithThinking struct{ Model string } - -func (e *ErrForcedToolUseWithThinking) Error() string { - return fmt.Sprintf( - "anthropic: model %q runs manual thinking, which rejects a forced tool choice; use tool_choice auto or none", - e.Model) -} +type ErrForcedToolUseWithThinking = reasoning.ErrForcedToolUseWithThinking diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 6f54035bf..f45ac3e0f 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -11,6 +11,7 @@ import ( "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" + "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" @@ -108,6 +109,10 @@ func (l *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } + if err := checkAnthropicTurnLimits(&opts, messages); err != nil { + return nil, err + } + // Use Converse API if enabled if l.useConverseAPI { resp, err = l.generateContentWithConverseAPI(ctx, messages, opts) @@ -371,3 +376,17 @@ func (l *LLM) supportsCaching(modelID string) bool { } var _ llms.Model = (*LLM)(nil) + +func checkAnthropicTurnLimits(opts *llms.CallOptions, messages []llms.MessageContent) error { + model := opts.GetModel() + manualThinking := opts.Reasoning.ResolveMode() == llms.ReasoningOn && + !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) + if manualThinking && llms.ForcesToolUse(opts.ToolChoice) { + return &reasoning.ErrForcedToolUseWithThinking{Model: model} + } + + if reasoning.ClaudeRejectsAssistantPrefill(model) && llms.HasAssistantPrefill(messages) { + return &reasoning.ErrAssistantPrefillUnsupported{Model: model} + } + return nil +} diff --git a/llms/bedrock/turn_limits_test.go b/llms/bedrock/turn_limits_test.go new file mode 100644 index 000000000..a8d3c8329 --- /dev/null +++ b/llms/bedrock/turn_limits_test.go @@ -0,0 +1,56 @@ +package bedrock_test + +import ( + "context" + "errors" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func turnLimitMessages(last llms.ChatMessageType) []llms.MessageContent { + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + if last == llms.ChatMessageTypeAI { + msgs = append(msgs, llms.TextParts(llms.ChatMessageTypeAI, "half an ")) + } + return msgs +} + +func TestBedrockRefusesTheSameTurnsAsThePrimaryDoor(t *testing.T) { + t.Parallel() + + for _, converse := range []bool{false, true} { + name := "invoke-model" + opts := []bedrock.Option{} + if converse { + name = "converse" + opts = append(opts, bedrock.WithConverseAPI()) + } + + t.Run(name+"/assistant prefill is refused before the request", func(t *testing.T) { + t.Parallel() + llm := truncationLLMWithBody(t, `{}`, + append([]bedrock.Option{bedrock.WithModel("us.anthropic.claude-opus-4-6-v1:0")}, opts...)...) + _, err := llm.GenerateContent(context.Background(), turnLimitMessages(llms.ChatMessageTypeAI)) + var target *reasoning.ErrAssistantPrefillUnsupported + if !errors.As(err, &target) { + t.Errorf("want ErrAssistantPrefillUnsupported, got %v", err) + } + }) + + t.Run(name+"/a forced tool with manual thinking is refused", func(t *testing.T) { + t.Parallel() + llm := truncationLLMWithBody(t, `{}`, + append([]bedrock.Option{bedrock.WithModel("us.anthropic.claude-sonnet-4-5-v1:0")}, opts...)...) + _, err := llm.GenerateContent(context.Background(), turnLimitMessages(llms.ChatMessageTypeHuman), + llms.WithReasoning(llms.ReasoningMedium, 2048), + llms.WithToolChoice(llms.ToolChoice{Type: "any"})) + var target *reasoning.ErrForcedToolUseWithThinking + if !errors.As(err, &target) { + t.Errorf("want ErrForcedToolUseWithThinking, got %v", err) + } + }) + } +} diff --git a/llms/reasoning/errors_claude.go b/llms/reasoning/errors_claude.go new file mode 100644 index 000000000..04266290d --- /dev/null +++ b/llms/reasoning/errors_claude.go @@ -0,0 +1,23 @@ +package reasoning + +import "fmt" + +// ErrAssistantPrefillUnsupported reports that the model rejects a conversation +// ending with an assistant turn. +type ErrAssistantPrefillUnsupported struct{ Model string } + +func (e *ErrAssistantPrefillUnsupported) Error() string { + return fmt.Sprintf( + "model %q does not support assistant message prefill; the conversation must end with a user message", + e.Model) +} + +// ErrForcedToolUseWithThinking reports that a forced tool choice was combined +// with manual (budget) thinking. +type ErrForcedToolUseWithThinking struct{ Model string } + +func (e *ErrForcedToolUseWithThinking) Error() string { + return fmt.Sprintf( + "model %q runs manual thinking, which rejects a forced tool choice; use tool_choice auto or none", + e.Model) +} diff --git a/llms/turn.go b/llms/turn.go new file mode 100644 index 000000000..20d4358ae --- /dev/null +++ b/llms/turn.go @@ -0,0 +1,28 @@ +package llms + +// ForcesToolUse reports whether a tool choice demands a tool call rather than +// leaving the decision to the model. +func ForcesToolUse(choice any) bool { + forced := func(t string) bool { return t == "any" || t == "tool" } + switch c := choice.(type) { + case string: + return forced(c) + case ToolChoice: + return forced(c.Type) + case *ToolChoice: + return c != nil && forced(c.Type) + case map[string]any: + t, _ := c["type"].(string) + return forced(t) + } + return false +} + +// HasAssistantPrefill reports whether the conversation ends with an assistant +// turn, which some models reject. +func HasAssistantPrefill(messages []MessageContent) bool { + if len(messages) == 0 { + return false + } + return messages[len(messages)-1].Role == ChatMessageTypeAI +} From e989cbc915fc679fc4f0b78440735cd2db817bb2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 23 Aug 2026 23:58:26 +0700 Subject: [PATCH 086/618] fix(reasoning): read every spelling of a Claude identifier as the same model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The capability tables are keyed on the dashed form, and the predicates matched the raw string against them. A gateway that spells the version with a dot, a Vertex name carrying an @date suffix, and a proxy prefix therefore fell through to Unknown: claude-opus-4.7 was not classified as adaptive-only and was handed temperature it rejects, claude-sonnet-4.5 and claude-opus-4.6 lost their thinking mechanism, and the same model answered differently depending on who spelled it. The predicates now canonicalise first — lowercase, drop an @date suffix, and read a dot between two digits as the version separator it is. The mutual-exclusion table had been carrying both spellings of five models by hand to work around this; those duplicates are gone. A table pins five models across their dashed, dotted, proxy-prefixed, Bedrock and @date spellings and requires one answer from all of them. Verified by mutation: dropping the separator rule reddens the table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 46 ++++++++++++----- llms/reasoning/claude_name_forms_test.go | 65 ++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 14 deletions(-) create mode 100644 llms/reasoning/claude_name_forms_test.go diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 8a7625078..c5a76c60d 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -54,7 +54,7 @@ var ( // case-insensitive and substring-based so provider/region prefixes and // -vN:0 suffixes do not affect the result. func ClaudeReasoningKindFor(model string) ClaudeReasoningKind { - m := strings.ToLower(model) + m := canonicalClaude(model) if containsAny(m, adaptiveOnlyClaude) { return ClaudeReasoningAdaptiveOnly } @@ -92,13 +92,13 @@ var ( // ClaudeThinkingAlwaysOn reports whether the model's thinking cannot be disabled // (Fable 5 / Mythos 5 — an explicit disable returns 400). func ClaudeThinkingAlwaysOn(model string) bool { - return containsAny(strings.ToLower(model), alwaysOnClaude) + return containsAny(canonicalClaude(model), alwaysOnClaude) } // ClaudeThinkingDefaultsOn reports whether the model thinks when thinking is // omitted, so disabling it requires an explicit disable rather than omission. func ClaudeThinkingDefaultsOn(model string) bool { - return containsAny(strings.ToLower(model), defaultOnClaude) + return containsAny(canonicalClaude(model), defaultOnClaude) } // claudeEffortsByKind lists the effort levels each generation accepts. @@ -129,7 +129,7 @@ var bedrockRejectsBudgetEffortClaude = []string{"claude-opus-4-5"} // provider, so the effort is not lost on the budget path for models that honor // it and is not sent to a platform that rejects it. func ClaudeSupportsEffortWithBudget(model string, p Provider) bool { - m := strings.ToLower(model) + m := canonicalClaude(model) if !containsAny(m, budgetEffortClaude) { return false } @@ -147,23 +147,20 @@ var noPrefillClaude = []string{ // ClaudeRejectsAssistantPrefill reports whether the model rejects a prefilled // assistant response outright, so the request must not be sent. func ClaudeRejectsAssistantPrefill(model string) bool { - return containsAny(strings.ToLower(model), noPrefillClaude) + return containsAny(canonicalClaude(model), noPrefillClaude) } // mutuallyExclusiveSamplingClaude models reject temperature and top_p set // together (only one may be provided). var mutuallyExclusiveSamplingClaude = []string{ - "claude-haiku-4-5", "claude-haiku-4.5", - "claude-sonnet-4-5", "claude-sonnet-4.5", - "claude-opus-4-5", "claude-opus-4.5", - "claude-sonnet-4-6", "claude-sonnet-4.6", - "claude-opus-4-6", "claude-opus-4.6", + "claude-haiku-4-5", "claude-sonnet-4-5", "claude-opus-4-5", + "claude-sonnet-4-6", "claude-opus-4-6", } // ClaudeMutuallyExclusiveSampling reports whether the model returns a 400 when // temperature and top_p are set together, so the caller must send at most one. func ClaudeMutuallyExclusiveSampling(model string) bool { - return containsAny(strings.ToLower(model), mutuallyExclusiveSamplingClaude) + return containsAny(canonicalClaude(model), mutuallyExclusiveSamplingClaude) } // legacyNoStructuredClaude are Claude generations known to predate structured @@ -180,7 +177,7 @@ var legacyNoStructuredClaude = []string{ // any unrecognized (newer) name passes through so the provider API stays the final // arbiter and the local table never blocks a future model. func ClaudeSupportsStructuredOutput(model string) bool { - return !containsAny(strings.ToLower(model), legacyNoStructuredClaude) + return !containsAny(canonicalClaude(model), legacyNoStructuredClaude) } // ResolveClaudeAdaptive returns whether to send adaptive thinking (true) or @@ -227,7 +224,7 @@ var preAdaptiveClaude = []string{ // generation, so an adaptive request must be gated (not sent verbatim) rather than // optimistically forwarded the way a genuinely newer, unclassified model is. func ClaudePredatesAdaptive(model string) bool { - return containsAny(strings.ToLower(model), preAdaptiveClaude) + return containsAny(canonicalClaude(model), preAdaptiveClaude) } // rejectsSamplingClaude models are sent no temperature, top_p or top_k on any @@ -241,9 +238,30 @@ var rejectsSamplingClaude = []string{ // outright, so sampling params must be dropped even when no thinking is // requested. func ClaudeRejectsSampling(model string) bool { - return containsAny(strings.ToLower(model), rejectsSamplingClaude) + return containsAny(canonicalClaude(model), rejectsSamplingClaude) } +// canonicalClaude reduces a Claude identifier to the dashed form every table in +// this file is keyed on. A dotted entry added to one of them never matches. +func canonicalClaude(model string) string { + m := strings.ToLower(model) + if idx := strings.Index(m, "@"); idx != -1 { + m = m[:idx] + } + var b strings.Builder + b.Grow(len(m)) + for i := range len(m) { + if m[i] == '.' && i > 0 && i+1 < len(m) && isDigit(m[i-1]) && isDigit(m[i+1]) { + b.WriteByte('-') + continue + } + b.WriteByte(m[i]) + } + return b.String() +} + +func isDigit(c byte) bool { return c >= '0' && c <= '9' } + func containsAny(s string, subs []string) bool { for _, sub := range subs { if strings.Contains(s, sub) { diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go new file mode 100644 index 000000000..14fff4357 --- /dev/null +++ b/llms/reasoning/claude_name_forms_test.go @@ -0,0 +1,65 @@ +package reasoning + +import "testing" + +func TestClaudePredicatesAgreeAcrossNameForms(t *testing.T) { + t.Parallel() + + for _, group := range [][]string{ + {"claude-opus-4-7", "claude-opus-4.7", "anthropic/claude-opus-4-7", "us.anthropic.claude-opus-4-7-v1:0"}, + {"claude-sonnet-4-5", "claude-sonnet-4.5", "anthropic/claude-sonnet-4.5", "claude-sonnet-4-5@20250514"}, + {"claude-opus-4-6", "claude-opus-4.6", "eu.anthropic.claude-opus-4-6-v1:0"}, + {"claude-haiku-4-5", "claude-haiku-4.5"}, + {"claude-sonnet-5", "claude-sonnet-5.0", "us.anthropic.claude-sonnet-5-v1:0"}, + } { + canonical := group[0] + want := struct { + kind ClaudeReasoningKind + reject bool + mutex bool + prefill bool + }{ + ClaudeReasoningKindFor(canonical), + ClaudeRejectsSampling(canonical), + ClaudeMutuallyExclusiveSampling(canonical), + ClaudeRejectsAssistantPrefill(canonical), + } + if want.kind == ClaudeReasoningUnknown { + t.Fatalf("%s must be classified for this table to mean anything", canonical) + } + + for _, form := range group[1:] { + t.Run(form, func(t *testing.T) { + t.Parallel() + if got := ClaudeReasoningKindFor(form); got != want.kind { + t.Errorf("ClaudeReasoningKindFor = %v, want %v (as %s)", got, want.kind, canonical) + } + if got := ClaudeRejectsSampling(form); got != want.reject { + t.Errorf("ClaudeRejectsSampling = %v, want %v (as %s)", got, want.reject, canonical) + } + if got := ClaudeMutuallyExclusiveSampling(form); got != want.mutex { + t.Errorf("ClaudeMutuallyExclusiveSampling = %v, want %v (as %s)", got, want.mutex, canonical) + } + if got := ClaudeRejectsAssistantPrefill(form); got != want.prefill { + t.Errorf("ClaudeRejectsAssistantPrefill = %v, want %v (as %s)", got, want.prefill, canonical) + } + }) + } + } +} + +func TestCanonicalClaudeLeavesUnrelatedDotsAlone(t *testing.T) { + t.Parallel() + + for _, tc := range []struct{ in, want string }{ + {"claude-opus-4.7", "claude-opus-4-7"}, + {"us.anthropic.claude-opus-4-7-v1:0", "us.anthropic.claude-opus-4-7-v1:0"}, + {"claude-sonnet-4@20250514", "claude-sonnet-4"}, + {"CLAUDE-Opus-4.6", "claude-opus-4-6"}, + {"gpt-4.1", "gpt-4-1"}, + } { + if got := canonicalClaude(tc.in); got != tc.want { + t.Errorf("canonicalClaude(%q) = %q, want %q", tc.in, got, tc.want) + } + } +} From fab698f0362285a84b8ca4c975c6a833d59a8e82 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:00:20 +0700 Subject: [PATCH 087/618] fix(reasoning): detect reasoning models behind a platform id The detector matched family prefixes against the raw name, so a Bedrock id never matched: us.anthropic.claude-opus-5-v1:0 starts with the region, not the family. Every Claude model reached through Bedrock therefore reported itself as non-reasoning, and a UI built on the hint hid the thinking control for the whole door. The catalogue also spelled two Claude entries with a dot only, so the real identifier claude-3-7-sonnet-20250219 matched nothing while claude-3.7-sonnet did. Purely alphabetic leading segments are now stripped before the catalogue is consulted, which removes a region and vendor prefix while leaving a version such as glm-4.5 or deepseek-v3.1-terminus untouched, and the two Claude entries gained their dashed spelling. Verified by mutation: dropping the strip reddens the platform-id table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_name_forms_test.go | 39 ++++++++++++++++++++++++ llms/reasoning/reasoning.go | 27 +++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 14fff4357..24295d366 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -63,3 +63,42 @@ func TestCanonicalClaudeLeavesUnrelatedDotsAlone(t *testing.T) { } } } + +func TestDetectionSeesPlatformIdsAndDashedVersions(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"us.anthropic.claude-opus-5-v1:0", true}, + {"us.anthropic.claude-sonnet-4-6-v1:0", true}, + {"eu.anthropic.claude-opus-4-6-v1:0", true}, + {"claude-3-7-sonnet-20250219", true}, + {"claude-3.7-sonnet", true}, + {"claude-haiku-4-5", true}, + {"glm-4.5", true}, + {"deepseek-v3.1-terminus", true}, + {"us.amazon.titan-text-lite-v1", false}, + } { + if got := IsReasoningModel(tc.model); got != tc.want { + t.Errorf("IsReasoningModel(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + +func TestStripPlatformPrefixLeavesVersionsAlone(t *testing.T) { + t.Parallel() + + for _, tc := range []struct{ in, want string }{ + {"us.anthropic.claude-opus-5-v1:0", "claude-opus-5-v1:0"}, + {"anthropic.claude-opus-4-6", "claude-opus-4-6"}, + {"glm-4.5", "glm-4.5"}, + {"deepseek-v3.1-terminus", "deepseek-v3.1-terminus"}, + {"claude-opus-4-7", "claude-opus-4-7"}, + } { + if got := stripPlatformPrefix(tc.in); got != tc.want { + t.Errorf("stripPlatformPrefix(%q) = %q, want %q", tc.in, got, tc.want) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 87b89bf85..083cfbf92 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -179,6 +179,7 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata if idx := strings.LastIndex(modelLower, "/"); idx != -1 { modelLower = modelLower[idx+1:] } + modelLower = stripPlatformPrefix(modelLower) // OpenAI reasoning models if strings.HasPrefix(modelLower, "gpt-5") || @@ -191,13 +192,15 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata // Anthropic extended thinking / adaptive models if strings.Contains(modelLower, "claude-3.7") || + strings.Contains(modelLower, "claude-3-7") || strings.HasPrefix(modelLower, "claude-opus-4") || strings.HasPrefix(modelLower, "claude-opus-5") || strings.HasPrefix(modelLower, "claude-sonnet-4") || strings.HasPrefix(modelLower, "claude-sonnet-5") || strings.Contains(modelLower, "claude-fable-5") || strings.Contains(modelLower, "claude-mythos-5") || - strings.Contains(modelLower, "claude-haiku-4.5") { + strings.Contains(modelLower, "claude-haiku-4.5") || + strings.Contains(modelLower, "claude-haiku-4-5") { return true } @@ -309,3 +312,25 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata return false } + +func stripPlatformPrefix(model string) string { + for { + idx := strings.Index(model, ".") + if idx <= 0 { + return model + } + if !isAlpha(model[:idx]) { + return model + } + model = model[idx+1:] + } +} + +func isAlpha(s string) bool { + for i := range len(s) { + if s[i] < 'a' || s[i] > 'z' { + return false + } + } + return true +} From 5efaa0231b1c4f6c892760eaf70e56546c9a93eb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:02:18 +0700 Subject: [PATCH 088/618] fix(reasoning): stop suffix variants inheriting the base model's rules Only the literal gpt-5-pro prefix carried the Pro restriction, so gpt-5.1-pro, gpt-5.2-pro and gpt-5.4-pro fell through to their dotted-family rule and were offered the full effort vocabulary and a disable their base line does not take. In the other direction the chat variants matched the bare gpt-5 prefix and were classified as reasoning models, so a form built on the hint offered thinking controls for a chat endpoint. The Pro restriction now follows the suffix across the whole GPT-5 line, and a chat variant is classified as neither reasoning nor capability-known, so the detector and the capability table agree about it. Verified by mutation: restoring the literal prefix reddens the variant table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_name_forms_test.go | 20 ++++++++++++++++++++ llms/reasoning/openai_capability.go | 10 ++++++++-- llms/reasoning/reasoning.go | 4 ++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 24295d366..8d6e02a39 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -102,3 +102,23 @@ func TestStripPlatformPrefixLeavesVersionsAlone(t *testing.T) { } } } + +func TestOpenAISuffixVariantsDoNotInheritTheBaseRules(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5-pro", "gpt-5.1-pro", "gpt-5.2-pro", "gpt-5.4-pro"} { + caps := OpenAIReasoningCapsFor(model) + if !caps.Known || caps.CanDisable || len(caps.Efforts) != 1 || caps.Efforts[0] != "high" { + t.Errorf("%s: want the Pro caps (high only, not disablable), got %+v", model, caps) + } + } + + for _, model := range []string{"gpt-5-chat-latest", "gpt-5.2-chat-latest"} { + if caps := OpenAIReasoningCapsFor(model); caps.Known { + t.Errorf("%s: a chat variant must not be classified as a reasoning model, got %+v", model, caps) + } + if IsReasoningModel(model) { + t.Errorf("%s: a chat variant must not be detected as reasoning", model) + } + } +} diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 36f2234a5..824904afa 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -56,9 +56,11 @@ func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { if idx := strings.LastIndex(m, "/"); idx != -1 { m = m[idx+1:] // strip a proxy prefix such as "openai/" } + if strings.Contains(m, "-chat-latest") { + return OpenAIReasoningCaps{Known: false} + } switch { - case strings.HasPrefix(m, "gpt-5-pro"): - // GPT-5 Pro accepts only high and cannot be disabled. + case openAIProVariant(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"high"}} case openAIMandatoryReasoning(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} @@ -73,6 +75,10 @@ func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { } } +func openAIProVariant(m string) bool { + return strings.HasPrefix(m, "gpt-5") && strings.Contains(m, "-pro") +} + func openAIGPT5Base(m string) bool { return m == "gpt-5" || strings.HasPrefix(m, "gpt-5-20") || strings.HasPrefix(m, "gpt-5-mini") || strings.HasPrefix(m, "gpt-5-nano") diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 083cfbf92..69ba1b483 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -181,6 +181,10 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata } modelLower = stripPlatformPrefix(modelLower) + if strings.Contains(modelLower, "-chat-latest") { + return false + } + // OpenAI reasoning models if strings.HasPrefix(modelLower, "gpt-5") || strings.HasPrefix(modelLower, "gpt-oss-") || From 495b329a004ec896b72135b8d401de047d61ad17 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:03:38 +0700 Subject: [PATCH 089/618] fix(reasoning): classify the Claude 4 aliases and the Vertex dated form claude-opus-4-0 and claude-sonnet-4-0 name the first Claude 4 release and were in none of the tables, so they resolved to Unknown and an adaptive request on them was forwarded to a generation that answers it with a 400. The Vertex spelling claude-sonnet-4@20250514 named the same model and missed for a different reason: the date separator. The canonical form now reads @ as the separator it stands in for, which lets the dated entries the tables already carry match the Vertex spelling, and the two zero-suffix aliases join the pre-adaptive list. Nothing wider matches: 4.5 and 4.6 keep their own classification. Verified by mutation: dropping the aliases reddens the table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 6 ++---- llms/reasoning/claude_name_forms_test.go | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index c5a76c60d..981213d58 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -216,7 +216,7 @@ var preAdaptiveClaude = []string{ "claude-2", "claude-v2", "claude-instant", "claude-3", // claude-3, claude-3-5, claude-3-7 all predate adaptive - "claude-opus-4-1", + "claude-opus-4-0", "claude-opus-4-1", "claude-sonnet-4-0", "claude-opus-4-20", "claude-sonnet-4-20", } @@ -245,9 +245,7 @@ func ClaudeRejectsSampling(model string) bool { // this file is keyed on. A dotted entry added to one of them never matches. func canonicalClaude(model string) string { m := strings.ToLower(model) - if idx := strings.Index(m, "@"); idx != -1 { - m = m[:idx] - } + m = strings.ReplaceAll(m, "@", "-") var b strings.Builder b.Grow(len(m)) for i := range len(m) { diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 8d6e02a39..bb2013ae0 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -54,7 +54,7 @@ func TestCanonicalClaudeLeavesUnrelatedDotsAlone(t *testing.T) { for _, tc := range []struct{ in, want string }{ {"claude-opus-4.7", "claude-opus-4-7"}, {"us.anthropic.claude-opus-4-7-v1:0", "us.anthropic.claude-opus-4-7-v1:0"}, - {"claude-sonnet-4@20250514", "claude-sonnet-4"}, + {"claude-sonnet-4@20250514", "claude-sonnet-4-20250514"}, {"CLAUDE-Opus-4.6", "claude-opus-4-6"}, {"gpt-4.1", "gpt-4-1"}, } { @@ -122,3 +122,25 @@ func TestOpenAISuffixVariantsDoNotInheritTheBaseRules(t *testing.T) { } } } + +func TestClaudeFourAliasesAreClassified(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"claude-opus-4-0", true}, + {"claude-sonnet-4-0", true}, + {"claude-sonnet-4@20250514", true}, + {"claude-opus-4@20250514", true}, + {"claude-opus-4-20250514", true}, + {"claude-sonnet-4-5", false}, + {"claude-sonnet-4-6", false}, + {"claude-opus-4-6", false}, + } { + if got := ClaudePredatesAdaptive(tc.model); got != tc.want { + t.Errorf("ClaudePredatesAdaptive(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} From 17c8e5bbf2dd530ca7c8fc9c99f36424ee215f8b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:07:18 +0700 Subject: [PATCH 090/618] fix(openai): drop every sampling param for a model that rejects sampling The predicate reports models that reject temperature and top_p outright, and the branch acting on it cleared exactly those two. top_k and min_p travelled on untouched, so claude-sonnet-5 and its siblings still received sampling instructions through the OpenAI transport. All four are now cleared together. The neighbouring complaint about top_p reaching third-party reasoning models is left alone: the temperature pin those models take is deliberate and pinned by TestCreateChatRequest_ReasoningModelTemperature, top_p is dropped by the same branch, and nothing here establishes that the vendors accept it. Verified by mutation: clearing only the original two reddens the new test. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 2 +- llms/openai/sampling_matrix_test.go | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 0f5c0aba1..65476fdd9 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -364,7 +364,7 @@ func (o *LLM) writeDisableEffort(req *openaiclient.ChatRequest) { func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string) { switch model := o.effectiveModel(opts); { case reasoning.ClaudeRejectsSampling(model): - req.Temperature, req.TopP = nil, nil + req.Temperature, req.TopP, req.TopK, req.MinP = nil, nil, nil, nil case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: req.TopP = nil case reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 9b0ea5abb..381245905 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -124,3 +124,16 @@ func TestSamplingMatrix(t *testing.T) { }) } } + +func TestAModelThatRejectsSamplingGetsNoSamplingAtAll(t *testing.T) { + t.Parallel() + + body := sendForWire(t, "claude-opus-4-7", + llms.WithTemperature(0.3), llms.WithTopP(0.9), llms.WithTopK(40), llms.WithMinP(0.05)) + + for _, field := range []string{`"temperature"`, `"top_p"`, `"top_k"`, `"min_p"`} { + if strings.Contains(body, field) { + t.Errorf("want no %s on the wire, got body: %s", field, body) + } + } +} From eb858ede38d7baed0f7cbfebbddc6f7f6944a53a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:11:11 +0700 Subject: [PATCH 091/618] fix(vertex): give each candidate its own tool calls, and cover the finish checks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tool-call accumulator was declared once for the whole response and appended to across candidates, so with two candidates the second choice carried both calls: asking for two completions that each call one function returned alpha to the first and alpha plus beta to the second. It now lives with the candidate it describes. The truncation refusal ran inside GenerateContent, past a client this package cannot build without cloud credentials, so nothing exercised it — deleting the call left the package green. The checks that run after decoding now sit in a function of the response and the options, which a test can drive directly. Verified by mutation on each: the accumulator moved back out reddens the candidate table, and the truncation check removed reddens the refusal test. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/finish_response_test.go | 65 ++++++++++++++++++++ llms/googleai/vertex/vertex.go | 17 ++--- 2 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 llms/googleai/vertex/finish_response_test.go diff --git a/llms/googleai/vertex/finish_response_test.go b/llms/googleai/vertex/finish_response_test.go new file mode 100644 index 000000000..653b68a2f --- /dev/null +++ b/llms/googleai/vertex/finish_response_test.go @@ -0,0 +1,65 @@ +package vertex + +import ( + "encoding/json" + "errors" + "testing" + + "cloud.google.com/go/vertexai/genai" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestFinishVertexResponseRefusesATruncatedAnswer(t *testing.T) { + t.Parallel() + + resp, err := convertCandidates([]*genai.Candidate{{ + Content: &genai.Content{Parts: []genai.Part{genai.Text("half an ans")}}, + FinishReason: genai.FinishReasonMaxTokens, + }}, nil) + if err != nil { + t.Fatalf("convertCandidates: %v", err) + } + + if err := finishVertexResponse(&llms.CallOptions{}, resp); err != nil { + t.Errorf("without the option a truncated answer must pass through, got %v", err) + } + + err = finishVertexResponse(&llms.CallOptions{FailOnTruncation: true}, resp) + if err == nil { + t.Fatal("WithFailOnTruncation must refuse a truncated answer") + } + var typed *llms.Error + if !errors.As(err, &typed) || typed.Code != llms.ErrCodeTruncated { + t.Errorf("want a typed truncation error, got %v", err) + } + if resp.Choices[0].Content != "half an ans" { + t.Error("the partial answer must survive the refusal") + } +} + +func TestToolCallsBelongToTheCandidateThatMadeThem(t *testing.T) { + t.Parallel() + + call := func(name string) genai.Part { + return genai.FunctionCall{Name: name, Args: map[string]any{"a": 1}} + } + resp, err := convertCandidates([]*genai.Candidate{ + {Content: &genai.Content{Parts: []genai.Part{call("alpha")}}, FinishReason: genai.FinishReasonStop}, + {Content: &genai.Content{Parts: []genai.Part{call("beta")}}, FinishReason: genai.FinishReasonStop}, + }, nil) + if err != nil { + t.Fatalf("convertCandidates: %v", err) + } + + for i, want := range []string{"alpha", "beta"} { + got := resp.Choices[i].ToolCalls + if len(got) != 1 || got[0].FunctionCall.Name != want { + names := make([]string, 0, len(got)) + for _, c := range got { + names = append(names, c.FunctionCall.Name) + } + b, _ := json.Marshal(names) + t.Errorf("choice %d carries %s, want exactly [%q]", i, b, want) + } + } +} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index f4a4a7291..ca2093b5a 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -130,26 +130,27 @@ func (g *Vertex) GenerateContent( return response, err } - if err := llms.CheckTruncation(response, opts); err != nil { - return response, err - } - - // When structured output was requested, validate each normal-final candidate - // against the original schema; the response is returned with the typed error. - if err := validateVertexStructuredOutput(&opts, response); err != nil { + if err := finishVertexResponse(&opts, response); err != nil { return response, err } return response, nil } +func finishVertexResponse(opts *llms.CallOptions, response *llms.ContentResponse) error { + if err := llms.CheckTruncation(response, *opts); err != nil { + return err + } + return validateVertexStructuredOutput(opts, response) +} + // convertCandidates converts a sequence of genai.Candidate to a response. func convertCandidates(candidates []*genai.Candidate, usage *genai.UsageMetadata) (*llms.ContentResponse, error) { var contentResponse llms.ContentResponse - var toolCalls []llms.ToolCall for _, candidate := range candidates { buf := strings.Builder{} + var toolCalls []llms.ToolCall if candidate.Content != nil { for _, part := range candidate.Content.Parts { From 2204734d7fade4b29ab8a6632410fffce4130130 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:21:01 +0700 Subject: [PATCH 092/618] test(googleai): replay the recorded cassettes without a live key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Twenty-six tests skipped whenever GOOGLE_API_KEY was unset, although their cassettes were sitting in testdata the whole time — the cache tests in the same package already fed a placeholder key for exactly this reason. The helper now does the same, and the package goes from 198 passing and 27 skipped to 224 passing and 1 skipped. TestGoogleAIErrorHandling asserted only that some error came back, which a replay miss satisfies, and it was in fact missing: the cassette had been recorded when the default output ceiling was 2048 and the request now carries 16384. The assertion now rejects a miss and requires the recorded rejection itself to reach the caller, and the cassette's request key was updated to the body our code sends. Its recorded response — the vendor's own 400 — is untouched. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_test.go | 14 +++++++------- .../testdata/TestGoogleAIErrorHandling.httprr | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/llms/googleai/googleai_test.go b/llms/googleai/googleai_test.go index 49feab51f..8645d86e4 100644 --- a/llms/googleai/googleai_test.go +++ b/llms/googleai/googleai_test.go @@ -2,6 +2,7 @@ package googleai import ( "bytes" + "cmp" "context" "encoding/json" "net/http" @@ -76,12 +77,7 @@ func newHTTPRRClient(t *testing.T, opts ...Option) *GoogleAI { // Configure client with httprr opts = append(opts, WithRest(), WithHTTPClient(rr.Client())) - // Add API key if available - if apiKey != "" { - opts = append(opts, WithAPIKey(apiKey)) - } else { - t.Skip("No API key found, skipping test") - } + opts = append(opts, WithAPIKey(cmp.Or(apiKey, "test-api-key"))) llm, err := New(t.Context(), opts...) if err != nil { @@ -629,7 +625,11 @@ func TestGoogleAIErrorHandling(t *testing.T) { } _, err = llm.GenerateContent(t.Context(), content) - assert.Error(t, err) + require.Error(t, err) + require.NotContains(t, err.Error(), "cached HTTP response not found", + "the cassette must answer this request; a replay miss would satisfy a bare Error assertion") + require.Contains(t, strings.ToLower(err.Error()), "api key", + "the recorded rejection must reach the caller") } func TestGoogleAIMultiModalContent(t *testing.T) { diff --git a/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr b/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr index 534f5fcbd..6bc53a9c1 100644 --- a/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr +++ b/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr @@ -1,14 +1,14 @@ httprr trace v1 -774 967 +775 967 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 454 +Content-Length: 455 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Hello"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]} +{"contents":[{"parts":[{"text":"Hello"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]} HTTP/2.0 400 Bad Request Content-Length: 581 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 From 2d78752077ee9d240bc765472afe82fa09861a76 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:22:45 +0700 Subject: [PATCH 093/618] test(bedrock): assert which sampling param goes, not merely that both do not Both doors had a test asserting that temperature and top_p never reached the wire together. Dropping both satisfies that just as well as dropping the right one, so the assertion could not tell the intended behaviour from a guard that cleared everything. Each now requires the caller's temperature to survive with its value and top_p to be the one removed. Verified by mutation: disabling the mutual-exclusion branch, which leaves both params in place, reddens them; so does a guard that clears both. PAGI-132 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient_converse_test.go | 6 ++++-- .../bedrockclient/provider_anthropic_reasoning_test.go | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index c4bcae42f..3b185afc6 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1097,8 +1097,10 @@ func TestConverseClient_DropsTopPWhenBothSamplingParamsSet(t *testing.T) { require.NoError(t, err) cfg := got.InferenceConfig require.NotNil(t, cfg) - assert.False(t, cfg.Temperature != nil && cfg.TopP != nil, - "both sampling params reached the wire for %s", model) + require.NotNil(t, cfg.Temperature, + "%s takes a temperature; dropping both params would satisfy a not-both assertion", model) + assert.InDelta(t, 0.5, *cfg.Temperature, 0.0001, "the caller's temperature must survive for %s", model) + assert.Nil(t, cfg.TopP, "top_p is the one that goes for %s", model) }) } } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index adba4e009..1ee93a709 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -267,7 +267,9 @@ func TestApplyAnthropicReasoning_DropsTopPWhenBothSamplingParamsSet(t *testing.T fields := marshalAnthropicInput(t, input) _, hasTemp := fields["temperature"] _, hasTopP := fields["top_p"] - assert.False(t, hasTemp && hasTopP, "both sampling params reached the wire: %v", fields) + require.True(t, hasTemp, + "the model takes a temperature; dropping both params would satisfy a not-both assertion: %v", fields) + assert.False(t, hasTopP, "top_p is the one that goes: %v", fields) }) } } From cbbaeea5080592a400051ae8615bfd800373bfeb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:29:47 +0700 Subject: [PATCH 094/618] fix(reasoning): lower a Claude effort the generation does not accept MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ClaudeEffortsFor described each generation's effort vocabulary and nothing consulted it on the way to the wire, so xhigh went out verbatim to Opus 4.5, Opus 4.6 and Sonnet 4.6 — the three generations measured to reject it. The OpenAI door has had this clamp all along; the Anthropic and Bedrock doors did not. All six sites that put an effort on the wire now lower it first. The step is down to the highest accepted level below the request, not to the end of the list: Opus 4.6 accepts max but not xhigh, so clamping to the ceiling would have raised the request instead of lowering it. The test that pinned xhigh flowing through was doing so on Opus 4.6, one of the generations that rejects it; it now covers both a generation that takes xhigh and one that does not. Verified by mutation: clamping to the list's last entry reddens the table. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 17 ++++++++++++-- llms/anthropic/anthropicllm.go | 4 ++-- .../bedrockclient/bedrockclient_converse.go | 8 +++---- .../bedrockclient/provider_anthropic.go | 4 ++-- llms/reasoning/claude_capability.go | 23 +++++++++++++++++++ llms/reasoning/claude_name_forms_test.go | 22 ++++++++++++++++++ 6 files changed, 68 insertions(+), 10 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index 68a2a4573..2e7d0ffc0 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -852,10 +852,10 @@ func TestAnthropic_AdaptiveThinkingRequest(t *testing.T) { assert.Equal(t, "high", outputConfig["effort"]) }) - t.Run("xhigh effort flows through to output_config", func(t *testing.T) { + t.Run("xhigh flows through where the generation takes it", func(t *testing.T) { t.Parallel() - payload, _ := captureMessagesRequest(t, + payload, _ := captureMessagesRequestModel(t, "claude-opus-4-7", llms.WithAdaptiveReasoning(llms.ReasoningXHigh), llms.WithMaxTokens(4096), ) @@ -863,6 +863,19 @@ func TestAnthropic_AdaptiveThinkingRequest(t *testing.T) { outputConfig, _ := payload["output_config"].(map[string]any) assert.Equal(t, "xhigh", outputConfig["effort"]) }) + + t.Run("xhigh is lowered where the generation does not", func(t *testing.T) { + t.Parallel() + + payload, _ := captureMessagesRequestModel(t, "claude-opus-4-6", + llms.WithAdaptiveReasoning(llms.ReasoningXHigh), + llms.WithMaxTokens(4096), + ) + + outputConfig, _ := payload["output_config"].(map[string]any) + assert.Equal(t, "high", outputConfig["effort"], + "xhigh must step down to the highest level below it, not up to max") + }) } // An explicit ReasoningOn with no effort/tokens must not reach the API as an diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 65d0f11d2..c9b4a24f1 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -208,7 +208,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag Display: "summarized", } outputConfig = &anthropicclient.OutputConfig{ - Effort: string(opts.Reasoning.GetEffort(opts.GetMaxTokens())), + Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), } } else { thinking = &anthropicclient.ThinkingPayload{ @@ -219,7 +219,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag // the caller's effort is silently dropped on the budget path. if reasoning.ClaudeSupportsEffortWithBudget(model, reasoning.ProviderAnthropic) { outputConfig = &anthropicclient.OutputConfig{ - Effort: string(opts.Reasoning.GetEffort(opts.GetMaxTokens())), + Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), } } } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index b0acbbf55..31a9f0bee 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -158,9 +158,9 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti maxTokens = *input.MaxTokens } setAdaptive := func() { - effort := input.ReasoningConfig.GetEffort(maxTokens) + effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) additionalModelFields.Thinking = &converseThinkingPayload{Type: "adaptive", Display: "summarized"} - additionalModelFields.OutputConfig = &converseOutputConfig{Effort: string(effort)} + additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} // Adaptive models reject sampling params. inferenceConfig.Temperature = nil inferenceConfig.TopP = nil @@ -169,8 +169,8 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti if tokens := input.ReasoningConfig.GetTokens(maxTokens); tokens > 0 { additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID, reasoning.ProviderBedrock) { - effort := input.ReasoningConfig.GetEffort(maxTokens) - additionalModelFields.OutputConfig = &converseOutputConfig{Effort: string(effort)} + effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) + additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} } // Budget thinking requires temperature=1.0 and rejects top_p. if isAnthropicModelID(input.ModelID) { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 12e784b90..5f3f48729 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -726,7 +726,7 @@ func applyAnthropicReasoning( setAdaptive := func() { input.Thinking = &anthropicThinkingPayload{Type: "adaptive", Display: "summarized"} - input.OutputConfig = &anthropicOutputConfig{Effort: string(cfg.GetEffort(maxTokens))} + input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} input.Temperature = 0 input.TopP = 0 input.TopK = 0 @@ -736,7 +736,7 @@ func applyAnthropicReasoning( if tokens := cfg.GetTokens(mt); tokens > 0 { input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { - input.OutputConfig = &anthropicOutputConfig{Effort: string(cfg.GetEffort(mt))} + input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(mt)))} } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. input.Temperature = 1.0 diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 981213d58..03ee378f8 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -114,6 +114,29 @@ func ClaudeEffortsFor(model string) []string { return slices.Clone(claudeEffortsByKind[ClaudeReasoningKindFor(model)]) } +var claudeEffortRank = map[string]int{"low": 1, "medium": 2, "high": 3, "xhigh": 4, "max": 5} + +// ClaudeClampEffort lowers an effort the model's generation does not accept to +// the highest one it does. An unclassified model and an unknown level pass +// through unchanged. +func ClaudeClampEffort(model, effort string) string { + want, ok := claudeEffortRank[effort] + if !ok { + return effort + } + accepted := claudeEffortsByKind[ClaudeReasoningKindFor(model)] + if len(accepted) == 0 || slices.Contains(accepted, effort) { + return effort + } + best, bestRank := effort, 0 + for _, level := range accepted { + if rank := claudeEffortRank[level]; rank <= want && rank > bestRank { + best, bestRank = level, rank + } + } + return best +} + // budgetEffortClaude are budget-thinking models that also accept an effort // output_config alongside manual thinking (introduced with Opus 4.5). Newer // generations use adaptive thinking, where effort is always available. diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index bb2013ae0..2297ab27c 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -144,3 +144,25 @@ func TestClaudeFourAliasesAreClassified(t *testing.T) { } } } + +func TestClaudeClampEffortStepsDownNotUp(t *testing.T) { + t.Parallel() + + for _, tc := range []struct{ model, effort, want string }{ + {"claude-opus-4-7", "xhigh", "xhigh"}, + {"claude-sonnet-5", "xhigh", "xhigh"}, + {"claude-opus-4-6", "xhigh", "high"}, + {"claude-sonnet-4-6", "xhigh", "high"}, + {"claude-opus-4-5", "xhigh", "high"}, + {"claude-opus-4-5", "max", "high"}, + {"claude-haiku-4-5", "max", "high"}, + {"claude-opus-4-6", "max", "max"}, + {"claude-opus-4-6", "low", "low"}, + {"grok-4", "xhigh", "xhigh"}, + {"claude-opus-4-6", "", ""}, + } { + if got := ClaudeClampEffort(tc.model, tc.effort); got != tc.want { + t.Errorf("ClaudeClampEffort(%q, %q) = %q, want %q", tc.model, tc.effort, got, tc.want) + } + } +} From b0b9a59fd1feb19fcb086f5c77998e3daabc708c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:33:13 +0700 Subject: [PATCH 095/618] docs: make six statements match what the code does - The provider-neutral option catalogue did not mention WithFailOnTruncation or ContentChoice.Truncated, so the truncation signal this release adds was undiscoverable from the docs. - The Bedrock README said Opus 4.5 honours output_config.effort on the budget path. It does on the first-party API and not on Bedrock, which is the door that README describes, and the code has refused to send it there all along. - The same README marked GLM-5 and Nemotron 3 as reasoning models. Neither is in the door's reasoning list, so a reasoning request on them is a no-op; the table now says so. - The httprr guide said the Google AI tests honour GOOGLE_BASE_URL. One helper does; the five recorders in the cache tests build their own clients and ignore it, so re-recording those still needs a direct vendor key. - The Gemini guide described WithReasoningDisabled without noting that the Vertex door refuses it for every model, thinking or not, because its pinned SDK has no field to carry the instruction. - Two documents told the reader to install Go 1.24 while the module requires 1.26.5. PAGI-132 Co-Authored-By: Claude Opus 5 --- docs/docs/getting-started/guide-gemini.mdx | 2 +- .../model_io/models/llms/Integrations/groq.mdx | 2 +- docs/docs/modules/model_io/models/llms/index.mdx | 1 + docs/docs/tutorials/smart-documentation.md | 2 +- internal/httprr/README.md | 8 +++++--- llms/bedrock/README.md | 11 +++++++---- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/docs/getting-started/guide-gemini.mdx b/docs/docs/getting-started/guide-gemini.mdx index f077bab2c..dfad46741 100644 --- a/docs/docs/getting-started/guide-gemini.mdx +++ b/docs/docs/getting-started/guide-gemini.mdx @@ -64,7 +64,7 @@ llm, err := googleai.New(ctx, - **Thinking**: on thinking-capable Gemini models, control reasoning per call with `llms.WithReasoning` (Gemini 3.x maps effort to a thinking level; 2.5 uses a token budget). `llms.WithReasoningDisabled()` turns thinking off where the model allows it. - **Structured output**: request schema-constrained JSON with `llms.WithStructuredOutput` — see the [googleai-structured-output-example](https://github.com/vxcontrol/langchaingo/tree/main-vxcontrol/examples/googleai-structured-output-example). -- **Vertex AI**: to run Gemini through Google Cloud Vertex AI instead of the AI Studio endpoint, use the `llms/googleai/vertex` package with `vertex.New(ctx, googleai.WithCloudProject(...), googleai.WithCloudLocation(...))`. +- **Vertex AI**: to run Gemini through Google Cloud Vertex AI instead of the AI Studio endpoint, use the `llms/googleai/vertex` package with `vertex.New(ctx, googleai.WithCloudProject(...), googleai.WithCloudLocation(...))`. Note that `llms.WithReasoningDisabled()` returns an error on this door for every model, including ones that do not think at all: the SDK it is pinned to has no field to carry the instruction. This is a known limitation of that door, not the intended contract — use the AI Studio door when you need to turn thinking off. See [Configure LLM Providers](../how-to/configure-llm-providers.md) for the full set of options. diff --git a/docs/docs/modules/model_io/models/llms/Integrations/groq.mdx b/docs/docs/modules/model_io/models/llms/Integrations/groq.mdx index 3471e17cf..9cceb760d 100644 --- a/docs/docs/modules/model_io/models/llms/Integrations/groq.mdx +++ b/docs/docs/modules/model_io/models/llms/Integrations/groq.mdx @@ -16,7 +16,7 @@ URL — no separate provider package is required. ## Prerequisites -- Go installed on your machine (version 1.24 or higher recommended). +- Go installed on your machine (version 1.26 or higher recommended). - A valid Groq API key. Obtain it by creating an account on the Groq platform and generating a new token. ## Installation diff --git a/docs/docs/modules/model_io/models/llms/index.mdx b/docs/docs/modules/model_io/models/llms/index.mdx index 603529fe3..4c6c386bc 100644 --- a/docs/docs/modules/model_io/models/llms/index.mdx +++ b/docs/docs/modules/model_io/models/llms/index.mdx @@ -72,5 +72,6 @@ Options passed to `GenerateContent` (or `llms.GenerateFromSinglePrompt`) work ac - **Structured output**: `llms.WithStructuredOutput` requests schema-constrained JSON and validates the response against your schema. - **Streaming**: `llms.WithStreamingFunc` receives a `streaming.Chunk` per token. - **Tools / function calling**: `llms.WithTools`. +- **Truncation**: `llms.WithFailOnTruncation` turns an answer cut short by the output-token limit into a typed error instead of a silently shortened result; the partial answer is returned alongside it, and `ContentChoice.Truncated` carries the same signal without the option. diff --git a/docs/docs/tutorials/smart-documentation.md b/docs/docs/tutorials/smart-documentation.md index 71d760fac..e4ef1c2fd 100644 --- a/docs/docs/tutorials/smart-documentation.md +++ b/docs/docs/tutorials/smart-documentation.md @@ -1238,7 +1238,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: 1.24 + go-version: 1.26 - name: Generate Documentation env: diff --git a/internal/httprr/README.md b/internal/httprr/README.md index b4c74ddfe..494c94020 100644 --- a/internal/httprr/README.md +++ b/internal/httprr/README.md @@ -234,9 +234,11 @@ go test ./... -httprecord="TestOpenAI.*" ### Recording Through a Gateway -The Google AI tests reach the vendor through whatever base URL `GOOGLE_BASE_URL` -names, so fixtures can be re-recorded with a proxy key when no direct vendor key -is at hand: +The Google AI helper in `llms/googleai/googleai_test.go` reaches the vendor +through whatever base URL `GOOGLE_BASE_URL` names, so its fixtures can be +re-recorded with a proxy key when no direct vendor key is at hand. The cache +tests in the same package build their own recorders and ignore the variable, so +re-recording those still needs a direct vendor key: ```bash GOOGLE_API_KEY= GOOGLE_BASE_URL=https://gateway.example/gemini \ diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 8b74f7c96..d73d0a9af 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -209,7 +209,9 @@ source of truth used by the first-party Anthropic provider): yields off. - **Adaptive + budget** (Opus 4.6, Sonnet 4.6): either mechanism; caller preference honored. - **Budget-only** (Opus 4.5, Sonnet 4.5, Haiku 4.5): `thinking.type=enabled` + - `budget_tokens`; Opus 4.5 also honors `output_config.effort`. + `budget_tokens`. Opus 4.6 and Sonnet 4.6 also carry `output_config.effort` on + this path; Opus 4.5 accepts it on the first-party API but rejects it here, so + this door does not send it. Non-Claude reasoning models (GPT OSS, Kimi K2-Thinking, MiniMax M2) use budget thinking through the Converse API. `WithReasoningDisabled()` returns a typed @@ -767,13 +769,14 @@ for the exact model IDs. | Mistral | ✅*** | ❌ | ✅ | Some | ❌ | Converse native* | | Moonshot Kimi | ✅**** | ✅ | ✅ | Some | ❌ | Converse native* | | MiniMax M2/M2.1/M2.5 | ✅ | ✅ (M2.5/M2.1) | ✅ | ❌ | ❌ | Converse native* | -| GLM-4.7/4.7-Flash/5 | ❌***** | ✅ (GLM-5) | ✅ | ❌ | ❌ | Converse native* | -| NVIDIA Nemotron 3 Super | ✅ | ✅ | ✅ | ❌ | ❌ | Converse native* | +| GLM-4.7/4.7-Flash/5 | ❌***** | ❌****** | ✅ | ❌ | ❌ | Converse native* | +| NVIDIA Nemotron 3 Super | ✅ | ❌****** | ✅ | ❌ | ❌ | Converse native* | *Converse native: structured output is passed via AWS `OutputConfig.TextFormat`; support depends on what AWS advertises for the model at the time. The legacy InvokeModel structured-output path is implemented for Anthropic only. **Qwen3: Most models support tools, except Qwen3-VL (unstable in streaming) ***Mistral: Large 3 and Large 2402 support tools, Magistral Small 2509 does not ****Moonshot: K2.5 supports tools, K2-Thinking is unstable in streaming -*****GLM models: Backend incompatibility with Converse API tool format (requires string instead of JSON) +*****GLM models: Backend incompatibility with Converse API tool format (requires string instead of JSON) +******GLM-5 and Nemotron 3 may reason on their own, but this door sends them no thinking instruction: they are absent from the reasoning list in `supportsReasoning`, so a reasoning request on them is a no-op here. See `models_list.go` for the complete model list and detailed capabilities. From 595bf53d724b02f209237b6076487bc61c156512 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:35:17 +0700 Subject: [PATCH 096/618] refactor(vertex): derive truncation from the shared table The choice carried a stop reason produced by one rule and a truncation flag produced by another: the flag compared the SDK enum directly instead of asking llms.IsTruncated about the string beside it. Two rules for one fact is how they drifted apart in the first place. Both now come from the same wire spelling. Verified by mutation: breaking the spelling reddens the package, which it could not do while the flag was computed independently of it. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/vertex.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index ca2093b5a..2fe9f8efa 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -188,11 +188,12 @@ func convertCandidates(candidates []*genai.Candidate, usage *genai.UsageMetadata metadata["total_tokens"] = usage.TotalTokenCount } + stopReason := wireFinishReason(candidate.FinishReason) contentResponse.Choices = append(contentResponse.Choices, &llms.ContentChoice{ Content: buf.String(), - StopReason: wireFinishReason(candidate.FinishReason), - Truncated: candidate.FinishReason == genai.FinishReasonMaxTokens, + StopReason: stopReason, + Truncated: llms.IsTruncated(stopReason), GenerationInfo: metadata, ToolCalls: toolCalls, }) From 676af0ae9ac15c251bc8f7d40471a3e1381227f5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 00:39:45 +0700 Subject: [PATCH 097/618] style: run gofmt over the three files that were failing it Trailing whitespace and continuation-line alignment only; no statement changes. gofmt -l is now clean across the module. PAGI-132 Co-Authored-By: Claude Opus 5 --- .../devtools/normalize-recordings/main.go | 74 +++++++++---------- internal/testutil/testctr/testctr.go | 10 +-- prompts/internal/sanitization/sanitize.go | 1 - 3 files changed, 42 insertions(+), 43 deletions(-) diff --git a/internal/devtools/normalize-recordings/main.go b/internal/devtools/normalize-recordings/main.go index 444faa5f2..02258ed88 100644 --- a/internal/devtools/normalize-recordings/main.go +++ b/internal/devtools/normalize-recordings/main.go @@ -25,7 +25,7 @@ func main() { if err != nil { log.Fatal(err) } - + // Also check common test directories testDirs := []string{ "chains/testdata", @@ -33,14 +33,14 @@ func main() { "vectorstores/*/testdata", "embeddings/*/testdata", } - + for _, pattern := range testDirs { matches, err := filepath.Glob(pattern + "/*.httprr") if err == nil { recordings = append(recordings, matches...) } } - + // Deduplicate seen := make(map[string]bool) var unique []string @@ -51,14 +51,14 @@ func main() { } } recordings = unique - + if len(recordings) == 0 { fmt.Println("No .httprr files found") return } - + fmt.Printf("Found %d .httprr files\n", len(recordings)) - + for _, file := range recordings { if err := normalizeRecording(file); err != nil { log.Printf("Error processing %s: %v", file, err) @@ -72,34 +72,34 @@ func normalizeRecording(filename string) error { if err != nil { return err } - + // Check if it's a valid httprr file if !strings.HasPrefix(string(content), "httprr trace v1\n") { return fmt.Errorf("not a valid httprr trace file") } - + originalContent := string(content) normalized := normalizeHTTPRRFile(originalContent) - + if normalized == originalContent { if *verbose { fmt.Printf("No changes needed for %s\n", filename) } return nil } - + if *dryRun { fmt.Printf("Would update %s:\n", filename) // Show a sample of changes showChanges(originalContent, normalized) return nil } - + // Write the normalized content back if err := os.WriteFile(filename, []byte(normalized), 0644); err != nil { return err } - + fmt.Printf("Updated %s\n", filename) return nil } @@ -109,10 +109,10 @@ func normalizeHTTPRRFile(content string) string { if len(lines) < 2 || lines[0] != "httprr trace v1" { return content // Not a valid httprr file } - + var result strings.Builder result.WriteString("httprr trace v1\n") - + i := 1 for i < len(lines) { // Skip empty lines @@ -120,56 +120,56 @@ func normalizeHTTPRRFile(content string) string { i++ continue } - + // Parse the byte count line (e.g., "773 1369") parts := strings.Fields(lines[i]) if len(parts) != 2 { // Malformed, return original return content } - + reqBytes, err1 := strconv.Atoi(parts[0]) respBytes, err2 := strconv.Atoi(parts[1]) if err1 != nil || err2 != nil { return content // Malformed } - + i++ // Move past the count line - + // Extract the request and response based on byte counts startPos := strings.Index(content[strings.Index(content, lines[i]):], lines[i]) if startPos < 0 { return content } - + // Find the actual position in the full content fullPos := 0 for j := 0; j < i && j < len(lines); j++ { fullPos += len(lines[j]) + 1 // +1 for newline } - + remaining := content[fullPos:] if len(remaining) < reqBytes+respBytes { return content // Not enough data } - + request := remaining[:reqBytes] - response := remaining[reqBytes:reqBytes+respBytes] - + response := remaining[reqBytes : reqBytes+respBytes] + // Normalize the request and response normalizedReq := normalizeContent(request) normalizedResp := normalizeContent(response) - + // Write the updated byte counts and data result.WriteString(fmt.Sprintf("%d %d\n", len(normalizedReq), len(normalizedResp))) result.WriteString(normalizedReq) result.WriteString(normalizedResp) - + // Move to the next record // We need to find where we are in the lines array after consuming the bytes consumed := reqBytes + respBytes pos := fullPos + consumed - + // Find which line we're on now currentPos := 0 for j := 0; j < len(lines); j++ { @@ -179,12 +179,12 @@ func normalizeHTTPRRFile(content string) string { } currentPos += len(lines[j]) + 1 } - + if i >= len(lines)-1 { break } } - + return result.String() } @@ -192,19 +192,19 @@ func normalizeContent(content string) string { // Normalize x-goog-api-client header googClientPattern := regexp.MustCompile(`(x-goog-api-client: )gl-go/[\d.]+ gccl/v?[\d.]+ genai-go/[\d.]+ gapic/[\d.]+ gax/[\d.]+`) content = googClientPattern.ReplaceAllString(content, "${1}gl-go/X.X.X gccl/X.X.X genai-go/X.X.X gapic/X.X.X gax/X.X.X") - + // Normalize other version patterns in x-goog-api-client googClientVersionPattern := regexp.MustCompile(`(x-goog-api-client: [^\r\n]*)/v?\d+\.\d+(\.\d+)?`) content = googClientVersionPattern.ReplaceAllString(content, "${1}/X.X.X") - - // Normalize x-amz-user-agent header + + // Normalize x-amz-user-agent header amzPattern := regexp.MustCompile(`(x-amz-user-agent: [^\r\n]*)\bv?\d+\.\d+(\.\d+)?(-[a-zA-Z0-9.]+)?`) content = amzPattern.ReplaceAllString(content, "${1}X.X.X") - + // Normalize Go version in various headers goVersionPattern := regexp.MustCompile(`\bgo\d+\.\d+(\.\d+)?\b`) content = goVersionPattern.ReplaceAllString(content, "goX.X.X") - + return content } @@ -212,10 +212,10 @@ func showChanges(original, normalized string) { // Show first few differences origLines := strings.Split(original, "\n") normLines := strings.Split(normalized, "\n") - + shown := 0 maxShow := 5 - + for i := 0; i < len(origLines) && i < len(normLines); i++ { if origLines[i] != normLines[i] && shown < maxShow { fmt.Printf(" Line %d:\n", i+1) @@ -224,8 +224,8 @@ func showChanges(original, normalized string) { shown++ } } - + if shown == maxShow { fmt.Println(" ... (more changes)") } -} \ No newline at end of file +} diff --git a/internal/testutil/testctr/testctr.go b/internal/testutil/testctr/testctr.go index 586ac3154..f6c306137 100644 --- a/internal/testutil/testctr/testctr.go +++ b/internal/testutil/testctr/testctr.go @@ -71,8 +71,8 @@ func EnsureTestEnv() int { // Set DOCKER_HOST if using non-standard Docker socket paths (Colima, Lima, etc.) // This works around testcontainers bug where it doesn't properly detect non-standard sockets - if dockerHost != "" && (strings.Contains(dockerHost, "colima") || - strings.Contains(dockerHost, ".lima") || + if dockerHost != "" && (strings.Contains(dockerHost, "colima") || + strings.Contains(dockerHost, ".lima") || !strings.Contains(dockerHost, "/var/run/docker.sock")) { os.Setenv("DOCKER_HOST", dockerHost) if verbose { @@ -98,15 +98,15 @@ func EnsureTestEnv() int { // Set the testcontainers Docker socket override if not already set // This tells testcontainers where to find the actual Docker socket if os.Getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE") == "" { - dockerSocket := "/var/run/docker.sock" // default - + dockerSocket := "/var/run/docker.sock" // default + // For Colima and other non-standard setups, extract socket path from DOCKER_HOST if dockerHost := os.Getenv("DOCKER_HOST"); dockerHost != "" { if strings.HasPrefix(dockerHost, "unix://") { dockerSocket = strings.TrimPrefix(dockerHost, "unix://") } } - + os.Setenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE", dockerSocket) if verbose { fmt.Fprintf(os.Stderr, "testctr: Set TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=%s\n", dockerSocket) diff --git a/prompts/internal/sanitization/sanitize.go b/prompts/internal/sanitization/sanitize.go index 4499dcb38..b50ae8f64 100644 --- a/prompts/internal/sanitization/sanitize.go +++ b/prompts/internal/sanitization/sanitize.go @@ -109,4 +109,3 @@ func isValidIdentifier(name string) bool { return true } - From 2e6a29cfd747584198c6ad22db4166585986fb07 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 03:38:54 +0700 Subject: [PATCH 098/618] docs(llms): drop three comments the tests already assert Neutering the vertex reasoning-off guard reddens TestVertexRejectsExplicitReasoningOff, and returning Known=true from the unrecognized-model branch reddens TestReasoningSupportFor/unknown_model_is_optimistic, so both lines only restated a pinned contract. The third named the header its own regexp spells out. Co-Authored-By: Claude Opus 5 --- internal/devtools/normalize-recordings/main.go | 1 - llms/googleai/vertex/vertex.go | 1 - llms/reasoning_support.go | 2 -- 3 files changed, 4 deletions(-) diff --git a/internal/devtools/normalize-recordings/main.go b/internal/devtools/normalize-recordings/main.go index 02258ed88..8208e3a6d 100644 --- a/internal/devtools/normalize-recordings/main.go +++ b/internal/devtools/normalize-recordings/main.go @@ -197,7 +197,6 @@ func normalizeContent(content string) string { googClientVersionPattern := regexp.MustCompile(`(x-goog-api-client: [^\r\n]*)/v?\d+\.\d+(\.\d+)?`) content = googClientVersionPattern.ReplaceAllString(content, "${1}/X.X.X") - // Normalize x-amz-user-agent header amzPattern := regexp.MustCompile(`(x-amz-user-agent: [^\r\n]*)\bv?\d+\.\d+(\.\d+)?(-[a-zA-Z0-9.]+)?`) content = amzPattern.ReplaceAllString(content, "${1}X.X.X") diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 2fe9f8efa..ed9ef2333 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -80,7 +80,6 @@ func (g *Vertex) GenerateContent( opt(&opts) } - // The pinned vertexai SDK has no thinking config: a disable cannot reach the wire. if opts.Reasoning.ResolveMode() == llms.ReasoningOff { return nil, &reasoning.ErrReasoningOffUnsupported{Model: opts.GetModel()} } diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 1d8521a4b..d73391d83 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -133,8 +133,6 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } - // Unrecognized: optimistic. Known=false tells the UI to show all controls and - // leaves the provider as the arbiter. return ReasoningSupport{Supported: reasoning.LikelyReasoningModel(model), Known: false} } From 28c954e494864966f72d5ee0acaa9ee056918acb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 24 Aug 2026 04:54:34 +0700 Subject: [PATCH 099/618] fix(bedrock): keep the thinking block's field order on the wire Marshalling a thinking block through an embedded alias with a re-declared Thinking field moved that field to the end of the object, so a block went out as {type, signature, thinking}. Anthropic does not care about key order but the recorded requests are matched byte for byte, and TestAmazonTextResponseWithThinkingLegacyAPI stopped replaying. Narrow the special case to the signature-only block that needs it, and pin the order. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 9 +++++---- .../bedrockclient/thinking_replay_test.go | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 5f3f48729..33af4581f 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -60,13 +60,14 @@ type anthropicTextGenerationInputContent struct { func (c anthropicTextGenerationInputContent) MarshalJSON() ([]byte, error) { type alias anthropicTextGenerationInputContent - if c.Type != "thinking" { + if c.Type != "thinking" || c.Thinking != "" { return json.Marshal(alias(c)) } return json.Marshal(struct { - alias - Thinking string `json:"thinking"` - }{alias: alias(c), Thinking: c.Thinking}) + Type string `json:"type"` + Thinking string `json:"thinking"` + Signature string `json:"signature,omitempty"` + }{Type: c.Type, Signature: c.Signature}) } type anthropicCacheControl struct { diff --git a/llms/bedrock/internal/bedrockclient/thinking_replay_test.go b/llms/bedrock/internal/bedrockclient/thinking_replay_test.go index 818580c20..a166c1e79 100644 --- a/llms/bedrock/internal/bedrockclient/thinking_replay_test.go +++ b/llms/bedrock/internal/bedrockclient/thinking_replay_test.go @@ -43,3 +43,20 @@ func TestOtherBlocksDoNotGainAThinkingField(t *testing.T) { }) } } + +func TestThinkingBlockKeepsItsFieldOrder(t *testing.T) { + t.Parallel() + + body, err := json.Marshal(anthropicTextGenerationInputContent{ + Type: "thinking", + Thinking: "reasoned", + Signature: "sig-abc", + }) + if err != nil { + t.Fatalf("marshal: %v", err) + } + const want = `{"type":"thinking","thinking":"reasoned","signature":"sig-abc"}` + if string(body) != want { + t.Errorf("recorded requests are matched byte for byte, so the order is part of the contract:\ngot %s\nwant %s", body, want) + } +} From 357b9c7c17cc10661112c52fdd3a01352cde15eb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:09:44 +0300 Subject: [PATCH 100/618] fix(openai): decide the temperature pin from thinking, not from the model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sampling policy keyed the temperature pin on "a reasoning model whose reasoning is not explicitly disabled". An unset reasoning config is a third state, so a plain completion on a generation that only thinks on request was rewritten to temperature 1.0, while the primary Anthropic door and both Bedrock doors sent the caller's value. The pin also sat in the same switch as the mutually-exclusive-sampling rule, so a request carrying both temperature and top_p matched that arm first and travelled with an effort and a caller temperature the vendor rejects — adding top_p flipped whether the pin happened. Key the pin on whether thinking actually runs, and let the two rules apply independently. Also clamp the effort through the Claude table: this door is the only one that skipped it, so an over-ceiling effort reached the wire here. PAGI-143 --- llms/openai/openaillm.go | 39 +++++++++---- llms/openai/sampling_matrix_test.go | 89 +++++++++++++++++++---------- 2 files changed, 88 insertions(+), 40 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 65476fdd9..e39c843c6 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -311,11 +311,9 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) return o.setReasoningOff(req, opts) } - // Clamp the effort to what the model accepts (e.g. GPT-5 Pro accepts only - // high, GPT-5.4 mini rejects max) so a known-invalid value never reaches the - // API; unknown models pass through unchanged. - caps := reasoning.OpenAIReasoningCapsFor(o.effectiveModel(opts)) - reasoningEffort := llms.ReasoningEffort(caps.ClampEffort(string(opts.Reasoning.GetEffort(opts.GetMaxTokens())))) + model := o.effectiveModel(opts) + effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))) + reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) if !o.client.ModernReasoningFormat { if reasoningEffort != llms.ReasoningNone { @@ -362,24 +360,43 @@ func (o *LLM) writeDisableEffort(req *openaiclient.ChatRequest) { } func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string) { - switch model := o.effectiveModel(opts); { - case reasoning.ClaudeRejectsSampling(model): + model := o.effectiveModel(opts) + if reasoning.ClaudeRejectsSampling(model) { req.Temperature, req.TopP, req.TopK, req.MinP = nil, nil, nil, nil - case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: - req.TopP = nil - case reasoning.IsReasoningModel(model) && !opts.Reasoning.IsDisabled() && - !reasoning.OpenAIAcceptsCustomTemperature(model): + return + } + + switch { + case thinkingRuns(model, opts, wireEffort) && !reasoning.OpenAIAcceptsCustomTemperature(model): if req.Temperature != nil { temperature := 1.0 req.Temperature = &temperature } req.TopP = nil + case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: + req.TopP = nil } + if isThinkingOnTheWire(wireEffort) { req.TopP = nil } } +// thinkingRuns reports whether the model reasons on this request: an effort +// reached the wire, or none did and the model reasons until told otherwise. +func thinkingRuns(model string, opts llms.CallOptions, wireEffort string) bool { + if opts.Reasoning.IsDisabled() || !reasoning.IsReasoningModel(model) { + return false + } + if isThinkingOnTheWire(wireEffort) { + return true + } + if reasoning.ClaudeSupportsThinking(model) { + return reasoning.ClaudeThinkingDefaultsOn(model) + } + return true +} + func isThinkingOnTheWire(wireEffort string) bool { return wireEffort != "" && wireEffort != reasoning.OpenAIDisableEffort } diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 381245905..9a6e66949 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -38,6 +38,34 @@ func sendForWire(t *testing.T, model string, opts ...llms.CallOption) string { return body } +type samplingCase struct { + name string + model string + opts []llms.CallOption + present []string + absent []string +} + +func runSamplingCases(t *testing.T, cases []samplingCase) { + t.Helper() + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + body := sendForWire(t, tc.model, tc.opts...) + for _, want := range tc.present { + if !strings.Contains(body, want) { + t.Errorf("want %s on the wire, got body: %s", want, body) + } + } + for _, unwanted := range tc.absent { + if strings.Contains(body, unwanted) { + t.Errorf("want no %s on the wire, got body: %s", unwanted, body) + } + } + }) + } +} + func TestSamplingMatrix(t *testing.T) { t.Parallel() @@ -46,13 +74,7 @@ func TestSamplingMatrix(t *testing.T) { high := llms.WithReasoning(llms.ReasoningHigh, 0) off := llms.WithReasoningDisabled() - for _, tc := range []struct { - name string - model string - opts []llms.CallOption - present []string - absent []string - }{{ + runSamplingCases(t, []samplingCase{{ name: "accepting model keeps its temperature while thinking", model: "gpt-5.4", opts: []llms.CallOption{temp, topP, high}, @@ -76,12 +98,27 @@ func TestSamplingMatrix(t *testing.T) { present: []string{`"temperature":0.3`, `"top_p":0.9`}, absent: []string{`"reasoning_effort"`}, }, { - name: "omitted effort pins a non-accepting name", + name: "omitted effort pins a name that thinks by default", model: "gpt-5.5", opts: []llms.CallOption{temp, topP}, present: []string{`"temperature":1`}, absent: []string{`"top_p"`, `"reasoning_effort"`}, }, { + name: "a non-reasoning model keeps everything", + model: "gpt-4.1", + opts: []llms.CallOption{temp, topP}, + present: []string{`"temperature":0.3`, `"top_p":0.9`}, + }}) +} + +func TestClaudeSamplingMatrix(t *testing.T) { + t.Parallel() + + temp := llms.WithTemperature(0.3) + topP := llms.WithTopP(0.9) + high := llms.WithReasoning(llms.ReasoningHigh, 0) + + runSamplingCases(t, []samplingCase{{ name: "a model that rejects sampling gets neither param", model: "claude-opus-4-7", opts: []llms.CallOption{temp, topP}, @@ -93,36 +130,30 @@ func TestSamplingMatrix(t *testing.T) { present: []string{`"temperature":0.3`}, absent: []string{`"top_p"`}, }, { - name: "temperature alone on the same model is pinned instead", + name: "an omitted effort leaves a request-only thinker unpinned", model: "claude-opus-4-5", opts: []llms.CallOption{temp}, - present: []string{`"temperature":1`}, + present: []string{`"temperature":0.3`}, + absent: []string{`"reasoning_effort"`}, }, { - name: "a non-reasoning model keeps everything", - model: "gpt-4.1", - opts: []llms.CallOption{temp, topP}, - present: []string{`"temperature":0.3`, `"top_p":0.9`}, + name: "thinking pins the temperature even when top_p forced a drop", + model: "claude-sonnet-4-5", + opts: []llms.CallOption{temp, topP, high}, + present: []string{`"temperature":1`, `"reasoning_effort":"high"`}, + absent: []string{`"top_p"`}, + }, { + name: "an effort above the generation's ceiling is lowered", + model: "claude-opus-4-6", + opts: []llms.CallOption{llms.WithReasoning(llms.ReasoningXHigh, 0)}, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"reasoning_effort":"xhigh"`}, }, { name: "extra body overwrites a param the policy stripped", model: "claude-opus-4-7", opts: []llms.CallOption{temp, topP, WithExtraBody(map[string]any{"temperature": 0.7})}, present: []string{`"temperature":0.7`}, absent: []string{`"top_p"`}, - }} { - t.Run(tc.name, func(t *testing.T) { - body := sendForWire(t, tc.model, tc.opts...) - for _, want := range tc.present { - if !strings.Contains(body, want) { - t.Errorf("want %s on the wire, got body: %s", want, body) - } - } - for _, unwanted := range tc.absent { - if strings.Contains(body, unwanted) { - t.Errorf("want no %s on the wire, got body: %s", unwanted, body) - } - } - }) - } + }}) } func TestAModelThatRejectsSamplingGetsNoSamplingAtAll(t *testing.T) { From 1e701e880e2b0eaf05e8270e8afcb02bd126ea31 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:10:50 +0300 Subject: [PATCH 101/618] refactor(openai): drop the disable path's inert return value setReasoningOff reported the disable token as the effort that reached the wire, but its single caller feeds that string to isThinkingOnTheWire, where both the token and the empty string mean the same thing. Return only the error. PAGI-143 --- llms/openai/openaillm.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index e39c843c6..68f9bc03b 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -308,7 +308,7 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) case llms.ReasoningDefault: return "", nil case llms.ReasoningOff: - return o.setReasoningOff(req, opts) + return "", o.setReasoningOff(req, opts) } model := o.effectiveModel(opts) @@ -336,18 +336,17 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) } // setReasoningOff sends the model's explicit disable token so a reasoning model -// runs as a plain completion. Sampling params are left intact (a non-thinking -// call); a model whose thinking cannot be disabled returns a typed error. -func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { +// runs as a plain completion; a model whose thinking cannot be disabled returns +// a typed error. +func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptions) error { model := o.effectiveModel(opts) switch reasoning.ResolveOff(model, reasoning.ProviderOpenAI) { //nolint:exhaustive // only OpenAI-relevant wires are handled; others are a no-op case reasoning.OffUnsupported: - return "", &reasoning.ErrReasoningOffUnsupported{Model: model} + return &reasoning.ErrReasoningOffUnsupported{Model: model} case reasoning.OffEffortNone: o.writeDisableEffort(req) - return reasoning.OpenAIDisableEffort, nil } - return "", nil + return nil } func (o *LLM) writeDisableEffort(req *openaiclient.ChatRequest) { From 9997d1346e3d00afc926d1ba11e9b03a54d86b6b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:14:34 +0300 Subject: [PATCH 102/618] fix(anthropic): keep every text block and refuse an unmapped budget processAnthropicResponse assigned the text of each block over the previous one, so a turn that resumed text after a tool call returned only its last segment while handleAIMessage on the request side emits all of them. Accumulate instead. The budget payload was written straight from GetTokens, which reports -1 for an effort it cannot map, so such a call travelled as budget_tokens:-1 and skipped the temperature correction that keys on a positive budget. Both Bedrock doors already gate on a positive budget; do the same here. PAGI-143 --- llms/anthropic/anthropicllm.go | 15 ++-- llms/anthropic/response_folding_test.go | 99 +++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 llms/anthropic/response_folding_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index c9b4a24f1..40e10e58e 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -210,10 +210,10 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag outputConfig = &anthropicclient.OutputConfig{ Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), } - } else { + } else if budget := opts.Reasoning.GetTokens(opts.GetMaxTokens()); budget > 0 { thinking = &anthropicclient.ThinkingPayload{ Type: "enabled", - Budget: opts.Reasoning.GetTokens(opts.GetMaxTokens()), + Budget: budget, } // Some budget-thinking models (Opus 4.5) also honor effort; without this // the caller's effort is silently dropped on the budget path. @@ -280,8 +280,9 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag temperature = nil topP = nil case thinking != nil && thinking.Type == "enabled" && thinking.Budget > 0: - temperature = getFloatPointer(1.0) - if reasoning.ClaudeRejectsSampling(model) { + if !reasoning.ClaudeRejectsSampling(model) { + temperature = getFloatPointer(1.0) + } else { temperature = nil } topP = nil @@ -390,12 +391,12 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // Process content blocks to collect text and tool calls var toolCalls []llms.ToolCall - var textContent string + var textContent strings.Builder for _, content := range result.Content { switch cv := content.(type) { case *anthropicclient.TextContent: - textContent = cv.Text + textContent.WriteString(cv.Text) case *anthropicclient.ToolUseContent: argumentsJSON, err := json.Marshal(cv.Input) if err != nil { @@ -415,7 +416,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // Build response choice - reasoning ALWAYS goes to choice, not tool calls choice := &llms.ContentChoice{ - Content: textContent, + Content: textContent.String(), Reasoning: contentReasoning, // Always in choice for Anthropic ToolCalls: toolCalls, StopReason: result.StopReason, diff --git a/llms/anthropic/response_folding_test.go b/llms/anthropic/response_folding_test.go new file mode 100644 index 000000000..9e6ac9a5e --- /dev/null +++ b/llms/anthropic/response_folding_test.go @@ -0,0 +1,99 @@ +package anthropic + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +// serveAnthropic replies with response; the returned pointer holds the request +// body once GenerateContent returns. +func serveAnthropic(t *testing.T, response string) (*httptest.Server, *string) { + t.Helper() + + sent := new(string) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + *sent = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, response) + })) + t.Cleanup(srv.Close) + + return srv, sent +} + +func TestEveryTextBlockOfATurnReachesTheChoice(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m","content":[` + + `{"type":"text","text":"17 * 23 = "},` + + `{"type":"tool_use","id":"t1","name":"calc","input":{"expr":"17*23"}},` + + `{"type":"text","text":"391."}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}` + + srv, _ := serveAnthropic(t, resp) + + llm, err := New(WithBaseURL(srv.URL), WithToken("t"), WithModel("claude-sonnet-4-5-20250929")) + require.NoError(t, err) + + got, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + + assert.Equal(t, "17 * 23 = 391.", got.Choices[0].Content, + "a turn that resumes text after a tool call must keep both segments") + assert.Len(t, got.Choices[0].ToolCalls, 1) +} + +func TestAnEffortWithNoBudgetSendsNoThinking(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + srv, sent := serveAnthropic(t, resp) + + llm, err := New(WithBaseURL(srv.URL), WithToken("t"), WithModel("claude-sonnet-4-5-20250929")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningEffort("minimal"), 0)) + require.NoError(t, err) + + assert.NotContains(t, *sent, `"budget_tokens":-1`, + "an effort the budget table does not map must not travel as a negative budget") + assert.NotContains(t, *sent, `"thinking"`, + "no budget means no thinking payload, as on both Bedrock doors") +} + +func TestABudgetedEffortStillSendsThinking(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + srv, sent := serveAnthropic(t, resp) + + llm, err := New(WithBaseURL(srv.URL), WithToken("t"), WithModel("claude-sonnet-4-5-20250929")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithMaxTokens(8000)) + require.NoError(t, err) + + assert.Contains(t, *sent, `"type":"enabled"`) + require.False(t, strings.Contains(*sent, `"budget_tokens":0`), + "a mapped effort must carry a positive budget") +} From cfd6ad076f980b19620703150706cd8d1bb65446 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:19:33 +0300 Subject: [PATCH 103/618] fix(bedrock): key the forced-tool refusal to the models it describes The rule that manual thinking rejects a forced tool choice is Anthropic's, but the guard derived "manual thinking" from ResolveClaudeAdaptive, which reports the caller's own preference for a name it does not classify. Every non-Claude family therefore counted as manual thinking, so Nova, Llama, Kimi and gpt-oss requests carrying a reasoning option and a forced tool choice were refused before any request was built, though no thinking payload is ever sent for them. Gate it on the model being a Claude thinking generation, as the neighbouring prefill guard already is, and cover a non-Claude family in the test. PAGI-143 --- llms/bedrock/bedrockllm.go | 1 + llms/bedrock/turn_limits_test.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index f45ac3e0f..49612bfe8 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -380,6 +380,7 @@ var _ llms.Model = (*LLM)(nil) func checkAnthropicTurnLimits(opts *llms.CallOptions, messages []llms.MessageContent) error { model := opts.GetModel() manualThinking := opts.Reasoning.ResolveMode() == llms.ReasoningOn && + reasoning.ClaudeSupportsThinking(model) && !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) if manualThinking && llms.ForcesToolUse(opts.ToolChoice) { return &reasoning.ErrForcedToolUseWithThinking{Model: model} diff --git a/llms/bedrock/turn_limits_test.go b/llms/bedrock/turn_limits_test.go index a8d3c8329..3d16bbf1d 100644 --- a/llms/bedrock/turn_limits_test.go +++ b/llms/bedrock/turn_limits_test.go @@ -52,5 +52,18 @@ func TestBedrockRefusesTheSameTurnsAsThePrimaryDoor(t *testing.T) { t.Errorf("want ErrForcedToolUseWithThinking, got %v", err) } }) + + t.Run(name+"/a non-Claude family is not refused for the same turn", func(t *testing.T) { + t.Parallel() + llm := truncationLLMWithBody(t, `{}`, + append([]bedrock.Option{bedrock.WithModel("us.amazon.nova-pro-v1:0")}, opts...)...) + _, err := llm.GenerateContent(context.Background(), turnLimitMessages(llms.ChatMessageTypeHuman), + llms.WithReasoning(llms.ReasoningMedium, 2048), + llms.WithToolChoice(llms.ToolChoice{Type: "any"})) + var target *reasoning.ErrForcedToolUseWithThinking + if errors.As(err, &target) { + t.Errorf("the Claude-only rule refused a family that never carries a thinking payload: %v", err) + } + }) } } From 7ba45e8966f287e59b927e0b49c3cee4ccb79fc9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:33:46 +0300 Subject: [PATCH 104/618] fix(bedrock): substitute a missing max-tokens once on the legacy door MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The payload substituted 2048 for an absent max-tokens while the reasoning resolver, handed the raw value, let GetTokens substitute the shared default of 16384. WithMaxTokens(0) plus a low effort therefore built max_tokens 2048 next to budget_tokens 4096, which the API rejects. Resolve the value once and pass that same number to the resolver. The streaming parser created the reasoning block only while thinking text was arriving, so a block that came as a signature alone left it nil and the accumulated signature was dropped — the non-streaming path of this door and both neighbouring doors keep such a block. Attach it either way. The signature test frames real event-stream chunks, which makes the SDK's eventstream package a direct dependency. PAGI-143 --- go.mod | 2 +- .../bedrockclient/provider_anthropic.go | 15 +- llms/bedrock/legacy_thinking_test.go | 135 ++++++++++++++++++ 3 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 llms/bedrock/legacy_thinking_test.go diff --git a/go.mod b/go.mod index edae345ed..0f774026f 100644 --- a/go.mod +++ b/go.mod @@ -125,7 +125,7 @@ require ( cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect cloud.google.com/go/longrunning v0.6.7 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 github.com/aws/aws-sdk-go-v2/credentials v1.19.10 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 33af4581f..6a14646fa 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -233,9 +233,10 @@ func createAnthropicCompletion(ctx context.Context, system = systemPrompt } + maxTokens := getMaxTokens(options.GetMaxTokens(), 2048) input := anthropicTextGenerationInput{ AnthropicVersion: AnthropicLatestVersion, - MaxTokens: getMaxTokens(options.GetMaxTokens(), 2048), + MaxTokens: maxTokens, System: system, Messages: inputContents, Temperature: options.GetTemperature(), @@ -245,7 +246,7 @@ func createAnthropicCompletion(ctx context.Context, Tools: tools, } - if err := applyAnthropicReasoning(&input, options.Reasoning, modelID, options.GetMaxTokens()); err != nil { + if err := applyAnthropicReasoning(&input, options.Reasoning, modelID, maxTokens); err != nil { return nil, err } @@ -538,7 +539,10 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim contentchoices[0].ToolCalls = toolCalls // Add signature to reasoning if accumulated - if signature.Len() > 0 && contentchoices[0].Reasoning != nil { + if signature.Len() > 0 { + if contentchoices[0].Reasoning == nil { + contentchoices[0].Reasoning = &reasoning.ContentReasoning{} + } contentchoices[0].Reasoning.Signature = []byte(signature.String()) } @@ -733,11 +737,10 @@ func applyAnthropicReasoning( input.TopK = 0 } setBudget := func() { - mt := maxTokens - if tokens := cfg.GetTokens(mt); tokens > 0 { + if tokens := cfg.GetTokens(maxTokens); tokens > 0 { input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { - input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(mt)))} + input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. input.Temperature = 1.0 diff --git a/llms/bedrock/legacy_thinking_test.go b/llms/bedrock/legacy_thinking_test.go new file mode 100644 index 000000000..8f667695b --- /dev/null +++ b/llms/bedrock/legacy_thinking_test.go @@ -0,0 +1,135 @@ +package bedrock_test + +import ( + "context" + "encoding/base64" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +// legacyLLMCapturing serves body and reports the request the door built. +func legacyLLMCapturing(t *testing.T, body string, opts ...bedrock.Option) (*bedrock.LLM, *string) { + t.Helper() + + sent := new(string) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + *sent = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + return bedrockLLMAgainst(t, srv, opts...), sent +} + +func bedrockLLMAgainst(t *testing.T, srv *httptest.Server, opts ...bedrock.Option) *bedrock.LLM { + t.Helper() + + client := bedrockruntime.NewFromConfig(aws.Config{ + Region: "us-east-1", + Credentials: credentials.NewStaticCredentialsProvider("unit", "test", ""), + }, func(o *bedrockruntime.Options) { + o.BaseEndpoint = aws.String(srv.URL) + }) + + llm, err := bedrock.New(append([]bedrock.Option{bedrock.WithClient(client)}, opts...)...) + require.NoError(t, err) + return llm +} + +func TestLegacyBudgetStaysBelowMaxTokens(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + llm, sent := legacyLLMCapturing(t, resp, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithMaxTokens(0), llms.WithReasoning(llms.ReasoningLow, 0)) + require.NoError(t, err) + + var got struct { + MaxTokens int `json:"max_tokens"` + Thinking struct { + BudgetTokens int `json:"budget_tokens"` + } `json:"thinking"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &got)) + + assert.Positive(t, got.Thinking.BudgetTokens, "budget thinking must carry a budget") + assert.Less(t, got.Thinking.BudgetTokens, got.MaxTokens, + "a missing max-tokens must be substituted once, not twice with different values") +} + +func writeBedrockChunk(t *testing.T, w io.Writer, enc *eventstream.Encoder, chunk string) { + t.Helper() + + envelope, err := json.Marshal(map[string]string{ + "bytes": base64.StdEncoding.EncodeToString([]byte(chunk)), + }) + require.NoError(t, err) + + require.NoError(t, enc.Encode(w, eventstream.Message{ + Headers: eventstream.Headers{ + {Name: ":message-type", Value: eventstream.StringValue("event")}, + {Name: ":event-type", Value: eventstream.StringValue("chunk")}, + {Name: ":content-type", Value: eventstream.StringValue("application/json")}, + }, + Payload: envelope, + })) +} + +func TestLegacyStreamKeepsASignatureOnlyThinkingBlock(t *testing.T) { + t.Parallel() + + chunks := []string{ + `{"type":"message_start","message":{"usage":{"input_tokens":1,"output_tokens":0}}}`, + `{"type":"content_block_start","content_block":{"type":"thinking"}}`, + `{"type":"content_block_delta","delta":{"type":"signature_delta","signature":"sig-only"}}`, + `{"type":"content_block_stop"}`, + `{"type":"content_block_delta","delta":{"type":"text_delta","text":"ok"}}`, + `{"type":"message_delta","delta":{"stop_reason":"end_turn"},"message":{"usage":{"input_tokens":1,"output_tokens":1}}}`, + `{"type":"message_stop"}`, + } + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + for _, chunk := range chunks { + writeBedrockChunk(t, w, enc, chunk) + } + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + got, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(_ context.Context, _ streaming.Chunk) error { return nil })) + require.NoError(t, err) + + choice := got.Choices[0] + require.NotNil(t, choice.Reasoning, + "a thinking block that arrived as a signature alone must survive, as it does off the stream") + assert.Equal(t, "sig-only", string(choice.Reasoning.Signature)) +} From 8a1171b29e371c334aaa58dc8243bc89d9c9f5e2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:37:46 +0300 Subject: [PATCH 105/618] fix(bedrock): keep the reasoning text field on the Converse door Both places that build a Converse reasoning block admit one when either the thinking text or the signature is present, but wrote the text through a helper that turns an empty string into nil. A block replayed as a signature alone therefore lost a field the SDK marks required, and the validator refused the call before it left the process, ending any thinking conversation at its second turn. The primary door and the legacy door were both taught to emit the empty text; do the same here. PAGI-143 --- .../bedrockclient/bedrockclient_converse.go | 4 +- .../bedrockclient/reasoning_replay_test.go | 65 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/reasoning_replay_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 31a9f0bee..c7e6807a2 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -284,7 +284,7 @@ func (a *aiMessageAccumulator) build() types.Message { if a.reasoning != nil && (a.reasoning.Content != "" || len(a.reasoning.Signature) > 0) { reasoningBlock := types.ReasoningContentBlockMemberReasoningText{ Value: types.ReasoningTextBlock{ - Text: ptrStringOrNil(a.reasoning.Content), + Text: aws.String(a.reasoning.Content), Signature: ptrStringOrNil(string(a.reasoning.Signature)), }, } @@ -546,7 +546,7 @@ func (c *ConverseClient) convertUserOrAssistantMessage(msg Message) (types.Messa if msg.Reasoning.Content != "" || len(msg.Reasoning.Signature) > 0 { reasoningBlock := types.ReasoningContentBlockMemberReasoningText{ Value: types.ReasoningTextBlock{ - Text: ptrStringOrNil(msg.Reasoning.Content), + Text: aws.String(msg.Reasoning.Content), Signature: ptrStringOrNil(string(msg.Reasoning.Signature)), }, } diff --git a/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go b/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go new file mode 100644 index 000000000..497fcd1d3 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go @@ -0,0 +1,65 @@ +package bedrockclient + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func reasoningTextOf(t *testing.T, blocks []types.ContentBlock) types.ReasoningTextBlock { + t.Helper() + + for _, block := range blocks { + wrapper, ok := block.(*types.ContentBlockMemberReasoningContent) + if !ok { + continue + } + text, ok := wrapper.Value.(*types.ReasoningContentBlockMemberReasoningText) + require.True(t, ok, "the reasoning block must carry reasoningText") + return text.Value + } + + t.Fatal("no reasoning block was emitted") + return types.ReasoningTextBlock{} +} + +func TestSignatureOnlyReasoningKeepsTheTextField(t *testing.T) { + t.Parallel() + + signatureOnly := &reasoning.ContentReasoning{Signature: []byte("sig-only")} + + t.Run("replayed message", func(t *testing.T) { + t.Parallel() + + client := &ConverseClient{} + msg, err := client.convertUserOrAssistantMessage(Message{ + Role: llms.ChatMessageTypeAI, + Type: "text", + Reasoning: signatureOnly, + }) + require.NoError(t, err) + + block := reasoningTextOf(t, msg.Content) + require.NotNil(t, block.Text) + assert.Empty(t, *block.Text) + require.NotNil(t, block.Signature) + assert.Equal(t, "sig-only", *block.Signature) + }) + + t.Run("accumulated message", func(t *testing.T) { + t.Parallel() + + acc := &aiMessageAccumulator{reasoning: signatureOnly} + + block := reasoningTextOf(t, acc.build().Content) + require.NotNil(t, block.Text) + assert.Empty(t, *block.Text) + require.NotNil(t, block.Signature) + assert.Equal(t, "sig-only", *block.Signature) + }) +} From 71a53d50192f2ad527f990f7297401cf6f1deb2d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:41:36 +0300 Subject: [PATCH 106/618] fix(llms): read truncation from the stop reason, not the companion flag WithFailOnTruncation consulted ContentChoice.Truncated, a field twenty-eight call sites fill by hand next to the stop reason they derive it from. A door that fills one and forgets the other therefore lost the error the caller asked for, with nothing to catch it. Derive the answer where it is read; every site already passes the same value to both, so the outcome is unchanged wherever the pair is written and correct where it is not. Add Mistral's model_length, the context-limit spelling the table missed. No recorded cassette carries it and the vendored client enumerates only three reasons, so the wire value stays unconfirmed; the entry is inert until it appears and correct if it does. PAGI-143 --- llms/stopreason.go | 7 ++++--- llms/stopreason_test.go | 13 +++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/llms/stopreason.go b/llms/stopreason.go index 0b03c8665..2b94d839c 100644 --- a/llms/stopreason.go +++ b/llms/stopreason.go @@ -6,8 +6,9 @@ import ( ) var truncationStopReasons = map[string]bool{ - "length": true, - "max_tokens": true, + "length": true, + "max_tokens": true, + "model_length": true, } // IsTruncated reports whether a vendor stop reason means generation stopped at @@ -24,7 +25,7 @@ func CheckTruncation(resp *ContentResponse, opts CallOptions) error { return nil } for i, choice := range resp.Choices { - if choice == nil || !choice.Truncated { + if choice == nil || !IsTruncated(choice.StopReason) { continue } return NewError(ErrCodeTruncated, "", fmt.Sprintf( diff --git a/llms/stopreason_test.go b/llms/stopreason_test.go index 23bc04a19..31af6560c 100644 --- a/llms/stopreason_test.go +++ b/llms/stopreason_test.go @@ -25,6 +25,7 @@ func TestIsTruncatedCoversEveryVendorSpelling(t *testing.T) { "bedrock deepseek": "length", "googleai": "MAX_TOKENS", "vertex": "MAX_TOKENS", + "mistral context": "model_length", } for vendor, reason := range truncated { assert.True(t, IsTruncated(reason), "%s spells truncation %q", vendor, reason) @@ -61,6 +62,18 @@ func TestCheckTruncationStaysSilentUnlessRequested(t *testing.T) { assert.Contains(t, err.Error(), "max_tokens") } +func TestCheckTruncationReadsTheStopReasonNotTheFlag(t *testing.T) { + t.Parallel() + + unflagged := &ContentResponse{Choices: []*ContentChoice{ + {Content: "half an ans", StopReason: "length"}, + }} + + err := CheckTruncation(unflagged, CallOptions{FailOnTruncation: true}) + require.Error(t, err) + assert.True(t, IsTruncatedError(err)) +} + func TestCheckTruncationReportsALaterChoice(t *testing.T) { t.Parallel() From 66ba62aea1720d9e3097036c99332c3c0026d7bd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:45:11 +0300 Subject: [PATCH 107/618] fix(reasoning): match Claude tables on one canonical spelling The structured-output gate listed the Claude 4.0 generation only by its dated ids, so the claude-opus-4-0 and claude-sonnet-4-0 aliases reached the API for a raw 4xx while their dated twins were refused locally with the typed error callers branch on. The neighbouring generation table already classified both. Match DefaultIsReasoningModel against the canonical form, which retires the dotted duplicates it had to carry, and drop the two dotted table entries that the canonicalising lookups can never reach. Strip the platform prefix in the UI hint as the wire predicate does, so one model does not get two answers depending on how it is spelled, and stop claudePreThinking from claiming 3.7 predates thinking, which its own doc denies. PAGI-143 --- llms/reasoning/claude_capability.go | 8 +-- llms/reasoning/claude_name_forms_test.go | 63 ++++++++++++++++++++++++ llms/reasoning/detect_hint.go | 13 +++-- llms/reasoning/reasoning.go | 19 ++++--- 4 files changed, 86 insertions(+), 17 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 03ee378f8..55980d136 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -46,7 +46,7 @@ var ( budgetOnlyClaude = []string{ "claude-opus-4-5", "claude-sonnet-4-5", - "claude-haiku-4-5", "claude-haiku-4.5", + "claude-haiku-4-5", } ) @@ -191,8 +191,10 @@ func ClaudeMutuallyExclusiveSampling(model string) bool { // on them is rejected locally rather than sent for a guaranteed 4xx. var legacyNoStructuredClaude = []string{ "claude-2", "claude-v2", "claude-instant", - "claude-3-", "claude-3.", - "claude-opus-4-1", "claude-opus-4-20", "claude-sonnet-4-20", + "claude-3-", + "claude-opus-4-1", + "claude-opus-4-0", "claude-opus-4-20", + "claude-sonnet-4-0", "claude-sonnet-4-20", } // ClaudeSupportsStructuredOutput reports whether the model can be asked for schema diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 2297ab27c..cf7274c54 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -145,6 +145,69 @@ func TestClaudeFourAliasesAreClassified(t *testing.T) { } } +func TestStructuredOutputGateSeesEverySpellingOfTheSameGeneration(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "claude-opus-4-0", "claude-sonnet-4-0", + "claude-opus-4@20250514", "claude-sonnet-4@20250514", + "claude-opus-4-20250514", "claude-sonnet-4-20250514", + "us.anthropic.claude-sonnet-4-0", + } { + if ClaudeSupportsStructuredOutput(model) { + t.Errorf("%q predates structured output, so it must be refused locally", model) + } + } + + for _, model := range []string{ + "claude-sonnet-4-5", "claude-opus-4-5", "claude-opus-4-6", "claude-opus-5", + } { + if !ClaudeSupportsStructuredOutput(model) { + t.Errorf("%q takes structured output", model) + } + } +} + +func TestDottedSpellingsSurviveTheirTableEntriesBeingDropped(t *testing.T) { + t.Parallel() + + if got := ClaudeReasoningKindFor("claude-haiku-4.5"); got != ClaudeReasoningBudgetOnly { + t.Errorf("ClaudeReasoningKindFor(dotted haiku) = %v, want budget-only", got) + } + if ClaudeSupportsStructuredOutput("claude-3.5-sonnet") { + t.Error("the dotted Claude 3 spelling predates structured output too") + } +} + +func TestLikelyReasoningModelIgnoresThePlatformSpelling(t *testing.T) { + t.Parallel() + + for _, pair := range [][2]string{ + {"claude-9-sonnet", "us.anthropic.claude-9-sonnet"}, + {"gpt-9", "azure.gpt-9"}, + } { + bare, platform := LikelyReasoningModel(pair[0]), LikelyReasoningModel(pair[1]) + if bare != platform { + t.Errorf("hint differs by spelling: %q = %v, %q = %v", pair[0], bare, pair[1], platform) + } + } +} + +func TestClaudePreThinkingStopsBelow37(t *testing.T) { + t.Parallel() + + for _, model := range []string{"claude-3-7-sonnet-20250219", "claude-3.7-sonnet"} { + if claudePreThinking(model) { + t.Errorf("%q is where extended thinking starts, not below it", model) + } + } + for _, model := range []string{"claude-3-5-sonnet", "claude-3.5-sonnet", "claude-2", "claude-instant-1"} { + if !claudePreThinking(model) { + t.Errorf("%q predates extended thinking", model) + } + } +} + func TestClaudeClampEffortStepsDownNotUp(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index cf443a7f8..b5e084fac 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -17,6 +17,7 @@ func LikelyReasoningModel(model string) bool { if idx := strings.LastIndex(m, "/"); idx != -1 { m = m[idx+1:] } + m = stripPlatformPrefix(m) if namesNonTextModality(m) { return false @@ -48,10 +49,14 @@ func openAIPreReasoning(m string) bool { // claudePreThinking matches the Claude generations below 3.7, where extended // thinking starts. func claudePreThinking(m string) bool { - return strings.HasPrefix(m, "claude-2") || - strings.HasPrefix(m, "claude-v2") || - strings.HasPrefix(m, "claude-instant") || - strings.HasPrefix(m, "claude-3") + c := canonicalClaude(m) + if strings.Contains(c, "claude-3-7") { + return false + } + return strings.HasPrefix(c, "claude-2") || + strings.HasPrefix(c, "claude-v2") || + strings.HasPrefix(c, "claude-instant") || + strings.HasPrefix(c, "claude-3") } // isOSeries matches the OpenAI o-series naming (o1, o3, o4-mini, successors); diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 69ba1b483..9bd090a1c 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -195,16 +195,15 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata } // Anthropic extended thinking / adaptive models - if strings.Contains(modelLower, "claude-3.7") || - strings.Contains(modelLower, "claude-3-7") || - strings.HasPrefix(modelLower, "claude-opus-4") || - strings.HasPrefix(modelLower, "claude-opus-5") || - strings.HasPrefix(modelLower, "claude-sonnet-4") || - strings.HasPrefix(modelLower, "claude-sonnet-5") || - strings.Contains(modelLower, "claude-fable-5") || - strings.Contains(modelLower, "claude-mythos-5") || - strings.Contains(modelLower, "claude-haiku-4.5") || - strings.Contains(modelLower, "claude-haiku-4-5") { + claudeName := canonicalClaude(modelLower) + if strings.Contains(claudeName, "claude-3-7") || + strings.HasPrefix(claudeName, "claude-opus-4") || + strings.HasPrefix(claudeName, "claude-opus-5") || + strings.HasPrefix(claudeName, "claude-sonnet-4") || + strings.HasPrefix(claudeName, "claude-sonnet-5") || + strings.Contains(claudeName, "claude-fable-5") || + strings.Contains(claudeName, "claude-mythos-5") || + strings.Contains(claudeName, "claude-haiku-4-5") { return true } From 08fa0f76af5a22b5613b93755c1e29b9c5e1a179 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:50:02 +0300 Subject: [PATCH 108/618] fix(reasoning): clamp an effort to a level the model lists ClampEffort only lowered efforts above the ceiling, so one below the floor of a model's set passed straight through: gpt-5.2 accepts low through xhigh, and a requested "minimal" reached the wire for a rejection the clamp exists to avoid. Decide by membership and move to the nearest listed level in either direction. The Google branch of the hint reported Known while leaving Mechanism unset, so a caller reading the mechanism could not tell a thinking level from a token budget; derive it from the family the resolver already distinguishes. PAGI-143 --- llms/reasoning/openai_capability.go | 32 +++++++++++++++--------- llms/reasoning/openai_capability_test.go | 26 +++++++++++++++++++ llms/reasoning_support.go | 6 +++++ llms/reasoning_support_test.go | 21 ++++++++++++++++ 4 files changed, 73 insertions(+), 12 deletions(-) diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 824904afa..148f5c7be 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -1,6 +1,9 @@ package reasoning -import "strings" +import ( + "slices" + "strings" +) // openAIEffortRank orders OpenAI reasoning efforts so a requested effort can be // clamped to a model's ceiling. It does not include "none", which is the disable @@ -29,22 +32,27 @@ type OpenAIReasoningCaps struct { Efforts []string } -// ClampEffort lowers a requested effort to what the model accepts: an effort -// above the model's ceiling drops to the ceiling, and a model that accepts a -// single effort (e.g. GPT-5 Pro accepts only "high") pins to it. Unknown models -// and the empty effort are returned unchanged. +// ClampEffort moves a requested effort to one the model accepts: above the +// ceiling drops to the ceiling, below the floor rises to the floor, and anything +// the set does not list steps down to the nearest level it does (a model +// accepting a single effort, e.g. GPT-5 Pro, pins to it). Unknown models and +// efforts outside the scale are returned unchanged. func (c OpenAIReasoningCaps) ClampEffort(effort string) string { - if !c.Known || effort == "" || len(c.Efforts) == 0 { + want, ranked := openAIEffortRank[effort] + if !c.Known || !ranked || len(c.Efforts) == 0 { return effort } - if len(c.Efforts) == 1 { - return c.Efforts[0] + if slices.Contains(c.Efforts, effort) { + return effort } - ceiling := c.Efforts[len(c.Efforts)-1] - if openAIEffortRank[effort] > openAIEffortRank[ceiling] { - return ceiling + + accepted := c.Efforts[0] + for _, level := range c.Efforts { + if openAIEffortRank[level] <= want { + accepted = level + } } - return effort + return accepted } // OpenAIReasoningCapsFor classifies an OpenAI reasoning model by the effort set diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index 08d7cb790..27341cab2 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -96,3 +96,29 @@ func TestResolveOffOpenAIGeneration(t *testing.T) { } } } + +func TestClampEffortMovesToAnAcceptedLevel(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + effort string + want string + }{ + {"gpt-5.2", "minimal", "low"}, + {"gpt-5.2", "max", "xhigh"}, + {"gpt-5.2", "medium", "medium"}, + {"gpt-5", "minimal", "minimal"}, + {"gpt-5", "xhigh", "high"}, + {"gpt-5-pro", "low", "high"}, + {"gpt-5-pro", "max", "high"}, + {"gpt-5.1", "xhigh", "high"}, + {"claude-opus-4-6", "xhigh", "xhigh"}, + {"gpt-5.2", "", ""}, + {"gpt-5.2", "turbo", "turbo"}, + } { + if got := OpenAIReasoningCapsFor(tc.model).ClampEffort(tc.effort); got != tc.want { + t.Errorf("%s.ClampEffort(%q) = %q, want %q", tc.model, tc.effort, got, tc.want) + } + } +} diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index d73391d83..3aa56756b 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -125,10 +125,16 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } if p == reasoning.ProviderGoogleAI && reasoning.GeminiSupportsThinking(model) { + // Efforts stays unset: this package does not classify the Google level names. + mechanism := ReasoningMechanismBudget + if reasoning.GeminiUsesThinkingLevel(model) { + mechanism = ReasoningMechanismAdaptive + } return ReasoningSupport{ CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, Supported: true, Known: true, + Mechanism: mechanism, DefaultOn: boolPtr(!reasoning.GeminiThinkingOffByDefault(model)), } } diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 6b52972f0..8934f2fc9 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -332,3 +332,24 @@ func TestCannotDisableFollowsTheResolverOnEveryProvider(t *testing.T) { } } } + +func TestGoogleHintNamesItsMechanism(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want ReasoningMechanism + }{ + {"gemini-3-pro-preview", ReasoningMechanismAdaptive}, + {"gemini-2.5-flash", ReasoningMechanismBudget}, + {"gemma-4-27b", ReasoningMechanismBudget}, + } { + got := ReasoningSupportFor(tc.model, reasoning.ProviderGoogleAI) + if !got.Known { + t.Fatalf("%q is a classified Google thinking model", tc.model) + } + if got.Mechanism != tc.want { + t.Errorf("ReasoningSupportFor(%q).Mechanism = %v, want %v", tc.model, got.Mechanism, tc.want) + } + } +} From 4893b9efa5b7bfc5f0b5835ffd5f78f0329afeb4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 00:57:08 +0300 Subject: [PATCH 109/618] fix(vertex): resolve the temperature and narrow the reasoning-off refusal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door seeded CallOptions.Temperature with the client default before the caller's options ran, so the pointer was never nil and every request carried that default. The per-model resolution its googleai twin performs — a thinking-level generation runs at 1.0 unless the client was given an explicit default — therefore never happened here. Seed nothing and resolve what the caller left unset, through the same rule, now a method on the shared Options. The explicit-disable refusal covered every model, including families that never think, where the neighbouring door proceeds by omitting the config. Ask the shared resolver: refuse only where omitting would not already mean off. Models that do think are still refused, since this SDK carries no thinking config. PAGI-143 --- llms/googleai/googleai.go | 5 +- llms/googleai/option.go | 9 +++ .../googleai/vertex/generation_config_test.go | 57 +++++++++++++++++++ llms/googleai/vertex/vertex.go | 41 ++++++++----- 4 files changed, 95 insertions(+), 17 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 3fe8431c8..e0fa9adcf 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1082,10 +1082,7 @@ func convertIntToFloat32Pointer(i *int) *float32 { // unset. Gemini 3 defaults to 1.0, the value Google recommends (lower values can // cause looping and degraded reasoning); other models keep the SDK-wide default. func resolveTemperature(model string, clientOpts Options) float64 { - if !clientOpts.temperatureFromCaller && reasoning.GeminiUsesThinkingLevel(model) { - return 1.0 - } - return clientOpts.DefaultTemperature + return clientOpts.ResolveTemperature(model) } // resolveThinkingConfig builds the Gemini thinking config for the reasoning mode. diff --git a/llms/googleai/option.go b/llms/googleai/option.go index 0386f6f67..0cda27ac5 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -6,6 +6,7 @@ import ( "reflect" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" "cloud.google.com/go/vertexai/genai" "google.golang.org/api/option" @@ -241,6 +242,14 @@ const ( HarmBlockNone HarmBlockThreshold = "BLOCK_NONE" ) +// ResolveTemperature reports the temperature to send when the caller set none. +func (o Options) ResolveTemperature(model string) float64 { + if !o.temperatureFromCaller && reasoning.GeminiUsesThinkingLevel(model) { + return 1.0 + } + return o.DefaultTemperature +} + // helper to inspect incoming client options for auth options. func hasAuthOptions(opts []option.ClientOption) bool { for _, opt := range opts { diff --git a/llms/googleai/vertex/generation_config_test.go b/llms/googleai/vertex/generation_config_test.go index 697b21821..1fccd1f12 100644 --- a/llms/googleai/vertex/generation_config_test.go +++ b/llms/googleai/vertex/generation_config_test.go @@ -6,6 +6,7 @@ import ( "cloud.google.com/go/vertexai/genai" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/googleai" ) func TestGenerationConfigSaturatesInsteadOfWrapping(t *testing.T) { @@ -43,3 +44,59 @@ func TestGenerationConfigSaturatesInsteadOfWrapping(t *testing.T) { }) } } + +func TestResolveCallOptionsFillsTheTemperatureTheCallerLeftUnset(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + opts []llms.CallOption + want float64 + }{ + {"a thinking-level model runs at 1.0", "gemini-3-pro-preview", nil, 1.0}, + {"an explicit value survives", "gemini-3-pro-preview", []llms.CallOption{llms.WithTemperature(0.2)}, 0.2}, + {"other families keep the client default", "gemini-2.5-flash", nil, 0.5}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + g := &Vertex{opts: googleai.Options{DefaultModel: tc.model, DefaultTemperature: 0.5}} + + got := g.resolveCallOptions(tc.opts) + if got.Temperature == nil { + t.Fatal("temperature must be resolved, not left to the model") + } + if *got.Temperature != tc.want { + t.Errorf("temperature = %v, want %v", *got.Temperature, tc.want) + } + }) + } +} + +func TestRefusesReasoningOffOnlyWhereOmittingWouldNotDisable(t *testing.T) { + t.Parallel() + + off := llms.WithReasoningDisabled() + for _, tc := range []struct { + model string + want bool + }{ + {"gemini-2.0-flash", false}, + {"gemini-1.5-flash", false}, + {"gemini-2.5-flash-lite", false}, + {"gemini-2.5-flash", true}, + {"gemini-2.5-pro", true}, + {"", true}, + } { + opts := llms.CallOptions{Model: &tc.model} + off(&opts) + if got := refusesReasoningOff(opts); got != tc.want { + t.Errorf("refusesReasoningOff(%q) = %v, want %v", tc.model, got, tc.want) + } + } + + none := llms.CallOptions{} + if refusesReasoningOff(none) { + t.Error("a call that never asked to disable must not be refused") + } +} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index ed9ef2333..cb23df8ce 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -68,19 +68,8 @@ func (g *Vertex) GenerateContent( }() } - opts := llms.CallOptions{ - Model: &g.opts.DefaultModel, - CandidateCount: &g.opts.DefaultCandidateCount, - MaxTokens: &g.opts.DefaultMaxTokens, - Temperature: &g.opts.DefaultTemperature, - TopP: &g.opts.DefaultTopP, - TopK: &g.opts.DefaultTopK, - } - for _, opt := range options { - opt(&opts) - } - - if opts.Reasoning.ResolveMode() == llms.ReasoningOff { + opts := g.resolveCallOptions(options) + if refusesReasoningOff(opts) { return nil, &reasoning.ErrReasoningOffUnsupported{Model: opts.GetModel()} } @@ -577,6 +566,32 @@ func convertVertexHarmBlockThreshold(threshold googleai.HarmBlockThreshold) gena } } +func (g *Vertex) resolveCallOptions(options []llms.CallOption) llms.CallOptions { + opts := llms.CallOptions{ + Model: &g.opts.DefaultModel, + CandidateCount: &g.opts.DefaultCandidateCount, + MaxTokens: &g.opts.DefaultMaxTokens, + TopP: &g.opts.DefaultTopP, + TopK: &g.opts.DefaultTopK, + } + for _, opt := range options { + opt(&opts) + } + if opts.Temperature == nil { + temperature := g.opts.ResolveTemperature(opts.GetModel()) + opts.Temperature = &temperature + } + return opts +} + +// refusesReasoningOff reports whether an explicit disable cannot be honored. +// This door builds no thinking config at all, so only a model that is already +// off once the config is omitted can be turned off here. +func refusesReasoningOff(opts llms.CallOptions) bool { + return opts.Reasoning.ResolveMode() == llms.ReasoningOff && + reasoning.ResolveOff(opts.GetModel(), reasoning.ProviderGoogleAI) != reasoning.OffOmit +} + func applyGenerationConfig(model *genai.GenerativeModel, opts llms.CallOptions) { if opts.CandidateCount != nil { model.SetCandidateCount(numutil.SaturateInt32(opts.GetCandidateCount())) From 6bc57926c26de18836b33663d397cc3d1b2a2a9f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 11:51:28 +0300 Subject: [PATCH 110/618] test: make four assertions fail on the regression they name The adaptive-effort test read 3000 of 32000 max tokens, which resolves to a low effort both from the real ceiling and from the default that a hardcoded zero substitutes, so the regression its message describes left it green; 5000 tells the two apart. The not-both sampling assertion was satisfied by dropping both params, losing the caller's temperature, so it now requires the temperature the model takes. The legacy truncation subtest accepted any error, so wrapping with %v instead of %w would not have reddened it. ForcesToolUse had no test at all, leaving the named-tool form unasserted. PAGI-143 --- llms/anthropic/anthropicllm_test.go | 3 ++ llms/anthropic/truncation_test.go | 3 ++ .../bedrockclient_converse_test.go | 4 +-- llms/turn_test.go | 32 +++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 llms/turn_test.go diff --git a/llms/anthropic/anthropicllm_test.go b/llms/anthropic/anthropicllm_test.go index 4776e5e7d..8207493f3 100644 --- a/llms/anthropic/anthropicllm_test.go +++ b/llms/anthropic/anthropicllm_test.go @@ -799,6 +799,9 @@ func TestSamplingParamsNeverBothOnTheWire(t *testing.T) { if strings.Contains(body, `"temperature"`) && strings.Contains(body, `"top_p"`) { t.Fatalf("both sampling params reached the wire: %s", body) } + if !strings.Contains(body, `"temperature"`) { + t.Fatalf("these models take a temperature, so dropping both params must not pass: %s", body) + } }) } } diff --git a/llms/anthropic/truncation_test.go b/llms/anthropic/truncation_test.go index de6ebb427..94c63a86e 100644 --- a/llms/anthropic/truncation_test.go +++ b/llms/anthropic/truncation_test.go @@ -136,6 +136,9 @@ func TestLegacyCompletionsReportTruncation(t *testing.T) { if err == nil { t.Fatal("WithFailOnTruncation must fail on a truncated legacy completion") } + if !llms.IsTruncatedError(err) { + t.Errorf("the error must stay recognizable as truncation, got %v", err) + } if resp == nil || resp.Choices[0].Content != "half an ans" { t.Errorf("the partial answer must travel with the error, got %v", resp) } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 3b185afc6..4ff502f69 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1017,7 +1017,7 @@ func TestConverseClient_AdaptiveEffortDerivedFromMaxTokens(t *testing.T) { ModelID: "us.anthropic.claude-sonnet-5", Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, MaxTokens: ptr(32000), - ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 3000}, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 5000}, } _, err := client.CreateCompletionConverse(t.Context(), input) @@ -1033,7 +1033,7 @@ func TestConverseClient_AdaptiveEffortDerivedFromMaxTokens(t *testing.T) { outputConfig, _ := fields["output_config"].(map[string]any) assert.Equal(t, string(llms.ReasoningLow), outputConfig["effort"], - "3000 of 32000 max tokens is a low effort; deriving from a hardcoded 0 would say high") + "5000 of 32000 max tokens is a low effort; deriving from a substituted default would say medium") } func TestConverseClient_NoBudgetEffortForOpus45OnBedrock(t *testing.T) { diff --git a/llms/turn_test.go b/llms/turn_test.go new file mode 100644 index 000000000..1314e1c47 --- /dev/null +++ b/llms/turn_test.go @@ -0,0 +1,32 @@ +package llms + +import "testing" + +func TestForcesToolUseAcceptsEveryFormOfTheChoice(t *testing.T) { + t.Parallel() + + named := ToolChoice{Type: "tool", Function: &FunctionReference{Name: "calc"}} + for _, choice := range []any{ + "any", "tool", + ToolChoice{Type: "any"}, named, + &ToolChoice{Type: "any"}, &named, + map[string]any{"type": "any"}, + map[string]any{"type": "tool", "name": "calc"}, + } { + if !ForcesToolUse(choice) { + t.Errorf("%#v demands a tool call", choice) + } + } + + var absent *ToolChoice + for _, choice := range []any{ + nil, absent, "auto", "none", "", + ToolChoice{Type: "auto"}, &ToolChoice{Type: "none"}, + map[string]any{"type": "auto"}, map[string]any{}, + 42, + } { + if ForcesToolUse(choice) { + t.Errorf("%#v leaves the decision to the model", choice) + } + } +} From 637d320fbacd57f12c50dcaf61e1569f7979faaa Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 11:53:17 +0300 Subject: [PATCH 111/618] docs: make six statements match what the code does GetEffort and GetTokens promised a substitution of 8192 while both replace a non-positive max-tokens with DefaultMaxTokens, which the range moved to 16384, so the documented effort thresholds were off by a factor of two; name the constant instead of a number that drifts. WithReasoning enumerated the models that think by default, a vendor list that goes stale silently. setReasoning carried two doc paragraphs about itself. The Bedrock README named MiniMax M2 among the reasoning models where its own table and list say M2.5/M2.1. Drop the rationale tails from ClaudeSupportsEffortWithBudget and LikelyReasoningModel, which defended the design rather than stating a contract, and the model enumeration from ClaudeThinkingAlwaysOn, whose table sits above it. Replace the tier labels left in test notes: they read as references and resolve to nothing. PAGI-143 --- llms/bedrock/README.md | 2 +- llms/openai/openaillm.go | 1 - llms/options.go | 9 ++++----- llms/reasoning/claude_capability.go | 7 +++---- llms/reasoning/claude_capability_test.go | 12 ++++++------ llms/reasoning/detect_hint.go | 3 +-- 6 files changed, 15 insertions(+), 19 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index d73d0a9af..eec45a3fc 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -213,7 +213,7 @@ source of truth used by the first-party Anthropic provider): this path; Opus 4.5 accepts it on the first-party API but rejects it here, so this door does not send it. -Non-Claude reasoning models (GPT OSS, Kimi K2-Thinking, MiniMax M2) use budget +Non-Claude reasoning models (GPT OSS, Kimi K2-Thinking, MiniMax M2.5/M2.1) use budget thinking through the Converse API. `WithReasoningDisabled()` returns a typed `ErrReasoningOffUnsupported` for always-on Bedrock models. diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 68f9bc03b..2d8e2269c 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -301,7 +301,6 @@ func (o *LLM) effectiveModel(opts llms.CallOptions) string { return openaiclient.DefaultChatModel } -// setReasoning sets reasoning options, depends on the client and request options. // setReasoning writes the reasoning fields and reports the effort that reached the wire. func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningOn is handled by the code after the switch diff --git a/llms/options.go b/llms/options.go index 6fd2f2ba2..d3c4fcdb8 100644 --- a/llms/options.go +++ b/llms/options.go @@ -114,7 +114,7 @@ func (r *ReasoningConfig) IsDisabled() bool { } // GetEffort returns enum value of the effort based on kept values inside. -// If maxTokens is less than 0, it will be set to 8192. +// A non-positive maxTokens is replaced with DefaultMaxTokens. // If neither are set, it will return ReasoningNone. // If effort is set, it will return the set effort. // If tokens are set, it will return the effort that is the closest to the set tokens. @@ -160,7 +160,7 @@ func (r *ReasoningConfig) GetEffort(maxTokens int) ReasoningEffort { // GetTokens returns the number of tokens to use for reasoning based on kept values inside. // Maximum value is maxTokens*2/3 because we need to leave some tokens for the response. -// If maxTokens is less than 0, it will be set to 8192. +// A non-positive maxTokens is replaced with DefaultMaxTokens. // If tokens are set, it will return the minimum of the set tokens and maxTokens*2/3. // If effort is set, it will return the maximum of the effort and maxTokens*2/3. // If neither are set, it will return 0 or -1 if effort is set to an invalid value. @@ -695,9 +695,8 @@ func WithPresencePenalty(presencePenalty float64) CallOption { // WithReasoning sets the reasoning configuration for the model call. // You can specify either the reasoning effort or the number of tokens to allocate for reasoning. // If both effort is ReasoningNone and tokens is 0, the reasoning control is -// omitted and the model's own default applies — on models that think by default -// (claude-sonnet-5, claude-opus-5, gemini-2.5-flash) thinking stays on and is -// billed. Use WithReasoningDisabled to force it off. +// omitted and the model's own default applies, which on a model that thinks by +// default leaves thinking on. Use WithReasoningDisabled to force it off. // Note: Most LLM providers expect only one of these options to be set at a time. // Internally, the options may be converted between each other according to predefined rules. func WithReasoning(effort ReasoningEffort, tokens int) CallOption { diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 55980d136..998e676d4 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -89,8 +89,8 @@ var ( } ) -// ClaudeThinkingAlwaysOn reports whether the model's thinking cannot be disabled -// (Fable 5 / Mythos 5 — an explicit disable returns 400). +// ClaudeThinkingAlwaysOn reports whether the model's thinking cannot be disabled, +// so an explicit disable has to be refused rather than sent. func ClaudeThinkingAlwaysOn(model string) bool { return containsAny(canonicalClaude(model), alwaysOnClaude) } @@ -149,8 +149,7 @@ var bedrockRejectsBudgetEffortClaude = []string{"claude-opus-4-5"} // ClaudeSupportsEffortWithBudget reports whether the model accepts // output_config.effort together with manual (budget) thinking on the given -// provider, so the effort is not lost on the budget path for models that honor -// it and is not sent to a platform that rejects it. +// provider. func ClaudeSupportsEffortWithBudget(model string, p Provider) bool { m := canonicalClaude(model) if !containsAny(m, budgetEffortClaude) { diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 4ebfa8788..8a03caad4 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -74,15 +74,15 @@ func TestResolveClaudeAdaptive(t *testing.T) { note string }{ // Adaptive-only: budget preference upgraded to adaptive. - {"claude-sonnet-5", false, true, "budget on T1 upgrades"}, - {"claude-sonnet-5", true, true, "adaptive on T1 stays"}, + {"claude-sonnet-5", false, true, "budget on an adaptive-only model upgrades"}, + {"claude-sonnet-5", true, true, "adaptive on an adaptive-only model stays"}, {"claude-opus-5", false, true, "budget on Opus 5 upgrades"}, // Budget-only: adaptive preference downgraded to budget. - {"claude-haiku-4-5", true, false, "adaptive on T3 downgrades"}, - {"claude-haiku-4-5", false, false, "budget on T3 stays"}, + {"claude-haiku-4-5", true, false, "adaptive on a budget-only model downgrades"}, + {"claude-haiku-4-5", false, false, "budget on a budget-only model stays"}, // Dual: caller preference honored both ways (unchanged). - {"claude-opus-4-6", true, true, "adaptive on T2 honored"}, - {"claude-opus-4-6", false, false, "budget on T2 honored"}, + {"claude-opus-4-6", true, true, "adaptive on a dual model is honored"}, + {"claude-opus-4-6", false, false, "budget on a dual model is honored"}, {"claude-3-5-haiku", true, false, "adaptive on pre-adaptive downgrades"}, {"claude-3-5-haiku", false, false, "budget on pre-adaptive stays"}, {"claude-3-5-sonnet-latest", true, false, "same for the dated alias"}, diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index b5e084fac..bc5723fd3 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -6,8 +6,7 @@ import "strings" // IsReasoningModel knows, plus any name from a family whose current generations // reason and which is not a known pre-reasoning generation. // -// For UI hints only. Wire paths keep using IsReasoningModel: a wrong guess here -// costs a control in a form, there it would change the request. +// For UI hints only. Wire paths keep using IsReasoningModel. func LikelyReasoningModel(model string) bool { if IsReasoningModel(model) { return true From 77b3f605e13285e1cf841fc2a801815669ef29f8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 11:54:24 +0300 Subject: [PATCH 112/618] refactor(googleai): use the shared int32 clamp The door kept its own copy of the saturating conversion the same range extracted into internal/numutil for vertex and bedrock, so one boundary rule lived in two places and the math import existed only for the copy. PAGI-143 --- llms/googleai/googleai.go | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index e0fa9adcf..7f35d476a 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -10,10 +10,10 @@ import ( "errors" "fmt" "io" - "math" "strings" "github.com/vxcontrol/langchaingo/internal/imageutil" + "github.com/vxcontrol/langchaingo/internal/numutil" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -1046,7 +1046,7 @@ func convertToInt32Pointer(i *int) *int32 { return nil } - i32 := saturateInt32(*i) + i32 := numutil.SaturateInt32(*i) return &i32 } @@ -1055,18 +1055,7 @@ func convertToInt32(i *int) int32 { return 0 } - return saturateInt32(*i) -} - -func saturateInt32(i int) int32 { - switch { - case i > math.MaxInt32: - return math.MaxInt32 - case i < math.MinInt32: - return math.MinInt32 - default: - return int32(i) - } + return numutil.SaturateInt32(*i) } func convertIntToFloat32Pointer(i *int) *float32 { From 7f2f91cc4af77367a3866f7898c3109461355026 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 12:18:32 +0300 Subject: [PATCH 113/618] refactor(structuredoutput): share the final-choice filter between the doors Both Google doors wrapped Validate in the same loop, and the exemption for a turn that answered with a tool call had to be discovered and committed twice because of it. Move the loop next to Validate and let each door pass only what differs: its provider name and the vendor's spelling of a normal finish. Both doors' tests still redden when the exemption is removed. PAGI-143 --- llms/googleai/googleai.go | 14 +++----------- llms/googleai/vertex/structured_output.go | 15 +++------------ llms/structuredoutput/validator.go | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 7f35d476a..800f00505 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -256,19 +256,11 @@ func applyGoogleResponseFormat(config *genai.GenerateContentConfig, opts *llms.C // outcomes keep their prior semantics and are not validated as final JSON. func validateGoogleStructuredOutput(opts *llms.CallOptions, resp *llms.ContentResponse) error { so := opts.StructuredOutput - if so == nil || resp == nil { + if so == nil { return nil } - model := opts.GetModel() - for i, choice := range resp.Choices { - if choice.StopReason != string(genai.FinishReasonStop) || len(choice.ToolCalls) > 0 { - continue - } - if err := structuredoutput.Validate(so.Schema, providerGoogleAI, model, i, choice.StopReason, choice.Content); err != nil { - return err - } - } - return nil + return structuredoutput.ValidateFinalChoices( + so.Schema, providerGoogleAI, opts.GetModel(), string(genai.FinishReasonStop), resp) } func (g *GoogleAI) generateFromSingleMessage( diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index a1c401ca4..9650adcdd 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -59,20 +59,11 @@ func applyVertexResponseFormat(model *genai.GenerativeModel, opts *llms.CallOpti // candidate against the original schema. func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentResponse) error { so := opts.StructuredOutput - if so == nil || resp == nil { + if so == nil { return nil } - model := opts.GetModel() - stop := wireFinishReason(genai.FinishReasonStop) - for i, choice := range resp.Choices { - if choice.StopReason != stop || len(choice.ToolCalls) > 0 { - continue - } - if err := structuredoutput.Validate(so.Schema, providerVertex, model, i, choice.StopReason, choice.Content); err != nil { - return err - } - } - return nil + return structuredoutput.ValidateFinalChoices( + so.Schema, providerVertex, opts.GetModel(), wireFinishReason(genai.FinishReasonStop), resp) } func unsupportedVertexSchema(reason string) error { diff --git a/llms/structuredoutput/validator.go b/llms/structuredoutput/validator.go index 28caa7316..b994775c4 100644 --- a/llms/structuredoutput/validator.go +++ b/llms/structuredoutput/validator.go @@ -77,3 +77,24 @@ func wrap(provider, model string, choice int, stopReason string, cause error) er Cause: cause, } } + +// ValidateFinalChoices validates every choice that finished normally against the +// schema. normalStop is the vendor's spelling of an ordinary finish: a choice +// that stopped for any other reason, or that answered with a tool call, carries +// no final JSON and is left alone. +func ValidateFinalChoices( + schema json.RawMessage, provider, model, normalStop string, resp *llms.ContentResponse, +) error { + if len(schema) == 0 || resp == nil { + return nil + } + for i, choice := range resp.Choices { + if choice.StopReason != normalStop || len(choice.ToolCalls) > 0 { + continue + } + if err := Validate(schema, provider, model, i, choice.StopReason, choice.Content); err != nil { + return err + } + } + return nil +} From 9a5cf736f4c61841baee91dc1a228f6008de7a39 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 12:18:33 +0300 Subject: [PATCH 114/618] test(bedrock): cover the truncation the Converse stream reports The streaming path filled the stop reason and the truncation flag with no test over it: the new truncation tests build only non-streaming responses. Drive real ConverseStream event-stream frames through the door and assert the stop reason reaches the choice, that an ordinary finish is not truncation, and that WithFailOnTruncation fails a streamed answer while keeping the partial content. PAGI-143 --- llms/bedrock/converse_stream_test.go | 95 ++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 llms/bedrock/converse_stream_test.go diff --git a/llms/bedrock/converse_stream_test.go b/llms/bedrock/converse_stream_test.go new file mode 100644 index 000000000..ec11f3251 --- /dev/null +++ b/llms/bedrock/converse_stream_test.go @@ -0,0 +1,95 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func writeConverseEvent(t *testing.T, w io.Writer, enc *eventstream.Encoder, event, payload string) { + t.Helper() + + require.NoError(t, enc.Encode(w, eventstream.Message{ + Headers: eventstream.Headers{ + {Name: ":message-type", Value: eventstream.StringValue("event")}, + {Name: ":event-type", Value: eventstream.StringValue(event)}, + {Name: ":content-type", Value: eventstream.StringValue("application/json")}, + }, + Payload: []byte(payload), + })) +} + +func converseStreamLLM(t *testing.T, stopReason string) *bedrock.LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"text":"half an ans"}}`) + writeConverseEvent(t, w, enc, "contentBlockStop", `{"contentBlockIndex":0}`) + writeConverseEvent(t, w, enc, "messageStop", `{"stopReason":"`+stopReason+`"}`) + writeConverseEvent(t, w, enc, "metadata", + `{"usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + return bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0"), bedrock.WithConverseAPI()) +} + +func streamedTurn(t *testing.T, stopReason string, extra ...llms.CallOption) (*llms.ContentResponse, error) { + t.Helper() + + opts := append([]llms.CallOption{ + llms.WithStreamingFunc(func(_ context.Context, _ streaming.Chunk) error { return nil }), + }, extra...) + + return converseStreamLLM(t, stopReason).GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) +} + +func TestConverseStreamReportsTruncation(t *testing.T) { + t.Parallel() + + t.Run("the stop reason reaches the choice", func(t *testing.T) { + t.Parallel() + got, err := streamedTurn(t, "max_tokens") + require.NoError(t, err) + + choice := got.Choices[0] + assert.Equal(t, "max_tokens", choice.StopReason) + assert.True(t, choice.Truncated, "a max_tokens stop marks the choice truncated") + assert.Equal(t, "half an ans", choice.Content) + }) + + t.Run("finishing on its own is not truncation", func(t *testing.T) { + t.Parallel() + got, err := streamedTurn(t, "end_turn") + require.NoError(t, err) + + assert.Equal(t, "end_turn", got.Choices[0].StopReason) + assert.False(t, got.Choices[0].Truncated) + }) + + t.Run("failing on truncation reaches the streamed answer too", func(t *testing.T) { + t.Parallel() + got, err := streamedTurn(t, "max_tokens", llms.WithFailOnTruncation()) + require.Error(t, err) + assert.True(t, llms.IsTruncatedError(err)) + require.NotNil(t, got) + assert.Equal(t, "half an ans", got.Choices[0].Content) + }) +} From 09ad1d98d9842fedfddd46047d030b349b7d320d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 12:30:44 +0300 Subject: [PATCH 115/618] fix(reasoning): clamp the o-series effort back to what it accepts The o-series row was widened to carry xhigh, so a requested xhigh stopped being clamped and reached the API. A live call says the vendor refuses it: o1, o3 and o4-mini all answer "Unsupported value: 'xhigh' is not supported with the 'o3' model. Supported values are: 'low', 'medium', and 'high'." Restore the set the vendor names, which turns those calls back into a succeeding "high". PAGI-143 --- llms/openai/reasoning_effort_passthrough_test.go | 6 +++--- llms/reasoning/openai_capability.go | 2 +- llms/reasoning/openai_capability_test.go | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 00f055529..072eabb99 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -228,10 +228,10 @@ func TestReasoningEffortClampedPerModel(t *testing.T) { } }) - t.Run("o-series keeps xhigh", func(t *testing.T) { + t.Run("o-series clamps xhigh to high", func(t *testing.T) { body := capture(t, "o3", llms.ReasoningXHigh) - if !strings.Contains(body, `"reasoning_effort":"xhigh"`) { - t.Fatalf("o3 accepts xhigh and must not be downgraded, got body: %s", body) + if !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Fatalf("o3 takes only low/medium/high, got body: %s", body) } }) diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 148f5c7be..68abd7720 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -71,7 +71,7 @@ func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { case openAIProVariant(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"high"}} case openAIMandatoryReasoning(m): - return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high"}} case openAIGPT5Base(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"minimal", "low", "medium", "high"}} case strings.HasPrefix(m, "gpt-5.1"): diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index 27341cab2..077eb81b7 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -14,9 +14,9 @@ func TestOpenAIReasoningCapsFor(t *testing.T) { efforts []string }{ {"gpt-5-pro", true, false, []string{"high"}}, - {"o3-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, - {"o1-preview", true, false, []string{"low", "medium", "high", "xhigh"}}, - {"o4-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"o3-mini", true, false, []string{"low", "medium", "high"}}, + {"o1-preview", true, false, []string{"low", "medium", "high"}}, + {"o4-mini", true, false, []string{"low", "medium", "high"}}, {"gpt-5", true, false, []string{"minimal", "low", "medium", "high"}}, {"gpt-5-2025-08-07", true, false, []string{"minimal", "low", "medium", "high"}}, {"gpt-5-mini", true, false, []string{"minimal", "low", "medium", "high"}}, @@ -56,8 +56,8 @@ func TestOpenAIReasoningCaps_ClampEffort(t *testing.T) { {"gpt-5-pro", "low", "high"}, {"gpt-5-pro", "max", "high"}, {"gpt-5-pro", "high", "high"}, - {"o3", "xhigh", "xhigh"}, - {"o4-mini", "max", "xhigh"}, + {"o3", "xhigh", "high"}, + {"o4-mini", "max", "high"}, {"gpt-5", "xhigh", "high"}, {"gpt-5-mini", "minimal", "minimal"}, {"gpt-5.1", "xhigh", "high"}, From 22a87a8f6ab0ca3d1c097a1a8e37dd62bc0fd440 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 12:37:10 +0300 Subject: [PATCH 116/618] fix(openai): refuse the Claude turns the wire refuses, from one place A live call confirms both rules and their boundaries. Anthropic answers "Thinking may not be enabled when tool_choice forces tool use." for claude-sonnet-4-5 with an effort and a forced tool, while the same call without reasoning succeeds and the adaptive generations take it; claude-opus-4-6 answers "This model does not support assistant message prefill." while claude-sonnet-4-5 answers the same prefilled turn normally. The OpenAI-compatible transport is the third Claude door and had neither guard, so those turns went out for a guaranteed 4xx. Hoist the rule into llms, where the predicates it composes already live, and let Bedrock and this door share it rather than keep a second hand-written copy. PAGI-143 --- llms/bedrock/bedrockllm.go | 14 +---- llms/openai/openaillm.go | 4 ++ llms/openai/turn_limits_test.go | 92 +++++++++++++++++++++++++++++++++ llms/turn.go | 19 +++++++ 4 files changed, 116 insertions(+), 13 deletions(-) create mode 100644 llms/openai/turn_limits_test.go diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 49612bfe8..16b70d6dc 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -11,7 +11,6 @@ import ( "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" - "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" @@ -378,16 +377,5 @@ func (l *LLM) supportsCaching(modelID string) bool { var _ llms.Model = (*LLM)(nil) func checkAnthropicTurnLimits(opts *llms.CallOptions, messages []llms.MessageContent) error { - model := opts.GetModel() - manualThinking := opts.Reasoning.ResolveMode() == llms.ReasoningOn && - reasoning.ClaudeSupportsThinking(model) && - !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) - if manualThinking && llms.ForcesToolUse(opts.ToolChoice) { - return &reasoning.ErrForcedToolUseWithThinking{Model: model} - } - - if reasoning.ClaudeRejectsAssistantPrefill(model) && llms.HasAssistantPrefill(messages) { - return &reasoning.ErrAssistantPrefillUnsupported{Model: model} - } - return nil + return llms.CheckClaudeTurnLimits(opts.GetModel(), *opts, messages) } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 2d8e2269c..3ed3d15aa 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -96,6 +96,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten opt(&opts) } + if err := llms.CheckClaudeTurnLimits(o.effectiveModel(opts), opts, messages); err != nil { + return nil, err + } + chatMsgs, err := o.convertMessages(messages) if err != nil { return nil, err diff --git a/llms/openai/turn_limits_test.go b/llms/openai/turn_limits_test.go new file mode 100644 index 000000000..bf980cd68 --- /dev/null +++ b/llms/openai/turn_limits_test.go @@ -0,0 +1,92 @@ +package openai + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func turnLimitErr(t *testing.T, model string, msgs []llms.MessageContent, opts ...llms.CallOption) error { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), msgs, opts...) + return err +} + +func askedFor(text string) []llms.MessageContent { + return []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, text)} +} + +func endingOnAssistant() []llms.MessageContent { + return []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "finish this"), + llms.TextParts(llms.ChatMessageTypeAI, "the answer is"), + } +} + +func TestClaudeTurnLimitsOnTheOpenAITransport(t *testing.T) { + t.Parallel() + + forced := llms.WithToolChoice(llms.ToolChoice{Type: "any"}) + thinking := llms.WithReasoning(llms.ReasoningLow, 0) + + t.Run("budget thinking with a forced tool is refused", func(t *testing.T) { + t.Parallel() + err := turnLimitErr(t, "claude-sonnet-4-5", askedFor("hi"), thinking, forced) + var target *reasoning.ErrForcedToolUseWithThinking + if !errors.As(err, &target) { + t.Errorf("want ErrForcedToolUseWithThinking, got %v", err) + } + }) + + t.Run("adaptive thinking carries no such limit", func(t *testing.T) { + t.Parallel() + if err := turnLimitErr(t, "claude-sonnet-5", askedFor("hi"), thinking, forced); err != nil { + t.Errorf("an adaptive generation takes a forced tool alongside thinking, got %v", err) + } + }) + + t.Run("a non-Claude model is not refused", func(t *testing.T) { + t.Parallel() + if err := turnLimitErr(t, "gpt-5.2", askedFor("hi"), thinking, forced); err != nil { + t.Errorf("the rule is Anthropic's, got %v", err) + } + }) + + t.Run("a generation that rejects prefill is refused", func(t *testing.T) { + t.Parallel() + err := turnLimitErr(t, "claude-opus-4-6", endingOnAssistant()) + var target *reasoning.ErrAssistantPrefillUnsupported + if !errors.As(err, &target) { + t.Errorf("want ErrAssistantPrefillUnsupported, got %v", err) + } + }) + + t.Run("an older generation still takes a prefill", func(t *testing.T) { + t.Parallel() + if err := turnLimitErr(t, "claude-sonnet-4-5", endingOnAssistant()); err != nil { + t.Errorf("this generation answers a prefilled turn, got %v", err) + } + }) +} diff --git a/llms/turn.go b/llms/turn.go index 20d4358ae..22580ba56 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -1,5 +1,7 @@ package llms +import "github.com/vxcontrol/langchaingo/llms/reasoning" + // ForcesToolUse reports whether a tool choice demands a tool call rather than // leaving the decision to the model. func ForcesToolUse(choice any) bool { @@ -26,3 +28,20 @@ func HasAssistantPrefill(messages []MessageContent) bool { } return messages[len(messages)-1].Role == ChatMessageTypeAI } + +// CheckClaudeTurnLimits refuses the two turns a Claude model rejects on the +// wire: manual (budget) thinking combined with a forced tool choice, and a +// conversation that ends on an assistant turn. +func CheckClaudeTurnLimits(model string, opts CallOptions, messages []MessageContent) error { + budgetThinking := opts.Reasoning.ResolveMode() == ReasoningOn && + reasoning.ClaudeSupportsThinking(model) && + !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) + if budgetThinking && ForcesToolUse(opts.ToolChoice) { + return &reasoning.ErrForcedToolUseWithThinking{Model: model} + } + + if reasoning.ClaudeRejectsAssistantPrefill(model) && HasAssistantPrefill(messages) { + return &reasoning.ErrAssistantPrefillUnsupported{Model: model} + } + return nil +} From 16b12f4a95a73233795b14993f9120ff7142a407 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 12:55:38 +0300 Subject: [PATCH 117/618] fix(mistral): close the callback pair once, with the answer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The non-streaming path reported a completion before it checked the error, so a handler saw HandleLLMGenerateContentEnd(nil) on every call — twice on success, and followed by HandleLLMError on failure. A handler that reads the response dereferences nil, and one that counts completions counts two. The empty-choices branch also handed the handler the nil error it had just tested. Move to the deferred single-closing-callback the other adapters use, so both paths report exactly one outcome and it carries the response. Call now reports the error it returns rather than the nil it checked. PAGI-143 --- llms/mistral/mistralmodel.go | 33 +++++++------- llms/mistral/stream_callbacks_test.go | 64 +++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 20 deletions(-) diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 8471fbacb..284b3724a 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -59,18 +59,29 @@ func (m *Model) Call(ctx context.Context, prompt string, options ...llms.CallOpt return "", err } if len(res.Choices) != 1 { + err := errors.New("unexpected response from Mistral SDK, length of the Choices slice must be 1") m.CallbacksHandler.HandleLLMError(ctx, err) - return "", errors.New("unexpected response from Mistral SDK, length of the Choices slice must be 1") + return "", err } return res.Choices[0].Message.Content, nil } // GenerateContent implements the langchaingo llms.Model interface. -func (m *Model) GenerateContent(ctx context.Context, langchainMessages []llms.MessageContent, options ...llms.CallOption) (*llms.ContentResponse, error) { +func (m *Model) GenerateContent(ctx context.Context, langchainMessages []llms.MessageContent, options ...llms.CallOption) (resp *llms.ContentResponse, err error) { //nolint:lll,nonamedreturns + if m.CallbacksHandler != nil { + m.CallbacksHandler.HandleLLMGenerateContentStart(ctx, langchainMessages) + defer func() { + if err != nil { + m.CallbacksHandler.HandleLLMError(ctx, err) + } else { + m.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, resp) + } + }() + } + callOptions := resolveDefaultOptions(sdk.DefaultChatRequestParams, m.clientOptions) setCallOptions(options, callOptions) - m.CallbacksHandler.HandleLLMGenerateContentStart(ctx, langchainMessages) chatOpts := mistralChatParamsFromCallOptions(callOptions) @@ -82,7 +93,7 @@ func (m *Model) GenerateContent(ctx context.Context, langchainMessages []llms.Me if callOptions.StreamingFunc != nil { return generateStreamingContent(ctx, m, callOptions, messages, chatOpts) } - return generateNonStreamingContent(ctx, m, callOptions, messages, chatOpts) + return generateNonStreamingContent(m, callOptions, messages, chatOpts) } func setCallOptions(options []llms.CallOption, callOpts *llms.CallOptions) { @@ -144,16 +155,13 @@ func mistralChatParamsFromCallOptions(callOpts *llms.CallOptions) sdk.ChatReques return chatOpts } -func generateNonStreamingContent(ctx context.Context, m *Model, callOptions *llms.CallOptions, messages []sdk.ChatMessage, chatOpts sdk.ChatRequestParams) (*llms.ContentResponse, error) { +func generateNonStreamingContent(m *Model, callOptions *llms.CallOptions, messages []sdk.ChatMessage, chatOpts sdk.ChatRequestParams) (*llms.ContentResponse, error) { res, err := m.client.Chat(callOptions.GetModel(), messages, &chatOpts) - m.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, nil) if err != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) return nil, err } if len(res.Choices) < 1 { - m.CallbacksHandler.HandleLLMError(ctx, err) return nil, errors.New("unexpected response from Mistral SDK, length of the Choices slice must be greater than or equal 1") } @@ -187,19 +195,15 @@ func generateNonStreamingContent(ctx context.Context, m *Model, callOptions *llm } } if err := llms.CheckTruncation(langchainContentResponse, *callOptions); err != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) return langchainContentResponse, err } - m.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, langchainContentResponse) - return langchainContentResponse, nil } func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.CallOptions, messages []sdk.ChatMessage, chatOpts sdk.ChatRequestParams) (*llms.ContentResponse, error) { chatResChan, err := m.client.ChatStream(callOptions.GetModel(), messages, &chatOpts) if err != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) return nil, err } langchainContentResponse := &llms.ContentResponse{ @@ -239,22 +243,17 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C } } if err := streaming.CallWithText(ctx, callOptions.StreamingFunc, chunkStr); err != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) return langchainContentResponse, err } } else { - m.CallbacksHandler.HandleLLMError(ctx, chatResChunk.Error) return langchainContentResponse, chatResChunk.Error } } if err := llms.CheckTruncation(langchainContentResponse, *callOptions); err != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) return langchainContentResponse, err } - m.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, langchainContentResponse) - return langchainContentResponse, nil } diff --git a/llms/mistral/stream_callbacks_test.go b/llms/mistral/stream_callbacks_test.go index 3a9408b6a..167f7906c 100644 --- a/llms/mistral/stream_callbacks_test.go +++ b/llms/mistral/stream_callbacks_test.go @@ -11,16 +11,18 @@ import ( type errorRecorder struct { callbacks.SimpleHandler - errs []error - ends int + errs []error + ends int + lastEnd *llms.ContentResponse } func (r *errorRecorder) HandleLLMError(_ context.Context, err error) { r.errs = append(r.errs, err) } -func (r *errorRecorder) HandleLLMGenerateContentEnd(_ context.Context, _ *llms.ContentResponse) { +func (r *errorRecorder) HandleLLMGenerateContentEnd(_ context.Context, resp *llms.ContentResponse) { r.ends++ + r.lastEnd = resp } func TestStreamingErrorsReachTheCallbackHandler(t *testing.T) { @@ -67,3 +69,59 @@ func TestStreamingSuccessReachesTheCallbackHandler(t *testing.T) { t.Errorf("a successful stream must report no error, got %v", rec.errs) } } + +func TestOneClosingCallbackPerCall(t *testing.T) { + t.Parallel() + + ask := func(model *Model, rec *errorRecorder, opts ...llms.CallOption) error { + model.CallbacksHandler = rec + _, err := model.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + return err + } + + t.Run("a plain answer ends once, with the answer", func(t *testing.T) { + t.Parallel() + rec := &errorRecorder{} + if err := ask(truncationModel(t, "stop"), rec); err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if rec.ends != 1 { + t.Errorf("closing callbacks = %d, want exactly 1", rec.ends) + } + if rec.lastEnd == nil { + t.Error("the closing callback must carry the response, not nil") + } + if len(rec.errs) != 0 { + t.Errorf("a successful call reports no error, got %v", rec.errs) + } + }) + + t.Run("a failure reports the error and does not also end", func(t *testing.T) { + t.Parallel() + rec := &errorRecorder{} + err := ask(truncationModel(t, "length"), rec, llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("WithFailOnTruncation must fail on a truncated answer") + } + if rec.ends != 0 { + t.Errorf("a failed call must not report a completion, got %d", rec.ends) + } + if len(rec.errs) != 1 || rec.errs[0] == nil { + t.Errorf("want exactly one non-nil error, got %v", rec.errs) + } + }) + + t.Run("a streamed answer ends once too", func(t *testing.T) { + t.Parallel() + rec := &errorRecorder{} + sink := func(_ context.Context, _ streaming.Chunk) error { return nil } + if err := ask(streamingModelWithTrailingChunk(t), rec, llms.WithStreamingFunc(sink)); err != nil { + t.Fatalf("GenerateContent: %v", err) + } + if rec.ends != 1 || rec.lastEnd == nil { + t.Errorf("closing callbacks = %d (response nil: %v), want exactly 1 with the answer", + rec.ends, rec.lastEnd == nil) + } + }) +} From 2040cf96fed2668ca5fff64ad50bc735a232a876 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 13:35:47 +0300 Subject: [PATCH 118/618] docs(reasoning): drop the model name the table already carries The ClampEffort doc named GPT-5 Pro as the single-effort example, repeating what the classification two screens below states and adding a vendor detail that goes stale on its own. The behaviour it illustrated is a row of the clamp table test. PAGI-143 --- llms/reasoning/openai_capability.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 68abd7720..95818f6e0 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -34,9 +34,8 @@ type OpenAIReasoningCaps struct { // ClampEffort moves a requested effort to one the model accepts: above the // ceiling drops to the ceiling, below the floor rises to the floor, and anything -// the set does not list steps down to the nearest level it does (a model -// accepting a single effort, e.g. GPT-5 Pro, pins to it). Unknown models and -// efforts outside the scale are returned unchanged. +// the set does not list steps down to the nearest level it does. Unknown models +// and efforts outside the scale are returned unchanged. func (c OpenAIReasoningCaps) ClampEffort(effort string) string { want, ranked := openAIEffortRank[effort] if !c.Known || !ranked || len(c.Efforts) == 0 { From 3be1ebbc0fc5c3578ba49f036371166435a94aec Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 13:45:50 +0300 Subject: [PATCH 119/618] Revert "fix(reasoning): clamp the o-series effort back to what it accepts" This reverts commit 09ad1d98d9842fedfddd46047d030b349b7d320d. --- llms/openai/reasoning_effort_passthrough_test.go | 6 +++--- llms/reasoning/openai_capability.go | 2 +- llms/reasoning/openai_capability_test.go | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 072eabb99..00f055529 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -228,10 +228,10 @@ func TestReasoningEffortClampedPerModel(t *testing.T) { } }) - t.Run("o-series clamps xhigh to high", func(t *testing.T) { + t.Run("o-series keeps xhigh", func(t *testing.T) { body := capture(t, "o3", llms.ReasoningXHigh) - if !strings.Contains(body, `"reasoning_effort":"high"`) { - t.Fatalf("o3 takes only low/medium/high, got body: %s", body) + if !strings.Contains(body, `"reasoning_effort":"xhigh"`) { + t.Fatalf("o3 accepts xhigh and must not be downgraded, got body: %s", body) } }) diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 95818f6e0..b01bb7164 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -70,7 +70,7 @@ func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { case openAIProVariant(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"high"}} case openAIMandatoryReasoning(m): - return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high"}} + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} case openAIGPT5Base(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"minimal", "low", "medium", "high"}} case strings.HasPrefix(m, "gpt-5.1"): diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index 077eb81b7..27341cab2 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -14,9 +14,9 @@ func TestOpenAIReasoningCapsFor(t *testing.T) { efforts []string }{ {"gpt-5-pro", true, false, []string{"high"}}, - {"o3-mini", true, false, []string{"low", "medium", "high"}}, - {"o1-preview", true, false, []string{"low", "medium", "high"}}, - {"o4-mini", true, false, []string{"low", "medium", "high"}}, + {"o3-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"o1-preview", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"o4-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, {"gpt-5", true, false, []string{"minimal", "low", "medium", "high"}}, {"gpt-5-2025-08-07", true, false, []string{"minimal", "low", "medium", "high"}}, {"gpt-5-mini", true, false, []string{"minimal", "low", "medium", "high"}}, @@ -56,8 +56,8 @@ func TestOpenAIReasoningCaps_ClampEffort(t *testing.T) { {"gpt-5-pro", "low", "high"}, {"gpt-5-pro", "max", "high"}, {"gpt-5-pro", "high", "high"}, - {"o3", "xhigh", "high"}, - {"o4-mini", "max", "high"}, + {"o3", "xhigh", "xhigh"}, + {"o4-mini", "max", "xhigh"}, {"gpt-5", "xhigh", "high"}, {"gpt-5-mini", "minimal", "minimal"}, {"gpt-5.1", "xhigh", "high"}, From bf54626e63bb7c7d8d4ae5cc1515286a83d38bdf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 14:48:35 +0300 Subject: [PATCH 120/618] fix(reasoning): match the Google tables on the model name, not the path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Vertex full resource name reaches the capability layer verbatim: both Google SDKs pass a name containing "/" through to the backend, so a caller may hand langchaingo "projects/

/locations//publishers/google/models/gemini-2.5-flash". Every Google predicate matched that whole string, so its path segments answered for the model: GeminiCanDisable "projects" supplies the "pro" of the 2.5 Pro rule, so WithReasoningDisabled() failed with ErrReasoningOffUnsupported for a model that disables fine GeminiThinkingOffByDefault a project id containing "flash-lite" turned a 2.5 Pro disable request into a silent no-op GeminiUsesThinkingLevel a project id containing "gemini-3" sent thinking_level to a 2.5 model geminiKnownNonThinking a project id containing "gemma-1" dropped the thinking budget GeminiSupportsThinking a project id containing "gemini-2.5" made a non-thinking model think ResolveOff had the same shape one level up: it dispatched to the Claude branch on the raw string, so a project id containing "claude" routed a Gemini model into Anthropic rules and returned OffOmit. Every predicate in the file already agreed on name-form independence for a one-segment prefix — gemini_capability_test.go pins "google/gemini-2.5-flash" — and five other sites in the package already strip to the last path segment. The Google table was the one that did not. Verified by mutation: reverting any single normalization, including the lowercasing, turns TestGeminiPredicatesAgreeAcrossNameForms red. --- llms/reasoning/gemini_capability.go | 18 ++++-- llms/reasoning/gemini_name_forms_test.go | 77 ++++++++++++++++++++++++ llms/reasoning/off.go | 2 +- 3 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 llms/reasoning/gemini_name_forms_test.go diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index b810952fe..fe575e3df 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -8,6 +8,14 @@ import "strings" // model-string checks. Provider-wire specifics that need the genai types // (thinking_level mapping, the temperature value) stay in the googleai adapter. +func baseModelName(model string) string { + m := strings.ToLower(model) + if idx := strings.LastIndex(m, "/"); idx != -1 { + m = m[idx+1:] + } + return m +} + func hasFamily(model, family string) bool { rest := model for { @@ -25,7 +33,7 @@ func hasFamily(model, family string) bool { // GeminiSupportsThinking reports whether the model belongs to a Google thinking // family: Gemini 2.5, Gemini 3.x, or Gemma 4. func GeminiSupportsThinking(model string) bool { - m := strings.ToLower(model) + m := baseModelName(model) return hasFamily(m, "gemini-2.5") || hasFamily(m, "gemini-3") || hasFamily(m, "gemma-4") @@ -35,7 +43,7 @@ func GeminiSupportsThinking(model string) bool { // thinking_level control (Gemini 3.x), where thinking_budget is deprecated, // instead of a token budget. Gemini 3 also recommends running at temperature 1.0. func GeminiUsesThinkingLevel(model string) bool { - return hasFamily(strings.ToLower(model), "gemini-3") + return hasFamily(baseModelName(model), "gemini-3") } // geminiKnownNonThinking reports whether the model is a pre-thinking Gemini/Gemma @@ -43,7 +51,7 @@ func GeminiUsesThinkingLevel(model string) bool { // control at all. Unclassified names are NOT matched, staying optimistic so a // future thinking model is not wrongly treated as non-thinking. func geminiKnownNonThinking(model string) bool { - m := strings.ToLower(model) + m := baseModelName(model) return hasFamily(m, "gemini-1") || hasFamily(m, "gemini-2.0") || hasFamily(m, "gemma-1") || @@ -56,7 +64,7 @@ func geminiKnownNonThinking(model string) bool { // and Gemini 3.x (budget:0 is ignored) cannot. Unclassified Google models are // treated as disablable (optimistic: attempt it, let the API be the backstop). func GeminiCanDisable(model string) bool { - m := strings.ToLower(model) + m := baseModelName(model) if GeminiThinkingOffByDefault(m) { return true } @@ -72,7 +80,7 @@ func GeminiCanDisable(model string) bool { // GeminiThinkingOffByDefault reports whether the model leaves thinking off until // asked, so omitting the thinking config already yields "off". func GeminiThinkingOffByDefault(model string) bool { - m := strings.ToLower(model) + m := baseModelName(model) if !strings.Contains(m, "flash-lite") { return false } diff --git a/llms/reasoning/gemini_name_forms_test.go b/llms/reasoning/gemini_name_forms_test.go new file mode 100644 index 000000000..97d594d80 --- /dev/null +++ b/llms/reasoning/gemini_name_forms_test.go @@ -0,0 +1,77 @@ +package reasoning + +import "testing" + +func TestGeminiPredicatesAgreeAcrossNameForms(t *testing.T) { + t.Parallel() + + for _, group := range [][]string{ + { + "gemini-2.5-flash", + "Gemini-2.5-Flash", + "google/gemini-2.5-flash", + "models/gemini-2.5-flash", + "projects/p/locations/us-central1/publishers/google/models/gemini-2.5-flash", + "projects/claude-team/locations/us-central1/publishers/google/models/gemini-2.5-flash", + "projects/gemma-1-lab/locations/us-central1/publishers/google/models/gemini-2.5-flash", + "projects/gemini-3-lab/locations/us-central1/publishers/google/models/gemini-2.5-flash", + }, + { + "gemini-2.5-pro", + "projects/flash-lite-team/locations/us-central1/publishers/google/models/gemini-2.5-pro", + }, + { + "gemini-3-pro-preview", + "projects/p/locations/global/publishers/google/models/gemini-3-pro-preview", + }, + { + "gemma-4-27b-it", + "projects/p/locations/us-central1/publishers/google/models/gemma-4-27b-it", + }, + { + "text-bison", + "projects/gemini-2.5-lab/locations/us-central1/publishers/google/models/text-bison", + }, + } { + canonical := group[0] + want := struct { + thinking bool + level bool + canDisable bool + offByDefault bool + nonThinking bool + off OffWire + }{ + GeminiSupportsThinking(canonical), + GeminiUsesThinkingLevel(canonical), + GeminiCanDisable(canonical), + GeminiThinkingOffByDefault(canonical), + geminiKnownNonThinking(canonical), + ResolveOff(canonical, ProviderGoogleAI), + } + + for _, form := range group[1:] { + t.Run(form, func(t *testing.T) { + t.Parallel() + if got := GeminiSupportsThinking(form); got != want.thinking { + t.Errorf("GeminiSupportsThinking = %v, want %v (as %s)", got, want.thinking, canonical) + } + if got := GeminiUsesThinkingLevel(form); got != want.level { + t.Errorf("GeminiUsesThinkingLevel = %v, want %v (as %s)", got, want.level, canonical) + } + if got := GeminiCanDisable(form); got != want.canDisable { + t.Errorf("GeminiCanDisable = %v, want %v (as %s)", got, want.canDisable, canonical) + } + if got := GeminiThinkingOffByDefault(form); got != want.offByDefault { + t.Errorf("GeminiThinkingOffByDefault = %v, want %v (as %s)", got, want.offByDefault, canonical) + } + if got := geminiKnownNonThinking(form); got != want.nonThinking { + t.Errorf("geminiKnownNonThinking = %v, want %v (as %s)", got, want.nonThinking, canonical) + } + if got := ResolveOff(form, ProviderGoogleAI); got != want.off { + t.Errorf("ResolveOff = %v, want %v (as %s)", got, want.off, canonical) + } + }) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 5a9a07546..b066529a5 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -99,7 +99,7 @@ func ResolveOff(model string, p Provider) OffWire { } func isClaudeModel(model string) bool { - return strings.Contains(strings.ToLower(model), "claude") + return strings.Contains(baseModelName(model), "claude") } // openAIMandatoryReasoning reports the OpenAI reasoning families that cannot be From 150e138814ba6367934d417118338ae57a37dbd8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 14:56:35 +0300 Subject: [PATCH 121/618] fix(reasoning): restore the budget-thinking Claude generations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The structured-output commit 1fc12996 deleted six entries from budgetOnlyClaude and the test row that covered them, while its subject and body describe only WithStructuredOutput. The deletion was collateral: it left Claude 3.7, Opus 4.0, Opus 4.1 and Sonnet 4.0 classified as ClaudeReasoningUnknown. The consequence differed per door. On both Bedrock doors 3.7 fell through all three reasoning cases — ClaudeSupportsThinking said no, and the allowlists carry only the "anthropic.claude-opus-4-"/"-sonnet-4-"/"-haiku-4-" prefixes — so a reasoning request produced no thinking block at all and no error. On the openai transport the doors got the mirror image: those generations were reasoning models for temperature purposes, so a caller's temperature was overwritten with 1.0 even though 3.7 does not think until asked. Restoring the entries fixes both. It also removes the temperature pin for a plain 3.7 call, which is correct, but not for an OpenRouter ":thinking" route, where thinking is on regardless of what the request carries. The marker check that the qwen branch already applied is now a named predicate used by both, so the route keeps temperature 1.0. Verified on the wire: every restored generation now receives thinking:{type:"enabled"} with a positive budget at temperature 1.0 and no output_config.effort. Verified by mutation: dropping "claude-3-7", dropping the 4.0/4.1 spellings, dropping the marker check, and neutering the marker predicate each turn a test red. --- llms/bedrock/legacy_thinking_test.go | 47 ++++++++ llms/openai/openaillm.go | 2 +- llms/openai/openaillm_test.go | 139 ++++++++++++----------- llms/reasoning/claude_capability.go | 5 +- llms/reasoning/claude_capability_test.go | 8 ++ llms/reasoning/reasoning.go | 8 +- 6 files changed, 141 insertions(+), 68 deletions(-) diff --git a/llms/bedrock/legacy_thinking_test.go b/llms/bedrock/legacy_thinking_test.go index 8f667695b..f8ad966ac 100644 --- a/llms/bedrock/legacy_thinking_test.go +++ b/llms/bedrock/legacy_thinking_test.go @@ -80,6 +80,53 @@ func TestLegacyBudgetStaysBelowMaxTokens(t *testing.T) { "a missing max-tokens must be substituted once, not twice with different values") } +func TestLegacyBudgetThinkingReachesEveryBudgetGeneration(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + for _, model := range []string{ + "anthropic.claude-3-7-sonnet-20250219-v1:0", + "us.anthropic.claude-3-7-sonnet-20250219-v1:0", + "anthropic.claude-opus-4-20250514-v1:0", + "anthropic.claude-sonnet-4-20250514-v1:0", + "anthropic.claude-sonnet-4-5-20250929-v1:0", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, resp, bedrock.WithModel(model)) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningLow, 0)) + require.NoError(t, err) + + var got struct { + Temperature float64 `json:"temperature"` + Thinking *struct { + Type string `json:"type"` + BudgetTokens int `json:"budget_tokens"` + } `json:"thinking"` + OutputConfig *struct { + Effort string `json:"effort"` + } `json:"output_config"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &got)) + + require.NotNil(t, got.Thinking, "budget generation must receive a thinking block") + assert.Equal(t, "enabled", got.Thinking.Type) + assert.Positive(t, got.Thinking.BudgetTokens) + assert.InDelta(t, 1.0, got.Temperature, 1e-9, + "budget thinking runs at temperature 1") + assert.Nil(t, got.OutputConfig, + "a budget-only generation takes no effort alongside the budget") + }) + } +} + func writeBedrockChunk(t *testing.T, w io.Writer, enc *eventstream.Encoder, chunk string) { t.Helper() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 3ed3d15aa..60367f82b 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -390,7 +390,7 @@ func thinkingRuns(model string, opts llms.CallOptions, wireEffort string) bool { if opts.Reasoning.IsDisabled() || !reasoning.IsReasoningModel(model) { return false } - if isThinkingOnTheWire(wireEffort) { + if isThinkingOnTheWire(wireEffort) || reasoning.ThinkingMarkedInName(model) { return true } if reasoning.ClaudeSupportsThinking(model) { diff --git a/llms/openai/openaillm_test.go b/llms/openai/openaillm_test.go index d8a436cca..3a70e86b5 100644 --- a/llms/openai/openaillm_test.go +++ b/llms/openai/openaillm_test.go @@ -869,7 +869,80 @@ func TestErrorMapping(t *testing.T) { } } -// TestCreateChatRequest_ReasoningModelTemperature tests temperature adjustment for reasoning models +var reasoningTemperatureCases = []struct { + name string + model string + temperature float64 + expectedTemperature float64 +}{ + { + name: "reasoning model o1-preview with non-1.0 temperature", + model: "o1-preview", + temperature: 0.7, + expectedTemperature: 1.0, + }, + { + name: "reasoning model o1-mini with zero temperature", + model: "o1-mini", + temperature: 0.0, + expectedTemperature: 1.0, + }, + { + name: "reasoning model o3-mini with temperature 0.5", + model: "o3-mini", + temperature: 0.5, + expectedTemperature: 1.0, + }, + { + name: "reasoning model with temperature already 1.0", + model: "o1-preview", + temperature: 1.0, + expectedTemperature: 1.0, + }, + { + name: "non-reasoning model gpt-4 preserves temperature", + model: "gpt-4", + temperature: 0.7, + expectedTemperature: 0.7, + }, + { + name: "non-reasoning model gpt-4o-mini preserves zero temperature", + model: "gpt-4o-mini", + temperature: 0.0, + expectedTemperature: 0.0, + }, + { + name: "deepseek-r1 reasoning model adjusts temperature", + model: "deepseek-r1", + temperature: 0.8, + expectedTemperature: 1.0, + }, + { + name: "gemini-2.5-flash reasoning model adjusts temperature", + model: "gemini-2.5-flash-thinking-exp", + temperature: 0.3, + expectedTemperature: 1.0, + }, + { + name: "claude-3.7-sonnet thinks only when asked and keeps the temperature", + model: "claude-3.7-sonnet", + temperature: 0.9, + expectedTemperature: 0.9, + }, + { + name: "claude-3.7-sonnet thinking route adjusts temperature", + model: "anthropic/claude-3.7-sonnet:thinking", + temperature: 0.9, + expectedTemperature: 1.0, + }, + { + name: "claude-sonnet-4-5 thinks only when asked and keeps the temperature", + model: "claude-sonnet-4-5", + temperature: 0.3, + expectedTemperature: 0.3, + }, +} + func TestCreateChatRequest_ReasoningModelTemperature(t *testing.T) { t.Parallel() @@ -879,69 +952,7 @@ func TestCreateChatRequest_ReasoningModelTemperature(t *testing.T) { llm := &LLM{client: client} - tests := []struct { - name string - model string - temperature float64 - expectedTemperature float64 - }{ - { - name: "reasoning model o1-preview with non-1.0 temperature", - model: "o1-preview", - temperature: 0.7, - expectedTemperature: 1.0, - }, - { - name: "reasoning model o1-mini with zero temperature", - model: "o1-mini", - temperature: 0.0, - expectedTemperature: 1.0, - }, - { - name: "reasoning model o3-mini with temperature 0.5", - model: "o3-mini", - temperature: 0.5, - expectedTemperature: 1.0, - }, - { - name: "reasoning model with temperature already 1.0", - model: "o1-preview", - temperature: 1.0, - expectedTemperature: 1.0, - }, - { - name: "non-reasoning model gpt-4 preserves temperature", - model: "gpt-4", - temperature: 0.7, - expectedTemperature: 0.7, - }, - { - name: "non-reasoning model gpt-4o-mini preserves zero temperature", - model: "gpt-4o-mini", - temperature: 0.0, - expectedTemperature: 0.0, - }, - { - name: "deepseek-r1 reasoning model adjusts temperature", - model: "deepseek-r1", - temperature: 0.8, - expectedTemperature: 1.0, - }, - { - name: "gemini-2.5-flash reasoning model adjusts temperature", - model: "gemini-2.5-flash-thinking-exp", - temperature: 0.3, - expectedTemperature: 1.0, - }, - { - name: "claude-3.7-sonnet reasoning model adjusts temperature", - model: "claude-3.7-sonnet", - temperature: 0.9, - expectedTemperature: 1.0, - }, - } - - for _, tt := range tests { + for _, tt := range reasoningTemperatureCases { t.Run(tt.name, func(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 998e676d4..021a95256 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -44,9 +44,10 @@ var ( "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", } budgetOnlyClaude = []string{ - "claude-opus-4-5", - "claude-sonnet-4-5", + "claude-opus-4-5", "claude-opus-4-1", "claude-opus-4-0", "claude-opus-4-2025", + "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-sonnet-4-2025", "claude-haiku-4-5", + "claude-3-7", } ) diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 8a03caad4..fb90e67e9 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -29,6 +29,14 @@ func TestClaudeReasoningKindFor(t *testing.T) { {"claude-opus-4-5-20251101", ClaudeReasoningBudgetOnly}, {"claude-sonnet-4-5-20250929", ClaudeReasoningBudgetOnly}, {"us.anthropic.claude-haiku-4-5-20251001-v1:0", ClaudeReasoningBudgetOnly}, + {"claude-3-7-sonnet-20250219", ClaudeReasoningBudgetOnly}, + {"claude-3.7-sonnet", ClaudeReasoningBudgetOnly}, + {"anthropic.claude-3-7-sonnet-20250219-v1:0", ClaudeReasoningBudgetOnly}, + {"claude-opus-4-0", ClaudeReasoningBudgetOnly}, + {"claude-opus-4-20250514", ClaudeReasoningBudgetOnly}, + {"claude-opus-4-1-20250805", ClaudeReasoningBudgetOnly}, + {"claude-sonnet-4-0", ClaudeReasoningBudgetOnly}, + {"claude-sonnet-4-20250514", ClaudeReasoningBudgetOnly}, // Unknown: no-thinking Claude, retired/non-classified, non-Claude, empty. {"claude-3-5-haiku-20241022", ClaudeReasoningUnknown}, {"claude-2.1", ClaudeReasoningUnknown}, diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 9bd090a1c..53eed3647 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -241,7 +241,7 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata // Qwen reasoning models. Qwen3.x thinking is user-toggleable with configurable // sampling, so the bare qwen3 prefix must not force temperature pinning; only // an explicit "thinking" marker or the QwQ line count as always-on reasoning. - if (strings.HasPrefix(modelLower, "qwen") && strings.Contains(modelLower, "thinking")) || + if (strings.HasPrefix(modelLower, "qwen") && ThinkingMarkedInName(modelLower)) || strings.Contains(modelLower, "qwq-") { return true } @@ -316,6 +316,12 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata return false } +// ThinkingMarkedInName reports whether the model name selects a routing variant +// that already runs with thinking on, not merely a model capable of thinking. +func ThinkingMarkedInName(model string) bool { + return strings.Contains(strings.ToLower(model), "thinking") +} + func stripPlatformPrefix(model string) string { for { idx := strings.Index(model, ".") From 27e46fa149a4bef70ca7176395e42d84ca382fb9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 14:58:50 +0300 Subject: [PATCH 122/618] fix(reasoning): stop the wire's qwen narrowing from reaching the UI hint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IsReasoningModel matches qwen only when the name carries a thinking marker, so the bare Qwen3 prefix does not force a temperature pin on a family whose thinking is user-toggleable. LikelyReasoningModel opened with that same predicate and had no qwen arm of its own, so it inherited the narrowing and answered false for every Qwen3 name — qwen3-coder-flash, qwen3.5-flash, qwen3.7-max, qwen-plus and the slash/dotted platform spellings — while minimax-m2, glm-4.6 and deepseek-r1 answered true. A caller reading ReasoningSupportFor saw an unsupported family and had nothing to offer. The hint is documented as the optimistic side of the pair: a family whose current generations reason, minus the known pre-reasoning ones. It now has a qwen arm shaped like the gpt/claude/gemini ones, plus qvq alongside the qwq line the wire already knew. The test pins both directions on the same names, so widening the hint cannot widen the wire by accident. --- llms/reasoning/detect_hint.go | 11 +++++++++ llms/reasoning/detect_hint_test.go | 38 ++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index bc5723fd3..f19148adf 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -31,6 +31,10 @@ func LikelyReasoningModel(model string) bool { return !claudePreThinking(m) case strings.HasPrefix(m, "gemini-"), strings.HasPrefix(m, "gemma-"): return !geminiKnownNonThinking(m) + case strings.HasPrefix(m, "qwen"): + return !qwenPreReasoning(m) + case strings.HasPrefix(m, "qvq"): + return true } return false } @@ -58,6 +62,13 @@ func claudePreThinking(m string) bool { strings.HasPrefix(c, "claude-3") } +func qwenPreReasoning(m string) bool { + return strings.HasPrefix(m, "qwen1") || + strings.HasPrefix(m, "qwen2") || + strings.HasPrefix(m, "qwen-1") || + strings.HasPrefix(m, "qwen-2") +} + // isOSeries matches the OpenAI o-series naming (o1, o3, o4-mini, successors); // every generation of it reasons. func isOSeries(m string) bool { diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index 87734f6c3..6959aa30f 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -84,3 +84,41 @@ func TestFlashLiteIsRecognisedOnlyWithinTheGoogleFamilies(t *testing.T) { } } } + +func TestQwenHintIsOptimisticWithoutMovingTheWire(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"qwen3-coder-flash", true}, + {"qwen3-coder-plus", true}, + {"qwen3-14b", true}, + {"qwen3.5-flash", true}, + {"qwen3.6-plus", true}, + {"qwen3.7-max", true}, + {"qwen4-max", true}, + {"qwen-plus", true}, + {"qwen-turbo", true}, + {"qwen-max", true}, + {"qwen/qwen3-32b", true}, + {"qwen.qwen3-32b-v1:0", true}, + {"Qwen/Qwen3.6-27B-FP8", true}, + {"qvq-max", true}, + {"qvq-72b-preview", true}, + {"qwen2.5-72b-instruct", false}, + {"qwen2-7b", false}, + {"qwen1.5-14b", false}, + {"qwen-1.8b", false}, + {"qwen-2.5-coder", false}, + } { + if got := LikelyReasoningModel(tc.model); got != tc.want { + t.Errorf("LikelyReasoningModel(%q) = %v, want %v", tc.model, got, tc.want) + } + if tc.want && IsReasoningModel(tc.model) { + t.Errorf("IsReasoningModel(%q) = true: the hint must not widen the wire path,"+ + " which pins temperature only for an explicit thinking marker", tc.model) + } + } +} From eb63c0589f19b928103d2dc6646ce52a353b609c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 15:02:11 +0300 Subject: [PATCH 123/618] fix(openai): pin the temperature only for models that think unasked MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reasoning catalog answers one question — can this model reason — and the openai door read it as a second: is it reasoning right now. So a model whose thinking is opt-in had its caller's temperature overwritten with 1.0 and its top_p dropped on every call, including calls that asked for no reasoning at all. The recorded cassettes settle the case for mistral-medium-3: seven OpenRouter recordings of ordinary calls all report reasoning_tokens 0, against 168 for the claude-3.7-sonnet:thinking route recorded beside them. The model does not think unless asked, so the caller's sampling stands. Only that family ships. mistral-small-2603, solar-pro-3 and hy3 look like the same case from the catalog alone, but nothing else in the tree touches them, so un-pinning them would be a guess in the opposite direction. --- llms/openai/openaillm.go | 2 +- llms/openai/sampling_matrix_test.go | 28 ++++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 6 ++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 60367f82b..203cd62c6 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -396,7 +396,7 @@ func thinkingRuns(model string, opts llms.CallOptions, wireEffort string) bool { if reasoning.ClaudeSupportsThinking(model) { return reasoning.ClaudeThinkingDefaultsOn(model) } - return true + return !reasoning.ThinkingOptIn(model) } func isThinkingOnTheWire(wireEffort string) bool { diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 9a6e66949..02c701ef5 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -168,3 +168,31 @@ func TestAModelThatRejectsSamplingGetsNoSamplingAtAll(t *testing.T) { } } } + +func TestOptInThinkingKeepsSamplingUntilAsked(t *testing.T) { + t.Parallel() + + runSamplingCases(t, []samplingCase{ + { + name: "no effort leaves the caller's sampling alone", + model: "mistral-medium-3", + opts: []llms.CallOption{llms.WithTemperature(0.3), llms.WithTopP(0.7)}, + present: []string{`"temperature":0.3`, `"top_p":0.7`}, + }, + { + name: "an effort puts the request on the thinking terms", + model: "mistral-medium-3", + opts: []llms.CallOption{ + llms.WithTemperature(0.3), llms.WithTopP(0.7), llms.WithReasoning(llms.ReasoningMedium, 0), + }, + present: []string{`"temperature":1`, `"reasoning_effort":"medium"`}, + absent: []string{`"top_p"`}, + }, + { + name: "the provider-prefixed spelling resolves the same", + model: "mistralai/mistral-medium-3", + opts: []llms.CallOption{llms.WithTemperature(0.3)}, + present: []string{`"temperature":0.3`}, + }, + }) +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 53eed3647..20fee149d 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -316,6 +316,12 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata return false } +// ThinkingOptIn reports whether the model reasons only when a request asks it to. +func ThinkingOptIn(model string) bool { + m := stripPlatformPrefix(baseModelName(model)) + return strings.HasPrefix(m, "mistral-medium-3") +} + // ThinkingMarkedInName reports whether the model name selects a routing variant // that already runs with thinking on, not merely a model capable of thinking. func ThinkingMarkedInName(model string) bool { From 1ce1f0a16822b19c7f123e7ae444ae81c2f18291 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 15:05:30 +0300 Subject: [PATCH 124/618] fix(openai): name the tool type when a provider left it out MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The streaming assembler accepts an identifying chunk without a type, because some providers omit it and requiring it would drop the whole tool call. The request side had no matching allowance: ToolCall.Type carries no omitempty, so the next turn echoed the assistant message back as "tool_calls":[{"id":"call_1","type":"","function":{...}}] — an empty string where the schema admits only a named tool type. The conversion now names the function type when the caller has none. A type the caller did set is passed through untouched. --- llms/openai/openaillm.go | 6 ++++- llms/openai/sampling_matrix_test.go | 26 +++++++++++++++++++++ llms/openai/tool_call_type_test.go | 35 +++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 llms/openai/tool_call_type_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 203cd62c6..db6d537e5 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -602,9 +602,13 @@ func toolCallsFromToolCalls(tcs []llms.ToolCall) []openaiclient.ToolCall { // toolCallFromToolCall converts an llms.ToolCall to a ToolCall. func toolCallFromToolCall(tc llms.ToolCall) openaiclient.ToolCall { + toolType := openaiclient.ToolType(tc.Type) + if toolType == "" { + toolType = openaiclient.ToolTypeFunction + } return openaiclient.ToolCall{ ID: tc.ID, - Type: openaiclient.ToolType(tc.Type), + Type: toolType, Function: openaiclient.ToolFunction{ Name: tc.FunctionCall.Name, Arguments: tc.FunctionCall.Arguments, diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 02c701ef5..9fa420dc6 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -38,6 +38,32 @@ func sendForWire(t *testing.T, model string, opts ...llms.CallOption) string { return body } +func sendMessagesForWire(t *testing.T, model string, messages []llms.MessageContent) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), messages); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + type samplingCase struct { name string model string diff --git a/llms/openai/tool_call_type_test.go b/llms/openai/tool_call_type_test.go new file mode 100644 index 000000000..446d4fc31 --- /dev/null +++ b/llms/openai/tool_call_type_test.go @@ -0,0 +1,35 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestToolCallTypeIsNamedOnTheWire(t *testing.T) { + t.Parallel() + + history := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "weather?"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ + ID: "call_1", + FunctionCall: &llms.FunctionCall{Name: "get_weather", Arguments: `{"city":"Minsk"}`}, + }, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "call_1", Name: "get_weather", Content: "sunny"}, + }}, + } + + body := sendMessagesForWire(t, "gpt-4o", history) + + if strings.Contains(body, `"type":""`) { + t.Errorf("a tool call reassembled from a provider that omits the type must not"+ + " echo an empty type, got body: %s", body) + } + if !strings.Contains(body, `"type":"function"`) { + t.Errorf("want the function tool type on the wire, got body: %s", body) + } +} From c2ae0085ca3c61614703cd619d3052e25d3a5907 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 15:56:20 +0300 Subject: [PATCH 125/618] fix(reasoning): settle the opt-in families by measurement Three families were suspected of the same defect as mistral-medium-3: the catalog calls them reasoning models, so the openai door overwrote the caller's temperature with 1.0 on every call. Nothing in the tree said whether they actually reason unasked, so all three were left alone. Measured against the live providers, ordinary calls carrying no reasoning parameter, reading the reasoning-token count back: deepseek-r1 371 hy3-preview 202, 490 hy3 948 mistral-medium-3 0 mistral-medium-3-5 0 mistral-medium-3.1 0 mistral-small-2603 0, 0 solar-pro-3 0, 0 So mistral-small-2603 and solar-pro-3 join the opt-in set, and hy3 does not: it reasons unasked and its pin is correct. The later mistral-medium generations that the existing prefix already captured report zero too, so the prefix stays as it is rather than being narrowed to the exact name. Verified by mutation in both directions: dropping any of the three prefixes turns the wire test red, and so does adding hy3 to them. --- llms/openai/sampling_matrix_test.go | 24 ++++++++++++++++++++++++ llms/reasoning/reasoning.go | 7 ++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 9fa420dc6..2a9c06098 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -220,5 +220,29 @@ func TestOptInThinkingKeepsSamplingUntilAsked(t *testing.T) { opts: []llms.CallOption{llms.WithTemperature(0.3)}, present: []string{`"temperature":0.3`}, }, + { + name: "a later generation of the same family is opt-in too", + model: "mistral-medium-3-5", + opts: []llms.CallOption{llms.WithTemperature(0.3)}, + present: []string{`"temperature":0.3`}, + }, + { + name: "mistral-small-2603 is opt-in", + model: "mistral-small-2603", + opts: []llms.CallOption{llms.WithTemperature(0.3)}, + present: []string{`"temperature":0.3`}, + }, + { + name: "solar-pro-3 is opt-in", + model: "solar-pro-3", + opts: []llms.CallOption{llms.WithTemperature(0.3)}, + present: []string{`"temperature":0.3`}, + }, + { + name: "a family that reasons unasked keeps the pin", + model: "hy3-preview", + opts: []llms.CallOption{llms.WithTemperature(0.3)}, + present: []string{`"temperature":1`}, + }, }) } diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 20fee149d..c64e15520 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -319,7 +319,12 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata // ThinkingOptIn reports whether the model reasons only when a request asks it to. func ThinkingOptIn(model string) bool { m := stripPlatformPrefix(baseModelName(model)) - return strings.HasPrefix(m, "mistral-medium-3") + for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3"} { + if strings.HasPrefix(m, prefix) { + return true + } + } + return false } // ThinkingMarkedInName reports whether the model name selects a routing variant From 96452c3df76ac0eff6b85a1d3ab6048f041c1a52 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 15:58:28 +0300 Subject: [PATCH 126/618] test: drop a helper comment that restated its own signature The branch-wide comment pass found two test helpers documented by repetition. legacyLLMCapturing's line named its parameters back; serveAnthropic's first clause did the same, while its second carries the one thing a reader cannot see: the captured body is empty until GenerateContent returns. --- llms/anthropic/response_folding_test.go | 4 ++-- llms/bedrock/legacy_thinking_test.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/llms/anthropic/response_folding_test.go b/llms/anthropic/response_folding_test.go index 9e6ac9a5e..fa8853029 100644 --- a/llms/anthropic/response_folding_test.go +++ b/llms/anthropic/response_folding_test.go @@ -13,8 +13,8 @@ import ( "github.com/vxcontrol/langchaingo/llms" ) -// serveAnthropic replies with response; the returned pointer holds the request -// body once GenerateContent returns. +// serveAnthropic's returned pointer holds the request body only once +// GenerateContent has returned. func serveAnthropic(t *testing.T, response string) (*httptest.Server, *string) { t.Helper() diff --git a/llms/bedrock/legacy_thinking_test.go b/llms/bedrock/legacy_thinking_test.go index f8ad966ac..9f23e96c5 100644 --- a/llms/bedrock/legacy_thinking_test.go +++ b/llms/bedrock/legacy_thinking_test.go @@ -21,7 +21,6 @@ import ( "github.com/vxcontrol/langchaingo/llms/streaming" ) -// legacyLLMCapturing serves body and reports the request the door built. func legacyLLMCapturing(t *testing.T, body string, opts ...bedrock.Option) (*bedrock.LLM, *string) { t.Helper() From 204e1ffb8d5c8fed5f9a590fd0b14f1549c4a532 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:15:03 +0300 Subject: [PATCH 127/618] fix(structuredoutput): stop a caller's schema from reading local files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both JSON Schema compilers took jsonschema.NewCompiler() as-is. In v6.0.2 that installs FileLoader, which os.Opens the path of any external $ref, so a schema handed to WithStructuredOutput reached the local filesystem on every door — the preflight in CallOptions.ValidateStructuredOutput and again in structuredoutput.Compile on the response path. Measured before the change, through the exported preflight: $ref file://.json -> nil; the file's contents joined the schema $ref file://.json -> "no such file or directory" $ref file:///etc/hosts -> "invalid character '#'" The last two make the error an existence-and-parseability oracle for arbitrary paths, and the first lets a file's contents govern validation and surface in the returned text. After the change all three report only "no URLLoader registered", with no filesystem access. Embedded metaschemas are served before the loader is consulted, so an explicit $schema and in-document $refs keep compiling; that direction is pinned too. This does change exported behaviour: a schema whose $ref points outside itself no longer compiles. --- llms/options_test.go | 30 ++++++++++++++ llms/structured_output.go | 1 + llms/structuredoutput/validator.go | 1 + llms/structuredoutput/validator_test.go | 53 +++++++++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/llms/options_test.go b/llms/options_test.go index c10b2cb23..592ea9d43 100644 --- a/llms/options_test.go +++ b/llms/options_test.go @@ -5,7 +5,10 @@ import ( "encoding/json" "errors" "fmt" + "os" + "path/filepath" "reflect" + "strings" "testing" "github.com/vxcontrol/langchaingo/llms" @@ -1193,3 +1196,30 @@ func TestGetTemperatureLeavesAnUnsetValueAtTheDefault(t *testing.T) { } } } + +func TestValidateStructuredOutputDoesNotReadTheFilesystem(t *testing.T) { + t.Parallel() + + present := filepath.Join(t.TempDir(), "present.json") + if err := os.WriteFile(present, []byte(`{"type":"integer","minimum":42}`), 0o600); err != nil { + t.Fatal(err) + } + + opts := llms.CallOptions{JSONMode: true, StructuredOutput: &llms.StructuredOutputConfig{ + Name: "s", + Schema: json.RawMessage(fmt.Sprintf( + `{"type":"object","additionalProperties":false,"properties":{"n":{"$ref":%q}}}`, + "file://"+present)), + }} + + err := opts.ValidateStructuredOutput() + if err == nil { + t.Fatal("a caller-supplied schema must not be able to pull a file off the local disk") + } + if !errors.Is(err, llms.ErrStructuredOutputConfig) { + t.Errorf("error must wrap ErrStructuredOutputConfig, got %v", err) + } + if !strings.Contains(err.Error(), "no URLLoader registered") { + t.Errorf("want the reference refused before any filesystem access, got %v", err) + } +} diff --git a/llms/structured_output.go b/llms/structured_output.go index e61fbca74..d9512515c 100644 --- a/llms/structured_output.go +++ b/llms/structured_output.go @@ -152,6 +152,7 @@ func compileStructuredOutputSchema(schema json.RawMessage) error { } const resource = "structuredoutput:schema" comp := jsonschema.NewCompiler() + comp.UseLoader(jsonschema.SchemeURLLoader{}) if err := comp.AddResource(resource, doc); err != nil { return err } diff --git a/llms/structuredoutput/validator.go b/llms/structuredoutput/validator.go index b994775c4..1f62a8a0e 100644 --- a/llms/structuredoutput/validator.go +++ b/llms/structuredoutput/validator.go @@ -26,6 +26,7 @@ func Compile(schema json.RawMessage) (*Compiled, error) { } const resource = "structuredoutput:schema" comp := jsonschema.NewCompiler() + comp.UseLoader(jsonschema.SchemeURLLoader{}) if err := comp.AddResource(resource, doc); err != nil { return nil, fmt.Errorf("load schema: %w", err) } diff --git a/llms/structuredoutput/validator_test.go b/llms/structuredoutput/validator_test.go index 4dfc448a3..153acc9cc 100644 --- a/llms/structuredoutput/validator_test.go +++ b/llms/structuredoutput/validator_test.go @@ -3,6 +3,10 @@ package structuredoutput_test import ( "encoding/json" "errors" + "fmt" + "os" + "path/filepath" + "strings" "testing" "github.com/vxcontrol/langchaingo/llms" @@ -94,3 +98,52 @@ func TestValidate_TypedError(t *testing.T) { t.Error("typed error must retain an unwrap-able cause") } } + +func TestCompileDoesNotReadTheFilesystem(t *testing.T) { + t.Parallel() + + dir := t.TempDir() + present := filepath.Join(dir, "present.json") + if err := os.WriteFile(present, []byte(`{"type":"integer","minimum":42}`), 0o600); err != nil { + t.Fatal(err) + } + absent := filepath.Join(dir, "absent.json") + + refSchema := func(target string) json.RawMessage { + return json.RawMessage(fmt.Sprintf( + `{"type":"object","additionalProperties":false,"properties":{"n":{"$ref":%q}}}`, + "file://"+target)) + } + + _, presentErr := structuredoutput.Compile(refSchema(present)) + _, absentErr := structuredoutput.Compile(refSchema(absent)) + + if presentErr == nil { + t.Fatal("a file:// reference must not compile: the schema would be read off the caller's disk") + } + if absentErr == nil { + t.Fatal("a file:// reference must not compile") + } + const refused = "no URLLoader registered" + for label, err := range map[string]error{"present": presentErr, "absent": absentErr} { + if !strings.Contains(err.Error(), refused) { + t.Errorf("%s path: want the reference refused before any filesystem access, got %v", label, err) + } + } +} + +func TestCompileStillAcceptsInternalAndDraftRefs(t *testing.T) { + t.Parallel() + + for name, schema := range map[string]string{ + "internal $defs": `{"$defs":{"leaf":{"type":"string"}},"type":"object",` + + `"additionalProperties":false,"properties":{"a":{"$ref":"#/$defs/leaf"}}}`, + "explicit draft 2020-12": `{"$schema":"https://json-schema.org/draft/2020-12/schema",` + + `"type":"object","additionalProperties":false,"properties":{"a":{"type":"string"}}}`, + "explicit draft-07": `{"$schema":"http://json-schema.org/draft-07/schema#","type":"string"}`, + } { + if _, err := structuredoutput.Compile(json.RawMessage(schema)); err != nil { + t.Errorf("%s: %v", name, err) + } + } +} From d6ee33329afe6d1830a3cd7751bf59ffa2db3b5f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:19:59 +0300 Subject: [PATCH 128/618] fix(structuredoutput): close every object node the walk can reach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RequireClosedObjects promises that every object node sets additionalProperties:false, and the package's own test pins the promise for a bare {"type":"object"}. Four shapes escaped it, each of which the walk either misread or never visited: {"type":["object","null"]} the type was read as a string, so a union naming object was not an object at all prefixItems: [ ... ] never visited patternProperties: { ... } never visited additionalProperties: { ...schema... } never visited, so an unclosed object inside it survived on a node the walk did not classify The tuple form of items — an array rather than a schema — went unvisited for the same reason as prefixItems, since the recursion accepted only an object. Values are now walked whether they are a schema or an array of schemas, and the object test reads a union type. Each shape is pinned twice, unclosed and closed, so the walk cannot start rejecting what it should accept. Every one of the six mutations — reverting the type read, and dropping each keyword or the array case from the walk — turns the table red. --- llms/structuredoutput/schema.go | 53 +++++++++++++++++----------- llms/structuredoutput/schema_test.go | 9 +++++ 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/llms/structuredoutput/schema.go b/llms/structuredoutput/schema.go index f9a95896a..61b5fa6f2 100644 --- a/llms/structuredoutput/schema.go +++ b/llms/structuredoutput/schema.go @@ -28,41 +28,54 @@ func requireClosed(node any) error { } // A node is an object schema when its type is "object" or it declares // properties. Such a node must close itself with additionalProperties:false. - t, _ := m["type"].(string) - props, hasProps := m["properties"].(map[string]any) - if t == "object" || hasProps { + _, hasProps := m["properties"].(map[string]any) + if declaresObject(m["type"]) || hasProps { if ap, ok := m["additionalProperties"].(bool); !ok || ap { return fmt.Errorf("%w: every object schema must explicitly set additionalProperties:false", llms.ErrStructuredOutputConfig) } } - for _, v := range props { - if err := requireClosed(v); err != nil { - return err - } - } - for _, key := range []string{"$defs", "definitions"} { - if defs, ok := m[key].(map[string]any); ok { - for _, v := range defs { - if err := requireClosed(v); err != nil { + for _, key := range []string{"properties", "patternProperties", "$defs", "definitions"} { + if group, ok := m[key].(map[string]any); ok { + for _, v := range group { + if err := requireClosedValue(v); err != nil { return err } } } } - if items, ok := m["items"]; ok { - if err := requireClosed(items); err != nil { + for _, key := range []string{"items", "prefixItems", "additionalProperties", "anyOf", "oneOf", "allOf"} { + if err := requireClosedValue(m[key]); err != nil { return err } } - for _, key := range []string{"anyOf", "oneOf", "allOf"} { - if arr, ok := m[key].([]any); ok { - for _, v := range arr { - if err := requireClosed(v); err != nil { - return err - } + return nil +} + +func requireClosedValue(v any) error { + switch node := v.(type) { + case map[string]any: + return requireClosed(node) + case []any: + for _, item := range node { + if err := requireClosedValue(item); err != nil { + return err } } } return nil } + +func declaresObject(v any) bool { + switch t := v.(type) { + case string: + return t == "object" + case []any: + for _, item := range t { + if name, ok := item.(string); ok && name == "object" { + return true + } + } + } + return false +} diff --git a/llms/structuredoutput/schema_test.go b/llms/structuredoutput/schema_test.go index a37b0bb79..48c020d27 100644 --- a/llms/structuredoutput/schema_test.go +++ b/llms/structuredoutput/schema_test.go @@ -25,6 +25,15 @@ func TestRequireClosedObjects(t *testing.T) { {"object inside array items", `{"type":"array","items":{"type":"object","properties":{"a":{"type":"string"}}}}`, true}, {"non-object schema is fine", `{"type":"string"}`, false}, {"array of strings is fine", `{"type":"array","items":{"type":"string"}}`, false}, + {"union type naming object", `{"type":["object","null"]}`, true}, + {"union type naming object, closed", `{"type":["object","null"],"additionalProperties":false}`, false}, + {"union type without object is fine", `{"type":["string","null"]}`, false}, + {"object under prefixItems", `{"type":"array","prefixItems":[{"type":"object","properties":{"a":{"type":"string"}}}],"items":false}`, true}, + {"object under prefixItems, closed", `{"type":"array","prefixItems":[{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":false}],"items":false}`, false}, + {"object under tuple-form items", `{"type":"array","items":[{"type":"object","properties":{"a":{"type":"string"}}}]}`, true}, + {"object under patternProperties", `{"type":"object","additionalProperties":false,"patternProperties":{"^k":{"type":"object","properties":{"a":{"type":"string"}}}}}`, true}, + {"object under patternProperties, closed", `{"type":"object","additionalProperties":false,"patternProperties":{"^k":{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":false}}}`, false}, + {"object under a schema-valued additionalProperties", `{"additionalProperties":{"type":"object","properties":{"a":{"type":"string"}}}}`, true}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { From 766a866c45fe603695baba2e46442869b7bbe2b7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:23:41 +0300 Subject: [PATCH 129/618] docs: give the chat guide's agent snippet its required agent type The snippet at guide-chat.mdx passes agents.WithMaxIterations(5) where agents.Initialize expects an AgentType, so a reader who copies it gets "cannot use agents.WithMaxIterations(5) (value of func type agents.Option) as agents.AgentType value". Compiled both ways to check: the line added here is what turns the copied snippet from failing to building. --- docs/docs/getting-started/guide-chat.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/getting-started/guide-chat.mdx b/docs/docs/getting-started/guide-chat.mdx index 4cc004920..18d6f568c 100644 --- a/docs/docs/getting-started/guide-chat.mdx +++ b/docs/docs/getting-started/guide-chat.mdx @@ -329,6 +329,7 @@ if err != nil { agent, err := agents.Initialize( llm, []tools.Tool{calculator, search}, + agents.ZeroShotReactDescription, agents.WithMaxIterations(5), ) if err != nil { From 4238238a2dd03d7a76b448d683dc18d7120b40b4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:23:41 +0300 Subject: [PATCH 130/618] test(mongovector): name the deadline without inventing an error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deadline branch is reached whenever the index never becomes queryable, including the ordinary case where every view.List call succeeded. lastErr is nil there, so the failure printed "(last error: %!w())" — a formatting artefact in place of the reason. On that branch there was no last error; it is now mentioned only when there is one. --- vectorstores/mongovector/mongovector_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vectorstores/mongovector/mongovector_test.go b/vectorstores/mongovector/mongovector_test.go index d352aef0a..442444c87 100644 --- a/vectorstores/mongovector/mongovector_test.go +++ b/vectorstores/mongovector/mongovector_test.go @@ -843,7 +843,10 @@ func createVectorSearchIndex( doc = cursor.Current } else { if time.Now().After(deadline) { - return "", fmt.Errorf("index %s did not become queryable before deadline (last error: %w)", searchName, lastErr) + if lastErr != nil { + return "", fmt.Errorf("index %s did not become queryable before deadline: %w", searchName, lastErr) + } + return "", fmt.Errorf("index %s did not become queryable before deadline", searchName) } time.Sleep(2 * time.Second) } From a081ecfbdf0780b88122c238c17bc4205bf2a896 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:23:42 +0300 Subject: [PATCH 131/618] docs(bedrock): say that Opus 5 cannot be disabled on this platform The constant's own doc promised that Opus 5 "still accepts an explicit disable", while WithReasoningDisabled on us.anthropic.claude-opus-5 returns ErrReasoningOffUnsupported and sends nothing. Sonnet 5 sits in the same file with the same behaviour and already carries the correct wording; Opus 5 now matches it. --- llms/bedrock/models_list.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llms/bedrock/models_list.go b/llms/bedrock/models_list.go index 034c10d74..f9195660d 100644 --- a/llms/bedrock/models_list.go +++ b/llms/bedrock/models_list.go @@ -45,8 +45,9 @@ const ( // Claude Opus 5 is Anthropic's model for complex agentic coding and enterprise work, succeeding // Opus 4.8. Adaptive thinking is on by default (a breaking change from Opus 4.8, which defaulted - // off) but, unlike Fable 5/Mythos 5, it still accepts an explicit disable. Supports adaptive - // thinking only: budget thinking and sampling params are rejected. + // off). Supports adaptive thinking only: budget thinking and sampling params are rejected. On + // Bedrock, adaptive thinking is always on and cannot be disabled, unlike the Anthropic API where + // it accepts an explicit disable. // // Max tokens: 1M // Languages: English, French, Modern Standard Arabic, Mandarin Chinese, Hindi, Spanish, Portuguese, Korean, Japanese, German, Russian, Polish, and other languages. From 587b119a76b8aa9e8893f7fa0546a1794a1c5e57 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:23:42 +0300 Subject: [PATCH 132/618] build: take the network off the example build path Both example builds ran go mod tidy first, so a go.mod missing a require line was repaired in place instead of failing, and every build needed the module proxy. All 75 examples build with -mod=readonly and no tidy, so the step was doing nothing a correct tree needs. --- .github/workflows/examples.yaml | 3 +-- Makefile | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/examples.yaml b/.github/workflows/examples.yaml index a19578844..800a6b5d3 100644 --- a/.github/workflows/examples.yaml +++ b/.github/workflows/examples.yaml @@ -44,5 +44,4 @@ jobs: run: | cd examples/${{ matrix.example }} echo "Building ${{ matrix.example }}" - go mod tidy - go build -o /dev/null . \ No newline at end of file + go build -mod=readonly -o /dev/null . \ No newline at end of file diff --git a/Makefile b/Makefile index f5538c0e1..9c1a6e444 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ clean-lint-cache: .PHONY: build-examples build-examples: for example in $(shell find ./examples -mindepth 1 -maxdepth 1 -type d); do \ - (cd $$example; echo Build $$example; go mod tidy; go build -o /dev/null) || exit 1; done + (cd $$example; echo Build $$example; go build -mod=readonly -o /dev/null) || exit 1; done .PHONY: update-examples update-examples: From 4dff1f456132aa5514d248a96db2bc62cff2dc8a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:26:56 +0300 Subject: [PATCH 133/618] fix(openai): never send a reasoning budget the config could not compute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetTokens returns -1 for an effort it has no budget mapping for, documented as an error value for the server to handle. The modern reasoning branch admitted any non-zero budget, so that sentinel went out as a real one: WithModernReasoningFormat + WithUsingReasoningMaxTokens with effort "minimal" and a negative token count produced {"reasoning":{"max_tokens":-1}}. The branch now takes only a positive budget, so an unmappable effort falls through to the effort form the same request would have used with no token count at all. The two rows that already worked — a negative count under a mapped effort, and an explicit count — are pinned unchanged alongside it. --- llms/openai/openaillm.go | 2 +- llms/openai/reasoning_wire_test.go | 86 ++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 llms/openai/reasoning_wire_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index db6d537e5..4de093cf6 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -326,7 +326,7 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) } // using modern reasoning format - if o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 && reasoningTokens != 0 { + if o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 && reasoningTokens > 0 { req.Reasoning = &openaiclient.ReasoningOptions{ MaxTokens: reasoningTokens, } diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go new file mode 100644 index 000000000..58242ae74 --- /dev/null +++ b/llms/openai/reasoning_wire_test.go @@ -0,0 +1,86 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func sendModernReasoningForWire(t *testing.T, effort llms.ReasoningEffort, tokens int) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel("gpt-5"), + WithModernReasoningFormat(), WithUsingReasoningMaxTokens()) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(effort, tokens)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestModernReasoningSendsNoBudgetItCannotCompute(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + effort llms.ReasoningEffort + tokens int + present string + absent string + }{ + { + name: "an effort with no budget mapping falls back to the effort itself", + effort: llms.ReasoningEffort("minimal"), + tokens: -5, + present: `"effort":"minimal"`, + absent: `"max_tokens":-`, + }, + { + name: "a negative budget under a mapped effort uses the effort's budget", + effort: llms.ReasoningMedium, + tokens: -5, + present: `"max_tokens":5461`, + absent: `"effort"`, + }, + { + name: "an explicit budget is sent as given", + effort: llms.ReasoningMedium, + tokens: 2048, + present: `"max_tokens":2048`, + absent: `"effort"`, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + body := sendModernReasoningForWire(t, tc.effort, tc.tokens) + if !strings.Contains(body, tc.present) { + t.Errorf("want %s on the wire, got body: %s", tc.present, body) + } + if strings.Contains(body, tc.absent) { + t.Errorf("want no %s on the wire, got body: %s", tc.absent, body) + } + }) + } +} From 36f1c5e3e0e37e442cf6e65047b51437f338648b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:28:32 +0300 Subject: [PATCH 134/618] fix(googleai): read a non-positive budget as no budget on Gemini 3.x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The resolver routes an effort with no explicit token budget to thinking_level, Gemini 3.x's native control, and keeps thinking_budget for an explicit one. It decided which by testing Tokens against zero, so a negative count counted as explicit: gemini-3.1-pro with effort low and Tokens -5 received a thinking_budget of 4096 on a generation where that control is deprecated, instead of thinking_level LOW. A negative count is not a budget, and GetTokens does not treat it as one either — it falls back to the effort's own budget. The branch now matches that reading. An explicit positive budget still wins, as its own case pins. --- llms/googleai/googleai.go | 2 +- llms/googleai/googleai_core_unit_test.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 800f00505..ea3cbec40 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1076,7 +1076,7 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in // An effort with no explicit token budget maps to the qualitative // thinking_level on Gemini 3.x (its native control, where thinking_budget is // deprecated); an explicit budget or a 2.5 model still uses thinking_budget. - if cfg.Tokens == 0 && reasoning.GeminiUsesThinkingLevel(model) { + if cfg.Tokens <= 0 && reasoning.GeminiUsesThinkingLevel(model) { if level := thinkingLevelForEffort(cfg.GetEffort(maxTokens)); level != "" { return &genai.ThinkingConfig{ThinkingLevel: level, IncludeThoughts: true}, nil } diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 3a7ee8d81..11c94ec7c 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1155,6 +1155,16 @@ func TestResolveThinkingConfig(t *testing.T) { assert.Equal(t, int32(2048), *got.ThinkingBudget) assert.Equal(t, genai.ThinkingLevel(""), got.ThinkingLevel) }) + + t.Run("a non-positive budget is no budget at all on gemini 3.x", func(t *testing.T) { + for _, tokens := range []int{-5, -1} { + got, err := resolveThinkingConfig("gemini-3.1-pro", &llms.ReasoningConfig{Effort: llms.ReasoningLow, Tokens: tokens}, 8192) + require.NoError(t, err) + require.NotNil(t, got) + assert.Nil(t, got.ThinkingBudget, "tokens=%d must not reach the deprecated control", tokens) + assert.Equal(t, genai.ThinkingLevelLow, got.ThinkingLevel) + } + }) } // TestProductionGeminiModels_ThinkingConfig locks the wire-level thinking From 06a62023faef1e3c95208e7a93734d1b3e63c8d2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:35:42 +0300 Subject: [PATCH 135/618] test(httprr): keep the Go toolchain out of the recording match key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Google SDK sends its own Go version in x-goog-api-client, as "gl-go/go1.26.5". The header normalizer scrubbed every version in that line except that one: its pattern accepted an optional "v" before the digits and nothing else, so the "go" prefix left the version intact and the recorded key pinned the exact patch release. The consequence was a package that passes or fails by toolchain rather than by code. Measured on the same tree: llms/googleai is green under go1.26.5 and reports 19 failures under go1.26.7, every one of them "cached HTTP response not found". No other cassette package is affected, because no other SDK puts the toolchain in a matched header. The pattern now consumes the "go" prefix too, and the 34 recordings that carried a raw version are rewritten to the value the normalizer produces — the same substitution, byte for byte, so the stored frame lengths stand. After the change both toolchains fail the same eight tests, the ones that need credentials. --- chains/testdata/TestLLMChainWithGoogleAI.httprr | 2 +- internal/httprr/normalization_test.go | 10 ++++++++++ internal/httprr/rr.go | 10 +++++++--- .../testdata/TestGoogleAIBatchEmbedding.httprr | 4 ++-- llms/googleai/testdata/TestGoogleAICall.httprr | 2 +- .../testdata/TestGoogleAICreateEmbedding.httprr | 2 +- .../googleai/testdata/TestGoogleAIErrorHandling.httprr | 2 +- .../testdata/TestGoogleAIGenerateContent.httprr | 2 +- ...tGoogleAIGenerateContentWithMultipleMessages.httprr | 2 +- ...TestGoogleAIGenerateContentWithSystemMessage.httprr | 2 +- .../testdata/TestGoogleAIMultiModalContent.httprr | 2 +- ...leAIStructuredOutput-array_schema_is_honored.httprr | 2 +- ...eAIStructuredOutput-object_schema_is_honored.httprr | 2 +- ...dOutput-streaming_object_schema_is_validated.httprr | 2 +- .../TestGoogleAIThinkingModels-non-streaming.httprr | 2 +- .../TestGoogleAIThinkingModels-streaming.httprr | 2 +- .../testdata/TestGoogleAIToolCallResponse.httprr | 4 ++-- .../testdata/TestGoogleAITruncationIsReported.httprr | 6 +++--- ...estGoogleAITruncationIsReportedWhenStreaming.httprr | 2 +- .../testdata/TestGoogleAIWithHarmThreshold.httprr | 2 +- llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr | 2 +- llms/googleai/testdata/TestGoogleAIWithOptions.httprr | 2 +- .../googleai/testdata/TestGoogleAIWithStreaming.httprr | 2 +- llms/googleai/testdata/TestGoogleAIWithTools.httprr | 2 +- .../testdata/TestGoogleAIWithToolsCustomType.httprr | 2 +- .../testdata/TestGoogleAI_ExplicitCaching.httprr | 4 ++-- .../testdata/TestGoogleAI_ImplicitCaching.httprr | 6 +++--- ...eAI_ImplicitCaching_ConversationContinuation.httprr | 6 +++--- ...itCaching_ConversationContinuation_Streaming.httprr | 6 +++--- .../TestGoogleAI_ImplicitCaching_Streaming.httprr | 6 +++--- ...tGoogleAI_ParallelFunctionCallsWithSignature.httprr | 4 ++-- ...ogleAI_SequentialFunctionCallsWithSignatures.httprr | 4 ++-- ...TestGoogleAI_SingleFunctionCallWithSignature.httprr | 4 ++-- .../TestGoogleAI_TextResponseWithSignature.httprr | 4 ++-- ...tGoogleAI_TextResponseWithSignatureStreaming.httprr | 4 ++-- .../TestSimilaritySearchWithDifferentDimensions.httprr | 2 +- 36 files changed, 69 insertions(+), 55 deletions(-) diff --git a/chains/testdata/TestLLMChainWithGoogleAI.httprr b/chains/testdata/TestLLMChainWithGoogleAI.httprr index 2db6185dc..856aeed02 100644 --- a/chains/testdata/TestLLMChainWithGoogleAI.httprr +++ b/chains/testdata/TestLLMChainWithGoogleAI.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 477 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.24.0 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is the capital of France"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/internal/httprr/normalization_test.go b/internal/httprr/normalization_test.go index 5b174afbc..5eba4ce6b 100644 --- a/internal/httprr/normalization_test.go +++ b/internal/httprr/normalization_test.go @@ -31,6 +31,16 @@ func TestNormalizeGoogleAPIClientHeader(t *testing.T) { input: "client/unknown sdk/latest rest/UNKNOWN", expected: "client/unknown sdk/latest rest/UNKNOWN", }, + { + name: "Go toolchain version carries a go prefix", + input: "google-genai-sdk/1.29.0 gl-go/go1.26.5", + expected: "google-genai-sdk/X.XX.X gl-go/goX.XX.X", + }, + { + name: "A newer patch of the same toolchain normalizes the same way", + input: "google-genai-sdk/1.29.0 gl-go/go1.26.7", + expected: "google-genai-sdk/X.XX.X gl-go/goX.XX.X", + }, } for _, tt := range tests { diff --git a/internal/httprr/rr.go b/internal/httprr/rr.go index a93d2c661..67c255743 100644 --- a/internal/httprr/rr.go +++ b/internal/httprr/rr.go @@ -1003,14 +1003,18 @@ func normalizeGoogleAPIClientHeader(header string) string { originalLen := len(header) // Replace each version segment while preserving its length - versionPattern := regexp.MustCompile(`(/v?)(\d+\.\d+(?:\.\d+)?)`) + versionPattern := regexp.MustCompile(`(/v?(?:go)?)(\d+\.\d+(?:\.\d+)?)`) normalized := versionPattern.ReplaceAllStringFunc(header, func(match string) string { - // Find the slash and optional 'v' slashIdx := strings.Index(match, "/") prefix := match[:slashIdx+1] - if strings.HasPrefix(match[slashIdx+1:], "v") { + rest := match[slashIdx+1:] + if strings.HasPrefix(rest, "v") { prefix += "v" + rest = rest[1:] + } + if strings.HasPrefix(rest, "go") { + prefix += "go" } // Calculate how many characters we need for the version part diff --git a/llms/googleai/testdata/TestGoogleAIBatchEmbedding.httprr b/llms/googleai/testdata/TestGoogleAIBatchEmbedding.httprr index 0bd321563..5796cfd3d 100644 --- a/llms/googleai/testdata/TestGoogleAIBatchEmbedding.httprr +++ b/llms/googleai/testdata/TestGoogleAIBatchEmbedding.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 9914 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"requests":[{"content":{"parts":[{"text":"test text a"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text b"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text c"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text d"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text e"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text f"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text g"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text h"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text i"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text j"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text k"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text l"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text m"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text n"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text o"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text p"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text q"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text r"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text s"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text t"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text u"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text v"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text w"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text x"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text y"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text z"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text a"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text b"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text c"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text d"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text e"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text f"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text g"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text h"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text i"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text j"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text k"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text l"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text m"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text n"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text o"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text p"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text q"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text r"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text s"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text t"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text u"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text v"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text w"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text x"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text y"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text z"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text a"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text b"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text c"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text d"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text e"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text f"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text g"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text h"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text i"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text j"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text k"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text l"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text m"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text n"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text o"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text p"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text q"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text r"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text s"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text t"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text u"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text v"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text w"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text x"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text y"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text z"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text a"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text b"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text c"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text d"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text e"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text f"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text g"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text h"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text i"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text j"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text k"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text l"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text m"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text n"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text o"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text p"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text q"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text r"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text s"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text t"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text u"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text v"}],"role":"user"},"model":"models/gemini-embedding-001"}]}HTTP/2.0 200 OK @@ -307632,7 +307632,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 509 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"requests":[{"content":{"parts":[{"text":"test text w"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text x"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text y"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text z"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"test text a"}],"role":"user"},"model":"models/gemini-embedding-001"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAICall.httprr b/llms/googleai/testdata/TestGoogleAICall.httprr index fe2830cc3..0b418e022 100644 --- a/llms/googleai/testdata/TestGoogleAICall.httprr +++ b/llms/googleai/testdata/TestGoogleAICall.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 463 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 2 + 2?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAICreateEmbedding.httprr b/llms/googleai/testdata/TestGoogleAICreateEmbedding.httprr index 87883f6e6..bd66a35f5 100644 --- a/llms/googleai/testdata/TestGoogleAICreateEmbedding.httprr +++ b/llms/googleai/testdata/TestGoogleAICreateEmbedding.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 313 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"requests":[{"content":{"parts":[{"text":"hello world"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"goodbye world"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"hello world"}],"role":"user"},"model":"models/gemini-embedding-001"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr b/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr index 6bc53a9c1..e34812f6a 100644 --- a/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr +++ b/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 455 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Hello"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]} diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr index 13a0f7ee4..7dcd660e7 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 479 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr index 56db72abf..291a1b20d 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 581 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"My name is Alice"}],"role":"user"},{"parts":[{"text":"Nice to meet you, Alice!"}],"role":"model"},{"parts":[{"text":"What's my name?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr index aab50b57a..434b4428d 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 597 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Tell me about the ocean"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"You are a helpful assistant that always responds in haiku format."}],"role":"system"}}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr b/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr index 0c92f7b3a..0bd4fadef 100644 --- a/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr +++ b/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 47545 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"What is in this image?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr index a0741d70e..cfb492128 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 641 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"List three primary colors."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"colors":{"items":{"type":"string"},"type":"array"}},"required":["colors"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr index d185e45f9..1890740b2 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 660 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr index 27112db7e..89defa276 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 659 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is the capital of Japan?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr b/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr index 817e1f890..c51f487b9 100644 --- a/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 594 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr b/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr index 0c5685061..ca33be0b7 100644 --- a/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 594 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr b/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr index cc6a61f6e..0e7d61e32 100644 --- a/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr +++ b/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 715 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK @@ -71,7 +71,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 1215 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"expression":"15 * 7"},"name":"calculate"},"thoughtSignature":"CtIBARFNMg9bLy4DsYEqPnNlA2GOfovJLcDUSfrqxZniZfiwLCyVkytZps9AKV3nMLR671S4l0WLCm7rJXxX2Sz0iB0te5OhnULyEkj0lvMH3qXaM7QXgaHYmnSe3+pwhcGHDZvcBAjKSrJcYzc01XVNnD8hC+4lt74upVT1cLI/8b4ttwwSENdUD7NGD6Gbtr8bx22+yQ+2T0PV4717BEvPCax42DK2WGR86ybVHZJ7SyCsf4oPAt8DrSLjJ6N7Y++gAKpzSeKQzyaMsE1P2z4Dmcir"}],"role":"model"},{"parts":[{"functionResponse":{"name":"calculate","response":{"response":"105"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr b/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr index 13fe18a4b..07dc6e049 100644 --- a/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr +++ b/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 486 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK @@ -58,7 +58,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 486 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK @@ -111,7 +111,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 488 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":4096,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr b/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr index 4b6274381..0a35c0a6f 100644 --- a/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 487 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr b/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr index 5cedfa2ff..3a848e5a8 100644 --- a/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 478 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Tell me about safety features"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr b/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr index c2739e765..891dd8380 100644 --- a/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 520 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"List three colors as a JSON array"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIWithOptions.httprr b/llms/googleai/testdata/TestGoogleAIWithOptions.httprr index b09d41f3c..0c5e82cbd 100644 --- a/llms/googleai/testdata/TestGoogleAIWithOptions.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithOptions.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 464 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Count from 1 to 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0.1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr b/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr index 5dbe26efd..f907f8abe 100644 --- a/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 482 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Tell me a short story about a cat"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIWithTools.httprr b/llms/googleai/testdata/TestGoogleAIWithTools.httprr index fd3c93cdd..37e63dce0 100644 --- a/llms/googleai/testdata/TestGoogleAIWithTools.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithTools.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 733 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr b/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr index 64e2bc8c0..8f78d7c1e 100644 --- a/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 733 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr b/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr index 0983b2dcc..6b0392526 100644 --- a/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 391646 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"displayName":"go-code-review-expert","model":"models/gemini-2.5-flash","systemInstruction":{"parts":[{"text":"You are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\nYou are an expert code reviewer with deep knowledge of Go best practices.\nYou should always consider the following aspects in your reviews:\n\n1. Performance: Analyze algorithmic complexity, memory usage, and potential bottlenecks.\n2. Security: Check for common vulnerabilities like SQL injection, XSS, buffer overflows.\n3. Maintainability: Evaluate code readability, documentation, and adherence to conventions.\n4. Testing: Assess test coverage and quality of test cases.\n5. Error handling: Verify proper error propagation and handling.\n6. Concurrency: Review goroutine usage, channel operations, and synchronization.\n7. Resource management: Check for proper cleanup of resources (files, connections, etc).\n8. API design: Evaluate interface design and package structure.\n\n"}],"role":"system"},"ttl":"300s"}HTTP/2.0 200 OK @@ -39,7 +39,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 577 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"cachedContent":"cachedContents/qiw69iqddo7e3hen30g3r994dnixycpzp7o1o6o6","contents":[{"parts":[{"text":"What are the key things to look for in a Go code review?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr index bb96f9b63..1b536b920 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 34515 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK @@ -58,7 +58,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 34515 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK @@ -118,7 +118,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 34515 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr index 58d97435e..00ba5f327 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 26094 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK @@ -58,7 +58,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 26298 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"},{"parts":[{"text":"10 + 5 = 15","thoughtSignature":"EjQKMgFyyNp8ID75oDI0URvpt5R3fPVQJceerosicdLUgSnViQBHFn0XHbkZKq9jwQUs09LH"}],"role":"model"},{"parts":[{"text":"Now multiply that by 2"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK @@ -118,7 +118,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 26514 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"},{"parts":[{"text":"10 + 5 = 15","thoughtSignature":"EjQKMgFyyNp8ID75oDI0URvpt5R3fPVQJceerosicdLUgSnViQBHFn0XHbkZKq9jwQUs09LH"}],"role":"model"},{"parts":[{"text":"Now multiply that by 2"}],"role":"user"},{"parts":[{"text":"15 multiplied by 2 is 30.","thoughtSignature":"EjQKMgFyyNp8DPszsMyf/CcCw1Q8PSgBItvFJ7DemE5sal29A4YQnGEdhqsBxjytf+RCiMhS"}],"role":"model"},{"parts":[{"text":"Now divide that by 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr index dd6aabddf..2f4bfb518 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 26099 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK @@ -33,7 +33,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 26302 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"},{"parts":[{"text":"8 + 7 = 15","thoughtSignature":"EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role":"model"},{"parts":[{"text":"Now multiply that by 3"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK @@ -61,7 +61,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 26504 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"},{"parts":[{"text":"8 + 7 = 15","thoughtSignature":"EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role":"model"},{"parts":[{"text":"Now multiply that by 3"}],"role":"user"},{"parts":[{"text":"15 * 3 = 45","thoughtSignature":"EjQKMgFyyNp8aIVmUSXaSockUWA0HZbRwPXK0oBkLZR5GCsw5A7LagoHdY8Z6RWmcKYALK1t"}],"role":"model"},{"parts":[{"text":"Now divide that by 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr index 21d48af81..8406a9642 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 35515 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK @@ -31,7 +31,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 35515 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK @@ -57,7 +57,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 35515 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr b/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr index ef18e0822..956685235 100644 --- a/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 753 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What's the temperature in Paris and London?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current temperature for a location","name":"get_temperature","parameters":{"properties":{"location":{"description":"The city name, e.g. Paris","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK @@ -77,7 +77,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 1360 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What's the temperature in Paris and London?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Paris"},"id":"pkjly1p7","name":"get_temperature"},"thoughtSignature":"ErwCCrkCARFNMg9mMORTMaw4mPhBdF3AK++rCjOH+n+QysYX1w47IEVhSBpnj/qrc50FEW82LTDU4YtPHnpC3SNFH4O9tT12zbhW32B0DsixxEAiIC3OkxXZ9lzOohuckzMCbGMMmAboW06tW+9RKhFpO89BKVIwNTVIdaK46wDQ7/+5o6IsEaKLUwgWCxNy6frMOzRMHZwhd1cb+lO4tWW2uv7euMHXrGfS0f6bv0maY1xHo2IaardO4YR2K9XYKB7YyKP0QyFvb70ToGPagCZ9ehQvUmXQItb22d1gMXDUMichOcsHiawiMxa1mpZI08Nx48vzuYkMtyb4iKy6fmd6cp1XOeD1ijSNdbOOxii6xfEp8Xen0cyaMPjwqHjb5y3xB6IkIIuwx3ezNjabj4o/Rc2tHD87deZ81H+Q8Q=="},{"functionCall":{"args":{"location":"London"},"id":"bnxwmmb1","name":"get_temperature"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"pkjly1p7","name":"get_temperature","response":{"response":"22°C"}}},{"functionResponse":{"id":"bnxwmmb1","name":"get_temperature","response":{"response":"22°C"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":512,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr b/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr index 8a200ab27..be67d7394 100644 --- a/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr +++ b/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 996 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"First get the number 10, then get the number 32, then add them together."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get a specific number","name":"get_number","parameters":{"properties":{"which":{"description":"Which number to get (first or second)","type":"STRING"}},"required":["which"],"type":"OBJECT"}},{"description":"Add two numbers together","name":"add_numbers","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK @@ -68,7 +68,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 2599 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"First get the number 10, then get the number 32, then add them together."}],"role":"user"},{"parts":[{"functionCall":{"args":{"which":"first"},"id":"sjtv17iq","name":"get_number"},"thoughtSignature":"EvcHCvQHARFNMg8CS384X5x2wGmq0N/mwEbUQuxnWWRXXwdOr2UmXzomX9rCmC2OcqUO3r/KcmC+1nwN5/39K+ijN64t7ooZiUkaHtI582aH9zk7Epry0OVcnpTBf4HLk5uk9Lk5pDs5l949QwWg3c2l/dtJSCBi7RjHev6BrWstPqP8CsDt9PIyQOWDrxy3+Hezs5yXeuKICGLyUylC15YGsPkJ8X+M100mkojK5GyEtdIoeQpAt/hwjF0y1ktPfU0jWRg84Or+Ex6Vnf1WQa9thOPgh5zC7a0+/oDzx/k3hTmw6CeHG3dlOGj9jZrRpmjAhzJFdGNzKIDVOdYFXM+PG+okP5GJHvBJx72R5owdSmGaEkqR+2V7Y/SS/GvnSE6mfyDVvQ4tNgebJSeP+OjojsL07MCwAFfoQSEFrQpIXMJw1t047JIXKDfTKM5qQUoKjaKuoX7JaP9RJ/OZONKpKA2iwKLxqE6Kok6h3Wda1mgzgagT6klwJDkE8k2iVWYgo0nb47PEqibdEO0ZtU2en+64cag0zULDfuT7r+w1clpSBljGsQieIBBzru+Phvm9/6iUDRwN1uaZrYld1WsWdMOlQp603sZ/RjW5RZ3biyAtnuR1dxOrk/vnPC8hKy60fZw4HgIgnQkhXSOOf3poeMnMToafAgnAkuJCzzh3JXaTWCzxebLB7B3kA+qwULwU8ZDVuBdhWfafB7rN+6WD4v3//XFCNy15n61TG0HPELOctKd13WCt2OqaDHRr9tIFjpV7L4kRcEtc0g52femhmB5lOo0K80XPkCxG/HQlPTuSKVODYyZ9/kW8Fe43041vEgxI4RkEn7myUzrWtFa0lvpkBwutEjZGKRh8+dffVhelaqhIBe6HktHrHdRmgkkadM+cOYMmIbUP/oy44zV2W94uPZ1Zh4OqegeCr35IAB89xGe57DkOAI3LB/cFcptpPWbrXoIQAZpsY3LRjo52Z7SR3QF+VcMQJTpWUbkJXXkhsDJDpZsytn8Xi1TfXhhk/Z7amMCHt5E0PbkujKdw8dCfRTw09DKI19lA54woBlasHnaKTNoDK6eZm2TuXV9Bnx4lKLRruvo9ku58DDyZg/QighNy3Blins9uBhvr5AMdMCT565WZqpRhE8hFRrAMPLSaVgY6BijrINTVf/K7Vmg9KZblcpRNFC6ZR/w/dhpOIqfBmUT7arBO9xF2uJHYQCcBFiXx2JxXKfwt9Ba+AA81PlFQoR4zsN7lvZBPWqrlwSeBAcAgLph8RBUmTpRvAqdUuxTn4ffxS6YadPXGEZfU6BH3oUfspxlSmI4rE+PgKoAfcf5uL+ujWYVPsMRsZOGUc/M8KQ=="}],"role":"model"},{"parts":[{"functionResponse":{"id":"sjtv17iq","name":"get_number","response":{"response":"10"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get a specific number","name":"get_number","parameters":{"properties":{"which":{"description":"Which number to get (first or second)","type":"STRING"}},"required":["which"],"type":"OBJECT"}},{"description":"Add two numbers together","name":"add_numbers","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr b/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr index 3e792cc60..2c81e4a13 100644 --- a/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr +++ b/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 767 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Use the multiply function to calculate 7 times 9"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Multiply two numbers together","name":"multiply","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK @@ -69,7 +69,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 1060 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Use the multiply function to calculate 7 times 9"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":7,"b":9},"id":"n5u72jdq","name":"multiply"},"thoughtSignature":"EvQBCvEBARFNMg+DspE09ruHIitzO7Rtj6iul3YH7KKQoEXyKfo7w8/KtUpPI1e21bLS4HXmejeLtRoHIXVdbNMws/7g0dM288dfRw9VeGqygB+ecVeBqKBvsS/V0TgoCDLQKN4jWA5VEY7g/04IpcwfaT9FX/knJtSwWzWI+ybxZ9HcdbeyrHGa2J8UVhdaWMPC0bN1+7xnlfFPv6YYN0eQpbZInobATWoCHDuPt5xcv/cXZZtckE99zJAf+RTvSr1sSJbFwQ6/t3MBNKyZQ48AZOarHbqcx9iw+wBWWrptT2o6/d/8Klx6KWBaYwK+TmVmDNEWdg=="}],"role":"model"},{"parts":[{"functionResponse":{"id":"n5u72jdq","name":"multiply","response":{"response":"63"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":512,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr index f13ac8070..1f8c1abb2 100644 --- a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr +++ b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 546 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 15 + 27? Think step by step."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":1,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1024},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK @@ -65,7 +65,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 3048 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"What is 15 + 27? Think step by step."}],"role":"user"},{"parts":[{"text":"To find the sum of **15 + 27**, we can break it down step by step:\n\n### Method 1: Adding by Place Value (Tens and Ones)\n1. **Break the numbers apart:**\n * 15 is **10 + 5**\n * 27 is **20 + 7**\n2. **Add the tens together:**\n * 10 + 20 = **30**\n3. **Add the ones together:**\n * 5 + 7 = **12**\n4. **Add the two results together:**\n * 30 + 12 = **42**\n\n---\n\n### Method 2: Column Addition (Carrying)\n1. **Add the ones column:** \n * 5 + 7 = **12**\n * Write down the **2** and carry the **1** to the tens column.\n2. **Add the tens column:** \n * 1 (carried) + 1 + 2 = **4**\n3. **Combine them:**\n * The result is **42**.\n\n**Final Answer:** 15 + 27 = **42**","thoughtSignature":"EoQKCoEKARFNMg+GIlHgyAx6VqYQbwvj4rpZlIzKvhRxrzJsIMoLxalgtxYPMpss/uW/wUgLIjFOw5K9IGKFOX9r0md0wVY2eix+dCBXd0CizY+zzoui5l5oeEfeJOOt7yTXmJ00pJxKKcVRYOTqa8PmXcCokLp7lkSbliKhsKjpG5vciZvsxHji9uf9+wFOezc+oqNeF6E8/Prq3HFJLrUble7JgXKc3DVKdS7ZKkaLniLZnQ0FsBWu8mNd7Vx9s6Bx1RFzIqJSTmp+9YJM1KsXy/8TgR7UP1pvCy/N2h3bg5NrEirMA+hJPtE5An23uEhMNWnDc034w9wCd1Ahpac2PIYS34P3SvtQcTUVDg6GSQKgRHSVQAtVFJd0+CQmN7caAVp1lVyekBeXT11CeHl+XOTTLN5oTqrvUARGLNNUcVZzBkiQ1DNHg8zi497f0uUN2bMAAJAvV2v5VYPEyv8CZH4dcXKAAtntifo6gtWDQT9Q+IDjMGytCeLZPVtYMm3G1erHzmahY2HUKN2cLFk7zDOdr6n9mQEVXk9iXbRWbPTM+2jPOIXVQf0cbLzTVXmPZ4lnhn3VqO84UBLqOGC4vw9Eupw+dYQYGnpAsNYAMCcDCxRCjUGTcdLzkPoKLnH2/oSV0aWJXf/d3xk2D/71eQnkcud6dgh0rk6H+FhHuF3AntMY5oRxkXTYNUf6P9CgA3sc6zptNvsaCIHi8MQlbyHN8HB5OKMfWFkwsZRDoX++UqGQ5aOrfiUwQy0Ghk8qU3oUpwDKzSAvKzeNmNnOlRW0X0KarW5rJPaBPhIwKM5g9gcfpdbjEWWMhphVQcGYIVWNPgv4sVDgICmfKppLS6ILorQIzjXY5dco/VQy1cJdSyqs6XEvMdlgWavITx2MLG6K/+5m2X5DKTNTHNyasOBWT+AFJkxo/0VRJTcWAWdQSfLCld8sFzZYERUoPTmkb3y21oFp62JtXj4mLMsyboBfIdf6vNln2hwT5d8FsrxzUDQ3NNft8bW0kRqATmKlr4IPdu7eea00ZKm6ix2F7Ybx83gGVBAJMh7GnwCHfmigoaxZAh3KtAvV0TGq7X1s8HXbUPIlF+7izOVziciL6w8dxTDyj7zOhA6aj9Jfq6tWBa7A/HvhFRYvRYOWm4WNMxxfLWanI4zgBI5vuouMQ4HGqAKUmM6un061X9oBPEWuLQh3W8BzB3EpC/07bd9wL1EHNTK5L1lK0MmxW/qGOwdjcRjwHYRNJGeqMQJUlN0NeLDF8C0PY7/t88q8iaeRki/axBZO7bEZW1dfTN5gckrB6XtR+S0L2owgp9z7ujyIcQTJ9u9Lsn4gOJrv+Gx53+jr/ng/FLnC2FOPu2kolmhItm/mMHI3KgbRMmEsnsyfVXkvQPk2dt+6REYQ/wqHIdYM3tK3fPwxjNkvLWA1clyykJCZiKXpQbFAO8VqktDbcX+ZQ1rBU6Cf0SGzh764lxR08O6AHxO09vm/U+SdceHJvVM2lvBHI32gvTEMvVEgGQgpAcVX1wNzu/FiX42n7afJBQGZ5cdouyUBdACkdH8f3OAN2X6CNrnh7cVPE0XMVv0jUZ6eGp6gMbmq/z0bkFIXqceQrGqmhSrzMIRllpq87FFCwd1mgQj9loDbBjmICC8NjB7jT1Hl2syuCqCntG5axWM7ITPBtao01wJV9cxhmEDoXuYrZZNnTxF+4aczsqde"}],"role":"model"},{"parts":[{"text":"Now multiply that result by 2"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr index f8d841306..0c0c056a7 100644 --- a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 544 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Calculate 23 * 17. Show your work."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":1,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1024},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK @@ -75,7 +75,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 3474 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"contents":[{"parts":[{"text":"Calculate 23 * 17. Show your work."}],"role":"user"},{"parts":[{"text":"To calculate **23 × 17**, here are three different ways to show the work:\n\n### Method 1: Standard Long Multiplication\n1. Multiply **23** by the ones digit (**7**):\n * $7 \\times 3 = 21$ (Write down 1, carry the 2)\n * $7 \\times 2 = 14$; $14 + 2 = 16$\n * Result: **161**\n2. Multiply **23** by the tens digit (**1**, which represents **10**):\n * Place a 0 in the ones column.\n * $1 \\times 3 = 3$\n * $1 \\times 2 = 2$\n * Result: **230**\n3. Add the two results together:\n * $161 + 230 = 391$\n\n**Answer: 391**\n\n***\n\n### Method 2: Difference of Squares (Mental Math shortcut)\nSince 23 and 17 are both 3 units away from 20, you can use the formula $(a + b)(a - b) = a^2 - b^2$.\n* $23 = 20 + 3$\n* $17 = 20 - 3$\n\nCalculation:\n* $(20 + 3)(20 - 3) = 20^2 - 3^2$\n* $400 - 9 = 391$\n\n**Answer: 391**\n\n***\n\n### Method 3: Distributive Property (Breaking it down)\nYou can break 17 into $10 + 7$:\n* $23 \\times 17 = 23 \\times (10 + 7)$\n* $23 \\times 10 = 230$\n* $23 \\times 7 = 161$ (calculated as $20 \\times 7 + 3 \\times 7$)\n* $230 + 161 = 391$\n\n**Answer: 391**","thoughtSignature":"EoUKCoIKARFNMg/3bEZtKzkMaobT/rC1/XTyfucSqgk+M/CTphd53T09dfD1YyioME/tYW65lASxDU45IconJ6ZA34nJnNc3gWn7KsLYYEWvBYBzkb7AnUOqogBenTQcQJzvEZqg7q66l+1swQ5iDmR44b8wQsTI4FGyvr3bOr92KjI+NELY0iIw7U2ulQRi/zWj7/xHg0wgREjFMTybuH/1vOiE12zTDyfhSmrJu3FtmjTH9BrJcFe7ZtXdp9yg2TnMKNfnuMBkDf65kANQg0CI1w6pjuPfqeaMHnVrhpqlUF9UDIoohsj0dQwgIw4TjgYAa72p8hZaR+KzJRnu1wai8tBavhjkMtjpvwINcCJ6ID0dWehJiSVbUvG98o6QEQsVW8JBXwdNk6KUss/u9u/9ExFqK8z92bHDIbol9VZEKhfZ2gND2tiD1bFG7zzworb+l5293ZF2NUk8qkVkNi8XNIPPvWCea5TXUzT2RFvUfA6k+n/Msf8moxRng/luK/BtNhwZfaZgfqj49Ul67FiB3iFZdSU9kFdP0uXVNgTicVRrBPauk0RYqqMRjCw74i0DNxS1yo1gH3/WZZKoA/yb8+49iTiBsfj4LaFJNGOz+3NOc108OH1i/DuSVtZHqyOiXzo04uMT0owqmaHzTr5KQeTrObIwVMySmO1NhkeJDb4riUp//REW8upRtD7slzXUd2AEHSdyrgNvFdM+/uesgPnpzW6oyWMFK08qh+5i+AKscmff+wiDLPUqb3RH0B//vQBr/62WQsYw1uwC5WCOgm8OSEyzCsm/IuZ7PS2aDdazopECtwcLi7XwmdtmhzRGj1EmzbbuuByMfXUBEmWlqTca/v9SOuV6TUYAlqsoyiTt80WbX8fgH7n8DQIRG7K4E/inEjmUxZ4jWNc1jlkFUN0+mfnKhVhd3UwMnJMOFQdJSmFiqZ9PsAoVajFYR0B0A7JCTsYOB9mSsPbG/qVYP2e0kCf5nU2OXfIdDWqYrX55rUT/oEdGapfxehgMJRgKT0O+n1AlYZblnLXr2RSiPg2SXOChy/x/XkK/RSUU3npM0JRtzhZez+0uxWpKNULvS1LvtPucNX8AhjUqBH7mqSFpPDclZ9OXALUV2FrnXN2IIf3vHxcCH2SAq1MJX1bgHmqVJMhMwajdNDPOwiVG7M5IzS5aSnP+K7QQRJXjtGu9FOUxvXpEjko+BgpEKVZzR8YvxHLxmg1NPrPtQ8Ot2t8xSD6115RUwCI7tn7hk0N5tMdB8ohwZU7NNBf3thVZ0KwI1NcenAjP0tXjeKd0SfGDKIcvnPVkglednxVaIYNUJo1ZMhxvX21dcHFrr4gWfULa/hUEW0qp6tKPu0h0q4ko76Vfl709y7kEEfjHogg3U2JRJNhzlZQQM0cNGfBem5p4ELrPY74rNMTtjaAwR8NuDqlWITXcy7Y9Ed3E2o36zKXP3uerMY57F+pJP1zUMM66LCt6psvN00KX02dDjZ5v3eCcSOrbjFM9reRLCqPcaNXXkBjvIsSJOIZsaPT9fbo9QXB0pH+6Jkd1a2eWcCuVy72gO+PWLd0rk9lCYsNZNH5RuJL7i7X67zoXZlZDt8HExKqFSXeo5oD4z8l312EoQ++KriZRBazQvRWVfc5iW0ZFlWbCtXQrhK90hkkdh590w35fB+XVrYClWyEYljUp6sneHgUDyb/36SMvhYYqdulCsA=="}],"role":"model"},{"parts":[{"text":"Now divide that result by 23"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK diff --git a/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr b/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr index 9684b8171..05bd83d95 100644 --- a/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr +++ b/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr @@ -5,7 +5,7 @@ Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr Content-Length: 109 Content-Type: application/json -X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/go1.26.5 +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key {"requests":[{"content":{"parts":[{"text":"Beijing"}],"role":"user"},"model":"models/gemini-embedding-001"}]}HTTP/2.0 200 OK From 736c62d56a7d14df938baa68533c8c81ae1010a4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:45:01 +0300 Subject: [PATCH 136/618] fix(bedrock): count the cached input in the standardized prompt total MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The primary anthropic door reports PromptTokens as input plus cache creation plus cache read; both Bedrock doors reported the bare input field, so the same conversation was billed one way and counted another. The vendor numbers settle which is right. Measured against Anthropic with a cached 3602-token system block: input_tokens stayed at 13 across both turns while cache_creation and then cache_read carried the 3602 — the input field excludes the cache. The recorded Bedrock responses show the same shape, and AWS's own totalTokens proves it from the other side: in every Converse recording totalTokens equals input + output + cacheRead + cacheWrite, never input + output. That left the Converse door contradicting itself — PromptTokens 6 plus CompletionTokens 27 against a TotalTokens of 1475. Both doors now add the cache into PromptTokens, so the three standardized fields reconcile, and the Converse door reconciles with the total AWS itself sent. The two caching tests replay real recordings and asserted nothing about usage; they now require the fields to add up and to exceed the cached count, which fails on each of the three ways to drop a term. --- llms/bedrock/bedrockllm_test.go | 33 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 6 +++- .../bedrockclient/provider_anthropic.go | 6 ++-- llms/bedrock/legacy_thinking_test.go | 24 ++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index fe4d93677..1d300d35a 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -2834,6 +2834,8 @@ func TestAmazonAutomaticCachingLegacyAPI(t *testing.T) { //nolint:funlen t.Logf("Turn 2 Response: %s", resp2.Choices[0].Content) + requireUsageAddsUp(t, resp2.Choices[0].GenerationInfo) + // Turn 3: Continue conversation - automatic caching should apply messages = append(messages, llms.MessageContent{ @@ -3007,6 +3009,8 @@ func TestAmazonAutomaticCachingConverseAPI(t *testing.T) { //nolint:funlen t.Logf("Turn 2 Response: %s", resp2.Choices[0].Content) + requireUsageAddsUp(t, resp2.Choices[0].GenerationInfo) + // Turn 3: Continue conversation - automatic caching should apply messages = append(messages, llms.MessageContent{ @@ -3201,3 +3205,32 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { t.Logf("Response: %s", resp) } + +func requireUsageAddsUp(t *testing.T, info map[string]any) { + t.Helper() + + prompt, ok := info["PromptTokens"].(int32) + if !ok { + t.Fatalf("PromptTokens missing or not int32: %#v", info["PromptTokens"]) + } + completion, ok := info["CompletionTokens"].(int32) + if !ok { + t.Fatalf("CompletionTokens missing or not int32: %#v", info["CompletionTokens"]) + } + cached, _ := info["CacheReadInputTokens"].(int32) + created, _ := info["CacheCreationInputTokens"].(int32) + if cached+created == 0 { + t.Fatalf("this recording carries no cache tokens, so it cannot show whether they are counted: %#v", info) + } + total, ok := info["TotalTokens"].(int32) + if !ok { + total = prompt + completion + } + if prompt+completion != total { + t.Errorf("PromptTokens(%d) + CompletionTokens(%d) = %d, but TotalTokens = %d;"+ + " cache read %d, cache creation %d", prompt, completion, prompt+completion, total, cached, created) + } + if prompt <= cached+created { + t.Errorf("PromptTokens(%d) does not count the cached input (read %d, created %d)", prompt, cached, created) + } +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index c7e6807a2..05bd6e896 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -900,9 +900,10 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver // Add usage information if response.Usage != nil { + var promptTokens int32 if response.Usage.InputTokens != nil { choice.GenerationInfo["input_tokens"] = *response.Usage.InputTokens - choice.GenerationInfo["PromptTokens"] = *response.Usage.InputTokens + promptTokens += *response.Usage.InputTokens } if response.Usage.OutputTokens != nil { choice.GenerationInfo["output_tokens"] = *response.Usage.OutputTokens @@ -917,11 +918,14 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver choice.GenerationInfo["cacheReadInputTokens"] = *response.Usage.CacheReadInputTokens choice.GenerationInfo["CacheReadInputTokens"] = *response.Usage.CacheReadInputTokens choice.GenerationInfo["PromptCachedTokens"] = *response.Usage.CacheReadInputTokens + promptTokens += *response.Usage.CacheReadInputTokens } if response.Usage.CacheWriteInputTokens != nil { choice.GenerationInfo["cacheWriteInputTokens"] = *response.Usage.CacheWriteInputTokens choice.GenerationInfo["CacheCreationInputTokens"] = *response.Usage.CacheWriteInputTokens + promptTokens += *response.Usage.CacheWriteInputTokens } + choice.GenerationInfo["PromptTokens"] = promptTokens } return &llms.ContentResponse{ diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 6a14646fa..53c950197 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -335,6 +335,8 @@ func createAnthropicCompletion(ctx context.Context, } // Create single choice with all content + promptTokens := output.Usage.InputTokens + + output.Usage.CacheCreationInputTokens + output.Usage.CacheReadInputTokens choice := &llms.ContentChoice{ Content: textContent, Reasoning: processReasoning(reasoningContent, signature), @@ -344,9 +346,9 @@ func createAnthropicCompletion(ctx context.Context, GenerationInfo: map[string]any{ "input_tokens": output.Usage.InputTokens, "output_tokens": output.Usage.OutputTokens, - "PromptTokens": output.Usage.InputTokens, + "PromptTokens": promptTokens, "CompletionTokens": output.Usage.OutputTokens, - "TotalTokens": output.Usage.InputTokens + output.Usage.OutputTokens, + "TotalTokens": promptTokens + output.Usage.OutputTokens, // Cache metrics "CacheReadInputTokens": output.Usage.CacheReadInputTokens, "CacheCreationInputTokens": output.Usage.CacheCreationInputTokens, diff --git a/llms/bedrock/legacy_thinking_test.go b/llms/bedrock/legacy_thinking_test.go index 9f23e96c5..019e7b90e 100644 --- a/llms/bedrock/legacy_thinking_test.go +++ b/llms/bedrock/legacy_thinking_test.go @@ -179,3 +179,27 @@ func TestLegacyStreamKeepsASignatureOnlyThinkingBlock(t *testing.T) { "a thinking block that arrived as a signature alone must survive, as it does off the stream") assert.Equal(t, "sig-only", string(choice.Reasoning.Signature)) } + +func TestLegacyPromptTokensCountTheCachedInput(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":13,"output_tokens":4,` + + `"cache_creation_input_tokens":300,"cache_read_input_tokens":3602}}` + + llm, _ := legacyLLMCapturing(t, resp, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + got, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + require.Len(t, got.Choices, 1) + + info := got.Choices[0].GenerationInfo + assert.Equal(t, int32(13), info["input_tokens"], + "the vendor's own field reports the uncached input alone") + assert.Equal(t, int32(3915), info["PromptTokens"], + "the standardized field must count the cached input the request was billed for") + assert.Equal(t, int32(3919), info["TotalTokens"]) +} From 13e6185f8cdf2572b982fcbdbec4797a14f9e718 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:48:21 +0300 Subject: [PATCH 137/618] fix(vertex): let an explicit additionalProperties boolean say what its absence says MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The converter accepted additionalProperties:false and refused true, so a schema written with the JSON Schema default spelled out was rejected while the byte-for-byte equivalent without the key went through. Schema generators emit the explicit form, and no door but this one minds. The reasoning behind the refusal was inverted. Vertex object schemas carry no field for additionalProperties either way, so false — an actual constraint — is already dropped and left to the local validation of the response against the original schema. true constrains nothing at all, so dropping it cannot lose anything. A schema value is the one form that states something neither step can carry, and it stays refused. The table pinned the old refusal; it now pins all three boolean forms as accepted and the schema value as refused, and each direction has a mutation that turns it red. --- llms/googleai/vertex/structured_output.go | 9 ++---- .../googleai/vertex/structured_output_test.go | 29 +++++++++++++++---- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go index 9650adcdd..1e516572f 100644 --- a/llms/googleai/vertex/structured_output.go +++ b/llms/googleai/vertex/structured_output.go @@ -150,14 +150,9 @@ func convertVertexNode(node map[string]any) (*genai.Schema, error) { //nolint:fu schema.Pattern = s } - // additionalProperties: only the strict `false` is accepted. Vertex object - // schemas have no field for it, but dropping `false` does not loosen the - // effective guarantee — the final response is validated against the original - // schema locally. Any schema value (or `true`) IS a meaningful loosening, so it - // is rejected instead of silently ignored. if ap, ok := node["additionalProperties"]; ok { - if b, isBool := ap.(bool); !isBool || b { - return nil, unsupportedVertexSchema("additionalProperties must be false; a schema or true is not representable") + if _, isBool := ap.(bool); !isBool { + return nil, unsupportedVertexSchema("a schema-valued additionalProperties is not representable") } } diff --git a/llms/googleai/vertex/structured_output_test.go b/llms/googleai/vertex/structured_output_test.go index 88e1a48ec..78ee65d1d 100644 --- a/llms/googleai/vertex/structured_output_test.go +++ b/llms/googleai/vertex/structured_output_test.go @@ -154,12 +154,12 @@ func TestConvertJSONSchemaToVertex(t *testing.T) { //nolint:funlen // table-driv }) unrepresentable := map[string]string{ - "$ref": `{"$ref":"#/x"}`, - "anyOf": `{"anyOf":[{"type":"string"}]}`, - "oneOf": `{"oneOf":[{"type":"string"}]}`, - "const": `{"const":"x"}`, - "additionalProperties true": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":true}`, - "union type": `{"type":["string","number"]}`, + "$ref": `{"$ref":"#/x"}`, + "anyOf": `{"anyOf":[{"type":"string"}]}`, + "oneOf": `{"oneOf":[{"type":"string"}]}`, + "const": `{"const":"x"}`, + "schema-valued additionalProperties": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":{"type":"string"}}`, + "union type": `{"type":["string","number"]}`, } for name, raw := range unrepresentable { t.Run("rejects "+name, func(t *testing.T) { @@ -171,6 +171,23 @@ func TestConvertJSONSchemaToVertex(t *testing.T) { //nolint:funlen // table-driv } }) } + + for name, raw := range map[string]string{ + "absent": `{"type":"object","properties":{"a":{"type":"string"}}}`, + "additionalProperties false": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":false}`, + "additionalProperties true": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":true}`, + } { + t.Run("accepts "+name, func(t *testing.T) { + t.Parallel() + got, err := convertJSONSchemaToVertex(json.RawMessage(raw)) + if err != nil { + t.Fatalf("an explicit boolean says no more than its absence does: %v", err) + } + if got == nil { + t.Fatal("want a schema") + } + }) + } } func TestApplyVertexResponseFormat(t *testing.T) { From e41d1f57c8e51612b9b1a1a37769c5cde5281841 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:48:39 +0300 Subject: [PATCH 138/618] ci: drop the docs preview comment that no run can reach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The workflow triggers on workflow_dispatch and on a push to main-vxcontrol, so github.event_name is never 'pull_request' and the step's condition never holds. Its second half could not hold either: on a pull_request event github.ref is refs/pull/N/merge, not refs/heads/docs/*. Manual dispatch on a docs/* branch still deploys a preview — that step's own condition admits those refs — it just never announced itself. --- .github/workflows/publish-docs.yaml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/.github/workflows/publish-docs.yaml b/.github/workflows/publish-docs.yaml index b0d08a803..afc1d80ed 100644 --- a/.github/workflows/publish-docs.yaml +++ b/.github/workflows/publish-docs.yaml @@ -74,19 +74,3 @@ jobs: artifact_name: github-pages preview: ${{ github.ref != 'refs/heads/main-vxcontrol' }} - - name: Comment PR - if: | - github.event_name == 'pull_request' && - (github.ref == 'refs/heads/docs-test' || - startsWith(github.ref, 'refs/heads/docs/')) - uses: actions/github-script@v7 - with: - script: | - const url = '${{ steps.deployment.outputs.page_url }}'; - const message = `📚 Documentation preview available at: ${url}`; - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: message - }); From 59ba0c6f1a569bda49b5c7bf4b536eb8c36cbfab Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 16:51:38 +0300 Subject: [PATCH 139/618] fix(anthropic): keep the cached input on the refusal error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A refusal returns a typed error in place of the response, so whatever the error does not carry is gone. It carried input and output tokens only, while a refused request is billed for its cache reads and writes like any other — and the vendor reports those separately from input_tokens, as a cached 3602-token prompt shows: input_tokens stays at 13 across both turns. A caller billing from the error therefore under-counted the prompt by the whole cached part. The error now carries the two cache counts as well, so the prompt total is recoverable, and the test requires the three to add up. --- llms/anthropic/anthropic_test.go | 14 ++++++++++++++ llms/anthropic/anthropicllm.go | 25 +++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/llms/anthropic/anthropic_test.go b/llms/anthropic/anthropic_test.go index 19c44fbde..696356f36 100644 --- a/llms/anthropic/anthropic_test.go +++ b/llms/anthropic/anthropic_test.go @@ -60,6 +60,20 @@ func TestAnthropic_Refusal(t *testing.T) { assert.Equal(t, 7, refusal.OutputTokens, "billed output tokens must be preserved") }) + t.Run("refusal carries the cached input it was billed for", func(t *testing.T) { + t.Parallel() + _, err := generateAgainst(t, `{"id":"m","type":"message","role":"assistant","model":"claude-fable-5",`+ + `"content":[],"stop_reason":"refusal",`+ + `"usage":{"input_tokens":13,"output_tokens":4,`+ + `"cache_creation_input_tokens":300,"cache_read_input_tokens":3602}}`) + var refusal *anthropic.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, 300, refusal.CacheCreationInputTokens) + assert.Equal(t, 3602, refusal.CacheReadInputTokens) + assert.Equal(t, 3915, refusal.InputTokens+refusal.CacheCreationInputTokens+refusal.CacheReadInputTokens, + "the whole prompt must be recoverable from the error") + }) + t.Run("empty refusal is a refusal, not an empty response", func(t *testing.T) { t.Parallel() _, err := generateAgainst(t, `{"id":"m","type":"message","role":"assistant","model":"claude-fable-5",`+ diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 40e10e58e..54929eb71 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -34,14 +34,17 @@ var ( // stop_reason "refusal"), e.g. a creative model such as Claude Fable 5 hitting a // content boundary. It is distinct from an empty or failed response; any refusal // text the model returned is in Message. Category and Explanation carry the API's -// stop_details so callers can pick a fallback by classifier; InputTokens and -// OutputTokens preserve billed usage (a refusal is still billed for what ran). +// stop_details so callers can pick a fallback by classifier. InputTokens counts +// only the uncached input: the whole billed prompt is the sum of the three input +// counts. type ErrModelRefusal struct { - Message string - Category string - Explanation string - InputTokens int - OutputTokens int + Message string + Category string + Explanation string + InputTokens int + OutputTokens int + CacheCreationInputTokens int + CacheReadInputTokens int } func (e *ErrModelRefusal) Error() string { @@ -351,9 +354,11 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // model declined" from "no response" (an empty refusal would otherwise look empty). if result.StopReason == "refusal" { refusal := &ErrModelRefusal{ - Message: anthropicTextContent(result.Content), - InputTokens: result.Usage.InputTokens, - OutputTokens: result.Usage.OutputTokens, + Message: anthropicTextContent(result.Content), + InputTokens: result.Usage.InputTokens, + OutputTokens: result.Usage.OutputTokens, + CacheCreationInputTokens: result.Usage.CacheCreationInputTokens, + CacheReadInputTokens: result.Usage.CacheReadInputTokens, } if result.StopDetails != nil { refusal.Category = result.StopDetails.Category From e150aeb85842d53889561259dc67b8268a77f194 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 17:47:35 +0300 Subject: [PATCH 140/618] fix(reasoning): resolve every spelling of a model to one entry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nine places normalized a model reference, each covering a different subset of the rules: some stripped a routing path, some also stripped the platform prefix, one lowercased and nothing more. Across fifteen live spellings of five models, three disagreed with their canonical form: azure.gpt-5.4 unclassified, because the OpenAI table stripped a slash but not a platform prefix us.deepseek.r1-v1:0 not a reasoning model, and deepseek.r1-v1:0 neither — both are the library's own exported constants ModelDeepSeekR1V1 and ModelDeepSeekV32 The two defects pull opposite ways. Dropping the vendor segment, which is what the tree does, loses DeepSeek: its Bedrock id names the model "r1" and leaves the family to the vendor. Joining the vendor with a dash finds DeepSeek and loses everyone else — measured over all 43 Bedrock constants, joining changes 15 answers, of which 13 are losses: every us.anthropic.claude-* stops matching its prefix rule, and so do openai.gpt-oss-* and zai.glm-*. So neither string is the canonical one. The predicates now consult both, bare first, and a rule matches if any form matches. The union only ever turns a non-match into a match, and the bare form is what the tables already received, so nothing that resolved correctly can stop resolving: over the same 43 constants the bare form disagrees with today's answer zero times. The fifteen-spelling matrix goes from three disagreements to none, and no test in the tree noticed the DeepSeek names were wrong — the new table is what notices. A reference that is only separators yields no form at all, rather than the empty string that every substring rule would match. --- llms/reasoning/detect_hint.go | 11 +++-- llms/reasoning/name.go | 34 +++++++++++++ llms/reasoning/name_forms_test.go | 74 +++++++++++++++++++++++++++++ llms/reasoning/off.go | 13 ++--- llms/reasoning/openai_capability.go | 23 +++++---- llms/reasoning/reasoning.go | 24 +++++----- 6 files changed, 148 insertions(+), 31 deletions(-) create mode 100644 llms/reasoning/name.go create mode 100644 llms/reasoning/name_forms_test.go diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index f19148adf..e0c0c919d 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -12,12 +12,15 @@ func LikelyReasoningModel(model string) bool { return true } - m := strings.ToLower(model) - if idx := strings.LastIndex(m, "/"); idx != -1 { - m = m[idx+1:] + for _, form := range modelSpellings(model) { + if likelyReasoningFamily(form) { + return true + } } - m = stripPlatformPrefix(m) + return false +} +func likelyReasoningFamily(m string) bool { if namesNonTextModality(m) { return false } diff --git a/llms/reasoning/name.go b/llms/reasoning/name.go new file mode 100644 index 000000000..dab94a5ea --- /dev/null +++ b/llms/reasoning/name.go @@ -0,0 +1,34 @@ +package reasoning + +import "strings" + +// modelSpellings returns the forms a capability rule may match against. Every form +// added here widens the rules that read it, so a new one must never let a rule match +// a model the bare name would not. +func modelSpellings(model string) []string { + m := strings.ToLower(model) + if idx := strings.LastIndex(m, "/"); idx != -1 { + m = m[idx+1:] + } + + vendor, bare := splitPlatformPrefix(m) + switch { + case bare == "": + return nil + case vendor == "": + return []string{bare} + default: + return []string{bare, vendor + "-" + bare} + } +} + +func splitPlatformPrefix(model string) (vendor, rest string) { + rest = model + for { + idx := strings.Index(rest, ".") + if idx <= 0 || !isAlpha(rest[:idx]) { + return vendor, rest + } + vendor, rest = rest[:idx], rest[idx+1:] + } +} diff --git a/llms/reasoning/name_forms_test.go b/llms/reasoning/name_forms_test.go new file mode 100644 index 000000000..0cf8eb93b --- /dev/null +++ b/llms/reasoning/name_forms_test.go @@ -0,0 +1,74 @@ +package reasoning + +import ( + "fmt" + "testing" +) + +func capabilityAnswers(model string) string { + caps := OpenAIReasoningCapsFor(model) + return fmt.Sprintf( + "reasoning=%v likely=%v claude=%d openaiKnown=%v openaiEfforts=%v openaiTemp=%v gemini=%v optIn=%v off=%v", + IsReasoningModel(model), LikelyReasoningModel(model), ClaudeReasoningKindFor(model), + caps.Known, caps.Efforts, OpenAIAcceptsCustomTemperature(model), + GeminiSupportsThinking(model), ThinkingOptIn(model), + ResolveOff(model, ProviderUnknown)) +} + +func TestEverySpellingResolvesToOneEntry(t *testing.T) { + t.Parallel() + + for _, group := range [][]string{ + { + "claude-sonnet-4-5", + "claude-sonnet-4.5", + "anthropic/claude-sonnet-4-5", + "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + "claude-sonnet-4-5@20250929", + "claude-sonnet-4-5-20250929", + "projects/p/locations/l/publishers/anthropic/models/claude-sonnet-4-5", + }, + {"gpt-5.4", "openai/gpt-5.4", "GPT-5.4", "azure.gpt-5.4"}, + {"o3", "openai/o3", "O3"}, + {"gpt-oss-120b", "openai.gpt-oss-120b-1:0", "openai/gpt-oss-120b"}, + { + "gemini-2.5-flash", + "google/gemini-2.5-flash", + "projects/p/locations/l/publishers/google/models/gemini-2.5-flash", + }, + {"deepseek-r1", "deepseek.r1-v1:0", "us.deepseek.r1-v1:0"}, + {"deepseek-v3.2", "deepseek.v3.2", "us.deepseek.v3.2"}, + {"glm-4.7", "zai.glm-4.7"}, + {"minimax-m2", "minimax.minimax-m2"}, + {"kimi-k2-thinking", "moonshot.kimi-k2-thinking"}, + {"mistral-medium-3", "mistralai/mistral-medium-3"}, + } { + canonical := group[0] + want := capabilityAnswers(canonical) + + for _, form := range group[1:] { + t.Run(form, func(t *testing.T) { + t.Parallel() + if got := capabilityAnswers(form); got != want { + t.Errorf("a spelling of %s must resolve to the same entry\n canonical: %s\n form: %s", + canonical, want, got) + } + }) + } + } +} + +func TestASeparatorOnlyReferenceMatchesNothing(t *testing.T) { + t.Parallel() + + for _, model := range []string{"us.", "us.anthropic.", "azure.", "openai/", ""} { + for _, form := range modelSpellings(model) { + if form == "" { + t.Errorf("modelSpellings(%q) yields an empty form, which every substring rule matches", model) + } + } + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true: a reference with no model name cannot be a reasoning model", model) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index b066529a5..a83962b0a 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -106,11 +106,12 @@ func isClaudeModel(model string) bool { // hard-disabled (their effort floor is minimal/low). GPT-5.x and unknowns are // treated as disablable and left to the API to reject if wrong. func openAIMandatoryReasoning(model string) bool { - m := strings.ToLower(model) - if idx := strings.LastIndex(m, "/"); idx != -1 { - m = m[idx+1:] + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "o1") || + strings.HasPrefix(form, "o3") || + strings.HasPrefix(form, "o4-mini") { + return true + } } - return strings.HasPrefix(m, "o1") || - strings.HasPrefix(m, "o3") || - strings.HasPrefix(m, "o4-mini") + return false } diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index b01bb7164..3ecd1a2d8 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -59,10 +59,15 @@ func (c OpenAIReasoningCaps) ClampEffort(effort string) string { // generations (including newer ones) returns Known=false so the caller stays // optimistic and the API arbitrates. func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { - m := strings.ToLower(model) - if idx := strings.LastIndex(m, "/"); idx != -1 { - m = m[idx+1:] // strip a proxy prefix such as "openai/" + for _, form := range modelSpellings(model) { + if caps := openAICapsForForm(form); caps.Known { + return caps + } } + return OpenAIReasoningCaps{Known: false} +} + +func openAICapsForForm(m string) OpenAIReasoningCaps { if strings.Contains(m, "-chat-latest") { return OpenAIReasoningCaps{Known: false} } @@ -108,13 +113,11 @@ const OpenAIDisableEffort = "none" // temperature other than the default, so the caller's value is not overwritten // on a model that honors it. func OpenAIAcceptsCustomTemperature(model string) bool { - m := strings.ToLower(model) - if idx := strings.LastIndex(m, "/"); idx != -1 { - m = m[idx+1:] - } - for _, prefix := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { - if strings.HasPrefix(m, prefix) { - return true + for _, form := range modelSpellings(model) { + for _, prefix := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { + if strings.HasPrefix(form, prefix) { + return true + } } } return false diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index c64e15520..cd5233696 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -172,15 +172,16 @@ func IsReasoningModel(model string) bool { // DefaultIsReasoningModel provides the default reasoning model detection logic. // This can be used by LLM implementations that want to extend rather than replace // the default detection logic. -func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat catalog of model-family prefix checks; splitting hurts readability - modelLower := strings.ToLower(model) - - // Remove provider prefix if present (e.g., "openai/", "anthropic/", "google/") - if idx := strings.LastIndex(modelLower, "/"); idx != -1 { - modelLower = modelLower[idx+1:] +func DefaultIsReasoningModel(model string) bool { + for _, form := range modelSpellings(model) { + if namesReasoningModel(form) { + return true + } } - modelLower = stripPlatformPrefix(modelLower) + return false +} +func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat catalog of model-family prefix checks; splitting hurts readability if strings.Contains(modelLower, "-chat-latest") { return false } @@ -318,10 +319,11 @@ func DefaultIsReasoningModel(model string) bool { //nolint:funlen // a flat cata // ThinkingOptIn reports whether the model reasons only when a request asks it to. func ThinkingOptIn(model string) bool { - m := stripPlatformPrefix(baseModelName(model)) - for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3"} { - if strings.HasPrefix(m, prefix) { - return true + for _, form := range modelSpellings(model) { + for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3"} { + if strings.HasPrefix(form, prefix) { + return true + } } } return false From 92b90bfe94c2060ccb7827aad37e28879e0719bf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 18:13:19 +0300 Subject: [PATCH 141/618] fix(reasoning): read an OpenAI generation as a version, not a prefix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The capability table matched a generation with a bare prefix, so a later generation whose name extends an earlier one inherited its answer: gpt-5.10 resolved as gpt-5.1 and gpt-5.20 as gpt-5.2, each collecting the wrong effort set and the wrong disable flag, and gpt-51 answered as gpt-5. The Gemini table already refuses this with a digit boundary; the OpenAI one did not. Matching now stops at that same boundary. A date is the exception and is kept on a plain prefix: the digits after gpt-5-20 are a snapshot, not a generation, which the existing gpt-5-2025-08-07 case caught the moment the boundary was applied there. The classified generations are unaffected, and that is not an assumption — each was put to the vendor by asking for an invalid effort, which answers with the accepted set without running inference: gpt-5, -mini, -nano minimal, low, medium, high gpt-5.1 none, low, medium, high gpt-5.2, 5.4, 5.4-mini, 5.5, 5.6-terra none, low, medium, high, xhigh o1, o3, o4-mini low, medium, high, xhigh Every row agrees with the table, including the o-series xhigh, and CanDisable follows exactly where none appears. The catalog that only asks whether a model reasons at all keeps its permissive prefixes: a future o10 should still count. --- llms/reasoning/name.go | 10 ++++++++ llms/reasoning/off.go | 6 ++--- llms/reasoning/openai_capability.go | 14 +++++------ llms/reasoning/openai_capability_test.go | 32 ++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 10 deletions(-) diff --git a/llms/reasoning/name.go b/llms/reasoning/name.go index dab94a5ea..68a83d652 100644 --- a/llms/reasoning/name.go +++ b/llms/reasoning/name.go @@ -32,3 +32,13 @@ func splitPlatformPrefix(model string) (vendor, rest string) { vendor, rest = rest[:idx], rest[idx+1:] } } + +// hasGeneration rejects a trailing digit, so it must not be used where the digits +// that follow are a date rather than a later generation. +func hasGeneration(model, generation string) bool { + rest, ok := strings.CutPrefix(model, generation) + if !ok { + return false + } + return rest == "" || rest[0] < '0' || rest[0] > '9' +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index a83962b0a..3dc1927bc 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -107,9 +107,9 @@ func isClaudeModel(model string) bool { // treated as disablable and left to the API to reject if wrong. func openAIMandatoryReasoning(model string) bool { for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "o1") || - strings.HasPrefix(form, "o3") || - strings.HasPrefix(form, "o4-mini") { + if hasGeneration(form, "o1") || + hasGeneration(form, "o3") || + hasGeneration(form, "o4-mini") { return true } } diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 3ecd1a2d8..482b542db 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -78,7 +78,7 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} case openAIGPT5Base(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"minimal", "low", "medium", "high"}} - case strings.HasPrefix(m, "gpt-5.1"): + case hasGeneration(m, "gpt-5.1"): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high"}} case openAIXHighCeiling(m): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} @@ -88,17 +88,17 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { } func openAIProVariant(m string) bool { - return strings.HasPrefix(m, "gpt-5") && strings.Contains(m, "-pro") + return hasGeneration(m, "gpt-5") && strings.Contains(m, "-pro") } func openAIGPT5Base(m string) bool { return m == "gpt-5" || strings.HasPrefix(m, "gpt-5-20") || - strings.HasPrefix(m, "gpt-5-mini") || strings.HasPrefix(m, "gpt-5-nano") + hasGeneration(m, "gpt-5-mini") || hasGeneration(m, "gpt-5-nano") } func openAIXHighCeiling(m string) bool { - for _, prefix := range []string{"gpt-5.2", "gpt-5.4", "gpt-5.5", "gpt-5.6"} { - if strings.HasPrefix(m, prefix) { + for _, generation := range []string{"gpt-5.2", "gpt-5.4", "gpt-5.5", "gpt-5.6"} { + if hasGeneration(m, generation) { return true } } @@ -114,8 +114,8 @@ const OpenAIDisableEffort = "none" // on a model that honors it. func OpenAIAcceptsCustomTemperature(model string) bool { for _, form := range modelSpellings(model) { - for _, prefix := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { - if strings.HasPrefix(form, prefix) { + for _, generation := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { + if hasGeneration(form, generation) { return true } } diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index 27341cab2..eb1e10d93 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -122,3 +122,35 @@ func TestClampEffortMovesToAnAcceptedLevel(t *testing.T) { } } } + +func TestAGenerationDoesNotAnswerForALaterOne(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + known bool + why string + }{ + {"gpt-5.1", true, "the generation itself"}, + {"gpt-5.10", false, "a later generation whose name extends gpt-5.1"}, + {"gpt-5.2", true, "the generation itself"}, + {"gpt-5.20", false, "a later generation whose name extends gpt-5.2"}, + {"gpt-5", true, "the generation itself"}, + {"gpt-51", false, "a name that merely starts with gpt-5"}, + {"o1", true, "the generation itself"}, + {"o10", false, "a later generation whose name extends o1"}, + {"o3", true, "the generation itself"}, + {"o30", false, "a later generation whose name extends o3"}, + {"gpt-5-2025-08-07", true, "a dated snapshot: the digits after gpt-5-20 are a date, not a generation"}, + {"gpt-5-mini-2025-08-07", true, "a dated snapshot of a named variant"}, + {"o4-mini-2025-04-16", true, "a dated snapshot of the o-series"}, + } { + t.Run(tc.model, func(t *testing.T) { + t.Parallel() + if got := OpenAIReasoningCapsFor(tc.model).Known; got != tc.known { + t.Errorf("OpenAIReasoningCapsFor(%q).Known = %v, want %v — %s", + tc.model, got, tc.known, tc.why) + } + }) + } +} From 68e309ea6c2e1a423938805edd104d7a470740eb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 25 Aug 2026 18:54:09 +0300 Subject: [PATCH 142/618] fix(reasoning): advertise only the efforts a model actually takes Two hint rows promised levels the vendor refuses, both caught by sweeping the tables against live capability data. ClaudeEffortsFor keyed the set off the reasoning kind alone, so every budget-only model advertised [low medium high]. The vendor's own capability tree says effort is supported on opus-4-5 and not on sonnet-4-5 or haiku-4-5, and the wire agrees: output_config.effort on either of the latter returns "This model does not support the effort parameter". The set is now gated on the same list the wire path already consults, so the two cannot disagree. The OpenAI pro row pinned every gpt-5*-pro to [high]. Measured on the responses endpoint, where these models actually live, each refusal names the model and its own vocabulary: gpt-5-pro takes high alone, while gpt-5.2-pro, gpt-5.4-pro and gpt-5.5-pro take medium, high and xhigh. The pro variants of the xhigh generations now carry that triple; none of them gains "none", so the disable flag stays false. One existing test pinned the old pro row as truth and went red the moment the row was corrected; its table now carries the measured sets. --- llms/reasoning/claude_capability.go | 6 +++++- llms/reasoning/claude_capability_test.go | 2 ++ llms/reasoning/claude_name_forms_test.go | 21 ++++++++++++++++----- llms/reasoning/openai_capability.go | 3 +++ llms/reasoning/openai_capability_test.go | 3 +++ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 021a95256..3be7f891a 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -112,7 +112,11 @@ var claudeEffortsByKind = map[ClaudeReasoningKind][]string{ // ClaudeEffortsFor returns the effort levels the model's generation accepts, or // nil for a model this package does not classify. func ClaudeEffortsFor(model string) []string { - return slices.Clone(claudeEffortsByKind[ClaudeReasoningKindFor(model)]) + kind := ClaudeReasoningKindFor(model) + if kind == ClaudeReasoningBudgetOnly && !containsAny(canonicalClaude(model), budgetEffortClaude) { + return nil + } + return slices.Clone(claudeEffortsByKind[kind]) } var claudeEffortRank = map[string]int{"low": 1, "medium": 2, "high": 3, "xhigh": 4, "max": 5} diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index fb90e67e9..838d8f4d2 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -62,6 +62,8 @@ func TestClaudeEffortsFor(t *testing.T) { {"claude-sonnet-4-6", []string{"low", "medium", "high", "max"}}, {"claude-mythos-preview", []string{"low", "medium", "high", "max"}}, {"claude-opus-4-5-20251101", []string{"low", "medium", "high"}}, + {"claude-sonnet-4-5-20250929", nil}, + {"us.anthropic.claude-haiku-4-5-20251001-v1:0", nil}, {"gpt-5.5", nil}, } for _, tc := range cases { diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index cf7274c54..4e57396a7 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -1,6 +1,9 @@ package reasoning -import "testing" +import ( + "slices" + "testing" +) func TestClaudePredicatesAgreeAcrossNameForms(t *testing.T) { t.Parallel() @@ -106,10 +109,18 @@ func TestStripPlatformPrefixLeavesVersionsAlone(t *testing.T) { func TestOpenAISuffixVariantsDoNotInheritTheBaseRules(t *testing.T) { t.Parallel() - for _, model := range []string{"gpt-5-pro", "gpt-5.1-pro", "gpt-5.2-pro", "gpt-5.4-pro"} { - caps := OpenAIReasoningCapsFor(model) - if !caps.Known || caps.CanDisable || len(caps.Efforts) != 1 || caps.Efforts[0] != "high" { - t.Errorf("%s: want the Pro caps (high only, not disablable), got %+v", model, caps) + for _, tc := range []struct { + model string + efforts []string + }{ + {"gpt-5-pro", []string{"high"}}, + {"gpt-5.1-pro", []string{"high"}}, + {"gpt-5.2-pro", []string{"medium", "high", "xhigh"}}, + {"gpt-5.4-pro", []string{"medium", "high", "xhigh"}}, + } { + caps := OpenAIReasoningCapsFor(tc.model) + if !caps.Known || caps.CanDisable || !slices.Equal(caps.Efforts, tc.efforts) { + t.Errorf("%s: want the Pro caps (%v, not disablable), got %+v", tc.model, tc.efforts, caps) } } diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 482b542db..a164394a9 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -73,6 +73,9 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { } switch { case openAIProVariant(m): + if openAIXHighCeiling(m) { + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"medium", "high", "xhigh"}} + } return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"high"}} case openAIMandatoryReasoning(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index eb1e10d93..7bd07b56d 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -14,6 +14,9 @@ func TestOpenAIReasoningCapsFor(t *testing.T) { efforts []string }{ {"gpt-5-pro", true, false, []string{"high"}}, + {"gpt-5.2-pro", true, false, []string{"medium", "high", "xhigh"}}, + {"gpt-5.4-pro", true, false, []string{"medium", "high", "xhigh"}}, + {"gpt-5.5-pro", true, false, []string{"medium", "high", "xhigh"}}, {"o3-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, {"o1-preview", true, false, []string{"low", "medium", "high", "xhigh"}}, {"o4-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, From 333a9c73ffc5b815469e45c0fe46a2ac8e45500e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 13:25:54 +0300 Subject: [PATCH 143/618] fix(reasoning): stop sending reasoning_effort to doors that refuse it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DashScope and the Moonshot k2 generation answer 400 UnsupportedParamsError for reasoning_effort, so every call carrying it failed — including the one that only meant to turn thinking off, since the disable token rides on that same field. Both paths now check the door first: an effort is dropped and an explicit off returns the typed unsupported error before the request is sent. Moonshot k3 accepts the field and keeps working as before. PAGI-149 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 3 + llms/openai/reasoning_effort_door_test.go | 81 +++++++++++++++++++++++ llms/reasoning/effort_wire.go | 18 +++++ llms/reasoning/effort_wire_test.go | 52 +++++++++++++++ llms/reasoning/off.go | 12 ++-- 5 files changed, 161 insertions(+), 5 deletions(-) create mode 100644 llms/openai/reasoning_effort_door_test.go create mode 100644 llms/reasoning/effort_wire.go create mode 100644 llms/reasoning/effort_wire_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 4de093cf6..3827f219b 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -315,6 +315,9 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) } model := o.effectiveModel(opts) + if !reasoning.AcceptsEffortWire(model) { + return "", nil + } effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) diff --git a/llms/openai/reasoning_effort_door_test.go b/llms/openai/reasoning_effort_door_test.go new file mode 100644 index 000000000..3150cd6c4 --- /dev/null +++ b/llms/openai/reasoning_effort_door_test.go @@ -0,0 +1,81 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + capture := func(t *testing.T, model string, opt llms.CallOption) (string, error) { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opt) + return body, err + } + + for _, model := range []string{"kimi-k2.7-code-highspeed", "kimi-k2.6", "qwen3-next-80b-a3b-thinking"} { + t.Run(model+" drops a requested effort", func(t *testing.T) { + body, err := capture(t, model, llms.WithReasoning(llms.ReasoningMedium, 0)) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if strings.Contains(body, "reasoning_effort") { + t.Fatalf("%s must not receive reasoning_effort, got body: %s", model, body) + } + }) + + t.Run(model+" reports off as unsupported", func(t *testing.T) { + _, err := capture(t, model, llms.WithReasoningDisabled()) + if err == nil { + t.Fatalf("%s cannot disable thinking and must return a typed error", model) + } + if !strings.Contains(err.Error(), "reasoning cannot be disabled") { + t.Fatalf("expected the typed disable error, got: %v", err) + } + }) + } + + t.Run("kimi-k3 still receives the effort", func(t *testing.T) { + body, err := capture(t, "kimi-k3", llms.WithReasoning(llms.ReasoningMedium, 0)) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if !strings.Contains(body, `"reasoning_effort":"medium"`) { + t.Fatalf("kimi-k3 accepts reasoning_effort and must receive it, got body: %s", body) + } + }) + + t.Run("kimi-k3 still disables via none", func(t *testing.T) { + body, err := capture(t, "kimi-k3", llms.WithReasoningDisabled()) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if !strings.Contains(body, `"reasoning_effort":"none"`) { + t.Fatalf("kimi-k3 disables via the none token, got body: %s", body) + } + }) +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go new file mode 100644 index 000000000..80189bfdf --- /dev/null +++ b/llms/reasoning/effort_wire.go @@ -0,0 +1,18 @@ +package reasoning + +import "strings" + +// AcceptsEffortWire reports whether the model's OpenAI-compatible door takes the +// reasoning_effort field. A door that refuses it fails the whole request, so such +// a model also has no way to spell "off": the disable token rides on this field. +func AcceptsEffortWire(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { + return false + } + if strings.Contains(form, "kimi-k2") { + return false + } + } + return true +} diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go new file mode 100644 index 000000000..e543b7d6b --- /dev/null +++ b/llms/reasoning/effort_wire_test.go @@ -0,0 +1,52 @@ +package reasoning + +import "testing" + +func TestAcceptsEffortWire(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + accept bool + }{ + {"qwen3-next-80b-a3b-thinking", false}, + {"dashscope/qwen3-next-80b-a3b-thinking", false}, + {"qwen3.7-max", false}, + {"qwq-32b", false}, + {"kimi-k2.7-code-highspeed", false}, + {"moonshot/kimi-k2.7-code", false}, + {"kimi-k2.6", false}, + {"kimi-k2-thinking", false}, + {"kimi-k3", true}, + {"moonshot/kimi-k3", true}, + {"gpt-5.5", true}, + {"o3-mini", true}, + {"deepseek-v4-pro", true}, + {"glm-5-turbo", true}, + {"minimax-m3", true}, + } { + if got := AcceptsEffortWire(tc.model); got != tc.accept { + t.Errorf("AcceptsEffortWire(%q) = %v, want %v", tc.model, got, tc.accept) + } + } +} + +func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want OffWire + }{ + {"qwen3-next-80b-a3b-thinking", OffUnsupported}, + {"kimi-k2.7-code-highspeed", OffUnsupported}, + {"kimi-k2.6", OffUnsupported}, + {"kimi-k3", OffEffortNone}, + {"deepseek-v4-pro", OffEffortNone}, + {"glm-5-turbo", OffEffortNone}, + } { + if got := ResolveOff(tc.model, ProviderOpenAI); got != tc.want { + t.Errorf("ResolveOff(%q, ProviderOpenAI) = %v, want %v", tc.model, got, tc.want) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 3dc1927bc..c1243e72b 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -47,9 +47,8 @@ func (e *ErrReasoningOffUnsupported) Error() string { // ResolveOff decides how to disable thinking for a model on a provider, from the // same capability tables the enable path reads. Unknown models get the provider's -// best-effort disable wire (optimistic: attempt it and let an API error be the -// backstop) rather than a silent omit, so a caller's explicit "off" is honored -// wherever the provider can honor it. +// best-effort disable wire rather than a silent omit, so a caller's explicit +// "off" is honored wherever the provider can honor it. func ResolveOff(model string, p Provider) OffWire { if isClaudeModel(model) { switch { @@ -86,11 +85,14 @@ func ResolveOff(model string, p Provider) OffWire { if !IsReasoningModel(model) { return OffOmit // non-reasoning model does not think } - // A model known to reject disabling (o-series, GPT-5 Pro) is unsupported; - // unknown models stay optimistic and attempt "none", with a 400 backstop. + // The disable token rides on the effort field, so a door that refuses that + // field cannot express "off" at all. if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { return OffUnsupported } + if !AcceptsEffortWire(model) { + return OffUnsupported + } return OffEffortNone default: // Bedrock non-Claude and everything else: no clean disable signal — omit. From 9f235872851436ee078e359cb4631e6d418e5fed Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 13:31:05 +0300 Subject: [PATCH 144/618] feat(reasoning): tell a signed answer apart from a reasoned one A ContentReasoning carrying only a signature is not evidence of thinking: Gemini 3 signs every answer, so a caller asking IsEmpty to decide whether the model reasoned reads "yes" for answers with zero thought tokens. HasContent answers that question; IsEmpty keeps its own meaning, since the signature must still travel back into the next turn. PAGI-147 Co-Authored-By: Claude Opus 5 --- llms/reasoning/content_reasoning_test.go | 27 ++++++++++++++++++++++++ llms/reasoning/reasoning.go | 10 +++++++++ 2 files changed, 37 insertions(+) create mode 100644 llms/reasoning/content_reasoning_test.go diff --git a/llms/reasoning/content_reasoning_test.go b/llms/reasoning/content_reasoning_test.go new file mode 100644 index 000000000..46e17b95b --- /dev/null +++ b/llms/reasoning/content_reasoning_test.go @@ -0,0 +1,27 @@ +package reasoning + +import "testing" + +func TestHasContentSeparatesReasoningFromSignature(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + reasoning *ContentReasoning + hasContent bool + isEmpty bool + }{ + {"nil", nil, false, true}, + {"zero value", &ContentReasoning{}, false, true}, + {"signature only", &ContentReasoning{Signature: []byte("sig")}, false, false}, + {"content only", &ContentReasoning{Content: "step 1"}, true, false}, + {"content and signature", &ContentReasoning{Content: "step 1", Signature: []byte("sig")}, true, false}, + } { + if got := tc.reasoning.HasContent(); got != tc.hasContent { + t.Errorf("%s: HasContent() = %v, want %v", tc.name, got, tc.hasContent) + } + if got := tc.reasoning.IsEmpty(); got != tc.isEmpty { + t.Errorf("%s: IsEmpty() = %v, want %v", tc.name, got, tc.isEmpty) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index cd5233696..8de8f903e 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -24,10 +24,20 @@ type ContentReasoning struct { Signature []byte `json:"signature,omitempty"` } +// IsEmpty reports whether there is nothing to carry back into the next turn. +// A signature alone still counts as something to carry, so this must not be +// narrowed to the content. func (r *ContentReasoning) IsEmpty() bool { return r == nil || (r.Content == "" && len(r.Signature) == 0) } +// HasContent reports whether the model actually reasoned. A bare signature does +// not qualify, so asking IsEmpty instead overstates thinking wherever a provider +// signs an answer it did not think about. +func (r *ContentReasoning) HasContent() bool { + return r != nil && r.Content != "" +} + func (r *ContentReasoning) String() string { if r.IsEmpty() { return "Reasoning: (empty)" From 26336fa93d5b1d588144da012b208e344b7da34c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 13:48:11 +0300 Subject: [PATCH 145/618] docs(reasoning): drop the promise of a backstop the code never had The optimistic branches said an API error would catch a wrong guess, but nothing retries or degrades on that error: it reaches the caller as-is. PAGI-147 Co-Authored-By: Claude Opus 5 --- llms/reasoning/gemini_capability.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index fe575e3df..7180384b8 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -61,8 +61,8 @@ func geminiKnownNonThinking(model string) bool { // GeminiCanDisable reports whether thinking can be turned off via // thinkingBudget:0. Gemini 2.5 Flash/Flash-Lite and Gemma 4 can; Gemini 2.5 Pro -// and Gemini 3.x (budget:0 is ignored) cannot. Unclassified Google models are -// treated as disablable (optimistic: attempt it, let the API be the backstop). +// and Gemini 3.x cannot. Unclassified Google models are treated as disablable, +// so a model this package has not seen is attempted rather than refused. func GeminiCanDisable(model string) bool { m := baseModelName(model) if GeminiThinkingOffByDefault(m) { From 3a3f164d3c51d5b602bf7ed689274fa850d42c83 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 17:27:07 +0300 Subject: [PATCH 146/618] feat(huggingface): report a truncated answer on both doors The door never told the caller that generation stopped at the token limit: the standard inference request did not ask for details, so no finish reason came back at all, and the router path dropped the one it already received. Both now reach ContentChoice.StopReason, so Truncated and WithFailOnTruncation behave here as on every other adapter. Asking for details changes the request body, so the three recorded cassettes carry it too. PAGI-143 Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm.go | 7 +- .../huggingfaceclient/huggingfaceclient.go | 10 +- .../internal/huggingfaceclient/inference.go | 13 +- .../testdata/TestClient_RunInference.httprr | 6 +- .../TestClient_RunInferenceText2Text.httprr | 6 +- ...TestHuggingFaceLLMStandardInference.httprr | 6 +- llms/huggingface/truncation_test.go | 119 ++++++++++++++++++ 7 files changed, 153 insertions(+), 14 deletions(-) create mode 100644 llms/huggingface/truncation_test.go diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 82626ee00..45b45d6c2 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -68,10 +68,15 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten resp := &llms.ContentResponse{ Choices: []*llms.ContentChoice{ { - Content: result.Text, + Content: result.Text, + StopReason: result.StopReason, + Truncated: llms.IsTruncated(result.StopReason), }, }, } + if err := llms.CheckTruncation(resp, *opts); err != nil { + return nil, err + } return resp, nil } diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go index 8e96ac440..d20cd432d 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go @@ -73,6 +73,8 @@ type InferenceRequest struct { type InferenceResponse struct { Text string `json:"generated_text"` + // StopReason is the vendor's finish reason, empty when the door did not report one. + StopReason string `json:"finish_reason,omitempty"` } func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (*InferenceResponse, error) { @@ -87,6 +89,7 @@ func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (* MaxLength: request.MaxLength, RepetitionPenalty: request.RepetitionPenalty, Seed: request.Seed, + Details: true, }, } resp, err := c.runInference(ctx, payload) @@ -97,10 +100,15 @@ func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (* return nil, ErrEmptyResponse } text := resp[0].Text + var stopReason string + if resp[0].Details != nil { + stopReason = resp[0].Details.FinishReason + } // TODO: Add response cleaning based on Model. // e.g., for gpt2, text = text[len(request.Prompt)+1:] return &InferenceResponse{ - Text: text, + Text: text, + StopReason: stopReason, }, nil } diff --git a/llms/huggingface/internal/huggingfaceclient/inference.go b/llms/huggingface/internal/huggingfaceclient/inference.go index 94964dd95..24a64d6e3 100644 --- a/llms/huggingface/internal/huggingfaceclient/inference.go +++ b/llms/huggingface/internal/huggingfaceclient/inference.go @@ -34,6 +34,7 @@ type parameters struct { MaxLength int `json:"max_length,omitempty"` RepetitionPenalty float64 `json:"repetition_penalty,omitempty"` Seed int `json:"seed,omitempty"` + Details bool `json:"details,omitempty"` } // Chat completions API structures for router-based requests @@ -56,14 +57,19 @@ type chatCompletionsResponse struct { Message struct { Content string `json:"content"` } `json:"message"` - Index int `json:"index"` + Index int `json:"index"` + FinishReason string `json:"finish_reason"` } `json:"choices"` } type ( inferenceResponsePayload []inferenceResponse inferenceResponse struct { - Text string `json:"generated_text"` + Text string `json:"generated_text"` + Details *inferenceDetails `json:"details,omitempty"` + } + inferenceDetails struct { + FinishReason string `json:"finish_reason"` } ) @@ -206,7 +212,8 @@ func (c *Client) runChatCompletions(ctx context.Context, payload *inferencePaylo // Convert to the expected response format response := make(inferenceResponsePayload, 1) response[0] = inferenceResponse{ - Text: chatResponse.Choices[0].Message.Content, + Text: chatResponse.Choices[0].Message.Content, + Details: &inferenceDetails{FinishReason: chatResponse.Choices[0].FinishReason}, } return response, nil diff --git a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr b/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr index 8f9f08471..3c9c7638f 100644 --- a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr +++ b/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr @@ -1,13 +1,13 @@ httprr trace v1 -324 873 +339 873 POST https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta HTTP/1.1 Host: api-inference.huggingface.co User-Agent: langchaingo-httprr -Content-Length: 79 +Content-Length: 94 Authorization: Bearer test-api-key Content-Type: application/json -{"inputs":"Hello, my name is","parameters":{"temperature":0.5,"max_length":20}}HTTP/2.0 404 Not Found +{"inputs":"Hello, my name is","parameters":{"temperature":0.5,"max_length":20,"details":true}}HTTP/2.0 404 Not Found Content-Length: 9 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * diff --git a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr b/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr index 75f34c56e..2f7134ce0 100644 --- a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr +++ b/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr @@ -1,13 +1,13 @@ httprr trace v1 -348 873 +363 873 POST https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta HTTP/1.1 Host: api-inference.huggingface.co User-Agent: langchaingo-httprr -Content-Length: 102 +Content-Length: 117 Authorization: Bearer test-api-key Content-Type: application/json -{"inputs":"Translate to French: Hello, how are you?","parameters":{"temperature":0.5,"max_length":50}}HTTP/2.0 404 Not Found +{"inputs":"Translate to French: Hello, how are you?","parameters":{"temperature":0.5,"max_length":50,"details":true}}HTTP/2.0 404 Not Found Content-Length: 9 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * diff --git a/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr b/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr index a86901af6..58f5aea1b 100644 --- a/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr +++ b/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr @@ -1,13 +1,13 @@ httprr trace v1 -325 873 +340 873 POST https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta HTTP/1.1 Host: api-inference.huggingface.co User-Agent: langchaingo-httprr -Content-Length: 80 +Content-Length: 95 Authorization: Bearer test-api-key Content-Type: application/json -{"inputs":"Hello, say hi back","parameters":{"temperature":0.5,"max_length":20}}HTTP/2.0 404 Not Found +{"inputs":"Hello, say hi back","parameters":{"temperature":0.5,"max_length":20,"details":true}}HTTP/2.0 404 Not Found Content-Length: 9 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * diff --git a/llms/huggingface/truncation_test.go b/llms/huggingface/truncation_test.go new file mode 100644 index 000000000..c6119f067 --- /dev/null +++ b/llms/huggingface/truncation_test.go @@ -0,0 +1,119 @@ +package huggingface + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "net/url" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func serveJSON(t *testing.T, body string) (*httptest.Server, *string) { + t.Helper() + var request string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + request = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + return srv, &request +} + +type rewriteHost struct{ target *url.URL } + +func (h rewriteHost) RoundTrip(r *http.Request) (*http.Response, error) { + r.URL.Scheme, r.URL.Host = h.target.Scheme, h.target.Host + return http.DefaultTransport.RoundTrip(r) +} + +func TestTruncationOnTheInferenceDoor(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + body string + reason string + truncated bool + }{ + {"hit the limit", `[{"generated_text":"partial","details":{"finish_reason":"length"}}]`, "length", true}, + {"finished", `[{"generated_text":"done","details":{"finish_reason":"eos_token"}}]`, "eos_token", false}, + {"no details", `[{"generated_text":"done"}]`, "", false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + srv, request := serveJSON(t, tc.body) + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("m")) + if err != nil { + t.Fatalf("New() error: %v", err) + } + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if got := resp.Choices[0].StopReason; got != tc.reason { + t.Errorf("StopReason = %q, want %q", got, tc.reason) + } + if got := resp.Choices[0].Truncated; got != tc.truncated { + t.Errorf("Truncated = %v, want %v", got, tc.truncated) + } + if !strings.Contains(*request, `"details":true`) { + t.Errorf("the door reports a finish reason only when details are requested, got body: %s", *request) + } + }) + } +} + +func TestTruncationOnTheRouterDoor(t *testing.T) { + t.Parallel() + + const body = `{"choices":[{"index":0,"message":{"content":"partial"},"finish_reason":"length"}]}` + srv, _ := serveJSON(t, body) + // The router path pins its own URL, so the test server is reached by transport. + target, err := url.Parse(srv.URL) + if err != nil { + t.Fatalf("parse test server url: %v", err) + } + redirect := &http.Client{Transport: rewriteHost{target: target}} + llm, err := New(WithToken("t"), WithModel("m"), + WithInferenceProvider("together"), WithHTTPClient(redirect)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if resp.Choices[0].StopReason != "length" || !resp.Choices[0].Truncated { + t.Fatalf("router door must report truncation, got %q / %v", + resp.Choices[0].StopReason, resp.Choices[0].Truncated) + } +} + +func TestFailOnTruncationOnTheInferenceDoor(t *testing.T) { + t.Parallel() + + srv, _ := serveJSON(t, `[{"generated_text":"partial","details":{"finish_reason":"length"}}]`) + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("m")) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithFailOnTruncation()) + if err == nil { + t.Fatal("a caller that opted in must get a typed error on a truncated answer") + } + var apiErr *llms.Error + if !errors.As(err, &apiErr) || apiErr.Code != llms.ErrCodeTruncated { + t.Fatalf("expected ErrCodeTruncated, got: %v", err) + } +} From 1eee249c4208e8723c2c7693f99d479e723a194d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 17:44:18 +0300 Subject: [PATCH 147/618] fix(bedrock): carry the caller's tool choice to the Converse wire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door pinned toolChoice to auto, so a request for a specific tool — or for any tool — was downgraded without a word, and the local guard against forcing a tool alongside budget thinking refused a combination that could never reach the vendor. The choice now travels, which makes that guard describe what is actually sent. An unset choice still leaves the decision to the model. ForcedToolName joins ForcesToolUse in llms so every door reads one parser. PAGI-143 Co-Authored-By: Claude Opus 5 --- llms/bedrock/bedrockllm.go | 1 + .../bedrockclient/bedrockclient_converse.go | 21 +++- llms/bedrock/tool_choice_wire_test.go | 101 ++++++++++++++++++ llms/turn.go | 30 ++++++ 4 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 llms/bedrock/tool_choice_wire_test.go diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 16b70d6dc..6ddb0d0cf 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -149,6 +149,7 @@ func (l *LLM) generateContentWithConverseAPI(ctx context.Context, messages []llm ModelID: opts.GetModel(), Messages: m, Tools: opts.Tools, + ToolChoice: opts.ToolChoice, StreamingFunc: opts.StreamingFunc, ReasoningConfig: opts.Reasoning, EnableCaching: enableCaching, diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index c7e6807a2..d9e456f57 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -67,6 +67,7 @@ type ConverseInput struct { TopP *float64 StopSequences []string Tools []llms.Tool + ToolChoice any StreamingFunc streaming.Callback ReasoningConfig *llms.ReasoningConfig EnableCaching bool @@ -142,7 +143,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti // Add tool configuration if tools are provided if len(input.Tools) > 0 { - toolConfig, err := c.convertToolsToToolConfig(input.Tools) + toolConfig, err := c.convertToolsToToolConfig(input.Tools, input.ToolChoice) if err != nil { return nil, fmt.Errorf("failed to convert tools: %w", err) } @@ -604,7 +605,7 @@ func (c *ConverseClient) convertToolCallInput(args any) (any, error) { } // convertToolsToToolConfig converts llms.Tool to Converse ToolConfiguration -func (c *ConverseClient) convertToolsToToolConfig(tools []llms.Tool) (*types.ToolConfiguration, error) { +func (c *ConverseClient) convertToolsToToolConfig(tools []llms.Tool, choice any) (*types.ToolConfiguration, error) { var converseTools []types.Tool for _, tool := range tools { @@ -635,10 +636,24 @@ func (c *ConverseClient) convertToolsToToolConfig(tools []llms.Tool) (*types.Too return &types.ToolConfiguration{ Tools: converseTools, - ToolChoice: &types.ToolChoiceMemberAuto{}, + ToolChoice: converseToolChoice(choice), }, nil } +// converseToolChoice carries the caller's choice to the wire. An unset or +// unrecognized choice leaves the decision to the model. +func converseToolChoice(choice any) types.ToolChoice { + name, forced := llms.ForcedToolName(choice) + switch { + case forced && name != "": + return &types.ToolChoiceMemberTool{Value: types.SpecificToolChoice{Name: &name}} + case forced: + return &types.ToolChoiceMemberAny{} + default: + return &types.ToolChoiceMemberAuto{} + } +} + // handleNonStreamingResponse handles non-streaming responses func (c *ConverseClient) handleNonStreamingResponse(ctx context.Context, input *bedrockruntime.ConverseInput) (*llms.ContentResponse, error) { response, err := c.client.Converse(ctx, input) diff --git a/llms/bedrock/tool_choice_wire_test.go b/llms/bedrock/tool_choice_wire_test.go new file mode 100644 index 000000000..be00bd680 --- /dev/null +++ b/llms/bedrock/tool_choice_wire_test.go @@ -0,0 +1,101 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestConverseCarriesTheToolChoice(t *testing.T) { + t.Parallel() + + const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + + capture := func(t *testing.T, choice any) string { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + opts := []llms.CallOption{llms.WithTools([]llms.Tool{tool})} + if choice != nil { + opts = append(opts, llms.WithToolChoice(choice)) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + t.Run("a named tool reaches the wire", func(t *testing.T) { + body := capture(t, llms.ToolChoice{ + Type: "tool", + Function: &llms.FunctionReference{Name: "get_weather"}, + }) + if !strings.Contains(body, `"tool":{"name":"get_weather"}`) { + t.Fatalf("named choice must reach the wire, got body: %s", body) + } + }) + + t.Run("any tool reaches the wire", func(t *testing.T) { + body := capture(t, llms.ToolChoice{Type: "any"}) + if !strings.Contains(body, `"any":{}`) { + t.Fatalf("forced choice must reach the wire, got body: %s", body) + } + }) + + t.Run("an unset choice still leaves it to the model", func(t *testing.T) { + body := capture(t, nil) + if !strings.Contains(body, `"auto":{}`) { + t.Fatalf("an unset choice must stay auto, got body: %s", body) + } + }) +} + +func TestForcedToolName(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + choice any + want string + forced bool + }{ + {"named tool", llms.ToolChoice{Type: "tool", Function: &llms.FunctionReference{Name: "f"}}, "f", true}, + {"pointer", &llms.ToolChoice{Type: "tool", Function: &llms.FunctionReference{Name: "g"}}, "g", true}, + {"any", llms.ToolChoice{Type: "any"}, "", true}, + {"map with function", map[string]any{"type": "tool", "function": map[string]any{"name": "h"}}, "h", true}, + {"auto", llms.ToolChoice{Type: "auto"}, "", false}, + {"nil", nil, "", false}, + } { + name, forced := llms.ForcedToolName(tc.choice) + if name != tc.want || forced != tc.forced { + t.Errorf("%s: ForcedToolName() = (%q, %v), want (%q, %v)", tc.name, name, forced, tc.want, tc.forced) + } + } +} diff --git a/llms/turn.go b/llms/turn.go index 22580ba56..a3825c1eb 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -20,6 +20,36 @@ func ForcesToolUse(choice any) bool { return false } +// ForcedToolName reports whether the choice demands a tool call, and names the +// tool when the caller picked one. An empty name with forced=true means "any +// tool", which every door spells differently. +func ForcedToolName(choice any) (name string, forced bool) { + if !ForcesToolUse(choice) { + return "", false + } + switch c := choice.(type) { + case ToolChoice: + return functionName(c.Function), true + case *ToolChoice: + return functionName(c.Function), true + case map[string]any: + if fn, ok := c["function"].(map[string]any); ok { + n, _ := fn["name"].(string) + return n, true + } + n, _ := c["name"].(string) + return n, true + } + return "", true +} + +func functionName(fn *FunctionReference) string { + if fn == nil { + return "" + } + return fn.Name +} + // HasAssistantPrefill reports whether the conversation ends with an assistant // turn, which some models reject. func HasAssistantPrefill(messages []MessageContent) bool { From fdba1e7a6e1d2c770608c3d2043c066f84cf2d21 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 17:57:59 +0300 Subject: [PATCH 148/618] fix(bedrock): keep interleaved streamed tool calls apart MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converse can hold several tool blocks open at once, and the stream identifies each one by its content block index. The reader ignored that index: an argument delta landed on whichever entry the map handed out first, and one block's stop event flushed and cleared every open call. Two concurrent tool calls came back as one glued together — {"a":{"b":1}2} — with the second empty. Each block now accumulates under its own index into a strings.Builder, and a stop event completes only the block it names. An absent index means the first block, which the wire allows on a single-block stream. PAGI-143 Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_stream_tools_test.go | 106 ++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 86 +++++++------- 2 files changed, 145 insertions(+), 47 deletions(-) create mode 100644 llms/bedrock/converse_stream_tools_test.go diff --git a/llms/bedrock/converse_stream_tools_test.go b/llms/bedrock/converse_stream_tools_test.go new file mode 100644 index 000000000..7a55df7fd --- /dev/null +++ b/llms/bedrock/converse_stream_tools_test.go @@ -0,0 +1,106 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestConverseStreamKeepsToolCallsApart(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + + writeConverseEvent(t, w, enc, "contentBlockStart", + `{"contentBlockIndex":0,"start":{"toolUse":{"toolUseId":"id-a","name":"alpha"}}}`) + writeConverseEvent(t, w, enc, "contentBlockStart", + `{"contentBlockIndex":1,"start":{"toolUse":{"toolUseId":"id-b","name":"beta"}}}`) + + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"toolUse":{"input":"{\"a\":"}}}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":1,"delta":{"toolUse":{"input":"{\"b\":"}}}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"toolUse":{"input":"1}"}}}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":1,"delta":{"toolUse":{"input":"2}"}}}`) + + writeConverseEvent(t, w, enc, "contentBlockStop", `{"contentBlockIndex":0}`) + writeConverseEvent(t, w, enc, "contentBlockStop", `{"contentBlockIndex":1}`) + writeConverseEvent(t, w, enc, "messageStop", `{"stopReason":"tool_use"}`) + writeConverseEvent(t, w, enc, "metadata", + `{"usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0"), bedrock.WithConverseAPI()) + + var streamed []streaming.ToolCall + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeToolCall { + streamed = append(streamed, chunk.ToolCall) + } + return nil + })) + require.NoError(t, err) + + got := map[string]string{} + for _, call := range resp.Choices[0].ToolCalls { + require.NotNil(t, call.FunctionCall) + got[call.FunctionCall.Name] = call.FunctionCall.Arguments + } + + assert.Len(t, resp.Choices[0].ToolCalls, 2) + assert.Equal(t, `{"a":1}`, got["alpha"]) + assert.Equal(t, `{"b":2}`, got["beta"]) + assert.Len(t, streamed, 2) +} + +func TestConverseStreamToolCallWithoutABlockIndex(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + writeConverseEvent(t, w, enc, "contentBlockStart", + `{"start":{"toolUse":{"toolUseId":"id-a","name":"alpha"}}}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"delta":{"toolUse":{"input":"{\"a\":1}"}}}`) + writeConverseEvent(t, w, enc, "contentBlockStop", `{}`) + writeConverseEvent(t, w, enc, "messageStop", `{"stopReason":"tool_use"}`) + writeConverseEvent(t, w, enc, "metadata", + `{"usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0"), bedrock.WithConverseAPI()) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(_ context.Context, _ streaming.Chunk) error { return nil })) + require.NoError(t, err) + + require.Len(t, resp.Choices[0].ToolCalls, 1) + require.NotNil(t, resp.Choices[0].ToolCalls[0].FunctionCall) + assert.Equal(t, `{"a":1}`, resp.Choices[0].ToolCalls[0].FunctionCall.Arguments) +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index d9e456f57..9d4049dd0 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -5,6 +5,8 @@ import ( "context" "encoding/json" "fmt" + "maps" + "slices" "strings" "github.com/vxcontrol/langchaingo/internal/numutil" @@ -654,6 +656,27 @@ func converseToolChoice(choice any) types.ToolChoice { } } +type converseToolCallBuilder struct { + id string + name string + arguments strings.Builder +} + +func (b *converseToolCallBuilder) streamingCall() streaming.ToolCall { + return streaming.ToolCall{ID: b.id, Name: b.name, Arguments: b.arguments.String()} +} + +func (b *converseToolCallBuilder) toolCall() llms.ToolCall { + return llms.ToolCall{ + ID: b.id, + Type: "function", + FunctionCall: &llms.FunctionCall{ + Name: b.name, + Arguments: b.arguments.String(), + }, + } +} + // handleNonStreamingResponse handles non-streaming responses func (c *ConverseClient) handleNonStreamingResponse(ctx context.Context, input *bedrockruntime.ConverseInput) (*llms.ContentResponse, error) { response, err := c.client.Converse(ctx, input) @@ -693,7 +716,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response var signature bytes.Buffer var toolCalls []llms.ToolCall var stopReason string - currentToolCalls := make(map[string]*streaming.ToolCall) // Track streaming tool calls by ID + currentToolCalls := make(map[int32]*converseToolCallBuilder) // Track streaming tool calls by content block index defer streaming.CallWithDone(ctx, callback) @@ -735,15 +758,9 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response } } case *types.ContentBlockDeltaMemberToolUse: - // Handle tool use delta (accumulate input arguments) if delta.Value.Input != nil { - // delta.Value.Input is already a partial JSON string - inputStr := *delta.Value.Input - - // Find the active tool call and accumulate arguments - for _, toolCall := range currentToolCalls { - toolCall.Arguments += inputStr - break // Only one active tool call at a time typically + if builder, ok := currentToolCalls[aws.ToInt32(e.Value.ContentBlockIndex)]; ok { + builder.arguments.WriteString(*delta.Value.Input) } } } @@ -751,61 +768,36 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response case *types.ConverseStreamOutputMemberContentBlockStart: if e.Value.Start != nil { if toolUse, ok := e.Value.Start.(*types.ContentBlockStartMemberToolUse); ok { - // Create streaming tool call, arguments will come through delta events - toolCall := &streaming.ToolCall{ - ID: *toolUse.Value.ToolUseId, - Name: *toolUse.Value.Name, - Arguments: "", + currentToolCalls[aws.ToInt32(e.Value.ContentBlockIndex)] = &converseToolCallBuilder{ + id: aws.ToString(toolUse.Value.ToolUseId), + name: aws.ToString(toolUse.Value.Name), } - - currentToolCalls[*toolUse.Value.ToolUseId] = toolCall - - // Don't send chunk here, will send complete one in ContentBlockStop } } case *types.ConverseStreamOutputMemberContentBlockStop: - // Handle tool call completion - for _, toolCall := range currentToolCalls { - // Send complete tool call through streaming + index := aws.ToInt32(e.Value.ContentBlockIndex) + if builder, ok := currentToolCalls[index]; ok { + delete(currentToolCalls, index) if callback != nil { - streamChunk := streaming.Chunk{ + chunk := streaming.Chunk{ Type: streaming.ChunkTypeToolCall, - ToolCall: *toolCall, + ToolCall: builder.streamingCall(), } - if err := callback(ctx, streamChunk); err != nil { + if err := callback(ctx, chunk); err != nil { return nil, err } } - - // Convert streaming tool call to final llms.ToolCall - finalToolCall := llms.ToolCall{ - ID: toolCall.ID, - Type: "function", - FunctionCall: &llms.FunctionCall{ - Name: toolCall.Name, - Arguments: toolCall.Arguments, - }, - } - toolCalls = append(toolCalls, finalToolCall) + toolCalls = append(toolCalls, builder.toolCall()) } - // Clear current tool calls after completion - currentToolCalls = make(map[string]*streaming.ToolCall) case *types.ConverseStreamOutputMemberMessageStop: // The terminal event carries the stop reason (end_turn, tool_use, // max_tokens, guardrail_intervened, content_filtered, ...). stopReason = string(e.Value.StopReason) // Stream completed - ensure any remaining tool calls are added - for _, toolCall := range currentToolCalls { - finalToolCall := llms.ToolCall{ - ID: toolCall.ID, - Type: "function", - FunctionCall: &llms.FunctionCall{ - Name: toolCall.Name, - Arguments: toolCall.Arguments, - }, - } - toolCalls = append(toolCalls, finalToolCall) + for _, index := range slices.Sorted(maps.Keys(currentToolCalls)) { + toolCalls = append(toolCalls, currentToolCalls[index].toolCall()) } + currentToolCalls = nil } } From 27b63bee9f829c26c1ba55007641e5b443398c18 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 26 Aug 2026 18:00:36 +0300 Subject: [PATCH 149/618] refactor(reasoning): one resolver decides how a model thinks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both Bedrock doors carried their own copy of the same ladder — known thinking Claude follows the model, an unclassified Claude honors an explicit adaptive request unless its family predates adaptive, anything else the door calls a reasoning model gets a budget. Two copies meant a rule could be corrected in one door and left standing in the other. The ladder now lives in reasoning.ResolveMechanism, and each door keeps only what is genuinely its own: which fields it writes on its wire. PAGI-143 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 19 ++----- .../bedrockclient/provider_anthropic.go | 17 ++----- llms/reasoning/mechanism.go | 33 +++++++++++++ llms/reasoning/mechanism_test.go | 49 +++++++++++++++++++ 4 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 llms/reasoning/mechanism.go create mode 100644 llms/reasoning/mechanism_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 9d4049dd0..fa2a9ac6e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -182,22 +182,11 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } } } - switch { - case reasoning.ClaudeSupportsThinking(input.ModelID): - // Known thinking Claude: the model, not the flag, picks the mechanism. - if reasoning.ResolveClaudeAdaptive(input.ModelID, input.ReasoningConfig.Adaptive) { - setAdaptive() - } else { - setBudget() - } - case input.ReasoningConfig.Adaptive && isAnthropicModelID(input.ModelID) && - !reasoning.ClaudePredatesAdaptive(input.ModelID): - // Unclassified — assumed newer than the table — Claude generation with an - // explicit adaptive request. Known pre-adaptive families are excluded so - // adaptive is never sent to a model (e.g. claude-3-5-haiku) that rejects it. + switch reasoning.ResolveMechanism(input.ModelID, input.ReasoningConfig.Adaptive, + isAnthropicModelID(input.ModelID), c.supportsReasoning(input.ModelID)) { + case reasoning.MechanismAdaptive: setAdaptive() - case c.supportsReasoning(input.ModelID): - // Non-Claude reasoning model (gpt-oss, kimi): budget thinking. + case reasoning.MechanismBudget: setBudget() } if additionalModelFields.Thinking != nil { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 6a14646fa..467682e5a 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -752,21 +752,10 @@ func applyAnthropicReasoning( } } - switch { - case reasoning.ClaudeSupportsThinking(modelID): - // Known thinking Claude: the model, not the flag, picks the mechanism. - if reasoning.ResolveClaudeAdaptive(modelID, cfg.Adaptive) { - setAdaptive() - } else { - setBudget() - } - case cfg.Adaptive && !reasoning.ClaudePredatesAdaptive(modelID): - // Unclassified — assumed newer than the table — Claude generation with an - // explicit adaptive request. Known pre-adaptive families are excluded so - // adaptive is never sent to a model that would reject it with a 400; those - // fall through to the budget gate below (or send no thinking at all). + switch reasoning.ResolveMechanism(modelID, cfg.Adaptive, true, supportsAnthropicReasoning(modelID)) { + case reasoning.MechanismAdaptive: setAdaptive() - case supportsAnthropicReasoning(modelID): + case reasoning.MechanismBudget: setBudget() } return nil diff --git a/llms/reasoning/mechanism.go b/llms/reasoning/mechanism.go new file mode 100644 index 000000000..d3bd6e98d --- /dev/null +++ b/llms/reasoning/mechanism.go @@ -0,0 +1,33 @@ +package reasoning + +// Mechanism is how a model thinks on one request. +type Mechanism int + +const ( + // MechanismNone sends no thinking configuration at all. + MechanismNone Mechanism = iota + // MechanismAdaptive lets the model size its own thinking from an effort. + MechanismAdaptive + // MechanismBudget gives the model a token budget to think within. + MechanismBudget +) + +// ResolveMechanism picks the thinking mechanism for a model the caller asked to +// think. claudeFamily and reasons are the door's own answers: whether the id +// belongs to Anthropic on that platform, and whether the door treats the model +// as a reasoning model at all. +func ResolveMechanism(model string, adaptive, claudeFamily, reasons bool) Mechanism { + switch { + case ClaudeSupportsThinking(model): + if ResolveClaudeAdaptive(model, adaptive) { + return MechanismAdaptive + } + return MechanismBudget + case adaptive && claudeFamily && !ClaudePredatesAdaptive(model): + return MechanismAdaptive + case reasons: + return MechanismBudget + default: + return MechanismNone + } +} diff --git a/llms/reasoning/mechanism_test.go b/llms/reasoning/mechanism_test.go new file mode 100644 index 000000000..dbe4fd442 --- /dev/null +++ b/llms/reasoning/mechanism_test.go @@ -0,0 +1,49 @@ +package reasoning_test + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestResolveMechanism(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + adaptive bool + claudeFamily bool + reasons bool + want reasoning.Mechanism + }{ + { + "a known thinking Claude follows the model, not the flag", + "anthropic.claude-sonnet-4-5-20250929-v1:0", false, true, true, reasoning.MechanismBudget, + }, + { + "an adaptive-only Claude ignores a budget request", + "anthropic.claude-opus-4-7-20260115-v1:0", false, true, true, reasoning.MechanismAdaptive, + }, + { + "an unclassified Claude honors an explicit adaptive request", + "anthropic.claude-sonnet-9-20991231-v1:0", true, true, true, reasoning.MechanismAdaptive, + }, + { + "a pre-adaptive Claude never gets adaptive", + "anthropic.claude-3-5-haiku-20241022-v1:0", true, true, true, reasoning.MechanismBudget, + }, + { + "a non-Claude reasoning model gets a budget", + "openai.gpt-oss-120b-1:0", true, false, true, reasoning.MechanismBudget, + }, + { + "a model the door does not consider reasoning gets nothing", + "amazon.nova-lite-v1:0", true, false, false, reasoning.MechanismNone, + }, + } { + if got := reasoning.ResolveMechanism(tc.model, tc.adaptive, tc.claudeFamily, tc.reasons); got != tc.want { + t.Errorf("%s: ResolveMechanism(%q) = %v, want %v", tc.name, tc.model, got, tc.want) + } + } +} From 58e3db634c3acd0a372b83807974e18dbb1fff4d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 13:54:15 +0300 Subject: [PATCH 150/618] fix(reasoning): keep the Claude thinking budget above the vendor floor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The budget was cut to two thirds of max-tokens with no lower bound, so every max-tokens under 1536 produced a budget below the 1024 Anthropic accepts and the vendor refused the whole request — 1024 with a low effort sent 682, and the smallest values sent 341. The floor now lives beside the other Claude rules and is applied on all three budget doors: the primary anthropic client and both Bedrock doors. Raising the budget alone is not enough on Bedrock, where max-tokens is passed through untouched, so the ceiling rule the primary door already applied is shared too and now covers all three. Google and the OpenAI-compatible doors call the same GetTokens and have their own limits, so the floor stays out of it. PAGI-146 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 5 +- llms/anthropic/budget_floor_test.go | 41 +++++++ llms/bedrock/budget_floor_test.go | 103 ++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 7 +- .../bedrockclient/provider_anthropic.go | 5 +- llms/reasoning/claude_budget_test.go | 53 +++++++++ llms/reasoning/claude_capability.go | 27 +++++ 7 files changed, 237 insertions(+), 4 deletions(-) create mode 100644 llms/anthropic/budget_floor_test.go create mode 100644 llms/bedrock/budget_floor_test.go create mode 100644 llms/reasoning/claude_budget_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 54929eb71..9ae8d92cf 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -213,7 +213,8 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag outputConfig = &anthropicclient.OutputConfig{ Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), } - } else if budget := opts.Reasoning.GetTokens(opts.GetMaxTokens()); budget > 0 { + } else if budget := reasoning.ClaudeClampBudget(model, + opts.Reasoning.GetTokens(opts.GetMaxTokens())); budget > 0 { thinking = &anthropicclient.ThinkingPayload{ Type: "enabled", Budget: budget, @@ -289,7 +290,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag temperature = nil } topP = nil - maxTokens = max(thinking.Budget*2, maxTokens) // 2x the budget for thinking + maxTokens = reasoning.ClaudeMaxTokensForBudget(thinking.Budget, maxTokens) case reasoning.ClaudeRejectsSampling(model): // Adaptive-only models reject sampling params even without thinking. temperature = nil diff --git a/llms/anthropic/budget_floor_test.go b/llms/anthropic/budget_floor_test.go new file mode 100644 index 000000000..a8d2cddef --- /dev/null +++ b/llms/anthropic/budget_floor_test.go @@ -0,0 +1,41 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestBudgetNeverFallsBelowTheVendorFloor(t *testing.T) { + t.Parallel() + + // 1535 is the last max-tokens whose two-thirds cut lands below the floor. + for _, tc := range []struct { + maxTokens int + effort llms.ReasoningEffort + }{ + {512, llms.ReasoningLow}, + {512, llms.ReasoningHigh}, + {1024, llms.ReasoningLow}, + {1535, llms.ReasoningLow}, + {1535, llms.ReasoningHigh}, + {1536, llms.ReasoningLow}, + {4096, llms.ReasoningHigh}, + } { + p, _ := captureMessagesRequestModel(t, "claude-sonnet-4-5", + llms.WithMaxTokens(tc.maxTokens), llms.WithReasoning(tc.effort, 0)) + + thinking, ok := p["thinking"].(map[string]any) + require.True(t, ok, "maxTokens=%d effort=%s: no thinking block", tc.maxTokens, tc.effort) + budget, _ := thinking["budget_tokens"].(float64) + maxTokens, _ := p["max_tokens"].(float64) + + assert.GreaterOrEqual(t, int(budget), 1024, + "maxTokens=%d effort=%s: budget below the vendor floor", tc.maxTokens, tc.effort) + assert.Less(t, budget, maxTokens, + "maxTokens=%d effort=%s: budget must leave room for the answer", tc.maxTokens, tc.effort) + } +} diff --git a/llms/bedrock/budget_floor_test.go b/llms/bedrock/budget_floor_test.go new file mode 100644 index 000000000..81d3ac4fa --- /dev/null +++ b/llms/bedrock/budget_floor_test.go @@ -0,0 +1,103 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +const claudeBudgetModel = "anthropic.claude-sonnet-4-5-20250929-v1:0" + +// 1535 is the last max-tokens whose two-thirds cut lands below the floor. +var budgetCases = []struct { + maxTokens int + effort llms.ReasoningEffort +}{ + {512, llms.ReasoningLow}, + {512, llms.ReasoningHigh}, + {1024, llms.ReasoningLow}, + {1535, llms.ReasoningLow}, + {1535, llms.ReasoningHigh}, + {1536, llms.ReasoningLow}, + {4096, llms.ReasoningHigh}, +} + +func TestLegacyBudgetNeverFallsBelowTheVendorFloor(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + for _, tc := range budgetCases { + llm, sent := legacyLLMCapturing(t, resp, bedrock.WithModel(claudeBudgetModel)) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithMaxTokens(tc.maxTokens), llms.WithReasoning(tc.effort, 0)) + require.NoError(t, err) + + var got struct { + MaxTokens int `json:"max_tokens"` + Thinking struct { + BudgetTokens int `json:"budget_tokens"` + } `json:"thinking"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &got)) + + assert.GreaterOrEqual(t, got.Thinking.BudgetTokens, 1024, + "maxTokens=%d effort=%s: budget below the vendor floor", tc.maxTokens, tc.effort) + assert.Less(t, got.Thinking.BudgetTokens, got.MaxTokens, + "maxTokens=%d effort=%s: budget must leave room for the answer", tc.maxTokens, tc.effort) + } +} + +func TestConverseBudgetNeverFallsBelowTheVendorFloor(t *testing.T) { + t.Parallel() + + const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + for _, tc := range budgetCases { + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(claudeBudgetModel), bedrock.WithConverseAPI()) + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithMaxTokens(tc.maxTokens), llms.WithReasoning(tc.effort, 0)) + srv.Close() + require.NoError(t, err) + + var got struct { + InferenceConfig struct { + MaxTokens int `json:"maxTokens"` + } `json:"inferenceConfig"` + Fields struct { + Thinking struct { + BudgetTokens int `json:"budget_tokens"` + } `json:"thinking"` + } `json:"additionalModelRequestFields"` + } + require.NoError(t, json.Unmarshal([]byte(body), &got)) + + assert.GreaterOrEqual(t, got.Fields.Thinking.BudgetTokens, 1024, + "maxTokens=%d effort=%s: budget below the vendor floor", tc.maxTokens, tc.effort) + assert.Less(t, got.Fields.Thinking.BudgetTokens, got.InferenceConfig.MaxTokens, + "maxTokens=%d effort=%s: budget must leave room for the answer", tc.maxTokens, tc.effort) + } +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 8f8759e4d..1bdd069fd 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -169,7 +169,8 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti inferenceConfig.TopP = nil } setBudget := func() { - if tokens := input.ReasoningConfig.GetTokens(maxTokens); tokens > 0 { + if tokens := reasoning.ClaudeClampBudget(input.ModelID, + input.ReasoningConfig.GetTokens(maxTokens)); tokens > 0 { additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID, reasoning.ProviderBedrock) { effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) @@ -191,6 +192,10 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } if additionalModelFields.Thinking != nil { converseInput.AdditionalModelRequestFields = document.NewLazyDocument(additionalModelFields) + if budget := additionalModelFields.Thinking.BudgetTokens; budget > 0 { + ceiling := reasoning.ClaudeMaxTokensForBudget(budget, maxTokens) + inferenceConfig.MaxTokens = aws.Int32(numutil.SaturateInt32(ceiling)) + } } case llms.ReasoningOff: switch reasoning.ResolveOff(input.ModelID, reasoning.ProviderBedrock) { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 506df881f..7f61f91d6 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -249,6 +249,9 @@ func createAnthropicCompletion(ctx context.Context, if err := applyAnthropicReasoning(&input, options.Reasoning, modelID, maxTokens); err != nil { return nil, err } + if input.Thinking != nil { + input.MaxTokens = reasoning.ClaudeMaxTokensForBudget(input.Thinking.BudgetTokens, input.MaxTokens) + } // Structured output rides in output_config.format, merged with any effort set // by applyAnthropicReasoning (the two are independent). @@ -739,7 +742,7 @@ func applyAnthropicReasoning( input.TopK = 0 } setBudget := func() { - if tokens := cfg.GetTokens(maxTokens); tokens > 0 { + if tokens := reasoning.ClaudeClampBudget(modelID, cfg.GetTokens(maxTokens)); tokens > 0 { input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} diff --git a/llms/reasoning/claude_budget_test.go b/llms/reasoning/claude_budget_test.go new file mode 100644 index 000000000..328114abf --- /dev/null +++ b/llms/reasoning/claude_budget_test.go @@ -0,0 +1,53 @@ +package reasoning_test + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestClaudeClampBudget(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + budget int + want int + }{ + {"a budget model is raised to the floor", "claude-sonnet-4-5", 682, 1024}, + {"one below the floor is raised", "claude-sonnet-4-5", 1023, 1024}, + {"the floor itself passes", "claude-sonnet-4-5", 1024, 1024}, + {"a larger budget passes", "claude-sonnet-4-5", 4096, 4096}, + {"a dual model is raised too", "claude-opus-4-6", 500, 1024}, + {"bedrock ids resolve the same", "us.anthropic.claude-sonnet-4-5-20250929-v1:0", 341, 1024}, + {"thinking off passes through", "claude-sonnet-4-5", 0, 0}, + {"an adaptive-only model never sends a budget", "claude-opus-4-8", 341, 341}, + {"a non-Claude model is left alone", "gpt-oss-120b", 341, 341}, + } { + if got := reasoning.ClaudeClampBudget(tc.model, tc.budget); got != tc.want { + t.Errorf("%s: ClaudeClampBudget(%q, %d) = %d, want %d", tc.name, tc.model, tc.budget, got, tc.want) + } + } +} + +func TestClaudeMaxTokensForBudget(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + budget int + maxTokens int + want int + }{ + {"a tight ceiling is raised to twice the budget", 1024, 512, 2048}, + {"a ceiling equal to the budget still leaves no room", 1024, 1024, 2048}, + {"a roomy ceiling is kept", 1024, 8192, 8192}, + {"no budget leaves the ceiling alone", 0, 512, 512}, + } { + if got := reasoning.ClaudeMaxTokensForBudget(tc.budget, tc.maxTokens); got != tc.want { + t.Errorf("%s: ClaudeMaxTokensForBudget(%d, %d) = %d, want %d", + tc.name, tc.budget, tc.maxTokens, got, tc.want) + } + } +} diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 3be7f891a..7d806f546 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -142,6 +142,33 @@ func ClaudeClampEffort(model, effort string) string { return best } +// ClaudeMinThinkingBudget is the smallest budget_tokens Anthropic accepts. +const ClaudeMinThinkingBudget = 1024 + +// ClaudeClampBudget raises a budget below the vendor floor up to it, and leaves +// every other model and a zero budget untouched. +func ClaudeClampBudget(model string, budget int) int { + if budget <= 0 || budget >= ClaudeMinThinkingBudget { + return budget + } + switch ClaudeReasoningKindFor(model) { + case ClaudeReasoningBudgetOnly, ClaudeReasoningAdaptiveAndBudget: + return ClaudeMinThinkingBudget + case ClaudeReasoningUnknown, ClaudeReasoningAdaptiveOnly: + return budget + } + return budget +} + +// ClaudeMaxTokensForBudget returns a ceiling that still leaves the answer room +// once the budget is spent. +func ClaudeMaxTokensForBudget(budget, maxTokens int) int { + if budget <= 0 { + return maxTokens + } + return max(budget*2, maxTokens) +} + // budgetEffortClaude are budget-thinking models that also accept an effort // output_config alongside manual thinking (introduced with Opus 4.5). Newer // generations use adaptive thinking, where effort is always available. From c6d77fff62ce956995a0d5bce893014bba4d4db1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 15:12:06 +0300 Subject: [PATCH 151/618] perf: collect streamed text in a builder instead of reappending MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every delta rebuilt the whole answer: a 125KB response arriving in 25k chunks spent 133ms and allocated 1.6GB. The same run through a strings.Builder takes 115us and 515KB. Converted the streaming readers that grow text delta by delta — the openai client, seven Bedrock providers and mistral. The non-streaming paths that walk a handful of content blocks keep plain concatenation; there is nothing to win there. Mistral returns the partial answer on error, so its flush rides on a defer and a test now covers that exit. PAGI-143 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_ai21.go | 5 +++- .../internal/bedrockclient/provider_amazon.go | 6 ++++- .../bedrockclient/provider_anthropic.go | 5 +++- .../internal/bedrockclient/provider_cohere.go | 5 +++- .../bedrockclient/provider_deepseek.go | 5 +++- .../internal/bedrockclient/provider_meta.go | 6 ++++- .../internal/bedrockclient/provider_nova.go | 6 ++++- llms/mistral/mistralmodel.go | 6 ++++- llms/mistral/truncation_test.go | 24 +++++++++++++++++ llms/openai/internal/openaiclient/chat.go | 26 ++++++++++++++++--- 10 files changed, 83 insertions(+), 11 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index 4dc4eb76a..3d2c49ff5 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -319,6 +319,7 @@ func parseAi21StreamingResponse(ctx context.Context, client *bedrockruntime.Clie defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder for e := range stream.Events() { if err = stream.Err(); err != nil { return nil, err @@ -336,7 +337,7 @@ func parseAi21StreamingResponse(ctx context.Context, client *bedrockruntime.Clie if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Text); err != nil { return nil, err } - contentchoices[0].Content += resp.Text + streamedContent.WriteString(resp.Text) } // Set completion reason @@ -363,6 +364,8 @@ func parseAi21StreamingResponse(ctx context.Context, client *bedrockruntime.Clie return nil, err } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/bedrock/internal/bedrockclient/provider_amazon.go b/llms/bedrock/internal/bedrockclient/provider_amazon.go index c445c137b..46775aa43 100644 --- a/llms/bedrock/internal/bedrockclient/provider_amazon.go +++ b/llms/bedrock/internal/bedrockclient/provider_amazon.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "errors" + "strings" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -160,6 +161,7 @@ func parseAmazonStreamingResponse(ctx context.Context, client *bedrockruntime.Cl defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder for e := range stream.Events() { if err = stream.Err(); err != nil { return nil, err @@ -177,7 +179,7 @@ func parseAmazonStreamingResponse(ctx context.Context, client *bedrockruntime.Cl if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.OutputText); err != nil { return nil, err } - contentchoices[0].Content += resp.OutputText + streamedContent.WriteString(resp.OutputText) } // Set completion reason @@ -204,6 +206,8 @@ func parseAmazonStreamingResponse(ctx context.Context, client *bedrockruntime.Cl return nil, err } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 7f61f91d6..4cc1b48dc 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -437,6 +437,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder var currentToolCall *streaming.ToolCall var toolCalls []llms.ToolCall var signature strings.Builder @@ -471,7 +472,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Delta.Text); err != nil { return nil, err } - contentchoices[0].Content += resp.Delta.Text + streamedContent.WriteString(resp.Delta.Text) case "thinking_delta": if resp.Delta.Thinking != "" { chunk := streaming.Chunk{ @@ -551,6 +552,8 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim contentchoices[0].Reasoning.Signature = []byte(signature.String()) } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/bedrock/internal/bedrockclient/provider_cohere.go b/llms/bedrock/internal/bedrockclient/provider_cohere.go index d4eb70b94..5685015c1 100644 --- a/llms/bedrock/internal/bedrockclient/provider_cohere.go +++ b/llms/bedrock/internal/bedrockclient/provider_cohere.go @@ -302,6 +302,7 @@ func parseCohereStreamingResponse(ctx context.Context, client *bedrockruntime.Cl defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder for e := range stream.Events() { if err = stream.Err(); err != nil { return nil, err @@ -319,7 +320,7 @@ func parseCohereStreamingResponse(ctx context.Context, client *bedrockruntime.Cl if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Text); err != nil { return nil, err } - contentchoices[0].Content += resp.Text + streamedContent.WriteString(resp.Text) } // Set completion reason @@ -338,6 +339,8 @@ func parseCohereStreamingResponse(ctx context.Context, client *bedrockruntime.Cl return nil, err } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/bedrock/internal/bedrockclient/provider_deepseek.go b/llms/bedrock/internal/bedrockclient/provider_deepseek.go index 2440ac132..7607ef782 100644 --- a/llms/bedrock/internal/bedrockclient/provider_deepseek.go +++ b/llms/bedrock/internal/bedrockclient/provider_deepseek.go @@ -147,6 +147,7 @@ func parseDeepSeekStreamingResponse(ctx context.Context, client *bedrockruntime. defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder for e := range stream.Events() { if err = stream.Err(); err != nil { return nil, err @@ -163,7 +164,7 @@ func parseDeepSeekStreamingResponse(ctx context.Context, client *bedrockruntime. if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Choices[0].Text); err != nil { return nil, err } - contentchoices[0].Content += resp.Choices[0].Text + streamedContent.WriteString(resp.Choices[0].Text) } if len(resp.Choices) > 0 && resp.Choices[0].StopReason != "" { @@ -176,6 +177,8 @@ func parseDeepSeekStreamingResponse(ctx context.Context, client *bedrockruntime. return nil, err } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index e04f02ba0..f3f302423 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "errors" + "strings" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -144,6 +145,7 @@ func parseMetaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder for e := range stream.Events() { if err = stream.Err(); err != nil { return nil, err @@ -161,7 +163,7 @@ func parseMetaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Generation); err != nil { return nil, err } - contentchoices[0].Content += resp.Generation + streamedContent.WriteString(resp.Generation) } // Set completion reason @@ -188,6 +190,8 @@ func parseMetaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie return nil, err } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 59174a437..896f23a9a 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "errors" + "strings" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -354,6 +355,7 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var streamedContent strings.Builder for e := range stream.Events() { if err = stream.Err(); err != nil { return nil, err @@ -371,7 +373,7 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.ContentBlockDelta.Delta.Text); err != nil { return nil, err } - contentchoices[0].Content += resp.ContentBlockDelta.Delta.Text + streamedContent.WriteString(resp.ContentBlockDelta.Delta.Text) } // Check for message start (contains input tokens) @@ -398,6 +400,8 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie return nil, err } + contentchoices[0].Content = streamedContent.String() + return &llms.ContentResponse{ Choices: contentchoices, }, nil diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 284b3724a..f26c55cb5 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -4,6 +4,7 @@ import ( "context" "errors" "os" + "strings" "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" @@ -215,6 +216,9 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C } defer streaming.CallWithDone(ctx, callOptions.StreamingFunc) //nolint:errcheck + var streamedContent strings.Builder + defer func() { langchainContentResponse.Choices[0].Content = streamedContent.String() }() + for chatResChunk := range chatResChan { chunkStr := "" langchainContentResponse.Choices[0].GenerationInfo["created"] = chatResChunk.Created @@ -223,7 +227,7 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C if chatResChunk.Error == nil { for _, choice := range chatResChunk.Choices { chunkStr += choice.Delta.Content - langchainContentResponse.Choices[0].Content += choice.Delta.Content + streamedContent.WriteString(choice.Delta.Content) if choice.FinishReason != "" { langchainContentResponse.Choices[0].StopReason = string(choice.FinishReason) langchainContentResponse.Choices[0].Truncated = llms.IsTruncated(string(choice.FinishReason)) diff --git a/llms/mistral/truncation_test.go b/llms/mistral/truncation_test.go index af7088d64..561bac2eb 100644 --- a/llms/mistral/truncation_test.go +++ b/llms/mistral/truncation_test.go @@ -2,6 +2,7 @@ package mistral import ( "context" + "errors" "fmt" "io" "net/http" @@ -183,3 +184,26 @@ func TestFailOnTruncationFiresOnTheStreamingPath(t *testing.T) { t.Fatalf("want the partial answer alongside the error, got %+v", resp) } } + +func TestStreamingKeepsWhatArrivedBeforeAFailingSink(t *testing.T) { + t.Parallel() + + model := streamingModelWithTrailingChunk(t) + sinkErr := errors.New("sink gave up") + sink := func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + return sinkErr + } + return nil + } + + resp, err := model.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(sink)) + if !errors.Is(err, sinkErr) { + t.Fatalf("want the sink's own error, got %v", err) + } + if resp == nil || resp.Choices[0].Content != "half an ans" { + t.Fatalf("want what arrived before the sink failed, got %+v", resp) + } +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index ab402550f..7164cff54 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -782,6 +782,7 @@ func combineStreamingChatResponse( var ( response ChatCompletionResponse splitters []reasoning.ChunkContentSplitter + accums []*streamedText toolCallNameCache = make(map[string]string) // Cache tool call names by ID for streaming ) @@ -802,6 +803,7 @@ func combineStreamingChatResponse( if len(response.Choices) <= idx { response.Choices = append(response.Choices, &ChatCompletionChoice{}) splitters = append(splitters, reasoning.NewChunkContentSplitter()) + accums = append(accums, &streamedText{}) } } // Get current updatable values @@ -816,9 +818,10 @@ func combineStreamingChatResponse( } content, reasoningContent := getChunkContent(choice, splitter) - responseChoice.Message.Content += content - responseChoice.Message.ReasoningContent += reasoningContent - responseChoice.Message.Refusal += choice.Delta.Refusal + accum := accums[choice.Index] + accum.content.WriteString(content) + accum.reasoningContent.WriteString(reasoningContent) + accum.refusal.WriteString(choice.Delta.Refusal) reasoning := &reasoning.ContentReasoning{Content: reasoningContent} if err := streaming.CallWithReasoning(ctx, payload.StreamingFunc, reasoning); err != nil { @@ -849,11 +852,28 @@ func combineStreamingChatResponse( } } + for idx, accum := range accums { + accum.flushInto(&response.Choices[idx].Message) + } + removeEmptyToolCalls(&response) return &response, nil } +// streamedText collects one choice's text across deltas. +type streamedText struct { + content strings.Builder + reasoningContent strings.Builder + refusal strings.Builder +} + +func (t *streamedText) flushInto(msg *ChatMessage) { + msg.Content = t.content.String() + msg.ReasoningContent = t.reasoningContent.String() + msg.Refusal = t.refusal.String() +} + func getChunkContent(choice StreamedChatResponseChunk, splitter reasoning.ChunkContentSplitter) (string, string) { content := choice.Delta.Content reasoningContent := choice.Delta.ReasoningContent From c831adc00de96300ad9cbaa77afa99eaba6605fa Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 15:14:00 +0300 Subject: [PATCH 152/618] perf(openai): stop parsing every streamed chunk twice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each chunk was fully unmarshalled into an any just to ask whether it was JSON, and then decoded again for real: 4.3us and 52 allocations per chunk where the decode alone costs 2.3us and 20. The shape check is now the cheap one it was meant to be, and a malformed chunk is still skipped rather than fatal — now under test. PAGI-143 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 12 +++++------- llms/openai/internal/openaiclient/chat_sse_test.go | 10 ++++++++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 7164cff54..e8fa01ca0 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -729,7 +729,7 @@ func parseStreamingChatResponse( if data == "[DONE]" { return } - if !isValidJSON(data) { + if !looksLikeJSONObject(data) { continue } @@ -762,13 +762,11 @@ func parseStreamingChatResponse( return combineStreamingChatResponse(ctx, payload, responseChan) } -func isValidJSON(data string) bool { - var dummy any +// looksLikeJSONObject must not parse the chunk: whether it really parses is +// answered by the decode that follows. +func looksLikeJSONObject(data string) bool { data = strings.Trim(data, " \n\r\t") - if !strings.HasPrefix(data, "{") || !strings.HasSuffix(data, "}") { - return false - } - return json.Unmarshal([]byte(data), &dummy) == nil + return strings.HasPrefix(data, "{") && strings.HasSuffix(data, "}") } //nolint:gocognit,cyclop diff --git a/llms/openai/internal/openaiclient/chat_sse_test.go b/llms/openai/internal/openaiclient/chat_sse_test.go index 1965128e5..566cb46d6 100644 --- a/llms/openai/internal/openaiclient/chat_sse_test.go +++ b/llms/openai/internal/openaiclient/chat_sse_test.go @@ -41,6 +41,16 @@ data: {"id":"1","object":"chat.completion.chunk","created":1234567890,"model":"t data: [DONE]`, expectedContent: "Test", }, + { + name: "a malformed chunk is skipped, not fatal", + body: `data: {"id":"1","object":"chat.completion.chunk","created":1234567890,"model":"test","choices":[{"index":0,"delta":{"content":"Half"},"finish_reason":null}]} +data: {"id":"1","choices":[{"index":0,"delta":{"content": +data: not json at all +data: {"id":"1","object":"chat.completion.chunk","created":1234567890,"model":"test","choices":[{"index":0,"delta":{"content":" answer"},"finish_reason":null}]} +data: {"id":"1","object":"chat.completion.chunk","created":1234567890,"model":"test","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]} +data: [DONE]`, + expectedContent: "Half answer", + }, { name: "other_sse_fields", body: `event: message From 84b2b7dec66f805855f5e4a875fbbb9edeffd74e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 15:37:41 +0300 Subject: [PATCH 153/618] test(ollama): default to the model the cassettes answer for The harness asked for gemma3:1b while every recorded interaction was made against qwen3:8b, so five tests failed on a replay miss rather than on anything the code did. Recording fresh ones is not possible here: the client signs each request with a local ed25519 key that this machine does not have. PAGI-143 Co-Authored-By: Claude Opus 5 --- llms/ollama/ollama_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/ollama/ollama_test.go b/llms/ollama/ollama_test.go index b78bf072a..c8065e1a4 100644 --- a/llms/ollama/ollama_test.go +++ b/llms/ollama/ollama_test.go @@ -37,7 +37,7 @@ func newTestClient(t *testing.T, opts ...Option) *LLM { }) // Default model for testing - ollamaModel := "gemma3:1b" + ollamaModel := "qwen3:8b" if envModel := os.Getenv("OLLAMA_TEST_MODEL"); envModel != "" { ollamaModel = envModel } From c61cb2dce0e01c03eaf8fcca572155f19a7b8033 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 15:52:12 +0300 Subject: [PATCH 154/618] fix(googleai): report a budget too small to start an answer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A max_tokens the model cannot even begin within makes the vendor close the stream without a single candidate — measured on gemini-2.5-flash, where 24 returns 200 with an empty body while 64 returns a candidate carrying MAX_TOKENS. With no candidate there is no stop reason to read, so the caller got an empty string, Truncated false and no error, indistinguishable from a model that chose to say nothing. Such a stream now ends in a typed ErrCodeTokenLimit, and the partial response still comes back beside it. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/googleai/empty_stream_test.go | 49 ++++++++++++++++++++++++++++++ llms/googleai/googleai.go | 18 +++++++++++ 2 files changed, 67 insertions(+) create mode 100644 llms/googleai/empty_stream_test.go diff --git a/llms/googleai/empty_stream_test.go b/llms/googleai/empty_stream_test.go new file mode 100644 index 000000000..dd8b53b07 --- /dev/null +++ b/llms/googleai/empty_stream_test.go @@ -0,0 +1,49 @@ +package googleai + +import ( + "bytes" + "context" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type emptyStream struct{} + +func (emptyStream) RoundTrip(r *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"text/event-stream"}}, + Body: io.NopCloser(bytes.NewReader(nil)), + Request: r, + }, nil +} + +func TestStreamWithoutCandidatesIsNotASilentSuccess(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: emptyStream{}})) + require.NoError(t, err) + + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + sink := func(context.Context, streaming.Chunk) error { return nil } + + resp, err := llm.GenerateContent(context.Background(), msgs, + llms.WithMaxTokens(24), llms.WithStreamingFunc(sink)) + + require.Error(t, err, "an empty answer with no stop reason must not look like a success") + var apiErr *llms.Error + require.ErrorAs(t, err, &apiErr) + assert.Equal(t, llms.ErrCodeTokenLimit, apiErr.Code) + require.NotNil(t, resp) + assert.Empty(t, resp.Choices[0].Content) +} diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index ea3cbec40..06536009f 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -493,6 +493,9 @@ StreamEnd: GenerationInfo: metadata, }}, } + if err := checkEmptyStream(lastCandidate, resp.Choices[0], opts); err != nil { + return resp, err + } // A callback that returned an error stopped the stream early; surface it // (matching the other providers) instead of masking it as a success. if streamErr != nil { @@ -1096,6 +1099,21 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in return nil, nil } +// checkEmptyStream reports an output limit too small to start an answer. +func checkEmptyStream(lastCandidate *genai.Candidate, choice *llms.ContentChoice, opts *llms.CallOptions) error { + if lastCandidate != nil || opts == nil || opts.MaxTokens == nil || *opts.MaxTokens <= 0 { + return nil + } + if choice.Content != "" || len(choice.ToolCalls) > 0 { + return nil + } + return &llms.Error{ + Code: llms.ErrCodeTokenLimit, + Message: "the model returned no candidates: max_tokens is too small to start an answer", + Provider: providerGoogleAI, + } +} + // thinkingLevelForEffort maps a reasoning effort to a Gemini thinking_level. // xhigh/max collapse to HIGH (the top level); an unset effort returns empty so // the caller falls back to a budget or the model default. From 329a803d6ea8b4432d9a05991188d81fc3916e2f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 16:30:28 +0300 Subject: [PATCH 155/618] fix(openai): pin the temperature by whether the model actually thinks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GPT-5.1, 5.2 and 5.4 were treated as reasoning from the start, so a caller's temperature was overwritten on requests where they do not reason at all. The same table then exempted them from the pin while thinking, which is where the vendor does refuse a custom value. Measured on the native door, one request per cell: without an effort these generations report zero reasoning tokens and accept temperature 0.2, while any real effort — low through xhigh — answers 400 "temperature does not support 0.2 with this model". GPT-5.5 reasons unasked (13 tokens) and refuses the same value until an explicit none turns thinking off. So there is no model that reasons and still takes a custom temperature: the exemption is gone, the pin follows thinkingRuns alone, and the generations that wait to be asked are named as opt-in. PAGI-132 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 2 +- llms/openai/sampling_matrix_test.go | 12 +++++++++--- llms/reasoning/name_forms_test.go | 4 ++-- llms/reasoning/openai_capability.go | 15 +++++++-------- llms/reasoning/reasoning.go | 3 +++ 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 3827f219b..b7d6d187a 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -372,7 +372,7 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO } switch { - case thinkingRuns(model, opts, wireEffort) && !reasoning.OpenAIAcceptsCustomTemperature(model): + case thinkingRuns(model, opts, wireEffort): if req.Temperature != nil { temperature := 1.0 req.Temperature = &temperature diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 2a9c06098..963077d5d 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -101,13 +101,19 @@ func TestSamplingMatrix(t *testing.T) { off := llms.WithReasoningDisabled() runSamplingCases(t, []samplingCase{{ - name: "accepting model keeps its temperature while thinking", + name: "an opt-in model keeps its temperature until asked to think", + model: "gpt-5.4", + opts: []llms.CallOption{temp, topP}, + present: []string{`"temperature":0.3`}, + absent: []string{`"reasoning_effort"`}, + }, { + name: "the same model is pinned once an effort is asked for", model: "gpt-5.4", opts: []llms.CallOption{temp, topP, high}, - present: []string{`"temperature":0.3`, `"reasoning_effort":"high"`}, + present: []string{`"temperature":1`, `"reasoning_effort":"high"`}, absent: []string{`"top_p"`}, }, { - name: "non-accepting model is pinned while thinking", + name: "a model that thinks from the start is pinned without being asked", model: "gpt-5.5", opts: []llms.CallOption{temp, topP, high}, present: []string{`"temperature":1`, `"reasoning_effort":"high"`}, diff --git a/llms/reasoning/name_forms_test.go b/llms/reasoning/name_forms_test.go index 0cf8eb93b..fa33aa9a7 100644 --- a/llms/reasoning/name_forms_test.go +++ b/llms/reasoning/name_forms_test.go @@ -8,9 +8,9 @@ import ( func capabilityAnswers(model string) string { caps := OpenAIReasoningCapsFor(model) return fmt.Sprintf( - "reasoning=%v likely=%v claude=%d openaiKnown=%v openaiEfforts=%v openaiTemp=%v gemini=%v optIn=%v off=%v", + "reasoning=%v likely=%v claude=%d openaiKnown=%v openaiEfforts=%v gemini=%v optIn=%v off=%v", IsReasoningModel(model), LikelyReasoningModel(model), ClaudeReasoningKindFor(model), - caps.Known, caps.Efforts, OpenAIAcceptsCustomTemperature(model), + caps.Known, caps.Efforts, GeminiSupportsThinking(model), ThinkingOptIn(model), ResolveOff(model, ProviderUnknown)) } diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index a164394a9..98f246e78 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -108,14 +108,9 @@ func openAIXHighCeiling(m string) bool { return false } -// OpenAIDisableEffort turns thinking off on the wire. It is not llms.ReasoningNone, -// which is the empty string and instead omits the field. -const OpenAIDisableEffort = "none" - -// OpenAIAcceptsCustomTemperature reports whether a reasoning model takes a -// temperature other than the default, so the caller's value is not overwritten -// on a model that honors it. -func OpenAIAcceptsCustomTemperature(model string) bool { +// OpenAIThinkingOptIn reports the generations that reason only when an effort +// asks them to. +func OpenAIThinkingOptIn(model string) bool { for _, form := range modelSpellings(model) { for _, generation := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { if hasGeneration(form, generation) { @@ -125,3 +120,7 @@ func OpenAIAcceptsCustomTemperature(model string) bool { } return false } + +// OpenAIDisableEffort turns thinking off on the wire. It is not llms.ReasoningNone, +// which is the empty string and instead omits the field. +const OpenAIDisableEffort = "none" diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 8de8f903e..183b994b2 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -329,6 +329,9 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // ThinkingOptIn reports whether the model reasons only when a request asks it to. func ThinkingOptIn(model string) bool { + if OpenAIThinkingOptIn(model) { + return true + } for _, form := range modelSpellings(model) { for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3"} { if strings.HasPrefix(form, prefix) { From d90e3948f63d480dcd9b58be715c897a15fb7cd6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 18:26:37 +0300 Subject: [PATCH 156/618] fix(llms): recognise the OpenAI spelling of a forced tool choice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ForcesToolUse only treated "any" and "tool" as demanding a tool call, so the OpenAI spellings — type "function" and the bare string "required" — read as "let the model decide". ForcedToolName inherits that verdict, and through it the Converse door turned a forced choice into toolChoice auto without reporting anything. PAGI-156 --- llms/turn.go | 8 +++++++- llms/turn_test.go | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/llms/turn.go b/llms/turn.go index a3825c1eb..afeb91f90 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -5,7 +5,13 @@ import "github.com/vxcontrol/langchaingo/llms/reasoning" // ForcesToolUse reports whether a tool choice demands a tool call rather than // leaving the decision to the model. func ForcesToolUse(choice any) bool { - forced := func(t string) bool { return t == "any" || t == "tool" } + forced := func(t string) bool { + switch t { + case "any", "tool", "function", "required": + return true + } + return false + } switch c := choice.(type) { case string: return forced(c) diff --git a/llms/turn_test.go b/llms/turn_test.go index 1314e1c47..a58cd9873 100644 --- a/llms/turn_test.go +++ b/llms/turn_test.go @@ -7,11 +7,14 @@ func TestForcesToolUseAcceptsEveryFormOfTheChoice(t *testing.T) { named := ToolChoice{Type: "tool", Function: &FunctionReference{Name: "calc"}} for _, choice := range []any{ - "any", "tool", + "any", "tool", "required", ToolChoice{Type: "any"}, named, &ToolChoice{Type: "any"}, &named, map[string]any{"type": "any"}, map[string]any{"type": "tool", "name": "calc"}, + ToolChoice{Type: "function", Function: &FunctionReference{Name: "calc"}}, + &ToolChoice{Type: "function", Function: &FunctionReference{Name: "calc"}}, + map[string]any{"type": "function", "function": map[string]any{"name": "calc"}}, } { if !ForcesToolUse(choice) { t.Errorf("%#v demands a tool call", choice) @@ -30,3 +33,31 @@ func TestForcesToolUseAcceptsEveryFormOfTheChoice(t *testing.T) { } } } + +func TestForcedToolNameReadsEveryNotation(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + choice any + want string + forced bool + }{ + {"anthropic named", ToolChoice{Type: "tool", Function: &FunctionReference{Name: "calc"}}, "calc", true}, + {"anthropic named map", map[string]any{"type": "tool", "name": "calc"}, "calc", true}, + {"anthropic any", ToolChoice{Type: "any"}, "", true}, + {"openai named", ToolChoice{Type: "function", Function: &FunctionReference{Name: "calc"}}, "calc", true}, + {"openai named pointer", &ToolChoice{Type: "function", Function: &FunctionReference{Name: "calc"}}, "calc", true}, + {"openai named map", map[string]any{"type": "function", "function": map[string]any{"name": "calc"}}, "calc", true}, + {"openai required", "required", "", true}, + {"auto", ToolChoice{Type: "auto"}, "", false}, + {"none", "none", "", false}, + {"absent", nil, "", false}, + } { + name, forced := ForcedToolName(tc.choice) + if name != tc.want || forced != tc.forced { + t.Errorf("%s: ForcedToolName() = (%q, %v), want (%q, %v)", + tc.name, name, forced, tc.want, tc.forced) + } + } +} From bce683d7e9d5d90e182a871709e5468a62ef78a1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 18:29:34 +0300 Subject: [PATCH 157/618] fix(anthropic): send the tool choice in the shape Messages accepts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door passed llms.ToolChoice straight into the request body, so a named choice arrived as {"type":"tool","function":{"name":...}} and the API answered 400 tool_choice.tool.name. Translate the forced forms — including the OpenAI spellings — into {"type":"tool","name":...} and {"type":"any"}, and leave every other choice untouched. PAGI-156 --- llms/anthropic/anthropicllm.go | 14 ++- .../internal/anthropicclient/messages.go | 6 ++ llms/anthropic/tool_choice_wire_test.go | 85 +++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/tool_choice_wire_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 9ae8d92cf..c1be15f05 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -308,7 +308,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag Temperature: temperature, TopP: topP, Tools: tools, - ToolChoice: opts.ToolChoice, + ToolChoice: anthropicToolChoice(opts.ToolChoice), Thinking: thinking, OutputConfig: outputConfig, BetaHeaders: betaHeaders, @@ -1011,3 +1011,15 @@ func appendIfMissing(slice []string, val string) []string { func getFloatPointer(f float64) *float64 { return &f } + +func anthropicToolChoice(choice any) any { + name, forced := llms.ForcedToolName(choice) + switch { + case forced && name != "": + return anthropicclient.ToolChoice{Type: "tool", Name: name} + case forced: + return anthropicclient.ToolChoice{Type: "any"} + default: + return choice + } +} diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index d16d2df4f..67cb98dfc 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -112,6 +112,12 @@ type Tool struct { CacheControl *CacheControl `json:"cache_control,omitempty"` } +// ToolChoice used for the request message payload. +type ToolChoice struct { + Type string `json:"type"` + Name string `json:"name,omitempty"` +} + // CacheControl represents Anthropic's prompt caching configuration. type CacheControl struct { Type string `json:"type"` diff --git a/llms/anthropic/tool_choice_wire_test.go b/llms/anthropic/tool_choice_wire_test.go new file mode 100644 index 000000000..07f97d35f --- /dev/null +++ b/llms/anthropic/tool_choice_wire_test.go @@ -0,0 +1,85 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestToolChoiceReachesTheWireInTheMessagesSpelling(t *testing.T) { + t.Parallel() + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + + for _, tc := range []struct { + name string + choice any + want map[string]any + }{ + { + "named in the Anthropic spelling", + llms.ToolChoice{Type: "tool", Function: &llms.FunctionReference{Name: "get_weather"}}, + map[string]any{"type": "tool", "name": "get_weather"}, + }, + { + "named as a raw map", + map[string]any{"type": "tool", "name": "get_weather"}, + map[string]any{"type": "tool", "name": "get_weather"}, + }, + { + "named in the OpenAI spelling", + llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}}, + map[string]any{"type": "tool", "name": "get_weather"}, + }, + { + "any tool", + llms.ToolChoice{Type: "any"}, + map[string]any{"type": "any"}, + }, + { + "required, the OpenAI spelling of any tool", + "required", + map[string]any{"type": "any"}, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + payload, _ := captureMessagesRequest(t, + llms.WithTools([]llms.Tool{tool}), + llms.WithToolChoice(tc.choice), + llms.WithMaxTokens(64)) + + assert.Equal(t, tc.want, payload["tool_choice"]) + }) + } + + t.Run("a choice the model owns is left alone", func(t *testing.T) { + t.Parallel() + + payload, _ := captureMessagesRequest(t, + llms.WithTools([]llms.Tool{tool}), + llms.WithToolChoice(map[string]any{"type": "auto"}), + llms.WithMaxTokens(64)) + + assert.Equal(t, map[string]any{"type": "auto"}, payload["tool_choice"]) + }) + + t.Run("no choice sends no field", func(t *testing.T) { + t.Parallel() + + payload, _ := captureMessagesRequest(t, + llms.WithTools([]llms.Tool{tool}), llms.WithMaxTokens(64)) + + _, present := payload["tool_choice"] + assert.False(t, present) + }) +} From 2c11ec105970f2ba27a1ac06743aed52c84fb122 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 18:30:54 +0300 Subject: [PATCH 158/618] fix(openai): send the tool choice in the shape chat completions accepts A named choice written the Anthropic way reached the wire as type "tool" and the API answered 400 Invalid value: 'tool', while {"type":"any"} lost its "function" object and answered 400 Missing required parameter. Translate the forced forms into type "function" and the bare "required", and leave every other choice untouched. PAGI-156 --- llms/openai/openaillm.go | 14 ++- llms/openai/tool_choice_wire_test.go | 128 +++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 llms/openai/tool_choice_wire_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index b7d6d187a..7dee36013 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -248,7 +248,7 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) FrequencyPenalty: opts.FrequencyPenalty, PresencePenalty: opts.PresencePenalty, RepetitionPenalty: opts.RepetitionPenalty, - ToolChoice: opts.ToolChoice, + ToolChoice: openaiToolChoice(opts.ToolChoice), FunctionCallBehavior: openaiclient.FunctionCallBehavior(opts.FunctionCallBehavior), Seed: opts.Seed, Metadata: opts.Metadata, @@ -641,3 +641,15 @@ func webSearchOptionsFromCallOptions(opts *llms.WebSearchOptions) *openaiclient. } return result } + +func openaiToolChoice(choice any) any { + name, forced := llms.ForcedToolName(choice) + switch { + case forced && name != "": + return llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: name}} + case forced: + return "required" + default: + return choice + } +} diff --git a/llms/openai/tool_choice_wire_test.go b/llms/openai/tool_choice_wire_test.go new file mode 100644 index 000000000..4ddafa504 --- /dev/null +++ b/llms/openai/tool_choice_wire_test.go @@ -0,0 +1,128 @@ +package openai + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func captureChatRequest(t *testing.T, callOpts ...llms.CallOption) map[string]any { + t.Helper() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o", + "choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}], + "usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, callOpts...); err != nil { + t.Fatalf("GenerateContent: %v", err) + } + + var payload map[string]any + if err := json.Unmarshal(body, &payload); err != nil { + t.Fatalf("decode request: %v", err) + } + return payload +} + +func TestToolChoiceReachesTheWireInTheChatCompletionsSpelling(t *testing.T) { + t.Parallel() + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + named := map[string]any{"type": "function", "function": map[string]any{"name": "get_weather"}} + + for _, tc := range []struct { + name string + choice any + want any + }{ + { + "named in the OpenAI spelling", + llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}}, + named, + }, + { + "named in the Anthropic spelling", + llms.ToolChoice{Type: "tool", Function: &llms.FunctionReference{Name: "get_weather"}}, + named, + }, + { + "named as a raw Anthropic map", + map[string]any{"type": "tool", "name": "get_weather"}, + named, + }, + { + "any tool, the Anthropic spelling", + llms.ToolChoice{Type: "any"}, + "required", + }, + { + "required", + "required", + "required", + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + payload := captureChatRequest(t, + llms.WithTools([]llms.Tool{tool}), llms.WithToolChoice(tc.choice)) + + if got := payload["tool_choice"]; !jsonEqual(got, tc.want) { + t.Fatalf("tool_choice = %#v, want %#v", got, tc.want) + } + }) + } + + t.Run("a choice the model owns is left alone", func(t *testing.T) { + t.Parallel() + + payload := captureChatRequest(t, + llms.WithTools([]llms.Tool{tool}), llms.WithToolChoice("auto")) + + if got := payload["tool_choice"]; got != "auto" { + t.Fatalf("tool_choice = %#v, want %q", got, "auto") + } + }) + + t.Run("no choice sends no field", func(t *testing.T) { + t.Parallel() + + payload := captureChatRequest(t, llms.WithTools([]llms.Tool{tool})) + + if _, present := payload["tool_choice"]; present { + t.Fatalf("tool_choice must stay absent, got %#v", payload["tool_choice"]) + } + }) +} + +func jsonEqual(a, b any) bool { + left, err := json.Marshal(a) + if err != nil { + return false + } + right, err := json.Marshal(b) + if err != nil { + return false + } + return string(left) == string(right) +} From 961dee29cbf53f178741e00f91a1e26f133ee3fb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 18:31:34 +0300 Subject: [PATCH 159/618] test(bedrock): pin the Converse wire for every tool-choice notation A forced choice written the OpenAI way used to reach Converse as toolChoice auto, so the model was free to skip the tool the caller had demanded and nothing reported it. Cover all five forcing notations plus the two that belong to the model. PAGI-156 --- llms/bedrock/tool_choice_notation_test.go | 105 ++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 llms/bedrock/tool_choice_notation_test.go diff --git a/llms/bedrock/tool_choice_notation_test.go b/llms/bedrock/tool_choice_notation_test.go new file mode 100644 index 000000000..36361a136 --- /dev/null +++ b/llms/bedrock/tool_choice_notation_test.go @@ -0,0 +1,105 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { + t.Parallel() + + const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + + capture := func(t *testing.T, choice any) string { + t.Helper() + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + opts := []llms.CallOption{llms.WithTools([]llms.Tool{tool})} + if choice != nil { + opts = append(opts, llms.WithToolChoice(choice)) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + for _, tc := range []struct { + name string + choice any + want string + }{ + { + "named in the Anthropic spelling", + llms.ToolChoice{Type: "tool", Function: &llms.FunctionReference{Name: "get_weather"}}, + `"toolChoice":{"tool":{"name":"get_weather"}}`, + }, + { + "named in the OpenAI spelling", + llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}}, + `"toolChoice":{"tool":{"name":"get_weather"}}`, + }, + { + "named as a raw OpenAI map", + map[string]any{"type": "function", "function": map[string]any{"name": "get_weather"}}, + `"toolChoice":{"tool":{"name":"get_weather"}}`, + }, + { + "any tool", + llms.ToolChoice{Type: "any"}, + `"toolChoice":{"any":{}}`, + }, + { + "required, the OpenAI spelling of any tool", + "required", + `"toolChoice":{"any":{}}`, + }, + { + "an unset choice stays with the model", + nil, + `"toolChoice":{"auto":{}}`, + }, + { + "an explicit auto stays with the model", + llms.ToolChoice{Type: "auto"}, + `"toolChoice":{"auto":{}}`, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + body := capture(t, tc.choice) + if !strings.Contains(body, tc.want) { + t.Fatalf("wire must carry %s, got body: %s", tc.want, body) + } + }) + } +} From 946f65523be09e17725890d74e86d35f1e062627 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 18:42:23 +0300 Subject: [PATCH 160/618] test(openai): cover the Claude turn guard for the OpenAI tool spelling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CheckClaudeTurnLimits refuses budget thinking alongside a forced tool, but it asks ForcesToolUse, which used to read the OpenAI spellings as "let the model decide" — so the turn reached the wire and Anthropic rejected it. PAGI-156 --- llms/openai/turn_limits_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/llms/openai/turn_limits_test.go b/llms/openai/turn_limits_test.go index bf980cd68..5228c05c9 100644 --- a/llms/openai/turn_limits_test.go +++ b/llms/openai/turn_limits_test.go @@ -60,6 +60,22 @@ func TestClaudeTurnLimitsOnTheOpenAITransport(t *testing.T) { } }) + t.Run("the OpenAI spelling of a forced tool is refused too", func(t *testing.T) { + t.Parallel() + for _, choice := range []any{ + "required", + llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "calc"}}, + map[string]any{"type": "function", "function": map[string]any{"name": "calc"}}, + } { + err := turnLimitErr(t, "claude-sonnet-4-5", askedFor("hi"), + thinking, llms.WithToolChoice(choice)) + var target *reasoning.ErrForcedToolUseWithThinking + if !errors.As(err, &target) { + t.Errorf("%#v demands a tool, want ErrForcedToolUseWithThinking, got %v", choice, err) + } + } + }) + t.Run("adaptive thinking carries no such limit", func(t *testing.T) { t.Parallel() if err := turnLimitErr(t, "claude-sonnet-5", askedFor("hi"), thinking, forced); err != nil { From 3fa95f2123c4f3332da6b53f2157383b81eeb3df Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 19:04:32 +0300 Subject: [PATCH 161/618] fix(anthropic): report the reasoning tokens the API sends GenerationInfo carried a hardcoded zero for ReasoningTokens, and the comment beside it claimed the vendor omits the count. It does not: the Messages response carries usage.output_tokens_details.thinking_tokens, and the recorded cassettes hold non-zero values for it. Parse the field on both the whole-answer and the message_delta paths and report it, the way the openai and googleai doors already do. PAGI-155 --- llms/anthropic/anthropicllm.go | 2 +- .../internal/anthropicclient/messages.go | 8 ++ llms/anthropic/reasoning_tokens_test.go | 102 ++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/reasoning_tokens_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index c1be15f05..5a0df2529 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -432,7 +432,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* "PromptTokens": result.Usage.InputTokens + result.Usage.CacheCreationInputTokens + result.Usage.CacheReadInputTokens, "CompletionTokens": result.Usage.OutputTokens, "TotalTokens": result.Usage.InputTokens + result.Usage.CacheCreationInputTokens + result.Usage.CacheReadInputTokens + result.Usage.OutputTokens, - "ReasoningTokens": 0, // Reasoning tokens are not included in the usage metrics + "ReasoningTokens": result.Usage.OutputTokensDetails.ThinkingTokens, "PromptCachedTokens": result.Usage.CacheReadInputTokens, "CacheReadInputTokens": result.Usage.CacheReadInputTokens, "CacheCreationInputTokens": result.Usage.CacheCreationInputTokens, diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index 67cb98dfc..ffe56e88d 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -248,6 +248,9 @@ type MessageResponsePayload struct { Ephemeral5mInputTokens int `json:"ephemeral_5m_input_tokens,omitempty"` Ephemeral1hInputTokens int `json:"ephemeral_1h_input_tokens,omitempty"` } `json:"cache_creation,omitempty"` + OutputTokensDetails struct { + ThinkingTokens int `json:"thinking_tokens,omitempty"` + } `json:"output_tokens_details,omitempty"` ServiceTier string `json:"service_tier,omitempty"` } `json:"usage"` } @@ -781,6 +784,11 @@ func handleMessageDeltaEvent(event map[string]interface{}, response MessageRespo if cacheReadTokens, err := getFloat64(usage, "cache_read_input_tokens"); err == nil { response.Usage.CacheReadInputTokens = int(cacheReadTokens) } + if details, ok := usage["output_tokens_details"].(map[string]interface{}); ok { + if thinkingTokens, err := getFloat64(details, "thinking_tokens"); err == nil { + response.Usage.OutputTokensDetails.ThinkingTokens = int(thinkingTokens) + } + } return response, nil } diff --git a/llms/anthropic/reasoning_tokens_test.go b/llms/anthropic/reasoning_tokens_test.go new file mode 100644 index 000000000..3e7a44da0 --- /dev/null +++ b/llms/anthropic/reasoning_tokens_test.go @@ -0,0 +1,102 @@ +package anthropic_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func answeringLLM(t *testing.T, contentType, body string) *anthropic.LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", contentType) + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-sonnet-4-5")) + require.NoError(t, err) + return llm +} + +func TestReasoningTokensReachTheCaller(t *testing.T) { + t.Parallel() + + ask := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + + t.Run("the whole answer carries the count", func(t *testing.T) { + t.Parallel() + + llm := answeringLLM(t, "application/json", `{"id":"msg_1","type":"message","role":"assistant", + "model":"claude-sonnet-4-5", + "content":[{"type":"thinking","thinking":"counting","signature":"c2ln"}, + {"type":"text","text":"391"}], + "stop_reason":"end_turn", + "usage":{"input_tokens":55,"output_tokens":352, + "output_tokens_details":{"thinking_tokens":169}}}`) + + resp, err := llm.GenerateContent(context.Background(), ask, llms.WithMaxTokens(2048)) + require.NoError(t, err) + + assert.Equal(t, 169, resp.Choices[0].GenerationInfo["ReasoningTokens"]) + assert.Equal(t, 352, resp.Choices[0].GenerationInfo["CompletionTokens"]) + }) + + t.Run("a streamed answer carries the same count", func(t *testing.T) { + t.Parallel() + + llm := answeringLLM(t, "text/event-stream", `event: message_start +data: {"type":"message_start","message":{"id":"msg_2","type":"message","role":"assistant","model":"claude-sonnet-4-5","content":[],"stop_reason":null,"usage":{"input_tokens":55,"output_tokens":1}}} + +event: content_block_start +data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"391"}} + +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":{"output_tokens":352,"output_tokens_details":{"thinking_tokens":169}}} + +event: message_stop +data: {"type":"message_stop"} +`) + + resp, err := llm.GenerateContent(context.Background(), ask, + llms.WithMaxTokens(2048), + llms.WithStreamingFunc(func(_ context.Context, _ streaming.Chunk) error { return nil })) + require.NoError(t, err) + + assert.Equal(t, 169, resp.Choices[0].GenerationInfo["ReasoningTokens"]) + }) + + t.Run("an answer without thinking reports none", func(t *testing.T) { + t.Parallel() + + llm := answeringLLM(t, "application/json", `{"id":"msg_3","type":"message","role":"assistant", + "model":"claude-sonnet-4-5","content":[{"type":"text","text":"ready"}], + "stop_reason":"end_turn", + "usage":{"input_tokens":16,"output_tokens":4, + "output_tokens_details":{"thinking_tokens":0}}}`) + + resp, err := llm.GenerateContent(context.Background(), ask, llms.WithMaxTokens(2048)) + require.NoError(t, err) + + assert.Equal(t, 0, resp.Choices[0].GenerationInfo["ReasoningTokens"]) + }) +} From daeca505e52cb056adab442df8f5730b86ee2d52 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 27 Aug 2026 19:09:45 +0300 Subject: [PATCH 162/618] fix(bedrock): report the token counts the legacy stream already carries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legacy Anthropic door never reported ReasoningTokens even though the InvokeModel body carries usage.output_tokens_details.thinking_tokens, and its streaming path read the terminal counts from message.usage, which the message_delta event does not have — so CompletionTokens came out zero on every streamed answer. Read both from the event's own usage object. The anonymous usage struct is now named, so the two tests that rebuilt it field-by-field no longer break when a field is added. Converse has no counterpart: the AWS SDK TokenUsage type carries no thinking field at all, so nothing is available to report there. PAGI-155 --- llms/bedrock/bedrockllm_test.go | 9 ++++ .../bedrockclient_integration_test.go | 15 +------ .../bedrockclient/bedrockclient_test.go | 15 +------ .../bedrockclient/provider_anthropic.go | 41 ++++++++++++------- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index 1d300d35a..8f5782608 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -1362,6 +1362,15 @@ func testReasoningWorkflow( //nolint:funlen return fmt.Errorf("empty reasoning content") } + if got, ok := choice.GenerationInfo["ReasoningTokens"].(int32); !ok || got <= 0 { + return fmt.Errorf("an answer that reasoned must report ReasoningTokens, got %v", + choice.GenerationInfo["ReasoningTokens"]) + } + if got, ok := choice.GenerationInfo["CompletionTokens"].(int32); !ok || got <= 0 { + return fmt.Errorf("an answer that reasoned must report CompletionTokens, got %v", + choice.GenerationInfo["CompletionTokens"]) + } + t.Logf("Reasoning workflow completed successfully for model: %s", model) return nil } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go index 03c10f36b..f8cecd1cb 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go @@ -175,16 +175,7 @@ func TestClient_CreateCompletion(t *testing.T) { }, }, StopReason: AnthropicCompletionReasonEndTurn, - Usage: struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - CacheCreationInputTokens int32 `json:"cache_creation_input_tokens,omitempty"` - CacheReadInputTokens int32 `json:"cache_read_input_tokens,omitempty"` - CacheCreation struct { - Ephemeral5mInputTokens int32 `json:"ephemeral_5m_input_tokens,omitempty"` - Ephemeral1hInputTokens int32 `json:"ephemeral_1h_input_tokens,omitempty"` - } `json:"cache_creation,omitempty"` - }{ + Usage: anthropicUsage{ InputTokens: 10, OutputTokens: 5, }, @@ -511,9 +502,7 @@ func TestClient_CreateCompletion_Streaming(t *testing.T) { }{ StopReason: AnthropicCompletionReasonEndTurn, }, - Usage: struct { - OutputTokens int32 `json:"output_tokens"` - }{ + Usage: anthropicUsage{ OutputTokens: 15, }, }, diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_test.go index a0b8ad634..3d3b2d870 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_test.go @@ -674,16 +674,7 @@ func TestAnthropicResponseParsing(t *testing.T) { }, StopReason: AnthropicCompletionReasonEndTurn, StopSequence: "", - Usage: struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - CacheCreationInputTokens int32 `json:"cache_creation_input_tokens,omitempty"` - CacheReadInputTokens int32 `json:"cache_read_input_tokens,omitempty"` - CacheCreation struct { - Ephemeral5mInputTokens int32 `json:"ephemeral_5m_input_tokens,omitempty"` - Ephemeral1hInputTokens int32 `json:"ephemeral_1h_input_tokens,omitempty"` - } `json:"cache_creation,omitempty"` - }{ + Usage: anthropicUsage{ InputTokens: 10, OutputTokens: 15, }, @@ -805,9 +796,7 @@ func TestAnthropicStreamingResponseChunk(t *testing.T) { }{ StopReason: AnthropicCompletionReasonEndTurn, }, - Usage: struct { - OutputTokens int32 `json:"output_tokens"` - }{ + Usage: anthropicUsage{ OutputTokens: 12, }, }, diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 4cc1b48dc..8469586a9 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -156,17 +156,22 @@ type anthropicTextGenerationOutput struct { // One of: ["end_turn", "max_tokens", "stop_sequence", "tool_use"] StopReason string `json:"stop_reason"` // Which custom stop sequence was matched, if any. - StopSequence string `json:"stop_sequence"` - Usage struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - CacheCreationInputTokens int32 `json:"cache_creation_input_tokens,omitempty"` - CacheReadInputTokens int32 `json:"cache_read_input_tokens,omitempty"` - CacheCreation struct { - Ephemeral5mInputTokens int32 `json:"ephemeral_5m_input_tokens,omitempty"` - Ephemeral1hInputTokens int32 `json:"ephemeral_1h_input_tokens,omitempty"` - } `json:"cache_creation,omitempty"` - } `json:"usage"` + StopSequence string `json:"stop_sequence"` + Usage anthropicUsage `json:"usage"` +} + +type anthropicUsage struct { + InputTokens int32 `json:"input_tokens"` + OutputTokens int32 `json:"output_tokens"` + CacheCreationInputTokens int32 `json:"cache_creation_input_tokens,omitempty"` + CacheReadInputTokens int32 `json:"cache_read_input_tokens,omitempty"` + CacheCreation struct { + Ephemeral5mInputTokens int32 `json:"ephemeral_5m_input_tokens,omitempty"` + Ephemeral1hInputTokens int32 `json:"ephemeral_1h_input_tokens,omitempty"` + } `json:"cache_creation,omitempty"` + OutputTokensDetails struct { + ThinkingTokens int32 `json:"thinking_tokens,omitempty"` + } `json:"output_tokens_details,omitempty"` } type anthropicContentBlock struct { @@ -358,6 +363,7 @@ func createAnthropicCompletion(ctx context.Context, "CacheCreationEphemeral5mInputTokens": output.Usage.CacheCreation.Ephemeral5mInputTokens, "CacheCreationEphemeral1hInputTokens": output.Usage.CacheCreation.Ephemeral1hInputTokens, "PromptCachedTokens": output.Usage.CacheReadInputTokens, + "ReasoningTokens": output.Usage.OutputTokensDetails.ThinkingTokens, }, } Contentchoices = append(Contentchoices, choice) @@ -406,9 +412,7 @@ type streamingCompletionResponseChunk struct { InvocationLatency int32 `json:"invocationLatency"` FirstByteLatency int32 `json:"firstByteLatency"` } `json:"amazon-bedrock-invocationMetrics"` - Usage struct { - OutputTokens int32 `json:"output_tokens"` - } `json:"usage"` + Usage anthropicUsage `json:"usage"` Message struct { ID string `json:"id"` Type string `json:"type"` @@ -526,11 +530,20 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim contentchoices[0].Truncated = llms.IsTruncated(resp.Delta.StopReason) inputTokens := resp.Message.Usage.InputTokens outputTokens := resp.Message.Usage.OutputTokens + if inputTokens == 0 { + inputTokens = resp.Usage.InputTokens + } + if outputTokens == 0 { + outputTokens = resp.Usage.OutputTokens + } if inputTokens == 0 { if v, ok := contentchoices[0].GenerationInfo["input_tokens"].(int32); ok { inputTokens = v } } + if thinkingTokens := resp.Usage.OutputTokensDetails.ThinkingTokens; thinkingTokens != 0 { + contentchoices[0].GenerationInfo["ReasoningTokens"] = thinkingTokens + } contentchoices[0].GenerationInfo["output_tokens"] = outputTokens contentchoices[0].GenerationInfo["CompletionTokens"] = outputTokens contentchoices[0].GenerationInfo["TotalTokens"] = inputTokens + outputTokens From 20acb4076adc0c2d9641ca1f119e6a616f0ee8bc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:13:22 +0300 Subject: [PATCH 163/618] fix(llms): translate every tool-choice spelling on both primary doors The doors only translated the forcing forms, so a caller asking the model to decide, or forbidding tools outright, sent the other door's notation: Anthropic answered 400 "tool_choice: Input should be an object" for the bare string, OpenAI answered 400 "Missing required parameter: tool_choice.function" for the object. One classifier now reads every spelling and each door writes its own. Forbidding tools then reached Anthropic for the first time and exposed the next layer: a turn that stops on end_turn carrying no content block is an answer the model declined to fill, not a failed request. Only a response that never reached a stop reason is empty now. PAGI-157 --- llms/anthropic/anthropicllm.go | 13 ++-- llms/anthropic/tool_choice_wire_test.go | 91 ++++++++++++++++++++++--- llms/openai/openaillm.go | 11 +-- llms/openai/tool_choice_wire_test.go | 28 +++++--- llms/turn.go | 88 ++++++++++++++++-------- 5 files changed, 178 insertions(+), 53 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 5a0df2529..33d0c55c5 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -367,7 +367,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* } return nil, refusal } - if len(result.Content) == 0 { + if len(result.Content) == 0 && result.StopReason == "" { return nil, ErrEmptyResponse } @@ -1013,12 +1013,15 @@ func getFloatPointer(f float64) *float64 { } func anthropicToolChoice(choice any) any { - name, forced := llms.ForcedToolName(choice) - switch { - case forced && name != "": + switch kind, name := llms.ClassifyToolChoice(choice); kind { + case llms.ToolChoiceNamed: return anthropicclient.ToolChoice{Type: "tool", Name: name} - case forced: + case llms.ToolChoiceAny: return anthropicclient.ToolChoice{Type: "any"} + case llms.ToolChoiceAuto: + return anthropicclient.ToolChoice{Type: "auto"} + case llms.ToolChoiceNone: + return anthropicclient.ToolChoice{Type: "none"} default: return choice } diff --git a/llms/anthropic/tool_choice_wire_test.go b/llms/anthropic/tool_choice_wire_test.go index 07f97d35f..3f6e65283 100644 --- a/llms/anthropic/tool_choice_wire_test.go +++ b/llms/anthropic/tool_choice_wire_test.go @@ -1,10 +1,16 @@ package anthropic_test import ( + "context" + "io" + "net/http" + "net/http/httptest" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" ) func TestToolChoiceReachesTheWireInTheMessagesSpelling(t *testing.T) { @@ -62,16 +68,28 @@ func TestToolChoiceReachesTheWireInTheMessagesSpelling(t *testing.T) { }) } - t.Run("a choice the model owns is left alone", func(t *testing.T) { - t.Parallel() + for _, tc := range []struct { + name string + choice any + want map[string]any + }{ + {"auto as a raw map", map[string]any{"type": "auto"}, map[string]any{"type": "auto"}}, + {"auto as a bare string", "auto", map[string]any{"type": "auto"}}, + {"auto as a struct", llms.ToolChoice{Type: "auto"}, map[string]any{"type": "auto"}}, + {"none as a bare string", "none", map[string]any{"type": "none"}}, + {"none as a struct", llms.ToolChoice{Type: "none"}, map[string]any{"type": "none"}}, + } { + t.Run("a choice the model owns reaches the wire as an object: "+tc.name, func(t *testing.T) { + t.Parallel() - payload, _ := captureMessagesRequest(t, - llms.WithTools([]llms.Tool{tool}), - llms.WithToolChoice(map[string]any{"type": "auto"}), - llms.WithMaxTokens(64)) + payload, _ := captureMessagesRequest(t, + llms.WithTools([]llms.Tool{tool}), + llms.WithToolChoice(tc.choice), + llms.WithMaxTokens(64)) - assert.Equal(t, map[string]any{"type": "auto"}, payload["tool_choice"]) - }) + assert.Equal(t, tc.want, payload["tool_choice"]) + }) + } t.Run("no choice sends no field", func(t *testing.T) { t.Parallel() @@ -83,3 +101,60 @@ func TestToolChoiceReachesTheWireInTheMessagesSpelling(t *testing.T) { assert.False(t, present) }) } + +func TestAFinishedTurnWithNoBlockIsAnAnswer(t *testing.T) { + t.Parallel() + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + + answer := func(t *testing.T, body string) (*llms.ContentResponse, error) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + return llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTools([]llms.Tool{tool}), + llms.WithToolChoice("none"), + llms.WithMaxTokens(512)) + } + + t.Run("no block but a stop reason answers", func(t *testing.T) { + t.Parallel() + + resp, err := answer(t, `{"id":"msg_1","type":"message","role":"assistant", + "model":"claude-haiku-4-5","content":[],"stop_reason":"end_turn", + "usage":{"input_tokens":550,"output_tokens":9}}`) + + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + assert.Empty(t, resp.Choices[0].Content) + assert.Equal(t, "end_turn", resp.Choices[0].StopReason) + assert.Equal(t, 9, resp.Choices[0].GenerationInfo["CompletionTokens"]) + }) + + t.Run("no block and no stop reason is still empty", func(t *testing.T) { + t.Parallel() + + _, err := answer(t, `{"id":"msg_2","type":"message","role":"assistant", + "model":"claude-haiku-4-5","content":[],"stop_reason":"", + "usage":{"input_tokens":1,"output_tokens":0}}`) + + require.ErrorIs(t, err, anthropic.ErrEmptyResponse) + }) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 7dee36013..2623bf7d3 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -643,12 +643,15 @@ func webSearchOptionsFromCallOptions(opts *llms.WebSearchOptions) *openaiclient. } func openaiToolChoice(choice any) any { - name, forced := llms.ForcedToolName(choice) - switch { - case forced && name != "": + switch kind, name := llms.ClassifyToolChoice(choice); kind { + case llms.ToolChoiceNamed: return llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: name}} - case forced: + case llms.ToolChoiceAny: return "required" + case llms.ToolChoiceAuto: + return "auto" + case llms.ToolChoiceNone: + return "none" default: return choice } diff --git a/llms/openai/tool_choice_wire_test.go b/llms/openai/tool_choice_wire_test.go index 4ddafa504..29ed09564 100644 --- a/llms/openai/tool_choice_wire_test.go +++ b/llms/openai/tool_choice_wire_test.go @@ -93,16 +93,28 @@ func TestToolChoiceReachesTheWireInTheChatCompletionsSpelling(t *testing.T) { }) } - t.Run("a choice the model owns is left alone", func(t *testing.T) { - t.Parallel() + for _, tc := range []struct { + name string + choice any + want string + }{ + {"auto as a bare string", "auto", "auto"}, + {"auto as a struct", llms.ToolChoice{Type: "auto"}, "auto"}, + {"auto as a raw map", map[string]any{"type": "auto"}, "auto"}, + {"none as a bare string", "none", "none"}, + {"none as a struct", llms.ToolChoice{Type: "none"}, "none"}, + } { + t.Run("a choice the model owns reaches the wire as a string: "+tc.name, func(t *testing.T) { + t.Parallel() - payload := captureChatRequest(t, - llms.WithTools([]llms.Tool{tool}), llms.WithToolChoice("auto")) + payload := captureChatRequest(t, + llms.WithTools([]llms.Tool{tool}), llms.WithToolChoice(tc.choice)) - if got := payload["tool_choice"]; got != "auto" { - t.Fatalf("tool_choice = %#v, want %q", got, "auto") - } - }) + if got := payload["tool_choice"]; got != tc.want { + t.Fatalf("tool_choice = %#v, want %q", got, tc.want) + } + }) + } t.Run("no choice sends no field", func(t *testing.T) { t.Parallel() diff --git a/llms/turn.go b/llms/turn.go index afeb91f90..e6479f2fd 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -2,51 +2,83 @@ package llms import "github.com/vxcontrol/langchaingo/llms/reasoning" -// ForcesToolUse reports whether a tool choice demands a tool call rather than -// leaving the decision to the model. -func ForcesToolUse(choice any) bool { - forced := func(t string) bool { +// ToolChoiceKind is what a tool choice asks of the model, apart from the +// spelling the door expects. Doors translate it into their own wire shape. +type ToolChoiceKind int + +const ( + // ToolChoiceUnset means the caller picked nothing, so the door sends nothing. + ToolChoiceUnset ToolChoiceKind = iota + // ToolChoiceAuto leaves the decision to the model. + ToolChoiceAuto + // ToolChoiceNone forbids every tool. + ToolChoiceNone + // ToolChoiceAny demands a tool call without naming one. + ToolChoiceAny + // ToolChoiceNamed demands the tool the caller named. + ToolChoiceNamed +) + +// ClassifyToolChoice reads every spelling the doors accept and reports what was +// asked, naming the tool when the caller picked one. +func ClassifyToolChoice(choice any) (ToolChoiceKind, string) { + kindOf := func(t string, name string) (ToolChoiceKind, string) { switch t { - case "any", "tool", "function", "required": - return true + case "auto": + return ToolChoiceAuto, "" + case "none": + return ToolChoiceNone, "" + case "tool", "function": + if name != "" { + return ToolChoiceNamed, name + } + return ToolChoiceAny, "" + case "any", "required": + return ToolChoiceAny, "" } - return false + return ToolChoiceUnset, "" } + switch c := choice.(type) { case string: - return forced(c) + return kindOf(c, "") case ToolChoice: - return forced(c.Type) + return kindOf(c.Type, functionName(c.Function)) case *ToolChoice: - return c != nil && forced(c.Type) + if c == nil { + return ToolChoiceUnset, "" + } + return kindOf(c.Type, functionName(c.Function)) case map[string]any: t, _ := c["type"].(string) - return forced(t) + name, _ := c["name"].(string) + if fn, ok := c["function"].(map[string]any); ok { + name, _ = fn["name"].(string) + } + return kindOf(t, name) } - return false + return ToolChoiceUnset, "" +} + +// ForcesToolUse reports whether a tool choice demands a tool call rather than +// leaving the decision to the model. +func ForcesToolUse(choice any) bool { + kind, _ := ClassifyToolChoice(choice) + return kind == ToolChoiceAny || kind == ToolChoiceNamed } // ForcedToolName reports whether the choice demands a tool call, and names the // tool when the caller picked one. An empty name with forced=true means "any // tool", which every door spells differently. func ForcedToolName(choice any) (name string, forced bool) { - if !ForcesToolUse(choice) { - return "", false - } - switch c := choice.(type) { - case ToolChoice: - return functionName(c.Function), true - case *ToolChoice: - return functionName(c.Function), true - case map[string]any: - if fn, ok := c["function"].(map[string]any); ok { - n, _ := fn["name"].(string) - return n, true - } - n, _ := c["name"].(string) - return n, true + kind, name := ClassifyToolChoice(choice) + switch kind { + case ToolChoiceNamed: + return name, true + case ToolChoiceAny: + return "", true } - return "", true + return "", false } func functionName(fn *FunctionReference) string { From a0c54a4d48b3858241348cae59e1cdb77f7e25e3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:14:29 +0300 Subject: [PATCH 164/618] fix(bedrock): honor a forbidden tool choice on the Converse door Converse has no member for "no tool may be called", so the door mapped it to auto and the model stayed free to call a tool the caller had forbidden. Offer no tools at all instead, which is the only shape that carries the caller's intent. PAGI-157 --- .../bedrockclient/bedrockclient_converse.go | 10 ++++------ llms/bedrock/tool_choice_notation_test.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 1bdd069fd..dc83a2045 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -143,8 +143,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti converseInput.System = systemPrompts } - // Add tool configuration if tools are provided - if len(input.Tools) > 0 { + if kind, _ := llms.ClassifyToolChoice(input.ToolChoice); len(input.Tools) > 0 && kind != llms.ToolChoiceNone { toolConfig, err := c.convertToolsToToolConfig(input.Tools, input.ToolChoice) if err != nil { return nil, fmt.Errorf("failed to convert tools: %w", err) @@ -639,11 +638,10 @@ func (c *ConverseClient) convertToolsToToolConfig(tools []llms.Tool, choice any) // converseToolChoice carries the caller's choice to the wire. An unset or // unrecognized choice leaves the decision to the model. func converseToolChoice(choice any) types.ToolChoice { - name, forced := llms.ForcedToolName(choice) - switch { - case forced && name != "": + switch kind, name := llms.ClassifyToolChoice(choice); kind { + case llms.ToolChoiceNamed: return &types.ToolChoiceMemberTool{Value: types.SpecificToolChoice{Name: &name}} - case forced: + case llms.ToolChoiceAny: return &types.ToolChoiceMemberAny{} default: return &types.ToolChoiceMemberAuto{} diff --git a/llms/bedrock/tool_choice_notation_test.go b/llms/bedrock/tool_choice_notation_test.go index 36361a136..18ebf70aa 100644 --- a/llms/bedrock/tool_choice_notation_test.go +++ b/llms/bedrock/tool_choice_notation_test.go @@ -102,4 +102,22 @@ func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { } }) } + + for _, tc := range []struct { + name string + choice any + }{ + {"none as a bare string", "none"}, + {"none as a struct", llms.ToolChoice{Type: "none"}}, + {"none as a raw map", map[string]any{"type": "none"}}, + } { + t.Run("forbidding tools offers the model none: "+tc.name, func(t *testing.T) { + t.Parallel() + + body := capture(t, tc.choice) + if strings.Contains(body, `"toolConfig"`) { + t.Fatalf("a forbidden tool must not be offered at all, got body: %s", body) + } + }) + } } From 4ebf6ba31c26afa692efd782d345386880b29de8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:16:15 +0300 Subject: [PATCH 165/618] fix(bedrock): report the streamed Converse token counters The streaming door never handled the terminal metadata event, so every streamed answer came back with an empty GenerationInfo while the whole answer carried prompt, completion, total and both cache counters. Both paths now write them through one mapper, so a key added for one door cannot go missing on the other. PAGI-157 --- llms/bedrock/converse_stream_usage_test.go | 54 +++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 66 +++++++++++-------- 2 files changed, 91 insertions(+), 29 deletions(-) create mode 100644 llms/bedrock/converse_stream_usage_test.go diff --git a/llms/bedrock/converse_stream_usage_test.go b/llms/bedrock/converse_stream_usage_test.go new file mode 100644 index 000000000..123febb4d --- /dev/null +++ b/llms/bedrock/converse_stream_usage_test.go @@ -0,0 +1,54 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestConverseStreamReportsTheSameCountersAsTheWholeAnswer(t *testing.T) { + t.Parallel() + + const usage = `{"usage":{"inputTokens":13,"outputTokens":304,"totalTokens":3919,` + + `"cacheReadInputTokens":3602,"cacheWriteInputTokens":300}}` + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"text":"ok"}}`) + writeConverseEvent(t, w, enc, "contentBlockStop", `{"contentBlockIndex":0}`) + writeConverseEvent(t, w, enc, "messageStop", `{"stopReason":"end_turn"}`) + writeConverseEvent(t, w, enc, "metadata", usage) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0"), bedrock.WithConverseAPI()) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(_ context.Context, _ streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + info := resp.Choices[0].GenerationInfo + assert.Equal(t, int32(304), info["CompletionTokens"]) + assert.Equal(t, int32(3919), info["TotalTokens"]) + assert.Equal(t, int32(3602), info["CacheReadInputTokens"]) + assert.Equal(t, int32(3602), info["PromptCachedTokens"]) + assert.Equal(t, int32(300), info["CacheCreationInputTokens"]) + assert.Equal(t, int32(3915), info["PromptTokens"]) +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index dc83a2045..c51932e1d 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -708,6 +708,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response var signature bytes.Buffer var toolCalls []llms.ToolCall var stopReason string + var usage *types.TokenUsage currentToolCalls := make(map[int32]*converseToolCallBuilder) // Track streaming tool calls by content block index defer streaming.CallWithDone(ctx, callback) @@ -790,6 +791,8 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response toolCalls = append(toolCalls, currentToolCalls[index].toolCall()) } currentToolCalls = nil + case *types.ConverseStreamOutputMemberMetadata: + usage = e.Value.Usage } } @@ -810,6 +813,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response StopReason: stopReason, Truncated: llms.IsTruncated(stopReason), } + applyConverseUsage(choice.GenerationInfo, usage) result := &llms.ContentResponse{ Choices: []*llms.ContentChoice{choice}, @@ -818,6 +822,38 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response return result, nil } +func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { + if info == nil || usage == nil { + return + } + + var promptTokens int32 + if usage.InputTokens != nil { + info["input_tokens"] = *usage.InputTokens + promptTokens += *usage.InputTokens + } + if usage.OutputTokens != nil { + info["output_tokens"] = *usage.OutputTokens + info["CompletionTokens"] = *usage.OutputTokens + } + if usage.TotalTokens != nil { + info["total_tokens"] = *usage.TotalTokens + info["TotalTokens"] = *usage.TotalTokens + } + if usage.CacheReadInputTokens != nil { + info["cacheReadInputTokens"] = *usage.CacheReadInputTokens + info["CacheReadInputTokens"] = *usage.CacheReadInputTokens + info["PromptCachedTokens"] = *usage.CacheReadInputTokens + promptTokens += *usage.CacheReadInputTokens + } + if usage.CacheWriteInputTokens != nil { + info["cacheWriteInputTokens"] = *usage.CacheWriteInputTokens + info["CacheCreationInputTokens"] = *usage.CacheWriteInputTokens + promptTokens += *usage.CacheWriteInputTokens + } + info["PromptTokens"] = promptTokens +} + func (c *ConverseClient) processReasoning(reasoningContent string, signature []byte) *reasoning.ContentReasoning { if reasoningContent == "" && len(signature) == 0 { return nil @@ -897,35 +933,7 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver choice.StopReason = string(response.StopReason) choice.Truncated = llms.IsTruncated(string(response.StopReason)) - // Add usage information - if response.Usage != nil { - var promptTokens int32 - if response.Usage.InputTokens != nil { - choice.GenerationInfo["input_tokens"] = *response.Usage.InputTokens - promptTokens += *response.Usage.InputTokens - } - if response.Usage.OutputTokens != nil { - choice.GenerationInfo["output_tokens"] = *response.Usage.OutputTokens - choice.GenerationInfo["CompletionTokens"] = *response.Usage.OutputTokens - } - if response.Usage.TotalTokens != nil { - choice.GenerationInfo["total_tokens"] = *response.Usage.TotalTokens - choice.GenerationInfo["TotalTokens"] = *response.Usage.TotalTokens - } - // Add cache metrics if available - if response.Usage.CacheReadInputTokens != nil { - choice.GenerationInfo["cacheReadInputTokens"] = *response.Usage.CacheReadInputTokens - choice.GenerationInfo["CacheReadInputTokens"] = *response.Usage.CacheReadInputTokens - choice.GenerationInfo["PromptCachedTokens"] = *response.Usage.CacheReadInputTokens - promptTokens += *response.Usage.CacheReadInputTokens - } - if response.Usage.CacheWriteInputTokens != nil { - choice.GenerationInfo["cacheWriteInputTokens"] = *response.Usage.CacheWriteInputTokens - choice.GenerationInfo["CacheCreationInputTokens"] = *response.Usage.CacheWriteInputTokens - promptTokens += *response.Usage.CacheWriteInputTokens - } - choice.GenerationInfo["PromptTokens"] = promptTokens - } + applyConverseUsage(choice.GenerationInfo, response.Usage) return &llms.ContentResponse{ Choices: []*llms.ContentChoice{choice}, From 5bfc4105aa049f071bd2c94640aaef0f98091c0f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:23:06 +0300 Subject: [PATCH 166/618] fix(llms): hand back what the stream delivered when a consumer gives up A StreamingFunc that returns an error stops the read, and four paths threw away everything the model had already sent: the Anthropic client answered its own event channel with a nil payload, the Converse door returned nil past three callback sites and its dispatch dropped the rest, ollama copied its accumulators into the response only on the terminal chunk, and a cache hit discarded a response it was holding. The branch had already settled this contract on googleai, vertex and mistral; the remaining doors now return the assembled answer alongside the error too. PAGI-157 --- llms/anthropic/anthropicllm.go | 10 ++- .../anthropicclient/anthropicclient.go | 2 +- .../internal/anthropicclient/messages.go | 8 +- llms/anthropic/partial_stream_test.go | 77 +++++++++++++++++++ llms/bedrock/converse_partial_stream_test.go | 63 +++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 15 ++-- llms/cache/cache.go | 4 +- llms/ollama/ollamallm.go | 14 +++- 8 files changed, 181 insertions(+), 12 deletions(-) create mode 100644 llms/anthropic/partial_stream_test.go create mode 100644 llms/bedrock/converse_partial_stream_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 33d0c55c5..89ab633fe 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -316,7 +316,15 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag }) if err != nil { // The closing callback is emitted once by GenerateContent's deferred handler. - return nil, fmt.Errorf("anthropic: failed to create message: %w", err) + wrapped := fmt.Errorf("anthropic: failed to create message: %w", err) + if result == nil { + return nil, wrapped + } + partial, buildErr := processAnthropicResponse(result) + if buildErr != nil { + return nil, wrapped + } + return partial, wrapped } response, err := processAnthropicResponse(result) if err != nil { diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index be675b8b4..d753aae33 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -187,7 +187,7 @@ func (c *Client) CreateMessage(ctx context.Context, r *MessageRequest) (*Message OutputConfig: r.OutputConfig, }, r.BetaHeaders) if err != nil { - return nil, err + return resp, err } return resp, nil } diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index ffe56e88d..eee1c782b 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -416,7 +416,8 @@ func parseStreamingMessageResponse( } response, err = processStreamEvent(ctx, event, payload, response, eventChan) if err != nil { - eventChan <- MessageEvent{Response: nil, Err: fmt.Errorf("failed to process stream event: %w", err)} + partial := response + eventChan <- MessageEvent{Response: &partial, Err: fmt.Errorf("failed to process stream event: %w", err)} return } } @@ -428,7 +429,10 @@ func parseStreamingMessageResponse( var lastResponse *MessageResponsePayload for event := range eventChan { if event.Err != nil { - return nil, event.Err + if event.Response != nil { + lastResponse = event.Response + } + return lastResponse, event.Err } lastResponse = event.Response } diff --git a/llms/anthropic/partial_stream_test.go b/llms/anthropic/partial_stream_test.go new file mode 100644 index 000000000..549840d51 --- /dev/null +++ b/llms/anthropic/partial_stream_test.go @@ -0,0 +1,77 @@ +package anthropic_test + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestAConsumerThatGivesUpStillGetsWhatArrived(t *testing.T) { + t.Parallel() + + const events = `event: message_start +data: {"type":"message_start","message":{"id":"msg_1","type":"message","role":"assistant","model":"claude-haiku-4-5","content":[],"stop_reason":null,"usage":{"input_tokens":10,"output_tokens":1}}} + +event: content_block_start +data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"sixty "}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"rooms "}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"are free"}} + +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":{"output_tokens":9}} + +event: message_stop +data: {"type":"message_stop"} +` + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, events) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + gaveUp := errors.New("consumer gave up") + delivered := 0 + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithMaxTokens(64), + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "the text already delivered must travel with the error") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms ", resp.Choices[0].Content) +} diff --git a/llms/bedrock/converse_partial_stream_test.go b/llms/bedrock/converse_partial_stream_test.go new file mode 100644 index 000000000..df120de39 --- /dev/null +++ b/llms/bedrock/converse_partial_stream_test.go @@ -0,0 +1,63 @@ +package bedrock_test + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestConverseStreamKeepsWhatArrivedWhenTheConsumerGivesUp(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"text":"sixty "}}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"text":"rooms "}}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"text":"are free"}}`) + writeConverseEvent(t, w, enc, "contentBlockStop", `{"contentBlockIndex":0}`) + writeConverseEvent(t, w, enc, "messageStop", `{"stopReason":"end_turn"}`) + writeConverseEvent(t, w, enc, "metadata", + `{"usage":{"inputTokens":10,"outputTokens":9,"totalTokens":19}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0"), bedrock.WithConverseAPI()) + + gaveUp := errors.New("consumer gave up") + delivered := 0 + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "the text already delivered must travel with the error") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms ", resp.Choices[0].Content) +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index c51932e1d..39de38ff9 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -52,7 +52,7 @@ func (c *ConverseClient) CreateCompletionConverse(ctx context.Context, input *Co resp, err = c.handleNonStreamingResponse(ctx, converseInput) } if err != nil { - return nil, err + return resp, err } if err := validateConverseStructuredOutput(input, resp); err != nil { return resp, err @@ -708,6 +708,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response var signature bytes.Buffer var toolCalls []llms.ToolCall var stopReason string + var streamErr error var usage *types.TokenUsage currentToolCalls := make(map[int32]*converseToolCallBuilder) // Track streaming tool calls by content block index @@ -716,6 +717,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response stream := response.GetStream() defer stream.Close() +DoStream: for event := range stream.Events() { switch e := event.(type) { case *types.ConverseStreamOutputMemberContentBlockDelta: @@ -729,7 +731,8 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response Content: delta.Value, } if err := callback(ctx, chunk); err != nil { - return nil, err + streamErr = err + break DoStream } } case *types.ContentBlockDeltaMemberReasoningContent: @@ -742,7 +745,8 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response Reasoning: &reasoning.ContentReasoning{Content: block.Value}, } if err := callback(ctx, chunk); err != nil { - return nil, err + streamErr = err + break DoStream } case *types.ReasoningContentBlockDeltaMemberSignature: if len(block.Value) > 0 { @@ -777,7 +781,8 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response ToolCall: builder.streamingCall(), } if err := callback(ctx, chunk); err != nil { - return nil, err + streamErr = err + break DoStream } } toolCalls = append(toolCalls, builder.toolCall()) @@ -819,7 +824,7 @@ func (c *ConverseClient) processStreamingResponse(ctx context.Context, response Choices: []*llms.ContentChoice{choice}, } - return result, nil + return result, streamErr } func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { diff --git a/llms/cache/cache.go b/llms/cache/cache.go index 19b105a29..385921165 100644 --- a/llms/cache/cache.go +++ b/llms/cache/cache.go @@ -65,11 +65,11 @@ func (c *Cacher) GenerateContent(ctx context.Context, messages []llms.MessageCon if len(response.Choices) > 0 { // only stream the first choice. if err := streaming.CallWithText(ctx, opts.StreamingFunc, response.Choices[0].Content); err != nil { - return nil, err + return response, err } } if err := streaming.CallWithDone(ctx, opts.StreamingFunc); err != nil { - return nil, err + return response, err } return response, nil diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 096cdec95..ec3d7ad87 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -164,7 +164,11 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten resp, err := o.handleChat(ctx, req, opts) if err != nil { - return nil, err + partial := o.createContentResponse(resp) + if len(partial.Choices) == 0 || partial.Choices[0].Content == "" { + return nil, err + } + return partial, err } response = o.createContentResponse(resp) @@ -433,6 +437,14 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca } err := o.client.Chat(ctx, req, fn) + if err != nil && resp.Message.Content == "" && resp.Message.Thinking == "" && len(resp.Message.ToolCalls) == 0 { + resp.Message = api.Message{ + Role: "assistant", + Content: streamedResponse.String(), + Thinking: streamedThinking.String(), + ToolCalls: streamedToolCalls, + } + } return resp, err } From d13e3ba89910885bf747871a357d2f3e2d08f0b7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:23:56 +0300 Subject: [PATCH 167/618] fix(huggingface): return the truncated answer and report the failure The door was the only one of ten that answered a truncation opt-in with a bare error, dropping the text the model had already produced, and it was the only error path in the file that never reached HandleLLMError. Its own test wrote the response into a blank, so neither gap could redden it. PAGI-157 --- llms/huggingface/huggingfacellm.go | 5 ++++- llms/huggingface/truncation_test.go | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 45b45d6c2..b713e65ac 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -75,7 +75,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten }, } if err := llms.CheckTruncation(resp, *opts); err != nil { - return nil, err + if o.CallbacksHandler != nil { + o.CallbacksHandler.HandleLLMError(ctx, err) + } + return resp, err } return resp, nil } diff --git a/llms/huggingface/truncation_test.go b/llms/huggingface/truncation_test.go index c6119f067..d95c95a1c 100644 --- a/llms/huggingface/truncation_test.go +++ b/llms/huggingface/truncation_test.go @@ -3,6 +3,7 @@ package huggingface import ( "context" "errors" + "github.com/vxcontrol/langchaingo/callbacks" "io" "net/http" "net/http/httptest" @@ -106,7 +107,10 @@ func TestFailOnTruncationOnTheInferenceDoor(t *testing.T) { if err != nil { t.Fatalf("New() error: %v", err) } - _, err = llm.GenerateContent(context.Background(), + handler := &recordingCallbacks{} + llm.CallbacksHandler = handler + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, llms.WithFailOnTruncation()) if err == nil { @@ -116,4 +120,20 @@ func TestFailOnTruncationOnTheInferenceDoor(t *testing.T) { if !errors.As(err, &apiErr) || apiErr.Code != llms.ErrCodeTruncated { t.Fatalf("expected ErrCodeTruncated, got: %v", err) } + if resp == nil || len(resp.Choices) == 0 { + t.Fatal("the partial answer must travel with the error, as it does on every other door") + } + if got := resp.Choices[0].Content; got != "partial" { + t.Fatalf("partial answer = %q, want %q", got, "partial") + } + if handler.errors != 1 { + t.Fatalf("HandleLLMError calls = %d, want 1", handler.errors) + } +} + +type recordingCallbacks struct { + callbacks.SimpleHandler + errors int } + +func (h *recordingCallbacks) HandleLLMError(context.Context, error) { h.errors++ } From 90555e86c980d8283516c51d29fb8390689b4cdc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:28:04 +0300 Subject: [PATCH 168/618] fix(googleai): tell a blocked prompt from a budget that is too small A stream that carries no candidate was always reported as ErrCodeTokenLimit with "max_tokens is too small to start an answer", so a caller whose prompt was rejected by the safety filter read advice to raise a budget that was already at the default 16384 and could loop raising it. The prompt feedback riding the same chunks now yields ErrCodeContentFilter and names the reason. On the vertex twin the terminal read dereferenced MergedResponse() without a guard; a scratch program against the pinned SDK confirms it is nil until the first successful Next() and that reading UsageMetadata off it panics, so a stream that ends with no message crashed the caller instead of returning. An iterator error other than Done also threw away the candidate collected so far, which the callback path in the same function already returns. PAGI-157 --- llms/googleai/empty_stream_test.go | 33 ++++++++++++++++++++++++++++++ llms/googleai/googleai.go | 30 ++++++++++++++++++++++++--- llms/googleai/vertex/vertex.go | 16 +++++++++++---- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/llms/googleai/empty_stream_test.go b/llms/googleai/empty_stream_test.go index dd8b53b07..feed6fbe7 100644 --- a/llms/googleai/empty_stream_test.go +++ b/llms/googleai/empty_stream_test.go @@ -47,3 +47,36 @@ func TestStreamWithoutCandidatesIsNotASilentSuccess(t *testing.T) { require.NotNil(t, resp) assert.Empty(t, resp.Choices[0].Content) } + +type blockedPromptStream struct{} + +func (blockedPromptStream) RoundTrip(r *http.Request) (*http.Response, error) { + const event = "data: {\"promptFeedback\":{\"blockReason\":\"SAFETY\"," + + "\"blockReasonMessage\":\"the prompt was rejected\"},\"candidates\":[]}\n\n" + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"text/event-stream"}}, + Body: io.NopCloser(bytes.NewReader([]byte(event))), + Request: r, + }, nil +} + +func TestABlockedPromptIsNotBlamedOnTheBudget(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithRest(), WithAPIKey("test-key"), WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: blockedPromptStream{}})) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithMaxTokens(16384), + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + var apiErr *llms.Error + require.ErrorAs(t, err, &apiErr) + assert.Equal(t, llms.ErrCodeContentFilter, apiErr.Code, + "a blocked prompt must not be reported as a budget that is too small") + assert.Contains(t, apiErr.Message, "SAFETY") +} diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 06536009f..f1d4ed13e 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -346,6 +346,7 @@ func (g *GoogleAI) generateStreamingContent( var thoughtSignature []byte var lastUsageMetadata *genai.GenerateContentResponseUsageMetadata var lastCandidate *genai.Candidate + var blockReason *genai.GenerateContentResponsePromptFeedback var streamErr error // Trying to keep the same ID for the same tool call name @@ -371,6 +372,10 @@ func (g *GoogleAI) generateStreamingContent( lastUsageMetadata = chunk.UsageMetadata } + if fb := chunk.PromptFeedback; fb != nil && fb.BlockReason != "" { + blockReason = fb + } + if len(chunk.Candidates) == 0 { continue } @@ -493,7 +498,7 @@ StreamEnd: GenerationInfo: metadata, }}, } - if err := checkEmptyStream(lastCandidate, resp.Choices[0], opts); err != nil { + if err := checkEmptyStream(lastCandidate, blockReason, resp.Choices[0], opts); err != nil { return resp, err } // A callback that returned an error stopped the stream early; surface it @@ -1100,13 +1105,32 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in } // checkEmptyStream reports an output limit too small to start an answer. -func checkEmptyStream(lastCandidate *genai.Candidate, choice *llms.ContentChoice, opts *llms.CallOptions) error { - if lastCandidate != nil || opts == nil || opts.MaxTokens == nil || *opts.MaxTokens <= 0 { +func checkEmptyStream( + lastCandidate *genai.Candidate, + blockReason *genai.GenerateContentResponsePromptFeedback, + choice *llms.ContentChoice, + opts *llms.CallOptions, +) error { + if lastCandidate != nil { return nil } if choice.Content != "" || len(choice.ToolCalls) > 0 { return nil } + if blockReason != nil { + message := "the model returned no candidates: the prompt was blocked (" + string(blockReason.BlockReason) + ")" + if blockReason.BlockReasonMessage != "" { + message += ": " + blockReason.BlockReasonMessage + } + return &llms.Error{ + Code: llms.ErrCodeContentFilter, + Message: message, + Provider: providerGoogleAI, + } + } + if opts == nil || opts.MaxTokens == nil || *opts.MaxTokens <= 0 { + return nil + } return &llms.Error{ Code: llms.ErrCodeTokenLimit, Message: "the model returned no candidates: max_tokens is too small to start an answer", diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index cb23df8ce..7996c7add 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -357,11 +357,13 @@ DoStream: break DoStream } if err != nil { - return nil, fmt.Errorf("error in stream mode: %w", err) + streamErr = fmt.Errorf("error in stream mode: %w", err) + break DoStream } if len(resp.Candidates) != 1 { - return nil, fmt.Errorf("expect single candidate in stream mode; got %v", len(resp.Candidates)) + streamErr = fmt.Errorf("expect single candidate in stream mode; got %v", len(resp.Candidates)) + break DoStream } respCandidate := resp.Candidates[0] @@ -378,9 +380,15 @@ DoStream: } } } - mresp := iter.MergedResponse() - resp, err := convertCandidates([]*genai.Candidate{candidate}, mresp.UsageMetadata) + var usage *genai.UsageMetadata + if mresp := iter.MergedResponse(); mresp != nil { + usage = mresp.UsageMetadata + } + resp, err := convertCandidates([]*genai.Candidate{candidate}, usage) if err != nil { + if streamErr != nil { + return nil, streamErr + } return nil, err } return resp, streamErr From d9ff7dcfda222f1235e65ce5a0d862b068473186 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:43:56 +0300 Subject: [PATCH 169/618] fix(bedrock): report one set of token counters across both doors Four counter defects shared a cause: each path built GenerationInfo by hand. The legacy stream wrote the uncached input as PromptTokens and never wrote the cache keys at all, because the nested usage struct it decoded had only two fields; it also read the terminal counters from message.usage, which the message_delta event does not carry. Both Bedrock doors reported every counter as int32 while anthropic, openai and googleai report int, so examples/reasoning-tokens read the type assertion as "no thinking tokens" on Bedrock alone. Each door now folds its usage through one mapper, and the streamed message type is named so a field added to it cannot break the tests that build it. PAGI-157 --- llms/bedrock/bedrockllm_test.go | 22 +-- llms/bedrock/converse_stream_usage_test.go | 12 +- .../bedrockclient/bedrockclient_converse.go | 28 ++-- .../bedrockclient_integration_test.go | 19 +-- .../bedrockclient/bedrockclient_test.go | 19 +-- .../bedrockclient/provider_anthropic.go | 132 ++++++++++-------- llms/bedrock/legacy_stream_usage_test.go | 75 ++++++++++ llms/bedrock/legacy_thinking_test.go | 6 +- 8 files changed, 187 insertions(+), 126 deletions(-) create mode 100644 llms/bedrock/legacy_stream_usage_test.go diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index 8f5782608..4fa5a726c 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -1362,12 +1362,12 @@ func testReasoningWorkflow( //nolint:funlen return fmt.Errorf("empty reasoning content") } - if got, ok := choice.GenerationInfo["ReasoningTokens"].(int32); !ok || got <= 0 { - return fmt.Errorf("an answer that reasoned must report ReasoningTokens, got %v", + if got, ok := choice.GenerationInfo["ReasoningTokens"].(int); !ok || got <= 0 { + return fmt.Errorf("an answer that reasoned must report ReasoningTokens as an int, got %#v", choice.GenerationInfo["ReasoningTokens"]) } - if got, ok := choice.GenerationInfo["CompletionTokens"].(int32); !ok || got <= 0 { - return fmt.Errorf("an answer that reasoned must report CompletionTokens, got %v", + if got, ok := choice.GenerationInfo["CompletionTokens"].(int); !ok || got <= 0 { + return fmt.Errorf("an answer that reasoned must report CompletionTokens as an int, got %#v", choice.GenerationInfo["CompletionTokens"]) } @@ -3218,20 +3218,20 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { func requireUsageAddsUp(t *testing.T, info map[string]any) { t.Helper() - prompt, ok := info["PromptTokens"].(int32) + prompt, ok := info["PromptTokens"].(int) if !ok { - t.Fatalf("PromptTokens missing or not int32: %#v", info["PromptTokens"]) + t.Fatalf("PromptTokens missing or not int: %#v", info["PromptTokens"]) } - completion, ok := info["CompletionTokens"].(int32) + completion, ok := info["CompletionTokens"].(int) if !ok { - t.Fatalf("CompletionTokens missing or not int32: %#v", info["CompletionTokens"]) + t.Fatalf("CompletionTokens missing or not int: %#v", info["CompletionTokens"]) } - cached, _ := info["CacheReadInputTokens"].(int32) - created, _ := info["CacheCreationInputTokens"].(int32) + cached, _ := info["CacheReadInputTokens"].(int) + created, _ := info["CacheCreationInputTokens"].(int) if cached+created == 0 { t.Fatalf("this recording carries no cache tokens, so it cannot show whether they are counted: %#v", info) } - total, ok := info["TotalTokens"].(int32) + total, ok := info["TotalTokens"].(int) if !ok { total = prompt + completion } diff --git a/llms/bedrock/converse_stream_usage_test.go b/llms/bedrock/converse_stream_usage_test.go index 123febb4d..3384d2db8 100644 --- a/llms/bedrock/converse_stream_usage_test.go +++ b/llms/bedrock/converse_stream_usage_test.go @@ -45,10 +45,10 @@ func TestConverseStreamReportsTheSameCountersAsTheWholeAnswer(t *testing.T) { require.Len(t, resp.Choices, 1) info := resp.Choices[0].GenerationInfo - assert.Equal(t, int32(304), info["CompletionTokens"]) - assert.Equal(t, int32(3919), info["TotalTokens"]) - assert.Equal(t, int32(3602), info["CacheReadInputTokens"]) - assert.Equal(t, int32(3602), info["PromptCachedTokens"]) - assert.Equal(t, int32(300), info["CacheCreationInputTokens"]) - assert.Equal(t, int32(3915), info["PromptTokens"]) + assert.Equal(t, 304, info["CompletionTokens"]) + assert.Equal(t, 3919, info["TotalTokens"]) + assert.Equal(t, 3602, info["CacheReadInputTokens"]) + assert.Equal(t, 3602, info["PromptCachedTokens"]) + assert.Equal(t, 300, info["CacheCreationInputTokens"]) + assert.Equal(t, 3915, info["PromptTokens"]) } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 39de38ff9..f04c5433a 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -832,29 +832,29 @@ func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { return } - var promptTokens int32 + var promptTokens int if usage.InputTokens != nil { - info["input_tokens"] = *usage.InputTokens - promptTokens += *usage.InputTokens + info["input_tokens"] = int(*usage.InputTokens) + promptTokens += int(*usage.InputTokens) } if usage.OutputTokens != nil { - info["output_tokens"] = *usage.OutputTokens - info["CompletionTokens"] = *usage.OutputTokens + info["output_tokens"] = int(*usage.OutputTokens) + info["CompletionTokens"] = int(*usage.OutputTokens) } if usage.TotalTokens != nil { - info["total_tokens"] = *usage.TotalTokens - info["TotalTokens"] = *usage.TotalTokens + info["total_tokens"] = int(*usage.TotalTokens) + info["TotalTokens"] = int(*usage.TotalTokens) } if usage.CacheReadInputTokens != nil { - info["cacheReadInputTokens"] = *usage.CacheReadInputTokens - info["CacheReadInputTokens"] = *usage.CacheReadInputTokens - info["PromptCachedTokens"] = *usage.CacheReadInputTokens - promptTokens += *usage.CacheReadInputTokens + info["cacheReadInputTokens"] = int(*usage.CacheReadInputTokens) + info["CacheReadInputTokens"] = int(*usage.CacheReadInputTokens) + info["PromptCachedTokens"] = int(*usage.CacheReadInputTokens) + promptTokens += int(*usage.CacheReadInputTokens) } if usage.CacheWriteInputTokens != nil { - info["cacheWriteInputTokens"] = *usage.CacheWriteInputTokens - info["CacheCreationInputTokens"] = *usage.CacheWriteInputTokens - promptTokens += *usage.CacheWriteInputTokens + info["cacheWriteInputTokens"] = int(*usage.CacheWriteInputTokens) + info["CacheCreationInputTokens"] = int(*usage.CacheWriteInputTokens) + promptTokens += int(*usage.CacheWriteInputTokens) } info["PromptTokens"] = promptTokens } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go index f8cecd1cb..4c7f44434 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_integration_test.go @@ -429,26 +429,11 @@ func TestClient_CreateCompletion_Streaming(t *testing.T) { chunks := []streamingCompletionResponseChunk{ { Type: "message_start", - Message: struct { - ID string `json:"id"` - Type string `json:"type"` - Role string `json:"role"` - Content []any `json:"content"` - Model string `json:"model"` - StopReason any `json:"stop_reason"` - StopSequence any `json:"stop_sequence"` - Usage struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - } `json:"usage"` - }{ + Message: anthropicStreamMessage{ ID: "msg-123", Type: "message", Role: "assistant", - Usage: struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - }{ + Usage: anthropicUsage{ InputTokens: 10, }, }, diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_test.go index 3d3b2d870..b783a5a7d 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_test.go @@ -736,27 +736,12 @@ func TestAnthropicStreamingResponseChunk(t *testing.T) { name: "message_start chunk", chunk: streamingCompletionResponseChunk{ Type: "message_start", - Message: struct { - ID string `json:"id"` - Type string `json:"type"` - Role string `json:"role"` - Content []any `json:"content"` - Model string `json:"model"` - StopReason any `json:"stop_reason"` - StopSequence any `json:"stop_sequence"` - Usage struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - } `json:"usage"` - }{ + Message: anthropicStreamMessage{ ID: "msg-123", Type: "message", Role: "assistant", Model: "claude-3", - Usage: struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - }{ + Usage: anthropicUsage{ InputTokens: 25, }, }, diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 8469586a9..b86cdb342 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -343,29 +343,15 @@ func createAnthropicCompletion(ctx context.Context, } // Create single choice with all content - promptTokens := output.Usage.InputTokens + - output.Usage.CacheCreationInputTokens + output.Usage.CacheReadInputTokens choice := &llms.ContentChoice{ - Content: textContent, - Reasoning: processReasoning(reasoningContent, signature), - ToolCalls: toolCalls, - StopReason: output.StopReason, - Truncated: llms.IsTruncated(output.StopReason), - GenerationInfo: map[string]any{ - "input_tokens": output.Usage.InputTokens, - "output_tokens": output.Usage.OutputTokens, - "PromptTokens": promptTokens, - "CompletionTokens": output.Usage.OutputTokens, - "TotalTokens": promptTokens + output.Usage.OutputTokens, - // Cache metrics - "CacheReadInputTokens": output.Usage.CacheReadInputTokens, - "CacheCreationInputTokens": output.Usage.CacheCreationInputTokens, - "CacheCreationEphemeral5mInputTokens": output.Usage.CacheCreation.Ephemeral5mInputTokens, - "CacheCreationEphemeral1hInputTokens": output.Usage.CacheCreation.Ephemeral1hInputTokens, - "PromptCachedTokens": output.Usage.CacheReadInputTokens, - "ReasoningTokens": output.Usage.OutputTokensDetails.ThinkingTokens, - }, - } + Content: textContent, + Reasoning: processReasoning(reasoningContent, signature), + ToolCalls: toolCalls, + StopReason: output.StopReason, + Truncated: llms.IsTruncated(output.StopReason), + GenerationInfo: map[string]any{}, + } + applyAnthropicUsage(choice.GenerationInfo, output.Usage) Contentchoices = append(Contentchoices, choice) contentResp := &llms.ContentResponse{ @@ -377,6 +363,54 @@ func createAnthropicCompletion(ctx context.Context, return contentResp, nil } +func mergeAnthropicUsage(into anthropicUsage, updates ...anthropicUsage) anthropicUsage { + for _, u := range updates { + if u.InputTokens != 0 { + into.InputTokens = u.InputTokens + } + if u.OutputTokens != 0 { + into.OutputTokens = u.OutputTokens + } + if u.CacheCreationInputTokens != 0 { + into.CacheCreationInputTokens = u.CacheCreationInputTokens + } + if u.CacheReadInputTokens != 0 { + into.CacheReadInputTokens = u.CacheReadInputTokens + } + if u.CacheCreation.Ephemeral5mInputTokens != 0 { + into.CacheCreation.Ephemeral5mInputTokens = u.CacheCreation.Ephemeral5mInputTokens + } + if u.CacheCreation.Ephemeral1hInputTokens != 0 { + into.CacheCreation.Ephemeral1hInputTokens = u.CacheCreation.Ephemeral1hInputTokens + } + if u.OutputTokensDetails.ThinkingTokens != 0 { + into.OutputTokensDetails.ThinkingTokens = u.OutputTokensDetails.ThinkingTokens + } + } + return into +} + +func applyAnthropicUsage(info map[string]any, usage anthropicUsage) { + if info == nil { + return + } + + promptTokens := int(usage.InputTokens) + + int(usage.CacheCreationInputTokens) + int(usage.CacheReadInputTokens) + + info["input_tokens"] = int(usage.InputTokens) + info["output_tokens"] = int(usage.OutputTokens) + info["PromptTokens"] = promptTokens + info["CompletionTokens"] = int(usage.OutputTokens) + info["TotalTokens"] = promptTokens + int(usage.OutputTokens) + info["CacheReadInputTokens"] = int(usage.CacheReadInputTokens) + info["CacheCreationInputTokens"] = int(usage.CacheCreationInputTokens) + info["CacheCreationEphemeral5mInputTokens"] = int(usage.CacheCreation.Ephemeral5mInputTokens) + info["CacheCreationEphemeral1hInputTokens"] = int(usage.CacheCreation.Ephemeral1hInputTokens) + info["PromptCachedTokens"] = int(usage.CacheReadInputTokens) + info["ReasoningTokens"] = int(usage.OutputTokensDetails.ThinkingTokens) +} + func processReasoning(reasoningContent string, signature []byte) *reasoning.ContentReasoning { if reasoningContent == "" && len(signature) == 0 { return nil @@ -412,20 +446,19 @@ type streamingCompletionResponseChunk struct { InvocationLatency int32 `json:"invocationLatency"` FirstByteLatency int32 `json:"firstByteLatency"` } `json:"amazon-bedrock-invocationMetrics"` - Usage anthropicUsage `json:"usage"` - Message struct { - ID string `json:"id"` - Type string `json:"type"` - Role string `json:"role"` - Content []any `json:"content"` - Model string `json:"model"` - StopReason any `json:"stop_reason"` - StopSequence any `json:"stop_sequence"` - Usage struct { - InputTokens int32 `json:"input_tokens"` - OutputTokens int32 `json:"output_tokens"` - } `json:"usage"` - } `json:"message"` + Usage anthropicUsage `json:"usage"` + Message anthropicStreamMessage `json:"message"` +} + +type anthropicStreamMessage struct { + ID string `json:"id"` + Type string `json:"type"` + Role string `json:"role"` + Content []any `json:"content"` + Model string `json:"model"` + StopReason any `json:"stop_reason"` + StopSequence any `json:"stop_sequence"` + Usage anthropicUsage `json:"usage"` } func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntime.Client, modelInput *bedrockruntime.InvokeModelWithResponseStreamInput, options llms.CallOptions) (*llms.ContentResponse, error) { @@ -441,6 +474,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim defer streaming.CallWithDone(ctx, options.StreamingFunc) //nolint:errcheck contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} + var usage anthropicUsage var streamedContent strings.Builder var currentToolCall *streaming.ToolCall var toolCalls []llms.ToolCall @@ -460,9 +494,8 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim switch resp.Type { case "message_start": - contentchoices[0].GenerationInfo["input_tokens"] = resp.Message.Usage.InputTokens - contentchoices[0].GenerationInfo["PromptTokens"] = resp.Message.Usage.InputTokens - contentchoices[0].GenerationInfo["TotalTokens"] = resp.Message.Usage.InputTokens + usage = mergeAnthropicUsage(usage, resp.Message.Usage, resp.Usage) + applyAnthropicUsage(contentchoices[0].GenerationInfo, usage) case "content_block_start": if resp.ContentBlock.Type == "tool_use" { currentToolCall = &streaming.ToolCall{ @@ -528,25 +561,8 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim case "message_delta": contentchoices[0].StopReason = resp.Delta.StopReason contentchoices[0].Truncated = llms.IsTruncated(resp.Delta.StopReason) - inputTokens := resp.Message.Usage.InputTokens - outputTokens := resp.Message.Usage.OutputTokens - if inputTokens == 0 { - inputTokens = resp.Usage.InputTokens - } - if outputTokens == 0 { - outputTokens = resp.Usage.OutputTokens - } - if inputTokens == 0 { - if v, ok := contentchoices[0].GenerationInfo["input_tokens"].(int32); ok { - inputTokens = v - } - } - if thinkingTokens := resp.Usage.OutputTokensDetails.ThinkingTokens; thinkingTokens != 0 { - contentchoices[0].GenerationInfo["ReasoningTokens"] = thinkingTokens - } - contentchoices[0].GenerationInfo["output_tokens"] = outputTokens - contentchoices[0].GenerationInfo["CompletionTokens"] = outputTokens - contentchoices[0].GenerationInfo["TotalTokens"] = inputTokens + outputTokens + usage = mergeAnthropicUsage(usage, resp.Message.Usage, resp.Usage) + applyAnthropicUsage(contentchoices[0].GenerationInfo, usage) } } } diff --git a/llms/bedrock/legacy_stream_usage_test.go b/llms/bedrock/legacy_stream_usage_test.go new file mode 100644 index 000000000..0c4a9d61b --- /dev/null +++ b/llms/bedrock/legacy_stream_usage_test.go @@ -0,0 +1,75 @@ +package bedrock_test + +import ( + "context" + "encoding/base64" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestLegacyStreamReportsTheSameCountersAsTheWholeAnswer(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + + writeLegacyChunk(t, w, enc, `{"type":"message_start","message":{"id":"x","type":"message",`+ + `"role":"assistant","model":"m","content":[],"stop_reason":null,`+ + `"usage":{"input_tokens":13,"cache_creation_input_tokens":300,"cache_read_input_tokens":3602,`+ + `"output_tokens":1}}}`) + writeLegacyChunk(t, w, enc, `{"type":"content_block_delta","index":0,`+ + `"delta":{"type":"text_delta","text":"ok"}}`) + writeLegacyChunk(t, w, enc, `{"type":"message_delta","delta":{"stop_reason":"end_turn"},`+ + `"usage":{"output_tokens":304,"output_tokens_details":{"thinking_tokens":178}}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + got, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, got.Choices, 1) + + info := got.Choices[0].GenerationInfo + assert.Equal(t, 13, info["input_tokens"]) + assert.Equal(t, 3915, info["PromptTokens"]) + assert.Equal(t, 304, info["CompletionTokens"]) + assert.Equal(t, 4219, info["TotalTokens"]) + assert.Equal(t, 3602, info["CacheReadInputTokens"]) + assert.Equal(t, 3602, info["PromptCachedTokens"]) + assert.Equal(t, 300, info["CacheCreationInputTokens"]) + assert.Equal(t, 178, info["ReasoningTokens"]) +} + +func writeLegacyChunk(t *testing.T, w io.Writer, enc *eventstream.Encoder, payload string) { + t.Helper() + + inner := `{"bytes":"` + base64Encode(payload) + `"}` + require.NoError(t, enc.Encode(w, eventstream.Message{ + Headers: eventstream.Headers{ + {Name: ":message-type", Value: eventstream.StringValue("event")}, + {Name: ":event-type", Value: eventstream.StringValue("chunk")}, + {Name: ":content-type", Value: eventstream.StringValue("application/json")}, + }, + Payload: []byte(inner), + })) + if f, ok := w.(http.Flusher); ok { + f.Flush() + } +} + +func base64Encode(s string) string { return base64.StdEncoding.EncodeToString([]byte(s)) } diff --git a/llms/bedrock/legacy_thinking_test.go b/llms/bedrock/legacy_thinking_test.go index 019e7b90e..7a79a6c5c 100644 --- a/llms/bedrock/legacy_thinking_test.go +++ b/llms/bedrock/legacy_thinking_test.go @@ -197,9 +197,9 @@ func TestLegacyPromptTokensCountTheCachedInput(t *testing.T) { require.Len(t, got.Choices, 1) info := got.Choices[0].GenerationInfo - assert.Equal(t, int32(13), info["input_tokens"], + assert.Equal(t, 13, info["input_tokens"], "the vendor's own field reports the uncached input alone") - assert.Equal(t, int32(3915), info["PromptTokens"], + assert.Equal(t, 3915, info["PromptTokens"], "the standardized field must count the cached input the request was billed for") - assert.Equal(t, int32(3919), info["TotalTokens"]) + assert.Equal(t, 3919, info["TotalTokens"]) } From 6dcf0e0dc2706fe665cf1b2492a4dccbd8d835ee Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:52:53 +0300 Subject: [PATCH 170/618] fix(bedrock): carry the tool choice on the legacy wire and judge the guard by it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legacy InvokeModel payload had no tool_choice field at all, so a forced choice was dropped without a word on the door bedrock.New builds by default, while the shared turn guard — sitting above the door fork — refused those same requests for a payload the door never sent. The guard now reads what will actually go out: a budget clamped to zero sends no thinking, and a door that sends only an effort says so. A generation that has no adaptive mode is still refused, because its effort reaches the vendor as budget thinking; live calls confirm both halves — opus-4-6 answers an effort with a forced tool, sonnet-4-5 is rejected. PAGI-157 --- .../bedrockclient/provider_anthropic.go | 18 +++++ llms/bedrock/legacy_tool_choice_test.go | 80 +++++++++++++++++++ llms/openai/openaillm.go | 3 +- llms/openai/turn_limits_test.go | 15 ++++ llms/turn.go | 20 ++++- 5 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 llms/bedrock/legacy_tool_choice_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index b86cdb342..de582bdd2 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -107,6 +107,8 @@ type anthropicTextGenerationInput struct { StopSequences []string `json:"stop_sequences,omitempty"` // Tools available for the model to use. Optional Tools []anthropicTool `json:"tools,omitempty"` + // ToolChoice constrains which tool the model may call. Optional + ToolChoice any `json:"tool_choice,omitempty"` // Thinking configuration for reasoning models. Optional Thinking *anthropicThinkingPayload `json:"thinking,omitempty"` // OutputConfig carries the adaptive-thinking effort. It is a top-level @@ -249,6 +251,7 @@ func createAnthropicCompletion(ctx context.Context, TopK: options.GetTopK(), StopSequences: options.StopWords, Tools: tools, + ToolChoice: anthropicToolChoiceOnWire(options.ToolChoice), } if err := applyAnthropicReasoning(&input, options.Reasoning, modelID, maxTokens); err != nil { @@ -363,6 +366,21 @@ func createAnthropicCompletion(ctx context.Context, return contentResp, nil } +func anthropicToolChoiceOnWire(choice any) any { + switch kind, name := llms.ClassifyToolChoice(choice); kind { + case llms.ToolChoiceNamed: + return map[string]any{"type": "tool", "name": name} + case llms.ToolChoiceAny: + return map[string]any{"type": "any"} + case llms.ToolChoiceAuto: + return map[string]any{"type": "auto"} + case llms.ToolChoiceNone: + return map[string]any{"type": "none"} + default: + return nil + } +} + func mergeAnthropicUsage(into anthropicUsage, updates ...anthropicUsage) anthropicUsage { for _, u := range updates { if u.InputTokens != 0 { diff --git a/llms/bedrock/legacy_tool_choice_test.go b/llms/bedrock/legacy_tool_choice_test.go new file mode 100644 index 000000000..08204ff1e --- /dev/null +++ b/llms/bedrock/legacy_tool_choice_test.go @@ -0,0 +1,80 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestLegacyDoorCarriesTheToolChoice(t *testing.T) { + t.Parallel() + + const answer = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + + choiceOnWire := func(t *testing.T, choice any) any { + t.Helper() + + llm, sent := legacyLLMCapturing(t, answer, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + opts := []llms.CallOption{llms.WithTools([]llms.Tool{tool})} + if choice != nil { + opts = append(opts, llms.WithToolChoice(choice)) + } + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + require.NoError(t, err) + + var body map[string]any + require.NoError(t, json.Unmarshal([]byte(*sent), &body)) + return body["tool_choice"] + } + + for _, tc := range []struct { + name string + choice any + want any + }{ + { + "named in the Anthropic spelling", + llms.ToolChoice{Type: "tool", Function: &llms.FunctionReference{Name: "get_weather"}}, + map[string]any{"type": "tool", "name": "get_weather"}, + }, + { + "named in the OpenAI spelling", + llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}}, + map[string]any{"type": "tool", "name": "get_weather"}, + }, + {"any tool", llms.ToolChoice{Type: "any"}, map[string]any{"type": "any"}}, + {"required", "required", map[string]any{"type": "any"}}, + {"auto", "auto", map[string]any{"type": "auto"}}, + {"none", "none", map[string]any{"type": "none"}}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tc.want, choiceOnWire(t, tc.choice)) + }) + } + + t.Run("no choice sends no field", func(t *testing.T) { + t.Parallel() + assert.Nil(t, choiceOnWire(t, nil)) + }) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 2623bf7d3..3adf46a0b 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -96,7 +96,8 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten opt(&opts) } - if err := llms.CheckClaudeTurnLimits(o.effectiveModel(opts), opts, messages); err != nil { + sendsBudget := o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 + if err := llms.CheckClaudeTurnLimitsOnWire(o.effectiveModel(opts), opts, messages, sendsBudget); err != nil { return nil, err } diff --git a/llms/openai/turn_limits_test.go b/llms/openai/turn_limits_test.go index 5228c05c9..d06787647 100644 --- a/llms/openai/turn_limits_test.go +++ b/llms/openai/turn_limits_test.go @@ -60,6 +60,21 @@ func TestClaudeTurnLimitsOnTheOpenAITransport(t *testing.T) { } }) + t.Run("a generation that also thinks adaptively is not refused", func(t *testing.T) { + t.Parallel() + if err := turnLimitErr(t, "claude-opus-4-6", askedFor("hi"), thinking, forced); err != nil { + t.Errorf("this generation answers an effort adaptively, so a forced tool is fine, got %v", err) + } + }) + + t.Run("an effort with no budget is not refused", func(t *testing.T) { + t.Parallel() + if err := turnLimitErr(t, "claude-sonnet-4-5", askedFor("hi"), + llms.WithReasoning(llms.ReasoningEffort("minimal"), 0), forced); err != nil { + t.Errorf("an effort the budget mapper rejects sends no thinking, so nothing is refused, got %v", err) + } + }) + t.Run("the OpenAI spelling of a forced tool is refused too", func(t *testing.T) { t.Parallel() for _, choice := range []any{ diff --git a/llms/turn.go b/llms/turn.go index e6479f2fd..8031a8023 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -101,9 +101,25 @@ func HasAssistantPrefill(messages []MessageContent) bool { // wire: manual (budget) thinking combined with a forced tool choice, and a // conversation that ends on an assistant turn. func CheckClaudeTurnLimits(model string, opts CallOptions, messages []MessageContent) error { - budgetThinking := opts.Reasoning.ResolveMode() == ReasoningOn && + return CheckClaudeTurnLimitsOnWire(model, opts, messages, true) +} + +// CheckClaudeTurnLimitsOnWire is CheckClaudeTurnLimits for a door that knows +// whether its own request carries a manual thinking budget; a door that sends +// only an effort passes false. +func CheckClaudeTurnLimitsOnWire( + model string, + opts CallOptions, + messages []MessageContent, + sendsManualThinking bool, +) error { + budget := reasoning.ClaudeClampBudget(model, opts.Reasoning.GetTokens(opts.GetMaxTokens())) + budgetOnly := reasoning.ClaudeReasoningKindFor(model) == reasoning.ClaudeReasoningBudgetOnly + budgetThinking := (sendsManualThinking || budgetOnly) && + opts.Reasoning.ResolveMode() == ReasoningOn && reasoning.ClaudeSupportsThinking(model) && - !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) + !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) && + budget > 0 if budgetThinking && ForcesToolUse(opts.ToolChoice) { return &reasoning.ErrForcedToolUseWithThinking{Model: model} } From 891554d59b28ca6b0b10c0b0090241ae301646c9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 10:59:24 +0300 Subject: [PATCH 171/618] fix(reasoning): keep the budget within the vendor's floor and ceiling Three defects shared the budget helpers. The Claude door behind the OpenAI-compatible transport was the only one of four that never raised a budget to the vendor floor, so a caller asking for 100 tokens got a 400. The ceiling helper doubled every budget even when the caller's own ceiling already held it, which a live call rejects: max_tokens 80000 against a model that allows 64000. And an effort no door accepts mapped to a non-positive budget, which every door reads as "send no thinking", so the caller asked the model to think and was answered without any; the doors now refuse it instead. "minimal" is a real OpenAI effort with no budget equivalent, so it stays accepted. PAGI-157 --- llms/anthropic/anthropicllm.go | 4 +++ llms/bedrock/bedrockllm.go | 4 +++ llms/openai/openaillm.go | 6 +++- llms/openai/reasoning_wire_test.go | 20 ++++++++++- llms/options.go | 26 +++++++++++--- llms/reasoning/claude_capability.go | 4 +-- llms/reasoning_validation_test.go | 56 +++++++++++++++++++++++++++++ 7 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 llms/reasoning_validation_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 89ab633fe..a15f1d55f 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -187,6 +187,10 @@ func generateCompletionsContent(ctx context.Context, o *LLM, messages []llms.Mes } func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.MessageContent, opts *llms.CallOptions) (*llms.ContentResponse, error) { //nolint:lll,funlen,cyclop + if err := opts.ValidateReasoning(); err != nil { + return nil, err + } + chatMessages, systemPrompt, err := processMessages(messages) if err != nil { return nil, fmt.Errorf("anthropic: failed to process messages: %w", err) diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 6ddb0d0cf..1d416e7c8 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -108,6 +108,10 @@ func (l *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } + if err := opts.ValidateReasoning(); err != nil { + return nil, err + } + if err := checkAnthropicTurnLimits(&opts, messages); err != nil { return nil, err } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 3adf46a0b..c76df0725 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -96,6 +96,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten opt(&opts) } + if err := opts.ValidateReasoning(); err != nil { + return nil, err + } + sendsBudget := o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 if err := llms.CheckClaudeTurnLimitsOnWire(o.effectiveModel(opts), opts, messages, sendsBudget); err != nil { return nil, err @@ -332,7 +336,7 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) // using modern reasoning format if o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 && reasoningTokens > 0 { req.Reasoning = &openaiclient.ReasoningOptions{ - MaxTokens: reasoningTokens, + MaxTokens: reasoning.ClaudeClampBudget(o.effectiveModel(opts), reasoningTokens), } } else if reasoningEffort != llms.ReasoningNone { req.Reasoning = &openaiclient.ReasoningOptions{ diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 58242ae74..df2e3a274 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -12,6 +12,10 @@ import ( ) func sendModernReasoningForWire(t *testing.T, effort llms.ReasoningEffort, tokens int) string { + return sendModernReasoningForModel(t, "gpt-5", effort, tokens) +} + +func sendModernReasoningForModel(t *testing.T, model string, effort llms.ReasoningEffort, tokens int) string { t.Helper() const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + @@ -27,7 +31,7 @@ func sendModernReasoningForWire(t *testing.T, effort llms.ReasoningEffort, token })) t.Cleanup(srv.Close) - llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel("gpt-5"), + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model), WithModernReasoningFormat(), WithUsingReasoningMaxTokens()) if err != nil { t.Fatalf("New() error: %v", err) @@ -84,3 +88,17 @@ func TestModernReasoningSendsNoBudgetItCannotCompute(t *testing.T) { }) } } + +func TestTheBudgetOnTheWireRespectsTheVendorFloor(t *testing.T) { + t.Parallel() + + body := sendModernReasoningForModel(t, "claude-sonnet-4-5", llms.ReasoningNone, 100) + if !strings.Contains(body, `"max_tokens":1024`) { + t.Fatalf("a budget under the vendor floor must be raised to it, got body: %s", body) + } + + untouched := sendModernReasoningForModel(t, "gpt-5", llms.ReasoningNone, 100) + if !strings.Contains(untouched, `"max_tokens":100`) { + t.Fatalf("the floor is Anthropic's alone, got body: %s", untouched) + } +} diff --git a/llms/options.go b/llms/options.go index d3c4fcdb8..65b83539d 100644 --- a/llms/options.go +++ b/llms/options.go @@ -1,6 +1,7 @@ package llms import ( + "fmt" "github.com/vxcontrol/langchaingo/llms/streaming" ) @@ -29,10 +30,11 @@ const ( type ReasoningEffort string const ( - ReasoningHigh ReasoningEffort = "high" - ReasoningMedium ReasoningEffort = "medium" - ReasoningLow ReasoningEffort = "low" - ReasoningNone ReasoningEffort = "" + ReasoningHigh ReasoningEffort = "high" + ReasoningMedium ReasoningEffort = "medium" + ReasoningLow ReasoningEffort = "low" + ReasoningNone ReasoningEffort = "" + ReasoningMinimal ReasoningEffort = "minimal" // ReasoningXHigh and ReasoningMax are the top reasoning efforts. Anthropic models // carry them via WithAdaptiveReasoning (max since Claude 4.6, xhigh since Opus 4.7); // OpenAI-compatible providers that expose them (e.g. GPT-5.5, GLM-5.2) accept them @@ -158,6 +160,22 @@ func (r *ReasoningConfig) GetEffort(maxTokens int) ReasoningEffort { return ReasoningNone } +// ValidateReasoning reports an effort no door accepts. +func (o *CallOptions) ValidateReasoning() error { + if o == nil || o.Reasoning == nil { + return nil + } + switch o.Reasoning.Effort { + case ReasoningNone, ReasoningMinimal, ReasoningLow, + ReasoningMedium, ReasoningHigh, ReasoningXHigh, ReasoningMax: + return nil + } + return &Error{ + Code: ErrCodeInvalidRequest, + Message: fmt.Sprintf("unknown reasoning effort %q", string(o.Reasoning.Effort)), + } +} + // GetTokens returns the number of tokens to use for reasoning based on kept values inside. // Maximum value is maxTokens*2/3 because we need to leave some tokens for the response. // A non-positive maxTokens is replaced with DefaultMaxTokens. diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 7d806f546..6f057924b 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -163,10 +163,10 @@ func ClaudeClampBudget(model string, budget int) int { // ClaudeMaxTokensForBudget returns a ceiling that still leaves the answer room // once the budget is spent. func ClaudeMaxTokensForBudget(budget, maxTokens int) int { - if budget <= 0 { + if budget <= 0 || maxTokens > budget { return maxTokens } - return max(budget*2, maxTokens) + return budget * 2 } // budgetEffortClaude are budget-thinking models that also accept an effort diff --git a/llms/reasoning_validation_test.go b/llms/reasoning_validation_test.go new file mode 100644 index 000000000..b7f4ac9f7 --- /dev/null +++ b/llms/reasoning_validation_test.go @@ -0,0 +1,56 @@ +package llms + +import ( + "errors" + "testing" + + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestValidateReasoningRefusesOnlyWhatNoDoorAccepts(t *testing.T) { + t.Parallel() + + for _, effort := range []ReasoningEffort{ + ReasoningNone, ReasoningMinimal, ReasoningLow, + ReasoningMedium, ReasoningHigh, ReasoningXHigh, ReasoningMax, + } { + opts := CallOptions{Reasoning: &ReasoningConfig{Effort: effort}} + if err := opts.ValidateReasoning(); err != nil { + t.Errorf("effort %q is offered by at least one door, got %v", effort, err) + } + } + + opts := CallOptions{Reasoning: &ReasoningConfig{Effort: ReasoningEffort("banana")}} + err := opts.ValidateReasoning() + var typed *Error + if !errors.As(err, &typed) || typed.Code != ErrCodeInvalidRequest { + t.Fatalf("an effort no door accepts must be refused, got %v", err) + } + + var absent CallOptions + if err := absent.ValidateReasoning(); err != nil { + t.Errorf("a call that asked for no reasoning is valid, got %v", err) + } +} + +func TestTheCeilingRisesOnlyWhenTheBudgetWouldNotFit(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + budget, maxTokens int + want int + }{ + {"a budget that does not fit raises the ceiling", 4096, 1024, 8192}, + {"a budget at the ceiling still raises it", 1024, 1024, 2048}, + {"a budget that fits leaves the caller's ceiling alone", 40000, 64000, 64000}, + {"no budget leaves the ceiling alone", 0, 64000, 64000}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + if got := reasoning.ClaudeMaxTokensForBudget(tc.budget, tc.maxTokens); got != tc.want { + t.Fatalf("ceiling = %d, want %d", got, tc.want) + } + }) + } +} From 53c3215805459774322e13b0a2ffb8ea3f7e8fdf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 11:03:10 +0300 Subject: [PATCH 172/618] fix(reasoning): keep the model matchers agreeing with each other MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The hint matcher offered reasoning controls to models that answer in another modality — gpt-audio, gpt-realtime, the transcription and speech families — because its filter knew only "embedding" and "image". It also still counted gpt-5-chat-latest as a reasoning model, though the other two matchers in the package had already been taught to exclude it. The support struct documented an empty effort list as "unknown", while a budget generation that takes no effort at all reports the same thing; the field now says so, since a caller reading it as "anything goes" would offer tiers the model rejects. stripPlatformPrefix went out with its only caller, its own test, after the working normalizer replaced it. PAGI-157 --- llms/reasoning/claude_name_forms_test.go | 16 ---------------- llms/reasoning/detect_hint.go | 9 +++++++-- llms/reasoning/detect_hint_test.go | 22 ++++++++++++++++++++++ llms/reasoning/reasoning.go | 13 ------------- llms/reasoning_support.go | 3 ++- llms/reasoning_support_test.go | 16 ++++++++++++++++ 6 files changed, 47 insertions(+), 32 deletions(-) diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 4e57396a7..1ede9a144 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -90,22 +90,6 @@ func TestDetectionSeesPlatformIdsAndDashedVersions(t *testing.T) { } } -func TestStripPlatformPrefixLeavesVersionsAlone(t *testing.T) { - t.Parallel() - - for _, tc := range []struct{ in, want string }{ - {"us.anthropic.claude-opus-5-v1:0", "claude-opus-5-v1:0"}, - {"anthropic.claude-opus-4-6", "claude-opus-4-6"}, - {"glm-4.5", "glm-4.5"}, - {"deepseek-v3.1-terminus", "deepseek-v3.1-terminus"}, - {"claude-opus-4-7", "claude-opus-4-7"}, - } { - if got := stripPlatformPrefix(tc.in); got != tc.want { - t.Errorf("stripPlatformPrefix(%q) = %q, want %q", tc.in, got, tc.want) - } - } -} - func TestOpenAISuffixVariantsDoNotInheritTheBaseRules(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index e0c0c919d..ecae22e9b 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -27,7 +27,7 @@ func likelyReasoningFamily(m string) bool { switch { case strings.HasPrefix(m, "gpt-"): - return !openAIPreReasoning(m) + return !openAIPreReasoning(m) && !strings.Contains(m, "-chat-latest") case isOSeries(m): return true case strings.HasPrefix(m, "claude-"): @@ -43,7 +43,12 @@ func likelyReasoningFamily(m string) bool { } func namesNonTextModality(m string) bool { - return strings.Contains(m, "embedding") || strings.Contains(m, "image") + for _, modality := range []string{"embedding", "image", "audio", "realtime", "tts", "whisper", "transcribe"} { + if strings.Contains(m, modality) { + return true + } + } + return false } // openAIPreReasoning matches the GPT generations below the GPT-5 line, where diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index 6959aa30f..d66cc043b 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -122,3 +122,25 @@ func TestQwenHintIsOptimisticWithoutMovingTheWire(t *testing.T) { } } } + +func TestTheHintDoesNotOfferReasoningToNonTextModels(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gpt-audio", "gpt-realtime", "gpt-4o-transcribe", "whisper-1", + "tts-1", "text-embedding-3-large", "gpt-image-1", + } { + if LikelyReasoningModel(model) { + t.Errorf("%q answers in another modality, so no reasoning control belongs on it", model) + } + } +} + +func TestTheHintAgreesWithTheMatchersOnChatLatest(t *testing.T) { + t.Parallel() + + const model = "gpt-5-chat-latest" + if LikelyReasoningModel(model) { + t.Errorf("%q is excluded by the other two matchers, so the hint must exclude it too", model) + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 183b994b2..ebeef0285 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -348,19 +348,6 @@ func ThinkingMarkedInName(model string) bool { return strings.Contains(strings.ToLower(model), "thinking") } -func stripPlatformPrefix(model string) string { - for { - idx := strings.Index(model, ".") - if idx <= 0 { - return model - } - if !isAlpha(model[:idx]) { - return model - } - model = model[idx+1:] - } -} - func isAlpha(s string) bool { for i := range len(s) { if s[i] < 'a' || s[i] > 'z' { diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 3aa56756b..736be0310 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -25,7 +25,8 @@ type ReasoningSupport struct { CannotDisable bool // RejectsSampling is set for models that reject temperature/top_p while thinking. RejectsSampling bool - // Efforts are the effort tiers worth offering; nil when unknown. + // Efforts are the effort tiers worth offering; empty both when the model is + // unknown and when it takes none, so read Mechanism before offering a control. Efforts []ReasoningEffort // Mechanism reports whether the model takes an effort level, a token budget // or either; ReasoningMechanismUnknown when unclassified. diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 8934f2fc9..5e4b2b3b9 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -353,3 +353,19 @@ func TestGoogleHintNamesItsMechanism(t *testing.T) { } } } + +func TestABudgetModelWithNoEffortTierIsKnownAndEmpty(t *testing.T) { + t.Parallel() + + support := ReasoningSupportFor("claude-sonnet-4-5", reasoning.ProviderAnthropic) + + if !support.Known { + t.Fatal("the model is classified, so Known must stay true") + } + if len(support.Efforts) != 0 { + t.Fatalf("a model that takes no effort must offer none, got %v", support.Efforts) + } + if support.Mechanism != ReasoningMechanismBudget { + t.Fatalf("Mechanism must tell the caller what to offer instead, got %v", support.Mechanism) + } +} From 12c0946a1df957f37d70845a195a4bc9875abad0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 11:47:21 +0300 Subject: [PATCH 173/618] fix(llms): let a streamed line outgrow the default scanner ceiling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both streaming doors read SSE with a bare bufio.Scanner, so a single line over 64KiB ended the whole answer with "token too long" — reachable whenever a provider packs a reasoning block or a tool call's arguments into one event. Mistral's Call also dereferenced CallbacksHandler without the nil check its own GenerateContent had gained in the same hunk. PAGI-157 --- .../internal/anthropicclient/messages.go | 6 +++ llms/mistral/mistralmodel.go | 8 +++- llms/mistral/nil_callbacks_test.go | 30 +++++++++++++ llms/openai/internal/openaiclient/chat.go | 6 +++ llms/openai/long_stream_line_test.go | 44 +++++++++++++++++++ 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 llms/mistral/nil_callbacks_test.go create mode 100644 llms/openai/long_stream_line_test.go diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index eee1c782b..42f480938 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -378,12 +378,18 @@ type MessageEvent struct { Err error } +const ( + initialStreamBuffer = 64 * 1024 + maxStreamLine = 8 * 1024 * 1024 +) + func parseStreamingMessageResponse( ctx context.Context, r *http.Response, payload *messagePayload, ) (*MessageResponsePayload, error) { scanner := bufio.NewScanner(r.Body) + scanner.Buffer(make([]byte, 0, initialStreamBuffer), maxStreamLine) eventChan := make(chan MessageEvent) go func() { diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index f26c55cb5..d455e5046 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -56,12 +56,16 @@ func (m *Model) Call(ctx context.Context, prompt string, options ...llms.CallOpt }} res, err := m.client.Chat(callOptions.GetModel(), messages, &mistralChatParams) if err != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) + if m.CallbacksHandler != nil { + m.CallbacksHandler.HandleLLMError(ctx, err) + } return "", err } if len(res.Choices) != 1 { err := errors.New("unexpected response from Mistral SDK, length of the Choices slice must be 1") - m.CallbacksHandler.HandleLLMError(ctx, err) + if m.CallbacksHandler != nil { + m.CallbacksHandler.HandleLLMError(ctx, err) + } return "", err } diff --git a/llms/mistral/nil_callbacks_test.go b/llms/mistral/nil_callbacks_test.go new file mode 100644 index 000000000..00377c097 --- /dev/null +++ b/llms/mistral/nil_callbacks_test.go @@ -0,0 +1,30 @@ +package mistral + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestCallWithoutACallbacksHandlerDoesNotPanic(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.WriteHeader(http.StatusInternalServerError) + _, _ = io.WriteString(w, `{"error":"upstream is down"}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithAPIKey("test"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + llm.CallbacksHandler = nil + + require.NotPanics(t, func() { + _, _ = llm.Call(context.Background(), "hi") + }) +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index e8fa01ca0..00d7f9c26 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -687,6 +687,11 @@ func parseChatResponse(body io.Reader) (*ChatCompletionResponse, error) { return &response, nil } +const ( + initialStreamBuffer = 64 * 1024 + maxStreamLine = 8 * 1024 * 1024 +) + func parseStreamingChatResponse( ctx context.Context, r *http.Response, @@ -694,6 +699,7 @@ func parseStreamingChatResponse( ) (*ChatCompletionResponse, error) { // Parse response scanner := bufio.NewScanner(r.Body) + scanner.Buffer(make([]byte, 0, initialStreamBuffer), maxStreamLine) responseChan := make(chan StreamedChatResponsePayload) go func() { diff --git a/llms/openai/long_stream_line_test.go b/llms/openai/long_stream_line_test.go new file mode 100644 index 000000000..3b86cc4a2 --- /dev/null +++ b/llms/openai/long_stream_line_test.go @@ -0,0 +1,44 @@ +package openai + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestAStreamedLineLongerThanTheDefaultBufferSurvives(t *testing.T) { + t.Parallel() + + long := strings.Repeat("a", 200*1024) + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = fmt.Fprintf(w, "data: {\"id\":\"x\",\"object\":\"chat.completion.chunk\",\"created\":1,"+ + "\"model\":\"gpt-4o\",\"choices\":[{\"index\":0,\"delta\":{\"content\":%q},\"finish_reason\":null}]}\n\n", long) + _, _ = io.WriteString(w, "data: {\"id\":\"x\",\"object\":\"chat.completion.chunk\",\"created\":1,"+ + "\"model\":\"gpt-4o\",\"choices\":[{\"index\":0,\"delta\":{},\"finish_reason\":\"stop\"}]}\n\n") + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + require.NoError(t, err, "a long line must not end the stream") + require.Len(t, resp.Choices, 1) + assert.Len(t, resp.Choices[0].Content, len(long)) +} From 80840e113ce9548ff38d8f2c60f2c63e0d1fd25d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 11:50:06 +0300 Subject: [PATCH 174/618] fix(structuredoutput): close every object and admit the null a door allows RequireClosedObjects walked only half the keywords that can hold a schema, so an object under not/if/then/else/contains/propertyNames/unevaluated* or dependentSchemas skipped the additionalProperties:false rule the guard exists to enforce and reached the vendor as a 4xx. A live call confirms the rule is real: Anthropic rejects a nested object that does not close itself. The validator also read nullable:true as an unknown annotation while both Google doors carry it to the wire, so a null the schema itself permitted came back as a validation failure. It now widens the declared type by null, and by null alone. PAGI-157 --- llms/structuredoutput/schema.go | 8 ++++-- llms/structuredoutput/schema_test.go | 29 +++++++++++++++++++ llms/structuredoutput/validator.go | 38 +++++++++++++++++++++++++ llms/structuredoutput/validator_test.go | 22 ++++++++++++++ 4 files changed, 95 insertions(+), 2 deletions(-) diff --git a/llms/structuredoutput/schema.go b/llms/structuredoutput/schema.go index 61b5fa6f2..2052c9500 100644 --- a/llms/structuredoutput/schema.go +++ b/llms/structuredoutput/schema.go @@ -35,7 +35,7 @@ func requireClosed(node any) error { llms.ErrStructuredOutputConfig) } } - for _, key := range []string{"properties", "patternProperties", "$defs", "definitions"} { + for _, key := range []string{"properties", "patternProperties", "$defs", "definitions", "dependentSchemas"} { if group, ok := m[key].(map[string]any); ok { for _, v := range group { if err := requireClosedValue(v); err != nil { @@ -44,7 +44,11 @@ func requireClosed(node any) error { } } } - for _, key := range []string{"items", "prefixItems", "additionalProperties", "anyOf", "oneOf", "allOf"} { + for _, key := range []string{ + "items", "prefixItems", "additionalProperties", "anyOf", "oneOf", "allOf", + "not", "if", "then", "else", "contains", "propertyNames", + "unevaluatedItems", "unevaluatedProperties", + } { if err := requireClosedValue(m[key]); err != nil { return err } diff --git a/llms/structuredoutput/schema_test.go b/llms/structuredoutput/schema_test.go index 48c020d27..ca2a8b3b2 100644 --- a/llms/structuredoutput/schema_test.go +++ b/llms/structuredoutput/schema_test.go @@ -48,3 +48,32 @@ func TestRequireClosedObjects(t *testing.T) { }) } } + +func TestRequireClosedObjectsReachesEveryKeywordThatHoldsASchema(t *testing.T) { + t.Parallel() + + open := `{"type":"object","properties":{"x":{"type":"string"}}}` + + for _, keyword := range []string{ + "not", "if", "then", "else", "contains", "propertyNames", + "unevaluatedItems", "unevaluatedProperties", + } { + t.Run(keyword, func(t *testing.T) { + t.Parallel() + schema := []byte(`{"type":"object","additionalProperties":false,"properties":{},"` + + keyword + `":` + open + `}`) + if err := structuredoutput.RequireClosedObjects(schema); err == nil { + t.Fatalf("an object under %q is still an object schema and must be closed", keyword) + } + }) + } + + t.Run("dependentSchemas", func(t *testing.T) { + t.Parallel() + schema := []byte(`{"type":"object","additionalProperties":false,"properties":{},` + + `"dependentSchemas":{"x":` + open + `}}`) + if err := structuredoutput.RequireClosedObjects(schema); err == nil { + t.Fatal("an object under dependentSchemas must be closed too") + } + }) +} diff --git a/llms/structuredoutput/validator.go b/llms/structuredoutput/validator.go index 1f62a8a0e..7d48d0523 100644 --- a/llms/structuredoutput/validator.go +++ b/llms/structuredoutput/validator.go @@ -24,6 +24,7 @@ func Compile(schema json.RawMessage) (*Compiled, error) { if err != nil { return nil, fmt.Errorf("parse schema: %w", err) } + doc = admitNullable(doc) const resource = "structuredoutput:schema" comp := jsonschema.NewCompiler() comp.UseLoader(jsonschema.SchemeURLLoader{}) @@ -37,6 +38,43 @@ func Compile(schema json.RawMessage) (*Compiled, error) { return &Compiled{schema: sch}, nil } +func admitNullable(node any) any { + switch typed := node.(type) { + case map[string]any: + for key, value := range typed { + typed[key] = admitNullable(value) + } + if nullable, ok := typed["nullable"].(bool); ok && nullable { + typed["type"] = withNull(typed["type"]) + } + return typed + case []any: + for i, item := range typed { + typed[i] = admitNullable(item) + } + return typed + } + return node +} + +func withNull(declared any) any { + switch typed := declared.(type) { + case string: + if typed == "null" { + return typed + } + return []any{typed, "null"} + case []any: + for _, entry := range typed { + if name, _ := entry.(string); name == "null" { + return typed + } + } + return append(typed, "null") + } + return declared +} + // ValidateText parses text as exactly one JSON value (trailing text or a second // value is rejected) and validates it against the compiled schema. Numbers decode // via json.Number so large integers are not degraded to float64 before validation. diff --git a/llms/structuredoutput/validator_test.go b/llms/structuredoutput/validator_test.go index 153acc9cc..73db01884 100644 --- a/llms/structuredoutput/validator_test.go +++ b/llms/structuredoutput/validator_test.go @@ -147,3 +147,25 @@ func TestCompileStillAcceptsInternalAndDraftRefs(t *testing.T) { } } } + +func TestTheValidatorAdmitsTheNullableSpellingTheDoorsSendOnTheWire(t *testing.T) { + t.Parallel() + + schema := json.RawMessage(`{"type":"object","additionalProperties":false,` + + `"properties":{"a":{"type":"string","nullable":true}},"required":["a"]}`) + + compiled, err := structuredoutput.Compile(schema) + if err != nil { + t.Fatalf("Compile() error: %v", err) + } + + if err := compiled.ValidateText(`{"a":null}`); err != nil { + t.Fatalf("a null the schema declared nullable must validate, got: %v", err) + } + if err := compiled.ValidateText(`{"a":"x"}`); err != nil { + t.Fatalf("the declared type must still validate, got: %v", err) + } + if err := compiled.ValidateText(`{"a":7}`); err == nil { + t.Fatal("nullable widens the type by null alone, not by every type") + } +} From bf6bff549215aa81280e9702e82cbdcbcd3e51fc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 11:56:35 +0300 Subject: [PATCH 175/618] fix(httprr): scrub the OpenAI project id the recorder let through The scrubbing test rebuilt the production regexes inline instead of calling reqWire, so it stayed green while the real scrubber matched nothing: Go canonicalizes the header to Openai-Project and the pattern looked for lower case. Driving the real function through a request exposed that, and the response scrubber turned out to mask the organization header while leaving the project id beside it. 107 recordings carry that id in their captured responses; they are rewritten with the placeholder and their block lengths recomputed, and every suite that replays them still matches. PAGI-157 --- .../TestConversationalWithMemory.httprr | 12 +-- .../testdata/TestExecutorWithMRKLAgent.httprr | 8 +- ...TestExecutorWithOpenAIFunctionAgent.httprr | 8 +- ...nAIFunctionsAgentComplexCalculation.httprr | 4 +- .../TestOpenAIFunctionsAgentWithHTTPRR.httprr | 8 +- .../testdata/TestConstitutionalChain.httprr | 8 +- .../TestConstitutionalChainBasic.httprr | 8 +- chains/testdata/TestConversation.httprr | 8 +- .../TestConversationWithChatLLM.httprr | 12 +-- chains/testdata/TestLLMChain.httprr | 4 +- chains/testdata/TestLLMMath.httprr | 4 +- chains/testdata/TestMapReduceQA.httprr | 56 +++++++------- .../TestMapReduceSummarization.httprr | 56 +++++++------- chains/testdata/TestRefineQA.httprr | 52 ++++++------- .../testdata/TestRefineSummarization.httprr | 52 ++++++------- chains/testdata/TestRetrievalQA.httprr | 4 +- chains/testdata/TestRetrievalQAFromLLM.httprr | 4 +- chains/testdata/TestStuffDocuments.httprr | 4 +- chains/testdata/TestStuffSummarization.httprr | 4 +- .../testdata/TestOpenaiEmbeddings.httprr | 8 +- ...estOpenaiEmbeddingsQueryVsDocuments.httprr | 8 +- .../TestOpenaiEmbeddingsWithOptions.httprr | 8 +- internal/httprr/normalization_test.go | 76 +++++++------------ internal/httprr/rr.go | 5 +- .../TestClient_CreateChatCompletion.httprr | 4 +- ...stClient_CreateChatCompletionStream.httprr | 4 +- .../TestClient_CreateEmbedding.httprr | 4 +- ...lient_CreateEmbeddingWithDimensions.httprr | 4 +- .../testdata/TestClient_FunctionCall.httprr | 4 +- .../TestClient_WithResponseFormat.httprr | 4 +- .../TestFunctionCall-streaming-openai.httprr | 4 +- ...TestFunctionCall-synchronous-openai.httprr | 4 +- ...nctionParallelCall-streaming-openai.httprr | 4 +- ...tionParallelCall-synchronous-openai.httprr | 4 +- .../testdata/TestMultiContentImage.httprr | 4 +- .../TestMultiContentText-openai.httprr | 4 +- ...MultiContentTextChatSequence-openai.httprr | 4 +- ...xtWithReasoning-streaming-openai-o1.httprr | 4 +- ...hReasoning-streaming-openai-o3-mini.httprr | 4 +- ...xtWithReasoning-streaming-openai-o3.httprr | 4 +- ...hReasoning-streaming-openai-o4-mini.httprr | 4 +- ...WithReasoning-synchronous-openai-o1.httprr | 4 +- ...easoning-synchronous-openai-o3-mini.httprr | 4 +- ...WithReasoning-synchronous-openai-o3.httprr | 4 +- ...easoning-synchronous-openai-o4-mini.httprr | 4 +- ...itCaching_Conversation_NonReasoning.httprr | 12 +-- ...licitCaching_Conversation_Reasoning.httprr | 12 +-- ...Conversation_Streaming_NonReasoning.httprr | 8 +- ...ng_Conversation_Streaming_Reasoning.httprr | 8 +- ...hing_IdenticalRequests_NonReasoning.httprr | 8 +- ...Caching_IdenticalRequests_Reasoning.httprr | 8 +- ...licitCaching_Streaming_NonReasoning.httprr | 8 +- ...ImplicitCaching_Streaming_Reasoning.httprr | 8 +- ...TestStructuredOutputFunctionCalling.httprr | 4 +- ...tructuredOutputObjectAndArraySchema.httprr | 4 +- .../TestStructuredOutputObjectSchema.httprr | 4 +- .../testdata/TestWithStreaming-openai.httprr | 4 +- .../testdata/TestChromaAsRetriever.httprr | 12 +-- ...ieverWithMetadataFilterEqualsClause.httprr | 12 +-- ...RetrieverWithMetadataFilterInClause.httprr | 12 +-- ...rieverWithMetadataFilterNotSelected.httprr | 12 +-- ...hromaAsRetrieverWithMetadataFilters.httprr | 12 +-- ...ChromaAsRetrieverWithScoreThreshold.httprr | 12 +-- .../testdata/TestChromaGoStoreRest.httprr | 8 +- ...stChromaStoreRestWithScoreThreshold.httprr | 12 +-- ...ritySearchWithInvalidScoreThreshold.httprr | 4 +- .../testdata/TestMilvusConnection.httprr | 12 +-- .../v2/testdata/TestAddDocuments.httprr | 4 +- .../v2/testdata/TestSimilaritySearch.httprr | 8 +- .../testdata/TestOpensearchAsRetriever.httprr | 12 +-- ...searchAsRetrieverWithScoreThreshold.httprr | 12 +-- .../testdata/TestOpensearchStoreRest.httprr | 8 +- ...ensearchStoreRestWithScoreThreshold.httprr | 8 +- .../pgvector/testdata/TestDeduplicater.httprr | 4 +- .../testdata/TestPgvectorAsRetriever.httprr | 12 +-- ...rieverWithMetadataFilterNotSelected.httprr | 12 +-- ...ectorAsRetrieverWithMetadataFilters.httprr | 12 +-- ...vectorAsRetrieverWithScoreThreshold.httprr | 12 +-- .../testdata/TestPgvectorStoreRest.httprr | 8 +- ...PgvectorStoreRestWithScoreThreshold.httprr | 12 +-- .../TestPgvectorStoreSimilarityScore.httprr | 8 +- ...laritySearchWithDifferentDimensions.httprr | 8 +- ...ritySearchWithInvalidScoreThreshold.httprr | 4 +- .../testdata/TestWithAllOptions.httprr | 16 ++-- .../testdata/TestPineconeAsRetriever.httprr | 12 +-- ...ieverWithMetadataFilterEqualsClause.httprr | 12 +-- ...RetrieverWithMetadataFilterInClause.httprr | 12 +-- ...rieverWithMetadataFilterNotSelected.httprr | 12 +-- ...econeAsRetrieverWithMetadataFilters.httprr | 12 +-- ...neconeAsRetrieverWithScoreThreshold.httprr | 12 +-- .../testdata/TestPineconeStoreRest.httprr | 8 +- ...PineconeStoreRestWithScoreThreshold.httprr | 12 +-- ...ritySearchWithInvalidScoreThreshold.httprr | 4 +- .../testdata/TestAddDocuments.httprr | 8 +- ...ectorAsRetrieverWithMetadataFilters.httprr | 8 +- .../testdata/TestSimilaritySearch.httprr | 24 +++--- .../weaviate/testdata/TestDeduplicater.httprr | 4 +- .../testdata/TestMetadataSearch.httprr | 4 +- ...ritySearchWithInvalidScoreThreshold.httprr | 4 +- .../testdata/TestWeaviateAsRetriever.httprr | 12 +-- ...ieverWithMetadataFilterEqualsClause.httprr | 12 +-- ...rieverWithMetadataFilterNotSelected.httprr | 12 +-- ...viateAsRetrieverWithMetadataFilters.httprr | 12 +-- ...aviateAsRetrieverWithScoreThreshold.httprr | 12 +-- ...tWeaviateStoreAdditionalFieldsAdded.httprr | 8 +- ...aviateStoreAdditionalFieldsDefaults.httprr | 8 +- .../testdata/TestWeaviateStoreRest.httprr | 8 +- ...WeaviateStoreRestWithScoreThreshold.httprr | 12 +-- .../TestWeaviateWithOptionEmbedder.httprr | 8 +- 109 files changed, 547 insertions(+), 566 deletions(-) diff --git a/agents/testdata/TestConversationalWithMemory.httprr b/agents/testdata/TestConversationalWithMemory.httprr index 755a75073..da70fd7a9 100644 --- a/agents/testdata/TestConversationalWithMemory.httprr +++ b/agents/testdata/TestConversationalWithMemory.httprr @@ -1,5 +1,5 @@ httprr trace v1 -2253 1791 +2253 1775 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:34:14 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1036 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_d26779296341482991e77f86e14a3ecd "service_tier": "default", "system_fingerprint": "fp_deacdd5f6f" } -2459 1674 +2459 1658 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:34:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 481 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -135,7 +135,7 @@ X-Request-Id: req_c25a675b6c844e45abcc89b4d11cadb5 "service_tier": "default", "system_fingerprint": "fp_deacdd5f6f" } -2562 1706 +2562 1690 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -152,7 +152,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:34:18 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 735 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/agents/testdata/TestExecutorWithMRKLAgent.httprr b/agents/testdata/TestExecutorWithMRKLAgent.httprr index 4459080ca..4962c1ccc 100644 --- a/agents/testdata/TestExecutorWithMRKLAgent.httprr +++ b/agents/testdata/TestExecutorWithMRKLAgent.httprr @@ -1,5 +1,5 @@ httprr trace v1 -1276 1722 +1276 1706 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:31 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1349 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_af502bd24da948b99ae29d0f6d6eaf1d "service_tier": "default", "system_fingerprint": null } -1435 1634 +1435 1618 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:33 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 747 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/agents/testdata/TestExecutorWithOpenAIFunctionAgent.httprr b/agents/testdata/TestExecutorWithOpenAIFunctionAgent.httprr index eee7b2f02..2a9792cb0 100644 --- a/agents/testdata/TestExecutorWithOpenAIFunctionAgent.httprr +++ b/agents/testdata/TestExecutorWithOpenAIFunctionAgent.httprr @@ -1,5 +1,5 @@ httprr trace v1 -1176 1913 +1176 1897 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:31 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1138 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -453,7 +453,7 @@ X-Xss-Protection: 1; mode=block "10": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&q=Go+programming+language+version+1.0+release+date&start=90" } } -}1619 1647 +}1619 1631 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -470,7 +470,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:36 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 759 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/agents/testdata/TestOpenAIFunctionsAgentComplexCalculation.httprr b/agents/testdata/TestOpenAIFunctionsAgentComplexCalculation.httprr index 0ea2b4cb2..e63b6117d 100644 --- a/agents/testdata/TestOpenAIFunctionsAgentComplexCalculation.httprr +++ b/agents/testdata/TestOpenAIFunctionsAgentComplexCalculation.httprr @@ -1,5 +1,5 @@ httprr trace v1 -839 2073 +839 2057 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:32 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 2110 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/agents/testdata/TestOpenAIFunctionsAgentWithHTTPRR.httprr b/agents/testdata/TestOpenAIFunctionsAgentWithHTTPRR.httprr index 4ae798ef2..218be60e8 100644 --- a/agents/testdata/TestOpenAIFunctionsAgentWithHTTPRR.httprr +++ b/agents/testdata/TestOpenAIFunctionsAgentWithHTTPRR.httprr @@ -1,5 +1,5 @@ httprr trace v1 -738 1879 +738 1863 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:30 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 608 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -77,7 +77,7 @@ X-Request-Id: req_176d0b02c64e43499a56aedc6739ba74 "service_tier": "default", "system_fingerprint": "fp_deacdd5f6f" } -996 1625 +996 1609 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -94,7 +94,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 11:36:32 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 365 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/constitution/testdata/TestConstitutionalChain.httprr b/chains/constitution/testdata/TestConstitutionalChain.httprr index a2399fc68..c20262df4 100644 --- a/chains/constitution/testdata/TestConstitutionalChain.httprr +++ b/chains/constitution/testdata/TestConstitutionalChain.httprr @@ -1,5 +1,5 @@ httprr trace v1 -279 2266 +279 2250 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:10:20 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1023 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_62ebca9f6e0e4e42af0cd60944eba9fe "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -5573 2010 +5573 1994 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:10:23 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 974 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestConstitutionalChainBasic.httprr b/chains/testdata/TestConstitutionalChainBasic.httprr index 4d44760f7..17d208e25 100644 --- a/chains/testdata/TestConstitutionalChainBasic.httprr +++ b/chains/testdata/TestConstitutionalChainBasic.httprr @@ -1,5 +1,5 @@ httprr trace v1 -279 2111 +279 2095 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:10:54 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1182 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_30989395ee5145efba17fb2908c645e8 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -5420 1879 +5420 1863 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:10:56 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 510 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestConversation.httprr b/chains/testdata/TestConversation.httprr index f89b6c939..750538aed 100644 --- a/chains/testdata/TestConversation.httprr +++ b/chains/testdata/TestConversation.httprr @@ -1,5 +1,5 @@ httprr trace v1 -550 1664 +550 1648 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:10:57 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 435 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_c080b93441a74fbcb184222818aea779 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -636 1623 +636 1607 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:10:59 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 224 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestConversationWithChatLLM.httprr b/chains/testdata/TestConversationWithChatLLM.httprr index b592f8b04..79b72e4a0 100644 --- a/chains/testdata/TestConversationWithChatLLM.httprr +++ b/chains/testdata/TestConversationWithChatLLM.httprr @@ -1,5 +1,5 @@ httprr trace v1 -550 1757 +550 1741 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:05 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 428 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_57a451cf7eae4f10996783c99331cf0b "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -728 1743 +728 1727 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:06 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 371 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -135,7 +135,7 @@ X-Request-Id: req_e7d87af6ac0b4ed1ad55aa8acdcd26b8 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -910 1845 +910 1829 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -152,7 +152,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:08 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 591 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestLLMChain.httprr b/chains/testdata/TestLLMChain.httprr index caf8a4b46..3d273a808 100644 --- a/chains/testdata/TestLLMChain.httprr +++ b/chains/testdata/TestLLMChain.httprr @@ -1,5 +1,5 @@ httprr trace v1 -296 1637 +296 1621 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:11 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 230 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestLLMMath.httprr b/chains/testdata/TestLLMMath.httprr index c8e74c98b..ea830186f 100644 --- a/chains/testdata/TestLLMMath.httprr +++ b/chains/testdata/TestLLMMath.httprr @@ -1,5 +1,5 @@ httprr trace v1 -698 1750 +698 1734 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:10 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 646 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestMapReduceQA.httprr b/chains/testdata/TestMapReduceQA.httprr index 3a62e493d..19f0f9aaa 100644 --- a/chains/testdata/TestMapReduceQA.httprr +++ b/chains/testdata/TestMapReduceQA.httprr @@ -1,5 +1,5 @@ httprr trace v1 -912 1631 +912 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 156 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_ff564b24538b40cca3599465a4b06cda "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -813 1704 +813 1688 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 222 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -135,7 +135,7 @@ X-Request-Id: req_6b618442dc224dec8737d774b8f342b1 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -810 1691 +810 1675 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -152,7 +152,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 280 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -203,7 +203,7 @@ X-Request-Id: req_5f4b3f21c44046c7a8e28df09fb24950 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -833 1704 +833 1688 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -220,7 +220,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 297 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -271,7 +271,7 @@ X-Request-Id: req_a7dd85a3d25c4ee7be05e5e487141792 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -748 1683 +748 1667 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -288,7 +288,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 356 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -339,7 +339,7 @@ X-Request-Id: req_1882c182579048c9b703413ea16b7095 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -957 1667 +957 1651 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -356,7 +356,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 232 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -407,7 +407,7 @@ X-Request-Id: req_db291d449f4b420586b5fe4ff1045070 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -780 1667 +780 1651 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -424,7 +424,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 367 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -475,7 +475,7 @@ X-Request-Id: req_71f179a844f2465baa14fc7284c2d14b "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -833 1718 +833 1702 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -492,7 +492,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 346 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -543,7 +543,7 @@ X-Request-Id: req_976e7eb43ad64f489c919cb718aa44eb "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -993 1766 +993 1750 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -560,7 +560,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 464 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -611,7 +611,7 @@ X-Request-Id: req_7106ef00e4174a3780f569e6f76dbcc5 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -967 1750 +967 1734 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -628,7 +628,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 437 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -679,7 +679,7 @@ X-Request-Id: req_bc131077299a4405820f55fa53d1b617 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -828 1679 +828 1663 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -696,7 +696,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:37 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 261 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -747,7 +747,7 @@ X-Request-Id: req_fd9c0bcf7bb046c78e8ae258adbad086 "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -740 1706 +740 1690 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -764,7 +764,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:37 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 335 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -815,7 +815,7 @@ X-Request-Id: req_79c0c643aa3245119e076b60caa9fe98 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -676 1685 +676 1669 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -832,7 +832,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:37 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 371 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -883,7 +883,7 @@ X-Request-Id: req_a2ef86416b9a470c8a43a7a616196dd1 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -2892 1636 +2892 1620 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -900,7 +900,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:38 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 176 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestMapReduceSummarization.httprr b/chains/testdata/TestMapReduceSummarization.httprr index 754d5d099..f8433449b 100644 --- a/chains/testdata/TestMapReduceSummarization.httprr +++ b/chains/testdata/TestMapReduceSummarization.httprr @@ -1,5 +1,5 @@ httprr trace v1 -673 1710 +673 1694 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 287 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_c0a7599ca70c4443aad7ac6400f74ab1 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -775 1711 +775 1695 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 310 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -135,7 +135,7 @@ X-Request-Id: req_6a6fc8a9fa0247d88def7a1e649f42cf "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -676 1744 +676 1728 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -152,7 +152,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 371 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -203,7 +203,7 @@ X-Request-Id: req_1280b6cd3f69467390035e2b89222b07 "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -696 1750 +696 1734 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -220,7 +220,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 355 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -271,7 +271,7 @@ X-Request-Id: req_cbdd69bdf18b495c83e6d9e223cc7e81 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -611 1744 +611 1728 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -288,7 +288,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 385 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -339,7 +339,7 @@ X-Request-Id: req_47958f07e05648e488639b2d9ed4c46b "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -643 1754 +643 1738 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -356,7 +356,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:17 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 357 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -407,7 +407,7 @@ X-Request-Id: req_050b04406f4442b78fefe6ec6e45a905 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -820 1726 +820 1710 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -424,7 +424,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:17 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 359 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -475,7 +475,7 @@ X-Request-Id: req_2926ae26a12f49dca36b73dcc1280dee "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -856 1798 +856 1782 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -492,7 +492,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:17 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 411 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -543,7 +543,7 @@ X-Request-Id: req_4e521affd8024775bd4deef58cdad40b "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -696 1782 +696 1766 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -560,7 +560,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:17 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 376 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -611,7 +611,7 @@ X-Request-Id: req_d7621ba943d0484b93ab468bbf6344c7 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -830 1783 +830 1767 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -628,7 +628,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:18 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 422 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -679,7 +679,7 @@ X-Request-Id: req_ee8f531e4aaf4e928e6c879809951735 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -539 1726 +539 1710 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -696,7 +696,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:19 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 325 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -747,7 +747,7 @@ X-Request-Id: req_996f1cbbbd6b4d4ebb32b6aeb274fd33 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -691 1763 +691 1747 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -764,7 +764,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:19 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 370 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -815,7 +815,7 @@ X-Request-Id: req_2a4ed55a698049ccb1ab3a6b4fd6d593 "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -603 1789 +603 1773 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -832,7 +832,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:19 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 531 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -883,7 +883,7 @@ X-Request-Id: req_cfaad0a44e5943e7878839b706a01365 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -3433 2091 +3433 2075 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -900,7 +900,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:21 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 844 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestRefineQA.httprr b/chains/testdata/TestRefineQA.httprr index c524dd119..90ba592ee 100644 --- a/chains/testdata/TestRefineQA.httprr +++ b/chains/testdata/TestRefineQA.httprr @@ -1,5 +1,5 @@ httprr trace v1 -849 1621 +849 1605 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:15 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 153 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_23d053eac51d4829a04885bca9908ec4 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -995 1685 +995 1669 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:17 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 353 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -135,7 +135,7 @@ X-Request-Id: req_466184182e354b4fba8e56e394a089fa "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1055 1685 +1055 1669 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -152,7 +152,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:18 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 324 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -203,7 +203,7 @@ X-Request-Id: req_69cd51d4adbd43f0b88a2bd347b16bd8 "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -1157 1631 +1157 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -220,7 +220,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:20 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 242 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -271,7 +271,7 @@ X-Request-Id: req_65032217542e44799196cc4ff04a9c24 "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -940 1631 +940 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -288,7 +288,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:21 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 214 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -339,7 +339,7 @@ X-Request-Id: req_5115847e8c2843fc97887e6d1a998ddc "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -972 1631 +972 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -356,7 +356,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:22 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 194 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -407,7 +407,7 @@ X-Request-Id: req_0ec31d8e63f049968b322632169874c7 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -1185 1631 +1185 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -424,7 +424,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:24 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 282 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -475,7 +475,7 @@ X-Request-Id: req_71debcfa24fd40b29a50cb48e5f399be "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -1149 1631 +1149 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -492,7 +492,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:25 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 229 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -543,7 +543,7 @@ X-Request-Id: req_fcca0359346e4cbd80c51726afea8581 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -1025 1631 +1025 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -560,7 +560,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:27 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 166 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -611,7 +611,7 @@ X-Request-Id: req_2398797159f649c5bcf51a430a3f6c86 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1159 1631 +1159 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -628,7 +628,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:28 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 218 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -679,7 +679,7 @@ X-Request-Id: req_592dc34a61fc4d71adf9daed83c7d573 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -932 1631 +932 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -696,7 +696,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:29 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 143 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -747,7 +747,7 @@ X-Request-Id: req_5f38a40c30a14708bc8d73bd29830e9a "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1020 1631 +1020 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -764,7 +764,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:31 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 223 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -815,7 +815,7 @@ X-Request-Id: req_42dc5b16ace64fd4a11c216bd957f73a "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -868 1631 +868 1615 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -832,7 +832,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:32 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 235 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestRefineSummarization.httprr b/chains/testdata/TestRefineSummarization.httprr index 3f481ae62..b4b5b8242 100644 --- a/chains/testdata/TestRefineSummarization.httprr +++ b/chains/testdata/TestRefineSummarization.httprr @@ -1,5 +1,5 @@ httprr trace v1 -696 1729 +696 1713 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:46 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 317 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -67,7 +67,7 @@ X-Request-Id: req_38657f7c59364503b7bd7d360c4610a2 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1107 1811 +1107 1795 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -84,7 +84,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:48 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 496 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -135,7 +135,7 @@ X-Request-Id: req_658cf445887f4e56b206f9e50c78241a "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -1184 1907 +1184 1891 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -152,7 +152,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:50 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 653 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -203,7 +203,7 @@ X-Request-Id: req_ff22b2dcb2644da09f1cf9be900d499e "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -1383 2000 +1383 1984 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -220,7 +220,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:52 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 965 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -271,7 +271,7 @@ X-Request-Id: req_fd50f679eb4e48f3aa9766cbb95b0086 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -1312 2131 +1312 2115 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -288,7 +288,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:54 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 791 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -339,7 +339,7 @@ X-Request-Id: req_f9ce4ff032ed4dfda540a39413030adc "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1474 2195 +1474 2179 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -356,7 +356,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:56 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1015 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -407,7 +407,7 @@ X-Request-Id: req_80ae1d364e6c4141b3db695c6ac14c53 "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1749 2322 +1749 2306 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -424,7 +424,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:59 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1925 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -475,7 +475,7 @@ X-Request-Id: req_91043f5ae83b4f0c86a95c20a286e112 "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -1840 2448 +1840 2432 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -492,7 +492,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:02 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1404 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -543,7 +543,7 @@ X-Request-Id: req_2d1ddbf2de5f454c884a1dab691bf01e "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1842 2522 +1842 2506 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -560,7 +560,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:04 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1259 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -611,7 +611,7 @@ X-Request-Id: req_fdaa66007df046aa99943944dd66567e "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -2050 2441 +2050 2425 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -628,7 +628,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:07 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1630 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -679,7 +679,7 @@ X-Request-Id: req_0e80bbd0edf04ce289895c9cfef26acb "service_tier": "default", "system_fingerprint": "fp_f0bc439dc3" } -1742 2215 +1742 2199 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -696,7 +696,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:09 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1005 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -747,7 +747,7 @@ X-Request-Id: req_97a0a00d7c964693bc5197d52c9e5291 "service_tier": "default", "system_fingerprint": "fp_fe84ea9799" } -1604 2329 +1604 2313 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -764,7 +764,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:12 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1152 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -815,7 +815,7 @@ X-Request-Id: req_2000d90bb895432ab86a908a2711013a "service_tier": "default", "system_fingerprint": "fp_7f8eb7d1f9" } -1566 2440 +1566 2424 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -832,7 +832,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:12:14 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1503 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestRetrievalQA.httprr b/chains/testdata/TestRetrievalQA.httprr index 1add5c56d..e22d552be 100644 --- a/chains/testdata/TestRetrievalQA.httprr +++ b/chains/testdata/TestRetrievalQA.httprr @@ -1,5 +1,5 @@ httprr trace v1 -522 1652 +522 1636 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:40 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 278 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestRetrievalQAFromLLM.httprr b/chains/testdata/TestRetrievalQAFromLLM.httprr index 1a2b7cd75..a6b279410 100644 --- a/chains/testdata/TestRetrievalQAFromLLM.httprr +++ b/chains/testdata/TestRetrievalQAFromLLM.httprr @@ -1,5 +1,5 @@ httprr trace v1 -679 1616 +679 1600 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:41 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 196 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestStuffDocuments.httprr b/chains/testdata/TestStuffDocuments.httprr index f3ed69ce1..5ed77cad7 100644 --- a/chains/testdata/TestStuffDocuments.httprr +++ b/chains/testdata/TestStuffDocuments.httprr @@ -1,5 +1,5 @@ httprr trace v1 -561 1756 +561 1740 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:43 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 408 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/chains/testdata/TestStuffSummarization.httprr b/chains/testdata/TestStuffSummarization.httprr index d26a85468..df0a22b9c 100644 --- a/chains/testdata/TestStuffSummarization.httprr +++ b/chains/testdata/TestStuffSummarization.httprr @@ -1,5 +1,5 @@ httprr trace v1 -6236 2029 +6236 2013 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 21:11:45 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 699 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/embeddings/testdata/TestOpenaiEmbeddings.httprr b/embeddings/testdata/TestOpenaiEmbeddings.httprr index 7ca7dca57..fd12b0f3e 100644 --- a/embeddings/testdata/TestOpenaiEmbeddings.httprr +++ b/embeddings/testdata/TestOpenaiEmbeddings.httprr @@ -1,5 +1,5 @@ httprr trace v1 -254 34427 +254 34411 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 12:24:42 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 47 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -1586,7 +1586,7 @@ X-Request-Id: req_e9160a76366a45ec96272d7efc180583 "total_tokens": 3 } } -286 101104 +286 101088 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -1605,7 +1605,7 @@ Date: Thu, 22 Jan 2026 12:24:44 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 49 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/embeddings/testdata/TestOpenaiEmbeddingsQueryVsDocuments.httprr b/embeddings/testdata/TestOpenaiEmbeddingsQueryVsDocuments.httprr index bb5315c1f..4b575edd8 100644 --- a/embeddings/testdata/TestOpenaiEmbeddingsQueryVsDocuments.httprr +++ b/embeddings/testdata/TestOpenaiEmbeddingsQueryVsDocuments.httprr @@ -1,5 +1,5 @@ httprr trace v1 -250 34440 +250 34424 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 12:24:49 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 42 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -1586,7 +1586,7 @@ X-Request-Id: req_baf740aef97c465685ec1769739ef810 "total_tokens": 2 } } -250 34440 +250 34424 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -1605,7 +1605,7 @@ Date: Thu, 22 Jan 2026 12:24:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 41 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/embeddings/testdata/TestOpenaiEmbeddingsWithOptions.httprr b/embeddings/testdata/TestOpenaiEmbeddingsWithOptions.httprr index 529256497..05bf3a39f 100644 --- a/embeddings/testdata/TestOpenaiEmbeddingsWithOptions.httprr +++ b/embeddings/testdata/TestOpenaiEmbeddingsWithOptions.httprr @@ -1,5 +1,5 @@ httprr trace v1 -254 34427 +254 34411 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 12:24:57 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 39 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -1586,7 +1586,7 @@ X-Request-Id: req_83908fbab98a4fb79c9f33ce86324ddc "total_tokens": 3 } } -253 34388 +253 34372 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -1605,7 +1605,7 @@ Date: Thu, 22 Jan 2026 12:24:59 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 178 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/internal/httprr/normalization_test.go b/internal/httprr/normalization_test.go index 5eba4ce6b..19b626b7f 100644 --- a/internal/httprr/normalization_test.go +++ b/internal/httprr/normalization_test.go @@ -1,7 +1,9 @@ package httprr import ( - "regexp" + "net/http" + "path/filepath" + "strings" "testing" ) @@ -120,57 +122,33 @@ func TestVersionNormalizationConsistency(t *testing.T) { } func TestOpenAIProjectHeaderScrubbing(t *testing.T) { - tests := []struct { - name string - input string - expected string - }{ - { - name: "Remove OpenAI-Project header", - input: `POST /v1/chat/completions HTTP/1.1 -Host: api.openai.com -User-Agent: Go-http-client/1.1 -Authorization: Bearer sk-test -openai-project: proj-123456789 -Content-Type: application/json - -{"model":"gpt-4"}`, - expected: `POST /v1/chat/completions HTTP/1.1 -Host: api.openai.com -User-Agent: langchaingo-httprr -Authorization: Bearer sk-test -Content-Type: application/json - -{"model":"gpt-4"}`, - }, - { - name: "No OpenAI-Project header present", - input: `POST /v1/chat/completions HTTP/1.1 -Host: api.openai.com -User-Agent: Go-http-client/1.1 -Authorization: Bearer sk-test -Content-Type: application/json - -{"model":"gpt-4"}`, - expected: `POST /v1/chat/completions HTTP/1.1 -Host: api.openai.com -User-Agent: langchaingo-httprr -Authorization: Bearer sk-test -Content-Type: application/json + rr, err := create(filepath.Join(t.TempDir(), "scrub.httprr"), http.DefaultTransport) + if err != nil { + t.Fatalf("create() error: %v", err) + } + t.Cleanup(func() { _ = rr.Close() }) -{"model":"gpt-4"}`, - }, + req, err := http.NewRequest(http.MethodPost, "https://api.openai.com/v1/chat/completions", + strings.NewReader(`{"model":"gpt-4"}`)) + if err != nil { + t.Fatalf("NewRequest() error: %v", err) } + req.Header.Set("Authorization", "Bearer sk-test") + req.Header.Set("openai-project", "proj-123456789") + req.Header.Set("User-Agent", "Go-http-client/1.1") - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // This simulates what happens in reqWire during request serialization - result := regexp.MustCompile(`(?m)^User-Agent: .*$`).ReplaceAllString(tt.input, "User-Agent: langchaingo-httprr") - result = regexp.MustCompile(`(?m)^openai-project: .*\n`).ReplaceAllString(result, "") + wire, err := rr.reqWire(req) + if err != nil { + t.Fatalf("reqWire() error: %v", err) + } - if result != tt.expected { - t.Errorf("OpenAI-Project header scrubbing failed:\nGot:\n%s\n\nExpected:\n%s", result, tt.expected) - } - }) + if strings.Contains(strings.ToLower(wire), "openai-project") { + t.Errorf("the project header must not reach the cassette match key:\n%s", wire) + } + if strings.Contains(wire, "Go-http-client") { + t.Errorf("the user agent must be normalized in the match key:\n%s", wire) + } + if !strings.Contains(wire, `{"model":"gpt-4"}`) { + t.Errorf("the body must survive scrubbing:\n%s", wire) } } diff --git a/internal/httprr/rr.go b/internal/httprr/rr.go index 67c255743..fc438d49f 100644 --- a/internal/httprr/rr.go +++ b/internal/httprr/rr.go @@ -585,7 +585,7 @@ func (rr *RecordReplay) reqWire(req *http.Request) (string, error) { result = regexp.MustCompile(`(?m)^User-Agent: .*$`).ReplaceAllString(result, "User-Agent: langchaingo-httprr") // Remove OpenAI-Project header for consistency across recordings - result = regexp.MustCompile(`(?m)^openai-project: .*\n`).ReplaceAllString(result, "") + result = regexp.MustCompile(`(?mi)^openai-project: .*\n`).ReplaceAllString(result, "") // Normalize x-goog-api-client header with version information result = regexp.MustCompile(`(?m)^x-goog-api-client: (.*)$`).ReplaceAllStringFunc(result, func(match string) string { @@ -1214,6 +1214,9 @@ func getDefaultResponseScrubbers() []func(*bytes.Buffer) error { if resp.Header.Get("openai-organization") != "" { resp.Header.Set("openai-organization", "lcgo-tst") } + if resp.Header.Get("Openai-Project") != "" { + resp.Header.Set("Openai-Project", "proj_lcgo-tst") + } // Re-serialize the response buf.Reset() diff --git a/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletion.httprr b/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletion.httprr index 73192f374..ee936e90a 100644 --- a/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletion.httprr +++ b/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletion.httprr @@ -1,5 +1,5 @@ httprr trace v1 -330 1632 +330 1616 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 10 Mar 2026 15:25:58 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 967 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletionStream.httprr b/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletionStream.httprr index 549e01844..48280d8dd 100644 --- a/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletionStream.httprr +++ b/llms/openai/internal/openaiclient/testdata/TestClient_CreateChatCompletionStream.httprr @@ -1,5 +1,5 @@ httprr trace v1 -382 6250 +382 6234 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 10 Mar 2026 15:26:02 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 279 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbedding.httprr b/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbedding.httprr index d16026c99..65c5219d2 100644 --- a/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbedding.httprr +++ b/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbedding.httprr @@ -1,5 +1,5 @@ httprr trace v1 -253 34351 +253 34335 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Tue, 10 Mar 2026 15:26:06 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 78 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbeddingWithDimensions.httprr b/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbeddingWithDimensions.httprr index 3aa675a08..203e91d87 100644 --- a/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbeddingWithDimensions.httprr +++ b/llms/openai/internal/openaiclient/testdata/TestClient_CreateEmbeddingWithDimensions.httprr @@ -1,5 +1,5 @@ httprr trace v1 -270 6491 +270 6475 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Tue, 10 Mar 2026 15:26:14 GMT Openai-Model: text-embedding-3-small Openai-Organization: lcgo-tst Openai-Processing-Ms: 100 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/internal/openaiclient/testdata/TestClient_FunctionCall.httprr b/llms/openai/internal/openaiclient/testdata/TestClient_FunctionCall.httprr index 8188860df..f1db7a111 100644 --- a/llms/openai/internal/openaiclient/testdata/TestClient_FunctionCall.httprr +++ b/llms/openai/internal/openaiclient/testdata/TestClient_FunctionCall.httprr @@ -1,5 +1,5 @@ httprr trace v1 -578 1685 +578 1669 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 10 Mar 2026 15:26:19 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 327 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/internal/openaiclient/testdata/TestClient_WithResponseFormat.httprr b/llms/openai/internal/openaiclient/testdata/TestClient_WithResponseFormat.httprr index 214882109..5028c45c1 100644 --- a/llms/openai/internal/openaiclient/testdata/TestClient_WithResponseFormat.httprr +++ b/llms/openai/internal/openaiclient/testdata/TestClient_WithResponseFormat.httprr @@ -1,5 +1,5 @@ httprr trace v1 -412 1602 +412 1586 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 10 Mar 2026 15:26:24 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 580 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestFunctionCall-streaming-openai.httprr b/llms/openai/testdata/TestFunctionCall-streaming-openai.httprr index 97432f53e..91b6b555f 100644 --- a/llms/openai/testdata/TestFunctionCall-streaming-openai.httprr +++ b/llms/openai/testdata/TestFunctionCall-streaming-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -701 4693 +701 4677 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:58:23 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 218 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestFunctionCall-synchronous-openai.httprr b/llms/openai/testdata/TestFunctionCall-synchronous-openai.httprr index 6eb8b44d3..688ffbde0 100644 --- a/llms/openai/testdata/TestFunctionCall-synchronous-openai.httprr +++ b/llms/openai/testdata/TestFunctionCall-synchronous-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -647 1892 +647 1876 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:58:28 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 502 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestFunctionParallelCall-streaming-openai.httprr b/llms/openai/testdata/TestFunctionParallelCall-streaming-openai.httprr index e2dbc6356..3509e9049 100644 --- a/llms/openai/testdata/TestFunctionParallelCall-streaming-openai.httprr +++ b/llms/openai/testdata/TestFunctionParallelCall-streaming-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -978 7236 +978 7220 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:58:40 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 917 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestFunctionParallelCall-synchronous-openai.httprr b/llms/openai/testdata/TestFunctionParallelCall-synchronous-openai.httprr index c8a180fc3..f3b5495c5 100644 --- a/llms/openai/testdata/TestFunctionParallelCall-synchronous-openai.httprr +++ b/llms/openai/testdata/TestFunctionParallelCall-synchronous-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -924 2143 +924 2127 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:58:40 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 650 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentImage.httprr b/llms/openai/testdata/TestMultiContentImage.httprr index 60e7a35db..32782809e 100644 --- a/llms/openai/testdata/TestMultiContentImage.httprr +++ b/llms/openai/testdata/TestMultiContentImage.httprr @@ -1,5 +1,5 @@ httprr trace v1 -479 2188 +479 2172 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:57:29 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 5282 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentText-openai.httprr b/llms/openai/testdata/TestMultiContentText-openai.httprr index 0d418b6d7..ed22659f1 100644 --- a/llms/openai/testdata/TestMultiContentText-openai.httprr +++ b/llms/openai/testdata/TestMultiContentText-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -360 1920 +360 1904 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:48:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1739 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextChatSequence-openai.httprr b/llms/openai/testdata/TestMultiContentTextChatSequence-openai.httprr index acd5fe4ec..a241a2f84 100644 --- a/llms/openai/testdata/TestMultiContentTextChatSequence-openai.httprr +++ b/llms/openai/testdata/TestMultiContentTextChatSequence-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -392 1635 +392 1619 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:57:01 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 569 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o1.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o1.httprr index aafa57b9c..de7fde359 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o1.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o1.httprr @@ -1,5 +1,5 @@ httprr trace v1 -435 29065 +435 29049 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:49:57 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1510 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3-mini.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3-mini.httprr index c05666f89..e0705e7ce 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3-mini.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3-mini.httprr @@ -1,5 +1,5 @@ httprr trace v1 -440 40174 +440 40158 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:49:59 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 3350 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3.httprr index ee7af607f..48893a89b 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o3.httprr @@ -1,5 +1,5 @@ httprr trace v1 -435 39660 +435 39644 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:50:08 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 2151 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o4-mini.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o4-mini.httprr index 9698abadf..42c9dea37 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o4-mini.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openai-o4-mini.httprr @@ -1,5 +1,5 @@ httprr trace v1 -440 56316 +440 56300 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:49:59 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 3374 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o1.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o1.httprr index 3238f07e5..73ee83887 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o1.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o1.httprr @@ -1,5 +1,5 @@ httprr trace v1 -381 1759 +381 1743 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:50:08 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 5158 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3-mini.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3-mini.httprr index c06ccbeae..9a1647943 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3-mini.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3-mini.httprr @@ -1,5 +1,5 @@ httprr trace v1 -386 1981 +386 1965 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:50:05 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 6023 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3.httprr index bd3fc9799..b9475b8bd 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o3.httprr @@ -1,5 +1,5 @@ httprr trace v1 -381 1824 +381 1808 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:50:06 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 2569 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o4-mini.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o4-mini.httprr index 95ddb887e..504e7d4aa 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o4-mini.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openai-o4-mini.httprr @@ -1,5 +1,5 @@ httprr trace v1 -386 1907 +386 1891 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 19:50:02 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 5837 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_NonReasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_NonReasoning.httprr index c1bf1b125..9d44717d1 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_NonReasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_NonReasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -15713 1863 +15713 1847 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:36:16 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 521 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -76,7 +76,7 @@ X-Request-Id: req_88ba8171d49e43fd993fc22b891679be "service_tier": "default", "system_fingerprint": "fp_376a7ccef1" } -16138 1864 +16138 1848 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -93,7 +93,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:36:58 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 531 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -153,7 +153,7 @@ X-Request-Id: req_0f3adcfdf5dd4753b3df41da46304524 "service_tier": "default", "system_fingerprint": "fp_376a7ccef1" } -16521 1921 +16521 1905 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -170,7 +170,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:37:41 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1122 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Reasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Reasoning.httprr index 21ebd3f3a..df7dbeb3c 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Reasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Reasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -16555 1928 +16555 1912 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:40:27 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 2599 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -75,7 +75,7 @@ X-Request-Id: req_a1b9227506384efb94d4ee37ca86ebc3 "service_tier": "default", "system_fingerprint": "fp_d48b29c73d" } -17091 1884 +17091 1868 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -92,7 +92,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:41:12 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 2810 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -141,7 +141,7 @@ X-Request-Id: req_f7e503892bd64fafb152a72ee1b64aaf "service_tier": "default", "system_fingerprint": "fp_d48b29c73d" } -17524 2922 +17524 2906 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -158,7 +158,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:42:01 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 7431 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_NonReasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_NonReasoning.httprr index af6522b54..3c8e5d383 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_NonReasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_NonReasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -10022 4605 +10022 4589 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 14:28:36 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 260 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -54,7 +54,7 @@ data: {"id":"chatcmpl-D2eLUfzqdgGwSYcCv5qX5RO3LKWRH","object":"chat.completion.c data: [DONE] -10122 4950 +10122 4934 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -71,7 +71,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 14:29:18 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 279 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_Reasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_Reasoning.httprr index bbb539313..9ebb411d9 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_Reasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Conversation_Streaming_Reasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -10444 4447 +10444 4431 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 14:29:28 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1356 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -54,7 +54,7 @@ data: {"id":"chatcmpl-D2eMI7eJ9gwsVw1F6IozM39rryB7M","object":"chat.completion.c data: [DONE] -10545 4760 +10545 4744 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -71,7 +71,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 14:30:10 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1280 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_NonReasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_NonReasoning.httprr index b736e1324..e1d4a05a6 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_NonReasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_NonReasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -16739 1580 +16739 1564 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:10:02 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 273 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -66,7 +66,7 @@ X-Request-Id: req_fde37f6a0b5942719d967bafdb71e3fa "service_tier": "default", "system_fingerprint": "fp_376a7ccef1" } -16739 1583 +16739 1567 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -83,7 +83,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:10:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 221 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_Reasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_Reasoning.httprr index 25a61154c..9a1926f84 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_Reasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_IdenticalRequests_Reasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -16396 1924 +16396 1908 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:19:42 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 4092 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -65,7 +65,7 @@ X-Request-Id: req_a34a8d2fd32d4c62a5cb80d64cb062fb "service_tier": "default", "system_fingerprint": "fp_d48b29c73d" } -16396 1941 +16396 1925 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -82,7 +82,7 @@ Content-Type: application/json Date: Tue, 27 Jan 2026 14:20:28 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 4002 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_NonReasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_NonReasoning.httprr index 86444876c..517636ccf 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_NonReasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_NonReasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -16393 2303 +16393 2287 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 13:08:49 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 252 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -40,7 +40,7 @@ data: {"id":"chatcmpl-D2d6GRbDfhhdC9gz4nZRPj6G3vBKn","object":"chat.completion.c data: [DONE] -16393 2303 +16393 2287 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -57,7 +57,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 13:09:00 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 182 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_Reasoning.httprr b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_Reasoning.httprr index 45cf9982c..daa37d9db 100644 --- a/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_Reasoning.httprr +++ b/llms/openai/testdata/TestOpenAI_ImplicitCaching_Streaming_Reasoning.httprr @@ -1,5 +1,5 @@ httprr trace v1 -13423 4447 +13423 4431 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 13:58:53 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1425 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -54,7 +54,7 @@ data: {"id":"chatcmpl-D2dshew96ac0wanFYXUWoofwsez3l","object":"chat.completion.c data: [DONE] -13423 4446 +13423 4430 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -71,7 +71,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Tue, 27 Jan 2026 13:59:25 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 809 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestStructuredOutputFunctionCalling.httprr b/llms/openai/testdata/TestStructuredOutputFunctionCalling.httprr index 50589d59a..0d9a86b08 100644 --- a/llms/openai/testdata/TestStructuredOutputFunctionCalling.httprr +++ b/llms/openai/testdata/TestStructuredOutputFunctionCalling.httprr @@ -1,5 +1,5 @@ httprr trace v1 -751 1925 +751 1909 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:01:53 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 734 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestStructuredOutputObjectAndArraySchema.httprr b/llms/openai/testdata/TestStructuredOutputObjectAndArraySchema.httprr index ba20730c5..3910ed333 100644 --- a/llms/openai/testdata/TestStructuredOutputObjectAndArraySchema.httprr +++ b/llms/openai/testdata/TestStructuredOutputObjectAndArraySchema.httprr @@ -1,5 +1,5 @@ httprr trace v1 -635 1776 +635 1760 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Content-Type: application/json Date: Thu, 16 Jul 2026 22:54:36 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1123 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestStructuredOutputObjectSchema.httprr b/llms/openai/testdata/TestStructuredOutputObjectSchema.httprr index 2d474bfc1..9a8c2a892 100644 --- a/llms/openai/testdata/TestStructuredOutputObjectSchema.httprr +++ b/llms/openai/testdata/TestStructuredOutputObjectSchema.httprr @@ -1,5 +1,5 @@ httprr trace v1 -576 1663 +576 1647 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Content-Type: application/json Date: Thu, 16 Jul 2026 22:54:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 393 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/llms/openai/testdata/TestWithStreaming-openai.httprr b/llms/openai/testdata/TestWithStreaming-openai.httprr index 17d9f7b6a..98acfd1c3 100644 --- a/llms/openai/testdata/TestWithStreaming-openai.httprr +++ b/llms/openai/testdata/TestWithStreaming-openai.httprr @@ -1,5 +1,5 @@ httprr trace v1 -419 109052 +419 109036 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,7 +16,7 @@ Content-Type: text/event-stream; charset=utf-8 Date: Thu, 22 Jan 2026 19:57:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 414 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaAsRetriever.httprr b/vectorstores/chroma/testdata/TestChromaAsRetriever.httprr index d53fda528..793677d45 100644 --- a/vectorstores/chroma/testdata/TestChromaAsRetriever.httprr +++ b/vectorstores/chroma/testdata/TestChromaAsRetriever.httprr @@ -1,5 +1,5 @@ httprr trace v1 -340 101256 +340 101240 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:14 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 45 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_86bd2d41ff4a48699c883c02fa4f1b97 "total_tokens": 24 } } -265 34414 +265 34398 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:36:15 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 117 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_74c0b9d10d8b49d184530f072c5259c4 "total_tokens": 6 } } -610 1638 +610 1622 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:36:17 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 228 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterEqualsClause.httprr b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterEqualsClause.httprr index b788ec19d..2994bf01d 100644 --- a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterEqualsClause.httprr +++ b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterEqualsClause.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 167982 +492 167966 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:26 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 44 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_b061fb035326487b8401ab34ada15dba "total_tokens": 55 } } -266 34416 +266 34400 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:36:27 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 47 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_8e678f5d73c7454f8a015151cd7784fa "total_tokens": 6 } } -731 1642 +731 1626 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:36:29 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 187 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterInClause.httprr b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterInClause.httprr index a06075667..9becd5eb6 100644 --- a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterInClause.httprr +++ b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterInClause.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 168027 +492 168011 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:32 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 51 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_48f0bca415484004bc4c15581ab8ddd1 "total_tokens": 55 } } -307 34421 +307 34405 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:36:33 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 39 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_3a3aad81a9cb428d928895ede86b217f "total_tokens": 17 } } -1019 1671 +1019 1655 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:36:35 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 290 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterNotSelected.httprr index c348a6987..e1e8466b5 100644 --- a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterNotSelected.httprr +++ b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilterNotSelected.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 167981 +492 167965 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:38 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 42 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_934ccbaa19ef44f19104f753ebc72f22 "total_tokens": 55 } } -296 34396 +296 34380 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:36:39 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 130 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_8355a3c678ab4cca886d8b2ffb921018 "total_tokens": 12 } } -1754 1693 +1754 1677 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:36:41 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 310 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilters.httprr b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilters.httprr index cb7446e9c..4bd30a5aa 100644 --- a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilters.httprr +++ b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithMetadataFilters.httprr @@ -1,5 +1,5 @@ httprr trace v1 -393 101158 +393 101142 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:44 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 68 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_1ea4e2e7a20448b29186e06947e09baa "total_tokens": 33 } } -281 34457 +281 34441 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:36:45 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 48 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_fd2cf9883db148a2b3a06f88211f41b6 "total_tokens": 9 } } -809 1643 +809 1627 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:36:47 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 373 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithScoreThreshold.httprr b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithScoreThreshold.httprr index 514382f72..1bda730a6 100644 --- a/vectorstores/chroma/testdata/TestChromaAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/chroma/testdata/TestChromaAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 168061 +441 168045 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:20 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 80 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_f25a637dee8f4fe4882d335cf1e45c1b "total_tokens": 46 } } -299 34430 +299 34414 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:36:21 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 32 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_2f88ad3afc434baa93a481d930f8d2b2 "total_tokens": 12 } } -1051 1683 +1051 1667 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:36:23 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 240 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaGoStoreRest.httprr b/vectorstores/chroma/testdata/TestChromaGoStoreRest.httprr index 147b6ae34..d9bb7b4c8 100644 --- a/vectorstores/chroma/testdata/TestChromaGoStoreRest.httprr +++ b/vectorstores/chroma/testdata/TestChromaGoStoreRest.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 67769 +256 67753 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:35:59 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 137 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -3128,7 +3128,7 @@ X-Request-Id: req_6965ce3074114615b541463cdc1bfdbc "total_tokens": 4 } } -247 34424 +247 34408 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -3147,7 +3147,7 @@ Date: Thu, 22 Jan 2026 20:36:00 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 72 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestChromaStoreRestWithScoreThreshold.httprr b/vectorstores/chroma/testdata/TestChromaStoreRestWithScoreThreshold.httprr index 0f3b9b9fe..ecc73ef91 100644 --- a/vectorstores/chroma/testdata/TestChromaStoreRestWithScoreThreshold.httprr +++ b/vectorstores/chroma/testdata/TestChromaStoreRestWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334548 +334 334532 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:04 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 73 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -15464,7 +15464,7 @@ X-Request-Id: req_ba4a327f729a441e909f1cca516e660b "total_tokens": 24 } } -276 34082 +276 34066 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -15483,7 +15483,7 @@ Date: Thu, 22 Jan 2026 20:36:05 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 101 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -17051,7 +17051,7 @@ X-Request-Id: req_a0c1a2fccb74447fa7c4a26b121e476f "total_tokens": 7 } } -276 34081 +276 34065 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -17070,7 +17070,7 @@ Date: Thu, 22 Jan 2026 20:36:07 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 37 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/chroma/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr b/vectorstores/chroma/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr index 0a7ab3c51..4c2f152c4 100644 --- a/vectorstores/chroma/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr +++ b/vectorstores/chroma/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334549 +334 334533 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:36:11 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 235 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/milvus/testdata/TestMilvusConnection.httprr b/vectorstores/milvus/testdata/TestMilvusConnection.httprr index 5c099f863..9cfc35965 100644 --- a/vectorstores/milvus/testdata/TestMilvusConnection.httprr +++ b/vectorstores/milvus/testdata/TestMilvusConnection.httprr @@ -1,5 +1,5 @@ httprr trace v1 -377 434498 +377 434482 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:59:06 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 50 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -20090,7 +20090,7 @@ X-Request-Id: req_b4c23ac1d42047b780225eef84f9d44b "total_tokens": 31 } } -247 34374 +247 34358 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -20109,7 +20109,7 @@ Date: Thu, 22 Jan 2026 20:59:11 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 33 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -21677,7 +21677,7 @@ X-Request-Id: req_dc24e46f8fcb4af5ad7847dfbd8bab44 "total_tokens": 2 } } -247 34376 +247 34360 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -21696,7 +21696,7 @@ Date: Thu, 22 Jan 2026 20:59:12 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 105 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/milvus/v2/testdata/TestAddDocuments.httprr b/vectorstores/milvus/v2/testdata/TestAddDocuments.httprr index 901fac64b..066d25e6a 100644 --- a/vectorstores/milvus/v2/testdata/TestAddDocuments.httprr +++ b/vectorstores/milvus/v2/testdata/TestAddDocuments.httprr @@ -1,5 +1,5 @@ httprr trace v1 -265 67858 +265 67842 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 21:08:40 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 209 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/milvus/v2/testdata/TestSimilaritySearch.httprr b/vectorstores/milvus/v2/testdata/TestSimilaritySearch.httprr index 77e560016..34aea4c55 100644 --- a/vectorstores/milvus/v2/testdata/TestSimilaritySearch.httprr +++ b/vectorstores/milvus/v2/testdata/TestSimilaritySearch.httprr @@ -1,5 +1,5 @@ httprr trace v1 -287 67741 +287 67725 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 21:08:55 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 63 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -3128,7 +3128,7 @@ X-Request-Id: req_7e252e3af3b3400ea84b016619a4b716 "total_tokens": 10 } } -245 34306 +245 34290 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -3147,7 +3147,7 @@ Date: Thu, 22 Jan 2026 21:08:56 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 117 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/opensearch/testdata/TestOpensearchAsRetriever.httprr b/vectorstores/opensearch/testdata/TestOpensearchAsRetriever.httprr index 60cad9d66..af8479523 100644 --- a/vectorstores/opensearch/testdata/TestOpensearchAsRetriever.httprr +++ b/vectorstores/opensearch/testdata/TestOpensearchAsRetriever.httprr @@ -1,5 +1,5 @@ httprr trace v1 -340 101258 +340 101242 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:19:55 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 138 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_7279659454d7438888c45f6e1d90cc85 "total_tokens": 24 } } -265 34413 +265 34397 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:19:58 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 77 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_d4a8e6d336d1488696c4913816dbd906 "total_tokens": 6 } } -610 1638 +610 1622 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:19:59 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 178 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/opensearch/testdata/TestOpensearchAsRetrieverWithScoreThreshold.httprr b/vectorstores/opensearch/testdata/TestOpensearchAsRetrieverWithScoreThreshold.httprr index 283edaf1c..6738973f8 100644 --- a/vectorstores/opensearch/testdata/TestOpensearchAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/opensearch/testdata/TestOpensearchAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 168060 +441 168044 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:20:08 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 46 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_e45ff9ea9c104c0c9bae049ed1473c6f "total_tokens": 46 } } -299 34432 +299 34416 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:20:11 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 139 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_e6975d15d8f14cd880ea449a6be2d50a "total_tokens": 12 } } -926 1683 +926 1667 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:20:13 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 347 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/opensearch/testdata/TestOpensearchStoreRest.httprr b/vectorstores/opensearch/testdata/TestOpensearchStoreRest.httprr index 698e246e6..5ded75cf1 100644 --- a/vectorstores/opensearch/testdata/TestOpensearchStoreRest.httprr +++ b/vectorstores/opensearch/testdata/TestOpensearchStoreRest.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 67760 +256 67744 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:19:35 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 34 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -3128,7 +3128,7 @@ X-Request-Id: req_82a266831adb4321b89273d3869cbacb "total_tokens": 4 } } -247 34426 +247 34410 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -3147,7 +3147,7 @@ Date: Thu, 22 Jan 2026 20:19:37 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 154 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/opensearch/testdata/TestOpensearchStoreRestWithScoreThreshold.httprr b/vectorstores/opensearch/testdata/TestOpensearchStoreRestWithScoreThreshold.httprr index 3329b2b45..71351c998 100644 --- a/vectorstores/opensearch/testdata/TestOpensearchStoreRestWithScoreThreshold.httprr +++ b/vectorstores/opensearch/testdata/TestOpensearchStoreRestWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334547 +334 334531 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:19:45 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 50 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -15464,7 +15464,7 @@ X-Request-Id: req_f348a4de78734428a0709730df17626d "total_tokens": 24 } } -276 34082 +276 34066 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -15483,7 +15483,7 @@ Date: Thu, 22 Jan 2026 20:19:48 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 117 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestDeduplicater.httprr b/vectorstores/pgvector/testdata/TestDeduplicater.httprr index 187477dcc..9a84910b9 100644 --- a/vectorstores/pgvector/testdata/TestDeduplicater.httprr +++ b/vectorstores/pgvector/testdata/TestDeduplicater.httprr @@ -1,5 +1,5 @@ httprr trace v1 -248 22147 +248 22131 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:04:39 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 74 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr index 3f39eafa2..fcce4e7a9 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr @@ -1,5 +1,5 @@ httprr trace v1 -340 64339 +340 64323 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:04:08 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 178 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -58,7 +58,7 @@ X-Request-Id: req_abf0d970e0c4416886161077433d76b9 "total_tokens": 24 }, "object": "list" -}265 22111 +}265 22095 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -77,7 +77,7 @@ Date: Thu, 22 Jan 2026 20:04:09 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 36 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -107,7 +107,7 @@ X-Request-Id: req_91060d2426ce49c8ab7885a26baa4a3b "prompt_tokens": 6, "total_tokens": 6 } -}610 1637 +}610 1621 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -124,7 +124,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:04:11 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 232 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr index 06f96e654..d7319a399 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr @@ -1,5 +1,5 @@ httprr trace v1 -554 106366 +554 106350 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:04:24 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 241 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -68,7 +68,7 @@ X-Request-Id: req_df4996cfd74548ff9c92a98c5f091ebe "prompt_tokens": 71 }, "object": "list" -}278 22090 +}278 22074 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -87,7 +87,7 @@ Date: Thu, 22 Jan 2026 20:04:25 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 34 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -117,7 +117,7 @@ X-Request-Id: req_bb4610e3c12e477e8974e4e8a0e1d029 "prompt_tokens": 9, "total_tokens": 9 } -}1799 1879 +}1799 1863 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -134,7 +134,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:04:27 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 557 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr index cd0ea7609..300b25162 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr @@ -1,5 +1,5 @@ httprr trace v1 -431 64228 +431 64212 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:04:31 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 57 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -58,7 +58,7 @@ X-Request-Id: req_c01bb7e609204d759fd650266e4533c0 "prompt_tokens": 43, "total_tokens": 43 } -}278 22090 +}278 22074 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -77,7 +77,7 @@ Date: Thu, 22 Jan 2026 20:04:33 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 40 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -107,7 +107,7 @@ X-Request-Id: req_0996ff38e0bf486db41992938b2c629d "prompt_tokens": 9, "total_tokens": 9 } -}823 1735 +}823 1719 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -124,7 +124,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:04:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 405 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr index 39b00f61a..3fbe1aa65 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 106539 +441 106523 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:04:16 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 43 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -68,7 +68,7 @@ X-Request-Id: req_058307448e324bc3958c7da418e46690 } ], "model": "text-embedding-ada-002-v2" -}327 22092 +}327 22076 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -87,7 +87,7 @@ Date: Thu, 22 Jan 2026 20:04:17 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 105 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -117,7 +117,7 @@ X-Request-Id: req_25786abf429546a0a9de6148854e5360 "prompt_tokens": 18, "total_tokens": 18 } -}1079 1698 +}1079 1682 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -134,7 +134,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:04:19 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 480 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorStoreRest.httprr b/vectorstores/pgvector/testdata/TestPgvectorStoreRest.httprr index f69aaa8b8..3c52cc636 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorStoreRest.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorStoreRest.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 43208 +256 43192 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:03:34 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 279 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -53,7 +53,7 @@ X-Request-Id: req_b0e056495f034a9c89ed10fa180afa5a "prompt_tokens": 4, "total_tokens": 4 } -}247 22117 +}247 22101 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -72,7 +72,7 @@ Date: Thu, 22 Jan 2026 20:03:36 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 177 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorStoreRestWithScoreThreshold.httprr b/vectorstores/pgvector/testdata/TestPgvectorStoreRestWithScoreThreshold.httprr index fd62350e3..bbc9acbd4 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorStoreRestWithScoreThreshold.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorStoreRestWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -333 211510 +333 211494 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:03:40 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 177 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -93,7 +93,7 @@ X-Request-Id: req_6e819f66001044a682389f5ca93baf97 "total_tokens": 23, "prompt_tokens": 23 } -}276 21774 +}276 21758 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -112,7 +112,7 @@ Date: Thu, 22 Jan 2026 20:03:42 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 44 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -142,7 +142,7 @@ X-Request-Id: req_a7624c7f5a2848e4b679855d9d7eb98c "prompt_tokens": 7, "total_tokens": 7 } -}276 21775 +}276 21759 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -161,7 +161,7 @@ Date: Thu, 22 Jan 2026 20:03:44 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 41 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestPgvectorStoreSimilarityScore.httprr b/vectorstores/pgvector/testdata/TestPgvectorStoreSimilarityScore.httprr index c3e34530a..851e819aa 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorStoreSimilarityScore.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorStoreSimilarityScore.httprr @@ -1,5 +1,5 @@ httprr trace v1 -333 64235 +333 64219 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:03:48 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 167 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -58,7 +58,7 @@ X-Request-Id: req_a422fff4b99d412c9be6201a41a82674 "total_tokens": 22 }, "object": "list" -}276 22025 +}276 22009 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -77,7 +77,7 @@ Date: Thu, 22 Jan 2026 20:03:50 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 118 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr b/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr index 05bd83d95..46f66c2e6 100644 --- a/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr +++ b/vectorstores/pgvector/testdata/TestSimilaritySearchWithDifferentDimensions.httprr @@ -28,7 +28,7 @@ X-Xss-Protection: 0 "values": [-0.0063551543, 0.016102875, 0.0025184422, -0.06450228, -0.011145094, -0.0017095193, -0.010466754, -0.014819786, 0.007944607, -0.009844465, 0.02627988, 0.0005290811, 0.021550694, 0.014117757, 0.08421562, 0.007890114, 0.021590482, -0.036296967, 0.008239877, -0.033143397, -0.024023073, -0.0071394015, 0.026021717, -0.016012026, -0.0013396433, 0.011513916, -0.00964948, -0.02027911, 0.020185934, 0.026132856, 0.022241998, -0.019913755, 0.0060549704, -0.017460946, 0.013950326, -0.013509957, 0.0044174525, 0.0081113335, -0.014121574, 0.0071531185, 0.015969781, 0.013153238, -0.004400515, 0.014650824, 0.0046382556, -0.019576825, 0.0066992207, -0.025219817, 0.028843993, 0.009681094, 0.028219955, 0.017304933, 0.003994314, -0.14916469, -0.0020506408, -0.022159234, -0.01220226, -0.0005695116, 0.016322328, 0.0036592477, -0.017106129, -0.013098781, -0.011157898, -0.0071095936, 0.0017108265, -0.0071799583, 0.022572618, 0.0046764133, -0.0512339, 0.00329169, 0.009588029, -0.011635375, -0.0017702867, 0.004274009, 0.0022750008, -0.018372174, -0.017434062, -0.009578391, -0.019144882, 0.02661255, -0.0058826096, 0.019118166, 0.0038887938, 0.0049904794, 0.008675974, 0.009201594, 0.0034076595, -0.0063505503, -0.0120315775, 0.022470584, 0.02058215, -0.00012978374, -0.0039833416, -0.022589803, 0.021844324, 0.018430045, -0.021536823, 0.007484924, 0.0023836636, 0.0020405757, -0.005447644, -0.0041501103, 0.009563024, 0.008413351, -0.0024128684, -0.02541384, 0.009046341, -0.0021488206, -0.0085451305, 0.014438212, -0.002896873, 0.007498084, -0.0025235151, 0.02277479, 0.016626634, -0.18287012, -0.0073958687, 0.012745881, 0.013355627, -0.006209894, 0.029279338, 0.010433714, 0.0098551065, -0.006656174, -0.020760003, -0.003321761, 0.010822108, -0.015899125, 0.009552324, 0.010090353, 0.0136583485, -0.0018861623, -0.005349075, -0.001015341, -0.034654666, 0.024294017, -0.008448941, -0.021153277, -0.020333815, -0.02146894, 0.007534668, -0.009168525, -0.010094172, -0.025726954, -0.012099901, -0.04991192, 0.004274897, 0.021763584, 0.010298866, 0.007188806, -0.007859624, 0.0034723051, -0.0051036524, 0.00055222417, -0.0030106427, -0.05011998, 0.0070394934, -0.009704327, 0.0045076204, -0.0029967614, -0.0018685178, 0.00027954477, 0.0057056723, 0.004698614, 0.015422536, 0.018253483, -0.02473913, 0.011234085, 0.01670005, 0.016503641, 0.02322702, 0.014981803, -0.011549604, 0.0030360892, 0.0034499634, -0.006891598, -0.011392665, 0.0053600525, 0.0017250235, -0.015849752, 0.0019526418, 0.00441381, 0.0011083069, 0.00879632, -0.006487191, -0.006071513, -0.014979449, 0.002908953, 0.007734771, -0.00062810123, -0.013057615, 0.004856765, -0.028751146, -0.0378328, 0.0071902177, -0.0026101978, -0.006176157, -0.014301397, 0.009311645, 0.005812043, 0.006216182, -0.028744193, -0.026385684, -0.0117400745, -0.016666705, -0.03396553, -0.026202817, 0.007959171, -0.00038143582, 0.0060949964, 0.010590929, 0.0046335543, 0.017146029, 0.00062021264, 0.011148049, 6.3616985e-06, -0.026893452, 0.016917495, 0.012630638, 0.00021880504, 0.008228402, -0.0035598008, 0.004849153, -0.00068987056, 0.020476872, 0.015225312, 0.011713798, 0.010487364, -0.021695467, -0.004192251, -0.008274628, 0.002563185, -0.007375835, -0.004681318, -0.025145316, 0.0067083687, 0.033540048, -0.0061201155, -0.0024181919, 0.025476867, 0.018105075, 0.007092122, -0.04112829, 0.01879443, 0.012370854, -0.021660259, 0.01008139, -0.015663356, 0.023410449, 0.018574718, -0.020436762, 0.0044952407, -0.008403982, -0.0048802453, 0.009639978, -0.01811318, -0.023762362, 0.0104453005, 0.016646363, 0.019754373, -0.04181457, -0.0061548315, -0.009867979, 0.0033878842, -0.018200044, -0.012585777, 0.02678131, 0.024188522, -0.03144448, 0.033384383, -0.0007540113, 0.009400057, -0.00971263, 0.0021998873, 0.0009807494, 0.0032415488, -0.124622345, 0.011174502, 0.024572065, -0.011790753, -0.012057281, -0.010909291, -0.029012749, 0.0068161655, 0.01376444, -0.003577031, -0.0074938694, -0.023549544, 0.029214898, 0.009093398, -0.010575748, -0.008189132, -0.0037616221, 0.0145715065, 0.030900769, -0.035605688, 0.0020199956, 0.0041381693, -0.020411737, -0.028485753, 0.011085002, 0.0035083066, 0.025516436, 0.016869627, -0.004033204, -0.006885995, -0.0040293713, -0.011581048, 0.033477582, 0.02492992, 0.008761239, -0.010692216, -0.006940811, -0.024590697, 0.0025437665, -0.006774471, -0.004200975, -0.00869821, 0.00758568, 0.01852672, -0.01876319, 0.0045159985, -0.013281693, -0.0004899191, -0.01579372, 0.018986015, -0.021734033, -0.006706007, 0.0060647964, -0.0019459872, -0.007123383, 0.012118385, 0.01166797, 0.0020355766, -0.005540299, 0.004892636, 0.0064751203, -0.0013884788, 0.0037279443, -0.023315618, -0.018937973, 0.011611779, -0.015195095, 0.016511658, -0.005727811, 0.025226949, 0.009488917, -0.021378398, -0.019656911, -0.016410029, 0.021136995, 0.035832502, -0.013867513, 0.004386308, 0.0015575212, -0.003359174, 0.005140994, -0.016254758, 0.026736539, -0.0062967846, 0.027923945, 0.008575099, 0.019918622, 0.0152424155, 0.021759192, -0.0379675, 0.013200135, 0.006362793, 0.017756319, -0.006131732, 0.009085887, -0.013920091, 0.013506577, 0.0013176923, 0.0068232627, 0.00810692, -0.023185266, -0.013748858, 0.013784822, -0.0053748903, 0.0012270955, -0.018692145, -0.0025695444, 0.033486832, 0.013972321, -0.0046645477, 0.007211459, 0.003860303, 0.033323407, 0.03173955, 0.0022209324, 0.008125612, 0.00032341457, -0.003504367, 0.008849454, -0.014901913, 0.020093285, 0.010984518, 0.020708168, -0.027557617, -0.019866042, -0.019064197, -0.009329451, -0.001619139, 0.017031545, 0.008624701, 0.0075506493, -0.00046830848, -0.012231559, 0.005261167, -0.009973151, 0.012327313, -0.00029284228, -0.012177945, 0.026138522, -0.0052511594, -0.032983255, 0.0019666967, -0.01631379, -0.005283866, 0.0067007225, -0.018335393, -0.01242996, 0.023244824, 0.004459207, -0.012739205, -0.023677023, -0.008792814, -0.015042924, -0.015243082, -0.01852342, -0.00979116, -0.010403343, 0.011183803, -0.014179961, -0.01996088, 0.008711537, 0.01358377, -0.017433995, -0.009293668, 0.0025363783, -0.0039437036, 0.003040843, 0.014627929, -0.01513753, -0.010893818, 0.028436167, -0.00030052045, -0.016798263, -0.0037398995, 0.013743322, 0.024623534, 0.0017090314, 0.021805495, 0.0021703215, -0.0035057694, 0.021018457, 0.03189835, 0.009966769, -0.012396259, 0.01910743, 0.01285138, -0.008228967, 0.042157833, -0.0034584103, 0.014909452, -0.037549157, 0.0023912285, 0.0041717207, -0.0024750216, -0.0026060815, -0.0011443269, -0.010756205, 0.02133299, 0.0049221194, -0.006027957, -0.021874117, 0.011923416, -0.017914725, -0.027032953, -0.004819454, -0.0038527464, 0.005984662, -0.003016204, -0.014474656, -0.0059804735, -0.0024918262, -0.0051547373, -0.019267162, -0.0043931603, 0.0015678286, 0.005682289, -0.004605099, -0.018670866, 0.013046881, 0.012114228, -0.0049528107, -0.0049569765, 0.0076052253, 0.019269137, 0.0035500932, 0.017008971, -0.009618731, -0.0027449355, -0.0066079027, -0.025162073, 0.023254089, 0.020586526, 0.020907655, 0.0078194635, 0.017589271, -0.0093044415, 0.03972411, -0.01367009, 0.021820767, 0.0065663103, 0.022037128, 0.0033105027, -0.017324902, 0.01886154, -0.0024833062, -0.033237927, -0.029825876, -0.007130667, 0.008148691, -0.013622872, 0.008215217, 0.023586703, -0.0032375052, 0.018134532, 0.003340157, 0.062084984, 0.024971696, 0.00078927726, -0.008140991, 0.022751125, 0.0024958488, 0.021983938, 0.030028807, 0.013055454, 0.021202512, 0.008967539, 0.014477907, -0.024139725, -0.007268213, -0.08979645, 0.009827532, 0.0044519864, 0.006242123, -0.028093224, -0.007492523, 0.0108569795, -0.038266905, -0.00062515767, -0.020292485, 0.0069982656, -0.009460653, -0.022561941, -0.0016777073, 0.009359358, -0.0056340685, 0.0009903106, 0.02589537, 0.013633952, -0.008307132, 0.022135915, 0.022014154, -0.0015987023, -0.008531485, -0.038564667, 0.0136941, 0.007536604, -0.0034995447, 0.0077190925, 0.003736426, -0.005453855, -0.0037902861, -0.009574276, 0.02503652, -0.009713838, 0.025748665, -0.0030429803, -0.0017319445, -0.005556372, 0.007151899, 0.00044861686, 0.024243254, -0.0011174859, -0.0042923554, -0.0034043856, 0.0020586264, -0.0024652036, 0.0010641557, 0.0063525126, 0.0061083874, -0.033520598, 0.024725132, -0.009062996, -0.018589048, -0.027296893, 0.009039292, -0.019942956, -0.014651528, 0.008203328, 0.006380216, -0.0029732834, 0.0148180835, -0.0037313567, 0.018803854, 0.009569448, 0.0015683277, 0.007917696, -0.0044776164, 0.02532016, -0.0073694712, -0.012464774, -0.008975098, -0.029023916, 0.0112504475, -0.0024546199, 0.008568983, -0.0025914637, 0.007500221, 0.01136516, 0.006178373, 0.00065487315, -0.0010890116, -0.111340486, 0.0076107616, -0.011710949, 0.002834612, -0.01966956, 0.00855262, -0.0010161481, -0.011820341, -0.0019463799, 0.0014960662, 0.02480435, 0.0032408242, -0.013242925, 4.790979e-05, -0.0032446042, -0.009810685, -0.0024709958, -0.002814128, -7.2203e-05, 7.994804e-05, 0.007851277, 0.0056396984, 0.009152572, 0.011867177, 0.004770401, -0.012824003, 0.0012317409, -0.0285443, -0.010837693, -0.0030892438, -0.005758533, -0.13255383, 0.0047593284, 0.028043093, -0.023309993, -0.0077553773, -0.029166562, -0.0064552925, 0.02165724, 0.0039130286, -0.009785951, -0.0125840865, 0.013915085, -0.010369048, 0.011079606, -0.015707199, 0.14853208, -0.0194613, -0.0038884897, 0.014487094, -0.022777615, -0.0142748235, 0.009197172, -0.0061391294, -0.01160789, 0.0054051797, 0.0031735098, 0.004734277, 0.019488329, -0.009929215, -0.0153087545, -0.00031808962, -0.011743752, -0.0063962415, 0.009748386, -0.0021266262, -0.009444004, -0.01820517, 0.010775697, 0.009769245, 0.0023124106, 0.011758359, 0.0019383354, -0.025756916, -0.0058244932, -0.016744541, -0.005177213, -0.0010623655, -0.007505421, -0.010191935, 0.023054658, -0.020112004, -0.063145414, 0.005531174, -0.0010751032, -0.014058348, 0.029796744, -0.002334073, 0.017840018, 0.009151701, -0.0042541544, -0.0019743878, -0.06923265, -0.009436598, 0.0233867, -0.007027338, 0.008806033, 0.012857061, 0.018439652, 0.025269529, 0.017095635, 0.0062048156, 0.010068323, -0.022050511, 0.007765344, 0.0005873925, -0.0069274115, 0.015783776, 0.0015900064, 0.010024876, -0.0115946885, -0.007553512, -0.0017752476, 0.014310054, -0.0014167057, 0.010843936, -0.00752356, 0.015507261, 0.027154377, -0.021629224, 0.0020533637, 0.008390171, -0.01356634, 0.012175692, 0.00056733814, -0.0029302756, 0.007758077, -0.013251133, 0.03735139, -0.011355253, -0.0008606549, 0.018703135, -0.031041395, 0.001513347, -0.03283054, 0.036566976, 0.015855275, -0.01553206, -0.0018216535, 0.026656386, 0.009425796, 0.013647747, -0.0038406998, -0.0034908426, 0.032966126, -0.020823695, 0.014203207, 0.0035750426, -0.008039023, -0.0061734766, -0.018390669, 0.0031592986, 0.01102675, -0.009378094, 0.01946, 0.0056270505, -0.006576176, -0.0036247377, 0.002222759, -0.005955491, 0.0033926242, -0.0022702909, 0.004542753, -0.0020777804, 0.0069348146, 0.018808065, 0.002593777, 0.00035886414, 0.0023482353, 0.0053278566, -0.0048979986, -0.0027712337, -0.01519547, 0.014016227, -0.003993287, -0.0039424673, 0.0068112765, 0.0009354211, 0.009655554, -0.0021440438, -0.01173959, -0.009086621, -0.003311498, -0.0075752395, -0.005547464, -0.012148378, 0.0055227103, 0.004714189, 0.0074225753, -0.008678949, -0.006936506, -0.011988269, 0.0145136425, 0.008268353, 0.0013511959, 0.0022097428, 0.0067520393, -0.015721671, 0.0015095283, 0.0018876757, 0.0131803, -0.0052125994, 0.013240421, 0.0032718752, 0.011470708, 0.019719018, -0.007868722, -0.0031630448, -0.013607919, -0.007671135, 0.02265445, -0.018993057, 0.0011178631, 0.0030184465, -0.0032923226, -0.012910732, 0.0055696806, -0.004385955, -0.014097004, 0.013098738, 0.009927833, -0.020466123, -0.031790804, 0.008953468, -0.007841991, 0.009622844, 0.011689912, 0.014736357, 0.011966775, -0.0049949824, -0.013456217, 0.0029761053, -0.0004972462, 0.0018124623, 0.023450242, 0.008818961, 0.015578403, 0.006838381, 0.011787743, 0.006401848, -0.008554068, 0.0032769984, 0.005691664, 0.0033446192, 0.004996657, -0.012328935, -0.00014337787, -0.0072276476, -0.013489926, 0.006542398, 0.0024200412, 0.006407659, 0.00658257, 0.0098438375, -0.006926448, -0.0018434568, -0.011406963, 0.002057549, -0.0028111308, -0.0062484816, 0.0047938316, -0.007665935, 0.014911896, 0.012184405, -0.0004537209, 0.017269272, 0.0015187316, 0.022711638, -0.009039745, 0.000566125, 0.0057224897, -0.014241028, 0.00728214, -0.012275623, -0.003991845, 0.0031499718, 0.013683913, 0.005002052, 0.007791011, -0.006061983, 0.012462491, -0.017259948, -0.003294801, 0.020635586, 0.0064685466, -0.0032722915, -0.010588137, 0.0055095153, 0.012568544, 0.020467281, 0.0039871284, -0.006567104, -0.0052050436, 0.019310508, 0.0007541559, -0.0039628134, 0.0018161333, -0.025565801, 0.0022170816, 0.008383371, 0.0016976749, 0.0013169087, 0.0072280904, 0.00043818206, 0.006487496, -0.008234987, -0.013804775, -0.0071011824, 0.004301779, 0.0076040607, 0.00026553465, -0.013978863, -0.0022398445, -0.010073331, 0.001378665, -0.011655543, -0.0025281853, 0.0064877234, 0.005105184, -0.001253591, -0.016037136, 0.0022178087, -0.00018209097, -0.0017776627, 9.390462e-05, -0.010127431, 0.010108842, 0.008802711, 0.0012650582, 0.0014346605, -0.0022895061, -0.009721528, 0.002106671, -0.0032146594, 0.0012294214, 0.025103608, -0.0060916333, -0.004375702, 0.0031169306, -0.002403232, 0.0036379022, 0.099150434, 0.0050977077, 0.019103516, 0.018123176, -0.00641615, -0.007812411, 0.01689265, 0.006873689, 0.0012032719, -0.010745668, -0.0072558033, -0.0057703336, -0.016017653, 0.011575295, -0.014287684, 0.0040288507, 0.00035499665, 0.0038425853, -0.0059944894, 0.0064374455, -0.01055123, -0.011411333, -0.0020794396, -0.03357867, 0.023145113, 0.0038708441, 0.013038566, 0.0013081246, 0.0137445815, 0.0037631444, 0.006775272, -0.014702711, -0.012787806, -0.011213579, 0.0018051929, 0.007411551, 0.0012860112, 0.0023756204, 0.008827388, 0.008103292, -0.006595727, 0.009404119, 0.005707071, -0.0076382444, 0.0044162855, -0.011250839, -0.007862551, -0.004038489, -0.013900646, 0.009726302, -0.010318265, -0.0049637896, -0.008849078, 0.011831046, -0.018245734, 0.0026684778, 0.0030156735, 0.002048939, -0.017357029, -0.006360324, -0.0031979224, 0.013873581, -0.011460241, 0.015699241, -0.006945846, -0.014704577, 0.001639534, -0.0036077767, 7.477201e-05, -0.0070529534, -0.0074082003, 0.008105086, 0.0027408854, -0.012404076, 0.047166396, -0.023610884, 0.005393696, -0.009819781, -0.020763718, 0.016728906, -0.0044856705, -0.011954361, -0.005414105, 0.0039427187, -0.003017932, -0.005948869, -0.018116254, -0.0055170427, -0.012061531, 0.0025465896, 0.019162923, -0.0038469536, -0.02426238, 0.0033866293, 0.001715548, -0.0126257595, 0.110108815, 0.009526291, 0.015302868, -0.0018256153, 0.009874081, -0.015023826, -0.0026252833, -0.007113226, 0.012222318, 0.010760951, -0.0006905928, 0.008161423, 0.017670702, -0.0023108753, 0.014374014, -0.008081441, -0.008081291, 0.0125306295, -0.0026793822, -0.0032000365, -0.007764513, 0.008264854, -0.017081711, 0.01505305, 0.015108973, -0.0058961324, -0.008967146, -0.0009737416, -0.026299978, -0.010576113, -0.009151786, 0.000629556, -0.00080465974, 0.009976492, -0.005365671, -0.014674663, 0.0056867753, 0.00039618395, -0.008198037, -0.019754961, -0.006353381, -0.0047243657, 0.011523915, -0.003669543, -0.001969544, 0.009289482, -0.0057113664, 7.804169e-05, -0.005704618, 0.017114911, -0.00028992468, 0.0021905575, 0.0032700768, -0.003848536, -0.0069853826, 0.0154455695, -0.008593011, -0.01874888, 0.00533686, -0.013470405, 0.010130901, 0.0016556757, 0.01733363, 0.012311638, 0.0010464182, 0.016613899, -0.0018007389, -0.0075159017, 2.5645355e-05, -0.010907435, 0.013142811, -0.022482142, -0.011474547, 0.018076569, 0.005050351, -0.001997235, 0.008096223, 0.0043833777, 0.00949188, 0.01515072, 0.00046413866, -0.00854549, -0.004377132, -0.0063424995, -0.000576798, 0.004404358, -0.0059497557, 0.019253355, 0.005373753, -0.005796289, -0.0045998674, 0.015444049, 0.013625838, -0.0019261105, -0.0049046995, -0.028571926, 0.028330754, -0.0026768905, -0.014038912, 0.017988183, -0.012462325, -0.0029675905, 0.016606113, -0.014302834, -0.018672237, -0.015079303, -0.0022023825, -0.026077606, 0.010548628, -0.023084678, -0.005073793, -0.004002584, 0.00067545514, -0.0009742146, -0.018017456, 0.0034590624, -0.0023994674, 0.0032991623, 0.003367507, -0.0026153838, 0.0057632807, -0.008392058, -0.0018211775, 0.0071298676, 0.012505902, 0.0028128691, -0.021341728, 0.0074576484, 0.016159458, 0.0098391455, 0.0046103573, -0.029048951, 0.0044192513, -0.035650607, -0.0012240071, -0.01462015, -0.0025579168, 0.01802885, -0.016236685, -0.0030668057, -0.012446593, -0.013280719, 0.0039154715, -0.019768277, -0.0018593695, 0.013105579, -0.012902612, -0.0011059877, 0.008373417, 0.024523573, -0.0046463627, 0.012843337, -0.01789186, 0.0013248714, -0.008297413, -0.0017105504, 0.002998413, 0.008483556, 0.0025365911, -0.01965758, -0.00034947516, -0.07128841, 0.02114405, 0.012849592, 0.0044030068, 0.012301979, 0.0012762411, 0.010948455, -0.009778161, -0.0076717194, -0.004807137, 0.011057163, -0.0027344066, 0.0039713355, 0.014307493, -0.004719575, -0.005606275, -0.004857556, 0.0030969298, -0.0071502356, 0.0071694753, 0.0056118337, -0.011003906, -0.013242454, -0.002201133, -0.011210143, 0.011707216, 0.014977044, 0.01779632, 0.0049853637, 0.011419012, -0.015742203, -0.00091059506, 0.019840932, -0.0076076766, 0.014827489, -0.0013193649, -0.004084095, -0.0046535544, -0.0033257792, 0.016922941, 0.00933627, -0.0029515675, -0.019037096, -0.011801967, -0.009330346, -0.010905885, 0.007985489, 0.009175586, -0.0026117398, -0.017909586, -0.018827332, 0.010766246, -0.012840325, -0.010998265, 0.016460525, 0.006236891, 0.010233909, 0.0026413705, -0.008256922, 0.00972893, 0.007981085, 0.01276551, 0.0018061681, -0.0043630814, -0.00842181, 0.004283824, -0.0077637713, 0.015816802, -0.009293964, 0.012796772, 0.0040589576, 0.0011082987, 0.010102504, -0.01052493, -0.008747211, 0.012556736, -0.0055830814, 0.014535094, -0.0045808023, 0.00898575, 0.0039800196, -0.00030643796, -0.009707205, -0.0021455677, 0.004889441, -0.0019278255, -0.00551531, -0.00697778, -0.009371127, -0.007763565, 0.0070936517, 0.010226026, -0.025632773, -0.0029757218, -0.0073764855, -0.0039766, -0.01939676, -0.005446109, -0.009669013, 0.013183179, 0.005567823, -0.019986682, -0.009758843, -0.00025886044, -0.0105059445, 0.020477045, 0.011233786, 0.0077587278, 0.0035075815, 0.007340564, -0.0016727118, -0.0027424465, 0.01035379, 0.007912738, -0.000476204, 0.004735652, 0.0073024845, 0.01843886, 0.019832747, -0.00910018, -0.015345127, 0.008405346, 0.0019537315, 0.0019164104, 0.002299855, 0.002696311, 0.005631684, 0.00578032, 0.00852868, 0.0028267794, 0.008999864, -0.007418031, 0.02282058, 0.011151882, -0.024318231, 0.0009780303, 0.0048498465, 0.012158211, 0.013832286, 0.005164173, 0.0015807186, -0.011898483, -0.009008129, -0.008798536, -0.010670915, 0.014252894, 0.009829728, -0.009099043, 0.0069771223, 0.02418554, 0.015512573, 0.00018900732, 0.0064851698, 0.019639648, 0.0027836817, -0.008141263, -0.001998092, -0.008841341, -0.0021694945, -0.027253378, 0.021251235, 0.0019023509, 0.0038814552, 0.0021502986, 0.014704044, 0.0013565895, 0.007978371, -0.0006929121, 0.010177474, 0.0063588684, -0.0010999792, 0.011858147, 0.00059684494, 0.013481803, -0.0013868957, -0.0039049794, 0.0035277978, -0.0069398256, 0.013482031, 0.0053362814, 0.011165399, -0.0091067515, 0.009329792, 8.713115e-05, 0.001329974, 0.003414262, 0.009019938, 0.0031056672, -0.009470695, -0.0022317746, -0.027405925, 0.025359284, 0.012371703, -0.0037342575, 0.0018377325, 0.00076526735, -0.015860876, 0.0033443947, 0.0005435608, 0.011880754, 0.0064352187, -0.0040956065, 0.0013957444, -0.0019419627, -0.004247217, -0.10113446, -0.0049007274, 0.005112618, 0.014931993, -0.004185019, -0.011393176, 0.01751062, 0.0077599576, -0.0061833723, -0.029866148, 0.004701496, -0.0037799496, -0.0043319985, -0.0015041421, -0.004327486, -0.01946988, 0.0157463, -0.009110845, -0.0012058119, 0.010209955, 0.012683676, 0.008276147, -0.009890312, 0.009617936, 0.0058802175, -0.0015596602, 0.011550261, 0.009336738, 0.01749894, 0.010255385, -0.027008766, 0.013050459, 0.008046472, 0.0030197853, -0.004652549, 0.0069988957, 0.009348113, 0.0010765893, -0.13154635, 0.0012652715, -0.0071356157, -0.0040416284, -5.566019e-05, 0.00078611454, -1.2464685e-05, 0.00022251309, -0.0005219734, 0.017187934, 0.0023682495, 0.0081900945, 0.003430522, -0.0023826663, -0.007831453, -0.0032064104, -0.01439624, 0.023305664, -0.0075669624, 0.015986707, -0.0068884487, 0.00775772, 0.01839717, 0.008425049, 0.00012909493, -0.014745144, 0.004739198, 0.020555062, -0.014311922, -0.0004176774, -0.0014121381, -0.0014468001, -0.009847998, -0.0040604915, 0.0064213397, 0.0001540802, -0.0045972574, 0.004563926, 5.513047e-05, -0.013095992, -2.350623e-05, 0.00257934, -0.022639152, -0.004979251, -0.0066806725, 0.01242826, -0.01733605, 0.015073579, 0.004502074, -0.013236162, 0.005460156, 0.008564144, -0.018589975, 0.011798008, 0.01764574, -0.006389439, 0.013675649, 0.0027546242, 0.004415887, 0.0009002774, 0.0007691865, 0.008201844, -0.0050344197, -0.0043231295, 0.0039198464, -0.00011188745, -0.011282626, 0.0126269655, 0.013221059, 0.011627293, -0.006934167, -0.00085665955, -0.018859025, -0.014511176, -0.00013327446, 7.926157e-05, -0.0009064932, 0.009159476, 0.007928088, -0.007916146, -0.0027911032, -0.0050543775, -0.0042212503, 0.014304856, 0.009245745, -0.03528282, -7.623171e-05, -0.00063225004, -0.00079313794, -0.041682914, -0.022347867, 0.008790185, 0.010286237, 0.01932483, 0.009303921, 0.014143503, -0.00030344658, 0.008106611, 0.0033638885, 0.013180762, 0.00077922305, -0.005838258, 0.012066535, 0.0051860586, -0.0070442194, -0.006834165, -0.00023954672, 0.007342173, -0.023239428, -0.003617059, -0.0026720944, -0.003708353, 0.0154788615, 0.009052739, 0.0043318435, 0.0039538904, -0.0017184541, -0.002295819, -0.008554293, -0.007275183, 0.024533488, -0.01794375, -0.007010153, 0.0021689893, 0.009303209, -0.0012250267, 0.028254261, 0.0009670305, -0.010763198, -0.016930241, 0.0051692757, 0.0061168987, -0.012951033, -0.0076493258, -0.0026840272, 0.011222177, -0.0010592218, 0.011700341, -0.03209625, -0.006637757, 0.014856078, -0.0023493082, -0.003142559, -0.0010250331, -0.0064032343, 0.00408636, -0.008821977, -0.009490421, 0.009515141, 0.0054991934, -0.011902213, -0.024442425, -0.005363275, 0.005948597, 0.019373002, 0.00038308738, 0.0071736826, -0.0068738596, -0.0050033713, 0.010404801, 0.01242861, 0.003386588, -0.01729966, 0.0044065197, -0.0056427605, 0.01180931, 0.013047892, -0.011034325, -0.009681939, 0.0023137769, -0.013493431, -0.001059334, 0.0094511295, 0.016935976, -0.006434127, 0.010116888, 0.0014509656, 0.0135692, 0.017733265, 0.007530965, -0.0008389675, -0.020920306, -0.01974019, -0.011524619, 0.020378327, 0.0011572792, 0.0057896916, -0.0076154163, -0.007968624, 0.0062724855, -0.02427061, 0.011058769, -0.002157005, -0.0049139075, -0.022619544, 0.0036295229, -0.00033956114, 0.0061540008, 0.011330802, -0.0016705551, -0.0006477638, 0.008865951, 0.008978624, -0.12549376, 0.0011483863, -0.0007791609, 0.0005772204, 0.007218184, -0.010967211, -0.01324162, 0.00046197567, 0.00034464907, -0.01693338, 0.014493383, -0.0025178269, 0.0027948504, 0.0036025217, -0.009861312, -0.0225297, -0.000573024, -0.012890834, -0.0013044835, -0.0038721594, -0.006036357, 0.009784855, -0.00015153433, 0.0011565959, 0.004817443, -0.018549193, 0.0057863165, 0.012938486, 0.003984826, 0.008245914, -0.00889808, 0.0015177145, 0.0004841874, 0.0023484682, 0.0063209306, -0.019559119, -0.013507841, 0.009482627, -0.010881602, 0.011027014, -0.011760992, 0.0031759902, -0.0015512988, 0.0014484901, 0.014865368, -0.016976962, -0.02547821, -0.0065713366, -0.02425702, -0.00451906, 0.020565875, -0.013748187, 0.025450295, 0.008542114, 0.019847086, 0.011130348, -0.021192199, -0.003708448, -0.0078379, -0.0063854987, 0.0025960186, -0.029646127, 0.0044672065, -0.013433558, -0.0058213654, 0.0012396253, 0.003019675, 0.15411599, 0.010998347, 0.029062161, 0.006693313, -0.0054720165, 0.019001098, 0.0017947664, 0.009643303, -0.019859176, -0.013053867, -0.0014972056, 0.012968202, 0.022594115, 0.0042089564, 0.0057625542, 0.012586268, -0.002975285, 0.0036044864, 0.002609338, -0.013938287, 0.0072566983, 0.0050863284, -0.0026246917, -0.012773603, 0.017351517, 0.0008529758, -0.0040164003, 0.026201462, -0.0035293067, 0.029804457, -0.03150015, -0.025760215, -0.011178453, 0.00096790073, 0.022471966, -0.013772505, 0.0046933587, -0.00025096192, -0.00555039, -0.0049909786, 0.004744763, 0.017482406, 0.001062143, 0.0011754198, -0.01266103, 0.030516041, -0.009300723, 0.028953398, 0.013668008, 0.012296531, -0.01588032, 0.01264528, -0.016288685, 0.0040984144, 0.008894846, -0.009905231, -0.0031888848, -0.019149061, -0.022689741, 0.005309861, -0.010596462, -0.02324654, 0.0013965329, -0.029675262, -0.0043770433, -0.003507999, -0.0064335177, -0.0103402445, 0.01674405, -0.13440363, 0.0075927963, -0.026676102, -0.032818712, -0.0067202155, -0.014972761, 0.027623676, 0.004783768, 0.010645377, 0.012571089, -0.0047334954, -0.001073749, -0.010340614, -0.0057129604, -0.019388748, -0.002851394, 0.0018149882, 0.0051914062, -0.003441121, 0.031389713, -0.0032258602, 0.019027298, -0.008462774, 0.012915185, 0.0032007927, -0.010973557, -0.034335855, -0.0059200427, -0.03785064, -0.0037700073, 8.772684e-05, 0.012637739, -0.0051584966, 0.009722612, -0.0118046375, -0.015749305, 0.0069755847, -0.0036867931, -0.011300213, -0.031987187, 0.027123645, -0.016610831, 0.0005068831, -0.01626866, 0.004232682, -0.0039797314, 0.0006992772, 0.008946579, 0.009619923, 0.008039646, 0.006433071, 0.0083857635, 0.029214738, -0.0034094984, -0.0071839793, -0.014568484, 0.025239041, -0.023112576, -0.0040391656, 0.0025568993, 0.005448043, 0.008596333, -0.01949378, -0.024491489, 0.015189006, 0.0069937613, -0.0015614115, 0.0022333695, 0.0013130095, 0.027399655, -0.021442642, -0.0027017589, 0.024845898, 0.0042768396, -0.015303012, -0.0012927616, -0.014212585, -0.008490385, -0.012857499, 0.0026918866, 0.0024612076, -0.01787842, 0.00016677297, -0.013076192, 0.01851199, -0.020004472, -0.018267537, -0.008571638, 0.009272392, 0.009917584, 2.2427668e-05, -0.0001679924, 0.001495124, 0.0029355432, -0.009955851, 0.011481669, -0.018617634, -0.012655013, 0.002959863, -0.010551828, 0.010566976, -0.00547638, -0.007314806, 0.007814827, 0.017825393, -0.011271756, 0.0015437632, 0.026420074, 0.011520657, 0.0028496024, -0.009558027, -0.003171749, -0.026519092, 0.00839664, 0.010000108, -0.00984401, -0.012995163, 0.01792866, 0.0103383735, 0.008174345, -0.013954868, -0.0008839658, -0.0016546377, -0.0014585721, -0.003730229, 0.008337699, 0.021007448, -0.0116751855, 0.006853999, 0.010470975, 0.0047475155, -0.017074361, -0.0036898616, 0.007525888, 0.014242162, -0.0031338038, -0.010483396, 0.004184124, 0.004200691, -0.0047563063, 0.0067842705, 0.006841096, -0.006166926, 0.0073447954, -0.00331166, -0.0033253352, 0.014838811, 0.03302482, 0.013676978, -0.003965307, 0.00034891054, -0.0070057632, -0.031226847, 0.008741119, 7.7074925e-05, 0.002309868, -0.021092178, 0.004424756, -0.010805343, -0.0070582503, 0.0009030877, 0.0047311857, 0.00027707225, -0.015054697, 0.011745699, -0.015118417, 0.0020726868, -0.0074079563, -0.003979076, -0.0373274, 0.0076907068, -0.0033847496, 0.009676019, 0.003989316, 0.00537552, -0.0102131115, 0.01604806, -0.0021019657, -0.0036074242, -0.07370773, 0.016251508, 0.01913491, -0.0075744167, -0.0057346495, -0.019592883, -0.00089839625, -0.008792925, -0.0062233307, -0.0034513252, -0.0009158271, 0.006966837, -0.021693151, -0.022992263, 0.011297129, 0.012391907, -0.028648555, 0.010610384, -0.010035838, 0.0014479007, 0.0036349122, 0.0019729754, 0.027745439, 0.0024648064, 0.002361533, -0.0014738202, -0.003769813, -0.020667529, -0.01568652, -0.006640782, 0.007305903, -0.001541139, 0.0011563754, 0.012078278, 0.014150128, 0.0066564083, 0.0012767742, -0.0030075193, 0.008200627, -0.059310015, 0.025066322, 0.00867268, -0.10115889, 0.001994195, -0.018544506, 0.0028172724, -0.008930844, -0.0077836025, -0.015807088, -0.0027923172, 0.011694538, 0.022896796, -0.002467835, -0.014921493, -0.0013206194, -0.0022400932, 0.0028951548, -0.015705826, -0.009918975, -0.022789411, -0.0011261936, 0.015051474, 0.006905711, 0.007927853, 0.001767738, 0.003032793, -9.9784564e-05, 0.010290896, 0.0037157934, -0.0009753703, 0.0030746039, -0.01603226, 0.008226444, 0.010678811, -0.001846853, -0.01040114, -0.0029527647, -0.0107408315, 0.0031248461, -0.002524024, -0.0051562926, 0.0032902923, -0.008285604, 0.030032016, 0.008766954, -0.012917063, -0.0019435539, -0.12764004, -0.0117520355, -0.026418528, 0.0015738814, -0.0022685546, 0.01869576, 0.007770697, 0.1321313, -0.031599507, 0.0009070102, -0.013740191, -0.0071907807, 0.00022861015, -0.0064419587, 0.0021176182, -0.00010337344, 0.011212686, -0.010468846, -0.016620316, -0.0018967239, -0.0239491, 0.00014967505, -0.004005274, -0.0051165093, -0.0032032167, -0.041815303, 0.0073320684, 0.019712688, 0.00586059, -0.0021483193, -0.0046662134, -0.0040648635, 0.015170731, 0.005767225, 0.0012438516, 0.017445898, -0.00781913, -0.00075357634, -0.0026311597, 0.0015433509, 0.005465703, 0.009966477, 0.012214459, -0.025185978, -0.01744069, -0.010157152, -0.015251515, -0.007837943, 0.026992958, -0.014606038, 0.0125807235, 0.012833016, -0.007330095, 0.006914375, -0.022544127, -0.00012776212, 0.0022015842, -0.013039287, -0.0064494205, 0.00250702, -0.014849575, -0.0054368586, -0.003328686, -0.013628556, 0.0036707746, 0.018588293, 0.0033171338, -0.005719763, -0.0046660253, -0.00085371744, 0.006026803, 0.01482038, 0.008803959, 0.0050346083, -0.0071692043, 0.0038208691, 0.010881046, -0.00025067513, -0.025629546, 0.015926838, 0.012460762, -0.0012118124, -0.0003016765, -0.012153138, 0.015534729, -0.0044092545, -0.00095768174, -0.0016420397, 0.013804815, -0.010450318, -0.009980672, -0.016674217, -0.018013258, -0.0026939707, 0.006385547, -0.00022842591, 0.010432637, 0.0026066245, -0.015953293, -0.0056060944, -0.022458443, -0.022350803, -0.008945824, -0.0022699353, 0.0007100897, -0.0075403196, -0.0020852736, -0.008612602, 0.003081507, -0.0063186265, 0.015791815, -0.008857787, 0.012388251, 0.0036018589, 0.003696184, 0.014438639, 0.0069463286, 0.008595042, -0.014976479, 0.005360097, -0.0008863557, 0.0021500725, -0.009453832, -0.01975644, -0.005339055, -0.012412678, 0.022777477, 0.0026788148, 0.004590457, -0.019592844, -0.010005164, -0.0024333696, 0.0029599476, 0.013824455, -0.011126957, -0.0044667856, -0.0027832435, 0.009864287, -0.010240515, -0.02289832, -0.018920938, 0.0055165305, -0.021835156, -0.010456208, 0.016913459, 0.007766291, 0.0077063288, -0.02810555, -0.016521297, -0.023434367, 0.0053794077, 0.0036307161, 0.02542831, -0.0025094163, -0.006459824, 0.0063279364, -0.005066118, 0.0075214356, 0.011747835, -0.002646805, -0.029509472, -0.00086615206, -0.007892074, -0.003725141, -0.021037554, -0.0011267157, -5.579391e-05, -0.010627381, 0.023485506, 0.005429961, -0.004252876, -0.017227678, -6.281759e-05, 0.003560077, 0.017644353, 0.0030251953, 0.0035889088, 0.006534239, 0.010435479, -0.010141574, -0.003465907, 3.264064e-05, -0.0017140793, -3.5351193e-05, 0.0045308904, 0.00033461765, -0.0051832167, 0.0012082846, -0.0068293232, 0.0032011736, -0.0020273188, 0.012943087, 0.007367056, 0.015017999, -0.0009245704, 0.00767235, 0.0054951287, -0.019832144, -0.0026459172, 0.017353136, 0.014508564, -0.008996641, -0.008176985, -0.023621656, 0.016050432, 0.016184215, 0.00855087, 0.0077263364, -0.022535987, -0.0062524043, 0.00948866, 0.007980636, -0.006194562, 0.008656705, 0.011052535, 0.006233825, 0.013555629, -0.001158201, 0.0016663927, 0.003887912, 0.016378049, 0.010259253, 0.03075573, -0.0073310076, 0.002906897, -0.023796588, -0.0049516573, 0.009867118, 0.009279919, -0.0013618099, 0.004735957, -0.011912313, 0.014314374, -0.010991461, -0.01793626, -0.0042441883, -0.011599214, -0.004664947, -0.007730245, -0.023849424, -0.008907767, 0.001680627, 0.0021082838, 0.004427241, -0.009299997, -0.027704282, 0.013674968, 0.018026924, -0.013029633, -0.013729332, -0.005878005, 0.0016829204, -0.0051390175, 0.010078276, 0.0030407524, 0.013154401, 0.010024837, 0.007754739, 0.010033473, 0.004688279, -0.004011831, 0.006805001, 0.009030964, -0.0032740508, -0.024805795, -0.012260087, -0.017885132, 0.022400007, -0.019947696, 0.0022859147, 0.0013856788, 0.0060809995, -0.022569733, -0.021946022, -0.0054134256, -0.017881397, -0.009177422, 0.0107345125, -0.010607636, 0.013973255, 0.003978502, -0.012738835, 0.000791927, -0.022167979, -0.010027519, -0.006300139, 0.0016046254, -0.0011658802, 0.0128343385, -0.025260564, 0.004826241, -0.0064358516, 0.0054054204, -0.0033747216, -0.0011064982, -0.004175435, 0.010213595, -0.012992344, 0.010516374, -0.004002639, 0.028947463, -0.006851498, -0.008816499, -0.012853919, -0.005094008, -0.014931464, -0.0034168812, -0.01646018, -0.02397455, -0.0047775037, -0.02043237, -0.0029183512, 0.02339196, 0.0010641259, -0.035893433, 0.015418697, -0.00570236, 0.022694616, 0.032251097, 0.0014124541, 0.014922707, 0.006191483, 0.021030203, 0.011940469, 0.02959254, -0.0066985167, 0.01737022, 0.001593132, -0.0024463893, -0.008048572, 0.016283758, -0.0076325587, -0.022071593, -0.009680199, -0.009991326, -0.008559377, -0.003527623, 0.009898091, -0.0239721, -0.006869922, 0.005094324, 0.014594455, -0.0042542615, -0.018695602, -0.0059096892, 0.010420368, -0.0024047978, -0.005004349, -0.018082088, -0.0026000964, -0.0023837327, -0.011441631, -0.0074695516, 0.008580243, -0.0063919043, -0.0017962483, 0.011074562, -0.0025787882, 0.005604805, -0.0037249092, -0.016371569, 0.03919583, 0.0032451504, 0.004928544, 0.011013678, 0.005899762, -0.038711008, -0.006520802, -0.009998993, 0.01638301, 0.01924471, 0.008516619, 0.012274732, -0.004723619, -0.015955744, -0.01359156, -0.010410402, -0.00184826, -8.660255e-05, 0.014252323, -0.004730456, 0.013736535, 0.012686817, -0.013235756, -0.0009964491, 0.0037149363, -0.020582091, 0.02038097, 0.028052317, -0.007478327, 0.0033647777, -0.0037701842, 0.0016368731, 0.0045173857, 0.011923115, -0.011889629, -0.0012407245, -0.0010608097, 0.0019567208, -0.0248674, 0.033993214, 0.00042667708, -0.0034449252, -0.022427725, 0.009021254, -0.027144741, -0.0023788041, 0.011085944, -0.023597613, -0.009491141, -0.005776225, -0.0016031681, -0.021279635, 0.012437693, -0.016642189, 0.025417395, -0.014908248, -0.008183821, 0.039981786, 0.0040104603, -0.0074198744, -0.015832355, 0.021973945, 0.010837469, 0.0030428884, -0.0038051778, -0.012305103, -0.020555655, 0.03235212, -0.010549047, 0.015897121, -0.013503583, -0.015522676, -0.021551834, -0.0021402794, -0.003645485, -0.013429839, -0.007476074, -0.0013966657, 0.011476252, -0.011817603, 0.0143499, 0.026428957, -0.0056521515, 0.019470528, -0.009124, -0.018970879, 0.015043343, 0.0004576729, 0.040772706, 0.002367863, 0.0028462203, -0.002960511, 0.012848347, -0.009437713, 0.008334162, -0.005632875, 0.0031996076, 0.029671298, 0.008185566, 0.0084228795, 0.005100863, 0.011880753, 0.0012442798, -0.019727675, -0.023113897, 0.0035514317, -0.012268589, -0.0054680523, -0.0017859386, -0.046230547, -0.013419785, -0.033217926, 0.011873421, -0.003891995, 0.012969521, 0.0065369657, 0.0013104244, 0.011228913, -0.04874567, -0.0065299175, -0.012434343, -0.026985493, -0.0038235527, 0.018916523, -0.0042355824, 0.009603488, -0.034257222, -0.014229425, 0.017436275, 0.0023552575, 0.004705255, -0.0017279481, -0.015836205, -0.011282497, 0.00075895473, -0.011368437, 0.0042966832, -0.0017585753, 0.01659405, -0.012923276, -0.0059640934, -0.0046882005, -0.011100364, 0.014342708, 0.015982203, -0.00887332, -0.0022998685, 0.030196847, -0.018628055, -0.006706339, 0.014671887, -0.0099548185, -0.0067233085, -0.009807834, -0.01689993, -0.008447269, -0.01216179, -0.017622743, 0.017328693, 0.017838366, -0.011037993, 0.0039087404, -0.0032270402, 0.011305451, -0.0068248753, 0.0034847471, 0.0033400392, 0.021361908, 0.019645192, -0.011504775, 0.020355903, -0.017869975, 0.008740273, 0.0040119006, -0.02039089, 0.010365827, 0.011100598, 0.012329933, 0.0031863514, 0.025081683, 0.0017841234, -0.012944432, 0.008082693, 0.012554458, -0.0070418385, 8.4894644e-05, -0.031730615, 0.009901145, 0.009566268, -0.007260933, -0.016410906, 0.0039879605, -0.014069598, 0.024369983, 0.00776768, 0.013354023, 0.0076537197, 0.008906825, -0.011182678, -0.01077545, -0.0007510319, -0.0010947599, 0.002254599, 0.01809531, -0.024941899, 0.025307592, -0.012712451, -0.00095111044, 0.012815936, -0.007110248, 0.0022671574, 0.0070549324, -0.009609365, 0.0030197115, 0.013972379, -0.010187787, -0.015748797, -0.010865253, 0.0046360004, -0.0028331748, -0.003289964, -0.01276741, -0.005548282, -0.026381258, 0.01732164, 0.0051409523, 0.014974104, 0.012286174, -0.004700372, 0.011064182, -0.008523704, 0.024264384, 0.011873411, -0.009858362, 0.020916112, -0.0016135278, -0.028254904, -0.020963738, 0.0061805816, 0.011928123, -0.016326925, -0.017728625, -0.028945975, -0.008378486, 0.018371321, -0.00047020285, 0.0050460277, -0.0014687211, -0.008961886, -0.027412, 0.02813198, -0.015013141, 0.0026996767, 0.015116287, 0.0007102734, 0.024283363, -0.023386529, 0.0022846186, -0.007687656, -0.0033755803, -0.0020437601, -0.0054740226, -0.0036424045, 0.0028392277, -0.012008524, 0.031928256, 0.0041273134, -0.0089144325, -0.032349136, 0.018246403, 0.0064425273, 0.013568862, -0.0056619854, -0.011318169, 0.009910818, 0.005976557, -0.0024324104, -0.009070891, 0.02609382, 0.009164383, 0.0067841965, -0.0003882786, -0.00662996, 0.0072617503, -0.0032657527, 0.0012167445, -0.0037888796, 0.012696804, -0.001716066, -0.0024137483, -0.00061802333, 0.009255335, 0.013259118, 0.010822346, -0.0022604822, 0.007705501, -0.0062117274, 0.022560894, 0.005789997, 0.009870279, -0.016180025, 0.008896671, -0.017942028, -0.00044274877, 0.016847199, 0.0148135545, -0.008388685, 0.0025089493, 0.00496837, -0.010412286, -0.00950524, -0.012983192, 0.011212081, 0.00030424952, -0.015531045, 0.0068566757, 0.00036008502, -0.015272015, 0.011732208, -0.033582006, 0.01810853, -0.00037915682, -0.0044306708, 0.016721655, 0.0024983326, 0.18192898, 0.11574661, -0.006695629, 0.00040009964, -0.0012250019, 0.0076864487, 0.0034757166, 0.012513828, 0.0037730555, -0.016599694, -0.02198299, -0.012400087, -0.0046616937, -0.0045308257, -0.008734685, -0.018628504, -0.0053031123, -0.009979567, -0.012507724, -0.0038312646, 0.007432121, 0.025419325, 0.015787736, 0.016439037, -0.01633571, -0.0069500324, -0.028771466, 0.0007385791, 0.0042925347, 0.0098091485, 0.0053268457, 0.0054380856, -0.0075696036, 0.00061018346, 0.00820882, 0.0011488122, -0.004683429, -0.00546984, 0.0011713504, -0.008540978, -0.008693511, 0.009943681, -0.027417703, 0.008421478, -0.004617386, -0.0036036822, -0.00806491, 0.006609918, -0.002115457, -0.006302717, -0.0004683854, -0.0011388202, 0.0023845516, 0.005539582, -0.02458794, 0.0066834376, 0.009032304, 0.022472192, -0.024583867, 0.011357299, 0.030708237, 0.006286613, -0.024127001, -0.004261912, 0.0060589416, -0.019336466, 0.011349811, -0.017727597, 0.019299418, 0.011931476, 0.0025496334, 0.003698905, 0.021144561, -0.0053581125, -0.007147438, -0.0070261406, 0.007004396, 0.02087099, -0.02232327, -0.00914425, -0.03734111, -0.012692625, 0.00951948, 0.0027951377, 0.0029665923, 0.008958011, -0.014967644, 0.017949145, 0.13550235, 0.008739238, 0.0069498075, -0.016870564, 0.008574542, -0.015286999, -0.009498894, 0.050684035, 0.0031985315, -0.0071731596, 0.0034208817, -0.023815464, 0.011259904, -0.013000243, 0.0023959975, -0.0031024679, 0.018822419, 0.07259271, -0.005754364, -0.01297449, -0.009203447, -0.012284401, 0.00066643266, -0.016920662, -0.01871044, 0.014503336, 0.00446966, -0.014284746, -0.020385472, -0.010954158, -0.11834668, -0.012137524, 0.0034122174, 0.02119757, 0.023010245, 0.013619113, -0.03608078, -0.022575248, 0.020519473, 0.0077648647, 0.0129157165, 0.0010266651, 0.037588265, -0.013121277, -0.010810563, -0.010819504, 0.01107703, 0.0058187465, 0.0073332693, 0.0055080527, 0.0063170707, 0.010691358, -0.013011938, -0.017021524, 0.0018511998, 0.010016584, 0.0029402256, 0.0049434146, 0.016218748, -0.00094759377, 0.005489795, 0.006671583, -0.002078264, 0.01642489, -0.005284572, 0.006392261, -0.016854798, 0.0001234301, 0.0070276, -0.017583396, 0.008571602, -0.007872555, 0.014736844, -0.03051385, -0.008184289, -0.02187798, 0.025266686, -0.02554556, -0.006624621, 0.001638356, 0.0661878, -0.00018980939, -0.01949759, -0.014423047, 0.011357499, 0.016133076, 0.009662694, 0.011706927, -0.02588653, 0.009055956, -0.028707054, 0.009987235, 0.009483339, -0.015588614, 0.025857266, 0.0008257921, -0.009878127, 0.0011446921, 0.00858539, 0.007949241, -0.012273512, -0.010559733, -0.009155529, -0.01851766, -0.023253812, -0.015820866, -0.0071343724, 0.010148998, 0.005852047, -0.004211419, 0.014076001, -0.021029646, 0.01143922, 0.12621424, 0.016577745, -0.013200802, 0.007252911, 0.010128976, -0.01800221, -0.0071450714, 0.00057110324, 2.8346067e-05, 0.01218976, -0.011770302, 0.009635198, 0.007728661, 0.018418025, 0.01590825, -0.022693992, 0.023796547, -0.011384495, 0.0056952396, -0.0020202643, 0.0030059956, 0.0052879816, 0.004840821, 0.004000073, 0.001347768, 0.0021706864, -0.026343353, -0.007946671, -0.004369344, -0.011418952, -0.00075893884, -0.0019176402, 0.00233453, 0.0035377692, -0.006982876, 0.0041959435, 0.012710008, -0.011041814, 0.0009983975, -0.0037775876, 0.013419514, 0.018840149, -0.009303957, 0.01006055, -0.02049406, 0.19282317, -0.01902035, 0.0070103165, -0.0062239985, 0.000586477, 0.013768561, -0.016021231, 0.013410198, 0.008437876, 0.003821201, 0.02031044, -0.0114681395, -0.006616491, 0.013073506, 0.0159395, 0.0057846056, 0.0004546654, 0.038460035, -0.017734298, 0.011703511, 0.00028914964, -0.012233376, -0.030684683, 0.00022904284, -0.010351831, 0.011136337, 0.01243425, -0.01100715, 0.0084689, -0.025079433, -0.022724723, -0.028273942, 0.011432339, -0.009235956, 0.008413546, -0.0010819634, 0.013597246, -0.013910726, -0.013140183, 0.023079393, -0.013715101, -0.01590305, 0.030263143, 0.017954111, 0.005136289, -0.025599692, -0.0030492947, 0.014094089, -0.006422627, -0.010872441, 0.0054095616, 0.009063865, 0.034053225, 0.012715899, -0.0225691, 0.010167347, -0.011571894, 0.018559432, -0.0064651566, 0.0020887065, 0.0014984119, -0.007625711, 0.011184661, 0.0034512766, 0.018264674, 9.511567e-05, -0.0081613185] } ] -}333 211576 +}333 211560 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -49,7 +49,7 @@ Date: Tue, 04 Aug 2026 10:15:31 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 175 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -124,7 +124,7 @@ X-Request-Id: req_7c7e87a658bf4ec88bc9d1bf6fe4d06e "total_tokens": 23, "prompt_tokens": 23 } -}276 21841 +}276 21825 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -145,7 +145,7 @@ Date: Tue, 04 Aug 2026 10:15:32 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 59 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr b/vectorstores/pgvector/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr index a4e8db31b..c45785d5c 100644 --- a/vectorstores/pgvector/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr +++ b/vectorstores/pgvector/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -333 211509 +333 211493 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:03:55 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 50 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pgvector/testdata/TestWithAllOptions.httprr b/vectorstores/pgvector/testdata/TestWithAllOptions.httprr index efa17ee2d..ccd8f35f8 100644 --- a/vectorstores/pgvector/testdata/TestWithAllOptions.httprr +++ b/vectorstores/pgvector/testdata/TestWithAllOptions.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 43156 +256 43140 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:04:46 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 246 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -53,7 +53,7 @@ X-Request-Id: req_40e3ef1198864535b62e40eec4915421 "prompt_tokens": 4, "total_tokens": 4 } -}247 22116 +}247 22100 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -72,7 +72,7 @@ Date: Thu, 22 Jan 2026 20:04:48 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 98 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -102,7 +102,7 @@ X-Request-Id: req_8f1b4c19db314ec785666aa7d556059f "prompt_tokens": 2, "total_tokens": 2 } -}256 43153 +}256 43137 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -121,7 +121,7 @@ Date: Thu, 22 Jan 2026 20:04:49 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 36 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -156,7 +156,7 @@ X-Request-Id: req_18537d75ab5d418f8c6345de9f8cb3de "embedding": [-0.0023426407, -0.031335898, 0.0022720497, -0.026686734, -0.028682984, -0.00530911, -0.026870599, -0.019752385, -0.0106050875, -0.029996308, 0.00056267704, 0.0222083, -0.0049840626, 0.026581667, -0.0053452267, 0.035197068, 0.029602312, -0.01461729, 0.047857508, -0.021302108, -0.0134090325, -0.0044160504, 0.014288959, -0.009574128, -0.032911886, -0.012995336, 0.00978426, -0.026213937, 0.004136969, -0.007400578, 0.021105109, -0.027474727, -0.020855578, -0.017769266, -0.035249602, -0.023744889, -0.0021932502, -0.013776763, 0.02797379, 0.004202635, 0.0021308674, 0.002152209, -0.008549736, -0.001971627, -0.018439062, -0.00013943802, -0.025045078, -0.027789924, -0.018373396, 0.012719538, 0.027474727, 0.023298359, -0.0069080815, -0.0013042943, 0.0061036707, 0.010053491, -0.00037819613, 0.023652956, -0.020632312, -0.016955007, -0.005542225, 0.017716734, -0.033647347, 0.02127584, -0.017743, -0.0037298386, 0.0028794617, -0.005433876, -0.004402917, 0.009226098, 0.006317086, 0.034277745, 0.017756134, -0.00803754, 0.01660041, -0.010342423, -0.015050687, -0.0052565774, 0.0033407665, -0.0009373846, 0.015431551, -0.019030057, 0.0026627635, 0.008457803, 0.016022546, 0.005085845, -0.024953146, 0.010020658, -0.014288959, -0.01737527, -0.0010490172, 0.020120116, 0.014013162, 0.01900379, -0.029339647, 0.029365914, 0.018727994, 0.03333215, -0.023311492, -0.027264595, -0.017349003, 0.010086324, -0.004924963, -0.018741125, -0.008090072, 0.00020397555, 0.010683887, -0.0021686254, 0.02078991, -0.010316156, -0.009002833, 0.04554606, 0.007853675, -0.020225182, 0.00070837385, -0.0048658634, 0.019108856, -0.01900379, -0.014879955, -0.008884633, 0.012995336, -0.00022716392, 0.018911859, -0.038060114, 0.017073205, -0.0011089375, -0.01372423, 0.0060150214, -0.005584908, -0.0035689566, 0.03459294, 0.010513155, -0.0036214895, 0.0058804057, -0.025439076, -0.0046721483, -0.035722397, -0.02321956, -0.017769266, -0.020225182, 0.012883703, 0.021420306, -0.028998183, -0.018990658, -0.006986881, 0.03779745, 0.030075109, 0.010184824, -0.010046924, -0.0034474742, 0.016574143, 0.0023853239, 0.028814318, -0.020120116, -0.00037388678, -0.009212964, -0.01073642, 0.013934362, 0.006796449, 0.009035666, -0.021341506, -0.0041074194, 0.008142605, -0.018767392, 0.0055586416, 0.036562927, 0.019332122, -0.003058402, 0.0013830938, -0.013402466, -0.0034080744, 0.031073233, -0.021105109, 0.02090811, 0.017861199, -0.009245797, -0.0013822729, 0.0054732757, 0.010506588, 0.008930599, -0.02585934, 0.0026315718, 0.025347143, 0.04210515, -0.0068752486, 0.005689974, 0.004136969, 0.0015530051, -0.01879366, -0.009061932, 0.022457832, 0.010204524, 0.01826833, 0.005259861, -0.68965244, -0.025990672, 0.018058198, -0.015168887, 0.030180173, 0.036195196, 0.010092891, -0.0030239273, -0.011596646, -0.015195153, 0.0041862186, 0.016206412, 0.001814028, -0.0022720497, 7.690125e-05, -0.025439076, 0.024782414, 0.0021998168, -0.010762686, 0.008641669, -0.023810554, 0.018977525, -0.008956866, 0.004094286, 0.005253294, 0.005447009, 0.01110415, 0.0052368776, -0.005906672, 0.017427802, -0.016666075, -0.012450307, 0.012601339, -0.03170363, 0.049564827, -0.01021109, -0.012003777, 0.030784303, -0.00087746425, 0.024138886, -0.008733601, -0.025439076, 0.031440966, -0.0063761855, -0.019621054, 0.0054371594, 0.019634185, 0.00038743042, -0.005200761, -0.032544155, -0.0007428486, 0.009902459, -0.005978905, -0.009160431, 0.016390277, 0.00076501095, 0.0013280984, -0.015405284, -0.018412795, 0.0074071446, -0.025097612, 0.009521595, -0.019358387, -0.035144538, -0.0070656803, -0.012332108, -0.022313366, 0.0037692385, 0.01815013, -0.010591954, 0.01461729, 0.018583527, 0.014551624, -0.023561023, 0.009534729, 0.021341506, 0.003276742, 0.009928726, 0.002127584, -0.002217875, -0.010769253, 0.013947495, -0.004698415, -0.005647291, 0.046228986, -0.011819911, -0.025058212, 0.0057293735, 0.0082805045, 0.00012035378, 0.004087719, 0.035985064, -0.007249546, -0.016350877, -0.027343394, -0.0061857537, -0.042683013, -0.017309604, 0.005689974, -0.00069277815, -0.008057239, -0.003624773, 0.0071116467, 0.014525358, 0.0057392237, 0.03422521, -0.022523498, 0.0128180375, 0.024900613, -0.037666116, 0.0131266685, -0.0015513634, -0.006986881, -0.026647333, 0.015694216, -0.029707378, 0.008884633, 0.009876193, -0.0008076939, -0.021341506, 0.020697977, 0.007945607, 0.016902473, -0.0039925035, 0.0010375256, -0.00066487, -0.013750497, -0.03356855, -0.029576045, -0.012936236, -0.012844304, -0.0046754316, 0.011734545, -0.010526287, 0.009823659, 0.009863059, 0.014945622, -0.002255633, 0.006954048, 0.0028860283, -0.008582569, -0.0005680124, 0.0054273093, 0.008030973, 0.0019962518, -0.030784303, -0.012194209, -0.004402917, -0.0036641725, 0.013205468, 0.014748623, -0.010112591, -0.013803029, 0.013829296, 0.020409048, -0.014604157, -0.009613528, -0.010257056, -0.013711097, -0.00807694, 0.007190446, 0.025688607, 0.000911939, 0.008411837, -0.004274868, -0.034330275, -0.021643572, 0.013047868, -0.04375994, -0.021091975, 0.02057978, -0.0046425983, 0.01021109, -0.0060544214, -0.015694216, 0.027711125, -0.0036313394, -0.005847573, 0.015076954, 0.0075056436, -0.017926866, -0.007807708, -0.009928726, 0.0013092194, 0.0067077996, 0.0017237371, -0.011767378, 0.025018813, -0.004297851, 0.014013162, 0.00086186855, -0.0019190939, 0.0057720565, 0.0046951314, -0.0002177244, -0.008208272, -0.0060609877, 0.011012217, 0.002759621, 0.023823688, 0.027553527, -0.015720483, -0.0015439759, -0.0079718735, -0.0010859544, -0.038401578, -0.00080974604, 0.0074071446, 0.014446558, 0.0019601353, -0.0013691398, -0.024257084, -0.014788022, -0.0069606146, 0.01956852, 0.04052916, 0.0108020855, -0.0051843445, -0.006189037, 0.012719538, 0.017191404, 0.0030025858, -0.0013198901, 0.0072167125, -0.022667963, 0.018530995, 0.016350877, 0.046544183, 0.022195166, -0.016022546, -0.0040122033, 0.0026775382, 0.010506588, 0.0088124005, 0.003211076, 0.0043438175, 0.01684994, -0.01244374, 0.02537341, 0.006287536, -0.022287099, 0.01465669, 0.0062481365, -0.011839611, -0.0076632425, 0.01067732, 0.016429678, 0.0017434369, -0.013067569, -0.0049807793, -0.011458747, 0.031519763, -0.023600424, -0.02570174, -0.0070262807, -0.031493496, -0.003966237, 0.0358012, 0.035958797, 0.022418432, 0.029129514, 9.2496964e-05, -0.007380878, 0.003509857, -0.00067513034, 0.00530911, 0.0028794617, -0.014288959, 0.0012886986, 0.021840569, -0.017349003, 0.0057096737, 0.008221405, -0.004619615, -0.009580695, -0.0028088705, -0.0050168955, 0.03309575, -0.012614472, -0.008661368, -0.028446587, -0.017834933, 0.020146383, 0.008608836, -0.0036083562, -4.5068544e-05, -0.01945032, 0.011990643, -0.022733629, 0.0031240683, 0.0046327487, 0.020277714, 0.0051350947, 0.007945607, -0.010933418, 0.010151991, 0.0049052634, -0.013310534, 0.010848052, 0.008576002, 0.0044226167, -0.013369633, -0.013474699, -0.010060058, 0.034067612, -0.0017352287, 0.017230805, -0.014709223, 0.009823659, -0.008694202, 0.0015743466, 0.0043733674, 0.012548806, -0.010197957, -0.010394955, 0.0056078914, -0.012476573, 0.017966265, 0.036510393, 0.00623172, -0.015720483, -0.003050194, -0.01469609, -0.0022966745, 0.04938096, 0.041107025, 0.006796449, 0.0012386282, 0.016863074, 0.006106954, -0.030994434, -0.0002626647, 0.024401551, 0.0027054464, 0.010500021, 0.0003295621, 0.026056338, -0.0005347689, 0.007939041, 0.010591954, 0.00623172, -0.0046327487, -0.009580695, -0.009639794, 0.020435313, 0.00081426057, 0.019016923, 0.011025351, 0.0071444795, 0.0026808216, 0.03832278, 0.02071111, 0.030994434, 0.014091961, -0.02366609, -0.0018780526, 0.00038127424, -0.017467203, -0.00443575, -0.025951272, 0.022024434, 0.010999084, -0.00577534, 0.012634172, 0.02789499, -0.004225618, -0.0038710209, -0.0063105193, 0.016258944, -0.01822893, 0.0026069472, 0.03191376, 0.00013092194, -0.010046924, 0.0049840626, 0.016088212, -0.01388183, 0.0004998837, -0.006366336, 0.00036690975, -0.003020644, 0.0057819067, -0.0061200876, 0.0027136547, -0.010953118, -0.022681097, 0.00014025884, -0.00042149477, -0.010545988, -0.0068358486, -0.010920284, -0.0119775105, -0.020238316, 0.018452195, -0.011767378, 0.0035656733, -0.028577918, -0.0076501095, 0.030626703, 0.019673586, 0.0043733674, 0.00484288, 0.009534729, 0.034277745, 0.005138378, -0.024349017, -0.019594787, -0.011622913, -0.0046819984, -0.001624417, 0.023088226, -0.008339604, -0.0047148312, 0.0011606496, 0.034698006, -0.012640739, -0.0054502925, -0.0050267456, 0.009712027, -0.0053222436, 0.0088518, 0.00033366625, -0.0064517017, -0.012765504, 0.004885563, -0.012923103, -0.00050603994, -0.010303022, 0.0035394067, 0.0051843445, 0.010683887, 0.018517861, -0.011439048, 0.0030813853, 0.029208314, -0.0068424153, -0.007847108, -0.004698415, 0.005272994, 0.01692874, 0.007032847, 0.006940915, -0.025544142, 0.001823878, -0.011544113, -0.021052575, 0.014026294, 0.01469609, -0.0013830938, 0.0010424505, 0.023324626, -0.03167736, -0.02789499, 0.002137434, 0.017283337, 0.009022532, 0.002245783, -0.0023442823, -0.021814303, -0.0010793877, 0.015562884, 0.018570393, 0.006402452, -0.021853702, -0.01822893, -0.018045064, -0.00757131, -0.014394025, -0.020803044, -0.03475054, 0.00398922, 0.012548806, 0.01199721, 0.01737527, 0.0058869724, 0.0057884734, -0.012023477, 0.0075581768, 0.008208272, -0.03369988, -0.035144538, 1.2607393e-05, 0.019831184, 0.013566632, 0.026699867, 0.0034080744, 0.005857423, 0.022155767, -0.011583513, -0.0043372507, 0.026122004, 0.0024493483, -0.011242049, 0.0058311564, 0.036431592, 0.035092004, 0.0021505672, -0.0021719087, -0.024060085, 0.0052631437, -0.0040351865, 0.0057523567, -0.039005708, -0.017243937, 0.0048691467, 0.000645991, -0.012161375, 0.015234552, 0.009968125, -0.022589164, 0.010053491, -0.016836807, 0.012975636, -0.0049479464, 0.0125685055, -0.0058541396, 0.013750497, -0.0055290917, 0.022707364, -0.013474699, 0.0017697033, 0.019305855, -0.0056111747, 0.002170267, 0.0068555484, 0.0054273093, -0.033148285, -0.0021669837, -0.010644487, 0.03065297, -0.011800212, -0.012660438, 0.0040122033, -0.045493525, 1.976398e-05, -0.0041139857, -0.015470951, -0.02191937, 0.00799814, 0.015484083, -0.020553512, 0.026607934, -0.023626689, -0.013251434, 0.009863059, 6.607659e-05, 0.03438281, 0.024454083, 0.04218395, -0.004402917, -0.003660889, -0.02975991, 0.010414655, 0.012233608, 0.00044488834, -0.0010145424, 0.0014947263, -0.004488283, -0.028525386, 0.014459692, -0.0017976115, 0.020330248, -0.04129089, 0.0132777, -0.00492168, 0.020566646, -0.018754259, -0.03348975, -0.015773015, 0.024073219, -0.010165124, 0.0077157756, -0.026082605, -0.023324626, -0.029943775, 0.029812442, 0.0012591489, 0.011714846, 0.007518777, -0.017939998, -0.0004896234, -0.0044587334, -0.019791786, 0.013231734, -0.00057827274, 0.021249574, -0.011130417, 0.023600424, -0.010033791, 0.004796914, -0.012962502, 0.0024690481, -0.002418157, 0.022667963, -0.014131361, -0.021157641, -0.009140732, 0.010447488, 0.007814275, -0.003143768, -0.017270204, -0.001106475, 0.004819897, -0.021788036, 0.010710153, -0.010086324, -0.036431592, -0.014144494, -0.0013239942, -0.017559135, -0.019699853, -0.006940915, 0.0067570494, -0.015300219, -0.013606031, 0.00023414096, 0.008687635, 0.023902487, 0.010526287, -0.002749771, 0.009101332, 0.014879955, -0.030968167, 0.033936277, -0.009147298, 0.004491566, -0.010427789, 0.0017073206, -0.024624815, -0.008746735, 0.018977525, -0.020067582, -0.029365914, 0.0017729867, -0.0046327487, 0.0034803073, 0.020290848, -0.011517847, 0.054056395, -0.007479377, -0.0037068555, -0.025833072, -0.0033588249, -0.0030452688, -0.018517861, 0.025885606, 0.01240434, 0.01628521, -0.005200761, -0.0011836328, 0.010985951, 0.00032730485, -0.044810597, -0.041264623, -0.00039153456, 0.036195196, 0.00053846266, 0.0071379133, -6.310109e-06, -0.0039925035, -0.015050687, 0.00929833, -0.01558915, -0.0111369835, -0.008004706, 0.01290997, -0.0024985978, -0.007840541, -0.007833974, -0.02139404, -0.012699838, -0.0016465794, -0.022470964, -0.005640724, -0.009180131, 0.034855604, 0.0036773058, -0.015746748, -0.0050989785, 0.0016638167, -0.033516016, -0.013008469, 0.004928246, -0.008306771, 0.008201705, -0.019870585, 0.0047509475, 0.021459706, -0.022759896, 0.017060071, -0.0039925035, 0.0012484782, 0.016009413, -0.019292722, 0.0033456916, -0.009403396, -0.028315254, -0.02123644, 0.019699853, 0.0028679701, -0.00032525277, 0.011931544, 0.005072712, -0.025570408, -0.020448446, 0.017585402, -0.0102964565, 0.007866807, 0.012627605, -0.023193292, 0.008983132, -0.0026003805, 0.0068424153, -0.019634185, 0.0044948496, -0.0011507997, 0.0037790884, 0.014144494, -0.034803074, -0.012397774, -0.0050365957, -0.027553527, 0.0059526386, 0.001956852, -0.0077289087, 0.022300232, -0.0100731915, -0.030600438, 0.0025987388, -0.013645431, -0.021853702, -0.01285087, 0.025504742, 0.0070262807, 0.0033653914, -0.013566632, 0.03309575, -0.02102631, 0.0049479464, -0.012647305, -0.03333215, 0.0037922217, 0.008050673, 0.0063630524, 0.0030288522, 0.0071510463, -0.0015644965, 0.008818967, -0.010710153, -0.012391207, 0.015300219, -0.013290834, -0.019266456, 0.014827422, -0.016955007, -0.024677347, -0.012581639, 0.017204538, 0.0029516944, 0.010670753, 0.19762892, -0.009475629, 0.020671712, 0.045178328, 0.005253294, 0.022116367, 0.031230832, -0.0069737476, -0.0019749103, 0.012975636, -0.011800212, 0.014078828, -0.016337745, -0.0019732686, -0.024940012, -0.016232679, -0.014105095, -0.013829296, -0.020028183, -0.018439062, 0.0017729867, -0.019778652, -0.007472811, -0.009488762, 0.032622956, -0.009915592, -0.0031618262, 0.0053419434, 0.03309575, -0.010782386, -0.008273938, -0.0088124005, 0.0037167054, 0.0006455806, -0.0111107165, 0.0045572324, 0.0038874375, -0.010552554, 0.024230817, 0.02776366, -0.009981259, -0.0026627635, 0.013225167, -0.0011286373, -0.0071970127, 0.007499077, 0.0064090188, -0.023626689, 0.01729647, 0.021157641, -0.0112223495, 0.013973762, 0.014958754, 0.021249574, -0.01729647, 0.0091210315, 0.009291763, 0.014538491, -0.012936236, -0.001738512, -0.0046425983, 0.031887494, -0.018320862, 0.016981272, 0.00010403984, 0.014078828, -0.025425943, 0.0027711126, -0.008674501, -0.03876931, 0.013290834, -0.03362108, 0.0001390276, 0.012653871, -0.017532868, -0.03220269, 0.01937152, 0.018005665, 0.0004867505, 0.03690439, -0.018570393, -0.016626675, 0.004619615, 0.010782386, -0.036247727, -0.024585415, 0.026489735, -0.010408089, -0.003585373, 0.002313091, 0.021971902, -0.008825534, 0.004957796, -0.021735504, 0.008267371, 0.027185796, 0.0010481963, 0.03372615, -0.0009480554, -0.0073020784, -0.015457817, -0.03527587, 0.021656705, -0.0026036638, -0.018977525, 0.0033686748, -0.0015382301, 0.020553512, 0.00583444, -0.027422193, 0.0015218136, -0.019292722, 0.0011926619, -0.0006858011, 0.01558915, 0.006235003, 0.008306771, -0.027474727, -0.0019076023, -0.0025560558, 0.023652956, -0.017598534, -0.017283337, 0.011307715, -0.036641724, -0.010092891, -0.020041317, 0.023232693, -0.013028169, -0.037639853, 0.020028183, -0.022103235, -0.0055225254, 0.010624787, 0.004534249, 0.035827465, -0.0013075777, -0.011156683, -0.016836807, 0.0055126753, 0.007032847, -0.01636401, 0.004179652, 0.019174524, 0.0041730856, -0.0061332206, -0.0034507574, 0.007019714, -0.006136504, -0.022983162, -0.011288015, -0.023075094, 0.0057687736, -0.0030222856, -0.0069737476, -0.018005665, -0.04938096, -0.039688636, 0.0019141689, 0.010756119, -0.026502868, 0.0020126682, 0.01993625, -0.0028400621, -0.017651068, -0.0040056366, -0.16978645, 0.014236427, 0.0061824704, -0.013487833, 0.009672628, 0.016061947, 0.011747679, 0.009915592, 0.0091210315, 0.011990643, 0.022379031, 0.0077420417, -0.021788036, -0.029418446, 0.010440921, -0.01013229, -0.01993625, 0.023206426, 0.020540379, 0.013382766, 0.03288562, -0.015195153, 0.020330248, 0.0033309166, 0.011760811, 0.010631354, 0.008510336, 0.0027776791, -0.010165124, -0.012936236, -0.01558915, -0.004711548, 0.015602283, 0.017322736, 0.0005343585, 0.0016375502, -0.00022552226, -0.013428733, -0.0015152469, 0.015457817, 0.023285225, 0.048908167, -0.0025560558, -0.00716418, -0.0114456145, 0.020514112, 0.020737378, -0.01201691, 0.017243937, -0.009928726, 0.033962544, -0.005128528, -0.009449363, 0.0024542732, 0.03178243, 0.0012041535, -0.007774875, 0.005712957, -0.0123715075, 0.01834713, -0.013934362, -0.0034277742, 0.011366814, 0.005108828, 0.0019749103, -0.015733615, -0.0077354754, 0.0026036638, -0.01989685, -0.0050398787, -0.011596646, -0.03028524, 0.016350877, -0.01506382, -0.00076501095, 0.025609808, -0.019765519, 0.02335089, -0.011268316, 0.00041061878, 0.0006706158, 0.013251434, -0.0039334036, -0.006454985, -0.0019683435, -0.004317551, -0.0048133307, 0.0035689566, -0.005942789, -0.015667949, 0.028131388, -0.011826478, -0.014551624, -0.006967181, 0.019384654, 0.021052575, -0.012752371, 0.003660889, -0.001600613, -0.017861199, -0.010316156, -0.0021834003, -0.020120116, 0.010125724, 0.051508546, 0.016416544, 0.023048827, 0.011872444, 0.034067612, 0.02057978, -0.00710508, 0.002982886, 0.03593253, 0.04168489, 0.011800212, -0.0015997922, 0.008779568, -0.0035656733, 0.014958754, 0.007807708, 0.025281478, -0.0016375502, 0.002812154, 0.009199831, -0.0007190446, -0.003903854, -0.10065311, -0.03414641, 0.016692342, 0.019739252, 0.00049906294, 0.018465329, 0.0016153879, 0.008667935, 0.006415585, 0.021157641, -0.012358374, -0.045046996, -0.0049052634, -0.017637935, 0.011071317, 0.014065694, -0.009147298, 0.004288001, -0.0099878255, 0.013973762, -0.0043996335, -0.012049743, -0.0056735575, -0.014499092, 0.007177313, 0.011150116, -0.013789897, 0.02090811, 0.008136039, 0.00753191, 0.0023344324, -0.00795874, 0.013487833, -0.021617305, 0.0021505672, 0.007820841, -0.031152032, -0.0038743042, 0.013540365, -0.0051974775, 0.0037462553, 0.0010884168, 0.003424491, -0.027474727, 0.017440936, -0.029287113, -0.024506615, -0.0010284964, 0.0103818225, -0.0017450786, -0.00669795, -0.0018485028, -0.02480868, 0.010151991, -0.011097583, -0.021302108, 0.017427802, 0.012194209, -0.011872444, 0.0006677429, -0.027290862, -0.010197957, -0.007879941, 0.019988783, -0.0045999154, 0.002616797, -0.020198915, -0.043628607, 0.0179006, -0.022260834, -0.014840555, -0.01595688, 0.0007682942, 0.025911873, -0.034356542, -0.008989699, -0.025189545, -0.024821814, 0.005942789, -0.02082931, -0.01432836, -0.020172648, 0.020894976, -0.008838667, 0.029260848, 0.014013162, 0.005870556, 0.012010343, 0.0077683083, -0.018727994, 0.0041993516, 0.008858367, 0.010467188, -0.01432836, 0.011905277, 0.024992546, -0.009823659, 0.023626689, 0.02797379, -0.011005651, -0.016508477, -0.0049085463, -0.045782458, 0.023193292, -0.002820362, -0.0059592053, 0.025110746, -0.006921215, 0.013947495, -0.008530036, -0.007630409, 0.012141676, -0.014013162, -0.0013239942, -0.0026479885, -0.0102964565, -0.024086352, -0.031729896, 0.02290436, 0.001462714, 0.026699867, 0.008917467, 0.0082805045, 0.017716734, 0.022457832, 0.023403425, -0.018517861, 0.0017089621, -0.005085845, 0.018202664, -0.014302093, -0.032334026, 0.025767406, -0.018806793, 0.00445545, 0.02752726, -0.009863059, -0.005660424, -0.0013469774, 0.013776763, 0.0022720497, -0.0025675474, -0.006862115, -0.023075094, 0.029602312, -0.016981272, -0.013947495, -0.0030304939, -0.019673586, 0.001951927, 0.01937152, -0.006674967, 0.02147284, 0.017848067, 0.00978426, -0.0010432714, -0.010756119, -0.041028224, 0.022195166, 0.019844318, 0.0062547033, -0.02480868, 0.018452195, 0.010335856, 0.01289027, -0.014354626, 0.000795792, -0.010099458, 0.0017056789, -0.014827422, 0.011557247, -0.034960672, -0.0002417336, -0.002503523, 0.011583513, 0.0035295568, 0.03333215, 0.016114479, 0.010401522, -0.0060544214, -0.012332108, 0.02046158, 0.004777214, 0.0020241598, -0.030941902, 0.018373396, 0.018557262, 0.014236427, -0.030810568, 0.015694216, -0.004793631, 0.008654802, -0.010723286, 0.015681082, 0.0017631368, -0.0265948, 0.0057359403, 0.027133264, -0.0049413797, -0.016324611, 0.004432467, 0.014433425, 0.024165152, -0.011859311, -0.025596675, -0.0223265, -0.0041107023, 0.0041533853, -0.027553527, -0.028709251, -0.0060150214, 0.0066487, 0.028840583, 0.014814289, 0.015208286, 0.023955021, -0.015260818, 0.012857437, -0.028157655, -0.024178285, -0.00094969705, 0.013527232, 0.04136969, 0.011360249, 0.031020701, -0.015641682, 0.009948425, 0.002730071, 0.0058442894, -0.018176397, 0.0088715, -0.005049729, -0.0047607976, -0.010079757, -0.013947495, -0.02589874, -0.017624801, -0.002687388, 0.024060085, 0.029628579, -0.036142662, 0.04257795, 0.00073012576, -0.0071116467, -0.009212964, 0.033016954, 0.022562897, 0.02768486, -0.0065896004, -0.017874332, -0.041317157, -0.00935743, 0.0028285705, 0.012962502, -0.020435313, -0.0046852813, 0.012712971, -0.005617741, -0.0020931093, -0.013133235, -0.0037561052, 0.024388418, 0.0015447967, 0.014288959, 0.0055684918, -0.013527232, -0.0011754245, 0.019988783, -0.030311506, -0.018530995, -0.024020687, 0.0074202777, -0.0035722398, -0.046228986, -0.022733629, 0.0033686748, -0.017401537, -0.005128528, 0.0031043685, 0.011498147, -0.00010896481, -0.0060478547, 0.010316156, -0.016981272, -0.02574114, 0.009580695, -0.0068424153, 0.008969999, -0.019082591, -0.0052467273] } ] -}247 22116 +}247 22100 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -175,7 +175,7 @@ Date: Thu, 22 Jan 2026 20:04:50 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 96 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetriever.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetriever.httprr index 2d099fb88..2bf68f989 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetriever.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetriever.httprr @@ -1,5 +1,5 @@ httprr trace v1 -340 101257 +340 101241 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:18:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 70 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_b1b0f52a3c3249018684cf7afac539f7 "total_tokens": 24 } } -265 34412 +265 34396 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:19:09 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 33 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_6076db8e39904fd58b4825c86aaf39eb "total_tokens": 6 } } -610 1638 +610 1622 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:19:11 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 225 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterEqualsClause.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterEqualsClause.httprr index 4e966c786..3a4ad4da5 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterEqualsClause.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterEqualsClause.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 167983 +492 167967 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:18:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 162 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_4d1c36e05adb49899196939dfab0b18b "total_tokens": 55 } } -266 34418 +266 34402 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:19:09 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 258 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_7a5a181772ff4750b5b66a51b7dd1b40 "total_tokens": 6 } } -731 1642 +731 1626 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:19:12 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 231 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr index 07b157330..6833154f9 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 168049 +492 168033 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -20,7 +20,7 @@ Date: Tue, 04 Aug 2026 10:43:52 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 151 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7756,7 +7756,7 @@ X-Request-Id: req_3d4ea4f7dc774ed7848079de70ed4ed4 "total_tokens": 55 } } -278 34466 +278 34450 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7777,7 +7777,7 @@ Date: Tue, 04 Aug 2026 10:44:06 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 175 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9345,7 +9345,7 @@ X-Request-Id: req_a1823c6a576c49d1a8517ffcccfe7f1b "total_tokens": 9 } } -991 1752 +991 1736 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9364,7 +9364,7 @@ Content-Type: application/json Date: Tue, 04 Aug 2026 10:44:09 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 461 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr index f2d06f6bb..a2b664a80 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 168049 +492 168033 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -20,7 +20,7 @@ Date: Tue, 04 Aug 2026 10:44:16 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 127 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7756,7 +7756,7 @@ X-Request-Id: req_b9aa11841c964d09ad6eaf083bc3bf8c "total_tokens": 55 } } -278 34466 +278 34450 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7777,7 +7777,7 @@ Date: Tue, 04 Aug 2026 10:44:30 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 89 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9345,7 +9345,7 @@ X-Request-Id: req_59abbb4c53b545d0b29d5ce8e5a31a58 "total_tokens": 9 } } -1737 1923 +1737 1907 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9364,7 +9364,7 @@ Content-Type: application/json Date: Tue, 04 Aug 2026 10:44:34 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 1477 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilters.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilters.httprr index e6b170d10..c4ee86ef9 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilters.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilters.httprr @@ -1,5 +1,5 @@ httprr trace v1 -393 101153 +393 101137 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:18:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 148 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_6b173d75f1bc40f99e92c6ae35c40887 "total_tokens": 33 } } -278 34393 +278 34377 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:19:09 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 36 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_11f3b69fe79a407f81b1e243a320b71e "total_tokens": 9 } } -806 1664 +806 1648 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:19:12 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 304 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr index d43fb0959..532ee1e72 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 168128 +441 168112 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -20,7 +20,7 @@ Date: Tue, 04 Aug 2026 10:43:29 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 146 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7756,7 +7756,7 @@ X-Request-Id: req_2a57143182644fe6ab0750774d4622c6 "total_tokens": 46 } } -299 34497 +299 34481 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7777,7 +7777,7 @@ Date: Tue, 04 Aug 2026 10:43:43 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 76 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9345,7 +9345,7 @@ X-Request-Id: req_84619f4b06894879bd2f4129295d2eec "total_tokens": 12 } } -1051 1725 +1051 1709 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9364,7 +9364,7 @@ Content-Type: application/json Date: Tue, 04 Aug 2026 10:43:46 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 399 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeStoreRest.httprr b/vectorstores/pinecone/testdata/TestPineconeStoreRest.httprr index b6b82715d..bcc64ee0e 100644 --- a/vectorstores/pinecone/testdata/TestPineconeStoreRest.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeStoreRest.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 67760 +256 67744 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:18:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 65 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -3128,7 +3128,7 @@ X-Request-Id: req_e93ef84381ca4bcb91013a49d4ab6ab7 "total_tokens": 4 } } -247 34425 +247 34409 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -3147,7 +3147,7 @@ Date: Thu, 22 Jan 2026 20:19:09 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 71 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestPineconeStoreRestWithScoreThreshold.httprr b/vectorstores/pinecone/testdata/TestPineconeStoreRestWithScoreThreshold.httprr index a30ac0628..1b78a010a 100644 --- a/vectorstores/pinecone/testdata/TestPineconeStoreRestWithScoreThreshold.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeStoreRestWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334548 +334 334532 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:18:52 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 83 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -15464,7 +15464,7 @@ X-Request-Id: req_6d43d98576ba4c4aa94ab7d7e54db5a2 "total_tokens": 24 } } -276 34080 +276 34064 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -15483,7 +15483,7 @@ Date: Thu, 22 Jan 2026 20:19:09 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 73 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -17051,7 +17051,7 @@ X-Request-Id: req_d5c4002ba0de4060900c403624454d3e "total_tokens": 7 } } -276 34080 +276 34064 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -17070,7 +17070,7 @@ Date: Thu, 22 Jan 2026 20:19:12 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 35 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/pinecone/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr b/vectorstores/pinecone/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr index 923c9e5d6..2605744e3 100644 --- a/vectorstores/pinecone/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr +++ b/vectorstores/pinecone/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334547 +334 334531 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:18:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 72 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/redisvector/testdata/TestAddDocuments.httprr b/vectorstores/redisvector/testdata/TestAddDocuments.httprr index b433bb28c..bf76085c7 100644 --- a/vectorstores/redisvector/testdata/TestAddDocuments.httprr +++ b/vectorstores/redisvector/testdata/TestAddDocuments.httprr @@ -1,5 +1,5 @@ httprr trace v1 -377 434499 +377 434483 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:22:26 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 181 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -20090,7 +20090,7 @@ X-Request-Id: req_bfd45d32569049dfbfee2eea42f9d27a "total_tokens": 31 } } -255 67778 +255 67762 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -20109,7 +20109,7 @@ Date: Thu, 22 Jan 2026 20:22:28 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 216 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/redisvector/testdata/TestRedisVectorAsRetrieverWithMetadataFilters.httprr b/vectorstores/redisvector/testdata/TestRedisVectorAsRetrieverWithMetadataFilters.httprr index 5651c4751..6b3d3663f 100644 --- a/vectorstores/redisvector/testdata/TestRedisVectorAsRetrieverWithMetadataFilters.httprr +++ b/vectorstores/redisvector/testdata/TestRedisVectorAsRetrieverWithMetadataFilters.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 167983 +492 167967 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:22:02 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 143 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_78e472b0887640e2af7848ddcdfe587e "total_tokens": 55 } } -246 34442 +246 34426 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:22:04 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 49 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/redisvector/testdata/TestSimilaritySearch.httprr b/vectorstores/redisvector/testdata/TestSimilaritySearch.httprr index 55c80d16c..50b3a7f7a 100644 --- a/vectorstores/redisvector/testdata/TestSimilaritySearch.httprr +++ b/vectorstores/redisvector/testdata/TestSimilaritySearch.httprr @@ -1,5 +1,5 @@ httprr trace v1 -377 434497 +377 434481 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:21:49 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 48 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -20090,7 +20090,7 @@ X-Request-Id: req_21d012c2add54e9c82b6be05a82ecc9f "total_tokens": 31 } } -247 34374 +247 34358 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -20109,7 +20109,7 @@ Date: Thu, 22 Jan 2026 20:21:50 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 56 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -21677,7 +21677,7 @@ X-Request-Id: req_ae78008ea2bd951289ee0924e4c85fa3 "total_tokens": 2 } } -247 34374 +247 34358 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -21696,7 +21696,7 @@ Date: Thu, 22 Jan 2026 20:21:51 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 33 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -23264,7 +23264,7 @@ X-Request-Id: req_62a57f46ffbc43dfb6c7ec9ed92866c0 "total_tokens": 2 } } -247 34374 +247 34358 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -23283,7 +23283,7 @@ Date: Thu, 22 Jan 2026 20:21:52 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 51 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -24851,7 +24851,7 @@ X-Request-Id: req_4a4768e317a94a99af19e04fb8d13eff "total_tokens": 2 } } -247 34374 +247 34358 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -24870,7 +24870,7 @@ Date: Thu, 22 Jan 2026 20:21:54 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 33 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -26438,7 +26438,7 @@ X-Request-Id: req_1a4f9c2386fe47ee96142f09879c7b33 "total_tokens": 2 } } -247 34376 +247 34360 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -26457,7 +26457,7 @@ Date: Thu, 22 Jan 2026 20:21:55 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 118 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestDeduplicater.httprr b/vectorstores/weaviate/testdata/TestDeduplicater.httprr index 21abb6b1f..f4ecc26cf 100644 --- a/vectorstores/weaviate/testdata/TestDeduplicater.httprr +++ b/vectorstores/weaviate/testdata/TestDeduplicater.httprr @@ -1,5 +1,5 @@ httprr trace v1 -248 34452 +248 34436 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 45 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestMetadataSearch.httprr b/vectorstores/weaviate/testdata/TestMetadataSearch.httprr index 5cda9ffaa..4623a5bac 100644 --- a/vectorstores/weaviate/testdata/TestMetadataSearch.httprr +++ b/vectorstores/weaviate/testdata/TestMetadataSearch.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 67762 +256 67746 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 105 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr b/vectorstores/weaviate/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr index 6e640424f..430829ba6 100644 --- a/vectorstores/weaviate/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr +++ b/vectorstores/weaviate/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334547 +334 334531 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 62 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateAsRetriever.httprr b/vectorstores/weaviate/testdata/TestWeaviateAsRetriever.httprr index a0c3ab057..41ae3f679 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateAsRetriever.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateAsRetriever.httprr @@ -1,5 +1,5 @@ httprr trace v1 -340 101258 +340 101242 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 161 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_0346deed3dd6469ba79733d9297b54e1 "total_tokens": 24 } } -265 34412 +265 34396 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 43 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_6a35c95b685e428998b9195ca4b25e49 "total_tokens": 6 } } -610 1638 +610 1622 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:24:21 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 257 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterEqualsClause.httprr b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterEqualsClause.httprr index 15bfc6683..b464f2b9e 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterEqualsClause.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterEqualsClause.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 167911 +492 167895 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 235 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_b983bf6ad8594d7f8deaaf5ca75fc203 "total_tokens": 55 } } -266 34417 +266 34401 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 91 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_b5d7a353422e4e64bffe27b2a31e7dc7 "total_tokens": 6 } } -731 1642 +731 1626 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:24:21 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 246 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterNotSelected.httprr index 690a29165..3527f00db 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterNotSelected.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilterNotSelected.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 167981 +492 167965 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 43 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_9816263d255445469e7652f3fd5aefbe "total_tokens": 55 } } -292 34413 +292 34397 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 61 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_6265f54303164cc6827708585cd737fa "total_tokens": 12 } } -1751 1755 +1751 1739 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:24:21 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 482 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilters.httprr b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilters.httprr index 38f4935b1..2729f3f3b 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilters.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithMetadataFilters.httprr @@ -1,5 +1,5 @@ httprr trace v1 -393 101153 +393 101137 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:30 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 139 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -4670,7 +4670,7 @@ X-Request-Id: req_a51c973ed8d64688bb4c70f6d6ebf75e "total_tokens": 33 } } -278 34392 +278 34376 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -4689,7 +4689,7 @@ Date: Thu, 22 Jan 2026 20:24:32 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 53 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -6257,7 +6257,7 @@ X-Request-Id: req_20f711560f534463ad9dcf4028e587cb "total_tokens": 9 } } -750 1747 +750 1731 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -6274,7 +6274,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:24:33 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 393 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithScoreThreshold.httprr b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithScoreThreshold.httprr index b2ed16896..b8f7fbb1d 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 168070 +441 168054 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 252 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -7754,7 +7754,7 @@ X-Request-Id: req_15603b1261fe422e97e1626ba1b7fff2 "total_tokens": 46 } } -324 34289 +324 34273 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,7 +7773,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 45 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -9341,7 +9341,7 @@ X-Request-Id: req_16af74141db44904bfff45cebf92afbd "total_tokens": 17 } } -1198 1664 +1198 1648 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9358,7 +9358,7 @@ Content-Type: application/json Date: Thu, 22 Jan 2026 20:24:21 GMT Openai-Organization: lcgo-tst Openai-Processing-Ms: 235 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsAdded.httprr b/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsAdded.httprr index 6ace3eca9..66b8cf52e 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsAdded.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsAdded.httprr @@ -1,5 +1,5 @@ httprr trace v1 -245 34343 +245 34327 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 72 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -1583,7 +1583,7 @@ X-Request-Id: req_56134ac60fb84182a5b63782cb940fd9 "total_tokens": 1 } } -245 34344 +245 34328 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -1602,7 +1602,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 173 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsDefaults.httprr b/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsDefaults.httprr index 38af98715..3f5f5ecb8 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsDefaults.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateStoreAdditionalFieldsDefaults.httprr @@ -1,5 +1,5 @@ httprr trace v1 -245 34342 +245 34326 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 43 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -1583,7 +1583,7 @@ X-Request-Id: req_f4690d4cd7cd444a9526955354ee673b "total_tokens": 1 } } -245 34344 +245 34328 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -1602,7 +1602,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 159 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateStoreRest.httprr b/vectorstores/weaviate/testdata/TestWeaviateStoreRest.httprr index e5fcc1e59..694b5a2db 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateStoreRest.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateStoreRest.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 67761 +256 67745 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 70 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -3128,7 +3128,7 @@ X-Request-Id: req_7e74ca4e9d3d40848f4cf222ef1fe582 "total_tokens": 4 } } -247 34424 +247 34408 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -3147,7 +3147,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 56 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateStoreRestWithScoreThreshold.httprr b/vectorstores/weaviate/testdata/TestWeaviateStoreRestWithScoreThreshold.httprr index 78bcc9b71..8ba94747b 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateStoreRestWithScoreThreshold.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateStoreRestWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -334 334549 +334 334533 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 277 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -15464,7 +15464,7 @@ X-Request-Id: req_a80c06d9c7394d6288679de6cdd4b8ef "total_tokens": 24 } } -276 34080 +276 34064 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -15483,7 +15483,7 @@ Date: Thu, 22 Jan 2026 20:24:20 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 47 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -17051,7 +17051,7 @@ X-Request-Id: req_71c8f049a15c4f1b8d5f39f572e654dc "total_tokens": 7 } } -276 34080 +276 34064 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -17070,7 +17070,7 @@ Date: Thu, 22 Jan 2026 20:24:21 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 45 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload diff --git a/vectorstores/weaviate/testdata/TestWeaviateWithOptionEmbedder.httprr b/vectorstores/weaviate/testdata/TestWeaviateWithOptionEmbedder.httprr index f82215ce2..b3f5b5321 100644 --- a/vectorstores/weaviate/testdata/TestWeaviateWithOptionEmbedder.httprr +++ b/vectorstores/weaviate/testdata/TestWeaviateWithOptionEmbedder.httprr @@ -1,5 +1,5 @@ httprr trace v1 -256 67760 +256 67744 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -18,7 +18,7 @@ Date: Thu, 22 Jan 2026 20:24:18 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 52 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -3128,7 +3128,7 @@ X-Request-Id: req_ed0c5ac009fd42f48cef4e836ac03ce0 "total_tokens": 4 } } -247 34383 +247 34367 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -3147,7 +3147,7 @@ Date: Thu, 22 Jan 2026 20:24:19 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst Openai-Processing-Ms: 108 -Openai-Project: proj_pf0r5emOzUBDExmxgmWVPVjK +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload From c208ec064e978aaf31ff9c8b6d35325fa8ea9d84 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 11:56:59 +0300 Subject: [PATCH 176/618] docs(gemini): describe the vertex reasoning switch as it behaves The page promised an error on every model, including ones that never think. The door was narrowed to refuse only where omitting the instruction would not disable thinking, and its own test pins that: gemini-2.0-flash, gemini-1.5-flash and the flash-lite line all succeed. PAGI-157 --- docs/docs/getting-started/guide-gemini.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/getting-started/guide-gemini.mdx b/docs/docs/getting-started/guide-gemini.mdx index dfad46741..c51c8f7b0 100644 --- a/docs/docs/getting-started/guide-gemini.mdx +++ b/docs/docs/getting-started/guide-gemini.mdx @@ -64,7 +64,7 @@ llm, err := googleai.New(ctx, - **Thinking**: on thinking-capable Gemini models, control reasoning per call with `llms.WithReasoning` (Gemini 3.x maps effort to a thinking level; 2.5 uses a token budget). `llms.WithReasoningDisabled()` turns thinking off where the model allows it. - **Structured output**: request schema-constrained JSON with `llms.WithStructuredOutput` — see the [googleai-structured-output-example](https://github.com/vxcontrol/langchaingo/tree/main-vxcontrol/examples/googleai-structured-output-example). -- **Vertex AI**: to run Gemini through Google Cloud Vertex AI instead of the AI Studio endpoint, use the `llms/googleai/vertex` package with `vertex.New(ctx, googleai.WithCloudProject(...), googleai.WithCloudLocation(...))`. Note that `llms.WithReasoningDisabled()` returns an error on this door for every model, including ones that do not think at all: the SDK it is pinned to has no field to carry the instruction. This is a known limitation of that door, not the intended contract — use the AI Studio door when you need to turn thinking off. +- **Vertex AI**: to run Gemini through Google Cloud Vertex AI instead of the AI Studio endpoint, use the `llms/googleai/vertex` package with `vertex.New(ctx, googleai.WithCloudProject(...), googleai.WithCloudLocation(...))`. Note that `llms.WithReasoningDisabled()` succeeds on this door only for models whose thinking is off unless asked for, where omitting the instruction is enough to disable it. On a model that thinks by default the door returns an error rather than pretending: the SDK it is pinned to has no field to carry the instruction. Use the AI Studio door when you need to turn thinking off on such a model. See [Configure LLM Providers](../how-to/configure-llm-providers.md) for the full set of options. From d76532a66077ef129daae8ac7c0dccf711e9f12e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 12:28:13 +0300 Subject: [PATCH 177/618] style: satisfy the linter gate on the PAGI-157 changes The CI linter flags what gofmt and vet do not: import grouping in two files, an exhaustive switch over the new ToolChoiceKind, a test grown past the length limit, and a helper whose parameter never varies. The long Converse table is split into the forcing cases and the forbidding ones, which also names what each half checks. PAGI-157 --- llms/bedrock/tool_choice_notation_test.go | 21 ++++++++++++++------- llms/huggingface/truncation_test.go | 2 +- llms/openai/turn_limits_test.go | 2 +- llms/options.go | 1 + llms/turn.go | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/llms/bedrock/tool_choice_notation_test.go b/llms/bedrock/tool_choice_notation_test.go index 18ebf70aa..42570a1e4 100644 --- a/llms/bedrock/tool_choice_notation_test.go +++ b/llms/bedrock/tool_choice_notation_test.go @@ -12,8 +12,8 @@ import ( "github.com/vxcontrol/langchaingo/llms/bedrock" ) -func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { - t.Parallel() +func converseChoiceOnWire(t *testing.T, choice any) string { + t.Helper() const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` @@ -27,9 +27,8 @@ func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { }, } - capture := func(t *testing.T, choice any) string { - t.Helper() - var body string + var body string + { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { b, _ := io.ReadAll(r.Body) body = string(b) @@ -51,6 +50,10 @@ func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { } return body } +} + +func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { + t.Parallel() for _, tc := range []struct { name string @@ -96,12 +99,16 @@ func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { t.Run(tc.name, func(t *testing.T) { t.Parallel() - body := capture(t, tc.choice) + body := converseChoiceOnWire(t, tc.choice) if !strings.Contains(body, tc.want) { t.Fatalf("wire must carry %s, got body: %s", tc.want, body) } }) } +} + +func TestConverseOffersNoToolWhenTheCallerForbidsThem(t *testing.T) { + t.Parallel() for _, tc := range []struct { name string @@ -114,7 +121,7 @@ func TestConverseKeepsAForcedChoiceInEveryNotation(t *testing.T) { t.Run("forbidding tools offers the model none: "+tc.name, func(t *testing.T) { t.Parallel() - body := capture(t, tc.choice) + body := converseChoiceOnWire(t, tc.choice) if strings.Contains(body, `"toolConfig"`) { t.Fatalf("a forbidden tool must not be offered at all, got body: %s", body) } diff --git a/llms/huggingface/truncation_test.go b/llms/huggingface/truncation_test.go index d95c95a1c..45850ba30 100644 --- a/llms/huggingface/truncation_test.go +++ b/llms/huggingface/truncation_test.go @@ -3,7 +3,6 @@ package huggingface import ( "context" "errors" - "github.com/vxcontrol/langchaingo/callbacks" "io" "net/http" "net/http/httptest" @@ -11,6 +10,7 @@ import ( "strings" "testing" + "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" ) diff --git a/llms/openai/turn_limits_test.go b/llms/openai/turn_limits_test.go index d06787647..56f3fb10d 100644 --- a/llms/openai/turn_limits_test.go +++ b/llms/openai/turn_limits_test.go @@ -34,7 +34,7 @@ func turnLimitErr(t *testing.T, model string, msgs []llms.MessageContent, opts . return err } -func askedFor(text string) []llms.MessageContent { +func askedFor(text string) []llms.MessageContent { //nolint:unparam // every caller asks the same thing today return []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, text)} } diff --git a/llms/options.go b/llms/options.go index 65b83539d..6a8ccdaed 100644 --- a/llms/options.go +++ b/llms/options.go @@ -2,6 +2,7 @@ package llms import ( "fmt" + "github.com/vxcontrol/langchaingo/llms/streaming" ) diff --git a/llms/turn.go b/llms/turn.go index 8031a8023..674a5bb52 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -72,7 +72,7 @@ func ForcesToolUse(choice any) bool { // tool", which every door spells differently. func ForcedToolName(choice any) (name string, forced bool) { kind, name := ClassifyToolChoice(choice) - switch kind { + switch kind { //nolint:exhaustive // the kinds that leave the choice to the model are not forcing case ToolChoiceNamed: return name, true case ToolChoiceAny: From 1de27245550282e9c64ba10fbf190f1f7b469f41 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 13:42:20 +0300 Subject: [PATCH 178/618] docs(examples): name the model each example actually sends Three READMEs named a model their code does not use: interleaved-thinking asked for claude-3-7-sonnet-20250219 while sending claude-sonnet-4-5, the Groq example named llama3-8b-8192 while sending moonshotai/kimi-k2-instruct, and the caching example named gemini-2.0-flash-exp while both its cache and its client pin gemini-2.5-pro. A reader following the README would set up the wrong model and get behaviour the example does not demonstrate. Co-Authored-By: Claude Fable 5 --- examples/anthropic-interleaved-thinking/README.md | 2 +- examples/googleai-caching-example/README.md | 4 ++-- examples/groq-completion-example/README.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/anthropic-interleaved-thinking/README.md b/examples/anthropic-interleaved-thinking/README.md index 1bb5f8ded..84ec5b2f9 100644 --- a/examples/anthropic-interleaved-thinking/README.md +++ b/examples/anthropic-interleaved-thinking/README.md @@ -64,6 +64,6 @@ The example displays detailed token usage: ## Requirements -- Claude 3.7 Sonnet model (`claude-3-7-sonnet-20250219`) +- Claude Sonnet 4.5 model (`claude-sonnet-4-5`) - Valid Anthropic API key - Interleaved thinking feature access \ No newline at end of file diff --git a/examples/googleai-caching-example/README.md b/examples/googleai-caching-example/README.md index 04269b971..969a419d3 100644 --- a/examples/googleai-caching-example/README.md +++ b/examples/googleai-caching-example/README.md @@ -14,7 +14,7 @@ and reuse them across multiple requests. This can significantly reduce: ## Requirements - Minimum cacheable content: **32,768 tokens** (~24,000 words) -- Supported models: gemini-2.0-flash-exp and other Gemini 2.0+ models +- Supported models: gemini-2.5-pro and other Gemini 2.0+ models - Google API key ## How It Works @@ -70,7 +70,7 @@ Caching is particularly valuable when: ```go cached, err := helper.CreateCachedContent( ctx, - "gemini-2.0-flash-exp", // Model name + "gemini-2.5-pro", // Model name messages, // Content to cache 1*time.Hour, // TTL "my-cache-name", // Display name diff --git a/examples/groq-completion-example/README.md b/examples/groq-completion-example/README.md index ce1b63f6f..4af6d803a 100644 --- a/examples/groq-completion-example/README.md +++ b/examples/groq-completion-example/README.md @@ -9,7 +9,7 @@ Hello there! 👋 This example demonstrates how to use the Groq API with LangCha 2. **Groq LLM Configuration**: - It sets up a Large Language Model (LLM) client using Groq's API, which is compatible with the OpenAI interface. - - The model used is "llama3-8b-8192", a powerful language model hosted by Groq. + - The model used is "moonshotai/kimi-k2-instruct", hosted by Groq. 3. **Text Generation**: - The example prompts the model to "Write a long poem about how golang is a fantastic language." From c224af64f65e04c447ad21c8b36b86195d2e7bca Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 13:45:34 +0300 Subject: [PATCH 179/618] chore(examples): pin a Claude model the vendor still serves MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The vision, completion and json-mode examples all asked for claude-3-5-sonnet-20240620, which Anthropic has retired: running them as written returns a model error before any of the behaviour they demonstrate. claude-sonnet-4-5 serves all three — it takes images, it honours JSON mode, and it does not think unless asked, so the output stays what each example describes. Co-Authored-By: Claude Fable 5 --- .../anthropic_completion_example.go | 2 +- examples/anthropic-vision-example/anthropic_vision_example.go | 2 +- examples/json-mode-example/json_mode_example.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/anthropic-completion-example/anthropic_completion_example.go b/examples/anthropic-completion-example/anthropic_completion_example.go index 986ca6575..24339d289 100644 --- a/examples/anthropic-completion-example/anthropic_completion_example.go +++ b/examples/anthropic-completion-example/anthropic_completion_example.go @@ -12,7 +12,7 @@ import ( func main() { llm, err := anthropic.New( - anthropic.WithModel("claude-3-5-sonnet-20240620"), + anthropic.WithModel("claude-sonnet-4-5"), ) if err != nil { log.Fatal(err) diff --git a/examples/anthropic-vision-example/anthropic_vision_example.go b/examples/anthropic-vision-example/anthropic_vision_example.go index ae13c14ab..1fc10628b 100644 --- a/examples/anthropic-vision-example/anthropic_vision_example.go +++ b/examples/anthropic-vision-example/anthropic_vision_example.go @@ -15,7 +15,7 @@ var image []byte func main() { llm, err := anthropic.New( - anthropic.WithModel("claude-3-5-sonnet-20240620"), + anthropic.WithModel("claude-sonnet-4-5"), ) if err != nil { log.Fatal(err) diff --git a/examples/json-mode-example/json_mode_example.go b/examples/json-mode-example/json_mode_example.go index ca4c30acd..38b7a7af9 100644 --- a/examples/json-mode-example/json_mode_example.go +++ b/examples/json-mode-example/json_mode_example.go @@ -42,7 +42,7 @@ func initBackend(ctx context.Context) (llms.Model, error) { case "ollama": return ollama.New(ollama.WithModel("mistral")) case "anthropic": - return anthropic.New(anthropic.WithModel("claude-3-5-sonnet-20240620")) + return anthropic.New(anthropic.WithModel("claude-sonnet-4-5")) case "googleai": return googleai.New(ctx, googleai.WithDefaultModel("gemini-1.5-flash")) default: From 4c8d95bf190b609a0a46376a7eb753ebf4224c58 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 13:49:15 +0300 Subject: [PATCH 180/618] test(ollama): let the canonical record flag reach the structured-output test The guard consulted HTTPRR_RECORD directly, so "go test -httprecord=. ./llms/ollama/" skipped instead of recording: the env var is only the flag's default, and setting the flag left it empty. Asking httprr.Recording covers both spellings, so the test records under either and still skips cleanly when neither asks for it. Co-Authored-By: Claude Fable 5 --- llms/ollama/ollama_test.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/llms/ollama/ollama_test.go b/llms/ollama/ollama_test.go index c8065e1a4..5be3da025 100644 --- a/llms/ollama/ollama_test.go +++ b/llms/ollama/ollama_test.go @@ -229,10 +229,11 @@ func TestWithFormat(t *testing.T) { func TestStructuredOutput(t *testing.T) { ctx := t.Context() - // This integration test needs a recorded trace (or a live Ollama server with - // HTTPRR_RECORD=.). Skip cleanly when neither is available. - if _, err := os.Stat("testdata/TestStructuredOutput.httprr"); err != nil && os.Getenv("HTTPRR_RECORD") == "" { - t.Skip("no recording; run against a local Ollama server with HTTPRR_RECORD=. to record") + const cassette = "testdata/TestStructuredOutput.httprr" + recording, err := httprr.Recording(cassette) + require.NoError(t, err) + if _, statErr := os.Stat(cassette); statErr != nil && !recording { + t.Skip("no recording; run against a live Ollama server with -httprecord=. to record") } llm := newTestClient(t) From 1f5a2244d3bcf7bb7604960b8c41fe190bd7bf24 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 14:34:21 +0300 Subject: [PATCH 181/618] fix(reasoning): say so when an effort maps to no thinking budget WithReasoning("minimal", 0) on a budget-thinking Claude asked for thinking and got none: the effort has no budget equivalent, GetTokens answered -1, and the guard that keeps a negative budget off the wire dropped the payload in silence. The caller saw a normal answer with no thinking and no error. All three budget doors now return a typed ErrEffortHasNoBudget before the request leaves. An explicit token budget still wins over the effort, so WithReasoning("minimal", 2048) keeps working. Co-Authored-By: Claude Fable 5 --- llms/anthropic/anthropicllm.go | 5 ++ llms/anthropic/response_folding_test.go | 33 ++++++++++--- llms/bedrock/budget_floor_test.go | 46 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 33 +++++++------ .../bedrockclient/provider_anthropic.go | 31 +++++++------ llms/reasoning/errors_claude.go | 13 ++++++ 6 files changed, 128 insertions(+), 33 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index a15f1d55f..c31b70754 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -230,6 +230,11 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), } } + } else { + return nil, &reasoning.ErrEffortHasNoBudget{ + Model: model, + Effort: string(opts.Reasoning.GetEffort(opts.GetMaxTokens())), + } } case llms.ReasoningOff: switch reasoning.ResolveOff(model, reasoning.ProviderAnthropic) { //nolint:exhaustive // only Claude-relevant wires are handled; others are a no-op diff --git a/llms/anthropic/response_folding_test.go b/llms/anthropic/response_folding_test.go index fa8853029..f53a95bff 100644 --- a/llms/anthropic/response_folding_test.go +++ b/llms/anthropic/response_folding_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) // serveAnthropic's returned pointer holds the request body only once @@ -53,7 +54,7 @@ func TestEveryTextBlockOfATurnReachesTheChoice(t *testing.T) { assert.Len(t, got.Choices[0].ToolCalls, 1) } -func TestAnEffortWithNoBudgetSendsNoThinking(t *testing.T) { +func TestAnEffortWithNoBudgetIsRefused(t *testing.T) { t.Parallel() const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + @@ -67,13 +68,33 @@ func TestAnEffortWithNoBudgetSendsNoThinking(t *testing.T) { _, err = llm.GenerateContent(context.Background(), []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, - llms.WithReasoning(llms.ReasoningEffort("minimal"), 0)) + llms.WithReasoning(llms.ReasoningMinimal, 0)) + + var refused *reasoning.ErrEffortHasNoBudget + require.ErrorAs(t, err, &refused) + assert.Equal(t, string(llms.ReasoningMinimal), refused.Effort) + assert.Empty(t, *sent, "the refusal must land before the request leaves") +} + +func TestAnEffortWithNoBudgetStillTravelsWhenTokensAreExplicit(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + srv, sent := serveAnthropic(t, resp) + + llm, err := New(WithBaseURL(srv.URL), WithToken("t"), WithModel("claude-sonnet-4-5-20250929")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningEffort("minimal"), 2048), llms.WithMaxTokens(8000)) require.NoError(t, err) - assert.NotContains(t, *sent, `"budget_tokens":-1`, - "an effort the budget table does not map must not travel as a negative budget") - assert.NotContains(t, *sent, `"thinking"`, - "no budget means no thinking payload, as on both Bedrock doors") + assert.Contains(t, *sent, `"budget_tokens":2048`, + "an explicit budget answers the question the effort could not") } func TestABudgetedEffortStillSendsThinking(t *testing.T) { diff --git a/llms/bedrock/budget_floor_test.go b/llms/bedrock/budget_floor_test.go index 81d3ac4fa..2f797ab95 100644 --- a/llms/bedrock/budget_floor_test.go +++ b/llms/bedrock/budget_floor_test.go @@ -13,6 +13,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) const claudeBudgetModel = "anthropic.claude-sonnet-4-5-20250929-v1:0" @@ -101,3 +102,48 @@ func TestConverseBudgetNeverFallsBelowTheVendorFloor(t *testing.T) { "maxTokens=%d effort=%s: budget must leave room for the answer", tc.maxTokens, tc.effort) } } + +func TestLegacyRefusesAnEffortWithNoBudget(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + llm, sent := legacyLLMCapturing(t, resp, bedrock.WithModel(claudeBudgetModel)) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithMaxTokens(8000), llms.WithReasoning(llms.ReasoningMinimal, 0)) + + var refused *reasoning.ErrEffortHasNoBudget + require.ErrorAs(t, err, &refused) + assert.Equal(t, string(llms.ReasoningMinimal), refused.Effort) + assert.Empty(t, *sent, "the refusal must land before the request leaves") +} + +func TestConverseRefusesAnEffortWithNoBudget(t *testing.T) { + t.Parallel() + + const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(claudeBudgetModel), bedrock.WithConverseAPI()) + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithMaxTokens(8000), llms.WithReasoning(llms.ReasoningMinimal, 0)) + + var refused *reasoning.ErrEffortHasNoBudget + require.ErrorAs(t, err, &refused) + assert.Equal(t, string(llms.ReasoningMinimal), refused.Effort) + assert.Empty(t, body, "the refusal must land before the request leaves") +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index f04c5433a..cab3741f9 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -167,27 +167,34 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti inferenceConfig.Temperature = nil inferenceConfig.TopP = nil } - setBudget := func() { - if tokens := reasoning.ClaudeClampBudget(input.ModelID, - input.ReasoningConfig.GetTokens(maxTokens)); tokens > 0 { - additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} - if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID, reasoning.ProviderBedrock) { - effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) - additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} - } - // Budget thinking requires temperature=1.0 and rejects top_p. - if isAnthropicModelID(input.ModelID) { - inferenceConfig.Temperature = aws.Float32(1.0) - inferenceConfig.TopP = nil + setBudget := func() error { + tokens := reasoning.ClaudeClampBudget(input.ModelID, input.ReasoningConfig.GetTokens(maxTokens)) + if tokens <= 0 { + return &reasoning.ErrEffortHasNoBudget{ + Model: input.ModelID, + Effort: string(input.ReasoningConfig.GetEffort(maxTokens)), } } + additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} + if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID, reasoning.ProviderBedrock) { + effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) + additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} + } + // Budget thinking requires temperature=1.0 and rejects top_p. + if isAnthropicModelID(input.ModelID) { + inferenceConfig.Temperature = aws.Float32(1.0) + inferenceConfig.TopP = nil + } + return nil } switch reasoning.ResolveMechanism(input.ModelID, input.ReasoningConfig.Adaptive, isAnthropicModelID(input.ModelID), c.supportsReasoning(input.ModelID)) { case reasoning.MechanismAdaptive: setAdaptive() case reasoning.MechanismBudget: - setBudget() + if err := setBudget(); err != nil { + return nil, err + } } if additionalModelFields.Thinking != nil { converseInput.AdditionalModelRequestFields = document.NewLazyDocument(additionalModelFields) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index de582bdd2..705466f2a 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -791,27 +791,30 @@ func applyAnthropicReasoning( input.TopP = 0 input.TopK = 0 } - setBudget := func() { - if tokens := reasoning.ClaudeClampBudget(modelID, cfg.GetTokens(maxTokens)); tokens > 0 { - input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} - if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { - input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} - } - // Budget thinking requires temperature=1.0 and rejects top_p/top_k. - input.Temperature = 1.0 - if reasoning.ClaudeRejectsSampling(modelID) { - input.Temperature = 0 - } - input.TopP = 0 - input.TopK = 0 + setBudget := func() error { + tokens := reasoning.ClaudeClampBudget(modelID, cfg.GetTokens(maxTokens)) + if tokens <= 0 { + return &reasoning.ErrEffortHasNoBudget{Model: modelID, Effort: string(cfg.GetEffort(maxTokens))} + } + input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} + if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { + input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} + } + // Budget thinking requires temperature=1.0 and rejects top_p/top_k. + input.Temperature = 1.0 + if reasoning.ClaudeRejectsSampling(modelID) { + input.Temperature = 0 } + input.TopP = 0 + input.TopK = 0 + return nil } switch reasoning.ResolveMechanism(modelID, cfg.Adaptive, true, supportsAnthropicReasoning(modelID)) { case reasoning.MechanismAdaptive: setAdaptive() case reasoning.MechanismBudget: - setBudget() + return setBudget() } return nil } diff --git a/llms/reasoning/errors_claude.go b/llms/reasoning/errors_claude.go index 04266290d..cf5b1e171 100644 --- a/llms/reasoning/errors_claude.go +++ b/llms/reasoning/errors_claude.go @@ -21,3 +21,16 @@ func (e *ErrForcedToolUseWithThinking) Error() string { "model %q runs manual thinking, which rejects a forced tool choice; use tool_choice auto or none", e.Model) } + +// ErrEffortHasNoBudget reports that reasoning was asked for with an effort that +// does not map to a token budget, on a model whose only thinking wire is one. +type ErrEffortHasNoBudget struct { + Model string + Effort string +} + +func (e *ErrEffortHasNoBudget) Error() string { + return fmt.Sprintf( + "model %q thinks by token budget, and effort %q maps to none; pass an explicit budget or an effort from low to max", + e.Model, e.Effort) +} From 28ff148b87c8492d071d60813c5beb254fd268eb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 28 Aug 2026 14:42:05 +0300 Subject: [PATCH 182/618] fix(llms): give every door one shape for a model refusal A model that declines produced three different outcomes. The anthropic door raised a typed error carrying the refusal text and its stop_details; the openai door put the refusal in GenerationInfo and returned success; the legacy Bedrock door returned the refusal as an ordinary answer with stop_reason "refusal" and dropped stop_details entirely, so a caller that does not inspect StopReason reads a refusal as a real answer. ErrModelRefusal now lives in llms and names the door that refused; anthropic.ErrModelRefusal aliases it, so callers keep compiling. openai and legacy Bedrock return it alongside the response, as those doors already do for truncation and structured output. The Converse door is untouched: its SDK has no refusal stop reason (end_turn, tool_use, max_tokens, stop_sequence, guardrail_intervened, content_filtered, malformed_*, model_context_window_exceeded), so a guard there would defend against an input the protocol cannot produce. Co-Authored-By: Claude Fable 5 --- llms/anthropic/anthropicllm.go | 61 ++++++------------- .../bedrockclient/provider_anthropic.go | 25 +++++++- llms/bedrock/refusal_test.go | 38 ++++++++++++ llms/errors.go | 35 +++++++++++ llms/openai/openaillm.go | 19 ++++++ llms/openai/refusal_test.go | 41 +++++++++++++ 6 files changed, 175 insertions(+), 44 deletions(-) create mode 100644 llms/bedrock/refusal_test.go create mode 100644 llms/openai/refusal_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index c31b70754..0771fd6ba 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -30,36 +30,8 @@ var ( ErrUnsupportedContentType = errors.New("unsupported content type") ) -// ErrModelRefusal is returned when the model declines to respond (Anthropic -// stop_reason "refusal"), e.g. a creative model such as Claude Fable 5 hitting a -// content boundary. It is distinct from an empty or failed response; any refusal -// text the model returned is in Message. Category and Explanation carry the API's -// stop_details so callers can pick a fallback by classifier. InputTokens counts -// only the uncached input: the whole billed prompt is the sum of the three input -// counts. -type ErrModelRefusal struct { - Message string - Category string - Explanation string - InputTokens int - OutputTokens int - CacheCreationInputTokens int - CacheReadInputTokens int -} - -func (e *ErrModelRefusal) Error() string { - msg := "anthropic: model refused to respond" - if e.Category != "" { - msg += " (" + e.Category + ")" - } - if e.Explanation != "" { - msg += " (" + e.Explanation + ")" - } - if e.Message != "" { - msg += ": " + e.Message - } - return msg -} +// ErrModelRefusal is the shared refusal error, aliased for callers of this door. +type ErrModelRefusal = llms.ErrModelRefusal const ( RoleUser = "user" @@ -362,6 +334,22 @@ func anthropicTextContent(contents []anthropicclient.Content) string { return b.String() } +func anthropicRefusal(result *anthropicclient.MessageResponsePayload) *ErrModelRefusal { + refusal := &ErrModelRefusal{ + Provider: "anthropic", + Message: anthropicTextContent(result.Content), + InputTokens: result.Usage.InputTokens, + OutputTokens: result.Usage.OutputTokens, + CacheCreationInputTokens: result.Usage.CacheCreationInputTokens, + CacheReadInputTokens: result.Usage.CacheReadInputTokens, + } + if result.StopDetails != nil { + refusal.Category = result.StopDetails.Category + refusal.Explanation = result.StopDetails.Explanation + } + return refusal +} + // processAnthropicResponse converts Anthropic API response to standard ContentResponse func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (*llms.ContentResponse, error) { if result == nil { @@ -371,18 +359,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // typed error carrying any text the model returned, so callers can tell "the // model declined" from "no response" (an empty refusal would otherwise look empty). if result.StopReason == "refusal" { - refusal := &ErrModelRefusal{ - Message: anthropicTextContent(result.Content), - InputTokens: result.Usage.InputTokens, - OutputTokens: result.Usage.OutputTokens, - CacheCreationInputTokens: result.Usage.CacheCreationInputTokens, - CacheReadInputTokens: result.Usage.CacheReadInputTokens, - } - if result.StopDetails != nil { - refusal.Category = result.StopDetails.Category - refusal.Explanation = result.StopDetails.Explanation - } - return nil, refusal + return nil, anthropicRefusal(result) } if len(result.Content) == 0 && result.StopReason == "" { return nil, ErrEmptyResponse diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 705466f2a..07e165105 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -158,8 +158,14 @@ type anthropicTextGenerationOutput struct { // One of: ["end_turn", "max_tokens", "stop_sequence", "tool_use"] StopReason string `json:"stop_reason"` // Which custom stop sequence was matched, if any. - StopSequence string `json:"stop_sequence"` - Usage anthropicUsage `json:"usage"` + StopSequence string `json:"stop_sequence"` + StopDetails *anthropicStopDetails `json:"stop_details,omitempty"` + Usage anthropicUsage `json:"usage"` +} + +type anthropicStopDetails struct { + Category string `json:"category,omitempty"` + Explanation string `json:"explanation,omitempty"` } type anthropicUsage struct { @@ -360,6 +366,21 @@ func createAnthropicCompletion(ctx context.Context, contentResp := &llms.ContentResponse{ Choices: Contentchoices, } + if output.StopReason == "refusal" { + refusal := &llms.ErrModelRefusal{ + Provider: "bedrock", + Message: textContent, + InputTokens: int(output.Usage.InputTokens), + OutputTokens: int(output.Usage.OutputTokens), + CacheCreationInputTokens: int(output.Usage.CacheCreationInputTokens), + CacheReadInputTokens: int(output.Usage.CacheReadInputTokens), + } + if output.StopDetails != nil { + refusal.Category = output.StopDetails.Category + refusal.Explanation = output.StopDetails.Explanation + } + return contentResp, refusal + } if err := validateStructuredResponse(options.StructuredOutput, modelID, contentResp); err != nil { return contentResp, err } diff --git a/llms/bedrock/refusal_test.go b/llms/bedrock/refusal_test.go new file mode 100644 index 000000000..31a4c4b2a --- /dev/null +++ b/llms/bedrock/refusal_test.go @@ -0,0 +1,38 @@ +package bedrock_test + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestLegacyRefusalReachesTheCallerAsATypedError(t *testing.T) { + t.Parallel() + + const resp = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"I can't help with that."}],` + + `"stop_reason":"refusal",` + + `"stop_details":{"category":"cyber","explanation":"content boundary"},` + + `"usage":{"input_tokens":11,"output_tokens":7,"cache_creation_input_tokens":3,"cache_read_input_tokens":5}}` + + llm, _ := legacyLLMCapturing(t, resp, bedrock.WithModel(claudeBudgetModel)) + got, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, "I can't help with that.", refusal.Message) + assert.Equal(t, "cyber", refusal.Category, "stop_details must survive the door") + assert.Equal(t, "content boundary", refusal.Explanation) + assert.Equal(t, 11, refusal.InputTokens) + assert.Equal(t, 7, refusal.OutputTokens) + assert.Equal(t, 3, refusal.CacheCreationInputTokens) + assert.Equal(t, 5, refusal.CacheReadInputTokens) + + require.NotNil(t, got, "the response travels with the error so usage survives") +} diff --git a/llms/errors.go b/llms/errors.go index 4f19f6349..6ed8eaa8b 100644 --- a/llms/errors.go +++ b/llms/errors.go @@ -230,3 +230,38 @@ var ( // ErrTruncated is returned when an answer stopped at the output token limit. ErrTruncated = &Error{Code: ErrCodeTruncated} ) + +// ErrModelRefusal is returned when the model declines to respond rather than +// failing: Anthropic reports it as stop_reason "refusal", OpenAI as a refusal +// message under Structured Outputs. It is distinct from an empty or failed +// response; any refusal text the model returned is in Message. Category and +// Explanation carry the vendor's classification where it sends one. InputTokens +// counts only the uncached input: the whole billed prompt is the sum of the +// three input counts. +type ErrModelRefusal struct { + Provider string + Message string + Category string + Explanation string + InputTokens int + OutputTokens int + CacheCreationInputTokens int + CacheReadInputTokens int +} + +func (e *ErrModelRefusal) Error() string { + msg := "model refused to respond" + if e.Provider != "" { + msg = e.Provider + ": " + msg + } + if e.Category != "" { + msg += " (" + e.Category + ")" + } + if e.Explanation != "" { + msg += " (" + e.Explanation + ")" + } + if e.Message != "" { + msg += ": " + e.Message + } + return msg +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index c76df0725..145c23a2a 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -125,6 +125,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten response := o.processResponse(result) + if refusal := refusalFrom(result); refusal != nil { + return response, refusal + } + if err := llms.CheckTruncation(response, opts); err != nil { return response, err } @@ -438,6 +442,21 @@ func (o *LLM) addToolsToRequest(req *openaiclient.ChatRequest, opts llms.CallOpt return nil } +func refusalFrom(result *openaiclient.ChatCompletionResponse) *llms.ErrModelRefusal { + for _, c := range result.Choices { + if c.Message.Refusal == "" { + continue + } + return &llms.ErrModelRefusal{ + Provider: "openai", + Message: c.Message.Refusal, + InputTokens: result.Usage.PromptTokens, + OutputTokens: result.Usage.CompletionTokens, + } + } + return nil +} + // processResponse processes the OpenAI API response into a ContentResponse. func (o *LLM) processResponse(result *openaiclient.ChatCompletionResponse) *llms.ContentResponse { choices := make([]*llms.ContentChoice, len(result.Choices)) diff --git a/llms/openai/refusal_test.go b/llms/openai/refusal_test.go new file mode 100644 index 000000000..fceedd07e --- /dev/null +++ b/llms/openai/refusal_test.go @@ -0,0 +1,41 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestARefusalReachesTheCallerAsATypedError(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o", + "choices":[{"index":0,"message":{"role":"assistant","content":"", + "refusal":"I can't help with that."},"finish_reason":"stop"}], + "usage":{"prompt_tokens":11,"completion_tokens":7,"total_tokens":18}}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, "I can't help with that.", refusal.Message) + assert.Equal(t, 11, refusal.InputTokens) + assert.Equal(t, 7, refusal.OutputTokens) + + require.NotNil(t, resp, "the response travels with the error so usage survives") + assert.Equal(t, "I can't help with that.", resp.Choices[0].GenerationInfo["Refusal"]) +} From 6bedf73526372822c19c739a3e1a3e14f7ddf43b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:05:05 +0300 Subject: [PATCH 183/618] fix(openai): stop dereferencing a reasoning config the caller never set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A client built with WithUsingReasoningMaxTokens() panicked on the first call that passed no reasoning option: CallOptions.Reasoning is a pointer that stays nil until WithReasoning fills it, and the pre-flight budget check read the Tokens field straight off it. Short-circuiting hid this from the package's own tests, every one of which sets the option pair together. Both readers now go through HasExplicitTokens, which answers nil the way the sibling accessors do. The second reader was safe only because a switch above it returns early for an unset config — a guarantee that lives too far away to rely on. Co-Authored-By: Claude Opus 5 --- llms/openai/nil_reasoning_test.go | 24 ++++++++++++++++++++++++ llms/openai/openaillm.go | 4 ++-- llms/options.go | 7 +++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 llms/openai/nil_reasoning_test.go diff --git a/llms/openai/nil_reasoning_test.go b/llms/openai/nil_reasoning_test.go new file mode 100644 index 000000000..d217e9b3b --- /dev/null +++ b/llms/openai/nil_reasoning_test.go @@ -0,0 +1,24 @@ +package openai + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestABudgetClientSurvivesACallWithoutReasoning(t *testing.T) { + t.Parallel() + + llm, err := New(WithToken("t"), WithModel("gpt-4o-mini"), + WithBaseURL("http://127.0.0.1:1"), WithUsingReasoningMaxTokens()) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + require.Error(t, err, "the unreachable endpoint must surface as an error, not a panic") + require.NotContains(t, err.Error(), "nil pointer") +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 145c23a2a..76881b0d9 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -100,7 +100,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } - sendsBudget := o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 + sendsBudget := o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens() if err := llms.CheckClaudeTurnLimitsOnWire(o.effectiveModel(opts), opts, messages, sendsBudget); err != nil { return nil, err } @@ -338,7 +338,7 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) } // using modern reasoning format - if o.client.UseReasoningMaxTokens && opts.Reasoning.Tokens != 0 && reasoningTokens > 0 { + if o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { req.Reasoning = &openaiclient.ReasoningOptions{ MaxTokens: reasoning.ClaudeClampBudget(o.effectiveModel(opts), reasoningTokens), } diff --git a/llms/options.go b/llms/options.go index 6a8ccdaed..324d56e16 100644 --- a/llms/options.go +++ b/llms/options.go @@ -124,6 +124,13 @@ func (r *ReasoningConfig) IsDisabled() bool { // - (0, maxTokens/4) -> ReasoningLow // - [maxTokens/4, maxTokens/3) -> ReasoningMedium // - [maxTokens/3, inf) -> ReasoningHigh +// +// HasExplicitTokens reports whether the caller set a token budget of its own, +// rather than leaving the budget to be derived from an effort. +func (r *ReasoningConfig) HasExplicitTokens() bool { + return r != nil && r.Tokens != 0 +} + func (r *ReasoningConfig) GetEffort(maxTokens int) ReasoningEffort { if r == nil { return ReasoningNone From d121bfc63a0ad485e1e1876e11de28e66bdff7d6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:08:14 +0300 Subject: [PATCH 184/618] fix(anthropic): let the legacy completions stream fail instead of panicking Three defects met in one function and produced one symptom. The scanner had no Buffer call, so a data line over 64KiB stopped the scan; scanner.Err() was only logged, so nothing reached the caller; and the tail then read Model off a lastResponse that had stayed nil, which panicked. Any streamed 200 carrying no data line took the same route. The scanner now uses the ceiling its two sibling parsers already share, a read failure travels to the caller by name, and an event-less stream returns ErrEmptyResponse. Co-Authored-By: Claude Opus 5 --- .../internal/anthropicclient/completions.go | 7 ++- .../completions_stream_test.go | 49 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 llms/anthropic/internal/anthropicclient/completions_stream_test.go diff --git a/llms/anthropic/internal/anthropicclient/completions.go b/llms/anthropic/internal/anthropicclient/completions.go index 335ad0657..816bf8331 100644 --- a/llms/anthropic/internal/anthropicclient/completions.go +++ b/llms/anthropic/internal/anthropicclient/completions.go @@ -6,7 +6,6 @@ import ( "context" "encoding/json" "fmt" - "log" "net/http" "strings" @@ -97,6 +96,7 @@ type CompletionEvent struct { func parseStreamingCompletionResponse(ctx context.Context, r *http.Response, payload *completionPayload) (*CompletionResponsePayload, error) { // nolint:lll scanner := bufio.NewScanner(r.Body) + scanner.Buffer(make([]byte, 0, initialStreamBuffer), maxStreamLine) responseChan := make(chan CompletionEvent) go func() { defer close(responseChan) @@ -118,7 +118,7 @@ func parseStreamingCompletionResponse(ctx context.Context, r *http.Response, pay responseChan <- CompletionEvent{Response: streamPayload, Err: nil} } if err := scanner.Err(); err != nil { - log.Println("issue scanning response:", err) + responseChan <- CompletionEvent{Response: nil, Err: fmt.Errorf("failed to read stream: %w", err)} } }() // Parse response @@ -137,6 +137,9 @@ func parseStreamingCompletionResponse(ctx context.Context, r *http.Response, pay } lastResponse = streamResponse.Response } + if lastResponse == nil { + return nil, ErrEmptyResponse + } response.Model = lastResponse.Model response.LogID = lastResponse.LogID response.Stop = lastResponse.Stop diff --git a/llms/anthropic/internal/anthropicclient/completions_stream_test.go b/llms/anthropic/internal/anthropicclient/completions_stream_test.go new file mode 100644 index 000000000..1ef3f5650 --- /dev/null +++ b/llms/anthropic/internal/anthropicclient/completions_stream_test.go @@ -0,0 +1,49 @@ +package anthropicclient + +import ( + "context" + "io" + "net/http" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func legacyStream(t *testing.T, body string) (*CompletionResponsePayload, error) { + t.Helper() + resp := &http.Response{Body: io.NopCloser(strings.NewReader(body))} + return parseStreamingCompletionResponse(context.Background(), resp, &completionPayload{}) +} + +func TestALegacyLineLongerThanTheDefaultBufferSurvives(t *testing.T) { + t.Parallel() + + answer := strings.Repeat("x", 200*1024) + got, err := legacyStream(t, `data: {"completion":"`+answer+`","model":"claude-2"}`+"\n") + + require.NoError(t, err) + require.NotNil(t, got) + assert.Equal(t, answer, got.Completion, "a line over the 64KiB default must not be truncated") +} + +func TestALegacyStreamWithNoEventsIsAnError(t *testing.T) { + t.Parallel() + + got, err := legacyStream(t, ": keep-alive\n\n") + + require.ErrorIs(t, err, ErrEmptyResponse) + assert.Nil(t, got) +} + +func TestALegacyLineOverTheCeilingReportsTheFailure(t *testing.T) { + t.Parallel() + + got, err := legacyStream(t, `data: {"completion":"`+strings.Repeat("x", maxStreamLine+1)+`"}`+"\n") + + require.ErrorContains(t, err, "failed to read stream", + "the read failure must reach the caller by name, not as an empty-response error") + require.NotErrorIs(t, err, ErrEmptyResponse) + assert.Nil(t, got) +} From 221a7b9834baf9513f8bd0f0985a41a01f60a06d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:13:12 +0300 Subject: [PATCH 185/618] fix(openai): keep the token budget when the door refuses the effort field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AcceptsEffortWire answers one question — does this door take reasoning_effort — but the guard built on it returned before the budget branch, so a caller asking for an explicit reasoning.max_tokens on kimi-k2, qwen or qwq got a request with no reasoning field at all, silently and without an error. The base revision sent the budget; the guard removed it. The gate now covers only the effort field. The reported wire effort stays empty when nothing was sent, so the sampling policy keeps seeing what actually left. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 23 +++++++++++++++-------- llms/openai/reasoning_wire_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 76881b0d9..7075324c7 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -314,6 +314,13 @@ func (o *LLM) effectiveModel(opts llms.CallOptions) string { return openaiclient.DefaultChatModel } +func wireEffortOf(sent bool, effort llms.ReasoningEffort) string { + if !sent { + return "" + } + return string(effort) +} + // setReasoning writes the reasoning fields and reports the effort that reached the wire. func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningOn is handled by the code after the switch @@ -324,30 +331,30 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) } model := o.effectiveModel(opts) - if !reasoning.AcceptsEffortWire(model) { - return "", nil - } + acceptsEffort := reasoning.AcceptsEffortWire(model) effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) + sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone + if !o.client.ModernReasoningFormat { - if reasoningEffort != llms.ReasoningNone { + if sendsEffort { req.ReasoningEffort = &reasoningEffort } - return string(reasoningEffort), nil + return wireEffortOf(sendsEffort, reasoningEffort), nil } // using modern reasoning format if o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { req.Reasoning = &openaiclient.ReasoningOptions{ - MaxTokens: reasoning.ClaudeClampBudget(o.effectiveModel(opts), reasoningTokens), + MaxTokens: reasoning.ClaudeClampBudget(model, reasoningTokens), } - } else if reasoningEffort != llms.ReasoningNone { + } else if sendsEffort { req.Reasoning = &openaiclient.ReasoningOptions{ Effort: reasoningEffort, } } - return string(reasoningEffort), nil + return wireEffortOf(sendsEffort, reasoningEffort), nil } // setReasoningOff sends the model's explicit disable token so a reasoning model diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index df2e3a274..c7db08b6e 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -102,3 +102,32 @@ func TestTheBudgetOnTheWireRespectsTheVendorFloor(t *testing.T) { t.Fatalf("the floor is Anthropic's alone, got body: %s", untouched) } } + +func TestABudgetTravelsToADoorThatRejectsTheEffortField(t *testing.T) { + t.Parallel() + + for _, model := range []string{"kimi-k2.5", "qwen3-235b-a22b-thinking-2507", "qwq-32b"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body := sendModernReasoningForModel(t, model, llms.ReasoningNone, 4000) + + if !strings.Contains(body, `"reasoning":{"max_tokens":4000}`) { + t.Fatalf("an explicit budget must reach a door that only rejects the effort field; body: %s", body) + } + if strings.Contains(body, `"effort"`) { + t.Fatalf("the effort field itself must stay off a door that rejects it; body: %s", body) + } + }) + } +} + +func TestTheEffortFieldStaysOffADoorThatRejectsIt(t *testing.T) { + t.Parallel() + + body := sendModernReasoningForModel(t, "kimi-k2.5", llms.ReasoningHigh, 0) + + if strings.Contains(body, `"effort"`) { + t.Fatalf("an effort-only request must not put the field on a door that rejects it; body: %s", body) + } +} From 385375043a5e008dc37db633e8d49e06e98919b9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:24:08 +0300 Subject: [PATCH 186/618] fix(bedrock): let the Converse door recognize every thinking model The Converse door decided reasoning support from a hardcoded list matched with strings.Contains. Models the shared classifier calls reasoners -- deepseek-r1, deepseek-v3.2, glm-4.7, glm-5, kimi-k2.5, minimax-m2 and nova-2-lite -- missed every entry, so ResolveMechanism fell through to MechanismNone and no thinking was ever requested for them. The divergence was one-directional: no model the list accepted is rejected by the classifier, so asking the classifier cannot start sending thinking to a door that refuses it. Both Bedrock doors now ask reasoning.IsReasoningModel. On the legacy door this is deduplication rather than a fix: its models are all Claude, and ResolveMechanism answers them from ClaudeSupportsThinking before the predicate is read -- measured across 13 model ids by two adaptive modes, 26 rows, zero behaviour changes. The list still merited removal: it did not know the Claude 5 generation and would have lied the moment it became load-bearing. Tests cover the wire rather than the predicate: three non-Claude thinkers now get thinking on a captured Converse request, and the legacy door's Claude 5 adaptive path -- previously untested -- is pinned. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 23 +------- .../bedrockclient_converse_test.go | 56 ++++++++++++++++++- .../bedrockclient/provider_anthropic.go | 14 +---- .../provider_anthropic_reasoning_test.go | 28 ++++++++++ 4 files changed, 85 insertions(+), 36 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index cab3741f9..c255db270 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -954,29 +954,8 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver // Helper methods for model detection -// supportsReasoning checks if the model supports reasoning func (c *ConverseClient) supportsReasoning(modelID string) bool { - // Claude 4+ and select non-Claude models support reasoning. - reasoningModels := []string{ - "anthropic.claude-fable-5", - "anthropic.claude-sonnet-5", - "anthropic.claude-opus-5", - "anthropic.claude-opus-4-", - "anthropic.claude-sonnet-4-", - "anthropic.claude-haiku-4-", - "openai.gpt-oss-120b", - "openai.gpt-oss-20b", - "moonshot.kimi-k2-thinking", - "minimax.minimax-m2.5", - "minimax.minimax-m2.1", - } - - for _, model := range reasoningModels { - if strings.Contains(modelID, model) { - return true - } - } - return false + return reasoning.IsReasoningModel(modelID) } // isAnthropicModelID reports whether the Bedrock model ID belongs to the Claude diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 4ff502f69..2aacc913f 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -227,9 +227,16 @@ func TestConverseClient_ModelDetection(t *testing.T) { assert.True(t, client.supportsReasoning("us.anthropic.claude-sonnet-4-5-20250929-v1:0")) assert.True(t, client.supportsReasoning("minimax.minimax-m2.5")) assert.True(t, client.supportsReasoning("minimax.minimax-m2.1")) - assert.False(t, client.supportsReasoning("minimax.minimax-m2")) + assert.True(t, client.supportsReasoning("minimax.minimax-m2")) + assert.True(t, client.supportsReasoning("us.deepseek.r1-v1:0")) + assert.True(t, client.supportsReasoning("deepseek.v3.2")) + assert.True(t, client.supportsReasoning("zai.glm-4.7")) + assert.True(t, client.supportsReasoning("moonshotai.kimi-k2.5")) + assert.True(t, client.supportsReasoning("us.amazon.nova-2-lite-v1:0")) assert.False(t, client.supportsReasoning("us.amazon.nova-pro-v1:0")) assert.False(t, client.supportsReasoning("anthropic.claude-3-sonnet-20240229-v1:0")) + assert.False(t, client.supportsReasoning("meta.llama3-70b-instruct-v1:0")) + assert.False(t, client.supportsReasoning("cohere.command-r-plus-v1:0")) } func TestConverseClient_InferenceConfiguration(t *testing.T) { @@ -1166,3 +1173,50 @@ func TestConverseBudgetPinsTemperatureOnlyForClaude(t *testing.T) { assert.InDelta(t, 0.2, *cfg.Temperature, 0.0001) }) } + +func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { + for _, modelID := range []string{ + "us.deepseek.r1-v1:0", + "zai.glm-4.7", + "us.amazon.nova-2-lite-v1:0", + } { + t.Run(modelID, func(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + input := &ConverseInput{ + ModelID: modelID, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(8000), + ReasoningConfig: &llms.ReasoningConfig{Effort: llms.ReasoningMedium}, + } + + _, err := client.CreateCompletionConverse(t.Context(), input) + require.NoError(t, err) + + require.NotNil(t, capturedInput.AdditionalModelRequestFields, + "a thinking model gets a thinking request") + raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(raw, &fields)) + thinking, _ := fields["thinking"].(map[string]any) + require.NotNil(t, thinking) + assert.Equal(t, "enabled", thinking["type"]) + assert.EqualValues(t, 2666, thinking["budget_tokens"]) + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 07e165105..a28a18afe 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -840,18 +840,6 @@ func applyAnthropicReasoning( return nil } -// supportsAnthropicReasoning checks if the model supports reasoning func supportsAnthropicReasoning(modelID string) bool { - reasoningModels := []string{ - "anthropic.claude-opus-4-", - "anthropic.claude-sonnet-4-", - "anthropic.claude-haiku-4-", - } - - for _, model := range reasoningModels { - if strings.Contains(modelID, model) { - return true - } - } - return false + return reasoning.IsReasoningModel(modelID) } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index 1ee93a709..0d7c498fb 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -321,3 +321,31 @@ func TestApplyAnthropicReasoning_UnsetMaxTokensUsesTheSharedDefault(t *testing.T assert.InDelta(t, float64(want), thinking["budget_tokens"], 0.5, "an unset max-tokens must fall back to the same number every other caller gets") } + +func TestApplyAnthropicReasoning_ReachesTheClaude5Generation(t *testing.T) { + t.Parallel() + + for _, modelID := range []string{ + "us.anthropic.claude-sonnet-5-v1:0", + "us.anthropic.claude-opus-5-v1:0", + "us.anthropic.claude-fable-5-v1:0", + } { + t.Run(modelID, func(t *testing.T) { + t.Parallel() + + input := anthropicTextGenerationInput{MaxTokens: 8000} + applyAnthropicReasoning(&input, + &llms.ReasoningConfig{Effort: llms.ReasoningMedium}, + modelID, 8000) + + fields := marshalAnthropicInput(t, input) + thinking, _ := fields["thinking"].(map[string]any) + require.NotNil(t, thinking, "legacy door asks this model to think") + assert.Equal(t, "adaptive", thinking["type"]) + assert.Equal(t, "summarized", thinking["display"]) + + outputConfig, _ := fields["output_config"].(map[string]any) + assert.Equal(t, "medium", outputConfig["effort"]) + }) + } +} From bb803167625ea3e963de444f5e030b05b1dd088b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:28:30 +0300 Subject: [PATCH 187/618] fix(structuredoutput): stop nullable from rewriting schemas it does not own admitNullable walked every map in the document and, on any node carrying nullable:true, assigned type unconditionally. Two defects followed. A node with nullable:true and no type got "type": null written into it -- withNull(nil) returns nil -- and the 2020-12 metaschema then rejects the whole document, so a schema that compiled before this package existed now fails to compile at all. Instance data was walked as if it were schema. An enum or const literal that happens to be an object with a nullable field had its own type widened, so the literal in the schema no longer equalled the literal the model returns and a correct response failed validation. The walk now follows schema keywords -- the same two lists requireClosed uses, now shared -- and widens a type only where one is declared. Co-Authored-By: Claude Opus 5 --- llms/structuredoutput/schema.go | 17 +++++--- llms/structuredoutput/validator.go | 39 +++++++++++++---- llms/structuredoutput/validator_test.go | 57 +++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 15 deletions(-) diff --git a/llms/structuredoutput/schema.go b/llms/structuredoutput/schema.go index 2052c9500..ffaf6a941 100644 --- a/llms/structuredoutput/schema.go +++ b/llms/structuredoutput/schema.go @@ -21,6 +21,15 @@ func RequireClosedObjects(schema json.RawMessage) error { return requireClosed(node) } +var ( + schemaGroupKeywords = []string{"properties", "patternProperties", "$defs", "definitions", "dependentSchemas"} + schemaValueKeywords = []string{ + "items", "prefixItems", "additionalProperties", "anyOf", "oneOf", "allOf", + "not", "if", "then", "else", "contains", "propertyNames", + "unevaluatedItems", "unevaluatedProperties", + } +) + func requireClosed(node any) error { m, ok := node.(map[string]any) if !ok { @@ -35,7 +44,7 @@ func requireClosed(node any) error { llms.ErrStructuredOutputConfig) } } - for _, key := range []string{"properties", "patternProperties", "$defs", "definitions", "dependentSchemas"} { + for _, key := range schemaGroupKeywords { if group, ok := m[key].(map[string]any); ok { for _, v := range group { if err := requireClosedValue(v); err != nil { @@ -44,11 +53,7 @@ func requireClosed(node any) error { } } } - for _, key := range []string{ - "items", "prefixItems", "additionalProperties", "anyOf", "oneOf", "allOf", - "not", "if", "then", "else", "contains", "propertyNames", - "unevaluatedItems", "unevaluatedProperties", - } { + for _, key := range schemaValueKeywords { if err := requireClosedValue(m[key]); err != nil { return err } diff --git a/llms/structuredoutput/validator.go b/llms/structuredoutput/validator.go index 7d48d0523..0e3461781 100644 --- a/llms/structuredoutput/validator.go +++ b/llms/structuredoutput/validator.go @@ -39,22 +39,43 @@ func Compile(schema json.RawMessage) (*Compiled, error) { } func admitNullable(node any) any { - switch typed := node.(type) { - case map[string]any: - for key, value := range typed { - typed[key] = admitNullable(value) + schema, ok := node.(map[string]any) + if !ok { + return node + } + for _, key := range schemaGroupKeywords { + group, ok := schema[key].(map[string]any) + if !ok { + continue } - if nullable, ok := typed["nullable"].(bool); ok && nullable { - typed["type"] = withNull(typed["type"]) + for name, member := range group { + group[name] = admitNullable(member) } - return typed + } + for _, key := range schemaValueKeywords { + if value, ok := schema[key]; ok { + schema[key] = admitNullableValue(value) + } + } + if nullable, ok := schema["nullable"].(bool); ok && nullable { + if declared, ok := schema["type"]; ok { + schema["type"] = withNull(declared) + } + } + return schema +} + +func admitNullableValue(value any) any { + switch typed := value.(type) { + case map[string]any: + return admitNullable(typed) case []any: for i, item := range typed { - typed[i] = admitNullable(item) + typed[i] = admitNullableValue(item) } return typed } - return node + return value } func withNull(declared any) any { diff --git a/llms/structuredoutput/validator_test.go b/llms/structuredoutput/validator_test.go index 73db01884..be2be34f9 100644 --- a/llms/structuredoutput/validator_test.go +++ b/llms/structuredoutput/validator_test.go @@ -169,3 +169,60 @@ func TestTheValidatorAdmitsTheNullableSpellingTheDoorsSendOnTheWire(t *testing.T t.Fatal("nullable widens the type by null alone, not by every type") } } + +func TestNullableWithoutADeclaredTypeStillCompiles(t *testing.T) { + t.Parallel() + + schema := json.RawMessage(`{"type":"object","additionalProperties":false,` + + `"properties":{"a":{"nullable":true}},"required":["a"]}`) + + compiled, err := structuredoutput.Compile(schema) + if err != nil { + t.Fatalf("Compile() error: %v", err) + } + for _, text := range []string{`{"a":null}`, `{"a":"x"}`, `{"a":7}`} { + if err := compiled.ValidateText(text); err != nil { + t.Fatalf("an undeclared type constrains nothing, %s must validate: %v", text, err) + } + } +} + +func TestNullableLeavesInstanceLiteralsAlone(t *testing.T) { + t.Parallel() + + schema := json.RawMessage(`{"type":"object","additionalProperties":false,` + + `"properties":{"a":{"enum":[{"nullable":true,"type":"widget"},"plain"]},` + + `"b":{"const":{"nullable":true,"type":"widget"}}},` + + `"required":["a","b"]}`) + + compiled, err := structuredoutput.Compile(schema) + if err != nil { + t.Fatalf("Compile() error: %v", err) + } + literal := `{"nullable":true,"type":"widget"}` + if err := compiled.ValidateText(`{"a":` + literal + `,"b":` + literal + `}`); err != nil { + t.Fatalf("an enum or const literal is data, not a schema to widen: %v", err) + } +} + +func TestNullableReachesNestedSubschemas(t *testing.T) { + t.Parallel() + + schema := json.RawMessage(`{"type":"object","additionalProperties":false,` + + `"properties":{"list":{"type":"array","items":{"type":"string","nullable":true}},` + + `"pick":{"anyOf":[{"type":"integer","nullable":true}]},` + + `"ref":{"$ref":"#/$defs/leaf"}},` + + `"$defs":{"leaf":{"type":"string","nullable":true}},` + + `"required":["list","pick","ref"]}`) + + compiled, err := structuredoutput.Compile(schema) + if err != nil { + t.Fatalf("Compile() error: %v", err) + } + if err := compiled.ValidateText(`{"list":[null],"pick":null,"ref":null}`); err != nil { + t.Fatalf("nullable must be admitted inside items, anyOf and $defs: %v", err) + } + if err := compiled.ValidateText(`{"list":[1],"pick":null,"ref":null}`); err == nil { + t.Fatal("nullable widens by null alone, the item type still holds") + } +} From 352e20077445fb9d7f3c7ed4e2e06e2402daee52 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:30:30 +0300 Subject: [PATCH 188/618] test(llms): pin the preflight against the compiler it claims to mirror compileStructuredOutputSchema documents itself as mirroring the compiler the response path uses, but the two are separate implementations -- structuredoutput imports llms, so llms cannot call back into it -- and nothing checked the claim. Measured on the previous commit, they disagreed on one schema: the preflight accepted a nullable node without a type that the response path then failed to compile. Co-Authored-By: Claude Opus 5 --- llms/structured_output_parity_test.go | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 llms/structured_output_parity_test.go diff --git a/llms/structured_output_parity_test.go b/llms/structured_output_parity_test.go new file mode 100644 index 000000000..9efa9765e --- /dev/null +++ b/llms/structured_output_parity_test.go @@ -0,0 +1,41 @@ +package llms_test + +import ( + "encoding/json" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/structuredoutput" +) + +func TestThePreflightAcceptsExactlyWhatTheResponsePathCompiles(t *testing.T) { + t.Parallel() + + for _, schema := range []string{ + `{"type":"object","additionalProperties":false,"properties":{"a":{"type":"string","nullable":true}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"nullable":true}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"type":["string"],"nullable":true}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"type":"null","nullable":true}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"type":{"bad":1},"nullable":true}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"enum":[{"nullable":true,"type":"w"}]}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"type":"string","pattern":"(?=x)"}}}`, + `{"type":"object","additionalProperties":false,"$defs":{"leaf":{"type":"string","nullable":true}},` + + `"properties":{"a":{"$ref":"#/$defs/leaf"}}}`, + `{"type":"object","additionalProperties":false,"properties":{"a":{"type":"integer","nullable":true,"minimum":"nope"}}}`, + } { + t.Run(schema, func(t *testing.T) { + t.Parallel() + + opts := &llms.CallOptions{ + JSONMode: true, + StructuredOutput: &llms.StructuredOutputConfig{Schema: json.RawMessage(schema)}, + } + preflight := opts.ValidateStructuredOutput() + _, response := structuredoutput.Compile(json.RawMessage(schema)) + + if (preflight == nil) != (response == nil) { + t.Fatalf("preflight and response path disagree: preflight=%v response=%v", preflight, response) + } + }) + } +} From a3bd7487d702b7b2d022b4f51c3dbb1a08d861c2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:36:03 +0300 Subject: [PATCH 189/618] fix(googleai): refuse an effort that maps to no thinking at all resolveThinkingConfig fell through to (nil, nil) whenever ReasoningOn produced neither a thinking_level nor a positive budget, so the request went out with no thinking and no error. Measured: ReasoningMinimal and any unrecognised effort do exactly that on both generations -- 2.5 has no thinking_level, and minimal maps to no level on 3.x, while GetTokens returns -1 for both. The same input already returns ErrEffortHasNoBudget on anthropic and on both Bedrock doors. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 1 + llms/googleai/googleai_core_unit_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index f1d4ed13e..b1a716c21 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1092,6 +1092,7 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in if budget := int32(cfg.GetTokens(maxTokens)); budget > 0 { return &genai.ThinkingConfig{ThinkingBudget: &budget, IncludeThoughts: true}, nil } + return nil, &reasoning.ErrEffortHasNoBudget{Model: model, Effort: string(cfg.GetEffort(maxTokens))} case llms.ReasoningOff: switch reasoning.ResolveOff(model, reasoning.ProviderGoogleAI) { case reasoning.OffZeroBudget: diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 11c94ec7c..fede4a0a9 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1078,6 +1078,21 @@ func TestResolveTemperature(t *testing.T) { assert.Equal(t, 0.5, resolveTemperature("gemini-3-flash", sameAsDefault)) } +func TestResolveThinkingConfigRefusesAnEffortThatMapsToNothing(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-2.5-flash", "gemini-3-pro-preview"} { + for _, effort := range []llms.ReasoningEffort{llms.ReasoningMinimal, "banana"} { + tc, err := resolveThinkingConfig(model, + &llms.ReasoningConfig{Effort: effort}, 8000) + var budgetErr *reasoning.ErrEffortHasNoBudget + require.ErrorAs(t, err, &budgetErr, "%s on %s must not pass silently", effort, model) + assert.Equal(t, string(effort), budgetErr.Effort) + assert.Nil(t, tc) + } + } +} + func TestResolveThinkingConfig(t *testing.T) { t.Parallel() From 964a1d69b698fc96d1eaed5c7b342f42956dcb9e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:41:01 +0300 Subject: [PATCH 190/618] fix(reasoning): clamp an effort Claude ranks below its lowest accepted level claudeEffortRank had no entry for "minimal", so ClaudeClampEffort returned it unchanged and it travelled to the adaptive wire on every Claude door. No Claude generation accepts it -- each kind starts at "low" -- while ValidateReasoning and the OpenAI capability table both do, so the effort is legal in this project and illegal for that vendor. The clamp now moves in both directions: down to the highest accepted level at or below the request, and up to the lowest accepted level when every one of them is higher. Ranks shift by one to seat "minimal" beneath "low"; the table has no other reader. Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 25 ++++++++++++++++-------- llms/reasoning/claude_name_forms_test.go | 6 +++++- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 6f057924b..5d00fd616 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -119,11 +119,12 @@ func ClaudeEffortsFor(model string) []string { return slices.Clone(claudeEffortsByKind[kind]) } -var claudeEffortRank = map[string]int{"low": 1, "medium": 2, "high": 3, "xhigh": 4, "max": 5} +var claudeEffortRank = map[string]int{"minimal": 1, "low": 2, "medium": 3, "high": 4, "xhigh": 5, "max": 6} -// ClaudeClampEffort lowers an effort the model's generation does not accept to -// the highest one it does. An unclassified model and an unknown level pass -// through unchanged. +// ClaudeClampEffort moves an effort the model's generation does not accept to +// the nearest one it does: down to the highest accepted level below it, or up +// to the lowest accepted level when every one of them is higher. An +// unclassified model and an unknown level pass through unchanged. func ClaudeClampEffort(model, effort string) string { want, ok := claudeEffortRank[effort] if !ok { @@ -133,13 +134,21 @@ func ClaudeClampEffort(model, effort string) string { if len(accepted) == 0 || slices.Contains(accepted, effort) { return effort } - best, bestRank := effort, 0 + var below, lowest string + var belowRank, lowestRank int for _, level := range accepted { - if rank := claudeEffortRank[level]; rank <= want && rank > bestRank { - best, bestRank = level, rank + rank := claudeEffortRank[level] + if rank <= want && rank > belowRank { + below, belowRank = level, rank } + if lowestRank == 0 || rank < lowestRank { + lowest, lowestRank = level, rank + } + } + if below == "" { + return lowest } - return best + return below } // ClaudeMinThinkingBudget is the smallest budget_tokens Anthropic accepts. diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 1ede9a144..3a149479a 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -203,7 +203,7 @@ func TestClaudePreThinkingStopsBelow37(t *testing.T) { } } -func TestClaudeClampEffortStepsDownNotUp(t *testing.T) { +func TestClaudeClampEffortMovesToTheNearestAcceptedLevel(t *testing.T) { t.Parallel() for _, tc := range []struct{ model, effort, want string }{ @@ -216,6 +216,10 @@ func TestClaudeClampEffortStepsDownNotUp(t *testing.T) { {"claude-haiku-4-5", "max", "high"}, {"claude-opus-4-6", "max", "max"}, {"claude-opus-4-6", "low", "low"}, + {"claude-opus-4-6", "minimal", "low"}, + {"claude-sonnet-5", "minimal", "low"}, + {"claude-opus-4-5", "minimal", "low"}, + {"grok-4", "minimal", "minimal"}, {"grok-4", "xhigh", "xhigh"}, {"claude-opus-4-6", "", ""}, } { From 7d0e7738c367068d9e75bbf389aa493d8b2c0ef4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:42:31 +0300 Subject: [PATCH 191/618] fix(googleai): give minimal the lowest thinking_level instead of refusing it The previous commit refused every effort that produced no thinking config, which made Gemini 3.x the only level-based door to reject minimal: Claude's adaptive wire clamps it to low, and OpenAI accepts it outright. minimal is valid per ValidateReasoning and simply has no budget of its own -- GetTokens returns -1 for it -- so the split belongs to the mechanism, not the door. A level-based generation now clamps it to the lowest level it has, and a budget-based one still refuses, matching what the two Claude mechanisms already do. An unknown effort keeps refusing on both. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 2 +- llms/googleai/googleai_core_unit_test.go | 31 ++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index b1a716c21..0cfb3004b 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1144,7 +1144,7 @@ func checkEmptyStream( // the caller falls back to a budget or the model default. func thinkingLevelForEffort(effort llms.ReasoningEffort) genai.ThinkingLevel { switch effort { - case llms.ReasoningLow: + case llms.ReasoningMinimal, llms.ReasoningLow: return genai.ThinkingLevelLow case llms.ReasoningMedium: return genai.ThinkingLevelMedium diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index fede4a0a9..9a63f5211 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1082,15 +1082,30 @@ func TestResolveThinkingConfigRefusesAnEffortThatMapsToNothing(t *testing.T) { t.Parallel() for _, model := range []string{"gemini-2.5-flash", "gemini-3-pro-preview"} { - for _, effort := range []llms.ReasoningEffort{llms.ReasoningMinimal, "banana"} { - tc, err := resolveThinkingConfig(model, - &llms.ReasoningConfig{Effort: effort}, 8000) - var budgetErr *reasoning.ErrEffortHasNoBudget - require.ErrorAs(t, err, &budgetErr, "%s on %s must not pass silently", effort, model) - assert.Equal(t, string(effort), budgetErr.Effort) - assert.Nil(t, tc) - } + tc, err := resolveThinkingConfig(model, + &llms.ReasoningConfig{Effort: "banana"}, 8000) + var budgetErr *reasoning.ErrEffortHasNoBudget + require.ErrorAs(t, err, &budgetErr, "an unknown effort on %s must not pass silently", model) + assert.Equal(t, "banana", budgetErr.Effort) + assert.Nil(t, tc) } + + tc, err := resolveThinkingConfig("gemini-2.5-flash", + &llms.ReasoningConfig{Effort: llms.ReasoningMinimal}, 8000) + var budgetErr *reasoning.ErrEffortHasNoBudget + require.ErrorAs(t, err, &budgetErr, "minimal has no budget, and 2.5 has only budgets") + assert.Nil(t, tc) +} + +func TestResolveThinkingConfigClampsMinimalToTheLowestLevel(t *testing.T) { + t.Parallel() + + tc, err := resolveThinkingConfig("gemini-3-pro-preview", + &llms.ReasoningConfig{Effort: llms.ReasoningMinimal}, 8000) + require.NoError(t, err) + require.NotNil(t, tc) + assert.Equal(t, genai.ThinkingLevelLow, tc.ThinkingLevel) + assert.True(t, tc.IncludeThoughts) } func TestResolveThinkingConfig(t *testing.T) { From d75eda74e7be21cd85e481fc1f840c1f28d97c99 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 10:44:40 +0300 Subject: [PATCH 192/618] fix(reasoning): recognize deepseek-reasoner, DeepSeek's own model name The matcher knew deepseek-r1 but not deepseek-reasoner, the name DeepSeek serves the same model under -- and the name this repo uses in its example, its multicontent tests and a recorded cassette whose response carries reasoning_content. Unclassified, the model got ResolveOff "omit": a caller that asked for WithReasoningDisabled sent a request with no reasoning field at all and the model kept thinking, with no error to say so. The wire test disables thinking under both names and requires the same request; without the matcher the deepseek-reasoner request carries no reasoning_effort. Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_wire_test.go | 42 ++++++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 1 + 2 files changed, 43 insertions(+) diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index c7db08b6e..48eeebec7 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -131,3 +131,45 @@ func TestTheEffortFieldStaysOffADoorThatRejectsIt(t *testing.T) { t.Fatalf("an effort-only request must not put the field on a door that rejects it; body: %s", body) } } + +func disableReasoningForModel(t *testing.T, model string) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoningDisabled()); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestBothDeepSeekReasonerNamesTurnThinkingOffTheSameWay(t *testing.T) { + byOwnName := disableReasoningForModel(t, "deepseek-reasoner") + byFamilyName := disableReasoningForModel(t, "deepseek-r1") + + for _, want := range []string{`"reasoning_effort":"none"`} { + if !strings.Contains(byFamilyName, want) { + t.Fatalf("deepseek-r1 request lost %s: %s", want, byFamilyName) + } + if !strings.Contains(byOwnName, want) { + t.Fatalf("deepseek-reasoner must disable thinking like deepseek-r1, got: %s", byOwnName) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index ebeef0285..f33ab2aa0 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -220,6 +220,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // DeepSeek reasoning models if strings.Contains(modelLower, "deepseek-r1") || + strings.Contains(modelLower, "deepseek-reasoner") || strings.Contains(modelLower, "deepseek-chat-v3") || strings.Contains(modelLower, "deepseek-v3.1-terminus") || strings.HasPrefix(modelLower, "deepseek-v3.2") || From 80ea979dadd3019436d17f4f57b8a54b5d925729 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 11:17:20 +0300 Subject: [PATCH 193/618] fix(anthropic): return the response alongside a refusal, as the other doors do The primary door was the only one answering a refusal with (nil, error): processAnthropicResponse checked stop_reason before building anything, and its caller then discarded whatever came back. OpenAI and the legacy Bedrock door both return (resp, refusal), and their tests require a non-nil response; this door had no refusal test at all, so usage, stop reason and any text the model returned were lost. The refusal check now runs after the choice is assembled, and the caller passes the builder's response through. Both edits are load-bearing: mutating either one alone turns the new test red. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 16 +++++------- llms/anthropic/refusal_test.go | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 llms/anthropic/refusal_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 0771fd6ba..203a75657 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -309,7 +309,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } response, err := processAnthropicResponse(result) if err != nil { - return nil, err + return response, err } if err := llms.CheckTruncation(response, *opts); err != nil { return response, err @@ -355,12 +355,6 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* if result == nil { return nil, ErrEmptyResponse } - // A refusal is a distinct outcome from an empty/failed response: surface it as a - // typed error carrying any text the model returned, so callers can tell "the - // model declined" from "no response" (an empty refusal would otherwise look empty). - if result.StopReason == "refusal" { - return nil, anthropicRefusal(result) - } if len(result.Content) == 0 && result.StopReason == "" { return nil, ErrEmptyResponse } @@ -440,9 +434,11 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* }, } - return &llms.ContentResponse{ - Choices: []*llms.ContentChoice{choice}, - }, nil + response := &llms.ContentResponse{Choices: []*llms.ContentChoice{choice}} + if result.StopReason == "refusal" { + return response, anthropicRefusal(result) + } + return response, nil } func toolsToTools(tools []llms.Tool) []anthropicclient.Tool { diff --git a/llms/anthropic/refusal_test.go b/llms/anthropic/refusal_test.go new file mode 100644 index 000000000..0ff9ba4a8 --- /dev/null +++ b/llms/anthropic/refusal_test.go @@ -0,0 +1,46 @@ +package anthropic_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" +) + +func TestARefusalTravelsWithTheResponseOnThePrimaryDoor(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_x","type":"message","role":"assistant","model":"claude-opus-4-6", + "content":[{"type":"text","text":"I can't help with that."}],"stop_reason":"refusal", + "stop_details":{"category":"policy","explanation":"declined by policy"}, + "usage":{"input_tokens":11,"output_tokens":7}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, "I can't help with that.", refusal.Message) + assert.Equal(t, 11, refusal.InputTokens) + assert.Equal(t, 7, refusal.OutputTokens) + + require.NotNil(t, resp, "the response travels with the error so usage survives") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "refusal", resp.Choices[0].StopReason) +} From 76d444f6a2025ac8604e563b194a920bd4d2f890 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 11:19:39 +0300 Subject: [PATCH 194/618] fix(bedrock): report a streamed refusal on the legacy door Only the non-streaming half of the legacy door knew about stop_reason "refusal". The streaming half wrote it into the choice and returned (resp, nil), so a caller picking a fallback via errors.As took the refusal for a normal answer every time it streamed -- the text "I can't help with that." arriving as content, no error at all. The assembled stream now carries the same llms.ErrModelRefusal the whole answer does, built from the counters the stream accumulated. Category and Explanation stay empty: the streamed delta carries stop_reason alone, with no stop_details field to read them from. Its caller also had to stop discarding the assembled response on error, the same early return the anthropic door had. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 17 ++++++-- llms/bedrock/refusal_test.go | 41 +++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index a28a18afe..1f68574a5 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -287,7 +287,7 @@ func createAnthropicCompletion(ctx context.Context, } streamResp, err := parseStreamingCompletionResponse(ctx, client, modelInput, options) if err != nil { - return nil, err + return streamResp, err } // Validate the assembled stream too — a structured-output guarantee must // hold on both API paths. @@ -622,9 +622,18 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + response := &llms.ContentResponse{Choices: contentchoices} + if contentchoices[0].StopReason == "refusal" { + return response, &llms.ErrModelRefusal{ + Provider: "bedrock", + Message: streamedContent.String(), + InputTokens: int(usage.InputTokens), + OutputTokens: int(usage.OutputTokens), + CacheCreationInputTokens: int(usage.CacheCreationInputTokens), + CacheReadInputTokens: int(usage.CacheReadInputTokens), + } + } + return response, nil } func appendReasoning(reasoning *reasoning.ContentReasoning, reasoningContent string) *reasoning.ContentReasoning { diff --git a/llms/bedrock/refusal_test.go b/llms/bedrock/refusal_test.go index 31a4c4b2a..e3cb1899a 100644 --- a/llms/bedrock/refusal_test.go +++ b/llms/bedrock/refusal_test.go @@ -2,13 +2,19 @@ package bedrock_test import ( "context" + "io" + "net/http" + "net/http/httptest" "testing" + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" ) func TestLegacyRefusalReachesTheCallerAsATypedError(t *testing.T) { @@ -36,3 +42,38 @@ func TestLegacyRefusalReachesTheCallerAsATypedError(t *testing.T) { require.NotNil(t, got, "the response travels with the error so usage survives") } + +func TestLegacyStreamRefusalIsNotMistakenForAnAnswer(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + + writeLegacyChunk(t, w, enc, `{"type":"message_start","message":{"id":"x","type":"message",`+ + `"role":"assistant","model":"m","content":[],"stop_reason":null,`+ + `"usage":{"input_tokens":11,"output_tokens":1}}}`) + writeLegacyChunk(t, w, enc, `{"type":"content_block_delta","index":0,`+ + `"delta":{"type":"text_delta","text":"I can't help with that."}}`) + writeLegacyChunk(t, w, enc, `{"type":"message_delta","delta":{"stop_reason":"refusal"},`+ + `"usage":{"output_tokens":7}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + got, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal, "a streamed refusal must not look like a normal answer") + assert.Equal(t, "I can't help with that.", refusal.Message) + assert.Equal(t, 11, refusal.InputTokens) + assert.Equal(t, 7, refusal.OutputTokens) + + require.NotNil(t, got, "the response travels with the error so usage survives") + require.Len(t, got.Choices, 1) + assert.Equal(t, "refusal", got.Choices[0].StopReason) +} From 4cfc5da453c65d5c81349534e241e8fc4470cd7f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 11:22:08 +0300 Subject: [PATCH 195/618] fix(openai): make the exported structured-output refusal reachable again refusalFrom runs before validateStructuredResponse and fires on the same condition, so the exported openai.ErrStructuredOutputRefusal could never reach a caller of GenerateContent: errors.As against it was always false, and Model and Choice were lost. Its only test called the validator directly, which is why the gap stayed green. A refusal to a structured-output request now returns that type, wrapping the cross-door llms.ErrModelRefusal so errors.As keeps matching both -- door parity does not depend on which of the two a caller looks for. The branch left inside the validator was dead once the door returned first, so it is gone, and its subtest with it: the door-level test covers the contract without reaching past GenerateContent. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 18 +++++++---- llms/openai/refusal_test.go | 35 ++++++++++++++++++++++ llms/openai/structured_output.go | 8 ++--- llms/openai/structured_output_unit_test.go | 12 -------- 4 files changed, 52 insertions(+), 21 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 7075324c7..31cf0d385 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -125,7 +125,15 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten response := o.processResponse(result) - if refusal := refusalFrom(result); refusal != nil { + if refusal, choice := refusalFrom(result); refusal != nil { + if opts.StructuredOutput != nil { + return response, &ErrStructuredOutputRefusal{ + Model: o.effectiveModel(opts), + Choice: choice, + Refusal: refusal.Message, + cause: refusal, + } + } return response, refusal } @@ -449,8 +457,8 @@ func (o *LLM) addToolsToRequest(req *openaiclient.ChatRequest, opts llms.CallOpt return nil } -func refusalFrom(result *openaiclient.ChatCompletionResponse) *llms.ErrModelRefusal { - for _, c := range result.Choices { +func refusalFrom(result *openaiclient.ChatCompletionResponse) (*llms.ErrModelRefusal, int) { + for i, c := range result.Choices { if c.Message.Refusal == "" { continue } @@ -459,9 +467,9 @@ func refusalFrom(result *openaiclient.ChatCompletionResponse) *llms.ErrModelRefu Message: c.Message.Refusal, InputTokens: result.Usage.PromptTokens, OutputTokens: result.Usage.CompletionTokens, - } + }, i } - return nil + return nil, 0 } // processResponse processes the OpenAI API response into a ContentResponse. diff --git a/llms/openai/refusal_test.go b/llms/openai/refusal_test.go index fceedd07e..13bf02e9d 100644 --- a/llms/openai/refusal_test.go +++ b/llms/openai/refusal_test.go @@ -39,3 +39,38 @@ func TestARefusalReachesTheCallerAsATypedError(t *testing.T) { require.NotNil(t, resp, "the response travels with the error so usage survives") assert.Equal(t, "I can't help with that.", resp.Choices[0].GenerationInfo["Refusal"]) } + +func TestAStructuredOutputRefusalKeepsBothItsTypes(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o", + "choices":[{"index":0,"message":{"role":"assistant","content":"", + "refusal":"I can't help with that."},"finish_reason":"stop"}], + "usage":{"prompt_tokens":11,"completion_tokens":7,"total_tokens":18}}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "answer", + Schema: []byte(`{"type":"object","additionalProperties":false,"properties":{"a":{"type":"string"}},"required":["a"]}`), + })) + + var structured *ErrStructuredOutputRefusal + require.ErrorAs(t, err, &structured, + "a refusal to a structured-output request must reach the caller as the exported type") + assert.Equal(t, "gpt-4o", structured.Model) + assert.Equal(t, 0, structured.Choice) + assert.Equal(t, "I can't help with that.", structured.Refusal) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal, "the cross-door type must still match, or door parity breaks") + assert.Equal(t, 11, refusal.InputTokens) + + require.NotNil(t, resp) +} diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index 2ad0761a9..bc1d75d52 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -20,8 +20,12 @@ type ErrStructuredOutputRefusal struct { Model string Choice int Refusal string + + cause error } +func (e *ErrStructuredOutputRefusal) Unwrap() error { return e.cause } + func (e *ErrStructuredOutputRefusal) Error() string { return fmt.Sprintf("openai structured output: model refused (model=%s choice=%d): %s", e.Model, e.Choice, e.Refusal) } @@ -72,10 +76,6 @@ func (o *LLM) validateStructuredResponse(result *openaiclient.ChatCompletionResp } model := o.effectiveModel(opts) for i, c := range result.Choices { - // A refusal is a distinct typed outcome, never a JSON-validation error. - if c.Message.Refusal != "" { - return &ErrStructuredOutputRefusal{Model: model, Choice: i, Refusal: c.Message.Refusal} - } if c.FinishReason != openaiclient.FinishReasonStop { continue } diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index 4d8c58c86..274de04f2 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -318,18 +318,6 @@ func TestValidateStructuredResponse(t *testing.T) { t.Fatalf("want ErrStructuredOutputValidation, got %v", err) } }) - t.Run("refusal is a typed refusal, not a validation error", func(t *testing.T) { - t.Parallel() - err := llm.validateStructuredResponse(mk(openaiclient.FinishReasonStop, "", "I cannot help with that"), opts) - var refusal *ErrStructuredOutputRefusal - if !errors.As(err, &refusal) { - t.Fatalf("want ErrStructuredOutputRefusal, got %v", err) - } - var ve *llms.ErrStructuredOutputValidation - if errors.As(err, &ve) { - t.Fatal("refusal must not surface as a validation error") - } - }) t.Run("length is not final json", func(t *testing.T) { t.Parallel() if err := llm.validateStructuredResponse(mk(openaiclient.FinishReasonLength, `{"answer"`, ""), opts); err != nil { From ac2c052bb30ac6e1bb142974760d052c6d9a0ccd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 11:23:05 +0300 Subject: [PATCH 196/618] fix(openai): count only the uncached prompt in a refusal's InputTokens llms.ErrModelRefusal documents InputTokens as the uncached input, with the billed prompt being the sum of the three input counts. The openai door put the whole prompt_tokens there and left CacheReadInputTokens at zero, so a refusal on a cached prompt of 100 with 80 cached reported 100 + 0 + 80 -- the cache counted twice, and no way to tell how much was cached. The Anthropic-shaped doors already report the three counts separately, which is where the documented contract comes from. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 10 ++++++---- llms/openai/refusal_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 31cf0d385..9babfeb73 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -462,11 +462,13 @@ func refusalFrom(result *openaiclient.ChatCompletionResponse) (*llms.ErrModelRef if c.Message.Refusal == "" { continue } + cached := result.Usage.PromptTokensDetails.CachedTokens return &llms.ErrModelRefusal{ - Provider: "openai", - Message: c.Message.Refusal, - InputTokens: result.Usage.PromptTokens, - OutputTokens: result.Usage.CompletionTokens, + Provider: "openai", + Message: c.Message.Refusal, + InputTokens: result.Usage.PromptTokens - cached, + OutputTokens: result.Usage.CompletionTokens, + CacheReadInputTokens: cached, }, i } return nil, 0 diff --git a/llms/openai/refusal_test.go b/llms/openai/refusal_test.go index 13bf02e9d..bbffaa395 100644 --- a/llms/openai/refusal_test.go +++ b/llms/openai/refusal_test.go @@ -74,3 +74,29 @@ func TestAStructuredOutputRefusalKeepsBothItsTypes(t *testing.T) { require.NotNil(t, resp) } + +func TestARefusalReportsTheUncachedInputSeparately(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o", + "choices":[{"index":0,"message":{"role":"assistant","content":"", + "refusal":"I can't help with that."},"finish_reason":"stop"}], + "usage":{"prompt_tokens":100,"completion_tokens":7,"total_tokens":107, + "prompt_tokens_details":{"cached_tokens":80}}}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, 20, refusal.InputTokens, "InputTokens counts only the uncached input") + assert.Equal(t, 80, refusal.CacheReadInputTokens) + assert.Equal(t, 100, refusal.InputTokens+refusal.CacheCreationInputTokens+refusal.CacheReadInputTokens, + "the three input counts must add up to the billed prompt") +} From 8247d89c6a9c9635fbb6113f0d7edd95000bdbbd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 11:24:55 +0300 Subject: [PATCH 197/618] test(anthropic): cover the refusal that arrives over a stream The streamed door reaches the same builder as the whole-answer one, so the previous commit fixed both, but only the non-streaming entry was tested. This pins the second entry: a completed stream whose message_delta carries stop_reason "refusal" answers with the typed error and the response beside it. Mutating the builder back to (nil, refusal) turns it red. Co-Authored-By: Claude Opus 5 --- llms/anthropic/refusal_test.go | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/llms/anthropic/refusal_test.go b/llms/anthropic/refusal_test.go index 0ff9ba4a8..babad5604 100644 --- a/llms/anthropic/refusal_test.go +++ b/llms/anthropic/refusal_test.go @@ -12,6 +12,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" ) func TestARefusalTravelsWithTheResponseOnThePrimaryDoor(t *testing.T) { @@ -44,3 +45,49 @@ func TestARefusalTravelsWithTheResponseOnThePrimaryDoor(t *testing.T) { require.NotEmpty(t, resp.Choices) assert.Equal(t, "refusal", resp.Choices[0].StopReason) } + +func TestAStreamedRefusalAlsoTravelsWithItsResponse(t *testing.T) { + t.Parallel() + + const events = `event: message_start +data: {"type":"message_start","message":{"id":"msg_1","type":"message","role":"assistant","model":"claude-haiku-4-5","content":[],"stop_reason":null,"usage":{"input_tokens":11,"output_tokens":1}}} + +event: content_block_start +data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I can't help with that."}} + +event: content_block_stop +data: {"type":"content_block_stop","index":0} + +event: message_delta +data: {"type":"message_delta","delta":{"stop_reason":"refusal","stop_sequence":null},"usage":{"output_tokens":7}} + +event: message_stop +data: {"type":"message_stop"} +` + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, events) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, "I can't help with that.", refusal.Message) + + require.NotNil(t, resp, "the streamed door must answer a refusal the same way") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "refusal", resp.Choices[0].StopReason) +} From 496c267604bb7a08e1dce479ab9236db96cbfe20 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:11:40 +0300 Subject: [PATCH 198/618] fix(anthropic): keep the text a stream already delivered when it then fails Commit 5bfc4105 made the consumer-gave-up branch return what had arrived, but the three neighbouring exits of the same loop still sent Response: nil: an unreadable event, a vendor "error" event mid-answer (a real overloaded_error), and a line the scanner cannot hold. In all three the accumulated response already held the text handed to the consumer, and the caller got nothing back with the error. The fourth exit -- a non-streaming body whose callback fails -- is left as it was. That path never accumulates into the response, so sending it would hand over an empty struct and change nothing observable; mutating it stays green, which is the reason not to touch it. Co-Authored-By: Claude Opus 5 --- .../internal/anthropicclient/messages.go | 9 +- llms/anthropic/partial_stream_error_test.go | 82 +++++++++++++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 llms/anthropic/partial_stream_error_test.go diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index 42f480938..696508850 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -417,7 +417,8 @@ func parseStreamingMessageResponse( data := strings.TrimPrefix(line, "data: ") event, err := parseStreamEvent(data) if err != nil { - eventChan <- MessageEvent{Response: nil, Err: fmt.Errorf("failed to parse stream event: %w", err)} + partial := response + eventChan <- MessageEvent{Response: &partial, Err: fmt.Errorf("failed to parse stream event: %w", err)} return } response, err = processStreamEvent(ctx, event, payload, response, eventChan) @@ -428,7 +429,8 @@ func parseStreamingMessageResponse( } } if err := scanner.Err(); err != nil { - eventChan <- MessageEvent{Response: nil, Err: fmt.Errorf("issue scanning response: %w", err)} + partial := response + eventChan <- MessageEvent{Response: &partial, Err: fmt.Errorf("issue scanning response: %w", err)} } }() @@ -511,7 +513,8 @@ func processStreamEvent(ctx context.Context, event map[string]interface{}, paylo case "ping": // Nothing to do here case "error": - eventChan <- MessageEvent{Response: nil, Err: fmt.Errorf("received error event: %v", event)} + partial := response + eventChan <- MessageEvent{Response: &partial, Err: fmt.Errorf("received error event: %v", event)} default: log.Printf("unknown event type: %s - %v", eventType, event) } diff --git a/llms/anthropic/partial_stream_error_test.go b/llms/anthropic/partial_stream_error_test.go new file mode 100644 index 000000000..343813dfa --- /dev/null +++ b/llms/anthropic/partial_stream_error_test.go @@ -0,0 +1,82 @@ +package anthropic_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +const deliveredThenBroken = `event: message_start +data: {"type":"message_start","message":{"id":"msg_1","type":"message","role":"assistant","model":"claude-haiku-4-5","content":[],"stop_reason":null,"usage":{"input_tokens":10,"output_tokens":1}}} + +event: content_block_start +data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} + +event: content_block_delta +data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"sixty rooms are free"}} + +` + +func streamThenFail(t *testing.T, tail string) (*llms.ContentResponse, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, deliveredThenBroken+tail) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + return llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) +} + +func TestTextAlreadyDeliveredSurvivesAVendorErrorEvent(t *testing.T) { + t.Parallel() + + resp, err := streamThenFail(t, `event: error +data: {"type":"error","error":{"type":"overloaded_error","message":"overloaded"}} +`) + + require.Error(t, err) + require.NotNil(t, resp, "text already handed to the consumer must travel with the error") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} + +func TestTextAlreadyDeliveredSurvivesAMalformedEvent(t *testing.T) { + t.Parallel() + + resp, err := streamThenFail(t, "data: {not json at all\n") + + require.Error(t, err) + require.NotNil(t, resp, "one unreadable event must not discard the answer so far") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} + +func TestTextAlreadyDeliveredSurvivesAnOversizedLine(t *testing.T) { + t.Parallel() + + resp, err := streamThenFail(t, "data: "+strings.Repeat("x", 9*1024*1024)+"\n") + + require.Error(t, err) + require.NotNil(t, resp, "a line the scanner cannot hold must not discard the answer so far") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} From 377b41d2de671c44eeb8f626dd6c109c3088c2b9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:13:48 +0300 Subject: [PATCH 199/618] fix(openai): return the streamed text that arrived before the failure The openai door never joined the partial-on-error contract 5bfc4105 established elsewhere. Its stream combiner returned nil from five points inside the loop -- a transport error and four callback errors -- while the accumulators holding every delivered chunk were flushed into the response only after the loop, so a consumer that gave up mid-answer got nothing back. Fixing the combiner alone changes nothing: two more layers above it discard the response on any error, in CreateChat and in GenerateContent. All three are needed, and mutating any one of them alone turns the new test red. Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 20 +++++-- .../internal/openaiclient/openaiclient.go | 5 +- llms/openai/openaillm.go | 5 +- llms/openai/partial_stream_test.go | 57 +++++++++++++++++++ 4 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 llms/openai/partial_stream_test.go diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 00d7f9c26..adb93c4b7 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -790,9 +790,13 @@ func combineStreamingChatResponse( toolCallNameCache = make(map[string]string) // Cache tool call names by ID for streaming ) + var streamErr error + +DoStream: for streamResponse := range responseChan { if streamResponse.Error != nil { - return nil, streamResponse.Error + streamErr = streamResponse.Error + break DoStream } updateChatUsage(&response.Usage, streamResponse.Usage) @@ -829,10 +833,12 @@ func combineStreamingChatResponse( reasoning := &reasoning.ContentReasoning{Content: reasoningContent} if err := streaming.CallWithReasoning(ctx, payload.StreamingFunc, reasoning); err != nil { - return nil, fmt.Errorf("streaming reasoning func returned an error: %w", err) + streamErr = fmt.Errorf("streaming reasoning func returned an error: %w", err) + break DoStream } if err := streaming.CallWithText(ctx, payload.StreamingFunc, content); err != nil { - return nil, fmt.Errorf("streaming text func returned an error: %w", err) + streamErr = fmt.Errorf("streaming text func returned an error: %w", err) + break DoStream } if choice.Delta.FunctionCall != nil { @@ -841,7 +847,8 @@ func combineStreamingChatResponse( toolCall := streaming.NewToolCall("", functionCall.Name, functionCall.Arguments) if err := streaming.CallWithToolCall(ctx, payload.StreamingFunc, toolCall); err != nil { - return nil, fmt.Errorf("streaming tool call func returned an error: %w", err) + streamErr = fmt.Errorf("streaming tool call func returned an error: %w", err) + break DoStream } } @@ -850,7 +857,8 @@ func combineStreamingChatResponse( toolCall := streaming.NewToolCall(toolCall.ID, toolCall.Function.Name, toolCall.Function.Arguments) if err := streaming.CallWithToolCall(ctx, payload.StreamingFunc, toolCall); err != nil { - return nil, fmt.Errorf("streaming tool call func returned an error: %w", err) + streamErr = fmt.Errorf("streaming tool call func returned an error: %w", err) + break DoStream } } } @@ -862,7 +870,7 @@ func combineStreamingChatResponse( removeEmptyToolCalls(&response) - return &response, nil + return &response, streamErr } // streamedText collects one choice's text across deltas. diff --git a/llms/openai/internal/openaiclient/openaiclient.go b/llms/openai/internal/openaiclient/openaiclient.go index d70023147..567fc4467 100644 --- a/llms/openai/internal/openaiclient/openaiclient.go +++ b/llms/openai/internal/openaiclient/openaiclient.go @@ -174,7 +174,10 @@ func (c *Client) CreateChat(ctx context.Context, r *ChatRequest) (*ChatCompletio } resp, err := c.createChat(ctx, r) if err != nil { - return nil, err + if resp == nil || len(resp.Choices) == 0 { + return nil, err + } + return resp, err } if len(resp.Choices) == 0 { return nil, ErrEmptyResponse diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 9babfeb73..f13d2cedc 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -117,7 +117,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten result, err := o.client.CreateChat(ctx, req) if err != nil { - return nil, err + if result == nil || len(result.Choices) == 0 { + return nil, err + } + return o.processResponse(result), err } if len(result.Choices) == 0 { return nil, ErrEmptyResponse diff --git a/llms/openai/partial_stream_test.go b/llms/openai/partial_stream_test.go new file mode 100644 index 000000000..015b23f02 --- /dev/null +++ b/llms/openai/partial_stream_test.go @@ -0,0 +1,57 @@ +package openai + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestAConsumerThatGivesUpStillGetsWhatArrived(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + for _, text := range []string{"sixty ", "rooms ", "are free"} { + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,`+ + `"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"`+text+`"},"finish_reason":null}]}`+"\n\n") + if f, ok := w.(http.Flusher); ok { + f.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + gaveUp := errors.New("consumer gave up") + delivered := 0 + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "the text already delivered must travel with the error") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms ", resp.Choices[0].Content, + "every chunk written into the accumulator before the callback failed") +} From 373b46456bd03fdc7f2c814e0782f9d4b343071e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:15:22 +0300 Subject: [PATCH 200/618] fix(googleai): keep the streamed answer when the iterator fails The vertex twin was moved onto streamErr + a jump to the assembly point, and this door already routed its callback failures the same way -- but the two iterator exits still returned nil, so a stream that broke mid-answer threw away text the consumer had already received. The repro delivers one good chunk and then an unparsable one: the callback sees the text, the caller sees nothing. Both exits now set streamErr and jump to StreamEnd, where the response is assembled and returned beside the error. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 6 ++- llms/googleai/partial_stream_test.go | 55 ++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 llms/googleai/partial_stream_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 0cfb3004b..6cdd5ec9a 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -361,10 +361,12 @@ func (g *GoogleAI) generateStreamingContent( for chunk, err := range iter { if err != nil { - return nil, fmt.Errorf("error generating content: %w", err) + streamErr = fmt.Errorf("error generating content: %w", err) + goto StreamEnd } if chunk == nil { - return nil, fmt.Errorf("unexpected case: chunk is nil") + streamErr = errors.New("unexpected case: chunk is nil") + goto StreamEnd } // Capture usage metadata from each chunk (last one will be the final) diff --git a/llms/googleai/partial_stream_test.go b/llms/googleai/partial_stream_test.go new file mode 100644 index 000000000..fb4ee485c --- /dev/null +++ b/llms/googleai/partial_stream_test.go @@ -0,0 +1,55 @@ +package googleai + +import ( + "bytes" + "context" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type deliverThenBreak struct{} + +func (deliverThenBreak) RoundTrip(r *http.Request) (*http.Response, error) { + const body = "data: {\"candidates\":[{\"content\":{\"parts\":[{\"text\":\"sixty rooms are free\"}]," + + "\"role\":\"model\"},\"index\":0}]}\r\n\r\n" + + "data: {not json at all\r\n\r\n" + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"text/event-stream"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestAStreamThatBreaksMidAnswerKeepsWhatArrived(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: deliverThenBreak{}})) + require.NoError(t, err) + + delivered := "" + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + delivered += chunk.Content + } + return nil + })) + + require.Error(t, err, "a broken stream must not look like a success") + require.Equal(t, "sixty rooms are free", delivered, "the first chunk did reach the consumer") + require.NotNil(t, resp, "what reached the consumer must travel with the error") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} From 5f25b4e4d9e3dfd7a0a1790f73b7baf432e984f6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:18:30 +0300 Subject: [PATCH 201/618] fix(bedrock): return the streamed answer when a Converse frame is unreadable The callback exits of this loop were already on streamErr and returned the assembled response beside it, but the transport check right after the loop still returned nil -- two exits of one function with opposite contracts. A stream that delivered text and then hit an undecodable frame handed the caller nothing. The check now sets streamErr like its neighbours. A guard preserving an earlier callback cause was written and then dropped: with the consumer stopping the stream, stream.Err() comes back empty, so the branch is unreachable and the test written for it was passing for an unrelated reason. Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_partial_stream_test.go | 27 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/converse_partial_stream_test.go b/llms/bedrock/converse_partial_stream_test.go index df120de39..460959a98 100644 --- a/llms/bedrock/converse_partial_stream_test.go +++ b/llms/bedrock/converse_partial_stream_test.go @@ -61,3 +61,30 @@ func TestConverseStreamKeepsWhatArrivedWhenTheConsumerGivesUp(t *testing.T) { require.Len(t, resp.Choices, 1) assert.Equal(t, "sixty rooms ", resp.Choices[0].Content) } + +func TestConverseStreamKeepsWhatArrivedWhenTheTransportBreaks(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + writeConverseEvent(t, w, enc, "contentBlockDelta", + `{"contentBlockIndex":0,"delta":{"text":"sixty rooms are free"}}`) + _, _ = w.Write([]byte("not an event stream frame at all")) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0"), bedrock.WithConverseAPI()) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + require.Error(t, err, "a broken frame must not look like a completed answer") + require.NotNil(t, resp, "the text already delivered must travel with the error") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index c255db270..df9ff3be5 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -809,7 +809,7 @@ DoStream: } if err := stream.Err(); err != nil { - return nil, fmt.Errorf("stream error: %w", err) + streamErr = fmt.Errorf("stream error: %w", err) } var sig []byte From c15a3a90fd3871740c2dcd38b8f8eccd91931e6f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:20:19 +0300 Subject: [PATCH 202/618] fix(bedrock): keep the legacy stream's answer when it stops early Every mid-stream exit of the legacy InvokeModel loop returned nil: the transport check, an undecodable chunk, and the three callbacks. The assembly that fills content, tool calls, reasoning and usage sits after the loop, so whatever the consumer had already received was discarded. The text delta was also written into the buffer only after the callback returned, so the chunk a consumer refused was lost even from the answer it had already been handed. The write now happens first, matching what the caller actually saw. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 30 ++++++--- llms/bedrock/legacy_partial_stream_test.go | 67 +++++++++++++++++++ 2 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 llms/bedrock/legacy_partial_stream_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 1f68574a5..243ed74dc 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -519,16 +519,20 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim var toolCalls []llms.ToolCall var signature strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp streamingCompletionResponseChunk - err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) - if err != nil { - return nil, err + if err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp); err != nil { + streamErr = err + break DoStream } switch resp.Type { @@ -545,20 +549,22 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim case "content_block_delta": switch resp.Delta.Type { case "text_delta": + streamedContent.WriteString(resp.Delta.Text) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Delta.Text); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.Delta.Text) case "thinking_delta": if resp.Delta.Thinking != "" { chunk := streaming.Chunk{ Type: streaming.ChunkTypeReasoning, Reasoning: &reasoning.ContentReasoning{Content: resp.Delta.Thinking}, } + contentchoices[0].Reasoning = appendReasoning(contentchoices[0].Reasoning, resp.Delta.Thinking) if err = options.StreamingFunc(ctx, chunk); err != nil { - return nil, err + streamErr = err + break DoStream } - contentchoices[0].Reasoning = appendReasoning(contentchoices[0].Reasoning, resp.Delta.Thinking) } if resp.Delta.Signature != "" { signature.WriteString(resp.Delta.Signature) @@ -579,7 +585,8 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim if delta != "" { deltaToolCall := streaming.NewToolCall(currentToolCall.ID, currentToolCall.Name, delta) if err = streaming.CallWithToolCall(ctx, options.StreamingFunc, deltaToolCall); err != nil { - return nil, err + streamErr = err + break DoStream } } } @@ -606,7 +613,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } // Add tool calls to the final response @@ -623,6 +630,9 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim contentchoices[0].Content = streamedContent.String() response := &llms.ContentResponse{Choices: contentchoices} + if streamErr != nil { + return response, streamErr + } if contentchoices[0].StopReason == "refusal" { return response, &llms.ErrModelRefusal{ Provider: "bedrock", diff --git a/llms/bedrock/legacy_partial_stream_test.go b/llms/bedrock/legacy_partial_stream_test.go new file mode 100644 index 000000000..0aa4bf9be --- /dev/null +++ b/llms/bedrock/legacy_partial_stream_test.go @@ -0,0 +1,67 @@ +package bedrock_test + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func legacyStreamOfThreeWords(t *testing.T) *httptest.Server { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + writeLegacyChunk(t, w, enc, `{"type":"message_start","message":{"id":"x","type":"message",`+ + `"role":"assistant","model":"m","content":[],"stop_reason":null,`+ + `"usage":{"input_tokens":10,"output_tokens":1}}}`) + for _, text := range []string{"sixty ", "rooms ", "are free"} { + writeLegacyChunk(t, w, enc, `{"type":"content_block_delta","index":0,`+ + `"delta":{"type":"text_delta","text":"`+text+`"}}`) + } + writeLegacyChunk(t, w, enc, `{"type":"message_delta","delta":{"stop_reason":"end_turn"},`+ + `"usage":{"output_tokens":9}}`) + })) + t.Cleanup(srv.Close) + return srv +} + +func TestLegacyStreamKeepsWhatArrivedWhenTheConsumerGivesUp(t *testing.T) { + t.Parallel() + + llm := bedrockLLMAgainst(t, legacyStreamOfThreeWords(t), + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + gaveUp := errors.New("consumer gave up") + delivered := 0 + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "the text already delivered must travel with the error") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms ", resp.Choices[0].Content, + "the chunk the consumer refused was still handed to it, so it belongs in the answer") +} From eab49355670496b4db05b00d71e6afc508259301 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:22:18 +0300 Subject: [PATCH 203/618] fix(ollama): keep a stream that produced only reasoning or only tool calls handleChat assembles a partial answer out of three fields -- content, thinking and tool calls -- and checks all three before deciding it has something. The recovery guard above it looked at content alone, so a stream carrying only reasoning, or only a tool call, was discarded with the error despite the assembler having kept it. The guard now weighs the same three fields, through a helper that names the question it answers. Co-Authored-By: Claude Opus 5 --- llms/ollama/ollamallm.go | 6 ++- llms/ollama/partial_stream_test.go | 64 ++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 llms/ollama/partial_stream_test.go diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index ec3d7ad87..67d017801 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -165,7 +165,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten resp, err := o.handleChat(ctx, req, opts) if err != nil { partial := o.createContentResponse(resp) - if len(partial.Choices) == 0 || partial.Choices[0].Content == "" { + if len(partial.Choices) == 0 || isEmptyChoice(partial.Choices[0]) { return nil, err } return partial, err @@ -449,6 +449,10 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca } // createContentResponse creates a LangChain content response from Ollama response. +func isEmptyChoice(choice *llms.ContentChoice) bool { + return choice.Content == "" && len(choice.ToolCalls) == 0 && choice.Reasoning.IsEmpty() +} + func (o *LLM) createContentResponse(resp api.ChatResponse) *llms.ContentResponse { contentReasoning, content := reasoning.SplitContentWithReasoning(resp.Message.Content) contentReasoning.Content += resp.Message.Thinking diff --git a/llms/ollama/partial_stream_test.go b/llms/ollama/partial_stream_test.go new file mode 100644 index 000000000..35957eb24 --- /dev/null +++ b/llms/ollama/partial_stream_test.go @@ -0,0 +1,64 @@ +package ollama + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func thinkingOnlyStream(t *testing.T) *LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + for _, thought := range []string{"counting the ", "free rooms"} { + _, _ = io.WriteString(w, `{"model":"llama3","created_at":"2026-08-21T09:00:00Z",`+ + `"message":{"role":"assistant","content":"","thinking":"`+thought+`"},"done":false}`+"\n") + if f, ok := w.(http.Flusher); ok { + f.Flush() + } + } + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("llama3")) + require.NoError(t, err) + return llm +} + +func TestAReasoningOnlyStreamIsNotThrownAway(t *testing.T) { + t.Parallel() + + llm := thinkingOnlyStream(t) + + gaveUp := errors.New("consumer gave up") + delivered := 0 + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeReasoning { + return nil + } + delivered++ + if delivered == 2 { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "a stream that produced only reasoning still produced something") + require.Len(t, resp.Choices, 1) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Contains(t, resp.Choices[0].Reasoning.Content, "counting the ") +} From ff7e8380937796103ee6afef10fcc5d1c203b585 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:55:39 +0300 Subject: [PATCH 204/618] test: cover seven guards this branch shipped without any test A mutation audit of the "guards without tests" list confirmed all eight were still unprotected: removing each one left the failure set equal to baseline. Seven are now covered, each verified by putting its mutation back. - both ValidateReasoning call sites: an unknown effort is refused without the request ever reaching the server - anthropic's scanner.Buffer: a 200KB line survives, matching the test its openai twin already had - the warm-cache path: a cached answer is returned even when the consumer's callback fails - ollama's assembly out of three fields, and the thinking inside it - the Openai-Project response scrubber - both turn.go conjuncts, through a generation that does adaptive and budget: the manual-budget rule holds off a budget-only model, and adaptive thinking does not trip it The eighth, ollama's "only overwrite an empty message" condition, is left uncovered: dropping the condition entirely changes nothing observable, so there is no input that separates it. Co-Authored-By: Claude Opus 5 --- internal/httprr/rr_unit_test.go | 2 + llms/anthropic/long_stream_line_test.go | 53 +++++++++++++++++++++ llms/anthropic/reasoning_validation_test.go | 45 +++++++++++++++++ llms/bedrock/turn_limits_test.go | 26 ++++++++++ llms/cache/cache_test.go | 23 +++++++++ llms/ollama/partial_stream_test.go | 29 +++++++++++ llms/openai/reasoning_validation_test.go | 42 ++++++++++++++++ 7 files changed, 220 insertions(+) create mode 100644 llms/anthropic/long_stream_line_test.go create mode 100644 llms/anthropic/reasoning_validation_test.go create mode 100644 llms/openai/reasoning_validation_test.go diff --git a/internal/httprr/rr_unit_test.go b/internal/httprr/rr_unit_test.go index e6c6ae852..8fb6aa3ef 100644 --- a/internal/httprr/rr_unit_test.go +++ b/internal/httprr/rr_unit_test.go @@ -293,6 +293,7 @@ func TestDefaultResponseScrubbers(t *testing.T) { resp.Header.Set("Cf-Ray", "123456789-ABC") resp.Header.Set("Set-Cookie", "session=secret") resp.Header.Set("Openai-Organization", "org-123") + resp.Header.Set("Openai-Project", "proj_real-secret") // Serialize response var buf bytes.Buffer @@ -311,6 +312,7 @@ func TestDefaultResponseScrubbers(t *testing.T) { assert.Empty(t, scrubbedResp.Header.Get("Cf-Ray")) assert.Empty(t, scrubbedResp.Header.Get("Set-Cookie")) assert.Equal(t, "lcgo-tst", scrubbedResp.Header.Get("Openai-Organization")) + assert.Equal(t, "proj_lcgo-tst", scrubbedResp.Header.Get("Openai-Project")) } func TestEmbeddingJSONFormatter(t *testing.T) { diff --git a/llms/anthropic/long_stream_line_test.go b/llms/anthropic/long_stream_line_test.go new file mode 100644 index 000000000..af5695a8b --- /dev/null +++ b/llms/anthropic/long_stream_line_test.go @@ -0,0 +1,53 @@ +package anthropic_test + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func TestAStreamedLineLongerThanTheDefaultBufferSurvives(t *testing.T) { + t.Parallel() + + long := strings.Repeat("a", 200*1024) + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, "event: message_start\ndata: {\"type\":\"message_start\",\"message\":"+ + "{\"id\":\"msg_1\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-haiku-4-5\","+ + "\"content\":[],\"stop_reason\":null,\"usage\":{\"input_tokens\":1,\"output_tokens\":1}}}\n\n") + _, _ = io.WriteString(w, "event: content_block_start\ndata: {\"type\":\"content_block_start\","+ + "\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\n") + _, _ = fmt.Fprintf(w, "event: content_block_delta\ndata: {\"type\":\"content_block_delta\","+ + "\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":%q}}\n\n", long) + _, _ = io.WriteString(w, "event: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\n") + _, _ = io.WriteString(w, "event: message_delta\ndata: {\"type\":\"message_delta\","+ + "\"delta\":{\"stop_reason\":\"end_turn\"},\"usage\":{\"output_tokens\":9}}\n\n") + _, _ = io.WriteString(w, "event: message_stop\ndata: {\"type\":\"message_stop\"}\n\n") + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + require.NoError(t, err, "a long line must not end the stream") + require.Len(t, resp.Choices, 1) + assert.Len(t, resp.Choices[0].Content, len(long)) +} diff --git a/llms/anthropic/reasoning_validation_test.go b/llms/anthropic/reasoning_validation_test.go new file mode 100644 index 000000000..40ed28d0a --- /dev/null +++ b/llms/anthropic/reasoning_validation_test.go @@ -0,0 +1,45 @@ +package anthropic_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" +) + +func TestAnUnknownEffortIsRefusedBeforeTheRequestIsSent(t *testing.T) { + t.Parallel() + + var calls atomic.Int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls.Add(1) + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","type":"message","role":"assistant","model":"m", + "content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn", + "usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning("banana", 0)) + + var apiErr *llms.Error + require.ErrorAs(t, err, &apiErr) + assert.Equal(t, llms.ErrCodeInvalidRequest, apiErr.Code) + assert.Contains(t, apiErr.Message, "banana") + assert.Zero(t, calls.Load(), "an effort no door accepts must not cost a request") +} diff --git a/llms/bedrock/turn_limits_test.go b/llms/bedrock/turn_limits_test.go index 3d16bbf1d..254e9d896 100644 --- a/llms/bedrock/turn_limits_test.go +++ b/llms/bedrock/turn_limits_test.go @@ -53,6 +53,32 @@ func TestBedrockRefusesTheSameTurnsAsThePrimaryDoor(t *testing.T) { } }) + t.Run(name+"/a forced tool with a manual budget is refused on a generation that also does adaptive", func(t *testing.T) { + t.Parallel() + llm := truncationLLMWithBody(t, `{}`, + append([]bedrock.Option{bedrock.WithModel("us.anthropic.claude-opus-4-6-v1:0")}, opts...)...) + _, err := llm.GenerateContent(context.Background(), turnLimitMessages(llms.ChatMessageTypeHuman), + llms.WithReasoning(llms.ReasoningMedium, 2048), + llms.WithToolChoice(llms.ToolChoice{Type: "any"})) + var target *reasoning.ErrForcedToolUseWithThinking + if !errors.As(err, &target) { + t.Errorf("this door sends the budget itself, so the rule holds even off a budget-only generation: %v", err) + } + }) + + t.Run(name+"/a forced tool with adaptive thinking is allowed", func(t *testing.T) { + t.Parallel() + llm := truncationLLMWithBody(t, `{}`, + append([]bedrock.Option{bedrock.WithModel("us.anthropic.claude-sonnet-5-v1:0")}, opts...)...) + _, err := llm.GenerateContent(context.Background(), turnLimitMessages(llms.ChatMessageTypeHuman), + llms.WithAdaptiveReasoning(llms.ReasoningMedium), + llms.WithToolChoice(llms.ToolChoice{Type: "any"})) + var target *reasoning.ErrForcedToolUseWithThinking + if errors.As(err, &target) { + t.Errorf("adaptive thinking carries no manual budget, so the rule must not fire: %v", err) + } + }) + t.Run(name+"/a non-Claude family is not refused for the same turn", func(t *testing.T) { t.Parallel() llm := truncationLLMWithBody(t, `{}`, diff --git a/llms/cache/cache_test.go b/llms/cache/cache_test.go index 5178ece0f..97713ae0c 100644 --- a/llms/cache/cache_test.go +++ b/llms/cache/cache_test.go @@ -2,6 +2,7 @@ package cache import ( "context" + "errors" "testing" "github.com/vxcontrol/langchaingo/llms" @@ -174,3 +175,25 @@ func TestCache_Call_Streaming(t *testing.T) { rq.True(stream) rq.True(streamDone) } + +func TestAWarmCacheReturnsItsAnswerWhenTheConsumerGivesUp(t *testing.T) { + t.Parallel() + + answer := &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: "sixty rooms are free"}}, + } + llm := New(newMockLLM(answer, nil), newMockCache()) + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")} + + _, err := llm.GenerateContent(context.Background(), msgs) + require.NoError(t, err, "the first call fills the cache") + + gaveUp := errors.New("consumer gave up") + resp, err := llm.GenerateContent(context.Background(), msgs, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return gaveUp })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "the cached answer exists whether or not the consumer wanted it streamed") + require.Len(t, resp.Choices, 1) + require.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} diff --git a/llms/ollama/partial_stream_test.go b/llms/ollama/partial_stream_test.go index 35957eb24..b959012f2 100644 --- a/llms/ollama/partial_stream_test.go +++ b/llms/ollama/partial_stream_test.go @@ -62,3 +62,32 @@ func TestAReasoningOnlyStreamIsNotThrownAway(t *testing.T) { require.NotNil(t, resp.Choices[0].Reasoning) assert.Contains(t, resp.Choices[0].Reasoning.Content, "counting the ") } + +func TestABrokenStreamStillCarriesTheThinkingItDelivered(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + _, _ = io.WriteString(w, `{"model":"llama3","created_at":"2026-08-21T09:00:00Z",`+ + `"message":{"role":"assistant","content":"","thinking":"counting the free rooms"},"done":false}`+"\n") + if f, ok := w.(http.Flusher); ok { + f.Flush() + } + _, _ = io.WriteString(w, "{not json at all\n") + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("llama3")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + require.Error(t, err, "an undecodable line is not a finished answer") + require.NotNil(t, resp, "handleChat assembles thinking even when the message carries no content") + require.Len(t, resp.Choices, 1) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Equal(t, "counting the free rooms", resp.Choices[0].Reasoning.Content) +} diff --git a/llms/openai/reasoning_validation_test.go b/llms/openai/reasoning_validation_test.go new file mode 100644 index 000000000..7d51196c3 --- /dev/null +++ b/llms/openai/reasoning_validation_test.go @@ -0,0 +1,42 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestAnUnknownEffortIsRefusedBeforeTheRequestIsSent(t *testing.T) { + t.Parallel() + + var calls atomic.Int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls.Add(1) + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o", + "choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}], + "usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning("banana", 0)) + + var apiErr *llms.Error + require.ErrorAs(t, err, &apiErr) + assert.Equal(t, llms.ErrCodeInvalidRequest, apiErr.Code) + assert.Contains(t, apiErr.Message, "banana") + assert.Zero(t, calls.Load(), "an effort no door accepts must not cost a request") +} From 015c1bf8cf840ef882f27dd7bf9e241aa2375a6c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 12:58:50 +0300 Subject: [PATCH 205/618] test(vertex): cover the partial answer its stream returns on failure The three partial-answer edits on this door shipped without a test: dropping the response on a stream error left the failure set at baseline. The harness that works here differs from its googleai twin -- the vertex REST client reads a JSON array, not SSE, and needs an API key present before it will build a client at all. The stub delivers one good element and then an unparsable one: the callback receives the text, and the caller now provably receives it too. Both the assembly and the break-instead-of-return are checked by mutation. Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex/partial_stream_test.go | 57 +++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 llms/googleai/vertex/partial_stream_test.go diff --git a/llms/googleai/vertex/partial_stream_test.go b/llms/googleai/vertex/partial_stream_test.go new file mode 100644 index 000000000..7b9715ddb --- /dev/null +++ b/llms/googleai/vertex/partial_stream_test.go @@ -0,0 +1,57 @@ +package vertex + +import ( + "bytes" + "context" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/googleai" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type deliverThenBreak struct{} + +func (deliverThenBreak) RoundTrip(r *http.Request) (*http.Response, error) { + const body = `[{"candidates":[{"content":{"parts":[{"text":"sixty rooms are free"}],` + + `"role":"model"},"index":0}]},` + `{not json at all` + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestAStreamThatBreaksMidAnswerKeepsWhatArrived(t *testing.T) { + t.Setenv("GOOGLE_API_KEY", "unit-test-key") + + v, err := New(context.Background(), + googleai.WithRest(), googleai.WithAPIKey("unit-test-key"), + googleai.WithCloudProject("unit"), googleai.WithCloudLocation("us-central1"), + googleai.WithDefaultModel("gemini-2.5-flash"), + googleai.WithHTTPClient(&http.Client{Transport: deliverThenBreak{}})) + require.NoError(t, err) + t.Cleanup(func() { _ = v.Close() }) + + delivered := "" + resp, err := v.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + delivered += chunk.Content + } + return nil + })) + + require.Error(t, err, "a broken stream must not look like a success") + require.Equal(t, "sixty rooms are free", delivered, "the first chunk did reach the consumer") + require.NotNil(t, resp, "what reached the consumer must travel with the error") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} From 68d02316c88c3e9e103ceef5ab67af3a271d7839 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 17:19:31 +0300 Subject: [PATCH 206/618] test(bedrock): cover the six non-Claude families this branch changed blind A coverage pass over the whole story branch found these six providers at zero: every changed line in ai21, amazon, cohere, deepseek, meta and nova was executed by no test at all, though the branch changed real behaviour in each -- Truncated now derives from the family's own finish reason, and the streamed answer accumulates through a builder instead of string append. Each family gets both paths: the whole answer and the streamed one, with its own finish-reason spelling and chunk shape. Neutralising Truncated in any one provider turns two subtests red; dropping the accumulation turns one red. Co-Authored-By: Claude Opus 5 --- llms/bedrock/provider_families_test.go | 143 +++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 llms/bedrock/provider_families_test.go diff --git a/llms/bedrock/provider_families_test.go b/llms/bedrock/provider_families_test.go new file mode 100644 index 000000000..44424a8d8 --- /dev/null +++ b/llms/bedrock/provider_families_test.go @@ -0,0 +1,143 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type familyCase struct { + name string + model string + whole string + chunks []string + wantText string + wantReason string +} + +func nonClaudeFamilies() []familyCase { + return []familyCase{ + { + name: "amazon", + model: "amazon.titan-text-express-v1", + whole: `{"inputTextTokenCount":5,"results":[{"tokenCount":3,"outputText":"sixty rooms",` + + `"completionReason":"LENGTH"}]}`, + chunks: []string{ + `{"outputText":"sixty ","index":0}`, + `{"outputText":"rooms","index":1,"completionReason":"LENGTH"}`, + }, + wantText: "sixty rooms", + wantReason: "LENGTH", + }, + { + name: "meta", + model: "meta.llama3-70b-instruct-v1:0", + whole: `{"generation":"sixty rooms","prompt_token_count":5,"generation_token_count":3,"stop_reason":"length"}`, + chunks: []string{`{"generation":"sixty "}`, `{"generation":"rooms","stop_reason":"length"}`}, + wantText: "sixty rooms", + wantReason: "length", + }, + { + name: "cohere", + model: "cohere.command-text-v14", + whole: `{"id":"x","generations":[{"id":"g","text":"sixty rooms","finish_reason":"MAX_TOKENS"}],` + + `"text":"","finish_reason":""}`, + chunks: []string{ + `{"text":"sixty ","is_finished":false}`, + `{"text":"rooms","finish_reason":"MAX_TOKENS","is_finished":true}`, + }, + wantText: "sixty rooms", + wantReason: "MAX_TOKENS", + }, + { + name: "ai21", + model: "ai21.jamba-1-5-large-v1:0", + whole: `{"id":"x","choices":[{"index":0,"message":{"role":"assistant","content":"sixty rooms"},` + + `"finish_reason":"length"}],"usage":{"prompt_tokens":5,"completion_tokens":3,"total_tokens":8}}`, + chunks: []string{ + `{"text":"sixty ","index":0}`, + `{"text":"rooms","index":1,"finish_reason":"length"}`, + }, + wantText: "sixty rooms", + wantReason: "length", + }, + { + name: "deepseek", + model: "us.deepseek.r1-v1:0", + whole: `{"choices":[{"text":"sixty rooms","stop_reason":"length"}]}`, + chunks: []string{`{"choices":[{"text":"sixty "}]}`, `{"choices":[{"text":"rooms","stop_reason":"length"}]}`}, + wantText: "sixty rooms", + wantReason: "length", + }, + { + name: "nova", + model: "us.amazon.nova-pro-v1:0", + whole: `{"output":{"message":{"content":[{"text":"sixty rooms"}],"role":"assistant"}},` + + `"stopReason":"max_tokens","usage":{"inputTokens":5,"outputTokens":3,"totalTokens":8}}`, + chunks: []string{ + `{"contentBlockDelta":{"delta":{"text":"sixty "}}}`, + `{"contentBlockDelta":{"delta":{"text":"rooms"}}}`, + `{"messageDelta":{"stopReason":"max_tokens","usage":{"outputTokens":3}}}`, + }, + wantText: "sixty rooms", + wantReason: "max_tokens", + }, + } +} + +func TestANonClaudeFamilyReportsTruncationAndKeepsItsWholeAnswer(t *testing.T) { + t.Parallel() + + for _, tc := range nonClaudeFamilies() { + t.Run(tc.name+"/whole answer", func(t *testing.T) { + t.Parallel() + + llm := truncationLLMWithBody(t, tc.whole, bedrock.WithModel(tc.model)) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, tc.wantText, resp.Choices[0].Content) + assert.Equal(t, tc.wantReason, resp.Choices[0].StopReason) + assert.True(t, resp.Choices[0].Truncated, + "a stop reason meaning the output limit must set Truncated") + }) + + t.Run(tc.name+"/streamed answer", func(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + for _, chunk := range tc.chunks { + writeLegacyChunk(t, w, enc, chunk) + } + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(tc.model)) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, tc.wantText, resp.Choices[0].Content, + "every delta belongs in the assembled answer") + assert.True(t, resp.Choices[0].Truncated, + "the streamed stop reason must set Truncated too") + }) + } +} From f126b62938f1e963ed396d37b09c29c6ba39eaba Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 17:24:14 +0300 Subject: [PATCH 207/618] test: cover the error branches the coverage pass found unexecuted Re-running coverage with cross-package attribution (-coverpkg) narrowed the gap on this branch from an apparent 27% to 6%: the first pass credited only tests living inside each internal package, so the Bedrock and openai client work driven from the door packages was invisible to it. What the corrected pass still showed unexecuted, and this covers: - openai's streaming exits for the reasoning and tool-call callbacks; only the text one had a test, though all four were changed together - mistral's two Call error branches, where the failed request and the not-a-single-choice answer must both reach the callbacks handler Co-Authored-By: Claude Opus 5 --- llms/mistral/call_errors_test.go | 61 +++++++++++++++++++++++++++++ llms/openai/partial_stream_test.go | 63 +++++++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 llms/mistral/call_errors_test.go diff --git a/llms/mistral/call_errors_test.go b/llms/mistral/call_errors_test.go new file mode 100644 index 000000000..370c2f08f --- /dev/null +++ b/llms/mistral/call_errors_test.go @@ -0,0 +1,61 @@ +package mistral + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func mistralAnswering(t *testing.T, status int, body string) *Model { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithAPIKey("test"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + return llm +} + +func TestCallReportsAFailedRequestToTheHandler(t *testing.T) { + t.Parallel() + + llm := mistralAnswering(t, http.StatusInternalServerError, `{"error":"upstream is down"}`) + rec := &errorRecorder{} + llm.CallbacksHandler = rec + + out, err := llm.Call(context.Background(), "hi") + + require.Error(t, err) + assert.Empty(t, out) + require.Len(t, rec.errs, 1, "a failed request must reach the handler exactly once") + assert.ErrorIs(t, rec.errs[0], err) +} + +func TestCallRejectsAnAnswerThatIsNotASingleChoice(t *testing.T) { + t.Parallel() + + llm := mistralAnswering(t, http.StatusOK, + `{"id":"x","object":"chat.completion","model":"mistral-small-latest","choices":[],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":0,"total_tokens":1}}`) + rec := &errorRecorder{} + llm.CallbacksHandler = rec + + out, err := llm.Call(context.Background(), "hi") + + require.Error(t, err) + assert.Empty(t, out) + assert.Contains(t, err.Error(), "length of the Choices slice must be 1") + require.Len(t, rec.errs, 1) + assert.ErrorIs(t, rec.errs[0], err) +} diff --git a/llms/openai/partial_stream_test.go b/llms/openai/partial_stream_test.go index 015b23f02..bc20b3c2e 100644 --- a/llms/openai/partial_stream_test.go +++ b/llms/openai/partial_stream_test.go @@ -34,7 +34,7 @@ func TestAConsumerThatGivesUpStillGetsWhatArrived(t *testing.T) { llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) - gaveUp := errors.New("consumer gave up") + gaveUp := errGaveUp delivered := 0 resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, @@ -55,3 +55,64 @@ func TestAConsumerThatGivesUpStillGetsWhatArrived(t *testing.T) { assert.Equal(t, "sixty rooms ", resp.Choices[0].Content, "every chunk written into the accumulator before the callback failed") } + +func streamThenGiveUpOn(t *testing.T, deltas []string, refuse streaming.ChunkType) (*llms.ContentResponse, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + for _, delta := range deltas { + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,`+ + `"model":"gpt-4o","choices":[{"index":0,"delta":`+delta+`,"finish_reason":null}]}`+"\n\n") + if f, ok := w.(http.Flusher); ok { + f.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + return llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == refuse { + return errGaveUp + } + return nil + })) +} + +var errGaveUp = errors.New("consumer gave up") + +func TestEveryStreamedChunkKindCarriesWhatArrivedWhenTheConsumerGivesUp(t *testing.T) { + t.Parallel() + + t.Run("reasoning", func(t *testing.T) { + t.Parallel() + resp, err := streamThenGiveUpOn(t, []string{ + `{"content":"sixty rooms"}`, + `{"reasoning_content":"counting"}`, + }, streaming.ChunkTypeReasoning) + + require.ErrorIs(t, err, errGaveUp) + require.NotNil(t, resp, "text delivered before the reasoning chunk must survive") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms", resp.Choices[0].Content) + }) + + t.Run("tool call", func(t *testing.T) { + t.Parallel() + resp, err := streamThenGiveUpOn(t, []string{ + `{"content":"sixty rooms"}`, + `{"tool_calls":[{"index":0,"id":"call_1","type":"function",` + + `"function":{"name":"count_rooms","arguments":"{}"}}]}`, + }, streaming.ChunkTypeToolCall) + + require.ErrorIs(t, err, errGaveUp) + require.NotNil(t, resp, "text delivered before the tool call must survive") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms", resp.Choices[0].Content) + }) +} From 5b5850db871afd83eb1cd48eb51d46f5879f40f5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 17:33:59 +0300 Subject: [PATCH 208/618] fix(bedrock): make the Converse reasoning tests replay again Two separate defects kept both Converse reasoning tests red. The assert demanded ReasoningTokens from every door, but the Converse usage block carries no thinking count at all -- inputTokens, outputTokens and the cache counters, nothing else -- while the legacy door does report output_tokens_details.thinking_tokens. The expectation is now stated per door and checked in both directions: legacy must report a positive count, Converse must not invent one. The cassettes still held "temperature":1 in the five non-anthropic entries, recorded before the branch narrowed that field to anthropic model ids, so every replay of gpt-oss, kimi and the two minimax models missed. Captured what the code sends today and rewrote those entries to match, block lengths recomputed. Co-Authored-By: Claude Opus 5 --- llms/bedrock/bedrockllm_test.go | 22 +++++++++---- .../TestAmazonReasoningConverseAPI.httprr | 30 +++++++++--------- ...AmazonReasoningStreamingConverseAPI.httprr | Bin 108361 -> 108281 bytes 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index 4fa5a726c..d0103921d 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -1131,7 +1131,7 @@ func TestAmazonReasoningConverseAPI(t *testing.T) { for _, model := range reasoningModels { t.Logf("Testing reasoning with model: %s", model) - err := testReasoningWorkflow(ctx, t, llm, model, nil) + err := testReasoningWorkflow(ctx, t, llm, model, nil, false) if err != nil { t.Errorf("Reasoning failed for model %s: %v", model, err) } @@ -1168,7 +1168,7 @@ func TestAmazonReasoningLegacyAPI(t *testing.T) { for _, model := range reasoningModels { t.Logf("Testing reasoning with model: %s", model) - err := testReasoningWorkflow(ctx, t, llm, model, nil) + err := testReasoningWorkflow(ctx, t, llm, model, nil, true) if err != nil { t.Errorf("Reasoning failed for model %s: %v", model, err) } @@ -1223,7 +1223,7 @@ func TestAmazonReasoningStreamingConverseAPI(t *testing.T) { return nil } - err := testReasoningWorkflow(ctx, t, llm, model, streamingValidator) + err := testReasoningWorkflow(ctx, t, llm, model, streamingValidator, false) if err != nil { t.Errorf("Streaming reasoning failed for model %s: %v", model, err) } @@ -1267,7 +1267,7 @@ func TestAmazonReasoningStreamingLegacyAPI(t *testing.T) { return nil } - err := testReasoningWorkflow(ctx, t, llm, model, streamingValidator) + err := testReasoningWorkflow(ctx, t, llm, model, streamingValidator, true) if err != nil { t.Errorf("Streaming reasoning failed for model %s: %v", model, err) } @@ -1280,6 +1280,7 @@ func testReasoningWorkflow( //nolint:funlen llm *bedrock.LLM, model string, streamingValidator func(reasoningChunks []string) error, + countsThinkingTokens bool, ) error { t.Logf("Testing reasoning workflow for model: %s", model) @@ -1362,9 +1363,16 @@ func testReasoningWorkflow( //nolint:funlen return fmt.Errorf("empty reasoning content") } - if got, ok := choice.GenerationInfo["ReasoningTokens"].(int); !ok || got <= 0 { - return fmt.Errorf("an answer that reasoned must report ReasoningTokens as an int, got %#v", - choice.GenerationInfo["ReasoningTokens"]) + reasoningTokens, hasReasoningTokens := choice.GenerationInfo["ReasoningTokens"] + switch { + case countsThinkingTokens: + if got, ok := reasoningTokens.(int); !ok || got <= 0 { + return fmt.Errorf("an answer that reasoned must report ReasoningTokens as an int, got %#v", + reasoningTokens) + } + case hasReasoningTokens: + return fmt.Errorf("this door's usage carries no thinking count, so none must be invented, got %#v", + reasoningTokens) } if got, ok := choice.GenerationInfo["CompletionTokens"].(int); !ok || got <= 0 { return fmt.Errorf("an answer that reasoned must report CompletionTokens as an int, got %#v", diff --git a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr index cc9f2520d..84a61f484 100644 --- a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr +++ b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr @@ -69,71 +69,71 @@ Content-Type: application/json Date: Fri, 21 Aug 2026 00:34:11 GMT X-Amzn-Requestid: 8d1ca957-6597-4d83-bb08-178f584a24e2 -{"metrics":{"latencyMs":6281},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EpAFCnAIERABGAIqQHcwZPA+fT9iP2hMhNrSVLGvxT8O2Y7KwOcfbxxb+KByeUP+SRqfr2/8UxqTASW248OLMpDxvaehM3/cxtPQzYkyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgz5F+MDkFsa40e63l4aDIWgLnAXWBW/1Z59LSIwC+wWh83wunt5hQUDvs9vV8s+63d/4ObbTKJ1f6stcJ+TmAqWyLu3piKGD1Yu3iDSKs0D9y1tbFFehOD6vfp1ANEWlfQZPqln7CFfUfBHyGmbdKr8P7gQuKRkfSy/DSJeoxZtp+0HZkHFNRwo3wCs0hUqPRQZyw22663dmXljRXcsNXMLrYxBHw2OBCjNrM4IIJ/tZ2hL+0vN3DbjfhZtxmgdZ1d1c6ozU0zAAw+PeB04R/yGOLz8nhzhw8TG9/17654jETh3q7cgcp9O3J6J7iIdYsaZHEhOowUVcUWAyUweLUoERblhxVl3dNiF1glU/CklsWCoZJNvszbrOvIJZPj5lBFBQN4Y3Ubr8q4YgUuCbKqiF8pQllMgev2oRK5ewb5n3c+z+9YCWDE7jYpZUiC9fgYV4Az9CzpAFp3l+cdSS7BNyCjq3NDYgxKwB+4V1z8AxNgkxxHRMZjftTzTmGadcVP5l99r6NbvA7l11kIhtuWB/hYICi8EpGO052beCQ6+IuSkTPR4HlReIV/1Yf1H8kVSIdZHiHecMEsYDoeehZGkBdwCIvu2CDK+7EomjPKhPxkl1Y8BjABSC0DA10zrNASrANJ/YCJO+BMfXM0yA3Ubv76LNzy/sHRsBT95rvylN930vPIFEvkn1jR02rATI7prKzCAxhNxcN7GUG4YAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nMethod 1: Breaking down by place value\n17 * 23 = 17 * (20 + 3)\n= (17 * 20) + (17 * 3)\n= 340 + 51\n= 391\n\nLet me verify this with another method to be sure.\n\nMethod 2: Traditional multiplication\n 23\n × 17\n ----\nFirst, multiply 23 by 7:\n23 × 7 = 161\n\nThen multiply 23 by 10:\n23 × 10 = 230\n\nAdd them together:\n161 + 230 = 391\n\nBoth methods give me 391, so that's the answer."}}},{"text":"# Calculating 17 × 23\n\nI'll use the distributive property to break this into easier parts:\n\n## Step 1: Break down 23\n23 = 20 + 3\n\nSo: 17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n17 × (20 + 3) = (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**\n\n---\n\n*Verification using standard multiplication:*\n```\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n```\n✓ Confirmed!"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":424,"serverToolUsage":{},"totalTokens":479}}539 1169 +{"metrics":{"latencyMs":6281},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EpAFCnAIERABGAIqQHcwZPA+fT9iP2hMhNrSVLGvxT8O2Y7KwOcfbxxb+KByeUP+SRqfr2/8UxqTASW248OLMpDxvaehM3/cxtPQzYkyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgz5F+MDkFsa40e63l4aDIWgLnAXWBW/1Z59LSIwC+wWh83wunt5hQUDvs9vV8s+63d/4ObbTKJ1f6stcJ+TmAqWyLu3piKGD1Yu3iDSKs0D9y1tbFFehOD6vfp1ANEWlfQZPqln7CFfUfBHyGmbdKr8P7gQuKRkfSy/DSJeoxZtp+0HZkHFNRwo3wCs0hUqPRQZyw22663dmXljRXcsNXMLrYxBHw2OBCjNrM4IIJ/tZ2hL+0vN3DbjfhZtxmgdZ1d1c6ozU0zAAw+PeB04R/yGOLz8nhzhw8TG9/17654jETh3q7cgcp9O3J6J7iIdYsaZHEhOowUVcUWAyUweLUoERblhxVl3dNiF1glU/CklsWCoZJNvszbrOvIJZPj5lBFBQN4Y3Ubr8q4YgUuCbKqiF8pQllMgev2oRK5ewb5n3c+z+9YCWDE7jYpZUiC9fgYV4Az9CzpAFp3l+cdSS7BNyCjq3NDYgxKwB+4V1z8AxNgkxxHRMZjftTzTmGadcVP5l99r6NbvA7l11kIhtuWB/hYICi8EpGO052beCQ6+IuSkTPR4HlReIV/1Yf1H8kVSIdZHiHecMEsYDoeehZGkBdwCIvu2CDK+7EomjPKhPxkl1Y8BjABSC0DA10zrNASrANJ/YCJO+BMfXM0yA3Ubv76LNzy/sHRsBT95rvylN930vPIFEvkn1jR02rATI7prKzCAxhNxcN7GUG4YAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nMethod 1: Breaking down by place value\n17 * 23 = 17 * (20 + 3)\n= (17 * 20) + (17 * 3)\n= 340 + 51\n= 391\n\nLet me verify this with another method to be sure.\n\nMethod 2: Traditional multiplication\n 23\n × 17\n ----\nFirst, multiply 23 by 7:\n23 × 7 = 161\n\nThen multiply 23 by 10:\n23 × 10 = 230\n\nAdd them together:\n161 + 230 = 391\n\nBoth methods give me 391, so that's the answer."}}},{"text":"# Calculating 17 × 23\n\nI'll use the distributive property to break this into easier parts:\n\n## Step 1: Break down 23\n23 = 20 + 3\n\nSo: 17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n17 × (20 + 3) = (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**\n\n---\n\n*Verification using standard multiplication:*\n```\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n```\n✓ Confirmed!"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":424,"serverToolUsage":{},"totalTokens":479}}523 1169 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-120b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 240 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK Content-Length: 1003 Content-Type: application/json Date: Fri, 21 Aug 2026 00:34:14 GMT X-Amzn-Requestid: 48d4d921-6425-4dca-a587-ca638a27ff5f -{"metrics":{"latencyMs":1461},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"User asks to think step by step: compute 17*23. Provide reasoning. Should give multiplication steps. Probably show breakdown: 17*20 + 17*3 = 340 + 51 = 391. Or use distributive property. Provide reasoning explicitly."}}},{"text":"**Step‑by‑step multiplication**\n\n1. **Write the product using the distributive (area) method** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3)\n \\]\n\n2. **Multiply 17 by each part of the sum** \n\n * Multiply by 20: \n \\[\n 17 \\times 20 = 17 \\times 2 \\times 10 = 34 \\times 10 = 340\n \\]\n\n * Multiply by 3: \n \\[\n 17 \\times 3 = 51\n \\]\n\n3. **Add the two partial results together** \n \\[\n 340 + 51 = 391\n \\]\n\n4. **Conclusion** \n\n \\[\n \\boxed{391}\n \\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":240,"serverToolUsage":{},"totalTokens":325}}538 2384 +{"metrics":{"latencyMs":1461},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"User asks to think step by step: compute 17*23. Provide reasoning. Should give multiplication steps. Probably show breakdown: 17*20 + 17*3 = 340 + 51 = 391. Or use distributive property. Provide reasoning explicitly."}}},{"text":"**Step‑by‑step multiplication**\n\n1. **Write the product using the distributive (area) method** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3)\n \\]\n\n2. **Multiply 17 by each part of the sum** \n\n * Multiply by 20: \n \\[\n 17 \\times 20 = 17 \\times 2 \\times 10 = 34 \\times 10 = 340\n \\]\n\n * Multiply by 3: \n \\[\n 17 \\times 3 = 51\n \\]\n\n3. **Add the two partial results together** \n \\[\n 340 + 51 = 391\n \\]\n\n4. **Conclusion** \n\n \\[\n \\boxed{391}\n \\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":240,"serverToolUsage":{},"totalTokens":325}}522 2384 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-20b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 240 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK Content-Length: 2218 Content-Type: application/json Date: Fri, 21 Aug 2026 00:34:19 GMT X-Amzn-Requestid: 20766bc4-acc7-49d1-a9b9-0e359e325219 -{"metrics":{"latencyMs":3272},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" So we need to compute 17 * 23. But the user explicitly wants step by step reasoning, perhaps by expansion: (17 * 20) + (17 * 3) = 340 + 51 = 391. Or using algorithm / decomposition. We can show detailed reasoning: Write 17 * 23 = (10+7)*(20+3) = 10*20 + 10*3 + 7*20 + 7*3 = 200 + 30 + 140 + 21 = 391. Or 23*17 = 23*10 + 23*7 = 230 + 161 = 391. Provide explanation.\n\nWe then show step-by-step in plain text. We'll also mention perhaps cross-check: 17 * 23 = 391. So we should deliver final answer: 391. Also show the steps.\n\nThus the best answer: \"17×23 = (17×20)+(17×3) = 340+51 = 391.\" Provide full reasoning.\n\nWe can note that 17x23 = (20+3)*(10+7)... etc. Provide answer.\n\nOk finalize."}}},{"text":"Sure! Let’s break the multiplication down into simpler pieces so you can see exactly how we get the answer.\n\n### 1. Use the distributive property\nWe can write each number as a sum of simpler numbers:\n\n- \\(17 = 10 + 7\\)\n- \\(23 = 20 + 3\\)\n\nNow multiply \\((10 + 7)\\) by \\((20 + 3)\\):\n\n\\[\n(10 + 7)(20 + 3)\n\\]\n\n### 2. Expand the product\nApply the distributive law (multiplying each part of the first parenthesis by each part of the second):\n\n\\[\n= 10 \\times 20 \\;+\\; 10 \\times 3 \\;+\\; 7 \\times 20 \\;+\\; 7 \\times 3\n\\]\n\n### 3. Compute each small product\n- \\(10 \\times 20 = 200\\)\n- \\(10 \\times 3 = 30\\)\n- \\(7 \\times 20 = 140\\)\n- \\(7 \\times 3 = 21\\)\n\n### 4. Add the results together\n\\[\n200 \\;+\\; 30 \\;+\\; 140 \\;+\\; 21 = 200 + 30 = 230,\\;\n230 + 140 = 370,\\;\n370 + 21 = 391\n\\]\n\n### 5. Final answer\n\\[\n17 \\times 23 = 391\n\\]\n\n---\n\nYou can also check quickly by using the “split and add” trick:\n\n- \\(23 \\times 17 = 23 \\times (10 + 7) = 23 \\times 10 + 23 \\times 7\\)\n- \\(23 \\times 10 = 230\\)\n- \\(23 \\times 7 = 161\\)\n- Sum: \\(230 + 161 = 391\\)\n\nEither way, the result is **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":678,"serverToolUsage":{},"totalTokens":763}}539 2852 +{"metrics":{"latencyMs":3272},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" So we need to compute 17 * 23. But the user explicitly wants step by step reasoning, perhaps by expansion: (17 * 20) + (17 * 3) = 340 + 51 = 391. Or using algorithm / decomposition. We can show detailed reasoning: Write 17 * 23 = (10+7)*(20+3) = 10*20 + 10*3 + 7*20 + 7*3 = 200 + 30 + 140 + 21 = 391. Or 23*17 = 23*10 + 23*7 = 230 + 161 = 391. Provide explanation.\n\nWe then show step-by-step in plain text. We'll also mention perhaps cross-check: 17 * 23 = 391. So we should deliver final answer: 391. Also show the steps.\n\nThus the best answer: \"17×23 = (17×20)+(17×3) = 340+51 = 391.\" Provide full reasoning.\n\nWe can note that 17x23 = (20+3)*(10+7)... etc. Provide answer.\n\nOk finalize."}}},{"text":"Sure! Let’s break the multiplication down into simpler pieces so you can see exactly how we get the answer.\n\n### 1. Use the distributive property\nWe can write each number as a sum of simpler numbers:\n\n- \\(17 = 10 + 7\\)\n- \\(23 = 20 + 3\\)\n\nNow multiply \\((10 + 7)\\) by \\((20 + 3)\\):\n\n\\[\n(10 + 7)(20 + 3)\n\\]\n\n### 2. Expand the product\nApply the distributive law (multiplying each part of the first parenthesis by each part of the second):\n\n\\[\n= 10 \\times 20 \\;+\\; 10 \\times 3 \\;+\\; 7 \\times 20 \\;+\\; 7 \\times 3\n\\]\n\n### 3. Compute each small product\n- \\(10 \\times 20 = 200\\)\n- \\(10 \\times 3 = 30\\)\n- \\(7 \\times 20 = 140\\)\n- \\(7 \\times 3 = 21\\)\n\n### 4. Add the results together\n\\[\n200 \\;+\\; 30 \\;+\\; 140 \\;+\\; 21 = 200 + 30 = 230,\\;\n230 + 140 = 370,\\;\n370 + 21 = 391\n\\]\n\n### 5. Final answer\n\\[\n17 \\times 23 = 391\n\\]\n\n---\n\nYou can also check quickly by using the “split and add” trick:\n\n- \\(23 \\times 17 = 23 \\times (10 + 7) = 23 \\times 10 + 23 \\times 7\\)\n- \\(23 \\times 10 = 230\\)\n- \\(23 \\times 7 = 161\\)\n- Sum: \\(230 + 161 = 391\\)\n\nEither way, the result is **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":678,"serverToolUsage":{},"totalTokens":763}}523 2852 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/moonshot.kimi-k2-thinking/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 240 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK Content-Length: 2686 Content-Type: application/json Date: Fri, 21 Aug 2026 00:34:25 GMT X-Amzn-Requestid: 0dbfee55-c500-4268-b48b-a54e8b5ca5a5 -{"metrics":{"latencyMs":4919},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":" The user asks for 17 * 23 and wants me to show my reasoning process step by step.\n\nLet me think about how to multiply 17 by 23. I can use several methods:\n\n1. Standard multiplication algorithm\n2. Breaking down numbers (distributive property)\n3. Using the difference of squares or other algebraic identities\n4. Mental math tricks\n\nLet me try the distributive property approach first, as it's easy to show step-by-step:\n\n17 * 23 = 17 * (20 + 3)\n = 17 * 20 + 17 * 3\n = 340 + 51\n = 391\n\nAlternatively, I could break it down differently:\n17 * 23 = (10 + 7) * 23\n = 10 * 23 + 7 * 23\n = 230 + 161\n = 391\n\nOr using the standard algorithm:\n 17\n x 23\n ----\n 51 (17 * 3)\n 340 (17 * 20, shifted)\n ----\n 391\n\nI could also use the difference of squares method:\n17 * 23 = (20 - 3) * (20 + 3)\n = 20² - 3²\n = 400 - 9\n = 391\n\nThis is neat because 17 and 23 are symmetric around 20.\n\nLet me present the solution using the distributive property method as it's straightforward and demonstrates clear reasoning. I'll also mention the difference of squares method as an alternative elegant solution.\n\nStep-by-step reasoning:\n1. Recognize that 23 can be broken into 20 + 3\n2. Apply distributive property: 17 × 23 = 17 × (20 + 3)\n3. Multiply 17 by 20: 17 × 20 = 340\n4. Multiply 17 by 3: 17 × 3 = 51\n5. Add the results: 340 + 51 = 391\n\nI should show this clearly."}}},{"text":" Let me break down the multiplication 17 × 23 step by step:\n\n**Method 1: Distributive Property (Breaking down 23)**\n\n1. First, I'll split 23 into easier numbers: 23 = 20 + 3\n2. Now multiply 17 by each part:\n - 17 × 20 = 340 (since 17 × 2 = 34, then add a zero)\n - 17 × 3 = 51 (since 10 × 3 = 30 and 7 × 3 = 21, then 30 + 21 = 51)\n3. Add the partial results: 340 + 51 = 391\n\n**Method 2: Alternative Breakdown (Breaking down 17)**\n\n1. Split 17 into: 17 = 10 + 7\n2. Multiply each part by 23:\n - 10 × 23 = 230\n - 7 × 23 = 161 (since 7 × 20 = 140 and 7 × 3 = 21, then 140 + 21 = 161)\n3. Add the partial results: 230 + 161 = 391\n\n**Method 3: Difference of Squares (Elegant trick)**\n\n1. Notice that 17 and 23 are equally spaced around 20 (both are 3 away)\n2. Rewrite as: (20 - 3) × (20 + 3)\n3. This fits the pattern (a - b)(a + b) = a² - b²\n4. Calculate: 20² - 3² = 400 - 9 = 391\n\nAll three methods give the same result: **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":25,"outputTokens":788,"serverToolUsage":{},"totalTokens":813}}534 3780 +{"metrics":{"latencyMs":4919},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":" The user asks for 17 * 23 and wants me to show my reasoning process step by step.\n\nLet me think about how to multiply 17 by 23. I can use several methods:\n\n1. Standard multiplication algorithm\n2. Breaking down numbers (distributive property)\n3. Using the difference of squares or other algebraic identities\n4. Mental math tricks\n\nLet me try the distributive property approach first, as it's easy to show step-by-step:\n\n17 * 23 = 17 * (20 + 3)\n = 17 * 20 + 17 * 3\n = 340 + 51\n = 391\n\nAlternatively, I could break it down differently:\n17 * 23 = (10 + 7) * 23\n = 10 * 23 + 7 * 23\n = 230 + 161\n = 391\n\nOr using the standard algorithm:\n 17\n x 23\n ----\n 51 (17 * 3)\n 340 (17 * 20, shifted)\n ----\n 391\n\nI could also use the difference of squares method:\n17 * 23 = (20 - 3) * (20 + 3)\n = 20² - 3²\n = 400 - 9\n = 391\n\nThis is neat because 17 and 23 are symmetric around 20.\n\nLet me present the solution using the distributive property method as it's straightforward and demonstrates clear reasoning. I'll also mention the difference of squares method as an alternative elegant solution.\n\nStep-by-step reasoning:\n1. Recognize that 23 can be broken into 20 + 3\n2. Apply distributive property: 17 × 23 = 17 × (20 + 3)\n3. Multiply 17 by 20: 17 × 20 = 340\n4. Multiply 17 by 3: 17 × 3 = 51\n5. Add the results: 340 + 51 = 391\n\nI should show this clearly."}}},{"text":" Let me break down the multiplication 17 × 23 step by step:\n\n**Method 1: Distributive Property (Breaking down 23)**\n\n1. First, I'll split 23 into easier numbers: 23 = 20 + 3\n2. Now multiply 17 by each part:\n - 17 × 20 = 340 (since 17 × 2 = 34, then add a zero)\n - 17 × 3 = 51 (since 10 × 3 = 30 and 7 × 3 = 21, then 30 + 21 = 51)\n3. Add the partial results: 340 + 51 = 391\n\n**Method 2: Alternative Breakdown (Breaking down 17)**\n\n1. Split 17 into: 17 = 10 + 7\n2. Multiply each part by 23:\n - 10 × 23 = 230\n - 7 × 23 = 161 (since 7 × 20 = 140 and 7 × 3 = 21, then 140 + 21 = 161)\n3. Add the partial results: 230 + 161 = 391\n\n**Method 3: Difference of Squares (Elegant trick)**\n\n1. Notice that 17 and 23 are equally spaced around 20 (both are 3 away)\n2. Rewrite as: (20 - 3) × (20 + 3)\n3. This fits the pattern (a - b)(a + b) = a² - b²\n4. Calculate: 20² - 3² = 400 - 9 = 391\n\nAll three methods give the same result: **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":25,"outputTokens":788,"serverToolUsage":{},"totalTokens":813}}518 3780 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/minimax.minimax-m2.5/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 240 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK Content-Length: 3614 Content-Type: application/json Date: Fri, 21 Aug 2026 00:34:37 GMT X-Amzn-Requestid: 89684ab9-0175-4918-81d8-c780ad91c129 -{"metrics":{"latencyMs":10442},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We are told: \"Think step by step: What is 17 * 23? Show your reasoning process.\" The user wants a step-by-step multiplication of 17 * 23. They want reasoning: we need to compute 17 * 23. That's 391. 17 * 20 = 340. 17 * 3 = 51 gives sum 391. We can show mental multiplication, or use the standard algorithm (multiplying 23 by 17). Also possible using distributive property: 23 * (10 + 7) = 230 + 161 = 391. Or using 17 *23 = 23*17 = (20+3)*(17) = 20*17 +3*17 = 340 + 51 = 391. Provide explanation. We can expand and compute. I will do that. The user wants \"Show your reasoning process.\" So we will demonstrate using step by step:\n\n- Represent 17 = 10 + 7. Multiply 23 by each part:\n\n23 × 10 = 230.\n23 × 7 = 23×5 + 23×2 = 115 + 46 = 161. Add: 230+161 = 391.\n\nAlternatively use 23 = 20 + 3: 17×20 = 340, 17×3 = 51 → 340+51 = 391.\n\nThus the product is 391.\n\nThus answer: 391.\n\nProbably produce answer, mention reasoning.\n\nThus final answer: 391 with reasoning. We'll include step by step.\n\nBut let's verify: 17 * 23: 17 * 20 = 340; 17 * 3 = 51; sum = 391. Yes.\n\nWe can optionally show a standard long multiplication:\n\n23 × 17\n- 23×7 = 161 -> line: 161\n- 23×10 = 230 -> line: shift one place (like zero at end) -> 2300? Actually it's 23×10 = 230, but we align in the digit with tens: 230 → 2300? Wait, 23×10 = 230 (the zero is at one's place). Then sum: 161 + 230 = 391. However typical method: line1: 23×7 => 161. Then line2: 23×10 => 230 (aligned as 2300? Actually we multiply by 1 in the tens place, so we put a 0 at the right of the line: 2300? Let's see: standard approach: 23 * 17: Multiply 23 by 7 = 161, then multiply 23 by 1 (the tens digit, which is actually 10, so yields 230). Then write the 230 shifted one place to the left: 2300? Actually it's 23 × 10 = 230. Then shift it's one place to the left: 23 * 10 is 23 written with a zero, i.e., 230, but in product we treat as 23 * (1*10), thus we put it as 230. Then we add: 161 + 230 = 391. Wait why not 2300? Let's reconsider: Multiply by 17 = multiply by 7 (ones) and multiply by 1 (tens). But we need to multiply by the tens place: 1 corresponds to 10 (since it's actually the tens digit of 17). So you multiply 23 by 10 => 230, but you also need to shift by one place: i.e., write as 230. Actually typical long multiplication:\n\n 2 3\n × 1 7\n ------\n 1 6 1 (23×7)\n 2 3 0 (23×10)\n ------\n 3 9 1\n\nYes that's exactly: line1 is 23×7 = 161; line2 is 23×10 = 230 (since you multiply 23 by the digit 1 in the tens place, you shift left one position, i.e., you write a zero). Then sum = 391.\n\nThus answer 391.\n\nWe can also do it as 23*17 = (20+3)*(17) = 20*17 +3*17 = 340+51=391.\n\nThus final answer: 391.\n\nNow we produce final.\n"}}},{"text":"\n\n**Step‑by‑step reasoning**\n\n1. **Break one factor into tens and units** \n Write 17 as \\(10 + 7\\).\n\n2. **Multiply 23 by each part** \n\n - Multiply by the units (7): \n \\(23 \\times 7 = 161\\) \n\n - Multiply by the tens (10): \n \\(23 \\times 10 = 230\\)\n\n3. **Add the two partial products** \n\n \\[\n 161 + 230 = 391\n \\]\n\n4. **Result** \n\n\\[\n\\boxed{391}\n\\]\n\n(You can verify the same result using the other breakdown \\(23 = 20 + 3\\): \n\\(17 \\times 20 = 340\\) and \\(17 \\times 3 = 51\\); \\(340 + 51 = 391\\).)"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":1105,"serverToolUsage":{},"totalTokens":1161}}534 3653 +{"metrics":{"latencyMs":10442},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We are told: \"Think step by step: What is 17 * 23? Show your reasoning process.\" The user wants a step-by-step multiplication of 17 * 23. They want reasoning: we need to compute 17 * 23. That's 391. 17 * 20 = 340. 17 * 3 = 51 gives sum 391. We can show mental multiplication, or use the standard algorithm (multiplying 23 by 17). Also possible using distributive property: 23 * (10 + 7) = 230 + 161 = 391. Or using 17 *23 = 23*17 = (20+3)*(17) = 20*17 +3*17 = 340 + 51 = 391. Provide explanation. We can expand and compute. I will do that. The user wants \"Show your reasoning process.\" So we will demonstrate using step by step:\n\n- Represent 17 = 10 + 7. Multiply 23 by each part:\n\n23 × 10 = 230.\n23 × 7 = 23×5 + 23×2 = 115 + 46 = 161. Add: 230+161 = 391.\n\nAlternatively use 23 = 20 + 3: 17×20 = 340, 17×3 = 51 → 340+51 = 391.\n\nThus the product is 391.\n\nThus answer: 391.\n\nProbably produce answer, mention reasoning.\n\nThus final answer: 391 with reasoning. We'll include step by step.\n\nBut let's verify: 17 * 23: 17 * 20 = 340; 17 * 3 = 51; sum = 391. Yes.\n\nWe can optionally show a standard long multiplication:\n\n23 × 17\n- 23×7 = 161 -> line: 161\n- 23×10 = 230 -> line: shift one place (like zero at end) -> 2300? Actually it's 23×10 = 230, but we align in the digit with tens: 230 → 2300? Wait, 23×10 = 230 (the zero is at one's place). Then sum: 161 + 230 = 391. However typical method: line1: 23×7 => 161. Then line2: 23×10 => 230 (aligned as 2300? Actually we multiply by 1 in the tens place, so we put a 0 at the right of the line: 2300? Let's see: standard approach: 23 * 17: Multiply 23 by 7 = 161, then multiply 23 by 1 (the tens digit, which is actually 10, so yields 230). Then write the 230 shifted one place to the left: 2300? Actually it's 23 × 10 = 230. Then shift it's one place to the left: 23 * 10 is 23 written with a zero, i.e., 230, but in product we treat as 23 * (1*10), thus we put it as 230. Then we add: 161 + 230 = 391. Wait why not 2300? Let's reconsider: Multiply by 17 = multiply by 7 (ones) and multiply by 1 (tens). But we need to multiply by the tens place: 1 corresponds to 10 (since it's actually the tens digit of 17). So you multiply 23 by 10 => 230, but you also need to shift by one place: i.e., write as 230. Actually typical long multiplication:\n\n 2 3\n × 1 7\n ------\n 1 6 1 (23×7)\n 2 3 0 (23×10)\n ------\n 3 9 1\n\nYes that's exactly: line1 is 23×7 = 161; line2 is 23×10 = 230 (since you multiply 23 by the digit 1 in the tens place, you shift left one position, i.e., you write a zero). Then sum = 391.\n\nThus answer 391.\n\nWe can also do it as 23*17 = (20+3)*(17) = 20*17 +3*17 = 340+51=391.\n\nThus final answer: 391.\n\nNow we produce final.\n"}}},{"text":"\n\n**Step‑by‑step reasoning**\n\n1. **Break one factor into tens and units** \n Write 17 as \\(10 + 7\\).\n\n2. **Multiply 23 by each part** \n\n - Multiply by the units (7): \n \\(23 \\times 7 = 161\\) \n\n - Multiply by the tens (10): \n \\(23 \\times 10 = 230\\)\n\n3. **Add the two partial products** \n\n \\[\n 161 + 230 = 391\n \\]\n\n4. **Result** \n\n\\[\n\\boxed{391}\n\\]\n\n(You can verify the same result using the other breakdown \\(23 = 20 + 3\\): \n\\(17 \\times 20 = 340\\) and \\(17 \\times 3 = 51\\); \\(340 + 51 = 391\\).)"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":1105,"serverToolUsage":{},"totalTokens":1161}}518 3653 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/minimax.minimax-m2.1/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 256 +Content-Length: 240 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK Content-Length: 3487 Content-Type: application/json Date: Fri, 21 Aug 2026 00:34:45 GMT diff --git a/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr index 7c9e9f082ebb69b67da64020d1c7317e708447f5..f4c0765337751fb78ffec61b53bf50ba4ef961b6 100644 GIT binary patch delta 179 zcmX?kj_v1JwuUW?7i8Ft4HQgG4b7%IWHQ=JKV`zmKV3 Date: Sat, 29 Aug 2026 17:39:45 +0300 Subject: [PATCH 209/618] fix(bedrock): stop TestLLM from calling AWS when there is nothing to replay TestLLM never used httprr at all: it built a live client and gated itself on AWS_REGION being set. But the region is also required to replay the recorded tests, so the documented offline command -- fake keys plus a region -- sent this one test to the real endpoint every run, where it failed 403. It has been failing on origin/main-vxcontrol the same way, so it is older than this branch and was miscounted as a branch defect. It now goes through httprr like its neighbours and skips when there is no cassette and no recording was asked for, naming the flag that records one. With -httprecord=. and real credentials it still reaches AWS and writes the recording the package is missing. Co-Authored-By: Claude Opus 5 --- llms/bedrock/llmtest_test.go | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/llms/bedrock/llmtest_test.go b/llms/bedrock/llmtest_test.go index 830044c6f..030d7d9e6 100644 --- a/llms/bedrock/llmtest_test.go +++ b/llms/bedrock/llmtest_test.go @@ -1,20 +1,39 @@ -package bedrock +package bedrock_test import ( + "net/http" "os" + "path/filepath" "testing" + "github.com/vxcontrol/langchaingo/internal/httprr" + "github.com/vxcontrol/langchaingo/llms/bedrock" "github.com/vxcontrol/langchaingo/testing/llmtest" ) func TestLLM(t *testing.T) { - if os.Getenv("AWS_REGION") == "" { - t.Skip("AWS_REGION not set") + cassette := filepath.Join("testdata", "TestLLM.httprr") + recording, err := httprr.Recording(cassette) + if err != nil { + t.Fatal(err) + } + if _, statErr := os.Stat(cassette); statErr != nil && !recording { + t.Skip("no httprr recording for TestLLM; re-run with -httprecord=. and real AWS credentials") + } + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } + + client, err := setUpTestWithTransport(rr) + if err != nil { + t.Fatal(err) } - llm, err := New( - WithModel(ModelAnthropicClaudeHaiku45), - ) + llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithModel(bedrock.ModelAnthropicClaudeHaiku45)) if err != nil { t.Fatalf("Failed to create Bedrock LLM: %v", err) } From 0d9238cd315074b7738e5fde3cdaf485a396a945 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:27:16 +0300 Subject: [PATCH 210/618] fix(structuredoutput): stop demanding a closed condition, which rewrites the schema The closure rule walked into if, then, else, not and propertyNames, so a legal conditional schema whose root is closed was rejected outright. Adding the additionalProperties:false it asked for does not fix the schema -- it changes what the schema accepts, measured three ways: closed "if" -> the condition stops matching the instances it was written for, so {"kind":"a","y":"present"} passes despite missing the x that then requires closed "then" -> an instance the root allows is rejected closed "not" -> the excluded shape is no longer excluded propertyNames applies to property names, never to an object, so the rule has nothing to say there either. The rule still reaches every keyword that does describe the instance: properties, $defs, items, anyOf, oneOf, allOf, contains and the unevaluated pair -- widening the exemption to contains turns six subtests red. Co-Authored-By: Claude Opus 5 --- llms/structuredoutput/schema.go | 9 +++ llms/structuredoutput/schema_test.go | 86 +++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/llms/structuredoutput/schema.go b/llms/structuredoutput/schema.go index ffaf6a941..a3c5b3ad0 100644 --- a/llms/structuredoutput/schema.go +++ b/llms/structuredoutput/schema.go @@ -3,6 +3,7 @@ package structuredoutput import ( "encoding/json" "fmt" + "slices" "github.com/vxcontrol/langchaingo/llms" ) @@ -28,8 +29,13 @@ var ( "not", "if", "then", "else", "contains", "propertyNames", "unevaluatedItems", "unevaluatedProperties", } + closureExemptKeywords = []string{"not", "if", "then", "else", "propertyNames"} ) +func exemptFromClosure(keyword string) bool { + return slices.Contains(closureExemptKeywords, keyword) +} + func requireClosed(node any) error { m, ok := node.(map[string]any) if !ok { @@ -54,6 +60,9 @@ func requireClosed(node any) error { } } for _, key := range schemaValueKeywords { + if exemptFromClosure(key) { + continue + } if err := requireClosedValue(m[key]); err != nil { return err } diff --git a/llms/structuredoutput/schema_test.go b/llms/structuredoutput/schema_test.go index ca2a8b3b2..41ccb6911 100644 --- a/llms/structuredoutput/schema_test.go +++ b/llms/structuredoutput/schema_test.go @@ -55,8 +55,7 @@ func TestRequireClosedObjectsReachesEveryKeywordThatHoldsASchema(t *testing.T) { open := `{"type":"object","properties":{"x":{"type":"string"}}}` for _, keyword := range []string{ - "not", "if", "then", "else", "contains", "propertyNames", - "unevaluatedItems", "unevaluatedProperties", + "contains", "unevaluatedItems", "unevaluatedProperties", } { t.Run(keyword, func(t *testing.T) { t.Parallel() @@ -77,3 +76,86 @@ func TestRequireClosedObjectsReachesEveryKeywordThatHoldsASchema(t *testing.T) { } }) } + +func TestAConditionalSchemaIsNotAskedToCloseItsCondition(t *testing.T) { + t.Parallel() + + for _, keyword := range []string{"not", "if", "then", "else", "propertyNames"} { + t.Run(keyword, func(t *testing.T) { + t.Parallel() + + schema := []byte(`{"type":"object","additionalProperties":false,` + + `"properties":{"kind":{"type":"string"}},"` + keyword + + `":{"type":"object","properties":{"kind":{"const":"a"}}}}`) + if err := structuredoutput.RequireClosedObjects(schema); err != nil { + t.Fatalf("closing a subschema under %q rewrites what the schema accepts: %v", keyword, err) + } + }) + } +} + +func TestClosingAConditionRewritesWhatTheSchemaAccepts(t *testing.T) { + t.Parallel() + + base := `{"type":"object","additionalProperties":false,` + + `"properties":{"kind":{"type":"string"},"x":{"type":"string"},"y":{"type":"string"}},` + + t.Run("a closed if stops matching what the condition was written for", func(t *testing.T) { + t.Parallel() + instance := `{"kind":"a","y":"present"}` // matches the condition, missing the required x + + open := mustCompile(t, base+`"if":{"properties":{"kind":{"const":"a"}}},"then":{"required":["x"]}}`) + if err := open.ValidateText(instance); err == nil { + t.Fatal("the condition holds, so the missing x must be rejected") + } + + closed := mustCompile(t, base+ + `"if":{"properties":{"kind":{"const":"a"}},"additionalProperties":false},"then":{"required":["x"]}}`) + if err := closed.ValidateText(instance); err != nil { + t.Fatalf("unexpected: %v", err) + } + }) + + t.Run("a closed then forbids what the root allows", func(t *testing.T) { + t.Parallel() + instance := `{"kind":"a","x":"present","y":"allowed by the root"}` + + open := mustCompile(t, base+`"if":{"properties":{"kind":{"const":"a"}}},`+ + `"then":{"type":"object","properties":{"x":{"type":"string"}},"required":["x"]}}`) + if err := open.ValidateText(instance); err != nil { + t.Fatalf("the instance satisfies the schema: %v", err) + } + + closed := mustCompile(t, base+`"if":{"properties":{"kind":{"const":"a"}}},`+ + `"then":{"type":"object","additionalProperties":false,`+ + `"properties":{"x":{"type":"string"}},"required":["x"]}}`) + if err := closed.ValidateText(instance); err == nil { + t.Fatal("closing then rejected an instance the root allows") + } + }) + + t.Run("a closed not narrows what is excluded", func(t *testing.T) { + t.Parallel() + instance := `{"kind":"forbidden","y":"v"}` + + open := mustCompile(t, base+`"not":{"properties":{"kind":{"const":"forbidden"}}}}`) + if err := open.ValidateText(instance); err == nil { + t.Fatal("the excluded shape must be rejected") + } + + closed := mustCompile(t, base+`"not":{"additionalProperties":false,`+ + `"properties":{"kind":{"const":"forbidden"}}}}`) + if err := closed.ValidateText(instance); err != nil { + t.Fatalf("unexpected: %v", err) + } + }) +} + +func mustCompile(t *testing.T, schema string) *structuredoutput.Compiled { + t.Helper() + c, err := structuredoutput.Compile(json.RawMessage(schema)) + if err != nil { + t.Fatalf("compile: %v", err) + } + return c +} From 31dbf42e97fc146e96f7653e60629a1c9436a355 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:29:39 +0300 Subject: [PATCH 211/618] fix(openai): raise the answer limit when the budget floor outgrows it Three doors already pass the thinking budget through ClaudeMaxTokensForBudget so the answer still has room once the budget is spent; the openai door raised the budget to the vendor floor and left the limit alone. WithMaxTokens(512) plus WithReasoning(None, 100) on a budget-thinking Claude sent max_completion_tokens 512 beside reasoning.max_tokens 1024 -- a budget the answer limit cannot cover. Both spellings of the limit are raised, since the door picks between max_tokens and max_completion_tokens by model generation. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 14 ++++++++--- llms/openai/reasoning_wire_test.go | 40 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index f13d2cedc..22a037c1c 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -357,9 +357,9 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) // using modern reasoning format if o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { - req.Reasoning = &openaiclient.ReasoningOptions{ - MaxTokens: reasoning.ClaudeClampBudget(model, reasoningTokens), - } + budget := reasoning.ClaudeClampBudget(model, reasoningTokens) + req.Reasoning = &openaiclient.ReasoningOptions{MaxTokens: budget} + o.raiseAnswerLimitForBudget(req, budget) } else if sendsEffort { req.Reasoning = &openaiclient.ReasoningOptions{ Effort: reasoningEffort, @@ -368,6 +368,14 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) return wireEffortOf(sendsEffort, reasoningEffort), nil } +func (o *LLM) raiseAnswerLimitForBudget(req *openaiclient.ChatRequest, budget int) { + for _, limit := range []*int{req.MaxCompletionTokens, req.MaxTokens} { + if limit != nil && *limit > 0 { + *limit = reasoning.ClaudeMaxTokensForBudget(budget, *limit) + } + } +} + // setReasoningOff sends the model's explicit disable token so a reasoning model // runs as a plain completion; a model whose thinking cannot be disabled returns // a typed error. diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 48eeebec7..896c5658f 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -44,6 +44,35 @@ func sendModernReasoningForModel(t *testing.T, model string, effort llms.Reasoni return body } +func sendModernReasoningBody(t *testing.T, model string, effort llms.ReasoningEffort, tokens, maxTokens int) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model), + WithModernReasoningFormat(), WithUsingReasoningMaxTokens()) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(effort, tokens), llms.WithMaxTokens(maxTokens)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + func TestModernReasoningSendsNoBudgetItCannotCompute(t *testing.T) { t.Parallel() @@ -173,3 +202,14 @@ func TestBothDeepSeekReasonerNamesTurnThinkingOffTheSameWay(t *testing.T) { } } } + +func TestABudgetLargerThanTheAnswerLimitRaisesTheLimit(t *testing.T) { + body := sendModernReasoningBody(t, "anthropic/claude-opus-4-5", llms.ReasoningNone, 100, 512) + + if !strings.Contains(body, `"max_tokens":1024`) && !strings.Contains(body, `"max_completion_tokens":1024`) { + t.Fatalf("the floor raised the budget to 1024, so the answer limit must follow: %s", body) + } + if strings.Contains(body, `"max_completion_tokens":512`) || strings.Contains(body, `"max_tokens":512`) { + t.Fatalf("a 512-token answer limit leaves no room once a 1024-token budget is spent: %s", body) + } +} From 33eda7a32d5adbdb606d770df31d2dff89354ccd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:32:08 +0300 Subject: [PATCH 212/618] fix(huggingface): close the callback span this door opened The door called HandleLLMGenerateContentStart and, on the two error paths, HandleLLMError -- but never HandleLLMGenerateContentEnd, so an answered call left the tracer span open forever. Eight other doors close the pair with one deferred handler; this one now does too, emitting exactly one closing callback either way. Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm.go | 20 ++++++++-------- llms/huggingface/truncation_test.go | 37 +++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index b713e65ac..37c768a0d 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -31,10 +31,16 @@ func (o *LLM) Call(ctx context.Context, prompt string, options ...llms.CallOptio } // GenerateContent implements the Model interface. -func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageContent, options ...llms.CallOption) (*llms.ContentResponse, error) { //nolint: lll, cyclop, whitespace - +func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageContent, options ...llms.CallOption) (resp *llms.ContentResponse, err error) { //nolint:lll,cyclop,nonamedreturns if o.CallbacksHandler != nil { o.CallbacksHandler.HandleLLMGenerateContentStart(ctx, messages) + defer func() { + if err != nil { + o.CallbacksHandler.HandleLLMError(ctx, err) + } else { + o.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, resp) + } + }() } model := defaultModel @@ -59,13 +65,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten Seed: opts.GetSeed(), }) if err != nil { - if o.CallbacksHandler != nil { - o.CallbacksHandler.HandleLLMError(ctx, err) - } return nil, err } - resp := &llms.ContentResponse{ + resp = &llms.ContentResponse{ Choices: []*llms.ContentChoice{ { Content: result.Text, @@ -74,10 +77,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten }, }, } - if err := llms.CheckTruncation(resp, *opts); err != nil { - if o.CallbacksHandler != nil { - o.CallbacksHandler.HandleLLMError(ctx, err) - } + if err = llms.CheckTruncation(resp, *opts); err != nil { return resp, err } return resp, nil diff --git a/llms/huggingface/truncation_test.go b/llms/huggingface/truncation_test.go index 45850ba30..a4227dba1 100644 --- a/llms/huggingface/truncation_test.go +++ b/llms/huggingface/truncation_test.go @@ -134,6 +134,43 @@ func TestFailOnTruncationOnTheInferenceDoor(t *testing.T) { type recordingCallbacks struct { callbacks.SimpleHandler errors int + starts int + ends int } func (h *recordingCallbacks) HandleLLMError(context.Context, error) { h.errors++ } + +func (h *recordingCallbacks) HandleLLMGenerateContentStart(context.Context, []llms.MessageContent) { + h.starts++ +} + +func (h *recordingCallbacks) HandleLLMGenerateContentEnd(context.Context, *llms.ContentResponse) { + h.ends++ +} + +func TestAnAnsweredCallClosesTheCallbackPair(t *testing.T) { + t.Parallel() + + srv, _ := serveJSON(t, `[{"generated_text":"sixty rooms are free","details":{"finish_reason":"stop"}}]`) + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("m")) + if err != nil { + t.Fatalf("New() error: %v", err) + } + handler := &recordingCallbacks{} + llm.CallbacksHandler = handler + + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + + if handler.starts != 1 { + t.Fatalf("HandleLLMGenerateContentStart calls = %d, want 1", handler.starts) + } + if handler.ends != 1 { + t.Fatalf("an answered call must close the span it opened: End calls = %d, want 1", handler.ends) + } + if handler.errors != 0 { + t.Fatalf("HandleLLMError calls = %d, want 0", handler.errors) + } +} From 7ee9de255d87376117a33ced49993b705dc079c1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:35:19 +0300 Subject: [PATCH 213/618] fix(bedrock): report the same counter type on every family d9ff7dcf widened the token counters to int on the two Claude paths, leaving nova, amazon, meta and ai21 handing back the int32 fields of their own response structs. A caller asserting GenerationInfo["PromptTokens"].(int) -- the shape the Claude doors document -- got ok == false on those four. The ai21 Jamba branch had a second gap: it reported only its raw input_tokens/output_tokens and never the standardized names at all, so the counters were missing rather than mistyped. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_ai21.go | 19 ++++--- .../internal/bedrockclient/provider_amazon.go | 4 +- .../internal/bedrockclient/provider_meta.go | 4 +- .../internal/bedrockclient/provider_nova.go | 4 +- llms/bedrock/provider_families_test.go | 49 ++++++++++++------- 5 files changed, 48 insertions(+), 32 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index 3d2c49ff5..7461c268e 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -219,12 +219,12 @@ func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, mo Truncated: llms.IsTruncated(completion.FinishReason.Reason), GenerationInfo: map[string]any{ "id": output.ID, - "input_tokens": int32(len(output.Prompt.Tokens)), - "output_tokens": int32(len(completion.Data.Tokens)), + "input_tokens": len(output.Prompt.Tokens), + "output_tokens": len(completion.Data.Tokens), // Standardized field names for cross-provider compatibility - "PromptTokens": int32(len(output.Prompt.Tokens)), - "CompletionTokens": int32(len(completion.Data.Tokens)), - "TotalTokens": int32(len(output.Prompt.Tokens)) + int32(len(completion.Data.Tokens)), + "PromptTokens": len(output.Prompt.Tokens), + "CompletionTokens": len(completion.Data.Tokens), + "TotalTokens": len(output.Prompt.Tokens) + len(completion.Data.Tokens), }, } } @@ -296,9 +296,12 @@ func createAi21JambaCompletion(ctx context.Context, client *bedrockruntime.Clien StopReason: choice.FinishReason, Truncated: llms.IsTruncated(choice.FinishReason), GenerationInfo: map[string]any{ - "id": output.ID, - "input_tokens": output.Usage.PromptTokens, - "output_tokens": output.Usage.CompletionTokens, + "id": output.ID, + "input_tokens": int(output.Usage.PromptTokens), + "output_tokens": int(output.Usage.CompletionTokens), + "PromptTokens": int(output.Usage.PromptTokens), + "CompletionTokens": int(output.Usage.CompletionTokens), + "TotalTokens": int(output.Usage.TotalTokens), }, } } diff --git a/llms/bedrock/internal/bedrockclient/provider_amazon.go b/llms/bedrock/internal/bedrockclient/provider_amazon.go index 46775aa43..877baf070 100644 --- a/llms/bedrock/internal/bedrockclient/provider_amazon.go +++ b/llms/bedrock/internal/bedrockclient/provider_amazon.go @@ -136,8 +136,8 @@ func createAmazonCompletion(ctx context.Context, "input_tokens": output.InputTextTokenCount, "output_tokens": result.TokenCount, // Standardized field names for cross-provider compatibility - "PromptTokens": output.InputTextTokenCount, - "CompletionTokens": result.TokenCount, + "PromptTokens": int(output.InputTextTokenCount), + "CompletionTokens": int(result.TokenCount), "TotalTokens": output.InputTextTokenCount + result.TokenCount, }, } diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index f3f302423..f696f8425 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -123,8 +123,8 @@ func createMetaCompletion(ctx context.Context, "input_tokens": output.PromptTokenCount, "output_tokens": output.GenerationTokenCount, // Standardized field names for cross-provider compatibility - "PromptTokens": output.PromptTokenCount, - "CompletionTokens": output.GenerationTokenCount, + "PromptTokens": int(output.PromptTokenCount), + "CompletionTokens": int(output.GenerationTokenCount), "TotalTokens": output.PromptTokenCount + output.GenerationTokenCount, }, }, diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 896f23a9a..636793de5 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -229,8 +229,8 @@ func createNovaCompletion(ctx context.Context, "input_tokens": output.Usage.InputTokens, "output_tokens": output.Usage.OutputTokens, // Standardized field names for cross-provider compatibility - "PromptTokens": output.Usage.InputTokens, - "CompletionTokens": output.Usage.OutputTokens, + "PromptTokens": int(output.Usage.InputTokens), + "CompletionTokens": int(output.Usage.OutputTokens), "TotalTokens": output.Usage.InputTokens + output.Usage.OutputTokens, }, } diff --git a/llms/bedrock/provider_families_test.go b/llms/bedrock/provider_families_test.go index 44424a8d8..301609535 100644 --- a/llms/bedrock/provider_families_test.go +++ b/llms/bedrock/provider_families_test.go @@ -17,19 +17,21 @@ import ( ) type familyCase struct { - name string - model string - whole string - chunks []string - wantText string - wantReason string + name string + model string + whole string + chunks []string + wantText string + wantReason string + hasCounters bool } func nonClaudeFamilies() []familyCase { return []familyCase{ { - name: "amazon", - model: "amazon.titan-text-express-v1", + name: "amazon", + hasCounters: true, + model: "amazon.titan-text-express-v1", whole: `{"inputTextTokenCount":5,"results":[{"tokenCount":3,"outputText":"sixty rooms",` + `"completionReason":"LENGTH"}]}`, chunks: []string{ @@ -40,12 +42,13 @@ func nonClaudeFamilies() []familyCase { wantReason: "LENGTH", }, { - name: "meta", - model: "meta.llama3-70b-instruct-v1:0", - whole: `{"generation":"sixty rooms","prompt_token_count":5,"generation_token_count":3,"stop_reason":"length"}`, - chunks: []string{`{"generation":"sixty "}`, `{"generation":"rooms","stop_reason":"length"}`}, - wantText: "sixty rooms", - wantReason: "length", + name: "meta", + hasCounters: true, + model: "meta.llama3-70b-instruct-v1:0", + whole: `{"generation":"sixty rooms","prompt_token_count":5,"generation_token_count":3,"stop_reason":"length"}`, + chunks: []string{`{"generation":"sixty "}`, `{"generation":"rooms","stop_reason":"length"}`}, + wantText: "sixty rooms", + wantReason: "length", }, { name: "cohere", @@ -60,8 +63,9 @@ func nonClaudeFamilies() []familyCase { wantReason: "MAX_TOKENS", }, { - name: "ai21", - model: "ai21.jamba-1-5-large-v1:0", + name: "ai21", + hasCounters: true, + model: "ai21.jamba-1-5-large-v1:0", whole: `{"id":"x","choices":[{"index":0,"message":{"role":"assistant","content":"sixty rooms"},` + `"finish_reason":"length"}],"usage":{"prompt_tokens":5,"completion_tokens":3,"total_tokens":8}}`, chunks: []string{ @@ -80,8 +84,9 @@ func nonClaudeFamilies() []familyCase { wantReason: "length", }, { - name: "nova", - model: "us.amazon.nova-pro-v1:0", + name: "nova", + hasCounters: true, + model: "us.amazon.nova-pro-v1:0", whole: `{"output":{"message":{"content":[{"text":"sixty rooms"}],"role":"assistant"}},` + `"stopReason":"max_tokens","usage":{"inputTokens":5,"outputTokens":3,"totalTokens":8}}`, chunks: []string{ @@ -112,6 +117,14 @@ func TestANonClaudeFamilyReportsTruncationAndKeepsItsWholeAnswer(t *testing.T) { assert.Equal(t, tc.wantReason, resp.Choices[0].StopReason) assert.True(t, resp.Choices[0].Truncated, "a stop reason meaning the output limit must set Truncated") + + if tc.hasCounters { + for _, key := range []string{"PromptTokens", "CompletionTokens"} { + _, ok := resp.Choices[0].GenerationInfo[key].(int) + assert.True(t, ok, "%s must be an int, as the Claude doors report it, got %#v", + key, resp.Choices[0].GenerationInfo[key]) + } + } }) t.Run(tc.name+"/streamed answer", func(t *testing.T) { From 718f4cd7d6e7683825a7a1632aeab9c438cf2508 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:37:23 +0300 Subject: [PATCH 214/618] fix(bedrock): keep the streamed answer on the six non-Claude families The partial-on-error contract reached the Claude doors and the Converse one but stopped there. All six remaining families returned nil from every exit inside the stream loop -- transport check, undecodable chunk, callback -- and assembled content, counters and stop reason only after it, so a consumer that gave up mid-answer got nothing back. Each family also wrote the text into its buffer only after the callback returned, so the chunk the consumer refused was missing even from the answer it had already been handed. The write now happens first, matching what the caller actually saw. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_ai21.go | 20 +++++++----- .../internal/bedrockclient/provider_amazon.go | 20 +++++++----- .../internal/bedrockclient/provider_cohere.go | 20 +++++++----- .../bedrockclient/provider_deepseek.go | 20 +++++++----- .../internal/bedrockclient/provider_meta.go | 20 +++++++----- .../internal/bedrockclient/provider_nova.go | 20 +++++++----- llms/bedrock/provider_families_test.go | 32 +++++++++++++++++++ 7 files changed, 104 insertions(+), 48 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index 7461c268e..892de99ca 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -323,24 +323,30 @@ func parseAi21StreamingResponse(ctx context.Context, client *bedrockruntime.Clie contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp ai21StreamingResponseChunk err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) if err != nil { - return nil, err + streamErr = err + break DoStream } // Send text chunk if available if resp.Text != "" { + streamedContent.WriteString(resp.Text) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Text); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.Text) } // Set completion reason @@ -364,12 +370,10 @@ func parseAi21StreamingResponse(ctx context.Context, client *bedrockruntime.Clie } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/internal/bedrockclient/provider_amazon.go b/llms/bedrock/internal/bedrockclient/provider_amazon.go index 877baf070..c5984e942 100644 --- a/llms/bedrock/internal/bedrockclient/provider_amazon.go +++ b/llms/bedrock/internal/bedrockclient/provider_amazon.go @@ -162,24 +162,30 @@ func parseAmazonStreamingResponse(ctx context.Context, client *bedrockruntime.Cl contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp amazonStreamingResponseChunk err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) if err != nil { - return nil, err + streamErr = err + break DoStream } // Send text chunk if available if resp.OutputText != "" { + streamedContent.WriteString(resp.OutputText) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.OutputText); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.OutputText) } // Set completion reason @@ -203,12 +209,10 @@ func parseAmazonStreamingResponse(ctx context.Context, client *bedrockruntime.Cl } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/internal/bedrockclient/provider_cohere.go b/llms/bedrock/internal/bedrockclient/provider_cohere.go index 5685015c1..11f6761f1 100644 --- a/llms/bedrock/internal/bedrockclient/provider_cohere.go +++ b/llms/bedrock/internal/bedrockclient/provider_cohere.go @@ -303,24 +303,30 @@ func parseCohereStreamingResponse(ctx context.Context, client *bedrockruntime.Cl contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp cohereStreamingResponseChunk err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) if err != nil { - return nil, err + streamErr = err + break DoStream } // Send text chunk if available if resp.Text != "" { + streamedContent.WriteString(resp.Text) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Text); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.Text) } // Set completion reason @@ -336,12 +342,10 @@ func parseCohereStreamingResponse(ctx context.Context, client *bedrockruntime.Cl } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/internal/bedrockclient/provider_deepseek.go b/llms/bedrock/internal/bedrockclient/provider_deepseek.go index 7607ef782..c3b0e2f0b 100644 --- a/llms/bedrock/internal/bedrockclient/provider_deepseek.go +++ b/llms/bedrock/internal/bedrockclient/provider_deepseek.go @@ -148,23 +148,29 @@ func parseDeepSeekStreamingResponse(ctx context.Context, client *bedrockruntime. contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp deepSeekStreamingResponseChunk err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) if err != nil { - return nil, err + streamErr = err + break DoStream } if len(resp.Choices) > 0 && resp.Choices[0].Text != "" { + streamedContent.WriteString(resp.Choices[0].Text) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Choices[0].Text); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.Choices[0].Text) } if len(resp.Choices) > 0 && resp.Choices[0].StopReason != "" { @@ -174,12 +180,10 @@ func parseDeepSeekStreamingResponse(ctx context.Context, client *bedrockruntime. } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index f696f8425..ced08ed87 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -146,24 +146,30 @@ func parseMetaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp metaStreamingResponseChunk err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) if err != nil { - return nil, err + streamErr = err + break DoStream } // Send text chunk if available if resp.Generation != "" { + streamedContent.WriteString(resp.Generation) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.Generation); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.Generation) } // Set completion reason @@ -187,12 +193,10 @@ func parseMetaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 636793de5..f284d4d80 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -356,24 +356,30 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamErr error + +DoStream: for e := range stream.Events() { if err = stream.Err(); err != nil { - return nil, err + streamErr = err + break DoStream } if v, ok := e.(*types.ResponseStreamMemberChunk); ok { var resp novaStreamingResponseChunk err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&resp) if err != nil { - return nil, err + streamErr = err + break DoStream } // Check for content delta (text chunks) if resp.ContentBlockDelta.Delta.Text != "" { + streamedContent.WriteString(resp.ContentBlockDelta.Delta.Text) if err = streaming.CallWithText(ctx, options.StreamingFunc, resp.ContentBlockDelta.Delta.Text); err != nil { - return nil, err + streamErr = err + break DoStream } - streamedContent.WriteString(resp.ContentBlockDelta.Delta.Text) } // Check for message start (contains input tokens) @@ -397,12 +403,10 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie } } if err = stream.Err(); err != nil { - return nil, err + streamErr = err } contentchoices[0].Content = streamedContent.String() - return &llms.ContentResponse{ - Choices: contentchoices, - }, nil + return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/provider_families_test.go b/llms/bedrock/provider_families_test.go index 301609535..e4a50f8f7 100644 --- a/llms/bedrock/provider_families_test.go +++ b/llms/bedrock/provider_families_test.go @@ -2,6 +2,7 @@ package bedrock_test import ( "context" + "errors" "io" "net/http" "net/http/httptest" @@ -127,6 +128,37 @@ func TestANonClaudeFamilyReportsTruncationAndKeepsItsWholeAnswer(t *testing.T) { } }) + t.Run(tc.name+"/consumer gives up mid-stream", func(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + for _, chunk := range tc.chunks { + writeLegacyChunk(t, w, enc, chunk) + } + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(tc.model)) + gaveUp := errors.New("consumer gave up") + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "the text already handed to the consumer must travel with the error") + require.Len(t, resp.Choices, 1) + assert.NotEmpty(t, resp.Choices[0].Content, + "the chunk the consumer refused was still delivered, so it belongs in the answer") + }) + t.Run(tc.name+"/streamed answer", func(t *testing.T) { t.Parallel() From fdaa50b76f39f90e8e82807d921878fd9a7d2209 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:41:42 +0300 Subject: [PATCH 215/618] fix(httprr): normalize a toolchain version to one shape at any patch level The normalizer replaced each version number with as many X's as it had digits, so go1.26.7 became goX.XX.X while go1.26.10 became goX.XX.XX. Every recording in llms/googleai carries the eight-character form, which means all of them miss on any go1.26.1x -- the 19 failures 06a62023 was written to prevent, invisible in CI because it pins the toolchain by go-version-file. A version now collapses to one shape regardless of digit count, and the length bookkeeping that caused the coupling is gone: the header is compared after normalization, so its byte count never had to match. The stale example in the doc comment went with it -- it already disagreed with the code. Co-Authored-By: Claude Opus 5 --- internal/httprr/normalization_test.go | 20 +++++++++------ internal/httprr/rr.go | 35 +-------------------------- 2 files changed, 14 insertions(+), 41 deletions(-) diff --git a/internal/httprr/normalization_test.go b/internal/httprr/normalization_test.go index 19b626b7f..ab0d9761d 100644 --- a/internal/httprr/normalization_test.go +++ b/internal/httprr/normalization_test.go @@ -16,17 +16,17 @@ func TestNormalizeGoogleAPIClientHeader(t *testing.T) { { name: "Google API client header with versions", input: "gl-go/1.24.4 gccl/v0.15.1 genai-go/0.15.1 gapic/0.7.0 gax/2.14.1 rest/UNKNOWN", - expected: "gl-go/X.XX.X gccl/vX.XX.X genai-go/X.XX.X gapic/X.X.X gax/X.XX.X rest/UNKNOWN", + expected: "gl-go/X.XX.X gccl/vX.XX.X genai-go/X.XX.X gapic/X.XX.X gax/X.XX.X rest/UNKNOWN", }, { name: "Google API client header with different versions", input: "gl-go/1.24.6 gccl/v0.15.2 genai-go/0.16.0 gapic/0.8.1 gax/2.15.0 rest/UNKNOWN", - expected: "gl-go/X.XX.X gccl/vX.XX.X genai-go/X.XX.X gapic/X.X.X gax/X.XX.X rest/UNKNOWN", + expected: "gl-go/X.XX.X gccl/vX.XX.X genai-go/X.XX.X gapic/X.XX.X gax/X.XX.X rest/UNKNOWN", }, { name: "Mixed version formats", input: "client/1.2 sdk/v3.4.5 lib/0.1.0-beta rest/UNKNOWN", - expected: "client/X.X sdk/vX.X.X lib/X.X.X-beta rest/UNKNOWN", + expected: "client/X.X sdk/vX.XX.X lib/X.XX.X-beta rest/UNKNOWN", }, { name: "No versions", @@ -43,6 +43,16 @@ func TestNormalizeGoogleAPIClientHeader(t *testing.T) { input: "google-genai-sdk/1.29.0 gl-go/go1.26.7", expected: "google-genai-sdk/X.XX.X gl-go/goX.XX.X", }, + { + name: "A two-digit patch normalizes to the same shape as a one-digit one", + input: "google-genai-sdk/1.29.0 gl-go/go1.26.10", + expected: "google-genai-sdk/X.XX.X gl-go/goX.XX.X", + }, + { + name: "A two-digit minor normalizes the same way too", + input: "google-genai-sdk/1.29.0 gl-go/go1.100.2", + expected: "google-genai-sdk/X.XX.X gl-go/goX.XX.X", + }, } for _, tt := range tests { @@ -51,10 +61,6 @@ func TestNormalizeGoogleAPIClientHeader(t *testing.T) { if result != tt.expected { t.Errorf("normalizeGoogleAPIClientHeader(%q) = %q, want %q", tt.input, result, tt.expected) } - // Verify byte count is preserved - if len(result) != len(tt.input) { - t.Errorf("Byte count not preserved: input len=%d, result len=%d", len(tt.input), len(result)) - } }) } } diff --git a/internal/httprr/rr.go b/internal/httprr/rr.go index fc438d49f..6bdda9d00 100644 --- a/internal/httprr/rr.go +++ b/internal/httprr/rr.go @@ -993,16 +993,7 @@ func hasExistingRecording(t *testing.T) bool { return uncompressedErr == nil || compressedErr == nil } -// normalizeGoogleAPIClientHeader normalizes version information in the x-goog-api-client header -// to avoid test failures when dependencies are updated. It preserves the exact byte count -// by padding with spaces to maintain httprr recording integrity. -// -// Example input: "gl-go/1.24.4 gccl/v0.15.1 genai-go/0.15.1 gapic/0.7.0 gax/2.14.1 rest/UNKNOWN" -// Example output: "gl-go/X.XX.X gccl/vX.XX.X genai-go/X.XX.X gapic/X.X.X gax/X.XX.X rest/UNKNOWN" func normalizeGoogleAPIClientHeader(header string) string { - originalLen := len(header) - - // Replace each version segment while preserving its length versionPattern := regexp.MustCompile(`(/v?(?:go)?)(\d+\.\d+(?:\.\d+)?)`) normalized := versionPattern.ReplaceAllStringFunc(header, func(match string) string { @@ -1041,24 +1032,7 @@ func normalizeGoogleAPIClientHeader(header string) string { replacement = strings.Repeat("X", xBefore) + "." + strings.Repeat("X", xAfter) } case 2: - // Format: X.X.X, X.XX.X, etc. - // Distribute X's around the dots fairly - switch versionLen { - case 5: - replacement = "X.X.X" - case 6: - replacement = "X.XX.X" - case 7: - replacement = "X.XX.XX" - default: - // Generic case: distribute evenly - segLen := (versionLen - 2) / 3 - remainder := (versionLen - 2) % 3 - seg1 := segLen + min(1, remainder) - seg2 := segLen + min(1, max(0, remainder-1)) - seg3 := segLen - replacement = strings.Repeat("X", seg1) + "." + strings.Repeat("X", seg2) + "." + strings.Repeat("X", seg3) - } + replacement = "X.XX.X" default: // More than 2 dots or other format, just preserve length with X's replacement = strings.Repeat("X", versionLen) @@ -1067,13 +1041,6 @@ func normalizeGoogleAPIClientHeader(header string) string { return prefix + replacement }) - // Ensure the result has the exact same length - if len(normalized) < originalLen { - normalized += strings.Repeat(" ", originalLen-len(normalized)) - } else if len(normalized) > originalLen { - normalized = normalized[:originalLen] - } - return normalized } From 70e65ddb7f6098fb068a2a98e0389dc3ae37c670 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:42:46 +0300 Subject: [PATCH 216/618] chore(ci): drop the PR-comment grant whose step this branch removed The docs workflow held pull-requests: write for one step that commented a preview link on the pull request. The branch deleted that step and left the permission behind, so the job kept write access to pull requests it no longer touches. Unrelated and older: the coverage job in ci.yaml carries the same grant without a consumer -- it writes only to the step summary and artifacts -- but that one predates this branch. Co-Authored-By: Claude Opus 5 --- .github/workflows/publish-docs.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/publish-docs.yaml b/.github/workflows/publish-docs.yaml index afc1d80ed..4cb4c2e05 100644 --- a/.github/workflows/publish-docs.yaml +++ b/.github/workflows/publish-docs.yaml @@ -13,7 +13,6 @@ permissions: contents: read pages: write id-token: write - pull-requests: write # Allow only one concurrent deployment concurrency: From 411e804418ebcd01e3be70bfbb83c098b5e4e6ca Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:47:46 +0300 Subject: [PATCH 217/618] fix(llms): advertise only the efforts the provider's wire will send ReasoningSupportFor already took a provider and used it for CannotDisable, but read the effort list from a provider-blind table. Measured: for claude-opus-4-5 on Bedrock the hint offered [low medium high] while ClaudeSupportsEffortWithBudget says that wire sends none -- a caller following the hint asks for an effort the door will not carry, and on Bedrock the vendor answers 400. ClaudeEffortsFor now takes the provider and asks the same gate the wire does. Only reasoning_support.go called it; no consumer outside this module does. Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 8 +++---- llms/reasoning/claude_capability_test.go | 29 +++++++++++++----------- llms/reasoning_support.go | 2 +- llms/reasoning_support_test.go | 27 ++++++++++++++++++++++ 4 files changed, 48 insertions(+), 18 deletions(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 5d00fd616..e45378648 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -109,11 +109,11 @@ var claudeEffortsByKind = map[ClaudeReasoningKind][]string{ ClaudeReasoningBudgetOnly: {"low", "medium", "high"}, } -// ClaudeEffortsFor returns the effort levels the model's generation accepts, or -// nil for a model this package does not classify. -func ClaudeEffortsFor(model string) []string { +// ClaudeEffortsFor returns the effort levels the model's generation accepts on +// the given provider, or nil for a model this package does not classify. +func ClaudeEffortsFor(model string, p Provider) []string { kind := ClaudeReasoningKindFor(model) - if kind == ClaudeReasoningBudgetOnly && !containsAny(canonicalClaude(model), budgetEffortClaude) { + if kind == ClaudeReasoningBudgetOnly && !ClaudeSupportsEffortWithBudget(model, p) { return nil } return slices.Clone(claudeEffortsByKind[kind]) diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 838d8f4d2..846639a7e 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -53,22 +53,25 @@ func TestClaudeReasoningKindFor(t *testing.T) { func TestClaudeEffortsFor(t *testing.T) { t.Parallel() cases := []struct { - model string - want []string + model string + provider Provider + want []string }{ - {"claude-opus-5", []string{"low", "medium", "high", "xhigh", "max"}}, - {"us.anthropic.claude-opus-4-7", []string{"low", "medium", "high", "xhigh", "max"}}, - {"claude-opus-4-6", []string{"low", "medium", "high", "max"}}, - {"claude-sonnet-4-6", []string{"low", "medium", "high", "max"}}, - {"claude-mythos-preview", []string{"low", "medium", "high", "max"}}, - {"claude-opus-4-5-20251101", []string{"low", "medium", "high"}}, - {"claude-sonnet-4-5-20250929", nil}, - {"us.anthropic.claude-haiku-4-5-20251001-v1:0", nil}, - {"gpt-5.5", nil}, + {"claude-opus-5", ProviderAnthropic, []string{"low", "medium", "high", "xhigh", "max"}}, + {"us.anthropic.claude-opus-4-7", ProviderAnthropic, []string{"low", "medium", "high", "xhigh", "max"}}, + {"claude-opus-4-6", ProviderAnthropic, []string{"low", "medium", "high", "max"}}, + {"claude-sonnet-4-6", ProviderAnthropic, []string{"low", "medium", "high", "max"}}, + {"claude-mythos-preview", ProviderAnthropic, []string{"low", "medium", "high", "max"}}, + {"claude-opus-4-5-20251101", ProviderAnthropic, []string{"low", "medium", "high"}}, + {"claude-sonnet-4-5-20250929", ProviderAnthropic, nil}, + {"us.anthropic.claude-haiku-4-5-20251001-v1:0", ProviderAnthropic, nil}, + {"gpt-5.5", ProviderAnthropic, nil}, + {"claude-opus-4-5-20251101", ProviderBedrock, nil}, + {"claude-opus-4-6", ProviderBedrock, []string{"low", "medium", "high", "max"}}, } for _, tc := range cases { - if got := ClaudeEffortsFor(tc.model); !slices.Equal(got, tc.want) { - t.Errorf("ClaudeEffortsFor(%q) = %v, want %v", tc.model, got, tc.want) + if got := ClaudeEffortsFor(tc.model, tc.provider); !slices.Equal(got, tc.want) { + t.Errorf("ClaudeEffortsFor(%q, %v) = %v, want %v", tc.model, tc.provider, got, tc.want) } } } diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 736be0310..e67330cf8 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -101,7 +101,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { // always on, hence not disablable, on Bedrock). CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, RejectsSampling: reasoning.ClaudeRejectsSampling(model), - Efforts: toReasoningEfforts(reasoning.ClaudeEffortsFor(model)), + Efforts: toReasoningEfforts(reasoning.ClaudeEffortsFor(model, p)), Mechanism: claudeMechanism(reasoning.ClaudeReasoningKindFor(model)), DefaultOn: boolPtr(reasoning.ClaudeThinkingDefaultsOn(model)), } diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 5e4b2b3b9..cdc81e71c 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -369,3 +369,30 @@ func TestABudgetModelWithNoEffortTierIsKnownAndEmpty(t *testing.T) { t.Fatalf("Mechanism must tell the caller what to offer instead, got %v", support.Mechanism) } } + +func TestAdvertisedEffortsFollowTheWireOfEachProvider(t *testing.T) { + t.Parallel() + + const opus45 = "us.anthropic.claude-opus-4-5-20251101-v1:0" + + for _, tc := range []struct { + provider reasoning.Provider + want bool + }{ + {reasoning.ProviderAnthropic, true}, + {reasoning.ProviderBedrock, false}, + } { + sends := reasoning.ClaudeSupportsEffortWithBudget(opus45, tc.provider) + if sends != tc.want { + t.Fatalf("wire assumption changed: ClaudeSupportsEffortWithBudget(%v) = %v", tc.provider, sends) + } + + efforts := ReasoningSupportFor(opus45, tc.provider).Efforts + if sends && len(efforts) == 0 { + t.Errorf("%v sends an effort with the budget, so the hint must list some", tc.provider) + } + if !sends && len(efforts) > 0 { + t.Errorf("%v never sends an effort for this model, yet the hint advertises %v", tc.provider, efforts) + } + } +} From 3099dd67c1475133e8c2140dee356238718e1d13 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:48:57 +0300 Subject: [PATCH 218/618] fix(googleai): report a streamed prompt count that adds up The streamed path computed the uncached remainder and then assigned it over PromptTokens, so a cached prompt of 100 with 80 cached reported PromptTokens 20 beside TotalTokens 109 -- prompt plus completion no longer equalled the total. The non-streaming path of the same door reports the whole prompt, as does every other provider; the Bedrock tests assert that sum directly. The remainder keeps the field it already had, CacheCreationInputTokens. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 9 ++--- llms/googleai/usage_stream_test.go | 53 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 llms/googleai/usage_stream_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 6cdd5ec9a..75aa97fd9 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -474,13 +474,8 @@ StreamEnd: metadata["PromptCachedTokens"] = int(lastUsageMetadata.CachedContentTokenCount) metadata["CacheReadInputTokens"] = int(lastUsageMetadata.CachedContentTokenCount) - // Cache-related token information (if available) - if lastUsageMetadata.CachedContentTokenCount > 0 { - metadata["CacheCreationInputTokens"] = max(int(lastUsageMetadata.PromptTokenCount-lastUsageMetadata.CachedContentTokenCount), 0) - metadata["PromptTokens"] = metadata["CacheCreationInputTokens"] // Google AI includes cached tokens in the prompt count - } else { - metadata["CacheCreationInputTokens"] = 0 - } + metadata["CacheCreationInputTokens"] = max( + int(lastUsageMetadata.PromptTokenCount-lastUsageMetadata.CachedContentTokenCount), 0) } // Carry the finish reason so structured-output validation runs on a normal diff --git a/llms/googleai/usage_stream_test.go b/llms/googleai/usage_stream_test.go new file mode 100644 index 000000000..5c849e7ba --- /dev/null +++ b/llms/googleai/usage_stream_test.go @@ -0,0 +1,53 @@ +package googleai + +import ( + "bytes" + "context" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type cachedUsageStream struct{} + +func (cachedUsageStream) RoundTrip(r *http.Request) (*http.Response, error) { + const body = `data: {"candidates":[{"content":{"parts":[{"text":"sixty rooms are free"}],"role":"model"},` + + `"finishReason":"STOP","index":0}],"usageMetadata":{"promptTokenCount":100,` + + `"candidatesTokenCount":9,"totalTokenCount":109,"cachedContentTokenCount":80}}` + "\r\n\r\n" + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"text/event-stream"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestAStreamedAnswerReportsCountersThatAddUp(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: cachedUsageStream{}})) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + info := resp.Choices[0].GenerationInfo + assert.Equal(t, 100, info["PromptTokens"], "the prompt count is the whole prompt, cache included") + assert.Equal(t, 80, info["CacheReadInputTokens"]) + assert.Equal(t, 20, info["CacheCreationInputTokens"], "the uncached remainder keeps its own field") + assert.Equal(t, info["TotalTokens"], + info["PromptTokens"].(int)+info["CompletionTokens"].(int), + "prompt plus completion must equal the total, as every other door reports it") +} From e6b8a8fd1e977738f0d4f4e3a524b33e9cedb83b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 18:57:30 +0300 Subject: [PATCH 219/618] fix(googleai,vertex): name a blocked prompt on every path, not just one 90555e86 taught the streamed googleai path to tell a blocked prompt from an output limit. The other three paths said nothing of the kind, each in its own way: googleai whole answer -- returned the bare ErrNoContentInResponse, so a prompt the safety filter rejected looked like a model that said nothing vertex, both paths -- the SDK raises its own *genai.BlockedError before our empty-candidate check ever runs, and we passed it to the caller untranslated, outside this project's error vocabulary The googleai classification is now shared by both of its paths, and vertex translates the SDK's error into llms.ErrCodeContentFilter on the whole-answer paths and the streamed one. Co-Authored-By: Claude Opus 5 --- llms/googleai/blocked_prompt_test.go | 45 ++++++++++++++++++++ llms/googleai/googleai.go | 30 ++++++++----- llms/googleai/vertex/blocked_prompt_test.go | 47 +++++++++++++++++++++ llms/googleai/vertex/vertex.go | 27 ++++++++++-- 4 files changed, 136 insertions(+), 13 deletions(-) create mode 100644 llms/googleai/blocked_prompt_test.go create mode 100644 llms/googleai/vertex/blocked_prompt_test.go diff --git a/llms/googleai/blocked_prompt_test.go b/llms/googleai/blocked_prompt_test.go new file mode 100644 index 000000000..ef64f2720 --- /dev/null +++ b/llms/googleai/blocked_prompt_test.go @@ -0,0 +1,45 @@ +package googleai + +import ( + "bytes" + "context" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +type blockedPrompt struct{} + +func (blockedPrompt) RoundTrip(r *http.Request) (*http.Response, error) { + const body = `{"candidates":[],"promptFeedback":{"blockReason":"SAFETY",` + + `"blockReasonMessage":"the prompt was rejected by the safety filter"}}` + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestABlockedPromptIsNamedOnTheWholeAnswerPathToo(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: blockedPrompt{}})) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var apiErr *llms.Error + require.ErrorAs(t, err, &apiErr, "a blocked prompt must not read as an empty response") + assert.Equal(t, llms.ErrCodeContentFilter, apiErr.Code) + assert.Contains(t, apiErr.Message, "SAFETY") +} diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 75aa97fd9..eadf95910 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -508,6 +508,9 @@ StreamEnd: func convertResponse(resp *genai.GenerateContentResponse) (*llms.ContentResponse, error) { if len(resp.Candidates) == 0 { + if err := blockedPromptError(resp.PromptFeedback); err != nil { + return nil, err + } return nil, ErrNoContentInResponse } @@ -1103,6 +1106,21 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in } // checkEmptyStream reports an output limit too small to start an answer. +func blockedPromptError(feedback *genai.GenerateContentResponsePromptFeedback) error { + if feedback == nil || feedback.BlockReason == "" { + return nil + } + message := "the model returned no candidates: the prompt was blocked (" + string(feedback.BlockReason) + ")" + if feedback.BlockReasonMessage != "" { + message += ": " + feedback.BlockReasonMessage + } + return &llms.Error{ + Code: llms.ErrCodeContentFilter, + Message: message, + Provider: providerGoogleAI, + } +} + func checkEmptyStream( lastCandidate *genai.Candidate, blockReason *genai.GenerateContentResponsePromptFeedback, @@ -1115,16 +1133,8 @@ func checkEmptyStream( if choice.Content != "" || len(choice.ToolCalls) > 0 { return nil } - if blockReason != nil { - message := "the model returned no candidates: the prompt was blocked (" + string(blockReason.BlockReason) + ")" - if blockReason.BlockReasonMessage != "" { - message += ": " + blockReason.BlockReasonMessage - } - return &llms.Error{ - Code: llms.ErrCodeContentFilter, - Message: message, - Provider: providerGoogleAI, - } + if err := blockedPromptError(blockReason); err != nil { + return err } if opts == nil || opts.MaxTokens == nil || *opts.MaxTokens <= 0 { return nil diff --git a/llms/googleai/vertex/blocked_prompt_test.go b/llms/googleai/vertex/blocked_prompt_test.go new file mode 100644 index 000000000..7d34108ba --- /dev/null +++ b/llms/googleai/vertex/blocked_prompt_test.go @@ -0,0 +1,47 @@ +package vertex + +import ( + "bytes" + "context" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/googleai" +) + +type blockedPrompt struct{} + +func (blockedPrompt) RoundTrip(r *http.Request) (*http.Response, error) { + const body = `{"promptFeedback":{"blockReason":"SAFETY",` + + `"blockReasonMessage":"the prompt was rejected by the safety filter"}}` + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestABlockedPromptReachesTheCallerClassified(t *testing.T) { + t.Setenv("GOOGLE_API_KEY", "unit-test-key") + + v, err := New(context.Background(), + googleai.WithRest(), googleai.WithAPIKey("unit-test-key"), + googleai.WithCloudProject("unit"), googleai.WithCloudLocation("us-central1"), + googleai.WithDefaultModel("gemini-2.5-flash"), + googleai.WithHTTPClient(&http.Client{Transport: blockedPrompt{}})) + require.NoError(t, err) + t.Cleanup(func() { _ = v.Close() }) + + _, err = v.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var apiErr *llms.Error + require.ErrorAs(t, err, &apiErr, "a blocked prompt must reach the caller in this project's terms") + assert.Equal(t, llms.ErrCodeContentFilter, apiErr.Code) +} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 7996c7add..8c30a9e1f 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -133,6 +133,27 @@ func finishVertexResponse(opts *llms.CallOptions, response *llms.ContentResponse } // convertCandidates converts a sequence of genai.Candidate to a response. +func classifyVertexError(err error) error { + var blocked *genai.BlockedError + if !errors.As(err, &blocked) { + return err + } + message := "the model blocked the exchange" + if blocked.PromptFeedback != nil { + message = "the prompt was blocked (" + blocked.PromptFeedback.BlockReason.String() + ")" + if blocked.PromptFeedback.BlockReasonMessage != "" { + message += ": " + blocked.PromptFeedback.BlockReasonMessage + } + } else if blocked.Candidate != nil { + message = "the answer was blocked (" + blocked.Candidate.FinishReason.String() + ")" + } + return &llms.Error{ + Code: llms.ErrCodeContentFilter, + Message: message, + Provider: "vertex", + } +} + func convertCandidates(candidates []*genai.Candidate, usage *genai.UsageMetadata) (*llms.ContentResponse, error) { var contentResponse llms.ContentResponse @@ -279,7 +300,7 @@ func generateFromSingleMessage( // the complete response with a list of candidates. resp, err := model.GenerateContent(ctx, convertedParts...) if err != nil { - return nil, err + return nil, classifyVertexError(err) } if len(resp.Candidates) == 0 { @@ -322,7 +343,7 @@ func generateFromMessages( if opts.StreamingFunc == nil { resp, err := session.SendMessage(ctx, reqContent.Parts...) if err != nil { - return nil, err + return nil, classifyVertexError(err) } if len(resp.Candidates) == 0 { @@ -357,7 +378,7 @@ DoStream: break DoStream } if err != nil { - streamErr = fmt.Errorf("error in stream mode: %w", err) + streamErr = classifyVertexError(err) break DoStream } From fc2ba39919087c28584a3fecfab7ea63916bd602 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 19:02:47 +0300 Subject: [PATCH 220/618] chore: drop the comments this branch added that restate the code The branch-wide comment gate flagged six clusters, all removed: - per-constant docs on ToolChoiceKind, Mechanism and ReasoningMechanism that restate the constant's own name - the second half of the IsEmpty and HasContent docs, which defended the choice between them; content_reasoning_test.go pins both, and narrowing IsEmpty to the content turns it red - the vendor claim on the ErrForcedToolUseWithThinking alias, which described Anthropic's rule rather than this package's behaviour - field-name restatements in two internal payload structs - section labels in the capability table that repeat its want column Co-Authored-By: Claude Opus 5 --- llms/anthropic/errors.go | 3 --- llms/anthropic/internal/anthropicclient/messages.go | 1 - llms/bedrock/internal/bedrockclient/provider_anthropic.go | 5 ++--- llms/reasoning/claude_capability_test.go | 3 --- llms/reasoning/mechanism.go | 3 --- llms/reasoning/reasoning.go | 6 +----- llms/reasoning_support.go | 4 ---- llms/turn.go | 5 ----- 8 files changed, 3 insertions(+), 27 deletions(-) diff --git a/llms/anthropic/errors.go b/llms/anthropic/errors.go index 12a0c394d..8ef513014 100644 --- a/llms/anthropic/errors.go +++ b/llms/anthropic/errors.go @@ -84,7 +84,4 @@ func MapError(err error) error { // ending with an assistant turn. type ErrAssistantPrefillUnsupported = reasoning.ErrAssistantPrefillUnsupported -// ErrForcedToolUseWithThinking reports the documented gap that manual (budget) -// thinking accepts only tool_choice "auto" or "none": forcing a tool with "any" -// or a named tool is rejected. Adaptive thinking has no such limit. type ErrForcedToolUseWithThinking = reasoning.ErrForcedToolUseWithThinking diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index 696508850..13bc62525 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -112,7 +112,6 @@ type Tool struct { CacheControl *CacheControl `json:"cache_control,omitempty"` } -// ToolChoice used for the request message payload. type ToolChoice struct { Type string `json:"type"` Name string `json:"name,omitempty"` diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 243ed74dc..f342f92a2 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -106,9 +106,8 @@ type anthropicTextGenerationInput struct { // Sequences that will cause the model to stop generating tokens. Optional StopSequences []string `json:"stop_sequences,omitempty"` // Tools available for the model to use. Optional - Tools []anthropicTool `json:"tools,omitempty"` - // ToolChoice constrains which tool the model may call. Optional - ToolChoice any `json:"tool_choice,omitempty"` + Tools []anthropicTool `json:"tools,omitempty"` + ToolChoice any `json:"tool_choice,omitempty"` // Thinking configuration for reasoning models. Optional Thinking *anthropicThinkingPayload `json:"thinking,omitempty"` // OutputConfig carries the adaptive-thinking effort. It is a top-level diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index 846639a7e..c443d01b0 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -11,7 +11,6 @@ func TestClaudeReasoningKindFor(t *testing.T) { model string want ClaudeReasoningKind }{ - // Adaptive-only, first-party and Bedrock forms. {"claude-opus-4-7", ClaudeReasoningAdaptiveOnly}, {"claude-opus-4-8", ClaudeReasoningAdaptiveOnly}, {"us.anthropic.claude-opus-4-8", ClaudeReasoningAdaptiveOnly}, @@ -21,11 +20,9 @@ func TestClaudeReasoningKindFor(t *testing.T) { {"us.anthropic.claude-sonnet-5", ClaudeReasoningAdaptiveOnly}, {"claude-fable-5", ClaudeReasoningAdaptiveOnly}, {"claude-mythos-5", ClaudeReasoningAdaptiveOnly}, - // Dual. {"claude-opus-4-6", ClaudeReasoningAdaptiveAndBudget}, {"us.anthropic.claude-sonnet-4-6", ClaudeReasoningAdaptiveAndBudget}, {"claude-mythos-preview", ClaudeReasoningAdaptiveAndBudget}, - // Budget-only. {"claude-opus-4-5-20251101", ClaudeReasoningBudgetOnly}, {"claude-sonnet-4-5-20250929", ClaudeReasoningBudgetOnly}, {"us.anthropic.claude-haiku-4-5-20251001-v1:0", ClaudeReasoningBudgetOnly}, diff --git a/llms/reasoning/mechanism.go b/llms/reasoning/mechanism.go index d3bd6e98d..222b928ca 100644 --- a/llms/reasoning/mechanism.go +++ b/llms/reasoning/mechanism.go @@ -4,11 +4,8 @@ package reasoning type Mechanism int const ( - // MechanismNone sends no thinking configuration at all. MechanismNone Mechanism = iota - // MechanismAdaptive lets the model size its own thinking from an effort. MechanismAdaptive - // MechanismBudget gives the model a token budget to think within. MechanismBudget ) diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index f33ab2aa0..8daa246ca 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -25,15 +25,11 @@ type ContentReasoning struct { } // IsEmpty reports whether there is nothing to carry back into the next turn. -// A signature alone still counts as something to carry, so this must not be -// narrowed to the content. func (r *ContentReasoning) IsEmpty() bool { return r == nil || (r.Content == "" && len(r.Signature) == 0) } -// HasContent reports whether the model actually reasoned. A bare signature does -// not qualify, so asking IsEmpty instead overstates thinking wherever a provider -// signs an answer it did not think about. +// HasContent reports whether the model actually reasoned. func (r *ContentReasoning) HasContent() bool { return r != nil && r.Content != "" } diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index e67330cf8..1f8a6c35b 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -39,13 +39,9 @@ type ReasoningSupport struct { type ReasoningMechanism int const ( - // ReasoningMechanismUnknown is a model whose mechanism this build does not classify. ReasoningMechanismUnknown ReasoningMechanism = iota - // ReasoningMechanismAdaptive takes an effort level and decides how much to think. ReasoningMechanismAdaptive - // ReasoningMechanismBudget takes a manual token budget. ReasoningMechanismBudget - // ReasoningMechanismAdaptiveAndBudget accepts either mechanism. ReasoningMechanismAdaptiveAndBudget ) diff --git a/llms/turn.go b/llms/turn.go index 674a5bb52..be497553a 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -7,15 +7,10 @@ import "github.com/vxcontrol/langchaingo/llms/reasoning" type ToolChoiceKind int const ( - // ToolChoiceUnset means the caller picked nothing, so the door sends nothing. ToolChoiceUnset ToolChoiceKind = iota - // ToolChoiceAuto leaves the decision to the model. ToolChoiceAuto - // ToolChoiceNone forbids every tool. ToolChoiceNone - // ToolChoiceAny demands a tool call without naming one. ToolChoiceAny - // ToolChoiceNamed demands the tool the caller named. ToolChoiceNamed ) From 3bdec84955f189162d7c3d355e5e5516aaa3015c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 29 Aug 2026 19:41:37 +0300 Subject: [PATCH 221/618] fix(reasoning): stop taking sampling away from DeepSeek V3.2 The catalog counts V3.2 as a reasoning model, so the openai door pinned temperature to 1 and dropped top_p on every call: a caller asking for temperature 0.25 and top_p 0.3 got temperature 1 and no top_p, while the same call on deepseek-chat kept both. V3.2 reasons only when asked, which is what ThinkingOptIn already models for the mistral and solar generations, so it joins that list. An effort that reaches the wire still pins sampling; a call that does not ask for thinking now keeps what the caller set. Measured against the vendor through the gateway, with a route control (deepseek-r1 returns a reasoning block on the same route) and a transparency probe (temperature 3.5 is refused by the vendor, so the parameter does reach it): bare calls return no reasoning block, and the same call with reasoning_effort high returns one. Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 74 +++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 2 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 llms/openai/deepseek_sampling_test.go diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go new file mode 100644 index 000000000..28ad347c4 --- /dev/null +++ b/llms/openai/deepseek_sampling_test.go @@ -0,0 +1,74 @@ +package openai + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func captureDeepSeekRequest(t *testing.T, model string, opts ...llms.CallOption) map[string]any { + t.Helper() + + var body map[string]any + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, err := io.ReadAll(r.Body) + if err != nil { + t.Errorf("read request: %v", err) + return + } + if err := json.Unmarshal(raw, &body); err != nil { + t.Errorf("decode request: %v", err) + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + defer server.Close() + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel(model)) + if err != nil { + t.Fatalf("new client: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("generate: %v", err) + } + return body +} + +func TestDeepSeekV32KeepsCallerSamplingUntilThinkingIsAsked(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-v3.2", "deepseek.v3.2", "us.deepseek.v3.2", "deepseek-v3.2-exp"} { + body := captureDeepSeekRequest(t, model, llms.WithTemperature(0.25), llms.WithTopP(0.3)) + + if got, want := body["temperature"], 0.25; got != want { + t.Errorf("%s: temperature = %v, want %v", model, got, want) + } + if got, ok := body["top_p"]; !ok || got != 0.3 { + t.Errorf("%s: top_p = %v (present %v), want 0.3", model, got, ok) + } + } +} + +func TestDeepSeekV32PinsSamplingOnceAnEffortReachesTheWire(t *testing.T) { + t.Parallel() + + body := captureDeepSeekRequest(t, "deepseek-v3.2", + llms.WithTemperature(0.25), llms.WithTopP(0.3), + llms.WithReasoning(llms.ReasoningHigh, 0)) + + if got, want := body["temperature"], 1.0; got != want { + t.Errorf("temperature = %v, want %v", got, want) + } + if _, ok := body["top_p"]; ok { + t.Errorf("top_p = %v, want it dropped", body["top_p"]) + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 8daa246ca..ac831a185 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -330,7 +330,7 @@ func ThinkingOptIn(model string) bool { return true } for _, form := range modelSpellings(model) { - for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3"} { + for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3", "deepseek-v3.2"} { if strings.HasPrefix(form, prefix) { return true } From 2f16c8311ec8c56c00430b5711708ac14cfad07f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 30 Aug 2026 02:40:28 +0300 Subject: [PATCH 222/618] fix(openai): pin sampling only where the vendor refuses it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The policy keyed off the reasoning catalogue — "does this model think" — and pinned temperature to 1 and dropped top_p for every model in it. That covers eleven models on this door while only three vendors refuse the caller's sampling. Measured against the vendors, each with a route control and a transparency probe (temperature 3.5 is refused by the vendor, so the parameter reaches it): - refuse: o3, gpt-5.5 and gpt-5-mini answer "Unsupported value: 'temperature' does not support 0.25 with this model. Only the default (1) value is supported" on OpenAI's own door; - accept, and still return a reasoning block: grok-4.5, grok-4.6, MiniMax-M2, GLM-4.6, Kimi-K2-Thinking, DeepSeek-R1, and mistral and gemini alongside them. So the pin now asks whether the vendor refuses, not whether the model thinks. Claude keeps its own rules; OpenAI's own reasoning line keeps the pin; everyone else keeps what the caller set. Dropping top_p was a regression against v0.1.14-update.7, where it reached the wire for these models. The temperature pin was not: the base read it from the call options, so a caller passing the model per call — as the consumer does — already lost it there. Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 11 +++-- llms/openai/openaillm.go | 11 ++++- llms/openai/openaillm_test.go | 8 ++-- llms/openai/sampling_matrix_test.go | 62 ++++++++++++++++++++++++--- 4 files changed, 76 insertions(+), 16 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 28ad347c4..93e6a36a8 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -58,17 +58,20 @@ func TestDeepSeekV32KeepsCallerSamplingUntilThinkingIsAsked(t *testing.T) { } } -func TestDeepSeekV32PinsSamplingOnceAnEffortReachesTheWire(t *testing.T) { +func TestDeepSeekV32KeepsSamplingEvenWithAnEffortOnTheWire(t *testing.T) { t.Parallel() body := captureDeepSeekRequest(t, "deepseek-v3.2", llms.WithTemperature(0.25), llms.WithTopP(0.3), llms.WithReasoning(llms.ReasoningHigh, 0)) - if got, want := body["temperature"], 1.0; got != want { + if got, want := body["temperature"], 0.25; got != want { t.Errorf("temperature = %v, want %v", got, want) } - if _, ok := body["top_p"]; ok { - t.Errorf("top_p = %v, want it dropped", body["top_p"]) + if got, ok := body["top_p"]; !ok || got != 0.3 { + t.Errorf("top_p = %v (present %v), want 0.3", got, ok) + } + if got, want := body["reasoning_effort"], "high"; got != want { + t.Errorf("reasoning_effort = %v, want %v", got, want) } } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 22a037c1c..0233a8dfe 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -407,7 +407,7 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO } switch { - case thinkingRuns(model, opts, wireEffort): + case refusesSamplingWhileThinking(model, opts, wireEffort): if req.Temperature != nil { temperature := 1.0 req.Temperature = &temperature @@ -417,11 +417,18 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO req.TopP = nil } - if isThinkingOnTheWire(wireEffort) { + if isThinkingOnTheWire(wireEffort) && refusesSamplingWhileThinking(model, opts, wireEffort) { req.TopP = nil } } +func refusesSamplingWhileThinking(model string, opts llms.CallOptions, wireEffort string) bool { + if !thinkingRuns(model, opts, wireEffort) { + return false + } + return reasoning.OpenAIReasoningCapsFor(model).Known || reasoning.ClaudeSupportsThinking(model) +} + // thinkingRuns reports whether the model reasons on this request: an effort // reached the wire, or none did and the model reasons until told otherwise. func thinkingRuns(model string, opts llms.CallOptions, wireEffort string) bool { diff --git a/llms/openai/openaillm_test.go b/llms/openai/openaillm_test.go index 3a70e86b5..66e5e318e 100644 --- a/llms/openai/openaillm_test.go +++ b/llms/openai/openaillm_test.go @@ -912,16 +912,16 @@ var reasoningTemperatureCases = []struct { expectedTemperature: 0.0, }, { - name: "deepseek-r1 reasoning model adjusts temperature", + name: "deepseek-r1 reasons but its vendor takes the caller's temperature", model: "deepseek-r1", temperature: 0.8, - expectedTemperature: 1.0, + expectedTemperature: 0.8, }, { - name: "gemini-2.5-flash reasoning model adjusts temperature", + name: "gemini-2.5-flash reasons but its vendor takes the caller's temperature", model: "gemini-2.5-flash-thinking-exp", temperature: 0.3, - expectedTemperature: 1.0, + expectedTemperature: 0.3, }, { name: "claude-3.7-sonnet thinks only when asked and keeps the temperature", diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 963077d5d..9713f9bb7 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -201,7 +201,7 @@ func TestAModelThatRejectsSamplingGetsNoSamplingAtAll(t *testing.T) { } } -func TestOptInThinkingKeepsSamplingUntilAsked(t *testing.T) { +func TestOptInThinkingKeepsSamplingWhateverIsAsked(t *testing.T) { t.Parallel() runSamplingCases(t, []samplingCase{ @@ -212,13 +212,12 @@ func TestOptInThinkingKeepsSamplingUntilAsked(t *testing.T) { present: []string{`"temperature":0.3`, `"top_p":0.7`}, }, { - name: "an effort puts the request on the thinking terms", + name: "an effort does not cost the caller their sampling", model: "mistral-medium-3", opts: []llms.CallOption{ llms.WithTemperature(0.3), llms.WithTopP(0.7), llms.WithReasoning(llms.ReasoningMedium, 0), }, - present: []string{`"temperature":1`, `"reasoning_effort":"medium"`}, - absent: []string{`"top_p"`}, + present: []string{`"temperature":0.3`, `"top_p":0.7`, `"reasoning_effort":"medium"`}, }, { name: "the provider-prefixed spelling resolves the same", @@ -245,10 +244,61 @@ func TestOptInThinkingKeepsSamplingUntilAsked(t *testing.T) { present: []string{`"temperature":0.3`}, }, { - name: "a family that reasons unasked keeps the pin", + name: "a family that reasons unasked still keeps the caller's sampling", model: "hy3-preview", - opts: []llms.CallOption{llms.WithTemperature(0.3)}, + opts: []llms.CallOption{llms.WithTemperature(0.3), llms.WithTopP(0.7)}, + present: []string{`"temperature":0.3`, `"top_p":0.7`}, + }, + }) +} + +func TestOnlyModelsWhoseVendorRefusesLoseTheirSampling(t *testing.T) { + t.Parallel() + + runSamplingCases(t, []samplingCase{ + { + name: "o3 is pinned: the vendor accepts only the default temperature", + model: "o3", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, present: []string{`"temperature":1`}, + absent: []string{`"top_p"`}, + }, + { + name: "gpt-5-mini is pinned for the same reason", + model: "gpt-5-mini", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + present: []string{`"temperature":1`}, + absent: []string{`"top_p"`}, + }, + { + name: "grok keeps both: the vendor takes them alongside thinking", + model: "grok-4", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + present: []string{`"temperature":0.25`, `"top_p":0.3`}, + }, + { + name: "glm keeps both", + model: "glm-4.6", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + present: []string{`"temperature":0.25`, `"top_p":0.3`}, + }, + { + name: "kimi keeps both", + model: "kimi-k2-thinking", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + present: []string{`"temperature":0.25`, `"top_p":0.3`}, + }, + { + name: "minimax keeps both", + model: "minimax-m2", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + present: []string{`"temperature":0.25`, `"top_p":0.3`}, + }, + { + name: "deepseek-r1 keeps both", + model: "deepseek-r1", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + present: []string{`"temperature":0.25`, `"top_p":0.3`}, }, }) } From 96a8bd174629c85745cda7f6c9c5ebeb1679397e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 30 Aug 2026 11:51:15 +0300 Subject: [PATCH 223/618] fix(reasoning): catalogue the models that were measured to reason MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-checking 433 models against models.dev surfaced names the catalogue never claimed. Each one below was then measured at the vendor with a route control, and only the confirmed ones are added. Reason on a plain call, so they join the catalogue: qwen3.5-* (4166 and 3057 chars of reasoning on two sizes) qwen3.7-max (4536) Reason once an effort reaches the wire: magistral-* (1251) gemini-flash-latest (1382) gemini-robotics-er-* (980) The Google matcher keyed off a version token, so the rolling "latest" aliases and the robotics line fell through it entirely. Two Google endpoints go the other way: -tts and -live-translate carry a thinking-family name but answer 400 to a chat completion, and one of them does not exist at all (404). Advertising thinking there offers a control nobody can use, so the matcher now excludes them. Qwen 3.0 deliberately stays out: it reasons only when the request carries enable_thinking, which no door sends. The optimistic hint still reports it. Two tests changed because they pinned a workaround rather than a behaviour. They kept Qwen out of the catalogue to stop it "widening the wire path, which pins temperature" — the sampling pin no longer follows from the catalogue, and a wire probe confirms temperature 0.25 and top_p still reach the wire for every model touched here. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 85 +++++++++++++++++++++++++++ llms/reasoning/detect_hint_test.go | 4 -- llms/reasoning/gemini_capability.go | 20 ++++++- llms/reasoning/reasoning.go | 13 +++- llms/reasoning/reasoning_test.go | 6 +- 5 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 llms/reasoning/catalogue_gaps_test.go diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go new file mode 100644 index 000000000..7fa1bd5b8 --- /dev/null +++ b/llms/reasoning/catalogue_gaps_test.go @@ -0,0 +1,85 @@ +package reasoning + +import "testing" + +func TestModelsThatReasonAreInTheCatalogue(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "magistral-medium-latest", + "mistral/magistral-medium-latest", + "magistral-small", + "qwen3.7-max", + "qwen3.5-35b-a3b", + "qwen3.5-397b-a17b", + "qwen3.6-plus", + "dashscope/qwen3.7-max", + "gemini-flash-latest", + "gemini-robotics-er-1.6-preview", + } { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, want true — measured reasoning at the vendor", model) + } + } +} + +func TestQwenCoderDoesNotReasonUnasked(t *testing.T) { + t.Parallel() + + if IsReasoningModel("qwen3-coder-plus") { + t.Error(`IsReasoningModel("qwen3-coder-plus") = true, want false — a plain call returns no reasoning block`) + } +} + +func TestNonChatGoogleSurfacesAreNotThinkingModels(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gemini-2.5-pro-preview-tts", + "gemini-2.5-flash-preview-tts", + "gemini-3.5-live-translate-preview", + } { + if GeminiSupportsThinking(model) { + t.Errorf("GeminiSupportsThinking(%q) = true, want false — the endpoint refuses a chat completion", model) + } + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, want false", model) + } + } +} + +func TestQwen3StaysOutUntilEnableThinkingIsSent(t *testing.T) { + t.Parallel() + + for _, model := range []string{"qwen3-32b", "qwen3-235b-a22b", "qwen3-vl-plus"} { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, want false", model) + } + if !LikelyReasoningModel(model) { + t.Errorf("LikelyReasoningModel(%q) = false, want true — the hint should stay optimistic", model) + } + } +} + +func TestChatGoogleFamiliesStillThink(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-2.5-flash", "gemini-2.5-pro", "gemini-3-pro", "gemma-4-26b"} { + if !GeminiSupportsThinking(model) { + t.Errorf("GeminiSupportsThinking(%q) = false, want true", model) + } + } +} + +func TestQwenTakesNoEffortOnTheWire(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "qwen3-32b", "qwen3-235b-a22b", "qwen3-vl-plus", + "qwen3.5-35b-a3b", "qwen3.7-max", "dashscope/qwen3.7-max", + } { + if AcceptsEffortWire(model) { + t.Errorf("AcceptsEffortWire(%q) = true, want false", model) + } + } +} diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index d66cc043b..4816114f6 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -116,10 +116,6 @@ func TestQwenHintIsOptimisticWithoutMovingTheWire(t *testing.T) { if got := LikelyReasoningModel(tc.model); got != tc.want { t.Errorf("LikelyReasoningModel(%q) = %v, want %v", tc.model, got, tc.want) } - if tc.want && IsReasoningModel(tc.model) { - t.Errorf("IsReasoningModel(%q) = true: the hint must not widen the wire path,"+ - " which pins temperature only for an explicit thinking marker", tc.model) - } } } diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 7180384b8..54781c7e4 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -34,9 +34,27 @@ func hasFamily(model, family string) bool { // family: Gemini 2.5, Gemini 3.x, or Gemma 4. func GeminiSupportsThinking(model string) bool { m := baseModelName(model) + if geminiNonChatSurface(m) { + return false + } return hasFamily(m, "gemini-2.5") || hasFamily(m, "gemini-3") || - hasFamily(m, "gemma-4") + hasFamily(m, "gemma-4") || + geminiUnversionedThinking(m) +} + +func geminiNonChatSurface(model string) bool { + return strings.HasSuffix(model, "-tts") || + strings.Contains(model, "-live-translate") +} + +func geminiUnversionedThinking(model string) bool { + for _, prefix := range []string{"gemini-flash-latest", "gemini-flash-lite-latest", "gemini-robotics-er"} { + if strings.HasPrefix(model, prefix) { + return true + } + } + return false } // GeminiUsesThinkingLevel reports whether the model uses the qualitative diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index ac831a185..65c60605a 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -250,7 +250,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // sampling, so the bare qwen3 prefix must not force temperature pinning; only // an explicit "thinking" marker or the QwQ line count as always-on reasoning. if (strings.HasPrefix(modelLower, "qwen") && ThinkingMarkedInName(modelLower)) || - strings.Contains(modelLower, "qwq-") { + strings.Contains(modelLower, "qwq-") || + qwenReasonsUnasked(modelLower) { return true } @@ -310,6 +311,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.HasPrefix(modelLower, "muse-spark") || strings.HasPrefix(modelLower, "mistral-medium-3") || strings.HasPrefix(modelLower, "mistral-small-2603") || + strings.HasPrefix(modelLower, "magistral") || strings.HasPrefix(modelLower, "nex-n2") || strings.HasPrefix(modelLower, "perceptron-mk") || strings.HasPrefix(modelLower, "laguna-") || @@ -353,3 +355,12 @@ func isAlpha(s string) bool { } return true } + +func qwenReasonsUnasked(model string) bool { + for _, prefix := range []string{"qwen3.5", "qwen3.6", "qwen3.7"} { + if strings.HasPrefix(model, prefix) { + return true + } + } + return false +} diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 3ae973672..f2ee593bb 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -777,9 +777,9 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen // and sampling is configurable, so temperature must not be pinned for them. {"qwen3-14b", false}, {"qwen3-235b-a22b", false}, - {"qwen3.5-9b", false}, - {"qwen3.6-flash", false}, - {"qwen3.7-max", false}, + {"qwen3.5-9b", true}, + {"qwen3.6-flash", true}, + {"qwen3.7-max", true}, {"qwen/qwen3-32b", false}, {"kimi-k3", true}, {"moonshotai/kimi-k3", true}, From 232b812db42d1498abffb0a1c12d74f86b98dc63 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 30 Aug 2026 14:18:27 +0300 Subject: [PATCH 224/618] fix(reasoning): read the non-reasoning marker anywhere in the name The exclusion for Grok's non-reasoning variants was anchored to the end of the string, so it only fired when the marker was the last token. The gateway serves grok-4-1-fast-non-reasoning-latest, where a -latest alias follows the marker: that model was classified as a reasoner and had its temperature pinned to 1 with top_p dropped, while the unaliased spelling kept both. Rows come from the live catalogue: the aliased form now answers false, and grok-4-fast-non-reasoning and grok-4-1-fast-non-reasoning stay false as controls. PAGI-133. Co-Authored-By: Claude Opus 5 --- llms/reasoning/reasoning.go | 4 ++-- llms/reasoning/reasoning_test.go | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 65c60605a..ca05d0e00 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -231,8 +231,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // X-AI Grok reasoning models if strings.HasPrefix(modelLower, "grok-3-mini") || - (strings.HasPrefix(modelLower, "grok-4") && !strings.HasSuffix(modelLower, "-non-reasoning")) || - (strings.HasPrefix(modelLower, "grok-5") && !strings.HasSuffix(modelLower, "-non-reasoning")) || + (strings.HasPrefix(modelLower, "grok-4") && !strings.Contains(modelLower, "-non-reasoning")) || + (strings.HasPrefix(modelLower, "grok-5") && !strings.Contains(modelLower, "-non-reasoning")) || strings.HasPrefix(modelLower, "grok-build") || strings.Contains(modelLower, "grok-code-fast") { return true diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index f2ee593bb..30ad1b856 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -695,6 +695,9 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"grok-4.20-multi-agent-0309", true}, {"grok-4.20-0309-reasoning", true}, {"grok-4.20-0309-non-reasoning", false}, + {"grok-4-fast-non-reasoning", false}, + {"grok-4-1-fast-non-reasoning", false}, + {"grok-4-1-fast-non-reasoning-latest", false}, {"x-ai/grok-4", true}, {"x-ai/grok-4.3", true}, {"x-ai/grok-4.5", true}, From 8f3b7e5ce58199f129839211b281c02aa6dde9db Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 30 Aug 2026 14:29:11 +0300 Subject: [PATCH 225/618] fix(reasoning): resolve the generation-first Claude spelling Anthropic ships Claude 4 under two spellings: claude-opus-4, which the capability tables are keyed on, and claude-4-opus, which the gateway serves from anthropic/ and deepinfra/. The second resolved to no table entry, so claude-4-opus and claude-4-sonnet were not reasoning models: a caller asking for thinking on them got a request with no thinking block and no error. canonicalClaude now moves the tier ahead of the generation. Generations below 4 are left alone because they are enumerated generation-first; the boundary is pinned from both sides, and removing it reddens TestClaudePredatesAdaptive. PAGI-133. Co-Authored-By: Claude Opus 5 --- llms/reasoning/claude_capability.go | 25 +++++++++++++++++++++++- llms/reasoning/claude_capability_test.go | 2 ++ llms/reasoning/reasoning_test.go | 4 ++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index e45378648..90555697f 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -2,6 +2,7 @@ package reasoning import ( "slices" + "strconv" "strings" ) @@ -320,7 +321,29 @@ func canonicalClaude(model string) string { } b.WriteByte(m[i]) } - return b.String() + return claudeTierFirst(b.String()) +} + +func claudeTierFirst(m string) string { + idx := strings.Index(m, "claude-") + if idx == -1 { + return m + } + head, rest := m[:idx+len("claude-")], m[idx+len("claude-"):] + parts := strings.Split(rest, "-") + if len(parts) < 2 || !isClaudeTier(parts[1]) { + return m + } + generation, err := strconv.Atoi(parts[0]) + if err != nil || generation < 4 { + return m + } + reordered := append([]string{parts[1], parts[0]}, parts[2:]...) + return head + strings.Join(reordered, "-") +} + +func isClaudeTier(s string) bool { + return s == "opus" || s == "sonnet" || s == "haiku" } func isDigit(c byte) bool { return c >= '0' && c <= '9' } diff --git a/llms/reasoning/claude_capability_test.go b/llms/reasoning/claude_capability_test.go index c443d01b0..5c7eb50c1 100644 --- a/llms/reasoning/claude_capability_test.go +++ b/llms/reasoning/claude_capability_test.go @@ -252,6 +252,8 @@ func TestClaudePredatesAdaptive(t *testing.T) { {"claude-opus-4-1-20250805", true}, {"claude-opus-4-20250514", true}, {"us.anthropic.claude-sonnet-4-20250514-v1:0", true}, + {"claude-3-opus", true}, + {"claude-4-opus-20250514", true}, {"claude-opus-4-5", false}, {"claude-sonnet-4-5", false}, {"claude-haiku-4-5", false}, diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 30ad1b856..47d00fcfb 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -653,6 +653,10 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"claude-haiku-4.5", true}, {"anthropic/claude-opus-4", true}, {"anthropic/claude-3.7-sonnet", true}, + {"claude-4-opus", true}, + {"claude-4-sonnet", true}, + {"claude-4-opus-20250514", true}, + {"anthropic/claude-4-sonnet-20250514", true}, // DeepSeek reasoning models {"deepseek-r1", true}, From eb814ad2f68a7e7afcd8ffc3fc9d4a9155221316 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 30 Aug 2026 14:33:21 +0300 Subject: [PATCH 226/618] fix(reasoning): classify the unversioned Claude aliases claude-opus-latest, claude-sonnet-latest, claude-haiku-latest and claude-fable-latest are served by openrouter, and claude-mythos-preview by anthropic and bedrock. None resolved to a capability entry, so a thinking request on them fell through to the budget path: thinking.type=enabled plus temperature=1, which the adaptive-only generations behind those aliases reject with a 400. Each alias joins the tables of the generation its tier points at. The tiers are not guessed: OpenRouter reports opus/sonnet/fable-latest with the full effort scale (fable mandatory) and haiku-latest with no efforts at all, matching Haiku 4.5, the budget-only tier. The detector now also answers yes to anything the capability table calls a thinking model, which is what claude-mythos-preview exposed: the table listed it as dual while IsReasoningModel said it did not reason, so the two doors disagreed on one name. PAGI-133. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 26 +++++++++++++++++++++++ llms/reasoning/claude_capability.go | 10 +++++++-- llms/reasoning/reasoning.go | 3 ++- llms/reasoning/reasoning_test.go | 5 +++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index 2e7d0ffc0..d150e8bf8 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1321,3 +1321,29 @@ func TestBudgetThinkingDoesNotPinTemperatureOnAModelThatRejectsIt(t *testing.T) require.InDelta(t, 1.0, payload["temperature"], 0.0001) }) } + +func TestUnversionedAliasRunsItsTiersMechanism(t *testing.T) { + t.Parallel() + + t.Run("an adaptive tier alias runs adaptive thinking", func(t *testing.T) { + t.Parallel() + payload, _ := captureMessagesRequestModel(t, "claude-opus-latest", + llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithTemperature(0.3)) + + thinking, ok := payload["thinking"].(map[string]any) + require.True(t, ok, "thinking must reach the wire, got %v", payload) + require.Equal(t, "adaptive", thinking["type"]) + require.NotContains(t, payload, "temperature", + "an adaptive-only model must not be sent temperature, got %v", payload) + }) + + t.Run("a budget tier alias keeps budget thinking", func(t *testing.T) { + t.Parallel() + payload, _ := captureMessagesRequestModel(t, "claude-haiku-latest", + llms.WithReasoning(llms.ReasoningHigh, 2048)) + + thinking, ok := payload["thinking"].(map[string]any) + require.True(t, ok, "thinking must reach the wire, got %v", payload) + require.Equal(t, "enabled", thinking["type"]) + }) +} diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 90555697f..c54ba6433 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -40,6 +40,7 @@ var ( adaptiveOnlyClaude = []string{ "claude-opus-4-7", "claude-opus-4-8", "claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-mythos-5", + "claude-opus-latest", "claude-sonnet-latest", "claude-fable-latest", } dualClaude = []string{ "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", @@ -47,7 +48,7 @@ var ( budgetOnlyClaude = []string{ "claude-opus-4-5", "claude-opus-4-1", "claude-opus-4-0", "claude-opus-4-2025", "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-sonnet-4-2025", - "claude-haiku-4-5", + "claude-haiku-4-5", "claude-haiku-latest", "claude-3-7", } ) @@ -84,10 +85,14 @@ func ClaudeSupportsThinking(model string) bool { // with effort xhigh/max on Opus 5, a constraint this package does not model // because this SDK never sends effort alongside a disable request). var ( - alwaysOnClaude = []string{"claude-fable-5", "claude-mythos-5", "claude-mythos-preview"} + alwaysOnClaude = []string{ + "claude-fable-5", "claude-mythos-5", "claude-mythos-preview", + "claude-fable-latest", + } defaultOnClaude = []string{ "claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-mythos-5", "claude-mythos-preview", + "claude-opus-latest", "claude-sonnet-latest", "claude-fable-latest", } ) @@ -298,6 +303,7 @@ func ClaudePredatesAdaptive(model string) bool { var rejectsSamplingClaude = []string{ "claude-fable-5", "claude-mythos-5", "claude-mythos-preview", "claude-opus-5", "claude-opus-4-8", "claude-opus-4-7", "claude-sonnet-5", + "claude-opus-latest", "claude-sonnet-latest", "claude-fable-latest", } // ClaudeRejectsSampling reports whether the model rejects temperature/top_p diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index ca05d0e00..eae6a1ed2 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -210,7 +210,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.HasPrefix(claudeName, "claude-sonnet-5") || strings.Contains(claudeName, "claude-fable-5") || strings.Contains(claudeName, "claude-mythos-5") || - strings.Contains(claudeName, "claude-haiku-4-5") { + strings.Contains(claudeName, "claude-haiku-4-5") || + ClaudeSupportsThinking(claudeName) { return true } diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 47d00fcfb..34cb6658b 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -774,6 +774,11 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"claude-mythos-5", true}, {"anthropic/claude-sonnet-5", true}, {"anthropic/claude-fable-5", true}, + {"claude-opus-latest", true}, + {"claude-sonnet-latest", true}, + {"claude-haiku-latest", true}, + {"claude-fable-latest", true}, + {"claude-mythos-preview", true}, {"o1", true}, {"openai/o1", true}, {"openai/o1-pro", true}, From 7215d5375fc18697d6a003e5651cb941bae9e63b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 30 Aug 2026 14:52:05 +0300 Subject: [PATCH 227/618] test(ollama): pin that the caller's sampling reaches the wire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This door carries sampling in a nested options object under names of its own — num_predict for the output cap, repeat_penalty for the repetition one — and nothing asserted that any of it arrives. A translation that silently dropped a field would leave both sides quiet: the request is well-formed without it and the model answers anyway. Verified by mutation: removing any one of the nine assignments in makeOllamaOptionsFromOptions reddens the test. Co-Authored-By: Claude Opus 5 --- llms/ollama/sampling_request_test.go | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 llms/ollama/sampling_request_test.go diff --git a/llms/ollama/sampling_request_test.go b/llms/ollama/sampling_request_test.go new file mode 100644 index 000000000..fc9d1f427 --- /dev/null +++ b/llms/ollama/sampling_request_test.go @@ -0,0 +1,44 @@ +package ollama + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestSamplingReachesTheWireInTheDoorsOwnShape(t *testing.T) { + t.Parallel() + + body := captureChatRequest(t, + llms.WithTemperature(0.3), + llms.WithTopP(0.7), + llms.WithTopK(11), + llms.WithMaxTokens(555), + llms.WithSeed(7), + llms.WithStopWords([]string{"STOP"}), + llms.WithRepetitionPenalty(1.3), + llms.WithFrequencyPenalty(0.4), + llms.WithPresencePenalty(0.6), + ) + + options, ok := body["options"].(map[string]any) + require.True(t, ok, "no options in the request; body=%v", body) + + for field, want := range map[string]float64{ + "temperature": 0.3, + "top_p": 0.7, + "top_k": 11, + "num_predict": 555, + "seed": 7, + "repeat_penalty": 1.3, + "frequency_penalty": 0.4, + "presence_penalty": 0.6, + } { + got, present := options[field] + require.Truef(t, present, "%s never reached the wire; options=%v", field, options) + require.InDeltaf(t, want, got, 1e-6, "%s = %v, want %v", field, got, want) + } + + require.Equal(t, []any{"STOP"}, options["stop"], "stop words did not reach the wire") +} From 67a72b204f31ae5d80e29c292a0837b7a7201b1f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 10:04:02 +0300 Subject: [PATCH 228/618] fix(reasoning): catalogue ten models measured to reason Each entry comes from two live calls through the gateway: one bare, one with reasoning_effort high. Nine return reasoning on the bare call and join the detector; solar-pro4 returns none until an effort asks, so it also joins the opt-in list. gpt-latest 363 grok-latest 119 glm-latest 222 kimi-latest 446 hy4-preview 8929 qwen3.8-flash 558 qwen3.8-max 561 ling-3.0-flash 266 longcat-2.0 1391 solar-pro4 0 -> 5916 with an effort The three neighbours that answer zero on both calls are pinned as controls, so widening any rule to cover them reddens: gpt-mini-latest, qwen3-max and qwen3-coder-plus. That is why the four aliases are exact names rather than a -latest rule; gpt-mini-latest shares the suffix and does not reason. Reaching these models needed allowed_openai_params on the request: the gateway refuses reasoning_effort for anything its own table does not flag as reasoning, which is a property of that table, not of the vendor. PAGI-133. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 31 +++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 20 +++++++++++------ llms/reasoning/reasoning_test.go | 12 +++++++++++ 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 7fa1bd5b8..81b5622cb 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -83,3 +83,34 @@ func TestQwenTakesNoEffortOnTheWire(t *testing.T) { } } } + +func TestMeasuredModelsSplitByWhenTheyReason(t *testing.T) { + t.Parallel() + + alwaysOn := []string{ + "gpt-latest", "grok-latest", "glm-latest", "kimi-latest", + "hy4-preview", "qwen3.8-flash", "qwen3.8-max", + "ling-3.0-flash", "longcat-2.0", + } + for _, model := range alwaysOn { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, want true", model) + } + if ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = true, but a bare call already returns reasoning", model) + } + } + + if !IsReasoningModel("solar-pro4") { + t.Error(`IsReasoningModel("solar-pro4") = false, want true`) + } + if !ThinkingOptIn("solar-pro4") { + t.Error(`ThinkingOptIn("solar-pro4") = false, but a bare call returns no reasoning until an effort asks`) + } + + for _, model := range []string{"gpt-mini-latest", "qwen3-max", "qwen3-coder-plus"} { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, but neither a bare call nor an effort returns reasoning", model) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index eae6a1ed2..933dc65bb 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -197,7 +197,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.HasPrefix(modelLower, "gpt-oss-") || strings.HasPrefix(modelLower, "o1") || strings.HasPrefix(modelLower, "o3") || - strings.HasPrefix(modelLower, "o4-mini") { + strings.HasPrefix(modelLower, "o4-mini") || + modelLower == "gpt-latest" { return true } @@ -235,7 +236,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat (strings.HasPrefix(modelLower, "grok-4") && !strings.Contains(modelLower, "-non-reasoning")) || (strings.HasPrefix(modelLower, "grok-5") && !strings.Contains(modelLower, "-non-reasoning")) || strings.HasPrefix(modelLower, "grok-build") || - strings.Contains(modelLower, "grok-code-fast") { + strings.Contains(modelLower, "grok-code-fast") || + modelLower == "grok-latest" { return true } @@ -243,7 +245,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat if strings.HasPrefix(modelLower, "glm-4.5") || strings.HasPrefix(modelLower, "glm-4.6") || strings.HasPrefix(modelLower, "glm-4.7") || - strings.HasPrefix(modelLower, "glm-5") { + strings.HasPrefix(modelLower, "glm-5") || + modelLower == "glm-latest" { return true } @@ -268,7 +271,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.Contains(modelLower, "2.6") || strings.Contains(modelLower, "2.7") || strings.Contains(modelLower, "k3") || - strings.Contains(modelLower, "dev-72b")) { + strings.Contains(modelLower, "dev-72b")) || + modelLower == "kimi-latest" { return true } @@ -319,7 +323,11 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.HasPrefix(modelLower, "reka-flash-3") || strings.HasPrefix(modelLower, "fugu-ultra") || strings.HasPrefix(modelLower, "hy3") || + strings.HasPrefix(modelLower, "hy4") || strings.HasPrefix(modelLower, "solar-pro-3") || + strings.HasPrefix(modelLower, "solar-pro4") || + strings.HasPrefix(modelLower, "ling-3.0") || + strings.HasPrefix(modelLower, "longcat-2") || strings.Contains(modelLower, "trinity-large-thinking") { return true } @@ -333,7 +341,7 @@ func ThinkingOptIn(model string) bool { return true } for _, form := range modelSpellings(model) { - for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3", "deepseek-v3.2"} { + for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3", "solar-pro4", "deepseek-v3.2"} { if strings.HasPrefix(form, prefix) { return true } @@ -358,7 +366,7 @@ func isAlpha(s string) bool { } func qwenReasonsUnasked(model string) bool { - for _, prefix := range []string{"qwen3.5", "qwen3.6", "qwen3.7"} { + for _, prefix := range []string{"qwen3.5", "qwen3.6", "qwen3.7", "qwen3.8"} { if strings.HasPrefix(model, prefix) { return true } diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 34cb6658b..d61471337 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -792,6 +792,8 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"qwen3.5-9b", true}, {"qwen3.6-flash", true}, {"qwen3.7-max", true}, + {"qwen3.8-flash", true}, + {"qwen3.8-max", true}, {"qwen/qwen3-32b", false}, {"kimi-k3", true}, {"moonshotai/kimi-k3", true}, @@ -818,6 +820,16 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"hy3", true}, {"tencent/hy3-preview", true}, {"solar-pro-3", true}, + {"solar-pro4", true}, + {"hy4-preview", true}, + {"ling-3.0-flash", true}, + {"longcat-2.0", true}, + {"gpt-latest", true}, + {"grok-latest", true}, + {"glm-latest", true}, + {"kimi-latest", true}, + {"gpt-mini-latest", false}, + {"qwen3-max", false}, {"trinity-large-thinking", true}, // Non-reasoning models From e93a00b9bcd9642875be5c65ded97876e7bbe41e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 10:15:33 +0300 Subject: [PATCH 229/618] fix(reasoning): drop five classifications the vendor contradicts Each row comes from a live call, bare and with an effort. Four families answered zero both ways while the catalogue called them reasoning models, and one refuses to stop reasoning at all. deepseek-chat-v3-0324 0/0, while deepseek-chat-v3.1 returns 4740 minimax-m2-her 0/0, while minimax-m2 returns 2617 aion-rp-llama-3.1-8b 0/0, while aion-2.0 returns 2355 gemini-2.5-flash-image an image generator; an effort makes Gemini refuse glm-5.3, glm-5.3-flash "Reasoning is mandatory for this model" on a disable So the rules narrow by exactly what was measured: a dot after deepseek-chat-v3 separates the March 2024 build from the thinking line, -her and aion-rp name the single variant each that does not reason, and -image covers seven Gemini image models that all carried the reasoning verdict of their text siblings. GLM 5.3 now resolves an explicit off to unsupported, which also flips CannotDisable in the hint pentagi reads. The one stale expectation in the table is corrected rather than kept: it asserted deepseek-chat-v3-0324 reasons, and the vendor says otherwise. PAGI-133. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 40 +++++++++++++++++++++++++++ llms/reasoning/gemini_capability.go | 3 +- llms/reasoning/off.go | 12 ++++++++ llms/reasoning/reasoning.go | 6 ++-- llms/reasoning/reasoning_test.go | 2 +- 5 files changed, 58 insertions(+), 5 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 81b5622cb..d1f76d06a 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -114,3 +114,43 @@ func TestMeasuredModelsSplitByWhenTheyReason(t *testing.T) { } } } + +func TestModelsMeasuredNotToReasonStayOut(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"deepseek-chat-v3-0324", false}, + {"deepseek-chat-v3.1", true}, + {"minimax-m2-her", false}, + {"minimax-m2", true}, + {"minimax-m2.7", true}, + {"aion-rp-llama-3.1-8b", false}, + {"aion-2.0", true}, + {"aion-3.0", true}, + {"gemini-2.5-flash-image", false}, + {"gemini-2.5-flash", true}, + } { + if got := IsReasoningModel(tc.model); got != tc.want { + t.Errorf("IsReasoningModel(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + +func TestMandatoryThinkingCannotBeDisabled(t *testing.T) { + t.Parallel() + + for _, model := range []string{"glm-5.3", "glm-5.3-flash"} { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the vendor answers "+ + "\"Reasoning is mandatory\" to an explicit disable", model, got) + } + } + for _, model := range []string{"glm-4.6", "glm-5"} { + if got := ResolveOff(model, ProviderOpenAI); got == OffUnsupported { + t.Errorf("ResolveOff(%q) = OffUnsupported, but this generation was never measured to refuse a disable", model) + } + } +} diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 54781c7e4..6cc1fdba5 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -45,7 +45,8 @@ func GeminiSupportsThinking(model string) bool { func geminiNonChatSurface(model string) bool { return strings.HasSuffix(model, "-tts") || - strings.Contains(model, "-live-translate") + strings.Contains(model, "-live-translate") || + strings.Contains(model, "-image") } func geminiUnversionedThinking(model string) bool { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index c1243e72b..b4f18c291 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -85,6 +85,9 @@ func ResolveOff(model string, p Provider) OffWire { if !IsReasoningModel(model) { return OffOmit // non-reasoning model does not think } + if mandatoryThinking(model) { + return OffUnsupported + } // The disable token rides on the effort field, so a door that refuses that // field cannot express "off" at all. if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { @@ -117,3 +120,12 @@ func openAIMandatoryReasoning(model string) bool { } return false } + +func mandatoryThinking(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "glm-5.3") { + return true + } + } + return false +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 933dc65bb..3f543abba 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -219,7 +219,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // DeepSeek reasoning models if strings.Contains(modelLower, "deepseek-r1") || strings.Contains(modelLower, "deepseek-reasoner") || - strings.Contains(modelLower, "deepseek-chat-v3") || + strings.Contains(modelLower, "deepseek-chat-v3.") || strings.Contains(modelLower, "deepseek-v3.1-terminus") || strings.HasPrefix(modelLower, "deepseek-v3.2") || strings.HasPrefix(modelLower, "deepseek-v4") { @@ -260,7 +260,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat } // Minimax reasoning models - if strings.HasPrefix(modelLower, "minimax-m") { + if strings.HasPrefix(modelLower, "minimax-m") && !strings.Contains(modelLower, "-her") { return true } @@ -285,7 +285,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat } // Other reasoning models - if strings.Contains(modelLower, "aion-") || + if (strings.Contains(modelLower, "aion-") && !strings.Contains(modelLower, "aion-rp")) || (strings.Contains(modelLower, "olmo-") && strings.Contains(modelLower, "-think")) || strings.Contains(modelLower, "nova-2-lite") || strings.Contains(modelLower, "trinity-mini") || diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index d61471337..54f04826c 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -662,7 +662,7 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"deepseek-r1", true}, {"deepseek-r1-0528", true}, {"deepseek-r1-distill-llama-70b", true}, - {"deepseek-chat-v3-0324", true}, + {"deepseek-chat-v3-0324", false}, {"deepseek-chat-v3.1", true}, {"deepseek-v3.1-terminus", true}, {"deepseek-v3.2", true}, From 989a533a81dce796cfeeb5761946b0578ea6f541 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 10:47:28 +0300 Subject: [PATCH 230/618] fix(reasoning): keep thinking off Google's speech surfaces The TTS exclusion was anchored to the end of the name, so it fired on gemini-2.5-flash-preview-tts but not on gemini-3.1-flash-tts-preview, where the marker sits mid-string. Transcription models were never excluded at all. The vendor is explicit about both. gemini-3.1-flash-tts-preview and gemini-3.5-transcribe each answer a thinking request with 400: "Thinking level is not supported for this model." So the marker is now read anywhere in the name and transcription joins the surfaces that take no thinking. gemini-2.5-flash, gemini-3.5-flash and gemini-2.5-pro are pinned alongside, so widening the rule over a chat model reddens. PAGI-133. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 23 +++++++++++++++++++++++ llms/reasoning/gemini_capability.go | 5 +++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index d1f76d06a..d1ca9fb5f 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -154,3 +154,26 @@ func TestMandatoryThinkingCannotBeDisabled(t *testing.T) { } } } + +func TestGoogleSurfacesThatRefuseThinkingStayOut(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gemini-2.5-flash-preview-tts", + "gemini-2.5-pro-preview-tts", + "gemini-3.1-flash-tts-preview", + "gemini-3.5-transcribe", + "gemini-3.5-transcribe-live", + } { + if GeminiSupportsThinking(model) { + t.Errorf("GeminiSupportsThinking(%q) = true, but the vendor answers "+ + "\"Thinking level is not supported for this model\"", model) + } + } + + for _, model := range []string{"gemini-2.5-flash", "gemini-3.5-flash", "gemini-2.5-pro"} { + if !GeminiSupportsThinking(model) { + t.Errorf("GeminiSupportsThinking(%q) = false, want true", model) + } + } +} diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 6cc1fdba5..87f173327 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -44,9 +44,10 @@ func GeminiSupportsThinking(model string) bool { } func geminiNonChatSurface(model string) bool { - return strings.HasSuffix(model, "-tts") || + return strings.Contains(model, "-tts") || strings.Contains(model, "-live-translate") || - strings.Contains(model, "-image") + strings.Contains(model, "-image") || + strings.Contains(model, "transcribe") } func geminiUnversionedThinking(model string) bool { From 21bcd9a2904708c9305ce2e75fd973bc98a19ee6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 11:39:14 +0300 Subject: [PATCH 231/618] fix(reasoning): catalogue the DeepSeek V3.1 line as opt-in MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The line was split three ways: deepseek-v3.1 was not a reasoning model at all, while deepseek-chat-v3.1 and deepseek-v3.1-terminus were, and both were treated as reasoning unasked. All three behave the same way in a live call — a bare request returns no reasoning, and one with an effort returns it: DeepSeek-V3.1 bare 0, effort 2506 deepseek-chat-v3.1 bare 0, effort 5207 DeepSeek-V3.1-Terminus bare 0 So the whole line joins the detector and the opt-in list, exactly like V3.2 next to it. V3 stays out on both counts, pinned alongside: it answers zero either way. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 21 +++++++++++++++++++++ llms/reasoning/reasoning.go | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index d1ca9fb5f..286b98421 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -177,3 +177,24 @@ func TestGoogleSurfacesThatRefuseThinkingStayOut(t *testing.T) { } } } + +func TestDeepSeekV31ReasonsOnlyWhenAsked(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "deepseek-v3.1", "deepseek-chat-v3.1", "deepseek-v3.1-terminus", + } { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, but an effort returns reasoning", model) + } + if !ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = false, but a bare call returns none", model) + } + } + + for _, model := range []string{"deepseek-v3", "deepseek-v3-0324", "deepseek-chat-v3-0324"} { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, but it answers zero both ways", model) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 3f543abba..7fab58bec 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -220,7 +220,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat if strings.Contains(modelLower, "deepseek-r1") || strings.Contains(modelLower, "deepseek-reasoner") || strings.Contains(modelLower, "deepseek-chat-v3.") || - strings.Contains(modelLower, "deepseek-v3.1-terminus") || + strings.Contains(modelLower, "deepseek-v3.1") || strings.HasPrefix(modelLower, "deepseek-v3.2") || strings.HasPrefix(modelLower, "deepseek-v4") { return true @@ -341,7 +341,7 @@ func ThinkingOptIn(model string) bool { return true } for _, form := range modelSpellings(model) { - for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3", "solar-pro4", "deepseek-v3.2"} { + for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3", "solar-pro4", "deepseek-v3.1", "deepseek-chat-v3.1", "deepseek-v3.2"} { if strings.HasPrefix(form, prefix) { return true } From c6ac1313ac9015b8827de57d1b902d81cedfe737 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 11:45:32 +0300 Subject: [PATCH 232/618] fix(reasoning): stop sending xAI efforts its models refuse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two vendor refusals, both measured, neither of which the catalogue knew. Three Grok models reject the effort field outright, at any value: Model grok-code-fast-1 does not support parameter reasoningEffort Model grok-4.20 does not support parameter reasoningEffort Model grok-build-0.1 does not support parameter reasoningEffort They reason on their own — a bare call returns 116, 119 characters — so they stay reasoning models, but the effort no longer rides the wire for them. Two generations reject only the disable, which is a different refusal: grok-4.5, grok-4.6: This model does not support reasoning_effort value none They join mandatory thinking, so an explicit off resolves to unsupported and CannotDisable flips in the hint. The boundary is pinned from the other side: grok-4, grok-4.3, grok-3-mini and grok-4-1-fast-reasoning all accept both an effort and an explicit off, and widening either rule over them reddens. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 34 +++++++++++++++++++++++++++ llms/reasoning/effort_wire.go | 5 ++++ llms/reasoning/off.go | 4 +++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 286b98421..29c1002f2 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -198,3 +198,37 @@ func TestDeepSeekV31ReasonsOnlyWhenAsked(t *testing.T) { } } } + +func TestGrokModelsThatTakeNoEffortOnTheWire(t *testing.T) { + t.Parallel() + + for _, model := range []string{"grok-code-fast-1", "grok-code-fast", "grok-4.20", "grok-build-0.1"} { + if AcceptsEffortWire(model) { + t.Errorf("AcceptsEffortWire(%q) = true, but the vendor answers "+ + "\"does not support parameter reasoningEffort\" to any effort", model) + } + } + + for _, model := range []string{"grok-4", "grok-4.3", "grok-3-mini", "grok-4-1-fast-reasoning"} { + if !AcceptsEffortWire(model) { + t.Errorf("AcceptsEffortWire(%q) = false, but the vendor accepts an effort", model) + } + } +} + +func TestGrokGenerationsThatCannotStopThinking(t *testing.T) { + t.Parallel() + + for _, model := range []string{"grok-4.5", "grok-4.5-latest", "grok-4.6"} { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the vendor answers "+ + "\"This model does not support reasoning_effort value none\"", model, got) + } + } + + for _, model := range []string{"grok-4", "grok-4.3", "grok-3-mini"} { + if got := ResolveOff(model, ProviderOpenAI); got == OffUnsupported { + t.Errorf("ResolveOff(%q) = OffUnsupported, but the vendor accepts an explicit off", model) + } + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 80189bfdf..2b88f232a 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -13,6 +13,11 @@ func AcceptsEffortWire(model string) bool { if strings.Contains(form, "kimi-k2") { return false } + if strings.HasPrefix(form, "grok-code-fast") || + strings.HasPrefix(form, "grok-build") || + strings.HasPrefix(form, "grok-4.20") { + return false + } } return true } diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index b4f18c291..3b07077c1 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -123,7 +123,9 @@ func openAIMandatoryReasoning(model string) bool { func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "glm-5.3") { + if strings.HasPrefix(form, "glm-5.3") || + strings.HasPrefix(form, "grok-4.5") || + strings.HasPrefix(form, "grok-4.6") { return true } } From 92f2078a02eaddeece5100300e9e42c70dcb5c07 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 11:52:51 +0300 Subject: [PATCH 233/618] fix(reasoning): MiniMax M2 keeps thinking whatever the caller asks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The M2 line cannot stop reasoning, and the two routes say so differently. Through OpenRouter the vendor refuses outright: Reasoning is mandatory for this endpoint and cannot be disabled Through the native route there is no error at all — MiniMax-M2.5 answered an explicit off with 1687 characters of reasoning, M2.7 with 2814, and the documented thinking:{"type":"disabled"} left 3130. Silent, so the caller believes thinking is off while it runs and bills. An explicit off now resolves to unsupported for the line, which also flips CannotDisable in the hint. M3 stays as it was, pinned on the other side: there the same off returns no reasoning at all, so the vendor honours it. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 19 +++++++++++++++++++ llms/reasoning/off.go | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 29c1002f2..4fdf4d37b 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -232,3 +232,22 @@ func TestGrokGenerationsThatCannotStopThinking(t *testing.T) { } } } + +func TestMiniMaxM2CannotStopThinking(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "minimax-m2", "minimax-m2.1", "minimax-m2.5", "minimax-m2.7", + "minimax-m2.7-highspeed", "minimax.minimax-m2.5", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the vendor answers "+ + "\"Reasoning is mandatory for this endpoint and cannot be disabled\", "+ + "and the native route keeps thinking regardless", model, got) + } + } + + if got := ResolveOff("minimax-m3", ProviderOpenAI); got == OffUnsupported { + t.Error(`ResolveOff("minimax-m3") = OffUnsupported, but an explicit off returns no reasoning`) + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 3b07077c1..62f9fbc0e 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -125,7 +125,8 @@ func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "glm-5.3") || strings.HasPrefix(form, "grok-4.5") || - strings.HasPrefix(form, "grok-4.6") { + strings.HasPrefix(form, "grok-4.6") || + strings.HasPrefix(form, "minimax-m2") { return true } } From 33830c881b7f829ed698a45e3783fc26d8085ecb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 12:01:34 +0300 Subject: [PATCH 234/618] fix(reasoning): glm-latest keeps thinking through an explicit off MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The alias points at the 5.3 line, where reasoning is mandatory, but it does not refuse the way the pinned name does. Two calls with reasoning_effort none came back with 53 and 7 characters of reasoning and no error at all, while glm-5.3 on the same request answers: Reasoning is mandatory for this endpoint and cannot be disabled OpenRouter marks the alias mandatory too. It now resolves an explicit off to unsupported. The generations that honour the off are pinned beside it — glm-4.6 and glm-5 both return zero reasoning for the same request, and glm-5.1 and glm-5.2 take an effort normally. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 15 +++++++++++++++ llms/reasoning/off.go | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 4fdf4d37b..51d210452 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -251,3 +251,18 @@ func TestMiniMaxM2CannotStopThinking(t *testing.T) { t.Error(`ResolveOff("minimax-m3") = OffUnsupported, but an explicit off returns no reasoning`) } } + +func TestGLMLatestCannotStopThinking(t *testing.T) { + t.Parallel() + + if got := ResolveOff("glm-latest", ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(\"glm-latest\") = %v, want OffUnsupported: an explicit off "+ + "still returns reasoning, and the alias points at the mandatory 5.3 line", got) + } + + for _, model := range []string{"glm-4.6", "glm-5", "glm-5.1", "glm-5.2"} { + if got := ResolveOff(model, ProviderOpenAI); got == OffUnsupported { + t.Errorf("ResolveOff(%q) = OffUnsupported, but an explicit off returns no reasoning", model) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 62f9fbc0e..e1bd73a9d 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -126,7 +126,8 @@ func mandatoryThinking(model string) bool { if strings.HasPrefix(form, "glm-5.3") || strings.HasPrefix(form, "grok-4.5") || strings.HasPrefix(form, "grok-4.6") || - strings.HasPrefix(form, "minimax-m2") { + strings.HasPrefix(form, "minimax-m2") || + form == "glm-latest" { return true } } From 5030890d085c34c7f150db7dc4c1c51c1caecb72 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 12:14:29 +0300 Subject: [PATCH 235/618] fix(reasoning): let Kimi take an effort and refuse only the off Eleven measured model x route combinations answer 200 to reasoning_effort on kimi-k2.5, k2.6, k2.7-code, k2-thinking and k3 across Moonshot, OpenRouter, DeepInfra, Bedrock, DashScope and opencode, so the blanket kimi-k2 rule dropped a field every door accepts. The real boundary is the disable: kimi-k2-thinking answers "Reasoning is mandatory for this endpoint and cannot be disabled" and kimi-k2.7-code answers "invalid thinking", while k2.5 and k2.6 honour effort=none with zero reasoning tokens. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_effort_door_test.go | 16 ++++++++++++++- llms/openai/reasoning_wire_test.go | 4 ++-- llms/reasoning/catalogue_gaps_test.go | 24 +++++++++++++++++++++++ llms/reasoning/effort_wire.go | 3 --- llms/reasoning/effort_wire_test.go | 11 ++++++----- llms/reasoning/off.go | 4 +++- 6 files changed, 50 insertions(+), 12 deletions(-) diff --git a/llms/openai/reasoning_effort_door_test.go b/llms/openai/reasoning_effort_door_test.go index 3150cd6c4..aad93cae5 100644 --- a/llms/openai/reasoning_effort_door_test.go +++ b/llms/openai/reasoning_effort_door_test.go @@ -37,7 +37,7 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { return body, err } - for _, model := range []string{"kimi-k2.7-code-highspeed", "kimi-k2.6", "qwen3-next-80b-a3b-thinking"} { + for _, model := range []string{"qwen3-next-80b-a3b-thinking"} { t.Run(model+" drops a requested effort", func(t *testing.T) { body, err := capture(t, model, llms.WithReasoning(llms.ReasoningMedium, 0)) if err != nil { @@ -47,7 +47,9 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { t.Fatalf("%s must not receive reasoning_effort, got body: %s", model, body) } }) + } + for _, model := range []string{"kimi-k2.7-code-highspeed", "kimi-k2-thinking", "qwen3-next-80b-a3b-thinking"} { t.Run(model+" reports off as unsupported", func(t *testing.T) { _, err := capture(t, model, llms.WithReasoningDisabled()) if err == nil { @@ -59,6 +61,18 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { }) } + for _, model := range []string{"kimi-k2.6", "kimi-k2.7-code-highspeed"} { + t.Run(model+" carries the effort to the wire", func(t *testing.T) { + body, err := capture(t, model, llms.WithReasoning(llms.ReasoningMedium, 0)) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + if !strings.Contains(body, `"reasoning_effort":"medium"`) { + t.Fatalf("%s accepts reasoning_effort and must receive it, got body: %s", model, body) + } + }) + } + t.Run("kimi-k3 still receives the effort", func(t *testing.T) { body, err := capture(t, "kimi-k3", llms.WithReasoning(llms.ReasoningMedium, 0)) if err != nil { diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 896c5658f..696482253 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -135,7 +135,7 @@ func TestTheBudgetOnTheWireRespectsTheVendorFloor(t *testing.T) { func TestABudgetTravelsToADoorThatRejectsTheEffortField(t *testing.T) { t.Parallel() - for _, model := range []string{"kimi-k2.5", "qwen3-235b-a22b-thinking-2507", "qwq-32b"} { + for _, model := range []string{"qwen3-235b-a22b-thinking-2507", "qwq-32b"} { t.Run(model, func(t *testing.T) { t.Parallel() @@ -154,7 +154,7 @@ func TestABudgetTravelsToADoorThatRejectsTheEffortField(t *testing.T) { func TestTheEffortFieldStaysOffADoorThatRejectsIt(t *testing.T) { t.Parallel() - body := sendModernReasoningForModel(t, "kimi-k2.5", llms.ReasoningHigh, 0) + body := sendModernReasoningForModel(t, "qwq-32b", llms.ReasoningHigh, 0) if strings.Contains(body, `"effort"`) { t.Fatalf("an effort-only request must not put the field on a door that rejects it; body: %s", body) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 51d210452..95e507a1f 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -266,3 +266,27 @@ func TestGLMLatestCannotStopThinking(t *testing.T) { } } } + +func TestKimiTakesEffortButNotAlwaysAnOff(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking", "kimi-k3", + } { + if !AcceptsEffortWire(model) { + t.Errorf("AcceptsEffortWire(%q) = false, but every route measured accepts an effort", model) + } + } + + for _, model := range []string{"kimi-k2-thinking", "kimi-k2.7-code", "kimi-k2.7-code-highspeed"} { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the vendor refuses an explicit off", model, got) + } + } + + for _, model := range []string{"kimi-k2.5", "kimi-k2.6"} { + if got := ResolveOff(model, ProviderOpenAI); got == OffUnsupported { + t.Errorf("ResolveOff(%q) = OffUnsupported, but an explicit off returns no reasoning", model) + } + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 2b88f232a..22e28a17b 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -10,9 +10,6 @@ func AcceptsEffortWire(model string) bool { if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { return false } - if strings.Contains(form, "kimi-k2") { - return false - } if strings.HasPrefix(form, "grok-code-fast") || strings.HasPrefix(form, "grok-build") || strings.HasPrefix(form, "grok-4.20") { diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index e543b7d6b..19365883a 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -13,10 +13,10 @@ func TestAcceptsEffortWire(t *testing.T) { {"dashscope/qwen3-next-80b-a3b-thinking", false}, {"qwen3.7-max", false}, {"qwq-32b", false}, - {"kimi-k2.7-code-highspeed", false}, - {"moonshot/kimi-k2.7-code", false}, - {"kimi-k2.6", false}, - {"kimi-k2-thinking", false}, + {"kimi-k2.7-code-highspeed", true}, + {"moonshot/kimi-k2.7-code", true}, + {"kimi-k2.6", true}, + {"kimi-k2-thinking", true}, {"kimi-k3", true}, {"moonshot/kimi-k3", true}, {"gpt-5.5", true}, @@ -40,7 +40,8 @@ func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { }{ {"qwen3-next-80b-a3b-thinking", OffUnsupported}, {"kimi-k2.7-code-highspeed", OffUnsupported}, - {"kimi-k2.6", OffUnsupported}, + {"kimi-k2.6", OffEffortNone}, + {"kimi-k2-thinking", OffUnsupported}, {"kimi-k3", OffEffortNone}, {"deepseek-v4-pro", OffEffortNone}, {"glm-5-turbo", OffEffortNone}, diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index e1bd73a9d..7c22c2f4b 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -127,7 +127,9 @@ func mandatoryThinking(model string) bool { strings.HasPrefix(form, "grok-4.5") || strings.HasPrefix(form, "grok-4.6") || strings.HasPrefix(form, "minimax-m2") || - form == "glm-latest" { + form == "glm-latest" || + strings.HasPrefix(form, "kimi-k2-thinking") || + strings.HasPrefix(form, "kimi-k2.7-code") { return true } } From 470df3b0cb08a9a101290f7ecd64d6e9eca12ff7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:13:08 +0300 Subject: [PATCH 236/618] fix(reasoning): keep non-chat NVIDIA surfaces out of the catalogue The nemotron rule matched on the substring alone, so the embedding, reranking, ASR and content-safety routes were classified as reasoning models and reported a reasoning_effort disable to the caller. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 24 ++++++++++++++++++++++++ llms/reasoning/reasoning.go | 9 ++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 95e507a1f..0e18a08b6 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -290,3 +290,27 @@ func TestKimiTakesEffortButNotAlwaysAnOff(t *testing.T) { } } } + +func TestNonChatNvidiaSurfacesAreNotReasoningModels(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "nvidia/Nemotron-3-Embed-8B", "nvidia/Nemotron-3-Embed-1B-BF16", + "nvidia/llama-nemotron-embed-vl-1b-v2", "nvidia/llama-nemotron-rerank-vl-1b-v2", + "nvidia/Nemotron-3.5-ASR-Streaming-Multilingual-0.6b", + "nvidia/Nemotron-Content-Safety-3.5", "nvidia/nemotron-3.5-content-safety", + } { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, but the route serves no chat completion", model) + } + } + + for _, model := range []string{ + "nvidia/NVIDIA-Nemotron-Nano-9B-v2", "nvidia/nemotron-3-super-120b-a12b", + "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning", "nvidia.nemotron-nano-9b-v2", + } { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, but the chat route still reasons", model) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 7fab58bec..ea6ea1aa8 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -187,6 +187,13 @@ func DefaultIsReasoningModel(model string) bool { return false } +func nvidiaNonChatSurface(model string) bool { + return strings.Contains(model, "-embed-") || + strings.Contains(model, "-rerank-") || + strings.Contains(model, "-asr-") || + strings.Contains(model, "content-safety") +} + func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat catalog of model-family prefix checks; splitting hurts readability if strings.Contains(modelLower, "-chat-latest") { return false @@ -295,7 +302,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat (strings.Contains(modelLower, "lfm-") && strings.Contains(modelLower, "-thinking")) || strings.Contains(modelLower, "deephermes") || strings.Contains(modelLower, "hermes-4-") || - strings.Contains(modelLower, "nemotron") || + (strings.Contains(modelLower, "nemotron") && !nvidiaNonChatSurface(modelLower)) || strings.Contains(modelLower, "intellect-3") || strings.Contains(modelLower, "step3") || strings.Contains(modelLower, "hunyuan-a13b") || From 85fb1d89aa3b2efc856c6855acc08f0058f50150 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:14:08 +0300 Subject: [PATCH 237/618] fix(reasoning): catalogue the Mistral aliases that reason The catalogue knew mistral-medium-3-5 and mistral-small-2603 but not mistral-medium-latest, mistral-medium-2604, bare mistral-medium or mistral-small-latest, which the vendor lists as aliases of the very same models. An explicit effort makes all of them return a reasoning block, while mistral-medium-2505, mistral-medium-2508 and the large series answer 400 reasoning_effort is not enabled. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 24 ++++++++++++++++++++++++ llms/reasoning/reasoning.go | 23 ++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 0e18a08b6..a516cdff8 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -314,3 +314,27 @@ func TestNonChatNvidiaSurfacesAreNotReasoningModels(t *testing.T) { } } } + +func TestMistralAliasesOfTheSameModelAgree(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "mistral-medium-latest", "mistral-medium-2604", "mistral-medium", "mistral-medium-3-5", + "mistral-small-latest", "mistral-small-2603", "mistralai/mistral-medium-latest", + } { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, but the vendor reasons on an explicit effort", model) + } + if !ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = false, but a bare call returns no reasoning", model) + } + } + + for _, model := range []string{ + "mistral-medium-2505", "mistral-medium-2508", "mistral-large-latest", "mistral-large-2512", + } { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, but the vendor answers 400 reasoning_effort is not enabled", model) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index ea6ea1aa8..ad3a34065 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -187,6 +187,21 @@ func DefaultIsReasoningModel(model string) bool { return false } +func mistralReasons(model string) bool { + if model == "mistral-medium" { + return true + } + for _, prefix := range []string{ + "mistral-medium-3", "mistral-medium-latest", "mistral-medium-2604", + "mistral-small-2603", "mistral-small-latest", + } { + if strings.HasPrefix(model, prefix) { + return true + } + } + return false +} + func nvidiaNonChatSurface(model string) bool { return strings.Contains(model, "-embed-") || strings.Contains(model, "-rerank-") || @@ -321,8 +336,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.HasPrefix(modelLower, "mercury-2") || strings.HasPrefix(modelLower, "ring-2.6") || strings.HasPrefix(modelLower, "muse-spark") || - strings.HasPrefix(modelLower, "mistral-medium-3") || - strings.HasPrefix(modelLower, "mistral-small-2603") || + mistralReasons(modelLower) || strings.HasPrefix(modelLower, "magistral") || strings.HasPrefix(modelLower, "nex-n2") || strings.HasPrefix(modelLower, "perceptron-mk") || @@ -348,7 +362,10 @@ func ThinkingOptIn(model string) bool { return true } for _, form := range modelSpellings(model) { - for _, prefix := range []string{"mistral-medium-3", "mistral-small-2603", "solar-pro-3", "solar-pro4", "deepseek-v3.1", "deepseek-chat-v3.1", "deepseek-v3.2"} { + if mistralReasons(form) { + return true + } + for _, prefix := range []string{"solar-pro-3", "solar-pro4", "deepseek-v3.1", "deepseek-chat-v3.1", "deepseek-v3.2"} { if strings.HasPrefix(form, prefix) { return true } From 14530944fd7c9a397d46e87cd1bc79eaa8312188 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:15:01 +0300 Subject: [PATCH 238/618] fix(reasoning): let Magistral express its off by omitting the field A bare call to magistral-medium-latest returns no reasoning, so the model is opt-in rather than default-on. Asking to disable used to put reasoning_effort "none" on the wire, which starts a think block and leaves it unparsed in the content instead of stopping one. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 13 +++++++++++++ llms/reasoning/off.go | 12 ++++++++++++ llms/reasoning/reasoning.go | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index a516cdff8..0dbf80f24 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -338,3 +338,16 @@ func TestMistralAliasesOfTheSameModelAgree(t *testing.T) { } } } + +func TestMagistralExpressesItsOffByOmission(t *testing.T) { + t.Parallel() + + for _, model := range []string{"magistral-medium-latest", "magistral-small-latest", "mistral/magistral-medium-latest"} { + if !ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = false, but a bare call returns no reasoning", model) + } + if got := ResolveOff(model, ProviderOpenAI); got != OffOmit { + t.Errorf("ResolveOff(%q) = %v, want OffOmit: the none token starts a think block instead of stopping one", model, got) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 7c22c2f4b..57304dc95 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -88,6 +88,9 @@ func ResolveOff(model string, p Provider) OffWire { if mandatoryThinking(model) { return OffUnsupported } + if offByOmission(model) { + return OffOmit + } // The disable token rides on the effort field, so a door that refuses that // field cannot express "off" at all. if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { @@ -121,6 +124,15 @@ func openAIMandatoryReasoning(model string) bool { return false } +func offByOmission(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "magistral") { + return true + } + } + return false +} + func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "glm-5.3") || diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index ad3a34065..b9ae60a25 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -362,7 +362,7 @@ func ThinkingOptIn(model string) bool { return true } for _, form := range modelSpellings(model) { - if mistralReasons(form) { + if mistralReasons(form) || strings.HasPrefix(form, "magistral") { return true } for _, prefix := range []string{"solar-pro-3", "solar-pro4", "deepseek-v3.1", "deepseek-chat-v3.1", "deepseek-v3.2"} { From 042d53c6757c0bda85b8d3c53d731589d0db3d69 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:15:52 +0300 Subject: [PATCH 239/618] fix(reasoning): gpt-oss cannot stop reasoning An explicit reasoning_effort "none" still comes back with a reasoning block, so reporting the none token as the disable told the caller the request was honoured when it was not. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 13 +++++++++++++ llms/reasoning/off.go | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 0dbf80f24..25bf98a9a 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -351,3 +351,16 @@ func TestMagistralExpressesItsOffByOmission(t *testing.T) { } } } + +func TestGPTOSSCannotStopReasoning(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gpt-oss-120b", "gpt-oss-20b", "openai/gpt-oss-120b", + "openai.gpt-oss-120b-1:0", "gpt-oss-safeguard-20b", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: an explicit off still returns reasoning", model, got) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 57304dc95..a4b802bdf 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -141,7 +141,8 @@ func mandatoryThinking(model string) bool { strings.HasPrefix(form, "minimax-m2") || form == "glm-latest" || strings.HasPrefix(form, "kimi-k2-thinking") || - strings.HasPrefix(form, "kimi-k2.7-code") { + strings.HasPrefix(form, "kimi-k2.7-code") || + strings.HasPrefix(form, "gpt-oss") { return true } } From 9361a49d050f68012b90f03670a778377c6664b6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:16:10 +0300 Subject: [PATCH 240/618] fix(reasoning): resolve the ollama tag spelling of gpt-oss The rule required a trailing hyphen, so gpt-oss:120b answered that it neither reasons nor needs an off, while gpt-oss-120b answered both. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 13 +++++++++++++ llms/reasoning/reasoning.go | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 25bf98a9a..25f7004fb 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -364,3 +364,16 @@ func TestGPTOSSCannotStopReasoning(t *testing.T) { } } } + +func TestOllamaTagSpellingResolvesLikeTheHyphenOne(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-oss:120b", "gpt-oss:20b", "ollama_cloud/gpt-oss:120b"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, but the hyphen spelling of the same model is true", model) + } + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported like the hyphen spelling", model, got) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index b9ae60a25..0e033a1fe 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -216,7 +216,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // OpenAI reasoning models if strings.HasPrefix(modelLower, "gpt-5") || - strings.HasPrefix(modelLower, "gpt-oss-") || + strings.HasPrefix(modelLower, "gpt-oss") || strings.HasPrefix(modelLower, "o1") || strings.HasPrefix(modelLower, "o3") || strings.HasPrefix(modelLower, "o4-mini") || From 86f7c15cf8cb7e07368dc3fe20d41c8e1b111450 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:23:12 +0300 Subject: [PATCH 241/618] fix(reasoning): keep the MiMo speech routes out of the catalogue The mimo-v2 rule matched on the substring alone, so the text-to-speech and voice-cloning routes were classified as reasoning models. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 3 +++ llms/reasoning/reasoning.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 25f7004fb..30693b79d 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -295,6 +295,8 @@ func TestNonChatNvidiaSurfacesAreNotReasoningModels(t *testing.T) { t.Parallel() for _, model := range []string{ + "XiaomiMiMo/MiMo-V2.5-tts", "XiaomiMiMo/MiMo-V2.5-tts-voiceclone", + "XiaomiMiMo/MiMo-V2.5-tts-voicedesign", "nvidia/Nemotron-3-Embed-8B", "nvidia/Nemotron-3-Embed-1B-BF16", "nvidia/llama-nemotron-embed-vl-1b-v2", "nvidia/llama-nemotron-rerank-vl-1b-v2", "nvidia/Nemotron-3.5-ASR-Streaming-Multilingual-0.6b", @@ -306,6 +308,7 @@ func TestNonChatNvidiaSurfacesAreNotReasoningModels(t *testing.T) { } for _, model := range []string{ + "XiaomiMiMo/MiMo-V2.5", "nvidia/NVIDIA-Nemotron-Nano-9B-v2", "nvidia/nemotron-3-super-120b-a12b", "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning", "nvidia.nemotron-nano-9b-v2", } { diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 0e033a1fe..10e8adf84 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -322,7 +322,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.Contains(modelLower, "step3") || strings.Contains(modelLower, "hunyuan-a13b") || strings.Contains(modelLower, "chimera") || - strings.Contains(modelLower, "mimo-v2") || + (strings.Contains(modelLower, "mimo-v2") && !strings.Contains(modelLower, "-tts")) || strings.Contains(modelLower, "tongyi-deepresearch") { return true } From 9a7d24414bb83b224eab0c29d7edb26570e844cf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:23:35 +0300 Subject: [PATCH 242/618] fix(reasoning): six families answer no to an explicit off With reasoning_effort "none" the aion, step-3, reka-flash-3, fugu-ultra and trinity-large-thinking doors answer 400 reasoning is mandatory, while nex-n2 answers 200 and returns a reasoning block anyway. Reporting the none token as their disable told the caller a request was honoured that either failed or changed nothing. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 19 +++++++++++++++++++ llms/reasoning/off.go | 8 +++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 30693b79d..0f3ba54c3 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -380,3 +380,22 @@ func TestOllamaTagSpellingResolvesLikeTheHyphenOne(t *testing.T) { } } } + +func TestFamiliesThatRefuseAnExplicitOff(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "aion-2.0", "aion-3.0", "aion-3.0-mini", + "step-3.5-flash", "step-3.7-flash", + "reka-flash-3", "fugu-ultra", "nex-n2-mini", "nex-n2-pro", + "arcee-ai/trinity-large-thinking", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the door refuses or ignores an explicit off", model, got) + } + } + + if IsReasoningModel("aion-rp-llama-3.1-8b") { + t.Error("aion-rp is not a reasoning model and must stay out of the mandatory set") + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index a4b802bdf..941dde21d 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -142,7 +142,13 @@ func mandatoryThinking(model string) bool { form == "glm-latest" || strings.HasPrefix(form, "kimi-k2-thinking") || strings.HasPrefix(form, "kimi-k2.7-code") || - strings.HasPrefix(form, "gpt-oss") { + strings.HasPrefix(form, "gpt-oss") || + strings.HasPrefix(form, "aion-") || + strings.HasPrefix(form, "step-3") || + strings.HasPrefix(form, "reka-flash-3") || + strings.HasPrefix(form, "fugu-ultra") || + strings.HasPrefix(form, "nex-n2") || + strings.Contains(form, "trinity-large-thinking") { return true } } From da556662774ea756af8670625cf409eb00d4b3b3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 13:24:56 +0300 Subject: [PATCH 243/618] fix(reasoning): three families measured against their bare call A bare call to lfm-2.5 and seed-2-1-turbo already returns a reasoning block, so neither belonged outside the catalogue; lfm-2.5 then answers 400 on an explicit off while seed honours it. ernie-4.5 is the mirror case: nothing until an effort asks for it. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 24 ++++++++++++++++++++++++ llms/reasoning/off.go | 1 + llms/reasoning/reasoning.go | 5 ++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 0f3ba54c3..f920555c0 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -399,3 +399,27 @@ func TestFamiliesThatRefuseAnExplicitOff(t *testing.T) { t.Error("aion-rp is not a reasoning model and must stay out of the mandatory set") } } + +func TestFamiliesMeasuredAgainstTheirBareCall(t *testing.T) { + t.Parallel() + + for _, model := range []string{"lfm-2.5-2.6b", "liquid/lfm-2.5-2.6b:free", "seed-2-1-turbo", "bytedance-seed/seed-2-1-turbo"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, but a bare call already returns a reasoning block", model) + } + if ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = true, but the model reasons without being asked", model) + } + } + + if got := ResolveOff("lfm-2.5-2.6b", ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(lfm-2.5) = %v, want OffUnsupported: the door answers 400 on an explicit off", got) + } + if got := ResolveOff("seed-2-1-turbo", ProviderOpenAI); got != OffEffortNone { + t.Errorf("ResolveOff(seed-2-1-turbo) = %v, want OffEffortNone: the off returns no reasoning", got) + } + + if !ThinkingOptIn("ernie-4.5-vl-424b-a47b") { + t.Error("ThinkingOptIn(ernie-4.5) = false, but a bare call returns no reasoning and an effort turns it on") + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 941dde21d..4db7ac328 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -148,6 +148,7 @@ func mandatoryThinking(model string) bool { strings.HasPrefix(form, "reka-flash-3") || strings.HasPrefix(form, "fugu-ultra") || strings.HasPrefix(form, "nex-n2") || + strings.HasPrefix(form, "lfm-2.5") || strings.Contains(form, "trinity-large-thinking") { return true } diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 10e8adf84..30e31f4e4 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -315,6 +315,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.Contains(modelLower, "seed-1.6") || strings.Contains(modelLower, "cogito-v2") || (strings.Contains(modelLower, "lfm-") && strings.Contains(modelLower, "-thinking")) || + strings.HasPrefix(modelLower, "lfm-2.5") || + strings.Contains(modelLower, "seed-2-1") || strings.Contains(modelLower, "deephermes") || strings.Contains(modelLower, "hermes-4-") || (strings.Contains(modelLower, "nemotron") && !nvidiaNonChatSurface(modelLower)) || @@ -362,7 +364,8 @@ func ThinkingOptIn(model string) bool { return true } for _, form := range modelSpellings(model) { - if mistralReasons(form) || strings.HasPrefix(form, "magistral") { + if mistralReasons(form) || strings.HasPrefix(form, "magistral") || + strings.HasPrefix(form, "ernie-4.5") { return true } for _, prefix := range []string{"solar-pro-3", "solar-pro4", "deepseek-v3.1", "deepseek-chat-v3.1", "deepseek-v3.2"} { From 52f5f37d0c16329bcc3fdd4f638a34fae269fa31 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:27:42 +0300 Subject: [PATCH 244/618] fix(anthropic): carry top_k to the wire and unset it while thinking The door had no top_k at all, so llms.WithTopK was dropped without an error while the vendor accepts the field and validates it against -1..100000000. It now travels like temperature and top_p, and yields in the same branches: Anthropic answers "`top_k` must be unset when thinking is enabled", and models that reject sampling never receive it. PAGI-182 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 42 +++++++++++++++++++ llms/anthropic/anthropicllm.go | 6 ++- .../anthropicclient/anthropicclient.go | 2 + .../internal/anthropicclient/messages.go | 1 + 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index d150e8bf8..80f05c47f 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1347,3 +1347,45 @@ func TestUnversionedAliasRunsItsTiersMechanism(t *testing.T) { require.Equal(t, "enabled", thinking["type"]) }) } + +func TestTopKReachesTheWireAndYieldsToThinking(t *testing.T) { + t.Parallel() + + t.Run("plain request carries it", func(t *testing.T) { + t.Parallel() + + body, _ := captureMessagesRequestModel(t, "claude-sonnet-4-5", llms.WithTopK(20)) + if body["top_k"] != float64(20) { + t.Fatalf("top_k must reach the wire, got body: %v", body) + } + }) + + t.Run("thinking unsets it", func(t *testing.T) { + t.Parallel() + + body, _ := captureMessagesRequestModel(t, "claude-sonnet-4-5", + llms.WithTopK(20), llms.WithReasoning(llms.ReasoningNone, 1100)) + if _, ok := body["top_k"]; ok { + t.Fatalf("the vendor answers `top_k` must be unset when thinking is enabled; got body: %v", body) + } + }) + + t.Run("adaptive thinking unsets it too", func(t *testing.T) { + t.Parallel() + + body, _ := captureMessagesRequestModel(t, "claude-sonnet-5", + llms.WithTopK(20), llms.WithReasoning(llms.ReasoningHigh, 0)) + if _, ok := body["top_k"]; ok { + t.Fatalf("adaptive thinking is thinking, so top_k must stay off the wire; got body: %v", body) + } + }) + + t.Run("a model that rejects sampling never gets it", func(t *testing.T) { + t.Parallel() + + body, _ := captureMessagesRequestModel(t, "claude-sonnet-5", llms.WithTopK(20)) + if _, ok := body["top_k"]; ok { + t.Fatalf("claude-sonnet-5 rejects sampling params, got body: %v", body) + } + }) +} diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 203a75657..bf1f68df7 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -259,11 +259,12 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } } - temperature, topP, maxTokens := opts.Temperature, opts.TopP, opts.GetMaxTokens() + temperature, topP, topK, maxTokens := opts.Temperature, opts.TopP, opts.TopK, opts.GetMaxTokens() switch { case thinking != nil && thinking.Type == "adaptive": temperature = nil topP = nil + topK = nil case thinking != nil && thinking.Type == "enabled" && thinking.Budget > 0: if !reasoning.ClaudeRejectsSampling(model) { temperature = getFloatPointer(1.0) @@ -271,11 +272,13 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag temperature = nil } topP = nil + topK = nil maxTokens = reasoning.ClaudeMaxTokensForBudget(thinking.Budget, maxTokens) case reasoning.ClaudeRejectsSampling(model): // Adaptive-only models reject sampling params even without thinking. temperature = nil topP = nil + topK = nil case reasoning.ClaudeMutuallyExclusiveSampling(model) && temperature != nil && topP != nil: topP = nil } @@ -288,6 +291,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag StopWords: opts.StopWords, Temperature: temperature, TopP: topP, + TopK: topK, Tools: tools, ToolChoice: anthropicToolChoice(opts.ToolChoice), Thinking: thinking, diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index d753aae33..295cadbcc 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -157,6 +157,7 @@ type MessageRequest struct { Temperature *float64 `json:"temperature,omitempty"` MaxTokens *int `json:"max_tokens,omitempty"` TopP *float64 `json:"top_p,omitempty"` + TopK *int `json:"top_k,omitempty"` Tools []Tool `json:"tools,omitempty"` ToolChoice any `json:"tool_choice,omitempty"` StopWords []string `json:"stop_sequences,omitempty"` @@ -179,6 +180,7 @@ func (c *Client) CreateMessage(ctx context.Context, r *MessageRequest) (*Message MaxTokens: r.MaxTokens, StopWords: r.StopWords, TopP: r.TopP, + TopK: r.TopK, Tools: r.Tools, ToolChoice: r.ToolChoice, Stream: r.Stream, diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index 13bc62525..a446681d6 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -95,6 +95,7 @@ type messagePayload struct { Stream bool `json:"stream,omitempty"` Temperature *float64 `json:"temperature,omitempty"` TopP *float64 `json:"top_p,omitempty"` + TopK *int `json:"top_k,omitempty"` Tools []Tool `json:"tools,omitempty"` ToolChoice any `json:"tool_choice,omitempty"` From bf969d9dad38af01ab2fbe3707d7b84c1fb3ad99 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:31:46 +0300 Subject: [PATCH 245/618] fix(reasoning): the DeepSeek R1 family cannot stop reasoning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Asking to disable used to put reasoning_effort "none" on the wire. The OpenRouter route answers 400 reasoning is mandatory, while the DeepInfra route answers 200 and returns the think block anyway — inline in the content, which is why a reasoning-field count reads zero there. Either way the caller's request was not honoured. The distills behave the same, so the rule covers the family; the v3.x hybrids keep their off. PAGI-183 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_wire_test.go | 58 ++++++++++----------------- llms/reasoning/catalogue_gaps_test.go | 20 +++++++++ llms/reasoning/off.go | 2 + 3 files changed, 43 insertions(+), 37 deletions(-) diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 696482253..35074c967 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -161,44 +161,28 @@ func TestTheEffortFieldStaysOffADoorThatRejectsIt(t *testing.T) { } } -func disableReasoningForModel(t *testing.T, model string) string { - t.Helper() - - const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + - `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + - `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` - - var body string - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - b, _ := io.ReadAll(r.Body) - body = string(b) - w.Header().Set("Content-Type", "application/json") - _, _ = io.WriteString(w, completion) - })) - t.Cleanup(srv.Close) - - llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) - if err != nil { - t.Fatalf("New() error: %v", err) - } - if _, err := llm.GenerateContent(context.Background(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, - llms.WithReasoningDisabled()); err != nil { - t.Fatalf("GenerateContent() error: %v", err) - } - return body -} - -func TestBothDeepSeekReasonerNamesTurnThinkingOffTheSameWay(t *testing.T) { - byOwnName := disableReasoningForModel(t, "deepseek-reasoner") - byFamilyName := disableReasoningForModel(t, "deepseek-r1") - - for _, want := range []string{`"reasoning_effort":"none"`} { - if !strings.Contains(byFamilyName, want) { - t.Fatalf("deepseek-r1 request lost %s: %s", want, byFamilyName) +func TestBothDeepSeekReasonerNamesRefuseTheOffTheSameWay(t *testing.T) { + for _, model := range []string{"deepseek-reasoner", "deepseek-r1"} { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoningDisabled()) + if err == nil { + t.Fatalf("%s reasons whatever is asked, so the disable must return a typed error", model) } - if !strings.Contains(byOwnName, want) { - t.Fatalf("deepseek-reasoner must disable thinking like deepseek-r1, got: %s", byOwnName) + if !strings.Contains(err.Error(), "reasoning cannot be disabled") { + t.Fatalf("%s: expected the typed disable error, got: %v", model, err) } } } diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index f920555c0..91adba4fd 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -423,3 +423,23 @@ func TestFamiliesMeasuredAgainstTheirBareCall(t *testing.T) { t.Error("ThinkingOptIn(ernie-4.5) = false, but a bare call returns no reasoning and an effort turns it on") } } + +func TestDeepSeekR1CannotStopReasoning(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "deepseek-r1", "deepseek-r1-0528", "deepseek/deepseek-r1", "deepseek-reasoner", + "deepseek-ai/DeepSeek-R1-Turbo", "azure/deepseek-r1", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the off is either refused or ignored", model, got) + } + } + + for _, model := range []string{"deepseek-v3.1", "deepseek-v3.2", "deepseek-chat-v3.1"} { + if got := ResolveOff(model, ProviderOpenAI); got == OffUnsupported { + t.Errorf("ResolveOff(%q) = OffUnsupported, but the hybrids reason only when asked", model) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 4db7ac328..f2fb0062a 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -149,6 +149,8 @@ func mandatoryThinking(model string) bool { strings.HasPrefix(form, "fugu-ultra") || strings.HasPrefix(form, "nex-n2") || strings.HasPrefix(form, "lfm-2.5") || + strings.HasPrefix(form, "deepseek-r1") || + strings.HasPrefix(form, "deepseek-reasoner") || strings.Contains(form, "trinity-large-thinking") { return true } From 0f1bd3cf7cbabb63696f20542a45b0273fe5b94c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:36:37 +0300 Subject: [PATCH 246/618] fix(googleai): carry seed and both penalties to the generation config The config literal listed only candidate count, max tokens, temperature, top_p, top_k and stop sequences, so llms.WithSeed and the two penalties were dropped without an error while GenerationConfig has all three and the vendor validates them. Building the config now has its own function, which is what the test asserts against. PAGI-177 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 28 +++++++++++---------- llms/googleai/googleai_core_unit_test.go | 31 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index eadf95910..5ff76ec7a 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -117,19 +117,7 @@ func (g *GoogleAI) GenerateContent( opts.Temperature = getFloatPointer(resolveTemperature(opts.GetModel(), g.opts)) } - // Build generation config - temperature := convertToFloat32Pointer(opts.Temperature) - topP := convertToFloat32Pointer(opts.TopP) - topK := convertIntToFloat32Pointer(opts.TopK) - - config := &genai.GenerateContentConfig{ - CandidateCount: convertToInt32(opts.CandidateCount), - MaxOutputTokens: convertToInt32(opts.MaxTokens), - Temperature: temperature, - TopP: topP, - TopK: topK, - StopSequences: opts.StopWords, - } + config := newGenerationConfig(opts) // Check for cached content if opts.Metadata != nil { @@ -1032,6 +1020,20 @@ func getFloatPointer(f float64) *float64 { return &f } +func newGenerationConfig(opts llms.CallOptions) *genai.GenerateContentConfig { + return &genai.GenerateContentConfig{ + CandidateCount: convertToInt32(opts.CandidateCount), + MaxOutputTokens: convertToInt32(opts.MaxTokens), + Temperature: convertToFloat32Pointer(opts.Temperature), + TopP: convertToFloat32Pointer(opts.TopP), + TopK: convertIntToFloat32Pointer(opts.TopK), + StopSequences: opts.StopWords, + Seed: convertToInt32Pointer(opts.Seed), + FrequencyPenalty: convertToFloat32Pointer(opts.FrequencyPenalty), + PresencePenalty: convertToFloat32Pointer(opts.PresencePenalty), + } +} + func convertToFloat32Pointer(f *float64) *float32 { if f == nil { return nil diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 9a63f5211..874b3e415 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1263,3 +1263,34 @@ func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { }) } } + +func TestGenerationConfigCarriesSeedAndPenalties(t *testing.T) { + t.Parallel() + + seed := 42 + freq := 0.7 + pres := -0.3 + cfg := newGenerationConfig(llms.CallOptions{ + Seed: &seed, + FrequencyPenalty: &freq, + PresencePenalty: &pres, + }) + + require.NotNil(t, cfg.Seed, "seed is a GenerationConfig field and must not be dropped") + assert.Equal(t, int32(42), *cfg.Seed) + require.NotNil(t, cfg.FrequencyPenalty) + assert.InDelta(t, 0.7, *cfg.FrequencyPenalty, 1e-6) + require.NotNil(t, cfg.PresencePenalty) + assert.InDelta(t, -0.3, *cfg.PresencePenalty, 1e-6) +} + +func TestGenerationConfigLeavesUnsetSamplingAlone(t *testing.T) { + t.Parallel() + + cfg := newGenerationConfig(llms.CallOptions{}) + + assert.Nil(t, cfg.Seed) + assert.Nil(t, cfg.FrequencyPenalty) + assert.Nil(t, cfg.PresencePenalty) + assert.Nil(t, cfg.Temperature) +} From e655d768e1b029a84e26acf3482a1d4d4fcfbfc4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:38:34 +0300 Subject: [PATCH 247/618] feat(openai): let the caller ask for a shorter or longer answer The vendor spec lists verbosity on chat/completions and it changes the output several-fold on the same prompt, but neither CallOptions nor the request struct carried it, so no door could reach it. Doors whose vendor has no such parameter keep leaving it off the wire, which is how every other unsupported field already behaves; signalling a dropped parameter to the caller stays with the warnings item in PAGI-133. PAGI-175 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 1 + llms/openai/openaillm.go | 1 + llms/openai/reasoning_wire_test.go | 45 +++++++++++++++++++++++ llms/options.go | 9 +++++ 4 files changed, 56 insertions(+) diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index adb93c4b7..09b837949 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -57,6 +57,7 @@ type ChatRequest struct { FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"` PresencePenalty *float64 `json:"presence_penalty,omitempty"` RepetitionPenalty *float64 `json:"repetition_penalty,omitempty"` + Verbosity *string `json:"verbosity,omitempty"` Seed *int `json:"seed,omitempty"` // ReasoningEffort enables reasoning mode for models that support it. diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 0233a8dfe..4e5a6507c 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -268,6 +268,7 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) FrequencyPenalty: opts.FrequencyPenalty, PresencePenalty: opts.PresencePenalty, RepetitionPenalty: opts.RepetitionPenalty, + Verbosity: opts.Verbosity, ToolChoice: openaiToolChoice(opts.ToolChoice), FunctionCallBehavior: openaiclient.FunctionCallBehavior(opts.FunctionCallBehavior), Seed: opts.Seed, diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 35074c967..c6dbbcef9 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -197,3 +197,48 @@ func TestABudgetLargerThanTheAnswerLimitRaisesTheLimit(t *testing.T) { t.Fatalf("a 512-token answer limit leaves no room once a 1024-token budget is spent: %s", body) } } + +func TestVerbosityReachesTheWireOnlyWhenAsked(t *testing.T) { + t.Parallel() + + capture := func(t *testing.T, opts ...llms.CallOption) string { + t.Helper() + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ := io.ReadAll(r.Body) + body = string(raw) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel("gpt-5.6")) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + t.Run("asked", func(t *testing.T) { + t.Parallel() + + if body := capture(t, llms.WithVerbosity("low")); !strings.Contains(body, `"verbosity":"low"`) { + t.Fatalf("verbosity must reach the wire, got body: %s", body) + } + }) + + t.Run("not asked", func(t *testing.T) { + t.Parallel() + + if body := capture(t); strings.Contains(body, "verbosity") { + t.Fatalf("an unset verbosity must stay off the wire, got body: %s", body) + } + }) +} diff --git a/llms/options.go b/llms/options.go index 324d56e16..2d8e8bf64 100644 --- a/llms/options.go +++ b/llms/options.go @@ -267,6 +267,8 @@ type CallOptions struct { FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"` // PresencePenalty is the presence penalty for sampling. PresencePenalty *float64 `json:"presence_penalty,omitempty"` + // Verbosity asks the model for a shorter or longer answer. + Verbosity *string `json:"verbosity,omitempty"` // Reasoning is the configuration for thinking of the model. Reasoning *ReasoningConfig `json:"reasoning,omitempty"` @@ -648,6 +650,13 @@ func WithStreamingFunc(streamingFunc streaming.Callback) CallOption { } } +// WithVerbosity will add an option to ask for a shorter or longer answer. +func WithVerbosity(verbosity string) CallOption { + return func(o *CallOptions) { + o.Verbosity = &verbosity + } +} + // WithTopK will add an option to use top-k sampling. func WithTopK(topK int) CallOption { return func(o *CallOptions) { From b9f989bee6ec46b17979fad3d2ba94a0b4dfa938 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:44:41 +0300 Subject: [PATCH 248/618] fix(openai): send the output limit in the field the route understands The door always used max_completion_tokens. xAI refuses it outright, and DashScope accepts it but wrecks the answer: qwen3.5-35b-a3b with a limit of 800 came back finish=length with an empty reasoning field and 2202 characters of internal reasoning spilled into the content, while the same request with max_tokens came back finish=stop, 2940 reasoning and a 670 character answer. Grok and Qwen now get the legacy field; everything else keeps the new one, and the explicit option still wins. The ten xAI cassettes carried the old field in their recorded requests, so replay missed. Their responses are untouched: only the request bodies and the block lengths were rewritten. PAGI-171 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 2 +- llms/openai/reasoning_wire_test.go | 52 +++++++++++++++++++ ...oning-streaming-xai-grok-4.3-medium.httprr | 6 +-- ...asoning-streaming-xai-grok-4.5-high.httprr | 6 +-- ...easoning-streaming-xai-grok-4.5-low.httprr | 6 +-- ...ing-synchronous-xai-grok-4.3-medium.httprr | 6 +-- ...oning-synchronous-xai-grok-4.5-high.httprr | 6 +-- ...soning-synchronous-xai-grok-4.5-low.httprr | 6 +-- ...licitCaching_Conversation_WithTools.httprr | 12 ++--- ...I_ImplicitCaching_IdenticalRequests.httprr | 12 ++--- .../TestXAI_ImplicitCaching_Streaming.httprr | 12 ++--- ...XAI_ReasoningModel_RejectsPenalties.httprr | 6 +-- llms/reasoning/effort_wire.go | 14 +++++ 13 files changed, 106 insertions(+), 40 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 4e5a6507c..893a9ac0a 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -277,7 +277,7 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) ExtraBody: getExtraBody(&opts), } - if isLegacyMaxTokensField(&opts) { + if isLegacyMaxTokensField(&opts) || reasoning.UsesLegacyMaxTokens(o.effectiveModel(opts)) { req.MaxTokens = opts.MaxTokens } else { req.MaxCompletionTokens = opts.MaxTokens diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index c6dbbcef9..9916a165e 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -242,3 +242,55 @@ func TestVerbosityReachesTheWireOnlyWhenAsked(t *testing.T) { } }) } + +func TestTheOutputLimitPicksTheFieldTheRouteUnderstands(t *testing.T) { + t.Parallel() + + capture := func(t *testing.T, model string, opts ...llms.CallOption) string { + t.Helper() + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ := io.ReadAll(r.Body) + body = string(raw) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + all := append([]llms.CallOption{llms.WithMaxTokens(800)}, opts...) + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, all...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body + } + + for _, model := range []string{"grok-4-1-fast", "qwen3.5-35b-a3b", "dashscope/qwen3.7-plus", "qwq-32b"} { + body := capture(t, model) + if !strings.Contains(body, `"max_tokens":800`) { + t.Errorf("%s must receive max_tokens, got body: %s", model, body) + } + if strings.Contains(body, "max_completion_tokens") { + t.Errorf("%s must not receive max_completion_tokens, got body: %s", model, body) + } + } + + for _, model := range []string{"gpt-5.4", "gpt-4.1", "o3", "claude-sonnet-4-5", "deepseek-v4-pro"} { + body := capture(t, model) + if !strings.Contains(body, `"max_completion_tokens":800`) { + t.Errorf("%s must keep max_completion_tokens, got body: %s", model, body) + } + } + + body := capture(t, "gpt-5.4", WithLegacyMaxTokensField()) + if !strings.Contains(body, `"max_tokens":800`) { + t.Errorf("the explicit option must still win, got body: %s", body) + } +} diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.3-medium.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.3-medium.httprr index e0f5af867..847fb20ca 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.3-medium.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.3-medium.httprr @@ -1,13 +1,13 @@ httprr trace v1 -431 45549 +420 45549 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 241 +Content-Length: 230 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.3","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"stream":true,"reasoning_effort":"medium","stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"grok-4.3","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"stream":true,"reasoning_effort":"medium","stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 44758 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-high.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-high.httprr index e905648b4..16eddc5fd 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-high.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-high.httprr @@ -1,13 +1,13 @@ httprr trace v1 -429 39185 +418 39185 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 239 +Content-Length: 228 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"stream":true,"reasoning_effort":"high","stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"stream":true,"reasoning_effort":"high","stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 38394 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-low.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-low.httprr index 733c6e5b5..d5635ed7d 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-low.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-xai-grok-4.5-low.httprr @@ -1,13 +1,13 @@ httprr trace v1 -428 12352 +417 12352 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 238 +Content-Length: 227 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"stream":true,"reasoning_effort":"low","stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"stream":true,"reasoning_effort":"low","stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 11561 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.3-medium.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.3-medium.httprr index f809f4971..d635f4263 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.3-medium.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.3-medium.httprr @@ -1,13 +1,13 @@ httprr trace v1 -377 1977 +366 1977 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 187 +Content-Length: 176 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.3","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"reasoning_effort":"medium"}HTTP/2.0 200 OK +{"model":"grok-4.3","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"reasoning_effort":"medium"}HTTP/2.0 200 OK Content-Length: 1133 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-high.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-high.httprr index 9e8f07c61..07c3a41e8 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-high.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-high.httprr @@ -1,13 +1,13 @@ httprr trace v1 -375 1629 +364 1629 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 185 +Content-Length: 174 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"reasoning_effort":"high"}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"reasoning_effort":"high"}HTTP/2.0 200 OK Content-Length: 784 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-low.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-low.httprr index 71e2c12d1..478820d87 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-low.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-xai-grok-4.5-low.httprr @@ -1,13 +1,13 @@ httprr trace v1 -374 1629 +363 1629 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 184 +Content-Length: 173 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"reasoning_effort":"low"}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"reasoning_effort":"low"}HTTP/2.0 200 OK Content-Length: 785 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestXAI_ImplicitCaching_Conversation_WithTools.httprr b/llms/openai/testdata/TestXAI_ImplicitCaching_Conversation_WithTools.httprr index e6800debf..5a7139275 100644 --- a/llms/openai/testdata/TestXAI_ImplicitCaching_Conversation_WithTools.httprr +++ b/llms/openai/testdata/TestXAI_ImplicitCaching_Conversation_WithTools.httprr @@ -1,13 +1,13 @@ httprr trace v1 -12432 1733 +12421 1733 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 12240 +Content-Length: 12229 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.3","messages":[{"role":"system","content":"XAIConvTools-v1 You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. "},{"role":"user","content":"What's the temperature in Boston?"}],"max_completion_tokens":1024,"tools":[{"type":"function","function":{"name":"get_temperature","description":"Get the current temperature for a location","parameters":{"properties":{"location":{"description":"The city name, e.g. Boston","type":"string"}},"required":["location"],"type":"object"}}}]}HTTP/2.0 200 OK +{"model":"grok-4.3","messages":[{"role":"system","content":"XAIConvTools-v1 You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. "},{"role":"user","content":"What's the temperature in Boston?"}],"max_tokens":1024,"tools":[{"type":"function","function":{"name":"get_temperature","description":"Get the current temperature for a location","parameters":{"properties":{"location":{"description":"The city name, e.g. Boston","type":"string"}},"required":["location"],"type":"object"}}}]}HTTP/2.0 200 OK Content-Length: 890 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * @@ -31,15 +31,15 @@ X-Ratelimit-Remaining-Tokens: 10000000 X-Request-Id: 871606b2-9ac7-9f6d-8eb2-b38320b1ea64 X-Zero-Data-Retention: false -{"id":"871606b2-9ac7-9f6d-8eb2-b38320b1ea64","object":"chat.completion","created":1785787565,"model":"grok-4.3","choices":[{"index":0,"message":{"role":"assistant","content":"","reasoning_content":"The question is: \"What's the temperature in Boston?\"\n","tool_calls":[{"id":"call-776a650f-af7e-447c-9847-f1d8aa7fc719-0","function":{"name":"get_temperature","arguments":"{\"location\":\"Boston\"}"},"type":"function"}],"refusal":null},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":2698,"completion_tokens":11,"total_tokens":2819,"prompt_tokens_details":{"text_tokens":2698,"audio_tokens":0,"image_tokens":0,"cached_tokens":128},"completion_tokens_details":{"reasoning_tokens":110,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0},"num_sources_used":0,"cost_in_usd_ticks":35406000},"system_fingerprint":"fp_eb3c003fc66c14ed","service_tier":"default"}12852 1788 +{"id":"871606b2-9ac7-9f6d-8eb2-b38320b1ea64","object":"chat.completion","created":1785787565,"model":"grok-4.3","choices":[{"index":0,"message":{"role":"assistant","content":"","reasoning_content":"The question is: \"What's the temperature in Boston?\"\n","tool_calls":[{"id":"call-776a650f-af7e-447c-9847-f1d8aa7fc719-0","function":{"name":"get_temperature","arguments":"{\"location\":\"Boston\"}"},"type":"function"}],"refusal":null},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":2698,"completion_tokens":11,"total_tokens":2819,"prompt_tokens_details":{"text_tokens":2698,"audio_tokens":0,"image_tokens":0,"cached_tokens":128},"completion_tokens_details":{"reasoning_tokens":110,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0},"num_sources_used":0,"cost_in_usd_ticks":35406000},"system_fingerprint":"fp_eb3c003fc66c14ed","service_tier":"default"}12841 1788 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 12660 +Content-Length: 12649 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.3","messages":[{"role":"system","content":"XAIConvTools-v1 You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. "},{"role":"user","content":"What's the temperature in Boston?"},{"role":"assistant","content":"","tool_calls":[{"id":"call-776a650f-af7e-447c-9847-f1d8aa7fc719-0","type":"function","function":{"name":"get_temperature","arguments":"{\"location\":\"Boston\"}"}}]},{"role":"tool","content":"{\"temperature\": 72, \"unit\": \"fahrenheit\"}","name":"get_temperature","tool_call_id":"call-776a650f-af7e-447c-9847-f1d8aa7fc719-0"},{"role":"user","content":"Is that comfortable for a walk?"}],"max_completion_tokens":1024,"tools":[{"type":"function","function":{"name":"get_temperature","description":"Get the current temperature for a location","parameters":{"properties":{"location":{"description":"The city name, e.g. Boston","type":"string"}},"required":["location"],"type":"object"}}}]}HTTP/2.0 200 OK +{"model":"grok-4.3","messages":[{"role":"system","content":"XAIConvTools-v1 You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. You are a helpful assistant with access to a weather tool. "},{"role":"user","content":"What's the temperature in Boston?"},{"role":"assistant","content":"","tool_calls":[{"id":"call-776a650f-af7e-447c-9847-f1d8aa7fc719-0","type":"function","function":{"name":"get_temperature","arguments":"{\"location\":\"Boston\"}"}}]},{"role":"tool","content":"{\"temperature\": 72, \"unit\": \"fahrenheit\"}","name":"get_temperature","tool_call_id":"call-776a650f-af7e-447c-9847-f1d8aa7fc719-0"},{"role":"user","content":"Is that comfortable for a walk?"}],"max_tokens":1024,"tools":[{"type":"function","function":{"name":"get_temperature","description":"Get the current temperature for a location","parameters":{"properties":{"location":{"description":"The city name, e.g. Boston","type":"string"}},"required":["location"],"type":"object"}}}]}HTTP/2.0 200 OK Content-Length: 946 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestXAI_ImplicitCaching_IdenticalRequests.httprr b/llms/openai/testdata/TestXAI_ImplicitCaching_IdenticalRequests.httprr index 05f4daca8..5c4113ff4 100644 --- a/llms/openai/testdata/TestXAI_ImplicitCaching_IdenticalRequests.httprr +++ b/llms/openai/testdata/TestXAI_ImplicitCaching_IdenticalRequests.httprr @@ -1,13 +1,13 @@ httprr trace v1 -14925 1673 +14914 1673 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 14733 +Content-Length: 14722 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"system","content":"XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. "},{"role":"user","content":"Say 'hello'"}],"max_completion_tokens":4096}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"system","content":"XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. "},{"role":"user","content":"Say 'hello'"}],"max_tokens":4096}HTTP/2.0 200 OK Content-Length: 829 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * @@ -31,15 +31,15 @@ X-Ratelimit-Remaining-Tokens: 50000000 X-Request-Id: e9ed8b04-74c1-936d-b298-e62070b2855f X-Zero-Data-Retention: false -{"id":"e9ed8b04-74c1-936d-b298-e62070b2855f","object":"chat.completion","created":1785787565,"model":"grok-4.5","choices":[{"index":0,"message":{"role":"assistant","content":"hello","reasoning_content":"The user message is a long string of repeated \"XAIIdentical-v1 Go is a statically typed, compiled programming language.\" and then at the end, \"Say 'hello'\".\n","refusal":null},"finish_reason":"stop"}],"usage":{"prompt_tokens":3414,"completion_tokens":1,"total_tokens":3480,"prompt_tokens_details":{"text_tokens":3414,"audio_tokens":0,"image_tokens":0,"cached_tokens":128},"completion_tokens_details":{"reasoning_tokens":65,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0},"num_sources_used":0,"cost_in_usd_ticks":70064000},"system_fingerprint":"fp_a39489019fa99b6e","service_tier":"default"}14925 1673 +{"id":"e9ed8b04-74c1-936d-b298-e62070b2855f","object":"chat.completion","created":1785787565,"model":"grok-4.5","choices":[{"index":0,"message":{"role":"assistant","content":"hello","reasoning_content":"The user message is a long string of repeated \"XAIIdentical-v1 Go is a statically typed, compiled programming language.\" and then at the end, \"Say 'hello'\".\n","refusal":null},"finish_reason":"stop"}],"usage":{"prompt_tokens":3414,"completion_tokens":1,"total_tokens":3480,"prompt_tokens_details":{"text_tokens":3414,"audio_tokens":0,"image_tokens":0,"cached_tokens":128},"completion_tokens_details":{"reasoning_tokens":65,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0},"num_sources_used":0,"cost_in_usd_ticks":70064000},"system_fingerprint":"fp_a39489019fa99b6e","service_tier":"default"}14914 1673 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 14733 +Content-Length: 14722 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"system","content":"XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. "},{"role":"user","content":"Say 'hello'"}],"max_completion_tokens":4096}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"system","content":"XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. XAIIdentical-v1 Go is a statically typed, compiled programming language. "},{"role":"user","content":"Say 'hello'"}],"max_tokens":4096}HTTP/2.0 200 OK Content-Length: 830 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestXAI_ImplicitCaching_Streaming.httprr b/llms/openai/testdata/TestXAI_ImplicitCaching_Streaming.httprr index d45ea3790..d9bfa7717 100644 --- a/llms/openai/testdata/TestXAI_ImplicitCaching_Streaming.httprr +++ b/llms/openai/testdata/TestXAI_ImplicitCaching_Streaming.httprr @@ -1,13 +1,13 @@ httprr trace v1 -14583 8103 +14572 8103 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 14391 +Content-Length: 14380 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"system","content":"XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. "},{"role":"user","content":"What is 9 + 10?"}],"max_completion_tokens":4096,"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"system","content":"XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. "},{"role":"user","content":"What is 9 + 10?"}],"max_tokens":4096,"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 7314 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * @@ -87,15 +87,15 @@ data: {"id":"08da45a7-4a8a-93c3-bd21-6f59f71b7a6c","object":"chat.completion.chu data: [DONE] -14583 9648 +14572 9648 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 14391 +Content-Length: 14380 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"system","content":"XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. "},{"role":"user","content":"What is 9 + 10?"}],"max_completion_tokens":4096,"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"grok-4.5","messages":[{"role":"system","content":"XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. XAIStream-v1 Rust is a systems programming language focused on safety. "},{"role":"user","content":"What is 9 + 10?"}],"max_tokens":4096,"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 8860 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr b/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr index 1b80453a8..19d6cbbdc 100644 --- a/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr +++ b/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr @@ -1,13 +1,13 @@ httprr trace v1 -309 642 +298 642 POST https://api.x.ai/v1/chat/completions HTTP/1.1 Host: api.x.ai User-Agent: langchaingo-httprr -Content-Length: 119 +Content-Length: 108 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"grok-4.5","messages":[{"role":"user","content":"Say hi"}],"max_completion_tokens":256,"presence_penalty":0.5}HTTP/2.0 400 Bad Request +{"model":"grok-4.5","messages":[{"role":"user","content":"Say hi"}],"max_tokens":256,"presence_penalty":0.5}HTTP/2.0 400 Bad Request Content-Length: 96 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: * diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 22e28a17b..d99feecf3 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -5,6 +5,20 @@ import "strings" // AcceptsEffortWire reports whether the model's OpenAI-compatible door takes the // reasoning_effort field. A door that refuses it fails the whole request, so such // a model also has no way to spell "off": the disable token rides on this field. +// UsesLegacyMaxTokens reports whether the output limit must travel as +// max_tokens rather than max_completion_tokens. +func UsesLegacyMaxTokens(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "grok") || + strings.HasPrefix(form, "qwen") || + strings.HasPrefix(form, "qwq") || + strings.HasPrefix(form, "qvq") { + return true + } + } + return false +} + func AcceptsEffortWire(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { From 0ba34cde2f22cd91fee43fff2d3a753fb849ad5b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:51:16 +0300 Subject: [PATCH 249/618] fix(reasoning): read the chat marker with or without the latest suffix Only the -chat-latest spelling was filtered, so gpt-5.2-chat matched the generation rule, reported four effort levels and had the caller's temperature pinned to 1, while gpt-5.2-chat-latest kept 0.3. The marker now reads across the GPT line and stops there: deepseek-chat-v3.x and the llama chat builds keep their classification. The one chat variant with a live route, gpt-chat-latest, returns no reasoning either bare or with an explicit high effort, and OpenRouter publishes reasoning:null for gpt-5.2-chat. The direct openai/* chat routes answer 404 from the vendor, so gpt-5.2-chat itself stays unmeasured and the test pins the invariant that every spelling agrees. PAGI-174 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 12 ++++++++++++ llms/reasoning/catalogue_gaps_test.go | 24 ++++++++++++++++++++++++ llms/reasoning/detect_hint.go | 2 +- llms/reasoning/openai_capability.go | 6 +++++- llms/reasoning/reasoning.go | 2 +- 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 93e6a36a8..650cb2c6a 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -75,3 +75,15 @@ func TestDeepSeekV32KeepsSamplingEvenWithAnEffortOnTheWire(t *testing.T) { t.Errorf("reasoning_effort = %v, want %v", got, want) } } + +func TestChatVariantsKeepTheTemperatureTheCallerSet(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5.2-chat", "gpt-5.2-chat-latest", "gpt-5-chat"} { + body := captureDeepSeekRequest(t, model, + llms.WithTemperature(0.3), llms.WithReasoning(llms.ReasoningHigh, 0)) + if body["temperature"] != 0.3 { + t.Errorf("%s must keep the caller's temperature, got body: %v", model, body) + } + } +} diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 91adba4fd..585790d21 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -443,3 +443,27 @@ func TestDeepSeekR1CannotStopReasoning(t *testing.T) { } } } + +func TestEveryChatSpellingOfTheGPTLineAgrees(t *testing.T) { + t.Parallel() + + spellings := []string{ + "gpt-5-chat", "gpt-5-chat-latest", "gpt-5.1-chat-latest", "gpt-5.2-chat", + "gpt-5.2-chat-latest", "gpt-5.3-chat-latest", "gpt-chat-latest", + "openai/gpt-5.2-chat", "azure/gpt-5-chat", + } + for _, model := range spellings { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, but the chat variants answer without reasoning", model) + } + if caps := OpenAIReasoningCapsFor(model); caps.Known { + t.Errorf("OpenAIReasoningCapsFor(%q).Known = true, so the door would pin the caller's temperature", model) + } + } + + for _, model := range []string{"deepseek-chat-v3.1", "deepseek-chat-v3.2", "gpt-5.2", "gpt-5.4"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false: the chat filter reached past the GPT chat variants", model) + } + } +} diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index ecae22e9b..311ff4890 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -27,7 +27,7 @@ func likelyReasoningFamily(m string) bool { switch { case strings.HasPrefix(m, "gpt-"): - return !openAIPreReasoning(m) && !strings.Contains(m, "-chat-latest") + return !openAIPreReasoning(m) && !openAIChatVariant(m) case isOSeries(m): return true case strings.HasPrefix(m, "claude-"): diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 98f246e78..1292e7335 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -67,8 +67,12 @@ func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { return OpenAIReasoningCaps{Known: false} } +func openAIChatVariant(m string) bool { + return strings.HasPrefix(m, "gpt-") && strings.Contains(m, "-chat") +} + func openAICapsForForm(m string) OpenAIReasoningCaps { - if strings.Contains(m, "-chat-latest") { + if openAIChatVariant(m) { return OpenAIReasoningCaps{Known: false} } switch { diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 30e31f4e4..ed8fe474e 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -210,7 +210,7 @@ func nvidiaNonChatSurface(model string) bool { } func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat catalog of model-family prefix checks; splitting hurts readability - if strings.Contains(modelLower, "-chat-latest") { + if strings.Contains(modelLower, "-chat-latest") || openAIChatVariant(modelLower) { return false } From a18d3a75aa5ca78d7d9e4215efbd2ff853b54bf4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:53:27 +0300 Subject: [PATCH 250/618] fix(openai): keep both penalties off the doors that refuse them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every xAI model tested answers "Model does not support parameter frequencyPenalty" — grok-4.6, grok-4-1-fast, grok-3-mini-beta and even grok-4-1-fast-non-reasoning, so the refusal belongs to the door and not to reasoning. The two penalties are advisory, so they are dropped rather than failing the whole call; stop is left alone because losing a bound the caller set is worse than the loud refusal it gets today. The cassette test that sent a penalty to watch the vendor refuse is gone: the door no longer lets that request out, so the response it recorded is unreachable. Our own behaviour is asserted instead, on both sides — the models that take penalties still receive them. Measured and not covered here: kimi-k2.6 answers "only 0 is allowed" for both penalties and "only 0.95" for top_p, which is a different class — the field exists but takes a single value. PAGI-180 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 25 ++++++++++++++++++ llms/openai/openaillm.go | 5 ++++ llms/openai/openaillm_cache_test.go | 13 ---------- ...XAI_ReasoningModel_RejectsPenalties.httprr | 26 ------------------- llms/reasoning/effort_wire.go | 11 ++++++++ 5 files changed, 41 insertions(+), 39 deletions(-) delete mode 100644 llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 650cb2c6a..4b7540d94 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -87,3 +87,28 @@ func TestChatVariantsKeepTheTemperatureTheCallerSet(t *testing.T) { } } } + +func TestPenaltiesStayOffTheDoorsThatRefuseThem(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "grok-4.6", "grok-4-1-fast", "grok-4-1-fast-non-reasoning", "grok-3-mini-beta", "xai/grok-4.6", + } { + body := captureDeepSeekRequest(t, model, + llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.5)) + if _, ok := body["frequency_penalty"]; ok { + t.Errorf("%s answers that it does not support the parameter, got body: %v", model, body) + } + if _, ok := body["presence_penalty"]; ok { + t.Errorf("%s answers that it does not support the parameter, got body: %v", model, body) + } + } + + for _, model := range []string{"gpt-5.4", "deepseek-v4-pro", "glm-5.2", "mistral-medium-latest"} { + body := captureDeepSeekRequest(t, model, + llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.5)) + if body["frequency_penalty"] != 0.5 || body["presence_penalty"] != 0.5 { + t.Errorf("%s takes both penalties and must keep receiving them, got body: %v", model, body) + } + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 893a9ac0a..186326050 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -277,6 +277,11 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) ExtraBody: getExtraBody(&opts), } + if reasoning.RejectsPenalties(o.effectiveModel(opts)) { + req.FrequencyPenalty = nil + req.PresencePenalty = nil + } + if isLegacyMaxTokensField(&opts) || reasoning.UsesLegacyMaxTokens(o.effectiveModel(opts)) { req.MaxTokens = opts.MaxTokens } else { diff --git a/llms/openai/openaillm_cache_test.go b/llms/openai/openaillm_cache_test.go index e4cb9840e..e4f8f8013 100644 --- a/llms/openai/openaillm_cache_test.go +++ b/llms/openai/openaillm_cache_test.go @@ -1239,16 +1239,3 @@ func TestXAI_ImplicitCaching_Conversation_WithTools(t *testing.T) { //nolint:fun // rejects presence_penalty when used together with reasoning, as documented // by xAI: "presencePenalty, frequencyPenalty, and stop cannot be used with // reasoning models. Requests that include them return an error." -func TestXAI_ReasoningModel_RejectsPenalties(t *testing.T) { - t.Parallel() - - llm := newTestXAIClient(t, WithModel("grok-4.5")) - - msgs := []llms.MessageContent{ - {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("Say hi")}}, - } - - _, err := llm.GenerateContent(t.Context(), msgs, llms.WithMaxTokens(256), llms.WithPresencePenalty(0.5)) - require.ErrorContains(t, err, "presencePenalty", - "xAI must reject presence_penalty combined with a reasoning model") -} diff --git a/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr b/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr deleted file mode 100644 index 19d6cbbdc..000000000 --- a/llms/openai/testdata/TestXAI_ReasoningModel_RejectsPenalties.httprr +++ /dev/null @@ -1,26 +0,0 @@ -httprr trace v1 -298 642 -POST https://api.x.ai/v1/chat/completions HTTP/1.1 -Host: api.x.ai -User-Agent: langchaingo-httprr -Content-Length: 108 -Authorization: Bearer test-api-key -Content-Type: application/json - -{"model":"grok-4.5","messages":[{"role":"user","content":"Say hi"}],"max_tokens":256,"presence_penalty":0.5}HTTP/2.0 400 Bad Request -Content-Length: 96 -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: * -Cf-Cache-Status: DYNAMIC -Content-Type: application/json -Date: Mon, 03 Aug 2026 20:06:04 GMT -Server: cloudflare -Server-Timing: cfCacheStatus;desc="DYNAMIC" -Server-Timing: cfEdge;dur=7,cfOrigin;dur=485 -Strict-Transport-Security: max-age=31536000 -Vary: origin, access-control-request-method, access-control-request-headers -X-Data-Retention: general -X-Request-Id: 3dc32b08-dc14-98d9-8c49-be67a4521c57 -X-Zero-Retention: false - -{"code":"invalid-argument","error":"Model grok-4.5 does not support parameter presencePenalty."} \ No newline at end of file diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index d99feecf3..cea27e01f 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -5,6 +5,17 @@ import "strings" // AcceptsEffortWire reports whether the model's OpenAI-compatible door takes the // reasoning_effort field. A door that refuses it fails the whole request, so such // a model also has no way to spell "off": the disable token rides on this field. +// RejectsPenalties reports whether the door answers "does not support +// parameter" for frequency_penalty and presence_penalty. +func RejectsPenalties(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "grok") { + return true + } + } + return false +} + // UsesLegacyMaxTokens reports whether the output limit must travel as // max_tokens rather than max_completion_tokens. func UsesLegacyMaxTokens(model string) bool { From 0d5ad3aa9e7941acdcbfe2c020a47bae79612325 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:53:48 +0300 Subject: [PATCH 251/618] refactor(reasoning): state the predicate as our contract The doc line quoted a vendor error string, which goes stale silently the moment the vendor rewords it. What the caller needs is the effect on our wire. PAGI-180 Co-Authored-By: Claude Opus 5 --- llms/reasoning/effort_wire.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index cea27e01f..bbef4acc3 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -5,8 +5,8 @@ import "strings" // AcceptsEffortWire reports whether the model's OpenAI-compatible door takes the // reasoning_effort field. A door that refuses it fails the whole request, so such // a model also has no way to spell "off": the disable token rides on this field. -// RejectsPenalties reports whether the door answers "does not support -// parameter" for frequency_penalty and presence_penalty. +// RejectsPenalties reports whether frequency_penalty and presence_penalty +// must stay off the wire. func RejectsPenalties(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "grok") { From 66d7efe7dd20f6d380722f848a72c22a444a0b1e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 16:56:55 +0300 Subject: [PATCH 252/618] feat(anthropic): let the caller pick the inference speed The door could not reach the fast configuration at all: the body field was missing and nothing added the beta the vendor gates it behind. The option is its own name because Speed was already taken by the voice rate of speech synthesis. The served speed comes back through GenerationInfo, which is what makes a quiet fallback to the standard configuration visible rather than silent. Bedrock and Vertex never read the option, so the field cannot leave those doors. Access on our key: the vendor accepts both the field and the beta header and gets as far as quota, which answers "rate limit of 0 fast mode input tokens per minute" for the organisation. The wire shape is therefore confirmed while the research preview itself is not enabled for us. PAGI-178 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 53 +++++++++++++++++++ llms/anthropic/anthropicllm.go | 8 +++ .../anthropicclient/anthropicclient.go | 2 + .../internal/anthropicclient/messages.go | 2 + llms/options.go | 10 ++++ 5 files changed, 75 insertions(+) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index 80f05c47f..214476fed 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -1389,3 +1389,56 @@ func TestTopKReachesTheWireAndYieldsToThinking(t *testing.T) { } }) } + +func TestFastModeTravelsWithItsBetaHeader(t *testing.T) { + t.Parallel() + + t.Run("asked", func(t *testing.T) { + t.Parallel() + + body, header := captureMessagesRequestModel(t, "claude-opus-5", llms.WithInferenceSpeed("fast")) + if body["speed"] != "fast" { + t.Fatalf("the speed field must reach the wire, got body: %v", body) + } + if !strings.Contains(header.Get("Anthropic-Beta"), "fast-mode-2026-02-01") { + t.Fatalf("the beta header must ride along, got: %q", header.Get("Anthropic-Beta")) + } + }) + + t.Run("not asked", func(t *testing.T) { + t.Parallel() + + body, header := captureMessagesRequestModel(t, "claude-opus-5") + if _, ok := body["speed"]; ok { + t.Fatalf("an unset speed must stay off the wire, got body: %v", body) + } + if strings.Contains(header.Get("Anthropic-Beta"), "fast-mode") { + t.Fatalf("the beta header must stay off too, got: %q", header.Get("Anthropic-Beta")) + } + }) +} + +func TestTheServedSpeedReachesTheCaller(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"msg_test","type":"message","role":"assistant",` + + `"model":"claude-opus-5","content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1,"speed":"standard"}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{{Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}}, + llms.WithInferenceSpeed("fast")) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, "standard", resp.Choices[0].GenerationInfo["InferenceSpeed"], + "a model that quietly serves the standard speed must be visible to the caller") +} diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index bf1f68df7..b0a7cebb2 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -292,6 +292,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag Temperature: temperature, TopP: topP, TopK: topK, + Speed: opts.InferenceSpeed, Tools: tools, ToolChoice: anthropicToolChoice(opts.ToolChoice), Thinking: thinking, @@ -431,6 +432,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // Special fields for Anthropic cache creation "CacheCreationEphemeral5mInputTokens": result.Usage.CacheCreation.Ephemeral5mInputTokens, "CacheCreationEphemeral1hInputTokens": result.Usage.CacheCreation.Ephemeral1hInputTokens, + "InferenceSpeed": result.Usage.Speed, // Special fields for Anthropic "InputTokens": result.Usage.InputTokens, "OutputTokens": result.Usage.OutputTokens, @@ -893,6 +895,8 @@ func handleToolMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, er return anthropicclient.ChatMessage{}, fmt.Errorf("anthropic: %w for tool message", ErrInvalidContentType) } +const anthropicFastModeBeta = "fast-mode-2026-02-01" + // extractBetaHeaders extracts beta headers from call options. thinking is the // mechanism actually resolved for this request (nil when no thinking), so the // interleaved-thinking beta keys off the real wire shape rather than the caller's @@ -917,6 +921,10 @@ func extractBetaHeaders(opts *llms.CallOptions, thinking *anthropicclient.Thinki betaHeaders = appendIfMissing(betaHeaders, "interleaved-thinking-2025-05-14") } + if opts.InferenceSpeed != nil { + betaHeaders = appendIfMissing(betaHeaders, anthropicFastModeBeta) + } + return betaHeaders } diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index 295cadbcc..f937673cf 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -158,6 +158,7 @@ type MessageRequest struct { MaxTokens *int `json:"max_tokens,omitempty"` TopP *float64 `json:"top_p,omitempty"` TopK *int `json:"top_k,omitempty"` + Speed *string `json:"speed,omitempty"` Tools []Tool `json:"tools,omitempty"` ToolChoice any `json:"tool_choice,omitempty"` StopWords []string `json:"stop_sequences,omitempty"` @@ -181,6 +182,7 @@ func (c *Client) CreateMessage(ctx context.Context, r *MessageRequest) (*Message StopWords: r.StopWords, TopP: r.TopP, TopK: r.TopK, + Speed: r.Speed, Tools: r.Tools, ToolChoice: r.ToolChoice, Stream: r.Stream, diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index a446681d6..c8fd78f6d 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -96,6 +96,7 @@ type messagePayload struct { Temperature *float64 `json:"temperature,omitempty"` TopP *float64 `json:"top_p,omitempty"` TopK *int `json:"top_k,omitempty"` + Speed *string `json:"speed,omitempty"` Tools []Tool `json:"tools,omitempty"` ToolChoice any `json:"tool_choice,omitempty"` @@ -252,6 +253,7 @@ type MessageResponsePayload struct { ThinkingTokens int `json:"thinking_tokens,omitempty"` } `json:"output_tokens_details,omitempty"` ServiceTier string `json:"service_tier,omitempty"` + Speed string `json:"speed,omitempty"` } `json:"usage"` } diff --git a/llms/options.go b/llms/options.go index 2d8e8bf64..24af30947 100644 --- a/llms/options.go +++ b/llms/options.go @@ -269,6 +269,9 @@ type CallOptions struct { PresencePenalty *float64 `json:"presence_penalty,omitempty"` // Verbosity asks the model for a shorter or longer answer. Verbosity *string `json:"verbosity,omitempty"` + // InferenceSpeed picks the inference configuration. Not to be confused with + // Speed above, which is the voice rate of speech synthesis. + InferenceSpeed *string `json:"inference_speed,omitempty"` // Reasoning is the configuration for thinking of the model. Reasoning *ReasoningConfig `json:"reasoning,omitempty"` @@ -650,6 +653,13 @@ func WithStreamingFunc(streamingFunc streaming.Callback) CallOption { } } +// WithInferenceSpeed will add an option to pick the inference configuration. +func WithInferenceSpeed(speed string) CallOption { + return func(o *CallOptions) { + o.InferenceSpeed = &speed + } +} + // WithVerbosity will add an option to ask for a shorter or longer answer. func WithVerbosity(verbosity string) CallOption { return func(o *CallOptions) { From 6fe3c0c79bd383707487e1a31621d76f829f456a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 17:02:37 +0300 Subject: [PATCH 253/618] test(openai): pin that stop is left on the doors that refuse it The penalties are dropped, stop is not. Losing a bound the caller set is worse than the refusal it produces, so the choice is deliberate and now fails if someone extends the stripping to it. PAGI-180 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 4b7540d94..5ef4028a9 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -112,3 +112,12 @@ func TestPenaltiesStayOffTheDoorsThatRefuseThem(t *testing.T) { } } } + +func TestStopStillTravelsToTheDoorsThatRefuseIt(t *testing.T) { + t.Parallel() + + body := captureDeepSeekRequest(t, "grok-4.6", llms.WithStopWords([]string{"STOP"})) + if _, ok := body["stop"]; !ok { + t.Fatalf("stop bounds the answer, so it is left to fail loudly rather than dropped, got body: %v", body) + } +} From a0fdfa76c6d65c36a1556c7f97f452ca3dc7444b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 17:47:31 +0300 Subject: [PATCH 254/618] feat(openai): connect logprobs and top_logprobs to the caller Both fields existed on the internal request and nothing ever filled them, so the only way to ask for token probabilities was WithExtraBody. They now come from options and are dropped by the same gate that pins the temperature: gpt-5.1, 5.2 and 5.4 answer that they support logprobs, top_p and top_logprobs only at the none effort, measured at the wire. PAGI-186 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 41 +++++++++++++++++++++++++++ llms/openai/openaillm.go | 11 +++++++ llms/options.go | 18 ++++++++++++ 3 files changed, 70 insertions(+) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 5ef4028a9..09ea952a1 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -121,3 +121,44 @@ func TestStopStillTravelsToTheDoorsThatRefuseIt(t *testing.T) { t.Fatalf("stop bounds the answer, so it is left to fail loudly rather than dropped, got body: %v", body) } } + +func TestLogProbsReachTheWireAndYieldToThinking(t *testing.T) { + t.Parallel() + + t.Run("asked", func(t *testing.T) { + t.Parallel() + + body := captureDeepSeekRequest(t, "gpt-4.1", llms.WithLogProbs(true), llms.WithTopLogProbs(3)) + if body["logprobs"] != true { + t.Errorf("logprobs must reach the wire, got body: %v", body) + } + if body["top_logprobs"] != float64(3) { + t.Errorf("top_logprobs must reach the wire, got body: %v", body) + } + }) + + t.Run("not asked", func(t *testing.T) { + t.Parallel() + + body := captureDeepSeekRequest(t, "gpt-4.1") + if _, ok := body["logprobs"]; ok { + t.Errorf("an unset logprobs must stay off the wire, got body: %v", body) + } + if _, ok := body["top_logprobs"]; ok { + t.Errorf("an unset top_logprobs must stay off the wire, got body: %v", body) + } + }) + + t.Run("a thinking generation drops them like the sampling params", func(t *testing.T) { + t.Parallel() + + body := captureDeepSeekRequest(t, "gpt-5.4", + llms.WithLogProbs(true), llms.WithTopLogProbs(3), llms.WithReasoning(llms.ReasoningHigh, 0)) + if _, ok := body["logprobs"]; ok { + t.Errorf("gpt-5.4 takes logprobs only at the none effort, got body: %v", body) + } + if _, ok := body["top_logprobs"]; ok { + t.Errorf("gpt-5.4 takes top_logprobs only at the none effort, got body: %v", body) + } + }) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 186326050..b7619c454 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -269,6 +269,8 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) PresencePenalty: opts.PresencePenalty, RepetitionPenalty: opts.RepetitionPenalty, Verbosity: opts.Verbosity, + LogProbs: opts.LogProbs != nil && *opts.LogProbs, + TopLogProbs: derefInt(opts.TopLogProbs), ToolChoice: openaiToolChoice(opts.ToolChoice), FunctionCallBehavior: openaiclient.FunctionCallBehavior(opts.FunctionCallBehavior), Seed: opts.Seed, @@ -419,6 +421,8 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO req.Temperature = &temperature } req.TopP = nil + req.LogProbs = false + req.TopLogProbs = 0 case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: req.TopP = nil } @@ -721,3 +725,10 @@ func openaiToolChoice(choice any) any { return choice } } + +func derefInt(i *int) int { + if i == nil { + return 0 + } + return *i +} diff --git a/llms/options.go b/llms/options.go index 24af30947..c32617b91 100644 --- a/llms/options.go +++ b/llms/options.go @@ -272,6 +272,10 @@ type CallOptions struct { // InferenceSpeed picks the inference configuration. Not to be confused with // Speed above, which is the voice rate of speech synthesis. InferenceSpeed *string `json:"inference_speed,omitempty"` + // LogProbs asks for the log probability of each returned token. + LogProbs *bool `json:"logprobs,omitempty"` + // TopLogProbs is how many alternatives to report per position. + TopLogProbs *int `json:"top_logprobs,omitempty"` // Reasoning is the configuration for thinking of the model. Reasoning *ReasoningConfig `json:"reasoning,omitempty"` @@ -653,6 +657,20 @@ func WithStreamingFunc(streamingFunc streaming.Callback) CallOption { } } +// WithLogProbs will add an option to return the log probability of each token. +func WithLogProbs(logProbs bool) CallOption { + return func(o *CallOptions) { + o.LogProbs = &logProbs + } +} + +// WithTopLogProbs will add an option to report alternatives per position. +func WithTopLogProbs(topLogProbs int) CallOption { + return func(o *CallOptions) { + o.TopLogProbs = &topLogProbs + } +} + // WithInferenceSpeed will add an option to pick the inference configuration. func WithInferenceSpeed(speed string) CallOption { return func(o *CallOptions) { From 07b494a0f3e17117867a20e6f068c607530b6c3e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 17:49:55 +0300 Subject: [PATCH 255/618] fix(mistral): carry top_p, JSON mode and tool choice to the wire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door copied four options and dropped the rest, so WithTopP had no effect while the SDK put its own top_p of 1 in every body, and neither JSON mode nor a tool choice could be expressed at all. A choice the vendor has no name for is left off rather than guessed at. Not fixed here: the seed. The SDK builds the body as a map and writes random_seed into it unconditionally, so a request without one cannot be expressed through this dependency at all — the same wall as PAGI-184. Dropping the door's own default would only change which fixed seed every request carries, so it is left for the dependency decision. PAGI-185 Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 18 +++++++ llms/mistral/sampling_wire_test.go | 75 ++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 llms/mistral/sampling_wire_test.go diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index d455e5046..f07bd0646 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -132,7 +132,12 @@ func mistralChatParamsFromCallOptions(callOpts *llms.CallOptions) sdk.ChatReques chatOpts := sdk.DefaultChatRequestParams chatOpts.MaxTokens = callOpts.GetMaxTokens() chatOpts.Temperature = callOpts.GetTemperature() + chatOpts.TopP = callOpts.GetTopP() chatOpts.RandomSeed = callOpts.GetSeed() + if callOpts.GetJSONMode() { + chatOpts.ResponseFormat = sdk.ResponseFormatJsonObject + } + chatOpts.ToolChoice = mistralToolChoice(callOpts.ToolChoice) chatOpts.Tools = make([]sdk.Tool, 0) if len(callOpts.Tools) > 0 { for _, tool := range callOpts.Tools { @@ -304,3 +309,16 @@ func setMistralChatMessageRole(msg *llms.MessageContent, chatMsg *sdk.ChatMessag chatMsg.Role = "system" } } + +func mistralToolChoice(choice any) string { + name, ok := choice.(string) + if !ok { + return "" + } + switch name { + case sdk.ToolChoiceAny, sdk.ToolChoiceAuto, sdk.ToolChoiceNone: + return name + default: + return "" + } +} diff --git a/llms/mistral/sampling_wire_test.go b/llms/mistral/sampling_wire_test.go new file mode 100644 index 000000000..8bb05dbe1 --- /dev/null +++ b/llms/mistral/sampling_wire_test.go @@ -0,0 +1,75 @@ +package mistral + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func captureMistralRequest(t *testing.T, opts ...llms.CallOption) map[string]any { + t.Helper() + + var body map[string]any + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ := io.ReadAll(r.Body) + _ = json.Unmarshal(raw, &body) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"x","object":"chat.completion","created":1,` + + `"model":"mistral-small-latest","choices":[{"index":0,` + + `"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`)) + })) + t.Cleanup(srv.Close) + + model, err := New(WithAPIKey("unit-test-token"), WithEndpoint(srv.URL), + WithModel("mistral-small-latest")) + if err != nil { + t.Fatalf("New: %v", err) + } + if _, err := model.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent: %v", err) + } + return body +} + +func TestTopPReachesTheMistralWire(t *testing.T) { + t.Parallel() + + if got := captureMistralRequest(t, llms.WithTopP(0.5))["top_p"]; got != 0.5 { + t.Fatalf("the caller's top_p must reach the wire, got %v", got) + } +} + +func TestJSONModeReachesTheMistralWire(t *testing.T) { + t.Parallel() + + body := captureMistralRequest(t, llms.WithJSONMode()) + format, _ := body["response_format"].(map[string]any) + if format == nil || format["type"] != "json_object" { + t.Fatalf("JSON mode must reach the wire, got body: %v", body) + } + + if _, ok := captureMistralRequest(t)["response_format"]; ok { + t.Fatal("an unset JSON mode must leave the field off the wire") + } +} + +func TestToolChoiceReachesTheMistralWire(t *testing.T) { + t.Parallel() + + for _, choice := range []string{"any", "auto", "none"} { + if got := captureMistralRequest(t, llms.WithToolChoice(choice))["tool_choice"]; got != choice { + t.Errorf("tool_choice %q must reach the wire, got %v", choice, got) + } + } + + if _, ok := captureMistralRequest(t, llms.WithToolChoice("something-else"))["tool_choice"]; ok { + t.Error("a choice the vendor has no name for must not be guessed at") + } +} From f6952da7f7e0032ce1a44d73c51d5db2314119d3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 18:45:18 +0300 Subject: [PATCH 256/618] fix(openai): drop top_k when the model thinks Anthropic refuses top_k alongside enabled thinking, and Claude is reachable through this door via a gateway. The sampling policy pinned temperature and dropped top_p there but left top_k on the wire, so the whole request came back 400 from the vendor. Drop top_k in the same branch. Models whose caps come from OpenAI are unaffected: top_k never reached them anyway. The trailing top_p reset below the switch matched a strict subset of the branch that had already cleared it; it goes with the fix. Verified live: the same call answered "top_k must be unset when thinking is enabled" before and completes after. PAGI-187 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 5 +---- llms/openai/sampling_matrix_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index b7619c454..9de7079d2 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -421,15 +421,12 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO req.Temperature = &temperature } req.TopP = nil + req.TopK = nil req.LogProbs = false req.TopLogProbs = 0 case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: req.TopP = nil } - - if isThinkingOnTheWire(wireEffort) && refusesSamplingWhileThinking(model, opts, wireEffort) { - req.TopP = nil - } } func refusesSamplingWhileThinking(model string, opts llms.CallOptions, wireEffort string) bool { diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 9713f9bb7..f83318c91 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -179,6 +179,18 @@ func TestClaudeSamplingMatrix(t *testing.T) { opts: []llms.CallOption{llms.WithReasoning(llms.ReasoningXHigh, 0)}, present: []string{`"reasoning_effort":"high"`}, absent: []string{`"reasoning_effort":"xhigh"`}, + }, { + name: "thinking takes top_k off the wire alongside top_p", + model: "claude-sonnet-4-5", + opts: []llms.CallOption{topP, llms.WithTopK(40), high}, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"top_p"`, `"top_k"`}, + }, { + name: "top_k rides along when nothing asked the model to think", + model: "claude-sonnet-4-5", + opts: []llms.CallOption{llms.WithTopK(40)}, + present: []string{`"top_k":40`}, + absent: []string{`"reasoning_effort"`}, }, { name: "extra body overwrites a param the policy stripped", model: "claude-opus-4-7", From 63cb8e5010ce6e74c90896d3f299345d913efc58 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 18:49:41 +0300 Subject: [PATCH 257/618] fix(openai): drop the penalties when the model thinks OpenAI refuses frequency_penalty and presence_penalty on the GPT-5 generation while reasoning is active, and accepts them once the effort is none. The door pinned temperature and dropped top_p, top_k and the logprobs pair in that branch but left both penalties on the wire, so an explicit penalty plus a requested effort failed the whole call. Drop them in the same branch. It never fires for a disabled effort, so the none case keeps both fields without a condition of its own. RejectsPenalties stays as it is: it states an unconditional refusal by model name, which is not the shape of this one. Verified live against the vendor door: the same call answered "presence_penalty is not supported with this model" before and completes after. PAGI-188 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 2 ++ llms/openai/sampling_matrix_test.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 9de7079d2..f1bef09eb 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -422,6 +422,8 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO } req.TopP = nil req.TopK = nil + req.FrequencyPenalty = nil + req.PresencePenalty = nil req.LogProbs = false req.TopLogProbs = 0 case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index f83318c91..0d27465b3 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -135,6 +135,21 @@ func TestSamplingMatrix(t *testing.T) { opts: []llms.CallOption{temp, topP}, present: []string{`"temperature":1`}, absent: []string{`"top_p"`, `"reasoning_effort"`}, + }, { + name: "thinking takes both penalties off the wire", + model: "gpt-5.4", + opts: []llms.CallOption{ + llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.4), high, + }, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"frequency_penalty"`, `"presence_penalty"`}, + }, { + name: "penalties ride along once thinking is switched off", + model: "gpt-5.5", + opts: []llms.CallOption{ + llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.4), off, + }, + present: []string{`"frequency_penalty":0.5`, `"presence_penalty":0.4`, `"reasoning_effort":"none"`}, }, { name: "a non-reasoning model keeps everything", model: "gpt-4.1", From 3ec1ebbea6e0dc4f1df8d2384665aca77f0cc8e9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 19:23:05 +0300 Subject: [PATCH 258/618] fix(reasoning): let the Gemini 3 generations that comply turn thinking off The catalogue refused the whole gemini-3 family in one line, so ResolveOff answered OffUnsupported and the door raised a typed error before sending anything. Measured against the vendor, that holds for only part of the family: generations 3 and 3.5 honour thinkingBudget:0 and come back with no reasoning tokens at all, while 3.6 rejects the value and 3.7 accepts it and reasons anyway. Gate the family on the generations that comply. The rest keep the typed error: for 3.7 that is the honest answer, since granting it would restore the silent no-op this release refuses to ship. gemini-3.5-flash is a production model, so this also flips its CannotDisable hint, which is what the vendor actually does. Verified live through the door: disabling answered "reasoning cannot be disabled" before and now completes with zero reasoning tokens. PAGI-189 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_core_unit_test.go | 4 ++-- llms/reasoning/gemini_capability.go | 12 +++++++++++- llms/reasoning/gemini_capability_test.go | 7 +++++-- llms/reasoning/off.go | 3 --- llms/reasoning/off_test.go | 11 ++++++++--- llms/reasoning_support_test.go | 2 +- 6 files changed, 27 insertions(+), 12 deletions(-) diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 874b3e415..e7240000f 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1047,7 +1047,7 @@ var productionGeminiModels = []struct { usesThinkingLevel bool // Gemini 3.x uses thinking_level; 2.5 / Gemma use thinking_budget disable disableWire }{ - {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableUnsupported}, + {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableZeroBudget}, {name: "gemini-3.1-pro-preview", usesThinkingLevel: true, disable: disableUnsupported}, {name: "gemini-3.1-pro-preview-customtools", usesThinkingLevel: true, disable: disableUnsupported}, {name: "gemini-3.1-flash-lite", usesThinkingLevel: true, disable: disableOmit}, @@ -1132,7 +1132,7 @@ func TestResolveThinkingConfig(t *testing.T) { }) t.Run("off on non-disablable model errors, no budget zero", func(t *testing.T) { - for _, model := range []string{"gemini-2.5-pro", "gemini-3.1-pro", "gemini-3-flash", "gemini-3.5-flash"} { + for _, model := range []string{"gemini-2.5-pro", "gemini-3.1-pro", "gemini-3.6-flash", "gemini-3.7-flash"} { tc, err := resolveThinkingConfig(model, &llms.ReasoningConfig{Mode: llms.ReasoningOff}, 1000) var offErr *reasoning.ErrReasoningOffUnsupported require.ErrorAs(t, err, &offErr, "off on %s must be unsupported", model) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 87f173327..7d11ed3c1 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -89,7 +89,7 @@ func GeminiCanDisable(model string) bool { return true } if hasFamily(m, "gemini-3") { - return false + return geminiBudgetZeroDisables(m) } if hasFamily(m, "gemini-2.5") && strings.Contains(m, "pro") { return false @@ -97,6 +97,16 @@ func GeminiCanDisable(model string) bool { return true } +func geminiBudgetZeroDisables(model string) bool { + if strings.Contains(model, "pro") { + return false + } + if hasFamily(model, "gemini-3.5") { + return true + } + return !strings.HasPrefix(model, "gemini-3.") +} + // GeminiThinkingOffByDefault reports whether the model leaves thinking off until // asked, so omitting the thinking config already yields "off". func GeminiThinkingOffByDefault(model string) bool { diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index 23fb0ff1f..ee2aefeb2 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -37,9 +37,12 @@ func TestGeminiCanDisable(t *testing.T) { {"gemini-2.5-flash-lite", true}, {"gemma-4-31b-it", true}, {"gemini-2.5-pro", false}, - {"gemini-3-flash-preview", false}, + {"gemini-3-flash-preview", true}, {"gemini-3.1-pro-preview", false}, - {"gemini-3.5-flash", false}, + {"gemini-3.5-flash", true}, + {"gemini-3.5-pro", false}, + {"gemini-3.6-flash", false}, + {"gemini-3.7-flash", false}, {"some-unknown-google-model", true}, // optimistic } for _, tc := range cases { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index f2fb0062a..c901f60a0 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -69,9 +69,6 @@ func ResolveOff(model string, p Provider) OffWire { switch p { case ProviderGoogleAI: - // Gemini 3.x and Gemini 2.5 Pro cannot be disabled (budget:0 is ignored / - // rejected); Gemini 2.5 Flash / Flash-Lite, Gemma 4, and unknowns disable - // via thinkingBudget:0. if !GeminiCanDisable(model) { return OffUnsupported } diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 3f7cdb36a..8e1821957 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -21,12 +21,17 @@ func TestResolveOff(t *testing.T) { {"gemini-2.5-flash", ProviderGoogleAI, OffZeroBudget}, {"gemini-2.5-flash-lite", ProviderGoogleAI, OffOmit}, {"gemini-2.5-pro", ProviderGoogleAI, OffUnsupported}, // Pro cannot disable thinking - {"gemini-3.1-pro", ProviderGoogleAI, OffUnsupported}, // 3.x has no full off + {"gemini-3.1-pro", ProviderGoogleAI, OffUnsupported}, {"gemini-3.1-pro-preview", ProviderGoogleAI, OffUnsupported}, {"gemini-3.1-pro-preview-customtools", ProviderGoogleAI, OffUnsupported}, {"gemini-3.1-flash-lite", ProviderGoogleAI, OffOmit}, - {"gemini-3.5-flash", ProviderGoogleAI, OffUnsupported}, - {"gemini-3-flash", ProviderGoogleAI, OffUnsupported}, + {"gemini-3-flash", ProviderGoogleAI, OffZeroBudget}, + {"gemini-3-flash-preview", ProviderGoogleAI, OffZeroBudget}, + {"gemini-3.5-flash", ProviderGoogleAI, OffZeroBudget}, + {"models/gemini-3.5-flash", ProviderGoogleAI, OffZeroBudget}, + {"gemini-3.6-flash", ProviderGoogleAI, OffUnsupported}, + {"gemini-3.7-flash", ProviderGoogleAI, OffUnsupported}, + {"gemini-3.5-pro", ProviderGoogleAI, OffUnsupported}, {"gemma-4-31b-it", ProviderGoogleAI, OffZeroBudget}, {"gemma-4-26b-a4b-it", ProviderGoogleAI, OffZeroBudget}, // Pre-thinking Gemini/Gemma never think: omit rather than send budget:0. diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index cdc81e71c..61438781d 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -225,7 +225,7 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes model string cannotDisable bool }{ - {"gemini-3.5-flash", true}, + {"gemini-3.5-flash", false}, {"gemini-3.1-pro-preview", true}, {"gemini-3.1-pro-preview-customtools", true}, {"gemini-3.1-flash-lite", false}, From 38fc648a997228f3baa254baa7292309ee51b07b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 31 Aug 2026 21:55:45 +0300 Subject: [PATCH 259/618] fix(reasoning): classify the inkling family and bound the thinking marker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A bare call to inkling comes back with thousands of characters of reasoning, and reasoning_effort "none" reliably empties it — measured on two prompts per model. The catalogue did not know the family, so the hint told callers the model cannot reason and WithReasoningDisabled resolved to "omit", which left the model thinking while reporting success. Classifying it exposes the second half. ThinkingMarkedInName matched the substring anywhere, so the vendor segment in "thinkingmachines/inkling" read as a thinking marker; the miss was unreachable only while the family stayed unclassified. Require the marker to stand as its own token, which is how every real bearer spells it. Both land together: the first makes the second reachable. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 31 ++++++++++++++++++++++++++- llms/reasoning/reasoning.go | 20 ++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 585790d21..b12d656be 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -403,7 +403,10 @@ func TestFamiliesThatRefuseAnExplicitOff(t *testing.T) { func TestFamiliesMeasuredAgainstTheirBareCall(t *testing.T) { t.Parallel() - for _, model := range []string{"lfm-2.5-2.6b", "liquid/lfm-2.5-2.6b:free", "seed-2-1-turbo", "bytedance-seed/seed-2-1-turbo"} { + for _, model := range []string{ + "lfm-2.5-2.6b", "liquid/lfm-2.5-2.6b:free", "seed-2-1-turbo", "bytedance-seed/seed-2-1-turbo", + "inkling", "inkling-small", "thinkingmachines/inkling", "openrouter/thinkingmachines/inkling-small:free", + } { if !IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = false, but a bare call already returns a reasoning block", model) } @@ -422,6 +425,32 @@ func TestFamiliesMeasuredAgainstTheirBareCall(t *testing.T) { if !ThinkingOptIn("ernie-4.5-vl-424b-a47b") { t.Error("ThinkingOptIn(ernie-4.5) = false, but a bare call returns no reasoning and an effort turns it on") } + + if got := ResolveOff("thinkingmachines/inkling", ProviderOpenAI); got != OffEffortNone { + t.Errorf("ResolveOff(inkling) = %v, want OffEffortNone: the off returns no reasoning", got) + } +} + +func TestTheThinkingMarkerNeedsAWordBoundary(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "kimi-k2-thinking", "qwen3-30b-a3b-thinking-2507", "Qwen3-235B-A22B-Thinking-2507", + "arcee-ai/trinity-large-thinking", "lfm-2-thinking", + } { + if !ThinkingMarkedInName(model) { + t.Errorf("ThinkingMarkedInName(%q) = false, but the name carries the marker as its own token", model) + } + } + + for _, model := range []string{ + "thinkingmachines/inkling", "openrouter/thinkingmachines/inkling-small:free", + "gpt-5.4", "claude-sonnet-4-5", + } { + if ThinkingMarkedInName(model) { + t.Errorf("ThinkingMarkedInName(%q) = true, but the marker only appears inside a longer word", model) + } + } } func TestDeepSeekR1CannotStopReasoning(t *testing.T) { diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index ed8fe474e..3b70fa79c 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -317,6 +317,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat (strings.Contains(modelLower, "lfm-") && strings.Contains(modelLower, "-thinking")) || strings.HasPrefix(modelLower, "lfm-2.5") || strings.Contains(modelLower, "seed-2-1") || + strings.Contains(modelLower, "inkling") || strings.Contains(modelLower, "deephermes") || strings.Contains(modelLower, "hermes-4-") || (strings.Contains(modelLower, "nemotron") && !nvidiaNonChatSurface(modelLower)) || @@ -380,7 +381,24 @@ func ThinkingOptIn(model string) bool { // ThinkingMarkedInName reports whether the model name selects a routing variant // that already runs with thinking on, not merely a model capable of thinking. func ThinkingMarkedInName(model string) bool { - return strings.Contains(strings.ToLower(model), "thinking") + m := strings.ToLower(model) + const marker = "thinking" + for i := 0; i < len(m); { + idx := strings.Index(m[i:], marker) + if idx == -1 { + return false + } + start, end := i+idx, i+idx+len(marker) + if !letterAt(m, start-1) && !letterAt(m, end) { + return true + } + i = end + } + return false +} + +func letterAt(s string, i int) bool { + return i >= 0 && i < len(s) && s[i] >= 'a' && s[i] <= 'z' } func isAlpha(s string) bool { From 6444b4ec5598d7868520771f8b6aa25bbb78d177 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 00:54:13 +0300 Subject: [PATCH 260/618] fix(mistral): draw a fresh seed when the caller asks for none The door filled CallOptions.Seed from the SDK's own default, so every request carried random_seed 42069 and a repeated prompt came back with a repeated completion. Measured on mistral-medium-latest at temperature 1: one distinct answer in four with that seed, four in four without it. mistral-go builds its body as a map and writes random_seed into every request, so the field cannot be omitted. Drawing a seed per request is what an unseeded call looks like on the wire. PAGI-185 Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 37 ++++++++++++++++++++++++------ llms/mistral/mistralmodel_test.go | 16 ++++++++++--- llms/mistral/sampling_wire_test.go | 18 +++++++++++++++ 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index f07bd0646..8cc43f52f 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -2,7 +2,11 @@ package mistral import ( "context" + "crypto/rand" "errors" + "fmt" + "math" + "math/big" "os" "strings" @@ -48,7 +52,10 @@ func New(opts ...Option) (*Model, error) { func (m *Model) Call(ctx context.Context, prompt string, options ...llms.CallOption) (string, error) { callOptions := resolveDefaultOptions(sdk.DefaultChatRequestParams, m.clientOptions) setCallOptions(options, callOptions) - mistralChatParams := mistralChatParamsFromCallOptions(callOptions) + mistralChatParams, err := mistralChatParamsFromCallOptions(callOptions) + if err != nil { + return "", err + } messages := []sdk.ChatMessage{{ Role: "user", @@ -88,7 +95,10 @@ func (m *Model) GenerateContent(ctx context.Context, langchainMessages []llms.Me callOptions := resolveDefaultOptions(sdk.DefaultChatRequestParams, m.clientOptions) setCallOptions(options, callOptions) - chatOpts := mistralChatParamsFromCallOptions(callOptions) + chatOpts, err := mistralChatParamsFromCallOptions(callOptions) + if err != nil { + return nil, err + } messages, err := convertToMistralChatMessages(langchainMessages) if err != nil { @@ -121,19 +131,21 @@ func resolveDefaultOptions(sdkDefaults sdk.ChatRequestParams, c *clientOptions) Temperature: &sdkDefaults.Temperature, // TopP is the cumulative probability for top-p sampling. TopP: &sdkDefaults.TopP, - // Seed is a seed for deterministic sampling. - Seed: &sdkDefaults.RandomSeed, // Function defitions to include in the request. Functions: make([]llms.FunctionDefinition, 0), } } -func mistralChatParamsFromCallOptions(callOpts *llms.CallOptions) sdk.ChatRequestParams { +func mistralChatParamsFromCallOptions(callOpts *llms.CallOptions) (sdk.ChatRequestParams, error) { chatOpts := sdk.DefaultChatRequestParams chatOpts.MaxTokens = callOpts.GetMaxTokens() chatOpts.Temperature = callOpts.GetTemperature() chatOpts.TopP = callOpts.GetTopP() - chatOpts.RandomSeed = callOpts.GetSeed() + seed, err := seedForRequest(callOpts) + if err != nil { + return sdk.ChatRequestParams{}, err + } + chatOpts.RandomSeed = seed if callOpts.GetJSONMode() { chatOpts.ResponseFormat = sdk.ResponseFormatJsonObject } @@ -162,7 +174,18 @@ func mistralChatParamsFromCallOptions(callOpts *llms.CallOptions) sdk.ChatReques }) } } - return chatOpts + return chatOpts, nil +} + +func seedForRequest(callOpts *llms.CallOptions) (int, error) { + if callOpts.Seed != nil { + return *callOpts.Seed, nil + } + n, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt32)) + if err != nil { + return 0, fmt.Errorf("mistral: drawing a seed: %w", err) + } + return int(n.Int64()), nil } func generateNonStreamingContent(m *Model, callOptions *llms.CallOptions, messages []sdk.ChatMessage, chatOpts sdk.ChatRequestParams) (*llms.ContentResponse, error) { diff --git a/llms/mistral/mistralmodel_test.go b/llms/mistral/mistralmodel_test.go index a4a0276db..31c8b0628 100644 --- a/llms/mistral/mistralmodel_test.go +++ b/llms/mistral/mistralmodel_test.go @@ -298,6 +298,16 @@ func contains(s, substr string) bool { return len(s) >= len(substr) && s[0:len(substr)] == substr || len(s) > len(substr) && contains(s[1:], substr) } +func mustChatParams(t *testing.T, callOpts *llms.CallOptions) sdk.ChatRequestParams { + t.Helper() + + params, err := mistralChatParamsFromCallOptions(callOpts) + if err != nil { + t.Fatalf("mistralChatParamsFromCallOptions: %v", err) + } + return params +} + func TestMistralChatParamsFromCallOptions(t *testing.T) { t.Run("basic options", func(t *testing.T) { callOpts := &llms.CallOptions{ @@ -308,7 +318,7 @@ func TestMistralChatParamsFromCallOptions(t *testing.T) { Seed: getIntPointer(42), } - result := mistralChatParamsFromCallOptions(callOpts) + result := mustChatParams(t, callOpts) if result.Temperature != 0.7 { t.Errorf("mistralChatParamsFromCallOptions() Temperature = %v, want %v", result.Temperature, 0.7) @@ -344,7 +354,7 @@ func TestMistralChatParamsFromCallOptions(t *testing.T) { }, } - result := mistralChatParamsFromCallOptions(callOpts) + result := mustChatParams(t, callOpts) if len(result.Tools) != 1 { t.Errorf("mistralChatParamsFromCallOptions() Tools length = %v, want %v", len(result.Tools), 1) @@ -375,7 +385,7 @@ func TestMistralChatParamsFromCallOptions(t *testing.T) { }, } - result := mistralChatParamsFromCallOptions(callOpts) + result := mustChatParams(t, callOpts) if len(result.Tools) != 1 { t.Errorf("mistralChatParamsFromCallOptions() Tools length = %v, want %v", len(result.Tools), 1) diff --git a/llms/mistral/sampling_wire_test.go b/llms/mistral/sampling_wire_test.go index 8bb05dbe1..ee78fd5a6 100644 --- a/llms/mistral/sampling_wire_test.go +++ b/llms/mistral/sampling_wire_test.go @@ -73,3 +73,21 @@ func TestToolChoiceReachesTheMistralWire(t *testing.T) { t.Error("a choice the vendor has no name for must not be guessed at") } } + +func TestMistralDoesNotPinTheSeedWhenTheCallerDidNotAskForOne(t *testing.T) { + t.Parallel() + + first, sentFirst := captureMistralRequest(t)["random_seed"] + second, sentSecond := captureMistralRequest(t)["random_seed"] + if sentFirst && sentSecond && first == second { + t.Fatalf("two seedless calls must not share a seed, both got %v", first) + } +} + +func TestMistralKeepsTheSeedTheCallerAsksFor(t *testing.T) { + t.Parallel() + + if got := captureMistralRequest(t, llms.WithSeed(7))["random_seed"]; got != float64(7) { + t.Fatalf("the caller's seed must reach the wire, got %v", got) + } +} From e360eb0565ae1ec49901d104c95d23f3b1f00b27 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 02:34:28 +0300 Subject: [PATCH 261/618] fix(openai): serve DashScope qwen3 hybrids without a stream DashScope turns thinking on by default for the qwen3 models named by parameter count, and answers a non-streaming request only when the body carries enable_thinking=false. The door never sent that field, so every non-streaming GenerateContent to qwen3-8b, -14b, -32b, -30b-a3b and -235b-a22b came back as a vendor error rather than an answer. The door now sends the field on non-streaming calls, and refuses a request that asks such a model to think without a stream: the vendor answers "enable_thinking only support stream call", so a silent downgrade to a non-thinking answer would be the wrong trade. The quirk is DashScope's own. OpenRouter and DeepInfra serve the same weights with no such field, so the rule matches the vendor's bare spelling and skips any re-hosted one. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 1 + llms/openai/openaillm.go | 8 ++ llms/openai/qwen_stream_only_test.go | 92 +++++++++++++++++++++++ llms/reasoning/qwen_capability.go | 27 +++++++ llms/reasoning/qwen_capability_test.go | 39 ++++++++++ 5 files changed, 167 insertions(+) create mode 100644 llms/openai/qwen_stream_only_test.go create mode 100644 llms/reasoning/qwen_capability.go create mode 100644 llms/reasoning/qwen_capability_test.go diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 09b837949..6a63ab11c 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -49,6 +49,7 @@ type ChatRequest struct { TopK *int `json:"top_k,omitempty"` TopP *float64 `json:"top_p,omitempty"` MinP *float64 `json:"min_p,omitempty"` + EnableThinking *bool `json:"enable_thinking,omitempty"` MaxTokens *int `json:"max_tokens,omitempty"` MaxCompletionTokens *int `json:"max_completion_tokens,omitempty"` N *int `json:"n,omitempty"` diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index f1bef09eb..bd082c18e 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -284,6 +284,14 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.PresencePenalty = nil } + if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) && opts.StreamingFunc == nil { + if opts.Reasoning.ResolveMode() == llms.ReasoningOn { + return nil, &reasoning.ErrThinkingRequiresStream{Model: model} + } + thinkingOff := false + req.EnableThinking = &thinkingOff + } + if isLegacyMaxTokensField(&opts) || reasoning.UsesLegacyMaxTokens(o.effectiveModel(opts)) { req.MaxTokens = opts.MaxTokens } else { diff --git a/llms/openai/qwen_stream_only_test.go b/llms/openai/qwen_stream_only_test.go new file mode 100644 index 000000000..adaf55296 --- /dev/null +++ b/llms/openai/qwen_stream_only_test.go @@ -0,0 +1,92 @@ +package openai + +import ( + "context" + "encoding/json" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func captureQwenRequest(t *testing.T, model string, opts ...llms.CallOption) (map[string]any, error) { + t.Helper() + + var body map[string]any + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ := io.ReadAll(r.Body) + _ = json.Unmarshal(raw, &body) + if stream, _ := body["stream"].(bool); stream { + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, "data: {\"id\":\"1\",\"object\":\"chat.completion.chunk\","+ + "\"choices\":[{\"index\":0,\"delta\":{\"content\":\"ok\"},\"finish_reason\":\"stop\"}]}\n\n"+ + "data: [DONE]\n\n") + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + defer server.Close() + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel(model)) + if err != nil { + t.Fatalf("new client: %v", err) + } + _, genErr := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + return body, genErr +} + +func TestQwenHybridDisablesThinkingWithoutAStream(t *testing.T) { + t.Parallel() + + body, err := captureQwenRequest(t, "dashscope/qwen3-8b") + if err != nil { + t.Fatalf("generate: %v", err) + } + if got, ok := body["enable_thinking"]; !ok || got != false { + t.Fatalf("a non-streaming call must carry enable_thinking=false, got %v (present=%v)", got, ok) + } +} + +func TestQwenHybridLeavesAStreamingCallAlone(t *testing.T) { + t.Parallel() + + body, err := captureQwenRequest(t, "dashscope/qwen3-8b", + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + if err != nil { + t.Fatalf("generate: %v", err) + } + if got, ok := body["enable_thinking"]; ok { + t.Fatalf("a streaming call must not pin thinking, got enable_thinking=%v", got) + } +} + +func TestQwenHybridRefusesThinkingWithoutAStream(t *testing.T) { + t.Parallel() + + _, err := captureQwenRequest(t, "dashscope/qwen3-8b", llms.WithReasoning(llms.ReasoningHigh, 0)) + var want *reasoning.ErrThinkingRequiresStream + if !errors.As(err, &want) { + t.Fatalf("asking a stream-only model to think without a stream must be refused, got %v", err) + } +} + +func TestQwenCoderKeepsTheBareCallUntouched(t *testing.T) { + t.Parallel() + + body, err := captureQwenRequest(t, "dashscope/qwen3-coder-plus") + if err != nil { + t.Fatalf("generate: %v", err) + } + if got, ok := body["enable_thinking"]; ok { + t.Fatalf("the coder line is not a hybrid, got enable_thinking=%v", got) + } +} diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go new file mode 100644 index 000000000..258c68c57 --- /dev/null +++ b/llms/reasoning/qwen_capability.go @@ -0,0 +1,27 @@ +package reasoning + +import ( + "fmt" + "regexp" + "strings" +) + +var qwenParameterCountName = regexp.MustCompile(`^qwen3-\d+(\.\d+)?b(-a\d+(\.\d+)?b)?$`) + +// QwenThinkingRequiresStream reports whether DashScope serves the model's +// thinking only on a streaming call. +func QwenThinkingRequiresStream(model string) bool { + m := strings.TrimPrefix(strings.ToLower(model), "dashscope/") + if strings.Contains(m, "/") { + return false + } + return qwenParameterCountName.MatchString(m) +} + +// ErrThinkingRequiresStream reports thinking asked of a stream-only model +// without a stream. +type ErrThinkingRequiresStream struct{ Model string } + +func (e *ErrThinkingRequiresStream) Error() string { + return fmt.Sprintf("reasoning on model %q is available only on a streaming call", e.Model) +} diff --git a/llms/reasoning/qwen_capability_test.go b/llms/reasoning/qwen_capability_test.go new file mode 100644 index 000000000..375465ba8 --- /dev/null +++ b/llms/reasoning/qwen_capability_test.go @@ -0,0 +1,39 @@ +package reasoning + +import "testing" + +func TestQwenThinkingRequiresStream(t *testing.T) { + t.Parallel() + + cases := []struct { + model string + want bool + }{ + {"qwen3-8b", true}, + {"qwen3-14b", true}, + {"qwen3-32b", true}, + {"qwen3-30b-a3b", true}, + {"qwen3-235b-a22b", true}, + {"qwen3-1.7b", true}, + {"dashscope/qwen3-8b", true}, + {"DashScope/Qwen3-32B", true}, + {"qwen3-coder-plus", false}, + {"qwen3-coder-30b-a3b-instruct", false}, + {"qwen3-vl-plus", false}, + {"qwen3-max", false}, + {"qwen3-rerank", false}, + {"qwen3-next-80b-a3b-thinking", false}, + {"qwen3-next-80b-a3b-instruct", false}, + {"qwen3-235b-a22b-thinking-2507", false}, + {"qwen3.5-flash", false}, + {"qwen2.5-7b", false}, + {"qwen/qwen3-32b", false}, + {"openrouter/qwen/qwen3-8b", false}, + {"deepinfra/Qwen/Qwen3-32B", false}, + } + for _, tc := range cases { + if got := QwenThinkingRequiresStream(tc.model); got != tc.want { + t.Errorf("QwenThinkingRequiresStream(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} From 07d8b2c475ccf9e183c3b8470e72425603410587 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 02:38:01 +0300 Subject: [PATCH 262/618] fix(openai): honour a disabled-reasoning request on qwen3 streams WithReasoningDisabled() reached the wire as nothing at all on the DashScope qwen3 hybrids, so a caller who switched thinking off still got it: measured on qwen3-8b over three streaming runs, 1199, 1229 and 1661 characters of reasoning against the caller's explicit off. The door now sends enable_thinking=false whenever the caller disables reasoning, not only on the non-streaming path that needs the field to be served at all. A bare stream still reasons. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 11 +++++++---- llms/openai/qwen_stream_only_test.go | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index bd082c18e..a420263ec 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -284,12 +284,15 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) req.PresencePenalty = nil } - if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) && opts.StreamingFunc == nil { - if opts.Reasoning.ResolveMode() == llms.ReasoningOn { + if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) { + mode, streamed := opts.Reasoning.ResolveMode(), opts.StreamingFunc != nil + if !streamed && mode == llms.ReasoningOn { return nil, &reasoning.ErrThinkingRequiresStream{Model: model} } - thinkingOff := false - req.EnableThinking = &thinkingOff + if !streamed || mode == llms.ReasoningOff { + thinkingOff := false + req.EnableThinking = &thinkingOff + } } if isLegacyMaxTokensField(&opts) || reasoning.UsesLegacyMaxTokens(o.effectiveModel(opts)) { diff --git a/llms/openai/qwen_stream_only_test.go b/llms/openai/qwen_stream_only_test.go index adaf55296..abfcd3c3a 100644 --- a/llms/openai/qwen_stream_only_test.go +++ b/llms/openai/qwen_stream_only_test.go @@ -90,3 +90,17 @@ func TestQwenCoderKeepsTheBareCallUntouched(t *testing.T) { t.Fatalf("the coder line is not a hybrid, got enable_thinking=%v", got) } } + +func TestQwenHybridHonoursDisabledThinkingOnAStream(t *testing.T) { + t.Parallel() + + body, err := captureQwenRequest(t, "dashscope/qwen3-8b", + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil }), + llms.WithReasoningDisabled()) + if err != nil { + t.Fatalf("generate: %v", err) + } + if got, ok := body["enable_thinking"]; !ok || got != false { + t.Fatalf("an explicit disable must reach the wire, got %v (present=%v)", got, ok) + } +} From f9425e2f51e8599986fa580374615a2166017d5e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 08:37:32 +0300 Subject: [PATCH 263/618] feat(reasoning): let the catalogue spell "off" for DashScope hybrids MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The qwen3 models named by parameter count reason unless told otherwise, but the catalogue called them non-reasoning and resolved "off" to OffOmit — omitting a field that leaves thinking on. Neither the hint nor the wire could say anything true about them. OffDisableDashScope names the vendor's own switch, so ResolveOff now answers with the wire form the door writes, IsReasoningModel stops disagreeing with the file next to it, and CannotDisable follows the resolution instead of a blanket ban. The door's disable path goes through the catalogue; its own predicate keeps only the case the catalogue cannot express, where a non-streaming call needs the field to be answered at all. The value is reachable only under ProviderOpenAI, so the bedrock spelling of the same weights keeps the answer it has today. Measured on the gateway: DashScope disables with the flag, OpenRouter disables with neither the flag nor an effort, DeepInfra returns its thinking inside a think tag and drops it for effort none. Only the first is claimed here. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 12 +++++---- llms/openai/qwen_stream_only_test.go | 16 +++++++++++ llms/reasoning/catalogue_gaps_test.go | 9 +++++-- llms/reasoning/off.go | 5 ++++ llms/reasoning/qwen_off_test.go | 39 +++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 1 + llms/reasoning/reasoning_test.go | 8 +++--- 7 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 llms/reasoning/qwen_off_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index a420263ec..920969cca 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -285,11 +285,10 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) } if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) { - mode, streamed := opts.Reasoning.ResolveMode(), opts.StreamingFunc != nil - if !streamed && mode == llms.ReasoningOn { - return nil, &reasoning.ErrThinkingRequiresStream{Model: model} - } - if !streamed || mode == llms.ReasoningOff { + if opts.StreamingFunc == nil { + if opts.Reasoning.ResolveMode() == llms.ReasoningOn { + return nil, &reasoning.ErrThinkingRequiresStream{Model: model} + } thinkingOff := false req.EnableThinking = &thinkingOff } @@ -405,6 +404,9 @@ func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptio return &reasoning.ErrReasoningOffUnsupported{Model: model} case reasoning.OffEffortNone: o.writeDisableEffort(req) + case reasoning.OffDisableDashScope: + thinkingOff := false + req.EnableThinking = &thinkingOff } return nil } diff --git a/llms/openai/qwen_stream_only_test.go b/llms/openai/qwen_stream_only_test.go index abfcd3c3a..052a6ad2d 100644 --- a/llms/openai/qwen_stream_only_test.go +++ b/llms/openai/qwen_stream_only_test.go @@ -104,3 +104,19 @@ func TestQwenHybridHonoursDisabledThinkingOnAStream(t *testing.T) { t.Fatalf("an explicit disable must reach the wire, got %v (present=%v)", got, ok) } } + +func TestQwenHybridKeepsTheCallerSampling(t *testing.T) { + t.Parallel() + + body, err := captureQwenRequest(t, "dashscope/qwen3-8b", + llms.WithTemperature(0.25), llms.WithTopP(0.3)) + if err != nil { + t.Fatalf("generate: %v", err) + } + if got := body["temperature"]; got != 0.25 { + t.Fatalf("the caller's temperature must survive, got %v", got) + } + if got := body["top_p"]; got != 0.3 { + t.Fatalf("the caller's top_p must survive, got %v", got) + } +} diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index b12d656be..a71687b55 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -48,10 +48,15 @@ func TestNonChatGoogleSurfacesAreNotThinkingModels(t *testing.T) { } } -func TestQwen3StaysOutUntilEnableThinkingIsSent(t *testing.T) { +func TestQwen3HybridsAreInTheCatalogueNowThatOffIsExpressible(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3-32b", "qwen3-235b-a22b", "qwen3-vl-plus"} { + for _, model := range []string{"qwen3-32b", "qwen3-235b-a22b"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, want true", model) + } + } + for _, model := range []string{"qwen3-vl-plus", "qwen3-coder-plus"} { if IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = true, want false", model) } diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index c901f60a0..079c520dc 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -32,6 +32,8 @@ const ( OffZeroBudget // OffEffortNone → OpenAI reasoning_effort:"none". OffEffortNone + // OffDisableDashScope → DashScope enable_thinking:false. + OffDisableDashScope // OffUnsupported: a known mandatory-thinking model that cannot be disabled // (adaptive-only Claude, OpenAI o-series). The adapter returns a typed error. OffUnsupported @@ -88,6 +90,9 @@ func ResolveOff(model string, p Provider) OffWire { if offByOmission(model) { return OffOmit } + if QwenThinkingRequiresStream(model) { + return OffDisableDashScope + } // The disable token rides on the effort field, so a door that refuses that // field cannot express "off" at all. if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { diff --git a/llms/reasoning/qwen_off_test.go b/llms/reasoning/qwen_off_test.go new file mode 100644 index 000000000..d34d79011 --- /dev/null +++ b/llms/reasoning/qwen_off_test.go @@ -0,0 +1,39 @@ +package reasoning + +import "testing" + +func TestQwenHybridsSpellOffWithTheDashScopeFlag(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "qwen3-8b", "qwen3-32b", "qwen3-30b-a3b", "qwen3-235b-a22b", + "dashscope/qwen3-8b", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffDisableDashScope { + t.Errorf("ResolveOff(%q, openai) = %v, want OffDisableDashScope", model, got) + } + } +} + +func TestQwenHybridsAreReasoningModels(t *testing.T) { + t.Parallel() + + for _, model := range []string{"qwen3-8b", "qwen3-235b-a22b", "dashscope/qwen3-30b-a3b"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, want true", model) + } + } + for _, model := range []string{"qwen3-coder-plus", "qwen3-vl-plus", "qwen3-max"} { + if IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = true, want false", model) + } + } +} + +func TestBedrockQwenKeepsItsOwnAnswer(t *testing.T) { + t.Parallel() + + if got := ResolveOff("qwen.qwen3-32b-v1:0", ProviderBedrock); got != OffOmit { + t.Errorf("the bedrock spelling must keep OffOmit, got %v", got) + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 3b70fa79c..45ff64d58 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -277,6 +277,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // an explicit "thinking" marker or the QwQ line count as always-on reasoning. if (strings.HasPrefix(modelLower, "qwen") && ThinkingMarkedInName(modelLower)) || strings.Contains(modelLower, "qwq-") || + QwenThinkingRequiresStream(modelLower) || qwenReasonsUnasked(modelLower) { return true } diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 54f04826c..25e312d87 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -785,16 +785,14 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"gpt-5.4-mini", true}, {"gpt-5.6-luna", true}, {"openai/gpt-5-pro", true}, - // Bare Qwen3.x models are NOT forced-reasoning: thinking is user-toggleable - // and sampling is configurable, so temperature must not be pinned for them. - {"qwen3-14b", false}, - {"qwen3-235b-a22b", false}, + {"qwen3-14b", true}, + {"qwen3-235b-a22b", true}, {"qwen3.5-9b", true}, {"qwen3.6-flash", true}, {"qwen3.7-max", true}, {"qwen3.8-flash", true}, {"qwen3.8-max", true}, - {"qwen/qwen3-32b", false}, + {"qwen/qwen3-32b", true}, {"kimi-k3", true}, {"moonshotai/kimi-k3", true}, {"moonshotai/kimi-k2.5", true}, From 73120c78f5912510b77302cfd0eb7b0b5c1fd673 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 08:44:04 +0300 Subject: [PATCH 264/618] feat(reasoning): let DashScope commercial hybrids reason on request qwen-plus, qwen-flash and qwen3-max answer without any reasoning until enable_thinking:true asks for it, and the door had no way to ask. The catalogue called them non-reasoning, so WithReasoning was dropped on the floor and the hint advertised nothing. They now classify as opt-in reasoners, the door sends the flag when the caller turns reasoning on, and "off" stays an omission because that is already their resting state. Measured through the door with a unique prompt per call and the gateway cache bypassed: qwen-plus 0 to 1444 characters of reasoning, qwen3-max 0 to 781, both back to 0 when disabled. qwen-turbo is documented as the same family but is not served on the gateway, so it is left out. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 6 ++++ llms/openai/qwen_stream_only_test.go | 32 +++++++++++++++++++ llms/reasoning/catalogue_gaps_test.go | 11 ++++++- llms/reasoning/off.go | 3 ++ llms/reasoning/qwen_capability.go | 16 ++++++++-- llms/reasoning/qwen_off_test.go | 2 +- llms/reasoning/qwen_optin_test.go | 45 +++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 3 +- llms/reasoning/reasoning_test.go | 2 +- 9 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 llms/reasoning/qwen_optin_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 920969cca..53282464c 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -294,6 +294,12 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) } } + if model := o.effectiveModel(opts); reasoning.QwenThinkingEnabledByFlag(model) && + opts.Reasoning.ResolveMode() == llms.ReasoningOn { + thinkingOn := true + req.EnableThinking = &thinkingOn + } + if isLegacyMaxTokensField(&opts) || reasoning.UsesLegacyMaxTokens(o.effectiveModel(opts)) { req.MaxTokens = opts.MaxTokens } else { diff --git a/llms/openai/qwen_stream_only_test.go b/llms/openai/qwen_stream_only_test.go index 052a6ad2d..5b4d31811 100644 --- a/llms/openai/qwen_stream_only_test.go +++ b/llms/openai/qwen_stream_only_test.go @@ -120,3 +120,35 @@ func TestQwenHybridKeepsTheCallerSampling(t *testing.T) { t.Fatalf("the caller's top_p must survive, got %v", got) } } + +func TestQwenCommercialHybridTurnsThinkingOnWhenAsked(t *testing.T) { + t.Parallel() + + body, err := captureQwenRequest(t, "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningHigh, 0)) + if err != nil { + t.Fatalf("generate: %v", err) + } + if got, ok := body["enable_thinking"]; !ok || got != true { + t.Fatalf("asking for reasoning must turn the vendor flag on, got %v (present=%v)", got, ok) + } +} + +func TestQwenCommercialHybridStaysQuietOtherwise(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + opts []llms.CallOption + }{ + {"bare", nil}, + {"disabled", []llms.CallOption{llms.WithReasoningDisabled()}}, + } { + body, err := captureQwenRequest(t, "dashscope/qwen-plus", tc.opts...) + if err != nil { + t.Fatalf("%s: generate: %v", tc.name, err) + } + if got, ok := body["enable_thinking"]; ok { + t.Errorf("%s: the flag must stay off the wire, got %v", tc.name, got) + } + } +} diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index a71687b55..0fdb84b9d 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -113,7 +113,16 @@ func TestMeasuredModelsSplitByWhenTheyReason(t *testing.T) { t.Error(`ThinkingOptIn("solar-pro4") = false, but a bare call returns no reasoning until an effort asks`) } - for _, model := range []string{"gpt-mini-latest", "qwen3-max", "qwen3-coder-plus"} { + for _, model := range []string{"qwen-plus", "qwen-flash", "qwen3-max"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, want true", model) + } + if !ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = false, but a bare call returns no reasoning until the vendor flag asks", model) + } + } + + for _, model := range []string{"gpt-mini-latest", "qwen3-coder-plus"} { if IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = true, but neither a bare call nor an effort returns reasoning", model) } diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 079c520dc..b14ab378d 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -127,6 +127,9 @@ func openAIMandatoryReasoning(model string) bool { } func offByOmission(model string) bool { + if QwenThinkingEnabledByFlag(model) { + return true + } for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "magistral") { return true diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 258c68c57..c8ac16553 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -11,11 +11,15 @@ var qwenParameterCountName = regexp.MustCompile(`^qwen3-\d+(\.\d+)?b(-a\d+(\.\d+ // QwenThinkingRequiresStream reports whether DashScope serves the model's // thinking only on a streaming call. func QwenThinkingRequiresStream(model string) bool { + return qwenParameterCountName.MatchString(qwenVendorSpelling(model)) +} + +func qwenVendorSpelling(model string) string { m := strings.TrimPrefix(strings.ToLower(model), "dashscope/") if strings.Contains(m, "/") { - return false + return "" } - return qwenParameterCountName.MatchString(m) + return m } // ErrThinkingRequiresStream reports thinking asked of a stream-only model @@ -25,3 +29,11 @@ type ErrThinkingRequiresStream struct{ Model string } func (e *ErrThinkingRequiresStream) Error() string { return fmt.Sprintf("reasoning on model %q is available only on a streaming call", e.Model) } + +var qwenFlagThinkers = map[string]bool{"qwen-plus": true, "qwen-flash": true, "qwen3-max": true} + +// QwenThinkingEnabledByFlag reports whether DashScope leaves the model's +// thinking off until enable_thinking:true asks for it. +func QwenThinkingEnabledByFlag(model string) bool { + return qwenFlagThinkers[qwenVendorSpelling(model)] +} diff --git a/llms/reasoning/qwen_off_test.go b/llms/reasoning/qwen_off_test.go index d34d79011..bb619197e 100644 --- a/llms/reasoning/qwen_off_test.go +++ b/llms/reasoning/qwen_off_test.go @@ -23,7 +23,7 @@ func TestQwenHybridsAreReasoningModels(t *testing.T) { t.Errorf("IsReasoningModel(%q) = false, want true", model) } } - for _, model := range []string{"qwen3-coder-plus", "qwen3-vl-plus", "qwen3-max"} { + for _, model := range []string{"qwen3-coder-plus", "qwen3-vl-plus"} { if IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = true, want false", model) } diff --git a/llms/reasoning/qwen_optin_test.go b/llms/reasoning/qwen_optin_test.go new file mode 100644 index 000000000..0e28ce81c --- /dev/null +++ b/llms/reasoning/qwen_optin_test.go @@ -0,0 +1,45 @@ +package reasoning + +import "testing" + +func TestQwenCommercialHybridsThinkOnlyWhenAsked(t *testing.T) { + t.Parallel() + + cases := []struct { + model string + want bool + }{ + {"qwen-plus", true}, + {"qwen-flash", true}, + {"qwen3-max", true}, + {"dashscope/qwen3-max", true}, + {"DashScope/Qwen-Plus", true}, + {"qwen3-8b", false}, + {"qwen3.7-plus", false}, + {"qwen3-coder-plus", false}, + {"qwen3-vl-plus", false}, + {"openrouter/qwen/qwen-plus", false}, + {"qwen-plus-latest", false}, + } + for _, tc := range cases { + if got := QwenThinkingEnabledByFlag(tc.model); got != tc.want { + t.Errorf("QwenThinkingEnabledByFlag(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + +func TestQwenCommercialHybridsAreOptInReasoners(t *testing.T) { + t.Parallel() + + for _, model := range []string{"qwen-plus", "qwen-flash", "qwen3-max"} { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, want true", model) + } + if !ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = false, want true", model) + } + if got := ResolveOff(model, ProviderOpenAI); got != OffOmit { + t.Errorf("ResolveOff(%q) = %v, want OffOmit — they do not think unless asked", model, got) + } + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 45ff64d58..a8a5a498f 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -278,6 +278,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat if (strings.HasPrefix(modelLower, "qwen") && ThinkingMarkedInName(modelLower)) || strings.Contains(modelLower, "qwq-") || QwenThinkingRequiresStream(modelLower) || + QwenThinkingEnabledByFlag(modelLower) || qwenReasonsUnasked(modelLower) { return true } @@ -362,7 +363,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // ThinkingOptIn reports whether the model reasons only when a request asks it to. func ThinkingOptIn(model string) bool { - if OpenAIThinkingOptIn(model) { + if OpenAIThinkingOptIn(model) || QwenThinkingEnabledByFlag(model) { return true } for _, form := range modelSpellings(model) { diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 25e312d87..ca838fe96 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -827,7 +827,7 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"glm-latest", true}, {"kimi-latest", true}, {"gpt-mini-latest", false}, - {"qwen3-max", false}, + {"qwen3-max", true}, {"trinity-large-thinking", true}, // Non-reasoning models From d8635c34b81950fab0739efa0882cb5a0d7f8196 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 13:10:40 +0300 Subject: [PATCH 265/618] fix(reasoning): stop treating pro variants as opt-in reasoners OpenAIThinkingOptIn matched gpt-5.2-pro and gpt-5.4-pro on their generation prefix, so the openai door kept caller sampling for models that reason on a bare call. Measured through the gateway: a bare call to gpt-5.2-pro returns 40 reasoning tokens and gpt-5.4-pro returns 97, while gpt-5.2 without the pro suffix returns none. Sending temperature to either pro model is refused; the same temperature on gpt-5.2 passes. The capability table already disagreed with the classification: every pro variant carries CanDisable=false, and a model that cannot be turned off does not wait to be asked. A test now pins that invariant across the gpt-5 family so the two tables cannot drift apart again. PAGI-133 Co-Authored-By: Claude Opus 5 --- llms/reasoning/openai_capability.go | 3 ++ llms/reasoning/openai_optin_test.go | 72 +++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 llms/reasoning/openai_optin_test.go diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 1292e7335..8f5f7f5b9 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -116,6 +116,9 @@ func openAIXHighCeiling(m string) bool { // asks them to. func OpenAIThinkingOptIn(model string) bool { for _, form := range modelSpellings(model) { + if openAIProVariant(form) { + continue + } for _, generation := range []string{"gpt-5.1", "gpt-5.2", "gpt-5.4"} { if hasGeneration(form, generation) { return true diff --git a/llms/reasoning/openai_optin_test.go b/llms/reasoning/openai_optin_test.go new file mode 100644 index 000000000..e8eedcc10 --- /dev/null +++ b/llms/reasoning/openai_optin_test.go @@ -0,0 +1,72 @@ +package reasoning + +import "testing" + +func TestOpenAIProVariantsReasonWithoutBeingAsked(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gpt-5-pro", + "gpt-5.2-pro", + "gpt-5.4-pro", + "gpt-5.5-pro", + "openai/gpt-5.2-pro", + "gpt-5.2-pro-2025-12-11", + } { + if OpenAIThinkingOptIn(model) { + t.Errorf("OpenAIThinkingOptIn(%q) = true, but a bare call already returns reasoning", model) + } + } +} + +func TestOpenAIOptInGenerationsWaitToBeAsked(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "openai/gpt-5.4", + "gpt-5.4-mini", + "gpt-5.2-2025-12-11", + } { + if !OpenAIThinkingOptIn(model) { + t.Errorf("OpenAIThinkingOptIn(%q) = false, but a bare call returns no reasoning", model) + } + } +} + +func TestOpenAIGenerationsThatAlwaysReasonAreNotOptIn(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.5", + "gpt-5.6", + "gpt-5.6-terra", + } { + if OpenAIThinkingOptIn(model) { + t.Errorf("OpenAIThinkingOptIn(%q) = true, but a bare call already returns reasoning", model) + } + } +} + +func TestOptInModelsCanAlsoDisableReasoning(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-5-pro", + "gpt-5.1", "gpt-5.2", "gpt-5.2-pro", "gpt-5.4", "gpt-5.4-pro", + "gpt-5.5", "gpt-5.5-pro", "gpt-5.6", "gpt-5.6-terra", "gpt-5.6-luna", + } { + if !OpenAIThinkingOptIn(model) { + continue + } + if caps := OpenAIReasoningCapsFor(model); !caps.CanDisable { + t.Errorf("OpenAIThinkingOptIn(%q) = true while CanDisable = false: a model that cannot be "+ + "turned off does not wait to be asked", model) + } + } +} From 4fe4c0e2930c37065a89683dbb315a80311b9c68 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 15:47:36 +0300 Subject: [PATCH 266/618] docs(reasoning): attach the effort-wire doc to its own function The doc block describing AcceptsEffortWire sat above RejectsPenalties, so godoc showed the effort_wire contract as the penalty predicate's own. Co-Authored-By: Claude Opus 5 --- llms/reasoning/effort_wire.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index bbef4acc3..5de593bf0 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -2,9 +2,6 @@ package reasoning import "strings" -// AcceptsEffortWire reports whether the model's OpenAI-compatible door takes the -// reasoning_effort field. A door that refuses it fails the whole request, so such -// a model also has no way to spell "off": the disable token rides on this field. // RejectsPenalties reports whether frequency_penalty and presence_penalty // must stay off the wire. func RejectsPenalties(model string) bool { @@ -30,6 +27,9 @@ func UsesLegacyMaxTokens(model string) bool { return false } +// AcceptsEffortWire reports whether the model's OpenAI-compatible door takes the +// reasoning_effort field. A door that refuses it fails the whole request, so such +// a model also has no way to spell "off": the disable token rides on this field. func AcceptsEffortWire(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { From 2e7d4195383255a54684191e766d25410f0e0586 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 15:47:52 +0300 Subject: [PATCH 267/618] fix(openai): keep min_p off the wire for every Claude model WithMinP(0.05) on claude-sonnet-4-5 failed the whole call: Anthropic's Messages schema is closed, so an unknown field returns 400 "min_p: Extra inputs are not permitted" rather than being ignored, and the OpenAI transports translate into that schema. The field was only dropped for the narrow class of models that reject all sampling, so every other Claude carried it to the vendor. PAGI-192 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 5 ++++- llms/openai/sampling_matrix_test.go | 35 +++++++++++++++++++++++++++++ llms/reasoning/effort_wire.go | 5 +++++ llms/reasoning/effort_wire_test.go | 24 ++++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 53282464c..215469f15 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -428,8 +428,11 @@ func (o *LLM) writeDisableEffort(req *openaiclient.ChatRequest) { func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string) { model := o.effectiveModel(opts) + if reasoning.RejectsMinP(model) { + req.MinP = nil + } if reasoning.ClaudeRejectsSampling(model) { - req.Temperature, req.TopP, req.TopK, req.MinP = nil, nil, nil, nil + req.Temperature, req.TopP, req.TopK = nil, nil, nil return } diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 0d27465b3..349f090b8 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -228,6 +228,41 @@ func TestAModelThatRejectsSamplingGetsNoSamplingAtAll(t *testing.T) { } } +func TestMinPStaysOffTheWireForClaude(t *testing.T) { + t.Parallel() + + minP := llms.WithMinP(0.05) + high := llms.WithReasoning(llms.ReasoningHigh, 0) + + runSamplingCases(t, []samplingCase{{ + name: "a Claude model outside the rejects-sampling class still loses min_p", + model: "claude-sonnet-4-5", + opts: []llms.CallOption{minP}, + absent: []string{`"min_p"`}, + }, { + name: "thinking does not put min_p back on the wire", + model: "claude-sonnet-4-5", + opts: []llms.CallOption{minP, high}, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"min_p"`}, + }, { + name: "the bedrock spelling of a Claude model loses it too", + model: "us.anthropic.claude-sonnet-4-5-v1:0", + opts: []llms.CallOption{minP}, + absent: []string{`"min_p"`}, + }, { + name: "a thinking model of another vendor keeps min_p", + model: "gpt-5.5", + opts: []llms.CallOption{minP, high}, + present: []string{`"min_p":0.05`}, + }, { + name: "a plain model keeps min_p", + model: "gpt-4o", + opts: []llms.CallOption{minP}, + present: []string{`"min_p":0.05`}, + }}) +} + func TestOptInThinkingKeepsSamplingWhateverIsAsked(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 5de593bf0..980ce5a36 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -13,6 +13,11 @@ func RejectsPenalties(model string) bool { return false } +// RejectsMinP reports whether min_p must stay off the wire. +func RejectsMinP(model string) bool { + return isClaudeModel(model) +} + // UsesLegacyMaxTokens reports whether the output limit must travel as // max_tokens rather than max_completion_tokens. func UsesLegacyMaxTokens(model string) bool { diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 19365883a..eabeecbb1 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -31,6 +31,30 @@ func TestAcceptsEffortWire(t *testing.T) { } } +func TestRejectsMinP(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + reject bool + }{ + {"claude-sonnet-4-5", true}, + {"claude-sonnet-4-5-20250929", true}, + {"anthropic/claude-sonnet-4.5", true}, + {"us.anthropic.claude-opus-4-6-v1:0", true}, + {"claude-opus-4-7", true}, + {"claude-haiku-4-5", true}, + {"gpt-5.5", false}, + {"grok-4.6", false}, + {"qwen3-32b", false}, + {"deepseek-v3.2", false}, + } { + if got := RejectsMinP(tc.model); got != tc.reject { + t.Errorf("RejectsMinP(%q) = %v, want %v", tc.model, got, tc.reject) + } + } +} + func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { t.Parallel() From 687cf670ae6dee08c0f65b12d3845452dd777210 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 17:26:19 +0300 Subject: [PATCH 268/618] refactor(llms): name the budget an effort stands for MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The effort-to-budget mapping was inlined in GetTokens, so a caller that needs the budget behind an effort — rather than the one the answer limit caps — had no way to ask for it. Adds ClaudeSpendsThinkingBudget next to it: only the budget-mode Claude tiers pay for thinking out of a budget the answer limit has to exceed. Co-Authored-By: Claude Opus 5 --- llms/options.go | 30 +++++++++++++++++++++-------- llms/reasoning/claude_capability.go | 12 ++++++++++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/llms/options.go b/llms/options.go index c32617b91..932efa540 100644 --- a/llms/options.go +++ b/llms/options.go @@ -208,18 +208,13 @@ func (r *ReasoningConfig) GetTokens(maxTokens int) int { tokens = r.Tokens } else { switch r.Effort { - case ReasoningLow: - tokens = max(maxTokens/4, 1024) - case ReasoningMedium: - tokens = max(maxTokens/3, 2048) - case ReasoningHigh, ReasoningXHigh, ReasoningMax: - // no distinct token budget for xhigh/max; map them to the high budget. - tokens = max(maxTokens/2, 4096) + case ReasoningLow, ReasoningMedium, ReasoningHigh, ReasoningXHigh, ReasoningMax: + tokens = ReasoningEffortBudget(r.Effort, maxTokens) case ReasoningNone: if r.Adaptive || r.Mode == ReasoningOn { // Adaptive, or an explicit ReasoningOn with no effort, defaults to the // high budget so budget-mapping providers keep reasoning enabled. - tokens = max(maxTokens/2, 4096) + tokens = ReasoningEffortBudget(ReasoningHigh, maxTokens) } else { return 0 // disabled } @@ -231,6 +226,25 @@ func (r *ReasoningConfig) GetTokens(maxTokens int) int { return min(min(tokens, maxTokens*2/3), MaxReasoningTokens) } +// ReasoningEffortBudget reports the thinking budget an effort stands for, before +// any answer limit caps it. +func ReasoningEffortBudget(effort ReasoningEffort, maxTokens int) int { + if maxTokens <= 0 { + maxTokens = DefaultMaxTokens + } + switch effort { + case ReasoningLow: + return max(maxTokens/4, 1024) + case ReasoningMedium: + return max(maxTokens/3, 2048) + case ReasoningHigh, ReasoningXHigh, ReasoningMax: + // no distinct token budget for xhigh/max; map them to the high budget. + return max(maxTokens/2, 4096) + default: + return 0 + } +} + // CallOptions is a set of options for calling models. Not all models support // all options. type CallOptions struct { diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index c54ba6433..8db950818 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -160,6 +160,18 @@ func ClaudeClampEffort(model, effort string) string { // ClaudeMinThinkingBudget is the smallest budget_tokens Anthropic accepts. const ClaudeMinThinkingBudget = 1024 +// ClaudeSpendsThinkingBudget reports whether the model pays for thinking out of a +// budget that the answer limit has to exceed. +func ClaudeSpendsThinkingBudget(model string) bool { + switch ClaudeReasoningKindFor(model) { + case ClaudeReasoningBudgetOnly, ClaudeReasoningAdaptiveAndBudget: + return true + case ClaudeReasoningUnknown, ClaudeReasoningAdaptiveOnly: + return false + } + return false +} + // ClaudeClampBudget raises a budget below the vendor floor up to it, and leaves // every other model and a zero budget untouched. func ClaudeClampBudget(model string, budget int) int { From 6b2107f49d2a165709957e14f4523f17c385e210 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 17:27:01 +0300 Subject: [PATCH 269/618] fix(openai): clear the budget the thinking will spend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WithReasoning + a tight WithMaxTokens on a Claude model failed with the vendor's "max_tokens must be greater than thinking.budget_tokens" while the same options succeeded on the anthropic door. The answer limit was raised only when the request carried an explicit budget field, which is off by default; on every other path an effort went out alone and the receiver expanded it into a budget of its own that the caller's limit did not clear. The limit now clears the budget the effort stands for, and only for the Claude tiers that pay for thinking out of one — a model of another vendor keeps the limit it was given. Separately, the raise wrote through the caller's option pointer, so one call permanently raised the limit of every later call that reused the same llms.CallOption value. PAGI-157 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 24 +++++-- llms/openai/reasoning_wire_test.go | 103 +++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 6 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 215469f15..fd12fc1cd 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -371,32 +371,44 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone + budget := 0 + if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { + budget = reasoning.ClaudeClampBudget(model, reasoningTokens) + } + effortBudget := 0 + if reasoning.ClaudeSpendsThinkingBudget(model) { + effortBudget = llms.ReasoningEffortBudget(reasoningEffort, opts.GetMaxTokens()) + } if !o.client.ModernReasoningFormat { if sendsEffort { req.ReasoningEffort = &reasoningEffort + o.raiseAnswerLimitForBudget(req, effortBudget) } return wireEffortOf(sendsEffort, reasoningEffort), nil } // using modern reasoning format - if o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { - budget := reasoning.ClaudeClampBudget(model, reasoningTokens) + switch { + case o.client.UseReasoningMaxTokens && budget > 0: req.Reasoning = &openaiclient.ReasoningOptions{MaxTokens: budget} o.raiseAnswerLimitForBudget(req, budget) - } else if sendsEffort { + case sendsEffort: req.Reasoning = &openaiclient.ReasoningOptions{ Effort: reasoningEffort, } + o.raiseAnswerLimitForBudget(req, effortBudget) } return wireEffortOf(sendsEffort, reasoningEffort), nil } func (o *LLM) raiseAnswerLimitForBudget(req *openaiclient.ChatRequest, budget int) { - for _, limit := range []*int{req.MaxCompletionTokens, req.MaxTokens} { - if limit != nil && *limit > 0 { - *limit = reasoning.ClaudeMaxTokensForBudget(budget, *limit) + for _, limit := range []**int{&req.MaxCompletionTokens, &req.MaxTokens} { + if *limit == nil || **limit <= 0 { + continue } + raised := reasoning.ClaudeMaxTokensForBudget(budget, **limit) + *limit = &raised } } diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 9916a165e..b48c12ea9 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -198,6 +198,109 @@ func TestABudgetLargerThanTheAnswerLimitRaisesTheLimit(t *testing.T) { } } +func captureWireWithClient(t *testing.T, model string, clientOpts []Option, callOpts ...llms.CallOption) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + opts := append([]Option{WithBaseURL(srv.URL), WithToken("test"), WithModel(model)}, clientOpts...) + llm, err := New(opts...) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, callOpts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestAnswerLimitClearsTheBudgetTheThinkingWillSpend(t *testing.T) { + t.Parallel() + + const claude = "anthropic/claude-sonnet-4-5" + modern := []Option{WithModernReasoningFormat()} + budgetField := []Option{WithModernReasoningFormat(), WithUsingReasoningMaxTokens()} + + for _, tc := range []struct { + name string + client []Option + call []llms.CallOption + want string + }{ + {"legacy format, effort carries the thinking", nil, + []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)}, `"max_completion_tokens":8192`}, + {"modern format, effort carries the thinking", modern, + []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)}, `"max_completion_tokens":8192`}, + {"an effort with no budget of its own", nil, + []llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithMaxTokens(512)}, `"max_completion_tokens":8192`}, + {"a lower effort stands for a smaller budget", nil, + []llms.CallOption{llms.WithReasoning(llms.ReasoningLow, 0), llms.WithMaxTokens(512)}, `"max_completion_tokens":2048`}, + {"modern format, budget field carries the thinking", budgetField, + []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)}, `"max_completion_tokens":2048`}, + } { + t.Run(tc.name, func(t *testing.T) { + body := captureWireWithClient(t, claude, tc.client, tc.call...) + if strings.Contains(body, `"max_completion_tokens":512`) { + t.Errorf("a 512-token answer limit leaves no room once the thinking is paid for: %s", body) + } + if !strings.Contains(body, tc.want) { + t.Errorf("want %s on the wire, got body: %s", tc.want, body) + } + }) + } +} + +func TestAnswerLimitStaysWhereNothingSpendsABudget(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + call []llms.CallOption + }{ + {"a thinking model of another vendor", "gpt-5", + []llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithMaxTokens(512)}}, + {"no reasoning asked at all", "anthropic/claude-sonnet-4-5", + []llms.CallOption{llms.WithMaxTokens(512)}}, + } { + t.Run(tc.name, func(t *testing.T) { + body := captureWireWithClient(t, tc.model, nil, tc.call...) + if !strings.Contains(body, `"max_completion_tokens":512`) { + t.Errorf("nothing spends a budget here, so the limit must reach the wire verbatim: %s", body) + } + }) + } +} + +func TestRaisingTheLimitDoesNotEditTheCallersOption(t *testing.T) { + t.Parallel() + + reused := []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)} + client := []Option{WithModernReasoningFormat(), WithUsingReasoningMaxTokens()} + + first := captureWireWithClient(t, "anthropic/claude-sonnet-4-5", client, reused...) + second := captureWireWithClient(t, "anthropic/claude-sonnet-4-5", client, reused...) + + if first != second { + t.Errorf("one call must not edit the option the next one reuses:\nfirst: %s\nsecond: %s", first, second) + } + if !strings.Contains(second, `"reasoning":{"max_tokens":1024}`) { + t.Errorf("want the vendor floor budget on the reused call, got: %s", second) + } +} + func TestVerbosityReachesTheWireOnlyWhenAsked(t *testing.T) { t.Parallel() From 3c93a54e863145f60b4a477c891eaece183b76d5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 1 Sep 2026 20:35:12 +0300 Subject: [PATCH 270/618] fix(anthropic): keep the caller's answer limit under interleaved thinking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door raises max_tokens above the thinking budget because the vendor refuses a limit that does not exceed it. That refusal has an exception: with the interleaved-thinking beta the budget spans every thinking block of one assistant turn and may exceed the limit. The door adds that beta itself whenever budget thinking runs with tools, so it was creating the exception and then overriding the caller's limit anyway — a request that asked for 512 went out with 2048. The raise now happens only when the beta is absent from the wire, which also covers a caller who asked for interleaving through WithInterleavedThinking without passing tools. Bedrock is untouched: neither of its doors sends the beta at all. PAGI-194 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropic_thinking_test.go | 33 +++++++++++++++++++++++ llms/anthropic/anthropicllm.go | 12 ++++++--- llms/anthropic/options.go | 4 +-- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/llms/anthropic/anthropic_thinking_test.go b/llms/anthropic/anthropic_thinking_test.go index 214476fed..398abbd2d 100644 --- a/llms/anthropic/anthropic_thinking_test.go +++ b/llms/anthropic/anthropic_thinking_test.go @@ -920,6 +920,39 @@ func TestAnthropic_BudgetThinkingRequest(t *testing.T) { assert.EqualValues(t, 4096, payload["max_tokens"]) // max(budget*2, maxTokens) } +func TestAnthropic_AnswerLimitSurvivesInterleavedThinking(t *testing.T) { + t.Parallel() + + tool := llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "get_weather", Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }} + budgeted := func(extra ...llms.CallOption) []llms.CallOption { + return append([]llms.CallOption{llms.WithReasoning("", 4096), llms.WithMaxTokens(512)}, extra...) + } + + for _, tc := range []struct { + name string + opts []llms.CallOption + wantBeta bool + want float64 + }{ + {"tools put the beta on the wire", budgeted(llms.WithTools([]llms.Tool{tool})), true, 512}, + {"the caller asks for interleaving without tools", budgeted(anthropic.WithInterleavedThinking()), true, 512}, + {"no interleaving, the vendor checks the pair", budgeted(), false, 2048}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + payload, header := captureMessagesRequestModel(t, "claude-sonnet-4-5", tc.opts...) + gotBeta := strings.Contains(header.Get("anthropic-beta"), "interleaved-thinking-2025-05-14") + require.Equal(t, tc.wantBeta, gotBeta, "beta header: %q", header.Get("anthropic-beta")) + require.Equal(t, float64(1024), payload["thinking"].(map[string]any)["budget_tokens"]) + require.Equal(t, tc.want, payload["max_tokens"]) + }) + } +} + func TestAnthropic_Haiku45MutuallyExclusiveSampling(t *testing.T) { t.Parallel() diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index b0a7cebb2..e54d9db14 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -8,6 +8,7 @@ import ( "fmt" "os" "regexp" + "slices" "strings" "time" @@ -273,7 +274,9 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } topP = nil topK = nil - maxTokens = reasoning.ClaudeMaxTokensForBudget(thinking.Budget, maxTokens) + if !slices.Contains(betaHeaders, anthropicInterleavedThinkingBeta) { + maxTokens = reasoning.ClaudeMaxTokensForBudget(thinking.Budget, maxTokens) + } case reasoning.ClaudeRejectsSampling(model): // Adaptive-only models reject sampling params even without thinking. temperature = nil @@ -895,7 +898,10 @@ func handleToolMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, er return anthropicclient.ChatMessage{}, fmt.Errorf("anthropic: %w for tool message", ErrInvalidContentType) } -const anthropicFastModeBeta = "fast-mode-2026-02-01" +const ( + anthropicFastModeBeta = "fast-mode-2026-02-01" + anthropicInterleavedThinkingBeta = "interleaved-thinking-2025-05-14" +) // extractBetaHeaders extracts beta headers from call options. thinking is the // mechanism actually resolved for this request (nil when no thinking), so the @@ -918,7 +924,7 @@ func extractBetaHeaders(opts *llms.CallOptions, thinking *anthropicclient.Thinki // Budget thinking + tools needs the interleaved-thinking beta; adaptive // thinking interleaves natively and needs no header. if thinking != nil && thinking.Type == "enabled" && len(opts.Tools) > 0 { - betaHeaders = appendIfMissing(betaHeaders, "interleaved-thinking-2025-05-14") + betaHeaders = appendIfMissing(betaHeaders, anthropicInterleavedThinkingBeta) } if opts.InferenceSpeed != nil { diff --git a/llms/anthropic/options.go b/llms/anthropic/options.go index fba09c256..6ec562b8a 100644 --- a/llms/anthropic/options.go +++ b/llms/anthropic/options.go @@ -65,9 +65,9 @@ func WithInterleavedThinking() llms.CallOption { } // Add to existing headers if present if existing, ok := opts.Metadata["anthropic:beta_headers"].([]string); ok { - opts.Metadata["anthropic:beta_headers"] = append(existing, "interleaved-thinking-2025-05-14") + opts.Metadata["anthropic:beta_headers"] = append(existing, anthropicInterleavedThinkingBeta) } else { - opts.Metadata["anthropic:beta_headers"] = []string{"interleaved-thinking-2025-05-14"} + opts.Metadata["anthropic:beta_headers"] = []string{anthropicInterleavedThinkingBeta} } } } From 7fc4a005de4d28aa4d3bd2859770bd208d8feead Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 08:32:19 +0300 Subject: [PATCH 271/618] test(anthropic): pin the usage a refusal must not drop A refusal returns (resp, err), so the cache-creation breakdown and the service tier ride in the response rather than in the error. Nothing asserted that, and returning nil beside the refusal would have silently taken all three away from the caller. Co-Authored-By: Claude Opus 5 --- llms/anthropic/refusal_test.go | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/llms/anthropic/refusal_test.go b/llms/anthropic/refusal_test.go index babad5604..e1d66ff02 100644 --- a/llms/anthropic/refusal_test.go +++ b/llms/anthropic/refusal_test.go @@ -91,3 +91,39 @@ data: {"type":"message_stop"} require.NotEmpty(t, resp.Choices) assert.Equal(t, "refusal", resp.Choices[0].StopReason) } + +func TestARefusalKeepsTheCacheBreakdownAndTheServiceTier(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_x","type":"message","role":"assistant","model":"claude-opus-4-6", + "content":[{"type":"text","text":"I can't help with that."}],"stop_reason":"refusal", + "usage":{"input_tokens":11,"output_tokens":7,"cache_read_input_tokens":3, + "cache_creation_input_tokens":9, + "cache_creation":{"ephemeral_5m_input_tokens":4,"ephemeral_1h_input_tokens":5}, + "service_tier":"priority","speed":"fast"}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + + var refusal *llms.ErrModelRefusal + require.ErrorAs(t, err, &refusal) + assert.Equal(t, 9, refusal.CacheCreationInputTokens) + assert.Equal(t, 3, refusal.CacheReadInputTokens) + + require.NotNil(t, resp) + require.NotEmpty(t, resp.Choices) + info := resp.Choices[0].GenerationInfo + assert.Equal(t, 4, info["CacheCreationEphemeral5mInputTokens"]) + assert.Equal(t, 5, info["CacheCreationEphemeral1hInputTokens"]) + assert.Equal(t, "priority", info["ServiceTier"]) + assert.Equal(t, "fast", info["InferenceSpeed"]) +} From 9b0c3641763e068b7c09611e92c3e8fdd9f23208 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 13:49:50 +0300 Subject: [PATCH 272/618] test(reasoning): carry a models.dev snapshot and report drift against it The catalogue answers the same question our tables do, for 402 models across twelve vendors, so a diff against it finds entries no vendor sweep happened to cover. It is a community source and has been measured wrong, so the snapshot is committed and consulted by a test only: a new disagreement fails and asks for a vendor probe, and every accounted one carries its reason. The first run already names two gaps of ours and thirteen places where the catalogue is the one that is wrong. Co-Authored-By: Claude Opus 5 --- llms/reasoning/doc.go | 2 + llms/reasoning/internal/cmd/modelsdev/main.go | 100 + llms/reasoning/models_dev_drift_test.go | 109 + llms/reasoning/testdata/models_dev.json | 5548 +++++++++++++++++ 4 files changed, 5759 insertions(+) create mode 100644 llms/reasoning/internal/cmd/modelsdev/main.go create mode 100644 llms/reasoning/models_dev_drift_test.go create mode 100644 llms/reasoning/testdata/models_dev.json diff --git a/llms/reasoning/doc.go b/llms/reasoning/doc.go index 295a33367..91fcb0872 100644 --- a/llms/reasoning/doc.go +++ b/llms/reasoning/doc.go @@ -65,3 +65,5 @@ // - IsReasoningModel: Checks if a model supports reasoning // - DefaultIsReasoningModel: Provides the default reasoning model detection logic package reasoning + +//go:generate go run ./internal/cmd/modelsdev -out testdata/models_dev.json diff --git a/llms/reasoning/internal/cmd/modelsdev/main.go b/llms/reasoning/internal/cmd/modelsdev/main.go new file mode 100644 index 000000000..1d9807297 --- /dev/null +++ b/llms/reasoning/internal/cmd/modelsdev/main.go @@ -0,0 +1,100 @@ +// Command modelsdev refreshes the committed models.dev snapshot read by the +// drift test. +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "os" + "time" +) + +const catalogue = "https://models.dev/api.json" + +// Ollama is deliberately absent: the catalogue does not carry local runtimes, so +// listing it here would make every run exit 1. +var providers = []string{ + "anthropic", "openai", "xai", "google", "google-vertex", "amazon-bedrock", + "deepseek", "mistral", "moonshotai", "zhipuai", "minimax", "alibaba", +} + +type model struct { + Reasoning bool `json:"reasoning"` + ReasoningOptions []reasoningOption `json:"reasoning_options,omitempty"` + Temperature *bool `json:"temperature,omitempty"` + Limit *limit `json:"limit,omitempty"` +} + +type reasoningOption struct { + Type string `json:"type"` + Values []string `json:"values,omitempty"` + Min *int `json:"min,omitempty"` + Max *int `json:"max,omitempty"` +} + +type limit struct { + Context int `json:"context,omitempty"` + Output int `json:"output,omitempty"` +} + +func main() { + out := flag.String("out", "testdata/models_dev.json", "where to write the snapshot") + flag.Parse() + + catalog, err := fetch() + if err != nil { + fmt.Fprintln(os.Stderr, "modelsdev:", err) + os.Exit(1) + } + + snapshot := make(map[string]map[string]model, len(providers)) + kept := 0 + for _, p := range providers { + models, ok := catalog[p] + if !ok { + fmt.Fprintf(os.Stderr, "modelsdev: provider %q is gone from the catalogue\n", p) + os.Exit(1) + } + snapshot[p] = models.Models + kept += len(models.Models) + } + + body, err := json.MarshalIndent(snapshot, "", " ") + if err != nil { + fmt.Fprintln(os.Stderr, "modelsdev:", err) + os.Exit(1) + } + if err := os.WriteFile(*out, append(body, '\n'), 0o600); err != nil { + fmt.Fprintln(os.Stderr, "modelsdev:", err) + os.Exit(1) + } + fmt.Fprintf(os.Stderr, "modelsdev: %d models from %d providers -> %s\n", kept, len(providers), *out) +} + +func fetch() (map[string]struct { + Models map[string]model `json:"models"` +}, error) { + client := &http.Client{Timeout: 2 * time.Minute} + resp, err := client.Get(catalogue) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("%s: %s", catalogue, resp.Status) + } + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + var catalog map[string]struct { + Models map[string]model `json:"models"` + } + if err := json.Unmarshal(body, &catalog); err != nil { + return nil, err + } + return catalog, nil +} diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go new file mode 100644 index 000000000..0e75060f4 --- /dev/null +++ b/llms/reasoning/models_dev_drift_test.go @@ -0,0 +1,109 @@ +package reasoning + +import ( + "encoding/json" + "os" + "sort" + "testing" +) + +// The catalogue is a community source that has been measured wrong, so a +// disagreement is a hypothesis: add the entry with its reason, and change the +// tables only when a vendor probe says so. +var knownDrift = map[string]string{ + "google/gemini-2.5-flash-image": "картиночный маршрут: эффорт вызывает отказ Gemini", + "google/gemini-3-pro-image": "картиночный маршрут", + "google/gemini-3-pro-image-preview": "картиночный маршрут", + "google/gemini-3.1-flash-image": "картиночный маршрут", + "google/gemini-3.1-flash-image-preview": "картиночный маршрут", + "google/gemini-3.1-flash-lite-image": "картиночный маршрут", + "google-vertex/gemini-3-pro-image": "картиночный маршрут", + "google-vertex/gemini-3.1-flash-image": "картиночный маршрут", + "google/gemini-3.1-flash-tts-preview": "речевой маршрут: 400 Thinking level is not supported", + "google/gemini-omni-flash-preview": "не чат: 400 от вендора", + "google/deep-research-preview-04-2026": "маршрут не обслуживается", + "google/deep-research-max-preview-04-2026": "маршрут не обслуживается", + "openai/gpt-5.2-chat-latest": "чат-вариант: вендор отвечает 404", + "openai/gpt-realtime-2.1": "не чат: This is not a chat model", + "amazon-bedrock/qwen.qwen3-32b-v1:0": "думает только в стриме по просьбе, а предикат отвечает на вопрос о голом вызове", + + "alibaba/qwen3-vl-plus": "НАШ ПРОБЕЛ: стрим с enable_thinking даёт 1180 символов размышления", + "amazon-bedrock/deepseek.v3-v1:0": "НАШ ПРОБЕЛ: вендорное написание DeepSeek не нормализуется", + + "alibaba/qvq-max": "не измерено", + "alibaba/qwen-turbo": "не измерено", + "alibaba/qwen3-omni-flash": "не измерено", + "alibaba/qwen3-vl-235b-a22b": "не измерено", + "alibaba/qwen3-vl-30b-a3b": "не измерено", + "alibaba/qwen3-max": "записи расходятся между собой: контроль дал ноль, коммерческий гибрид дал 3095 символов по просьбе", + "amazon-bedrock/qwen.qwen3-coder-next": "не измерено", + "amazon-bedrock/writer.palmyra-x4-v1:0": "не измерено", + "amazon-bedrock/writer.palmyra-x5-v1:0": "не измерено", + "amazon-bedrock/nvidia.nemotron-nano-12b-v2": "не измерено", + "amazon-bedrock/nvidia.nemotron-nano-9b-v2": "не измерено", + "amazon-bedrock/openai.gpt-oss-safeguard-120b": "не измерено: кандидат в не-чатовые поверхности", + "amazon-bedrock/openai.gpt-oss-safeguard-20b": "не измерено: кандидат в не-чатовые поверхности", + "google-vertex/qwen/qwen3-235b-a22b-instruct-2507-maas": "не измерено", + "mistral/zai-glm-5-2": "не измерено: шлюз режет параметр, вывод невозможен в обе стороны", +} + +type snapshotModel struct { + Reasoning bool `json:"reasoning"` +} + +func TestModelsDevSnapshotDrift(t *testing.T) { + t.Parallel() + + body, err := os.ReadFile("testdata/models_dev.json") + if err != nil { + t.Fatalf("read snapshot: %v", err) + } + var snapshot map[string]map[string]snapshotModel + if err := json.Unmarshal(body, &snapshot); err != nil { + t.Fatalf("parse snapshot: %v", err) + } + + diverging := map[string]bool{} + models := 0 + for provider, entries := range snapshot { + for id, entry := range entries { + models++ + if entry.Reasoning != IsReasoningModel(id) { + diverging[provider+"/"+id] = true + } + } + } + if models == 0 { + t.Fatal("snapshot is empty; regenerate it with go generate ./llms/reasoning") + } + + for _, name := range sorted(diverging) { + if _, known := knownDrift[name]; !known { + t.Errorf("new drift on %s: the catalogue and our tables disagree. Measure it against the "+ + "vendor, then add it to knownDrift with the reason", name) + } + } + for _, name := range sortedKeys(knownDrift) { + if !diverging[name] { + t.Errorf("stale knownDrift entry %s: the catalogue and our tables now agree, drop the line", name) + } + } +} + +func sorted(set map[string]bool) []string { + out := make([]string, 0, len(set)) + for k := range set { + out = append(out, k) + } + sort.Strings(out) + return out +} + +func sortedKeys(m map[string]string) []string { + out := make([]string, 0, len(m)) + for k := range m { + out = append(out, k) + } + sort.Strings(out) + return out +} diff --git a/llms/reasoning/testdata/models_dev.json b/llms/reasoning/testdata/models_dev.json new file mode 100644 index 000000000..f20ef0ea6 --- /dev/null +++ b/llms/reasoning/testdata/models_dev.json @@ -0,0 +1,5548 @@ +{ + "alibaba": { + "deepseek-v4-flash-0731": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + "glm-5.2": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "qvq-max": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 32768 + } + }, + "qwen-max": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "qwen-mt-plus": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 16384, + "output": 8192 + } + }, + "qwen-mt-turbo": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 16384, + "output": 8192 + } + }, + "qwen-omni-turbo": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32768, + "output": 2048 + } + }, + "qwen-omni-turbo-realtime": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32768, + "output": 2048 + } + }, + "qwen-plus": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 32768 + } + }, + "qwen-plus-character-ja": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 8192, + "output": 512 + } + }, + "qwen-turbo": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 16384 + } + }, + "qwen-vl-max": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen-vl-ocr": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 34096, + "output": 4096 + } + }, + "qwen-vl-plus": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen2-5-14b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen2-5-32b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen2-5-72b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen2-5-7b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen2-5-omni-7b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32768, + "output": 2048 + } + }, + "qwen2-5-vl-72b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen2-5-vl-7b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen3-14b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen3-235b-a22b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 16384 + } + }, + "qwen3-32b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 16384 + } + }, + "qwen3-8b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "qwen3-asr-flash": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 53248, + "output": 4096 + } + }, + "qwen3-coder-30b-a3b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3-coder-480b-a35b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3-coder-flash": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + "qwen3-coder-plus": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "qwen3-livetranslate-flash-realtime": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 53248, + "output": 4096 + } + }, + "qwen3-max": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3-next-80b-a3b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "qwen3-next-80b-a3b-thinking": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "qwen3-omni-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 65536, + "output": 16384 + } + }, + "qwen3-omni-flash-realtime": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 65536, + "output": 16384 + } + }, + "qwen3-vl-235b-a22b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "qwen3-vl-30b-a3b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "qwen3-vl-plus": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 32768 + } + }, + "qwen3.5-122b-a10b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.5-27b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.5-35b-a3b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.5-397b-a17b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.5-plus": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + "qwen3.6-27b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.6-35b-a3b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.6-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + "qwen3.6-max-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "qwen3.6-plus": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + "qwen3.7-max": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + "qwen3.7-plus": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens" + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + "qwen3.8-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "xhigh" + ] + }, + { + "type": "budget_tokens", + "max": 262144 + } + ], + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "qwen3.8-max": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "xhigh" + ] + }, + { + "type": "budget_tokens", + "min": 0, + "max": 262144 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "qwq-plus": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + } + }, + "amazon-bedrock": { + "amazon.nova-2-lite-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "amazon.nova-lite-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 300000, + "output": 8192 + } + }, + "amazon.nova-micro-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 8192 + } + }, + "amazon.nova-pro-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 300000, + "output": 8192 + } + }, + "anthropic.claude-fable-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "anthropic.claude-fable-5-1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "anthropic.claude-haiku-4-5-20251001-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "anthropic.claude-opus-4-1-20250805-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "anthropic.claude-opus-4-5-20251101-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "anthropic.claude-opus-4-6-v1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "anthropic.claude-opus-4-7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "anthropic.claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "anthropic.claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "anthropic.claude-sonnet-4-5-20250929-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "anthropic.claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "anthropic.claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "au.anthropic.claude-haiku-4-5-20251001-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "au.anthropic.claude-opus-4-6-v1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "au.anthropic.claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "au.anthropic.claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "au.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "au.anthropic.claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "au.anthropic.claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "deepseek.r1-v1:0": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 128000, + "output": 32768 + } + }, + "deepseek.v3-v1:0": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 163840, + "output": 81920 + } + }, + "deepseek.v3.2": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 163840, + "output": 81920 + } + }, + "eu.anthropic.claude-fable-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "eu.anthropic.claude-haiku-4-5-20251001-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "eu.anthropic.claude-opus-4-5-20251101-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "eu.anthropic.claude-opus-4-6-v1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "eu.anthropic.claude-opus-4-7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "eu.anthropic.claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "eu.anthropic.claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "eu.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "eu.anthropic.claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "eu.anthropic.claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-fable-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-fable-5-1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-haiku-4-5-20251001-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "global.anthropic.claude-opus-4-5-20251101-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "global.anthropic.claude-opus-4-6-v1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-opus-4-7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "global.anthropic.claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "global.anthropic.claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "global.openai.gpt-5.6-luna": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "global.openai.gpt-5.6-sol": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "global.openai.gpt-5.6-terra": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "google.gemma-3-12b-it": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "google.gemma-3-27b-it": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 202752, + "output": 8192 + } + }, + "google.gemma-3-4b-it": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "jp.anthropic.claude-haiku-4-5-20251001-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "jp.anthropic.claude-opus-4-7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "jp.anthropic.claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "jp.anthropic.claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "jp.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "jp.anthropic.claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "jp.anthropic.claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "meta.llama3-1-70b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "meta.llama3-1-8b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "meta.llama3-3-70b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "meta.llama4-maverick-17b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1000000, + "output": 16384 + } + }, + "meta.llama4-scout-17b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 3500000, + "output": 16384 + } + }, + "minimax.minimax-m2": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204608, + "output": 128000 + } + }, + "minimax.minimax-m2.1": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "minimax.minimax-m2.5": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 196608, + "output": 98304 + } + }, + "mistral.devstral-2-123b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 256000, + "output": 8192 + } + }, + "mistral.magistral-small-2509": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 128000, + "output": 40000 + } + }, + "mistral.ministral-3-14b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "mistral.ministral-3-3b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 256000, + "output": 8192 + } + }, + "mistral.ministral-3-8b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "mistral.mistral-large-3-675b-instruct": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 256000, + "output": 8192 + } + }, + "mistral.pixtral-large-2502-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 8192 + } + }, + "mistral.voxtral-mini-3b-2507": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "mistral.voxtral-small-24b-2507": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32000, + "output": 8192 + } + }, + "moonshot.kimi-k2-thinking": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262143, + "output": 16000 + } + }, + "moonshotai.kimi-k2.5": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262143, + "output": 16000 + } + }, + "nvidia.nemotron-nano-12b-v2": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "nvidia.nemotron-nano-3-30b": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "nvidia.nemotron-nano-9b-v2": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "nvidia.nemotron-super-3-120b": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262144, + "output": 131072 + } + }, + "openai.gpt-5.4": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 272000, + "output": 128000 + } + }, + "openai.gpt-5.5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 272000, + "output": 128000 + } + }, + "openai.gpt-5.6-luna": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "openai.gpt-5.6-sol": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "openai.gpt-5.6-terra": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "openai.gpt-oss-120b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai.gpt-oss-120b-1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai.gpt-oss-20b": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai.gpt-oss-20b-1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai.gpt-oss-safeguard-120b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai.gpt-oss-safeguard-20b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "qwen.qwen3-235b-a22b-2507-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 131072 + } + }, + "qwen.qwen3-32b-v1:0": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 16384, + "output": 16384 + } + }, + "qwen.qwen3-coder-30b-a3b-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 131072 + } + }, + "qwen.qwen3-coder-480b-a35b-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "qwen.qwen3-coder-next": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "qwen.qwen3-next-80b-a3b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262000, + "output": 262000 + } + }, + "qwen.qwen3-vl-235b-a22b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262000, + "output": 262000 + } + }, + "us.anthropic.claude-fable-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.anthropic.claude-fable-5-1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.anthropic.claude-haiku-4-5-20251001-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "us.anthropic.claude-opus-4-1-20250805-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "us.anthropic.claude-opus-4-5-20251101-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "us.anthropic.claude-opus-4-6-v1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.anthropic.claude-opus-4-7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.anthropic.claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.anthropic.claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "us.anthropic.claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "us.anthropic.claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "us.deepseek.r1-v1:0": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 128000, + "output": 32768 + } + }, + "us.meta.llama4-maverick-17b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1000000, + "output": 16384 + } + }, + "us.meta.llama4-scout-17b-instruct-v1:0": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 3500000, + "output": 16384 + } + }, + "writer.palmyra-x4-v1:0": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 122880, + "output": 8192 + } + }, + "writer.palmyra-x5-v1:0": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 1040000, + "output": 8192 + } + }, + "xai.grok-4.3": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "xai.grok-4.6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 500000, + "output": 500000 + } + }, + "zai.glm-4.7": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "zai.glm-4.7-flash": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 200000, + "output": 131072 + } + }, + "zai.glm-5": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 202752, + "output": 101376 + } + } + }, + "anthropic": { + "claude-fable-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-fable-5-1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-haiku-4-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-haiku-4-5-20251001": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-opus-4-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-opus-4-5-20251101": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-opus-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-opus-4-7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-opus-4-8": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-opus-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-sonnet-4-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "claude-sonnet-4-5-20250929": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "claude-sonnet-4-6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-sonnet-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + } + }, + "deepseek": { + "deepseek-v4-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + "deepseek-v4-flash-vision-exp": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + "deepseek-v4-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 384000 + } + } + }, + "google": { + "deep-research-max-preview-04-2026": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "deep-research-preview-04-2026": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "gemini-2.5-computer-use-preview-10-2025": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "gemini-2.5-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens", + "min": 0, + "max": 24576 + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-2.5-flash-image": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "gemini-2.5-flash-lite": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens", + "min": 512, + "max": 24576 + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-2.5-flash-preview-tts": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 8192, + "output": 16384 + } + }, + "gemini-2.5-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 128, + "max": 32768 + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-2.5-pro-preview-tts": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 8192, + "output": 16384 + } + }, + "gemini-3-flash-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3-pro-image": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "gemini-3-pro-image-preview": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "gemini-3.1-flash-image": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 65536, + "output": 65536 + } + }, + "gemini-3.1-flash-image-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 65536, + "output": 65536 + } + }, + "gemini-3.1-flash-lite": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.1-flash-lite-image": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 65536, + "output": 65536 + } + }, + "gemini-3.1-flash-lite-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.1-flash-live-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "gemini-3.1-flash-tts-preview": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 8192, + "output": 16384 + } + }, + "gemini-3.1-pro-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.1-pro-preview-customtools": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.5-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.5-flash-lite": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.5-live-translate-preview": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 16384, + "output": 32768 + } + }, + "gemini-3.6-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.7-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-embedding-001": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 2048, + "output": 1 + } + }, + "gemini-embedding-2": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8192, + "output": 1 + } + }, + "gemini-flash-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-flash-lite-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-omni-flash-preview": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "gemma-4-26b-a4b-it": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 32768 + } + }, + "gemma-4-31b-it": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 32768 + } + }, + "lyria-3-clip-preview": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "lyria-3-pro-preview": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "veo-3.1-fast-generate-preview": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 480, + "output": 8192 + } + }, + "veo-3.1-generate-preview": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 480, + "output": 8192 + } + }, + "veo-3.1-lite-generate-preview": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 480, + "output": 8192 + } + } + }, + "google-vertex": { + "claude-fable-5-1@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-fable-5@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-haiku-4-5@20251001": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-opus-4-1@20250805": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "claude-opus-4-5@20251101": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-opus-4-6@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-opus-4-7@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-opus-4-8@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-opus-4@20250514": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "claude-opus-5@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-sonnet-4-5@20250929": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-sonnet-4-6@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "max" + ] + }, + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "claude-sonnet-4@20250514": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 1024 + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "claude-sonnet-5@default": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + "deepseek-ai/deepseek-v3.1-maas": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 163840, + "output": 32768 + } + }, + "deepseek-ai/deepseek-v3.2-maas": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 163840, + "output": 65536 + } + }, + "gemini-2.5-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens", + "min": 0, + "max": 24576 + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-2.5-flash-image": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "gemini-2.5-flash-lite": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "budget_tokens", + "min": 512, + "max": 24576 + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-2.5-flash-tts": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 32768, + "output": 16384 + } + }, + "gemini-2.5-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "budget_tokens", + "min": 128, + "max": 32768 + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-2.5-pro-tts": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 32768, + "output": 16384 + } + }, + "gemini-3-flash-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3-pro-image": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 65536, + "output": 32768 + } + }, + "gemini-3.1-flash-image": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "gemini-3.1-flash-lite": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.1-flash-lite-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.1-pro-preview": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.1-pro-preview-customtools": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.5-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.5-flash-lite": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.6-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-3.7-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-embedding-001": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 2048, + "output": 1 + } + }, + "gemini-flash-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "gemini-flash-lite-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "meta/llama-3.3-70b-instruct-maas": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 8192 + } + }, + "meta/llama-4-maverick-17b-128e-instruct-maas": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 524288, + "output": 8192 + } + }, + "moonshotai/kimi-k2-thinking-maas": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "openai/gpt-oss-120b-maas": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "openai/gpt-oss-20b-maas": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "qwen/qwen3-235b-a22b-instruct-2507-maas": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262144, + "output": 16384 + } + }, + "zai-org/glm-4.7-maas": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 128000 + } + }, + "zai-org/glm-5-maas": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 202752, + "output": 131072 + } + } + }, + "minimax": { + "MiniMax-M2": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "MiniMax-M2.1": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "MiniMax-M2.5": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "MiniMax-M2.5-highspeed": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "MiniMax-M2.7": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "MiniMax-M2.7-highspeed": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "MiniMax-M3": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 512000 + } + } + }, + "mistral": { + "codestral-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 256000, + "output": 4096 + } + }, + "devstral-2512": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "devstral-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "devstral-medium-2507": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "devstral-medium-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "devstral-small-2505": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "devstral-small-2507": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "labs-devstral-small-2512": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "magistral-medium-latest": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "magistral-small": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "ministral-3b-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "ministral-8b-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "mistral-embed": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8000, + "output": 3072 + } + }, + "mistral-large-2411": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 16384 + } + }, + "mistral-large-2512": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistral-large-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistral-medium-2505": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "mistral-medium-2508": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistral-medium-2604": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistral-medium-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistral-nemo": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "mistral-small-2506": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "mistral-small-2603": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "mistral-small-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "open-mistral-7b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 8000, + "output": 8000 + } + }, + "open-mistral-nemo": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "open-mixtral-8x22b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 64000, + "output": 64000 + } + }, + "open-mixtral-8x7b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32000, + "output": 32000 + } + }, + "pixtral-12b": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "pixtral-large-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "voxtral-mini-latest": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "voxtral-mini-tts-latest": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "voxtral-small-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 32000, + "output": 32000 + } + }, + "zai-glm-5-2": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + } + }, + "moonshotai": { + "kimi-k2-0711-preview": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 131072, + "output": 16384 + } + }, + "kimi-k2-0905-preview": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2-thinking": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2-thinking-turbo": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2-turbo-preview": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2.5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": false, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2.6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2.7-code": { + "reasoning": true, + "temperature": false, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k2.7-code-highspeed": { + "reasoning": true, + "temperature": false, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "kimi-k3": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + }, + { + "type": "effort", + "values": [ + "low", + "high", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1048576, + "output": 131072 + } + } + }, + "openai": { + "chatgpt-image-latest": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "gpt-3.5-turbo": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 16385, + "output": 4096 + } + }, + "gpt-4": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 8192, + "output": 8192 + } + }, + "gpt-4-turbo": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "gpt-4.1": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1047576, + "output": 32768 + } + }, + "gpt-4.1-mini": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1047576, + "output": 32768 + } + }, + "gpt-4.1-nano": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1047576, + "output": 32768 + } + }, + "gpt-4o": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "gpt-4o-2024-05-13": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 4096 + } + }, + "gpt-4o-2024-08-06": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "gpt-4o-2024-11-20": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "gpt-4o-mini": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "gpt-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5-mini": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5-nano": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 400000, + "output": 272000 + } + }, + "gpt-5.1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5.2": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5.2-chat-latest": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "medium" + ] + } + ], + "temperature": false, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "gpt-5.2-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5.3-chat-latest": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "gpt-5.3-codex": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5.3-codex-spark": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 128000, + "output": 32000 + } + }, + "gpt-5.4": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.4-mini": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5.4-nano": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "gpt-5.4-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.5-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.6-luna": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.6-sol": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-5.6-terra": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + ], + "temperature": false, + "limit": { + "context": 1050000, + "output": 128000 + } + }, + "gpt-image-1": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "gpt-image-1-mini": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "gpt-image-1.5": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "gpt-image-2": { + "reasoning": false, + "temperature": false, + "limit": {} + }, + "gpt-realtime-2.1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": false, + "limit": { + "context": 128000, + "output": 32000 + } + }, + "o1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "o1-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "o3": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "o3-mini": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "o3-pro": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "o4-mini": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": false, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "text-embedding-3-large": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8191, + "output": 3072 + } + }, + "text-embedding-3-small": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8191, + "output": 1536 + } + }, + "text-embedding-ada-002": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8192, + "output": 1536 + } + } + }, + "xai": { + "grok-4.20-0309-non-reasoning": { + "reasoning": false, + "temperature": true, + "limit": { + "context": 1000000, + "output": 30000 + } + }, + "grok-4.20-0309-reasoning": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 1000000, + "output": 30000 + } + }, + "grok-4.20-multi-agent-0309": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 30000 + } + }, + "grok-4.3": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "none", + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 30000 + } + }, + "grok-4.5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 500000, + "output": 500000 + } + }, + "grok-4.6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high", + "xhigh" + ] + } + ], + "temperature": true, + "limit": { + "context": 500000, + "output": 500000 + } + }, + "grok-build-0.1": { + "reasoning": true, + "temperature": true, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "grok-imagine-image": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8000 + } + }, + "grok-imagine-image-2.0": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8000 + } + }, + "grok-imagine-image-quality": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 8000 + } + }, + "grok-imagine-video": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 1024 + } + }, + "grok-imagine-video-1.5": { + "reasoning": false, + "temperature": false, + "limit": { + "context": 1024 + } + } + }, + "zhipuai": { + "glm-4.5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 98304 + } + }, + "glm-4.5-air": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 98304 + } + }, + "glm-4.5-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 131072, + "output": 98304 + } + }, + "glm-4.5v": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 64000, + "output": 16384 + } + }, + "glm-4.6": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "glm-4.6v": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 128000, + "output": 32768 + } + }, + "glm-4.7": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "glm-4.7-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 131072 + } + }, + "glm-4.7-flashx": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 131072 + } + }, + "glm-5": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 204800, + "output": 131072 + } + }, + "glm-5.1": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 131072 + } + }, + "glm-5.2": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "glm-5.3": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "glm-5.3-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "high", + "max" + ] + } + ], + "temperature": true, + "limit": { + "context": 1000000, + "output": 131072 + } + }, + "glm-5v-turbo": { + "reasoning": true, + "reasoning_options": [ + { + "type": "toggle" + } + ], + "temperature": true, + "limit": { + "context": 200000, + "output": 131072 + } + } + } +} From 3b96b3ae096fa116265786bb813099e2b15caca7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 13:51:33 +0300 Subject: [PATCH 273/618] fix(reasoning): catalogue the vision-plus DashScope hybrid qwen3-vl-plus answers a bare non-streaming call with no reasoning and returns 1255 characters of it once enable_thinking:true asks, which is the commercial hybrid shape qwen-plus already has. The catalogue did not know the name, so a caller asking it to think got nothing and no error. Three tables listed it as a negative control beside qwen3-coder-plus, whose zero is real. That pairing was wrong: two independent live calls, in August and today, return reasoning from this model. The expectations move with the measurement. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 6 +++--- llms/reasoning/models_dev_drift_test.go | 1 - llms/reasoning/qwen_capability.go | 4 +++- llms/reasoning/qwen_off_test.go | 4 ++-- llms/reasoning/qwen_optin_test.go | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 0fdb84b9d..b44874777 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -51,12 +51,12 @@ func TestNonChatGoogleSurfacesAreNotThinkingModels(t *testing.T) { func TestQwen3HybridsAreInTheCatalogueNowThatOffIsExpressible(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3-32b", "qwen3-235b-a22b"} { + for _, model := range []string{"qwen3-32b", "qwen3-235b-a22b", "qwen3-vl-plus"} { if !IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = false, want true", model) } } - for _, model := range []string{"qwen3-vl-plus", "qwen3-coder-plus"} { + for _, model := range []string{"qwen3-coder-plus"} { if IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = true, want false", model) } @@ -80,7 +80,7 @@ func TestQwenTakesNoEffortOnTheWire(t *testing.T) { t.Parallel() for _, model := range []string{ - "qwen3-32b", "qwen3-235b-a22b", "qwen3-vl-plus", + "qwen3-32b", "qwen3-235b-a22b", "qwen3.5-35b-a3b", "qwen3.7-max", "dashscope/qwen3.7-max", } { if AcceptsEffortWire(model) { diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index 0e75060f4..535003f22 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -27,7 +27,6 @@ var knownDrift = map[string]string{ "openai/gpt-realtime-2.1": "не чат: This is not a chat model", "amazon-bedrock/qwen.qwen3-32b-v1:0": "думает только в стриме по просьбе, а предикат отвечает на вопрос о голом вызове", - "alibaba/qwen3-vl-plus": "НАШ ПРОБЕЛ: стрим с enable_thinking даёт 1180 символов размышления", "amazon-bedrock/deepseek.v3-v1:0": "НАШ ПРОБЕЛ: вендорное написание DeepSeek не нормализуется", "alibaba/qvq-max": "не измерено", diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index c8ac16553..2e527f2f3 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -30,7 +30,9 @@ func (e *ErrThinkingRequiresStream) Error() string { return fmt.Sprintf("reasoning on model %q is available only on a streaming call", e.Model) } -var qwenFlagThinkers = map[string]bool{"qwen-plus": true, "qwen-flash": true, "qwen3-max": true} +var qwenFlagThinkers = map[string]bool{ + "qwen-plus": true, "qwen-flash": true, "qwen3-max": true, "qwen3-vl-plus": true, +} // QwenThinkingEnabledByFlag reports whether DashScope leaves the model's // thinking off until enable_thinking:true asks for it. diff --git a/llms/reasoning/qwen_off_test.go b/llms/reasoning/qwen_off_test.go index bb619197e..ad56c37d9 100644 --- a/llms/reasoning/qwen_off_test.go +++ b/llms/reasoning/qwen_off_test.go @@ -18,12 +18,12 @@ func TestQwenHybridsSpellOffWithTheDashScopeFlag(t *testing.T) { func TestQwenHybridsAreReasoningModels(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3-8b", "qwen3-235b-a22b", "dashscope/qwen3-30b-a3b"} { + for _, model := range []string{"qwen3-8b", "qwen3-235b-a22b", "dashscope/qwen3-30b-a3b", "qwen3-vl-plus"} { if !IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = false, want true", model) } } - for _, model := range []string{"qwen3-coder-plus", "qwen3-vl-plus"} { + for _, model := range []string{"qwen3-coder-plus"} { if IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = true, want false", model) } diff --git a/llms/reasoning/qwen_optin_test.go b/llms/reasoning/qwen_optin_test.go index 0e28ce81c..8461c9d69 100644 --- a/llms/reasoning/qwen_optin_test.go +++ b/llms/reasoning/qwen_optin_test.go @@ -17,7 +17,7 @@ func TestQwenCommercialHybridsThinkOnlyWhenAsked(t *testing.T) { {"qwen3-8b", false}, {"qwen3.7-plus", false}, {"qwen3-coder-plus", false}, - {"qwen3-vl-plus", false}, + {"qwen3-vl-plus", true}, {"openrouter/qwen/qwen-plus", false}, {"qwen-plus-latest", false}, } From 85fd8e43cd5134644a00b310c8a2d6af662968e7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 14:13:52 +0300 Subject: [PATCH 274/618] test(reasoning): correct why bedrock DeepSeek V3 diverges The entry claimed our matcher misses the name. It does not: both exported Bedrock constants resolve, and the live route rejects deepseek.v3-v1:0 as an invalid identifier, so there is no vendor fact behind the catalogue's claim. The V3 build itself was measured not to reason. Co-Authored-By: Claude Opus 5 --- llms/reasoning/models_dev_drift_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index 535003f22..226d85eb0 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -27,7 +27,7 @@ var knownDrift = map[string]string{ "openai/gpt-realtime-2.1": "не чат: This is not a chat model", "amazon-bedrock/qwen.qwen3-32b-v1:0": "думает только в стриме по просьбе, а предикат отвечает на вопрос о голом вызове", - "amazon-bedrock/deepseek.v3-v1:0": "НАШ ПРОБЕЛ: вендорное написание DeepSeek не нормализуется", + "amazon-bedrock/deepseek.v3-v1:0": "имени нет на Bedrock: The provided model identifier is invalid; линейка V3 замерена как нерассуждающая", "alibaba/qvq-max": "не измерено", "alibaba/qwen-turbo": "не измерено", From 45d157ed90bd8e4e36237883e1a1789a66f3c757 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 18:46:52 +0300 Subject: [PATCH 275/618] feat(anthropic): read the vendor's model listing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door could only POST: the one transport helper hardcoded the method, so GET /v1/models had no way out of the client. The method moves to a parameter and both existing POST paths keep going through the same helper. ListModels returns what the vendor reports per model — the effort levels with their own supported flags, the thinking types, the token limits and the feature flags. A record that carries no capabilities object at all stays distinguishable from one that reports everything unsupported, because the two are different answers and only the second is the vendor saying no. Co-Authored-By: Claude Opus 5 --- .../anthropicclient/anthropicclient.go | 9 +- .../internal/anthropicclient/models.go | 100 +++++++++++ llms/anthropic/models.go | 122 +++++++++++++ llms/anthropic/models_test.go | 161 ++++++++++++++++++ 4 files changed, 391 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/internal/anthropicclient/models.go create mode 100644 llms/anthropic/models.go create mode 100644 llms/anthropic/models_test.go diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index f937673cf..838af4f48 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "net/http" "slices" "strings" @@ -231,13 +232,19 @@ func (c *Client) do(ctx context.Context, path string, payloadBytes []byte) (*htt } func (c *Client) doWithHeaders(ctx context.Context, path string, payloadBytes []byte, betaHeaders []string) (*http.Response, error) { + return c.request(ctx, http.MethodPost, path, bytes.NewReader(payloadBytes), betaHeaders) +} + +func (c *Client) request( + ctx context.Context, method, path string, body io.Reader, betaHeaders []string, +) (*http.Response, error) { if c.baseURL == "" { c.baseURL = DefaultBaseURL } url := c.baseURL + path - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(payloadBytes)) + req, err := http.NewRequestWithContext(ctx, method, url, body) if err != nil { return nil, fmt.Errorf("create request: %w", err) } diff --git a/llms/anthropic/internal/anthropicclient/models.go b/llms/anthropic/internal/anthropicclient/models.go new file mode 100644 index 000000000..8deac7dd1 --- /dev/null +++ b/llms/anthropic/internal/anthropicclient/models.go @@ -0,0 +1,100 @@ +package anthropicclient + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strconv" + "time" +) + +type ModelCapability struct { + Supported bool `json:"supported"` +} + +type ModelEffortCapability struct { + Supported bool `json:"supported"` + Low ModelCapability `json:"low"` + Medium ModelCapability `json:"medium"` + High ModelCapability `json:"high"` + XHigh ModelCapability `json:"xhigh"` + Max ModelCapability `json:"max"` +} + +type ModelThinkingTypes struct { + Enabled ModelCapability `json:"enabled"` + Adaptive ModelCapability `json:"adaptive"` +} + +type ModelThinkingCapability struct { + Supported bool `json:"supported"` + Types ModelThinkingTypes `json:"types"` +} + +type ModelCapabilities struct { + Batch ModelCapability `json:"batch"` + Citations ModelCapability `json:"citations"` + CodeExecution ModelCapability `json:"code_execution"` + ContextManagement ModelCapability `json:"context_management"` + Effort ModelEffortCapability `json:"effort"` + ImageInput ModelCapability `json:"image_input"` + PDFInput ModelCapability `json:"pdf_input"` + StructuredOutputs ModelCapability `json:"structured_outputs"` + Thinking ModelThinkingCapability `json:"thinking"` +} + +type ModelInfo struct { + Type string `json:"type"` + ID string `json:"id"` + DisplayName string `json:"display_name"` + CreatedAt time.Time `json:"created_at"` + MaxInputTokens int `json:"max_input_tokens"` + MaxTokens int `json:"max_tokens"` + Capabilities *ModelCapabilities `json:"capabilities"` +} + +type ModelsRequest struct { + Limit int + AfterID string +} + +type ModelsResponsePayload struct { + Data []ModelInfo `json:"data"` + HasMore bool `json:"has_more"` + FirstID string `json:"first_id"` + LastID string `json:"last_id"` +} + +func (c *Client) ListModels(ctx context.Context, r *ModelsRequest) (*ModelsResponsePayload, error) { + path := "/models" + if r != nil { + q := url.Values{} + if r.Limit > 0 { + q.Set("limit", strconv.Itoa(r.Limit)) + } + if r.AfterID != "" { + q.Set("after_id", r.AfterID) + } + if len(q) > 0 { + path += "?" + q.Encode() + } + } + + resp, err := c.request(ctx, http.MethodGet, path, http.NoBody, nil) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, c.decodeError(resp) + } + + var payload ModelsResponsePayload + if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil { + return nil, fmt.Errorf("decode models response: %w", err) + } + return &payload, nil +} diff --git a/llms/anthropic/models.go b/llms/anthropic/models.go new file mode 100644 index 000000000..cc5edc858 --- /dev/null +++ b/llms/anthropic/models.go @@ -0,0 +1,122 @@ +package anthropic + +import ( + "context" + "time" + + "github.com/vxcontrol/langchaingo/llms/anthropic/internal/anthropicclient" +) + +type ModelFeatures struct { + Batch bool + Citations bool + CodeExecution bool + ContextManagement bool + ImageInput bool + PDFInput bool + StructuredOutputs bool +} + +// ModelInfo is one model from the vendor's listing. A false CapabilitiesReported +// means the record carried no capabilities object at all — read the other fields +// as unknown there, not as unsupported. +type ModelInfo struct { + ID string + DisplayName string + CreatedAt time.Time + MaxInputTokens int + MaxTokens int + CapabilitiesReported bool + EffortSupported bool + EffortLevels []string + ThinkingSupported bool + ThinkingTypes []string + Features ModelFeatures +} + +// ListModelsRequest selects one page of the listing. Limit 0 takes the vendor's +// default page size. +type ListModelsRequest struct { + Limit int + AfterID string +} + +// ListModelsResponse is one page of the listing. HasMore true means further +// models exist beyond LastID; pass it as the next request's AfterID. +type ListModelsResponse struct { + Models []ModelInfo + HasMore bool + LastID string +} + +func (o *LLM) ListModels(ctx context.Context, req ListModelsRequest) (ListModelsResponse, error) { + payload, err := o.client.ListModels(ctx, &anthropicclient.ModelsRequest{ + Limit: req.Limit, + AfterID: req.AfterID, + }) + if err != nil { + return ListModelsResponse{}, err + } + + models := make([]ModelInfo, 0, len(payload.Data)) + for _, m := range payload.Data { + models = append(models, modelInfoFrom(m)) + } + return ListModelsResponse{Models: models, HasMore: payload.HasMore, LastID: payload.LastID}, nil +} + +func modelInfoFrom(m anthropicclient.ModelInfo) ModelInfo { + info := ModelInfo{ + ID: m.ID, + DisplayName: m.DisplayName, + CreatedAt: m.CreatedAt, + MaxInputTokens: m.MaxInputTokens, + MaxTokens: m.MaxTokens, + } + + c := m.Capabilities + if c == nil { + return info + } + + info.CapabilitiesReported = true + info.EffortSupported = c.Effort.Supported + info.ThinkingSupported = c.Thinking.Supported + info.Features = ModelFeatures{ + Batch: c.Batch.Supported, + Citations: c.Citations.Supported, + CodeExecution: c.CodeExecution.Supported, + ContextManagement: c.ContextManagement.Supported, + ImageInput: c.ImageInput.Supported, + PDFInput: c.PDFInput.Supported, + StructuredOutputs: c.StructuredOutputs.Supported, + } + + levels := []struct { + name string + flag anthropicclient.ModelCapability + }{ + {"low", c.Effort.Low}, {"medium", c.Effort.Medium}, {"high", c.Effort.High}, + {"xhigh", c.Effort.XHigh}, {"max", c.Effort.Max}, + } + info.EffortLevels = make([]string, 0, len(levels)) + for _, lv := range levels { + if lv.flag.Supported { + info.EffortLevels = append(info.EffortLevels, lv.name) + } + } + + types := []struct { + name string + flag anthropicclient.ModelCapability + }{ + {"enabled", c.Thinking.Types.Enabled}, {"adaptive", c.Thinking.Types.Adaptive}, + } + info.ThinkingTypes = make([]string, 0, len(types)) + for _, ty := range types { + if ty.flag.Supported { + info.ThinkingTypes = append(info.ThinkingTypes, ty.name) + } + } + return info +} diff --git a/llms/anthropic/models_test.go b/llms/anthropic/models_test.go new file mode 100644 index 000000000..3a7f64e60 --- /dev/null +++ b/llms/anthropic/models_test.go @@ -0,0 +1,161 @@ +package anthropic_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms/anthropic" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type listingCall struct { + method string + path string + rawQuery string +} + +func serveListing(t *testing.T, status int, body string) (*anthropic.LLM, *listingCall) { + t.Helper() + + seen := new(listingCall) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + seen.method, seen.path, seen.rawQuery = r.Method, r.URL.Path, r.URL.RawQuery + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test"), anthropic.WithBaseURL(srv.URL)) + require.NoError(t, err) + return llm, seen +} + +const vendorSonnet46 = `{"data":[{"type":"model","id":"claude-sonnet-4-6",` + + `"display_name":"Claude Sonnet 4.6","created_at":"2026-02-04T00:00:00Z",` + + `"max_input_tokens":1000000,"max_tokens":128000,"capabilities":{` + + `"batch":{"supported":true},"citations":{"supported":true},` + + `"code_execution":{"supported":true},"context_management":{"supported":true},` + + `"image_input":{"supported":true},"pdf_input":{"supported":true},` + + `"structured_outputs":{"supported":true},` + + `"effort":{"supported":true,"low":{"supported":true},"medium":{"supported":true},` + + `"high":{"supported":true},"xhigh":{"supported":false},"max":{"supported":true}},` + + `"thinking":{"supported":true,"types":{"enabled":{"supported":true},` + + `"adaptive":{"supported":true}}}}}],"has_more":false,"first_id":"claude-sonnet-4-6",` + + `"last_id":"claude-sonnet-4-6"}` + +func TestTheListingCarriesEveryCapabilityTheVendorReports(t *testing.T) { + t.Parallel() + + llm, _ := serveListing(t, http.StatusOK, vendorSonnet46) + + resp, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{}) + require.NoError(t, err) + require.Len(t, resp.Models, 1) + + m := resp.Models[0] + assert.Equal(t, "claude-sonnet-4-6", m.ID) + assert.Equal(t, "Claude Sonnet 4.6", m.DisplayName) + assert.Equal(t, 2026, m.CreatedAt.Year()) + assert.Equal(t, 1000000, m.MaxInputTokens) + assert.Equal(t, 128000, m.MaxTokens) + assert.True(t, m.CapabilitiesReported) + assert.True(t, m.EffortSupported) + assert.Equal(t, []string{"low", "medium", "high", "max"}, m.EffortLevels) + assert.True(t, m.ThinkingSupported) + assert.Equal(t, []string{"enabled", "adaptive"}, m.ThinkingTypes) + assert.True(t, m.Features.StructuredOutputs) + assert.True(t, m.Features.ContextManagement) + assert.False(t, resp.HasMore) + assert.Equal(t, "claude-sonnet-4-6", resp.LastID) +} + +func TestAModelOffTheEffortScaleReportsNoLevels(t *testing.T) { + t.Parallel() + + const body = `{"data":[{"type":"model","id":"claude-haiku-4-5-20251001",` + + `"max_input_tokens":200000,"max_tokens":64000,"capabilities":{` + + `"effort":{"supported":false,"low":{"supported":false},"medium":{"supported":false},` + + `"high":{"supported":false},"xhigh":{"supported":false},"max":{"supported":false}},` + + `"thinking":{"supported":true,"types":{"enabled":{"supported":true},` + + `"adaptive":{"supported":false}}}}}],"has_more":false}` + + llm, _ := serveListing(t, http.StatusOK, body) + + resp, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{}) + require.NoError(t, err) + require.Len(t, resp.Models, 1) + + m := resp.Models[0] + assert.True(t, m.CapabilitiesReported) + assert.False(t, m.EffortSupported) + assert.Empty(t, m.EffortLevels) + assert.True(t, m.ThinkingSupported) + assert.Equal(t, []string{"enabled"}, m.ThinkingTypes) +} + +func TestARecordWithoutCapabilitiesIsNotReadAsUnsupported(t *testing.T) { + t.Parallel() + + const body = `{"data":[{"type":"model","id":"claude-newborn-9",` + + `"display_name":"Claude Newborn 9"}],"has_more":false}` + + llm, _ := serveListing(t, http.StatusOK, body) + + resp, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{}) + require.NoError(t, err) + require.Len(t, resp.Models, 1) + + m := resp.Models[0] + assert.Equal(t, "claude-newborn-9", m.ID) + assert.False(t, m.CapabilitiesReported, + "the vendor said nothing about this model, which is not the same as saying nothing is supported") + assert.Empty(t, m.EffortLevels) + assert.Empty(t, m.ThinkingTypes) +} + +func TestTheListingIsFetchedWithAGetAndTheRequestedPage(t *testing.T) { + t.Parallel() + + llm, seen := serveListing(t, http.StatusOK, vendorSonnet46) + + _, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{ + Limit: 1000, + AfterID: "claude-opus-5", + }) + require.NoError(t, err) + + assert.Equal(t, http.MethodGet, seen.method) + assert.Equal(t, "/models", seen.path) + assert.Equal(t, "after_id=claude-opus-5&limit=1000", seen.rawQuery) +} + +func TestAnUnpagedListingSendsNoQuery(t *testing.T) { + t.Parallel() + + llm, seen := serveListing(t, http.StatusOK, vendorSonnet46) + + _, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{}) + require.NoError(t, err) + assert.Empty(t, seen.rawQuery) +} + +func TestARefusedListingSurfacesTheVendorMessage(t *testing.T) { + t.Parallel() + + const body = `{"type":"error","error":{"type":"authentication_error",` + + `"message":"invalid x-api-key"}}` + + llm, _ := serveListing(t, http.StatusUnauthorized, body) + + _, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{}) + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid x-api-key") + assert.Contains(t, err.Error(), "401") +} From 7abb0bcdc470c01e2ef5c0d1b95518bf7c0a10ab Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 18:50:50 +0300 Subject: [PATCH 276/618] test(reasoning): check our Claude tables against the vendor's own listing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anthropic reports per model which effort levels it accepts and which thinking types it takes, which is the same question claude_capability.go answers from a hand-kept table. go generate now records that answer for all eleven models the key can see, and a test compares the two offline: no network reaches the predicates, which stay pure and synchronous. All eleven agree today, so the value is the signal on the day they stop. The generator refuses to write rather than shrink coverage quietly — a paged listing, a record with no capabilities object, a vendor contradicting its own effort flag, or a key that no longer sees a model already committed. The listing does not carry whether a model accepts sampling while thinking, nor whether it thinks by default, nor that Fable cannot be switched off. A test pins the snapshot's field set so those cannot drift into it unnoticed and be mistaken for vendor-checked. Co-Authored-By: Claude Opus 5 --- .../reasoning/anthropic_listing_drift_test.go | 179 ++++++++++++++++++ llms/reasoning/doc.go | 1 + .../internal/cmd/anthropicmodels/main.go | 114 +++++++++++ .../internal/cmd/anthropicmodels/main_test.go | 135 +++++++++++++ llms/reasoning/testdata/anthropic_models.json | 142 ++++++++++++++ 5 files changed, 571 insertions(+) create mode 100644 llms/reasoning/anthropic_listing_drift_test.go create mode 100644 llms/reasoning/internal/cmd/anthropicmodels/main.go create mode 100644 llms/reasoning/internal/cmd/anthropicmodels/main_test.go create mode 100644 llms/reasoning/testdata/anthropic_models.json diff --git a/llms/reasoning/anthropic_listing_drift_test.go b/llms/reasoning/anthropic_listing_drift_test.go new file mode 100644 index 000000000..6e46200b7 --- /dev/null +++ b/llms/reasoning/anthropic_listing_drift_test.go @@ -0,0 +1,179 @@ +package reasoning + +import ( + "encoding/json" + "fmt" + "os" + "slices" + "sort" + "testing" +) + +type listingEntry struct { + EffortSupported bool `json:"effort_supported"` + Efforts []string `json:"efforts"` + ThinkingTypes []string `json:"thinking_types"` + StructuredOutputs bool `json:"structured_outputs"` +} + +const listingSnapshot = "testdata/anthropic_models.json" + +func readListing(t *testing.T) map[string]listingEntry { + t.Helper() + + body, err := os.ReadFile(listingSnapshot) + if err != nil { + t.Fatalf("read snapshot: %v", err) + } + var snapshot map[string]listingEntry + if err := json.Unmarshal(body, &snapshot); err != nil { + t.Fatalf("parse snapshot: %v", err) + } + if len(snapshot) == 0 { + t.Fatal("snapshot is empty; regenerate it with go generate ./llms/reasoning") + } + return snapshot +} + +func kindFromThinkingTypes(types []string) ClaudeReasoningKind { + enabled := slices.Contains(types, "enabled") + adaptive := slices.Contains(types, "adaptive") + switch { + case enabled && adaptive: + return ClaudeReasoningAdaptiveAndBudget + case adaptive: + return ClaudeReasoningAdaptiveOnly + case enabled: + return ClaudeReasoningBudgetOnly + default: + return ClaudeReasoningUnknown + } +} + +func claudeListingDiff(snapshot map[string]listingEntry) []string { + ids := make([]string, 0, len(snapshot)) + for id := range snapshot { + ids = append(ids, id) + } + sort.Strings(ids) + + var diffs []string + for _, id := range ids { + e := snapshot[id] + + ours := ClaudeEffortsFor(id, ProviderAnthropic) + if len(ours) != len(e.Efforts) || (len(ours) > 0 && !slices.Equal(ours, e.Efforts)) { + diffs = append(diffs, fmt.Sprintf("%s: we accept efforts %v, the vendor lists %v", id, ours, e.Efforts)) + } + if want, got := kindFromThinkingTypes(e.ThinkingTypes), ClaudeReasoningKindFor(id); want != got { + diffs = append(diffs, fmt.Sprintf("%s: we classify thinking as %d, the vendor reports %v (%d)", + id, got, e.ThinkingTypes, want)) + } + if got := ClaudeSupportsStructuredOutput(id); got != e.StructuredOutputs { + diffs = append(diffs, fmt.Sprintf("%s: we say structured output %v, the vendor says %v", + id, got, e.StructuredOutputs)) + } + if e.EffortSupported != (len(e.Efforts) > 0) { + diffs = append(diffs, fmt.Sprintf("%s: the vendor reports effort supported=%v with %d levels", + id, e.EffortSupported, len(e.Efforts))) + } + } + return diffs +} + +func TestTheVendorListingAgreesWithOurTables(t *testing.T) { + t.Parallel() + + for _, d := range claudeListingDiff(readListing(t)) { + t.Errorf("drift: %s. Measure it against the vendor before touching either side", d) + } +} + +func TestTheListingSnapshotCoversEveryThinkingKind(t *testing.T) { + t.Parallel() + + seen := map[ClaudeReasoningKind]int{} + for _, e := range readListing(t) { + seen[kindFromThinkingTypes(e.ThinkingTypes)]++ + } + for _, kind := range []ClaudeReasoningKind{ + ClaudeReasoningAdaptiveOnly, ClaudeReasoningAdaptiveAndBudget, ClaudeReasoningBudgetOnly, + } { + if seen[kind] == 0 { + t.Errorf("no model of kind %d in the snapshot: a listing that lost a whole generation "+ + "would still pass the drift test", kind) + } + } +} + +func TestTheKeyThatRecordedTheSnapshotCannotSeeMythos(t *testing.T) { + t.Parallel() + + snapshot := readListing(t) + for _, id := range []string{"claude-mythos-5", "claude-mythos-preview"} { + if _, ok := snapshot[id]; ok { + t.Errorf("%s is in the snapshot now: our table for it was never vendor-checked, "+ + "so verify it and drop this guard", id) + } + if !ClaudeSupportsThinking(id) { + t.Errorf("%s left our tables while still unverifiable against the listing", id) + } + } +} + +func TestTheDriftCheckRedensOnASingleChangedLevel(t *testing.T) { + t.Parallel() + + snapshot := readListing(t) + const target = "claude-sonnet-4-6" + entry, ok := snapshot[target] + if !ok { + t.Fatalf("%s left the snapshot; point this test at another dual-thinking model", target) + } + entry.Efforts = append(slices.Clone(entry.Efforts), "xhigh") + snapshot[target] = entry + + diffs := claudeListingDiff(snapshot) + if len(diffs) != 1 { + t.Fatalf("want exactly one divergence from one changed level, got %d: %v", len(diffs), diffs) + } + if !slices.ContainsFunc(diffs, func(d string) bool { return len(d) > 0 && d[:len(target)] == target }) { + t.Errorf("the divergence does not name %s: %v", target, diffs) + } +} + +func TestTheListingSaysNothingAboutSamplingOrDefaultThinking(t *testing.T) { + t.Parallel() + + body, err := os.ReadFile(listingSnapshot) + if err != nil { + t.Fatalf("read snapshot: %v", err) + } + var raw map[string]map[string]any + if err := json.Unmarshal(body, &raw); err != nil { + t.Fatalf("parse snapshot: %v", err) + } + + want := []string{"effort_supported", "efforts", "structured_outputs", "thinking_types"} + for id, fields := range raw { + keys := make([]string, 0, len(fields)) + for k := range fields { + keys = append(keys, k) + } + sort.Strings(keys) + if !slices.Equal(keys, want) { + t.Fatalf("%s carries %v: the snapshot grew a field, so decide whether the drift "+ + "test should compare it before it becomes silent data", id, keys) + } + } + + if !ClaudeThinkingDefaultsOn("claude-opus-5") { + t.Error("claude-opus-5 thinks by default; the listing carries no field for it, so the table must") + } + if !ClaudeRejectsSampling("claude-opus-4-7") { + t.Error("claude-opus-4-7 rejects sampling while thinking; the listing carries no field for it") + } + if !ClaudeThinkingAlwaysOn("claude-fable-5") { + t.Error("claude-fable-5 cannot be switched off; the listing carries no field for it") + } +} diff --git a/llms/reasoning/doc.go b/llms/reasoning/doc.go index 91fcb0872..c82a195f0 100644 --- a/llms/reasoning/doc.go +++ b/llms/reasoning/doc.go @@ -67,3 +67,4 @@ package reasoning //go:generate go run ./internal/cmd/modelsdev -out testdata/models_dev.json +//go:generate go run ./internal/cmd/anthropicmodels -out testdata/anthropic_models.json diff --git a/llms/reasoning/internal/cmd/anthropicmodels/main.go b/llms/reasoning/internal/cmd/anthropicmodels/main.go new file mode 100644 index 000000000..e7f64e0c9 --- /dev/null +++ b/llms/reasoning/internal/cmd/anthropicmodels/main.go @@ -0,0 +1,114 @@ +// Command anthropicmodels refreshes the committed Anthropic listing snapshot +// read by the drift test. +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "os" + "sort" + + "github.com/vxcontrol/langchaingo/llms/anthropic" +) + +type entry struct { + EffortSupported bool `json:"effort_supported"` + Efforts []string `json:"efforts"` + ThinkingTypes []string `json:"thinking_types"` + StructuredOutputs bool `json:"structured_outputs"` +} + +func main() { + out := flag.String("out", "testdata/anthropic_models.json", "where to write the snapshot") + baseURL := flag.String("base-url", "", "override the vendor base URL, e.g. a gateway passthrough") + flag.Parse() + + if err := run(*out, *baseURL); err != nil { + fmt.Fprintln(os.Stderr, "anthropicmodels:", err) + os.Exit(1) + } +} + +func run(out, baseURL string) error { + opts := []anthropic.Option{} + if baseURL != "" { + opts = append(opts, anthropic.WithBaseURL(baseURL)) + } + llm, err := anthropic.New(opts...) + if err != nil { + return err + } + + resp, err := llm.ListModels(context.Background(), anthropic.ListModelsRequest{Limit: 1000}) + if err != nil { + return err + } + if resp.HasMore { + return fmt.Errorf("the vendor has more models after %q: teach this command to page "+ + "before writing a snapshot that silently covers less", resp.LastID) + } + if len(resp.Models) == 0 { + return fmt.Errorf("the vendor returned no models") + } + + snapshot := make(map[string]entry, len(resp.Models)) + for _, m := range resp.Models { + if !m.CapabilitiesReported { + return fmt.Errorf("model %q carries no capabilities object: writing it would "+ + "claim the vendor denied every feature", m.ID) + } + if m.EffortSupported != (len(m.EffortLevels) > 0) { + return fmt.Errorf("model %q reports effort supported=%v with %d levels: the "+ + "vendor contradicts itself, look before writing", m.ID, m.EffortSupported, len(m.EffortLevels)) + } + snapshot[m.ID] = entry{ + EffortSupported: m.EffortSupported, + Efforts: m.EffortLevels, + ThinkingTypes: m.ThinkingTypes, + StructuredOutputs: m.Features.StructuredOutputs, + } + } + + if err := keepsEveryCommittedModel(out, snapshot); err != nil { + return err + } + + body, err := json.MarshalIndent(snapshot, "", " ") + if err != nil { + return err + } + if err := os.WriteFile(out, append(body, '\n'), 0o600); err != nil { + return err + } + fmt.Fprintf(os.Stderr, "anthropicmodels: %d models -> %s\n", len(snapshot), out) + return nil +} + +func keepsEveryCommittedModel(out string, snapshot map[string]entry) error { + body, err := os.ReadFile(out) + if os.IsNotExist(err) { + return nil + } + if err != nil { + return err + } + var committed map[string]entry + if err := json.Unmarshal(body, &committed); err != nil { + return err + } + + var gone []string + for id := range committed { + if _, ok := snapshot[id]; !ok { + gone = append(gone, id) + } + } + if len(gone) > 0 { + sort.Strings(gone) + return fmt.Errorf("the committed snapshot has %v and this key does not see them: "+ + "a narrower key would shrink coverage without a word", gone) + } + return nil +} diff --git a/llms/reasoning/internal/cmd/anthropicmodels/main_test.go b/llms/reasoning/internal/cmd/anthropicmodels/main_test.go new file mode 100644 index 000000000..3cf64ffd6 --- /dev/null +++ b/llms/reasoning/internal/cmd/anthropicmodels/main_test.go @@ -0,0 +1,135 @@ +package main + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" +) + +func serve(t *testing.T, body string) string { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + t.Setenv("ANTHROPIC_API_KEY", "test") + return srv.URL +} + +func model(id, effort, thinking string) string { + return `{"type":"model","id":"` + id + `","capabilities":{` + + `"structured_outputs":{"supported":true},"effort":` + effort + + `,"thinking":` + thinking + `}}` +} + +const ( + fullEffort = `{"supported":true,"low":{"supported":true},"medium":{"supported":true},` + + `"high":{"supported":true},"xhigh":{"supported":true},"max":{"supported":true}}` + noEffort = `{"supported":false,"low":{"supported":false},"medium":{"supported":false},` + + `"high":{"supported":false},"xhigh":{"supported":false},"max":{"supported":false}}` + adaptive = `{"supported":true,"types":{"enabled":{"supported":false},"adaptive":{"supported":true}}}` +) + +func TestASnapshotIsWrittenForAWellFormedListing(t *testing.T) { + url := serve(t, `{"data":[`+model("claude-opus-5", fullEffort, adaptive)+`],"has_more":false}`) + out := filepath.Join(t.TempDir(), "snap.json") + + if err := run(out, url); err != nil { + t.Fatalf("run: %v", err) + } + + var written map[string]entry + body, err := os.ReadFile(out) + if err != nil { + t.Fatal(err) + } + if err := json.Unmarshal(body, &written); err != nil { + t.Fatal(err) + } + got := written["claude-opus-5"] + if len(got.Efforts) != 5 || got.ThinkingTypes[0] != "adaptive" || !got.StructuredOutputs { + t.Errorf("snapshot lost detail: %+v", got) + } +} + +func TestAPagedListingIsRefusedInsteadOfTruncated(t *testing.T) { + url := serve(t, `{"data":[`+model("claude-opus-5", fullEffort, adaptive)+`],`+ + `"has_more":true,"last_id":"claude-opus-5"}`) + out := filepath.Join(t.TempDir(), "snap.json") + + err := run(out, url) + if err == nil { + t.Fatal("a truncated listing was written as if it were the whole vendor") + } + if !strings.Contains(err.Error(), "more models") { + t.Errorf("unexpected refusal: %v", err) + } + if _, statErr := os.Stat(out); !os.IsNotExist(statErr) { + t.Error("the refusal still left a snapshot behind") + } +} + +func TestARecordWithoutCapabilitiesIsRefused(t *testing.T) { + url := serve(t, `{"data":[{"type":"model","id":"claude-newborn-9"}],"has_more":false}`) + out := filepath.Join(t.TempDir(), "snap.json") + + err := run(out, url) + if err == nil { + t.Fatal("a model the vendor said nothing about was written as denying every feature") + } + if !strings.Contains(err.Error(), "claude-newborn-9") { + t.Errorf("the refusal does not name the model: %v", err) + } +} + +func TestAVendorContradictingItselfIsRefused(t *testing.T) { + url := serve(t, `{"data":[`+model("claude-opus-5", noEffort, adaptive)+ + `,`+model("claude-odd-1", `{"supported":true,"low":{"supported":false},`+ + `"medium":{"supported":false},"high":{"supported":false},"xhigh":{"supported":false},`+ + `"max":{"supported":false}}`, adaptive)+`],"has_more":false}`) + out := filepath.Join(t.TempDir(), "snap.json") + + err := run(out, url) + if err == nil { + t.Fatal("effort supported with no levels was written without a word") + } + if !strings.Contains(err.Error(), "claude-odd-1") { + t.Errorf("the refusal does not name the model: %v", err) + } +} + +func TestANarrowerKeyCannotShrinkTheCommittedSnapshot(t *testing.T) { + url := serve(t, `{"data":[`+model("claude-opus-5", fullEffort, adaptive)+`],"has_more":false}`) + out := filepath.Join(t.TempDir(), "snap.json") + committed := `{"claude-opus-5":{"effort_supported":true,"efforts":["low"],` + + `"thinking_types":["adaptive"],"structured_outputs":true},` + + `"claude-sonnet-5":{"effort_supported":true,"efforts":["low"],` + + `"thinking_types":["adaptive"],"structured_outputs":true}}` + if err := os.WriteFile(out, []byte(committed), 0o600); err != nil { + t.Fatal(err) + } + + err := run(out, url) + if err == nil { + t.Fatal("a key that sees fewer models silently rewrote the snapshot") + } + if !strings.Contains(err.Error(), "claude-sonnet-5") { + t.Errorf("the refusal does not name what would be lost: %v", err) + } + + after, readErr := os.ReadFile(out) + if readErr != nil { + t.Fatal(readErr) + } + if string(after) != committed { + t.Error("the refusal still overwrote the committed snapshot") + } +} diff --git a/llms/reasoning/testdata/anthropic_models.json b/llms/reasoning/testdata/anthropic_models.json new file mode 100644 index 000000000..4ebf38017 --- /dev/null +++ b/llms/reasoning/testdata/anthropic_models.json @@ -0,0 +1,142 @@ +{ + "claude-fable-5": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ], + "thinking_types": [ + "adaptive" + ], + "structured_outputs": true + }, + "claude-fable-5-1": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ], + "thinking_types": [ + "adaptive" + ], + "structured_outputs": true + }, + "claude-haiku-4-5-20251001": { + "effort_supported": false, + "efforts": [], + "thinking_types": [ + "enabled" + ], + "structured_outputs": true + }, + "claude-opus-4-5-20251101": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high" + ], + "thinking_types": [ + "enabled" + ], + "structured_outputs": true + }, + "claude-opus-4-6": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "max" + ], + "thinking_types": [ + "enabled", + "adaptive" + ], + "structured_outputs": true + }, + "claude-opus-4-7": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ], + "thinking_types": [ + "adaptive" + ], + "structured_outputs": true + }, + "claude-opus-4-8": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ], + "thinking_types": [ + "adaptive" + ], + "structured_outputs": true + }, + "claude-opus-5": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ], + "thinking_types": [ + "adaptive" + ], + "structured_outputs": true + }, + "claude-sonnet-4-5-20250929": { + "effort_supported": false, + "efforts": [], + "thinking_types": [ + "enabled" + ], + "structured_outputs": true + }, + "claude-sonnet-4-6": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "max" + ], + "thinking_types": [ + "enabled", + "adaptive" + ], + "structured_outputs": true + }, + "claude-sonnet-5": { + "effort_supported": true, + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ], + "thinking_types": [ + "adaptive" + ], + "structured_outputs": true + } +} From ec65e59ee1273562ce3a67aeb8cddbeba2db5da4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 20:07:33 +0300 Subject: [PATCH 277/618] fix(reasoning): catalogue the Mistral names that reason under other spellings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mistral's own listing declares reasoning on four ids our tables did not know. Three are the vibe-cli aliases of mistral-small and mistral-medium, which we already classify under their other names; the fourth is GLM 5.2 under the zai- prefix Mistral serves it with. A live call with effort returns between 526 and 1362 characters of reasoning from each, and mistral-large-latest answers the same call with the vendor's own refusal, so the probe reads what it claims to. The gateway no longer hides the parameter, so the models.dev entry that recorded zai-glm-5-2 as unmeasurable is gone — its own test asked for that. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 24 ++++++++++++++++++++++++ llms/reasoning/models_dev_drift_test.go | 1 - llms/reasoning/reasoning.go | 12 +++++++----- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index b44874777..05776b611 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -510,3 +510,27 @@ func TestEveryChatSpellingOfTheGPTLineAgrees(t *testing.T) { } } } + +func TestTheMistralListingNamesWeMissed(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "mistral-vibe-cli-fast", "mistral-vibe-cli-latest", "mistral-vibe-cli-with-tools", + } { + if !IsReasoningModel(model) { + t.Errorf("IsReasoningModel(%q) = false, but the vendor reports reasoning and a live "+ + "call with effort returns it", model) + } + if !ThinkingOptIn(model) { + t.Errorf("ThinkingOptIn(%q) = false, but a bare call returns no reasoning", model) + } + } + + if !IsReasoningModel("zai-glm-5-2") { + t.Error("IsReasoningModel(\"zai-glm-5-2\") = false, but it is the same model as glm-5-2 " + + "under the spelling Mistral serves it") + } + if IsReasoningModel("zai-glm-5-2") != IsReasoningModel("glm-5-2") { + t.Error("the two live spellings of one model disagree") + } +} diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index 226d85eb0..b986fcdd1 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -43,7 +43,6 @@ var knownDrift = map[string]string{ "amazon-bedrock/openai.gpt-oss-safeguard-120b": "не измерено: кандидат в не-чатовые поверхности", "amazon-bedrock/openai.gpt-oss-safeguard-20b": "не измерено: кандидат в не-чатовые поверхности", "google-vertex/qwen/qwen3-235b-a22b-instruct-2507-maas": "не измерено", - "mistral/zai-glm-5-2": "не измерено: шлюз режет параметр, вывод невозможен в обе стороны", } type snapshotModel struct { diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index a8a5a498f..548db9f0e 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -194,6 +194,7 @@ func mistralReasons(model string) bool { for _, prefix := range []string{ "mistral-medium-3", "mistral-medium-latest", "mistral-medium-2604", "mistral-small-2603", "mistral-small-latest", + "mistral-vibe-cli", } { if strings.HasPrefix(model, prefix) { return true @@ -264,11 +265,12 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat } // Z-AI GLM reasoning models (Zhipu AI) - if strings.HasPrefix(modelLower, "glm-4.5") || - strings.HasPrefix(modelLower, "glm-4.6") || - strings.HasPrefix(modelLower, "glm-4.7") || - strings.HasPrefix(modelLower, "glm-5") || - modelLower == "glm-latest" { + glm := strings.TrimPrefix(modelLower, "zai-") + if strings.HasPrefix(glm, "glm-4.5") || + strings.HasPrefix(glm, "glm-4.6") || + strings.HasPrefix(glm, "glm-4.7") || + strings.HasPrefix(glm, "glm-5") || + glm == "glm-latest" { return true } From 26daa57f44870ec49267596b9a15d86e9217f4c5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 20:10:47 +0300 Subject: [PATCH 278/618] test(reasoning): check our tables against Mistral's own listing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mistral publishes a reasoning flag and, for every model, the other ids that are the same model. go generate records both for all fifty; two offline tests read the snapshot. One compares the flag with our answer. The other asserts that every pair of live spellings the vendor calls one model gets one answer from us — the name-matcher check we had only as a hand-written list before. Two Labs models diverge and cannot be settled: the vendor lists them and then refuses to serve them, so they carry their reason and are excluded from both comparisons rather than copied into the tables. The generator refuses to write an empty listing, a record with no capabilities object, or a snapshot that covers less than the committed one. Co-Authored-By: Claude Opus 5 --- llms/reasoning/doc.go | 1 + .../internal/cmd/mistralmodels/main.go | 132 ++++++ .../internal/cmd/mistralmodels/main_test.go | 100 +++++ llms/reasoning/mistral_listing_drift_test.go | 134 ++++++ llms/reasoning/testdata/mistral_models.json | 386 ++++++++++++++++++ 5 files changed, 753 insertions(+) create mode 100644 llms/reasoning/internal/cmd/mistralmodels/main.go create mode 100644 llms/reasoning/internal/cmd/mistralmodels/main_test.go create mode 100644 llms/reasoning/mistral_listing_drift_test.go create mode 100644 llms/reasoning/testdata/mistral_models.json diff --git a/llms/reasoning/doc.go b/llms/reasoning/doc.go index 91fcb0872..0bdc6fd3d 100644 --- a/llms/reasoning/doc.go +++ b/llms/reasoning/doc.go @@ -67,3 +67,4 @@ package reasoning //go:generate go run ./internal/cmd/modelsdev -out testdata/models_dev.json +//go:generate go run ./internal/cmd/mistralmodels -out testdata/mistral_models.json diff --git a/llms/reasoning/internal/cmd/mistralmodels/main.go b/llms/reasoning/internal/cmd/mistralmodels/main.go new file mode 100644 index 000000000..d53186b76 --- /dev/null +++ b/llms/reasoning/internal/cmd/mistralmodels/main.go @@ -0,0 +1,132 @@ +// Command mistralmodels refreshes the committed Mistral listing snapshot read by +// the drift test. +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "os" + "sort" + "time" +) + +const defaultBaseURL = "https://api.mistral.ai/v1" + +type vendorModel struct { + ID string `json:"id"` + Aliases []string `json:"aliases"` + Capabilities *struct { + Reasoning bool `json:"reasoning"` + } `json:"capabilities"` +} + +type entry struct { + Reasoning bool `json:"reasoning"` + Aliases []string `json:"aliases"` +} + +func main() { + out := flag.String("out", "testdata/mistral_models.json", "where to write the snapshot") + baseURL := flag.String("base-url", defaultBaseURL, "override the vendor base URL, e.g. a gateway passthrough") + flag.Parse() + + if err := run(*out, *baseURL); err != nil { + fmt.Fprintln(os.Stderr, "mistralmodels:", err) + os.Exit(1) + } +} + +func run(out, baseURL string) error { + models, err := fetch(baseURL, os.Getenv("MISTRAL_API_KEY")) + if err != nil { + return err + } + if len(models) == 0 { + return fmt.Errorf("the vendor returned no models") + } + + snapshot := make(map[string]entry, len(models)) + for _, m := range models { + if m.Capabilities == nil { + return fmt.Errorf("model %q carries no capabilities object: writing it would claim "+ + "the vendor denied reasoning", m.ID) + } + aliases := append([]string(nil), m.Aliases...) + sort.Strings(aliases) + snapshot[m.ID] = entry{Reasoning: m.Capabilities.Reasoning, Aliases: aliases} + } + + if err := keepsEveryCommittedModel(out, snapshot); err != nil { + return err + } + + body, err := json.MarshalIndent(snapshot, "", " ") + if err != nil { + return err + } + if err := os.WriteFile(out, append(body, '\n'), 0o600); err != nil { + return err + } + fmt.Fprintf(os.Stderr, "mistralmodels: %d models -> %s\n", len(snapshot), out) + return nil +} + +func fetch(baseURL, key string) ([]vendorModel, error) { + req, err := http.NewRequest(http.MethodGet, baseURL+"/models", http.NoBody) + if err != nil { + return nil, err + } + req.Header.Set("Authorization", "Bearer "+key) + + client := &http.Client{Timeout: 2 * time.Minute} + resp, err := client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("%s/models: %s", baseURL, resp.Status) + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + var payload struct { + Data []vendorModel `json:"data"` + } + if err := json.Unmarshal(body, &payload); err != nil { + return nil, err + } + return payload.Data, nil +} + +func keepsEveryCommittedModel(out string, snapshot map[string]entry) error { + body, err := os.ReadFile(out) + if os.IsNotExist(err) { + return nil + } + if err != nil { + return err + } + var committed map[string]entry + if err := json.Unmarshal(body, &committed); err != nil { + return err + } + + var gone []string + for id := range committed { + if _, ok := snapshot[id]; !ok { + gone = append(gone, id) + } + } + if len(gone) > 0 { + sort.Strings(gone) + return fmt.Errorf("the committed snapshot has %v and this key does not see them: "+ + "a narrower key would shrink coverage without a word", gone) + } + return nil +} diff --git a/llms/reasoning/internal/cmd/mistralmodels/main_test.go b/llms/reasoning/internal/cmd/mistralmodels/main_test.go new file mode 100644 index 000000000..7c8fcde55 --- /dev/null +++ b/llms/reasoning/internal/cmd/mistralmodels/main_test.go @@ -0,0 +1,100 @@ +package main + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" +) + +func serve(t *testing.T, body string) string { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + t.Setenv("MISTRAL_API_KEY", "test") + return srv.URL +} + +const oneReasoner = `{"object":"list","data":[{"id":"magistral-medium-latest",` + + `"aliases":["mistral-medium-latest"],"capabilities":{"reasoning":true}}]}` + +func TestASnapshotKeepsTheFlagAndTheAliases(t *testing.T) { + url := serve(t, oneReasoner) + out := filepath.Join(t.TempDir(), "snap.json") + + if err := run(out, url); err != nil { + t.Fatalf("run: %v", err) + } + + body, err := os.ReadFile(out) + if err != nil { + t.Fatal(err) + } + var written map[string]entry + if err := json.Unmarshal(body, &written); err != nil { + t.Fatal(err) + } + got := written["magistral-medium-latest"] + if !got.Reasoning || len(got.Aliases) != 1 || got.Aliases[0] != "mistral-medium-latest" { + t.Errorf("snapshot lost detail: %+v", got) + } +} + +func TestARecordWithoutCapabilitiesIsRefused(t *testing.T) { + url := serve(t, `{"object":"list","data":[{"id":"mistral-newborn-9"}]}`) + out := filepath.Join(t.TempDir(), "snap.json") + + err := run(out, url) + if err == nil { + t.Fatal("a model the vendor said nothing about was written as denying reasoning") + } + if !strings.Contains(err.Error(), "mistral-newborn-9") { + t.Errorf("the refusal does not name the model: %v", err) + } + if _, statErr := os.Stat(out); !os.IsNotExist(statErr) { + t.Error("the refusal still left a snapshot behind") + } +} + +func TestAnEmptyListingIsRefused(t *testing.T) { + url := serve(t, `{"object":"list","data":[]}`) + out := filepath.Join(t.TempDir(), "snap.json") + + if err := run(out, url); err == nil { + t.Fatal("an empty listing was written, and every comparison against it would pass") + } +} + +func TestANarrowerKeyCannotShrinkTheCommittedSnapshot(t *testing.T) { + url := serve(t, oneReasoner) + out := filepath.Join(t.TempDir(), "snap.json") + committed := `{"magistral-medium-latest":{"reasoning":true,"aliases":[]},` + + `"codestral-2508":{"reasoning":false,"aliases":[]}}` + if err := os.WriteFile(out, []byte(committed), 0o600); err != nil { + t.Fatal(err) + } + + err := run(out, url) + if err == nil { + t.Fatal("a key that sees fewer models silently rewrote the snapshot") + } + if !strings.Contains(err.Error(), "codestral-2508") { + t.Errorf("the refusal does not name what would be lost: %v", err) + } + after, readErr := os.ReadFile(out) + if readErr != nil { + t.Fatal(readErr) + } + if string(after) != committed { + t.Error("the refusal still overwrote the committed snapshot") + } +} diff --git a/llms/reasoning/mistral_listing_drift_test.go b/llms/reasoning/mistral_listing_drift_test.go new file mode 100644 index 000000000..6dc568f46 --- /dev/null +++ b/llms/reasoning/mistral_listing_drift_test.go @@ -0,0 +1,134 @@ +package reasoning + +import ( + "encoding/json" + "os" + "sort" + "testing" +) + +type mistralEntry struct { + Reasoning bool `json:"reasoning"` + Aliases []string `json:"aliases"` +} + +const mistralSnapshot = "testdata/mistral_models.json" + +var mistralKnownDrift = map[string]string{ + "labs-leanstral-1-5": "Labs-модель, вендор отказывает в обслуживании: замерить нельзя", + "labs-leanstral-1-5-1": "Labs-модель, вендор отказывает в обслуживании: замерить нельзя", +} + +func readMistralListing(t *testing.T) map[string]mistralEntry { + t.Helper() + + body, err := os.ReadFile(mistralSnapshot) + if err != nil { + t.Fatalf("read snapshot: %v", err) + } + var snapshot map[string]mistralEntry + if err := json.Unmarshal(body, &snapshot); err != nil { + t.Fatalf("parse snapshot: %v", err) + } + if len(snapshot) == 0 { + t.Fatal("snapshot is empty; regenerate it with go generate ./llms/reasoning") + } + return snapshot +} + +func mistralListingDiff(snapshot map[string]mistralEntry) []string { + ids := make([]string, 0, len(snapshot)) + for id := range snapshot { + ids = append(ids, id) + } + sort.Strings(ids) + + var diffs []string + for _, id := range ids { + if got := IsReasoningModel(id); got != snapshot[id].Reasoning { + diffs = append(diffs, id) + } + } + return diffs +} + +func TestTheMistralListingAgreesWithOurTables(t *testing.T) { + t.Parallel() + + snapshot := readMistralListing(t) + reasoning, plain := 0, 0 + for _, e := range snapshot { + if e.Reasoning { + reasoning++ + } else { + plain++ + } + } + if reasoning == 0 || plain == 0 { + t.Fatalf("snapshot has %d reasoning and %d plain models: a listing that lost one side "+ + "would still pass every comparison below", reasoning, plain) + } + + diverging := map[string]bool{} + for _, id := range mistralListingDiff(snapshot) { + diverging[id] = true + if _, known := mistralKnownDrift[id]; !known { + t.Errorf("new drift on %s: we say reasoning=%v, the vendor says %v. Measure it with "+ + "reasoning_effort before touching either side", id, IsReasoningModel(id), snapshot[id].Reasoning) + } + } + for id := range mistralKnownDrift { + if !diverging[id] { + t.Errorf("stale entry %s: the listing and our tables now agree, drop the line", id) + } + } +} + +func TestEveryLiveSpellingOfAMistralModelGetsOneAnswer(t *testing.T) { + t.Parallel() + + snapshot := readMistralListing(t) + checked := 0 + for id, e := range snapshot { + if _, known := mistralKnownDrift[id]; known { + continue + } + for _, alias := range e.Aliases { + if _, known := mistralKnownDrift[alias]; known { + continue + } + checked++ + if IsReasoningModel(id) != IsReasoningModel(alias) { + t.Errorf("%s and %s are the same model by the vendor's own listing, but we answer "+ + "%v and %v", id, alias, IsReasoningModel(id), IsReasoningModel(alias)) + } + } + } + if checked == 0 { + t.Fatal("no alias pair was compared; the snapshot lost its aliases") + } +} + +func TestTheMistralDriftCheckRedensOnASingleFlippedFlag(t *testing.T) { + t.Parallel() + + snapshot := readMistralListing(t) + const target = "codestral-2508" + entry, ok := snapshot[target] + if !ok { + t.Fatalf("%s left the snapshot; point this test at another non-reasoning model", target) + } + entry.Reasoning = !entry.Reasoning + snapshot[target] = entry + + diffs := mistralListingDiff(snapshot) + var fresh []string + for _, id := range diffs { + if _, known := mistralKnownDrift[id]; !known { + fresh = append(fresh, id) + } + } + if len(fresh) != 1 || fresh[0] != target { + t.Fatalf("want exactly one new divergence naming %s, got %v", target, fresh) + } +} diff --git a/llms/reasoning/testdata/mistral_models.json b/llms/reasoning/testdata/mistral_models.json new file mode 100644 index 000000000..678ca7866 --- /dev/null +++ b/llms/reasoning/testdata/mistral_models.json @@ -0,0 +1,386 @@ +{ + "codestral-2508": { + "reasoning": false, + "aliases": [ + "codestral-latest", + "mistral-code-fim-latest", + "mistral-code-latest" + ] + }, + "codestral-embed": { + "reasoning": false, + "aliases": [ + "codestral-embed-2505" + ] + }, + "codestral-embed-2505": { + "reasoning": false, + "aliases": [ + "codestral-embed" + ] + }, + "codestral-latest": { + "reasoning": false, + "aliases": [ + "codestral-2508", + "mistral-code-fim-latest", + "mistral-code-latest" + ] + }, + "glm-5-2": { + "reasoning": true, + "aliases": [ + "zai-glm-5-2" + ] + }, + "labs-leanstral-1-5": { + "reasoning": true, + "aliases": [ + "labs-leanstral-1-5-1" + ] + }, + "labs-leanstral-1-5-1": { + "reasoning": true, + "aliases": [ + "labs-leanstral-1-5" + ] + }, + "magistral-medium-latest": { + "reasoning": true, + "aliases": [ + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "magistral-small-latest": { + "reasoning": true, + "aliases": [ + "mistral-small-2603", + "mistral-small-latest", + "mistral-vibe-cli-fast" + ] + }, + "ministral-14b-2512": { + "reasoning": false, + "aliases": [ + "ministral-14b-latest" + ] + }, + "ministral-14b-latest": { + "reasoning": false, + "aliases": [ + "ministral-14b-2512" + ] + }, + "ministral-3b-2512": { + "reasoning": false, + "aliases": [ + "ministral-3b-latest" + ] + }, + "ministral-3b-latest": { + "reasoning": false, + "aliases": [ + "ministral-3b-2512" + ] + }, + "ministral-8b-2512": { + "reasoning": false, + "aliases": [ + "ministral-8b-latest" + ] + }, + "ministral-8b-latest": { + "reasoning": false, + "aliases": [ + "ministral-8b-2512" + ] + }, + "mistral-code-fim-latest": { + "reasoning": false, + "aliases": [ + "codestral-2508", + "codestral-latest", + "mistral-code-latest" + ] + }, + "mistral-code-latest": { + "reasoning": false, + "aliases": [ + "codestral-2508", + "codestral-latest", + "mistral-code-fim-latest" + ] + }, + "mistral-embed": { + "reasoning": false, + "aliases": [ + "mistral-embed-2312" + ] + }, + "mistral-embed-2312": { + "reasoning": false, + "aliases": [ + "mistral-embed" + ] + }, + "mistral-large-2512": { + "reasoning": false, + "aliases": [ + "mistral-large-latest" + ] + }, + "mistral-large-latest": { + "reasoning": false, + "aliases": [ + "mistral-large-2512" + ] + }, + "mistral-medium": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-medium-2604": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-medium-3": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-medium-3-5": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-medium-3.5": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-latest", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-medium-latest": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-vibe-cli-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-moderation-2603": { + "reasoning": false, + "aliases": null + }, + "mistral-ocr-2512": { + "reasoning": false, + "aliases": [ + "mistral-ocr-3", + "mistral-ocr-3-0" + ] + }, + "mistral-ocr-3": { + "reasoning": false, + "aliases": [ + "mistral-ocr-2512", + "mistral-ocr-3-0" + ] + }, + "mistral-ocr-3-0": { + "reasoning": false, + "aliases": [ + "mistral-ocr-2512", + "mistral-ocr-3" + ] + }, + "mistral-ocr-4": { + "reasoning": false, + "aliases": [ + "mistral-ocr-4-1", + "mistral-ocr-latest" + ] + }, + "mistral-ocr-4-0": { + "reasoning": false, + "aliases": null + }, + "mistral-ocr-4-1": { + "reasoning": false, + "aliases": [ + "mistral-ocr-4", + "mistral-ocr-latest" + ] + }, + "mistral-ocr-latest": { + "reasoning": false, + "aliases": [ + "mistral-ocr-4", + "mistral-ocr-4-1" + ] + }, + "mistral-small-2603": { + "reasoning": true, + "aliases": [ + "magistral-small-latest", + "mistral-small-latest", + "mistral-vibe-cli-fast" + ] + }, + "mistral-small-latest": { + "reasoning": true, + "aliases": [ + "magistral-small-latest", + "mistral-small-2603", + "mistral-vibe-cli-fast" + ] + }, + "mistral-vibe-cli-fast": { + "reasoning": true, + "aliases": [ + "magistral-small-latest", + "mistral-small-2603", + "mistral-small-latest" + ] + }, + "mistral-vibe-cli-latest": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-with-tools" + ] + }, + "mistral-vibe-cli-with-tools": { + "reasoning": true, + "aliases": [ + "magistral-medium-latest", + "mistral-medium", + "mistral-medium-2604", + "mistral-medium-3", + "mistral-medium-3-5", + "mistral-medium-3.5", + "mistral-medium-latest", + "mistral-vibe-cli-latest" + ] + }, + "voxtral-mini-2602": { + "reasoning": false, + "aliases": [ + "voxtral-mini-latest" + ] + }, + "voxtral-mini-latest": { + "reasoning": false, + "aliases": [ + "voxtral-mini-2602" + ] + }, + "voxtral-mini-realtime-2602": { + "reasoning": false, + "aliases": [ + "voxtral-mini-realtime-latest", + "voxtral-mini-transcribe-realtime-2602" + ] + }, + "voxtral-mini-realtime-latest": { + "reasoning": false, + "aliases": [ + "voxtral-mini-realtime-2602", + "voxtral-mini-transcribe-realtime-2602" + ] + }, + "voxtral-mini-transcribe-realtime-2602": { + "reasoning": false, + "aliases": [ + "voxtral-mini-realtime-2602", + "voxtral-mini-realtime-latest" + ] + }, + "voxtral-mini-tts-2603": { + "reasoning": false, + "aliases": [ + "voxtral-mini-tts-latest" + ] + }, + "voxtral-mini-tts-latest": { + "reasoning": false, + "aliases": [ + "voxtral-mini-tts-2603" + ] + }, + "voxtral-small-2507": { + "reasoning": false, + "aliases": [ + "voxtral-small-latest" + ] + }, + "voxtral-small-latest": { + "reasoning": false, + "aliases": [ + "voxtral-small-2507" + ] + }, + "zai-glm-5-2": { + "reasoning": true, + "aliases": [ + "glm-5-2" + ] + } +} From e5871fc4e4e6d6efcd107010f5852282a9ef0270 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 20:42:54 +0300 Subject: [PATCH 279/618] test(reasoning): pin the effort set gpt-5.6 actually accepts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The vendor's model page documents max on this generation, but the API refuses it and enumerates its own set in the refusal: none, low, medium, high, xhigh — on gpt-5.6, gpt-5.6-sol and gpt-5.6-terra alike, while a nonsense value is refused the same way, so the probe reads what it claims to. Our tables were already right. This records why, so the next reading of the documentation does not quietly widen them. Co-Authored-By: Claude Opus 5 --- llms/reasoning/openai_capability_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index 7bd07b56d..c71c05feb 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -157,3 +157,18 @@ func TestAGenerationDoesNotAnswerForALaterOne(t *testing.T) { }) } } + +func TestTheDocumentedMaxEffortIsNotOnTheWireForGPT56(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5.6", "gpt-5.6-sol", "gpt-5.6-terra"} { + caps := OpenAIReasoningCapsFor(model) + if got := caps.ClampEffort("max"); got != "xhigh" { + t.Errorf("ClampEffort(%q, max) = %q, want xhigh: the vendor enumerates its own set as "+ + "none, low, medium, high, xhigh and refuses max with 400", model, got) + } + if slices.Contains(caps.Efforts, "max") { + t.Errorf("%s advertises max, which the vendor refuses", model) + } + } +} From 923f78b1fb5f019a2b7b9c65f88c9ebf1896042b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 20:42:54 +0300 Subject: [PATCH 280/618] fix(reasoning): catalogue the vision-flash DashScope hybrid qwen3-vl-flash has the same shape as qwen3-vl-plus: a bare call returns no reasoning and 271 characters of answer, enable_thinking:true returns 331 characters of reasoning. Only plus was in the flag-thinker table, so asking flash to think did nothing and said nothing. Co-Authored-By: Claude Opus 5 --- llms/reasoning/qwen_capability.go | 3 ++- llms/reasoning/qwen_capability_test.go | 1 + llms/reasoning/qwen_off_test.go | 2 +- llms/reasoning/qwen_optin_test.go | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 2e527f2f3..f904b919a 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -31,7 +31,8 @@ func (e *ErrThinkingRequiresStream) Error() string { } var qwenFlagThinkers = map[string]bool{ - "qwen-plus": true, "qwen-flash": true, "qwen3-max": true, "qwen3-vl-plus": true, + "qwen-plus": true, "qwen-flash": true, "qwen3-max": true, + "qwen3-vl-plus": true, "qwen3-vl-flash": true, } // QwenThinkingEnabledByFlag reports whether DashScope leaves the model's diff --git a/llms/reasoning/qwen_capability_test.go b/llms/reasoning/qwen_capability_test.go index 375465ba8..c5dda4627 100644 --- a/llms/reasoning/qwen_capability_test.go +++ b/llms/reasoning/qwen_capability_test.go @@ -20,6 +20,7 @@ func TestQwenThinkingRequiresStream(t *testing.T) { {"qwen3-coder-plus", false}, {"qwen3-coder-30b-a3b-instruct", false}, {"qwen3-vl-plus", false}, + {"qwen3-vl-flash", false}, {"qwen3-max", false}, {"qwen3-rerank", false}, {"qwen3-next-80b-a3b-thinking", false}, diff --git a/llms/reasoning/qwen_off_test.go b/llms/reasoning/qwen_off_test.go index ad56c37d9..fcf9d537f 100644 --- a/llms/reasoning/qwen_off_test.go +++ b/llms/reasoning/qwen_off_test.go @@ -18,7 +18,7 @@ func TestQwenHybridsSpellOffWithTheDashScopeFlag(t *testing.T) { func TestQwenHybridsAreReasoningModels(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3-8b", "qwen3-235b-a22b", "dashscope/qwen3-30b-a3b", "qwen3-vl-plus"} { + for _, model := range []string{"qwen3-8b", "qwen3-235b-a22b", "dashscope/qwen3-30b-a3b", "qwen3-vl-plus", "qwen3-vl-flash"} { if !IsReasoningModel(model) { t.Errorf("IsReasoningModel(%q) = false, want true", model) } diff --git a/llms/reasoning/qwen_optin_test.go b/llms/reasoning/qwen_optin_test.go index 8461c9d69..a5a802189 100644 --- a/llms/reasoning/qwen_optin_test.go +++ b/llms/reasoning/qwen_optin_test.go @@ -18,6 +18,7 @@ func TestQwenCommercialHybridsThinkOnlyWhenAsked(t *testing.T) { {"qwen3.7-plus", false}, {"qwen3-coder-plus", false}, {"qwen3-vl-plus", true}, + {"qwen3-vl-flash", true}, {"openrouter/qwen/qwen-plus", false}, {"qwen-plus-latest", false}, } From 870c4dc35f4f9b35f42940ff772b86ce288e8968 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 21:11:36 +0300 Subject: [PATCH 281/618] fix(reasoning): disable thinking the way Zhipu and MiniMax actually accept MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both were resolved to the effort token none, and neither turns off that way. GLM below 5.2 answers 200 and keeps thinking — 640 characters bare, 489 with none — because the vendor added reasoning_effort only in 5.2. MiniMax M3 never sees the field at all: the gateway refuses it before the network, so asking for off returned a hard error rather than a quiet no-op. Both take thinking:{type:"disabled"}, which MiniMax accepts today with no bypass. The wire gets its own OffWire so the two vendors stop borrowing a token that means nothing to them, and GLM 5.2 keeps the effort path it does support. Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 39 +++++++++++++---------- llms/openai/openaillm.go | 2 ++ llms/openai/thinking_object_off_test.go | 31 ++++++++++++++++++ llms/reasoning/effort_wire_test.go | 2 +- llms/reasoning/off.go | 22 +++++++++++++ llms/reasoning/off_test.go | 25 +++++++++++++++ 6 files changed, 103 insertions(+), 18 deletions(-) create mode 100644 llms/openai/thinking_object_off_test.go diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 6a63ab11c..4eda45c59 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -41,25 +41,30 @@ type ReasoningOptions struct { MaxTokens int `json:"max_tokens,omitempty"` } +type ThinkingOptions struct { + Type string `json:"type"` +} + // ChatRequest is a request to complete a chat completion.. type ChatRequest struct { - Model string `json:"model"` - Messages []*ChatMessage `json:"messages"` - Temperature *float64 `json:"temperature,omitempty"` - TopK *int `json:"top_k,omitempty"` - TopP *float64 `json:"top_p,omitempty"` - MinP *float64 `json:"min_p,omitempty"` - EnableThinking *bool `json:"enable_thinking,omitempty"` - MaxTokens *int `json:"max_tokens,omitempty"` - MaxCompletionTokens *int `json:"max_completion_tokens,omitempty"` - N *int `json:"n,omitempty"` - StopWords []string `json:"stop,omitempty"` - Stream bool `json:"stream,omitempty"` - FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"` - PresencePenalty *float64 `json:"presence_penalty,omitempty"` - RepetitionPenalty *float64 `json:"repetition_penalty,omitempty"` - Verbosity *string `json:"verbosity,omitempty"` - Seed *int `json:"seed,omitempty"` + Model string `json:"model"` + Messages []*ChatMessage `json:"messages"` + Temperature *float64 `json:"temperature,omitempty"` + TopK *int `json:"top_k,omitempty"` + TopP *float64 `json:"top_p,omitempty"` + MinP *float64 `json:"min_p,omitempty"` + EnableThinking *bool `json:"enable_thinking,omitempty"` + Thinking *ThinkingOptions `json:"thinking,omitempty"` + MaxTokens *int `json:"max_tokens,omitempty"` + MaxCompletionTokens *int `json:"max_completion_tokens,omitempty"` + N *int `json:"n,omitempty"` + StopWords []string `json:"stop,omitempty"` + Stream bool `json:"stream,omitempty"` + FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"` + PresencePenalty *float64 `json:"presence_penalty,omitempty"` + RepetitionPenalty *float64 `json:"repetition_penalty,omitempty"` + Verbosity *string `json:"verbosity,omitempty"` + Seed *int `json:"seed,omitempty"` // ReasoningEffort enables reasoning mode for models that support it. // Set this field when you want to use the legacy reasoning configuration. diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index fd12fc1cd..1b5fba08a 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -425,6 +425,8 @@ func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptio case reasoning.OffDisableDashScope: thinkingOff := false req.EnableThinking = &thinkingOff + case reasoning.OffDisableThinkingObject: + req.Thinking = &openaiclient.ThinkingOptions{Type: "disabled"} } return nil } diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go new file mode 100644 index 000000000..cd7501492 --- /dev/null +++ b/llms/openai/thinking_object_off_test.go @@ -0,0 +1,31 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) { + t.Parallel() + + for _, model := range []string{"glm-5.1", "glm-4.6", "minimax-m3"} { + body := sendForWire(t, model, llms.WithReasoningDisabled()) + if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { + t.Errorf("%s: body carries no disabled thinking object: %s", model, body) + } + if strings.Contains(body, "reasoning_effort") { + t.Errorf("%s: body still carries reasoning_effort, which the gateway cuts "+ + "for MiniMax and the vendor ignores below GLM-5.2: %s", model, body) + } + } + + effortSide := sendForWire(t, "glm-5.2", llms.WithReasoningDisabled()) + if strings.Contains(effortSide, `"thinking"`) { + t.Errorf("glm-5.2 takes its disable on the effort field, not the object: %s", effortSide) + } + if !strings.Contains(effortSide, `"reasoning_effort":"none"`) { + t.Errorf("glm-5.2 lost its disable token: %s", effortSide) + } +} diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index eabeecbb1..ae43593da 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -68,7 +68,7 @@ func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { {"kimi-k2-thinking", OffUnsupported}, {"kimi-k3", OffEffortNone}, {"deepseek-v4-pro", OffEffortNone}, - {"glm-5-turbo", OffEffortNone}, + {"glm-5-turbo", OffDisableThinkingObject}, } { if got := ResolveOff(tc.model, ProviderOpenAI); got != tc.want { t.Errorf("ResolveOff(%q, ProviderOpenAI) = %v, want %v", tc.model, got, tc.want) diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index b14ab378d..5541053eb 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -34,6 +34,8 @@ const ( OffEffortNone // OffDisableDashScope → DashScope enable_thinking:false. OffDisableDashScope + // OffDisableThinkingObject → thinking:{type:"disabled"} on an OpenAI-shaped door. + OffDisableThinkingObject // OffUnsupported: a known mandatory-thinking model that cannot be disabled // (adaptive-only Claude, OpenAI o-series). The adapter returns a typed error. OffUnsupported @@ -93,6 +95,9 @@ func ResolveOff(model string, p Provider) OffWire { if QwenThinkingRequiresStream(model) { return OffDisableDashScope } + if disablesByThinkingObject(model) { + return OffDisableThinkingObject + } // The disable token rides on the effort field, so a door that refuses that // field cannot express "off" at all. if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { @@ -138,6 +143,23 @@ func offByOmission(model string) bool { return false } +func disablesByThinkingObject(model string) bool { + for _, form := range modelSpellings(model) { + if hasGeneration(form, "minimax-m3") { + return true + } + if hasGeneration(form, "glm-5.2") { + continue + } + for _, generation := range []string{"glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1"} { + if hasGeneration(form, generation) { + return true + } + } + } + return false +} + func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "glm-5.3") || diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 8e1821957..939a58e2c 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -51,3 +51,28 @@ func TestResolveOff(t *testing.T) { } } } + +func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "minimax-m3", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffDisableThinkingObject { + t.Errorf("ResolveOff(%q) = %v, want the thinking object: the effort token is either "+ + "ignored by the vendor or cut before it", model, got) + } + } + + for model, want := range map[string]OffWire{ + "glm-5.2": OffEffortNone, + "glm-5.3": OffUnsupported, + "minimax-m2": OffUnsupported, + "kimi-k3": OffEffortNone, + "deepseek-v4": OffEffortNone, + } { + if got := ResolveOff(model, ProviderOpenAI); got != want { + t.Errorf("ResolveOff(%q) = %v, want %v", model, got, want) + } + } +} From b166c022661e48d97b29e1996461c6bf30b01f7b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 21:20:50 +0300 Subject: [PATCH 282/618] fix(reasoning): treat the grok-build alias as the model it points at MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit grok-build-latest is grok-4.5 under another name, and the prefix rule written for grok-build-0.1 was stripping its effort field. The vendor answers low with 47 reasoning tokens and high with 73, and refuses none outright, so the field belongs on the wire and the model belongs among the ones that cannot be switched off. The exception is by exact name: grok-build-0.1 and grok-code-fast-1 refuse the field, measured on both. grok-4.20-multi-agent stays as it is. The vendor will not serve it here at all — "Multi Agent requests are not allowed on chat completions" — so opening the field would describe a route this door cannot reach. Co-Authored-By: Claude Opus 5 --- llms/reasoning/effort_wire.go | 3 +++ llms/reasoning/effort_wire_test.go | 19 +++++++++++++++++++ llms/reasoning/off.go | 1 + 3 files changed, 23 insertions(+) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 980ce5a36..4fa085768 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -40,6 +40,9 @@ func AcceptsEffortWire(model string) bool { if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { return false } + if form == "grok-build-latest" { + return true + } if strings.HasPrefix(form, "grok-code-fast") || strings.HasPrefix(form, "grok-build") || strings.HasPrefix(form, "grok-4.20") { diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index ae43593da..2daa02598 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -75,3 +75,22 @@ func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { } } } + +func TestTheGrokBuildAliasThatIsReallyGrok45(t *testing.T) { + t.Parallel() + + if !AcceptsEffortWire("grok-build-latest") { + t.Error("grok-build-latest drops the effort field, but the vendor answers low with 47 " + + "reasoning tokens and high with 73") + } + if got := ResolveOff("grok-build-latest", ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(grok-build-latest) = %v, want unsupported: the vendor refuses "+ + "effort none on this model", got) + } + + for _, model := range []string{"grok-build-0.1", "grok-code-fast-1"} { + if AcceptsEffortWire(model) { + t.Errorf("%s carries the effort field, but the vendor refuses it by name", model) + } + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 5541053eb..991d8ecf8 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -163,6 +163,7 @@ func disablesByThinkingObject(model string) bool { func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "glm-5.3") || + form == "grok-build-latest" || strings.HasPrefix(form, "grok-4.5") || strings.HasPrefix(form, "grok-4.6") || strings.HasPrefix(form, "minimax-m2") || From c25e3d17a97f078a83a76a9ec2b870d3b6b99dff Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 21:23:12 +0300 Subject: [PATCH 283/618] fix(reasoning): recognise the two alias names the listings carry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit glm-flash-latest points at glm-5.3-flash, which answers an explicit disable with 159 characters of reasoning and refuses the none token outright; our detector knew only the exact glm-latest, so the alias resolved to nothing at all. labs-leanstral is marked reasoning in Mistral's own listing. It cannot be confirmed by call — the vendor lists it and then refuses to serve it — so the listing is the whole basis, and the drift table that carried it as an accounted divergence is now empty: our tables and that listing agree on all fifty names. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 17 +++++++++++++++++ llms/reasoning/mistral_listing_drift_test.go | 5 +---- llms/reasoning/off.go | 1 + llms/reasoning/reasoning.go | 6 +++++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 05776b611..49e04cab0 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -534,3 +534,20 @@ func TestTheMistralListingNamesWeMissed(t *testing.T) { t.Error("the two live spellings of one model disagree") } } + +func TestAliasNamesTheVendorListingsCarry(t *testing.T) { + t.Parallel() + + if !IsReasoningModel("labs-leanstral-1-5") || !IsReasoningModel("labs-leanstral-1-5-1") { + t.Error("the Mistral listing marks labs-leanstral as reasoning, and the drift test " + + "carries it as an accounted divergence only because the vendor will not serve it") + } + + if !IsReasoningModel("glm-flash-latest") { + t.Error("glm-flash-latest is the alias of glm-5.3-flash, which reasons") + } + if got := ResolveOff("glm-flash-latest", ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(glm-flash-latest) = %v, want unsupported: its target answers "+ + "an explicit disable with 159 characters of reasoning", got) + } +} diff --git a/llms/reasoning/mistral_listing_drift_test.go b/llms/reasoning/mistral_listing_drift_test.go index 6dc568f46..617a4ed73 100644 --- a/llms/reasoning/mistral_listing_drift_test.go +++ b/llms/reasoning/mistral_listing_drift_test.go @@ -14,10 +14,7 @@ type mistralEntry struct { const mistralSnapshot = "testdata/mistral_models.json" -var mistralKnownDrift = map[string]string{ - "labs-leanstral-1-5": "Labs-модель, вендор отказывает в обслуживании: замерить нельзя", - "labs-leanstral-1-5-1": "Labs-модель, вендор отказывает в обслуживании: замерить нельзя", -} +var mistralKnownDrift = map[string]string{} func readMistralListing(t *testing.T) map[string]mistralEntry { t.Helper() diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 991d8ecf8..4044804fa 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -168,6 +168,7 @@ func mandatoryThinking(model string) bool { strings.HasPrefix(form, "grok-4.6") || strings.HasPrefix(form, "minimax-m2") || form == "glm-latest" || + form == "glm-flash-latest" || strings.HasPrefix(form, "kimi-k2-thinking") || strings.HasPrefix(form, "kimi-k2.7-code") || strings.HasPrefix(form, "gpt-oss") || diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 548db9f0e..d82a9ecc2 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -270,7 +270,11 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.HasPrefix(glm, "glm-4.6") || strings.HasPrefix(glm, "glm-4.7") || strings.HasPrefix(glm, "glm-5") || - glm == "glm-latest" { + glm == "glm-latest" || glm == "glm-flash-latest" { + return true + } + + if strings.HasPrefix(modelLower, "labs-leanstral") { return true } From 4d72434dec1dc7b4ec52cca8e58e9a39b0ce592b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 21:24:52 +0300 Subject: [PATCH 284/618] test(anthropic): pin that Fable takes a forced tool choice The vendor's page for Fable 5.1 says any and tool are refused at every mode, and the obvious way to honour that is a substring gate on claude-fable-5. That would break the model we can actually reach: claude-fable-5 answers 200 with a tool call for auto, for any, and for a named tool alike. Fable 5.1 and Mythos 5.1 have no route here, so the restriction cannot be checked and must not be guessed onto the family. Co-Authored-By: Claude Opus 5 --- llms/anthropic/tool_choice_wire_test.go | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/llms/anthropic/tool_choice_wire_test.go b/llms/anthropic/tool_choice_wire_test.go index 3f6e65283..f526b7713 100644 --- a/llms/anthropic/tool_choice_wire_test.go +++ b/llms/anthropic/tool_choice_wire_test.go @@ -158,3 +158,36 @@ func TestAFinishedTurnWithNoBlockIsAnAnswer(t *testing.T) { require.ErrorIs(t, err, anthropic.ErrEmptyResponse) }) } + +func TestFableTakesAForcedToolChoiceWithoutThinking(t *testing.T) { + t.Parallel() + + const reply = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + + var sent string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + sent = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, reply) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test"), anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-fable-5")) + require.NoError(t, err) + + tool := llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "calc", Description: "multiply", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }} + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "17*23?")}, + llms.WithTools([]llms.Tool{tool}), llms.WithToolChoice("any")) + require.NoError(t, err, "the vendor answers 200 with a tool call for any, auto and a named "+ + "tool on this model, so a local refusal would take away working behaviour") + assert.Contains(t, sent, `"tool_choice":{"type":"any"}`) +} From 7d2d06f5a22caebe5204d2aae2052a181447a211 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 23:17:25 +0300 Subject: [PATCH 285/618] fix(bedrock): keep the caller's tools when the turn replays tool blocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converse has no none in its toolChoice union, so forbidding tools was expressed by leaving toolConfig out of the request. A turn whose history already carries toolUse and toolResult blocks is rejected without it — "The toolConfig field must be defined when using toolUse and toolResult content blocks" — so an agent loop that asks the model to stop calling tools got a vendor 400 instead of an answer. Tools now stay on the wire whenever the history carries tool blocks, and the choice degrades to auto, the closest this door can express. A turn with a clean history still offers no tools at all. Verified live on us.anthropic.claude-sonnet-4-5-20250929-v1:0 (PAGI-157). Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_tool_config_test.go | 93 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 15 ++- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 llms/bedrock/converse_tool_config_test.go diff --git a/llms/bedrock/converse_tool_config_test.go b/llms/bedrock/converse_tool_config_test.go new file mode 100644 index 000000000..d6fc0a147 --- /dev/null +++ b/llms/bedrock/converse_tool_config_test.go @@ -0,0 +1,93 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func converseAgentTurnOnWire(t *testing.T, choice any) string { + t.Helper() + + const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + tool := llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }, + } + + history := []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{ + llms.TextContent{Text: "what is the weather in Paris?"}, + }}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "call_1", Type: "function", FunctionCall: &llms.FunctionCall{ + Name: "get_weather", + Arguments: `{"city":"Paris"}`, + }}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "call_1", Name: "get_weather", Content: "20C"}, + }}, + } + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + opts := []llms.CallOption{llms.WithTools([]llms.Tool{tool})} + if choice != nil { + opts = append(opts, llms.WithToolChoice(choice)) + } + if _, err := llm.GenerateContent(context.Background(), history, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestConverseKeepsToolsWhenTheHistoryCarriesToolBlocks(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + choice any + }{ + {"none as a bare string", "none"}, + {"none as a struct", llms.ToolChoice{Type: "none"}}, + {"none as a raw map", map[string]any{"type": "none"}}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + body := converseAgentTurnOnWire(t, tc.choice) + if !strings.Contains(body, `"toolConfig"`) { + t.Fatalf("a turn carrying tool blocks needs toolConfig, got body: %s", body) + } + if !strings.Contains(body, `"get_weather"`) { + t.Fatalf("toolConfig must carry the caller's tools, got body: %s", body) + } + if !strings.Contains(body, `"auto":{}`) { + t.Fatalf("converse has no none, so the choice degrades to auto, got body: %s", body) + } + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index df9ff3be5..c8b65135a 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -143,7 +143,8 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti converseInput.System = systemPrompts } - if kind, _ := llms.ClassifyToolChoice(input.ToolChoice); len(input.Tools) > 0 && kind != llms.ToolChoiceNone { + kind, _ := llms.ClassifyToolChoice(input.ToolChoice) + if len(input.Tools) > 0 && (kind != llms.ToolChoiceNone || carriesToolBlocks(converseMessages)) { toolConfig, err := c.convertToolsToToolConfig(input.Tools, input.ToolChoice) if err != nil { return nil, fmt.Errorf("failed to convert tools: %w", err) @@ -644,6 +645,18 @@ func (c *ConverseClient) convertToolsToToolConfig(tools []llms.Tool, choice any) // converseToolChoice carries the caller's choice to the wire. An unset or // unrecognized choice leaves the decision to the model. +func carriesToolBlocks(messages []types.Message) bool { + for _, message := range messages { + for _, block := range message.Content { + switch block.(type) { + case *types.ContentBlockMemberToolUse, *types.ContentBlockMemberToolResult: + return true + } + } + } + return false +} + func converseToolChoice(choice any) types.ToolChoice { switch kind, name := llms.ClassifyToolChoice(choice); kind { case llms.ToolChoiceNamed: From fbfa1444ba77953d3087946a7df645d90338866f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 23:31:33 +0300 Subject: [PATCH 286/618] refactor(anthropic): route request credentials through an authorizer The client held the API key as a string and wrote the x-api-key header inline, so no other credential shape could reach the wire. Requests now authorize through an interface, and setHeaders reports the error a credential that has to be minted can produce. Behaviour is unchanged: New still takes the key and installs the static authorizer. Refs: PAGI-205 Co-Authored-By: Claude Opus 5 --- .../internal/anthropicclient/anthropicclient.go | 16 +++++++++++----- llms/anthropic/internal/anthropicclient/auth.go | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 llms/anthropic/internal/anthropicclient/auth.go diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index 838af4f48..a36f345f6 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -26,7 +26,7 @@ var ErrEmptyResponse = errors.New("empty response") // Client is a client for the Anthropic API. type Client struct { - token string + auth authorizer Model string baseURL string @@ -80,7 +80,7 @@ func WithAnthropicBetaHeader(val string) Option { func New(token string, model string, baseURL string, opts ...Option) (*Client, error) { c := &Client{ Model: model, - token: token, + auth: staticKey(token), baseURL: strings.TrimSuffix(baseURL, "/"), httpClient: httputil.DefaultClient, } @@ -197,9 +197,11 @@ func (c *Client) CreateMessage(ctx context.Context, r *MessageRequest) (*Message return resp, nil } -func (c *Client) setHeaders(req *http.Request, betaHeaders []string) { +func (c *Client) setHeaders(ctx context.Context, req *http.Request, betaHeaders []string) error { req.Header.Set("Content-Type", "application/json") - req.Header.Set("x-api-key", c.token) //nolint:canonicalheader + if err := c.auth.authorize(ctx, req); err != nil { + return err + } // This is necessary as per https://docs.anthropic.com/en/api/versioning // If this changes frequently enough we should expose it as an option.. @@ -225,6 +227,8 @@ func (c *Client) setHeaders(req *http.Request, betaHeaders []string) { if len(validHeaders) > 0 { req.Header.Set("anthropic-beta", strings.Join(validHeaders, ",")) // nolint:canonicalheader } + + return nil } func (c *Client) do(ctx context.Context, path string, payloadBytes []byte) (*http.Response, error) { @@ -249,7 +253,9 @@ func (c *Client) request( return nil, fmt.Errorf("create request: %w", err) } - c.setHeaders(req, betaHeaders) + if err := c.setHeaders(ctx, req, betaHeaders); err != nil { + return nil, err + } resp, err := c.httpClient.Do(req) if err != nil { diff --git a/llms/anthropic/internal/anthropicclient/auth.go b/llms/anthropic/internal/anthropicclient/auth.go new file mode 100644 index 000000000..e1ae26944 --- /dev/null +++ b/llms/anthropic/internal/anthropicclient/auth.go @@ -0,0 +1,17 @@ +package anthropicclient + +import ( + "context" + "net/http" +) + +type authorizer interface { + authorize(ctx context.Context, req *http.Request) error +} + +type staticKey string + +func (k staticKey) authorize(_ context.Context, req *http.Request) error { + req.Header.Set("x-api-key", string(k)) //nolint:canonicalheader + return nil +} From aac44f8b09e27142a32504e6b200ba198832925e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 23:35:42 +0300 Subject: [PATCH 287/618] feat(anthropic): exchange an identity token for short-lived credentials Deployments that forbid long-lived secrets could not reach Anthropic: the client only knew how to send a static key. It can now mint credentials by exchanging the workload's OIDC assertion at the vendor's token endpoint and sending the result as a bearer token. The assertion source is read on every exchange rather than cached, and the exchange is serialized so concurrent callers mint one token instead of two. Tests pin the wire shape, reuse before expiry, refresh with a re-read assertion, single exchange under concurrency, and that a failed exchange stops the downstream request. Refs: PAGI-205 Co-Authored-By: Claude Opus 5 --- .../anthropicclient/anthropicclient.go | 13 + .../internal/anthropicclient/federation.go | 183 +++++++++++ .../anthropicclient/federation_test.go | 292 ++++++++++++++++++ 3 files changed, 488 insertions(+) create mode 100644 llms/anthropic/internal/anthropicclient/federation.go create mode 100644 llms/anthropic/internal/anthropicclient/federation_test.go diff --git a/llms/anthropic/internal/anthropicclient/anthropicclient.go b/llms/anthropic/internal/anthropicclient/anthropicclient.go index a36f345f6..50ad392fa 100644 --- a/llms/anthropic/internal/anthropicclient/anthropicclient.go +++ b/llms/anthropic/internal/anthropicclient/anthropicclient.go @@ -10,6 +10,7 @@ import ( "net/http" "slices" "strings" + "time" "github.com/vxcontrol/langchaingo/httputil" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -76,6 +77,18 @@ func WithAnthropicBetaHeader(val string) Option { } } +// WithFederation authenticates with short-lived tokens exchanged from the +// workload's identity provider, instead of a static API key. +func WithFederation(cfg FederationConfig) Option { + return func(c *Client) error { + if err := cfg.validate(); err != nil { + return err + } + c.auth = &federatedAuth{cfg: cfg, client: c, now: time.Now} + return nil + } +} + // New returns a new Anthropic client. func New(token string, model string, baseURL string, opts ...Option) (*Client, error) { c := &Client{ diff --git a/llms/anthropic/internal/anthropicclient/federation.go b/llms/anthropic/internal/anthropicclient/federation.go new file mode 100644 index 000000000..85754210e --- /dev/null +++ b/llms/anthropic/internal/anthropicclient/federation.go @@ -0,0 +1,183 @@ +package anthropicclient + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "net/http" + "os" + "strings" + "sync" + "time" +) + +const ( + jwtBearerGrantType = "urn:ietf:params:oauth:grant-type:jwt-bearer" + tokenExchangePath = "/oauth/token" + tokenRefreshSkew = 60 * time.Second +) + +// ErrFederationIncomplete is returned when a federation config omits a field the +// token exchange requires. +var ErrFederationIncomplete = errors.New("federation config is incomplete") + +// AssertionSource yields the identity token to exchange. It is called for every +// exchange, not once per client. +type AssertionSource func(ctx context.Context) (string, error) + +// AssertionFromFile reads the identity token from path on every exchange. +func AssertionFromFile(path string) AssertionSource { + return func(context.Context) (string, error) { + body, err := os.ReadFile(path) + if err != nil { + return "", fmt.Errorf("read identity token: %w", err) + } + return strings.TrimSpace(string(body)), nil + } +} + +// AssertionFromString yields a fixed identity token. +func AssertionFromString(assertion string) AssertionSource { + return func(context.Context) (string, error) { return assertion, nil } +} + +// FederationConfig names the federation rule a workload exchanges its identity +// token under, and where that token comes from. +type FederationConfig struct { + RuleID string + OrganizationID string + ServiceAccountID string + // WorkspaceID scopes the minted token; the literal "default" names the + // organization's default workspace. Omitted from the exchange when empty. + WorkspaceID string + Assertion AssertionSource +} + +func (cfg FederationConfig) validate() error { + missing := []string{} + if cfg.RuleID == "" { + missing = append(missing, "rule id") + } + if cfg.OrganizationID == "" { + missing = append(missing, "organization id") + } + if cfg.ServiceAccountID == "" { + missing = append(missing, "service account id") + } + if cfg.Assertion == nil { + missing = append(missing, "assertion source") + } + if len(missing) > 0 { + return fmt.Errorf("%w: missing %s", ErrFederationIncomplete, strings.Join(missing, ", ")) + } + return nil +} + +type federatedAuth struct { + cfg FederationConfig + client *Client + now func() time.Time + + mu sync.Mutex + token string + expiresAt time.Time +} + +func (f *federatedAuth) authorize(ctx context.Context, req *http.Request) error { + token, err := f.accessToken(ctx) + if err != nil { + return err + } + req.Header.Set("Authorization", "Bearer "+token) + return nil +} + +func (f *federatedAuth) accessToken(ctx context.Context) (string, error) { + f.mu.Lock() + defer f.mu.Unlock() + + if f.token != "" && f.now().Add(tokenRefreshSkew).Before(f.expiresAt) { + return f.token, nil + } + + assertion, err := f.cfg.Assertion(ctx) + if err != nil { + return "", err + } + if assertion == "" { + return "", fmt.Errorf("%w: assertion source returned an empty token", ErrFederationIncomplete) + } + + token, lifetime, err := f.exchange(ctx, assertion) + if err != nil { + return "", err + } + + f.token = token + f.expiresAt = f.now().Add(lifetime) + return token, nil +} + +type tokenExchangePayload struct { + GrantType string `json:"grant_type"` + Assertion string `json:"assertion"` + FederationRuleID string `json:"federation_rule_id"` + OrganizationID string `json:"organization_id"` + ServiceAccountID string `json:"service_account_id"` + WorkspaceID string `json:"workspace_id,omitempty"` +} + +type tokenExchangeResponse struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + ExpiresIn int `json:"expires_in"` + Scope string `json:"scope"` +} + +func (f *federatedAuth) exchange(ctx context.Context, assertion string) (string, time.Duration, error) { + payload, err := json.Marshal(tokenExchangePayload{ + GrantType: jwtBearerGrantType, + Assertion: assertion, + FederationRuleID: f.cfg.RuleID, + OrganizationID: f.cfg.OrganizationID, + ServiceAccountID: f.cfg.ServiceAccountID, + WorkspaceID: f.cfg.WorkspaceID, + }) + if err != nil { + return "", 0, fmt.Errorf("marshal token exchange: %w", err) + } + + base := f.client.baseURL + if base == "" { + base = DefaultBaseURL + } + + url := base + tokenExchangePath + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(payload)) + if err != nil { + return "", 0, fmt.Errorf("create token exchange request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + + resp, err := f.client.httpClient.Do(req) + if err != nil { + return "", 0, fmt.Errorf("send token exchange request: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return "", 0, fmt.Errorf("token exchange failed: %w", f.client.decodeError(resp)) + } + + var exchanged tokenExchangeResponse + if err := json.NewDecoder(resp.Body).Decode(&exchanged); err != nil { + return "", 0, fmt.Errorf("decode token exchange: %w", err) + } + if exchanged.AccessToken == "" { + return "", 0, errors.New("token exchange returned an empty access token") + } + + return exchanged.AccessToken, time.Duration(exchanged.ExpiresIn) * time.Second, nil +} diff --git a/llms/anthropic/internal/anthropicclient/federation_test.go b/llms/anthropic/internal/anthropicclient/federation_test.go new file mode 100644 index 000000000..0f28c2cf7 --- /dev/null +++ b/llms/anthropic/internal/anthropicclient/federation_test.go @@ -0,0 +1,292 @@ +package anthropicclient + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "sync" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +type federationStub struct { + mu sync.Mutex + + exchanges int + assertions []string + authHeaders []string + apiKeyHeaders []string + payloads []tokenExchangePayload + + lifetime int + exchangeStatus int + server *httptest.Server +} + +func newFederationStub(t *testing.T) *federationStub { + t.Helper() + + s := &federationStub{lifetime: 3600, exchangeStatus: http.StatusOK} + mux := http.NewServeMux() + mux.HandleFunc("/v1/oauth/token", func(w http.ResponseWriter, r *http.Request) { + s.mu.Lock() + defer s.mu.Unlock() + + var payload tokenExchangePayload + require.NoError(t, json.NewDecoder(r.Body).Decode(&payload)) + s.exchanges++ + s.assertions = append(s.assertions, payload.Assertion) + s.payloads = append(s.payloads, payload) + + if s.exchangeStatus != http.StatusOK { + w.WriteHeader(s.exchangeStatus) + _, _ = w.Write([]byte(`{"error":{"type":"authentication_error","message":"Authentication failed"}}`)) + return + } + + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(tokenExchangeResponse{ + AccessToken: "sk-ant-oat01-" + payload.Assertion, + TokenType: "Bearer", + ExpiresIn: s.lifetime, + Scope: "workspace:inference", + }) + }) + mux.HandleFunc("/v1/models", func(w http.ResponseWriter, r *http.Request) { + s.mu.Lock() + s.authHeaders = append(s.authHeaders, r.Header.Get("Authorization")) + s.apiKeyHeaders = append(s.apiKeyHeaders, r.Header.Get("x-api-key")) + s.mu.Unlock() + + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"data":[]}`)) + }) + + s.server = httptest.NewServer(mux) + t.Cleanup(s.server.Close) + return s +} + +func (s *federationStub) counts() (exchanges int, assertions, auth, apiKey []string) { + s.mu.Lock() + defer s.mu.Unlock() + return s.exchanges, append([]string(nil), s.assertions...), + append([]string(nil), s.authHeaders...), append([]string(nil), s.apiKeyHeaders...) +} + +func (s *federationStub) client(t *testing.T, cfg FederationConfig) (*Client, *federatedAuth) { + t.Helper() + + c, err := New("", "claude-sonnet-5", s.server.URL+"/v1", WithFederation(cfg)) + require.NoError(t, err) + + auth, ok := c.auth.(*federatedAuth) + require.True(t, ok, "federation must install the federated authorizer") + return c, auth +} + +func fixedAssertion(value string) AssertionSource { + return AssertionFromString(value) +} + +func TestFederationSendsBearerInsteadOfAPIKey(t *testing.T) { + t.Parallel() + + stub := newFederationStub(t) + c, _ := stub.client(t, FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "11111111-1111-1111-1111-111111111111", + ServiceAccountID: "svac_account", + WorkspaceID: "wrkspc_one", + Assertion: fixedAssertion("jwt-one"), + }) + + resp, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + + exchanges, _, auth, apiKey := stub.counts() + require.Equal(t, 1, exchanges) + require.Equal(t, []string{"Bearer sk-ant-oat01-jwt-one"}, auth) + require.Equal(t, []string{""}, apiKey, "a federated request must not carry the static key header") + + stub.mu.Lock() + sent := stub.payloads[0] + stub.mu.Unlock() + require.Equal(t, jwtBearerGrantType, sent.GrantType) + require.Equal(t, "fdrl_rule", sent.FederationRuleID) + require.Equal(t, "11111111-1111-1111-1111-111111111111", sent.OrganizationID) + require.Equal(t, "svac_account", sent.ServiceAccountID) + require.Equal(t, "wrkspc_one", sent.WorkspaceID) +} + +func TestFederationOmitsWorkspaceWhenUnset(t *testing.T) { + t.Parallel() + + stub := newFederationStub(t) + c, _ := stub.client(t, FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "org", + ServiceAccountID: "svac_account", + Assertion: fixedAssertion("jwt"), + }) + + resp, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + + stub.mu.Lock() + raw, err := json.Marshal(stub.payloads[0]) + stub.mu.Unlock() + require.NoError(t, err) + + var body map[string]any + require.NoError(t, json.Unmarshal(raw, &body)) + _, present := body["workspace_id"] + require.False(t, present, "an unset workspace must stay off the exchange body") +} + +func TestFederationReusesTokenUntilItNearsExpiry(t *testing.T) { + t.Parallel() + + stub := newFederationStub(t) + c, auth := stub.client(t, FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "org", + ServiceAccountID: "svac_account", + Assertion: fixedAssertion("jwt"), + }) + + now := time.Now() + auth.now = func() time.Time { return now } + + for range 3 { + resp, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + } + + exchanges, _, _, _ := stub.counts() + require.Equal(t, 1, exchanges, "a live token must be reused rather than exchanged again") +} + +func TestFederationRefreshesWithAFreshAssertion(t *testing.T) { + t.Parallel() + + dir := t.TempDir() + path := filepath.Join(dir, "token") + require.NoError(t, os.WriteFile(path, []byte("jwt-first\n"), 0o600)) + + stub := newFederationStub(t) + c, auth := stub.client(t, FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "org", + ServiceAccountID: "svac_account", + Assertion: AssertionFromFile(path), + }) + + now := time.Now() + auth.now = func() time.Time { return now } + + resp, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + + require.NoError(t, os.WriteFile(path, []byte("jwt-second\n"), 0o600)) + now = now.Add(time.Duration(stub.lifetime) * time.Second) + + resp, err = c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + + exchanges, assertions, auths, _ := stub.counts() + require.Equal(t, 2, exchanges, "an expired token must be exchanged again") + require.Equal(t, []string{"jwt-first", "jwt-second"}, assertions, + "each exchange must re-read the assertion source") + require.Equal(t, []string{"Bearer sk-ant-oat01-jwt-first", "Bearer sk-ant-oat01-jwt-second"}, auths) +} + +func TestFederationExchangesOnceUnderConcurrency(t *testing.T) { + t.Parallel() + + stub := newFederationStub(t) + c, _ := stub.client(t, FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "org", + ServiceAccountID: "svac_account", + Assertion: fixedAssertion("jwt"), + }) + + var wg sync.WaitGroup + for range 8 { + wg.Add(1) + go func() { + defer wg.Done() + resp, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + if err == nil { + _ = resp.Body.Close() + } + }() + } + wg.Wait() + + exchanges, _, auths, _ := stub.counts() + require.Equal(t, 1, exchanges, "concurrent callers must share one exchange, not race two") + require.Len(t, auths, 8) +} + +func TestFederationReportsExchangeFailure(t *testing.T) { + t.Parallel() + + stub := newFederationStub(t) + stub.exchangeStatus = http.StatusUnauthorized + + c, _ := stub.client(t, FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "org", + ServiceAccountID: "svac_account", + Assertion: fixedAssertion("jwt"), + }) + + _, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.Error(t, err) + require.Contains(t, err.Error(), "token exchange failed") + require.Contains(t, err.Error(), "Authentication failed") + + _, _, auths, _ := stub.counts() + require.Empty(t, auths, "a failed exchange must not send the downstream request") +} + +func TestFederationRejectsIncompleteConfig(t *testing.T) { + t.Parallel() + + _, err := New("", "claude-sonnet-5", "https://example.invalid/v1", WithFederation(FederationConfig{ + RuleID: "fdrl_rule", + })) + require.ErrorIs(t, err, ErrFederationIncomplete) + require.Contains(t, err.Error(), "organization id") + require.Contains(t, err.Error(), "service account id") + require.Contains(t, err.Error(), "assertion source") +} + +func TestStaticKeyStillSendsAPIKeyHeader(t *testing.T) { + t.Parallel() + + stub := newFederationStub(t) + c, err := New("sk-ant-static", "claude-sonnet-5", stub.server.URL+"/v1") + require.NoError(t, err) + + resp, err := c.request(context.Background(), http.MethodGet, "/models", http.NoBody, nil) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + + exchanges, _, auths, apiKey := stub.counts() + require.Zero(t, exchanges, "a static key must not trigger a token exchange") + require.Equal(t, []string{"sk-ant-static"}, apiKey) + require.Equal(t, []string{""}, auths) +} From 58275648aa54b325616163f664215ac2060a0f7e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 23:37:47 +0300 Subject: [PATCH 288/618] feat(anthropic): let a caller choose federation over an API key The exchange lived in the internal client, so no caller could reach it: the config type is unimportable from outside the module path, and New still refused to build without a key. Federation is now a public option with aliased config and assertion types, and it stands in for the key. Refs: PAGI-205 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 11 +++- llms/anthropic/anthropicllm_option.go | 28 +++++++++ llms/anthropic/federation_test.go | 89 +++++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 llms/anthropic/federation_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index e54d9db14..7bbe28f1c 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -72,15 +72,20 @@ func New(opts ...Option) (*LLM, error) { } func newClientFromOptions(options *options) (*anthropicclient.Client, error) { - if len(options.token) == 0 { + if options.federation == nil && len(options.token) == 0 { return nil, ErrMissingToken } - return anthropicclient.New(options.token, options.model, options.baseURL, + clientOptions := []anthropicclient.Option{ anthropicclient.WithHTTPClient(options.httpClient), anthropicclient.WithLegacyTextCompletionsAPI(options.useLegacyTextCompletionsAPI), anthropicclient.WithAnthropicBetaHeader(options.anthropicBetaHeader), - ) + } + if options.federation != nil { + clientOptions = append(clientOptions, anthropicclient.WithFederation(*options.federation)) + } + + return anthropicclient.New(options.token, options.model, options.baseURL, clientOptions...) } // Call requests a completion for the given prompt. diff --git a/llms/anthropic/anthropicllm_option.go b/llms/anthropic/anthropicllm_option.go index 8f9fda7b4..2f1df3f1b 100644 --- a/llms/anthropic/anthropicllm_option.go +++ b/llms/anthropic/anthropicllm_option.go @@ -12,8 +12,27 @@ const ( // when using the Anthropic Sonnet 3.5 model. const MaxTokensAnthropicSonnet35 = "max-tokens-3-5-sonnet-2024-07-15" //nolint:gosec // This is not a sensitive value. +// FederationConfig names the federation rule a workload exchanges its identity +// token under, and where that token comes from. +type FederationConfig = anthropicclient.FederationConfig + +// AssertionSource yields the identity token to exchange. It is called for every +// exchange, not once per client. +type AssertionSource = anthropicclient.AssertionSource + +// AssertionFromFile reads the identity token from path on every exchange. +func AssertionFromFile(path string) AssertionSource { + return anthropicclient.AssertionFromFile(path) +} + +// AssertionFromString yields a fixed identity token. +func AssertionFromString(assertion string) AssertionSource { + return anthropicclient.AssertionFromString(assertion) +} + type options struct { token string + federation *FederationConfig model string baseURL string httpClient anthropicclient.Doer @@ -37,6 +56,15 @@ func WithToken(token string) Option { } } +// WithFederation authenticates with short-lived tokens exchanged from the +// workload's identity provider, instead of a static API key. It replaces +// WithToken and the ANTHROPIC_API_KEY environment variable. +func WithFederation(cfg FederationConfig) Option { + return func(opts *options) { + opts.federation = &cfg + } +} + // WithModel passes the Anthropic model to the client. func WithModel(model string) Option { return func(opts *options) { diff --git a/llms/anthropic/federation_test.go b/llms/anthropic/federation_test.go new file mode 100644 index 000000000..4abc831f1 --- /dev/null +++ b/llms/anthropic/federation_test.go @@ -0,0 +1,89 @@ +package anthropic + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "sync" + "testing" + + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func federatedTestServer(t *testing.T) (*httptest.Server, func() (int, []string)) { + t.Helper() + + var ( + mu sync.Mutex + exchanges int + auth []string + ) + + mux := http.NewServeMux() + mux.HandleFunc("/v1/oauth/token", func(w http.ResponseWriter, _ *http.Request) { + mu.Lock() + exchanges++ + mu.Unlock() + + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"access_token":"sk-ant-oat01-minted","token_type":"Bearer","expires_in":3600}`)) + }) + mux.HandleFunc("/v1/messages", func(w http.ResponseWriter, r *http.Request) { + mu.Lock() + auth = append(auth, r.Header.Get("Authorization")+"|"+r.Header.Get("x-api-key")) + mu.Unlock() + + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(map[string]any{ + "id": "msg_1", "type": "message", "role": "assistant", "model": "claude-sonnet-5", + "content": []map[string]any{{"type": "text", "text": "ok"}}, + "stop_reason": "end_turn", + "usage": map[string]any{"input_tokens": 1, "output_tokens": 1}, + }) + }) + + srv := httptest.NewServer(mux) + t.Cleanup(srv.Close) + + return srv, func() (int, []string) { + mu.Lock() + defer mu.Unlock() + return exchanges, append([]string(nil), auth...) + } +} + +func TestFederationReachesTheWireWithoutAnAPIKey(t *testing.T) { + t.Setenv(tokenEnvVarName, "") + + srv, observed := federatedTestServer(t) + + llm, err := New( + WithBaseURL(srv.URL+"/v1"), + WithModel("claude-sonnet-5"), + WithFederation(FederationConfig{ + RuleID: "fdrl_rule", + OrganizationID: "org", + ServiceAccountID: "svac_account", + Assertion: AssertionFromString("jwt"), + }), + ) + require.NoError(t, err, "federation must stand in for the API key") + + _, err = llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "hi"), + }, llms.WithMaxTokens(16)) + require.NoError(t, err) + + exchanges, auth := observed() + require.Equal(t, 1, exchanges) + require.Equal(t, []string{"Bearer sk-ant-oat01-minted|"}, auth) +} + +func TestMissingTokenStillFailsWithoutFederation(t *testing.T) { + t.Setenv(tokenEnvVarName, "") + + _, err := New(WithBaseURL("https://example.invalid/v1")) + require.ErrorIs(t, err, ErrMissingToken) +} From d03fc72e382c2ddcd92e4bdf825c86a3c5275266 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 2 Sep 2026 23:48:58 +0300 Subject: [PATCH 289/618] test(bedrock): record the TestLLM cassette and make it recordable at all MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The recorder was shut before the requests it had to capture. llmtest runs its subtests in parallel, so they resume only after TestLLM returns, and the deferred Close ran first: every attempt to record died with "write testdata/TestLLM.httprr: file already closed". Closing through t.Cleanup waits for the subtests instead. The duplicate t.Parallel goes with it. llmtest already calls it on the same T, and a second call panics — unreachable only because the missing cassette made the test skip. The cassette holds seven exchanges with claude-haiku-4-5 covering call, generate, tool calls, token counting and caching. Replay is offline and green under fake credentials; without the file the test skips rather than passing on nothing. Co-Authored-By: Claude Opus 5 --- llms/bedrock/llmtest_test.go | 12 ++- llms/bedrock/testdata/TestLLM.httprr | 135 +++++++++++++++++++++++++++ 2 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 llms/bedrock/testdata/TestLLM.httprr diff --git a/llms/bedrock/llmtest_test.go b/llms/bedrock/llmtest_test.go index 030d7d9e6..d4d557e29 100644 --- a/llms/bedrock/llmtest_test.go +++ b/llms/bedrock/llmtest_test.go @@ -22,11 +22,13 @@ func TestLLM(t *testing.T) { } rr := httprr.OpenForTest(t, http.DefaultTransport) - defer rr.Close() - - if !rr.Recording() { - t.Parallel() - } + // llmtest drives parallel subtests, which resume only after this function + // returns; a deferred Close would shut the recorder before they run. + t.Cleanup(func() { + if closeErr := rr.Close(); closeErr != nil { + t.Errorf("closing the recording: %v", closeErr) + } + }) client, err := setUpTestWithTransport(rr) if err != nil { diff --git a/llms/bedrock/testdata/TestLLM.httprr b/llms/bedrock/testdata/TestLLM.httprr new file mode 100644 index 000000000..97c8a651a --- /dev/null +++ b/llms/bedrock/testdata/TestLLM.httprr @@ -0,0 +1,135 @@ +httprr trace v1 +474 806 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 160 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":10,"messages":[{"role":"user","content":[{"type":"text","text":"Reply with 'Hello' and nothing else"}]}]}HTTP/2.0 200 OK +Content-Length: 477 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:06 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 16 +X-Amzn-Bedrock-Invocation-Latency: 500 +X-Amzn-Bedrock-Output-Token-Count: 4 +X-Amzn-Requestid: a4dc6097-2b1e-42bf-bf97-88c372995562 + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_wh4u6aw6qu2gqah4ppful45vkywyzyemprgtefizxh732d5hoz3a","type":"message","role":"assistant","content":[{"type":"text","text":"Hello"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard"}}532 806 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 218 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":1,"messages":[{"role":"user","content":[{"type":"text","text":"test"}]}],"tools":[{"name":"test_tool","description":"Test tool","input_schema":{"type":"object"}}]}HTTP/2.0 200 OK +Content-Length: 476 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:06 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 535 +X-Amzn-Bedrock-Invocation-Latency: 518 +X-Amzn-Bedrock-Output-Token-Count: 1 +X-Amzn-Requestid: 002418b6-513b-4911-bb91-b5ef46314c5c + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_uuxq2tfquabirwllhxrgqqcjffdg2v6662vhhtdcs56dxgwouy5a","type":"message","role":"assistant","content":[{"type":"text","text":"I"}],"stop_reason":"max_tokens","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":535,"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"}}471 803 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 157 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":10,"messages":[{"role":"user","content":[{"type":"text","text":"Reply with 'OK' and nothing else"}]}]}HTTP/2.0 200 OK +Content-Length: 474 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:06 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 16 +X-Amzn-Bedrock-Invocation-Latency: 591 +X-Amzn-Bedrock-Output-Token-Count: 4 +X-Amzn-Requestid: 670640a0-32ef-4214-b8dc-f53d4d22ec57 + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_f4pcg2vuke2civlv73zfu7wohoxg2h4qv474ojfh7sxb3ezlvcoa","type":"message","role":"assistant","content":[{"type":"text","text":"OK"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard"}}1660 805 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 1345 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":10,"system":"This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. ","messages":[{"role":"user","content":[{"type":"text","text":"Say 'OK'"}]}]}HTTP/2.0 200 OK +Content-Length: 475 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:08 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 263 +X-Amzn-Bedrock-Invocation-Latency: 495 +X-Amzn-Bedrock-Output-Token-Count: 4 +X-Amzn-Requestid: bfcfbe61-d78a-410c-80a3-ab8d4e2593c2 + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_uclijdlxirdmpmcxz7cvkjd3lvosfzkuhdrkzx7ndjoxph355zga","type":"message","role":"assistant","content":[{"type":"text","text":"OK"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":263,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard"}}449 816 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 135 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":50,"messages":[{"role":"user","content":[{"type":"text","text":"Count to 5"}]}]}HTTP/2.0 200 OK +Content-Length: 486 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:08 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 11 +X-Amzn-Bedrock-Invocation-Latency: 530 +X-Amzn-Bedrock-Output-Token-Count: 13 +X-Amzn-Requestid: b3ca3563-5dde-4332-9a15-afa571bbe8f5 + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_hmcg4btrdjxsw2gvl4epzqzs4445j2s44snj7anqopcc73rtzweq","type":"message","role":"assistant","content":[{"type":"text","text":"1\n2\n3\n4\n5"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":11,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":13,"service_tier":"standard"}}694 915 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 380 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":100,"messages":[{"role":"user","content":[{"type":"text","text":"What's the weather in San Francisco?"}]}],"tools":[{"name":"get_weather","description":"Get the weather for a location","input_schema":{"properties":{"location":{"description":"The city and country","type":"string"}},"required":["location"],"type":"object"}}]}HTTP/2.0 200 OK +Content-Length: 584 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:08 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 574 +X-Amzn-Bedrock-Invocation-Latency: 741 +X-Amzn-Bedrock-Output-Token-Count: 58 +X-Amzn-Requestid: f0e3e16e-bff0-44df-88c6-546c70a9beb9 + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_gbiiequh2nfh5sbpqxsije5in3zsssl4h3xhihj6rupxtlhemywq","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_bdrk_0188YEuvwmyEzV5Vz8QwfSbZ","name":"get_weather","input":{"location":"San Francisco, United States"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":574,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":58,"service_tier":"standard"}}1660 805 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/invoke HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 1345 +Accept: */* +Authorization: AWS4-HMAC-SHA256 test-api-key +Content-Type: application/json + +{"anthropic_version":"bedrock-2023-05-31","max_tokens":10,"system":"This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. ","messages":[{"role":"user","content":[{"type":"text","text":"Say 'OK'"}]}]}HTTP/2.0 200 OK +Content-Length: 475 +Content-Type: application/json +Date: Wed, 02 Sep 2026 20:47:09 GMT +X-Amzn-Bedrock-Cache-Read-Input-Token-Count: 0 +X-Amzn-Bedrock-Input-Token-Count: 263 +X-Amzn-Bedrock-Invocation-Latency: 479 +X-Amzn-Bedrock-Output-Token-Count: 4 +X-Amzn-Requestid: bc23efc1-0aa9-4699-81f7-10924d909e94 + +{"model":"anthropic.claude-haiku-4-5-20251001-v1:0","id":"msg_bdrk_ymzbfo4rwzbbqpulwpjgdfaue3jblgiidut7koxh7mrn2u4gwmuq","type":"message","role":"assistant","content":[{"type":"text","text":"OK"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":263,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard"}} \ No newline at end of file From 6343ed0c17c92aa5a962f440209ced5e8022b19f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 00:19:18 +0300 Subject: [PATCH 290/618] feat(googleai): send MINIMAL where the model takes it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit thinkingLevelForEffort collapsed minimal into LOW for every Gemini, so the cheapest level the SDK offers was unreachable and a caller asking for minimal quietly paid for LOW instead. Which generations take MINIMAL was measured against the vendor rather than read off its docs: pro generations and 3.7-flash answer 400 "Thinking level MINIMAL is not supported for this model", while every other Gemini 3 flash generation answers 200. A name the catalogue has not measured keeps the LOW fallback — guessing wrong that way costs a slightly deeper thought, guessing wrong the other way costs a vendor 400. The existing clamp test keeps its case and gains a name that says what it actually pins: a model that refuses MINIMAL. Live through the door: 3.5-flash, 3.6-flash and 3-flash-preview now put "thinkingLevel":"MINIMAL" on the wire and answer 200; 3.7-flash and 3.1-pro-preview put LOW and answer 200 (PAGI-202). Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 11 +++++++--- llms/googleai/googleai_core_unit_test.go | 23 +++++++++++++++++++- llms/reasoning/gemini_capability.go | 16 ++++++++++++++ llms/reasoning/gemini_capability_test.go | 27 ++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 4 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 5ff76ec7a..b79fb7dcd 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1087,7 +1087,7 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in // thinking_level on Gemini 3.x (its native control, where thinking_budget is // deprecated); an explicit budget or a 2.5 model still uses thinking_budget. if cfg.Tokens <= 0 && reasoning.GeminiUsesThinkingLevel(model) { - if level := thinkingLevelForEffort(cfg.GetEffort(maxTokens)); level != "" { + if level := thinkingLevelForEffort(model, cfg.GetEffort(maxTokens)); level != "" { return &genai.ThinkingConfig{ThinkingLevel: level, IncludeThoughts: true}, nil } } @@ -1151,9 +1151,14 @@ func checkEmptyStream( // thinkingLevelForEffort maps a reasoning effort to a Gemini thinking_level. // xhigh/max collapse to HIGH (the top level); an unset effort returns empty so // the caller falls back to a budget or the model default. -func thinkingLevelForEffort(effort llms.ReasoningEffort) genai.ThinkingLevel { +func thinkingLevelForEffort(model string, effort llms.ReasoningEffort) genai.ThinkingLevel { switch effort { - case llms.ReasoningMinimal, llms.ReasoningLow: + case llms.ReasoningMinimal: + if reasoning.GeminiAcceptsMinimalLevel(model) { + return genai.ThinkingLevelMinimal + } + return genai.ThinkingLevelLow + case llms.ReasoningLow: return genai.ThinkingLevelLow case llms.ReasoningMedium: return genai.ThinkingLevelMedium diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index e7240000f..a6c953668 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1097,7 +1097,7 @@ func TestResolveThinkingConfigRefusesAnEffortThatMapsToNothing(t *testing.T) { assert.Nil(t, tc) } -func TestResolveThinkingConfigClampsMinimalToTheLowestLevel(t *testing.T) { +func TestResolveThinkingConfigClampsMinimalWhereTheModelRefusesIt(t *testing.T) { t.Parallel() tc, err := resolveThinkingConfig("gemini-3-pro-preview", @@ -1169,6 +1169,27 @@ func TestResolveThinkingConfig(t *testing.T) { } }) + t.Run("minimal reaches the wire only where the model takes it", func(t *testing.T) { + for _, tc := range []struct { + model string + want genai.ThinkingLevel + }{ + {"gemini-3-flash-preview", genai.ThinkingLevelMinimal}, + {"gemini-3.1-flash-lite", genai.ThinkingLevelMinimal}, + {"gemini-3.5-flash", genai.ThinkingLevelMinimal}, + {"gemini-3.6-flash", genai.ThinkingLevelMinimal}, + {"gemini-3.1-pro-preview", genai.ThinkingLevelLow}, + {"gemini-3.7-flash", genai.ThinkingLevelLow}, + } { + got, err := resolveThinkingConfig(tc.model, + &llms.ReasoningConfig{Effort: llms.ReasoningMinimal}, 8192) + require.NoError(t, err) + require.NotNil(t, got) + assert.Equal(t, tc.want, got.ThinkingLevel, "model %s -> level", tc.model) + assert.Nil(t, got.ThinkingBudget, "level path must not also send a budget") + } + }) + t.Run("gemini 2.5 effort still uses a token budget", func(t *testing.T) { got, err := resolveThinkingConfig("gemini-2.5-flash", &llms.ReasoningConfig{Effort: llms.ReasoningHigh}, 8192) require.NoError(t, err) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 7d11ed3c1..f7f303fb0 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -66,6 +66,22 @@ func GeminiUsesThinkingLevel(model string) bool { return hasFamily(baseModelName(model), "gemini-3") } +// GeminiAcceptsMinimalLevel reports whether the model takes thinking_level +// MINIMAL. A name this package has not measured reports false and falls back +// to LOW, so extending this set means measuring first, not guessing. +func GeminiAcceptsMinimalLevel(model string) bool { + m := baseModelName(model) + if !GeminiUsesThinkingLevel(m) || strings.Contains(m, "pro") { + return false + } + for _, family := range []string{"gemini-3.1", "gemini-3.5", "gemini-3.6"} { + if hasFamily(m, family) { + return true + } + } + return !strings.HasPrefix(m, "gemini-3.") +} + // geminiKnownNonThinking reports whether the model is a pre-thinking Gemini/Gemma // generation that never thinks (Gemini 1.x/2.0, Gemma 1–3), so it takes no thinking // control at all. Unclassified names are NOT matched, staying optimistic so a diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index ee2aefeb2..66ebe0748 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -133,3 +133,30 @@ func TestGeminiFlashLiteDisablesByOmitting(t *testing.T) { } } } + +func TestGeminiAcceptsMinimalLevel(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + }{ + {"gemini-3-flash-preview", true}, + {"gemini-3.1-flash-lite", true}, + {"gemini-3.1-flash-lite-preview", true}, + {"gemini-3.5-flash", true}, + {"gemini-3.5-flash-lite", true}, + {"gemini-3.6-flash", true}, + {"google/gemini-3.5-flash", true}, + {"gemini-3.1-pro-preview", false}, + {"gemini-3.1-pro-preview-customtools", false}, + {"gemini-3.7-flash", false}, + {"gemini-2.5-flash", false}, + {"gemini-3.9-flash", false}, + {"", false}, + } + for _, tc := range cases { + if got := GeminiAcceptsMinimalLevel(tc.model); got != tc.want { + t.Errorf("GeminiAcceptsMinimalLevel(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} From df2e5f703e35f948e3c1db6a47531edda6483f29 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 12:33:09 +0300 Subject: [PATCH 291/618] fix(openai): keep reasoning_effort off the wire where the vendor refuses it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two separate refusals, both surfacing as 400 on every agent call because tools ride on each one: - GPT-5.4, 5.5 and 5.6 reject a level when function tools share the request. 5.6 rejects an omitted field too, so it needs an explicit "none" rather than nothing at all. - gpt-3.5 and gpt-4 generations answer "Unrecognized request argument supplied" to the field regardless of tools. Reproduced against the vendor through the door before the change and after: five calls that returned 400 now return 200, and the levels that worked keep working. Each guard is mutation-checked — removing it turns the wire tests red while go vet stays clean. PAGI-220 Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 95 +++++++++++++++++++++++++++ llms/openai/openaillm.go | 39 ++++++++--- llms/reasoning/effort_wire.go | 28 ++++++++ llms/reasoning/effort_wire_test.go | 31 +++++++++ 4 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 llms/openai/effort_with_tools_test.go diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go new file mode 100644 index 000000000..d1ae00e39 --- /dev/null +++ b/llms/openai/effort_with_tools_test.go @@ -0,0 +1,95 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func weatherTool() llms.Tool { + return llms.Tool{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Parameters: map[string]any{"type": "object"}, + }, + } +} + +func bodyForCall(t *testing.T, model string, opts ...llms.CallOption) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestEffortAndToolsOnTheWire(t *testing.T) { + t.Parallel() + + tools := llms.WithTools([]llms.Tool{weatherTool()}) + high := llms.WithReasoning(llms.ReasoningHigh, 0) + + for _, tc := range []struct { + name string + model string + opts []llms.CallOption + want string + absent bool + }{ + {"5.6 с инструментами и уровнем деградирует до none", "gpt-5.6-sol", + []llms.CallOption{tools, high}, `"reasoning_effort":"none"`, false}, + {"5.6 с инструментами без просьбы всё равно шлёт none", "gpt-5.6-sol", + []llms.CallOption{tools}, `"reasoning_effort":"none"`, false}, + {"5.6 без инструментов сохраняет уровень", "gpt-5.6-sol", + []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, + {"5.5 с инструментами не шлёт поле", "gpt-5.5", + []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, + {"5.4-nano с инструментами не шлёт поле", "gpt-5.4-nano", + []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, + {"5.5 без инструментов сохраняет уровень", "gpt-5.5", + []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, + {"5.2 с инструментами сохраняет уровень", "gpt-5.2", + []llms.CallOption{tools, high}, `"reasoning_effort":"high"`, false}, + {"gpt-4o не получает поле вовсе", "gpt-4o", + []llms.CallOption{high}, `"reasoning_effort"`, true}, + {"gpt-4o с инструментами тоже не получает", "gpt-4o", + []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + body := bodyForCall(t, tc.model, tc.opts...) + if got := strings.Contains(body, tc.want); got == tc.absent { + verb := "не содержит" + if tc.absent { + verb = "содержит" + } + t.Errorf("тело запроса %s %s\nтело: %s", verb, tc.want, body) + } + }) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 1b5fba08a..1eb0773eb 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -358,19 +358,35 @@ func wireEffortOf(sent bool, effort llms.ReasoningEffort) string { // setReasoning writes the reasoning fields and reports the effort that reached the wire. func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { + model := o.effectiveModel(opts) + toolsRule := reasoning.EffortToolsFree + if len(opts.Tools) > 0 { + toolsRule = reasoning.EffortWithTools(model) + } + switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningOn is handled by the code after the switch case llms.ReasoningDefault: + if toolsRule == reasoning.EffortToolsDisable { + o.writeDisableEffort(req) + return reasoning.OpenAIDisableEffort, nil + } return "", nil case llms.ReasoningOff: return "", o.setReasoningOff(req, opts) } - model := o.effectiveModel(opts) acceptsEffort := reasoning.AcceptsEffortWire(model) effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone + switch toolsRule { //nolint:exhaustive // EffortToolsFree leaves the request alone + case reasoning.EffortToolsDisable: + o.writeDisableEffort(req) + return reasoning.OpenAIDisableEffort, nil + case reasoning.EffortToolsOmit: + sendsEffort = false + } budget := 0 if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { budget = reasoning.ClaudeClampBudget(model, reasoningTokens) @@ -380,26 +396,29 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) effortBudget = llms.ReasoningEffortBudget(reasoningEffort, opts.GetMaxTokens()) } + return o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget), nil +} + +func (o *LLM) writeEffort( + req *openaiclient.ChatRequest, sends bool, effort llms.ReasoningEffort, budget, effortBudget int, +) string { if !o.client.ModernReasoningFormat { - if sendsEffort { - req.ReasoningEffort = &reasoningEffort + if sends { + req.ReasoningEffort = &effort o.raiseAnswerLimitForBudget(req, effortBudget) } - return wireEffortOf(sendsEffort, reasoningEffort), nil + return wireEffortOf(sends, effort) } - // using modern reasoning format switch { case o.client.UseReasoningMaxTokens && budget > 0: req.Reasoning = &openaiclient.ReasoningOptions{MaxTokens: budget} o.raiseAnswerLimitForBudget(req, budget) - case sendsEffort: - req.Reasoning = &openaiclient.ReasoningOptions{ - Effort: reasoningEffort, - } + case sends: + req.Reasoning = &openaiclient.ReasoningOptions{Effort: effort} o.raiseAnswerLimitForBudget(req, effortBudget) } - return wireEffortOf(sendsEffort, reasoningEffort), nil + return wireEffortOf(sends, effort) } func (o *LLM) raiseAnswerLimitForBudget(req *openaiclient.ChatRequest, budget int) { diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 4fa085768..a3d440ea3 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -40,6 +40,9 @@ func AcceptsEffortWire(model string) bool { if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { return false } + if strings.HasPrefix(form, "gpt-3.5") || strings.HasPrefix(form, "gpt-4") { + return false + } if form == "grok-build-latest" { return true } @@ -51,3 +54,28 @@ func AcceptsEffortWire(model string) bool { } return true } + +// EffortToolsRule reports what to do with reasoning_effort when function tools +// ride on the same request. +type EffortToolsRule int + +const ( + EffortToolsFree EffortToolsRule = iota + EffortToolsOmit + // EffortToolsDisable puts an explicit "none" on the wire; an omitted field is + // not equivalent. + EffortToolsDisable +) + +// EffortWithTools reports the rule for a model. An unlisted generation stays free. +func EffortWithTools(model string) EffortToolsRule { + for _, form := range modelSpellings(model) { + if hasGeneration(form, "gpt-5.6") { + return EffortToolsDisable + } + if hasGeneration(form, "gpt-5.4") || hasGeneration(form, "gpt-5.5") { + return EffortToolsOmit + } + } + return EffortToolsFree +} diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 2daa02598..97cdef709 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -20,6 +20,12 @@ func TestAcceptsEffortWire(t *testing.T) { {"kimi-k3", true}, {"moonshot/kimi-k3", true}, {"gpt-5.5", true}, + {"gpt-4o", false}, + {"gpt-4o-mini", false}, + {"gpt-4.1", false}, + {"gpt-4-turbo", false}, + {"gpt-3.5-turbo", false}, + {"openai/gpt-4o", false}, {"o3-mini", true}, {"deepseek-v4-pro", true}, {"glm-5-turbo", true}, @@ -94,3 +100,28 @@ func TestTheGrokBuildAliasThatIsReallyGrok45(t *testing.T) { } } } + +func TestEffortWithTools(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + rule EffortToolsRule + }{ + {"gpt-5.6-sol", EffortToolsDisable}, + {"gpt-5.6-terra", EffortToolsDisable}, + {"openai/gpt-5.6", EffortToolsDisable}, + {"gpt-5.5", EffortToolsOmit}, + {"gpt-5.4-nano", EffortToolsOmit}, + {"gpt-5.4-mini", EffortToolsOmit}, + {"gpt-5.2", EffortToolsFree}, + {"gpt-5.1", EffortToolsFree}, + {"gpt-5-mini", EffortToolsFree}, + {"gpt-4o", EffortToolsFree}, + {"claude-opus-5", EffortToolsFree}, + } { + if got := EffortWithTools(tc.model); got != tc.rule { + t.Errorf("EffortWithTools(%q) = %v, want %v", tc.model, got, tc.rule) + } + } +} From 011a8ef6382960c1f15e0db6998eada6afe8c682 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 13:04:51 +0300 Subject: [PATCH 292/618] feat(reasoning): give qwen3.8 the effort field and 3.5-3.7 a working disable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The catalogue kept reasoning_effort off the wire for every qwen name, so the 3.8 series lost the control its vendor documents, and every commercial 3.5-3.7 model reported "thinking cannot be disabled" while a disable was available all along under a different field. Split by what the vendor documents per generation: 3.8 takes the effort field, and its "none" is the disable; 3.5 through 3.7 take enable_thinking, which the catalogue already knew how to send. Open-weight names of the same generations stay untouched — they were never measured — and so do the same weights served by other hosts. The models.dev snapshot has carried the 3.8 effort options since it was committed and nothing read them: the drift test looked at one field. It now compares the effort control against the predicate too, and that comparison is what turned this red. Verified against the gateway through the door, cache defeated: on 3.8 the levels and the disable all answer, and on 3.7-plus and 3.6-flash a bare call thinks while an explicit disable returns zero. Both guards are mutation checked with go vet clean. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/reasoning/effort_wire.go | 3 ++ llms/reasoning/effort_wire_test.go | 5 ++ llms/reasoning/models_dev_drift_test.go | 62 +++++++++++++++++++++++++ llms/reasoning/off.go | 2 +- llms/reasoning/qwen_capability.go | 8 ++++ llms/reasoning/qwen_capability_test.go | 49 +++++++++++++++++++ 6 files changed, 128 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index a3d440ea3..8970a050a 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -37,6 +37,9 @@ func UsesLegacyMaxTokens(model string) bool { // a model also has no way to spell "off": the disable token rides on this field. func AcceptsEffortWire(model string) bool { for _, form := range modelSpellings(model) { + if hasGeneration(form, "qwen3.8") { + return true + } if strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") { return false } diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 97cdef709..93e825497 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -12,6 +12,11 @@ func TestAcceptsEffortWire(t *testing.T) { {"qwen3-next-80b-a3b-thinking", false}, {"dashscope/qwen3-next-80b-a3b-thinking", false}, {"qwen3.7-max", false}, + {"qwen3.8-max", true}, + {"qwen3.8-flash", true}, + {"qwen3.8-2.4t-a95b", true}, + {"dashscope/qwen3.8-max", true}, + {"qwen3.5-plus", false}, {"qwq-32b", false}, {"kimi-k2.7-code-highspeed", true}, {"moonshot/kimi-k2.7-code", true}, diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index b986fcdd1..36ab818d1 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -47,6 +47,68 @@ var knownDrift = map[string]string{ type snapshotModel struct { Reasoning bool `json:"reasoning"` + Options []struct { + Type string `json:"type"` + } `json:"reasoning_options"` +} + +func (m snapshotModel) claimsEffort() bool { + for _, o := range m.Options { + if o.Type == "effort" { + return true + } + } + return false +} + +// An entry records a divergence measured against the vendor, with the reason. +var knownEffortDrift = map[string]string{ + "xai/grok-4.20-multi-agent-0309": "вендор не обслуживает multi-agent на chat completions: " + + "«Multi Agent requests are not allowed on chat completions», замер 02.09.2026", +} + +func TestModelsDevEffortDrift(t *testing.T) { + t.Parallel() + + body, err := os.ReadFile("testdata/models_dev.json") + if err != nil { + t.Fatalf("read snapshot: %v", err) + } + var snapshot map[string]map[string]snapshotModel + if err := json.Unmarshal(body, &snapshot); err != nil { + t.Fatalf("parse snapshot: %v", err) + } + + diverging := map[string]bool{} + claims := 0 + for provider, entries := range snapshot { + for id, entry := range entries { + if !entry.claimsEffort() { + continue + } + claims++ + if !AcceptsEffortWire(id) { + diverging[provider+"/"+id] = true + } + } + } + if claims == 0 { + t.Fatal("snapshot carries no effort options; regenerate it with go generate ./llms/reasoning") + } + + for _, name := range sorted(diverging) { + if _, known := knownEffortDrift[name]; !known { + t.Errorf("new effort drift on %s: the catalogue gives it an effort control, our "+ + "AcceptsEffortWire keeps the field off the wire. Measure it against the vendor, "+ + "then either fix the predicate or add it to knownEffortDrift with the reason", name) + } + } + for _, name := range sortedKeys(knownEffortDrift) { + if !diverging[name] { + t.Errorf("stale knownEffortDrift entry %s: the catalogue and our predicate now agree, "+ + "drop the line", name) + } + } } func TestModelsDevSnapshotDrift(t *testing.T) { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 4044804fa..3476be835 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -92,7 +92,7 @@ func ResolveOff(model string, p Provider) OffWire { if offByOmission(model) { return OffOmit } - if QwenThinkingRequiresStream(model) { + if QwenThinkingRequiresStream(model) || QwenThinkingOffByFlag(model) { return OffDisableDashScope } if disablesByThinkingObject(model) { diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index f904b919a..fec1cea8b 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -8,6 +8,14 @@ import ( var qwenParameterCountName = regexp.MustCompile(`^qwen3-\d+(\.\d+)?b(-a\d+(\.\d+)?b)?$`) +var qwenCommercialHybridName = regexp.MustCompile(`^qwen3\.[567]-(plus|flash|max)(-preview)?$`) + +// QwenThinkingOffByFlag reports whether the model thinks until enable_thinking +// false asks it to stop. +func QwenThinkingOffByFlag(model string) bool { + return qwenCommercialHybridName.MatchString(qwenVendorSpelling(model)) +} + // QwenThinkingRequiresStream reports whether DashScope serves the model's // thinking only on a streaming call. func QwenThinkingRequiresStream(model string) bool { diff --git a/llms/reasoning/qwen_capability_test.go b/llms/reasoning/qwen_capability_test.go index c5dda4627..3293b8abb 100644 --- a/llms/reasoning/qwen_capability_test.go +++ b/llms/reasoning/qwen_capability_test.go @@ -38,3 +38,52 @@ func TestQwenThinkingRequiresStream(t *testing.T) { } } } + +func TestQwenThinkingOffByFlag(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + flag bool + }{ + {"qwen3.7-plus", true}, + {"qwen3.7-max", true}, + {"qwen3.7-max-preview", true}, + {"qwen3.6-plus", true}, + {"qwen3.6-max-preview", true}, + {"qwen3.5-flash", true}, + {"dashscope/qwen3.5-plus", true}, + {"qwen3.8-max", false}, + {"qwen3.5-35b-a3b", false}, + {"qwen3.6-27b", false}, + {"qwen3-8b", false}, + {"qwen-plus", false}, + {"openrouter/qwen/qwen3.7-plus", false}, + {"deepinfra/Qwen/qwen3.7-plus", false}, + } { + if got := QwenThinkingOffByFlag(tc.model); got != tc.flag { + t.Errorf("QwenThinkingOffByFlag(%q) = %v, want %v", tc.model, got, tc.flag) + } + } +} + +func TestQwenDisableWire(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + off OffWire + }{ + {"qwen3.8-max", OffEffortNone}, + {"qwen3.8-flash", OffEffortNone}, + {"qwen3.7-plus", OffDisableDashScope}, + {"qwen3.6-flash", OffDisableDashScope}, + {"qwen3.5-plus", OffDisableDashScope}, + {"qwen3-8b", OffDisableDashScope}, + {"openrouter/qwen/qwen3.7-plus", OffUnsupported}, + } { + if got := ResolveOff(tc.model, ProviderOpenAI); got != tc.off { + t.Errorf("ResolveOff(%q) = %v, want %v", tc.model, got, tc.off) + } + } +} From e20460865aa866e591e38fc9df14bddb5b277aa9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 13:23:14 +0300 Subject: [PATCH 293/618] fix(reasoning): let the whole qwen 3.5-3.7 generation express a disable The predicate only matched the commercial names, so every open-weight model of the same generations kept reporting that thinking cannot be turned off. Measured six of six on the vendor with the cache defeated: a bare call thinks between 1275 and 14778 characters, enable_thinking false returns zero. The generation is what decides, not the suffix, and the vendor's deep thinking guide lists these names alongside the commercial ones. Boundaries hold: qwen3-next-80b-a3b-thinking stays unsupported, the coder line stays non-thinking, and the same weights served by other hosts keep their own answer. Narrowing the pattern back to commercial names turns the table red. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/reasoning/qwen_capability.go | 4 ++-- llms/reasoning/qwen_capability_test.go | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index fec1cea8b..3a05b84b4 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -8,12 +8,12 @@ import ( var qwenParameterCountName = regexp.MustCompile(`^qwen3-\d+(\.\d+)?b(-a\d+(\.\d+)?b)?$`) -var qwenCommercialHybridName = regexp.MustCompile(`^qwen3\.[567]-(plus|flash|max)(-preview)?$`) +var qwenDefaultThinkingName = regexp.MustCompile(`^qwen3\.[567]-`) // QwenThinkingOffByFlag reports whether the model thinks until enable_thinking // false asks it to stop. func QwenThinkingOffByFlag(model string) bool { - return qwenCommercialHybridName.MatchString(qwenVendorSpelling(model)) + return qwenDefaultThinkingName.MatchString(qwenVendorSpelling(model)) } // QwenThinkingRequiresStream reports whether DashScope serves the model's diff --git a/llms/reasoning/qwen_capability_test.go b/llms/reasoning/qwen_capability_test.go index 3293b8abb..d3313c4f2 100644 --- a/llms/reasoning/qwen_capability_test.go +++ b/llms/reasoning/qwen_capability_test.go @@ -54,8 +54,12 @@ func TestQwenThinkingOffByFlag(t *testing.T) { {"qwen3.5-flash", true}, {"dashscope/qwen3.5-plus", true}, {"qwen3.8-max", false}, - {"qwen3.5-35b-a3b", false}, - {"qwen3.6-27b", false}, + {"qwen3.5-35b-a3b", true}, + {"qwen3.5-27b", true}, + {"qwen3.5-122b-a10b", true}, + {"qwen3.5-397b-a17b", true}, + {"qwen3.6-27b", true}, + {"qwen3.6-35b-a3b", true}, {"qwen3-8b", false}, {"qwen-plus", false}, {"openrouter/qwen/qwen3.7-plus", false}, @@ -79,6 +83,8 @@ func TestQwenDisableWire(t *testing.T) { {"qwen3.7-plus", OffDisableDashScope}, {"qwen3.6-flash", OffDisableDashScope}, {"qwen3.5-plus", OffDisableDashScope}, + {"qwen3.5-35b-a3b", OffDisableDashScope}, + {"qwen3.6-27b", OffDisableDashScope}, {"qwen3-8b", OffDisableDashScope}, {"openrouter/qwen/qwen3.7-plus", OffUnsupported}, } { From f0331e656289f30cd5ef60051da26de1ef15daec Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 13:31:26 +0300 Subject: [PATCH 294/618] feat(openai): send thinking_budget to DashScope instead of dropping it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A caller naming a token budget for a qwen model got nothing on the wire: the budget was computed and then only ever used on the Claude path, so the request went out with an effort and no cap, and the caller had no way to tell. The budget now reaches DashScope, and it goes alone — the vendor refuses a request carrying both controls, so the field the caller named explicitly is the one that survives. Without a budget the effort still goes as before. Measured on the vendor: the pair returns 400, the budget alone answers on 3.7 and 3.8, and through the door a budget of 512 on 3.7-plus thinks 1488 characters against 3843 with no cap. Dropping the suppression turns four wire tests red with go vet clean. PAGI-181 Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 39 +++++++++++++++++++++++ llms/openai/internal/openaiclient/chat.go | 1 + llms/openai/openaillm.go | 5 +++ llms/reasoning/qwen_capability.go | 12 +++++++ 4 files changed, 57 insertions(+) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index d1ae00e39..526e9c160 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -93,3 +93,42 @@ func TestEffortAndToolsOnTheWire(t *testing.T) { }) } } + +func TestQwenThinkingBudgetOnTheWire(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + opt llms.CallOption + want string + absent bool + }{ + {"бюджет уходит вместо эффорта", "dashscope/qwen3.8-max", + llms.WithReasoning(llms.ReasoningLow, 4096), `"thinking_budget":4096`, false}, + {"эффорт при бюджете не уходит", "dashscope/qwen3.8-max", + llms.WithReasoning(llms.ReasoningLow, 4096), `"reasoning_effort"`, true}, + {"без бюджета уходит эффорт", "dashscope/qwen3.8-max", + llms.WithReasoning(llms.ReasoningLow, 0), `"reasoning_effort":"low"`, false}, + {"без бюджета поля бюджета нет", "dashscope/qwen3.8-max", + llms.WithReasoning(llms.ReasoningLow, 0), `"thinking_budget"`, true}, + {"3.7 тоже берёт бюджет", "dashscope/qwen3.7-plus", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"чужой хост бюджета не получает", "openrouter/qwen/qwen3.7-plus", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"не qwen бюджета не получает", "gpt-5.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + body := bodyForCall(t, tc.model, llms.WithMaxTokens(8000), tc.opt) + if got := strings.Contains(body, tc.want); got == tc.absent { + verb := "не содержит" + if tc.absent { + verb = "содержит" + } + t.Errorf("тело запроса %s %s\nтело: %s", verb, tc.want, body) + } + }) + } +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 4eda45c59..804b76dee 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -54,6 +54,7 @@ type ChatRequest struct { TopP *float64 `json:"top_p,omitempty"` MinP *float64 `json:"min_p,omitempty"` EnableThinking *bool `json:"enable_thinking,omitempty"` + ThinkingBudget *int `json:"thinking_budget,omitempty"` Thinking *ThinkingOptions `json:"thinking,omitempty"` MaxTokens *int `json:"max_tokens,omitempty"` MaxCompletionTokens *int `json:"max_completion_tokens,omitempty"` diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 1eb0773eb..3ee96951e 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -387,6 +387,11 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) case reasoning.EffortToolsOmit: sendsEffort = false } + if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && + reasoning.QwenTakesThinkingBudget(model) { + req.ThinkingBudget = &reasoningTokens + return wireEffortOf(true, reasoningEffort), nil + } budget := 0 if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { budget = reasoning.ClaudeClampBudget(model, reasoningTokens) diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 3a05b84b4..667f55f0f 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -48,3 +48,15 @@ var qwenFlagThinkers = map[string]bool{ func QwenThinkingEnabledByFlag(model string) bool { return qwenFlagThinkers[qwenVendorSpelling(model)] } + +// QwenTakesThinkingBudget reports whether DashScope caps the model's thinking by +// a token budget. +func QwenTakesThinkingBudget(model string) bool { + m := qwenVendorSpelling(model) + if m == "" { + return false + } + return qwenDefaultThinkingName.MatchString(m) || + qwenParameterCountName.MatchString(m) || + hasGeneration(m, "qwen3.8") +} From 6e294e2246921709dbc724623b25c5fd91801c79 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 19:20:19 +0300 Subject: [PATCH 295/618] fix(reasoning): let the commercial DashScope hybrids take a thinking budget A caller asking to think with an explicit budget lost it on qwen-plus, qwen-flash, qwen3-max, qwen3-vl-plus and qwen3-vl-flash: only enable_thinking reached the wire, so the model thought as deep as it liked while the caller believed the depth was capped. DashScope documents thinking_budget for Qwen3-VL and the Qwen3 generation, and the vendor honours it: on qwen-plus a budget of 100 returns 269 characters of reasoning against 4625 on a bare call, and an invalid type comes back as the vendor's own InvalidParameter rather than a gateway refusal. Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 12 ++++++++++++ llms/reasoning/qwen_capability.go | 1 + 2 files changed, 13 insertions(+) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 526e9c160..0f59daf84 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -114,6 +114,18 @@ func TestQwenThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 0), `"thinking_budget"`, true}, {"3.7 тоже берёт бюджет", "dashscope/qwen3.7-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen-plus берёт бюджет", "dashscope/qwen-plus", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen-flash берёт бюджет", "dashscope/qwen-flash", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen3-max берёт бюджет", "dashscope/qwen3-max", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen3-vl-plus берёт бюджет", "dashscope/qwen3-vl-plus", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen3-vl-flash берёт бюджет", "dashscope/qwen3-vl-flash", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"флаг остаётся вместе с бюджетом", "dashscope/qwen-plus", + llms.WithReasoning(llms.ReasoningLow, 2048), `"enable_thinking":true`, false}, {"чужой хост бюджета не получает", "openrouter/qwen/qwen3.7-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"не qwen бюджета не получает", "gpt-5.2", diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 667f55f0f..8e2ea5f91 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -58,5 +58,6 @@ func QwenTakesThinkingBudget(model string) bool { } return qwenDefaultThinkingName.MatchString(m) || qwenParameterCountName.MatchString(m) || + qwenFlagThinkers[m] || hasGeneration(m, "qwen3.8") } From 881fa8fa5f089104c1537512b12c243769d3bfc5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 19:29:32 +0300 Subject: [PATCH 296/618] fix(reasoning): let the qwen3-next family take a thinking budget too Same loss as the commercial hybrids: the name carries neither a bare parameter count nor a 3.5-3.8 generation token, so the budget predicate missed it. Measured on qwen3-next-80b-a3b-thinking through the gateway: 8443 characters of reasoning on a bare call against 263 with a budget of 100, and an invalid type comes back as the vendor's own InvalidParameter. Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 2 ++ llms/reasoning/qwen_capability.go | 3 +++ 2 files changed, 5 insertions(+) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 0f59daf84..6fbd374e4 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -124,6 +124,8 @@ func TestQwenThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"qwen3-vl-flash берёт бюджет", "dashscope/qwen3-vl-flash", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen3-next берёт бюджет", "dashscope/qwen3-next-80b-a3b-thinking", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"флаг остаётся вместе с бюджетом", "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"enable_thinking":true`, false}, {"чужой хост бюджета не получает", "openrouter/qwen/qwen3.7-plus", diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 8e2ea5f91..96166210a 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -10,6 +10,8 @@ var qwenParameterCountName = regexp.MustCompile(`^qwen3-\d+(\.\d+)?b(-a\d+(\.\d+ var qwenDefaultThinkingName = regexp.MustCompile(`^qwen3\.[567]-`) +var qwenNextName = regexp.MustCompile(`^qwen3-next-`) + // QwenThinkingOffByFlag reports whether the model thinks until enable_thinking // false asks it to stop. func QwenThinkingOffByFlag(model string) bool { @@ -58,6 +60,7 @@ func QwenTakesThinkingBudget(model string) bool { } return qwenDefaultThinkingName.MatchString(m) || qwenParameterCountName.MatchString(m) || + qwenNextName.MatchString(m) || qwenFlagThinkers[m] || hasGeneration(m, "qwen3.8") } From a2e85ac055c29d501e4d2ae8e0359a0a82205e8e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 19:52:15 +0300 Subject: [PATCH 297/618] fix(mistral): point the door's default at a model the vendor still serves open-mistral-7b was retired on 2025-03-30 with Ministral 3 8B as the named replacement, so every caller that never passed WithModel got a vendor rejection. The default moves to ministral-8b-latest, and a test reads the committed vendor listing so the next retirement turns red here instead of at runtime. Co-Authored-By: Claude Opus 5 --- llms/mistral/client_options.go | 4 +++- llms/mistral/default_model_test.go | 37 ++++++++++++++++++++++++++++++ llms/mistral/mistralmodel.go | 2 +- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 llms/mistral/default_model_test.go diff --git a/llms/mistral/client_options.go b/llms/mistral/client_options.go index d30f3c18e..294edc9ea 100644 --- a/llms/mistral/client_options.go +++ b/llms/mistral/client_options.go @@ -6,6 +6,8 @@ import ( "github.com/vxcontrol/langchaingo/callbacks" ) +const defaultModel = "ministral-8b-latest" + type clientOptions struct { apiKey string endpoint string @@ -45,7 +47,7 @@ func WithTimeout(timeout time.Duration) Option { } } -// Sets the model name for the Model being instantiated. Defaults to "open-mistral-7b". See https://docs.mistral.ai/platform/endpoints/ for a full list of supported models. +// Sets the model name for the Model being instantiated. See https://docs.mistral.ai/models/overview for the models the vendor currently serves. func WithModel(model string) Option { return func(o *clientOptions) { o.model = model diff --git a/llms/mistral/default_model_test.go b/llms/mistral/default_model_test.go new file mode 100644 index 000000000..db54a9858 --- /dev/null +++ b/llms/mistral/default_model_test.go @@ -0,0 +1,37 @@ +package mistral + +import ( + "encoding/json" + "os" + "testing" +) + +const vendorListingSnapshot = "../reasoning/testdata/mistral_models.json" + +func TestTheDefaultModelIsOneTheVendorStillServes(t *testing.T) { + t.Parallel() + + body, err := os.ReadFile(vendorListingSnapshot) + if err != nil { + t.Fatalf("read %s: %v", vendorListingSnapshot, err) + } + var listing map[string]json.RawMessage + if err := json.Unmarshal(body, &listing); err != nil { + t.Fatalf("parse %s: %v", vendorListingSnapshot, err) + } + if len(listing) == 0 { + t.Fatalf("%s is empty, so it would accept any default; refresh it with "+ + "go generate ./llms/reasoning", vendorListingSnapshot) + } + + llm, err := New() + if err != nil { + t.Fatalf("New: %v", err) + } + got := llm.clientOptions.model + if _, served := listing[got]; !served { + t.Fatalf("default model %q is not in the vendor listing %s: a caller that never "+ + "passes WithModel gets a retired id and the vendor rejects the call", + got, vendorListingSnapshot) + } +} diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 8cc43f52f..187f0e3ba 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -34,7 +34,7 @@ func New(opts ...Option) (*Model, error) { endpoint: sdk.Endpoint, maxRetries: sdk.DefaultMaxRetries, timeout: sdk.DefaultTimeout, - model: sdk.ModelOpenMistral7b, + model: defaultModel, } for _, opt := range opts { From 884772f6bb6625f948a8fd14a27280a06d46743d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 19:53:12 +0300 Subject: [PATCH 298/618] fix(huggingface,perplexity): stop offering models the vendors stopped serving The HuggingFace door defaulted to gpt2, which the inference router no longer lists, so a caller that never passed WithModel reached a model with no provider mapping. The Perplexity tool exported sonar-reasoning and r1-1776; the vendor's model list carries neither. Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm_option.go | 2 +- llms/huggingface/llmtest_test.go | 2 +- tools/perplexity/perplexity.go | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/llms/huggingface/huggingfacellm_option.go b/llms/huggingface/huggingfacellm_option.go index e083780d1..ff4733ef7 100644 --- a/llms/huggingface/huggingfacellm_option.go +++ b/llms/huggingface/huggingfacellm_option.go @@ -12,7 +12,7 @@ const ( hfHomeEnvVarName = "HF_HOME" // HF home directory xdgCacheHomeEnvVar = "XDG_CACHE_HOME" // XDG cache directory defaultTokenPath = "token" // Default token filename - defaultModel = "gpt2" + defaultModel = "meta-llama/Llama-3.1-8B-Instruct" defaultURL = "https://api-inference.huggingface.co" routerURL = "https://router.huggingface.co" ) diff --git a/llms/huggingface/llmtest_test.go b/llms/huggingface/llmtest_test.go index 044890f6f..fa9f2006f 100644 --- a/llms/huggingface/llmtest_test.go +++ b/llms/huggingface/llmtest_test.go @@ -12,7 +12,7 @@ func TestLLM(t *testing.T) { t.Skip("HUGGINGFACEHUB_API_TOKEN not set") } - llm, err := New(WithModel("gpt2")) + llm, err := New(WithModel(defaultModel)) if err != nil { t.Fatalf("Failed to create HuggingFace LLM: %v", err) } diff --git a/tools/perplexity/perplexity.go b/tools/perplexity/perplexity.go index 9dab8f301..1bd1a970a 100644 --- a/tools/perplexity/perplexity.go +++ b/tools/perplexity/perplexity.go @@ -22,14 +22,10 @@ const ( ModelSonarDeepResearch Model = "sonar-deep-research" // ModelSonarReasoningPro is the reasoning pro model with 128k context window for chat completion. ModelSonarReasoningPro Model = "sonar-reasoning-pro" - // ModelSonarReasoning is the reasoning model with 128k context window for chat completion. - ModelSonarReasoning Model = "sonar-reasoning" // ModelSonarPro is the pro model with 200k context window for chat completion. ModelSonarPro Model = "sonar-pro" // ModelSonar is the standard model with 128k context window for chat completion. ModelSonar Model = "sonar" - // ModelR11776 is the r1-1776 model. - ModelR11776 Model = "r1-1776" ) // Option is a function that modifies the options for the Perplexity AI tool. From 1f37ceb15756d41a3c19582c7e3dac8a32c81aa4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 19:53:57 +0300 Subject: [PATCH 299/618] docs(examples): stop demonstrating models the vendors retired Five runnable examples and the provider guide named ids that no longer resolve: open-mistral-7b, gpt2, microsoft/DialoGPT-medium, llama-3.1-sonar-large-128k-online and deepseek-reasoner. Each moves to a name its vendor lists today. Co-Authored-By: Claude Opus 5 --- docs/docs/how-to/configure-llm-providers.md | 2 +- .../deepseek-completion-example/deepseek-completion-example.go | 2 +- examples/huggingface-llm-example/README.md | 2 +- examples/huggingface-llm-example/huggingface_example.go | 2 +- examples/mistral-completion-example/README.md | 2 +- .../mistral-completion-example/mistral_completion_example.go | 2 +- .../mistral_summarization_example.go | 2 +- examples/perplexity-completion-example/README.md | 2 +- .../perplexity_completion_example.go | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/docs/how-to/configure-llm-providers.md b/docs/docs/how-to/configure-llm-providers.md index 606c20229..6c78e1bc2 100644 --- a/docs/docs/how-to/configure-llm-providers.md +++ b/docs/docs/how-to/configure-llm-providers.md @@ -164,7 +164,7 @@ llm, err := huggingface.New(huggingface.WithToken("your-hf-token")) ```go llm, err := huggingface.New( - huggingface.WithModel("microsoft/DialoGPT-medium"), + huggingface.WithModel("meta-llama/Llama-3.1-8B-Instruct"), huggingface.WithToken("your-hf-token"), ) ``` diff --git a/examples/deepseek-completion-example/deepseek-completion-example.go b/examples/deepseek-completion-example/deepseek-completion-example.go index 702fadade..5677c19c4 100644 --- a/examples/deepseek-completion-example/deepseek-completion-example.go +++ b/examples/deepseek-completion-example/deepseek-completion-example.go @@ -15,7 +15,7 @@ func main() { // Per the official DeepSeek API documentation (https://api-docs.deepseek.com/), // please note that all API calls must be configured to use the DeepSeek base URL instead of the OpenAI endpoint. llm, err := openai.New( - openai.WithModel("deepseek-reasoner"), + openai.WithModel("deepseek-v4-flash"), openai.WithBaseURL("https://api.deepseek.com"), ) if err != nil { diff --git a/examples/huggingface-llm-example/README.md b/examples/huggingface-llm-example/README.md index f9da956ed..70c418af6 100644 --- a/examples/huggingface-llm-example/README.md +++ b/examples/huggingface-llm-example/README.md @@ -10,7 +10,7 @@ This example demonstrates how to use the LangChain Go library to interact with H 2. **Generates Text**: - The script sends a prompt to the language model asking for a company name that makes colorful socks. - - It demonstrates how to use different generation options like specifying a model (in this case, "gpt2"). + - It demonstrates how to use different generation options like specifying a model (in this case, "meta-llama/Llama-3.1-8B-Instruct"). 3. **Handles Responses**: - The generated text is printed to the console. diff --git a/examples/huggingface-llm-example/huggingface_example.go b/examples/huggingface-llm-example/huggingface_example.go index 0e4323899..d9f050b50 100644 --- a/examples/huggingface-llm-example/huggingface_example.go +++ b/examples/huggingface-llm-example/huggingface_example.go @@ -26,7 +26,7 @@ func main() { // Or override default model to another one generateOptions := []llms.CallOption{ - llms.WithModel("gpt2"), + llms.WithModel("meta-llama/Llama-3.1-8B-Instruct"), // llms.WithTopK(10), // llms.WithTopP(0.95), // llms.WithSeed(13), diff --git a/examples/mistral-completion-example/README.md b/examples/mistral-completion-example/README.md index 923d7bc32..f05ff64cb 100644 --- a/examples/mistral-completion-example/README.md +++ b/examples/mistral-completion-example/README.md @@ -6,7 +6,7 @@ This example demonstrates how to generate text completions using the Mistral AI ## What This Example Does -1. **Setup**: The code initializes a Mistral language model using the `mistral.New()` function, specifying the "open-mistral-7b" model. +1. **Setup**: The code initializes a Mistral language model using the `mistral.New()` function, specifying the "ministral-8b-latest" model. 2. **Streaming Completion**: - It generates a completion for the question "Who was the first man to walk on the moon?" diff --git a/examples/mistral-completion-example/mistral_completion_example.go b/examples/mistral-completion-example/mistral_completion_example.go index 6abaefabc..dcbcb81d0 100644 --- a/examples/mistral-completion-example/mistral_completion_example.go +++ b/examples/mistral-completion-example/mistral_completion_example.go @@ -11,7 +11,7 @@ import ( ) func main() { - llm, err := mistral.New(mistral.WithModel("open-mistral-7b")) + llm, err := mistral.New(mistral.WithModel("ministral-8b-latest")) if err != nil { log.Fatal(err) } diff --git a/examples/mistral-summarization-example/mistral_summarization_example.go b/examples/mistral-summarization-example/mistral_summarization_example.go index 39e9331ea..fe2b7ee5d 100644 --- a/examples/mistral-summarization-example/mistral_summarization_example.go +++ b/examples/mistral-summarization-example/mistral_summarization_example.go @@ -14,7 +14,7 @@ import ( func main() { ctx := context.Background() - llm, err := mistral.New(mistral.WithAPIKey("API_KEY_GOES_HERE"), mistral.WithModel("open-mistral-7b")) + llm, err := mistral.New(mistral.WithAPIKey("API_KEY_GOES_HERE"), mistral.WithModel("ministral-8b-latest")) if err != nil { log.Fatal(err) } diff --git a/examples/perplexity-completion-example/README.md b/examples/perplexity-completion-example/README.md index 346737caf..0db7e36f2 100644 --- a/examples/perplexity-completion-example/README.md +++ b/examples/perplexity-completion-example/README.md @@ -9,7 +9,7 @@ Hello there! 👋 This example demonstrates how to use the Perplexity API with L 2. **Perplexity LLM Configuration**: - It sets up a Large Language Model (LLM) client using Perplexity's API, which is compatible with the OpenAI interface. - - The model used is "llama-3.1-sonar-large-128k-online", a powerful language model hosted by Perplexity. + - The model used is "sonar-pro", a search-grounded model hosted by Perplexity. 3. **Text Generation**: - The example prompts the model to "What is a prime number?" diff --git a/examples/perplexity-completion-example/perplexity_completion_example.go b/examples/perplexity-completion-example/perplexity_completion_example.go index 34b4cbd31..c4112df05 100644 --- a/examples/perplexity-completion-example/perplexity_completion_example.go +++ b/examples/perplexity-completion-example/perplexity_completion_example.go @@ -23,7 +23,7 @@ func main() { llm, err := openai.New( // Supported models: https://docs.perplexity.ai/docs/model-cards - openai.WithModel("llama-3.1-sonar-large-128k-online"), + openai.WithModel("sonar-pro"), openai.WithBaseURL("https://api.perplexity.ai"), openai.WithToken(apiKey), ) From abd7ce0aff74929c3e117db16779937295b1326d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 19:55:19 +0300 Subject: [PATCH 300/618] chore(reasoning): refresh the committed vendor listings models.dev now carries gemini-3.8-flash for both the AI Studio and Vertex blocks; the drift test stays green, so our name matching already covers it. Regenerating the Anthropic and Mistral listings against the vendors produced no change, which is itself the check that those two tables are current. Co-Authored-By: Claude Opus 5 --- llms/reasoning/testdata/models_dev.json | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/llms/reasoning/testdata/models_dev.json b/llms/reasoning/testdata/models_dev.json index f20ef0ea6..243bb0185 100644 --- a/llms/reasoning/testdata/models_dev.json +++ b/llms/reasoning/testdata/models_dev.json @@ -3241,6 +3241,24 @@ "output": 65536 } }, + "gemini-3.8-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, "gemini-embedding-001": { "reasoning": false, "temperature": false, @@ -3915,6 +3933,24 @@ "output": 65536 } }, + "gemini-3.8-flash": { + "reasoning": true, + "reasoning_options": [ + { + "type": "effort", + "values": [ + "low", + "medium", + "high" + ] + } + ], + "temperature": true, + "limit": { + "context": 1048576, + "output": 65536 + } + }, "gemini-embedding-001": { "reasoning": false, "temperature": false, From 5fb7d302e4d4b3dfe777e355673c39df8ba4f123 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 20:06:54 +0300 Subject: [PATCH 301/618] test(reasoning): let the snapshot police the DashScope budget set The name set was hand-written, so every new commercial alias had to be noticed by a person. The snapshot already carries a budget_tokens option per model, so a third drift test compares it against the predicate in both directions and demands a measured reason for each divergence. It earned its place immediately: the qwen3-next pattern was matching the instruct variant, which does not think at all. Narrowed to the thinking name the vendor documents. Alibaba names qwen-turbo among the hybrids whose thinking is off by default, alongside qwen-plus and qwen-flash, and lists Qwen3-VL among the families that take a budget, so both open-weight VL names join too. One divergence stays and carries its measurement: the snapshot denies qwen3-max a budget while the vendor caps it at 285 characters against 9166 on a bare call. Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 8 ++++ llms/reasoning/models_dev_drift_test.go | 56 ++++++++++++++++++++++++- llms/reasoning/qwen_capability.go | 9 ++-- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 6fbd374e4..ebf4d32ce 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -126,6 +126,14 @@ func TestQwenThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"qwen3-next берёт бюджет", "dashscope/qwen3-next-80b-a3b-thinking", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"qwen-turbo берёт бюджет", "dashscope/qwen-turbo", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"открытые веса VL берут бюджет", "dashscope/qwen3-vl-30b-a3b", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"крупные открытые веса VL тоже", "dashscope/qwen3-vl-235b-a22b", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"недумающий next бюджета не получает", "dashscope/qwen3-next-80b-a3b-instruct", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"флаг остаётся вместе с бюджетом", "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"enable_thinking":true`, false}, {"чужой хост бюджета не получает", "openrouter/qwen/qwen3.7-plus", diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index 36ab818d1..1468888e9 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -30,7 +30,6 @@ var knownDrift = map[string]string{ "amazon-bedrock/deepseek.v3-v1:0": "имени нет на Bedrock: The provided model identifier is invalid; линейка V3 замерена как нерассуждающая", "alibaba/qvq-max": "не измерено", - "alibaba/qwen-turbo": "не измерено", "alibaba/qwen3-omni-flash": "не измерено", "alibaba/qwen3-vl-235b-a22b": "не измерено", "alibaba/qwen3-vl-30b-a3b": "не измерено", @@ -61,12 +60,67 @@ func (m snapshotModel) claimsEffort() bool { return false } +func (m snapshotModel) claimsBudget() bool { + for _, o := range m.Options { + if o.Type == "budget_tokens" { + return true + } + } + return false +} + // An entry records a divergence measured against the vendor, with the reason. var knownEffortDrift = map[string]string{ "xai/grok-4.20-multi-agent-0309": "вендор не обслуживает multi-agent на chat completions: " + "«Multi Agent requests are not allowed on chat completions», замер 02.09.2026", } +var knownBudgetDrift = map[string]string{ + "qwen3-max": "снимок бюджета не объявляет, вендор его исполняет: голый вызов даёт 9166 " + + "символов размышления против 285 при thinking_budget 100, замер 03.09.2026", +} + +func TestModelsDevBudgetDrift(t *testing.T) { + t.Parallel() + + body, err := os.ReadFile("testdata/models_dev.json") + if err != nil { + t.Fatalf("read snapshot: %v", err) + } + var snapshot map[string]map[string]snapshotModel + if err := json.Unmarshal(body, &snapshot); err != nil { + t.Fatalf("parse snapshot: %v", err) + } + + diverging := map[string]bool{} + claims := 0 + for id, entry := range snapshot["alibaba"] { + if entry.claimsBudget() { + claims++ + } + if entry.claimsBudget() != QwenTakesThinkingBudget(id) { + diverging[id] = true + } + } + if claims == 0 { + t.Fatal("snapshot carries no budget options for alibaba; regenerate it with go generate ./llms/reasoning") + } + + for _, name := range sorted(diverging) { + if _, known := knownBudgetDrift[name]; !known { + t.Errorf("new budget drift on %s: the catalogue and QwenTakesThinkingBudget disagree on "+ + "whether DashScope caps its thinking by a token budget. Measure it against the vendor, "+ + "then either fix the predicate or add it to knownBudgetDrift with the reason", name) + } + } + for _, name := range sortedKeys(knownBudgetDrift) { + if !diverging[name] { + t.Errorf("stale knownBudgetDrift entry %s: the catalogue and our predicate now agree, "+ + "drop the line", name) + } + } +} + func TestModelsDevEffortDrift(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 96166210a..b7063f385 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -10,7 +10,9 @@ var qwenParameterCountName = regexp.MustCompile(`^qwen3-\d+(\.\d+)?b(-a\d+(\.\d+ var qwenDefaultThinkingName = regexp.MustCompile(`^qwen3\.[567]-`) -var qwenNextName = regexp.MustCompile(`^qwen3-next-`) +var qwenNextName = regexp.MustCompile(`^qwen3-next-.*-thinking$`) + +var qwenVLOpenWeightName = regexp.MustCompile(`^qwen3-vl-\d+(\.\d+)?b(-a\d+(\.\d+)?b)?$`) // QwenThinkingOffByFlag reports whether the model thinks until enable_thinking // false asks it to stop. @@ -41,8 +43,8 @@ func (e *ErrThinkingRequiresStream) Error() string { } var qwenFlagThinkers = map[string]bool{ - "qwen-plus": true, "qwen-flash": true, "qwen3-max": true, - "qwen3-vl-plus": true, "qwen3-vl-flash": true, + "qwen-plus": true, "qwen-flash": true, "qwen-turbo": true, + "qwen3-max": true, "qwen3-vl-plus": true, "qwen3-vl-flash": true, } // QwenThinkingEnabledByFlag reports whether DashScope leaves the model's @@ -61,6 +63,7 @@ func QwenTakesThinkingBudget(model string) bool { return qwenDefaultThinkingName.MatchString(m) || qwenParameterCountName.MatchString(m) || qwenNextName.MatchString(m) || + qwenVLOpenWeightName.MatchString(m) || qwenFlagThinkers[m] || hasGeneration(m, "qwen3.8") } From 7714a61186192c9fdd02a68f02b19f2f9ee393bf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 21:14:46 +0300 Subject: [PATCH 302/618] fix(reasoning): let DashScope guests take a thinking budget too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DashScope hosts GLM, Kimi and DeepSeek-V4 beside Qwen and caps all of them with thinking_budget, but the predicate behind the single write site matched Qwen spellings only. A caller asking for a bounded thought on dashscope/glm-5.2 got a derived reasoning_effort instead, and the vendor maps low onto high — the request for less thinking arrived as a request for more. Measured against the vendor on 03.09.2026 with the gateway cache off: every guest capped at ~400 characters under thinking_budget 100 while bare calls ran from 573 to 8801. The same field is inert on the doors those models also live behind — z.ai, Moonshot and DeepSeek all return 200 and ignore it — and the spelling helper already refuses any name that carries a route prefix, so the wire table pins that boundary. PAGI-226 Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 26 ++++++++++++++++++++++++- llms/openai/openaillm.go | 2 +- llms/reasoning/models_dev_drift_test.go | 8 ++++++-- llms/reasoning/qwen_capability.go | 23 ++++++++++++++-------- 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index ebf4d32ce..0c8a09d08 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -94,7 +94,7 @@ func TestEffortAndToolsOnTheWire(t *testing.T) { } } -func TestQwenThinkingBudgetOnTheWire(t *testing.T) { +func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { t.Parallel() for _, tc := range []struct { @@ -136,6 +136,30 @@ func TestQwenThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"флаг остаётся вместе с бюджетом", "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"enable_thinking":true`, false}, + {"гость glm-5.2 берёт бюджет", "dashscope/glm-5.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"снимок поколения glm-5.2 тоже", "dashscope/glm-5.2-fast-preview", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"гость glm-5.1 берёт бюджет", "dashscope/glm-5.1", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"гость kimi берёт бюджет", "dashscope/kimi-k2.7-code", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"гость deepseek-v4 берёт бюджет", "dashscope/deepseek-v4-pro", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"датированный снимок deepseek-v4 тоже", "dashscope/deepseek-v4-flash-0731", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"у гостя эффорт при бюджете не уходит", "dashscope/glm-5.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"reasoning_effort"`, true}, + {"deepseek-v3.2 бюджета не получает", "dashscope/deepseek-v3.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"glm на своей двери бюджета не получает", "zai/glm-5.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"kimi на своей двери бюджета не получает", "moonshot/kimi-k2.7-code", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"glm через openrouter бюджета не получает", "openrouter/z-ai/glm-5.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"deepseek на своей двери бюджета не получает", "deepseek/deepseek-v4-pro", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"чужой хост бюджета не получает", "openrouter/qwen/qwen3.7-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"не qwen бюджета не получает", "gpt-5.2", diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 3ee96951e..f65202ad6 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -388,7 +388,7 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) sendsEffort = false } if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && - reasoning.QwenTakesThinkingBudget(model) { + reasoning.DashScopeTakesThinkingBudget(model) { req.ThinkingBudget = &reasoningTokens return wireEffortOf(true, reasoningEffort), nil } diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index 1468888e9..4703e0b3e 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -78,6 +78,10 @@ var knownEffortDrift = map[string]string{ var knownBudgetDrift = map[string]string{ "qwen3-max": "снимок бюджета не объявляет, вендор его исполняет: голый вызов даёт 9166 " + "символов размышления против 285 при thinking_budget 100, замер 03.09.2026", + "glm-5.2": "снимок знает у гостя DashScope только эффорт, но дверь исполняет и бюджет: " + + "голый вызов даёт 4390 символов против 441 при thinking_budget 100, замер 03.09.2026", + "deepseek-v4-flash-0731": "снимок знает у гостя DashScope только эффорт и переключатель, " + + "но дверь исполняет и бюджет: 8801 символ против 497 при thinking_budget 100, замер 03.09.2026", } func TestModelsDevBudgetDrift(t *testing.T) { @@ -98,7 +102,7 @@ func TestModelsDevBudgetDrift(t *testing.T) { if entry.claimsBudget() { claims++ } - if entry.claimsBudget() != QwenTakesThinkingBudget(id) { + if entry.claimsBudget() != DashScopeTakesThinkingBudget(id) { diverging[id] = true } } @@ -108,7 +112,7 @@ func TestModelsDevBudgetDrift(t *testing.T) { for _, name := range sorted(diverging) { if _, known := knownBudgetDrift[name]; !known { - t.Errorf("new budget drift on %s: the catalogue and QwenTakesThinkingBudget disagree on "+ + t.Errorf("new budget drift on %s: the catalogue and DashScopeTakesThinkingBudget disagree on "+ "whether DashScope caps its thinking by a token budget. Measure it against the vendor, "+ "then either fix the predicate or add it to knownBudgetDrift with the reason", name) } diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index b7063f385..1ea0d398e 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -17,16 +17,16 @@ var qwenVLOpenWeightName = regexp.MustCompile(`^qwen3-vl-\d+(\.\d+)?b(-a\d+(\.\d // QwenThinkingOffByFlag reports whether the model thinks until enable_thinking // false asks it to stop. func QwenThinkingOffByFlag(model string) bool { - return qwenDefaultThinkingName.MatchString(qwenVendorSpelling(model)) + return qwenDefaultThinkingName.MatchString(dashScopeSpelling(model)) } // QwenThinkingRequiresStream reports whether DashScope serves the model's // thinking only on a streaming call. func QwenThinkingRequiresStream(model string) bool { - return qwenParameterCountName.MatchString(qwenVendorSpelling(model)) + return qwenParameterCountName.MatchString(dashScopeSpelling(model)) } -func qwenVendorSpelling(model string) string { +func dashScopeSpelling(model string) string { m := strings.TrimPrefix(strings.ToLower(model), "dashscope/") if strings.Contains(m, "/") { return "" @@ -50,16 +50,23 @@ var qwenFlagThinkers = map[string]bool{ // QwenThinkingEnabledByFlag reports whether DashScope leaves the model's // thinking off until enable_thinking:true asks for it. func QwenThinkingEnabledByFlag(model string) bool { - return qwenFlagThinkers[qwenVendorSpelling(model)] + return qwenFlagThinkers[dashScopeSpelling(model)] } -// QwenTakesThinkingBudget reports whether DashScope caps the model's thinking by -// a token budget. -func QwenTakesThinkingBudget(model string) bool { - m := qwenVendorSpelling(model) +var dashScopeGuestBudget = []string{"glm-5.1", "glm-5.2", "kimi-k2.7-code", "deepseek-v4"} + +// DashScopeTakesThinkingBudget reports whether DashScope caps the model's +// thinking by a token budget. +func DashScopeTakesThinkingBudget(model string) bool { + m := dashScopeSpelling(model) if m == "" { return false } + for _, generation := range dashScopeGuestBudget { + if hasGeneration(m, generation) { + return true + } + } return qwenDefaultThinkingName.MatchString(m) || qwenParameterCountName.MatchString(m) || qwenNextName.MatchString(m) || From 333e2af99d45f5e6b25b24989b8ef2cb9b686f08 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 3 Sep 2026 21:54:08 +0300 Subject: [PATCH 303/618] fix(reasoning): require the DashScope route before budgeting a guest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The guest families answer to the same bare name on their own vendor's API, where thinking_budget is not the control: z.ai documents reasoning_effort for GLM-5.2 and up, Moonshot documents it for kimi-k3. Because the budget branch returns before the effort is written, keying the guests on the name alone would have swapped a working control for a field those doors ignore — and opencode refuses the request outright with "Extra inputs are not permitted" rather than ignoring it. Guests now need the dashscope/ prefix spelled out; Qwen keeps answering to its bare name, which the wire table pins alongside the three bare guest names that must not carry the field. The two catalogue drift entries go with them: the snapshot keys are bare, so they no longer disagree with the predicate. PAGI-226 Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 8 ++++++++ llms/reasoning/models_dev_drift_test.go | 4 ---- llms/reasoning/qwen_capability.go | 16 +++++++++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 0c8a09d08..a29b5a8fe 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -152,6 +152,14 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"reasoning_effort"`, true}, {"deepseek-v3.2 бюджета не получает", "dashscope/deepseek-v3.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"гость без имени двери бюджета не получает", "glm-5.2", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"голый kimi бюджета не получает", "kimi-k2.7-code", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"голый deepseek-v4 бюджета не получает", "deepseek-v4-pro", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"голый qwen дверь по-прежнему узнаёт", "qwen-plus", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"glm на своей двери бюджета не получает", "zai/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"kimi на своей двери бюджета не получает", "moonshot/kimi-k2.7-code", diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index 4703e0b3e..c6ac92226 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -78,10 +78,6 @@ var knownEffortDrift = map[string]string{ var knownBudgetDrift = map[string]string{ "qwen3-max": "снимок бюджета не объявляет, вендор его исполняет: голый вызов даёт 9166 " + "символов размышления против 285 при thinking_budget 100, замер 03.09.2026", - "glm-5.2": "снимок знает у гостя DashScope только эффорт, но дверь исполняет и бюджет: " + - "голый вызов даёт 4390 символов против 441 при thinking_budget 100, замер 03.09.2026", - "deepseek-v4-flash-0731": "снимок знает у гостя DashScope только эффорт и переключатель, " + - "но дверь исполняет и бюджет: 8801 символ против 497 при thinking_budget 100, замер 03.09.2026", } func TestModelsDevBudgetDrift(t *testing.T) { diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 1ea0d398e..508ee55e0 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -55,6 +55,14 @@ func QwenThinkingEnabledByFlag(model string) bool { var dashScopeGuestBudget = []string{"glm-5.1", "glm-5.2", "kimi-k2.7-code", "deepseek-v4"} +func dashScopeGuestSpelling(model string) string { + rest, ok := strings.CutPrefix(strings.ToLower(model), "dashscope/") + if !ok || strings.Contains(rest, "/") { + return "" + } + return rest +} + // DashScopeTakesThinkingBudget reports whether DashScope caps the model's // thinking by a token budget. func DashScopeTakesThinkingBudget(model string) bool { @@ -62,9 +70,11 @@ func DashScopeTakesThinkingBudget(model string) bool { if m == "" { return false } - for _, generation := range dashScopeGuestBudget { - if hasGeneration(m, generation) { - return true + if guest := dashScopeGuestSpelling(model); guest != "" { + for _, generation := range dashScopeGuestBudget { + if hasGeneration(guest, generation) { + return true + } } } return qwenDefaultThinkingName.MatchString(m) || From 8918070003ed86dd2950eebca2b87d7bf4cac280 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 01:13:21 +0300 Subject: [PATCH 304/618] fix(reasoning): let a caller's top_p survive Claude's thinking Anthropic refuses top_p below 0.95 once thinking is on, not top_p as such: the vendor spells it out as "must be greater than or equal to 0.95 or unset when thinking is enabled or in adaptive mode". The doors dropped the field outright, so a caller asking for 0.97 alongside a thinking budget lost it with no error and no symptom. The floor alone is not enough, because the same models refuse temperature and top_p together and the budget branch sets temperature to 1.0 on its own. That default is the vendor's own, not the caller's ask, so it now yields: when the caller supplied top_p at or above the floor and no temperature, the budget path sends the top_p and omits the temperature. A caller who supplied both still keeps temperature, which is the pair rule already in place. The adaptive branches are left alone: every Claude that resolves to adaptive also refuses sampling outright, so a floor there would be unreachable. Measured against the native door: thinking with top_p 0.97 answers 200, the same call with temperature 1.0 beside it answers 400, and thinking with top_p 0.5 answers 400. Live acceptance through the library returns 200 on all three shapes the doors can now produce. PAGI-230 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 13 ++-- llms/anthropic/thinking_top_p_wire_test.go | 63 ++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 8 ++- .../bedrockclient/provider_anthropic.go | 13 +++- .../bedrockclient/thinking_top_p_test.go | 72 +++++++++++++++++++ llms/openai/openaillm.go | 5 +- llms/openai/thinking_top_p_wire_test.go | 48 +++++++++++++ llms/reasoning/claude_capability.go | 12 ++++ llms/reasoning/claude_top_p_test.go | 31 ++++++++ 9 files changed, 256 insertions(+), 9 deletions(-) create mode 100644 llms/anthropic/thinking_top_p_wire_test.go create mode 100644 llms/bedrock/internal/bedrockclient/thinking_top_p_test.go create mode 100644 llms/openai/thinking_top_p_wire_test.go create mode 100644 llms/reasoning/claude_top_p_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 7bbe28f1c..b6917d453 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -272,12 +272,17 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag topP = nil topK = nil case thinking != nil && thinking.Type == "enabled" && thinking.Budget > 0: - if !reasoning.ClaudeRejectsSampling(model) { - temperature = getFloatPointer(1.0) - } else { + keepTopP := topP != nil && opts.Temperature == nil && + reasoning.ClaudeKeepsTopPWhileThinking(model, *topP) + switch { + case reasoning.ClaudeRejectsSampling(model), keepTopP: temperature = nil + default: + temperature = getFloatPointer(1.0) + } + if !keepTopP { + topP = nil } - topP = nil topK = nil if !slices.Contains(betaHeaders, anthropicInterleavedThinkingBeta) { maxTokens = reasoning.ClaudeMaxTokensForBudget(thinking.Budget, maxTokens) diff --git a/llms/anthropic/thinking_top_p_wire_test.go b/llms/anthropic/thinking_top_p_wire_test.go new file mode 100644 index 000000000..7d33a1cf3 --- /dev/null +++ b/llms/anthropic/thinking_top_p_wire_test.go @@ -0,0 +1,63 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestThinkingKeepsTopPAboveTheFloor(t *testing.T) { + t.Parallel() + + budget := func(extra ...llms.CallOption) []llms.CallOption { + return append([]llms.CallOption{ + llms.WithReasoning(llms.ReasoningNone, 1024), llms.WithMaxTokens(4096), + }, extra...) + } + adaptive := func(extra ...llms.CallOption) []llms.CallOption { + return append([]llms.CallOption{ + llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithMaxTokens(4096), + }, extra...) + } + + for _, tc := range []struct { + name string + model string + opts []llms.CallOption + wantTopP any + wantTemp any + }{ + {"бюджет: top_p выше порога вытесняет служебную температуру", "claude-sonnet-4-5", + budget(llms.WithTopP(0.97)), 0.97, nil}, + {"бюджет: ровно порог", "claude-sonnet-4-5", + budget(llms.WithTopP(0.95)), 0.95, nil}, + {"бюджет: ниже порога снимается, температура остаётся", "claude-sonnet-4-5", + budget(llms.WithTopP(0.5)), nil, 1.0}, + {"бюджет: вызывающий задал оба — побеждает температура", "claude-sonnet-4-5", + budget(llms.WithTopP(0.97), llms.WithTemperature(0.3)), nil, 1.0}, + {"бюджет: без top_p служебная температура на месте", "claude-sonnet-4-5", + budget(), nil, 1.0}, + {"4.6 на бюджетном пути: top_p выше порога доезжает", "claude-opus-4-6", + adaptive(llms.WithTopP(0.97)), 0.97, nil}, + {"4.6 на бюджетном пути: ниже порога снимается", "claude-opus-4-6", + adaptive(llms.WithTopP(0.5)), nil, 1.0}, + {"модель без сэмплинга не получает ни того ни другого", "claude-sonnet-5", + adaptive(llms.WithTopP(0.97)), nil, nil}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + body, _ := captureMessagesRequestModel(t, tc.model, tc.opts...) + if tc.wantTopP == nil { + assert.NotContains(t, body, "top_p") + } else { + assert.Equal(t, tc.wantTopP, body["top_p"]) + } + if tc.wantTemp == nil { + assert.NotContains(t, body, "temperature") + } else { + assert.Equal(t, tc.wantTemp, body["temperature"]) + } + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index c8b65135a..204dc64f5 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -183,8 +183,14 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } // Budget thinking requires temperature=1.0 and rejects top_p. if isAnthropicModelID(input.ModelID) { + keepTopP := input.Temperature == nil && inferenceConfig.TopP != nil && + reasoning.ClaudeKeepsTopPWhileThinking(input.ModelID, float64(*inferenceConfig.TopP)) inferenceConfig.Temperature = aws.Float32(1.0) - inferenceConfig.TopP = nil + if keepTopP { + inferenceConfig.Temperature = nil + } else { + inferenceConfig.TopP = nil + } } return nil } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index f342f92a2..5b27f74eb 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -800,6 +800,7 @@ func getAnthropicInputContent(message Message) anthropicTextGenerationInputConte func applyAnthropicReasoning( input *anthropicTextGenerationInput, cfg *llms.ReasoningConfig, modelID string, maxTokens int, ) error { + callerTemperature := input.Temperature // Adaptive-only models reject sampling params even without thinking. if reasoning.ClaudeRejectsSampling(modelID) { input.Temperature = 0 @@ -840,11 +841,17 @@ func applyAnthropicReasoning( input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. - input.Temperature = 1.0 - if reasoning.ClaudeRejectsSampling(modelID) { + keepTopP := callerTemperature == 0 && + reasoning.ClaudeKeepsTopPWhileThinking(modelID, input.TopP) + switch { + case reasoning.ClaudeRejectsSampling(modelID), keepTopP: input.Temperature = 0 + default: + input.Temperature = 1.0 + } + if !keepTopP { + input.TopP = 0 } - input.TopP = 0 input.TopK = 0 return nil } diff --git a/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go b/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go new file mode 100644 index 000000000..c19ce5dd5 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go @@ -0,0 +1,72 @@ +package bedrockclient + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestLegacyThinkingKeepsTopPAboveTheFloor(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + topP float64 + temp float64 + want float64 + }{ + {"выше порога доезжает", "anthropic.claude-sonnet-4-5-v1:0", 0.97, 0, 0.97}, + {"вызывающий задал оба — top_p уходит", "anthropic.claude-sonnet-4-5-v1:0", 0.97, 0.3, 0}, + {"ровно порог доезжает", "anthropic.claude-sonnet-4-5-v1:0", 0.95, 0, 0.95}, + {"ниже порога снимается", "anthropic.claude-sonnet-4-5-v1:0", 0.5, 0, 0}, + {"модель без сэмплинга не получает", "anthropic.claude-sonnet-5-v1:0", 0.97, 0, 0}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + input := anthropicTextGenerationInput{MaxTokens: 4096, TopP: tc.topP, Temperature: tc.temp} + require.NoError(t, applyAnthropicReasoning(&input, + &llms.ReasoningConfig{Tokens: 1024}, tc.model, 4096)) + assert.InDelta(t, tc.want, input.TopP, 1e-9) + }) + } +} + +func TestConverseThinkingKeepsTopPAboveTheFloor(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + topP float64 + temp *float64 + want *float32 + }{ + {"выше порога доезжает", "anthropic.claude-sonnet-4-5-v1:0", 0.97, nil, ptr(float32(0.97))}, + {"вызывающий задал оба — top_p уходит", "anthropic.claude-sonnet-4-5-v1:0", 0.97, ptr(0.3), nil}, + {"ниже порога снимается", "anthropic.claude-sonnet-4-5-v1:0", 0.5, nil, nil}, + {"модель без сэмплинга не получает", "anthropic.claude-sonnet-5-v1:0", 0.97, nil, nil}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + client := NewConverseClient(&MockBedrockRuntimeClient{}) + built, err := client.buildConverseInput(&ConverseInput{ + ModelID: tc.model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + MaxTokens: ptr(4096), + TopP: ptr(tc.topP), + Temperature: tc.temp, + ReasoningConfig: &llms.ReasoningConfig{Tokens: 1024}, + }) + require.NoError(t, err) + if tc.want == nil { + assert.Nil(t, built.InferenceConfig.TopP) + return + } + require.NotNil(t, built.InferenceConfig.TopP) + assert.InDelta(t, *tc.want, *built.InferenceConfig.TopP, 1e-6) + }) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index f65202ad6..1ec7d5697 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -480,7 +480,10 @@ func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallO temperature := 1.0 req.Temperature = &temperature } - req.TopP = nil + if req.Temperature != nil || req.TopP == nil || + !reasoning.ClaudeKeepsTopPWhileThinking(model, *req.TopP) { + req.TopP = nil + } req.TopK = nil req.FrequencyPenalty = nil req.PresencePenalty = nil diff --git a/llms/openai/thinking_top_p_wire_test.go b/llms/openai/thinking_top_p_wire_test.go new file mode 100644 index 000000000..84e953ff8 --- /dev/null +++ b/llms/openai/thinking_top_p_wire_test.go @@ -0,0 +1,48 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestClaudeThinkingKeepsTopPAboveTheFloor(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + opts []llms.CallOption + want string + absent bool + }{ + {"Claude держит top_p выше порога", "claude-sonnet-4-5", + []llms.CallOption{llms.WithTopP(0.97)}, `"top_p":0.97`, false}, + {"Claude держит ровно порог", "claude-sonnet-4-5", + []llms.CallOption{llms.WithTopP(0.95)}, `"top_p":0.95`, false}, + {"Claude снимает ниже порога", "claude-sonnet-4-5", + []llms.CallOption{llms.WithTopP(0.5)}, `"top_p"`, true}, + {"вызывающий задал оба — top_p уходит", "claude-sonnet-4-5", + []llms.CallOption{llms.WithTopP(0.97), llms.WithTemperature(0.3)}, `"top_p"`, true}, + {"модель без сэмплинга не получает top_p", "claude-sonnet-5", + []llms.CallOption{llms.WithTopP(0.97)}, `"top_p"`, true}, + {"reasoning-линейка OpenAI по-прежнему теряет top_p", "gpt-5.4", + []llms.CallOption{llms.WithTopP(0.97)}, `"top_p"`, true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + opts := append([]llms.CallOption{ + llms.WithMaxTokens(8000), llms.WithReasoning(llms.ReasoningHigh, 0), + }, tc.opts...) + body := bodyForCall(t, tc.model, opts...) + if got := strings.Contains(body, tc.want); got == tc.absent { + verb := "не содержит" + if tc.absent { + verb = "содержит" + } + t.Errorf("тело запроса %s %s\nтело: %s", verb, tc.want, body) + } + }) + } +} diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 8db950818..ba782d68e 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -318,6 +318,18 @@ var rejectsSamplingClaude = []string{ "claude-opus-latest", "claude-sonnet-latest", "claude-fable-latest", } +// ClaudeThinkingTopPFloor is the lowest top_p Anthropic accepts while the model +// is thinking. +const ClaudeThinkingTopPFloor = 0.95 + +// ClaudeKeepsTopPWhileThinking reports whether the caller's top_p survives on +// the wire once the model is thinking. +func ClaudeKeepsTopPWhileThinking(model string, topP float64) bool { + return ClaudeSupportsThinking(model) && + !ClaudeRejectsSampling(model) && + topP >= ClaudeThinkingTopPFloor +} + // ClaudeRejectsSampling reports whether the model rejects temperature/top_p // outright, so sampling params must be dropped even when no thinking is // requested. diff --git a/llms/reasoning/claude_top_p_test.go b/llms/reasoning/claude_top_p_test.go new file mode 100644 index 000000000..89ad4e2a8 --- /dev/null +++ b/llms/reasoning/claude_top_p_test.go @@ -0,0 +1,31 @@ +package reasoning + +import "testing" + +func TestClaudeKeepsTopPWhileThinking(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + topP float64 + want bool + }{ + {"claude-sonnet-4-5", 0.97, true}, + {"claude-sonnet-4-5", 0.95, true}, + {"claude-sonnet-4-5", 0.94, false}, + {"claude-sonnet-4-5", 0.5, false}, + {"claude-opus-4-6", 0.97, true}, + {"anthropic/claude-sonnet-4-5", 0.97, true}, + {"claude-sonnet-5", 0.97, false}, + {"claude-opus-4-7", 0.97, false}, + {"claude-fable-5-1", 0.97, false}, + {"gpt-5.4", 0.97, false}, + {"o3", 0.97, false}, + {"gemini-3.5-flash", 0.97, false}, + } { + if got := ClaudeKeepsTopPWhileThinking(tc.model, tc.topP); got != tc.want { + t.Errorf("ClaudeKeepsTopPWhileThinking(%q, %v) = %v, want %v", + tc.model, tc.topP, got, tc.want) + } + } +} From 7d1acda45bc7e1549b6651598add1e84de49b163 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 01:25:58 +0300 Subject: [PATCH 305/618] fix(mistral): accept every tool choice the vendor names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door matched three literal strings against the SDK's constants and dropped everything else, on the reading that those three were the whole vendor vocabulary. They are not. Mistral's own validator names four: Input should be 'auto', 'none', 'any' or 'required' So a caller writing "required" — the spelling the shared layer already classifies, and the one OpenAI-shaped callers reach for — got no tool_choice on the wire at all and the model was left to decide. The same held for every non-string spelling: a llms.ToolChoice struct or a map went through the type assertion and out. Classifying through the shared layer covers all of them, and "required" lands on "any", which the vendor treats identically — both force a call, measured on the vendor's own passthrough. A named tool still stays off the wire. The vendor does accept the object form, but the SDK types tool_choice as a bare string, so the name cannot be expressed through this dependency — the same wall as the seed. PAGI-185 Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 18 ++++++++------ llms/mistral/sampling_wire_test.go | 40 +++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 187f0e3ba..60593b51d 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -334,14 +334,16 @@ func setMistralChatMessageRole(msg *llms.MessageContent, chatMsg *sdk.ChatMessag } func mistralToolChoice(choice any) string { - name, ok := choice.(string) - if !ok { - return "" - } - switch name { - case sdk.ToolChoiceAny, sdk.ToolChoiceAuto, sdk.ToolChoiceNone: - return name - default: + kind, _ := llms.ClassifyToolChoice(choice) + switch kind { + case llms.ToolChoiceAuto: + return sdk.ToolChoiceAuto + case llms.ToolChoiceNone: + return sdk.ToolChoiceNone + case llms.ToolChoiceAny: + return sdk.ToolChoiceAny + case llms.ToolChoiceNamed, llms.ToolChoiceUnset: return "" } + return "" } diff --git a/llms/mistral/sampling_wire_test.go b/llms/mistral/sampling_wire_test.go index ee78fd5a6..5f5c99e6c 100644 --- a/llms/mistral/sampling_wire_test.go +++ b/llms/mistral/sampling_wire_test.go @@ -63,14 +63,42 @@ func TestJSONModeReachesTheMistralWire(t *testing.T) { func TestToolChoiceReachesTheMistralWire(t *testing.T) { t.Parallel() - for _, choice := range []string{"any", "auto", "none"} { - if got := captureMistralRequest(t, llms.WithToolChoice(choice))["tool_choice"]; got != choice { - t.Errorf("tool_choice %q must reach the wire, got %v", choice, got) - } + for _, tc := range []struct { + name string + choice any + want any + }{ + {"any", "any", "any"}, + {"auto", "auto", "auto"}, + {"none", "none", "none"}, + {"required", "required", "any"}, + {"function without a name", "function", "any"}, + {"struct asking for any", llms.ToolChoice{Type: "any"}, "any"}, + {"struct asking for auto", llms.ToolChoice{Type: "auto"}, "auto"}, + {"map asking for required", map[string]any{"type": "required"}, "any"}, + {"named tool", llms.ToolChoice{ + Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}, + }, nil}, + {"a spelling nobody uses", "something-else", nil}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + got, sent := captureMistralRequest(t, llms.WithToolChoice(tc.choice))["tool_choice"] + if tc.want == nil { + if sent { + t.Errorf("must stay off the wire, got %v", got) + } + return + } + if got != tc.want { + t.Errorf("want %v on the wire, got %v", tc.want, got) + } + }) } - if _, ok := captureMistralRequest(t, llms.WithToolChoice("something-else"))["tool_choice"]; ok { - t.Error("a choice the vendor has no name for must not be guessed at") + if _, ok := captureMistralRequest(t)["tool_choice"]; ok { + t.Error("an unset choice must leave the field off the wire") } } From 000bb371b49fda3192d548bc6657c3ce311caf03 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 01:31:33 +0300 Subject: [PATCH 306/618] test(openai): pin that grok refuses penalties whatever its reasoning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file header and a dangling comment both scoped xAI's refusal of presence_penalty and frequency_penalty to reasoning models, and the door's guard was on the list to be narrowed to match. Measured against xAI through the gateway, the vendor answers the same on models it calls non-reasoning: XaiException: Model grok-3 does not support parameter frequencyPenalty Same for grok-3-mini, grok-3-latest, grok-4.20-0309-non-reasoning, and the same again for presencePenalty. Narrowing the guard would have put a field on the wire that xAI answers with 400. So the guard stands and the prose goes: the three measured names join the pinned list, and the header claim they contradicted is deleted rather than reworded — the test is the contract. PAGI-190 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 3 ++- llms/openai/openaillm_cache_test.go | 9 --------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 09ea952a1..5d5714cbe 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -92,7 +92,8 @@ func TestPenaltiesStayOffTheDoorsThatRefuseThem(t *testing.T) { t.Parallel() for _, model := range []string{ - "grok-4.6", "grok-4-1-fast", "grok-4-1-fast-non-reasoning", "grok-3-mini-beta", "xai/grok-4.6", + "grok-4.6", "grok-4-1-fast", "grok-4-1-fast-non-reasoning", "grok-3", "grok-3-mini", + "grok-3-mini-beta", "grok-4.20-0309-non-reasoning", "xai/grok-4.6", } { body := captureDeepSeekRequest(t, model, llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.5)) diff --git a/llms/openai/openaillm_cache_test.go b/llms/openai/openaillm_cache_test.go index e4f8f8013..3d7670641 100644 --- a/llms/openai/openaillm_cache_test.go +++ b/llms/openai/openaillm_cache_test.go @@ -977,10 +977,6 @@ func TestOpenAI_ImplicitCaching_Conversation_Streaming_Reasoning(t *testing.T) { // - Works across turns as long as the message prefix is unchanged // (including tool calls and their responses). // -// 3. SAMPLING RESTRICTIONS ON REASONING MODELS: -// - presence_penalty, frequency_penalty and stop are rejected by the API -// when used together with a reasoning model. -// // ============================================================================ // TestXAI_ImplicitCaching_IdenticalRequests tests that xAI's automatic prompt @@ -1234,8 +1230,3 @@ func TestXAI_ImplicitCaching_Conversation_WithTools(t *testing.T) { //nolint:fun assert.Greater(t, rr2, 0, "Request 2 (reasoning with tools) should return reasoning tokens") assert.NotEmpty(t, choice2.Content, "Response 2 should have content") } - -// TestXAI_ReasoningModel_RejectsPenalties documents (and pins) that grok-4.5 -// rejects presence_penalty when used together with reasoning, as documented -// by xAI: "presencePenalty, frequencyPenalty, and stop cannot be used with -// reasoning models. Requests that include them return an error." From adfe414f681914c156afc7738efd70efe5a82a69 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 10:26:21 +0300 Subject: [PATCH 307/618] fix(bedrock): send each family the reasoning shape it accepts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Converse client built additionalModelRequestFields from one struct carrying "thinking" and "output_config" — the Anthropic shape — whatever the model was. Amazon Nova rejects it outright: 400 Malformed input request: #: extraneous key [thinking] is not permitted so every reasoning request to a Nova 2 model failed. Nova takes reasoningConfig with type (enabled/disabled) and maxReasoningEffort (low/medium/high), and refuses maxTokens while reasoning is on and sampling params at the top effort. All of that is now sent, and ResolveMechanism gained a Nova case so the choice of wire stays in the one function that already makes it. xAI Grok gained its own case at the same time. It carries an effort in a "reasoning" object, and the ladder differs by generation: 4.3 accepts none through high, 4.6 dropped none and added xhigh, so it cannot be turned off. Previously Grok got no reasoning field at all. The other non-Claude thinkers are deliberately untouched. gpt-oss, minimax M2.1 and M2.5 all accept the thinking object today and return reasoning content, and kimi-k2.5 accepts it without effect; none of them errors, so there is nothing here to fix and no documented shape to replace it with. AWS documents a reasoning parameter for exactly two non-Claude families, Nova and Grok, and says nothing beyond "Reasoning: Supported" for the rest. TestConverseClient_ReasoningReachesNonClaudeThinkers loses its Nova case, which pinned the shape this commit removes; deepseek and glm keep theirs. Wire shapes verified 2026-09-04 against the Nova 2 and Grok model-card pages and, for Nova, against live Bedrock validation errors. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 40 +++++++++ .../bedrockclient_converse_test.go | 86 +++++++++++++++++- llms/reasoning/bedrock_capability.go | 64 +++++++++++++ llms/reasoning/bedrock_capability_test.go | 90 +++++++++++++++++++ llms/reasoning/mechanism.go | 6 ++ 5 files changed, 285 insertions(+), 1 deletion(-) create mode 100644 llms/reasoning/bedrock_capability.go create mode 100644 llms/reasoning/bedrock_capability_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 204dc64f5..71b3cd25d 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -95,6 +95,23 @@ type converseAdditionalModelRequestFields struct { OutputConfig *converseOutputConfig `json:"output_config,omitempty" document:"output_config,omitempty"` } +type converseNovaReasoningConfig struct { + Type string `json:"type" document:"type"` + MaxReasoningEffort string `json:"maxReasoningEffort,omitempty" document:"maxReasoningEffort,omitempty"` +} + +type converseNovaFields struct { + ReasoningConfig *converseNovaReasoningConfig `json:"reasoningConfig,omitempty" document:"reasoningConfig,omitempty"` +} + +type converseGrokReasoning struct { + Effort string `json:"effort,omitempty" document:"effort,omitempty"` +} + +type converseGrokFields struct { + Reasoning *converseGrokReasoning `json:"reasoning,omitempty" document:"reasoning,omitempty"` +} + // buildConverseInput converts our input to AWS Converse format func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockruntime.ConverseInput, error) { // Convert messages @@ -156,6 +173,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti switch input.ReasoningConfig.ResolveMode() { case llms.ReasoningOn: additionalModelFields := converseAdditionalModelRequestFields{} + var familyFields any maxTokens := 0 // Use 0 to let it use default maxTokens if input.MaxTokens != nil { maxTokens = *input.MaxTokens @@ -194,6 +212,21 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } return nil } + setNova := func() { + effort := reasoning.NovaEffort(string(input.ReasoningConfig.GetEffort(maxTokens))) + familyFields = converseNovaFields{ + ReasoningConfig: &converseNovaReasoningConfig{Type: "enabled", MaxReasoningEffort: effort}, + } + inferenceConfig.MaxTokens = nil + if reasoning.NovaRejectsSamplingAt(effort) { + inferenceConfig.Temperature = nil + inferenceConfig.TopP = nil + } + } + setGrok := func() { + effort := reasoning.GrokEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) + familyFields = converseGrokFields{Reasoning: &converseGrokReasoning{Effort: effort}} + } switch reasoning.ResolveMechanism(input.ModelID, input.ReasoningConfig.Adaptive, isAnthropicModelID(input.ModelID), c.supportsReasoning(input.ModelID)) { case reasoning.MechanismAdaptive: @@ -202,6 +235,13 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti if err := setBudget(); err != nil { return nil, err } + case reasoning.MechanismNovaReasoningConfig: + setNova() + case reasoning.MechanismGrokEffort: + setGrok() + } + if familyFields != nil { + converseInput.AdditionalModelRequestFields = document.NewLazyDocument(familyFields) } if additionalModelFields.Thinking != nil { converseInput.AdditionalModelRequestFields = document.NewLazyDocument(additionalModelFields) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 2aacc913f..22588b9b5 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1178,7 +1178,6 @@ func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { for _, modelID := range []string{ "us.deepseek.r1-v1:0", "zai.glm-4.7", - "us.amazon.nova-2-lite-v1:0", } { t.Run(modelID, func(t *testing.T) { mockClient := &MockBedrockRuntimeClient{} @@ -1220,3 +1219,88 @@ func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { }) } } + +// novaConverseFields runs one reasoning request through the client and returns the +// additionalModelRequestFields it built, plus the inference config it settled on. +func novaConverseFields(t *testing.T, modelID string, cfg *llms.ReasoningConfig, + temperature, topP *float64, +) (map[string]any, *types.InferenceConfiguration) { + t.Helper() + + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + input := &ConverseInput{ + ModelID: modelID, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(8000), + Temperature: temperature, + TopP: topP, + ReasoningConfig: cfg, + } + + _, err := client.CreateCompletionConverse(t.Context(), input) + require.NoError(t, err) + require.NotNil(t, capturedInput.AdditionalModelRequestFields) + + raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(raw, &fields)) + + return fields, capturedInput.InferenceConfig +} + +func TestConverseNovaSendsReasoningConfigNotThinking(t *testing.T) { + fields, cfg := novaConverseFields(t, "us.amazon.nova-2-lite-v1:0", + &llms.ReasoningConfig{Effort: llms.ReasoningMedium}, nil, nil) + + assert.Nil(t, fields["thinking"], + "Bedrock answers a thinking key on Nova with extraneous key [thinking] is not permitted") + + rc, _ := fields["reasoningConfig"].(map[string]any) + require.NotNil(t, rc, "Nova carries its reasoning in reasoningConfig") + assert.Equal(t, "enabled", rc["type"]) + assert.Equal(t, "medium", rc["maxReasoningEffort"]) + + require.NotNil(t, cfg) + assert.Nil(t, cfg.MaxTokens, "Nova refuses maxTokens while reasoning is enabled") +} + +func TestConverseNovaClampsEffortAndDropsSamplingAtHigh(t *testing.T) { + temperature, topP := 0.4, 0.9 + fields, cfg := novaConverseFields(t, "us.amazon.nova-2-lite-v1:0", + &llms.ReasoningConfig{Effort: llms.ReasoningMax}, &temperature, &topP) + + rc, _ := fields["reasoningConfig"].(map[string]any) + require.NotNil(t, rc) + assert.Equal(t, "high", rc["maxReasoningEffort"], "Nova takes only low, medium and high") + + require.NotNil(t, cfg) + assert.Nil(t, cfg.Temperature, "Nova rejects sampling params at the top effort") + assert.Nil(t, cfg.TopP) +} + +func TestConverseGrokSendsReasoningEffort(t *testing.T) { + fields, _ := novaConverseFields(t, "us.xai.grok-4.6", + &llms.ReasoningConfig{Effort: llms.ReasoningMax}, nil, nil) + + assert.Nil(t, fields["thinking"], "Grok carries no thinking object") + + r, _ := fields["reasoning"].(map[string]any) + require.NotNil(t, r, "Grok carries its effort in a reasoning object") + assert.Equal(t, "xhigh", r["effort"], "4.6 gained xhigh") +} diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go new file mode 100644 index 000000000..300fca15e --- /dev/null +++ b/llms/reasoning/bedrock_capability.go @@ -0,0 +1,64 @@ +package reasoning + +import "strings" + +// IsNovaReasoningModel reports whether the Bedrock model takes Amazon Nova's +// reasoningConfig. +func IsNovaReasoningModel(model string) bool { + return strings.Contains(baseModelName(model), "amazon.nova-2") +} + +// NovaEffort maps a requested effort onto the three levels Nova accepts. Bedrock +// answers anything else with "is not a valid enum value". +func NovaEffort(effort string) string { + switch strings.ToLower(effort) { + case "minimal", "low": + return "low" + case "medium": + return "medium" + default: + return "high" + } +} + +// NovaRejectsSamplingAt reports whether Nova refuses temperature, topP and topK +// alongside the given effort. +func NovaRejectsSamplingAt(effort string) bool { + return NovaEffort(effort) == "high" +} + +// IsGrokModel reports whether the Bedrock model belongs to the xAI Grok family, +// which carries its effort in a reasoning object rather than a thinking one. +func IsGrokModel(model string) bool { + return strings.Contains(baseModelName(model), "xai.grok") +} + +// grokDropsNone are the Grok generations that always reason. +var grokDropsNone = []string{"grok-4.6"} + +// GrokCanDisable reports whether the model accepts effort none. +func GrokCanDisable(model string) bool { + return !containsAny(baseModelName(model), grokDropsNone) +} + +// GrokEffort maps a requested effort onto what the model accepts. +func GrokEffort(model, effort string) string { + switch strings.ToLower(effort) { + case "none", "": + if GrokCanDisable(model) { + return "none" + } + return "low" + case "minimal", "low": + return "low" + case "medium": + return "medium" + case "xhigh", "max": + if !GrokCanDisable(model) { + return "xhigh" + } + return "high" + default: + return "high" + } +} diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go new file mode 100644 index 000000000..b0b364e28 --- /dev/null +++ b/llms/reasoning/bedrock_capability_test.go @@ -0,0 +1,90 @@ +package reasoning + +import "testing" + +func TestNovaReasoningModelIsTheSecondGenerationOnly(t *testing.T) { + for _, model := range []string{ + "amazon.nova-2-lite-v1:0", "us.amazon.nova-2-lite-v1:0", + "global.amazon.nova-2-pro-preview-20251202-v1:0", + } { + if !IsNovaReasoningModel(model) { + t.Errorf("%s takes reasoningConfig", model) + } + } + for _, model := range []string{ + "amazon.nova-pro-v1:0", "us.amazon.nova-lite-v1:0", "amazon.nova-micro-v1:0", + "us.anthropic.claude-opus-5", "openai.gpt-oss-120b-1:0", + } { + if IsNovaReasoningModel(model) { + t.Errorf("%s does not take reasoningConfig", model) + } + } +} + +func TestNovaEffortCollapsesOntoThreeLevels(t *testing.T) { + cases := map[string]string{ + "minimal": "low", "low": "low", "medium": "medium", + "high": "high", "xhigh": "high", "max": "high", "": "high", + } + for in, want := range cases { + if got := NovaEffort(in); got != want { + t.Errorf("NovaEffort(%q) = %q, want %q — Bedrock rejects anything outside low/medium/high", in, got, want) + } + } +} + +func TestNovaRejectsSamplingOnlyAtTopEffort(t *testing.T) { + if !NovaRejectsSamplingAt("max") || !NovaRejectsSamplingAt("high") { + t.Error("temperature, topP and topK are an error at the top effort") + } + if NovaRejectsSamplingAt("low") || NovaRejectsSamplingAt("medium") { + t.Error("sampling params are allowed below the top effort") + } +} + +func TestGrokDropsNoneFromTheNewerGeneration(t *testing.T) { + if !IsGrokModel("us.xai.grok-4.6") || !IsGrokModel("xai.grok-4.3") { + t.Fatal("both generations are Grok") + } + if !GrokCanDisable("xai.grok-4.3") { + t.Error("4.3 still accepts none") + } + if GrokCanDisable("us.xai.grok-4.6") { + t.Error("4.6 reasons always; none is not a valid effort there") + } +} + +func TestGrokEffortFollowsTheGeneration(t *testing.T) { + cases := []struct{ model, in, want string }{ + {"xai.grok-4.3", "none", "none"}, + {"xai.grok-4.3", "max", "high"}, + {"xai.grok-4.3", "xhigh", "high"}, + {"us.xai.grok-4.6", "none", "low"}, + {"us.xai.grok-4.6", "max", "xhigh"}, + {"us.xai.grok-4.6", "xhigh", "xhigh"}, + {"us.xai.grok-4.6", "medium", "medium"}, + {"us.xai.grok-4.6", "minimal", "low"}, + } + for _, c := range cases { + if got := GrokEffort(c.model, c.in); got != c.want { + t.Errorf("GrokEffort(%s, %q) = %q, want %q", c.model, c.in, got, c.want) + } + } +} + +func TestMechanismSeparatesTheBedrockFamilies(t *testing.T) { + cases := []struct { + model string + claudeFamily bool + want Mechanism + }{ + {"us.amazon.nova-2-lite-v1:0", false, MechanismNovaReasoningConfig}, + {"us.xai.grok-4.6", false, MechanismGrokEffort}, + {"us.anthropic.claude-opus-4-5-20251101-v1:0", true, MechanismBudget}, + } + for _, c := range cases { + if got := ResolveMechanism(c.model, false, c.claudeFamily, true); got != c.want { + t.Errorf("ResolveMechanism(%s) = %d, want %d", c.model, got, c.want) + } + } +} diff --git a/llms/reasoning/mechanism.go b/llms/reasoning/mechanism.go index 222b928ca..9ba2b4b0f 100644 --- a/llms/reasoning/mechanism.go +++ b/llms/reasoning/mechanism.go @@ -7,6 +7,8 @@ const ( MechanismNone Mechanism = iota MechanismAdaptive MechanismBudget + MechanismNovaReasoningConfig + MechanismGrokEffort ) // ResolveMechanism picks the thinking mechanism for a model the caller asked to @@ -22,6 +24,10 @@ func ResolveMechanism(model string, adaptive, claudeFamily, reasons bool) Mechan return MechanismBudget case adaptive && claudeFamily && !ClaudePredatesAdaptive(model): return MechanismAdaptive + case IsNovaReasoningModel(model): + return MechanismNovaReasoningConfig + case IsGrokModel(model): + return MechanismGrokEffort case reasons: return MechanismBudget default: From ec0ee19dba85ca9b5f59fb0fc19af2ddc3c3ff63 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 10:49:01 +0300 Subject: [PATCH 308/618] fix(pgvector): bind metadata filters and the namespace as query arguments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both search paths built their WHERE clause with fmt.Sprintf, dropping the caller's metadata key and value straight into a quoted SQL literal, and the collection name beside them. A value carrying a quote leaves the literal and the rest of the statement is whatever the caller wrote: filter {"kind": "x' OR '1'='1"} → (data.cmetadata ->> 'kind') = 'x' OR '1'='1' which matches every row, and a value ending in "; DROP TABLE …; --" reaches the server as a second statement. All three values come from vectorstores.Options, so any caller passing user input through a filter or a namespace was exposed. The clause is now built by filterPredicates, which emits placeholders numbered from the count of arguments already bound and returns the key and value to bind; the namespace gets a placeholder too. Keys are sorted so the generated statement is stable for a given filter. Non-string filter values now render as their text form rather than fmt's %!s(int=5), so a filter that could never match before can match. The predicate builder is covered directly: four injection shapes assert that no quote, double quote or semicolon reaches the statement and that both halves of each pair travel as arguments, plus placeholder numbering from an offset, a non-string value and an empty filter. Reverting the builder to string interpolation turns all four injection cases red. The package's own integration tests need an LLM endpoint the sandbox does not reach; they fail identically on the release base. PAGI-213 Co-Authored-By: Claude Opus 5 --- vectorstores/pgvector/filter_test.go | 89 ++++++++++++++++++++++++++++ vectorstores/pgvector/pgvector.go | 47 ++++++++++----- 2 files changed, 122 insertions(+), 14 deletions(-) create mode 100644 vectorstores/pgvector/filter_test.go diff --git a/vectorstores/pgvector/filter_test.go b/vectorstores/pgvector/filter_test.go new file mode 100644 index 000000000..22060ee39 --- /dev/null +++ b/vectorstores/pgvector/filter_test.go @@ -0,0 +1,89 @@ +package pgvector + +import ( + "strings" + "testing" +) + +func TestFilterPredicatesKeepCallerTextOutOfTheStatement(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + filter map[string]any + }{ + {"value closes the literal and appends a tautology", map[string]any{ + "kind": "x' OR '1'='1", + }}, + {"value ends the statement", map[string]any{ + "kind": "x'; DROP TABLE langchaingo_pg_embedding; --", + }}, + {"key closes the literal", map[string]any{ + "kind') = 'x' OR '1'='1": "y", + }}, + {"quote inside an ordinary value", map[string]any{ + "owner": "O'Brien", + }}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + predicates, args := filterPredicates("data.", tc.filter, 0) + joined := strings.Join(predicates, " AND ") + if strings.ContainsAny(joined, "'\";") { + t.Fatalf("caller text reached the statement: %q", joined) + } + for k, v := range tc.filter { + if !contains(args, k) { + t.Errorf("key %q must travel as an argument, got args %v", k, args) + } + if !contains(args, v) { + t.Errorf("value %q must travel as an argument, got args %v", v, args) + } + } + }) + } +} + +func TestFilterPredicatesNumberFromTheOffset(t *testing.T) { + t.Parallel() + + predicates, args := filterPredicates("data.", map[string]any{"a": "1", "b": "2"}, 4) + want := "(data.cmetadata ->> $5) = $6 AND (data.cmetadata ->> $7) = $8" + if got := strings.Join(predicates, " AND "); got != want { + t.Errorf("want %q, got %q", want, got) + } + if len(args) != 4 { + t.Errorf("want four arguments beside two pairs, got %v", args) + } + if args[0] != "a" || args[2] != "b" { + t.Errorf("keys must be ordered so the statement is stable, got %v", args) + } +} + +func TestFilterPredicatesOnValuesThatAreNotStrings(t *testing.T) { + t.Parallel() + + _, args := filterPredicates("t.", map[string]any{"n": 5}, 0) + if len(args) != 2 || args[1] != "5" { + t.Errorf("a non-string value must reach the wire as text, got %v", args) + } +} + +func TestFilterPredicatesOnAnEmptyFilter(t *testing.T) { + t.Parallel() + + predicates, args := filterPredicates("data.", map[string]any{}, 3) + if len(predicates) != 0 || len(args) != 0 { + t.Errorf("an empty filter must add nothing, got %v and %v", predicates, args) + } +} + +func contains(args []any, want any) bool { + for _, a := range args { + if a == want { + return true + } + } + return false +} diff --git a/vectorstores/pgvector/pgvector.go b/vectorstores/pgvector/pgvector.go index 850c0659d..7780b777a 100644 --- a/vectorstores/pgvector/pgvector.go +++ b/vectorstores/pgvector/pgvector.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "sort" "strings" "github.com/vxcontrol/langchaingo/embeddings" @@ -294,18 +295,18 @@ func (s Store) SimilaritySearch( if err != nil { return nil, err } + args := []any{len(embedderData), pgvector.NewVector(embedderData), numDocuments, collectionName} whereQuerys := make([]string, 0) if scoreThreshold != 0 { whereQuerys = append(whereQuerys, fmt.Sprintf("data.distance < %f", 1-scoreThreshold)) } - for k, v := range filter { - whereQuerys = append(whereQuerys, fmt.Sprintf("(data.cmetadata ->> '%s') = '%s'", k, v)) - } + filterQuerys, filterArgs := filterPredicates("data.", filter, len(args)) + whereQuerys = append(whereQuerys, filterQuerys...) + args = append(args, filterArgs...) whereQuery := strings.Join(whereQuerys, " AND ") if len(whereQuery) == 0 { whereQuery = "TRUE" } - dims := len(embedderData) sql := fmt.Sprintf(`WITH filtered_embedding_dims AS MATERIALIZED ( SELECT * @@ -326,14 +327,14 @@ FROM ( embedding <=> $2 AS distance FROM filtered_embedding_dims - JOIN %s ON filtered_embedding_dims.collection_id=%s.uuid WHERE %s.name='%s') AS data + JOIN %s ON filtered_embedding_dims.collection_id=%s.uuid WHERE %s.name=$4) AS data WHERE %s ORDER BY data.distance LIMIT $3`, s.embeddingTableName, - s.collectionTableName, s.collectionTableName, s.collectionTableName, collectionName, + s.collectionTableName, s.collectionTableName, s.collectionTableName, whereQuery) - rows, err := s.conn.Query(ctx, sql, dims, pgvector.NewVector(embedderData), numDocuments) + rows, err := s.conn.Query(ctx, sql, args...) if err != nil { return nil, err } @@ -362,10 +363,9 @@ func (s Store) Search( if err != nil { return nil, err } - whereQuerys := make([]string, 0) - for k, v := range filter { - whereQuerys = append(whereQuerys, fmt.Sprintf("(%s.cmetadata ->> '%s') = '%s'", s.embeddingTableName, k, v)) - } + args := []any{numDocuments, collectionName} + whereQuerys, filterArgs := filterPredicates(s.embeddingTableName+".", filter, len(args)) + args = append(args, filterArgs...) whereQuery := strings.Join(whereQuerys, " AND ") if len(whereQuery) == 0 { whereQuery = "TRUE" @@ -375,11 +375,11 @@ func (s Store) Search( %s.cmetadata FROM %s JOIN %s ON %s.collection_id=%s.uuid -WHERE %s.name='%s' AND %s +WHERE %s.name=$2 AND %s LIMIT $1`, s.embeddingTableName, s.embeddingTableName, s.embeddingTableName, - s.collectionTableName, s.embeddingTableName, s.collectionTableName, s.collectionTableName, collectionName, + s.collectionTableName, s.embeddingTableName, s.collectionTableName, s.collectionTableName, whereQuery) - rows, err := s.conn.Query(ctx, sql, numDocuments) + rows, err := s.conn.Query(ctx, sql, args...) if err != nil { return nil, err } @@ -446,6 +446,25 @@ func (s Store) getScoreThreshold(opts vectorstores.Options) (float32, error) { return opts.ScoreThreshold, nil } +// filterPredicates renders the metadata filter as predicates numbered from +// argOffset; the returned args must be appended to the query in the same order. +func filterPredicates(prefix string, filter map[string]any, argOffset int) ([]string, []any) { + keys := make([]string, 0, len(filter)) + for k := range filter { + keys = append(keys, k) + } + sort.Strings(keys) + + predicates := make([]string, 0, len(keys)) + args := make([]any, 0, len(keys)*2) + for _, k := range keys { + predicates = append(predicates, fmt.Sprintf("(%scmetadata ->> $%d) = $%d", + prefix, argOffset+len(args)+1, argOffset+len(args)+2)) + args = append(args, k, fmt.Sprintf("%v", filter[k])) + } + return predicates, args +} + // getFilters return metadata filters, now only support map[key]value pattern // TODO: should support more types like {"key1": {"key2":"values2"}} or {"key": ["value1", "values2"]}. func (s Store) getFilters(opts vectorstores.Options) (map[string]any, error) { From bdb98a04b05d298de6ff344857fefc441b9cbee4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 10:57:09 +0300 Subject: [PATCH 309/618] fix(reasoning): a model that always reasons cannot be disabled by omission MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ResolveOff sent every Bedrock non-Claude model down the same path — "no clean disable signal, omit" — which is only true for a model that does not reason unless asked. For one that always reasons, omitting leaves thinking on, so an explicit off silently did nothing and the caller had no way to tell. mandatoryThinking already knew the set, and the OpenAI door already reported these models as unsupported-off. Bedrock now agrees: grok-4.6, gpt-oss-120b, minimax-m2.5, kimi-k2-thinking and deepseek.r1 return the typed error instead of a no-op. Nova is deliberately not among them - its reasoningConfig defaults to disabled, so omitting really is off there. GrokEffort loses its own copy of that knowledge and reads mandatoryThinking, and its ladder now follows xAI's published catalog rather than the AWS card. The two disagree twice: xAI lists xhigh for Grok 4.3, which the card omits, and gives Grok 4.6 a default of high where the card says low. The published catalog is the model's own contract, and the defaults never reach the wire here because the client always sends an explicit effort. Verified 2026-09-04 against the reasoningEffortOptions block published at docs.x.ai/developers/models and both AWS Grok model cards. Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 29 ++++++++------------ llms/reasoning/bedrock_capability_test.go | 32 ++++++++++++++++------- llms/reasoning/off.go | 3 +++ 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 300fca15e..722a788d6 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -33,32 +33,25 @@ func IsGrokModel(model string) bool { return strings.Contains(baseModelName(model), "xai.grok") } -// grokDropsNone are the Grok generations that always reason. -var grokDropsNone = []string{"grok-4.6"} - -// GrokCanDisable reports whether the model accepts effort none. -func GrokCanDisable(model string) bool { - return !containsAny(baseModelName(model), grokDropsNone) -} - -// GrokEffort maps a requested effort onto what the model accepts. +// GrokEffort maps a requested effort onto what the model accepts. Only the +// generations that kept none can carry it; a request to disable a model that +// always reasons leaves the field off the wire rather than inventing a level. func GrokEffort(model, effort string) string { switch strings.ToLower(effort) { - case "none", "": - if GrokCanDisable(model) { - return "none" + case "none": + if mandatoryThinking(model) { + return "" } - return "low" + return "none" case "minimal", "low": return "low" case "medium": return "medium" - case "xhigh", "max": - if !GrokCanDisable(model) { - return "xhigh" - } + case "high": return "high" + case "xhigh", "max": + return "xhigh" default: - return "high" + return "" } } diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index b0b364e28..7f74d8b92 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -42,24 +42,23 @@ func TestNovaRejectsSamplingOnlyAtTopEffort(t *testing.T) { } } -func TestGrokDropsNoneFromTheNewerGeneration(t *testing.T) { +func TestGrokIsRecognisedByItsBedrockName(t *testing.T) { if !IsGrokModel("us.xai.grok-4.6") || !IsGrokModel("xai.grok-4.3") { t.Fatal("both generations are Grok") } - if !GrokCanDisable("xai.grok-4.3") { - t.Error("4.3 still accepts none") - } - if GrokCanDisable("us.xai.grok-4.6") { - t.Error("4.6 reasons always; none is not a valid effort there") + if IsGrokModel("us.amazon.nova-2-lite-v1:0") { + t.Error("Nova is not Grok") } } func TestGrokEffortFollowsTheGeneration(t *testing.T) { + // xAI publishes the accepted set per model: 4.3 keeps none, 4.6 dropped it, + // and every generation takes xhigh. cases := []struct{ model, in, want string }{ {"xai.grok-4.3", "none", "none"}, - {"xai.grok-4.3", "max", "high"}, - {"xai.grok-4.3", "xhigh", "high"}, - {"us.xai.grok-4.6", "none", "low"}, + {"xai.grok-4.3", "max", "xhigh"}, + {"xai.grok-4.3", "xhigh", "xhigh"}, + {"us.xai.grok-4.6", "none", ""}, {"us.xai.grok-4.6", "max", "xhigh"}, {"us.xai.grok-4.6", "xhigh", "xhigh"}, {"us.xai.grok-4.6", "medium", "medium"}, @@ -72,6 +71,21 @@ func TestGrokEffortFollowsTheGeneration(t *testing.T) { } } +func TestAlwaysReasoningModelCannotExpressOffOnAnyDoor(t *testing.T) { + for _, model := range []string{"us.xai.grok-4.6", "xai.grok-4.6"} { + for _, p := range []Provider{ProviderBedrock, ProviderOpenAI} { + if got := ResolveOff(model, p); got != OffUnsupported { + t.Errorf("ResolveOff(%s, %v) = %v, want OffUnsupported — omitting leaves thinking on", + model, p, got) + } + } + } + // Nova defaults to disabled, so omitting really is off there. + if got := ResolveOff("us.amazon.nova-2-lite-v1:0", ProviderBedrock); got != OffOmit { + t.Errorf("ResolveOff(nova, bedrock) = %v, want OffOmit", got) + } +} + func TestMechanismSeparatesTheBedrockFamilies(t *testing.T) { cases := []struct { model string diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 3476be835..02fc95ff9 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -108,6 +108,9 @@ func ResolveOff(model string, p Provider) OffWire { } return OffEffortNone default: + if mandatoryThinking(model) { + return OffUnsupported + } // Bedrock non-Claude and everything else: no clean disable signal — omit. return OffOmit } From 84906db3ea8101e5ae154e1ee3df090006932a7e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 11:11:21 +0300 Subject: [PATCH 310/618] fix(reasoning): clamp the o-series effort back to what the vendor accepts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The o-series row carries xhigh, so a caller asking for xhigh or max on o1, o3, o3-mini or o4-mini has it sent verbatim and the vendor answers: Unsupported value: 'xhigh' is not supported with the 'o3' model. Supported values are: 'low', 'medium', and 'high'. Measured today on all four names; each answers 200 at high. On the release base the same call succeeded, because the row was low/medium/high and the clamp stepped xhigh down — so this release removes working behaviour, which the release policy treats as a defect rather than as an accepted trade. This restores a fix that was already made against this exact measurement and then reverted with no reason recorded. The revert also rewrote the tests to assert the refused shape, so a green test was guarding a guaranteed 400; they now assert high again, at the table and on the wire. Kept from the meantime: the gpt-5.2/5.4/5.5-pro rows, which arrived after the revert and are unrelated. PAGI-97 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_effort_passthrough_test.go | 6 +++--- llms/reasoning/openai_capability.go | 2 +- llms/reasoning/openai_capability_test.go | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 00f055529..072eabb99 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -228,10 +228,10 @@ func TestReasoningEffortClampedPerModel(t *testing.T) { } }) - t.Run("o-series keeps xhigh", func(t *testing.T) { + t.Run("o-series clamps xhigh to high", func(t *testing.T) { body := capture(t, "o3", llms.ReasoningXHigh) - if !strings.Contains(body, `"reasoning_effort":"xhigh"`) { - t.Fatalf("o3 accepts xhigh and must not be downgraded, got body: %s", body) + if !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Fatalf("o3 takes only low/medium/high, got body: %s", body) } }) diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index 8f5f7f5b9..dfc8a4047 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -82,7 +82,7 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { } return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"high"}} case openAIMandatoryReasoning(m): - return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high"}} case openAIGPT5Base(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"minimal", "low", "medium", "high"}} case hasGeneration(m, "gpt-5.1"): diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index c71c05feb..0f0bb0318 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -17,9 +17,9 @@ func TestOpenAIReasoningCapsFor(t *testing.T) { {"gpt-5.2-pro", true, false, []string{"medium", "high", "xhigh"}}, {"gpt-5.4-pro", true, false, []string{"medium", "high", "xhigh"}}, {"gpt-5.5-pro", true, false, []string{"medium", "high", "xhigh"}}, - {"o3-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, - {"o1-preview", true, false, []string{"low", "medium", "high", "xhigh"}}, - {"o4-mini", true, false, []string{"low", "medium", "high", "xhigh"}}, + {"o3-mini", true, false, []string{"low", "medium", "high"}}, + {"o1-preview", true, false, []string{"low", "medium", "high"}}, + {"o4-mini", true, false, []string{"low", "medium", "high"}}, {"gpt-5", true, false, []string{"minimal", "low", "medium", "high"}}, {"gpt-5-2025-08-07", true, false, []string{"minimal", "low", "medium", "high"}}, {"gpt-5-mini", true, false, []string{"minimal", "low", "medium", "high"}}, @@ -59,8 +59,8 @@ func TestOpenAIReasoningCaps_ClampEffort(t *testing.T) { {"gpt-5-pro", "low", "high"}, {"gpt-5-pro", "max", "high"}, {"gpt-5-pro", "high", "high"}, - {"o3", "xhigh", "xhigh"}, - {"o4-mini", "max", "xhigh"}, + {"o3", "xhigh", "high"}, + {"o4-mini", "max", "high"}, {"gpt-5", "xhigh", "high"}, {"gpt-5-mini", "minimal", "minimal"}, {"gpt-5.1", "xhigh", "high"}, From 00cc53b9854751a0620cf47050df0853a13059e4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 14:07:42 +0300 Subject: [PATCH 311/618] fix(googleai): gemma 4 takes no thinking control, so send none The door classified Gemma 4 as a budget-thinking family, so both reasoning modes reached the vendor as a rejected request: thinkingBudget 0, 1024 or -1 -> 400 Thinking budget is not supported for this model (status INVALID_ARGUMENT) thinkingLevel low or medium -> 400 Thinking level is not supported for this model Turning reasoning on sent a positive budget; turning it off sent budget 0. Only an untouched default worked, and that default already reasons - gemma-4-31b-it spends 144 thought tokens on a bare request, gemma-4-26b-a4b-it 181. Google documents no thinking control for these models on this API: the Gemma thinking page covers only the open weights through a chat-template flag, and the per-model level table does not list them. So the model now carries no control field at all. Reasoning on asks for the thoughts it already produces; an explicit disable is refused before the wire rather than sent as a budget the vendor throws out. Three tests were pinning the refused shape and went green over a guaranteed 400: the disable wire, the capability hint and the production catalogue table. PAGI-234 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 9 ++++--- llms/googleai/googleai_core_unit_test.go | 16 +++++++---- llms/reasoning/gemini_capability.go | 14 +++++++--- llms/reasoning/gemini_capability_test.go | 34 +++++++++++++++++++++++- llms/reasoning/off_test.go | 4 +-- llms/reasoning_support_test.go | 4 +-- 6 files changed, 65 insertions(+), 16 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index b79fb7dcd..384143f85 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1077,12 +1077,15 @@ func resolveTemperature(model string, clientOpts Options) float64 { } // resolveThinkingConfig builds the Gemini thinking config for the reasoning mode. -// Off forces budget 0 on models that disable that way (Gemini 2.5 Flash), since -// omitting would not disable a default-on model; a model whose thinking cannot be -// disabled (Gemini 2.5 Pro, Gemini 3.x) returns a typed error before the request. +// Off forces budget 0 on models that disable that way, since omitting would not +// disable a default-on model; a model whose thinking cannot be disabled returns a +// typed error before the request. func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens int) (*genai.ThinkingConfig, error) { switch cfg.ResolveMode() { case llms.ReasoningOn: + if reasoning.GeminiRejectsThinkingControl(model) { + return &genai.ThinkingConfig{IncludeThoughts: true}, nil + } // An effort with no explicit token budget maps to the qualitative // thinking_level on Gemini 3.x (its native control, where thinking_budget is // deprecated); an explicit budget or a 2.5 model still uses thinking_budget. diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index a6c953668..d14a4248d 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1044,7 +1044,8 @@ const ( var productionGeminiModels = []struct { name string - usesThinkingLevel bool // Gemini 3.x uses thinking_level; 2.5 / Gemma use thinking_budget + usesThinkingLevel bool // Gemini 3.x uses thinking_level; 2.5 uses thinking_budget + noControl bool // takes neither: the request carries no budget and no level disable disableWire }{ {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableZeroBudget}, @@ -1054,8 +1055,8 @@ var productionGeminiModels = []struct { {name: "gemini-2.5-pro", usesThinkingLevel: false, disable: disableUnsupported}, {name: "gemini-2.5-flash", usesThinkingLevel: false, disable: disableZeroBudget}, {name: "gemini-2.5-flash-lite", usesThinkingLevel: false, disable: disableOmit}, - {name: "gemma-4-31b-it", usesThinkingLevel: false, disable: disableZeroBudget}, - {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, disable: disableZeroBudget}, + {name: "gemma-4-31b-it", usesThinkingLevel: false, noControl: true, disable: disableUnsupported}, + {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, noControl: true, disable: disableUnsupported}, } func TestResolveTemperature(t *testing.T) { @@ -1248,11 +1249,16 @@ func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { require.NoError(t, err, "enable reasoning must succeed for %s", m.name) require.NotNil(t, tc, "enable reasoning must emit a ThinkingConfig for %s", m.name) assert.True(t, tc.IncludeThoughts) - if m.usesThinkingLevel { + switch { + case m.noControl: + assert.Nil(t, tc.ThinkingBudget, "%s takes no thinking_budget", m.name) + assert.Equal(t, genai.ThinkingLevel(""), tc.ThinkingLevel, + "%s takes no thinking_level", m.name) + case m.usesThinkingLevel: assert.Equal(t, genai.ThinkingLevelMedium, tc.ThinkingLevel, "%s should map effort→thinking_level", m.name) assert.Nil(t, tc.ThinkingBudget, "%s level path must not also send a budget", m.name) - } else { + default: require.NotNil(t, tc.ThinkingBudget, "%s should use thinking_budget", m.name) assert.Greater(t, *tc.ThinkingBudget, int32(0)) assert.Equal(t, genai.ThinkingLevel(""), tc.ThinkingLevel) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index f7f303fb0..66304db3a 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -95,12 +95,20 @@ func geminiKnownNonThinking(model string) bool { hasFamily(m, "gemma-3") } +// GeminiRejectsThinkingControl reports whether the model takes no thinking +// control at all, so a request carries neither a budget nor a level. +func GeminiRejectsThinkingControl(model string) bool { + return hasFamily(baseModelName(model), "gemma-4") +} + // GeminiCanDisable reports whether thinking can be turned off via -// thinkingBudget:0. Gemini 2.5 Flash/Flash-Lite and Gemma 4 can; Gemini 2.5 Pro -// and Gemini 3.x cannot. Unclassified Google models are treated as disablable, -// so a model this package has not seen is attempted rather than refused. +// thinkingBudget:0. Unclassified Google models are treated as disablable, so a +// model this package has not seen is attempted rather than refused. func GeminiCanDisable(model string) bool { m := baseModelName(model) + if GeminiRejectsThinkingControl(m) { + return false + } if GeminiThinkingOffByDefault(m) { return true } diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index 66ebe0748..d17926c4e 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -35,7 +35,8 @@ func TestGeminiCanDisable(t *testing.T) { }{ {"gemini-2.5-flash", true}, {"gemini-2.5-flash-lite", true}, - {"gemma-4-31b-it", true}, + {"gemma-4-31b-it", false}, + {"gemma-4-26b-a4b-it", false}, {"gemini-2.5-pro", false}, {"gemini-3-flash-preview", true}, {"gemini-3.1-pro-preview", false}, @@ -160,3 +161,34 @@ func TestGeminiAcceptsMinimalLevel(t *testing.T) { } } } + +func TestGemmaTakesNoThinkingControl(t *testing.T) { + t.Parallel() + cases := []struct { + model string + want bool + }{ + {"gemma-4-31b-it", true}, + {"gemma-4-26b-a4b-it", true}, + {"gemma-4-E2B-it", true}, + {"google/gemma-4-31b-it", true}, + {"gemma-3-27b-it", false}, + {"gemini-3.5-flash", false}, + {"gemini-2.5-flash", false}, + {"", false}, + } + for _, tc := range cases { + if got := GeminiRejectsThinkingControl(tc.model); got != tc.want { + t.Errorf("GeminiRejectsThinkingControl(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + +func TestGemmaOffIsRefusedRatherThanSentAsZeroBudget(t *testing.T) { + t.Parallel() + for _, model := range []string{"gemma-4-31b-it", "gemma-4-26b-a4b-it"} { + if got := ResolveOff(model, ProviderGoogleAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q) = %v, want OffUnsupported", model, got) + } + } +} diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 939a58e2c..5540eea1b 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -32,8 +32,8 @@ func TestResolveOff(t *testing.T) { {"gemini-3.6-flash", ProviderGoogleAI, OffUnsupported}, {"gemini-3.7-flash", ProviderGoogleAI, OffUnsupported}, {"gemini-3.5-pro", ProviderGoogleAI, OffUnsupported}, - {"gemma-4-31b-it", ProviderGoogleAI, OffZeroBudget}, - {"gemma-4-26b-a4b-it", ProviderGoogleAI, OffZeroBudget}, + {"gemma-4-31b-it", ProviderGoogleAI, OffUnsupported}, + {"gemma-4-26b-a4b-it", ProviderGoogleAI, OffUnsupported}, // Pre-thinking Gemini/Gemma never think: omit rather than send budget:0. {"gemini-2.0-flash", ProviderGoogleAI, OffOmit}, {"gemini-1.5-pro", ProviderGoogleAI, OffOmit}, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 61438781d..53bd73ab7 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -232,8 +232,8 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes {"gemini-2.5-pro", true}, {"gemini-2.5-flash", false}, {"gemini-2.5-flash-lite", false}, - {"gemma-4-31b-it", false}, - {"gemma-4-26b-a4b-it", false}, + {"gemma-4-31b-it", true}, + {"gemma-4-26b-a4b-it", true}, } for _, tc := range cases { s := ReasoningSupportFor(tc.model, reasoning.ProviderGoogleAI) From a389dd9a954e0d96c0079bab48a0a9887525b720 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 16:56:59 +0300 Subject: [PATCH 312/618] feat(googleai): expose the model listing the endpoint serves The door wrapped genai's client but never surfaced its listing, so a caller that wanted to know which models an endpoint actually serves had to build the vendor request itself. pentagi does exactly that when it checks its catalogues against the live door, and its LiteLLM-shaped listing is refused by this one. Ids come back with the "models/" resource prefix stripped, so they match the names a caller passes as a model. PAGI-200 Co-Authored-By: Claude Opus 5 --- llms/googleai/models.go | 25 +++++++++++++++++++ llms/googleai/models_test.go | 48 ++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 llms/googleai/models.go create mode 100644 llms/googleai/models_test.go diff --git a/llms/googleai/models.go b/llms/googleai/models.go new file mode 100644 index 000000000..53cf8e9e3 --- /dev/null +++ b/llms/googleai/models.go @@ -0,0 +1,25 @@ +package googleai + +import ( + "context" + "fmt" + "strings" +) + +// ListModels returns the model ids the endpoint serves, with the resource +// prefix stripped so the names match the ones callers pass as a model. +func (g *GoogleAI) ListModels(ctx context.Context) ([]string, error) { + var ids []string + for model, err := range g.client.Models.All(ctx) { + if err != nil { + return nil, fmt.Errorf("googleai: list models: %w", err) + } + if model == nil { + continue + } + if id := strings.TrimPrefix(model.Name, "models/"); id != "" { + ids = append(ids, id) + } + } + return ids, nil +} diff --git a/llms/googleai/models_test.go b/llms/googleai/models_test.go new file mode 100644 index 000000000..1560c07b2 --- /dev/null +++ b/llms/googleai/models_test.go @@ -0,0 +1,48 @@ +package googleai + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "net/url" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type redirectTransport struct{ host string } + +func (t redirectTransport) RoundTrip(req *http.Request) (*http.Response, error) { + to, err := url.Parse(t.host) + if err != nil { + return nil, err + } + req = req.Clone(req.Context()) + req.URL.Scheme, req.URL.Host, req.Host = to.Scheme, to.Host, to.Host + return http.DefaultTransport.RoundTrip(req) +} + +func TestListModelsStripsTheResourcePrefix(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(map[string]any{ + "models": []map[string]any{ + {"name": "models/gemini-3.8-flash"}, + {"name": "models/gemma-4-31b-it"}, + {"name": ""}, + }, + }) + })) + defer srv.Close() + + llm, err := New(t.Context(), WithRest(), WithAPIKey("test-key"), + WithHTTPClient(&http.Client{Transport: redirectTransport{host: srv.URL}})) + require.NoError(t, err) + + ids, err := llm.ListModels(t.Context()) + require.NoError(t, err) + assert.Equal(t, []string{"gemini-3.8-flash", "gemma-4-31b-it"}, ids) +} From dda32c75a9a4c83450584b1522f968d4f3355c93 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 17:00:24 +0300 Subject: [PATCH 313/618] fix(reasoning): kimi-k3 reasons always, so off cannot be honored MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moonshot documents the K3 effort field as enum ["low","high","max"], default "max", and states the model "always enables thinking with Preserved Thinking". Neither "none" nor "medium" is in that set. The door nevertheless answered a caller's WithReasoningDisabled by putting reasoning_effort "none" on the wire. The vendor keeps thinking, the request succeeds, and the caller is left believing thinking is off — the silent no-op the library contract forbids. Off is now the typed ErrReasoningOffUnsupported before the request is built, which is how kimi-k2-thinking and kimi-k2.7-code already behave. The three tests that pinned the old shape came from the k2 fix, whose message says only "Moonshot k3 accepts the field and keeps working as before" — k3 was carried along, never checked against the enum. They now assert the documented behaviour, and the hint API stops offering an off switch that does nothing. Measured through the gateway, "none" does visibly quench K3's thinking. That contradicts the vendor's own reference, and there is no direct Moonshot key to attribute the difference, so the documentation decides. Not fixed here: a requested "medium" still reaches the wire verbatim, because the effort vocabulary is keyed on OpenAI names and clamping K3 means entering it in that table, which also flips the sampling rule and reports a mechanism that does not fit this vendor. PAGI-97 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_effort_door_test.go | 14 +++++++++----- llms/reasoning/effort_wire_test.go | 2 +- llms/reasoning/off.go | 1 + llms/reasoning/off_test.go | 2 +- llms/reasoning_support_test.go | 22 ++++++++++++++++++++++ 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/llms/openai/reasoning_effort_door_test.go b/llms/openai/reasoning_effort_door_test.go index aad93cae5..8f57f63b8 100644 --- a/llms/openai/reasoning_effort_door_test.go +++ b/llms/openai/reasoning_effort_door_test.go @@ -2,6 +2,7 @@ package openai import ( "context" + "errors" "io" "net/http" "net/http/httptest" @@ -9,6 +10,7 @@ import ( "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { @@ -83,13 +85,15 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { } }) - t.Run("kimi-k3 still disables via none", func(t *testing.T) { + t.Run("kimi-k3 refuses to be disabled", func(t *testing.T) { body, err := capture(t, "kimi-k3", llms.WithReasoningDisabled()) - if err != nil { - t.Fatalf("GenerateContent() error: %v", err) + var unsupported *reasoning.ErrReasoningOffUnsupported + if !errors.As(err, &unsupported) { + t.Fatalf("the vendor enum is low, high and max and the model always reasons, "+ + "so off cannot be honored: want ErrReasoningOffUnsupported, got err %v, body %s", err, body) } - if !strings.Contains(body, `"reasoning_effort":"none"`) { - t.Fatalf("kimi-k3 disables via the none token, got body: %s", body) + if strings.Contains(body, "reasoning_effort") { + t.Fatalf("no request may leave when off cannot be honored, got body: %s", body) } }) } diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 93e825497..0c16a4f2e 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -77,7 +77,7 @@ func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { {"kimi-k2.7-code-highspeed", OffUnsupported}, {"kimi-k2.6", OffEffortNone}, {"kimi-k2-thinking", OffUnsupported}, - {"kimi-k3", OffEffortNone}, + {"kimi-k3", OffUnsupported}, {"deepseek-v4-pro", OffEffortNone}, {"glm-5-turbo", OffDisableThinkingObject}, } { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 3476be835..a0e38c2e5 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -171,6 +171,7 @@ func mandatoryThinking(model string) bool { form == "glm-flash-latest" || strings.HasPrefix(form, "kimi-k2-thinking") || strings.HasPrefix(form, "kimi-k2.7-code") || + hasGeneration(form, "kimi-k3") || strings.HasPrefix(form, "gpt-oss") || strings.HasPrefix(form, "aion-") || strings.HasPrefix(form, "step-3") || diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 939a58e2c..65083d0b0 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -68,7 +68,7 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { "glm-5.2": OffEffortNone, "glm-5.3": OffUnsupported, "minimax-m2": OffUnsupported, - "kimi-k3": OffEffortNone, + "kimi-k3": OffUnsupported, "deepseek-v4": OffEffortNone, } { if got := ResolveOff(model, ProviderOpenAI); got != want { diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 61438781d..2d1433d64 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -396,3 +396,25 @@ func TestAdvertisedEffortsFollowTheWireOfEachProvider(t *testing.T) { } } } + +func TestTheHintDoesNotOfferOffOnAModelThatAlwaysReasons(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + wantCannotDisable bool + }{ + {"kimi-k3", true}, + {"kimi-k2.7-code", true}, + {"kimi-k2-thinking", true}, + {"kimi-k2.6", false}, + } { + s := ReasoningSupportFor(tc.model, reasoning.ProviderOpenAI) + if !s.Supported { + t.Errorf("%s reasons, so the hint must say so", tc.model) + } + if s.CannotDisable != tc.wantCannotDisable { + t.Errorf("%s CannotDisable = %v, want %v", tc.model, s.CannotDisable, tc.wantCannotDisable) + } + } +} From 3bd7abd447b431fbf47eed472adf2950c136806a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 18:07:29 +0300 Subject: [PATCH 314/618] fix(reasoning): keep an effort out of the wire when the vendor's enum closes The effort vocabulary answered only for OpenAI names, so every other vendor got the requested level verbatim. Moonshot documents kimi-k3 as low, high and max; Z.AI documents glm-5.3 and glm-5.3-flash as low, high and max and says any other input produces an error. A caller asking for medium therefore sent a value those models do not accept. DeepSeek V4 and GLM-5.2 stay out of the table on purpose: their vendors document a mapping for every level, and clamping would substitute a shallower depth than the vendor itself would pick. The door test asserted that kimi-k3 receives medium, pinning the shape the vendor does not name; it now asserts the clamped level, keeping its point that this door does carry the effort field. PAGI-97 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_effort_door_test.go | 7 +- .../reasoning_effort_passthrough_test.go | 54 +++++++++++++++ llms/reasoning/openai_capability.go | 14 ++-- llms/reasoning/openai_capability_test.go | 65 +++++++++++++++++++ 4 files changed, 133 insertions(+), 7 deletions(-) diff --git a/llms/openai/reasoning_effort_door_test.go b/llms/openai/reasoning_effort_door_test.go index 8f57f63b8..9a7dfb6f5 100644 --- a/llms/openai/reasoning_effort_door_test.go +++ b/llms/openai/reasoning_effort_door_test.go @@ -75,13 +75,14 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { }) } - t.Run("kimi-k3 still receives the effort", func(t *testing.T) { + t.Run("kimi-k3 receives the effort inside the vendor enum", func(t *testing.T) { body, err := capture(t, "kimi-k3", llms.WithReasoning(llms.ReasoningMedium, 0)) if err != nil { t.Fatalf("GenerateContent() error: %v", err) } - if !strings.Contains(body, `"reasoning_effort":"medium"`) { - t.Fatalf("kimi-k3 accepts reasoning_effort and must receive it, got body: %s", body) + if !strings.Contains(body, `"reasoning_effort":"low"`) { + t.Fatalf("kimi-k3 accepts reasoning_effort, and the vendor enum is low, high and max, "+ + "so a requested medium must arrive as low, got body: %s", body) } }) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 072eabb99..af74d5800 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -455,3 +455,57 @@ func TestClaudeSamplingBehindTheOpenAITransport(t *testing.T) { }) } } + +func TestALevelOutsideTheVendorEnumDoesNotReachTheWire(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + for _, tc := range []struct { + model string + asked llms.ReasoningEffort + want string + reject string + }{ + {"kimi-k3", llms.ReasoningMedium, `"reasoning_effort":"low"`, `"medium"`}, + {"glm-5.3", llms.ReasoningMedium, `"reasoning_effort":"low"`, `"medium"`}, + {"glm-5.3-flash", llms.ReasoningXHigh, `"reasoning_effort":"high"`, `"xhigh"`}, + {"deepseek-v4-pro", llms.ReasoningMedium, `"reasoning_effort":"medium"`, ""}, + {"glm-5.2", llms.ReasoningMedium, `"reasoning_effort":"medium"`, ""}, + } { + t.Run(tc.model+"/"+string(tc.asked), func(t *testing.T) { + t.Parallel() + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + defer srv.Close() + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(tc.model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent( + context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(tc.asked, 0), + ); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + + if !strings.Contains(body, tc.want) { + t.Fatalf("%s: wire body missing %s\nbody: %s", tc.model, tc.want, body) + } + if tc.reject != "" && strings.Contains(body, tc.reject) { + t.Fatalf("%s: %s reached the wire although the vendor documents an enum without it\nbody: %s", + tc.model, tc.reject, body) + } + }) + } +} diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index dfc8a4047..b8cf3329f 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -18,8 +18,8 @@ var openAIEffortRank = map[string]int{ } // OpenAIReasoningCaps is a best-effort static projection of which reasoning -// efforts an OpenAI model accepts, so callers avoid sending a value the API would -// reject with a 400. It asserts only documented, non-default constraints; every +// efforts a model reachable on an OpenAI-compatible door accepts, so callers avoid +// sending a value the API would reject with a 400. It asserts only documented, non-default constraints; every // other model returns Known=false and is treated optimistically (send as // requested, let the API be the arbiter), preserving prior pass-through behavior. type OpenAIReasoningCaps struct { @@ -54,8 +54,8 @@ func (c OpenAIReasoningCaps) ClampEffort(effort string) string { return accepted } -// OpenAIReasoningCapsFor classifies an OpenAI reasoning model by the effort set -// its generation accepts on /chat/completions. A model outside the listed +// OpenAIReasoningCapsFor classifies a reasoning model by the effort set its +// generation accepts on /chat/completions. A model outside the listed // generations (including newer ones) returns Known=false so the caller stays // optimistic and the API arbitrates. func OpenAIReasoningCapsFor(model string) OpenAIReasoningCaps { @@ -89,6 +89,8 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high"}} case openAIXHighCeiling(m): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} + case nonOpenAILowHighMax(m): + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "high", "max"}} default: return OpenAIReasoningCaps{Known: false} } @@ -103,6 +105,10 @@ func openAIGPT5Base(m string) bool { hasGeneration(m, "gpt-5-mini") || hasGeneration(m, "gpt-5-nano") } +func nonOpenAILowHighMax(m string) bool { + return hasGeneration(m, "kimi-k3") || hasGeneration(m, "glm-5.3") +} + func openAIXHighCeiling(m string) bool { for _, generation := range []string{"gpt-5.2", "gpt-5.4", "gpt-5.5", "gpt-5.6"} { if hasGeneration(m, generation) { diff --git a/llms/reasoning/openai_capability_test.go b/llms/reasoning/openai_capability_test.go index 0f0bb0318..2397dc085 100644 --- a/llms/reasoning/openai_capability_test.go +++ b/llms/reasoning/openai_capability_test.go @@ -172,3 +172,68 @@ func TestTheDocumentedMaxEffortIsNotOnTheWireForGPT56(t *testing.T) { } } } + +func TestAClosedVendorEnumClampsAndAMappedOneDoesNot(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + efforts []string + clamped map[string]string + }{ + { + model: "kimi-k3", + efforts: []string{"low", "high", "max"}, + clamped: map[string]string{"minimal": "low", "medium": "low", "xhigh": "high", "low": "low", "high": "high", "max": "max"}, + }, + { + model: "glm-5.3", + efforts: []string{"low", "high", "max"}, + clamped: map[string]string{"minimal": "low", "medium": "low", "xhigh": "high", "low": "low", "high": "high", "max": "max"}, + }, + { + model: "glm-5.3-flash", + efforts: []string{"low", "high", "max"}, + clamped: map[string]string{"medium": "low", "xhigh": "high"}, + }, + } { + t.Run(tc.model, func(t *testing.T) { + t.Parallel() + caps := OpenAIReasoningCapsFor(tc.model) + if !caps.Known { + t.Fatalf("%s: vendor documents an enum of exactly %v, so the model must be classified", tc.model, tc.efforts) + } + if !slices.Equal(caps.Efforts, tc.efforts) { + t.Errorf("%s efforts = %v, want %v", tc.model, caps.Efforts, tc.efforts) + } + for asked, want := range tc.clamped { + if got := caps.ClampEffort(asked); got != want { + t.Errorf("%s ClampEffort(%q) = %q, want %q", tc.model, asked, got, want) + } + } + }) + } + + for _, model := range []string{"deepseek-v4-pro", "deepseek-v4-flash", "glm-5.2"} { + t.Run("mapped/"+model, func(t *testing.T) { + t.Parallel() + for _, asked := range []string{"minimal", "medium", "xhigh"} { + if got := OpenAIReasoningCapsFor(model).ClampEffort(asked); got != asked { + t.Errorf("%s ClampEffort(%q) = %q: the vendor documents its own mapping for this level, "+ + "so clamping it here would substitute a different depth than the vendor would pick", + model, asked, got) + } + } + }) + } +} + +func TestTheClosedEnumStopsAtItsOwnGeneration(t *testing.T) { + t.Parallel() + + for _, model := range []string{"glm-5.31", "glm-5.4", "kimi-k30", "kimi-k4", "kimi-k2.6"} { + if OpenAIReasoningCapsFor(model).Known { + t.Errorf("%s is classified, but no vendor documentation covers it", model) + } + } +} From e6706b0859d352c7d7801245215af7b422efbcf7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 18:45:23 +0300 Subject: [PATCH 315/618] style(pgvector): size the argument slice before filling it Both search paths built the bound arguments with a literal and then appended the filter arguments, which the repository linter reports as prealloc and CI fails on. filterPredicates emits exactly two arguments per filter key, so the capacity is exact rather than a guess, and the argument order and numbering are unchanged. PAGI-213 Co-Authored-By: Claude Opus 5 --- vectorstores/pgvector/pgvector.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vectorstores/pgvector/pgvector.go b/vectorstores/pgvector/pgvector.go index 7780b777a..7bad5abda 100644 --- a/vectorstores/pgvector/pgvector.go +++ b/vectorstores/pgvector/pgvector.go @@ -295,7 +295,8 @@ func (s Store) SimilaritySearch( if err != nil { return nil, err } - args := []any{len(embedderData), pgvector.NewVector(embedderData), numDocuments, collectionName} + args := make([]any, 0, 4+2*len(filter)) + args = append(args, len(embedderData), pgvector.NewVector(embedderData), numDocuments, collectionName) whereQuerys := make([]string, 0) if scoreThreshold != 0 { whereQuerys = append(whereQuerys, fmt.Sprintf("data.distance < %f", 1-scoreThreshold)) @@ -363,7 +364,8 @@ func (s Store) Search( if err != nil { return nil, err } - args := []any{numDocuments, collectionName} + args := make([]any, 0, 2+2*len(filter)) + args = append(args, numDocuments, collectionName) whereQuerys, filterArgs := filterPredicates(s.embeddingTableName+".", filter, len(args)) args = append(args, filterArgs...) whereQuery := strings.Join(whereQuerys, " AND ") From 051108f44c46680d528e6abd12b552066b61174e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 18:45:52 +0300 Subject: [PATCH 316/618] style(googleai): mark the thinking-config table test as long The gemma-4 cases pushed TestResolveThinkingConfig past the 90-line funlen limit the repository linter enforces in CI. Five table tests in this same file already carry the directive. PAGI-234 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_core_unit_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index d14a4248d..87df3fd2c 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1109,7 +1109,7 @@ func TestResolveThinkingConfigClampsMinimalWhereTheModelRefusesIt(t *testing.T) assert.True(t, tc.IncludeThoughts) } -func TestResolveThinkingConfig(t *testing.T) { +func TestResolveThinkingConfig(t *testing.T) { //nolint:funlen t.Parallel() t.Run("on with budget sends positive budget", func(t *testing.T) { From d9aa5aadf3bd19e70197c218d6428ddff957ef81 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 18:48:47 +0300 Subject: [PATCH 317/618] fix(llms): let the hint report the refusal the Bedrock door will give Models outside the Claude and OpenAI tables fall through to the last return, which left CannotDisable at its zero value while the three branches above it derive the same field from the resolver. Once ResolveOff started refusing always-thinking families on Bedrock, the hint kept saying the control works: moonshot.kimi-k2-thinking, us.deepseek.r1-v1:0, openai.gpt-oss-120b-1:0 and us.xai.grok-4.6 all answer a disable with a typed error while the hint offered it. The first three are in pentagi's Bedrock catalogue, so an interface built from the hint shows a switch that fails every call. Known stays false: the resolver says what the door will do, not what the model is, so this claims no capability the table cannot back. PAGI-233 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 6 +++++- llms/reasoning_support_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 1f8a6c35b..ae7fefd93 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -136,7 +136,11 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } - return ReasoningSupport{Supported: reasoning.LikelyReasoningModel(model), Known: false} + return ReasoningSupport{ + Supported: reasoning.LikelyReasoningModel(model), + Known: false, + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + } } // toReasoningEfforts converts the resolver's raw effort strings to the public diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 405145ab5..91f15f0b4 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -418,3 +418,34 @@ func TestTheHintDoesNotOfferOffOnAModelThatAlwaysReasons(t *testing.T) { } } } + +func TestTheBedrockHintReportsTheRefusalTheDoorWillGive(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + wantCannotDisable bool + }{ + {"moonshot.kimi-k2-thinking", true}, + {"us.deepseek.r1-v1:0", true}, + {"openai.gpt-oss-120b-1:0", true}, + {"us.xai.grok-4.6", true}, + {"us.amazon.nova-2-lite-v1:0", false}, + {"us.amazon.nova-pro-v1:0", false}, + } { + t.Run(tc.model, func(t *testing.T) { + t.Parallel() + + wire := reasoning.ResolveOff(tc.model, reasoning.ProviderBedrock) + if got := wire == reasoning.OffUnsupported; got != tc.wantCannotDisable { + t.Fatalf("%s: wire refuses = %v, want %v — the case no longer covers what it claims", + tc.model, got, tc.wantCannotDisable) + } + if got := ReasoningSupportFor(tc.model, reasoning.ProviderBedrock).CannotDisable; got != tc.wantCannotDisable { + t.Errorf("%s: hint CannotDisable = %v, want %v — a consumer building its interface from the hint "+ + "would offer a control that the door answers with a typed error", + tc.model, got, tc.wantCannotDisable) + } + }) + } +} From 432d0b28f0cc5a45d214daf2a24043d17baeb7eb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 18:49:26 +0300 Subject: [PATCH 318/618] test(reasoning): pin the Bedrock disable verdict for always-thinking families MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removing kimi-k3 from mandatoryThinking changed nothing that was red: the vocabulary entry added later reaches OffUnsupported through the caps branch on the OpenAI path, so the two guards masked each other. On Bedrock only mandatoryThinking answers, and the verdict flips to OffOmit — a silent "off" for a model that always reasons. The table covers both sides of that border. PAGI-97 Co-Authored-By: Claude Opus 5 --- llms/reasoning/off_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index fc3bcb28d..ab501e089 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -76,3 +76,25 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { } } } + +func TestAlwaysThinkingFamiliesAreRefusedOnBedrockToo(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want OffWire + }{ + {"kimi-k3", OffUnsupported}, + {"moonshot.kimi-k2-thinking", OffUnsupported}, + {"us.deepseek.r1-v1:0", OffUnsupported}, + {"openai.gpt-oss-120b-1:0", OffUnsupported}, + {"us.xai.grok-4.6", OffUnsupported}, + {"glm-5.3", OffUnsupported}, + {"us.amazon.nova-2-lite-v1:0", OffOmit}, + {"xai.grok-4.3", OffOmit}, + } { + if got := ResolveOff(tc.model, ProviderBedrock); got != tc.want { + t.Errorf("ResolveOff(%q, ProviderBedrock) = %v, want %v", tc.model, got, tc.want) + } + } +} From 593c4d845af155e06e23084d4c03fef3b39f18b3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 18:51:22 +0300 Subject: [PATCH 319/618] fix(llms): name no mechanism where the door takes no thinking control gemma-4 reached the Google branch as a budget model, so the hint offered a token budget that resolveThinkingConfig then dropped: asking for 2048 on gemma-4-31b-it produces {"includeThoughts":true} while gemini-2.5-flash gets {"includeThoughts":true,"thinkingBudget":2048}. Both gemma-4 ids are in pentagi's Gemini catalogue, so a consumer draws a budget control whose value never leaves the process. The mechanism table row that pinned gemma-4 to Budget asserted the shape the vendor refuses; it now covers gemini-2.5-pro, and gemma-4 is covered by the new case. PAGI-234 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 5 ++++- llms/reasoning_support_test.go | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index ae7fefd93..ff673e857 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -124,7 +124,10 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if p == reasoning.ProviderGoogleAI && reasoning.GeminiSupportsThinking(model) { // Efforts stays unset: this package does not classify the Google level names. mechanism := ReasoningMechanismBudget - if reasoning.GeminiUsesThinkingLevel(model) { + switch { + case reasoning.GeminiRejectsThinkingControl(model): + mechanism = ReasoningMechanismUnknown + case reasoning.GeminiUsesThinkingLevel(model): mechanism = ReasoningMechanismAdaptive } return ReasoningSupport{ diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 91f15f0b4..89a97caf0 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -342,7 +342,7 @@ func TestGoogleHintNamesItsMechanism(t *testing.T) { }{ {"gemini-3-pro-preview", ReasoningMechanismAdaptive}, {"gemini-2.5-flash", ReasoningMechanismBudget}, - {"gemma-4-27b", ReasoningMechanismBudget}, + {"gemini-2.5-pro", ReasoningMechanismBudget}, } { got := ReasoningSupportFor(tc.model, reasoning.ProviderGoogleAI) if !got.Known { @@ -449,3 +449,25 @@ func TestTheBedrockHintReportsTheRefusalTheDoorWillGive(t *testing.T) { }) } } + +func TestTheHintNamesNoMechanismWhenTheDoorTakesNoControl(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want ReasoningMechanism + }{ + {"gemma-4-31b-it", ReasoningMechanismUnknown}, + {"gemma-4-26b-a4b-it", ReasoningMechanismUnknown}, + {"gemini-2.5-flash", ReasoningMechanismBudget}, + {"gemini-3-pro", ReasoningMechanismAdaptive}, + } { + t.Run(tc.model, func(t *testing.T) { + t.Parallel() + if got := ReasoningSupportFor(tc.model, reasoning.ProviderGoogleAI).Mechanism; got != tc.want { + t.Errorf("%s: hint Mechanism = %v, want %v — a consumer builds its control from this field, "+ + "and the door drops a budget it advertises", tc.model, got, tc.want) + } + }) + } +} From 4c237ca4d24c7e348a4e2a825e6aa6c491db12f4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 4 Sep 2026 19:41:39 +0300 Subject: [PATCH 320/618] fix(reasoning): send DeepSeek the output limit in the field it reads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UsesLegacyMaxTokens listed grok, qwen, qwq and qvq, so DeepSeek models got max_completion_tokens. The vendor does not know that field: asking for 16 tokens returned 769 and finish_reason "stop", while max_tokens 16 returned 16 and "length". A transparency probe separates the layers — max_completion_tokens -5 answers 200, max_tokens -5 answers a vendor DeepseekException about u32 — so the field reaches the vendor only under the legacy name, and the reference documents max_tokens alone. The four cassettes that recorded the old field are rewritten onto the new one with their lengths recomputed; the recorded answers are shorter than the limit, so the vendor's reply is unchanged. Removing the entry turns all four red on a replay miss, so they still guard the request body. The wire test pinned deepseek-v4-pro to max_completion_tokens, which is the shape the vendor ignores; it now covers the four DeepSeek spellings on the legacy side and glm-5.2 and kimi-k3 on the other. PAGI-235 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_wire_test.go | 7 +++++-- ...MultiContentTextWithReasoning-streaming-deepseek.httprr | 6 +++--- ...easoning-streaming-openrouter-deepseek-r1-effort.httprr | 6 +++--- ...ltiContentTextWithReasoning-synchronous-deepseek.httprr | 6 +++--- ...soning-synchronous-openrouter-deepseek-r1-effort.httprr | 6 +++--- llms/reasoning/effort_wire.go | 3 ++- 6 files changed, 19 insertions(+), 15 deletions(-) diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index b48c12ea9..d134053ef 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -375,7 +375,10 @@ func TestTheOutputLimitPicksTheFieldTheRouteUnderstands(t *testing.T) { return body } - for _, model := range []string{"grok-4-1-fast", "qwen3.5-35b-a3b", "dashscope/qwen3.7-plus", "qwq-32b"} { + for _, model := range []string{ + "grok-4-1-fast", "qwen3.5-35b-a3b", "dashscope/qwen3.7-plus", "qwq-32b", + "deepseek-v4-pro", "deepseek-v4-flash", "deepseek/deepseek-v4-pro", "deepseek-r1", + } { body := capture(t, model) if !strings.Contains(body, `"max_tokens":800`) { t.Errorf("%s must receive max_tokens, got body: %s", model, body) @@ -385,7 +388,7 @@ func TestTheOutputLimitPicksTheFieldTheRouteUnderstands(t *testing.T) { } } - for _, model := range []string{"gpt-5.4", "gpt-4.1", "o3", "claude-sonnet-4-5", "deepseek-v4-pro"} { + for _, model := range []string{"gpt-5.4", "gpt-4.1", "o3", "claude-sonnet-4-5", "glm-5.2", "kimi-k3"} { body := capture(t, model) if !strings.Contains(body, `"max_completion_tokens":800`) { t.Errorf("%s must keep max_completion_tokens, got body: %s", model, body) diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-deepseek.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-deepseek.httprr index 7959ccc45..7b64e292d 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-deepseek.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-deepseek.httprr @@ -1,13 +1,13 @@ httprr trace v1 -425 83593 +414 83593 POST https://api.deepseek.com/chat/completions HTTP/1.1 Host: api.deepseek.com User-Agent: langchaingo-httprr -Content-Length: 222 +Content-Length: 211 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"deepseek-reasoner","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"deepseek-reasoner","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 82959 Access-Control-Allow-Credentials: true Cache-Control: no-cache diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openrouter-deepseek-r1-effort.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openrouter-deepseek-r1-effort.httprr index 221568315..04b51da1a 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openrouter-deepseek-r1-effort.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-streaming-openrouter-deepseek-r1-effort.httprr @@ -1,13 +1,13 @@ httprr trace v1 -459 274673 +448 274673 POST https://openrouter.ai/api/v1/chat/completions HTTP/1.1 Host: openrouter.ai User-Agent: langchaingo-httprr -Content-Length: 255 +Content-Length: 244 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"deepseek/deepseek-r1","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"stream":true,"reasoning":{"effort":"high"},"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +{"model":"deepseek/deepseek-r1","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"stream":true,"reasoning":{"effort":"high"},"stream_options":{"include_usage":true}}HTTP/2.0 200 OK Content-Length: 274189 Access-Control-Allow-Origin: * Cache-Control: no-cache diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-deepseek.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-deepseek.httprr index b8791413c..6b7c9f24c 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-deepseek.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-deepseek.httprr @@ -1,13 +1,13 @@ httprr trace v1 -371 1838 +360 1838 POST https://api.deepseek.com/chat/completions HTTP/1.1 Host: api.deepseek.com User-Agent: langchaingo-httprr -Content-Length: 168 +Content-Length: 157 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"deepseek-reasoner","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192}HTTP/2.0 200 OK +{"model":"deepseek-reasoner","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192}HTTP/2.0 200 OK Content-Length: 1246 Access-Control-Allow-Credentials: true Content-Type: application/json diff --git a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openrouter-deepseek-r1-effort.httprr b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openrouter-deepseek-r1-effort.httprr index e3f955f2d..a19e7682b 100644 --- a/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openrouter-deepseek-r1-effort.httprr +++ b/llms/openai/testdata/TestMultiContentTextWithReasoning-synchronous-openrouter-deepseek-r1-effort.httprr @@ -1,13 +1,13 @@ httprr trace v1 -405 5526 +394 5526 POST https://openrouter.ai/api/v1/chat/completions HTTP/1.1 Host: openrouter.ai User-Agent: langchaingo-httprr -Content-Length: 201 +Content-Length: 190 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"deepseek/deepseek-r1","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_completion_tokens":8192,"reasoning":{"effort":"high"}}HTTP/2.0 200 OK +{"model":"deepseek/deepseek-r1","messages":[{"role":"user","content":"What is the factorial of 5? Show your work. Think before you answer."}],"max_tokens":8192,"reasoning":{"effort":"high"}}HTTP/2.0 200 OK Content-Length: 5070 Access-Control-Allow-Origin: * Content-Type: application/json diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 8970a050a..3c4de007a 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -25,7 +25,8 @@ func UsesLegacyMaxTokens(model string) bool { if strings.HasPrefix(form, "grok") || strings.HasPrefix(form, "qwen") || strings.HasPrefix(form, "qwq") || - strings.HasPrefix(form, "qvq") { + strings.HasPrefix(form, "qvq") || + strings.HasPrefix(form, "deepseek") { return true } } From eb58c4f012a2543cb08480e495a73df78b6b983e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 08:15:37 +0300 Subject: [PATCH 321/618] fix(googleai): send gemma 4 the thinking level the vendor documents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Asking gemma-4 to stop thinking returned ErrReasoningOffUnsupported before the request, and asking it to think sent no control at all. Google documents the opposite: Gemma 4 toggles thinking through thinking_level, "high" for enabled and "minimal" for disabled, and names no budget field. The earlier vendor 400 came from the field, not from the model refusing control. Enable now emits thinking_level HIGH, disable emits MINIMAL through a new OffMinimalLevel wire, and the hint reports the adaptive mechanism instead of none. The predicate stays separate from GeminiUsesThinkingLevel, which also pins temperature to 1.0 — a Gemini 3 recommendation the Gemma pages do not make. Both guards are mutation-checked: dropping the off wire reddens five tests, sending enable without the level reddens the two gemma rows of the production table. PAGI-234 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 6 ++++-- llms/googleai/googleai_core_unit_test.go | 25 +++++++++++++++--------- llms/reasoning/gemini_capability.go | 14 ++++++------- llms/reasoning/gemini_capability_test.go | 21 +++++++++++--------- llms/reasoning/off.go | 5 +++++ llms/reasoning/off_test.go | 4 ++-- llms/reasoning_support.go | 4 +--- llms/reasoning_support_test.go | 10 +++++----- 8 files changed, 51 insertions(+), 38 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 384143f85..1737c93d9 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1083,8 +1083,8 @@ func resolveTemperature(model string, clientOpts Options) float64 { func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens int) (*genai.ThinkingConfig, error) { switch cfg.ResolveMode() { case llms.ReasoningOn: - if reasoning.GeminiRejectsThinkingControl(model) { - return &genai.ThinkingConfig{IncludeThoughts: true}, nil + if reasoning.GeminiTogglesThinkingByLevel(model) { + return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelHigh, IncludeThoughts: true}, nil } // An effort with no explicit token budget maps to the qualitative // thinking_level on Gemini 3.x (its native control, where thinking_budget is @@ -1103,6 +1103,8 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in case reasoning.OffZeroBudget: zero := int32(0) return &genai.ThinkingConfig{ThinkingBudget: &zero}, nil + case reasoning.OffMinimalLevel: + return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelMinimal}, nil case reasoning.OffUnsupported: return nil, &reasoning.ErrReasoningOffUnsupported{Model: model} } diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 87df3fd2c..bfa97a900 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1037,15 +1037,16 @@ func TestThinkingConfig(t *testing.T) { type disableWire int const ( - disableUnsupported disableWire = iota // WithReasoningDisabled must error before the request - disableZeroBudget // thinking_budget: 0 - disableOmit // no thinking config at all + disableUnsupported disableWire = iota // WithReasoningDisabled must error before the request + disableZeroBudget // thinking_budget: 0 + disableOmit // no thinking config at all + disableMinimalLevel // thinking_level: "minimal" ) var productionGeminiModels = []struct { name string usesThinkingLevel bool // Gemini 3.x uses thinking_level; 2.5 uses thinking_budget - noControl bool // takes neither: the request carries no budget and no level + togglesByLevel bool // on/off only, through thinking_level: high or minimal disable disableWire }{ {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableZeroBudget}, @@ -1055,8 +1056,8 @@ var productionGeminiModels = []struct { {name: "gemini-2.5-pro", usesThinkingLevel: false, disable: disableUnsupported}, {name: "gemini-2.5-flash", usesThinkingLevel: false, disable: disableZeroBudget}, {name: "gemini-2.5-flash-lite", usesThinkingLevel: false, disable: disableOmit}, - {name: "gemma-4-31b-it", usesThinkingLevel: false, noControl: true, disable: disableUnsupported}, - {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, noControl: true, disable: disableUnsupported}, + {name: "gemma-4-31b-it", usesThinkingLevel: false, togglesByLevel: true, disable: disableMinimalLevel}, + {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, togglesByLevel: true, disable: disableMinimalLevel}, } func TestResolveTemperature(t *testing.T) { @@ -1250,10 +1251,10 @@ func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { require.NotNil(t, tc, "enable reasoning must emit a ThinkingConfig for %s", m.name) assert.True(t, tc.IncludeThoughts) switch { - case m.noControl: + case m.togglesByLevel: + assert.Equal(t, genai.ThinkingLevelHigh, tc.ThinkingLevel, + "%s enables through thinking_level high", m.name) assert.Nil(t, tc.ThinkingBudget, "%s takes no thinking_budget", m.name) - assert.Equal(t, genai.ThinkingLevel(""), tc.ThinkingLevel, - "%s takes no thinking_level", m.name) case m.usesThinkingLevel: assert.Equal(t, genai.ThinkingLevelMedium, tc.ThinkingLevel, "%s should map effort→thinking_level", m.name) @@ -1274,6 +1275,12 @@ func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { require.NotNil(t, tcOff.ThinkingBudget) assert.Equal(t, int32(0), *tcOff.ThinkingBudget) assert.False(t, tcOff.IncludeThoughts) + case disableMinimalLevel: + require.NoError(t, err, "disable must succeed for %s", m.name) + require.NotNil(t, tcOff) + assert.Equal(t, genai.ThinkingLevelMinimal, tcOff.ThinkingLevel) + assert.Nil(t, tcOff.ThinkingBudget, "%s takes no thinking_budget", m.name) + assert.False(t, tcOff.IncludeThoughts) case disableOmit: require.NoError(t, err, "disable must succeed for %s", m.name) assert.Nil(t, tcOff, "%s is off unless asked, so disable sends nothing", m.name) diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 66304db3a..455a87251 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -95,20 +95,18 @@ func geminiKnownNonThinking(model string) bool { hasFamily(m, "gemma-3") } -// GeminiRejectsThinkingControl reports whether the model takes no thinking -// control at all, so a request carries neither a budget nor a level. -func GeminiRejectsThinkingControl(model string) bool { +// GeminiTogglesThinkingByLevel reports whether the model expresses thinking as +// on or off through thinking_level alone, with no budget and no level between. +// Kept apart from GeminiUsesThinkingLevel, which also pins temperature to 1.0. +func GeminiTogglesThinkingByLevel(model string) bool { return hasFamily(baseModelName(model), "gemma-4") } -// GeminiCanDisable reports whether thinking can be turned off via -// thinkingBudget:0. Unclassified Google models are treated as disablable, so a +// GeminiCanDisable reports whether thinking can be turned off at all; ResolveOff +// decides the wire. Unclassified Google models are treated as disablable, so a // model this package has not seen is attempted rather than refused. func GeminiCanDisable(model string) bool { m := baseModelName(model) - if GeminiRejectsThinkingControl(m) { - return false - } if GeminiThinkingOffByDefault(m) { return true } diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index d17926c4e..0635369a6 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -35,8 +35,8 @@ func TestGeminiCanDisable(t *testing.T) { }{ {"gemini-2.5-flash", true}, {"gemini-2.5-flash-lite", true}, - {"gemma-4-31b-it", false}, - {"gemma-4-26b-a4b-it", false}, + {"gemma-4-31b-it", true}, + {"gemma-4-26b-a4b-it", true}, {"gemini-2.5-pro", false}, {"gemini-3-flash-preview", true}, {"gemini-3.1-pro-preview", false}, @@ -162,7 +162,7 @@ func TestGeminiAcceptsMinimalLevel(t *testing.T) { } } -func TestGemmaTakesNoThinkingControl(t *testing.T) { +func TestGemmaTogglesThinkingByLevel(t *testing.T) { t.Parallel() cases := []struct { model string @@ -178,17 +178,20 @@ func TestGemmaTakesNoThinkingControl(t *testing.T) { {"", false}, } for _, tc := range cases { - if got := GeminiRejectsThinkingControl(tc.model); got != tc.want { - t.Errorf("GeminiRejectsThinkingControl(%q) = %v, want %v", tc.model, got, tc.want) + if got := GeminiTogglesThinkingByLevel(tc.model); got != tc.want { + t.Errorf("GeminiTogglesThinkingByLevel(%q) = %v, want %v", tc.model, got, tc.want) } } } -func TestGemmaOffIsRefusedRatherThanSentAsZeroBudget(t *testing.T) { +func TestGemmaOffGoesOutAsTheMinimalLevelRatherThanAZeroBudget(t *testing.T) { t.Parallel() - for _, model := range []string{"gemma-4-31b-it", "gemma-4-26b-a4b-it"} { - if got := ResolveOff(model, ProviderGoogleAI); got != OffUnsupported { - t.Errorf("ResolveOff(%q) = %v, want OffUnsupported", model, got) + for _, model := range []string{"gemma-4-31b-it", "gemma-4-26b-a4b-it", "google/gemma-4-E2B-it"} { + if got := ResolveOff(model, ProviderGoogleAI); got != OffMinimalLevel { + t.Errorf("ResolveOff(%q) = %v, want OffMinimalLevel", model, got) + } + if !GeminiCanDisable(model) { + t.Errorf("GeminiCanDisable(%q) = false, want true", model) } } } diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index c974cf234..75c829f43 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -30,6 +30,8 @@ const ( OffDisableClaude // OffZeroBudget → Google thinkingBudget:0. OffZeroBudget + // OffMinimalLevel → Google thinking_level:"minimal". + OffMinimalLevel // OffEffortNone → OpenAI reasoning_effort:"none". OffEffortNone // OffDisableDashScope → DashScope enable_thinking:false. @@ -81,6 +83,9 @@ func ResolveOff(model string, p Provider) OffWire { if geminiKnownNonThinking(model) || GeminiThinkingOffByDefault(model) { return OffOmit } + if GeminiTogglesThinkingByLevel(model) { + return OffMinimalLevel + } return OffZeroBudget case ProviderOpenAI: if !IsReasoningModel(model) { diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index ab501e089..e98f21aa8 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -32,8 +32,8 @@ func TestResolveOff(t *testing.T) { {"gemini-3.6-flash", ProviderGoogleAI, OffUnsupported}, {"gemini-3.7-flash", ProviderGoogleAI, OffUnsupported}, {"gemini-3.5-pro", ProviderGoogleAI, OffUnsupported}, - {"gemma-4-31b-it", ProviderGoogleAI, OffUnsupported}, - {"gemma-4-26b-a4b-it", ProviderGoogleAI, OffUnsupported}, + {"gemma-4-31b-it", ProviderGoogleAI, OffMinimalLevel}, + {"gemma-4-26b-a4b-it", ProviderGoogleAI, OffMinimalLevel}, // Pre-thinking Gemini/Gemma never think: omit rather than send budget:0. {"gemini-2.0-flash", ProviderGoogleAI, OffOmit}, {"gemini-1.5-pro", ProviderGoogleAI, OffOmit}, diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index ff673e857..a91888968 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -125,9 +125,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { // Efforts stays unset: this package does not classify the Google level names. mechanism := ReasoningMechanismBudget switch { - case reasoning.GeminiRejectsThinkingControl(model): - mechanism = ReasoningMechanismUnknown - case reasoning.GeminiUsesThinkingLevel(model): + case reasoning.GeminiUsesThinkingLevel(model), reasoning.GeminiTogglesThinkingByLevel(model): mechanism = ReasoningMechanismAdaptive } return ReasoningSupport{ diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 89a97caf0..cc9de9fc2 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -232,8 +232,8 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes {"gemini-2.5-pro", true}, {"gemini-2.5-flash", false}, {"gemini-2.5-flash-lite", false}, - {"gemma-4-31b-it", true}, - {"gemma-4-26b-a4b-it", true}, + {"gemma-4-31b-it", false}, + {"gemma-4-26b-a4b-it", false}, } for _, tc := range cases { s := ReasoningSupportFor(tc.model, reasoning.ProviderGoogleAI) @@ -450,15 +450,15 @@ func TestTheBedrockHintReportsTheRefusalTheDoorWillGive(t *testing.T) { } } -func TestTheHintNamesNoMechanismWhenTheDoorTakesNoControl(t *testing.T) { +func TestTheHintNamesTheMechanismTheDoorActuallyUses(t *testing.T) { t.Parallel() for _, tc := range []struct { model string want ReasoningMechanism }{ - {"gemma-4-31b-it", ReasoningMechanismUnknown}, - {"gemma-4-26b-a4b-it", ReasoningMechanismUnknown}, + {"gemma-4-31b-it", ReasoningMechanismAdaptive}, + {"gemma-4-26b-a4b-it", ReasoningMechanismAdaptive}, {"gemini-2.5-flash", ReasoningMechanismBudget}, {"gemini-3-pro", ReasoningMechanismAdaptive}, } { From fe380f33e6f14b8198f1c0c9086b773f8feb3a85 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 08:18:18 +0300 Subject: [PATCH 322/618] fix(jina): keep the batch size the caller asked for applyOptions ran the option loop and then overwrote BatchSize from a map whose values are vector dimensions, so WithBatchSize(64) on jina-embeddings-v2-base-en batched 768 texts per request. pentagi passes the model and the batch size together, so the setting never took effect. The map now stands in only where the caller named no batch size. A wire test drives five texts at batch size 2 through an httptest server and counts three requests; the unit test that asserted the loss now asserts the caller's value. Mutation: restoring the unconditional overwrite reddens both. PAGI-237 Co-Authored-By: Claude Opus 5 --- embeddings/jina/jina.go | 2 ++ embeddings/jina/jina_unit_test.go | 39 ++++++++++++++++++++++++++++++- embeddings/jina/options.go | 7 +++--- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/embeddings/jina/jina.go b/embeddings/jina/jina.go index 8a8effc01..869479863 100644 --- a/embeddings/jina/jina.go +++ b/embeddings/jina/jina.go @@ -20,6 +20,8 @@ type Jina struct { APIBaseURL string APIKey string client *http.Client + + batchSizeFromCaller bool } type EmbeddingRequest struct { diff --git a/embeddings/jina/jina_unit_test.go b/embeddings/jina/jina_unit_test.go index e5242b798..ae8e86566 100644 --- a/embeddings/jina/jina_unit_test.go +++ b/embeddings/jina/jina_unit_test.go @@ -1,9 +1,12 @@ package jina import ( + "encoding/json" + "fmt" "net/http" "net/http/httptest" "os" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -115,7 +118,7 @@ func TestNewJina(t *testing.T) { //nolint:funlen // comprehensive test WithBatchSize(256), }, check: func(t *testing.T, j *Jina) { - assert.Equal(t, 512, j.BatchSize) // Batch size is overridden by model + assert.Equal(t, 256, j.BatchSize) }, }, { @@ -317,3 +320,37 @@ func TestApplyOptions(t *testing.T) { } }) } + +func TestTheCallersBatchSizeReachesTheWire(t *testing.T) { + var batches [][]string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var req EmbeddingRequest + require.NoError(t, json.NewDecoder(r.Body).Decode(&req)) + batches = append(batches, req.Input) + + items := make([]string, 0, len(req.Input)) + for i := range req.Input { + items = append(items, fmt.Sprintf(`{"object":"embedding","index":%d,"embedding":[0.1,0.2]}`, i)) + } + w.Header().Set("Content-Type", "application/json") + fmt.Fprintf(w, `{"model":%q,"object":"list","data":[%s]}`, req.Model, strings.Join(items, ",")) + })) + defer server.Close() + + j, err := NewJina( + WithAPIBaseURL(server.URL), + WithAPIKey("test-key"), + WithModel(BaseModel), + WithBatchSize(2), + ) + require.NoError(t, err) + + emb, err := j.EmbedDocuments(t.Context(), []string{"a", "b", "c", "d", "e"}) + require.NoError(t, err) + assert.Len(t, emb, 5) + + require.Len(t, batches, 3, "batch size 2 over five texts is three requests; the model dimension would make it one") + assert.Equal(t, []string{"a", "b"}, batches[0]) + assert.Equal(t, []string{"c", "d"}, batches[1]) + assert.Equal(t, []string{"e"}, batches[2]) +} diff --git a/embeddings/jina/options.go b/embeddings/jina/options.go index cfa9ae4b1..79b132d3a 100644 --- a/embeddings/jina/options.go +++ b/embeddings/jina/options.go @@ -38,6 +38,7 @@ func WithStripNewLines(stripNewLines bool) Option { func WithBatchSize(batchSize int) Option { return func(p *Jina) { p.BatchSize = batchSize + p.batchSizeFromCaller = true } } @@ -82,9 +83,9 @@ func applyOptions(opts ...Option) *Jina { opt(o) } - // verify if model exists in the map - if _, ok := _models[o.Model]; ok { - o.BatchSize = _models[o.Model] + // _models holds vector dimensions, not batch sizes. + if size, ok := _models[o.Model]; ok && !o.batchSizeFromCaller { + o.BatchSize = size } return o From ba47fd4fae887a7338291b5ae8d6625b2b7d5325 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 08:55:41 +0300 Subject: [PATCH 323/618] fix(voyageai): let the caller point the embedder at another deployment The door had no option for the base URL at all: _defaultBaseURL was private, so an operator who set EMBEDDING_URL saw it ignored and the request went to api.voyageai.com with a key issued for a gateway. WithBaseURL sets it and trims a trailing slash, since the door appends paths that already start with one. A wire test drives EmbedQuery against an httptest server and asserts the path prefix survives as /voyageai/embeddings; pinning the default instead reddens it. PAGI-237 Co-Authored-By: Claude Opus 5 --- embeddings/voyageai/options.go | 9 +++++++++ embeddings/voyageai/voyageai_unit_test.go | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/embeddings/voyageai/options.go b/embeddings/voyageai/options.go index 0380ce147..3db4acf7b 100644 --- a/embeddings/voyageai/options.go +++ b/embeddings/voyageai/options.go @@ -4,6 +4,7 @@ import ( "errors" "net/http" "os" + "strings" "github.com/vxcontrol/langchaingo/httputil" ) @@ -47,6 +48,14 @@ func WithStripNewLines(stripNewLines bool) Option { } } +// WithBaseURL is an option for pointing the embedder at another deployment, +// such as a gateway that serves the VoyageAI API under a path prefix. +func WithBaseURL(baseURL string) Option { + return func(v *VoyageAI) { + v.baseURL = strings.TrimSuffix(baseURL, "/") + } +} + // WithBatchSize is an option for specifying the batch size. func WithBatchSize(batchSize int) Option { return func(v *VoyageAI) { diff --git a/embeddings/voyageai/voyageai_unit_test.go b/embeddings/voyageai/voyageai_unit_test.go index 13c9e6913..660dfb929 100644 --- a/embeddings/voyageai/voyageai_unit_test.go +++ b/embeddings/voyageai/voyageai_unit_test.go @@ -2,6 +2,7 @@ package voyageai import ( "net/http" + "net/http/httptest" "os" "testing" @@ -280,3 +281,21 @@ func TestApplyOptions(t *testing.T) { assert.NotNil(t, v.client) }) } + +func TestTheCallersBaseURLReachesTheRequest(t *testing.T) { + var gotPath string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + gotPath = r.URL.Path + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"data":[{"embedding":[0.1,0.2]}]}`)) + })) + defer server.Close() + + v, err := NewVoyageAI(WithBaseURL(server.URL+"/voyageai/"), WithToken("test-token")) + require.NoError(t, err) + + emb, err := v.EmbedQuery(t.Context(), "hello") + require.NoError(t, err, "the request must reach the caller's base URL, not api.voyageai.com") + assert.Equal(t, []float32{0.1, 0.2}, emb) + assert.Equal(t, "/voyageai/embeddings", gotPath, "the path prefix survives and the trailing slash is not doubled") +} From 34fd5d019b8fbe0dbd357c43df77c4833834ba2e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 08:58:58 +0300 Subject: [PATCH 324/618] fix(googleai): honor the caller's endpoint and refuse what this door drops The door was migrated to google.golang.org/genai, but its options still build option.ClientOption values for the old Vertex SDK. new.go assembles genai.ClientConfig from HTTPClient, CloudProject, CloudLocation and APIKey alone, so WithEndpoint, WithCredentialsJSON, WithCredentialsFile, WithGRPCClient and WithGRPCConn were accepted and dropped. That is why the door could only be pointed at a gateway by swapping the transport. WithEndpoint now also sets Options.BaseURL, which New feeds to HTTPOptions.BaseURL; a wire test drives GenerateContent against an httptest server and asserts the model path arrives there. The four options a REST client authenticating by API key cannot carry are named in ErrOptionNotHonored and refused before the request instead of being ignored. All five keep working for vertex.New, which reads ClientOptions and builds the old client. Mutations: dropping the BaseURL wiring, dropping the refusal, or leaving WithEndpoint out of BaseURL each redden their own tests. PAGI-237 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_unit_test.go | 56 +++++++++++++++++++++++++++++ llms/googleai/new.go | 20 +++++++++++ llms/googleai/option.go | 9 +++++ 3 files changed, 85 insertions(+) diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 68fea3181..4b61fb631 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -7,6 +7,7 @@ import ( "io" "math" "net/http" + "net/http/httptest" "strings" "testing" @@ -1070,3 +1071,58 @@ func TestMaxTokensAboveInt32DoesNotGoNegative(t *testing.T) { } } } + +func TestWithEndpointFeedsBothDoors(t *testing.T) { + t.Parallel() + + opts := DefaultOptions() + WithEndpoint("https://llm.example.net/gemini")(&opts) + + assert.Equal(t, "https://llm.example.net/gemini", opts.BaseURL, + "the Gemini API client reads BaseURL") + assert.Len(t, opts.ClientOptions, 1, + "the vertex door reads the same endpoint out of ClientOptions") +} + +func TestTheCallersEndpointReachesTheRequest(t *testing.T) { + t.Parallel() + + var gotPath string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + gotPath = r.URL.Path + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"candidates":[{"content":{"role":"model","parts":[{"text":"hi"}]},` + + `"finishReason":"STOP"}],"usageMetadata":{}}`)) + })) + defer server.Close() + + llm, err := New(t.Context(), WithAPIKey("test-key"), WithEndpoint(server.URL), WithDefaultModel("gemini-2.5-flash")) + require.NoError(t, err) + + _, err = llm.GenerateContent(t.Context(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "hello"), + }) + require.NoError(t, err) + assert.Contains(t, gotPath, "gemini-2.5-flash", + "the request must reach the caller's endpoint, not generativelanguage.googleapis.com") +} + +func TestNewRefusesTheOptionsThisDoorCannotCarry(t *testing.T) { + t.Parallel() + + for name, opt := range map[string]Option{ + "WithCredentialsFile": WithCredentialsFile("path/to/creds.json"), + "WithCredentialsJSON": WithCredentialsJSON([]byte(`{"type":"service_account"}`)), + "WithGRPCConn": WithGRPCConn(nil), + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + _, err := New(t.Context(), WithAPIKey("test-key"), opt) + + var notHonored *ErrOptionNotHonored + require.ErrorAs(t, err, ¬Honored, + "an option the door drops must be refused, not ignored") + assert.Contains(t, notHonored.Options, name) + }) + } +} diff --git a/llms/googleai/new.go b/llms/googleai/new.go index 43377146e..e489c7e8c 100644 --- a/llms/googleai/new.go +++ b/llms/googleai/new.go @@ -4,7 +4,9 @@ package googleai import ( "context" + "fmt" "os" + "strings" "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" @@ -59,6 +61,13 @@ func New(ctx context.Context, opts ...Option) (*GoogleAI, error) { } } + if len(clientOptions.unhonoredOnREST) > 0 { + return gi, &ErrOptionNotHonored{Options: clientOptions.unhonoredOnREST} + } + if clientOptions.BaseURL != "" { + config.HTTPOptions.BaseURL = clientOptions.BaseURL + } + client, err := genai.NewClient(ctx, config) if err != nil { return gi, err @@ -67,3 +76,14 @@ func New(ctx context.Context, opts ...Option) (*GoogleAI, error) { gi.client = client return gi, nil } + +// ErrOptionNotHonored reports options this door cannot carry. Pass credentials +// and gRPC connections to vertex.New, which builds a client that takes them, or +// shape the transport with WithHTTPClient. +type ErrOptionNotHonored struct { + Options []string +} + +func (e *ErrOptionNotHonored) Error() string { + return fmt.Sprintf("googleai: the Gemini API client cannot honor %s", strings.Join(e.Options, ", ")) +} diff --git a/llms/googleai/option.go b/llms/googleai/option.go index 0cda27ac5..99268231d 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -30,6 +30,10 @@ type Options struct { ClientOptions []option.ClientOption + BaseURL string + + unhonoredOnREST []string + // Set by WithDefaultTemperature; writing DefaultTemperature directly leaves // it false and lets the Gemini 3 recommendation win. temperatureFromCaller bool @@ -78,6 +82,7 @@ func WithCredentialsJSON(credentialsJSON []byte) Option { if len(credentialsJSON) == 0 { return } + opts.unhonoredOnREST = append(opts.unhonoredOnREST, "WithCredentialsJSON") opts.ClientOptions = append(opts.ClientOptions, option.WithCredentialsJSON(credentialsJSON)) } } @@ -90,6 +95,7 @@ func WithCredentialsFile(credentialsFile string) Option { if credentialsFile == "" { return } + opts.unhonoredOnREST = append(opts.unhonoredOnREST, "WithCredentialsFile") opts.ClientOptions = append(opts.ClientOptions, option.WithCredentialsFile(credentialsFile)) } } @@ -106,6 +112,7 @@ func WithRest() Option { // This is useful for gemini clients. func WithGRPCClient(grpcClient *grpc.ClientConn) Option { return func(opts *Options) { + opts.unhonoredOnREST = append(opts.unhonoredOnREST, "WithGRPCClient") opts.ClientOptions = append(opts.ClientOptions, option.WithGRPCConn(grpcClient)) } } @@ -115,6 +122,7 @@ func WithGRPCClient(grpcClient *grpc.ClientConn) Option { // This is useful for gemini clients. func WithEndpoint(endpoint string) Option { return func(opts *Options) { + opts.BaseURL = endpoint opts.ClientOptions = append(opts.ClientOptions, option.WithEndpoint(endpoint)) } } @@ -134,6 +142,7 @@ func WithHTTPClient(httpClient *http.Client) Option { // This is useful for testing embeddings in vertex clients. func WithGRPCConn(conn *grpc.ClientConn) Option { return func(opts *Options) { + opts.unhonoredOnREST = append(opts.unhonoredOnREST, "WithGRPCConn") opts.ClientOptions = append(opts.ClientOptions, option.WithGRPCConn(conn)) } } From 1746548ccba70eff8a11a3b4fecc5fc632373e7f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 09:48:56 +0300 Subject: [PATCH 325/618] fix(mistral): embed with the model the caller named CreateEmbedding pinned "mistral-embed" in the call, so WithModel was accepted and dropped on the embeddings surface. A gateway routes by the prefixed name, so an operator pointing the embedder at one could not reach it: the request carried a model the router does not know and came back 400. The name now comes from the caller when it named one. clientOptions.model cannot simply stand in: it defaults to a chat model, and every embedder built without WithModel would start asking a chat model for vectors. So the option records that the caller set it, the same shape the jina door uses for its batch size. A wire test reads the model out of the request body in both cases; pinning the constant back reddens the named case. PAGI-185 Co-Authored-By: Claude Opus 5 --- llms/mistral/client_options.go | 2 ++ llms/mistral/embed_model_wire_test.go | 45 +++++++++++++++++++++++++++ llms/mistral/mistralembed.go | 8 ++++- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 llms/mistral/embed_model_wire_test.go diff --git a/llms/mistral/client_options.go b/llms/mistral/client_options.go index 294edc9ea..fde11333e 100644 --- a/llms/mistral/client_options.go +++ b/llms/mistral/client_options.go @@ -14,6 +14,7 @@ type clientOptions struct { maxRetries int timeout time.Duration model string + modelFromCaller bool callbacksHandler callbacks.Handler } @@ -51,6 +52,7 @@ func WithTimeout(timeout time.Duration) Option { func WithModel(model string) Option { return func(o *clientOptions) { o.model = model + o.modelFromCaller = true } } diff --git a/llms/mistral/embed_model_wire_test.go b/llms/mistral/embed_model_wire_test.go new file mode 100644 index 000000000..341864ed1 --- /dev/null +++ b/llms/mistral/embed_model_wire_test.go @@ -0,0 +1,45 @@ +package mistral + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func embeddingModelOnTheWire(t *testing.T, opts ...Option) string { + t.Helper() + + var got string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + var body struct { + Model string `json:"model"` + } + require.NoError(t, json.Unmarshal(b, &body)) + got = body.Model + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"data":[{"embedding":[0.1,0.2]}]}`)) + })) + t.Cleanup(srv.Close) + + m, err := New(append([]Option{WithEndpoint(srv.URL), WithAPIKey("k")}, opts...)...) + require.NoError(t, err) + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + require.NoError(t, err) + return got +} + +func TestTheCallersEmbeddingModelReachesTheWire(t *testing.T) { + t.Parallel() + + assert.Equal(t, "mistral-embed", embeddingModelOnTheWire(t), + "a caller that named no model still embeds, and not with the chat default") + assert.Equal(t, "mistral/mistral-embed", embeddingModelOnTheWire(t, WithModel("mistral/mistral-embed")), + "the named model must reach the wire: a gateway routes by the prefixed name") +} diff --git a/llms/mistral/mistralembed.go b/llms/mistral/mistralembed.go index f9bb11f18..981474eb4 100644 --- a/llms/mistral/mistralembed.go +++ b/llms/mistral/mistralembed.go @@ -7,6 +7,8 @@ import ( var ErrEmptyEmbeddings = errors.New("empty embeddings") +const defaultEmbeddingModel = "mistral-embed" + func convertFloat64ToFloat32(input []float64) []float32 { // Create a slice with the same length as the input. output := make([]float32, len(input)) @@ -21,7 +23,11 @@ func convertFloat64ToFloat32(input []float64) []float32 { // CreateEmbedding implements the embeddings.EmbedderClient interface and creates embeddings for the given input texts. func (m *Model) CreateEmbedding(_ context.Context, inputTexts []string) ([][]float32, error) { - embsRes, err := m.client.Embeddings("mistral-embed", inputTexts) + model := defaultEmbeddingModel + if m.clientOptions.modelFromCaller { + model = m.clientOptions.model + } + embsRes, err := m.client.Embeddings(model, inputTexts) if err != nil { return nil, errors.New("failed to create embeddings: " + err.Error()) } From 4fe06199b928f02719bd2a26ecf9b433ee3fce75 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 10:01:40 +0300 Subject: [PATCH 326/618] refactor(mistral): name the embedding model the way the openai door does The first cut reused WithModel and marked that the caller had set it, so a client serving both surfaces could not hold a chat model and an embedding model at once. The openai door already solved this with WithEmbeddingModel over its own field and default; mistral now matches, and the flag is gone. A wire test pins both directions: the named embedding model reaches the wire, and WithModel stays out of embeddings. PAGI-185 Co-Authored-By: Claude Opus 5 --- llms/mistral/client_options.go | 11 +++++++++-- llms/mistral/embed_model_wire_test.go | 4 +++- llms/mistral/mistralembed.go | 6 +++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/llms/mistral/client_options.go b/llms/mistral/client_options.go index fde11333e..7d6d58b25 100644 --- a/llms/mistral/client_options.go +++ b/llms/mistral/client_options.go @@ -14,7 +14,7 @@ type clientOptions struct { maxRetries int timeout time.Duration model string - modelFromCaller bool + embeddingModel string callbacksHandler callbacks.Handler } @@ -52,7 +52,14 @@ func WithTimeout(timeout time.Duration) Option { func WithModel(model string) Option { return func(o *clientOptions) { o.model = model - o.modelFromCaller = true + } +} + +// Sets the model name the Model being instantiated embeds with. A gateway routes +// by its own name, so a prefixed spelling goes here rather than in the endpoint. +func WithEmbeddingModel(embeddingModel string) Option { + return func(o *clientOptions) { + o.embeddingModel = embeddingModel } } diff --git a/llms/mistral/embed_model_wire_test.go b/llms/mistral/embed_model_wire_test.go index 341864ed1..3d0a0eeea 100644 --- a/llms/mistral/embed_model_wire_test.go +++ b/llms/mistral/embed_model_wire_test.go @@ -40,6 +40,8 @@ func TestTheCallersEmbeddingModelReachesTheWire(t *testing.T) { assert.Equal(t, "mistral-embed", embeddingModelOnTheWire(t), "a caller that named no model still embeds, and not with the chat default") - assert.Equal(t, "mistral/mistral-embed", embeddingModelOnTheWire(t, WithModel("mistral/mistral-embed")), + assert.Equal(t, "mistral/mistral-embed", embeddingModelOnTheWire(t, WithEmbeddingModel("mistral/mistral-embed")), "the named model must reach the wire: a gateway routes by the prefixed name") + assert.Equal(t, "mistral-embed", embeddingModelOnTheWire(t, WithModel("ministral-8b-latest")), + "WithModel names the chat model and must not follow the caller into embeddings") } diff --git a/llms/mistral/mistralembed.go b/llms/mistral/mistralembed.go index 981474eb4..e90ddeeb9 100644 --- a/llms/mistral/mistralembed.go +++ b/llms/mistral/mistralembed.go @@ -23,9 +23,9 @@ func convertFloat64ToFloat32(input []float64) []float32 { // CreateEmbedding implements the embeddings.EmbedderClient interface and creates embeddings for the given input texts. func (m *Model) CreateEmbedding(_ context.Context, inputTexts []string) ([][]float32, error) { - model := defaultEmbeddingModel - if m.clientOptions.modelFromCaller { - model = m.clientOptions.model + model := m.clientOptions.embeddingModel + if model == "" { + model = defaultEmbeddingModel } embsRes, err := m.client.Embeddings(model, inputTexts) if err != nil { From 257e490d1513630fe2a2f6896e1548a2056dfe59 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 11:22:30 +0300 Subject: [PATCH 327/618] fix(reasoning): kimi k2.6 takes the thinking switch Moonshot documents Disabling thinking rode on reasoning_effort:"none", a field Moonshot documents only for kimi-k3. Against the gateway the whole call comes back 400 UnsupportedParamsError, so the caller loses the answer, not just the switch. The vendor's switch for k2.6 is thinking:{"type":"disabled"}, which the same route answers 200 with an empty reasoning block. PAGI-238 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_object_off_test.go | 5 ++--- llms/reasoning/effort_wire_test.go | 2 +- llms/reasoning/off.go | 5 ++++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index cd7501492..422f9c0af 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -10,14 +10,13 @@ import ( func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) { t.Parallel() - for _, model := range []string{"glm-5.1", "glm-4.6", "minimax-m3"} { + for _, model := range []string{"glm-5.1", "glm-4.6", "minimax-m3", "kimi-k2.6"} { body := sendForWire(t, model, llms.WithReasoningDisabled()) if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { t.Errorf("%s: body carries no disabled thinking object: %s", model, body) } if strings.Contains(body, "reasoning_effort") { - t.Errorf("%s: body still carries reasoning_effort, which the gateway cuts "+ - "for MiniMax and the vendor ignores below GLM-5.2: %s", model, body) + t.Errorf("%s: body still carries reasoning_effort: %s", model, body) } } diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 0c16a4f2e..081aeb874 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -75,7 +75,7 @@ func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { }{ {"qwen3-next-80b-a3b-thinking", OffUnsupported}, {"kimi-k2.7-code-highspeed", OffUnsupported}, - {"kimi-k2.6", OffEffortNone}, + {"kimi-k2.6", OffDisableThinkingObject}, {"kimi-k2-thinking", OffUnsupported}, {"kimi-k3", OffUnsupported}, {"deepseek-v4-pro", OffEffortNone}, diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 75c829f43..6a8d1eac5 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -159,7 +159,10 @@ func disablesByThinkingObject(model string) bool { if hasGeneration(form, "glm-5.2") { continue } - for _, generation := range []string{"glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1"} { + for _, generation := range []string{ + "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1", + "kimi-k2.6", + } { if hasGeneration(form, generation) { return true } From bbb878359c0daef4ded099811463a603a7b16c9f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 11:25:18 +0300 Subject: [PATCH 328/618] fix(reasoning): glm 5.2 disables thinking by the object, not the effort field Z.ai documents both forms from GLM-5.2 up, and the effort field was chosen on that reading. Nine probes on one prompt say otherwise: reasoning_effort:"none" leaves 188-217 characters of reasoning against 171-201 with nothing sent, while thinking:{"type":"disabled"} leaves zero in three probes out of three. The caller's off was silently ignored. PAGI-238 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_object_off_test.go | 10 +--------- llms/reasoning/off.go | 3 --- llms/reasoning/off_test.go | 4 ++-- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index 422f9c0af..630ec409d 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -10,7 +10,7 @@ import ( func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) { t.Parallel() - for _, model := range []string{"glm-5.1", "glm-4.6", "minimax-m3", "kimi-k2.6"} { + for _, model := range []string{"glm-5.1", "glm-5.2", "glm-4.6", "minimax-m3", "kimi-k2.6"} { body := sendForWire(t, model, llms.WithReasoningDisabled()) if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { t.Errorf("%s: body carries no disabled thinking object: %s", model, body) @@ -19,12 +19,4 @@ func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) t.Errorf("%s: body still carries reasoning_effort: %s", model, body) } } - - effortSide := sendForWire(t, "glm-5.2", llms.WithReasoningDisabled()) - if strings.Contains(effortSide, `"thinking"`) { - t.Errorf("glm-5.2 takes its disable on the effort field, not the object: %s", effortSide) - } - if !strings.Contains(effortSide, `"reasoning_effort":"none"`) { - t.Errorf("glm-5.2 lost its disable token: %s", effortSide) - } } diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 6a8d1eac5..61e09125e 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -156,9 +156,6 @@ func disablesByThinkingObject(model string) bool { if hasGeneration(form, "minimax-m3") { return true } - if hasGeneration(form, "glm-5.2") { - continue - } for _, generation := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1", "kimi-k2.6", diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index e98f21aa8..50649528e 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -56,7 +56,8 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { t.Parallel() for _, model := range []string{ - "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "minimax-m3", + "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "glm-5.2", + "minimax-m3", } { if got := ResolveOff(model, ProviderOpenAI); got != OffDisableThinkingObject { t.Errorf("ResolveOff(%q) = %v, want the thinking object: the effort token is either "+ @@ -65,7 +66,6 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { } for model, want := range map[string]OffWire{ - "glm-5.2": OffEffortNone, "glm-5.3": OffUnsupported, "minimax-m2": OffUnsupported, "kimi-k3": OffUnsupported, From c713247a25baebe06a281b0a0d1173395415c5c1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 11:26:01 +0300 Subject: [PATCH 329/618] fix(reasoning): deepseek v4 disables thinking by the object DeepSeek documents The disable rode on reasoning_effort:"none", and none is not in the vendor's enum for this door: it lists low, high and max, and maps medium and xhigh onto high. The value only ever worked because the gateway rewrote it into the very object the vendor documents, so a direct key would have had no off switch at all. That object now goes on the wire. PAGI-238 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_object_off_test.go | 5 ++++- llms/reasoning/effort_wire_test.go | 2 +- llms/reasoning/off.go | 2 +- llms/reasoning/off_test.go | 9 ++++----- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index 630ec409d..fa6c340f9 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -10,7 +10,10 @@ import ( func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) { t.Parallel() - for _, model := range []string{"glm-5.1", "glm-5.2", "glm-4.6", "minimax-m3", "kimi-k2.6"} { + for _, model := range []string{ + "glm-5.1", "glm-5.2", "glm-4.6", "minimax-m3", "kimi-k2.6", + "deepseek-v4-flash", "deepseek-v4-pro", + } { body := sendForWire(t, model, llms.WithReasoningDisabled()) if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { t.Errorf("%s: body carries no disabled thinking object: %s", model, body) diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 081aeb874..4fcd38935 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -78,7 +78,7 @@ func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { {"kimi-k2.6", OffDisableThinkingObject}, {"kimi-k2-thinking", OffUnsupported}, {"kimi-k3", OffUnsupported}, - {"deepseek-v4-pro", OffEffortNone}, + {"deepseek-v4-pro", OffDisableThinkingObject}, {"glm-5-turbo", OffDisableThinkingObject}, } { if got := ResolveOff(tc.model, ProviderOpenAI); got != tc.want { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 61e09125e..a0e761e26 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -158,7 +158,7 @@ func disablesByThinkingObject(model string) bool { } for _, generation := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1", - "kimi-k2.6", + "kimi-k2.6", "deepseek-v4", } { if hasGeneration(form, generation) { return true diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 50649528e..4e453130a 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -57,7 +57,7 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { for _, model := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "glm-5.2", - "minimax-m3", + "minimax-m3", "deepseek-v4-flash", "deepseek-v4-pro", } { if got := ResolveOff(model, ProviderOpenAI); got != OffDisableThinkingObject { t.Errorf("ResolveOff(%q) = %v, want the thinking object: the effort token is either "+ @@ -66,10 +66,9 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { } for model, want := range map[string]OffWire{ - "glm-5.3": OffUnsupported, - "minimax-m2": OffUnsupported, - "kimi-k3": OffUnsupported, - "deepseek-v4": OffEffortNone, + "glm-5.3": OffUnsupported, + "minimax-m2": OffUnsupported, + "kimi-k3": OffUnsupported, } { if got := ResolveOff(model, ProviderOpenAI); got != want { t.Errorf("ResolveOff(%q) = %v, want %v", model, got, want) From 3262cd3e858f4f8a268d8492c089a110db04ab7d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 11:26:41 +0300 Subject: [PATCH 330/618] fix(bedrock): keep the caller's output ceiling below Nova's top effort Nova dropped inferenceConfig.maxTokens on every reasoning request, so WithMaxTokens became a no-op at low and medium and the model answered on its own dynamic default. AWS unsets temperature, topP and maxTokens together, and only at the top effort, so the three now go through one predicate. The test that asserted the ceiling vanishes at medium asserted the defect and has been corrected. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 4 ++-- .../bedrockclient_converse_test.go | 20 ++++++++++++++++++- llms/reasoning/bedrock_capability.go | 6 +++--- llms/reasoning/bedrock_capability_test.go | 4 ++-- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 71b3cd25d..5fabf491a 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -217,8 +217,8 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti familyFields = converseNovaFields{ ReasoningConfig: &converseNovaReasoningConfig{Type: "enabled", MaxReasoningEffort: effort}, } - inferenceConfig.MaxTokens = nil - if reasoning.NovaRejectsSamplingAt(effort) { + if reasoning.NovaClearsInferenceConfigAt(effort) { + inferenceConfig.MaxTokens = nil inferenceConfig.Temperature = nil inferenceConfig.TopP = nil } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 22588b9b5..cba1452b1 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1277,7 +1277,8 @@ func TestConverseNovaSendsReasoningConfigNotThinking(t *testing.T) { assert.Equal(t, "medium", rc["maxReasoningEffort"]) require.NotNil(t, cfg) - assert.Nil(t, cfg.MaxTokens, "Nova refuses maxTokens while reasoning is enabled") + assert.EqualValues(t, 8000, *cfg.MaxTokens, + "AWS unsets maxTokens only at the top effort; below it the caller's ceiling stands") } func TestConverseNovaClampsEffortAndDropsSamplingAtHigh(t *testing.T) { @@ -1292,6 +1293,23 @@ func TestConverseNovaClampsEffortAndDropsSamplingAtHigh(t *testing.T) { require.NotNil(t, cfg) assert.Nil(t, cfg.Temperature, "Nova rejects sampling params at the top effort") assert.Nil(t, cfg.TopP) + assert.Nil(t, cfg.MaxTokens, "the same rule unsets maxTokens at the top effort") +} + +func TestConverseNovaKeepsMaxTokensBelowTopEffort(t *testing.T) { + for _, effort := range []llms.ReasoningEffort{llms.ReasoningLow, llms.ReasoningMedium} { + t.Run(string(effort), func(t *testing.T) { + temperature, topP := 0.4, 0.9 + _, cfg := novaConverseFields(t, "us.amazon.nova-2-lite-v1:0", + &llms.ReasoningConfig{Effort: effort}, &temperature, &topP) + + require.NotNil(t, cfg) + require.NotNil(t, cfg.MaxTokens, "dropping the ceiling here silently voids WithMaxTokens") + assert.EqualValues(t, 8000, *cfg.MaxTokens) + assert.NotNil(t, cfg.Temperature, "sampling is refused only at the top effort") + assert.NotNil(t, cfg.TopP) + }) + } } func TestConverseGrokSendsReasoningEffort(t *testing.T) { diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 722a788d6..88b1778e1 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -21,9 +21,9 @@ func NovaEffort(effort string) string { } } -// NovaRejectsSamplingAt reports whether Nova refuses temperature, topP and topK -// alongside the given effort. -func NovaRejectsSamplingAt(effort string) bool { +// NovaClearsInferenceConfigAt reports whether Nova refuses temperature, topP and +// maxTokens alongside the given effort. +func NovaClearsInferenceConfigAt(effort string) bool { return NovaEffort(effort) == "high" } diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index 7f74d8b92..0181d1214 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -34,10 +34,10 @@ func TestNovaEffortCollapsesOntoThreeLevels(t *testing.T) { } func TestNovaRejectsSamplingOnlyAtTopEffort(t *testing.T) { - if !NovaRejectsSamplingAt("max") || !NovaRejectsSamplingAt("high") { + if !NovaClearsInferenceConfigAt("max") || !NovaClearsInferenceConfigAt("high") { t.Error("temperature, topP and topK are an error at the top effort") } - if NovaRejectsSamplingAt("low") || NovaRejectsSamplingAt("medium") { + if NovaClearsInferenceConfigAt("low") || NovaClearsInferenceConfigAt("medium") { t.Error("sampling params are allowed below the top effort") } } From 86ae410a39616c6ba33876294492db44df1313b0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 11:30:18 +0300 Subject: [PATCH 331/618] fix(reasoning): qwen3.8-2.4t-a95b has no off switch to send Alibaba serves the open-source flagship of the 3.8 line in thinking mode only, so the disable used to travel as reasoning_effort:"none" and come back a vendor 400 saying enable_thinking is restricted to True. The caller now gets the typed error before the request leaves. The rule is keyed to the one name: max, flash and 27b of the same generation are hybrid and keep their effort wire. PAGI-238 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_object_off_test.go | 39 +++++++++++++++++++++++++ llms/reasoning/off.go | 1 + llms/reasoning/qwen_capability_test.go | 2 ++ 3 files changed, 42 insertions(+) diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index fa6c340f9..62d180c8a 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -1,10 +1,16 @@ package openai import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" "strings" "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) { @@ -23,3 +29,36 @@ func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) } } } + +func TestDisablingThinkingOnAModelThatOnlyThinks(t *testing.T) { + t.Parallel() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel("qwen3.8-2.4t-a95b")) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoningDisabled()) + + var unsupported *reasoning.ErrReasoningOffUnsupported + if !errors.As(err, &unsupported) { + t.Fatalf("want ErrReasoningOffUnsupported, got err=%v body=%s", err, body) + } + if body != "" { + t.Errorf("the refusal must come before the network, but a request went out: %s", body) + } +} diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index a0e761e26..91cde2ec5 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -180,6 +180,7 @@ func mandatoryThinking(model string) bool { strings.HasPrefix(form, "kimi-k2-thinking") || strings.HasPrefix(form, "kimi-k2.7-code") || hasGeneration(form, "kimi-k3") || + hasGeneration(form, "qwen3.8-2.4t-a95b") || strings.HasPrefix(form, "gpt-oss") || strings.HasPrefix(form, "aion-") || strings.HasPrefix(form, "step-3") || diff --git a/llms/reasoning/qwen_capability_test.go b/llms/reasoning/qwen_capability_test.go index d3313c4f2..da6b698af 100644 --- a/llms/reasoning/qwen_capability_test.go +++ b/llms/reasoning/qwen_capability_test.go @@ -80,6 +80,8 @@ func TestQwenDisableWire(t *testing.T) { }{ {"qwen3.8-max", OffEffortNone}, {"qwen3.8-flash", OffEffortNone}, + {"qwen3.8-2.4t-a95b", OffUnsupported}, + {"dashscope/qwen3.8-2.4t-a95b", OffUnsupported}, {"qwen3.7-plus", OffDisableDashScope}, {"qwen3.6-flash", OffDisableDashScope}, {"qwen3.5-plus", OffDisableDashScope}, From 16ef6d81b2352a5d4a0804638941544093ae62a7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 12:44:25 +0300 Subject: [PATCH 332/618] test(openai): lock the flat effort field as the chat completions wire form MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door defaults to the flat reasoning_effort string, but nothing held that default in place: the existing wire tests all opt into the modern format, so a change that made the nested reasoning object the default would have gone unnoticed. The new test asserts both directions on three model families — the flat field is present and the nested object is absent. PAGI-99 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_wire_test.go | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index d134053ef..dc82eeb79 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -400,3 +400,50 @@ func TestTheOutputLimitPicksTheFieldTheRouteUnderstands(t *testing.T) { t.Errorf("the explicit option must still win, got body: %s", body) } } + +func sendDoorDefaultReasoning(t *testing.T, model string, effort llms.ReasoningEffort) string { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(effort, 0)); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return body +} + +func TestTheChatCompletionsDoorSendsTheFlatEffortField(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5", "anthropic/claude-sonnet-5", "deepseek-v4-pro"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body := sendDoorDefaultReasoning(t, model, llms.ReasoningHigh) + + if !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Fatalf("effort must travel as the flat field, got body: %s", body) + } + if strings.Contains(body, `"reasoning":{`) { + t.Fatalf("the nested reasoning object belongs to another door, got body: %s", body) + } + }) + } +} From 57c697128029f1726a1a8574822d9703f5770bb6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 16:25:03 +0300 Subject: [PATCH 333/618] fix(bedrock): deepseek reasons on its own and rejects a thinking configuration Bedrock answers 400 ValidationException to a Converse request carrying additionalModelRequestFields.thinking for us.deepseek.r1-v1:0, and returns a full reasoning block for the same prompt with the field absent. Measured twice in both directions against bedrock-runtime in us-east-1. AWS documents the same shape: reasoning on that model is always enabled and cannot be toggled. The door treated every reasoning model outside the Nova and Grok families as a budget thinker, so a caller asking DeepSeek for any effort lost the whole answer rather than just the switch. The families the same request reaches with a 200 -- gpt-oss, kimi-k2-thinking and the MiniMax generation -- keep their current wire while their effect is measured. PAGI-245 Co-Authored-By: Claude Opus 5 --- .../bedrockclient_converse_test.go | 35 ++++++++++++++++++- llms/reasoning/bedrock_capability.go | 6 ++++ llms/reasoning/bedrock_capability_test.go | 1 + llms/reasoning/mechanism.go | 2 ++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index cba1452b1..00bc64d16 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1176,7 +1176,6 @@ func TestConverseBudgetPinsTemperatureOnlyForClaude(t *testing.T) { func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { for _, modelID := range []string{ - "us.deepseek.r1-v1:0", "zai.glm-4.7", } { t.Run(modelID, func(t *testing.T) { @@ -1220,6 +1219,40 @@ func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { } } +func TestConverseClient_DeepSeekTakesNoThinkingConfiguration(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + input := &ConverseInput{ + ModelID: "us.deepseek.r1-v1:0", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(4096), + ReasoningConfig: &llms.ReasoningConfig{Effort: llms.ReasoningHigh}, + } + + _, err := client.CreateCompletionConverse(t.Context(), input) + require.NoError(t, err) + + assert.Nil(t, capturedInput.AdditionalModelRequestFields, + "the model reasons on its own and answers 400 to a thinking configuration") + require.NotNil(t, capturedInput.InferenceConfig.MaxTokens) + assert.EqualValues(t, 4096, *capturedInput.InferenceConfig.MaxTokens, + "no foreign budget rule raises the caller ceiling") +} + // novaConverseFields runs one reasoning request through the client and returns the // additionalModelRequestFields it built, plus the inference config it settled on. func novaConverseFields(t *testing.T, modelID string, cfg *llms.ReasoningConfig, diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 88b1778e1..ad3ec2b23 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -27,6 +27,12 @@ func NovaClearsInferenceConfigAt(effort string) bool { return NovaEffort(effort) == "high" } +// IsBedrockAlwaysReasoningModel reports whether the Bedrock family reasons on +// every request and takes no thinking configuration alongside it. +func IsBedrockAlwaysReasoningModel(model string) bool { + return strings.Contains(baseModelName(model), "deepseek.r1") +} + // IsGrokModel reports whether the Bedrock model belongs to the xAI Grok family, // which carries its effort in a reasoning object rather than a thinking one. func IsGrokModel(model string) bool { diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index 0181d1214..d22d9d596 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -95,6 +95,7 @@ func TestMechanismSeparatesTheBedrockFamilies(t *testing.T) { {"us.amazon.nova-2-lite-v1:0", false, MechanismNovaReasoningConfig}, {"us.xai.grok-4.6", false, MechanismGrokEffort}, {"us.anthropic.claude-opus-4-5-20251101-v1:0", true, MechanismBudget}, + {"us.deepseek.r1-v1:0", false, MechanismNone}, } for _, c := range cases { if got := ResolveMechanism(c.model, false, c.claudeFamily, true); got != c.want { diff --git a/llms/reasoning/mechanism.go b/llms/reasoning/mechanism.go index 9ba2b4b0f..c858b2216 100644 --- a/llms/reasoning/mechanism.go +++ b/llms/reasoning/mechanism.go @@ -28,6 +28,8 @@ func ResolveMechanism(model string, adaptive, claudeFamily, reasons bool) Mechan return MechanismNovaReasoningConfig case IsGrokModel(model): return MechanismGrokEffort + case IsBedrockAlwaysReasoningModel(model): + return MechanismNone case reasons: return MechanismBudget default: From 7073c2b9a5770107864fda5921ad4bc93ebc81fa Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 5 Sep 2026 16:48:07 +0300 Subject: [PATCH 334/618] fix(bedrock): only a family with a mechanism of its own carries a thinking field The Converse door sent Anthropic's thinking object to every model it considered a reasoner, so gpt-oss, kimi, minimax, glm, magistral, nemotron and qwen all got a field their vendor never documents on this door, and the Claude budget rule then raised the caller's output ceiling on top of it. Measured before changing anything: with the field and without it, three runs per variant on one prompt against bedrock-runtime in us-east-1. The reasoning volume ranges overlap completely -- minimax-m2 gives 2011, 7353 and 4395 characters with no field against 3887, 5944 and 7203 at effort low -- and a low budget of 1024 tokens does not cap a 7203-character thought, so the field is inert. The re-recorded cassettes show the same five models answering 200 with a full reasoning block while receiving no thinking configuration at all. Claude keeps its object, Nova its reasoningConfig, Grok its effort, and the caller's max_tokens now survives on every other family. PAGI-245 Co-Authored-By: Claude Opus 5 --- .../bedrockclient_converse_test.go | 41 ++----- .../TestAmazonReasoningConverseAPI.httprr | 102 +++++++++--------- ...AmazonReasoningStreamingConverseAPI.httprr | Bin 108281 -> 106627 bytes llms/reasoning/bedrock_capability_test.go | 13 +++ llms/reasoning/mechanism.go | 5 +- llms/reasoning/mechanism_test.go | 4 +- 6 files changed, 80 insertions(+), 85 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 00bc64d16..79352cc08 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -596,8 +596,6 @@ func TestConverseClient_AdaptiveReasoningNonAnthropicModel(t *testing.T) { }, }, nil) - // Adaptive is an Anthropic request shape; other reasoning-capable models - // fall back to budget thinking. input := &ConverseInput{ ModelID: "openai.gpt-oss-120b-1:0", Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, @@ -610,23 +608,8 @@ func TestConverseClient_AdaptiveReasoningNonAnthropicModel(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, capturedInput.InferenceConfig.Temperature, "sampling params stay when adaptive is not applied") - - if !assert.NotNil(t, capturedInput.AdditionalModelRequestFields) { - return - } - raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() - assert.NoError(t, err) - var fields map[string]any - assert.NoError(t, json.Unmarshal(raw, &fields)) - - thinking, _ := fields["thinking"].(map[string]any) - assert.Equal(t, "enabled", thinking["type"]) - budget, ok := thinking["budget_tokens"].(float64) - assert.True(t, ok && budget > 0, "fallback must carry a positive token budget") - _, hasOutputConfig := fields["output_config"] - assert.False(t, hasOutputConfig, "budget fallback has no output_config") - - mockClient.AssertExpectations(t) + assert.Nil(t, capturedInput.AdditionalModelRequestFields, + "an Anthropic request shape does not travel to another vendor") } func TestConverseClient_AdaptiveReasoningPreAdaptiveModelGated(t *testing.T) { @@ -1174,9 +1157,12 @@ func TestConverseBudgetPinsTemperatureOnlyForClaude(t *testing.T) { }) } -func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { +func TestConverseClient_NonClaudeThinkersTakeNoThinkingConfiguration(t *testing.T) { for _, modelID := range []string{ "zai.glm-4.7", + "minimax.minimax-m2.5", + "openai.gpt-oss-120b-1:0", + "moonshot.kimi-k2-thinking", } { t.Run(modelID, func(t *testing.T) { mockClient := &MockBedrockRuntimeClient{} @@ -1205,16 +1191,11 @@ func TestConverseClient_ReasoningReachesNonClaudeThinkers(t *testing.T) { _, err := client.CreateCompletionConverse(t.Context(), input) require.NoError(t, err) - require.NotNil(t, capturedInput.AdditionalModelRequestFields, - "a thinking model gets a thinking request") - raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() - require.NoError(t, err) - var fields map[string]any - require.NoError(t, json.Unmarshal(raw, &fields)) - thinking, _ := fields["thinking"].(map[string]any) - require.NotNil(t, thinking) - assert.Equal(t, "enabled", thinking["type"]) - assert.EqualValues(t, 2666, thinking["budget_tokens"]) + assert.Nil(t, capturedInput.AdditionalModelRequestFields, + "only a family with a documented mechanism carries one") + require.NotNil(t, capturedInput.InferenceConfig.MaxTokens) + assert.EqualValues(t, 8000, *capturedInput.InferenceConfig.MaxTokens, + "no foreign budget rule raises the caller ceiling") }) } } diff --git a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr index 84a61f484..02caacf11 100644 --- a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr +++ b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr @@ -1,5 +1,5 @@ httprr trace v1 -581 1166 +581 1155 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-opus-4-6-v1/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -8,12 +8,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024},"output_config":{"effort":"medium"}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1000 +Content-Length: 990 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:33:47 GMT -X-Amzn-Requestid: 80373522-ab0e-4f92-9e41-325ae114b4d8 +Date: Sat, 05 Sep 2026 13:42:41 GMT +X-Amzn-Requestid: d788dd54-c92b-4fa7-be8b-eec05cbc1e48 -{"metrics":{"latencyMs":4075},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EvIBCmUIERABGAIqQME+TEpO2D3HoKnFhKXb96DYRR1GDrnN6CWc+EHlOz3fQyYrrg4msVsS9b8kGMJmZUqcKuCAUDuZI8Jcnz+pmM0yD2NsYXVkZS1vcHVzLTQtNjgAQgh0aGlua2luZxIMpx5CVTPVZBwwiKa3GgzXujfYzzWo+QF4ticiMFzUyoOHoaMhdPLM/SGH5z+MSBkwokidDQM/A6l8/n6cpG9OiQJp+9vTUjFBjoZhTyo7w9Kotfb2qL7+vPzelBKSvQxatUXCShLJPBF652mAoE+MRHUXwHBnGTBizPUWXBkrfCQTLJnR7Qiff+EYAQ==","text":"17 * 23 = 17 * 20 + 17 * 3 = 340 + 51 = 391"}}},{"text":"# Calculating 17 × 23\n\n## Step-by-step process:\n\nI'll break this into simpler parts using the distributive property:\n\n**17 × 23 = 17 × (20 + 3)**\n\n1. **17 × 20** = 340\n2. **17 × 3** = 51\n\n## Final addition:\n\n340 + 51 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":139,"serverToolUsage":{},"totalTokens":194}}580 1329 +{"metrics":{"latencyMs":2389},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EoACCnMIERABGAIqQME+TEpO2D3HoKnFhKXb96DYRR1GDrnN6CWc+EHlOz3fQyYrrg4msVsS9b8kGMJmZUqcKuCAUDuZI8Jcnz+pmM0yD2NsYXVkZS1vcHVzLTQtNjgAQgh0aGlua2luZ1oMOTUwNzI0MTA2OTcyEgw8fuFw+SPzPtKlxIYaDDLWzTPl+wy1KKuH4yIwqWCt6QXUsoMj2gj7AFlx5w4/F+StKznuq4sX5S6Y12ejmFI3xy9I+KFad56/EsI0KjtuDgkXm3j/Ng8Jby+afgA9gkNfjvVcArVIbYVA7Mxas2CZ98chewdaqpC6hfG9j4sL4yS3IEwfmbvlBhgB","text":"17 * 23 = 17 * 20 + 17 * 3 = 340 + 51 = 391"}}},{"text":"## Calculating 17 × 23\n\n**Breaking it down using the distributive property:**\n\n17 × 23 = 17 × (20 + 3)\n\n**Step 1:** 17 × 20 = 340\n\n**Step 2:** 17 × 3 = 51\n\n**Step 3:** Add the results: 340 + 51 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":136,"serverToolUsage":{},"totalTokens":191}}580 1475 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -22,12 +22,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024},"output_config":{"effort":"medium"}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1163 +Content-Length: 1309 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:33:53 GMT -X-Amzn-Requestid: 508db220-a510-43fa-938a-aa6535432b5a +Date: Sat, 05 Sep 2026 13:42:45 GMT +X-Amzn-Requestid: e60ec1c4-e229-4b2d-838e-532c20d2d3e8 -{"metrics":{"latencyMs":4467},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EvUBCmcIERABGAIqQME+TEpO2D3HoKnFhKXb96DYRR1GDrnN6CWc+EHlOz3fQyYrrg4msVsS9b8kGMJmZUqcKuCAUDuZI8Jcnz+pmM0yEWNsYXVkZS1zb25uZXQtNC02OABCCHRoaW5raW5nEgxcUCLkvqHSheFieZYaDJ1YC/v3WtVB3Qq2CSIwc83WiFoyXWAC4uqnaTMXnApdMN8KV/8riwGe2XCIpGHKAVDK1ps1eOGLSDp8H0JPKjzWIBzSwv81qgjxKJggTUkn+C3IU55LsPWuxG4N8umF9nnPDOSI3HLOxTgf4NW7teaBmYP5v2jHmU+UO60YAQ==","text":"17 * 23\n\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391"}}},{"text":"## Calculating 17 × 23\n\n### Breaking it down using distributive property:\n\nSplit 23 into (20 + 3):\n\n**17 × 20:**\n17 × 2 = 34, then × 10 = **340**\n\n**17 × 3:**\n17 × 3 = **51**\n\n### Adding the parts:\n340 + 51 = **391**\n\n### Verification using another method:\nSplit 17 into (10 + 7):\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✓\n\n### Answer: 17 × 23 = **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":216,"serverToolUsage":{},"totalTokens":271}}558 2140 +{"metrics":{"latencyMs":3189},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EoMCCnUIERABGAIqQME+TEpO2D3HoKnFhKXb96DYRR1GDrnN6CWc+EHlOz3fQyYrrg4msVsS9b8kGMJmZUqcKuCAUDuZI8Jcnz+pmM0yEWNsYXVkZS1zb25uZXQtNC02OABCCHRoaW5raW5nWgw5NTA3MjQxMDY5NzISDMo/LAgmkOS/36cW5RoMQ5H533FIPp2SyBpRIjBF5bnVdgfZ+T4EOCg/OCMOA+zdJwz1K8Fu2sIyBNHz73hdEz1z+9pqz5iNg1WDdGgqPL9AqNhUkjazlCeLL93O4iMufeG7syuhgqFgcIkmFKPBH62TywtWyQqBnOEzuHxizfMKn4E55nNiTAa1xhgB","text":"17 * 23\n\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391"}}},{"text":"## Calculating 17 × 23\n\n### Breaking It Down\n\nI'll use the **distributive property** to make this easier:\n\n**Split 23 into (20 + 3):**\n\n$$17 \\times 23 = 17 \\times (20 + 3)$$\n\n### Step-by-Step\n\n| Step | Calculation | Result |\n|------|------------|--------|\n| 1 | 17 × 20 | 340 |\n| 2 | 17 × 3 | 51 |\n| 3 | 340 + 51 | **391** |\n\n### Answer\n\n$$17 \\times 23 = \\boxed{391}$$\n\n### Quick Verification\nUsing another split — **(10 + 7) × 23:**\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✅"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":271,"serverToolUsage":{},"totalTokens":326}}558 1998 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-opus-4-5-20251101-v1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -36,12 +36,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1974 +Content-Length: 1832 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:00 GMT -X-Amzn-Requestid: 37a92e69-3b8b-4b38-85da-3be1eb385b87 +Date: Sat, 05 Sep 2026 13:42:51 GMT +X-Amzn-Requestid: b1ba1a31-3596-4700-b6dd-2248f56652a4 -{"metrics":{"latencyMs":6009},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"ErkECm4IERABGAIqQIntbp5z8lkmmzuUHtOSiF0BO50KYaEnBpTnOq3tyNw6Sq4KyU7b8Ascb5uzClTox+ZokwDV3fjJUIJj5M+Y2V4yGGNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMTgAQgh0aGlua2luZxIMp1KR2oNUt3zZuocjGgwHkJ4+6hGCjB2qP3wiMJHYrh1Qc72riG2T4hYrlHGkM09tnB0uGyaM8vSQ/ZghZjjdUJ0mH1HBbF6GsGiZPir4AgltQSgzYWX/xCYO7SmF6rGvapYMKzA9vpp0XQRoQ+1g9DxigT3/DOXT05ZOrFrloGOE7ZmjXggelRiCiI5STxZLvgrwrfnnHfQX4WdazqP7Gi0dLDEz+6HCwoWHPX3t2w7YPWiMrYcSaQ3C4dML+PY1QvqklV1c03enOZJLKgn2Ph1Dln0gdiUgP5GiYZFbq38/v2o1mTtiUp07IRTDt947kWdPiiAOC2i1L6YdiElgU8e1Q2G62S7kE7IrcUyz5fNd9rfiKygOefy4/AfIvuJ1MtYwsSyiQgWdzDjRJgZQDqC3pWh+0IjTCWs7c5ueqJVi8dJNfi94MxSKkGY4IHpZOmT63EYLWn+DAKGNI4uQq2wJ/Vxhr+4gzPbEE9sR+A9X9CdcwfnlTypHaU50dX8FlzD0iMFHKgw6XP+0il7jkQ2txX1f8DpocXhTcinbELSvttrfVgAlfDUZ7Zr18rKsjau27B/ydMe6WAbqnmGDq2j9SHUKw0gYAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nMethod 1: Standard multiplication\n17 * 23\n\nI can break this down as:\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify with another method.\n\nMethod 2: Break down 17\n17 * 23 = (10 + 7) * 23\n= 10 * 23 + 7 * 23\n= 230 + 161\n= 391\n\nBoth methods give 391, so that's correct."}}},{"text":"# Calculating 17 × 23\n\n## Step-by-Step Solution\n\nI'll break this into simpler parts using the distributive property.\n\n**Breaking down 23 into (20 + 3):**\n\n17 × 23 = 17 × (20 + 3)\n\n**Calculate each part:**\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n**Add the results:**\n340 + 51 = **391**\n\n## Verification\n\nI can check by breaking down 17 instead:\n- 10 × 23 = 230\n- 7 × 23 = 161\n- 230 + 161 = **391** ✓\n\nThe answer is **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":351,"serverToolUsage":{},"totalTokens":406}}559 2165 +{"metrics":{"latencyMs":4449},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"ErkECnwIERABGAIqQAV346vmIWs0ncCnAQMI+xWUHGyA5ttwdkjgaCzpJ5WVHsQKACcPCzxwvskFBjbMWMsLxrfVcg6oFp/JQIY1SzgyGGNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMTgAQgh0aGlua2luZ1oMOTUwNzI0MTA2OTcyEgx7n/NU1NGwrqPsO5saDJz3/U8EAM2gd+SeSCIwOiNbJDtNISjDbjulJwDCGWqBhUiJskNfLm50CoGmdCP5JDRT2xe8cfhg7nXMvTbCKuoCY/+Z2y8jtj7NJmqZlcWGv1ki6amNj0aKYtd8VnRgdM68UiU8NbhiVa7e5PMMSzSnDgkx4a6e1CuP0RdZQzzr4/nwG7nHpFTaaU6fvu8JA6+udgTviOJCAtOzBSi7TIkfp+FsQtIq72wPmc3e+VAuJrAeyBq1Q+Q9KEfiJL/gnLYCdr5RajLjEXyGNrsT3itcTMRw2QakycUTjs6YkAfjsYQILVzH0A5O3KzDuXhwARc/AOJOw6ZxJfnLGGm2lPfnKMVsimziNdkIH9t5sjodGMImygFo8tXC2TbQmnhFI7mEh+armDtp/3YOQn/6tRgUTp8S298gaevTWWVltv9Iai2z/4q/7/LjSQEvB3glqsgfCSzs415SsQmNPS9Ph7oYQYpgyGJhmxph9InpvoujMoY1tNAcQiKAkgvezXSxc2v6KkV+3Iy20PGU0Q3JiJQWCSAnxKIGXxfaQF+NqXrBHv3juI6gYjFf32EYAQ==","text":"I need to calculate 17 * 23 step by step.\n\nI can break this down in a few ways. Let me use the standard multiplication method.\n\n17 * 23\n\nI can think of this as:\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify by doing it another way:\n17 * 23 = (10 + 7) * 23\n= 10 * 23 + 7 * 23\n= 230 + 161\n= 391\n\nYes, the answer is 391."}}},{"text":"# Calculating 17 × 23\n\n## Breaking it down\n\nI'll split this into easier parts using the distributive property:\n\n**17 × 23 = 17 × (20 + 3)**\n\n## Step-by-step:\n\n1. **17 × 20** = 17 × 2 × 10 = 34 × 10 = **340**\n\n2. **17 × 3** = **51**\n\n3. **Add the results:** 340 + 51 = **391**\n\n## Answer: **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":301,"serverToolUsage":{},"totalTokens":356}}559 1933 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -50,12 +50,12 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1999 +Content-Length: 1767 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:04 GMT -X-Amzn-Requestid: 6b573fea-8b2b-4c31-9e42-c9f445a0fe08 +Date: Sat, 05 Sep 2026 13:42:54 GMT +X-Amzn-Requestid: b692b49a-5ec3-4e08-a7c3-8ef4f796df83 -{"metrics":{"latencyMs":2194},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EtcECkgIERABGAIqQG9Ey42can2U2d3wKJsuay5j8rGnDLObXj1BPnvABZmKrWyTA4LzgDSvzho2qF5EqOJPGN2yujGCUYT5itgc4OESDKk/HLYaSEiwqrbzRRoMwFSkyRiRHBdjhVGXIjBLAEpfT2CMUn+mR5pArwM4OrjVwQllqI8Gom09VjwuqTkUeC+Cw5y1OJvYvUzW+CoqvAOeZxj3ybNE/sVKvOOAyHiA63KAbsslnUWAKoXKJN8e2uxCTIpqvv+xRDvS27pMHr/QHlkjPvQadA4qFk2ldW/EEiCwI+q4w1rTTPVEEf5NF2HoTNA36V1zBOcjFl/xaDmX8bmQvPrOzjZy16uigCCvEwNj/Qd5shoZPYcrhIGmBlQrHZ1KVFcESNkoGBU3TcgQtLfRH0qx6SH8IaeFS1sCc8ncvpuVyJe86TyfW1/a6JA9/TOK6KmjpzY5U9rHW9OngPKKM7kxz6l0nG7UHFvt319kcpVLc2KcVJBafEm6QR94v9ieuFxO6/SOyOLYQI/8ZUk0TX5w7M0mLFEQDN8CMri/rua6oAQ3pI/Ht9gjv0W1jHs3EJngFvbxBv06T+jA7KAhen1LexSvURG5gXkJhZ2/il9aME8rwQCLE14meaMmpuY5PKbthAV5ee57pV7GENtXKhmN1pE2ANxMFpqiu0nvB13EyD6uayONvDdE6vOiVdNCXqel1ByNYFKkeOKHjtJ47ZX4ye4B8rye75B3Y28ZDUK2p8JU3k7siYvpvZ8Y2sJo4HmtYypV+oBsd/fiQOi7R1wnFxzpYsAYAQ==","text":"I need to calculate 17 * 23. Let me think through this step by step.\n\nMethod 1: Break it down using the distributive property\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify this with another method:\n\nMethod 2: Standard multiplication\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n\nLet me check: 23 × 7 = 161 ✓\n23 × 10 = 230 ✓\n161 + 230 = 391 ✓\n\nSo the answer is 391."}}},{"text":"# Calculating 17 × 23\n\nI'll break this down using the distributive property:\n\n## Step 1: Decompose one number\n17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n= (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":349,"serverToolUsage":{},"totalTokens":404}}560 2461 +{"metrics":{"latencyMs":2221},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EoEECoQBCBEQARgCKkBG+3oEtUgF3wuuPMNxtwezB9wE19GCOSQeR3BzbUW0kiX35ilM1gfnGmOhd9XuXb+i3jzWIBS01BS9pt8BtV0SMhljbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxOABCCHRoaW5raW5nWgw5NTA3MjQxMDY5NzKoAd248NQGEgwDvf1QEVyTHVlQRY0aDJzS2vkfbm7qwsrO5yIw1wI0O4vtlJ//UYEh0Regn05XBcz5kz2X/TTJoYLPSlGuqXc3BWCGcn6ZxsDRJPKPKqkCgnRIbIjEBnBJrkYie9qBgn8PUX+GSuElrYJXAY0nk/dMbovGyJHp6y628nWIWkeLXfuAYuTvGQOItDrPFXZjSw1Sg4Ccr/5sSiU43sqHPcJ9MyFgya4vr5kF/Kkizd6ottiBydpag8yQRtgf8nTVNQIzCVC6rTWNkRFB45Ff85VYUSn0+BSXEMCKJr1K8G0IueYs0mE4MZblXVRKN0+IVZScj1LWsO0kz7cu9BBvq6ACTO2qMg/7m4BtEDzAwyZlYD8l7iaqYgkkM+Huo/o9Lk22B6znF5yYLkHemzto/Acv6j72E6JtINLZKtk7duiQ8ksTfgMYtXHU9gzfthibn4XFxXjj7IzyslwQigzpLd9HePsGWYJywtXPsunHYWkm8AWwhnRy8h0pGAE=","text":"I need to calculate 17 * 23. Let me do this step by step.\n\nMethod 1: Breaking it down\n17 * 23 = 17 * (20 + 3)\n= 17 * 20 + 17 * 3\n= 340 + 51\n= 391\n\nLet me verify this another way:\n17 * 23 = (20 - 3) * 23\n= 20 * 23 - 3 * 23\n= 460 - 69\n= 391\n\nBoth methods give 391, so that's correct."}}},{"text":"# Calculating 17 × 23\n\n## Method: Break it into simpler parts\n\nI'll decompose 23 into 20 + 3:\n\n**17 × 23 = 17 × (20 + 3)**\n\n**Step 1:** Multiply 17 by 20\n- 17 × 20 = 340\n\n**Step 2:** Multiply 17 by 3\n- 17 × 3 = 51\n\n**Step 3:** Add the results\n- 340 + 51 = **391**\n\n## Verification:\nI can check this using a different decomposition (20 - 3) × 23:\n- 20 × 23 = 460\n- 3 × 23 = 69\n- 460 - 69 = 391 ✓\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":55,"outputTokens":361,"serverToolUsage":{},"totalTokens":416}}560 2502 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-sonnet-4-5-20250929-v1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr @@ -64,79 +64,79 @@ Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json {"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096,"temperature":1},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2295 +Content-Length: 2336 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:11 GMT -X-Amzn-Requestid: 8d1ca957-6597-4d83-bb08-178f584a24e2 +Date: Sat, 05 Sep 2026 13:43:02 GMT +X-Amzn-Requestid: 9875b674-cf06-4155-a7d7-db7774f58cb6 -{"metrics":{"latencyMs":6281},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EpAFCnAIERABGAIqQHcwZPA+fT9iP2hMhNrSVLGvxT8O2Y7KwOcfbxxb+KByeUP+SRqfr2/8UxqTASW248OLMpDxvaehM3/cxtPQzYkyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nEgz5F+MDkFsa40e63l4aDIWgLnAXWBW/1Z59LSIwC+wWh83wunt5hQUDvs9vV8s+63d/4ObbTKJ1f6stcJ+TmAqWyLu3piKGD1Yu3iDSKs0D9y1tbFFehOD6vfp1ANEWlfQZPqln7CFfUfBHyGmbdKr8P7gQuKRkfSy/DSJeoxZtp+0HZkHFNRwo3wCs0hUqPRQZyw22663dmXljRXcsNXMLrYxBHw2OBCjNrM4IIJ/tZ2hL+0vN3DbjfhZtxmgdZ1d1c6ozU0zAAw+PeB04R/yGOLz8nhzhw8TG9/17654jETh3q7cgcp9O3J6J7iIdYsaZHEhOowUVcUWAyUweLUoERblhxVl3dNiF1glU/CklsWCoZJNvszbrOvIJZPj5lBFBQN4Y3Ubr8q4YgUuCbKqiF8pQllMgev2oRK5ewb5n3c+z+9YCWDE7jYpZUiC9fgYV4Az9CzpAFp3l+cdSS7BNyCjq3NDYgxKwB+4V1z8AxNgkxxHRMZjftTzTmGadcVP5l99r6NbvA7l11kIhtuWB/hYICi8EpGO052beCQ6+IuSkTPR4HlReIV/1Yf1H8kVSIdZHiHecMEsYDoeehZGkBdwCIvu2CDK+7EomjPKhPxkl1Y8BjABSC0DA10zrNASrANJ/YCJO+BMfXM0yA3Ubv76LNzy/sHRsBT95rvylN930vPIFEvkn1jR02rATI7prKzCAxhNxcN7GUG4YAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nMethod 1: Breaking down by place value\n17 * 23 = 17 * (20 + 3)\n= (17 * 20) + (17 * 3)\n= 340 + 51\n= 391\n\nLet me verify this with another method to be sure.\n\nMethod 2: Traditional multiplication\n 23\n × 17\n ----\nFirst, multiply 23 by 7:\n23 × 7 = 161\n\nThen multiply 23 by 10:\n23 × 10 = 230\n\nAdd them together:\n161 + 230 = 391\n\nBoth methods give me 391, so that's the answer."}}},{"text":"# Calculating 17 × 23\n\nI'll use the distributive property to break this into easier parts:\n\n## Step 1: Break down 23\n23 = 20 + 3\n\nSo: 17 × 23 = 17 × (20 + 3)\n\n## Step 2: Distribute the multiplication\n17 × (20 + 3) = (17 × 20) + (17 × 3)\n\n## Step 3: Calculate each part\n- 17 × 20 = 340\n- 17 × 3 = 51\n\n## Step 4: Add the results\n340 + 51 = **391**\n\n**Answer: 17 × 23 = 391**\n\n---\n\n*Verification using standard multiplication:*\n```\n 23\n × 17\n ----\n 161 (23 × 7)\n 230 (23 × 10)\n ----\n 391\n```\n✓ Confirmed!"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":424,"serverToolUsage":{},"totalTokens":479}}523 1169 +{"metrics":{"latencyMs":6418},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EswFCn4IERABGAIqQIOXECXE6Au6c2Nrgtv6m3kZZ51gDvnzsk3VDdMxIrZuja16LGz5S8/ea/ZyZR3cKJ4YZwcW+aHmEbUMPmOLX5wyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nWgw5NTA3MjQxMDY5NzISDAsxeyrpfZn2vo3dAxoMMGQRId8PYAqbWx8xIjDR3ORMZy7g7GBqc786H27Be6N/Awbch2Bozjn3bfKHYLg40LyMoWmcPSwtK8W+1fwq+wP0R7XheZNVYTeL0U9gHuqNCN6vUgq9NuHwCBJ2DELRznZfIHSfEfQq7xdPgEPenc5G8dNs1LHBlD4g+K3+G2wazN3k6Z6q/gB7T8u2s4qGWupAwrqd9GfXJcPcgrsAVFl0hmhw953VrIXA1/QvBl3AGJtyXUzpZm2AvSLLteiYQVSXY00V4MK1IdecUpZpTrifYT2pM8CEqqlw3HPcb74F+uedni7WTUPKLJV4h+6QPA5Xm2FiN7gZEulfnOeovvBm9YHNIBX6/wuriV5lmu0BGHJTSCfSPrqEeuMLexCCKvjcGCK3YCbgKonpsO4iHOi/XhMxGuOHMcjRvxnzbRZu9g4UWovVkVlUQfPkUwnVJSh76C8oMzgi8Fz/g4LJOaU2XqY40vb3J0LBlhn1+YXGAzLPoj0AnjjwaNcTzXBuxXfHBks9bV0nFo7djhQlZmQrTwyYLtv9tyzzuglq9A7ExEuu4nSThZMa8nQzgKdggR0V/f5TjbjHhPQS99ynqVRJaAHFl75Jbi0/3I6i1ket2BmDMNRNf78vJ9go8gcqfyivWJs0Lkc6zYZ6IRR60czKVnixzc0zG4qHZmcdOYx5qEqpVEEGG9PnFsTvQ9D18DV0lg8qOVnRLYNBhuLz5sYU2eGi7I3nGAOj7p4rVQTvIZEIngRCmJEeifMYAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nI can use the distributive property to make this easier:\n17 * 23 = 17 * (20 + 3)\n = (17 * 20) + (17 * 3)\n\nFirst part: 17 * 20\n17 * 20 = 17 * 2 * 10 = 34 * 10 = 340\n\nSecond part: 17 * 3\n17 * 3 = 51\n\nNow add them together:\n340 + 51 = 391\n\nLet me verify this another way:\n23 * 17 = 23 * (10 + 7)\n = (23 * 10) + (23 * 7)\n = 230 + (23 * 7)\n\n23 * 7 = 161\n230 + 161 = 391\n\nGood, I get the same answer both ways."}}},{"text":"# Calculating 17 × 23\n\nI'll break this into easier parts using the distributive property:\n\n## Method: Break 23 into (20 + 3)\n\n**17 × 23 = 17 × (20 + 3)**\n\n### Step 1: Calculate 17 × 20\n- 17 × 20 = 340\n\n### Step 2: Calculate 17 × 3\n- 17 × 3 = 51\n\n### Step 3: Add the results\n- 340 + 51 = **391**\n\n## Verification (alternative method):\nBreaking 17 into (10 + 7):\n- 23 × 10 = 230\n- 23 × 7 = 161\n- 230 + 161 = **391** ✓\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":454,"serverToolUsage":{},"totalTokens":509}}439 2087 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-120b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 240 +Content-Length: 156 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1003 +{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 1921 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:14 GMT -X-Amzn-Requestid: 48d4d921-6425-4dca-a587-ca638a27ff5f +Date: Sat, 05 Sep 2026 13:43:06 GMT +X-Amzn-Requestid: da7b9b32-e279-4117-8a1c-e42669d82391 -{"metrics":{"latencyMs":1461},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"User asks to think step by step: compute 17*23. Provide reasoning. Should give multiplication steps. Probably show breakdown: 17*20 + 17*3 = 340 + 51 = 391. Or use distributive property. Provide reasoning explicitly."}}},{"text":"**Step‑by‑step multiplication**\n\n1. **Write the product using the distributive (area) method** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3)\n \\]\n\n2. **Multiply 17 by each part of the sum** \n\n * Multiply by 20: \n \\[\n 17 \\times 20 = 17 \\times 2 \\times 10 = 34 \\times 10 = 340\n \\]\n\n * Multiply by 3: \n \\[\n 17 \\times 3 = 51\n \\]\n\n3. **Add the two partial results together** \n \\[\n 340 + 51 = 391\n \\]\n\n4. **Conclusion** \n\n \\[\n \\boxed{391}\n \\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":240,"serverToolUsage":{},"totalTokens":325}}522 2384 +{"metrics":{"latencyMs":3096},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We need to answer with step-by-step reasoning for multiplication 17 * 23. Provide process: break down, use distributive property, maybe show long multiplication. Provide final answer."}}},{"text":"**Step‑by‑step multiplication of 17 × 23**\n\n---\n\n### 1. Write the numbers in a convenient order\nIt’s usually easier to multiply the larger number by the smaller one, but either way works. \nWe’ll multiply **23** by **17**.\n\n```\n 23\n × 17\n ----\n```\n\n### 2. Multiply by the units digit (7)\n\n- 7 × 3 = 21 → write 1, carry 2. \n- 7 × 2 = 14; add the carry 2 → 14 + 2 = 16. \n\nSo the first partial product (for the 7) is **161**.\n\n```\n 23\n × 17\n ----\n 161 ← 7 × 23\n```\n\n### 3. Multiply by the tens digit (1), remembering its place value\n\nThe tens digit of 17 is **1**, but because it’s in the tens place we actually multiply by **10**.\n\n- 1 × 3 = 3 → write 3. \n- 1 × 2 = 2 → write 2.\n\nNow shift this result one place to the left (add a zero) to reflect the factor of 10:\n\n```\n 23\n × 17\n ----\n 161 ← 7 × 23\n+ 230 ← 1 (i.e., 10) × 23\n```\n\n### 4. Add the two partial products\n\n```\n 161\n+ 230\n-------\n 391\n```\n\n### 5. Result\n\n\\[\n17 \\times 23 = 391.\n\\]\n\n---\n\n#### Quick check with another method (distributive property)\n\n\\[\n\\begin{aligned}\n17 \\times 23 &= (10+7) \\times (20+3) \\\\\n&= 10\\!\\times\\!20 \\;+\\; 10\\!\\times\\!3 \\;+\\; 7\\!\\times\\!20 \\;+\\; 7\\!\\times\\!3 \\\\\n&= 200 \\;+\\; 30 \\;+\\; 140 \\;+\\; 21 \\\\\n&= 391.\n\\end{aligned}\n\\]\n\nBoth approaches give the same answer, confirming that **17 × 23 = 391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":551,"serverToolUsage":{},"totalTokens":636}}438 2300 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-20b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 240 +Content-Length: 156 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2218 +{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 2134 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:19 GMT -X-Amzn-Requestid: 20766bc4-acc7-49d1-a9b9-0e359e325219 +Date: Sat, 05 Sep 2026 13:43:10 GMT +X-Amzn-Requestid: 4b723297-ee28-471c-9714-415c52417ece -{"metrics":{"latencyMs":3272},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" So we need to compute 17 * 23. But the user explicitly wants step by step reasoning, perhaps by expansion: (17 * 20) + (17 * 3) = 340 + 51 = 391. Or using algorithm / decomposition. We can show detailed reasoning: Write 17 * 23 = (10+7)*(20+3) = 10*20 + 10*3 + 7*20 + 7*3 = 200 + 30 + 140 + 21 = 391. Or 23*17 = 23*10 + 23*7 = 230 + 161 = 391. Provide explanation.\n\nWe then show step-by-step in plain text. We'll also mention perhaps cross-check: 17 * 23 = 391. So we should deliver final answer: 391. Also show the steps.\n\nThus the best answer: \"17×23 = (17×20)+(17×3) = 340+51 = 391.\" Provide full reasoning.\n\nWe can note that 17x23 = (20+3)*(10+7)... etc. Provide answer.\n\nOk finalize."}}},{"text":"Sure! Let’s break the multiplication down into simpler pieces so you can see exactly how we get the answer.\n\n### 1. Use the distributive property\nWe can write each number as a sum of simpler numbers:\n\n- \\(17 = 10 + 7\\)\n- \\(23 = 20 + 3\\)\n\nNow multiply \\((10 + 7)\\) by \\((20 + 3)\\):\n\n\\[\n(10 + 7)(20 + 3)\n\\]\n\n### 2. Expand the product\nApply the distributive law (multiplying each part of the first parenthesis by each part of the second):\n\n\\[\n= 10 \\times 20 \\;+\\; 10 \\times 3 \\;+\\; 7 \\times 20 \\;+\\; 7 \\times 3\n\\]\n\n### 3. Compute each small product\n- \\(10 \\times 20 = 200\\)\n- \\(10 \\times 3 = 30\\)\n- \\(7 \\times 20 = 140\\)\n- \\(7 \\times 3 = 21\\)\n\n### 4. Add the results together\n\\[\n200 \\;+\\; 30 \\;+\\; 140 \\;+\\; 21 = 200 + 30 = 230,\\;\n230 + 140 = 370,\\;\n370 + 21 = 391\n\\]\n\n### 5. Final answer\n\\[\n17 \\times 23 = 391\n\\]\n\n---\n\nYou can also check quickly by using the “split and add” trick:\n\n- \\(23 \\times 17 = 23 \\times (10 + 7) = 23 \\times 10 + 23 \\times 7\\)\n- \\(23 \\times 10 = 230\\)\n- \\(23 \\times 7 = 161\\)\n- Sum: \\(230 + 161 = 391\\)\n\nEither way, the result is **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":678,"serverToolUsage":{},"totalTokens":763}}523 2852 +{"metrics":{"latencyMs":3241},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" Straightforward multiplication: 17 × 23. 17 * 23 = (17 * 20) + (17 * 3) = 340 + 51 = 391.\n\nBut the user wants step-by-step reasoning. Could show as 17 * 30 - 17 * 7? But simple: 23 = 20 + 3. So 17*20 = 340, 17*3 = 51, sum 391.\n\nAlso show long multiplication: maybe show two-digit multiplication: 23 * 17: 3 * 17 = 51, write 51; 2*17 = 34, shift one: 340, sum 391. But they said \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nWe can respond with description of the multiplication using distributive property or long multiplication.\n\nJust the answer, 391. Also pretty method: use associativity: 17 * 23 = (10+7) * 23 = 10*23 + 7*23 = 230 + 161 = 391.\n\nThus answer: 391.\n\nWill provide step-by-step. Let's create rational explanation.\n\nPotential deliverable: step 1: break one number into sum of place values, step 2: multiply each part, step 3: sum contributions.\n\nLet's produce a detailed reasoning."}}},{"text":"Sure! Let’s multiply \\(17\\) by \\(23\\) step‑by‑step, using the distributive property and some basic arithmetic.\n\n---\n\n### 1. Break one of the numbers into place values \nWe can write \\(23\\) as \\(20 + 3\\). \n(You could also split \\(17\\) into \\(10 + 7\\); either way works.)\n\n### 2. Multiply \\(17\\) by each component \n- \\(17 \\times 20 = 340\\) (because \\(17 \\times 2 = 34\\) and then add a zero for the *10* multiplier) \n- \\(17 \\times 3 = 51\\)\n\n### 3. Add the two products together \n\\(340 + 51 = 391\\)\n\nSo,\n\n\\[\n17 \\times 23 = 341 + 51 = \\boxed{391}\n\\]\n\n---\n\n#### Alternative view: using long multiplication\n\n```\n 1 7\n × 2 3\n ______\n 5 1 (3 × 17)\n +3 4 0 (20 × 17, shift one place left)\n ______\n 3 9 1\n```\n\nBoth approaches give the same result: **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":593,"serverToolUsage":{},"totalTokens":678}}439 1544 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/moonshot.kimi-k2-thinking/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 240 +Content-Length: 156 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2686 +{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 1378 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:25 GMT -X-Amzn-Requestid: 0dbfee55-c500-4268-b48b-a54e8b5ca5a5 +Date: Sat, 05 Sep 2026 13:43:15 GMT +X-Amzn-Requestid: 4d751a0c-da36-4f69-9368-8ef51d1b345c -{"metrics":{"latencyMs":4919},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":" The user asks for 17 * 23 and wants me to show my reasoning process step by step.\n\nLet me think about how to multiply 17 by 23. I can use several methods:\n\n1. Standard multiplication algorithm\n2. Breaking down numbers (distributive property)\n3. Using the difference of squares or other algebraic identities\n4. Mental math tricks\n\nLet me try the distributive property approach first, as it's easy to show step-by-step:\n\n17 * 23 = 17 * (20 + 3)\n = 17 * 20 + 17 * 3\n = 340 + 51\n = 391\n\nAlternatively, I could break it down differently:\n17 * 23 = (10 + 7) * 23\n = 10 * 23 + 7 * 23\n = 230 + 161\n = 391\n\nOr using the standard algorithm:\n 17\n x 23\n ----\n 51 (17 * 3)\n 340 (17 * 20, shifted)\n ----\n 391\n\nI could also use the difference of squares method:\n17 * 23 = (20 - 3) * (20 + 3)\n = 20² - 3²\n = 400 - 9\n = 391\n\nThis is neat because 17 and 23 are symmetric around 20.\n\nLet me present the solution using the distributive property method as it's straightforward and demonstrates clear reasoning. I'll also mention the difference of squares method as an alternative elegant solution.\n\nStep-by-step reasoning:\n1. Recognize that 23 can be broken into 20 + 3\n2. Apply distributive property: 17 × 23 = 17 × (20 + 3)\n3. Multiply 17 by 20: 17 × 20 = 340\n4. Multiply 17 by 3: 17 × 3 = 51\n5. Add the results: 340 + 51 = 391\n\nI should show this clearly."}}},{"text":" Let me break down the multiplication 17 × 23 step by step:\n\n**Method 1: Distributive Property (Breaking down 23)**\n\n1. First, I'll split 23 into easier numbers: 23 = 20 + 3\n2. Now multiply 17 by each part:\n - 17 × 20 = 340 (since 17 × 2 = 34, then add a zero)\n - 17 × 3 = 51 (since 10 × 3 = 30 and 7 × 3 = 21, then 30 + 21 = 51)\n3. Add the partial results: 340 + 51 = 391\n\n**Method 2: Alternative Breakdown (Breaking down 17)**\n\n1. Split 17 into: 17 = 10 + 7\n2. Multiply each part by 23:\n - 10 × 23 = 230\n - 7 × 23 = 161 (since 7 × 20 = 140 and 7 × 3 = 21, then 140 + 21 = 161)\n3. Add the partial results: 230 + 161 = 391\n\n**Method 3: Difference of Squares (Elegant trick)**\n\n1. Notice that 17 and 23 are equally spaced around 20 (both are 3 away)\n2. Rewrite as: (20 - 3) × (20 + 3)\n3. This fits the pattern (a - b)(a + b) = a² - b²\n4. Calculate: 20² - 3² = 400 - 9 = 391\n\nAll three methods give the same result: **391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":25,"outputTokens":788,"serverToolUsage":{},"totalTokens":813}}518 3780 +{"metrics":{"latencyMs":3187},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":" We need to calculate 17 * 23. Let me think step by step.\n\nMethod 1: Direct multiplication\nWe can multiply 17 by 23 directly:\n17 × 23 = ?\n\nLet's break it down:\n17 × 20 = 340\n17 × 3 = 51\n340 + 51 = 391\n\nSo 17 × 23 = 391\n\nMethod 2: Using the distributive property\n17 × 23 = 17 × (20 + 3) = 17×20 + 17×3 = 340 + 51 = 391\n\nMethod 3: Using the formula (a+b)(a-b) = a² - b²\nWe can write 17 × 23 as (20-3) × (20+3) = 20² - 3² = 400 - 9 = 391\n\nLet me verify:\n17 × 23 = 391\nCheck: 391 ÷ 17 = 23? 17×20 = 340, 391-340 = 51, 51÷17 = 3, so 20+3 = 23. ✓\n\nThe answer is 391."}}},{"text":" **Step-by-step reasoning:**\n\n1. **Break down the multiplication:** I can use the distributive property to make this easier.\n - 23 = 20 + 3\n - So 17 × 23 = 17 × (20 + 3)\n\n2. **Multiply separately:**\n - 17 × 20 = 340\n - 17 × 3 = 51\n\n3. **Add the results:**\n - 340 + 51 = 391\n\n**Verification using an alternative method:**\nI can also use the difference of squares formula: (a - b)(a + b) = a² - b²\n- 17 × 23 = (20 - 3) × (20 + 3) = 20² - 3² = 400 - 9 = 391\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":25,"outputTokens":436,"serverToolUsage":{},"totalTokens":461}}434 1991 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/minimax.minimax-m2.5/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 240 +Content-Length: 156 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 3614 +{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 1825 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:37 GMT -X-Amzn-Requestid: 89684ab9-0175-4918-81d8-c780ad91c129 +Date: Sat, 05 Sep 2026 13:43:20 GMT +X-Amzn-Requestid: 6e54d6df-1676-4ebb-b2d2-2708c0f7af25 -{"metrics":{"latencyMs":10442},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We are told: \"Think step by step: What is 17 * 23? Show your reasoning process.\" The user wants a step-by-step multiplication of 17 * 23. They want reasoning: we need to compute 17 * 23. That's 391. 17 * 20 = 340. 17 * 3 = 51 gives sum 391. We can show mental multiplication, or use the standard algorithm (multiplying 23 by 17). Also possible using distributive property: 23 * (10 + 7) = 230 + 161 = 391. Or using 17 *23 = 23*17 = (20+3)*(17) = 20*17 +3*17 = 340 + 51 = 391. Provide explanation. We can expand and compute. I will do that. The user wants \"Show your reasoning process.\" So we will demonstrate using step by step:\n\n- Represent 17 = 10 + 7. Multiply 23 by each part:\n\n23 × 10 = 230.\n23 × 7 = 23×5 + 23×2 = 115 + 46 = 161. Add: 230+161 = 391.\n\nAlternatively use 23 = 20 + 3: 17×20 = 340, 17×3 = 51 → 340+51 = 391.\n\nThus the product is 391.\n\nThus answer: 391.\n\nProbably produce answer, mention reasoning.\n\nThus final answer: 391 with reasoning. We'll include step by step.\n\nBut let's verify: 17 * 23: 17 * 20 = 340; 17 * 3 = 51; sum = 391. Yes.\n\nWe can optionally show a standard long multiplication:\n\n23 × 17\n- 23×7 = 161 -> line: 161\n- 23×10 = 230 -> line: shift one place (like zero at end) -> 2300? Actually it's 23×10 = 230, but we align in the digit with tens: 230 → 2300? Wait, 23×10 = 230 (the zero is at one's place). Then sum: 161 + 230 = 391. However typical method: line1: 23×7 => 161. Then line2: 23×10 => 230 (aligned as 2300? Actually we multiply by 1 in the tens place, so we put a 0 at the right of the line: 2300? Let's see: standard approach: 23 * 17: Multiply 23 by 7 = 161, then multiply 23 by 1 (the tens digit, which is actually 10, so yields 230). Then write the 230 shifted one place to the left: 2300? Actually it's 23 × 10 = 230. Then shift it's one place to the left: 23 * 10 is 23 written with a zero, i.e., 230, but in product we treat as 23 * (1*10), thus we put it as 230. Then we add: 161 + 230 = 391. Wait why not 2300? Let's reconsider: Multiply by 17 = multiply by 7 (ones) and multiply by 1 (tens). But we need to multiply by the tens place: 1 corresponds to 10 (since it's actually the tens digit of 17). So you multiply 23 by 10 => 230, but you also need to shift by one place: i.e., write as 230. Actually typical long multiplication:\n\n 2 3\n × 1 7\n ------\n 1 6 1 (23×7)\n 2 3 0 (23×10)\n ------\n 3 9 1\n\nYes that's exactly: line1 is 23×7 = 161; line2 is 23×10 = 230 (since you multiply 23 by the digit 1 in the tens place, you shift left one position, i.e., you write a zero). Then sum = 391.\n\nThus answer 391.\n\nWe can also do it as 23*17 = (20+3)*(17) = 20*17 +3*17 = 340+51=391.\n\nThus final answer: 391.\n\nNow we produce final.\n"}}},{"text":"\n\n**Step‑by‑step reasoning**\n\n1. **Break one factor into tens and units** \n Write 17 as \\(10 + 7\\).\n\n2. **Multiply 23 by each part** \n\n - Multiply by the units (7): \n \\(23 \\times 7 = 161\\) \n\n - Multiply by the tens (10): \n \\(23 \\times 10 = 230\\)\n\n3. **Add the two partial products** \n\n \\[\n 161 + 230 = 391\n \\]\n\n4. **Result** \n\n\\[\n\\boxed{391}\n\\]\n\n(You can verify the same result using the other breakdown \\(23 = 20 + 3\\): \n\\(17 \\times 20 = 340\\) and \\(17 \\times 3 = 51\\); \\(340 + 51 = 391\\).)"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":1105,"serverToolUsage":{},"totalTokens":1161}}518 3653 +{"metrics":{"latencyMs":3697},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nWe need to show step-by-step multiplication.\n\nWe can answer: Use distribution: 17*23 = 17*(20+3) = 17*20 + 17*3 = 340 + 51 = 391. Or do standard algorithm.\n\nThe user wants reasoning.\n\nWe can also break down: 20*23 = 460, subtract 3*23 = 69. Then 460-69 = 391. Equivalent.\n\nThus answer: 391.\n\nWe can add explanation.\n\nGiven the conversation, we need to abide by the policy: it's a simple arithmetic request. Safe.\n\nThus respond accordingly. Show step-by-step.\n\nWrite answer: 391.\n\nWe must include reasoning, but final answer must be included? The user didn't ask for just answer but also reasoning; we can give both.\n\nThus answer: 391.\n\nNow write the answer.\n\nWe'll follow guidelines: no extra text beyond answer and reasoning. Use appropriate formatting. Provide clear steps in plain English. Nothing else.\n\nMake sure to consider the user likely expects step by step.\n\nThus finalize.\n"}}},{"text":"\n\nTo find \\(17 \\times 23\\), we can break the multiplication into easier pieces.\n\n1. **Rewrite 23 as 20 + 3** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3)\n \\]\n\n2. **Apply the distributive property** \n \\[\n 17 \\times (20 + 3) = 17 \\times 20 \\;+\\; 17 \\times 3\n \\]\n\n3. **Compute each term** \n - \\(17 \\times 20 = 340\\) (since \\(17 \\times 2 = 34\\) and add a zero). \n - \\(17 \\times 3 = 51\\) (because \\(17 + 17 + 17 = 51\\)).\n\n4. **Add the two results** \n \\[\n 340 + 51 = 391\n \\]\n\n\\[\n\\boxed{391}\n\\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":439,"serverToolUsage":{},"totalTokens":495}}434 3676 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/minimax.minimax-m2.1/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 240 +Content-Length: 156 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"additionalModelRequestFields":{"thinking":{"type":"enabled","budget_tokens":1024}},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 3487 +{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 3510 Content-Type: application/json -Date: Fri, 21 Aug 2026 00:34:45 GMT -X-Amzn-Requestid: 5c133ef2-7e63-471e-9f2f-d74c58bea63e +Date: Sat, 05 Sep 2026 13:43:28 GMT +X-Amzn-Requestid: a1cf25f9-53ab-4dc0-a017-61a138dbde83 -{"metrics":{"latencyMs":7294},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"First, the user asked: \"What is 17 * 23? Show your reasoning process.\" I need to think step by step and explain how I arrived at the answer.\n\nI recall that multiplication can be thought of as repeated addition. For example, 17 * 23 means adding 17 twenty-three times or adding 23 seventeen times. But that might be inefficient, especially with larger numbers. There are better ways, like using the distributive property or breaking down the numbers.\n\nI remember that multiplication is commutative, so 17 * 23 is the same as 23 * 17. Maybe one of those is easier to compute mentally. Let me try breaking down 17 and 23 into parts.\n\n17 is 10 + 7, and 23 is 20 + 3. I can use the distributive property: (10 + 7) * (20 + 3) = (10 * 20) + (10 * 3) + (7 * 20) + (7 * 3). Let me calculate each part:\n\n- 10 * 20 = 200\n\n- 10 * 3 = 30\n\n- 7 * 20 = 140\n\n- 7 * 3 = 21\n\nNow, add them all together: 200 + 30 = 230, then 230 + 140 = 370, and finally 370 + 21 = 391.\n\nSo, 17 * 23 should be 391.\n\nI could also think of 17 * 20 = 340, and then 17 * 3 = 51, so 340 + 51 = 391. That's another way, and it might be simpler.\n\nSince 23 is close to 20, but 17 * 23 is not directly related to multiples of 20. Anyway, I got the same answer both ways.\n\nI know that 16 * 25 = 400, and 17 is one more than 16, 23 is three less than 25? No, 25 - 23 = 2, so it's not symmetric. Better to stick with the first methods.\n\nAnother way: I can use the fact that 17 * 23 = 17 * (20 + 3) = 17*20 + 17*3. As I did earlier, 340 + 51 = 391.\n\nOr, 23 * 17. 20*17 = 340, 3*17 = 51, same thing.\n\nI can do long multiplication to verify.\n\nSet it up:\n\n 17\n\nx 23\n\nFirst, multiply 17 by 3: 17 * 3 = 51. Write that down.\n\nThen, multiply 17 by 20. But since it's tens place, it's actually 17 * 20 = 340. Write that with a zero or shift left by one position.\n\nSo:\n\n 17\n\n x 23\n\n 51 (17 * 3)\n\n 340 (17 * 20, but since 20 is 2 in tens place, it's 340)\n\nNow, add them: 51 + 340 = 391.\n\nPerfect, confirms the same.\n\nI think 391 is the correct answer.\n\nSo, the final answer should be 391.\n\nNow, I need to present this step by step as per the user's request.\n\nI'll write it out clearly.\n"}}},{"text":"\n\nTo compute \\(17 \\times 23\\), I can break it down using the distributive property or by simplifying with easier operations. Here's my step-by-step reasoning:\n\n1. **Use the distributive property**: I can express 17 as \\(10 + 7\\) and 23 as \\(20 + 3\\). Then, \\(17 \\times 23\\) becomes \\((10 + 7) \\times (20 + 3)\\).\n\n2. **Expand using distribution**: \n \\[\n (10 + 7) \\times (20 + 3) = (10 \\times 20) + (10 \\times 3) + (7 \\times 20) + (7 \\times 3)\n \\]\n\n3. **Calculate each product**: \n - \\(10 \\times 20 = 200\\) \n - \\(10 \\times 3 = 30\\) \n - \\(7 \\times 20 = 140\\) \n - \\(7 \\times 3 = 21\\)\n\n4. **Sum the results**: \n \\[\n 200 + 30 = 230\n \\] \n \\[\n 230 + 140 = 370\n \\] \n \\[\n 370 + 21 = 391\n \\]\n\nTherefore, \\(17 \\times 23 = 391\\).\n\nAs a verification, I used another method: \n- \\(17 \\times 20 = 340\\) \n- \\(17 \\times 3 = 51\\) \n- Then, \\(340 + 51 = 391\\), which matches the result.\n\n**Final Answer**: \\(391\\)"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":1043,"serverToolUsage":{},"totalTokens":1099}} \ No newline at end of file +{"metrics":{"latencyMs":7307},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nWe need to produce a step-by-step answer showing the reasoning process for multiplying 17 * 23. The user wants the reasoning process. We should comply. The user is not asking for any disallowed content. So we can produce the answer.\n\nWe need to follow the policy: Provide a step-by-step solution. The answer is straightforward: 17 * 23 = 391. But they want reasoning process. So we can show the multiplication algorithm, perhaps using distributive property: 17 * 23 = 17 * (20 + 3) = 17*20 + 17*3 = 340 + 51 = 391. Or show standard multiplication: 23 * 17 = (20+3)*17.\n\nWe can also show the steps of the algorithm: 23 * 7 = 161, then 23 * 10 = 230, sum = 391.\n\nWe can also show the repeated addition method: 17 + 23 etc.\n\nBut the simplest is the distributive method: 17 * 23 = 17 * (20+3) = 340 + 51 = 391.\n\nThus answer is 391.\n\nWe can also show the steps:\n\n- Multiply 23 by 7: 23*7 = 161.\n- Multiply 23 by 10: 23*10 = 230.\n- Add: 161 + 230 = 391.\n\nOr using the other method:\n\n- Multiply 17 by 20: 17*20 = 340.\n- Multiply 17 by 3: 17*3 = 51.\n- Add: 340+51 = 391.\n\nThus answer is 391.\n\nWe should present in a clear step-by-step format.\n\nThe user didn't request any special formatting, but we can use bullet points or numbered steps.\n\nThus we can respond:\n\nFirst approach: Using distributive property.\n\nSecond approach: Using standard multiplication algorithm.\n\nThen final answer.\n\nWe need to ensure we show reasoning.\n\nWe'll produce the answer in a helpful manner.\n\nNow, the answer: 391.\n\nThus final answer: 391.\n\nNow, we should produce the final answer.\n"}}},{"text":"\n\nHere’s a step‑by‑step reasoning process for multiplying \\(17 \\times 23\\).\n\n---\n\n## Approach 1: Use the distributive property \n\nWrite 23 as a sum of a tens‑part and a ones‑part: \n\n\\[\n23 = 20 + 3\n\\]\n\nThen apply the distributive law \\(a(b+c)=ab+ac\\):\n\n\\[\n\\begin{aligned}\n17 \\times 23 \n&= 17 \\times (20 + 3) \\\\\n&= (17 \\times 20) + (17 \\times 3)\n\\end{aligned}\n\\]\n\nNow compute each product:\n\n* \\(17 \\times 20 = 340\\) (because \\(17 \\times 2 = 34\\), then add a zero)\n* \\(17 \\times 3 = 51\\)\n\nAdd the two results:\n\n\\[\n340 + 51 = 391\n\\]\n\n---\n\n## Approach 2: Standard multiplication algorithm \n\nSet up the multiplication vertically and multiply by each digit of the second number.\n\n\\[\n\\begin{array}{r}\n\\ \\ \\ 17\\\\\n\\times 23\\\\ \\hline\n\\end{array}\n\\]\n\n1. **Multiply by the ones digit (3):** \\(3 \\times 7 = 21\\) → write down **1**, carry **2**. \n \\(3 \\times 1 = 3\\); add the carry: \\(3 + 2 = 5\\). \n So the first partial product is **51**.\n\n2. **Multiply by the tens digit (2):** because it’s in the tens place, we first place a zero as a placeholder.\n\n - \\(2 \\times 7 = 14\\) → write down **4**, carry **1**. \n - \\(2 \\times 1 = 2\\); add the carry: \\(2 + 1 = 3\\). \n So the second partial product is **340** (the zero is already placed).\n\n3. **Add the partial products:** \n\n\\[\n\\begin{array}{r}\n\\ \\ \\ 51\\\\\n+340\\\\ \\hline\n\\ \\ 391\n\\end{array}\n\\]\n\n---\n\n### Final Answer\n\\[\n\\boxed{17 \\times 23 = 391}\n\\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":56,"outputTokens":914,"serverToolUsage":{},"totalTokens":970}} \ No newline at end of file diff --git a/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr index f4c0765337751fb78ffec61b53bf50ba4ef961b6..4ffbcc5d4c449884778042134d4aca0419b4e3a5 100644 GIT binary patch literal 106627 zcmeHw34CK!_5TbY%M1eur~?W6i`$^5J7f@|2gj^Xj8Gf^fVk1)WNJ}Qw%*4{6WIPe}HTxn=#?LC^3HUo2 zg-$W4YVpNmlWa1@DpKhr%S0)Q%hlhaYF4dSW{IcLtyGQw+KOd^DK@Dv1=$$|}CTdpwqgKU4Iwv0ysXO3_Ao#WGVS9f~Kzc_tl>$66_q$Ei_RY^HXF z(_*5vIx5YAUQ8ma7-w@UNXJhc)DkZJq z){uB6oyeq*0Ye4C{NG~(fp{_ve>2MZ! zX)2teRC=nBqSfmtXDB{J<>Hwn1?vZP0OhCzI0*dgX2N}Q4N1l$sAdM%2Y%1-3rsgF zDO#zd`g*3#T3i`}UTv8E>P%x##{30OYi1`wV!?4%EbCy>uq;j{y@pb1DJKX`D`_32 zQnzZ+HXZ?gC|Hh3rNXH+>>|P?jyXIBLOcZ@&%qmP&xr;3V&R`| zi@^TuU?XW}tEDObN!FO3&5~B-8Uh}jX3%v@OWj`d8gOmFX;gaNAuH91#^Q;IWGbDR zoXY0%rndHu&Mq_IK5<-g2q^P1DzxF_Ew9K>A>Plawczo!D`v5F_w?HAgzGr@wZ}lW zf1`eii{H9drur$VrmfMhuYbVdbPc*aL&GCV6|L52bzr2QHGTDupzqtL^Dd8i*UM99 zH7u!Gqn!7eighO3u@CM0SJ3on)Yi9Bzl$8TZKAX)RM)7QTV2B4ai{sepv`@#Q8xeF zr83m0ni_=L`7YnyOP1`=h{C(Sf95%I55QA&+haCsr^D1{Hd!YIY@JQ6 z&O{&Gp|-?(VqKx0A+J%_G3;=t%pJ*?UDxjMHFa7deR*|YAUB*$1~t)?JLNQb4dZ58 zcXVWM!q<~&Hw|`VMy!TzUo790h}x974%(g?9&(S5I8~EAi#y-z8c5s6f~J9BNXeKZ z8HSEzMpSWIpKEZ+p0_G(E)(77^5r^%c~fd?YA~nKb@cl>y2cGkrlULSjRuB-Lk^mb zq{6CDyLBqk*E<;Q?#ejnp|;52m~nzJx^+Dx=HY~X%;1lAcO<=ShMuM&rOug34h*Ko zhEiQF)*Tp1^q4G$adppFD$--l>tb!n5lu^ez}!8kV_08*pViJbbq)DKQ}ob?QLi+N zPfj&u40ONVXc`~Zcc)V9fXX$V^LMCR?xcMzp6Iuv4QaDAi zrSNf^{nu3c&P05f2n6X6ao46pm$`6vm!0#3d*>H> z9t}D@f_hmk8xF3wUJ!jhaN)c)A{@Q$@8h7u4^fZRZ!CYl-g?mL(b#BgRk?!^?(BaA z(AW>6kas+P`~~$E(g_bB#r%v7K~VS-11Rt_RD$00L~EUu@a7b##vED@Zgc0NM-Kc;oz*!s5}~~Cb{e0*N`z}V zZhU{xLpEnCq%u-eIF^pjUzxI31K|!i;TsQuUN_+y-E{9|yVZG(s8p1RL@-xTapw^( z`I9fvAZ1-beTi#%%?uGCZ6Nv1o_VG5&o#n*n8*{*s4n>g35_VoAcZANU#nh(`=MeJ zZuW=KnSQ&n<^6g)Q#2DvhZB+ctrX!Ny>%~)OaFpu*mC)U>a0c~&zWk)^SH5*k3OjR z>14B)1ytaDgloI?zP&)dji}>}A6<1)opq$u^Hhj%sgdl>ApOgz!D1(`q;?PHs30z+ zR@0Eys5rf9-9pou9Kww~|MsV#+Y6}QzK`tuKLZF5&jsLh!YVX?6D}|1~`>z9bej;}5dekU*cA!oqMIcEwk(yAFiD z7d`{4j6eRRSn%Z~{J}O zM9ercVRZHOkE`Q}DV24s!!tDzbf%2qDYerU@@j1fQz+OnVhh=0?wp^A>(mKDugzr4 z*^LfUq&L%|>WR7o`d(+Ym+^TmTHi#!na<@$VqssuIx!yaQ~7#2!p`=lDZf&u*5y1+ zWBKIZz;HSn?Pc9#7EdZ=@dVTUZh(yU1T|iFSBwd@x92qGP}DbMSM}LKj#|-YV{Ip+ zr(6#o_ez`T3bD5==vx%_Z*8wV!X5p>j#`jVF6o$ZoKOiUUkd%ok>!<{CE*=?j`?m2 zs3V)iUNv|c0O`KB>TZx!E~(T)VNn9EHS01E&a!f+-9eAK9Q6|UBB~A1H`|5=93kAO zW(vc+E8*jL;JBMV7jNE$eNRYfWrfy|(xxWdd8cceKs4FZZ9C#q5I_Tx3-M2W7MjD# z#GTcFL|{z9U4HckD?zav(C$y>p9t64?umGcg?wtIGKAZc8~7H;h~NOvg)iQHPo3rD zQCgDN8p1uc>+N_4)#Yg{<;n@@p-NR+6#JoSJ?06Qe{jpOpwjJV{q=9`(^zNgx6ZB& z#Pa{#au>)dn{wcMlIlXAlNj1l>;vli*2cp@ud8t#UK+b~Wu4cd5)?zY3of}t2f{sx z0`B*`KUil05#Q3-hzI2=5hA+A6OwTMc=8l16Ue68gotBG)k@g}5L|AakTJsTezk8L z6q3u%5YSb$ax`}E!Lx7bvL45oktpHbYBC)RddcN}0KG;>v6njqEwiFZIV{1QXC4Ql z%I1E6yvV@^7xoCnI~YB`r664YiYQwCH}LVCv0?C#I&b?q?guGXBHa3+Jq`l-Uqu}@ z8qYqV&N@tQabb_lh>7NNgJUNtK$B0q{9Mp(Givycp^ZPPvxd0m%l3(So@W`tUt!fg z!eXdwHWOmMDmK&n_L7ZocYeV94pjORF4Lu_y!X>OFOwQr9Q=MN9b$owAO-hM3Kx#= z^DRA)YP?UONr7-Tx7~jrsP;!x@A|*LxO1J=D`1&~PTs9hNYtxMxJ|al$3QbohRXqF zUi3xE6iZF9$!)x53oQ=0*Ee9fLM{$kc7`AlXP*150z?m2pK2}QrDXHifk0w5l?b>0 zt_@g$Ayfx+nAkxz{ z0f=Zl$F+=Zxn8T&QYx+5VBFpaq5|QPRsoDST9rzv0_LSd)Fx&9@I+eO{}t>@u>AiI zF)OLGv{JME!9u!fU?Ezk)-tpKfNKGoR%kRnpTeNhvI><}3$$Jun$a=9^u$vuT?AX( zu~c>9vEr@0z+fSvVk8L}+WWqBSh#ovKAw{x^sTj*btQ)6%1)2kv z2Y1v`yC&Rj``q2r&ONS?~a#dWmJCULf_X)Pd(UtgPb^?w98GvY;5=Mjrh=4JH}-BIIbx4uR4>s@?kt zXMXz?MC;WhpIPJb;h7Ej3FP&JzR)>UCR}KTVFdEkr8&1oop^nqAs#YkRTYB0#T<+! z0Xg5S>IO+Ds6=I)aE{w@L!b`6mpz{kU$2tkj@kwoGE|!hxAzB|&jl3?%&U zuq(vq(BKsgUh7IuF*zV~!CKqa=t{W%My|lp zkF2*~Bc3yBd5~5uN)qnE*Iz--lP&1ITUMVMkfZlDQma+a6C&V5o4ZGoH48lgsn!`(Ibkep465|cdPmi=rCu8f@3p%}iTjgu2#k)*Pk#S9?f zejDw27Swqi9qsPde<>>p>jEQiO$)~`Czw4JLc*)hUuKS zZ$R1O_d49!e(gj+=cSl{s67Rb_K^ zPT5>F@piX0ne!$?IA_&c+WhwD0MpSq(Pg8fx$Lmlo$S@d(_!mW)ave|d(>v5hVAur zntNT7DwU_ptqb~0YJ(w`3=RAJZQ&GS=tu=d9L98~t4(WQ0t1@d6rJt2MS7C)_D&f4 zp-Z(`yAn!h_Ualp`X?Pxozdd9dSfGIy03R68*B?1^`UOISLKP1sXCSMh&k_?8jdF0 zwaj=+yEBwmSyWy55pSoXKah!cj!iUKti3r+I_7LL40{rtDwWFItskDSPH1!8ah=CM z+^@E_(ax6a_@IxqGKmRuSBtx6Al>4dNL#Y0v5Bs!+&D{*``Yte7HA?YRB?GLkhotubR;OKPCMHyZLeeYSR6qPsVs$~qH0 zK9g}Umk5X2{3%CPT|XX9WwZlkeY(e^cMhe-bw=-iU7yPLwAs77!OoGS&Fl8% zU2bcxQ{@^PV_UkC#_;&CX<%)&M%aqyXIZEy#8N_EviarCBTTw)gas@ZpHxO$)&}pO2ZmJ_f8)A3dkv& zR>p973tAB?15G<{h)g_n7D)OyF8T>K=v{SQbiNE*zUK4D<^#dQvv+mN$UXQfD|FRW z=mX(d@`(V*`4k#`u?Iy->@+F`!_umF$XwSDju#@_e@+Ntp|~zFzLY{U+y3SOaR(UW z6Xth7o%?Zpa)$R_tM{fr9(QVWg&RrM>oBS(-0G=!Zv)xoLJP{*chn7lg(+77;M?v~ zF99*-f;Oe1%s9*EnajnT*8z0Zo2PycG^$I|RcapyjO_(t@U7DddOb!5_XVZulG>6` zs)k7!rJ)mq`&0UvF%TY8;hu+fwSBkVTUpf#w7!t_2Cm0>uLt3t`eNPVoBxIIK#w@j3c>pwLgR!>7G$p7-0M<)3hG9QeuypcO(G z39q4# zuK|&-La|?7_T3xm9fBb4bovM)+zkh8c@AWg&B0SdmX=F7uPA)yqrZXFOm)FxN*z3z z#8#>z8r=)!^1pm^<42&FY&HN6U7q%&Dr-cziF?&|g4nXT2*R;cnq_803zaDX!tJp3 zOBN9Pr|?;H47`LR!8=YN!Du9w8%DOh^nL^+z6+(!jNSc4z0VtX>L4Iy7Dpl6xmU0( z$SWHcK~NGrYvwXH;XYU0j@-Di$)AF;5mE&}iCHZ!#l{B=2zR}Y*?+lE?g;iT;6CQ9 zPCp0HR(ApMl1edu$SmyGZ@!)f>xi)^7YNh=#2vcIVS4RM6-w zRAV_%=NlxwVIIBZY9-98n0q*dTBqc=(;5_8v^pIm1=SjQd-s-ynDBT8hEo)p%a#9Y zE{Dk?>0AOPjLb2t0$kw#rRH+IN~_=Q&E?Q+V79qdEE`goqWPG@!A@k@R66W$rPM0D z!Kh@l3WHwdS3qyMA0|;~dC@X`(_c?k5Z27SJ{bPB^M&KzbcbFxv`6_cx#Uw zmyoHV65;4~l88={^>H6yrzq%-HH;@l5`;>>I*e^Wt^ChDF2dw&(BRCD+Jt$N0l37-#6sq{H!fod?}L zy+|<1S4Ari`ykQay;hf8ZLJFlz_YSNB;3lx+4qCYbtxp)D05ezNM`YEOt|q)j~xaY zya6B2yVlMk z5-x|3y+H{%CtQT}5NIq!x)AR0+V-}O|`<6d;9 zO(V-sm!Uf$>8n5}Ri*&&mHqx&14u3BP?MSpr$c2z`^wrlD|1DJ`&(|GwV=?ya4BBP zd4Dg*r4Ztm8daKRN|MT?5bn(3pDY7q@v*z;BX?@NUnmvD1etIQV0;i`&r@&cmLrFJ z2-?Y+5*oNErQSghSX;l3m>4{533u{?y?AE)4V7E=!jg)yBC^QpVI8Lp7%Ate zTj|hnLnZW(<^MqfhWk;?#qKq)_2P>1wW<^qgjcQDZ-GE!-Ni#7yPRLI;DKwXRGhLN z3f$^5awX+2JE?Jg0}hzuWZU#ZP*T?Mp)Vc_g#BzR4TWn)B0ewUA|~AF%`Xv9NY3e@ zLsRowEW&mAT!Wy~3-Iym`^e5;mf>kg`QphW>zjRbD%g1lcV!}k2_iYat0ci!gj3%B z!Jvl9jh(j)+>1vM;w6(VZub3m)-ZO4;WnF1wB%AB)_B!>xE`5tp zmF2mFb!&DGY~V{mjOmFe~tKa;YV zCQK<+58I}iu!SOHUf?VnF%PC0b60{<52o$yN>#7RI%OLh%-T9k**;TSd%MLEXFS>@ zd}5y9l-BMtscmBe@aMx?d%h=b8m6@d`+&JKnC~>(nud}(PnPMQ)WrsXPtFvJY5IY` zES0c2tiDbg@X7Urb18MNW~9$#XK77R({4!xjd@jy)iw=w4cM|;N0YJJtYXXtW5O3m z>RU`Uvn>?P4z)*f_I{e}Ney=}Z4={@+OD|CW6(zO9bKA;I_1eZ9B#99s>7x-4&+P& z9WlE$H<@a&x3{~M?fUMnxM##1(>Pm(Lru!$RFmHBA7-+i@wDAA7V}TFHQB6zv4|;4 zPb31-A?0{*sJ(BjGiHp?x`Z`rYH>!g-AXz*o?v?i+MEN4K^L7EYt!|b`#Vgjc$RJp zbv5G7C))ZO6; zr_eogG*s&Hvn>{t9 z?q;TXw9f7^cDOUrol%Z!+FLw6O`l^Vqx3SiVN+&2*xSdrOk;@wUzfA1-)NkQL^T~j zr@hT;N%zO}7E?YyX)z9UD#z0kLsP?siEdN2)9=VT%q?l}gmY@lWcFo-ov~C)#$p`v z1*18guQxfQoXq!iwy|tSZfYbmf(P-)G?+!M_W8)J#pPlx!$D*Dt z7wxiUtY&LdIA9u?G{#-wmVC(K?Qx7nx_tJbgkII#+tKSy_YJpnY7;pVot*MdWrA(N zwwh0Sc&99V3U4n&D7iED-4zudD+}6Y0U^^o+bkST(Ogd*boy%#e*#3W%S%zB9cCLC z@SeegeX$AtB~;iR40wdQ?%z9J4hqSIeS}BG0)3b;rD`iWlnD2%Z#AX>vH8mLN#l{- z;*GMfZz!o{nx3?k5zt{3yNPgL+UZ%`7j+3tr6p#mY2X(;e*mYFV3X-w&Ab?dTYmm# ztW5j{S3w3N&C#z`&2Q5au7SDZY>@vB)ZxCl0h{|fVgKZlR! z!&Y)woj0j)&`|tVrD3ZU@v}3Vi3#`K9p^G2HdfU=>)+U?vCg6+zdaR&3H4#1#`FQ4 z10lcDJC|^0J^z(6LDssI&L!?Ctn~vhV_L%6a2YVF>CA&~@`ECEDJw}R0@VpTK$Hzo z_Mbx`!cG22{{@i!L3ElsoLgjlv(~8W3cppfJ z4s(A_yzq69{2?^-2icuF>uu-)Yu{+Btj;LfuHu-1KaF4@+U6zifChJ?7M5j~jnr9- z>O3jaNEgCA_TZHpK;S>1(6LF@f1bk!J0LgZ9>kmcfa)> z=ye5r+^2r+&KJb1w4iB7P;K@!B;ocus|%kmDBZwUvWMoy(k%|TOLcCS<<=f}ye{1p zq_gii)>M&CSSW56T0<-6A0+b;!FZ@6QwLJSAUDDS+!!BC7w#RQeM`djQhqF z$xJLAjhRn-~WrLuo!W4wMb1M~LVnH8J&cuRoMJSz4 zB$Lb9g|BIl9yxX`+^NnZW z(tu0+q%V99s{9$3MXs~LXB2hjbHftuE5Gjf6x4ejRcyGS<$5`K9%cheRiK&*)r8yi zu~pd7ft6m*ry;*ahI%2KudJRm%eoQn)#y|BB$0EI3O>GgbTi*=ExAmD`@Zfyd^O6s z_n+4RD-um&uw{)o-C_dk7-bX_DssldsiEJW6863?1O835i4LpzIVlDQlz#3&QohE#m2k!&PRz-jZ zq}z5s0~GlaDs$;6@5ySqae>Hjx>r%4B4c9EYQO>^-ke(ua-&~9_H9rNKb~D4^{$s; z@PYhY&+x(+lPXHa{ ze9(gqtA!?cNgbpvYhlTNH($v`=(^xwlrZ%(5Ix%1y(>c8Ep7Hkf@UXYXr1W@P(d-1BVWQ(h z{!F6Fsp+!#22~v`U0pfDSYN0=W|+{ZQZ0SSzTt@8*ff&W4|EvY{OS&WOOrdvCQR{g z%W%#dwWo%M+~XroRo+W$Gb2L-8NHr8H(HV z4vpPMv!)?>IOz@z$E;)R-cGH1WJ>KC%=VARJAJG#G%@AvvqV4`T05NA4b!9hisM+Z730rX`1>cUER^(n7+wo^Xq*k zjW6$??4g615n3J0#(VlK){*umX2RfY8Vsi=>|xfCRGG#*+ym_y+HAA+Oy#xVK39v6 z@s1=XquNfBvQOXC?#T@qNBX*5lfgmvkjXV1urzs{dEI2v8PpBAItByX?H#@$L!!mw zH}~jL{Z>a)rZZvlbkY-3eRlJNBkk%>4ta+L0>fkGgnc4zk42|crVg`zs(;d9cTa|N zQJ3DBbfnGgVO2+oPKP@bH8#8&~z@N4%Dy?yeLwG1=j;;w=FPXA5NG%Eq%QMx@1moA4)da%&Dn-I6iC|Si5%S?k3#(-}wQi z!x3iWUbo_w$HX_tf&wOByUq@nsPe=Ffb70kVvHph#Cr9{4Z^Lx@_uAdt_wk)6xgPn ziTE-RsPe~x0(NL?U^j$|e)*aMK&`qwjiuB=DzDL)bz54qgd9D*774fMnA?s5?f6Sf z9?17_isEVSrFygo=Xm%zl(#M~DXG;E)#gMMEnKC!8=VLj$vuQQc0?k09F0R8#K+RY z*1n}QDiULfjx3;wGucfb;^ipjJwN~G$~uc#-T+6qkAHj}Lh)tOx7P-!rdj9m&RKyW z+)4Kyj(7;!9H(1zdP?+;U28qyVo<9t@CXTa$Bd}R(OSU$9#G{5_;{Yo zKM}6;mY~A1bQ};;kn$*33eNb$a&C|jtCpTKKbbhH&T`_xSj+5Q;8fYTwh@H>B?`XS zlT0Lhh3^egLqeuD>GRj85CVH6O8?gWf2{!MF8;w@XfzaihaVaXS}*u=b;n zaNZv-#r*tF(AE!khd-&at?}IBYsb)|B&`PF8sD@15XAi%icD{MqP5;4&(UEh(18)| z?5n%9Ts@g!<&p3e8j6NKwN%ycM7iuoEjw1rWC@~>{(;*^bR zfB(sGAh2A*TM7oPZEbk#I&TOcAc$A=+oAvgVJe!QqtqtK0{Cp#tUoOXdZQ%^? zmv3%FOwb)@ZW(Z#V3gk2SYS^O0tAuq0qFjPD>0ucm)7xFn|!6vA%y$m%AX!BBMr(- zu5JaBL+7u^guDHbdoas_ zLN7Yaw1nrB8m;Hf?at9?t=16E^;ia{oyuifP;NFE4iqS7=3+pRrYpvjAB=wPevJXW z53zGs0Za!Ho(WvQ)k9{{g+gfIh(;nJdaV@a$_ zO$kitthWd8WJmusbs?xC7dNAr)YdGEP@Di#xXl`T5zFNjKgY34xSjhCHG{lziMtDf z%K%JYCGl1nQW37>sYgBp4IYG#9GJ5J!#i*PA>2>@q__(dkWJkdlXB&CA3m0X;bf2X zaUiB#!Y957L5W0C5IoQOPACBvpz#93r}M7Zi1cyT)Z|%t$&vfj`%>oD01HG2ITmY2 zIOdAiu$%fh6n3!(NJ?A+xCX*NI0QBKg$kO!GiyK z3iNmxmuJJrTVAQRFY)twwgaD&8Xu}a+Isbc>oNY2%cU)_I#uqH8vTxNFa4=O58BA( z3Yli7svvT$Oxct@nh1Bp1#1ftR(th2${C7JQMq^~3AtW$Swz?ZlZOv}HuQ;na}7zxBP{rF2H3ga_Z&~}MK>#< zNUx;&dZwwMio9GJy-q*-u?%+I1@Live6{&0@y=U#f+$Hks865yAwE;<-oRgQmU-OX zg!@r%AMzDm2Oqch%)LJo8+1YMj~e0kggflQLyW)+h`<)lx~ne#npnoggKU+yRe`{c zCyryYuu};#-a*1+Jk?5#l5O6tql9wC3oTy!j9-4sE4(>i=7S?Z%t1cA+h=xz5l(-4 z8ze}V?tr#C=#EQ2m7(pZ{$zX-rqoe^FmUzZk>$_$(#>$NHS(lAz4 zI>SUFxoR!*GYg6^7U5r?{{bwpGg@G?YHi&J@MrNJ(2akAH}Y8k{DFFKl!ieaj~KcdZ2AfKuowJzIq*=!q}|i=@@!(P%QYuo^tdW0t}gHrtCy> zW|Hhd6i}tSy8hx+@yN-&y8gB*Fk8YcJ^tt{2wxW$lTZLe^`g9RhTy6B>iTo>x98%o zn}sfrRTS*1c{c?R&ams-Rya{;T&eZvtm5jtQv6&BI5oWyHY%XaQ&Bi1;X+D;S&05d zV;+|BF)<1PKmL15taas`G1O`%0`pLP_&5F3tLragV8c;SWKMl`{pItBDQ5CkL2}%F zc^g;^47S8`)Wjo~*4bhWkQN^uJ&I?B8y!V1+Z5a=m?6|t#or5DYe@1mI{HoY7r2q9 zSlA3Od<#f!6PYv^b1Dua5K>``r)PN#1E#`MX6`l3tIy#ylw04Q-rw??(4tlI7dcy z!u_LFm9`6-LepHFlfZA4(i{Tb8sd9i^!K#QRC|c^jSI1FiQ{UPEmqy72-pAlcL0gC z6f-s+{R8_g>I`6sd#S)gL9LD_1a@jTVhRT|e*zbx`y78%^Xy*8ibXNWcqZmA9$au* z6%VRH>{$AJfsUyGmZSW;Fl;RQy+njrS^^wjjt~809LBpqQew8VtuQR&*Y|$nHLjs2JIRW&!o$~qSn-w9aTei^vN5q|CdIi zrL+dMayw>6|Cbz?%{5d!Da<#< z2SuasGAkqjXEMml4T&IJ;(>FZ_he}!8uiH~pC2JZql&Vdya9oVQKf9sH-IhIVIJnt z6qUjXPr+C)ic(-SYZeMWOe6^7Q_`U*7QK1T8%V+jFsRCuP zu(y)L^G@i1E6?Z_PsKu$L}Meq_28nKVq$5$sEQdos_+7w&QyWxVya8X@tLSp4tzBV z^i)3n)eZIabPer|Qtu4HwPd}|fYlI(=egW$UAdV4Dq*!!{?_w$r z6TvV!$WPL0roet4xMd2HUxf+ZQ1_%5{xF8W4vFJf*avyi%lWymDQa~hJ_SR?@J9ox zp@B~;DijJ_A50O!$=n`_;~;bf776B$#lnDnpn?!F0Eu4^zpdhNUNaR;5yzu}W7wv8 zbUiFZUBW7frQkCx;DeZcg`^Cm+9_WIjR3A%yx)0~sg!FdxYJSqx=0Jtc6mA(25p(* zEzJK6hRVdkY2gc)A_5TU=;&%bGbCJQqoa^z;=c(093+PDG*|Oq9F5r_sDRSIe9cU_ zf4=qKcfqLGL*e-cdH0=q`#0u$Bt5&BH52W6Fhem_R!F54Q~v0q!g)~UsE`Kl%q9x? z@?rv=THV!W?Zp~Fti4bZ;71~(vx6`J1mpOU0C0k{D$ORNDSmNgvozGJzjE+Dz^W;< z>T5eX7PVVQ!c~u_y28m+8Z>R7j_18fSxPnX>>hv~0!N~bAB`Ok<|_S9^qbOG6$<=5 zst>9sNosZ9%pZx~spfwm{}U-IOe=)%v=+W|x<14I+bRuw>ulzn6(wE7`Eg$#|9Ur= zyeVGg*UvCD;f7Z1nE>0#Cc6$Pl%h%)_oL>; z@?F6Sm8XE{+rU%NT!rez>b_!*o@y^_W5|d@VS=YYleYs7#e!+xTbewy$@P`IujV0f)kYI zoxw6`6U9R}roTwz-4zN4(o{SKGsPl|kEJ4PAdNRs@qdCvUN7xei6$5^Rq0rmc*W(N@BWcUo^ zPkH)Ou^`*IR8hS$@jz}D7l`m*_}DvMJ#=re7zjvxMW$ zzkApF5UFj{7&Y5ci-^YKF-Sb6o5#aZn7&IZigR=8HZS;pNbO?Tp@`Hrs#VJEUyRUH zD@L%4Qmxdn0R{x0(;Lfc+TbD5bwS1TZ|}Y zsG5Lab(W}4vTkwF{#W@x&Y#1_^IV@kMn ze;LGzkqVvnVde0xVh>o@++3|jEtD$IXnr;d_enYlL&W*`xnw-vPBy-#L8)NAcrmW7 zG*Yq7fuSP?(tLNX5K`ioFf0|KQfcE6uHoBHBYd+B4VG(rprU(A9tPuwOX8EO7-5%! zX(+t$;dDI3r{u~bYEYk#q(@@~Gt#ZpU<%uSs%A!{Z8R4J$d-|_3}C?(Xu)e=*}YMQ zF2`d#OO4}^F~QBatHDXPt< zRN(jcl6S^|>2q6(Tu7jRBYt*wx)1QBj;?@GIG$04<%x%Uy z8?D@UCw|YyJEvWcs4Q^fAmgT>jO8lN*m#;&$|Q_&mCjz5 zZM$-lV`9GsXCqwC?#BV}eCclJOK#?-H{|F`dfs&k$*{ul1PTfVI27ZBUrn2_Y>Hs% zi*p!*aDTmi*a?OJV=O)jzt&@@@>JHg3LPqVi}Q2rgqj;PbyWHSCD^dA{pK)68R3D& zIyw0btDAu4Gri=n$ zV14mmESxWdS#Z%}6PFhXwc-c^e&7FdxCfVh15Nm)clKTT?*-dC7wObd-qy7Zk$3nw@BdJT6)S& z2a;AOBjF*=_Yd(IBz*9fDwEYRCTxhQ7|!WH+?N3; zPOSQ6hh{{3Cz9bPlgyRDoaZoGl^~38*ZWstk@9=+alddz>=Lmx7c{90yHcp*5sv=p z;L9KZoSA?H&K~$Pu@nm%+(@7z5Ce@l)KokI7cZYbP2o*hAjA<$@-qMm<*9SPF+TUL zCUDcbJgcQts+yPM1Azk3KZF8&le#c~5&ufz4S*;|*!mC@Bv~P_fEWRsk-ruI2;$;% z%*=Q#Eqnrkk#LVD0_(v-UAX9HY-E%5UUXEq;`|ait|1WeG1$>w_|qK!Lc-=`Bt^mm za~RGr*wa%0&fxccX>P(?@dnye6miVzRWn;p3HSL|-+vseSeKljl%GkaWs0$sIEpCE zmw*Ul`d;OOj|7uUqiyDC4trn!Km{%yGF-d3o<_{o-sotif!!;h&WnD!D2g#=A-JGc zL*g7VoCQC?yH>LXk9nb0o}qB=2_jj9@7Q*eKtK1%M^j*ty5wo3oTeB>l{^9yRRXrG z7>uAd6f?`y;Rt|NrkUM~F@=DbDr8u5v(PCM?x43GSq6sK9bMy!6Ar1k{ubReiq$w# zF1!IofmBI@^Kf21vQQUbxePXN2a<7US5d;r&if1x!c{;5w0PnAW{z2aQ6igPSdEh` z-$Gj)8D806=kpjcDacO?Yb{(d_+FhZF~MmIr!fOmB9Qd-Ho$+H;6L!q44?b;&ZX=_ zOKf;O?~KYWHdT|v4%m1nELPb?P|R}A%y6SQW~R5LhkeXmTyqf4nR)UsIh_MDa@eID zWn*I(Pua!9Qh@OF{wM^tGFs#J<0vVK8_@3C

z67K#}&v*mGI2Aqv4{nJ3T`bCW2DAl3)gf&@<87GC-vtD*pV|703W(oALE5xBH9hM= zRplw;8mtO#qh~bQ>y7XwKwdz{i3=W`gN6Ql_;=IsG!rRx=+jD$+wbf>@6u>gl%7^? z6AdXKNa4|zZ7%#*5v7~8|HHKbx>gJ?r_Z&2t10e!&7G6BEVSHQI)zntU0=bW@zd=k_R*H&UJ<_BPvxL%o5DvWs`KoSK% z-i&#!P4MxkPkFOLEcn7kRoet|tEf*A?y@J|yArgx6+ZvhVBV0q#dGQ%C+@bGX0I{D zTGr4n+~j;ZiwD6?WY}bGdvKbHQ(=UA{P~`1!6dJtSrYp>&y}HBnnwv=jzQkH65~O! zkrcv0gakHI9`;aRg!4jDe_X6%fN-zxvpc@#{(?%{a`}T~s3atS`MlCJ-Dk`j* zuYRS17iwV-(HeI%pAh6L0lZTRS;Igk3Au|TGHYPYOrRAL65pkk{hAiMy&Tai&g&2^ ze$B^gz&beX-7|5Jd4mjn0b7!w-?dbO!z?Mob8ARs3|%2e{TClMe9sL$cj2@w)Xc{+ z(4YsD5v{z9=+B~MesIyb56jRpWv_Y>3j|On7erhWVg zKFkVzbHL8Z(}%+sYgbkh`otqJaWu~7)VkBPl|LDLUlhqCm;tanmR zuWdTPPPm7Ee@-(9eLwnb&hXxAVxbrIf|5v~VE`p&>zFkMNVtC;dfKHRJC;A?(4)y$ z7{&D`%==1mi&XY$LW4H%qU9PBuB-cr+d;XHQNd?+Ygkmsn8X6XdDz$}Tw2&xP#`WS z6c`1x4$tiYeW<|w0T4RAksN`$^K((cjsN?@wV?DnsQB~y_4w-Snc^%quNdDa4m=Ny zjUDi4p09@DDi`5i-RWAaV(f_ee(k9{D>8M9z7vySKr;v}H|RMn?~8f=~HZp)#|TD@C}& zPk8n*P_`~J5T(`$PZ@qQ!uz_h(N@I4l@*~2E?c0vkyIR}+wbJY)8;?$@f`5__1=1) zIHg@x1h4^v$Lb=Cq2l(CR7omelZ;`2NAiewj|aW$62D3q|5-JNjNfBdi5QF2-JLOC7RT!0qficfRt@EHmqxtrg$D!z0| zp{vGs&efoQU7ni~tB+JQh?EA6r|%ZNh>R>YhvC-?d^3=ysb&JWQEz+oG|=izT-hfY z-l{j>6d+7T8vp__8Uvntz&sS75jYg0z;s_3G?h|N)pRU0uM=+1kv;B`k*b(ILynf| zFo_QX=i*VX;o(9!o%sVFsCpiJ+`a!e=6UgcUC?J1xa!Pj7U6!s?k7)!G-HW}`(~D+hE^vFQSA~0ze+H`|e}s>HkX`2E0l- z;0q`fdc9Ap&=^&Wf>HSb3biqyQb8fuz!<%SV(-ncuN;57-J}!mt9liCVVf03d6t!T z^EW<<0bgAPes90>E|8`^^dy9DOU{6g`~1TvE4Ww|^g5^@Gy%ByZGNa_$hvRc1)+0^ zu4H=@YN6^$S+O7jX`e7QLlgnl1!`R^m=yj=o(QEp+e)}U-uoWRZCYxA)$<(j>OG74 zf1gJOV5oG%C??4Iuy$(0Id zC3=@|JjR3J3f%RWr!O~?1kkg9pCa7pZyGKD1IigLAW*3n>Rn|u#MtrGhh#7@aiU%+l9m_3{1X_FDHHSLDN9MwYIvWm3{ck=qb zeG2A$5KVf=^T%HxzS|ZyKUwQm6)Id+REQ@CmpSopL>^oMANTQ>?Yo~?i3PnaX06eH zc~_qb3`0vPkj!(*?SH#cEZM@ESLz84&s1Tgrv=85^D{k#gHObw&hKV_d@5GP1kN|s z@YyMR#zVIi{2GWF3dIe9!+VbRY!=z=D|YnqrTGnD9}C(?{q7(3sk40wg?p@l1Q=f$ zHWyE{UFbE!&X*LXr=a+c2fx6_T{J{lnFQ?yQ!|B(rBF_Rj*&zJaRhLm#)5F4`oqC+ z8XLTDCLn)k&f9z?-~~`^-u}_UV8aj5j$_6PQ+2jusVzWA;G%n!50EUSaM6*V&;TY? zK<-4Km_{o@TLn5;c@08fgBGQ?33uxX*KOcFN1)oB$Nuj4I;%~Ua0Z1oH1rK#aGW3j z0h2I?u0;7(>{i2X!)=9u2z(o~_w)Npg?|-X1nh%Of<$NVD}GSv*856vawIfgU3tcV zhk^C>MC-k9&@mMw+ZO$BqG%qT1u6p3lz(*8fvtN?G8vx|z5;o(qWUxqb2>0^v3V3fUZ9sEec-2X7*V~zjg#tWfg{1flH{dC#1Uj!mtpvB) zH2Zfk1qqaU!aUa+jnQS6EGQIcseX6ntq_^k2jC@fsiAFn%ZQ*qa?``YdkRrOKUlrop49mcgG%}v*9z){n5o1vG@y=kFB0;z4F{PD6TAp;{FnQ s=BDf?VsREM*$U~g`M#T`!-Q%S(-MhUH7wcOiCHypTyxJnzSHpk0XBJjDgXcg literal 108281 zcmeHw34CK^)&2}9Fe8JCsNlxsWt(XyZT6)&jA_$-Z_}nN19+3%v}v>FrcDZ0Sye<- zKt%*(Q5-5tFTdZNq3fJ;-t)fq zyyraUITNB7OC&fk!TSVm+OXDQw{td|#k97schJpE;H$}o`g*V6PegrFx2E#&K zDyb9rq^L90@nL>88sTS>b-rl0J{ z)cc~5X(5pmbV)HG@L{ga?e42L)EU;TZHp$w2Cl+?ZQa_Tq>#`#$At)fD8xs`eG_~z zG9J~D*onm2rf5XO*K}P%WL%tR;EWFAy0y-fI1x<*XL&IgjWlph&!Ab?*6nQ44YoOr z7Aq$T(2I`+byGrSUH(_NGcloo<72T<&?o<7{bVv4S+{oG+M^in_Xp{h@u6-~e?W+* z@H<+9Ldc(F4M#C?A{d#1T=M_p_pk;gM0jsV@UxA~oAQqf;*nx>N{HaQ4SJ(l+Q_0Q zF_sdKgrNdK`R9Z{Aes>IlVQOhOof?*Zwf{NLPCi61n8OlwlJS|XMdAf@33xUq7aS= z30_Pk@Xs3XLt!DAYJ@cYR?^8brMnts2VgyoW=5aYZV`R@kKGr@~oFv%Hg zTn%S5ZRQ3iqBC43no4k3KiC1vaWOaues>*{4&TTU(GaPb!usH2NnT)Mot`u5^;~b~ zoLO@#W3yNtbDy1W?CFR<>uGhuG$d9WXWd#CFJf6*62Xm}(ZD%V9J@&KaJK=(6h)^kW_EcDrA&S#%D&$*eQO=sK^_%j;~s-C^_^EqaIEM{B!k z)vELH3|zKq^o$QR$p5lV#0u`ZYWJ)i2Sq+1u4~8|GW*4k%=43m?6+sX;e+z8I*P?$ zBi`%t3xV;8;N(;&9Erx_iKLjCo=InBosCVd=9bpB_73<-)}nke8BB`UT}*0PbJ8q? zdmN8vaN_9Oiv|2>R;0!d_N_|@iTpN8S@@gUBYq*x8uS|(JYD3;rSmS(l=CLIyy8p- zo9w8Ss@d7q-P7C0q+Q*QZiZIRl4h^8-}VI!Y9?<4ZWFe|HfY#CFz6l{_KYy;xu@S9 zfR=ZYrhEMTmVaqfQ$1I^h^9>1CDLMt8h4Q@rmsEc(xxgVteMHIUtrOg2FD}WH!y3SZf|S~54ATBI2&7??eYHZ=2~}itk>u= zwM9E4Efbw1UWe5+Ixt{pbtNJ_)+Udywz)0TJ8KH`XGRl=adS91oE&s`?NhDY9pSN| zxUVzSR zFC^QpfA&L5H2#YlMJ5Bq87X^l`n_7BYx9H|M@g`igzuZ$q*l zk#t)xelJ~Z>HN`|NW+|fK0lLIfARybLA-}a#P5Co)ZbQFL~_XXLJ1eUX{ZDUCMJD) z`tS~D^bl$Fd;4>rtg==Ihe8~#mYg^taDH5e5zPeDs2?R)ue{ZQymQc7HZ z>UXNFRB&3LJ2Y}B7d4`N`yKaNC%0|bQkdrP8 z7=HnE)FKl27L(T8_Df1O-9lRK{Kk1JdgWKSXmQ3RE*F#DJpHDNA^mlv!6|RW53BMz z(Lrl5EWS!i`rU(k3xxhD3I6=2o_Vawf^#M^z0;5QyXe?u(&wM~>$?#0eiC$_NB!f~ z78DU{iHr;8{Y!iwIsea1{5N#@3F#BWWMZL6sPQF{m>iG`s;CPJ5&w}W+eVn=b6lZYwQBXQ5Txgnh8s&#o4bVt zk@xf4QQyNaNCbUysT#R96qGaF_`qZ|8H}Yrbir5iBB!I$y z&}8upH9mKPf!IS+_3iG-66(yeK`5w!`IvOtJs;s9@iioM+uF0oG$=J)FN!O7Z-4)oOCWGnlFJpk z58c9Ra0##UeaNH(CkH5Ss7g|^LZ#$PRjFc3I$-Py4w6$!*7N@8PYfFLA=KIAgaU&4 z%GU%is$68J`};S0pF~F-eXDN zi8PPT)~9CMYXjo6ui4yGJ7u%;E~h1IbSE2o#%IRITgR=&O#6(lwzXxdrMERSI5E=I zYUru;h?$96+u)SYJQDVZBN^TuPMP}6t@Sadc{Vm03s`3y?PDf;i!D9w>z?kMOgD>w zql`8R-mur1NKAUd{*lqV-4~8Q8RX%CcSkoDJIAtK8nIUkZ)gi4 zH0fwzlHuF;9S%9^b>=za@oTOtmUVfzp-M_p9g098Qzq@TuX6@s641@F;iCGVR9VzQ zsK+*CKV(4VD3e~g@xwX%6qhcq`p0nJo& zy9Hq8OS7xx(g93*{dQjr;@?1P@OlF~q{?ehl$~4<0Kudyj~i@;*qSLR$|#*}+Yn6p z*yfraKpD;8Wt>!*E>wm|pVV#L86y6eT;=0mXA@O+6>fc@c(SiBNgqoPrswx0;{n%p zKT>5GT{*-HAx8SLh><0fYnjwB_BSfZYQ@Qwiqky9S5y;ZQp9u{-LkY&;u%~D_=S2q z^7;F0OThVef8;IbqZyo_aXy%VNxw|pdK!e(%(f-CPVwGl()AZNQvUvGJf7cn1mCLi zwpD;38&Ih%=jk}Ge|Ow_5cggZ`S#tqPpGoUv@s7jpq#jcAxo}Nslb_;l)0>*a%jIM zZCoRd4^>$kL}FXEQ1@a|#uP2876k(@P-o5)q(Ef1q3J3sKv}4q281(ORD*&JvVw(? z8;_=L8vPK|x{p+Qd%|z7vTA@#Z8+e7ZG90i>5=9G3Ae13LsJc41aS3dze5R{r^x2F zIKFjkm2Ixzi*gYA?ZG8b8xincObU&D=M`x87-_iI9lLy@>Kand09rz~;~2wk!L9PQ z2jBEvD0Mq2_F8(E<|->za1ao#^!G%#HUT)LVj^WUYwzP~(?|jT5 zlWL8BCm7!!X|4Xa{-i*a*NUJ?`AwFE^UV*bDhzgyzy8^c(2D|IEnuZ-UlsUbd9|3d z|J^52Xrq;!fDCmjbiT5#$D})UzyBW)oidPGz_8}gZq)x!EH;z=J#x){kW(uWB=`Yj zfEYPS4uw@L@&b+TOnU6lBaVkQnt^!A6&b~Akjq;<0Atcv>y>nyyOn(B(C?pQsq$g; z)Y&IiY<}f#$|T{<8?J@;nnCk9Bgq*d(V%X9ChfP+dtZdO=a9v(yWx# zJ$L9x2&NT~zZ@MA?6>@-bdg)0e3>}*!Pf)ON-JTXj60;egifbhqPK&7Vy=sUN%!0r z_&F528ILDpfAz0b_N9s|2+DPwNu56p9|PGnlK}2d1$|S6OTwfhIOk;$Q8O>BVIdI= zWI29{GfE3q4&=jHXvJP+lazHi06;!_C8hVYQWtsZ zE8i}ChXE^ghhcDtiY z{&@)bnM?+~ z-Np+Jn+f8`y-Rc&4*cQeJ6B8X*^o(cxdM$g5U=&5a-KM zq6u@UMiX2im2;Aau2>htG0G6rA0j#!O|n@Oug;PmcAzJ`Vwly^%eb>GuVS(-nQ zCVy@_?_mwPp&Uif+ZSLE3~nf|P03UNCf#`S&G$etEl0gvG(c)4IiBbYX~8Pi56F6u zv95n(6I8r|)~~(o+51yp0wsb3uVUG9^eJEuPJ@u%aNl$ORoDw~M zphY?&{ki|r;382gwsKq$=z1~zm~{UU?R49sEUza$`^Z@uREg#};QX6+{4wd`Yp!d6 z;Qvj+|K#tFYpNML%V|E>{!itn#nz($1U3 zD{s4lZ{|~8r*4JMBg;rGt^hJHu7UF`$Sd6hR4{Lr! z<%v>OndD}>7Zv$}eSUQ!RMv9Z4TWoZqmN?p-jZH-+4BYyj#fWUtsi%j*J^ZB*hZxz zVUf2vlg_#3r3awK&7{go!)hx%HF+6jPE!xDaz(iiCf%0a<7LRM<=ASQoNN#T!{aaR zylU0XG7{^R8=r2_(%D!<#T4&vZVH>{sF-?31{|rOc(mRy;%=!OtZ(kLxgB0}N20C1 zrEx55ZJZh!YU``74>Y$Y!|rLlOH2y`qM7&h_r`7Y!QMuzvo#bR9CUZ}`lpgzzGio* z*)*PMZOv0L&CSso)MvU~?S^i5^GvsU{!A^tW38|Y)I-uV?!MRKRfF+8{^&e;}{CoI50Hr>32CMGQG7UePbD3 zpYioi+r8edp|H;r(|1_gf{96I%xj2`jZPLJKa*BcF*v={nG=nfzfD3q@&&(8#A;`H70t;Ohe5HmoGe-YESkF&9RYT zf2ehEfN%C1duEffP9f8uG5b4423p#?Z2ClRi`|#*8XL=WhvH2GDOYVI8XxqI1zcuJ zhfnP7Oqja5^>*`6V5WP*GZY)Lno}LlP*~($`cPAE+UZXPy2Ma>kGI)kv;`b7M^LZ_ z98(i5&0%k?Yh=LcYfU;@`wX*&VNdgzXEf5~=^1w0dV4HA1EzRj&=~i`2GV0gJ;qFc zA4}-lJflWW+tgUP%MqKlHpk+zkVot^x&zVHF@18j*&OX?nrXHAgu&U+q$O^$T6>*s zEe^MNcB;E^sk3W zo*0gKTANx;P2JuOrx+RRY7fNhQS(@2!f%=NH^uyRdu((dVXAFS+xuEO;{)~4$(fKxs+1p9BvxY%Qisns7vnAz{!=jVpvnBL z@k`2dJsmExnyYEZ2sOCYpeo#Zk<5(W(&@JL)!3zOAu zQ3fGY>36#OlMuZsbyKy4LE{xgManEcdGy)>ex;6NEDW|~{wk}@&Lnou4`!igRghU~ zistuC))!H+-^K%)N#^_AuRu4gMCj-_%PCdR(^ZZMyfD?lq`o6h`3_XkO2At@IIm>> zCzGDqbUmHOS_!wZ)AA@=KS$7`qh`j1oC|y7y$i>nhGtG@Wv1J9k(U&d1s^`$bQZLu zjM<8hd{No?c@`584Jnj2DvJYxp%2!+42jPpsWmY3t%SCLNe|w2)b)_F=NF&12gVFZvhOIcT(=LFaXteL91Qw;FtQz0XUN z{^a)5A7j%G2v0uzx8hB|ob9Oq&P~sxi6)|;&Y{|~%8tE=AjbFMS#kd63LzAg_pCCh zB`%K;BqW+=?PIH6E;jk{*8M6}2W6@v7|6C%bd2x(kg7SalbVx`Gm=_VGmAN%i6$!V zCYe9SARkxLo%-)HyEj2)Ed%aw7fM7^;}iHBke{MHWXdzh18~$aHB7RuIsaQwkGg3* zH{S8Nzi4n({UG~R%983ziW&(ll>8_8O#qktA>UX{TO;TZ5+P#IjR# zD(DKF2iu>U-~#mA!+!^Qt~v>lN*5~I%7g(D1uIp-O_)iKKJgK{2;D}DxzglYm1;+W zB+A34QDFGPmQl!GmD)&!I^;Udis9}|dTWn9%D!p2uU6?PD{p`KHN&L6ufFdbXhJRC zp8GaD|B?nzg&bM=BD$ys>~lCCCVl)7+i_6y_oV7d&kn25-?GSb#C?k&2uyn8?!Ep6 zWvEYS#fO+ws1OkjWLxHDg5t#DS{2^6FhAm)bBV*FDixqgHOzL-Wr+rmbgd{FLTUJC zTb_V!|D@HE))-2d)iiO>%7@#2l=UizSygV#v;mp)qq--zLeCpX*XB>XSF6EOMh;~; zFS;O$R*(kC-eiE>RY4_G>VuI~*efKG`Iu?J?kte7ymMFzDpjQhR-sCps2vb(X120j z?3grl^+PtOaUFTpDR0FO)1p_Qt+B|TfTd#6<2}1S459x*f@_pTYN;Vmjs*&|5-T&o=HJ5_OFeL0MzXcj#gN_08 zpzF)iae&A^c_RT8w5$h?0=W+sB+}*93q%elxh{YnT0XaHIiuXkE7zbaibRX*ueg=( za{E53R;}KZcGf@o_c~dFJBz~7Mg(fvkUPnZQ{o63Z{(6uWR3X>Zcl~xjFNX35Q0o< zJNUIBm_WQSZ8z7)c9O)taDU|4a93LW)t6M?sxf}j=*rOnCZ-z>jQn`ZPOzIjUC;i zK1-9nJ%Hk9Q?qfr)j2xlj(U108~wwM7Be4eOO3W#;)Z%_pJ8OC-63YogRZ8&K%luf z5U>~n=8>RdXdv1>Gu4{#d1fbVQ(?hw^o80dUG3xTq0X_!iMHBSV_&p4Io4xs@0tt^ zv;`YG+B#EBhR)f({t10-Qa?P_DGv2crF|~FeJGlV^L(Juq>oSZ_c+lUYYFxbwf0Op zgF~U#=5*3AWcCM*LsJHGLYy(Snp&D>$9gjL-RaT(&dGSZD~@(PruJCwoRF`vM^`YL10l9UZaZ>A_loH@o`+QbY*q}YuIg*@e z^`^uzhea5Sr~56=R5~HVx(4ef9RtqpR#%HTJ=WIU*=q zHcmNQuEwz2RqN&3dIy4oP3FGHP{*`=c&K}{cRHMmwKs{jw$57LOuWyX?(EZ#v>BpZ z4zEp!xAi7_^%;XJnI7(IZR{LzjgAbA8d~_w_;}0`oOPwAB2$yzkZ-tU))x==HXEjF z!P%I*YdqAfkG2XUL5t5n*q5jsb0%goLfn#e`i2Y>#>tN9a4H@in(hb>SQ^9nE_1x! z)$2|rz1Ws9vZwC#Fa3j_H2U(J4-+dpcVPI-Lpjb&jT6 zN7LgNpHS}o!lcA)wZsW@CZ6F#J|DTW_${)mU?-d?DqtrNPRmp{Gv3{(pjMUJyb7|g zY*(vFzf(ShAIvuxVAL;@4jF!mN>W$h(L#sZ{PtIwp(wv9O#1ff$Bu!p50SvXw?FsE zV&_=i%$Ld4EheDbGS7yuPd9yDKBf+E(8$R$X^r=drQ)Q9- zC1}=pEnGRM4wJkyFO%d|$!@7guH;R*pa_mPD!cnQg7~ZA&XpCxm;d~pSKbU=s#4rg(Par;$lzZ~e!v9T zFU6yYdD?RGF=fr>EeMnLd2Is^IUgliH(XTzlPZS|nEgFZ$TEldLYO=z{pvgSe+W8h zrBRm-9n}Wi9Mv5fU2bWi#x<=pOJ_SnP2j@ZwiUs2;n6SAuvo3omM9tl7bFucR(Sra z98H(Kzg7pessc?`Ihsrx7IZ8%#C6e0n|#arIMmU~<&AbqPjqJ6d~S$t4ote}q>Z%k z|B7eDsaaK4h-;S#?DGi1#fTGfQFm$WB6}^u{nTP*(l_qC`&=lfm9PpN1iH#Q6@iF< z|De+#epP@&Dr=NI?({V^+jihFsp~`1J5Wd~=eOKIPAj5lw)FkPq}z}9J%dI!<5_VU zOO+)u$!lYgX+~>mT7nV2EMX8OdN3p_aO8oIT`LDQmrRA1z6?3WEGE5t`QKiJI$Fu_ z?1(^(Nmu>&oIRnGR$BJufwxNA^%9qgNtZolp*N0ZuIi}W)zm0?IBu92_JclN3`Way zhB4`t3p=Nv!WDQt-m#Bms(c$*_@a*P-!-AVAS%7JYGoq zKP2%=Q*)~vsXE_;;G5#SnI$@VK>%6Q2<83CO+>q;l_QFpog!0m{&TA#%k#`&7J#u0xx)X$kU$NG5&qR|lO0 zeKb>bS!4^(YwebOib=oVkJ$xkXypV22Kv@B$}bI*qDO7zAg^YUqDIpOnD=Tvz3wLcS}g`WBNi#<%JHMtwD&$ZkW^RThg>}OO{XuC z^;CjZCcXXq8(mQAc2e!N^e)X+R!yP7YRIuNRz`)#q{9*iQct^9Qfb%><=ts9Zfd;z znDkxOJuxUm?~CErpWpw+;$>M@pc8g^S)kK=>XPjH?bmm*2FOaxYW>gL+4QSod87MisqeC}sIMC$O*ZZOo^lByrT~fq&^)T1wcK6jA>J01F zwndX-1Lqa|iKuT%mq6F=Zl8dtsMfbmCiXXMDRl) zJ~HkD#Z+WGs+$nSSR%2uDH;*+HC>kw85buSIHSe7ZmlzgIn9aStep30;GCX8v#zb% z*`yn6bK)B~QNX{%$AY>kA+r!k(IgZk)}W&p@An5OiNuGxqkbVYAjDJn9W6m2GcgJ zOM}T+mhQ=KbXW{_L1zm1ygIX0;B|J3!>begR)^l^5DYeRAWQdjGWPkvLGg&Oc%Ls9 z-IFS-(+z878l*QNiszv<8}=*~WqI$G6@ua`XLTydUZ`JvvZpW@PRgRKJBN2w`fsknGK2fcDMxyYAT3X6u_!n znYA(Ls7Jp~*`Oy$^K0MyJj^54R~Rp!bt7oAJ9PkX2~s8G4#@VO>pP^umLz)?`(SyJMa_S;JCMw$pz@*armHX3ZHXuWh_WYXcE z(651(Pm!j#IKFkP26tPbrplDrinx4~Zd4|{Ir?F$5No+nx`5F~j!5#wy}9EN$*PW? z2=u55;H$!om96!ujD=^CC4KVeAU+*-o?|bvxi#o$G=|$Ir=u6%N&kz6zvEm$Ksx6} zm3J&Lsr!<8DkN*UGk@+qT$W)#X;M^w5rahO3kMTMxhg#q6>cgjk0=A;7hFgt^`3Cw zpP@@tve^~t0wx90rMyc55!SmufqJw|6O(@-$!CR3abd0G<%^r)r2n5#j);mp-~0Zl zzt!L&Sg0KG_zU`+%uU9md!3W3q0vjE)ua1#`ZTH4mPl(f>R())g-I-cy=KzTeosEF zaXOEUGV59~nFo!-N%9~MRA#?#7s16C3bw!g?9m-q@+WE8HJawwj^$?3zP~xG1$-E% zlYYnSYwpvMTNm+R#G=hj5$7BqMyuD*Yv}UZ`>ghqAyA+0F}ehoXp5#@HrLp&S+qC| zUBlldj^+$(#YU48=L%JiZpUjvIp<2E>(;Cjt zil6lwEvd1QezB)XZ|HKj&vZ`?&Gfq4Exn-jZ)zKe@*Yb9Po#M~ZT1@nf@5u-)+wQ+|`ZF<_la zI>w@6EymZU_(4M`K9q5}oMNWc(&z4-?Myd1e1jopax~LusGS`#*6I_p(YDY`TfE}zw5_KJODu4!|Bo3VMOKR(oBZVz{4;?aKBL~NpWa(vL;HfD~+ zhuc!Y*?3r-awUgmO+5)ui(MS;FgSWzJ>%|yu}FBv)35hTx!Q(@riE}|!k=-pT8x&y zVcwl?G1hk08+)5Z2km2{sm_e6u_e^o)I8Q=GT0`9V~LKwNMs;Ajq&mNzUj2DxhFQ- zI@aFO!FP8g1w-H9kYAs)cDMAjJKQe!z<6hBtX{Ocqjr5FFxWI^N)1dk#nOYLp_vg| zMhqH8tc_iRHeY9GEY{~5j=KhYiHu;01ybO<==Zy(`Icsbuie<2vO0~EO*8REL8!F{ z9L)nMdnDdi-!p2NaoAmnHdD~mneLly>j<^ECx^U!>Ctqzv1uUGG*N~J11+w5r3f~0 z6`tX{PFcHq@s?cH$}l3FrB;Rq!I*uI_&$Wa8IKlvD3(Z#!KC{hzidCqu9dEq`8*h^ zpq26&dr*%)d>Qp~YlVXW0Wsxv+o`WRTXRu&G$y_FaqD*=xmM8m$|#A#;z^<4O!~_1 zS2`fBhQQzj6_29&04+d8WF=q^y!lRwdFTMr1TT!tNP?)g(DVf~9!xs%-pk*GuosZP zKe+3WJBm-t<;`TOK<4Ik4Pk;_-=PUeR~70^6$x{c%w;U9QV{E8(l@{UNeMdqlB}Gb zedMevTX`wi@BGAff?H{!!C?`^H(Yw7hiY6}L8!|VG>coDNq;@+fPFP2x7-N7IL44k zcZ~(;%p-W476ymXX-#ddWe+`tlHf}k{pe1ipXd`ep-A4sc0x$v zz)fz65-7Ix()STO103lAV3PR%H>4G{^GVt4!xp)RTdj8hddAoEK!vK{dsI}Im&y%RaQ=Xm>-*B4(BkKKJgLcRo~`z|Lx{hH z4;`?H+D-^SUd?12l__ouOFffj()jgvz6-gv!oW#UtZp%>Gm8Omn6&?$H+&3gRi$4; zWg}2t50{F{_+p9}SD5s$a1Is8w2~jey$DA!sfN@(S5t&qBaNiXenC{=;AlKZZh7K2F}*h6&YXywwjO{^Dl@u>BtE4F_7a0(#b#M5(?_t*!D&9cEE}Bg03`V_IS7ovav;O}MSp^apVIi61 z#|1EA9Cj1~0|+s5$p0@2Y5Wg!6H5k%3t$Y~oATccoChNoxnPpYQq<+UnH!vl&TyG% zD#0PO00Isq7q}R>Lh!o*-9CIHOGH65+Q3pE2EoUY%q(K8)5~*1dpqY?C~}k_7L&<1 z_gQx)2F3|K77Jy0Ve7Yzo5EU-n?kS{eZ1Xa*ZHkBv(60S6`faa6?Aq}!0I>ad85sq z>JUFt91%ge=05nZS!XdvI5t7JJ$_%K(6jC#V3P*!ZbGX?KNqsRv14&*+Se*NgT^t zwrnUmx9jAbhEA6&&>8ADPa=rLre>Q+D(nUK698fykFl~Kf{Fz3CIEdCj&%_~vgI)P z!z+vj%d>JL5y+(BlMh7tb+w6%^~;ym{;tZ#I*Lyu_>6RvPm;UEkpI|1|3MeUPO{0A zPfUb@5rMuUMEuzwqmK^99}$lLV*~e`_56%%G%*^>8V-;n5MSa2De%4tkd=%FVF|UE zRpmTq5?ga&BTPmZFwY+cu3OR4l!|{5Z8Q0VH!6zJa9%@$Z39jO5mVLZ^*$5C0A~8G zR3s=S6_q#ACnAbzgh>9Ae8kTMXa)k1EFk5QzfQy1f_#Xg1b@mWCQF^uSXUt&p&*u> zHvmVO%=qXhPyHsWTT9k`{)-QPv&s%hUQ%K=@TH>yWsB58ZmoPEq(KIl$6UJ5f$&?GLE-q*Gus3T3t`p-22H`Pt~od za<1v--Up_+Etm6ATn4hcm|Jg398_V0zSJwSSQqNq)Q8|j(6&;kce)OPr1@vPCHlL^zjt$$JR!ucGOc} zIZgTP75N|rdVC^rJZwjaB+u^~pIA{67_~PDnLxreB9)*V()8KAte}D5Hgh{S5JcQi zy0driR-Qjku%ZIsXv?!Nz^r3r)(sEr`*M|C5{AqkORFPLMkoUyU%+MJbSQZziRUQ|6cBd*^RtavS zX~BO~Q4Ec(iEJoB$E^EiO;S_Sp9*3cNs>qKli}piBn>$GI4Xi54lj6TV`p#T%vL?3 z@jB(}gDJ0=z^O^!IQK56?^}vlnRMt$A3GN&+?!1Jp+E0cl8#;8`=;8Sw>s#?vED2A zc;tCVJD3tjo1W8gbQ#I%k1xO;_@vdLm^Wt{AXB0UDiw51k{hSSH+p##5CLqYy9o}A za0z@x2;@4+m~{H>@1hre)$3%JNyiztZ$i}*qISV3g5&Wn_$+>pil`Fg} zs74xuaAOjG+zEez%7nci{;>47b;W8g>unj{Fh4u5a?>d%J(GU-@CAJk{8T*s-(7#@ zCB?!oTOz-F=Kjbd@2Z0^&*149eBjs;uCe9H+#78Ui>fP>P1D;g8yPO>NZPogQ;61B zgV|=UBu#Iznk4Bncg}p-Vsvm;gVDGH)Aawz((h18X?TQ2v-A#=eTQf1ah+}LcCTAI zqH~64Bf2bYchKL!S$N)JvY4zoUNHD|W_`e>a|8sdF5vZ<3>JUDYUlk~25G_@4Akp<7lI%?SjCJob z5b4Z7PR~b<|Cg&+&gG4C3PDu)O!)lFx(8H634|-r5blO$a_fA^mkNPAJy$ow1+yr> zo-dhkgTZhtl)riA)9m<1e0+ophC;~0C+IhcGf2kEXyjxA<>n%OKH<;ZShGL3Q6Y?; zqfnLyE2_R`3g6inuXV_|x4`5yD%SJafBeL&L9=t~L%}J5l4P|QE-nAHc>^~=s}O~u z#Dl3wiBd)#htfxp1!#1M@&g+-5lXkn9$*B2_%y)HSMN%?|D%7elQpP&4U~osrcG#9 zskIn3A(X7+dJ~Gmh^*He^tHAPP#*t}%nbep!J_gZ?s_E}=fdYg4{$Q++*i*A8R=@8 zJma}NA^kyvW`I_7ft4?6a>_=b45NEn=?1IgkiJ3@o6m4t*g`eyEsSzMg+=e8(iUBU z8|iKmO+-`Um|!u_f##c&Nk9JjKf#Bx`XI99$6wlWvj%Mm?`WWu7o9RP!wWQ1I0F=C zl2c##5(tuER3yaJ21O%3UeL0aZGv-clpSpo)&&)VR9IOHxTf+u7jQj{gxvju2)tLX zCo5fi^QA{<&`Q`z!3Yj{<<#N$0NPygyN-?<83c))NluyNJI?uMcW`_H*olZQltR5U z6h$SaxR@%ROY)wz)s#0BW~%@9XAXd!2wdzr+Hl~VnzWPR0R?VBdy&C9OkQ8#C#dd%lD^@2X4j3=h0JTJi>1)_A)R(2&oS6}{{m3*r7u zy6KK5sSJ28ZKm6I>po#6HWf@`A}tJ?d3{C4xU0BXY4X3|V@m4Rax_jOTMO8K|NS|@6kIrb5+$t0 zxJ99=DE_!~tpKCG*FTO$NYf&m_6Og0tGqk#c0@@)O;d`fEQahC$w~#~ExHQlJNU_z zsOc0(UwQi$xVUq!N14!W36VocFA@qUq99+fj}VRV095I*QETz!Lf(8FtgH_JEpmC- z#;xa*r8ZXUH)PUdpE&Sz*xf>QH(vRExXO0tcyDxCP|7q2){}tSisV;vuxrSvZ<{O4 z(m^FVnsPfpEtQz8$;G5A_Iu$T7>qh(SDcqz<-{nc z9Of&9m8p_%Tkh#)(r!(YQ~MZ1nW6~*moeR)IbwH~XR);9>OjoaL^97O!6j#X;66sP#x41g?;mK}ep^l>0|Ll1yI7zhXn0`B9sDBl%*`KlAXFDb`vxYkhvwAwp}Ne^+O z30QL%xPa$D!=|dSAm$S_^J{IcAf?7iZdx@plsT1cDg*s>*^iVP5CDjnftdYV_7g)z zg6njn-vEoeMOInqnZXqvJGcA{F7LhNXIS)kYmVjC%%^$aHctnnU zMW8~ek`Kwg!<5%mQT{uBS}$s_Le3l}+4?^IAs7$nj#VDJ$5b^k`n>$}-!^qzd(Ig0 zyBY0qA%Rb9MDcDM2n)G|Np5tOU-GJX)vV7^_7-V8FYiSmLCzIM0emMU2NeYo6wDBK zg93t>;OEDcUoV?JyGHm{^h%-oj{*dxVJ>@! z^I}kx;WY@`3d=*vHV7iUw^S=*6afDM5`C+8BAf1a)md+A(WY=v*|}vW^b29!=w+M{ zf>Rz2i$7$K&)w{STdv#=7%DJ2B0+ncmaB$uz4YRAu?3d(c2TDM#iZyVe{o?|h@jE) z(O=)+P%P8(26`&lL{1*AgUS}5@96hWbEf9V89i(L}6Wu_N|#8(*o%Y~*Gp zg6O#=^c}b-f_TH{s$sZI$<5K!s!Hc%&Yp6y1g6bLycNOMnRNaw|GgV5^ck|yd;HJ# zuClKv6%x5F$`!D8b4dYRk~qCW8S;Z3x=t4G$mfng>ZF8G5?SVvPJ?W z)h-mjPyg4SAO|Ij`ycq)T}Kt~&E+d#l`l(u_jCK43~2~=-IF193~!>mxwihTZd zRilEDV3<$Wp;3_j)`g9Amj4u@7}(TshWoL2-jsh_5RVkIU1J8l(M-X7Fe2xVeF84R zf#5i?&cJ-RB{J(BRJzn=H4|H&m;% z7R99At$t$CBE;VCA)k+w;G38A6|qn$3T(FC-5x~5@@X<(mou`W=BqIKSzK+}vi%%> zTNuSUz$-@3wOsDfkEZ^Eeg&(n?k3Z`y{Fr^lAcweX{f{o0yAJF5%%ZdySXA6I-{sZ zL}529NzB!8Jy9U3K|x3`%w$SP7Id4)c~b>*M{LxUXGL=4!t<#7q@zE2#MfcWs@yg! zHKrUCZYC-+V5PI%adim$(E?F`ahIEvEC#uupK6i>bl)BuG3kJHSN#yS*+7nV#(5{c zpg~8YtT_iHzw9JM&X&(LHxypXsWB@h*Y3);@u6z0Ab){IMDAj76Ef-N=B+<~p$;TN z4fIXCs6j)aagWQQRc#v!n?k6}kgtg6jiw|hLmBXzP{RnCl~C6q=q)xaKA_H}Y$wU$ z_Q?+Zd*c(=(TT37=&^e6(*4op$5%~iH3{LM$qHRN4H>4;Aj+JZ^H`GogLsCG7<;aC6o=Mu2Uvc~P$ zM+?!=Floql_%9&Wn|M4At=X{WN}66J$2OOPE$VA3?jS*n4|)y^HvDnx8Tg|#g}OLY zrJqU8XD;51UAzw|ZasF>M3oiCA%?8FT)D2PQA${gHZx^wJ5;tv)+tn5KyX_s6)MInI z#Ryw&!ecU5WDh1C_PlEl4)I~q__6(t?5MKF^NLvXmXlxTM*RjVw8*H&;`YI8aZ5Hy zMOv3_pJ39nzq|=;DXTv~=D7Uj$YE7BM}CD(SX22pl-rWz6-GyO{>e8SWD6EdvfuH-7c}G&a!g{%bz>O~Sye3xKdX#!%mG@cB@P%FArTh*LBg|SYnu5( zf*J{zW*{cD|6z}x!5rWTUgg>4<>{YR*(C~UvsBhp`Ud6ZKX3pqOz5~Y&AZj0QZ_r2 zgez~n9>(}Sp5a}#w3f86E^EY7Qp_rh1(@{U?)wvD_Y^$+di!1Lix+BH3R~rCT6Isj zsmk^~o}NRQm?#!z*=kxg`%-FJC|H&)Ygw%Gi1zdqHCdUhD6Bkp&{f}~vXb$ErEc}20lHVS@1h_yv;7?3?{SRR9r$tv!3JSQKp(vr5pnOuD4|q30m* zx9|)VHH>elkWYP7xPh9`^c0hKK+|ridS}d-Lb+n;#_ALktyfK{V2_7 zN;*}p^vOvx8SqZ&!?_$7-P@4_Qb6qUN@VhYpgi0#U$9V8)^c5_a%-xx1!EZeW1j8Qs-Jw4gth$AtN#A6XE*^GpFUspi+XMJpCcqTU7AN zxz?5l6~)L9`8^FjK2SGRu%{O?i%7Fgm=yT!*A9kl(7mwAbGLWj66};FHsE3d^QhQf zki-UKQy#VXWiL*-X;G8htEXi6PGsSVLtgj+En0BDhIDB%SK>>eoAn2-=N zGSVKorqWJXCS5-!?g#(+H~H8{-n{K&T0G>DNR(mjn8%{vZ^7bS0kc*^#AS#`!ZIMO9)V+yG`&Y)vEH zi*lI)y zCgMw?k2R1{Ku|2(!m!B*qjnY-3raWb(Z-S3RgiyW^TNE~6 z76dhlB3zK?sATy>vv0`U-jsv<+|H$oPpLI03R8-UO^>_p7yGxv@F=LQ@|a$ELX+=B zI?WVAD#N{IK&Gy6ZjiA{O0U3>@HzU8Ipfb?yMysNWGfe93FIH3?khwoYNhgWS4k$F z-0uM9V%5!fhWFTfYsmncWlaxY_byaIpBF3UX9wnshBiO|UcUU7ko|Hzo+BF?N}#*T z8-tfAv%8~ZlKo6NY4=@!3$Oh=NvnaebL1<2s>>9XIcayKaJb{D#GA- z{vKSlqBmF-o1(lZlU~Z*rn$NrO#wcN4+X~~f*-@tid+>%>4S>sNb?sEW$>>2#d(He z(vz0{yWvY(DK!^j4AjV4@pYOS3~h>b>W2K!;f|5}xe9BnOnUm_%c8Ks$7$_fjo%+! z$uajKN zrc8;>?}03JZ%xgBJSUN+0pbwP)u3@Tm9n*IwL``zA2LlcF@9+fvYt-p{QZH$IBqU1 zM~M}~oU$+Pk7kh*7r=MGgGhHy9x9QYtxB3H z-!4PO6if^yI)IB<4Ew^Qmu;VNz#-Pt)>`Rd8!G3GeC5Tc0tDn3tP7N>>S*1Z9SW8k z+Y5HcFSTM2nl(XthfpvjbEA{^9q=KQdB|#B!ldu_zlgNX>Q9oLPP*#&HB~;B7e8bc zXiGAr`*43pf9XQeMH@Sg3zsPNy~n1<|M z!_)u9qs=45%etcxGUdTBSM2=m Date: Sat, 5 Sep 2026 18:15:14 +0300 Subject: [PATCH 335/618] fix(bedrock): carry the encrypted half of the reasoning union ReasoningContentBlock is a union of reasoningText and redactedContent, the latter documented as "the content in the reasoning that was encrypted by the model provider for safety reasons". The Converse door read only the text member, so a turn whose thinking the provider encrypted arrived with choice.Reasoning nil: the caller could not tell an unthought turn from an encrypted one, and had nothing to send back on the next turn, where Claude requires every thinking block to return. ContentReasoning gains Redacted, which IsEmpty counts and HasContent does not -- encrypted bytes are not readable thinking. The door parses the member on both the streaming and non-streaming paths and replays it unchanged. The stream branch was untestable in place: the only Converse stream test stops the call with an error, and the SDK event stream cannot be faked. The three deltas now accumulate in converseReasoningStream, which a test drives directly. convertUserOrAssistantMessage had a reasoning branch for assistant messages that nothing could reach -- its one caller is the human case, and assistant turns go through the accumulator. The branch and the subtest pinning it are gone; the same invariant is asserted on the accumulator, which production does use. PAGI-246 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 109 +++++++++++------- .../bedrockclient_converse_test.go | 93 +++++++++++++++ .../bedrockclient/reasoning_replay_test.go | 19 --- llms/reasoning/content_reasoning_test.go | 23 +++- llms/reasoning/reasoning.go | 10 +- 5 files changed, 189 insertions(+), 65 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 5fabf491a..1b73afc6b 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -342,6 +342,11 @@ func (a *aiMessageAccumulator) build() types.Message { Value: &reasoningBlock, }) } + if a.reasoning != nil && len(a.reasoning.Redacted) > 0 { + content = append(content, &types.ContentBlockMemberReasoningContent{ + Value: &types.ReasoningContentBlockMemberRedactedContent{Value: a.reasoning.Redacted}, + }) + } // Add text content if present if a.textContent != "" { @@ -590,22 +595,6 @@ func (c *ConverseClient) convertUserOrAssistantMessage(msg Message) (types.Messa var contentBlocks []types.ContentBlock - // For AI messages with reasoning, add reasoning blocks first - if msg.Role == llms.ChatMessageTypeAI && msg.Reasoning != nil { - // Add thinking block if present - if msg.Reasoning.Content != "" || len(msg.Reasoning.Signature) > 0 { - reasoningBlock := types.ReasoningContentBlockMemberReasoningText{ - Value: types.ReasoningTextBlock{ - Text: aws.String(msg.Reasoning.Content), - Signature: ptrStringOrNil(string(msg.Reasoning.Signature)), - }, - } - contentBlocks = append(contentBlocks, &types.ContentBlockMemberReasoningContent{ - Value: &reasoningBlock, - }) - } - } - // Handle text content if msg.Content != "" { contentBlocks = append(contentBlocks, &types.ContentBlockMemberText{ @@ -770,8 +759,7 @@ func (c *ConverseClient) handleStreamingResponse(ctx context.Context, input *bed // processStreamingResponse processes streaming events func (c *ConverseClient) processStreamingResponse(ctx context.Context, response *bedrockruntime.ConverseStreamOutput, callback streaming.Callback) (*llms.ContentResponse, error) { var fullContent strings.Builder - var reasoningContent strings.Builder - var signature bytes.Buffer + var reasoningDeltas converseReasoningStream var toolCalls []llms.ToolCall var stopReason string var streamErr error @@ -802,22 +790,15 @@ DoStream: } } case *types.ContentBlockDeltaMemberReasoningContent: - if callback != nil { - switch block := delta.Value.(type) { - case *types.ReasoningContentBlockDeltaMemberText: - reasoningContent.WriteString(block.Value) - chunk := streaming.Chunk{ - Type: streaming.ChunkTypeReasoning, - Reasoning: &reasoning.ContentReasoning{Content: block.Value}, - } - if err := callback(ctx, chunk); err != nil { - streamErr = err - break DoStream - } - case *types.ReasoningContentBlockDeltaMemberSignature: - if len(block.Value) > 0 { - signature.WriteString(block.Value) - } + text := reasoningDeltas.add(delta.Value) + if text != "" && callback != nil { + chunk := streaming.Chunk{ + Type: streaming.ChunkTypeReasoning, + Reasoning: &reasoning.ContentReasoning{Content: text}, + } + if err := callback(ctx, chunk); err != nil { + streamErr = err + break DoStream } } case *types.ContentBlockDeltaMemberToolUse: @@ -871,16 +852,11 @@ DoStream: streamErr = fmt.Errorf("stream error: %w", err) } - var sig []byte - if signature.Len() > 0 { - sig = signature.Bytes() - } - choice := &llms.ContentChoice{ Content: fullContent.String(), ToolCalls: toolCalls, GenerationInfo: make(map[string]any), - Reasoning: c.processReasoning(reasoningContent.String(), sig), + Reasoning: reasoningDeltas.result(c), StopReason: stopReason, Truncated: llms.IsTruncated(stopReason), } @@ -925,15 +901,52 @@ func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { info["PromptTokens"] = promptTokens } -func (c *ConverseClient) processReasoning(reasoningContent string, signature []byte) *reasoning.ContentReasoning { - if reasoningContent == "" && len(signature) == 0 { +func (c *ConverseClient) processReasoning(reasoningContent string, signature, redacted []byte) *reasoning.ContentReasoning { + if reasoningContent == "" && len(signature) == 0 && len(redacted) == 0 { return nil } return &reasoning.ContentReasoning{ Content: reasoningContent, Signature: signature, + Redacted: redacted, + } +} + +type converseReasoningStream struct { + text strings.Builder + signature bytes.Buffer + redacted []byte +} + +func (a *converseReasoningStream) add(delta types.ReasoningContentBlockDelta) (readableText string) { + switch block := delta.(type) { + case *types.ReasoningContentBlockDeltaMemberText: + a.text.WriteString(block.Value) + return block.Value + case *types.ReasoningContentBlockDeltaMemberSignature: + if len(block.Value) > 0 { + a.signature.WriteString(block.Value) + } + case *types.ReasoningContentBlockDeltaMemberRedactedContent: + a.redacted = append(a.redacted, block.Value...) + } + return "" +} + +func (a *converseReasoningStream) result(c *ConverseClient) *reasoning.ContentReasoning { + var sig []byte + if a.signature.Len() > 0 { + sig = a.signature.Bytes() + } + return c.processReasoning(a.text.String(), sig, a.redacted) +} + +func ensureReasoning(r *reasoning.ContentReasoning) *reasoning.ContentReasoning { + if r == nil { + return &reasoning.ContentReasoning{} } + return r } // convertConverseResponse converts Converse response to ContentResponse @@ -980,7 +993,6 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver } choice.ToolCalls = append(choice.ToolCalls, toolCall) case *types.ContentBlockMemberReasoningContent: - // The block.Value is of type ReasoningContentBlock switch content := block.Value.(type) { case *types.ReasoningContentBlockMemberReasoningText: reasoningText := "" @@ -991,7 +1003,16 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver if content.Value.Signature != nil { sig = []byte(*content.Value.Signature) } - choice.Reasoning = c.processReasoning(reasoningText, sig) + if reasoningText != "" || len(sig) > 0 { + choice.Reasoning = ensureReasoning(choice.Reasoning) + choice.Reasoning.Content = reasoningText + choice.Reasoning.Signature = sig + } + case *types.ReasoningContentBlockMemberRedactedContent: + if len(content.Value) > 0 { + choice.Reasoning = ensureReasoning(choice.Reasoning) + choice.Reasoning.Redacted = append(choice.Reasoning.Redacted, content.Value...) + } } } } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 79352cc08..445c0ac8b 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1336,3 +1336,96 @@ func TestConverseGrokSendsReasoningEffort(t *testing.T) { require.NotNil(t, r, "Grok carries its effort in a reasoning object") assert.Equal(t, "xhigh", r["effort"], "4.6 gained xhigh") } + +func TestConverseClient_RedactedReasoningReachesTheCaller(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + encrypted := []byte{0xDE, 0xAD, 0xBE, 0xEF} + + mockClient.On("Converse", mock.Anything, mock.Anything, mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{ + &types.ContentBlockMemberReasoningContent{ + Value: &types.ReasoningContentBlockMemberRedactedContent{Value: encrypted}, + }, + &types.ContentBlockMemberText{Value: "answer"}, + }, + }, + }, + }, nil) + + resp, err := client.CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + }) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + require.NotNil(t, resp.Choices[0].Reasoning, "the vendor returned a thought, encrypted or not") + assert.Equal(t, encrypted, resp.Choices[0].Reasoning.Redacted) + assert.False(t, resp.Choices[0].Reasoning.HasContent(), "encrypted bytes are not readable thinking") +} + +func TestConverseClient_RedactedReasoningTravelsBack(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + encrypted := []byte{0x01, 0x02, 0x03} + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + _, err := client.CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + Messages: []Message{ + {Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}, + { + Role: llms.ChatMessageTypeAI, + Content: "answer", + Type: "text", + Reasoning: &reasoning.ContentReasoning{Redacted: encrypted}, + }, + {Role: llms.ChatMessageTypeHuman, Content: "And now?", Type: "text"}, + }, + }) + require.NoError(t, err) + + var got []byte + for _, msg := range capturedInput.Messages { + for _, block := range msg.Content { + reasoningBlock, ok := block.(*types.ContentBlockMemberReasoningContent) + if !ok { + continue + } + if redacted, ok := reasoningBlock.Value.(*types.ReasoningContentBlockMemberRedactedContent); ok { + got = redacted.Value + } + } + } + assert.Equal(t, encrypted, got, "the replayed turn carries the encrypted block unchanged") +} + +func TestConverseReasoningStreamKeepsEveryDelta(t *testing.T) { + t.Parallel() + + var acc converseReasoningStream + assert.Equal(t, "thinking", acc.add(&types.ReasoningContentBlockDeltaMemberText{Value: "thinking"})) + assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberSignature{Value: "sig"})) + assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x07, 0x08}})) + + got := acc.result(NewConverseClient(nil)) + require.NotNil(t, got) + assert.Equal(t, "thinking", got.Content) + assert.Equal(t, []byte("sig"), got.Signature) + assert.Equal(t, []byte{0x07, 0x08}, got.Redacted) +} diff --git a/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go b/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go index 497fcd1d3..4efa9c163 100644 --- a/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go +++ b/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go @@ -7,7 +7,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" ) @@ -33,24 +32,6 @@ func TestSignatureOnlyReasoningKeepsTheTextField(t *testing.T) { signatureOnly := &reasoning.ContentReasoning{Signature: []byte("sig-only")} - t.Run("replayed message", func(t *testing.T) { - t.Parallel() - - client := &ConverseClient{} - msg, err := client.convertUserOrAssistantMessage(Message{ - Role: llms.ChatMessageTypeAI, - Type: "text", - Reasoning: signatureOnly, - }) - require.NoError(t, err) - - block := reasoningTextOf(t, msg.Content) - require.NotNil(t, block.Text) - assert.Empty(t, *block.Text) - require.NotNil(t, block.Signature) - assert.Equal(t, "sig-only", *block.Signature) - }) - t.Run("accumulated message", func(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/content_reasoning_test.go b/llms/reasoning/content_reasoning_test.go index 46e17b95b..8a03c31b5 100644 --- a/llms/reasoning/content_reasoning_test.go +++ b/llms/reasoning/content_reasoning_test.go @@ -1,6 +1,9 @@ package reasoning -import "testing" +import ( + "strings" + "testing" +) func TestHasContentSeparatesReasoningFromSignature(t *testing.T) { t.Parallel() @@ -25,3 +28,21 @@ func TestHasContentSeparatesReasoningFromSignature(t *testing.T) { } } } + +func TestRedactedReasoningIsCarriedButIsNotText(t *testing.T) { + t.Parallel() + + redacted := &ContentReasoning{Redacted: []byte{0x01, 0x02, 0x03}} + if redacted.IsEmpty() { + t.Error("an encrypted block is something to carry back, so it is not empty") + } + if redacted.HasContent() { + t.Error("an encrypted block is not readable thinking") + } + if got := redacted.String(); !strings.Contains(got, "3 bytes") { + t.Errorf("String() = %q, want the encrypted size named", got) + } + if !(&ContentReasoning{}).IsEmpty() { + t.Error("a value with nothing in it stays empty") + } +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index d82a9ecc2..3f00078a6 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -3,6 +3,7 @@ package reasoning import ( "bytes" "encoding/json" + "fmt" "regexp" "strings" "sync" @@ -22,11 +23,15 @@ type ContentReasoning struct { // Signature is the signature of the reasoning contents. Signature []byte `json:"signature,omitempty"` + + // Redacted is reasoning the provider encrypted. It carries no readable text + // and travels back to the vendor unchanged. + Redacted []byte `json:"redacted,omitempty"` } // IsEmpty reports whether there is nothing to carry back into the next turn. func (r *ContentReasoning) IsEmpty() bool { - return r == nil || (r.Content == "" && len(r.Signature) == 0) + return r == nil || (r.Content == "" && len(r.Signature) == 0 && len(r.Redacted) == 0) } // HasContent reports whether the model actually reasoned. @@ -46,6 +51,9 @@ func (r *ContentReasoning) String() string { buf.WriteString("\nSignature: ") buf.Write(r.Signature) } + if len(r.Redacted) > 0 { + fmt.Fprintf(&buf, "\nRedacted: %d bytes", len(r.Redacted)) + } return buf.String() } From 2ba6eaed23fe3ed9667460bde52bdab1cc28b44b Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Sun, 6 Sep 2026 19:29:27 +0300 Subject: [PATCH 336/618] fix: pinecone tests issue due to OpenAI client error handling - Added tests for sanitizing URL errors in `sanitizeHTTPError` to ensure application errors are correctly passed through. - Updated `setHeaders` method to omit empty tokens for Authorization and API key headers, improving request handling. - Introduced a new test `TestSetHeadersOmitsEmptyToken` to verify the correct behavior of header settings based on token presence. - Improved sorting of documents in `getDocumentsFromMatches` to maintain relevance order and ensure stable output across queries. --- .../internal/openaiclient/openaiclient.go | 9 ++++ .../openaiclient/openaiclient_test.go | 18 ++++++++ vectorstores/pinecone/pinecone.go | 9 ++++ vectorstores/pinecone/pinecone_unit_test.go | 33 ++++++++++++++ ...RetrieverWithMetadataFilterInClause.httprr | 44 +++++++++---------- ...rieverWithMetadataFilterNotSelected.httprr | 44 +++++++++---------- ...neconeAsRetrieverWithScoreThreshold.httprr | 42 +++++++++--------- 7 files changed, 134 insertions(+), 65 deletions(-) diff --git a/llms/openai/internal/openaiclient/openaiclient.go b/llms/openai/internal/openaiclient/openaiclient.go index 567fc4467..0f9035b51 100644 --- a/llms/openai/internal/openaiclient/openaiclient.go +++ b/llms/openai/internal/openaiclient/openaiclient.go @@ -6,6 +6,7 @@ import ( "fmt" "net" "net/http" + "net/url" "strings" ) @@ -229,6 +230,14 @@ func sanitizeHTTPError(err error) error { return nil } + // http.Client.Do wraps every failure in *url.Error, which implements + // net.Error. Unwrap it first so application errors (httprr misses, etc.) + // are not reported as a failed API connection. + var urlErr *url.Error + if errors.As(err, &urlErr) && urlErr.Err != nil { + err = urlErr.Err + } + // Check for context deadline exceeded if errors.Is(err, context.DeadlineExceeded) { return errors.New("request timeout: API call exceeded deadline") diff --git a/llms/openai/internal/openaiclient/openaiclient_test.go b/llms/openai/internal/openaiclient/openaiclient_test.go index b1eae1f69..5da4f4d71 100644 --- a/llms/openai/internal/openaiclient/openaiclient_test.go +++ b/llms/openai/internal/openaiclient/openaiclient_test.go @@ -7,6 +7,7 @@ import ( "errors" "io" "net/http" + "net/url" "os" "testing" @@ -346,6 +347,23 @@ func TestSanitizeHTTPError(t *testing.T) { assert.Error(t, sanitized) assert.Equal(t, err, sanitized) }) + + t.Run("url error wrapping application error passthrough", func(t *testing.T) { + inner := errors.New("cached HTTP response not found") + err := &url.Error{Op: "Post", URL: "https://api.openai.com/v1/chat/completions", Err: inner} + sanitized := sanitizeHTTPError(err) + assert.Equal(t, inner, sanitized) + }) + + t.Run("url error wrapping network error is sanitized", func(t *testing.T) { + err := &url.Error{ + Op: "Post", + URL: "https://api.openai.com/v1/chat/completions", + Err: &mockNetworkError{message: "connection refused"}, + } + sanitized := sanitizeHTTPError(err) + assert.Equal(t, "network error: failed to reach API server", sanitized.Error()) + }) } type mockHTTPClient struct { diff --git a/vectorstores/pinecone/pinecone.go b/vectorstores/pinecone/pinecone.go index da7960a46..517c298da 100644 --- a/vectorstores/pinecone/pinecone.go +++ b/vectorstores/pinecone/pinecone.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "net/http" + "sort" "github.com/vxcontrol/langchaingo/embeddings" "github.com/vxcontrol/langchaingo/schema" @@ -209,6 +210,14 @@ func (s Store) getDocumentsFromMatches(queryResult *pinecone.QueryVectorsRespons resultDocuments = append(resultDocuments, doc) } } + // Keep relevance order, and break score ties by text so retriever + // prompts stay stable across approximate nearest-neighbor reordering. + sort.SliceStable(resultDocuments, func(i, j int) bool { + if resultDocuments[i].Score != resultDocuments[j].Score { + return resultDocuments[i].Score > resultDocuments[j].Score + } + return resultDocuments[i].PageContent < resultDocuments[j].PageContent + }) return resultDocuments, nil } diff --git a/vectorstores/pinecone/pinecone_unit_test.go b/vectorstores/pinecone/pinecone_unit_test.go index 9745fb365..285110bc0 100644 --- a/vectorstores/pinecone/pinecone_unit_test.go +++ b/vectorstores/pinecone/pinecone_unit_test.go @@ -7,7 +7,10 @@ import ( "github.com/vxcontrol/langchaingo/vectorstores" + "github.com/pinecone-io/go-pinecone/v4/pinecone" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/structpb" ) // testEmbedder is a mock embedder for testing @@ -228,6 +231,36 @@ func TestGetNameSpace(t *testing.T) { } } +func TestGetDocumentsFromMatchesStableOrder(t *testing.T) { + t.Parallel() + + store := Store{textKey: "text"} + match := func(text string, score float32) *pinecone.ScoredVector { + t.Helper() + metadata, err := structpb.NewStruct(map[string]any{"text": text}) + require.NoError(t, err) + return &pinecone.ScoredVector{ + Vector: &pinecone.Vector{Metadata: metadata}, + Score: score, + } + } + + docs, err := store.getDocumentsFromMatches(&pinecone.QueryVectorsResponse{ + Matches: []*pinecone.ScoredVector{ + match("The color of the chair beside the desk is beige.", 0.81), + match("The color of the desk is orange.", 0.81), + match("The color of the lamp beside the desk is black.", 0.90), + match("The color of the car is red.", 0.70), + }, + }, 0.8) + require.NoError(t, err) + require.Equal(t, []string{ + "The color of the lamp beside the desk is black.", + "The color of the chair beside the desk is beige.", + "The color of the desk is orange.", + }, []string{docs[0].PageContent, docs[1].PageContent, docs[2].PageContent}) +} + func TestGetScoreThreshold(t *testing.T) { t.Parallel() diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr index 6833154f9..d484a7aa4 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterInClause.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 168033 +492 168040 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,15 +16,15 @@ Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:43:52 GMT +Date: Sun, 06 Sep 2026 05:50:31 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 151 +Openai-Processing-Ms: 103 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-6868bd775b-jwdnd +Via: envoy-router-canary-749cf59fd5-4k4ch X-Content-Type-Options: nosniff X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 @@ -34,7 +34,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999941 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_3d4ea4f7dc774ed7848079de70ed4ed4 +X-Request-Id: req_0b72d396521644a2a3081898d417db5d { "object": "list", @@ -7756,7 +7756,7 @@ X-Request-Id: req_3d4ea4f7dc774ed7848079de70ed4ed4 "total_tokens": 55 } } -278 34450 +278 34442 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,15 +7773,15 @@ Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:44:06 GMT +Date: Sun, 06 Sep 2026 05:50:45 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 175 +Openai-Processing-Ms: 67 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-canary-659cfbdff-fjvrc +Via: envoy-router-796b65995-j5kk9 X-Content-Type-Options: nosniff X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 @@ -7791,7 +7791,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999991 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_a1823c6a576c49d1a8517ffcccfe7f1b +X-Request-Id: req_02a28f9764564449a2dd84413da51627 { "object": "list", @@ -9345,7 +9345,7 @@ X-Request-Id: req_a1823c6a576c49d1a8517ffcccfe7f1b "total_tokens": 9 } } -991 1736 +991 1706 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9353,17 +9353,17 @@ Content-Length: 789 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK -Content-Length: 911 +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 881 Access-Control-Expose-Headers: X-Request-ID Access-Control-Expose-Headers: CF-Ray Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:44:09 GMT +Date: Sun, 06 Sep 2026 05:50:48 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 461 +Openai-Processing-Ms: 468 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare @@ -9376,19 +9376,19 @@ X-Ratelimit-Remaining-Requests: 29999 X-Ratelimit-Remaining-Tokens: 149999865 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_8d30b2de67b64e77a958cd4ac8f40db0 +X-Request-Id: req_a3713138d456441f84b544857c93c310 { - "id": "chatcmpl-E96uukMEL9pGENSzYmLgZVGiurSFN", + "id": "chatcmpl-EL0486d3jT3rHNDKnpZjAyQiLyMR1", "object": "chat.completion", - "created": 1785840248, + "created": 1788673848, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "In the kitchen, the lamp beside the desk is black. In the office, the lamp beside the desk is orange.", + "content": "The lamp in the office is orange, and the lamp in the kitchen is black.", "refusal": null, "annotations": [] }, @@ -9398,8 +9398,8 @@ X-Request-Id: req_8d30b2de67b64e77a958cd4ac8f40db0 ], "usage": { "prompt_tokens": 132, - "completion_tokens": 24, - "total_tokens": 156, + "completion_tokens": 17, + "total_tokens": 149, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 @@ -9412,5 +9412,5 @@ X-Request-Id: req_8d30b2de67b64e77a958cd4ac8f40db0 } }, "service_tier": "default", - "system_fingerprint": "fp_28f6c54d57" + "system_fingerprint": "fp_642c59d8b6" } diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr index a2b664a80..bc516de88 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithMetadataFilterNotSelected.httprr @@ -1,5 +1,5 @@ httprr trace v1 -492 168033 +492 168032 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,15 +16,15 @@ Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:44:16 GMT +Date: Sun, 06 Sep 2026 05:50:31 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 127 +Openai-Processing-Ms: 102 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-6868bd775b-6w5bd +Via: envoy-router-796b65995-7l6xm X-Content-Type-Options: nosniff X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 @@ -34,7 +34,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999941 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_b9aa11841c964d09ad6eaf083bc3bf8c +X-Request-Id: req_b2515d0957294e7b94aaba5225591747 { "object": "list", @@ -7756,7 +7756,7 @@ X-Request-Id: req_b9aa11841c964d09ad6eaf083bc3bf8c "total_tokens": 55 } } -278 34450 +278 34443 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -7773,15 +7773,15 @@ Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:44:30 GMT +Date: Sun, 06 Sep 2026 05:50:47 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 89 +Openai-Processing-Ms: 93 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-canary-7bb6646df6-m6dws +Via: envoy-router-7d54c87895-r7kv9 X-Content-Type-Options: nosniff X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 @@ -7791,7 +7791,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999991 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_59abbb4c53b545d0b29d5ce8e5a31a58 +X-Request-Id: req_a360fd1e52f847998c34c3bfc76f821b { "object": "list", @@ -9345,7 +9345,7 @@ X-Request-Id: req_59abbb4c53b545d0b29d5ce8e5a31a58 "total_tokens": 9 } } -1737 1907 +1737 1820 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9353,17 +9353,17 @@ Content-Length: 1534 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is yellow.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003epatio\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ebedroom\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK -Content-Length: 1080 +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is yellow.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003epatio\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ebedroom\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 995 Access-Control-Expose-Headers: X-Request-ID Access-Control-Expose-Headers: CF-Ray Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:44:34 GMT +Date: Sun, 06 Sep 2026 05:50:49 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 1477 +Openai-Processing-Ms: 426 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare @@ -9376,19 +9376,19 @@ X-Ratelimit-Remaining-Requests: 29999 X-Ratelimit-Remaining-Tokens: 149999750 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_0d6e00be4a344e31830732f7c0714304 +X-Request-Id: req_8b54798130484de0823eba8d21e36978 { - "id": "chatcmpl-E96vIS1sDgYnIHT3mus47yc59WgIX", + "id": "chatcmpl-EL049CleO0vKYNnR3Sgv0p6gf7Q6t", "object": "chat.completion", - "created": 1785840272, + "created": 1788673849, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "In the kitchen, the lamp beside the desk is black. \nIn the sitting room, the lamp beside the desk is purple. \nIn the patio, the lamp beside the desk is yellow. \nIn the bedroom, the lamp beside the desk is blue. \nIn the office, the lamp beside the desk is orange.", + "content": "The lamp in the patio is yellow. \nThe lamp in the bedroom is blue. \nThe lamp in the office is orange. \nThe lamp in the kitchen is black. \nThe lamp in the sitting room is purple.", "refusal": null, "annotations": [] }, @@ -9398,8 +9398,8 @@ X-Request-Id: req_0d6e00be4a344e31830732f7c0714304 ], "usage": { "prompt_tokens": 247, - "completion_tokens": 65, - "total_tokens": 312, + "completion_tokens": 45, + "total_tokens": 292, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 @@ -9412,5 +9412,5 @@ X-Request-Id: req_0d6e00be4a344e31830732f7c0714304 } }, "service_tier": "default", - "system_fingerprint": "fp_ea5819d2b4" + "system_fingerprint": "fp_ef5528ec1b" } diff --git a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr index 532ee1e72..e4ee9b1ed 100644 --- a/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/pinecone/testdata/TestPineconeAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 168112 +441 168110 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -16,15 +16,15 @@ Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:43:29 GMT +Date: Sun, 06 Sep 2026 05:50:31 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 146 +Openai-Processing-Ms: 82 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-6868bd775b-sq58h +Via: envoy-router-796b65995-z4tfd X-Content-Type-Options: nosniff X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 @@ -34,7 +34,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999954 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_2a57143182644fe6ab0750774d4622c6 +X-Request-Id: req_c2e94c4d669e42358ec6824a4e17fbb5 { "object": "list", @@ -7773,15 +7773,15 @@ Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:43:43 GMT +Date: Sun, 06 Sep 2026 05:50:47 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 76 +Openai-Processing-Ms: 93 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-78b795c79f-vzmw5 +Via: envoy-router-7d54c87895-gbvbk X-Content-Type-Options: nosniff X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 @@ -7791,7 +7791,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999986 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_84619f4b06894879bd2f4129295d2eec +X-Request-Id: req_23b02d34c2624b41bea046d3d1924c75 { "object": "list", @@ -9345,7 +9345,7 @@ X-Request-Id: req_84619f4b06894879bd2f4129295d2eec "total_tokens": 12 } } -1051 1709 +1051 1742 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -9353,17 +9353,17 @@ Content-Length: 849 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the house is blue.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors is each piece of furniture next to the desk?\nHelpful Answer:"}]}HTTP/2.0 200 OK -Content-Length: 884 +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the house is blue.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors is each piece of furniture next to the desk?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 917 Access-Control-Expose-Headers: X-Request-ID Access-Control-Expose-Headers: CF-Ray Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Tue, 04 Aug 2026 10:43:46 GMT +Date: Sun, 06 Sep 2026 05:50:49 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 399 +Openai-Processing-Ms: 418 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare @@ -9376,19 +9376,19 @@ X-Ratelimit-Remaining-Requests: 29999 X-Ratelimit-Remaining-Tokens: 149999850 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_6e767c9c888540338dd240a6a257dca9 +X-Request-Id: req_13b508d2c8cf44c58cb34c8387dec4b9 { - "id": "chatcmpl-E96uYlcCSTv3ROvwdYKuigYXAIMbt", + "id": "chatcmpl-EL049p6rmQlOPCQpA0fV6PCu1lVVd", "object": "chat.completion", - "created": 1785840226, + "created": 1788673849, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "The lamp beside the desk is black, and the chair beside the desk is beige.", + "content": "The chair beside the desk is beige, the lamp beside the desk is black, and the color of the desk is orange.", "refusal": null, "annotations": [] }, @@ -9398,8 +9398,8 @@ X-Request-Id: req_6e767c9c888540338dd240a6a257dca9 ], "usage": { "prompt_tokens": 138, - "completion_tokens": 17, - "total_tokens": 155, + "completion_tokens": 25, + "total_tokens": 163, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 @@ -9412,5 +9412,5 @@ X-Request-Id: req_6e767c9c888540338dd240a6a257dca9 } }, "service_tier": "default", - "system_fingerprint": "fp_92a3cedc90" + "system_fingerprint": "fp_973a2ed1e3" } From 80c34844d90ec17726d6d26ec016761ed9310ffc Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Sun, 6 Sep 2026 19:52:32 +0300 Subject: [PATCH 337/618] refactor: update test descriptions to improve clarity and consistency --- internal/httprr/README.md | 11 +-- llms/anthropic/thinking_top_p_wire_test.go | 16 +-- .../bedrockclient/thinking_top_p_test.go | 18 ++-- llms/openai/effort_with_tools_test.go | 98 +++++++++---------- llms/openai/thinking_top_p_wire_test.go | 18 ++-- llms/reasoning/models_dev_drift_test.go | 70 ++++++------- 6 files changed, 112 insertions(+), 119 deletions(-) diff --git a/internal/httprr/README.md b/internal/httprr/README.md index 494c94020..3cb6e7f09 100644 --- a/internal/httprr/README.md +++ b/internal/httprr/README.md @@ -234,21 +234,14 @@ go test ./... -httprecord="TestOpenAI.*" ### Recording Through a Gateway -The Google AI helper in `llms/googleai/googleai_test.go` reaches the vendor -through whatever base URL `GOOGLE_BASE_URL` names, so its fixtures can be -re-recorded with a proxy key when no direct vendor key is at hand. The cache -tests in the same package build their own recorders and ignore the variable, so -re-recording those still needs a direct vendor key: +The Google AI helper in `llms/googleai/googleai_test.go` reaches the vendor through whatever base URL `GOOGLE_BASE_URL` names, so its fixtures can be re-recorded with a proxy key when no direct vendor key is at hand. The cache tests in the same package build their own recorders and ignore the variable, so re-recording those still needs a direct vendor key: ```bash GOOGLE_API_KEY= GOOGLE_BASE_URL=https://gateway.example/gemini \ go test ./llms/googleai/ -httprecord=. -run TestGoogleAIWithTools ``` -The recorded request still carries the vendor URL, because the rewrite happens -below the recorder. Proxy-added `X-Litellm-*` response headers are scrubbed, one -of which reports the key's accumulated spend; `TestRecordingsCarryNoProxyHeaders` -fails if any reaches `testdata/`. +The recorded request still carries the vendor URL, because the rewrite happens below the recorder. Proxy-added `X-Litellm-*` response headers are scrubbed, one of which reports the key's accumulated spend; `TestRecordingsCarryNoProxyHeaders` fails if any reaches `testdata/`. ### Running with Recorded Data diff --git a/llms/anthropic/thinking_top_p_wire_test.go b/llms/anthropic/thinking_top_p_wire_test.go index 7d33a1cf3..bf1715907 100644 --- a/llms/anthropic/thinking_top_p_wire_test.go +++ b/llms/anthropic/thinking_top_p_wire_test.go @@ -28,21 +28,21 @@ func TestThinkingKeepsTopPAboveTheFloor(t *testing.T) { wantTopP any wantTemp any }{ - {"бюджет: top_p выше порога вытесняет служебную температуру", "claude-sonnet-4-5", + {"budget: top_p above the floor displaces the pinned temperature", "claude-sonnet-4-5", budget(llms.WithTopP(0.97)), 0.97, nil}, - {"бюджет: ровно порог", "claude-sonnet-4-5", + {"budget: exactly at the floor", "claude-sonnet-4-5", budget(llms.WithTopP(0.95)), 0.95, nil}, - {"бюджет: ниже порога снимается, температура остаётся", "claude-sonnet-4-5", + {"budget: below the floor is stripped, temperature stays", "claude-sonnet-4-5", budget(llms.WithTopP(0.5)), nil, 1.0}, - {"бюджет: вызывающий задал оба — побеждает температура", "claude-sonnet-4-5", + {"budget: caller set both — temperature wins", "claude-sonnet-4-5", budget(llms.WithTopP(0.97), llms.WithTemperature(0.3)), nil, 1.0}, - {"бюджет: без top_p служебная температура на месте", "claude-sonnet-4-5", + {"budget: without top_p the pinned temperature stays", "claude-sonnet-4-5", budget(), nil, 1.0}, - {"4.6 на бюджетном пути: top_p выше порога доезжает", "claude-opus-4-6", + {"4.6 on the budget path: top_p above the floor reaches the wire", "claude-opus-4-6", adaptive(llms.WithTopP(0.97)), 0.97, nil}, - {"4.6 на бюджетном пути: ниже порога снимается", "claude-opus-4-6", + {"4.6 on the budget path: below the floor is stripped", "claude-opus-4-6", adaptive(llms.WithTopP(0.5)), nil, 1.0}, - {"модель без сэмплинга не получает ни того ни другого", "claude-sonnet-5", + {"model without sampling gets neither", "claude-sonnet-5", adaptive(llms.WithTopP(0.97)), nil, nil}, } { t.Run(tc.name, func(t *testing.T) { diff --git a/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go b/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go index c19ce5dd5..b45b5331f 100644 --- a/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go +++ b/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go @@ -18,11 +18,11 @@ func TestLegacyThinkingKeepsTopPAboveTheFloor(t *testing.T) { temp float64 want float64 }{ - {"выше порога доезжает", "anthropic.claude-sonnet-4-5-v1:0", 0.97, 0, 0.97}, - {"вызывающий задал оба — top_p уходит", "anthropic.claude-sonnet-4-5-v1:0", 0.97, 0.3, 0}, - {"ровно порог доезжает", "anthropic.claude-sonnet-4-5-v1:0", 0.95, 0, 0.95}, - {"ниже порога снимается", "anthropic.claude-sonnet-4-5-v1:0", 0.5, 0, 0}, - {"модель без сэмплинга не получает", "anthropic.claude-sonnet-5-v1:0", 0.97, 0, 0}, + {"above the floor reaches the wire", "anthropic.claude-sonnet-4-5-v1:0", 0.97, 0, 0.97}, + {"caller set both — top_p is dropped", "anthropic.claude-sonnet-4-5-v1:0", 0.97, 0.3, 0}, + {"exactly at the floor reaches the wire", "anthropic.claude-sonnet-4-5-v1:0", 0.95, 0, 0.95}, + {"below the floor is stripped", "anthropic.claude-sonnet-4-5-v1:0", 0.5, 0, 0}, + {"model without sampling does not get it", "anthropic.claude-sonnet-5-v1:0", 0.97, 0, 0}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -44,10 +44,10 @@ func TestConverseThinkingKeepsTopPAboveTheFloor(t *testing.T) { temp *float64 want *float32 }{ - {"выше порога доезжает", "anthropic.claude-sonnet-4-5-v1:0", 0.97, nil, ptr(float32(0.97))}, - {"вызывающий задал оба — top_p уходит", "anthropic.claude-sonnet-4-5-v1:0", 0.97, ptr(0.3), nil}, - {"ниже порога снимается", "anthropic.claude-sonnet-4-5-v1:0", 0.5, nil, nil}, - {"модель без сэмплинга не получает", "anthropic.claude-sonnet-5-v1:0", 0.97, nil, nil}, + {"above the floor reaches the wire", "anthropic.claude-sonnet-4-5-v1:0", 0.97, nil, ptr(float32(0.97))}, + {"caller set both — top_p is dropped", "anthropic.claude-sonnet-4-5-v1:0", 0.97, ptr(0.3), nil}, + {"below the floor is stripped", "anthropic.claude-sonnet-4-5-v1:0", 0.5, nil, nil}, + {"model without sampling does not get it", "anthropic.claude-sonnet-5-v1:0", 0.97, nil, nil}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index a29b5a8fe..fa67a95ce 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -61,34 +61,34 @@ func TestEffortAndToolsOnTheWire(t *testing.T) { want string absent bool }{ - {"5.6 с инструментами и уровнем деградирует до none", "gpt-5.6-sol", + {"5.6 with tools and a level degrades to none", "gpt-5.6-sol", []llms.CallOption{tools, high}, `"reasoning_effort":"none"`, false}, - {"5.6 с инструментами без просьбы всё равно шлёт none", "gpt-5.6-sol", + {"5.6 with tools and no request still sends none", "gpt-5.6-sol", []llms.CallOption{tools}, `"reasoning_effort":"none"`, false}, - {"5.6 без инструментов сохраняет уровень", "gpt-5.6-sol", + {"5.6 without tools keeps the level", "gpt-5.6-sol", []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, - {"5.5 с инструментами не шлёт поле", "gpt-5.5", + {"5.5 with tools omits the field", "gpt-5.5", []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, - {"5.4-nano с инструментами не шлёт поле", "gpt-5.4-nano", + {"5.4-nano with tools omits the field", "gpt-5.4-nano", []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, - {"5.5 без инструментов сохраняет уровень", "gpt-5.5", + {"5.5 without tools keeps the level", "gpt-5.5", []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, - {"5.2 с инструментами сохраняет уровень", "gpt-5.2", + {"5.2 with tools keeps the level", "gpt-5.2", []llms.CallOption{tools, high}, `"reasoning_effort":"high"`, false}, - {"gpt-4o не получает поле вовсе", "gpt-4o", + {"gpt-4o never gets the field", "gpt-4o", []llms.CallOption{high}, `"reasoning_effort"`, true}, - {"gpt-4o с инструментами тоже не получает", "gpt-4o", + {"gpt-4o with tools also omits it", "gpt-4o", []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() body := bodyForCall(t, tc.model, tc.opts...) if got := strings.Contains(body, tc.want); got == tc.absent { - verb := "не содержит" + verb := "does not contain" if tc.absent { - verb = "содержит" + verb = "contains" } - t.Errorf("тело запроса %s %s\nтело: %s", verb, tc.want, body) + t.Errorf("request body %s %s\nbody: %s", verb, tc.want, body) } }) } @@ -104,84 +104,84 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { want string absent bool }{ - {"бюджет уходит вместо эффорта", "dashscope/qwen3.8-max", + {"budget is sent instead of effort", "dashscope/qwen3.8-max", llms.WithReasoning(llms.ReasoningLow, 4096), `"thinking_budget":4096`, false}, - {"эффорт при бюджете не уходит", "dashscope/qwen3.8-max", + {"effort is omitted when a budget is set", "dashscope/qwen3.8-max", llms.WithReasoning(llms.ReasoningLow, 4096), `"reasoning_effort"`, true}, - {"без бюджета уходит эффорт", "dashscope/qwen3.8-max", + {"without a budget, effort is sent", "dashscope/qwen3.8-max", llms.WithReasoning(llms.ReasoningLow, 0), `"reasoning_effort":"low"`, false}, - {"без бюджета поля бюджета нет", "dashscope/qwen3.8-max", + {"without a budget, the budget field is absent", "dashscope/qwen3.8-max", llms.WithReasoning(llms.ReasoningLow, 0), `"thinking_budget"`, true}, - {"3.7 тоже берёт бюджет", "dashscope/qwen3.7-plus", + {"3.7 also takes a budget", "dashscope/qwen3.7-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen-plus берёт бюджет", "dashscope/qwen-plus", + {"qwen-plus takes a budget", "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen-flash берёт бюджет", "dashscope/qwen-flash", + {"qwen-flash takes a budget", "dashscope/qwen-flash", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen3-max берёт бюджет", "dashscope/qwen3-max", + {"qwen3-max takes a budget", "dashscope/qwen3-max", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen3-vl-plus берёт бюджет", "dashscope/qwen3-vl-plus", + {"qwen3-vl-plus takes a budget", "dashscope/qwen3-vl-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen3-vl-flash берёт бюджет", "dashscope/qwen3-vl-flash", + {"qwen3-vl-flash takes a budget", "dashscope/qwen3-vl-flash", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen3-next берёт бюджет", "dashscope/qwen3-next-80b-a3b-thinking", + {"qwen3-next takes a budget", "dashscope/qwen3-next-80b-a3b-thinking", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"qwen-turbo берёт бюджет", "dashscope/qwen-turbo", + {"qwen-turbo takes a budget", "dashscope/qwen-turbo", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"открытые веса VL берут бюджет", "dashscope/qwen3-vl-30b-a3b", + {"open-weight VL takes a budget", "dashscope/qwen3-vl-30b-a3b", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"крупные открытые веса VL тоже", "dashscope/qwen3-vl-235b-a22b", + {"large open-weight VL does too", "dashscope/qwen3-vl-235b-a22b", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"недумающий next бюджета не получает", "dashscope/qwen3-next-80b-a3b-instruct", + {"non-thinking next does not get a budget", "dashscope/qwen3-next-80b-a3b-instruct", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"флаг остаётся вместе с бюджетом", "dashscope/qwen-plus", + {"the flag stays alongside the budget", "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"enable_thinking":true`, false}, - {"гость glm-5.2 берёт бюджет", "dashscope/glm-5.2", + {"guest glm-5.2 takes a budget", "dashscope/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"снимок поколения glm-5.2 тоже", "dashscope/glm-5.2-fast-preview", + {"glm-5.2 generation snapshot does too", "dashscope/glm-5.2-fast-preview", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"гость glm-5.1 берёт бюджет", "dashscope/glm-5.1", + {"guest glm-5.1 takes a budget", "dashscope/glm-5.1", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"гость kimi берёт бюджет", "dashscope/kimi-k2.7-code", + {"guest kimi takes a budget", "dashscope/kimi-k2.7-code", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"гость deepseek-v4 берёт бюджет", "dashscope/deepseek-v4-pro", + {"guest deepseek-v4 takes a budget", "dashscope/deepseek-v4-pro", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"датированный снимок deepseek-v4 тоже", "dashscope/deepseek-v4-flash-0731", + {"dated deepseek-v4 snapshot does too", "dashscope/deepseek-v4-flash-0731", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"у гостя эффорт при бюджете не уходит", "dashscope/glm-5.2", + {"guest omits effort when a budget is set", "dashscope/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"reasoning_effort"`, true}, - {"deepseek-v3.2 бюджета не получает", "dashscope/deepseek-v3.2", + {"deepseek-v3.2 does not get a budget", "dashscope/deepseek-v3.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"гость без имени двери бюджета не получает", "glm-5.2", + {"guest without a gateway name does not get a budget", "glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"голый kimi бюджета не получает", "kimi-k2.7-code", + {"bare kimi does not get a budget", "kimi-k2.7-code", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"голый deepseek-v4 бюджета не получает", "deepseek-v4-pro", + {"bare deepseek-v4 does not get a budget", "deepseek-v4-pro", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"голый qwen дверь по-прежнему узнаёт", "qwen-plus", + {"bare qwen still matches the gateway", "qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, - {"glm на своей двери бюджета не получает", "zai/glm-5.2", + {"glm on its own gateway does not get a budget", "zai/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"kimi на своей двери бюджета не получает", "moonshot/kimi-k2.7-code", + {"kimi on its own gateway does not get a budget", "moonshot/kimi-k2.7-code", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"glm через openrouter бюджета не получает", "openrouter/z-ai/glm-5.2", + {"glm via openrouter does not get a budget", "openrouter/z-ai/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"deepseek на своей двери бюджета не получает", "deepseek/deepseek-v4-pro", + {"deepseek on its own gateway does not get a budget", "deepseek/deepseek-v4-pro", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"чужой хост бюджета не получает", "openrouter/qwen/qwen3.7-plus", + {"a different host does not get a budget", "openrouter/qwen/qwen3.7-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"не qwen бюджета не получает", "gpt-5.2", + {"non-qwen does not get a budget", "gpt-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() body := bodyForCall(t, tc.model, llms.WithMaxTokens(8000), tc.opt) if got := strings.Contains(body, tc.want); got == tc.absent { - verb := "не содержит" + verb := "does not contain" if tc.absent { - verb = "содержит" + verb = "contains" } - t.Errorf("тело запроса %s %s\nтело: %s", verb, tc.want, body) + t.Errorf("request body %s %s\nbody: %s", verb, tc.want, body) } }) } diff --git a/llms/openai/thinking_top_p_wire_test.go b/llms/openai/thinking_top_p_wire_test.go index 84e953ff8..a42b3840e 100644 --- a/llms/openai/thinking_top_p_wire_test.go +++ b/llms/openai/thinking_top_p_wire_test.go @@ -17,17 +17,17 @@ func TestClaudeThinkingKeepsTopPAboveTheFloor(t *testing.T) { want string absent bool }{ - {"Claude держит top_p выше порога", "claude-sonnet-4-5", + {"Claude keeps top_p above the floor", "claude-sonnet-4-5", []llms.CallOption{llms.WithTopP(0.97)}, `"top_p":0.97`, false}, - {"Claude держит ровно порог", "claude-sonnet-4-5", + {"Claude keeps top_p exactly at the floor", "claude-sonnet-4-5", []llms.CallOption{llms.WithTopP(0.95)}, `"top_p":0.95`, false}, - {"Claude снимает ниже порога", "claude-sonnet-4-5", + {"Claude strips top_p below the floor", "claude-sonnet-4-5", []llms.CallOption{llms.WithTopP(0.5)}, `"top_p"`, true}, - {"вызывающий задал оба — top_p уходит", "claude-sonnet-4-5", + {"caller set both — top_p is dropped", "claude-sonnet-4-5", []llms.CallOption{llms.WithTopP(0.97), llms.WithTemperature(0.3)}, `"top_p"`, true}, - {"модель без сэмплинга не получает top_p", "claude-sonnet-5", + {"model without sampling does not get top_p", "claude-sonnet-5", []llms.CallOption{llms.WithTopP(0.97)}, `"top_p"`, true}, - {"reasoning-линейка OpenAI по-прежнему теряет top_p", "gpt-5.4", + {"OpenAI reasoning family still drops top_p", "gpt-5.4", []llms.CallOption{llms.WithTopP(0.97)}, `"top_p"`, true}, } { t.Run(tc.name, func(t *testing.T) { @@ -37,11 +37,11 @@ func TestClaudeThinkingKeepsTopPAboveTheFloor(t *testing.T) { }, tc.opts...) body := bodyForCall(t, tc.model, opts...) if got := strings.Contains(body, tc.want); got == tc.absent { - verb := "не содержит" + verb := "does not contain" if tc.absent { - verb = "содержит" + verb = "contains" } - t.Errorf("тело запроса %s %s\nтело: %s", verb, tc.want, body) + t.Errorf("request body %s %s\nbody: %s", verb, tc.want, body) } }) } diff --git a/llms/reasoning/models_dev_drift_test.go b/llms/reasoning/models_dev_drift_test.go index c6ac92226..d05848855 100644 --- a/llms/reasoning/models_dev_drift_test.go +++ b/llms/reasoning/models_dev_drift_test.go @@ -11,37 +11,37 @@ import ( // disagreement is a hypothesis: add the entry with its reason, and change the // tables only when a vendor probe says so. var knownDrift = map[string]string{ - "google/gemini-2.5-flash-image": "картиночный маршрут: эффорт вызывает отказ Gemini", - "google/gemini-3-pro-image": "картиночный маршрут", - "google/gemini-3-pro-image-preview": "картиночный маршрут", - "google/gemini-3.1-flash-image": "картиночный маршрут", - "google/gemini-3.1-flash-image-preview": "картиночный маршрут", - "google/gemini-3.1-flash-lite-image": "картиночный маршрут", - "google-vertex/gemini-3-pro-image": "картиночный маршрут", - "google-vertex/gemini-3.1-flash-image": "картиночный маршрут", - "google/gemini-3.1-flash-tts-preview": "речевой маршрут: 400 Thinking level is not supported", - "google/gemini-omni-flash-preview": "не чат: 400 от вендора", - "google/deep-research-preview-04-2026": "маршрут не обслуживается", - "google/deep-research-max-preview-04-2026": "маршрут не обслуживается", - "openai/gpt-5.2-chat-latest": "чат-вариант: вендор отвечает 404", - "openai/gpt-realtime-2.1": "не чат: This is not a chat model", - "amazon-bedrock/qwen.qwen3-32b-v1:0": "думает только в стриме по просьбе, а предикат отвечает на вопрос о голом вызове", - - "amazon-bedrock/deepseek.v3-v1:0": "имени нет на Bedrock: The provided model identifier is invalid; линейка V3 замерена как нерассуждающая", - - "alibaba/qvq-max": "не измерено", - "alibaba/qwen3-omni-flash": "не измерено", - "alibaba/qwen3-vl-235b-a22b": "не измерено", - "alibaba/qwen3-vl-30b-a3b": "не измерено", - "alibaba/qwen3-max": "записи расходятся между собой: контроль дал ноль, коммерческий гибрид дал 3095 символов по просьбе", - "amazon-bedrock/qwen.qwen3-coder-next": "не измерено", - "amazon-bedrock/writer.palmyra-x4-v1:0": "не измерено", - "amazon-bedrock/writer.palmyra-x5-v1:0": "не измерено", - "amazon-bedrock/nvidia.nemotron-nano-12b-v2": "не измерено", - "amazon-bedrock/nvidia.nemotron-nano-9b-v2": "не измерено", - "amazon-bedrock/openai.gpt-oss-safeguard-120b": "не измерено: кандидат в не-чатовые поверхности", - "amazon-bedrock/openai.gpt-oss-safeguard-20b": "не измерено: кандидат в не-чатовые поверхности", - "google-vertex/qwen/qwen3-235b-a22b-instruct-2507-maas": "не измерено", + "google/gemini-2.5-flash-image": "image route: effort is rejected by Gemini", + "google/gemini-3-pro-image": "image route", + "google/gemini-3-pro-image-preview": "image route", + "google/gemini-3.1-flash-image": "image route", + "google/gemini-3.1-flash-image-preview": "image route", + "google/gemini-3.1-flash-lite-image": "image route", + "google-vertex/gemini-3-pro-image": "image route", + "google-vertex/gemini-3.1-flash-image": "image route", + "google/gemini-3.1-flash-tts-preview": "speech route: 400 Thinking level is not supported", + "google/gemini-omni-flash-preview": "not chat: vendor returns 400", + "google/deep-research-preview-04-2026": "route is not served", + "google/deep-research-max-preview-04-2026": "route is not served", + "openai/gpt-5.2-chat-latest": "chat variant: vendor returns 404", + "openai/gpt-realtime-2.1": "not chat: This is not a chat model", + "amazon-bedrock/qwen.qwen3-32b-v1:0": "thinks only in a stream when asked, but the predicate answers the question about a bare call", + + "amazon-bedrock/deepseek.v3-v1:0": "name is not on Bedrock: The provided model identifier is invalid; the V3 line was measured as non-reasoning", + + "alibaba/qvq-max": "not measured", + "alibaba/qwen3-omni-flash": "not measured", + "alibaba/qwen3-vl-235b-a22b": "not measured", + "alibaba/qwen3-vl-30b-a3b": "not measured", + "alibaba/qwen3-max": "records disagree: control produced zero, the commercial hybrid produced 3095 characters when asked", + "amazon-bedrock/qwen.qwen3-coder-next": "not measured", + "amazon-bedrock/writer.palmyra-x4-v1:0": "not measured", + "amazon-bedrock/writer.palmyra-x5-v1:0": "not measured", + "amazon-bedrock/nvidia.nemotron-nano-12b-v2": "not measured", + "amazon-bedrock/nvidia.nemotron-nano-9b-v2": "not measured", + "amazon-bedrock/openai.gpt-oss-safeguard-120b": "not measured: candidate for a non-chat surface", + "amazon-bedrock/openai.gpt-oss-safeguard-20b": "not measured: candidate for a non-chat surface", + "google-vertex/qwen/qwen3-235b-a22b-instruct-2507-maas": "not measured", } type snapshotModel struct { @@ -71,13 +71,13 @@ func (m snapshotModel) claimsBudget() bool { // An entry records a divergence measured against the vendor, with the reason. var knownEffortDrift = map[string]string{ - "xai/grok-4.20-multi-agent-0309": "вендор не обслуживает multi-agent на chat completions: " + - "«Multi Agent requests are not allowed on chat completions», замер 02.09.2026", + "xai/grok-4.20-multi-agent-0309": "vendor does not serve multi-agent on chat completions: " + + "\"Multi Agent requests are not allowed on chat completions\", measured 2026-09-02", } var knownBudgetDrift = map[string]string{ - "qwen3-max": "снимок бюджета не объявляет, вендор его исполняет: голый вызов даёт 9166 " + - "символов размышления против 285 при thinking_budget 100, замер 03.09.2026", + "qwen3-max": "snapshot does not declare a budget, the vendor honors it: a bare call produces 9166 " + + "thinking characters versus 285 with thinking_budget 100, measured 2026-09-03", } func TestModelsDevBudgetDrift(t *testing.T) { From c0a0692a9a17acba26b1324efd8346c25c5f3ca6 Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Sun, 6 Sep 2026 19:53:57 +0300 Subject: [PATCH 338/618] feat(openai): add API key handling and tests for OpenAI-compatible providers - Introduced `APIKeyRequiredBaseURLs` to define public providers requiring an API key. - Implemented `RequiresAPIKey` function to check if a base URL needs a key. - Added tests for API key requirements and client behavior with local backends. - Updated documentation to clarify API key usage for known providers. - Enhanced `setHeaders` method to omit empty tokens for requests. --- llms/openai/apikey.go | 148 ++++++++++++++++++ llms/openai/apikey_test.go | 115 ++++++++++++++ llms/openai/doc.go | 6 + .../internal/openaiclient/openaiclient.go | 10 +- .../openaiclient/openaiclient_test.go | 19 +++ llms/openai/llm.go | 2 +- llms/openai/openaillm_option.go | 4 +- 7 files changed, 298 insertions(+), 6 deletions(-) create mode 100644 llms/openai/apikey.go create mode 100644 llms/openai/apikey_test.go diff --git a/llms/openai/apikey.go b/llms/openai/apikey.go new file mode 100644 index 000000000..57d8ab8b9 --- /dev/null +++ b/llms/openai/apikey.go @@ -0,0 +1,148 @@ +package openai + +import ( + "net/url" + "strings" + + "github.com/vxcontrol/langchaingo/llms/openai/internal/openaiclient" +) + +// APIKeyRequiredBaseURLs lists documented OpenAI-compatible API base URLs of +// public providers that require an API key. Local and self-hosted backends +// (vLLM, Ollama, llama.cpp, SGLang, LiteLLM on a private host, etc.) are not +// listed and may be used without a key. +// +// Matching uses the hostname of these URLs (and Azure host suffixes), so +// common variants such as a trailing slash or an extra /v1 still require a key. +// An empty base URL is treated as the default OpenAI endpoint. +var APIKeyRequiredBaseURLs = []string{ + // OpenAI (default and data-residency regional endpoints). + "https://api.openai.com/v1", + "https://us.api.openai.com/v1", + "https://eu.api.openai.com/v1", + "https://au.api.openai.com/v1", + "https://ca.api.openai.com/v1", + "https://jp.api.openai.com/v1", + "https://in.api.openai.com/v1", + "https://sg.api.openai.com/v1", + "https://kr.api.openai.com/v1", + "https://gb.api.openai.com/v1", + "https://ae.api.openai.com/v1", + + // PentAGI custom / aggregator backends (from project documentation). + "https://openrouter.ai/api/v1", + "https://api.deepinfra.com/v1/openai", + "https://opencode.ai/zen/go/v1", + "https://api.novita.ai/openai", + "https://api.atlascloud.ai/v1", + "https://api.orcarouter.ai/v1", + "https://api.x.ai/v1", + "https://api.deepseek.com", + "https://api.z.ai/api/paas/v4", + "https://api.z.ai/api/coding/paas/v4", + "https://open.bigmodel.cn/api/paas/v4", + "https://api.moonshot.ai/v1", + "https://api.moonshot.cn/v1", + "https://dashscope-us.aliyuncs.com/compatible-mode/v1", + "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", + "https://dashscope.aliyuncs.com/compatible-mode/v1", + "https://api.minimax.io/v1", + "https://integrate.api.nvidia.com/v1", + "https://api.hcnsec.cn/v1", + "https://ollama.com/v1", + + // Additional public OpenAI-compatible providers. + "https://api.groq.com/openai/v1", + "https://api.together.ai/v1", + "https://api.together.xyz/v1", + "https://api.fireworks.ai/inference/v1", + "https://api.cerebras.ai/v1", + "https://api.sambanova.ai/v1", + "https://api.mistral.ai/v1", + "https://api.perplexity.ai", + "https://api.studio.nebius.ai/v1", + "https://api.tokenfactory.nebius.com/v1", + "https://router.huggingface.co/v1", + "https://models.github.ai/inference", + "https://models.inference.ai.azure.com", + "https://generativelanguage.googleapis.com/v1beta/openai", + "https://ai-gateway.vercel.sh/v1", + "https://api.siliconflow.cn/v1", + "https://api.siliconflow.com/v1", + "https://api-inference.modelscope.cn/v1", + "https://ark.cn-beijing.volces.com/api/v3", + "https://api.minimaxi.com/v1", + "https://api.cohere.ai/compatibility/v1", + "https://api.cohere.com/compatibility/v1", + "https://api.hyperbolic.xyz/v1", + "https://api.lambda.ai/v1", + "https://api.lambdalabs.com/v1", + "https://api.friendli.ai/serverless/v1", + "https://api.scaleway.ai/v1", + "https://inference.baseten.co/v1", + "https://api.venice.ai/api/v1", + "https://zenmux.ai/api/v1", +} + +// apiKeyRequiredHostSuffixes matches tenant-specific and regional hosts that +// cannot be listed as a single static URL (Azure OpenAI / Azure AI Foundry) +// and future OpenAI data-residency regions. +var apiKeyRequiredHostSuffixes = []string{ + ".api.openai.com", + ".openai.azure.com", + ".cognitiveservices.azure.com", + ".services.ai.azure.com", + ".openai.azure.us", + ".openai.azure.cn", +} + +var apiKeyRequiredHosts map[string]struct{} + +func init() { + apiKeyRequiredHosts = make(map[string]struct{}, len(APIKeyRequiredBaseURLs)) + for _, raw := range APIKeyRequiredBaseURLs { + if host := hostnameFromURL(raw); host != "" { + apiKeyRequiredHosts[host] = struct{}{} + } + } +} + +// RequiresAPIKey reports whether the given base URL (and API type) belongs to a +// public OpenAI-compatible provider that requires an API key. Local and +// self-hosted backends such as vLLM do not. +func RequiresAPIKey(baseURL string, apiType APIType) bool { + if openaiclient.IsAzure(openaiclient.APIType(apiType)) { + return true + } + if strings.TrimSpace(baseURL) == "" { + return true + } + host := hostnameFromURL(baseURL) + if host == "" { + return false + } + if _, ok := apiKeyRequiredHosts[host]; ok { + return true + } + for _, suffix := range apiKeyRequiredHostSuffixes { + if host == strings.TrimPrefix(suffix, ".") || strings.HasSuffix(host, suffix) { + return true + } + } + return false +} + +func hostnameFromURL(raw string) string { + raw = strings.TrimSpace(raw) + if raw == "" { + return "" + } + if !strings.Contains(raw, "://") { + raw = "https://" + raw + } + u, err := url.Parse(raw) + if err != nil { + return "" + } + return strings.ToLower(u.Hostname()) +} diff --git a/llms/openai/apikey_test.go b/llms/openai/apikey_test.go new file mode 100644 index 000000000..5f694664d --- /dev/null +++ b/llms/openai/apikey_test.go @@ -0,0 +1,115 @@ +package openai + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestRequiresAPIKey_ListedProviders(t *testing.T) { + t.Parallel() + + for _, raw := range APIKeyRequiredBaseURLs { + require.Truef(t, RequiresAPIKey(raw, APITypeOpenAI), "listed URL must require a key: %s", raw) + require.Truef(t, RequiresAPIKey(raw+"/", APITypeOpenAI), "trailing slash must still require a key: %s", raw) + } +} + +func TestRequiresAPIKey_VariantsAndLocalBackends(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + baseURL string + apiType APIType + required bool + }{ + {name: "empty defaults to openai", baseURL: "", required: true}, + {name: "whitespace defaults to openai", baseURL: " ", required: true}, + {name: "openai without version path", baseURL: "https://api.openai.com", required: true}, + {name: "openai with extra path", baseURL: "https://api.openai.com/v1/chat", required: true}, + {name: "deepseek with v1 alias", baseURL: "https://api.deepseek.com/v1", required: true}, + {name: "novita v3 openai path", baseURL: "https://api.novita.ai/v3/openai", required: true}, + {name: "openrouter host only", baseURL: "https://openrouter.ai/api/v1/", required: true}, + {name: "azure resource host", baseURL: "https://my-resource.openai.azure.com", required: true}, + {name: "azure cognitive services", baseURL: "https://my-resource.cognitiveservices.azure.com", required: true}, + {name: "azure ai foundry", baseURL: "https://my-resource.services.ai.azure.com/models", required: true}, + {name: "azure api type ignores url", baseURL: "http://127.0.0.1:8000/v1", apiType: APITypeAzure, required: true}, + {name: "azure ad api type ignores url", baseURL: "http://127.0.0.1:8000/v1", apiType: APITypeAzureAD, required: true}, + {name: "vllm localhost", baseURL: "http://127.0.0.1:8000/v1", required: false}, + {name: "vllm custom host", baseURL: "http://vllm:8000/v1", required: false}, + {name: "ollama local", baseURL: "http://localhost:11434/v1", required: false}, + {name: "llamacpp", baseURL: "http://10.0.0.5:8080/v1", required: false}, + {name: "litellm private proxy", baseURL: "http://litellm-proxy:4000", required: false}, + {name: "scheme-less local host", baseURL: "192.168.1.10:8000/v1", required: false}, + {name: "lookalike openai host", baseURL: "https://api.openai.com.attacker.example/v1", required: false}, + {name: "baseten model apis", baseURL: "https://inference.baseten.co/v1", required: true}, + {name: "venice ai", baseURL: "https://api.venice.ai/api/v1", required: true}, + {name: "zenmux", baseURL: "https://zenmux.ai/api/v1", required: true}, + // Shared Cloudflare host must not require a key: Workers AI embeds + // account IDs in the path and the same host serves unrelated APIs. + {name: "cloudflare shared host", baseURL: "https://api.cloudflare.com/client/v4/accounts/abc/ai/v1", required: false}, + // Scaleway dedicated inference uses a per-deployment UUID host. + {name: "scaleway dedicated uuid host", baseURL: "https://01234567-89ab-cdef-0123-456789abcdef.ifr.fr-par.scaleway.com/v1", required: false}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + require.Equal(t, tt.required, RequiresAPIKey(tt.baseURL, tt.apiType)) + }) + } +} + +func TestNewClient_AllowsEmptyTokenForLocalBackends(t *testing.T) { + t.Setenv(tokenEnvVarName, "") + t.Setenv(baseURLEnvVarName, "") + t.Setenv(baseAPIBaseEnvVarName, "") + + opts, cli, err := newClient(WithToken(""), WithBaseURL("http://127.0.0.1:8000/v1")) + require.NoError(t, err) + require.NotNil(t, opts) + require.NotNil(t, cli) + require.Empty(t, opts.token) +} + +func TestNewClient_RequiresTokenForKnownProviders(t *testing.T) { + t.Setenv(tokenEnvVarName, "") + t.Setenv(baseURLEnvVarName, "") + t.Setenv(baseAPIBaseEnvVarName, "") + + t.Run("default openai endpoint", func(t *testing.T) { + _, _, err := newClient(WithToken("")) + require.ErrorIs(t, err, ErrMissingToken) + }) + + t.Run("explicit openai url", func(t *testing.T) { + _, _, err := newClient(WithToken(""), WithBaseURL("https://api.openai.com/v1")) + require.ErrorIs(t, err, ErrMissingToken) + }) + + t.Run("openrouter", func(t *testing.T) { + _, _, err := newClient(WithToken(""), WithBaseURL("https://openrouter.ai/api/v1")) + require.ErrorIs(t, err, ErrMissingToken) + }) + + t.Run("azure api type", func(t *testing.T) { + _, _, err := newClient( + WithToken(""), + WithAPIType(APITypeAzure), + WithModel("gpt-4"), + WithEmbeddingModel("text-embedding-3-small"), + WithBaseURL("http://127.0.0.1:8000/v1"), + ) + require.ErrorIs(t, err, ErrMissingToken) + }) +} + +func TestHostnameFromURL(t *testing.T) { + t.Parallel() + + require.Equal(t, "api.openai.com", hostnameFromURL("https://api.openai.com/v1/")) + require.Equal(t, "api.openai.com", hostnameFromURL("API.OPENAI.COM/v1")) + require.Equal(t, "127.0.0.1", hostnameFromURL("http://127.0.0.1:8000/v1")) + require.Empty(t, hostnameFromURL("")) +} diff --git a/llms/openai/doc.go b/llms/openai/doc.go index fdca77745..a7432330a 100644 --- a/llms/openai/doc.go +++ b/llms/openai/doc.go @@ -24,4 +24,10 @@ // llms.WithMaxTokens(100), // openai.WithLegacyMaxTokensField(), // Forces use of max_tokens field // ) +// +// # API Keys +// +// An API key is required only when the base URL belongs to a known public +// OpenAI-compatible provider (see APIKeyRequiredBaseURLs). Local servers such +// as vLLM, Ollama, llama.cpp, and SGLang can be used without a key. package openai diff --git a/llms/openai/internal/openaiclient/openaiclient.go b/llms/openai/internal/openaiclient/openaiclient.go index 0f9035b51..ce4d78333 100644 --- a/llms/openai/internal/openaiclient/openaiclient.go +++ b/llms/openai/internal/openaiclient/openaiclient.go @@ -192,10 +192,12 @@ func IsAzure(apiType APIType) bool { func (c *Client) setHeaders(req *http.Request) { req.Header.Set("Content-Type", "application/json") - if c.apiType == APITypeOpenAI || c.apiType == APITypeAzureAD { - req.Header.Set("Authorization", "Bearer "+c.token) - } else { - req.Header.Set("api-key", c.token) + if c.token != "" { + if c.apiType == APITypeOpenAI || c.apiType == APITypeAzureAD { + req.Header.Set("Authorization", "Bearer "+c.token) + } else { + req.Header.Set("api-key", c.token) + } } if c.organization != "" { req.Header.Set("OpenAI-Organization", c.organization) diff --git a/llms/openai/internal/openaiclient/openaiclient_test.go b/llms/openai/internal/openaiclient/openaiclient_test.go index 5da4f4d71..5d1529433 100644 --- a/llms/openai/internal/openaiclient/openaiclient_test.go +++ b/llms/openai/internal/openaiclient/openaiclient_test.go @@ -366,6 +366,25 @@ func TestSanitizeHTTPError(t *testing.T) { }) } +func TestSetHeadersOmitsEmptyToken(t *testing.T) { + t.Parallel() + + client, err := New("", "gpt-3.5-turbo", "http://127.0.0.1:8000/v1", "", APITypeOpenAI, "", nil, "", nil, false, false, false) + require.NoError(t, err) + + req, err := http.NewRequest(http.MethodPost, "http://127.0.0.1:8000/v1/chat/completions", http.NoBody) + require.NoError(t, err) + + client.setHeaders(req) + assert.Empty(t, req.Header.Get("Authorization")) + assert.Empty(t, req.Header.Get("api-key")) + assert.Equal(t, "application/json", req.Header.Get("Content-Type")) + + client.token = "secret" + client.setHeaders(req) + assert.Equal(t, "Bearer secret", req.Header.Get("Authorization")) +} + type mockHTTPClient struct { doFunc func(req *http.Request) (*http.Response, error) } diff --git a/llms/openai/llm.go b/llms/openai/llm.go index d8802df59..87bf78d5d 100644 --- a/llms/openai/llm.go +++ b/llms/openai/llm.go @@ -42,7 +42,7 @@ func newClient(opts ...Option) (*options, *openaiclient.Client, error) { } } - if len(options.token) == 0 { + if len(options.token) == 0 && RequiresAPIKey(options.baseURL, options.apiType) { return options, nil, ErrMissingToken } diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index cd2d76958..b64b0e74f 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -66,7 +66,9 @@ type ResponseFormatJSONSchemaProperty = openaiclient.ResponseFormatJSONSchemaPro var ResponseFormatJSON = &ResponseFormat{Type: "json_object"} //nolint:gochecknoglobals // WithToken passes the OpenAI API token to the client. If not set, the token -// is read from the OPENAI_API_KEY environment variable. +// is read from the OPENAI_API_KEY environment variable. A token is required +// only for known public OpenAI-compatible providers; local backends such as +// vLLM may be used without one. func WithToken(token string) Option { return func(opts *options) { opts.token = token From f791fc167dd57271e4b5f46adb2b66249afb5536 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 01:16:15 +0300 Subject: [PATCH 339/618] test(openai): assert header absence and cover the api-key door The header guard omits both Authorization and api-key on an empty token, but the test built the client with APITypeOpenAI, so the api-key branch never ran, and Header.Get returns "" for an absent header as well as one set to the empty string. Both halves are now table cases, and absence is asserted through Header.Values so an empty value fails. PAGI-260 Co-Authored-By: Claude Opus 5 --- .../openaiclient/openaiclient_test.go | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/llms/openai/internal/openaiclient/openaiclient_test.go b/llms/openai/internal/openaiclient/openaiclient_test.go index 5d1529433..e67de8be2 100644 --- a/llms/openai/internal/openaiclient/openaiclient_test.go +++ b/llms/openai/internal/openaiclient/openaiclient_test.go @@ -369,20 +369,55 @@ func TestSanitizeHTTPError(t *testing.T) { func TestSetHeadersOmitsEmptyToken(t *testing.T) { t.Parallel() - client, err := New("", "gpt-3.5-turbo", "http://127.0.0.1:8000/v1", "", APITypeOpenAI, "", nil, "", nil, false, false, false) - require.NoError(t, err) - - req, err := http.NewRequest(http.MethodPost, "http://127.0.0.1:8000/v1/chat/completions", http.NoBody) - require.NoError(t, err) + newRequest := func(t *testing.T) *http.Request { + t.Helper() + req, err := http.NewRequest(http.MethodPost, "http://127.0.0.1:8000/v1/chat/completions", http.NoBody) + require.NoError(t, err) + return req + } - client.setHeaders(req) - assert.Empty(t, req.Header.Get("Authorization")) - assert.Empty(t, req.Header.Get("api-key")) - assert.Equal(t, "application/json", req.Header.Get("Content-Type")) + cases := []struct { + name string + apiType APIType + apiVersion string + tokenHeader string + tokenValue string + }{ + { + name: "a bearer door carries the token in Authorization", + apiType: APITypeOpenAI, + tokenHeader: "Authorization", + tokenValue: "Bearer secret", + }, + { + name: "an api-key door carries the token in api-key", + apiType: APITypeAzure, + apiVersion: "2023-05-15", + tokenHeader: "api-key", + tokenValue: "secret", + }, + } - client.token = "secret" - client.setHeaders(req) - assert.Equal(t, "Bearer secret", req.Header.Get("Authorization")) + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + client, err := New("", "gpt-3.5-turbo", "http://127.0.0.1:8000/v1", "", + tc.apiType, tc.apiVersion, nil, "", nil, false, false, false) + require.NoError(t, err) + + req := newRequest(t) + client.setHeaders(req) + assert.Empty(t, req.Header.Values("Authorization")) + assert.Empty(t, req.Header.Values("api-key")) + assert.Equal(t, "application/json", req.Header.Get("Content-Type")) + + client.token = "secret" + req = newRequest(t) + client.setHeaders(req) + assert.Equal(t, tc.tokenValue, req.Header.Get(tc.tokenHeader)) + }) + } } type mockHTTPClient struct { From 7185d9006443fa802aa848095d6c77a4a621c5a5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 01:16:23 +0300 Subject: [PATCH 340/618] test(pinecone): order equal scores against the expected output The fixture listed the two documents sharing a score in the order the assertion expected, and a stable sort keeps equal elements as they came, so the tie-break by text was never exercised. Swapping the two inputs makes the assertion depend on it. PAGI-260 Co-Authored-By: Claude Opus 5 --- vectorstores/pinecone/pinecone_unit_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vectorstores/pinecone/pinecone_unit_test.go b/vectorstores/pinecone/pinecone_unit_test.go index 285110bc0..6d797f26c 100644 --- a/vectorstores/pinecone/pinecone_unit_test.go +++ b/vectorstores/pinecone/pinecone_unit_test.go @@ -247,8 +247,8 @@ func TestGetDocumentsFromMatchesStableOrder(t *testing.T) { docs, err := store.getDocumentsFromMatches(&pinecone.QueryVectorsResponse{ Matches: []*pinecone.ScoredVector{ - match("The color of the chair beside the desk is beige.", 0.81), match("The color of the desk is orange.", 0.81), + match("The color of the chair beside the desk is beige.", 0.81), match("The color of the lamp beside the desk is black.", 0.90), match("The color of the car is red.", 0.70), }, From 53a7745ffb54939b764fcc1f42151185582dd5f6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:24:16 +0300 Subject: [PATCH 341/618] docs(openai): state the whole rule that decides whether a key is required The package doc named only the provider list, while the gate also demands a key for an empty base URL, for tenant-specific Azure and data-residency hosts, and for either Azure API type whatever the URL. A reader with an Azure resource found nothing in the list and expected a keyless client. PAGI-260 Co-Authored-By: Claude Opus 5 --- llms/openai/doc.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/llms/openai/doc.go b/llms/openai/doc.go index a7432330a..95269f798 100644 --- a/llms/openai/doc.go +++ b/llms/openai/doc.go @@ -27,7 +27,10 @@ // // # API Keys // -// An API key is required only when the base URL belongs to a known public -// OpenAI-compatible provider (see APIKeyRequiredBaseURLs). Local servers such -// as vLLM, Ollama, llama.cpp, and SGLang can be used without a key. +// An API key is required when the base URL is empty, meaning the default +// OpenAI endpoint; when its host is one of the known public OpenAI-compatible +// providers (see APIKeyRequiredBaseURLs); when the host sits in a +// tenant-specific Azure OpenAI or OpenAI data-residency zone; or whenever +// APIType is Azure or Azure AD, whatever the base URL. Local servers such as +// vLLM, Ollama, llama.cpp, and SGLang can be used without a key. package openai From c2f21dffd40cf7426eaafa825d77369fab060ae0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:33:37 +0300 Subject: [PATCH 342/618] fix(googleai): report no cache creation when nothing was cached A streamed answer whose usage carries promptTokenCount 100 and no cached content reported CacheCreationInputTokens 100, so a request that wrote nothing to any cache looked like it had cached the whole prompt. The whole-answer path of the same door returns 0 on that payload. PAGI-263 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 8 +++- llms/googleai/usage_stream_test.go | 66 ++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 1737c93d9..eb9abbfed 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -462,8 +462,12 @@ StreamEnd: metadata["PromptCachedTokens"] = int(lastUsageMetadata.CachedContentTokenCount) metadata["CacheReadInputTokens"] = int(lastUsageMetadata.CachedContentTokenCount) - metadata["CacheCreationInputTokens"] = max( - int(lastUsageMetadata.PromptTokenCount-lastUsageMetadata.CachedContentTokenCount), 0) + if lastUsageMetadata.CachedContentTokenCount > 0 { + metadata["CacheCreationInputTokens"] = max( + int(lastUsageMetadata.PromptTokenCount-lastUsageMetadata.CachedContentTokenCount), 0) + } else { + metadata["CacheCreationInputTokens"] = 0 + } } // Carry the finish reason so structured-output validation runs on a normal diff --git a/llms/googleai/usage_stream_test.go b/llms/googleai/usage_stream_test.go index 5c849e7ba..0497c0a6a 100644 --- a/llms/googleai/usage_stream_test.go +++ b/llms/googleai/usage_stream_test.go @@ -5,6 +5,7 @@ import ( "context" "io" "net/http" + "net/http/httptest" "testing" "github.com/stretchr/testify/assert" @@ -51,3 +52,68 @@ func TestAStreamedAnswerReportsCountersThatAddUp(t *testing.T) { info["PromptTokens"].(int)+info["CompletionTokens"].(int), "prompt plus completion must equal the total, as every other door reports it") } + +type uncachedUsageStream struct{} + +func (uncachedUsageStream) RoundTrip(r *http.Request) (*http.Response, error) { + const body = `data: {"candidates":[{"content":{"parts":[{"text":"sixty rooms are free"}],"role":"model"},` + + `"finishReason":"STOP","index":0}],"usageMetadata":{"promptTokenCount":100,` + + `"candidatesTokenCount":9,"totalTokenCount":109}}` + "\r\n\r\n" + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"text/event-stream"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestAnAnswerWithoutCachedContentReportsNoCacheCreation(t *testing.T) { + t.Parallel() + + t.Run("streamed", func(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: uncachedUsageStream{}})) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + info := resp.Choices[0].GenerationInfo + assert.Equal(t, 100, info["PromptTokens"]) + assert.Equal(t, 0, info["CacheReadInputTokens"]) + assert.Equal(t, 0, info["CacheCreationInputTokens"], + "nothing was written to a cache on this request") + }) + + t.Run("whole answer", func(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"candidates":[{"content":{"role":"model","parts":[{"text":"sixty rooms are free"}]},` + + `"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":100,` + + `"candidatesTokenCount":9,"totalTokenCount":109}}`)) + })) + defer server.Close() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithEndpoint(server.URL), + WithDefaultModel("gemini-2.5-flash")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, 0, resp.Choices[0].GenerationInfo["CacheCreationInputTokens"], + "the whole-answer path must agree with the streamed one on the same usage") + }) +} From 1eecb8f35e07ee4b9dcb85417b4c1e852916bb4d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:38:08 +0300 Subject: [PATCH 343/618] fix(openai): stop the stream producer when the consumer gives up The producer selected on the caller's context before every send, and the consumer left the range loop on a callback error without draining. With a context nobody cancels the producer parked on the send for the lifetime of the process, one goroutine per abandoned stream. It now runs on a context cancelled when the parse function returns, which covers every exit of the consumer, not only the callback error. PAGI-259 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 9 +++-- llms/openai/partial_stream_test.go | 49 +++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 804b76dee..ed29a9c49 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -710,12 +710,15 @@ func parseStreamingChatResponse( scanner.Buffer(make([]byte, 0, initialStreamBuffer), maxStreamLine) responseChan := make(chan StreamedChatResponsePayload) + producerCtx, stopProducer := context.WithCancel(ctx) + defer stopProducer() + go func() { defer close(responseChan) for scanner.Scan() { // Check if context is cancelled select { - case <-ctx.Done(): + case <-producerCtx.Done(): return default: } @@ -757,14 +760,14 @@ func parseStreamingChatResponse( // Non-blocking send with context check select { - case <-ctx.Done(): + case <-producerCtx.Done(): return case responseChan <- streamPayload: } } if err := scanner.Err(); err != nil { select { - case <-ctx.Done(): + case <-producerCtx.Done(): return case responseChan <- StreamedChatResponsePayload{Error: fmt.Errorf("error reading streaming response: %w", err)}: } diff --git a/llms/openai/partial_stream_test.go b/llms/openai/partial_stream_test.go index bc20b3c2e..0eb22a0af 100644 --- a/llms/openai/partial_stream_test.go +++ b/llms/openai/partial_stream_test.go @@ -6,7 +6,9 @@ import ( "io" "net/http" "net/http/httptest" + "runtime" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -116,3 +118,50 @@ func TestEveryStreamedChunkKindCarriesWhatArrivedWhenTheConsumerGivesUp(t *testi assert.Equal(t, "sixty rooms", resp.Choices[0].Content) }) } + +// Not parallel: it counts goroutines, and a neighbour running at the same time +// would change the count under it. +func TestAGivenUpStreamDoesNotLeaveItsProducerBehind(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + for _, text := range []string{"sixty ", "rooms ", "are free", "today", "and tomorrow"} { + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,`+ + `"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"`+text+`"},"finish_reason":null}]}`+"\n\n") + if f, ok := w.(http.Flusher); ok { + f.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + runtime.GC() + time.Sleep(50 * time.Millisecond) + before := runtime.NumGoroutine() + + delivered := 0 + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return errGaveUp + } + return nil + })) + require.ErrorIs(t, err, errGaveUp) + + http.DefaultClient.CloseIdleConnections() + deadline := time.Now().Add(3 * time.Second) + for runtime.NumGoroutine() > before && time.Now().Before(deadline) { + time.Sleep(20 * time.Millisecond) + } + assert.LessOrEqual(t, runtime.NumGoroutine(), before, + "the producer must stop once the consumer has given up, even on a context nobody cancels") +} From 1eaffad2cf17d767d857f6d620a947897c34a448 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:43:16 +0300 Subject: [PATCH 344/618] feat(googleai): carry the caller's tool choice to the wire The door converted tools into the request and stopped there: the whole package never mentioned ToolChoice, so a caller asking for "required" got a plain text answer with no function call and no error. The choice now goes out as a function calling config, a named tool as ANY over that name. PAGI-255 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 28 +++++++ llms/googleai/tool_choice_wire_test.go | 106 +++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 llms/googleai/tool_choice_wire_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index eb9abbfed..11e1d36f7 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -148,6 +148,9 @@ func (g *GoogleAI) GenerateContent( } config.Tools = tools } + if toolConfig := googleToolConfig(opts.ToolChoice); toolConfig != nil { + config.ToolConfig = toolConfig + } // Add safety settings config.SafetySettings = []*genai.SafetySetting{ @@ -735,6 +738,31 @@ func convertContent(content llms.MessageContent) (*genai.Content, error) { }, nil } +func googleToolConfig(choice any) *genai.ToolConfig { + var ( + mode genai.FunctionCallingConfigMode + allowed []string + ) + switch kind, name := llms.ClassifyToolChoice(choice); kind { + case llms.ToolChoiceNamed: + mode, allowed = genai.FunctionCallingConfigModeAny, []string{name} + case llms.ToolChoiceAny: + mode = genai.FunctionCallingConfigModeAny + case llms.ToolChoiceAuto: + mode = genai.FunctionCallingConfigModeAuto + case llms.ToolChoiceNone: + mode = genai.FunctionCallingConfigModeNone + case llms.ToolChoiceUnset: + return nil + } + return &genai.ToolConfig{ + FunctionCallingConfig: &genai.FunctionCallingConfig{ + Mode: mode, + AllowedFunctionNames: allowed, + }, + } +} + func convertTools(tools []llms.Tool) ([]*genai.Tool, error) { if len(tools) == 0 { return nil, nil diff --git a/llms/googleai/tool_choice_wire_test.go b/llms/googleai/tool_choice_wire_test.go new file mode 100644 index 000000000..cdd2245fa --- /dev/null +++ b/llms/googleai/tool_choice_wire_test.go @@ -0,0 +1,106 @@ +package googleai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestTheCallersToolChoiceReachesTheWire(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + choice any + mode string + allowed string + }{ + {name: "required becomes ANY", choice: "required", mode: `"mode":"ANY"`}, + {name: "auto becomes AUTO", choice: "auto", mode: `"mode":"AUTO"`}, + {name: "none becomes NONE", choice: "none", mode: `"mode":"NONE"`}, + { + name: "a named tool becomes ANY over that name", + choice: llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}}, + mode: `"mode":"ANY"`, + allowed: `"allowedFunctionNames":["get_weather"]`, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + var body string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"hi"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{}}`) + })) + defer server.Close() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithEndpoint(server.URL), + WithDefaultModel("gemini-2.5-flash")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "what is the weather?")}, + llms.WithTools(weatherTool()), llms.WithToolChoice(tc.choice)) + require.NoError(t, err) + + assert.Contains(t, body, `"toolConfig"`, "the door must send a tool config at all") + assert.Contains(t, body, tc.mode) + if tc.allowed != "" { + assert.Contains(t, body, tc.allowed) + } + }) + } +} + +func TestNoToolChoiceLeavesTheRequestAlone(t *testing.T) { + t.Parallel() + + var body string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"hi"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{}}`) + })) + defer server.Close() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithEndpoint(server.URL), + WithDefaultModel("gemini-2.5-flash")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "what is the weather?")}, + llms.WithTools(weatherTool())) + require.NoError(t, err) + + assert.NotContains(t, body, `"toolConfig"`, + "a caller who asked for nothing must not have a mode chosen for them") +} + +func weatherTool() []llms.Tool { + return []llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "report the weather in a city", + Parameters: map[string]any{ + "type": "object", + "properties": map[string]any{"city": map[string]any{"type": "string"}}, + }, + }, + }} +} From 940ae52ac3c9c354cd786d0855e74f919487c168 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:43:17 +0300 Subject: [PATCH 345/618] fix(mistral): give the model the callbacks handler the caller passed WithCallbacksHandler wrote into the client options and the constructor then assigned an empty handler unconditionally, so the option was read by nothing. The empty handler stays the default when no option is given. PAGI-255 Co-Authored-By: Claude Opus 5 --- llms/mistral/callbacks_handler_test.go | 33 ++++++++++++++++++++++++++ llms/mistral/mistralmodel.go | 7 +++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 llms/mistral/callbacks_handler_test.go diff --git a/llms/mistral/callbacks_handler_test.go b/llms/mistral/callbacks_handler_test.go new file mode 100644 index 000000000..9429b22c8 --- /dev/null +++ b/llms/mistral/callbacks_handler_test.go @@ -0,0 +1,33 @@ +package mistral + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/callbacks" +) + +type countingHandler struct{ callbacks.SimpleHandler } + +func TestTheCallersCallbacksHandlerReachesTheModel(t *testing.T) { + t.Parallel() + + handler := &countingHandler{} + llm, err := New(WithAPIKey("test"), WithCallbacksHandler(handler)) + require.NoError(t, err) + + assert.Same(t, handler, llm.CallbacksHandler, + "the handler the caller passed must be the one the model calls") +} + +func TestWithoutACallbacksHandlerTheModelKeepsTheEmptyOne(t *testing.T) { + t.Parallel() + + llm, err := New(WithAPIKey("test")) + require.NoError(t, err) + + assert.Equal(t, callbacks.SimpleHandler{}, llm.CallbacksHandler, + "the default stays the do-nothing handler") +} diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index 60593b51d..b7e8a1611 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -41,10 +41,15 @@ func New(opts ...Option) (*Model, error) { opt(options) } + handler := options.callbacksHandler + if handler == nil { + handler = callbacks.SimpleHandler{} + } + return &Model{ clientOptions: options, client: sdk.NewMistralClient(options.apiKey, options.endpoint, options.maxRetries, options.timeout), - CallbacksHandler: callbacks.SimpleHandler{}, + CallbacksHandler: handler, }, nil } From 9a1f8da8861f47cf6afcfaffff17f56b9a62f031 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:43:17 +0300 Subject: [PATCH 346/618] fix(huggingface): address the request with the model named by the call The request took the constructor's model even when the call named another one, so llms.WithModel reached neither the URL nor the body. The client's model becomes the default instead of the override. PAGI-255 Co-Authored-By: Claude Opus 5 --- llms/huggingface/call_model_test.go | 60 +++++++++++++++++++++++++++++ llms/huggingface/huggingfacellm.go | 7 +++- 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 llms/huggingface/call_model_test.go diff --git a/llms/huggingface/call_model_test.go b/llms/huggingface/call_model_test.go new file mode 100644 index 000000000..66ca8c3ed --- /dev/null +++ b/llms/huggingface/call_model_test.go @@ -0,0 +1,60 @@ +package huggingface + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestTheModelOfTheCallReachesTheRequest(t *testing.T) { + t.Parallel() + + var path string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + path = r.URL.Path + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `[{"generated_text":"hi"}]`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("gpt2")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithModel("meta-llama/Llama-3.1-8B-Instruct")) + require.NoError(t, err) + + assert.Contains(t, path, "meta-llama/Llama-3.1-8B-Instruct", + "the model named by the call must address the request, not the one from the constructor") +} + +func TestWithoutAModelOnTheCallTheConstructorsModelIsUsed(t *testing.T) { + t.Parallel() + + var path string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + path = r.URL.Path + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `[{"generated_text":"hi"}]`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("gpt2")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + + assert.Contains(t, path, "gpt2") +} diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 37c768a0d..235298b0a 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -43,7 +43,10 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten }() } - model := defaultModel + model := o.client.Model + if model == "" { + model = defaultModel + } opts := &llms.CallOptions{Model: &model} for _, opt := range options { opt(opts) @@ -53,7 +56,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten msg0 := messages[0] part := msg0.Parts[0] result, err := o.client.RunInference(ctx, &huggingfaceclient.InferenceRequest{ - Model: o.client.Model, + Model: opts.GetModel(), Prompt: part.(llms.TextContent).Text, Task: huggingfaceclient.InferenceTaskTextGeneration, Temperature: opts.GetTemperature(), From b62013bb0325d16275539cca2c2a65576fcf64e4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:48:38 +0300 Subject: [PATCH 347/618] fix(anthropic): carry the encrypted half of the reasoning on the primary door The block parser knew text, tool_use and thinking, so a response holding a redacted_thinking block failed the whole call with "unknown content type" and the caller lost the answer with it. The block is now parsed into the shared reasoning field and replayed to the vendor unchanged, as the vendor documents for multi-turn tool use. PAGI-262 Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 18 +++- .../internal/anthropicclient/messages.go | 19 ++++ llms/anthropic/redacted_thinking_wire_test.go | 101 ++++++++++++++++++ 3 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 llms/anthropic/redacted_thinking_wire_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index b6917d453..3eb33e01a 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -381,6 +381,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* // According to Anthropic docs, there's ONE thinking block per response var reasoningContent strings.Builder var signature []byte + var redacted []byte for _, content := range result.Content { switch cv := content.(type) { @@ -389,15 +390,20 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* if len(cv.Signature) > 0 { signature = []byte(cv.Signature) } + case *anthropicclient.RedactedThinkingContent: + if cv.Data != "" { + redacted = append(redacted, []byte(cv.Data)...) + } } } // Create reasoning object var contentReasoning *reasoning.ContentReasoning - if reasoningContent.Len() > 0 || len(signature) > 0 { + if reasoningContent.Len() > 0 || len(signature) > 0 || len(redacted) > 0 { contentReasoning = &reasoning.ContentReasoning{ Content: reasoningContent.String(), Signature: signature, + Redacted: redacted, } } @@ -845,7 +851,15 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro if len(p.Reasoning.Signature) > 0 { thinkingBlock.Signature = string(p.Reasoning.Signature) } - message.Content = append(message.Content, thinkingBlock) + if p.Reasoning.Content != "" || len(p.Reasoning.Signature) > 0 { + message.Content = append(message.Content, thinkingBlock) + } + if len(p.Reasoning.Redacted) > 0 { + message.Content = append(message.Content, &anthropicclient.RedactedThinkingContent{ + Type: anthropicclient.EventTypeRedactedThinking, + Data: string(p.Reasoning.Redacted), + }) + } } for _, part := range msg.Parts { diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index c8fd78f6d..ded309199 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -49,6 +49,8 @@ const ( EventTypeText = "text" EventTypeToolUse = "tool_use" EventTypeThinking = "thinking" + + EventTypeRedactedThinking = "redacted_thinking" ) const ( @@ -172,6 +174,17 @@ type ThinkingContent struct { Signature string `json:"signature,omitempty"` } +// RedactedThinkingContent is reasoning the vendor encrypted. The data field is +// opaque and travels back to the vendor unchanged. +type RedactedThinkingContent struct { + Type string `json:"type"` + Data string `json:"data"` +} + +func (rtc RedactedThinkingContent) GetType() string { + return EventTypeRedactedThinking +} + func (tc ThinkingContent) GetType() string { return tc.Type } @@ -307,6 +320,12 @@ func parseContentBlock(raw []byte) (Content, error) { return nil, err } return thc, nil + case EventTypeRedactedThinking: + rtc := &RedactedThinkingContent{} + if err := json.Unmarshal(raw, rtc); err != nil { + return nil, err + } + return rtc, nil default: return nil, fmt.Errorf("unknown content type: %s\n%v", typeStruct.Type, string(raw)) //nolint:err113 } diff --git a/llms/anthropic/redacted_thinking_wire_test.go b/llms/anthropic/redacted_thinking_wire_test.go new file mode 100644 index 000000000..65b76f196 --- /dev/null +++ b/llms/anthropic/redacted_thinking_wire_test.go @@ -0,0 +1,101 @@ +package anthropic_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { + t.Parallel() + + const encrypted = "EqQBCgIYAhIM1gbcDa9GJwZA2b" + + t.Run("the answer survives a block the door cannot read", func(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_test","type":"message","role":"assistant",`+ + `"model":"claude-opus-4-6","content":[`+ + `{"type":"redacted_thinking","data":"`+encrypted+`"},`+ + `{"type":"text","text":"sixty rooms are free"}],`+ + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{llms.TextPart("how many rooms are free?")}, + }}, llms.WithMaxTokens(64)) + require.NoError(t, err, "a block the door cannot read must not cost the caller the answer") + require.Len(t, resp.Choices, 1) + + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning, "the encrypted half is still reasoning") + assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted)) + assert.False(t, resp.Choices[0].Reasoning.IsEmpty(), + "a turn carrying an encrypted thought is not an empty one") + }) + + t.Run("the block goes back to the vendor unchanged", func(t *testing.T) { + t.Parallel() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_test","type":"message","role":"assistant",`+ + `"model":"claude-opus-4-6","content":[{"type":"text","text":"ok"}],`+ + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: []byte(encrypted)}), + }}, + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, + }, llms.WithMaxTokens(64)) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(body, &payload)) + + var blocks []map[string]any + for _, m := range payload.Messages { + if m.Role == "assistant" { + blocks = append(blocks, m.Content...) + } + } + require.NotEmpty(t, blocks, "the assistant turn must reach the wire") + assert.Contains(t, blocks, map[string]any{"type": "redacted_thinking", "data": encrypted}, + "the encrypted thought goes back exactly as it came") + }) +} From bd442e7eff7653b58ffb64e36421bae9f6f9c54f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:50:52 +0300 Subject: [PATCH 348/618] fix(bedrock): carry the encrypted thought on the legacy path too The legacy content loop knew text, thinking and tool_use, so an encrypted block was dropped and the turn came back looking like a turn without thought, with nothing to replay. The Converse path on the same platform already carried it. Both directions now match Converse. PAGI-262 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 20 ++++- llms/bedrock/legacy_redacted_thinking_test.go | 77 +++++++++++++++++++ 2 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 llms/bedrock/legacy_redacted_thinking_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 5b27f74eb..9b66b11c6 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -323,6 +323,7 @@ func createAnthropicCompletion(ctx context.Context, var textContent string var reasoningContent string var signature []byte + var redacted []byte var toolCalls []llms.ToolCall for _, c := range output.Content { @@ -334,6 +335,10 @@ func createAnthropicCompletion(ctx context.Context, if len(c.Signature) > 0 { signature = []byte(c.Signature) } + case "redacted_thinking": + if c.Data != "" { + redacted = append(redacted, []byte(c.Data)...) + } case "tool_use": argumentsJSON, err := json.Marshal(c.Input) if err != nil { @@ -353,7 +358,7 @@ func createAnthropicCompletion(ctx context.Context, // Create single choice with all content choice := &llms.ContentChoice{ Content: textContent, - Reasoning: processReasoning(reasoningContent, signature), + Reasoning: processReasoning(reasoningContent, signature, redacted), ToolCalls: toolCalls, StopReason: output.StopReason, Truncated: llms.IsTruncated(output.StopReason), @@ -449,14 +454,15 @@ func applyAnthropicUsage(info map[string]any, usage anthropicUsage) { info["ReasoningTokens"] = int(usage.OutputTokensDetails.ThinkingTokens) } -func processReasoning(reasoningContent string, signature []byte) *reasoning.ContentReasoning { - if reasoningContent == "" && len(signature) == 0 { +func processReasoning(reasoningContent string, signature, redacted []byte) *reasoning.ContentReasoning { + if reasoningContent == "" && len(signature) == 0 && len(redacted) == 0 { return nil } return &reasoning.ContentReasoning{ Content: reasoningContent, Signature: signature, + Redacted: redacted, } } @@ -647,7 +653,7 @@ DoStream: func appendReasoning(reasoning *reasoning.ContentReasoning, reasoningContent string) *reasoning.ContentReasoning { if reasoning == nil { - return processReasoning(reasoningContent, nil) + return processReasoning(reasoningContent, nil, nil) } reasoning.Content += reasoningContent @@ -709,6 +715,12 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati } content = append(content, thinkingBlock) } + if len(message.Reasoning.Redacted) > 0 { + content = append(content, anthropicTextGenerationInputContent{ + Type: "redacted_thinking", + Data: string(message.Reasoning.Redacted), + }) + } } // Add regular content (text, tool_use, tool_result, etc.) content = append(content, getAnthropicInputContent(message)) diff --git a/llms/bedrock/legacy_redacted_thinking_test.go b/llms/bedrock/legacy_redacted_thinking_test.go new file mode 100644 index 000000000..69b30a5cf --- /dev/null +++ b/llms/bedrock/legacy_redacted_thinking_test.go @@ -0,0 +1,77 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestTheLegacyPathCarriesTheEncryptedThought(t *testing.T) { + t.Parallel() + + const ( + encrypted = "EqQBCgIYAhIM1gbcDa9GJwZA2b" + model = "anthropic.claude-sonnet-4-5-20250929-v1:0" + ) + + t.Run("it arrives with the answer", func(t *testing.T) { + t.Parallel() + + llm, _ := legacyLLMCapturing(t, `{"id":"x","type":"message","role":"assistant","model":"m",`+ + `"content":[{"type":"redacted_thinking","data":"`+encrypted+`"},`+ + `{"type":"text","text":"sixty rooms are free"}],"stop_reason":"end_turn",`+ + `"usage":{"input_tokens":1,"output_tokens":1}}`, bedrock.WithModel(model)) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning, + "a turn carrying an encrypted thought is not a turn without thought") + assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted)) + }) + + t.Run("it goes back to the vendor unchanged", func(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, `{"id":"x","type":"message","role":"assistant","model":"m",`+ + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",`+ + `"usage":{"input_tokens":1,"output_tokens":1}}`, bedrock.WithModel(model)) + + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: []byte(encrypted)}), + }}, + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, + }) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &payload)) + + var blocks []map[string]any + for _, m := range payload.Messages { + if m.Role == "assistant" { + blocks = append(blocks, m.Content...) + } + } + require.NotEmpty(t, blocks, "the assistant turn must reach the wire") + assert.Contains(t, blocks, map[string]any{"type": "redacted_thinking", "data": encrypted}, + "the encrypted thought goes back exactly as it came, as the Converse path already does") + }) +} From 2fdd45feede664ac5b62a3f63dcded4f8eccf7a2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 02:57:14 +0300 Subject: [PATCH 349/618] fix(reasoning): one model gets one way to disable thinking Two spellings of one model resolved to different disable wires. The name forms only stripped a platform prefix written with a dot, so zai-glm-5-2 missed every rule its bare name matches, and the magistral family was matched by that one prefix while the vendor also serves it as mistral-medium, mistral-small and mistral-vibe-cli. The new test reads the vendor listing already kept in testdata and requires every alias group to resolve to one wire, so a future listing that adds a spelling reddens instead of drifting. PAGI-258 Co-Authored-By: Claude Opus 5 --- llms/reasoning/alias_off_parity_test.go | 36 +++++++++++++++++++++++++ llms/reasoning/name.go | 17 ++++++++++++ llms/reasoning/off.go | 9 +++++-- 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 llms/reasoning/alias_off_parity_test.go diff --git a/llms/reasoning/alias_off_parity_test.go b/llms/reasoning/alias_off_parity_test.go new file mode 100644 index 000000000..7616911c4 --- /dev/null +++ b/llms/reasoning/alias_off_parity_test.go @@ -0,0 +1,36 @@ +package reasoning + +import ( + "fmt" + "sort" + "testing" +) + +func TestOneModelOneWayToDisableThinking(t *testing.T) { + t.Parallel() + + snapshot := readMistralListing(t) + + ids := make([]string, 0, len(snapshot)) + for id := range snapshot { + ids = append(ids, id) + } + sort.Strings(ids) + + var split []string + for _, id := range ids { + want := ResolveOff(id, ProviderOpenAI) + for _, alias := range snapshot[id].Aliases { + if _, known := snapshot[alias]; !known { + continue + } + if got := ResolveOff(alias, ProviderOpenAI); got != want { + split = append(split, fmt.Sprintf("%s -> %v, but its alias %s -> %v", id, want, alias, got)) + } + } + } + + if len(split) > 0 { + t.Fatalf("the vendor calls these one model, the library disables them differently:\n %v", split) + } +} diff --git a/llms/reasoning/name.go b/llms/reasoning/name.go index 68a83d652..26fc4075b 100644 --- a/llms/reasoning/name.go +++ b/llms/reasoning/name.go @@ -16,12 +16,29 @@ func modelSpellings(model string) []string { case bare == "": return nil case vendor == "": + if stripped, ok := stripDashWrittenVendor(bare); ok { + return []string{stripped, bare} + } return []string{bare} default: return []string{bare, vendor + "-" + bare} } } +// dashWrittenVendors are platform prefixes a vendor also publishes with a dash +// where splitPlatformPrefix only reads a dot. Adding one here must be backed by +// a vendor listing that names both spellings as one model. +var dashWrittenVendors = []string{"zai"} + +func stripDashWrittenVendor(model string) (string, bool) { + for _, vendor := range dashWrittenVendors { + if rest, ok := strings.CutPrefix(model, vendor+"-"); ok && rest != "" { + return rest, true + } + } + return "", false +} + func splitPlatformPrefix(model string) (vendor, rest string) { rest = model for { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 91cde2ec5..b5c600925 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -144,13 +144,18 @@ func offByOmission(model string) bool { return true } for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "magistral") { - return true + for _, family := range magistralSpellings { + if strings.HasPrefix(form, family) { + return true + } } } return false } +// magistralSpellings mirrors the alias group of magistral in testdata/mistral_models.json. +var magistralSpellings = []string{"magistral", "mistral-medium", "mistral-small", "mistral-vibe-cli"} + func disablesByThinkingObject(model string) bool { for _, form := range modelSpellings(model) { if hasGeneration(form, "minimax-m3") { From 936a2cc78ade1556b94bed910224467e0f426417 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 03:06:42 +0300 Subject: [PATCH 350/618] fix(bedrock): report every legacy counter as an int The doors wrapped two counters of three in int and left TotalTokens and the whole streaming path as the int32 the vendor sends, so a caller reading GenerationInfo["TotalTokens"].(int) got zero and false while the two neighbouring keys asserted cleanly. All four legacy families now agree with the Claude doors. PAGI-257 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_ai21.go | 6 +- .../internal/bedrockclient/provider_amazon.go | 8 +- .../internal/bedrockclient/provider_meta.go | 8 +- .../internal/bedrockclient/provider_nova.go | 8 +- llms/bedrock/legacy_counter_type_test.go | 112 ++++++++++++++++++ 5 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 llms/bedrock/legacy_counter_type_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index 892de99ca..d8d62df53 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -358,14 +358,14 @@ DoStream: // Set token counts if available if resp.Usage.PromptTokens > 0 { contentchoices[0].GenerationInfo["input_tokens"] = resp.Usage.PromptTokens - contentchoices[0].GenerationInfo["PromptTokens"] = resp.Usage.PromptTokens + contentchoices[0].GenerationInfo["PromptTokens"] = int(resp.Usage.PromptTokens) } if resp.Usage.CompletionTokens > 0 { contentchoices[0].GenerationInfo["output_tokens"] = resp.Usage.CompletionTokens - contentchoices[0].GenerationInfo["CompletionTokens"] = resp.Usage.CompletionTokens + contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.Usage.CompletionTokens) } if resp.Usage.PromptTokens > 0 || resp.Usage.CompletionTokens > 0 { - contentchoices[0].GenerationInfo["TotalTokens"] = resp.Usage.PromptTokens + resp.Usage.CompletionTokens + contentchoices[0].GenerationInfo["TotalTokens"] = int(resp.Usage.PromptTokens) + int(resp.Usage.CompletionTokens) } } } diff --git a/llms/bedrock/internal/bedrockclient/provider_amazon.go b/llms/bedrock/internal/bedrockclient/provider_amazon.go index c5984e942..bfb70b7b4 100644 --- a/llms/bedrock/internal/bedrockclient/provider_amazon.go +++ b/llms/bedrock/internal/bedrockclient/provider_amazon.go @@ -138,7 +138,7 @@ func createAmazonCompletion(ctx context.Context, // Standardized field names for cross-provider compatibility "PromptTokens": int(output.InputTextTokenCount), "CompletionTokens": int(result.TokenCount), - "TotalTokens": output.InputTextTokenCount + result.TokenCount, + "TotalTokens": int(output.InputTextTokenCount) + int(result.TokenCount), }, } } @@ -197,14 +197,14 @@ DoStream: // Set token counts if resp.InputTextTokenCount > 0 { contentchoices[0].GenerationInfo["input_tokens"] = resp.InputTextTokenCount - contentchoices[0].GenerationInfo["PromptTokens"] = resp.InputTextTokenCount + contentchoices[0].GenerationInfo["PromptTokens"] = int(resp.InputTextTokenCount) } if resp.OutputTextTokenCount > 0 { contentchoices[0].GenerationInfo["output_tokens"] = resp.OutputTextTokenCount - contentchoices[0].GenerationInfo["CompletionTokens"] = resp.OutputTextTokenCount + contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.OutputTextTokenCount) } if resp.InputTextTokenCount > 0 || resp.OutputTextTokenCount > 0 { - contentchoices[0].GenerationInfo["TotalTokens"] = resp.InputTextTokenCount + resp.OutputTextTokenCount + contentchoices[0].GenerationInfo["TotalTokens"] = int(resp.InputTextTokenCount) + int(resp.OutputTextTokenCount) } } } diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index ced08ed87..ece9cf1be 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -125,7 +125,7 @@ func createMetaCompletion(ctx context.Context, // Standardized field names for cross-provider compatibility "PromptTokens": int(output.PromptTokenCount), "CompletionTokens": int(output.GenerationTokenCount), - "TotalTokens": output.PromptTokenCount + output.GenerationTokenCount, + "TotalTokens": int(output.PromptTokenCount) + int(output.GenerationTokenCount), }, }, }, @@ -181,14 +181,14 @@ DoStream: // Set token counts if resp.PromptTokenCount > 0 { contentchoices[0].GenerationInfo["input_tokens"] = resp.PromptTokenCount - contentchoices[0].GenerationInfo["PromptTokens"] = resp.PromptTokenCount + contentchoices[0].GenerationInfo["PromptTokens"] = int(resp.PromptTokenCount) } if resp.GenerationTokenCount > 0 { contentchoices[0].GenerationInfo["output_tokens"] = resp.GenerationTokenCount - contentchoices[0].GenerationInfo["CompletionTokens"] = resp.GenerationTokenCount + contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.GenerationTokenCount) } if resp.PromptTokenCount > 0 || resp.GenerationTokenCount > 0 { - contentchoices[0].GenerationInfo["TotalTokens"] = resp.PromptTokenCount + resp.GenerationTokenCount + contentchoices[0].GenerationInfo["TotalTokens"] = int(resp.PromptTokenCount) + int(resp.GenerationTokenCount) } } } diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index f284d4d80..509e9c658 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -231,7 +231,7 @@ func createNovaCompletion(ctx context.Context, // Standardized field names for cross-provider compatibility "PromptTokens": int(output.Usage.InputTokens), "CompletionTokens": int(output.Usage.OutputTokens), - "TotalTokens": output.Usage.InputTokens + output.Usage.OutputTokens, + "TotalTokens": int(output.Usage.InputTokens) + int(output.Usage.OutputTokens), }, } } @@ -385,7 +385,7 @@ DoStream: // Check for message start (contains input tokens) if resp.MessageStart.Usage.InputTokens > 0 { contentchoices[0].GenerationInfo["input_tokens"] = resp.MessageStart.Usage.InputTokens - contentchoices[0].GenerationInfo["PromptTokens"] = resp.MessageStart.Usage.InputTokens + contentchoices[0].GenerationInfo["PromptTokens"] = int(resp.MessageStart.Usage.InputTokens) } // Check for message delta (contains stop reason and output tokens) @@ -395,10 +395,10 @@ DoStream: } if resp.MessageDelta.Usage.OutputTokens > 0 { contentchoices[0].GenerationInfo["output_tokens"] = resp.MessageDelta.Usage.OutputTokens - contentchoices[0].GenerationInfo["CompletionTokens"] = resp.MessageDelta.Usage.OutputTokens + contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.MessageDelta.Usage.OutputTokens) } if resp.MessageStart.Usage.InputTokens > 0 || resp.MessageDelta.Usage.OutputTokens > 0 { - contentchoices[0].GenerationInfo["TotalTokens"] = resp.MessageStart.Usage.InputTokens + resp.MessageDelta.Usage.OutputTokens + contentchoices[0].GenerationInfo["TotalTokens"] = int(resp.MessageStart.Usage.InputTokens) + int(resp.MessageDelta.Usage.OutputTokens) } } } diff --git a/llms/bedrock/legacy_counter_type_test.go b/llms/bedrock/legacy_counter_type_test.go new file mode 100644 index 000000000..52808fabd --- /dev/null +++ b/llms/bedrock/legacy_counter_type_test.go @@ -0,0 +1,112 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type counterCase struct { + name string + model string + whole string + chunks []string +} + +func legacyCounterFamilies() []counterCase { + return []counterCase{ + { + name: "amazon", + model: "amazon.titan-text-express-v1", + whole: `{"inputTextTokenCount":5,"results":[{"tokenCount":3,"outputText":"ok",` + + `"completionReason":"FINISH"}]}`, + chunks: []string{ + `{"outputText":"ok","index":0,"completionReason":"FINISH",` + + `"inputTextTokenCount":5,"outputTextTokenCount":3}`, + }, + }, + { + name: "meta", + model: "meta.llama3-70b-instruct-v1:0", + whole: `{"generation":"ok","prompt_token_count":5,"generation_token_count":3,"stop_reason":"stop"}`, + chunks: []string{ + `{"generation":"ok","stop_reason":"stop","prompt_token_count":5,"generation_token_count":3}`, + }, + }, + { + name: "nova", + model: "amazon.nova-pro-v1:0", + whole: `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":5,"outputTokens":3,"totalTokens":8}}`, + chunks: []string{ + `{"messageStart":{"role":"assistant","usage":{"inputTokens":5}}}`, + `{"contentBlockDelta":{"delta":{"text":"ok"}}}`, + `{"messageDelta":{"stopReason":"end_turn","usage":{"outputTokens":3}}}`, + }, + }, + } +} + +func TestEveryLegacyFamilyReportsCountersAsInt(t *testing.T) { + t.Parallel() + + counters := []string{"PromptTokens", "CompletionTokens", "TotalTokens"} + + for _, tc := range legacyCounterFamilies() { + t.Run(tc.name+"/whole answer", func(t *testing.T) { + t.Parallel() + + llm := truncationLLMWithBody(t, tc.whole, bedrock.WithModel(tc.model)) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + for _, key := range counters { + _, ok := resp.Choices[0].GenerationInfo[key].(int) + assert.True(t, ok, "%s must be an int, as the Claude doors report it, got %#v", + key, resp.Choices[0].GenerationInfo[key]) + } + }) + + t.Run(tc.name+"/streamed", func(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + for _, chunk := range tc.chunks { + writeLegacyChunk(t, w, enc, chunk) + } + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(tc.model)) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + for _, key := range counters { + value, present := resp.Choices[0].GenerationInfo[key] + if !present { + continue + } + _, ok := value.(int) + assert.True(t, ok, "%s must be an int on the streamed path too, got %#v", key, value) + } + }) + } +} From 132377faed205ad2241af26cc91d1e29acab65dd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 03:11:08 +0300 Subject: [PATCH 351/618] fix(bedrock): send a picture through Converse as a picture The Converse converter built only text and tool_use blocks and never read the message type, so a binary part fell into the text branch: the raw bytes went out as a text block and the mime type was dropped, while the legacy path of the same package built a real image block. A mime type Converse has no format for now fails before the network instead of travelling as text. PAGI-256 Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_image_test.go | 89 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 19 +++- 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 llms/bedrock/converse_image_test.go diff --git a/llms/bedrock/converse_image_test.go b/llms/bedrock/converse_image_test.go new file mode 100644 index 000000000..4177dddd9 --- /dev/null +++ b/llms/bedrock/converse_image_test.go @@ -0,0 +1,89 @@ +package bedrock_test + +import ( + "context" + "encoding/base64" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestConverseSendsAPictureAsAPicture(t *testing.T) { + t.Parallel() + + jpeg := []byte{0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10} + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},`+ + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{ + llms.TextPart("what is on this picture?"), + llms.BinaryPart("image/jpeg", jpeg), + }, + }}) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal([]byte(body), &payload)) + + var image map[string]any + for _, m := range payload.Messages { + for _, block := range m.Content { + if got, ok := block["image"].(map[string]any); ok { + image = got + } + } + } + require.NotNil(t, image, "the picture must reach the wire as an image block, not as text") + assert.Equal(t, "jpeg", image["format"], "the mime type decides the format the vendor is told") + + source, ok := image["source"].(map[string]any) + require.True(t, ok, "an image block carries its source") + assert.Equal(t, base64.StdEncoding.EncodeToString(jpeg), source["bytes"], + "the bytes travel unchanged, not as a text block full of replacement runes") +} + +func TestConverseRefusesAPictureItCannotName(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},`+ + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{llms.BinaryPart("image/heic", []byte{0x00, 0x01})}, + }}) + require.Error(t, err, "a format the vendor has no name for must fail before the network, not travel as text") +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 1b73afc6b..84644d967 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "maps" "slices" @@ -585,6 +586,9 @@ func (c *ConverseClient) addCachePointToMessages(messages []types.Message) { } // convertUserOrAssistantMessage converts user or assistant messages +// ErrUnsupportedImageFormat reports a MIME type Converse has no image format for. +var ErrUnsupportedImageFormat = errors.New("bedrock: unsupported image mime type") + func (c *ConverseClient) convertUserOrAssistantMessage(msg Message) (types.Message, error) { var role types.ConversationRole if msg.Role == llms.ChatMessageTypeHuman { @@ -595,8 +599,19 @@ func (c *ConverseClient) convertUserOrAssistantMessage(msg Message) (types.Messa var contentBlocks []types.ContentBlock - // Handle text content - if msg.Content != "" { + switch { + case msg.Type == AnthropicMessageTypeImage && msg.Content != "": + format := mimeTypeToFormat(msg.MimeType) + if format == "" { + return types.Message{}, fmt.Errorf("%w: %s", ErrUnsupportedImageFormat, msg.MimeType) + } + contentBlocks = append(contentBlocks, &types.ContentBlockMemberImage{ + Value: types.ImageBlock{ + Format: types.ImageFormat(format), + Source: &types.ImageSourceMemberBytes{Value: []byte(msg.Content)}, + }, + }) + case msg.Content != "": contentBlocks = append(contentBlocks, &types.ContentBlockMemberText{ Value: msg.Content, }) From 160f8974735e8ea90b6542db0254595cc5413725 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 03:31:54 +0300 Subject: [PATCH 352/618] fix(anthropic): keep tool-call arguments at the precision they arrived Tool-call input was decoded into a map with the default number handling and re-encoded on the way out, so every integer travelled through float64. An account id of 10000000000000001 reached the caller as 10000000000000000, and the same loss happened again when the call was replayed to the vendor. Decoding with UseNumber keeps the literal digits on all three paths: the answer, the assembled stream, and the replayed assistant turn. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 4 +- .../internal/anthropicclient/messages.go | 13 +- llms/anthropic/tool_args_precision_test.go | 128 ++++++++++++++++++ 3 files changed, 138 insertions(+), 7 deletions(-) create mode 100644 llms/anthropic/tool_args_precision_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 3eb33e01a..4698a3e62 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -880,7 +880,9 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro } var inputStruct map[string]interface{} - if err := json.Unmarshal([]byte(p.FunctionCall.Arguments), &inputStruct); err != nil { + dec := json.NewDecoder(strings.NewReader(p.FunctionCall.Arguments)) + dec.UseNumber() + if err := dec.Decode(&inputStruct); err != nil { err = fmt.Errorf("anthropic: failed to unmarshal tool call arguments: %w", err) return anthropicclient.ChatMessage{}, err } diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index ded309199..70470db6b 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -213,12 +213,13 @@ func (tuc *ToolUseContent) DecodeStream() error { return nil } - err := json.Unmarshal([]byte(tuc.rawStreamInput), &tuc.Input) - if err != nil { - return err - } + return decodeExactNumbers([]byte(tuc.rawStreamInput), &tuc.Input) +} - return nil +func decodeExactNumbers(data []byte, v any) error { + dec := json.NewDecoder(bytes.NewReader(data)) + dec.UseNumber() + return dec.Decode(v) } func (tuc ToolUseContent) GetType() string { @@ -310,7 +311,7 @@ func parseContentBlock(raw []byte) (Content, error) { return tc, nil case EventTypeToolUse: tuc := &ToolUseContent{} - if err := json.Unmarshal(raw, tuc); err != nil { + if err := decodeExactNumbers(raw, tuc); err != nil { return nil, err } return tuc, nil diff --git a/llms/anthropic/tool_args_precision_test.go b/llms/anthropic/tool_args_precision_test.go new file mode 100644 index 000000000..405e537d4 --- /dev/null +++ b/llms/anthropic/tool_args_precision_test.go @@ -0,0 +1,128 @@ +package anthropic_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +const bigToolArgument = "10000000000000001" + +func TestAnAnsweredToolCallKeepsEveryDigitTheVendorSent(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_test","type":"message","role":"assistant",`+ + `"model":"claude-opus-4-6","content":[`+ + `{"type":"tool_use","id":"toolu_1","name":"charge",`+ + `"input":{"account":`+bigToolArgument+`}}],`+ + `"stop_reason":"tool_use","usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "charge that account")}, + llms.WithMaxTokens(64)) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + require.Len(t, resp.Choices[0].ToolCalls, 1) + + assert.Contains(t, resp.Choices[0].ToolCalls[0].FunctionCall.Arguments, bigToolArgument) +} + +func TestAReplayedToolCallCarriesTheSameDigitsBack(t *testing.T) { + t.Parallel() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_test","type":"message","role":"assistant",`+ + `"model":"claude-opus-4-6","content":[{"type":"text","text":"done"}],`+ + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "charge that account"), + { + Role: llms.ChatMessageTypeAI, + Parts: []llms.ContentPart{llms.ToolCall{ + ID: "toolu_1", + Type: "function", + FunctionCall: &llms.FunctionCall{ + Name: "charge", + Arguments: `{"account":` + bigToolArgument + `}`, + }, + }}, + }, + llms.TextParts(llms.ChatMessageTypeHuman, "did it go through?"), + }, llms.WithMaxTokens(64)) + require.NoError(t, err) + + assert.Contains(t, string(body), bigToolArgument) +} + +func TestAStreamedToolCallKeepsTheDigitsItsDeltasSpelledOut(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, "event: message_start\ndata: {\"type\":\"message_start\",\"message\":"+ + "{\"id\":\"msg_1\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-opus-4-6\","+ + "\"content\":[],\"stop_reason\":null,\"usage\":{\"input_tokens\":1,\"output_tokens\":1}}}\n\n") + _, _ = io.WriteString(w, "event: content_block_start\ndata: {\"type\":\"content_block_start\","+ + "\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_1\","+ + "\"name\":\"charge\",\"input\":{}}}\n\n") + _, _ = io.WriteString(w, "event: content_block_delta\ndata: {\"type\":\"content_block_delta\","+ + "\"index\":0,\"delta\":{\"type\":\"input_json_delta\","+ + "\"partial_json\":\"{\\\"account\\\":"+bigToolArgument+"}\"}}\n\n") + _, _ = io.WriteString(w, "event: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\n") + _, _ = io.WriteString(w, "event: message_delta\ndata: {\"type\":\"message_delta\","+ + "\"delta\":{\"stop_reason\":\"tool_use\"},\"usage\":{\"output_tokens\":9}}\n\n") + _, _ = io.WriteString(w, "event: message_stop\ndata: {\"type\":\"message_stop\"}\n\n") + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + var streamed []string + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "charge that account")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.ToolCall.Arguments != "" { + streamed = append(streamed, chunk.ToolCall.Arguments) + } + return nil + })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + require.Len(t, resp.Choices[0].ToolCalls, 1) + + assert.Contains(t, resp.Choices[0].ToolCalls[0].FunctionCall.Arguments, bigToolArgument) + require.NotEmpty(t, streamed, "the door must hand the caller the call it assembled") + assert.Contains(t, streamed[len(streamed)-1], bigToolArgument) +} From 5667829606c704b134acf2b304a462258e6862e0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 03:46:31 +0300 Subject: [PATCH 353/618] test(bedrock): replay the cassettes without an AWS environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both bedrock test packages built their client from the ambient AWS chain, so a machine with no AWS credentials ran every test and failed it: the SDK went looking for an IMDS role, and embeddings failed earlier still on a missing region. A cassette on disk kept the httprr skip guard from firing, so the failure mode the guard exists to prevent was reached anyway. On replay the client now supplies its own static credentials and pins the region the cassettes were recorded against, so the outcome no longer depends on the developer's environment — including a developer whose AWS_REGION points somewhere else. Recording still uses the ambient chain. The bearer-token test additionally asks for the bearer scheme: SigV4 is first in the service resolver, so without a preference the test selected SigV4 and never exercised the token it was written for. Co-Authored-By: Claude Opus 5 --- embeddings/bedrock/bedrock_test.go | 9 ++++++--- llms/bedrock/bedrockllm_test.go | 24 +++++++++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/embeddings/bedrock/bedrock_test.go b/embeddings/bedrock/bedrock_test.go index 42a69985d..7984c746d 100644 --- a/embeddings/bedrock/bedrock_test.go +++ b/embeddings/bedrock/bedrock_test.go @@ -14,6 +14,8 @@ import ( "github.com/stretchr/testify/require" ) +const replayRegion = "us-east-1" + func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, error) { // Configure request scrubbing to remove dynamic AWS headers rr.ScrubReq(func(req *http.Request) error { @@ -37,9 +39,10 @@ func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, er // When replaying, provide fake credentials to avoid IMDS calls if !rr.Recording() { - cfgOpts = append(cfgOpts, config.WithCredentialsProvider( - &fakeCredentialsProvider{}, - )) + cfgOpts = append(cfgOpts, + config.WithRegion(replayRegion), + config.WithCredentialsProvider(&fakeCredentialsProvider{}), + ) } cfg, err := config.LoadDefaultConfig(context.Background(), cfgOpts...) diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index d0103921d..e69b30b66 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -35,7 +35,8 @@ func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, er } cfg, err := config.LoadDefaultConfig(context.Background(), - config.WithHTTPClient(httpClient)) + append([]func(*config.LoadOptions) error{config.WithHTTPClient(httpClient)}, + replayCredentials(rr)...)...) if err != nil { return nil, err } @@ -44,6 +45,19 @@ func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, er return client, nil } +const replayRegion = "us-east-1" + +func replayCredentials(rr *httprr.RecordReplay) []func(*config.LoadOptions) error { + if rr.Recording() { + return nil + } + return []func(*config.LoadOptions) error{ + config.WithRegion(replayRegion), + config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider( + "replay-access-key", "replay-secret-key", "")), + } +} + func TestAmazonOutputConverseAPI(t *testing.T) { //nolint:funlen ctx := t.Context() @@ -3124,7 +3138,7 @@ func TestCreateClientWithLongLeavingCredentials(t *testing.T) { secretKey := os.Getenv("AWS_SECRET_ACCESS_KEY") sessionToken := os.Getenv("AWS_SESSION_TOKEN") - opts := []func(*config.LoadOptions) error{ + opts := append([]func(*config.LoadOptions) error{ config.WithHTTPClient(httpClient), config.WithRegion(region), config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider( @@ -3132,7 +3146,7 @@ func TestCreateClientWithLongLeavingCredentials(t *testing.T) { secretKey, sessionToken, )), - } + }, replayCredentials(rr)...) cfg, err := config.LoadDefaultConfig(ctx, opts...) if err != nil { @@ -3187,6 +3201,9 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { region := os.Getenv("AWS_REGION") bearerToken := os.Getenv("AWS_BEDROCK_BEARER_TOKEN") + if !rr.Recording() { + region, bearerToken = replayRegion, "replay-bearer-token" + } opts := []func(*config.LoadOptions) error{ config.WithHTTPClient(httpClient), @@ -3196,6 +3213,7 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { Value: bearerToken, }, }), + config.WithAuthSchemePreference("httpBearerAuth"), } cfg, err := config.LoadDefaultConfig(ctx, opts...) From 3eb57d588c939520f3fb51af2f416991a5099790 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 03:52:32 +0300 Subject: [PATCH 354/618] ci: drop the unused pull-requests write grant from the coverage job The coverage job checks out, downloads artifacts, renders the report into the step summary and uploads it. No step calls the pull request API, so the write grant only widened what a compromised action in that job could reach. Co-Authored-By: Claude Opus 5 --- .github/workflows/ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e37caf57b..961bd8625 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -80,7 +80,6 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - pull-requests: write steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 From 7b90b2d8a2546e1fa4a49a97228aaad34a33f095 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 03:53:50 +0300 Subject: [PATCH 355/618] refactor(ollama): assemble the partial answer on any failed chat The guard read as if it protected an already-assembled message, but the only place that assembles one writes exactly these accumulators, and it writes them after appending the current chunk. So whenever the guard was false the assignment it skipped would have written identical values. Co-Authored-By: Claude Opus 5 --- llms/ollama/ollamallm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 67d017801..e4d8f80cc 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -437,7 +437,7 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca } err := o.client.Chat(ctx, req, fn) - if err != nil && resp.Message.Content == "" && resp.Message.Thinking == "" && len(resp.Message.ToolCalls) == 0 { + if err != nil { resp.Message = api.Message{ Role: "assistant", Content: streamedResponse.String(), From c8a11d24301776df5057c08dd23962ff1ae9a03f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 04:02:43 +0300 Subject: [PATCH 356/618] refactor(reasoning): read the GLM name through the shared normaliser The GLM branch stripped the zai- prefix with a line of its own, but the only caller reaches it through modelSpellings, which already hands it the bare name alongside the prefixed one. Dropping the local strip leaves the shared layer as the single place that knows the prefix: emptying dashWrittenVendors now turns zai-glm-5-2 non-reasoning and reddens the catalogue drift check, where before the duplicate hid the loss. Co-Authored-By: Claude Opus 5 --- llms/reasoning/reasoning.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 3f00078a6..484e24642 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -273,12 +273,11 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat } // Z-AI GLM reasoning models (Zhipu AI) - glm := strings.TrimPrefix(modelLower, "zai-") - if strings.HasPrefix(glm, "glm-4.5") || - strings.HasPrefix(glm, "glm-4.6") || - strings.HasPrefix(glm, "glm-4.7") || - strings.HasPrefix(glm, "glm-5") || - glm == "glm-latest" || glm == "glm-flash-latest" { + if strings.HasPrefix(modelLower, "glm-4.5") || + strings.HasPrefix(modelLower, "glm-4.6") || + strings.HasPrefix(modelLower, "glm-4.7") || + strings.HasPrefix(modelLower, "glm-5") || + modelLower == "glm-latest" || modelLower == "glm-flash-latest" { return true } From 859326167115e022ae879c20bebce97641b779e5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 04:07:53 +0300 Subject: [PATCH 357/618] fix(googleai): report no cache creation, the counter the vendor does not have The streamed path reported the uncached part of the prompt as tokens written to a cache, so a call that read an 80-token cache out of a 100-token prompt claimed 20 tokens of cache creation while the whole-answer path on the same usage reported 0. Gemini's usageMetadata carries promptTokenCount, cachedContentTokenCount, candidatesTokenCount, toolUsePromptTokenCount, thoughtsTokenCount and totalTokenCount, and none of them counts tokens written into a cache: cache creation happens in a separate cachedContents call. The remainder of the prompt is simply the part that was not cached, so both paths now report 0, which is what every other door does when its vendor has no such counter. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 8 +---- llms/googleai/usage_stream_test.go | 50 +++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 11e1d36f7..579c7abbb 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -465,12 +465,7 @@ StreamEnd: metadata["PromptCachedTokens"] = int(lastUsageMetadata.CachedContentTokenCount) metadata["CacheReadInputTokens"] = int(lastUsageMetadata.CachedContentTokenCount) - if lastUsageMetadata.CachedContentTokenCount > 0 { - metadata["CacheCreationInputTokens"] = max( - int(lastUsageMetadata.PromptTokenCount-lastUsageMetadata.CachedContentTokenCount), 0) - } else { - metadata["CacheCreationInputTokens"] = 0 - } + metadata["CacheCreationInputTokens"] = 0 } // Carry the finish reason so structured-output validation runs on a normal @@ -594,7 +589,6 @@ func convertResponse(resp *genai.GenerateContentResponse) (*llms.ContentResponse metadata["ReasoningTokens"] = int(usage.ThoughtsTokenCount) metadata["PromptCachedTokens"] = int(usage.CachedContentTokenCount) metadata["CacheReadInputTokens"] = int(usage.CachedContentTokenCount) - // Google AI does not provide cache creation information, always 0 metadata["CacheCreationInputTokens"] = 0 } diff --git a/llms/googleai/usage_stream_test.go b/llms/googleai/usage_stream_test.go index 0497c0a6a..ba55ab307 100644 --- a/llms/googleai/usage_stream_test.go +++ b/llms/googleai/usage_stream_test.go @@ -47,12 +47,60 @@ func TestAStreamedAnswerReportsCountersThatAddUp(t *testing.T) { info := resp.Choices[0].GenerationInfo assert.Equal(t, 100, info["PromptTokens"], "the prompt count is the whole prompt, cache included") assert.Equal(t, 80, info["CacheReadInputTokens"]) - assert.Equal(t, 20, info["CacheCreationInputTokens"], "the uncached remainder keeps its own field") assert.Equal(t, info["TotalTokens"], info["PromptTokens"].(int)+info["CompletionTokens"].(int), "prompt plus completion must equal the total, as every other door reports it") } +func TestReadingACacheIsNotWritingOne(t *testing.T) { + t.Parallel() + + t.Run("streamed", func(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: cachedUsageStream{}})) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, 0, resp.Choices[0].GenerationInfo["CacheCreationInputTokens"], + "the vendor reports no cache-creation counter, so the uncached remainder is not one") + }) + + t.Run("whole answer", func(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"candidates":[{"content":{"role":"model","parts":[{"text":"sixty rooms are free"}]},` + + `"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":100,` + + `"candidatesTokenCount":9,"totalTokenCount":109,"cachedContentTokenCount":80}}`)) + })) + defer server.Close() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithEndpoint(server.URL), + WithDefaultModel("gemini-2.5-flash")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + assert.Equal(t, 80, resp.Choices[0].GenerationInfo["CacheReadInputTokens"]) + assert.Equal(t, 0, resp.Choices[0].GenerationInfo["CacheCreationInputTokens"], + "both paths answer the same on a payload that read a cache") + }) +} + type uncachedUsageStream struct{} func (uncachedUsageStream) RoundTrip(r *http.Request) (*http.Response, error) { From 212554aad65fa9f60d71738ee4df72ab23a437a2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 04:12:01 +0300 Subject: [PATCH 358/618] fix(bedrock): leave a token limit of zero out of the Converse request A caller who passes WithMaxTokens(0) had that zero put into inferenceConfig, and the Bedrock reference gives maxTokens a valid range with a minimum of 1, so the request came back as a validation error instead of an answer. The field is optional and its default is "the maximum allowed value for the model that you are using", which is exactly what an unset limit means, so the door now omits it rather than substituting a ceiling the caller never asked for. Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_max_tokens_test.go | 65 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 2 +- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 llms/bedrock/converse_max_tokens_test.go diff --git a/llms/bedrock/converse_max_tokens_test.go b/llms/bedrock/converse_max_tokens_test.go new file mode 100644 index 000000000..777094903 --- /dev/null +++ b/llms/bedrock/converse_max_tokens_test.go @@ -0,0 +1,65 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func converseInferenceConfig(t *testing.T, opts ...llms.CallOption) map[string]any { + t.Helper() + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},`+ + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, opts...) + require.NoError(t, err) + + var payload struct { + InferenceConfig map[string]any `json:"inferenceConfig"` + } + require.NoError(t, json.Unmarshal([]byte(body), &payload)) + return payload.InferenceConfig +} + +func TestConverseLeavesOutATokenLimitTheVendorWouldReject(t *testing.T) { + t.Parallel() + + t.Run("a limit of zero is left out", func(t *testing.T) { + t.Parallel() + + config := converseInferenceConfig(t, llms.WithMaxTokens(0)) + + _, present := config["maxTokens"] + assert.False(t, present, + "the vendor accepts a minimum of 1 and defaults to the model's maximum when the field is absent") + }) + + t.Run("a limit the caller set travels", func(t *testing.T) { + t.Parallel() + + config := converseInferenceConfig(t, llms.WithMaxTokens(64)) + + assert.Equal(t, float64(64), config["maxTokens"]) + }) +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 84644d967..841b0a185 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -123,7 +123,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti // Build inference configuration inferenceConfig := &types.InferenceConfiguration{} - if input.MaxTokens != nil { + if input.MaxTokens != nil && *input.MaxTokens > 0 { inferenceConfig.MaxTokens = aws.Int32(numutil.SaturateInt32(*input.MaxTokens)) } if input.Temperature != nil { From 82404208eaa322250441f07666e49dc1d9ad73b5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 04:18:14 +0300 Subject: [PATCH 359/618] fix(bedrock): carry Nova's reasoning request on the legacy path too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A caller who asked a Nova 2 model to think without WithConverseAPI had the request dropped without a word: the Invoke body was built from messages, inference config and system alone, so the model answered as if nothing had been asked, while the same call through Converse enabled thinking. The Amazon Nova schema puts reasoningConfig — type plus maxReasoningEffort — inside inferenceConfig, and says the request schema is nearly identical between the Invoke and Converse APIs, with a note that on Converse alone the field moves into additionalModelRequestFields. So the legacy path sends it where the schema puts it, behind the same family predicate the Converse path uses, and clears the sampling fields Nova refuses beside its top effort. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_nova.go | 42 +++++++--- llms/bedrock/legacy_nova_reasoning_test.go | 84 +++++++++++++++++++ 2 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 llms/bedrock/legacy_nova_reasoning_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 509e9c658..187150102 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" "github.com/aws/aws-sdk-go-v2/aws" @@ -62,6 +63,11 @@ type novaSystemPrompt struct { Text string `json:"text,omitempty"` } +type novaReasoningConfigInput struct { + Type string `json:"type,omitempty"` + MaxReasoningEffort string `json:"maxReasoningEffort,omitempty"` +} + // novaInferenceConfigInput is the input for the text generation configuration for Amazon Nova Models. type novaInferenceConfigInput struct { // The maximum number of tokens to generate per result. Optional, default = 512 @@ -72,7 +78,8 @@ type novaInferenceConfigInput struct { Temperature float64 `json:"temperature,omitempty"` // Specify a character sequence to indicate where the model should stop. // Currently only supports: ["|", "User:"] - StopSequences []string `json:"stopSequences,omitempty"` + StopSequences []string `json:"stopSequences,omitempty"` + ReasoningConfig *novaReasoningConfigInput `json:"reasoningConfig,omitempty"` } // novaTextGenerationInput is the input for the text generation for Amazon Nova Models. @@ -148,16 +155,29 @@ const ( NovaMessageTypeImage = "image" ) -func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemPrompt string, options llms.CallOptions) ([]byte, error) { +func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemPrompt, modelID string, + options llms.CallOptions, +) ([]byte, error) { + inferenceConfig := novaInferenceConfigInput{ + MaxTokens: options.GetMaxTokens(), + Temperature: options.GetTemperature(), + TopP: options.GetTopP(), + StopSequences: options.StopWords, + } + if options.Reasoning.ResolveMode() == llms.ReasoningOn && reasoning.IsNovaReasoningModel(modelID) { + effort := reasoning.NovaEffort(string(options.Reasoning.GetEffort(options.GetMaxTokens()))) + inferenceConfig.ReasoningConfig = &novaReasoningConfigInput{Type: "enabled", MaxReasoningEffort: effort} + if reasoning.NovaClearsInferenceConfigAt(effort) { + inferenceConfig.MaxTokens = 0 + inferenceConfig.Temperature = 0 + inferenceConfig.TopP = 0 + } + } + input := novaTextGenerationInput{ - Messages: inputContents, - InferenceConfig: novaInferenceConfigInput{ - MaxTokens: options.GetMaxTokens(), - Temperature: options.GetTemperature(), - TopP: options.GetTopP(), - StopSequences: options.StopWords, - }, - System: []*novaSystemPrompt{{Text: systemPrompt}}, + Messages: inputContents, + InferenceConfig: inferenceConfig, + System: []*novaSystemPrompt{{Text: systemPrompt}}, } return json.Marshal(input) } @@ -179,7 +199,7 @@ func createNovaCompletion(ctx context.Context, return nil, err } - body, err := novaInputToJSON(inputContents, systemPrompt, options) + body, err := novaInputToJSON(inputContents, systemPrompt, modelID, options) if err != nil { return nil, err } diff --git a/llms/bedrock/legacy_nova_reasoning_test.go b/llms/bedrock/legacy_nova_reasoning_test.go new file mode 100644 index 000000000..d65398943 --- /dev/null +++ b/llms/bedrock/legacy_nova_reasoning_test.go @@ -0,0 +1,84 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func novaLegacyInferenceConfig(t *testing.T, opts ...llms.CallOption) map[string]any { + t.Helper() + return novaLegacyInferenceConfigOf(t, "us.amazon.nova-2-lite-v1:0", opts...) +} + +func novaLegacyInferenceConfigOf(t *testing.T, model string, opts ...llms.CallOption) map[string]any { + t.Helper() + + const answer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + llm, sent := legacyLLMCapturing(t, answer, bedrock.WithModel(model)) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, opts...) + require.NoError(t, err) + + var payload struct { + InferenceConfig map[string]any `json:"inferenceConfig"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &payload)) + return payload.InferenceConfig +} + +func TestTheLegacyNovaPathCarriesTheThinkingItWasAskedFor(t *testing.T) { + t.Parallel() + + t.Run("an asked-for effort reaches the wire", func(t *testing.T) { + t.Parallel() + + config := novaLegacyInferenceConfig(t, + llms.WithMaxTokens(512), llms.WithReasoning(llms.ReasoningMedium, 0)) + + assert.Equal(t, map[string]any{"type": "enabled", "maxReasoningEffort": "medium"}, + config["reasoningConfig"], + "the Invoke schema carries reasoningConfig inside inferenceConfig") + }) + + t.Run("the top effort clears the sampling Nova refuses beside it", func(t *testing.T) { + t.Parallel() + + config := novaLegacyInferenceConfig(t, + llms.WithMaxTokens(512), llms.WithTemperature(0.4), + llms.WithReasoning(llms.ReasoningHigh, 0)) + + assert.Equal(t, map[string]any{"type": "enabled", "maxReasoningEffort": "high"}, + config["reasoningConfig"]) + assert.NotContains(t, config, "maxTokens") + assert.NotContains(t, config, "temperature") + assert.NotContains(t, config, "topP") + }) + + t.Run("a call that asked for nothing carries no reasoning", func(t *testing.T) { + t.Parallel() + + config := novaLegacyInferenceConfig(t, llms.WithMaxTokens(512)) + + assert.NotContains(t, config, "reasoningConfig") + }) + + t.Run("a nova outside the reasoning family is not told to think", func(t *testing.T) { + t.Parallel() + + config := novaLegacyInferenceConfigOf(t, "us.amazon.nova-lite-v1:0", + llms.WithMaxTokens(512), llms.WithReasoning(llms.ReasoningMedium, 0)) + + assert.NotContains(t, config, "reasoningConfig", + "the door that carries the field on Converse is the same one that carries it here") + }) +} From 4de536497f85de5a3f018fe37a41b9b43a6828ed Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 04:25:29 +0300 Subject: [PATCH 360/618] docs(bedrock): describe the thinking each family actually gets The reasoning section listed GPT OSS, Kimi and MiniMax as budget-thinking models on Converse. They are not: the mechanism resolver hands them none, so the request travels with no thinking configuration at all and a caller following the document would expect a budget it can neither set nor observe. Nova 2 and Grok, which do carry one, were missing from the list entirely, and the matrix marked Nova 2 and DeepSeek R1 as non-reasoning. The footnote about GLM and Nemotron reached the right conclusion from a wrong reason: both are reasoning models by the shared tables, and what leaves them without a wire shape is the mechanism resolver, not the reasoning list. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index eec45a3fc..a80612174 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -186,14 +186,24 @@ if err != nil { ### Models Supporting Reasoning -**Converse API**: -- Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 -- OpenAI GPT OSS (120B, 20B) -- Moonshot Kimi K2-Thinking -- MiniMax M2.5 / M2.1 +A reasoning request only reaches the wire for families that have a thinking +configuration on this platform. The rest reason on their own and carry nothing. + +**Converse API** — a thinking configuration is sent for: +- Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` + in `additionalModelRequestFields`, adaptive or budget (see below) +- Amazon Nova 2 (Lite, Pro, Micro) — `reasoningConfig` in `additionalModelRequestFields` +- xAI Grok 4.x — `reasoning.effort` in `additionalModelRequestFields` + +**Legacy API** (InvokeModel) — a thinking configuration is sent for: +- Claude: Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in the + Anthropic body +- Amazon Nova 2 (Lite, Pro, Micro) — `reasoningConfig` inside `inferenceConfig` -**Legacy API** (InvokeModel): -- Claude: Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 +**Reasoning models that take no configuration here**: OpenAI GPT OSS (120B, 20B), +Moonshot Kimi K2-Thinking, MiniMax M2/M2.1/M2.5, DeepSeek R1, Z-AI GLM, NVIDIA +Nemotron 3. They think without being asked, and a `WithReasoning` call on them +changes nothing on the wire. **How the wire shape is resolved** @@ -213,9 +223,10 @@ source of truth used by the first-party Anthropic provider): this path; Opus 4.5 accepts it on the first-party API but rejects it here, so this door does not send it. -Non-Claude reasoning models (GPT OSS, Kimi K2-Thinking, MiniMax M2.5/M2.1) use budget -thinking through the Converse API. `WithReasoningDisabled()` returns a typed -`ErrReasoningOffUnsupported` for always-on Bedrock models. +Nova 2 carries `type` plus `maxReasoningEffort` (low/medium/high) on both paths, and +its top effort clears `maxTokens`, `temperature` and `topP`, which Nova refuses +beside it. Grok carries an effort and nothing else. `WithReasoningDisabled()` +returns a typed `ErrReasoningOffUnsupported` for always-on Bedrock models. ## Structured Output @@ -760,10 +771,11 @@ for the exact model IDs. | Claude Opus 5/4.8/4.7/4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Claude Sonnet 5/4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Claude Haiku 4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| Nova 2/Pro/Lite/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | +| Nova 2 Lite/Pro/Micro | ✅ | ✅ | ✅ | ✅ | ❌ | Converse native* | +| Nova Pro/Lite/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | | Llama 4 / 3.x | Limited | ❌ | ✅ | ✅ | ❌ | Converse native* | | DeepSeek V3.2 | ✅ | ❌ | ✅ | ❌ | ❌ | Converse native* | -| DeepSeek R1 | ❌ | ❌ | ✅ | ❌ | ❌ | Converse native* | +| DeepSeek R1 | ❌ | ✅ (always-on) | ✅ | ❌ | ❌ | Converse native* | | OpenAI GPT (OSS) | ✅ | ✅ | ✅ | ❌ | ❌ | Converse native* | | Qwen3 | Varies** | ❌ | ✅ | Some | ❌ | Converse native* | | Mistral | ✅*** | ❌ | ✅ | Some | ❌ | Converse native* | @@ -777,6 +789,6 @@ for the exact model IDs. ***Mistral: Large 3 and Large 2402 support tools, Magistral Small 2509 does not ****Moonshot: K2.5 supports tools, K2-Thinking is unstable in streaming *****GLM models: Backend incompatibility with Converse API tool format (requires string instead of JSON) -******GLM-5 and Nemotron 3 may reason on their own, but this door sends them no thinking instruction: they are absent from the reasoning list in `supportsReasoning`, so a reasoning request on them is a no-op here. +******GLM-5 and Nemotron 3 reason on their own, but this door sends them no thinking instruction: they belong to no family that has one on Bedrock, so `ResolveMechanism` returns none and a reasoning request on them is a no-op here. See `models_list.go` for the complete model list and detailed capabilities. From 010736d8e5544ff3618a4c1ff1f936866239b2df Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 19:41:14 +0300 Subject: [PATCH 361/618] fix(anthropic): read the encrypted thought on the streamed leg too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The block parser that runs on a streamed response knew text, tool_use and thinking, and answered anything else with "unknown content block type". So a streamed answer carrying redacted_thinking failed the whole call and took the text that had already arrived with it — the exact failure the whole-answer leg was taught to survive, still live one function away. Both switches now carry the same four block types, and the streamed block reaches the caller's reasoning field the way the whole-answer one does. Co-Authored-By: Claude Opus 5 --- .../internal/anthropicclient/messages.go | 5 ++ llms/anthropic/redacted_thinking_wire_test.go | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index 70470db6b..7932a6be9 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -612,6 +612,11 @@ func handleContentBlockStartEvent(event map[string]interface{}, response Message Thinking: getString(cb, "thinking"), Signature: getString(cb, "signature"), }) + case EventTypeRedactedThinking: + response.Content = append(response.Content, &RedactedThinkingContent{ + Type: eventType, + Data: getString(cb, "data"), + }) default: return response, fmt.Errorf("unknown content block type: %s", eventType) } diff --git a/llms/anthropic/redacted_thinking_wire_test.go b/llms/anthropic/redacted_thinking_wire_test.go index 65b76f196..18755cf65 100644 --- a/llms/anthropic/redacted_thinking_wire_test.go +++ b/llms/anthropic/redacted_thinking_wire_test.go @@ -14,6 +14,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/anthropic" "github.com/vxcontrol/langchaingo/llms/reasoning" + "github.com/vxcontrol/langchaingo/llms/streaming" ) func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { @@ -99,3 +100,54 @@ func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { "the encrypted thought goes back exactly as it came") }) } + +func redactedThinkingStream(t *testing.T, encrypted string) *httptest.Server { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, "event: message_start\ndata: {\"type\":\"message_start\",\"message\":"+ + "{\"id\":\"msg_1\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-opus-4-6\","+ + "\"content\":[],\"stop_reason\":null,\"usage\":{\"input_tokens\":1,\"output_tokens\":1}}}\n\n") + _, _ = io.WriteString(w, "event: content_block_start\ndata: {\"type\":\"content_block_start\","+ + "\"index\":0,\"content_block\":{\"type\":\"redacted_thinking\",\"data\":\""+encrypted+"\"}}\n\n") + _, _ = io.WriteString(w, "event: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\n") + _, _ = io.WriteString(w, "event: content_block_start\ndata: {\"type\":\"content_block_start\","+ + "\"index\":1,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\n") + _, _ = io.WriteString(w, "event: content_block_delta\ndata: {\"type\":\"content_block_delta\","+ + "\"index\":1,\"delta\":{\"type\":\"text_delta\",\"text\":\"sixty rooms are free\"}}\n\n") + _, _ = io.WriteString(w, "event: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1}\n\n") + _, _ = io.WriteString(w, "event: message_delta\ndata: {\"type\":\"message_delta\","+ + "\"delta\":{\"stop_reason\":\"end_turn\"},\"usage\":{\"output_tokens\":9}}\n\n") + _, _ = io.WriteString(w, "event: message_stop\ndata: {\"type\":\"message_stop\"}\n\n") + })) + t.Cleanup(srv.Close) + return srv +} + +func TestAStreamedEncryptedThoughtDoesNotCostTheAnswer(t *testing.T) { + t.Parallel() + + const encrypted = "EqQBCgIYAhIM1gbcDa9GJwZA2b" + + srv := redactedThinkingStream(t, encrypted) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{llms.TextPart("how many rooms are free?")}, + }}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err, "a streamed block the door cannot read must not cost the caller the answer") + require.Len(t, resp.Choices, 1) + + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning, "the encrypted half is still reasoning on the streamed leg") + assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted)) + assert.False(t, resp.Choices[0].Reasoning.IsEmpty()) +} From 1f63f5a9735d87863409d9b98513493a8bc865dc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 19:44:23 +0300 Subject: [PATCH 362/618] fix(bedrock): read the thinking the legacy Nova door now asks for MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Teaching the legacy Nova path to send reasoningConfig made every reasoning call return an empty answer: the response parser knew only "text" and built one choice per content block, so the reasoning block became Choices[0] with no content and Call() handed the caller "". Asking for thinking was worse than the silent drop it replaced. The parser now recognises the block the Nova 2 schema documents — reasoningContent.reasoningText.text — keeps it out of the answer choices and carries it on the choice's reasoning field, the way the Converse sibling does. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_nova.go | 36 ++++++++++++++++--- llms/bedrock/legacy_nova_reasoning_test.go | 23 +++++++++++- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 187150102..0c1a255aa 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -92,14 +92,23 @@ type novaTextGenerationInput struct { System []*novaSystemPrompt `json:"system,omitempty"` } +type novaOutputContent struct { + Text string `json:"text"` + ReasoningContent *novaReasoningContentOutput `json:"reasoningContent"` +} + +type novaReasoningContentOutput struct { + ReasoningText struct { + Text string `json:"text"` + } `json:"reasoningText"` +} + // novaTextGenerationOutput is the output for the text generation for Amazon Nova Models. type novaTextGenerationOutput struct { Output struct { Message struct { - Content []struct { - Text string `json:"text"` - } `json:"content"` - Role string `json:"role"` + Content []novaOutputContent `json:"content"` + Role string `json:"role"` } `json:"message"` } `json:"output"` StopReason string `json:"stopReason"` @@ -182,6 +191,22 @@ func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemProm return json.Marshal(input) } +func splitNovaReasoning(blocks []novaOutputContent) ([]novaOutputContent, *reasoning.ContentReasoning) { + answers := make([]novaOutputContent, 0, len(blocks)) + var thought string + for _, block := range blocks { + if block.ReasoningContent == nil { + answers = append(answers, block) + continue + } + thought += block.ReasoningContent.ReasoningText.Text + } + if thought == "" { + return answers, nil + } + return answers, &reasoning.ContentReasoning{Content: thought} +} + func parseNovaResponseBody(body []byte) (*novaTextGenerationOutput, error) { var output novaTextGenerationOutput err := json.Unmarshal(body, &output) @@ -230,7 +255,7 @@ func createNovaCompletion(ctx context.Context, return nil, err } - content := output.Output.Message.Content + content, contentReasoning := splitNovaReasoning(output.Output.Message.Content) if len(content) == 0 { return nil, errors.New("no results") } else if stopReason := output.StopReason; stopReason != NovaCompletionReasonEndTurn && @@ -243,6 +268,7 @@ func createNovaCompletion(ctx context.Context, for i, c := range content { Contentchoices[i] = &llms.ContentChoice{ Content: c.Text, + Reasoning: contentReasoning, StopReason: output.StopReason, Truncated: llms.IsTruncated(output.StopReason), GenerationInfo: map[string]any{ diff --git a/llms/bedrock/legacy_nova_reasoning_test.go b/llms/bedrock/legacy_nova_reasoning_test.go index d65398943..be58c7f95 100644 --- a/llms/bedrock/legacy_nova_reasoning_test.go +++ b/llms/bedrock/legacy_nova_reasoning_test.go @@ -54,7 +54,7 @@ func TestTheLegacyNovaPathCarriesTheThinkingItWasAskedFor(t *testing.T) { t.Parallel() config := novaLegacyInferenceConfig(t, - llms.WithMaxTokens(512), llms.WithTemperature(0.4), + llms.WithMaxTokens(512), llms.WithTemperature(0.4), llms.WithTopP(0.9), llms.WithReasoning(llms.ReasoningHigh, 0)) assert.Equal(t, map[string]any{"type": "enabled", "maxReasoningEffort": "high"}, @@ -82,3 +82,24 @@ func TestTheLegacyNovaPathCarriesTheThinkingItWasAskedFor(t *testing.T) { "the door that carries the field on Converse is the same one that carries it here") }) } + +func TestTheLegacyNovaPathReadsTheThinkingItAskedFor(t *testing.T) { + t.Parallel() + + const answer = `{"output":{"message":{"role":"assistant","content":[` + + `{"reasoningContent":{"reasoningText":{"text":"[REDACTED]"}}},` + + `{"text":"sixty rooms are free"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":10,"outputTokens":9,"totalTokens":19}}` + + llm, _ := legacyLLMCapturing(t, answer, bedrock.WithModel("us.amazon.nova-2-lite-v1:0")) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithMaxTokens(512), llms.WithReasoning(llms.ReasoningMedium, 0)) + require.NoError(t, err) + + require.Len(t, resp.Choices, 1, "a thinking block is not an answer and must not become an empty choice") + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning, "the door asked for thinking and must carry what came back") + assert.Equal(t, "[REDACTED]", resp.Choices[0].Reasoning.Content) +} From 0e0c41274f08dd1ed3ccbf3fed3cb212d0eccb0b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 20:32:53 +0300 Subject: [PATCH 363/618] fix(bedrock): count the streamed nova total from what arrived, not from one chunk The streamed total summed the prompt and completion fields of the chunk in hand, but the prompt arrives on messageStart and the completion on messageDelta, so the total was only ever the completion: 3 where the vendor sent 5 and 3. It now adds up what the choice has accumulated. The test that was meant to guard these counters could not have caught it. It asserted the Go type and nothing else, skipped any counter missing from the map, and covered three families while the change it guards touched four. It now requires each counter to be present, to be an int, and to carry the number the vendor sent, across all four families on both paths. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_nova.go | 6 ++- llms/bedrock/legacy_counter_type_test.go | 46 +++++++++++++------ 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 0c1a255aa..80f5eb530 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -443,8 +443,10 @@ DoStream: contentchoices[0].GenerationInfo["output_tokens"] = resp.MessageDelta.Usage.OutputTokens contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.MessageDelta.Usage.OutputTokens) } - if resp.MessageStart.Usage.InputTokens > 0 || resp.MessageDelta.Usage.OutputTokens > 0 { - contentchoices[0].GenerationInfo["TotalTokens"] = int(resp.MessageStart.Usage.InputTokens) + int(resp.MessageDelta.Usage.OutputTokens) + prompt, _ := contentchoices[0].GenerationInfo["PromptTokens"].(int) + completion, _ := contentchoices[0].GenerationInfo["CompletionTokens"].(int) + if prompt > 0 || completion > 0 { + contentchoices[0].GenerationInfo["TotalTokens"] = prompt + completion } } } diff --git a/llms/bedrock/legacy_counter_type_test.go b/llms/bedrock/legacy_counter_type_test.go index 52808fabd..1c23bf18b 100644 --- a/llms/bedrock/legacy_counter_type_test.go +++ b/llms/bedrock/legacy_counter_type_test.go @@ -23,6 +23,8 @@ type counterCase struct { chunks []string } +var wantCounters = map[string]int{"PromptTokens": 5, "CompletionTokens": 3, "TotalTokens": 8} + func legacyCounterFamilies() []counterCase { return []counterCase{ { @@ -43,6 +45,17 @@ func legacyCounterFamilies() []counterCase { `{"generation":"ok","stop_reason":"stop","prompt_token_count":5,"generation_token_count":3}`, }, }, + { + name: "ai21", + model: "ai21.jamba-1-5-large-v1:0", + whole: `{"id":"x","choices":[{"index":0,"message":{"role":"assistant","content":"ok"},` + + `"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"completion_tokens":3,` + + `"total_tokens":8},"model":"ai21.jamba-1-5-large-v1:0"}`, + chunks: []string{ + `{"text":"ok","finish_reason":"stop","index":0,` + + `"usage":{"prompt_tokens":5,"completion_tokens":3}}`, + }, + }, { name: "nova", model: "amazon.nova-pro-v1:0", @@ -60,8 +73,6 @@ func legacyCounterFamilies() []counterCase { func TestEveryLegacyFamilyReportsCountersAsInt(t *testing.T) { t.Parallel() - counters := []string{"PromptTokens", "CompletionTokens", "TotalTokens"} - for _, tc := range legacyCounterFamilies() { t.Run(tc.name+"/whole answer", func(t *testing.T) { t.Parallel() @@ -72,11 +83,7 @@ func TestEveryLegacyFamilyReportsCountersAsInt(t *testing.T) { require.NoError(t, err) require.Len(t, resp.Choices, 1) - for _, key := range counters { - _, ok := resp.Choices[0].GenerationInfo[key].(int) - assert.True(t, ok, "%s must be an int, as the Claude doors report it, got %#v", - key, resp.Choices[0].GenerationInfo[key]) - } + assertCounters(t, resp.Choices[0].GenerationInfo) }) t.Run(tc.name+"/streamed", func(t *testing.T) { @@ -99,14 +106,23 @@ func TestEveryLegacyFamilyReportsCountersAsInt(t *testing.T) { require.NoError(t, err) require.Len(t, resp.Choices, 1) - for _, key := range counters { - value, present := resp.Choices[0].GenerationInfo[key] - if !present { - continue - } - _, ok := value.(int) - assert.True(t, ok, "%s must be an int on the streamed path too, got %#v", key, value) - } + assertCounters(t, resp.Choices[0].GenerationInfo) }) } } + +func assertCounters(t *testing.T, info map[string]any) { + t.Helper() + + for key, want := range wantCounters { + value, present := info[key] + if !assert.True(t, present, "%s is missing from the generation info", key) { + continue + } + got, ok := value.(int) + if !assert.True(t, ok, "%s must be an int, as the Claude doors report it, got %#v", key, value) { + continue + } + assert.Equal(t, want, got, "%s carries the number the vendor sent", key) + } +} From f1df9fe98dd1cdcae978786c9ecc2d4284825d16 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 20:34:48 +0300 Subject: [PATCH 364/618] test: make two guards provable instead of merely present The Converse image test asserted that some error came back. With the format guard deleted the AWS SDK rejects the empty format itself, so the test passed having proved nothing about the guard it names; it now requires the door's own typed refusal. The api-key header case checked that the token reached api-key but never that it stayed off Authorization, so a door leaking the token into both headers passed. It now asserts the other header is absent. Both were verified by mutation: each stayed green before and reddens now. Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_image_test.go | 4 +++- llms/openai/internal/openaiclient/openaiclient_test.go | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/converse_image_test.go b/llms/bedrock/converse_image_test.go index 4177dddd9..c1a8a2bef 100644 --- a/llms/bedrock/converse_image_test.go +++ b/llms/bedrock/converse_image_test.go @@ -14,6 +14,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" ) func TestConverseSendsAPictureAsAPicture(t *testing.T) { @@ -85,5 +86,6 @@ func TestConverseRefusesAPictureItCannotName(t *testing.T) { Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.BinaryPart("image/heic", []byte{0x00, 0x01})}, }}) - require.Error(t, err, "a format the vendor has no name for must fail before the network, not travel as text") + require.ErrorIs(t, err, bedrockclient.ErrUnsupportedImageFormat, + "the door must refuse it by name; the SDK's own validation error would prove nothing about this guard") } diff --git a/llms/openai/internal/openaiclient/openaiclient_test.go b/llms/openai/internal/openaiclient/openaiclient_test.go index e67de8be2..de825dbf0 100644 --- a/llms/openai/internal/openaiclient/openaiclient_test.go +++ b/llms/openai/internal/openaiclient/openaiclient_test.go @@ -416,6 +416,8 @@ func TestSetHeadersOmitsEmptyToken(t *testing.T) { req = newRequest(t) client.setHeaders(req) assert.Equal(t, tc.tokenValue, req.Header.Get(tc.tokenHeader)) + assert.Empty(t, req.Header.Values(otherTokenHeader(tc.tokenHeader)), + "the token must reach one door only") }) } } @@ -427,3 +429,10 @@ type mockHTTPClient struct { func (m *mockHTTPClient) Do(req *http.Request) (*http.Response, error) { return m.doFunc(req) } + +func otherTokenHeader(used string) string { + if used == "Authorization" { + return "api-key" + } + return "Authorization" +} From 72dab3ac6fd7f50516df8ced4b001b00c03bf97a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 20:38:15 +0300 Subject: [PATCH 365/618] test(anthropic): assert the exact block list a redacted thought travels in The replay assertion only looked for the encrypted block among the blocks sent back, so it stayed green with the empty-thinking guard in anthropicllm.go removed: an extra thinking block with an empty signature rode along unnoticed. Asserting the whole list makes the same mutation red. Co-Authored-By: Claude Opus 5 --- llms/anthropic/redacted_thinking_wire_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/llms/anthropic/redacted_thinking_wire_test.go b/llms/anthropic/redacted_thinking_wire_test.go index 18755cf65..ecac64870 100644 --- a/llms/anthropic/redacted_thinking_wire_test.go +++ b/llms/anthropic/redacted_thinking_wire_test.go @@ -95,9 +95,8 @@ func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { blocks = append(blocks, m.Content...) } } - require.NotEmpty(t, blocks, "the assistant turn must reach the wire") - assert.Contains(t, blocks, map[string]any{"type": "redacted_thinking", "data": encrypted}, - "the encrypted thought goes back exactly as it came") + assert.Equal(t, []map[string]any{{"type": "redacted_thinking", "data": encrypted}}, blocks, + "the encrypted thought goes back exactly as it came, and nothing else rides with it") }) } From dee6d0ecd12c63a8b0a19eb23d0fef8641596b95 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 20:40:56 +0300 Subject: [PATCH 366/618] test(bedrock): pin the bearer credential the door actually sends The test scrubs Authorization out of the cassette, so nothing checked which credential the request carried: dropping the bearer scheme preference left it green while the door signed with SigV4 instead. A tap in front of the recorder reads the header before scrubbing and the test now names the scheme it expects. Co-Authored-By: Claude Opus 5 --- llms/bedrock/bedrockllm_test.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index e69b30b66..bbf72385b 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -3173,6 +3173,16 @@ func TestCreateClientWithLongLeavingCredentials(t *testing.T) { t.Logf("Response: %s", resp) } +type authHeaderTap struct { + next http.RoundTripper + authorization string +} + +func (tap *authHeaderTap) RoundTrip(req *http.Request) (*http.Response, error) { + tap.authorization = req.Header.Get("Authorization") + return tap.next.RoundTrip(req) +} + // TestCreateClientWithBearerTokenCredentials tests creating a client with bearer token credentials. func TestCreateClientWithBearerTokenCredentials(t *testing.T) { ctx := t.Context() @@ -3195,8 +3205,9 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { return nil }) + tap := &authHeaderTap{next: rr} httpClient := &http.Client{ - Transport: rr, + Transport: tap, } region := os.Getenv("AWS_REGION") @@ -3238,7 +3249,10 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { t.Fatal("Expected non-empty response") } - t.Logf("Response: %s", resp) + if got, want := tap.authorization, "Bearer "+bearerToken; got != want { + t.Errorf("the request carried a %q credential, not the configured bearer token", + strings.SplitN(got, " ", 2)[0]) + } } func requireUsageAddsUp(t *testing.T, info map[string]any) { From deedac064f06dfc6a87501afd536aa9f4bf66fdd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 21:00:35 +0300 Subject: [PATCH 367/618] fix(bedrock): carry tool-call integers to the wire with every digit Both Bedrock doors decoded tool-call arguments into map[string]any with a plain Unmarshal, so an integer above 2^53 arrived as a float64 and left as 10000000000000000. The Converse door is pentagi's path, and the legacy anthropic door lost the same digits again when it re-serialized the arguments an answer carried. The primary anthropic door only needed UseNumber, because encoding/json writes a json.Number back as its literal. The AWS document marshaler does not: measured on one number, json.Number comes out as a JSON string and document.Number writes its key twice, while int64 comes out exact. So the arguments are decoded with UseNumber and then converted to int64, or to float64 when the literal is not whole. PAGI-267 Co-Authored-By: Claude Opus 5 --- llms/bedrock/bedrockllm.go | 39 +++++++- .../bedrockclient/bedrockclient_util.go | 8 ++ .../bedrockclient/provider_anthropic.go | 2 +- llms/bedrock/tool_args_precision_test.go | 97 +++++++++++++++++++ 4 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 llms/bedrock/tool_args_precision_test.go diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 1d416e7c8..7557c5e18 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -18,6 +18,41 @@ import ( const defaultModel = ModelAnthropicClaudeHaiku45 +func decodeToolArguments(raw string) (map[string]any, error) { + decoder := json.NewDecoder(strings.NewReader(raw)) + decoder.UseNumber() + + var arguments map[string]any + if err := decoder.Decode(&arguments); err != nil { + return nil, err + } + for key, value := range arguments { + arguments[key] = exactNumbers(value) + } + return arguments, nil +} + +func exactNumbers(value any) any { + switch typed := value.(type) { + case map[string]any: + for key, item := range typed { + typed[key] = exactNumbers(item) + } + case []any: + for i, item := range typed { + typed[i] = exactNumbers(item) + } + case json.Number: + if whole, err := typed.Int64(); err == nil { + return whole + } + if fraction, err := typed.Float64(); err == nil { + return fraction + } + } + return value +} + // LLM is a Bedrock LLM implementation. type LLM struct { modelID string @@ -249,9 +284,11 @@ func processMessagesWithCaching(messages []llms.MessageContent, autoCaching bool } var arguments map[string]any if part.FunctionCall.Arguments != "" { - if err := json.Unmarshal([]byte(part.FunctionCall.Arguments), &arguments); err != nil { + decoded, err := decodeToolArguments(part.FunctionCall.Arguments) + if err != nil { return nil, fmt.Errorf("failed to unmarshal tool call arguments: %w", err) } + arguments = decoded } bedrockMsgs = append(bedrockMsgs, bedrockclient.Message{ Role: m.Role, diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go index bf0f96746..26cfdc4e5 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go @@ -1,6 +1,8 @@ package bedrockclient import ( + "bytes" + "encoding/json" "reflect" "github.com/aws/aws-sdk-go-v2/aws" @@ -182,3 +184,9 @@ func validateStructuredResponse(so *llms.StructuredOutputConfig, model string, r } return nil } + +func decodeExactNumbers(payload []byte, into any) error { + decoder := json.NewDecoder(bytes.NewReader(payload)) + decoder.UseNumber() + return decoder.Decode(into) +} diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 9b66b11c6..23b89b35c 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -308,7 +308,7 @@ func createAnthropicCompletion(ctx context.Context, } var output anthropicTextGenerationOutput - err = json.Unmarshal(resp.Body, &output) + err = decodeExactNumbers(resp.Body, &output) if err != nil { return nil, err } diff --git a/llms/bedrock/tool_args_precision_test.go b/llms/bedrock/tool_args_precision_test.go new file mode 100644 index 000000000..fd38282a4 --- /dev/null +++ b/llms/bedrock/tool_args_precision_test.go @@ -0,0 +1,97 @@ +package bedrock_test + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +const bigToolArgument = "10000000000000001" + +func toolCallTurn(arguments string) []llms.MessageContent { + return []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "book the room"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ + ID: "t1", + Type: "function", + FunctionCall: &llms.FunctionCall{Name: "book", Arguments: arguments}, + }, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "t1", Name: "book", Content: "done"}, + }}, + } +} + +const converseAnswer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + +const legacyAnswer = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + +func TestToolArgumentsKeepTheirPrecisionOnConverse(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, converseAnswer, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + _, err := llm.GenerateContent(context.Background(), + toolCallTurn(`{"id":`+bigToolArgument+`}`)) + require.NoError(t, err) + + assert.Contains(t, *sent, `"id":`+bigToolArgument, + "the integer the model chose reaches the vendor as a number, with every digit it had") +} + +func TestToolArgumentsKeepTheirPrecisionOnTheLegacyDoor(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, legacyAnswer, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + _, err := llm.GenerateContent(context.Background(), + toolCallTurn(`{"id":`+bigToolArgument+`}`)) + require.NoError(t, err) + + assert.Contains(t, *sent, `"id":`+bigToolArgument, + "the legacy door carries the same integer as its Converse sibling") +} + +func TestAFractionalToolArgumentStaysFractional(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, converseAnswer, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + + _, err := llm.GenerateContent(context.Background(), toolCallTurn(`{"rate":1.5}`)) + require.NoError(t, err) + + assert.Contains(t, *sent, `"rate":1.5`, "a fraction must not be rounded into an integer") +} + +func TestAToolArgumentInTheAnswerKeepsItsPrecision(t *testing.T) { + t.Parallel() + + answer := `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"tool_use","id":"t1","name":"book","input":{"id":` + bigToolArgument + `}}],` + + `"stop_reason":"tool_use","usage":{"input_tokens":1,"output_tokens":1}}` + + llm, _ := legacyLLMCapturing(t, answer, + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "book the room")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + require.Len(t, resp.Choices[0].ToolCalls, 1) + + assert.Contains(t, resp.Choices[0].ToolCalls[0].FunctionCall.Arguments, `"id":`+bigToolArgument, + "the integer the model chose reaches the caller as a number, with every digit it had") +} From c2c58726c0d48634a612e6ba04e2cfeb447f2efe Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 21:54:41 +0300 Subject: [PATCH 368/618] fix(ci,bedrock): let the test gate fail, and keep the replay hermetic The CI test step piped go test into tee. GitHub runs a step as `bash -e` without pipefail, so the pipeline reported tee's status and a red test suite left the job green, with the coverage job downstream of it. The bedrock cassettes were hermetic against region and credentials but not against AWS_BEARER_TOKEN_BEDROCK: the SDK reads it inside the client constructor and switches the request to bearer auth, so every replay missed. Client options are applied after that, so the replay now names the scheme it signed its cassettes with. The embeddings replay used to rewrite any Authorization header into a SigV4 one, which hid the same mismatch; it now leaves the scheme alone and pins it the same way. PAGI-268 Co-Authored-By: Claude Opus 5 --- .github/workflows/ci.yaml | 1 + embeddings/bedrock/bedrock_test.go | 8 ++--- llms/bedrock/bedrockllm_test.go | 28 +++++++++++---- llms/bedrock/legacy_thinking_test.go | 2 +- llms/bedrock/replay_signing_test.go | 53 ++++++++++++++++++++++++++++ llms/bedrock/truncation_test.go | 2 +- 6 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 llms/bedrock/replay_signing_test.go diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 961bd8625..040420154 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -64,6 +64,7 @@ jobs: GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | + set -o pipefail go test -timeout=20m -race -v -json -coverprofile=coverage-${{ steps.go-version.outputs.version }}.out ./... | tee test-results-${{ steps.go-version.outputs.version }}.ndjson - name: Upload test results uses: actions/upload-artifact@v4 diff --git a/embeddings/bedrock/bedrock_test.go b/embeddings/bedrock/bedrock_test.go index 7984c746d..84b764933 100644 --- a/embeddings/bedrock/bedrock_test.go +++ b/embeddings/bedrock/bedrock_test.go @@ -22,10 +22,6 @@ func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, er req.Header.Del("Amz-Sdk-Invocation-Id") req.Header.Del("Amz-Sdk-Request") req.Header.Del("X-Amz-Date") - // Scrub the actual AWS signature to make it reproducible - if auth := req.Header.Get("Authorization"); auth != "" { - req.Header.Set("Authorization", "AWS4-HMAC-SHA256 test-api-key") - } return nil }) @@ -50,7 +46,9 @@ func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, er return nil, err } - client := bedrockruntime.NewFromConfig(cfg) + client := bedrockruntime.NewFromConfig(cfg, func(o *bedrockruntime.Options) { + o.AuthSchemePreference = []string{"sigv4"} + }) return client, nil } diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index bbf72385b..9033f394f 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -36,19 +36,19 @@ func setUpTestWithTransport(rr *httprr.RecordReplay) (*bedrockruntime.Client, er cfg, err := config.LoadDefaultConfig(context.Background(), append([]func(*config.LoadOptions) error{config.WithHTTPClient(httpClient)}, - replayCredentials(rr)...)...) + replayCredentials(rr.Recording())...)...) if err != nil { return nil, err } - client := bedrockruntime.NewFromConfig(cfg) + client := bedrockruntime.NewFromConfig(cfg, replayClientOptions(rr.Recording())...) return client, nil } const replayRegion = "us-east-1" -func replayCredentials(rr *httprr.RecordReplay) []func(*config.LoadOptions) error { - if rr.Recording() { +func replayCredentials(recording bool) []func(*config.LoadOptions) error { + if recording { return nil } return []func(*config.LoadOptions) error{ @@ -58,6 +58,17 @@ func replayCredentials(rr *httprr.RecordReplay) []func(*config.LoadOptions) erro } } +func replayClientOptions(recording bool) []func(*bedrockruntime.Options) { + if recording { + return nil + } + return []func(*bedrockruntime.Options){signWithSigV4} +} + +func signWithSigV4(o *bedrockruntime.Options) { + o.AuthSchemePreference = []string{"sigv4"} +} + func TestAmazonOutputConverseAPI(t *testing.T) { //nolint:funlen ctx := t.Context() @@ -3146,14 +3157,14 @@ func TestCreateClientWithLongLeavingCredentials(t *testing.T) { secretKey, sessionToken, )), - }, replayCredentials(rr)...) + }, replayCredentials(rr.Recording())...) cfg, err := config.LoadDefaultConfig(ctx, opts...) if err != nil { t.Fatal(err) } - client := bedrockruntime.NewFromConfig(cfg) + client := bedrockruntime.NewFromConfig(cfg, replayClientOptions(rr.Recording())...) llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithConverseAPI()) if err != nil { @@ -3232,7 +3243,10 @@ func TestCreateClientWithBearerTokenCredentials(t *testing.T) { t.Fatal(err) } - client := bedrockruntime.NewFromConfig(cfg) + client := bedrockruntime.NewFromConfig(cfg, func(o *bedrockruntime.Options) { + o.BearerAuthTokenProvider = bearer.StaticTokenProvider{Token: bearer.Token{Value: bearerToken}} + o.AuthSchemePreference = []string{"httpBearerAuth"} + }) llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithConverseAPI()) if err != nil { diff --git a/llms/bedrock/legacy_thinking_test.go b/llms/bedrock/legacy_thinking_test.go index 7a79a6c5c..08b59a9b1 100644 --- a/llms/bedrock/legacy_thinking_test.go +++ b/llms/bedrock/legacy_thinking_test.go @@ -44,7 +44,7 @@ func bedrockLLMAgainst(t *testing.T, srv *httptest.Server, opts ...bedrock.Optio Credentials: credentials.NewStaticCredentialsProvider("unit", "test", ""), }, func(o *bedrockruntime.Options) { o.BaseEndpoint = aws.String(srv.URL) - }) + }, signWithSigV4) llm, err := bedrock.New(append([]bedrock.Option{bedrock.WithClient(client)}, opts...)...) require.NoError(t, err) diff --git a/llms/bedrock/replay_signing_test.go b/llms/bedrock/replay_signing_test.go new file mode 100644 index 000000000..9ed2effda --- /dev/null +++ b/llms/bedrock/replay_signing_test.go @@ -0,0 +1,53 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestAStrayBearerTokenDoesNotResignTheReplay(t *testing.T) { + t.Setenv("AWS_BEARER_TOKEN_BEDROCK", "someone-elses-token") + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, legacyAnswer) + })) + t.Cleanup(srv.Close) + + tap := &authHeaderTap{next: http.DefaultTransport} + cfg, err := config.LoadDefaultConfig(t.Context(), + append([]func(*config.LoadOptions) error{ + config.WithHTTPClient(&http.Client{Transport: tap}), + }, replayCredentials(false)...)...) + require.NoError(t, err) + + client := bedrockruntime.NewFromConfig(cfg, + append(replayClientOptions(false), func(o *bedrockruntime.Options) { + o.BaseEndpoint = aws.String(srv.URL) + })...) + + llm, err := bedrock.New(bedrock.WithClient(client), + bedrock.WithModel("anthropic.claude-sonnet-4-5-20250929-v1:0")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}) + require.NoError(t, err) + + assert.Equal(t, "AWS4-HMAC-SHA256", strings.SplitN(tap.authorization, " ", 2)[0], + "a bearer token in the environment must not change how a replayed request is signed") +} diff --git a/llms/bedrock/truncation_test.go b/llms/bedrock/truncation_test.go index 5526f0403..11fa62e92 100644 --- a/llms/bedrock/truncation_test.go +++ b/llms/bedrock/truncation_test.go @@ -37,7 +37,7 @@ func truncationLLMWithBody(t *testing.T, body string, opts ...bedrock.Option) *b Credentials: credentials.NewStaticCredentialsProvider("unit", "test", ""), }, func(o *bedrockruntime.Options) { o.BaseEndpoint = aws.String(srv.URL) - }) + }, signWithSigV4) llm, err := bedrock.New(append([]bedrock.Option{bedrock.WithClient(client)}, opts...)...) if err != nil { From ec9e922eb610dbd61c26b7eb00a1af41a01cef86 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 21:59:10 +0300 Subject: [PATCH 369/618] fix(bedrock): the legacy Nova door refuses a picture it cannot name An image whose mime type has no Nova format left with "format": "" and the vendor's own rejection came back, while the Converse sibling refuses the same input before the network with a typed error. The legacy door now answers with the same error, and the tests pin both halves: a jpeg travels as an image block, an image/heic never reaches the wire. PAGI-257 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_nova.go | 23 ++++-- llms/bedrock/legacy_image_test.go | 79 +++++++++++++++++++ 2 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 llms/bedrock/legacy_image_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 80f5eb530..eb30995d9 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "errors" + "fmt" "strings" "github.com/vxcontrol/langchaingo/llms" @@ -318,14 +319,21 @@ func processInputMessagesNova(messages []Message) ([]*novaTextGenerationInputMes return nil, "", errors.New("multiple system prompts") } for _, message := range chunk { - c := getNovaInputContent(message) + c, err := getNovaInputContent(message) + if err != nil { + return nil, "", err + } systemPrompt += c.Text } continue } content := make([]novaTextGenerationInputContent, 0, len(chunk)) for _, message := range chunk { - content = append(content, getNovaInputContent(message)) + c, err := getNovaInputContent(message) + if err != nil { + return nil, "", err + } + content = append(content, c) } inputContents = append(inputContents, &novaTextGenerationInputMessage{ Role: role, @@ -355,22 +363,27 @@ func getNovaRole(role llms.ChatMessageType) (string, error) { } } -func getNovaInputContent(message Message) novaTextGenerationInputContent { +func getNovaInputContent(message Message) (novaTextGenerationInputContent, error) { var c novaTextGenerationInputContent if message.Type == NovaMessageTypeText { c = novaTextGenerationInputContent{ Text: message.Content, } } else if message.Type == NovaMessageTypeImage { + format := mimeTypeToFormat(message.MimeType) + if format == "" { + return novaTextGenerationInputContent{}, + fmt.Errorf("%w: %s", ErrUnsupportedImageFormat, message.MimeType) + } c = novaTextGenerationInputContent{} c.Image = &novaImageInput{ - Format: mimeTypeToFormat(message.MimeType), + Format: format, Source: novaBinGenerationInputSource{ Bytes: []byte(message.Content), }, } } - return c + return c, nil } func mimeTypeToFormat(mimeType string) string { diff --git a/llms/bedrock/legacy_image_test.go b/llms/bedrock/legacy_image_test.go new file mode 100644 index 000000000..d58800c9c --- /dev/null +++ b/llms/bedrock/legacy_image_test.go @@ -0,0 +1,79 @@ +package bedrock_test + +import ( + "context" + "encoding/base64" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" +) + +const novaAnswer = `{"output":{"message":{"content":[{"text":"ok"}]}},"stopReason":"end_turn",` + + `"usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + +func TestTheLegacyNovaDoorSendsAPictureAsAPicture(t *testing.T) { + t.Parallel() + + jpeg := []byte{0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10} + + llm, sent := legacyLLMCapturing(t, novaAnswer, bedrock.WithModel("amazon.nova-lite-v1:0")) + + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{ + llms.TextPart("what is on this picture?"), + llms.BinaryPart("image/jpeg", jpeg), + }, + }}) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Content []struct { + Image *struct { + Format string `json:"format"` + Source struct { + Bytes string `json:"bytes"` + } `json:"source"` + } `json:"image"` + } `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &payload)) + + var found bool + for _, m := range payload.Messages { + for _, block := range m.Content { + if block.Image == nil { + continue + } + found = true + assert.Equal(t, "jpeg", block.Image.Format, + "the mime type decides the format the vendor is told") + assert.Equal(t, base64.StdEncoding.EncodeToString(jpeg), block.Image.Source.Bytes, + "the bytes travel unchanged") + } + } + require.True(t, found, "the picture must reach the wire as an image block") +} + +func TestTheLegacyNovaDoorRefusesAPictureItCannotName(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, novaAnswer, bedrock.WithModel("amazon.nova-lite-v1:0")) + + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{llms.BinaryPart("image/heic", []byte{0x00, 0x01})}, + }}) + + require.ErrorIs(t, err, bedrockclient.ErrUnsupportedImageFormat, + "the legacy door must refuse by name what its Converse sibling refuses") + assert.Empty(t, *sent, "an image the door cannot name must not reach the vendor at all") +} From fc7ca89f4445a0375cb2867667380cc1e2a41206 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 22:02:17 +0300 Subject: [PATCH 370/618] fix(reasoning): send Nova's reasoningConfig only where the vendor documents it The predicate matched any model id containing amazon.nova-2, so Nova 2 Pro and Micro were asked to reason too. The Nova 2 request schema marks the field "Nova 2 Lite and Sonic only", and documentation silence is not permission. The pentagi catalogs list one Nova 2 model, us.amazon.nova-2-lite-v1:0, so nothing on the consumer's path changes shape. PAGI-257 Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 3 ++- llms/reasoning/bedrock_capability_test.go | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index ad3ec2b23..348b4a591 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -5,7 +5,8 @@ import "strings" // IsNovaReasoningModel reports whether the Bedrock model takes Amazon Nova's // reasoningConfig. func IsNovaReasoningModel(model string) bool { - return strings.Contains(baseModelName(model), "amazon.nova-2") + base := baseModelName(model) + return strings.Contains(base, "amazon.nova-2-lite") || strings.Contains(base, "amazon.nova-2-sonic") } // NovaEffort maps a requested effort onto the three levels Nova accepts. Bedrock diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index 1d41b160d..a9f934cb3 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -2,10 +2,10 @@ package reasoning import "testing" -func TestNovaReasoningModelIsTheSecondGenerationOnly(t *testing.T) { +func TestOnlyNovaLiteAndSonicTakeReasoningConfig(t *testing.T) { for _, model := range []string{ "amazon.nova-2-lite-v1:0", "us.amazon.nova-2-lite-v1:0", - "global.amazon.nova-2-pro-preview-20251202-v1:0", + "amazon.nova-2-sonic-v1:0", } { if !IsNovaReasoningModel(model) { t.Errorf("%s takes reasoningConfig", model) @@ -13,6 +13,7 @@ func TestNovaReasoningModelIsTheSecondGenerationOnly(t *testing.T) { } for _, model := range []string{ "amazon.nova-pro-v1:0", "us.amazon.nova-lite-v1:0", "amazon.nova-micro-v1:0", + "global.amazon.nova-2-pro-preview-20251202-v1:0", "us.amazon.nova-2-micro-v1:0", "us.anthropic.claude-opus-5", "openai.gpt-oss-120b-1:0", } { if IsNovaReasoningModel(model) { From aa343e944e40b6934573cb163fca252093d237e7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 22:05:24 +0300 Subject: [PATCH 371/618] fix(openai): the streamed answer reports the counters the whole one does The streaming usage type carried nine of the twelve leaf fields the whole-answer type has, and both paths feed one mapper, so a streamed call handed the caller a zero cache-creation counter and no upstream costs. The vendor does send them mid-stream: the last usage message in the recorded OpenRouter cassettes carries cache_write_tokens and both cost_details prices. The three fields now exist on the streamed type and are copied with the rest. PAGI-269 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 12 ++- llms/openai/stream_usage_parity_test.go | 94 +++++++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 llms/openai/stream_usage_parity_test.go diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index ed29a9c49..4747e2150 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -513,8 +513,9 @@ type Usage struct { CompletionTokens int `json:"completion_tokens"` TotalTokens int `json:"total_tokens"` PromptTokensDetails struct { - CachedTokens int `json:"cached_tokens"` - AudioTokens int `json:"audio_tokens"` + CachedTokens int `json:"cached_tokens"` + CacheWriteTokens int `json:"cache_write_tokens,omitempty"` + AudioTokens int `json:"audio_tokens"` } `json:"prompt_tokens_details"` CompletionTokensDetails struct { ReasoningTokens int `json:"reasoning_tokens"` @@ -522,6 +523,10 @@ type Usage struct { AcceptedPredictionTokens int `json:"accepted_prediction_tokens"` RejectedPredictionTokens int `json:"rejected_prediction_tokens"` } `json:"completion_tokens_details"` + CostDetails struct { + UpstreamInferencePromptCost *float64 `json:"upstream_inference_prompt_cost,omitempty"` + UpstreamInferenceCompletionsCost *float64 `json:"upstream_inference_completions_cost,omitempty"` + } `json:"cost_details,omitempty"` } // StreamedToolCall is a call to a tool. @@ -925,10 +930,13 @@ func updateChatUsage(chatUsage *ChatUsage, streamUsage *Usage) { chatUsage.TotalTokens = streamUsage.TotalTokens chatUsage.PromptTokensDetails.AudioTokens = streamUsage.PromptTokensDetails.AudioTokens chatUsage.PromptTokensDetails.CachedTokens = streamUsage.PromptTokensDetails.CachedTokens + chatUsage.PromptTokensDetails.CacheWriteTokens = streamUsage.PromptTokensDetails.CacheWriteTokens chatUsage.CompletionTokensDetails.AudioTokens = streamUsage.CompletionTokensDetails.AudioTokens chatUsage.CompletionTokensDetails.AcceptedPredictionTokens = streamUsage.CompletionTokensDetails.AcceptedPredictionTokens chatUsage.CompletionTokensDetails.RejectedPredictionTokens = streamUsage.CompletionTokensDetails.RejectedPredictionTokens chatUsage.CompletionTokensDetails.ReasoningTokens = streamUsage.CompletionTokensDetails.ReasoningTokens + chatUsage.CostDetails.UpstreamInferencePromptCost = streamUsage.CostDetails.UpstreamInferencePromptCost + chatUsage.CostDetails.UpstreamInferenceCompletionsCost = streamUsage.CostDetails.UpstreamInferenceCompletionsCost } func updateFunctionCall(message *ChatMessage, functionCall *FunctionCall) { diff --git a/llms/openai/stream_usage_parity_test.go b/llms/openai/stream_usage_parity_test.go new file mode 100644 index 000000000..8ea73454c --- /dev/null +++ b/llms/openai/stream_usage_parity_test.go @@ -0,0 +1,94 @@ +package openai + +import ( + "context" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +const usagePayload = `"usage":{"prompt_tokens":21,"completion_tokens":349,"total_tokens":370,` + + `"prompt_tokens_details":{"cached_tokens":7,"cache_write_tokens":13},` + + `"cost_details":{"upstream_inference_prompt_cost":0.000063,` + + `"upstream_inference_completions_cost":0.005235},` + + `"completion_tokens_details":{"reasoning_tokens":5}}` + +func usageOfAWholeAnswer(t *testing.T) map[string]any { + t.Helper() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"1","object":"chat.completion","model":"test",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"sixty rooms are free"},` + + `"finish_reason":"stop"}],` + usagePayload + `}`)) + })) + t.Cleanup(server.Close) + + return generationInfoAgainst(t, server, nil) +} + +func usageOfAStreamedAnswer(t *testing.T) map[string]any { + t.Helper() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "text/event-stream") + for _, line := range []string{ + `data: {"id":"1","object":"chat.completion.chunk","model":"test",` + + `"choices":[{"index":0,"delta":{"role":"assistant","content":"sixty rooms are free"}}]}`, + `data: {"id":"1","object":"chat.completion.chunk","model":"test",` + + `"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],` + usagePayload + `}`, + "data: [DONE]", + } { + _, _ = w.Write([]byte(line + "\n\n")) + } + })) + t.Cleanup(server.Close) + + return generationInfoAgainst(t, server, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) +} + +func generationInfoAgainst(t *testing.T, server *httptest.Server, opt llms.CallOption) map[string]any { + t.Helper() + + llm, err := New(WithToken("unit-test-key"), WithBaseURL(server.URL), WithModel("test-model")) + require.NoError(t, err) + + opts := []llms.CallOption{} + if opt != nil { + opts = append(opts, opt) + } + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + opts...) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + return resp.Choices[0].GenerationInfo +} + +func TestAStreamedAnswerReportsTheSameCountersAsAWholeOne(t *testing.T) { + t.Parallel() + + whole := usageOfAWholeAnswer(t) + streamed := usageOfAStreamedAnswer(t) + + for _, key := range []string{ + "PromptTokens", "CompletionTokens", "TotalTokens", + "CacheReadInputTokens", "CacheCreationInputTokens", "ReasoningTokens", + "UpstreamInferencePromptCost", "UpstreamInferenceCompletionsCost", + } { + assert.Equal(t, whole[key], streamed[key], + "%s must not depend on whether the answer arrived in one piece", key) + } + + assert.Equal(t, 13, streamed["CacheCreationInputTokens"], + "the cache-creation counter the vendor sent must reach the caller") + require.NotNil(t, streamed["UpstreamInferencePromptCost"]) + assert.InDelta(t, 0.000063, *streamed["UpstreamInferencePromptCost"].(*float64), 1e-9) +} From bef241f331ca053d8155c586c7feda6f6b946c0b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 22:09:39 +0300 Subject: [PATCH 372/618] fix(bedrock): one turn the caller wrote is one Converse message The caller's turn is split into one internal message per content part, and the Converse door reassembled only the assistant and tool runs. A human turn carrying text, an image and more text therefore left as three separate user messages, while the legacy door groups the same turn by role into one message with three blocks. The assistant accumulator also kept only the first text of a run and dropped the rest. Human messages now accumulate the same way the other roles do, and every text of an assistant run reaches the wire in the order it was written. PAGI-256 Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_turn_shape_test.go | 85 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 34 ++++++-- 2 files changed, 110 insertions(+), 9 deletions(-) create mode 100644 llms/bedrock/converse_turn_shape_test.go diff --git a/llms/bedrock/converse_turn_shape_test.go b/llms/bedrock/converse_turn_shape_test.go new file mode 100644 index 000000000..3c4fc4859 --- /dev/null +++ b/llms/bedrock/converse_turn_shape_test.go @@ -0,0 +1,85 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +type wireTurn struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` +} + +func converseTurns(t *testing.T, messages []llms.MessageContent) []wireTurn { + t.Helper() + + var body string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},`+ + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()) + _, err := llm.GenerateContent(context.Background(), messages) + require.NoError(t, err) + + var payload struct { + Messages []wireTurn `json:"messages"` + } + require.NoError(t, json.Unmarshal([]byte(body), &payload)) + return payload.Messages +} + +func TestOneHumanTurnReachesConverseAsOneMessage(t *testing.T) { + t.Parallel() + + turns := converseTurns(t, []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{ + llms.TextPart("what is on this picture?"), + llms.BinaryPart("image/jpeg", []byte{0xFF, 0xD8}), + llms.TextPart("and how many rooms are free?"), + }, + }}) + + require.Len(t, turns, 1, "one turn the caller wrote is one message on the wire, as on the legacy door") + assert.Equal(t, "user", turns[0].Role) + require.Len(t, turns[0].Content, 3, "every part of that turn travels, in the order it was written") + assert.Contains(t, turns[0].Content[0], "text") + assert.Contains(t, turns[0].Content[1], "image") + assert.Contains(t, turns[0].Content[2], "text") +} + +func TestAnAssistantTurnKeepsEveryTextItCarried(t *testing.T) { + t.Parallel() + + turns := converseTurns(t, []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "hi"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPart("first I checked the ledger"), + llms.TextPart("sixty rooms are free"), + }}, + llms.TextParts(llms.ChatMessageTypeHuman, "thanks"), + }) + + require.Len(t, turns, 3) + assert.Equal(t, "assistant", turns[1].Role) + require.Len(t, turns[1].Content, 2, "a second text in the same turn is not dropped") + assert.Equal(t, "first I checked the ledger", turns[1].Content[0]["text"]) + assert.Equal(t, "sixty rooms are free", turns[1].Content[1]["text"]) +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 841b0a185..bef40b2f1 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -282,7 +282,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti // aiMessageAccumulator accumulates consecutive AI messages into a single assistant message type aiMessageAccumulator struct { - textContent string + textBlocks []string reasoning *reasoning.ContentReasoning toolUseBlocks []types.ContentBlock cacheControl *CacheControl @@ -291,8 +291,8 @@ type aiMessageAccumulator struct { // addTextContent adds text content to the accumulator func (a *aiMessageAccumulator) addTextContent(content string, reasoningContent *reasoning.ContentReasoning) { - if a.textContent == "" { - a.textContent = content + if content != "" { + a.textBlocks = append(a.textBlocks, content) } if a.reasoning == nil && reasoningContent != nil { @@ -349,9 +349,8 @@ func (a *aiMessageAccumulator) build() types.Message { }) } - // Add text content if present - if a.textContent != "" { - content = append(content, &types.ContentBlockMemberText{Value: a.textContent}) + for _, text := range a.textBlocks { + content = append(content, &types.ContentBlockMemberText{Value: text}) } // Add all tool use blocks @@ -380,7 +379,7 @@ func (a *aiMessageAccumulator) build() types.Message { // reset clears the accumulator func (a *aiMessageAccumulator) reset() { - a.textContent = "" + a.textBlocks = nil a.reasoning = nil a.toolUseBlocks = nil a.cacheControl = nil @@ -463,6 +462,17 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ return nil } + var humanBlocks []types.ContentBlock + flushHuman := func() { + if len(humanBlocks) > 0 { + converseMessages = append(converseMessages, types.Message{ + Role: types.ConversationRoleUser, + Content: humanBlocks, + }) + humanBlocks = nil + } + } + for i, msg := range messages { switch msg.Role { case llms.ChatMessageTypeSystem: @@ -480,7 +490,6 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ return nil, nil, err } - // Convert and add user message directly converseMsg, err := c.convertUserOrAssistantMessage(msg) if err != nil { return nil, nil, err @@ -488,13 +497,19 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ if msg.CacheControl != nil { converseMsg.Content = append(converseMsg.Content, c.createCachePointBlock(msg.CacheControl)) } - converseMessages = append(converseMessages, converseMsg) + humanBlocks = append(humanBlocks, converseMsg.Content...) + + isLast := i == len(messages)-1 + if isLast || messages[i+1].Role != llms.ChatMessageTypeHuman { + flushHuman() + } case llms.ChatMessageTypeAI: // Flush tool results if any before processing AI message if err := flushToolResults(); err != nil { return nil, nil, err } + flushHuman() // Accumulate AI message content and tool calls if msg.ToolCall != nil { @@ -525,6 +540,7 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ if err := flushAI(); err != nil { return nil, nil, err } + flushHuman() // Accumulate tool result if err := toolAccum.addToolResult(msg.ToolResult); err != nil { From 50de10020775151e1232eff8c3f9bf679c187d92 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 22:10:36 +0300 Subject: [PATCH 373/618] fix(bedrock): the legacy Nova door stops inventing an empty system prompt Every request built a one-element system array whether or not the caller wrote a system message, so a plain question left with "system":[{}]. The vendor documents the field as optional and describes no empty entry, and the Converse sibling leaves the key off entirely. PAGI-257 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_nova.go | 4 +- llms/bedrock/legacy_image_test.go | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index eb30995d9..6f6126787 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -187,7 +187,9 @@ func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemProm input := novaTextGenerationInput{ Messages: inputContents, InferenceConfig: inferenceConfig, - System: []*novaSystemPrompt{{Text: systemPrompt}}, + } + if systemPrompt != "" { + input.System = []*novaSystemPrompt{{Text: systemPrompt}} } return json.Marshal(input) } diff --git a/llms/bedrock/legacy_image_test.go b/llms/bedrock/legacy_image_test.go index d58800c9c..5b68693b5 100644 --- a/llms/bedrock/legacy_image_test.go +++ b/llms/bedrock/legacy_image_test.go @@ -77,3 +77,41 @@ func TestTheLegacyNovaDoorRefusesAPictureItCannotName(t *testing.T) { "the legacy door must refuse by name what its Converse sibling refuses") assert.Empty(t, *sent, "an image the door cannot name must not reach the vendor at all") } + +func TestTheLegacyNovaDoorLeavesOutASystemPromptNobodyWrote(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, novaAnswer, bedrock.WithModel("amazon.nova-lite-v1:0")) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}) + require.NoError(t, err) + + var payload map[string]any + require.NoError(t, json.Unmarshal([]byte(*sent), &payload)) + + _, present := payload["system"] + assert.False(t, present, + "an absent system prompt leaves the key off the wire, as it does on the Converse door") +} + +func TestTheLegacyNovaDoorSendsASystemPromptSomebodyWrote(t *testing.T) { + t.Parallel() + + llm, sent := legacyLLMCapturing(t, novaAnswer, bedrock.WithModel("amazon.nova-lite-v1:0")) + + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeSystem, "you are a hotel receptionist"), + llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?"), + }) + require.NoError(t, err) + + var payload struct { + System []struct { + Text string `json:"text"` + } `json:"system"` + } + require.NoError(t, json.Unmarshal([]byte(*sent), &payload)) + require.Len(t, payload.System, 1) + assert.Equal(t, "you are a hotel receptionist", payload.System[0].Text) +} From 5c41dcde844a236af235b020c30d0f13dfe6c33d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 22:14:44 +0300 Subject: [PATCH 374/618] fix(mistral): the embeddings call keeps the path the caller configured The door handed the endpoint to mistral-go, whose request builder assigns uri.Path = "v1/embeddings" and so replaces whatever path the endpoint carried: an endpoint behind a gateway prefix left for the host root instead. The openai embeddings door appends its suffix to the configured base, so the same value meant two different addresses depending on the door. Embeddings now build their own request, joining the vendor's suffix onto the endpoint's path. A bare host is unchanged. The caller's context now reaches the request too, which the SDK path ignored, and a refusal carries what the vendor answered. PAGI-251 Co-Authored-By: Claude Opus 5 --- llms/mistral/embed_endpoint_test.go | 79 +++++++++++++++++++++++++++++ llms/mistral/mistralembed.go | 71 +++++++++++++++++++++++--- 2 files changed, 143 insertions(+), 7 deletions(-) create mode 100644 llms/mistral/embed_endpoint_test.go diff --git a/llms/mistral/embed_endpoint_test.go b/llms/mistral/embed_endpoint_test.go new file mode 100644 index 000000000..d5d87cd71 --- /dev/null +++ b/llms/mistral/embed_endpoint_test.go @@ -0,0 +1,79 @@ +package mistral + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func embeddingPathOnTheWire(t *testing.T, prefix string) string { + t.Helper() + + var got string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + got = r.URL.Path + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"data":[{"embedding":[0.1,0.2]}]}`)) + })) + t.Cleanup(srv.Close) + + m, err := New(WithEndpoint(srv.URL+prefix), WithAPIKey("k")) + require.NoError(t, err) + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + require.NoError(t, err) + return got +} + +func TestTheConfiguredEndpointKeepsItsPrefix(t *testing.T) { + t.Parallel() + + assert.Equal(t, "/v1/embeddings", embeddingPathOnTheWire(t, ""), + "an endpoint that is a bare host still reaches the vendor's own path") + assert.Equal(t, "/mistral/v1/embeddings", embeddingPathOnTheWire(t, "/mistral"), + "a gateway prefix is part of the address the caller configured, not decoration") +} + +func TestAnEmbeddingRefusalNamesWhatTheVendorSaid(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.WriteHeader(http.StatusNotFound) + _, _ = w.Write([]byte(`{"message":"no route for that prefix"}`)) + })) + t.Cleanup(srv.Close) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k")) + require.NoError(t, err) + + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + require.ErrorIs(t, err, ErrEmbeddingFailed) + assert.Contains(t, err.Error(), "no route for that prefix", + "the caller sees what the vendor answered, not just that something failed") +} + +func TestACancelledContextStopsTheEmbeddingCall(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"data":[{"embedding":[0.1]}]}`)) + })) + t.Cleanup(srv.Close) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k")) + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + _, err = m.CreateEmbedding(ctx, []string{"x"}) + require.ErrorIs(t, err, context.Canceled, + "the caller's cancellation reaches the request, it is not ignored") +} diff --git a/llms/mistral/mistralembed.go b/llms/mistral/mistralembed.go index e90ddeeb9..7819c8c67 100644 --- a/llms/mistral/mistralembed.go +++ b/llms/mistral/mistralembed.go @@ -1,13 +1,27 @@ package mistral import ( + "bytes" "context" + "encoding/json" "errors" + "fmt" + "io" + "net/http" + "net/url" + "path" + "strings" ) -var ErrEmptyEmbeddings = errors.New("empty embeddings") +var ( + ErrEmptyEmbeddings = errors.New("empty embeddings") + ErrEmbeddingFailed = errors.New("mistral: embedding request failed") +) -const defaultEmbeddingModel = "mistral-embed" +const ( + defaultEmbeddingModel = "mistral-embed" + embeddingsPath = "v1/embeddings" +) func convertFloat64ToFloat32(input []float64) []float32 { // Create a slice with the same length as the input. @@ -21,18 +35,61 @@ func convertFloat64ToFloat32(input []float64) []float32 { return output } +func (m *Model) embeddingsURL() (string, error) { + endpoint, err := url.Parse(m.clientOptions.endpoint) + if err != nil { + return "", fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + } + endpoint.Path = path.Join(endpoint.Path, embeddingsPath) + return endpoint.String(), nil +} + // CreateEmbedding implements the embeddings.EmbedderClient interface and creates embeddings for the given input texts. -func (m *Model) CreateEmbedding(_ context.Context, inputTexts []string) ([][]float32, error) { +func (m *Model) CreateEmbedding(ctx context.Context, inputTexts []string) ([][]float32, error) { model := m.clientOptions.embeddingModel if model == "" { model = defaultEmbeddingModel } - embsRes, err := m.client.Embeddings(model, inputTexts) + + endpoint, err := m.embeddingsURL() + if err != nil { + return nil, err + } + body, err := json.Marshal(map[string]any{"model": model, "input": inputTexts}) if err != nil { - return nil, errors.New("failed to create embeddings: " + err.Error()) + return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) } - allEmbds := make([][]float32, len(embsRes.Data)) - for i, embs := range embsRes.Data { + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(body)) + if err != nil { + return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + } + req.Header.Set("Authorization", "Bearer "+m.clientOptions.apiKey) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "application/json") + + resp, err := (&http.Client{Timeout: m.clientOptions.timeout}).Do(req) + if err != nil { + return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + detail, _ := io.ReadAll(io.LimitReader(resp.Body, 4096)) + return nil, fmt.Errorf("%w: %s: %s", ErrEmbeddingFailed, resp.Status, strings.TrimSpace(string(detail))) + } + + var decoded struct { + Data []struct { + Embedding []float64 `json:"embedding"` + } `json:"data"` + } + if err := json.NewDecoder(resp.Body).Decode(&decoded); err != nil { + return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + } + + allEmbds := make([][]float32, len(decoded.Data)) + for i, embs := range decoded.Data { if len(embs.Embedding) == 0 { return nil, ErrEmptyEmbeddings } From 6cb0355248b4bf855fa9a5a4636784603742917e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 22:16:28 +0300 Subject: [PATCH 375/618] docs(bedrock): make the README describe what the door does Ten places contradicted the code. The legacy path was sold as the broader door while it implements seven provider families and answers every other model id with "unsupported provider". Automatic caching was described as Claude 4.x while the pattern list also carries the 5.x line, in three places plus the sample. The legacy thinking list omitted Fable 5, which that door does configure. Nova 2 Pro and Micro were listed as taking reasoningConfig, which the vendor marks for Lite and Sonic. The matrix denied reasoning to MiniMax M2, which reasons on every request. Also puts ErrUnsupportedImageFormat's doc comment back where godoc reads it: the var had been inserted between a function's comment and the function. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 36 ++++++++++++------- .../bedrockclient/bedrockclient_converse.go | 1 - 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index a80612174..61f4cc779 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -46,8 +46,10 @@ graph TB **Legacy API** (InvokeModel/InvokeModelWithResponseStream): - Direct access to model-specific features - Anthropic cache_control format support -- Broader model compatibility -- **Use when**: Model not supported by Converse API +- Narrower model compatibility: seven provider families are implemented — ai21, amazon, + nova, anthropic, cohere, meta and deepseek. Any other model id answers + "unsupported provider" on this path +- **Use when**: a provider-specific field has no Converse equivalent **Converse API** (Converse/ConverseStream): - Unified interface across all models @@ -75,7 +77,7 @@ flowchart LR **Challenge**: Anthropic's prompt caching requires manual cache control wrappers on client side. -**Solution**: Automatic cache point insertion for Claude 4.x models. +**Solution**: Automatic cache point insertion for Claude 4.x and 5.x models. ```mermaid sequenceDiagram @@ -98,7 +100,9 @@ sequenceDiagram ``` **Implementation**: -- `supportsCaching()`: Pattern matching on model ID (`claude-opus-4`, `claude-sonnet-4`, `claude-haiku-4`) +- `supportsCaching()`: Pattern matching on model ID (`claude-opus-4`, `claude-sonnet-4`, + `claude-haiku-4`, `claude-opus-5`, `claude-sonnet-5`, `claude-haiku-5`, `claude-fable-5`, + `claude-mythos-5`) - `applyAutomaticCaching()`: Adds `CacheControl{Type: "ephemeral", TTL: "5m"}` to last cacheable message (assistant or tool response) - **Why last message?** Caches conversation history before new user input - **TTL Options**: 5 minutes (default) or 1 hour (configurable via `EphemeralCacheOneHour()`) @@ -192,13 +196,14 @@ configuration on this platform. The rest reason on their own and carry nothing. **Converse API** — a thinking configuration is sent for: - Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in `additionalModelRequestFields`, adaptive or budget (see below) -- Amazon Nova 2 (Lite, Pro, Micro) — `reasoningConfig` in `additionalModelRequestFields` +- Amazon Nova 2 Lite and Sonic — `reasoningConfig` in `additionalModelRequestFields`. + The vendor marks the field for those two only, so Nova 2 Pro and Micro do not get it - xAI Grok 4.x — `reasoning.effort` in `additionalModelRequestFields` **Legacy API** (InvokeModel) — a thinking configuration is sent for: -- Claude: Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in the +- Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in the Anthropic body -- Amazon Nova 2 (Lite, Pro, Micro) — `reasoningConfig` inside `inferenceConfig` +- Amazon Nova 2 Lite and Sonic — `reasoningConfig` inside `inferenceConfig` **Reasoning models that take no configuration here**: OpenAI GPT OSS (120B, 20B), Moonshot Kimi K2-Thinking, MiniMax M2/M2.1/M2.5, DeepSeek R1, Z-AI GLM, NVIDIA @@ -505,9 +510,10 @@ Tool arguments arrive in chunks: ### When to Use Legacy vs Converse API **Use Legacy API**: -- Model doesn't support Converse API - Need Anthropic-specific cache_control format - Debugging provider-specific issues +- Note that this path implements seven provider families only; Converse serves every + model in `models_list.go` **Use Converse API**: - Default for new implementations @@ -518,14 +524,19 @@ Tool arguments arrive in chunks: ### Adding Caching Support **Criteria**: -1. Model must support Anthropic prompt caching (currently only Claude 4.x) +1. Model must support Anthropic prompt caching (Claude 4.x and 5.x) 2. Add pattern to `supportsCaching()` in `bedrockllm.go`: ```go cachingPatterns := []string{ "claude-opus-4", "claude-sonnet-4", "claude-haiku-4", - "claude-new-4", // Add new model pattern + "claude-opus-5", + "claude-sonnet-5", + "claude-haiku-5", + "claude-fable-5", + "claude-mythos-5", + "claude-new-5", // Add new model pattern } ``` 3. Ensure model supports minimum 1024 tokens threshold for cache activation @@ -771,7 +782,8 @@ for the exact model IDs. | Claude Opus 5/4.8/4.7/4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Claude Sonnet 5/4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Claude Haiku 4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| Nova 2 Lite/Pro/Micro | ✅ | ✅ | ✅ | ✅ | ❌ | Converse native* | +| Nova 2 Lite | ✅ | ✅ | ✅ | ✅ | ❌ | Converse native* | +| Nova 2 Pro/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | | Nova Pro/Lite/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | | Llama 4 / 3.x | Limited | ❌ | ✅ | ✅ | ❌ | Converse native* | | DeepSeek V3.2 | ✅ | ❌ | ✅ | ❌ | ❌ | Converse native* | @@ -780,7 +792,7 @@ for the exact model IDs. | Qwen3 | Varies** | ❌ | ✅ | Some | ❌ | Converse native* | | Mistral | ✅*** | ❌ | ✅ | Some | ❌ | Converse native* | | Moonshot Kimi | ✅**** | ✅ | ✅ | Some | ❌ | Converse native* | -| MiniMax M2/M2.1/M2.5 | ✅ | ✅ (M2.5/M2.1) | ✅ | ❌ | ❌ | Converse native* | +| MiniMax M2/M2.1/M2.5 | ✅ | ✅ (always-on) | ✅ | ❌ | ❌ | Converse native* | | GLM-4.7/4.7-Flash/5 | ❌***** | ❌****** | ✅ | ❌ | ❌ | Converse native* | | NVIDIA Nemotron 3 Super | ✅ | ❌****** | ✅ | ❌ | ❌ | Converse native* | diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index bef40b2f1..de0cf220b 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -601,7 +601,6 @@ func (c *ConverseClient) addCachePointToMessages(messages []types.Message) { }) } -// convertUserOrAssistantMessage converts user or assistant messages // ErrUnsupportedImageFormat reports a MIME type Converse has no image format for. var ErrUnsupportedImageFormat = errors.New("bedrock: unsupported image mime type") From f4dcd0f6d38e5d7a7ea6978d1d66e3561c6f1718 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 23:18:17 +0300 Subject: [PATCH 376/618] fix(mistral): do not add the version segment an endpoint already carries Joining the vendor's whole suffix onto the configured path turned https://api.mistral.ai/v1 into /v1/v1/embeddings and a 404. That shape is the one the SDK path served before, and it is what pentagi's installer offers as the placeholder for this provider, so the previous commit was a regression for it. The version segment is now added only when the endpoint does not already end in it, which also makes a base like /openai/v1 resolve to the same address on this door as on the openai one. The test pinned only the two shapes the defect did not touch; it now carries the version-suffixed ones as well. PAGI-251 Co-Authored-By: Claude Opus 5 --- llms/mistral/embed_endpoint_test.go | 6 ++++++ llms/mistral/mistralembed.go | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/llms/mistral/embed_endpoint_test.go b/llms/mistral/embed_endpoint_test.go index d5d87cd71..07df64f7c 100644 --- a/llms/mistral/embed_endpoint_test.go +++ b/llms/mistral/embed_endpoint_test.go @@ -37,6 +37,12 @@ func TestTheConfiguredEndpointKeepsItsPrefix(t *testing.T) { "an endpoint that is a bare host still reaches the vendor's own path") assert.Equal(t, "/mistral/v1/embeddings", embeddingPathOnTheWire(t, "/mistral"), "a gateway prefix is part of the address the caller configured, not decoration") + assert.Equal(t, "/v1/embeddings", embeddingPathOnTheWire(t, "/v1"), + "an endpoint that already names the version does not get it twice") + assert.Equal(t, "/mistral/v1/embeddings", embeddingPathOnTheWire(t, "/mistral/v1"), + "a prefix that already names the version keeps both, and each of them once") + assert.Equal(t, "/openai/v1/embeddings", embeddingPathOnTheWire(t, "/openai/v1"), + "the same base the openai door is given resolves to the same address on this door") } func TestAnEmbeddingRefusalNamesWhatTheVendorSaid(t *testing.T) { diff --git a/llms/mistral/mistralembed.go b/llms/mistral/mistralembed.go index 7819c8c67..fe5bd0576 100644 --- a/llms/mistral/mistralembed.go +++ b/llms/mistral/mistralembed.go @@ -20,7 +20,8 @@ var ( const ( defaultEmbeddingModel = "mistral-embed" - embeddingsPath = "v1/embeddings" + apiVersionSegment = "v1" + embeddingsSegment = "embeddings" ) func convertFloat64ToFloat32(input []float64) []float32 { @@ -40,7 +41,10 @@ func (m *Model) embeddingsURL() (string, error) { if err != nil { return "", fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) } - endpoint.Path = path.Join(endpoint.Path, embeddingsPath) + if path.Base(endpoint.Path) != apiVersionSegment { + endpoint.Path = path.Join(endpoint.Path, apiVersionSegment) + } + endpoint.Path = path.Join(endpoint.Path, embeddingsSegment) return endpoint.String(), nil } From b6fa58641c6be30a42543fb9b7da765befc6f74c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 23:24:19 +0300 Subject: [PATCH 377/618] fix(bedrock): read the streamed counters the legacy wire actually carries The nova stream parser was written around a messageDelta event and a messageStart that carries usage. The vendor's own recording in testdata/TestAmazonStreamingOutputLegacyAPI.httprr shows neither: usage arrives in a metadata event and the stop reason in messageStop, and messageDelta appears in none of the thirty cassettes. A streamed nova answer therefore reached the caller with an empty GenerationInfo, no stop reason and Truncated always false. The meta parser summed both counters from the chunk in hand, while the recording carries prompt_token_count only in the first chunk; on the last one the total came out as the completion alone. Both fixtures were built from the parser's own struct rather than from the wire, which is why they stayed green over the defect. They now carry the recorded shapes, and the streamed subtest also pins the stop reason each family reports. PAGI-270 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_meta.go | 6 ++-- .../internal/bedrockclient/provider_nova.go | 36 +++++++++---------- llms/bedrock/legacy_counter_type_test.go | 19 +++++++--- llms/bedrock/provider_families_test.go | 3 +- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index ece9cf1be..646f09a27 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -187,8 +187,10 @@ DoStream: contentchoices[0].GenerationInfo["output_tokens"] = resp.GenerationTokenCount contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.GenerationTokenCount) } - if resp.PromptTokenCount > 0 || resp.GenerationTokenCount > 0 { - contentchoices[0].GenerationInfo["TotalTokens"] = int(resp.PromptTokenCount) + int(resp.GenerationTokenCount) + prompt, _ := contentchoices[0].GenerationInfo["PromptTokens"].(int) + completion, _ := contentchoices[0].GenerationInfo["CompletionTokens"].(int) + if prompt > 0 || completion > 0 { + contentchoices[0].GenerationInfo["TotalTokens"] = prompt + completion } } } diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 6f6126787..84d127f92 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -130,18 +130,17 @@ type novaStreamingResponseChunk struct { } `json:"delta"` } `json:"contentBlockDelta"` MessageStart struct { - Role string `json:"role"` - Usage struct { - InputTokens int32 `json:"inputTokens"` - } `json:"usage"` + Role string `json:"role"` } `json:"messageStart"` - MessageDelta struct { + MessageStop struct { StopReason string `json:"stopReason"` - Usage struct { + } `json:"messageStop"` + Metadata struct { + Usage struct { + InputTokens int32 `json:"inputTokens"` OutputTokens int32 `json:"outputTokens"` } `json:"usage"` - } `json:"messageDelta"` - MessageStop struct{} `json:"messageStop"` + } `json:"metadata"` } // Finish reason for Nova models @@ -443,20 +442,17 @@ DoStream: } } - // Check for message start (contains input tokens) - if resp.MessageStart.Usage.InputTokens > 0 { - contentchoices[0].GenerationInfo["input_tokens"] = resp.MessageStart.Usage.InputTokens - contentchoices[0].GenerationInfo["PromptTokens"] = int(resp.MessageStart.Usage.InputTokens) + if resp.MessageStop.StopReason != "" { + contentchoices[0].StopReason = resp.MessageStop.StopReason + contentchoices[0].Truncated = llms.IsTruncated(resp.MessageStop.StopReason) } - - // Check for message delta (contains stop reason and output tokens) - if resp.MessageDelta.StopReason != "" { - contentchoices[0].StopReason = resp.MessageDelta.StopReason - contentchoices[0].Truncated = llms.IsTruncated(resp.MessageDelta.StopReason) + if resp.Metadata.Usage.InputTokens > 0 { + contentchoices[0].GenerationInfo["input_tokens"] = resp.Metadata.Usage.InputTokens + contentchoices[0].GenerationInfo["PromptTokens"] = int(resp.Metadata.Usage.InputTokens) } - if resp.MessageDelta.Usage.OutputTokens > 0 { - contentchoices[0].GenerationInfo["output_tokens"] = resp.MessageDelta.Usage.OutputTokens - contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.MessageDelta.Usage.OutputTokens) + if resp.Metadata.Usage.OutputTokens > 0 { + contentchoices[0].GenerationInfo["output_tokens"] = resp.Metadata.Usage.OutputTokens + contentchoices[0].GenerationInfo["CompletionTokens"] = int(resp.Metadata.Usage.OutputTokens) } prompt, _ := contentchoices[0].GenerationInfo["PromptTokens"].(int) completion, _ := contentchoices[0].GenerationInfo["CompletionTokens"].(int) diff --git a/llms/bedrock/legacy_counter_type_test.go b/llms/bedrock/legacy_counter_type_test.go index 1c23bf18b..c944a8267 100644 --- a/llms/bedrock/legacy_counter_type_test.go +++ b/llms/bedrock/legacy_counter_type_test.go @@ -21,6 +21,7 @@ type counterCase struct { model string whole string chunks []string + stop string } var wantCounters = map[string]int{"PromptTokens": 5, "CompletionTokens": 3, "TotalTokens": 8} @@ -29,6 +30,7 @@ func legacyCounterFamilies() []counterCase { return []counterCase{ { name: "amazon", + stop: "FINISH", model: "amazon.titan-text-express-v1", whole: `{"inputTextTokenCount":5,"results":[{"tokenCount":3,"outputText":"ok",` + `"completionReason":"FINISH"}]}`, @@ -39,14 +41,17 @@ func legacyCounterFamilies() []counterCase { }, { name: "meta", + stop: "stop", model: "meta.llama3-70b-instruct-v1:0", whole: `{"generation":"ok","prompt_token_count":5,"generation_token_count":3,"stop_reason":"stop"}`, chunks: []string{ - `{"generation":"ok","stop_reason":"stop","prompt_token_count":5,"generation_token_count":3}`, + `{"generation":"o","prompt_token_count":5,"generation_token_count":1,"stop_reason":null}`, + `{"generation":"k","prompt_token_count":null,"generation_token_count":3,"stop_reason":"stop"}`, }, }, { name: "ai21", + stop: "stop", model: "ai21.jamba-1-5-large-v1:0", whole: `{"id":"x","choices":[{"index":0,"message":{"role":"assistant","content":"ok"},` + `"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"completion_tokens":3,` + @@ -58,13 +63,17 @@ func legacyCounterFamilies() []counterCase { }, { name: "nova", + stop: "end_turn", model: "amazon.nova-pro-v1:0", whole: `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + `"stopReason":"end_turn","usage":{"inputTokens":5,"outputTokens":3,"totalTokens":8}}`, chunks: []string{ - `{"messageStart":{"role":"assistant","usage":{"inputTokens":5}}}`, - `{"contentBlockDelta":{"delta":{"text":"ok"}}}`, - `{"messageDelta":{"stopReason":"end_turn","usage":{"outputTokens":3}}}`, + `{"messageStart":{"role":"assistant"}}`, + `{"contentBlockDelta":{"delta":{"text":"ok"},"contentBlockIndex":0}}`, + `{"contentBlockStop":{"contentBlockIndex":0}}`, + `{"messageStop":{"stopReason":"end_turn"}}`, + `{"metadata":{"usage":{"inputTokens":5,"outputTokens":3,` + + `"cacheReadInputTokenCount":0,"cacheWriteInputTokenCount":0},"metrics":{}}}`, }, }, } @@ -107,6 +116,8 @@ func TestEveryLegacyFamilyReportsCountersAsInt(t *testing.T) { require.Len(t, resp.Choices, 1) assertCounters(t, resp.Choices[0].GenerationInfo) + assert.Equal(t, tc.stop, resp.Choices[0].StopReason, + "the reason the vendor gave for stopping reaches the caller on the streamed path too") }) } } diff --git a/llms/bedrock/provider_families_test.go b/llms/bedrock/provider_families_test.go index e4a50f8f7..894f94782 100644 --- a/llms/bedrock/provider_families_test.go +++ b/llms/bedrock/provider_families_test.go @@ -93,7 +93,8 @@ func nonClaudeFamilies() []familyCase { chunks: []string{ `{"contentBlockDelta":{"delta":{"text":"sixty "}}}`, `{"contentBlockDelta":{"delta":{"text":"rooms"}}}`, - `{"messageDelta":{"stopReason":"max_tokens","usage":{"outputTokens":3}}}`, + `{"messageStop":{"stopReason":"max_tokens"}}`, + `{"metadata":{"usage":{"inputTokens":5,"outputTokens":3}}}`, }, wantText: "sixty rooms", wantReason: "max_tokens", From c91cf0fadc9523ce192f23165ff528a43fa99b50 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 23:24:32 +0300 Subject: [PATCH 378/618] test(bedrock): run the conformance suite on the door pentagi uses llmtest.TestLLM only ever replayed legacy traffic: every request in testdata/TestLLM.httprr ends in /invoke, while the consumer builds its client with WithConverseAPI. A regression in the Converse request builder or response parser left the whole suite green. The second run is in place and skips until someone records its cassette with real AWS credentials, which is the only part of this that needs a vendor. PAGI-247 Co-Authored-By: Claude Opus 5 --- llms/bedrock/llmtest_converse_test.go | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 llms/bedrock/llmtest_converse_test.go diff --git a/llms/bedrock/llmtest_converse_test.go b/llms/bedrock/llmtest_converse_test.go new file mode 100644 index 000000000..99a2fef0b --- /dev/null +++ b/llms/bedrock/llmtest_converse_test.go @@ -0,0 +1,45 @@ +package bedrock_test + +import ( + "net/http" + "os" + "path/filepath" + "testing" + + "github.com/vxcontrol/langchaingo/internal/httprr" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/testing/llmtest" +) + +func TestLLMConverse(t *testing.T) { + cassette := filepath.Join("testdata", "TestLLMConverse.httprr") + recording, err := httprr.Recording(cassette) + if err != nil { + t.Fatal(err) + } + if _, statErr := os.Stat(cassette); statErr != nil && !recording { + t.Skip("no httprr recording for TestLLMConverse; re-run with -httprecord=. and real AWS credentials") + } + + rr := httprr.OpenForTest(t, http.DefaultTransport) + // llmtest drives parallel subtests, which resume only after this function + // returns; a deferred Close would shut the recorder before they run. + t.Cleanup(func() { + if closeErr := rr.Close(); closeErr != nil { + t.Errorf("closing the recording: %v", closeErr) + } + }) + + client, err := setUpTestWithTransport(rr) + if err != nil { + t.Fatal(err) + } + + llm, err := bedrock.New(bedrock.WithClient(client), + bedrock.WithModel(bedrock.ModelAnthropicClaudeHaiku45), bedrock.WithConverseAPI()) + if err != nil { + t.Fatalf("Failed to create Bedrock LLM: %v", err) + } + + llmtest.TestLLM(t, llm) +} From a0f7039a23d06e5978f7b98e645f42c8144a9ba9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Mon, 7 Sep 2026 23:26:50 +0300 Subject: [PATCH 379/618] refactor(bedrock): drop two flushes the human buffer can never reach The human arm flushes whenever the next message is not another human turn, so control reaches the assistant and tool arms only with an empty buffer. The two calls there were added with the merge and never did anything. PAGI-256 Co-Authored-By: Claude Opus 5 --- llms/bedrock/internal/bedrockclient/bedrockclient_converse.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index de0cf220b..53f1beff4 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -509,7 +509,6 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ if err := flushToolResults(); err != nil { return nil, nil, err } - flushHuman() // Accumulate AI message content and tool calls if msg.ToolCall != nil { @@ -540,7 +539,6 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ if err := flushAI(); err != nil { return nil, nil, err } - flushHuman() // Accumulate tool result if err := toolAccum.addToolResult(msg.ToolResult); err != nil { From 60dc09b62e668207fe090c121532d11ec0e48c6e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:15:22 +0300 Subject: [PATCH 380/618] test(bedrock): record the Converse conformance suite through a native passthrough The suite only ever replayed legacy traffic, and recording it needed AWS credentials nobody had. The gateway forwards Bedrock's native protocol under its own prefix and authenticates with a bearer key, which the SDK already speaks, so the whole suite records against real Bedrock without one. The recording is stored under the vendor's own address: the scrub rewrites the gateway prefix away, drops the credential header, and normalises the model id's colon, which the SDK escapes and the gateway does not. Replay therefore runs offline with the static credentials every other cassette here uses, and a test asserts the recording carries the vendor's host and no credential. PAGI-247 Co-Authored-By: Claude Opus 5 --- llms/bedrock/llmtest_converse_test.go | 90 ++++++- llms/bedrock/testdata/TestLLMConverse.httprr | 241 +++++++++++++++++++ 2 files changed, 324 insertions(+), 7 deletions(-) create mode 100644 llms/bedrock/testdata/TestLLMConverse.httprr diff --git a/llms/bedrock/llmtest_converse_test.go b/llms/bedrock/llmtest_converse_test.go index 99a2fef0b..50879912f 100644 --- a/llms/bedrock/llmtest_converse_test.go +++ b/llms/bedrock/llmtest_converse_test.go @@ -2,15 +2,74 @@ package bedrock_test import ( "net/http" + "net/url" "os" "path/filepath" + "strings" "testing" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/aws/smithy-go/auth/bearer" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/llms/bedrock" "github.com/vxcontrol/langchaingo/testing/llmtest" ) +const awsBedrockHost = "bedrock-runtime.us-east-1.amazonaws.com" + +func conformanceClient(t *testing.T, rr *httprr.RecordReplay) *bedrockruntime.Client { + t.Helper() + + base := os.Getenv("BEDROCK_PASSTHROUGH_URL") + prefix := "" + if base != "" { + parsed, err := url.Parse(base) + require.NoError(t, err, "BEDROCK_PASSTHROUGH_URL must be a URL") + prefix = strings.TrimSuffix(parsed.Path, "/") + } + + rr.ScrubReq(func(req *http.Request) error { + req.Header.Del("Amz-Sdk-Invocation-Id") + req.Header.Del("Amz-Sdk-Request") + req.Header.Del("X-Amz-Date") + req.Header.Del("Authorization") + req.URL.Scheme = "https" + req.URL.Host = awsBedrockHost + req.URL.Path = strings.TrimPrefix(req.URL.Path, prefix) + req.URL.RawPath = "" + req.Host = awsBedrockHost + return nil + }) + + httpClient := &http.Client{Transport: rr} + + if !rr.Recording() { + cfg, err := config.LoadDefaultConfig(t.Context(), + append([]func(*config.LoadOptions) error{config.WithHTTPClient(httpClient)}, + replayCredentials(false)...)...) + require.NoError(t, err) + return bedrockruntime.NewFromConfig(cfg, replayClientOptions(false)...) + } + + key := os.Getenv("BEDROCK_PASSTHROUGH_KEY") + require.NotEmpty(t, base, "recording needs BEDROCK_PASSTHROUGH_URL") + require.NotEmpty(t, key, "recording needs BEDROCK_PASSTHROUGH_KEY") + + cfg, err := config.LoadDefaultConfig(t.Context(), + config.WithHTTPClient(httpClient), config.WithRegion(replayRegion)) + require.NoError(t, err) + + return bedrockruntime.NewFromConfig(cfg, func(o *bedrockruntime.Options) { + o.BaseEndpoint = aws.String(base) + o.BearerAuthTokenProvider = bearer.StaticTokenProvider{Token: bearer.Token{Value: key}} + o.AuthSchemePreference = []string{"httpBearerAuth"} + }) +} + func TestLLMConverse(t *testing.T) { cassette := filepath.Join("testdata", "TestLLMConverse.httprr") recording, err := httprr.Recording(cassette) @@ -18,7 +77,7 @@ func TestLLMConverse(t *testing.T) { t.Fatal(err) } if _, statErr := os.Stat(cassette); statErr != nil && !recording { - t.Skip("no httprr recording for TestLLMConverse; re-run with -httprecord=. and real AWS credentials") + t.Skip("no httprr recording for TestLLMConverse; re-run with -httprecord=. and a gateway key") } rr := httprr.OpenForTest(t, http.DefaultTransport) @@ -30,12 +89,7 @@ func TestLLMConverse(t *testing.T) { } }) - client, err := setUpTestWithTransport(rr) - if err != nil { - t.Fatal(err) - } - - llm, err := bedrock.New(bedrock.WithClient(client), + llm, err := bedrock.New(bedrock.WithClient(conformanceClient(t, rr)), bedrock.WithModel(bedrock.ModelAnthropicClaudeHaiku45), bedrock.WithConverseAPI()) if err != nil { t.Fatalf("Failed to create Bedrock LLM: %v", err) @@ -43,3 +97,25 @@ func TestLLMConverse(t *testing.T) { llmtest.TestLLM(t, llm) } + +func TestTheConformanceRecordingAddressesTheVendor(t *testing.T) { + t.Parallel() + + recorded, err := os.ReadFile(filepath.Join("testdata", "TestLLMConverse.httprr")) + if err != nil { + t.Skip("no recording for TestLLMConverse yet") + } + + requests := 0 + for _, line := range strings.Split(string(recorded), "\n") { + switch { + case strings.HasPrefix(line, "POST "): + requests++ + require.Contains(t, line, awsBedrockHost, + "a recording made through a gateway must be stored under the vendor's own address") + case strings.HasPrefix(line, "Authorization:"): + require.Fail(t, "the recording carries a credential header") + } + } + require.NotZero(t, requests, "the recording must hold at least one request") +} diff --git a/llms/bedrock/testdata/TestLLMConverse.httprr b/llms/bedrock/testdata/TestLLMConverse.httprr new file mode 100644 index 000000000..a07bef425 --- /dev/null +++ b/llms/bedrock/testdata/TestLLMConverse.httprr @@ -0,0 +1,241 @@ +httprr trace v1 +376 1278 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 121 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":10},"messages":[{"content":[{"text":"Reply with 'OK' and nothing else"}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 257 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:44 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: 36882004-b421-45ac-9067-4f1c9c4d1987 +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: cd9ab606-b141-46ac-b0f0-2fec49622e30 +X-Litellm-Key-Spend: 3783.006034756675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.0 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.0 +X-Litellm-Response-Cost-Output: 0.0 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":468},"output":{"message":{"content":[{"text":"OK"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":16,"outputTokens":4,"serverToolUsage":{},"totalTokens":20}}498 1281 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 243 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":1},"messages":[{"content":[{"text":"test"}],"role":"user"}],"toolConfig":{"toolChoice":{"auto":{}},"tools":[{"toolSpec":{"description":"Test tool","inputSchema":{"json":{"type":"object"}},"name":"test_tool"}}]}}HTTP/2.0 200 OK +Content-Length: 260 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:45 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: 6d4ef555-dda0-4803-8a34-a2afa17c2446 +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: 694fbac4-e980-4fc5-9d12-78ef0c2079ed +X-Litellm-Key-Spend: 3783.006034756675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.0 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.0 +X-Litellm-Response-Cost-Output: 0.0 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":478},"output":{"message":{"content":[{"text":"I"}],"role":"assistant"}},"stopReason":"max_tokens","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":535,"outputTokens":1,"serverToolUsage":{},"totalTokens":536}}379 1281 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 124 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":10},"messages":[{"content":[{"text":"Reply with 'Hello' and nothing else"}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 260 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:45 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: 9cb307c7-ff09-4bdb-8590-c3f818b31e22 +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: bac64d15-33b8-40cc-8ed4-37c393cf0264 +X-Litellm-Key-Spend: 3783.006034756675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.0 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.0 +X-Litellm-Response-Cost-Output: 0.0 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":510},"output":{"message":{"content":[{"text":"Hello"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":16,"outputTokens":4,"serverToolUsage":{},"totalTokens":20}}1576 1280 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 1320 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":10},"messages":[{"content":[{"text":"Say 'OK'"}],"role":"user"}],"system":[{"text":"This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. "}]}HTTP/2.0 200 OK +Content-Length: 259 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:46 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: c9e1b352-9dfd-464c-b0b4-996e3031636e +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: 59fbd331-401b-416d-96ee-1c79939bc911 +X-Litellm-Key-Spend: 3783.006034756675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.0 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.0 +X-Litellm-Response-Cost-Output: 0.0 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":489},"output":{"message":{"content":[{"text":"OK"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":263,"outputTokens":4,"serverToolUsage":{},"totalTokens":267}}353 1290 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 99 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":50},"messages":[{"content":[{"text":"Count to 5"}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 269 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:46 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: 5f918dd9-c5c7-40ff-8ef8-9953d29e076c +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: 9ce0419a-95d0-4559-9c01-3183704f5268 +X-Litellm-Key-Spend: 3783.006034756675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.0 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.0 +X-Litellm-Response-Cost-Output: 0.0 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":537},"output":{"message":{"content":[{"text":"1\n2\n3\n4\n5"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":11,"outputTokens":13,"serverToolUsage":{},"totalTokens":24}}660 1407 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 405 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":100},"messages":[{"content":[{"text":"What's the weather in San Francisco?"}],"role":"user"}],"toolConfig":{"toolChoice":{"auto":{}},"tools":[{"toolSpec":{"description":"Get the weather for a location","inputSchema":{"json":{"properties":{"location":{"description":"The city and country","type":"string"}},"required":["location"],"type":"object"}},"name":"get_weather"}}]}}HTTP/2.0 200 OK +Content-Length: 386 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:46 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: be10a41a-3a45-4b28-b484-09ca86b7390f +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: 1121f667-dccc-4106-abc1-d9f83e3d4206 +X-Litellm-Key-Spend: 3783.006034756675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.0 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.0 +X-Litellm-Response-Cost-Output: 0.0 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":707},"output":{"message":{"content":[{"toolUse":{"input":{"location":"San Francisco, USA"},"name":"get_weather","toolUseId":"tooluse_xMPXcGmIeWSRs6ujcXb2Fv","type":"tool_use"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":574,"outputTokens":57,"serverToolUsage":{},"totalTokens":631}}1576 1371 +POST https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/converse HTTP/1.1 +Host: bedrock-runtime.us-east-1.amazonaws.com +User-Agent: langchaingo-httprr +Content-Length: 1320 +Content-Type: application/json + +{"inferenceConfig":{"maxTokens":10},"messages":[{"content":[{"text":"Say 'OK'"}],"role":"user"}],"system":[{"text":"This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. This is cached context. "}]}HTTP/2.0 200 OK +Content-Length: 259 +Content-Security-Policy: frame-ancestors 'none' +Content-Type: application/json +Date: Tue, 08 Sep 2026 00:12:48 GMT +Server: nginx +Strict-Transport-Security: max-age=31536000 +Vary: Accept-Encoding +X-Amzn-Requestid: db27eeef-9c63-4d08-9cd3-a92d9516271d +X-Content-Type-Options: nosniff +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Litellm-Call-Id: 34c1b9b7-ae40-455c-95e8-7a16cdb985c8 +X-Litellm-Key-Spend: 3783.006346056675 +X-Litellm-Model-Id: 6915d127a6e715e52357ee26efbb7014dfff4de22a2094b93ac975289c1a4802 +X-Litellm-Model-Name: bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 +X-Litellm-Response-Cost: 0.00031130000000000003 +X-Litellm-Response-Cost-Discount-Amount: 0.0 +X-Litellm-Response-Cost-Input: 0.00028930000000000004 +X-Litellm-Response-Cost-Margin-Amount: 0.0 +X-Litellm-Response-Cost-Margin-Percent: 0.0 +X-Litellm-Response-Cost-Original: 0.00031130000000000003 +X-Litellm-Response-Cost-Output: 2.2e-05 +X-Litellm-Response-Cost-Tool-Usage: 0.0 +X-Litellm-Version: 1.99.1 +X-Xss-Protection: 1; mode=block + +{"metrics":{"latencyMs":460},"output":{"message":{"content":[{"text":"OK"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"inputTokens":263,"outputTokens":4,"serverToolUsage":{},"totalTokens":267}} \ No newline at end of file From e1dd620d370dece5c51eb7376930f8a4a5fcee43 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:19:15 +0300 Subject: [PATCH 381/618] test(googleai): pin what the Vertex backend puts on the wire The door already reaches Vertex through google.golang.org/genai when a project and location are set, but nothing checked what that produces. An injected HTTP client makes the backend testable without a Google account: the request carries the project, location and model in the vendor's own path shape, a caller's thinking budget arrives as thinkingConfig, and a required tool arrives as functionCallingConfig mode ANY. That is the safety net the vertex migration needs, and it already shows the two options the old vertex door drops. PAGI-138 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex_backend_test.go | 109 +++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 llms/googleai/vertex_backend_test.go diff --git a/llms/googleai/vertex_backend_test.go b/llms/googleai/vertex_backend_test.go new file mode 100644 index 000000000..69f364a7c --- /dev/null +++ b/llms/googleai/vertex_backend_test.go @@ -0,0 +1,109 @@ +package googleai + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func vertexCall(t *testing.T, opts []Option, call ...llms.CallOption) (string, map[string]any, *llms.ContentResponse) { + t.Helper() + + var gotURL, gotBody string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + gotURL, gotBody = r.URL.String(), string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"sixty rooms are free"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":3,"candidatesTokenCount":5,"totalTokenCount":8}}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(context.Background(), append([]Option{ + WithCloudProject("hotel-desk"), + WithCloudLocation("europe-west4"), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: &toLocalServer{host: srv.Listener.Addr().String()}}), + }, opts...)...) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, call...) + require.NoError(t, err) + + var body map[string]any + require.NoError(t, json.Unmarshal([]byte(gotBody), &body)) + return gotURL, body, resp +} + +type toLocalServer struct { + host string +} + +func (t *toLocalServer) RoundTrip(req *http.Request) (*http.Response, error) { + req.URL.Scheme = "http" + req.URL.Host = t.host + return http.DefaultTransport.RoundTrip(req) +} + +func TestTheVertexBackendAddressesTheProjectTheCallerNamed(t *testing.T) { + t.Parallel() + + got, _, resp := vertexCall(t, nil) + + assert.Contains(t, got, "/projects/hotel-desk/locations/europe-west4/", + "the project and location the caller gave decide the address") + assert.Contains(t, got, "/publishers/google/models/gemini-2.5-flash:generateContent", + "the model reaches the vendor's own path shape") + + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) + assert.Equal(t, 3, resp.Choices[0].GenerationInfo["PromptTokens"]) + assert.Equal(t, 5, resp.Choices[0].GenerationInfo["CompletionTokens"]) +} + +func TestTheVertexBackendCarriesAThinkingBudget(t *testing.T) { + t.Parallel() + + _, body, _ := vertexCall(t, nil, llms.WithReasoning(llms.ReasoningNone, 2048)) + + config, ok := body["generationConfig"].(map[string]any) + require.True(t, ok, "the request carries a generation config") + thinking, ok := config["thinkingConfig"].(map[string]any) + require.True(t, ok, "a caller that asked for a budget gets a thinking config on the wire") + assert.Equal(t, float64(2048), thinking["thinkingBudget"], + "the budget the caller named is the budget the vendor is told") +} + +func TestTheVertexBackendCarriesTheToolChoice(t *testing.T) { + t.Parallel() + + tools := []llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "rooms_free", + Description: "how many rooms are free", + Parameters: map[string]any{ + "type": "object", + "properties": map[string]any{"floor": map[string]any{"type": "integer"}}, + }, + }, + }} + + _, body, _ := vertexCall(t, nil, llms.WithTools(tools), llms.WithToolChoice("required")) + + config, ok := body["toolConfig"].(map[string]any) + require.True(t, ok, "a caller that required a tool gets a tool config on the wire") + calling, ok := config["functionCallingConfig"].(map[string]any) + require.True(t, ok) + assert.Equal(t, "ANY", calling["mode"], + "required means the vendor's ANY, not the default AUTO") +} From 4f6589c8450f3c489b062f614b8dfbd71506e45c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:29:51 +0300 Subject: [PATCH 382/618] refactor(vertex): reach Vertex AI through the GenAI SDK backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The vertex door carried its own client on cloud.google.com/go/vertexai: a full copy of the googleai request builder, its own structured-output and embeddings paths, and a generator that stamped one out of the other. The googleai door already reaches Vertex through the Google GenAI SDK by setting the backend, so the copy served nothing but drift. vertex.New now resolves the cloud project and location — from options or from GOOGLE_CLOUD_PROJECT / GOOGLE_CLOUD_LOCATION — and returns a typed error when neither names a target, then hands the call to googleai.New. Everything the door can do now comes from one implementation. WithRest no longer switches a transport: the GenAI SDK speaks REST on every backend. It stays as an accepted no-op so callers keep compiling. Tests pin the address on the wire: the Vertex backend is reached at /projects//locations//publishers/google/models/..., embeddings go through the same backend, and the thinking budget and the tool choice survive the hand-off. Refs PAGI-138 Co-Authored-By: Claude Opus 5 --- go.mod | 1 - go.sum | 2 - llms/googleai/README.md | 19 +- llms/googleai/googleai_unit_test.go | 3 +- llms/googleai/internal/cmd/generate-vertex.go | 23 - llms/googleai/new.go | 5 +- llms/googleai/option.go | 8 +- llms/googleai/vertex/blocked_prompt_test.go | 47 -- llms/googleai/vertex/embeddings.go | 28 - llms/googleai/vertex/embeddings_test.go | 211 ----- llms/googleai/vertex/finish_response_test.go | 65 -- .../googleai/vertex/generation_config_test.go | 102 --- llms/googleai/vertex/new.go | 77 -- llms/googleai/vertex/new_test.go | 248 ------ llms/googleai/vertex/partial_stream_test.go | 57 -- llms/googleai/vertex/structured_output.go | 315 ------- .../googleai/vertex/structured_output_test.go | 287 ------- llms/googleai/vertex/vertex.go | 650 +-------------- llms/googleai/vertex/vertex_test.go | 591 +++---------- llms/googleai/vertex/vertex_unit_test.go | 774 ------------------ 20 files changed, 179 insertions(+), 3334 deletions(-) delete mode 100644 llms/googleai/internal/cmd/generate-vertex.go delete mode 100644 llms/googleai/vertex/blocked_prompt_test.go delete mode 100644 llms/googleai/vertex/embeddings.go delete mode 100644 llms/googleai/vertex/embeddings_test.go delete mode 100644 llms/googleai/vertex/finish_response_test.go delete mode 100644 llms/googleai/vertex/generation_config_test.go delete mode 100644 llms/googleai/vertex/new.go delete mode 100644 llms/googleai/vertex/new_test.go delete mode 100644 llms/googleai/vertex/partial_stream_test.go delete mode 100644 llms/googleai/vertex/structured_output.go delete mode 100644 llms/googleai/vertex/structured_output_test.go delete mode 100644 llms/googleai/vertex/vertex_unit_test.go diff --git a/go.mod b/go.mod index 0f774026f..e6d3b2812 100644 --- a/go.mod +++ b/go.mod @@ -53,7 +53,6 @@ require ( // Cloud platforms and AI services require ( cloud.google.com/go/aiplatform v1.85.0 - cloud.google.com/go/vertexai v0.12.0 github.com/aws/aws-sdk-go-v2 v1.41.5 github.com/aws/aws-sdk-go-v2/config v1.32.10 github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.52.4 diff --git a/go.sum b/go.sum index 1c9d75882..435aaf718 100644 --- a/go.sum +++ b/go.sum @@ -19,8 +19,6 @@ cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= -cloud.google.com/go/vertexai v0.12.0 h1:zTadEo/CtsoyRXNx3uGCncoWAP1H2HakGqwznt+iMo8= -cloud.google.com/go/vertexai v0.12.0/go.mod h1:8u+d0TsvBfAAd2x5R6GMgbYhsLgo3J7lmP4bR8g2ig8= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= diff --git a/llms/googleai/README.md b/llms/googleai/README.md index d07f58e6c..4883b66f4 100644 --- a/llms/googleai/README.md +++ b/llms/googleai/README.md @@ -7,16 +7,17 @@ This directory contains langchaingo provider for Google's models. * In the `palm` directory: provider for the legacy PaLM models. Both the `googleai` and `vertex` providers give access to Gemini-family -multi-modal LLMs. The code between these providers was historically very similar, -and most of the `vertex` package used to be code-generated from the `googleai` -package. +multi-modal LLMs, and both now run on one SDK, `google.golang.org/genai`, which +reaches either backend from the same client. -That generator is now **obsolete and must not be run**: the two packages target -different SDKs — `googleai` uses `google.golang.org/genai` while `vertex` uses -`cloud.google.com/go/vertexai/genai` — so their sources have legitimately -diverged. The `vertex` package is now **hand-maintained**. The former generator at -`llms/googleai/internal/cmd/generate-vertex.go` exits with an error explaining -this; migrating `vertex` onto the unified SDK is tracked as separate future work. +The `vertex` package is therefore a thin wrapper: it fixes the backend to Vertex +AI, takes the cloud project and location from options or from +`GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION`, and refuses to start without +them. Every capability — generation, streaming, tools, thinking, structured +output, embeddings — comes from the `googleai` door, so the two cannot drift +apart. The package used to carry its own copy of that adapter on the deprecated +`cloud.google.com/go/vertexai/genai` SDK, along with a code generator; both are +gone. ---- diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 4b61fb631..72996b6fd 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -147,7 +147,8 @@ func TestOptions(t *testing.T) { //nolint:funlen // comprehensive test //nolint: t.Run("WithRest", func(t *testing.T) { opts := &Options{} WithRest()(opts) - assert.Len(t, opts.ClientOptions, 1) + assert.Empty(t, opts.ClientOptions, + "the SDK speaks REST on every backend, so the option has nothing to add") }) t.Run("WithHTTPClient", func(t *testing.T) { diff --git a/llms/googleai/internal/cmd/generate-vertex.go b/llms/googleai/internal/cmd/generate-vertex.go deleted file mode 100644 index 86b4fb504..000000000 --- a/llms/googleai/internal/cmd/generate-vertex.go +++ /dev/null @@ -1,23 +0,0 @@ -// Obsolete generator: the vertex package is now hand-maintained. -// -// It used to regenerate llms/googleai/vertex/vertex.go from googleai.go, but the -// two packages now target different SDKs (google.golang.org/genai for googleai vs -// cloud.google.com/go/vertexai/genai for vertex), so a mechanical rewrite of the -// old import no longer produces a compilable file. Running it would clobber the -// hand-written vertex code. It refuses to run rather than silently corrupt. -// -// nolint -package main - -import ( - "fmt" - "os" -) - -func main() { - fmt.Fprintln(os.Stderr, "generate-vertex is obsolete: the vertex package is hand-maintained.") - fmt.Fprintln(os.Stderr, "googleai uses google.golang.org/genai while vertex uses cloud.google.com/go/vertexai/genai;") - fmt.Fprintln(os.Stderr, "regenerating vertex.go from googleai.go would produce a file that does not compile.") - fmt.Fprintln(os.Stderr, "Edit llms/googleai/vertex/vertex.go by hand. See llms/googleai/README.md.") - os.Exit(1) -} diff --git a/llms/googleai/new.go b/llms/googleai/new.go index e489c7e8c..ec64ee945 100644 --- a/llms/googleai/new.go +++ b/llms/googleai/new.go @@ -77,9 +77,8 @@ func New(ctx context.Context, opts ...Option) (*GoogleAI, error) { return gi, nil } -// ErrOptionNotHonored reports options this door cannot carry. Pass credentials -// and gRPC connections to vertex.New, which builds a client that takes them, or -// shape the transport with WithHTTPClient. +// ErrOptionNotHonored reports options this door cannot carry. Shape the +// transport with WithHTTPClient. type ErrOptionNotHonored struct { Options []string } diff --git a/llms/googleai/option.go b/llms/googleai/option.go index 99268231d..fc645b54a 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -8,7 +8,6 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" - "cloud.google.com/go/vertexai/genai" "google.golang.org/api/option" "google.golang.org/grpc" ) @@ -100,11 +99,10 @@ func WithCredentialsFile(credentialsFile string) Option { } } -// WithRest configures the client to use the REST API. +// WithRest is accepted for compatibility and does nothing: the Google GenAI SDK +// speaks REST on every backend, so there is no transport left to switch. func WithRest() Option { - return func(opts *Options) { - opts.ClientOptions = append(opts.ClientOptions, genai.WithREST()) - } + return func(*Options) {} } // WithGRPCClient append a ClientOption that uses the provided gRPC client to diff --git a/llms/googleai/vertex/blocked_prompt_test.go b/llms/googleai/vertex/blocked_prompt_test.go deleted file mode 100644 index 7d34108ba..000000000 --- a/llms/googleai/vertex/blocked_prompt_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package vertex - -import ( - "bytes" - "context" - "io" - "net/http" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/googleai" -) - -type blockedPrompt struct{} - -func (blockedPrompt) RoundTrip(r *http.Request) (*http.Response, error) { - const body = `{"promptFeedback":{"blockReason":"SAFETY",` + - `"blockReasonMessage":"the prompt was rejected by the safety filter"}}` - return &http.Response{ - StatusCode: http.StatusOK, - Header: http.Header{"Content-Type": []string{"application/json"}}, - Body: io.NopCloser(bytes.NewReader([]byte(body))), - Request: r, - }, nil -} - -func TestABlockedPromptReachesTheCallerClassified(t *testing.T) { - t.Setenv("GOOGLE_API_KEY", "unit-test-key") - - v, err := New(context.Background(), - googleai.WithRest(), googleai.WithAPIKey("unit-test-key"), - googleai.WithCloudProject("unit"), googleai.WithCloudLocation("us-central1"), - googleai.WithDefaultModel("gemini-2.5-flash"), - googleai.WithHTTPClient(&http.Client{Transport: blockedPrompt{}})) - require.NoError(t, err) - t.Cleanup(func() { _ = v.Close() }) - - _, err = v.GenerateContent(context.Background(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) - - var apiErr *llms.Error - require.ErrorAs(t, err, &apiErr, "a blocked prompt must reach the caller in this project's terms") - assert.Equal(t, llms.ErrCodeContentFilter, apiErr.Code) -} diff --git a/llms/googleai/vertex/embeddings.go b/llms/googleai/vertex/embeddings.go deleted file mode 100644 index 74439a925..000000000 --- a/llms/googleai/vertex/embeddings.go +++ /dev/null @@ -1,28 +0,0 @@ -package vertex - -import ( - "context" - "errors" - "fmt" - - "github.com/vxcontrol/langchaingo/llms/googleai/internal/palmclient" -) - -// CreateEmbedding creates embeddings from texts. -func (g *Vertex) CreateEmbedding(ctx context.Context, texts []string) ([][]float32, error) { - embeddings, err := g.palmClient.CreateEmbedding(ctx, &palmclient.EmbeddingRequest{ - Input: texts, - }) - if err != nil { - return [][]float32{}, err - } - - if len(embeddings) == 0 { - return nil, errors.New("empty response") - } - if len(texts) != len(embeddings) { - return embeddings, fmt.Errorf("returned %d embeddings for %d texts", len(embeddings), len(texts)) - } - - return embeddings, nil -} diff --git a/llms/googleai/vertex/embeddings_test.go b/llms/googleai/vertex/embeddings_test.go deleted file mode 100644 index cf4e8d526..000000000 --- a/llms/googleai/vertex/embeddings_test.go +++ /dev/null @@ -1,211 +0,0 @@ -package vertex - -import ( - "errors" - "testing" - - "github.com/vxcontrol/langchaingo/llms/googleai" - "github.com/vxcontrol/langchaingo/llms/googleai/internal/palmclient" -) - -func TestCreateEmbedding(t *testing.T) { - tests := []struct { - name string - texts []string - mockEmbeddings [][]float32 - mockErr error - wantErr bool - errContains string - }{ - { - name: "successful single embedding", - texts: []string{"Hello, world!"}, - mockEmbeddings: [][]float32{ - {0.1, 0.2, 0.3, 0.4}, - }, - wantErr: false, - }, - { - name: "successful multiple embeddings", - texts: []string{"First text", "Second text", "Third text"}, - mockEmbeddings: [][]float32{ - {0.1, 0.2, 0.3}, - {0.4, 0.5, 0.6}, - {0.7, 0.8, 0.9}, - }, - wantErr: false, - }, - { - name: "empty response error", - texts: []string{"Test text"}, - mockEmbeddings: [][]float32{}, - wantErr: true, - errContains: "empty response", - }, - { - name: "mismatched count error", - texts: []string{"First", "Second"}, - mockEmbeddings: [][]float32{ - {0.1, 0.2, 0.3}, - }, - wantErr: true, - errContains: "returned 1 embeddings for 2 texts", - }, - { - name: "palm client error", - texts: []string{"Test"}, - mockErr: errors.New("API error"), - wantErr: true, - errContains: "API error", - }, - { - name: "empty texts", - texts: []string{}, - mockEmbeddings: [][]float32{}, - wantErr: true, - errContains: "empty response", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // Create a Vertex instance with mocked palm client - v := &Vertex{ - opts: googleai.DefaultOptions(), - // We can't easily mock the palmClient field since it's private - // and the type is from an internal package - } - - // For actual testing, we'd need to either: - // 1. Make palmClient an interface - // 2. Use dependency injection - // 3. Use a testing package that can mock private fields - - // Since we can't directly test CreateEmbedding without modifying - // the production code, we'll test what we can - if v.opts.DefaultEmbeddingModel != "gemini-embedding-001" { - t.Errorf("expected default embedding model 'gemini-embedding-001', got %q", v.opts.DefaultEmbeddingModel) - } - }) - } -} - -func TestCreateEmbeddingValidation(t *testing.T) { - // Test input validation scenarios - tests := []struct { - name string - texts []string - }{ - { - name: "nil texts slice", - texts: nil, - }, - { - name: "empty texts slice", - texts: []string{}, - }, - { - name: "single empty string", - texts: []string{""}, - }, - { - name: "mixed empty and non-empty strings", - texts: []string{"valid", "", "another valid"}, - }, - { - name: "very long text", - texts: []string{string(make([]byte, 10000))}, - }, - { - name: "special characters", - texts: []string{"Text with 特殊字符 and émojis 🚀"}, - }, - { - name: "newlines and tabs", - texts: []string{"Text with\nnewlines\tand\ttabs"}, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // We can't test the actual behavior without a real or mocked client, - // but we document the test cases for when the code is refactored - // to be more testable - _ = tt.texts - }) - } -} - -func TestEmbeddingDimensions(t *testing.T) { - // Test different embedding dimensions - testCases := []struct { - name string - embeddings [][]float32 - valid bool - }{ - { - name: "standard 768 dimensions", - embeddings: [][]float32{ - make([]float32, 768), - }, - valid: true, - }, - { - name: "small dimensions", - embeddings: [][]float32{ - {0.1, 0.2, 0.3}, - }, - valid: true, - }, - { - name: "inconsistent dimensions", - embeddings: [][]float32{ - {0.1, 0.2, 0.3}, - {0.4, 0.5}, // Different dimension - }, - valid: false, // This would be an error case - }, - { - name: "zero dimensions", - embeddings: [][]float32{ - {}, - }, - valid: false, // Empty embeddings should be an error - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - // Document test case for future implementation - _ = tc - }) - } -} - -// TestEmbeddingRequestStructure verifies the structure of embedding requests -func TestEmbeddingRequestStructure(t *testing.T) { - // This test documents the expected structure of palmclient.EmbeddingRequest - req := &palmclient.EmbeddingRequest{ - Input: []string{"test text"}, - } - - if len(req.Input) != 1 { - t.Errorf("expected 1 input, got %d", len(req.Input)) - } - if req.Input[0] != "test text" { - t.Errorf("expected input 'test text', got %q", req.Input[0]) - } -} - -// TestVertexEmbeddingIntegration would test the full integration -// but requires actual API credentials or more sophisticated mocking -func TestVertexEmbeddingIntegration(t *testing.T) { - t.Skip("Integration test requires API credentials") - - // This test is skipped but documents how integration testing would work: - // 1. Create a Vertex client with valid credentials - // 2. Call CreateEmbedding with test texts - // 3. Verify embeddings are returned - // 4. Check embedding dimensions and values - // 5. Test error cases (invalid credentials, network errors, etc.) -} diff --git a/llms/googleai/vertex/finish_response_test.go b/llms/googleai/vertex/finish_response_test.go deleted file mode 100644 index 653b68a2f..000000000 --- a/llms/googleai/vertex/finish_response_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package vertex - -import ( - "encoding/json" - "errors" - "testing" - - "cloud.google.com/go/vertexai/genai" - "github.com/vxcontrol/langchaingo/llms" -) - -func TestFinishVertexResponseRefusesATruncatedAnswer(t *testing.T) { - t.Parallel() - - resp, err := convertCandidates([]*genai.Candidate{{ - Content: &genai.Content{Parts: []genai.Part{genai.Text("half an ans")}}, - FinishReason: genai.FinishReasonMaxTokens, - }}, nil) - if err != nil { - t.Fatalf("convertCandidates: %v", err) - } - - if err := finishVertexResponse(&llms.CallOptions{}, resp); err != nil { - t.Errorf("without the option a truncated answer must pass through, got %v", err) - } - - err = finishVertexResponse(&llms.CallOptions{FailOnTruncation: true}, resp) - if err == nil { - t.Fatal("WithFailOnTruncation must refuse a truncated answer") - } - var typed *llms.Error - if !errors.As(err, &typed) || typed.Code != llms.ErrCodeTruncated { - t.Errorf("want a typed truncation error, got %v", err) - } - if resp.Choices[0].Content != "half an ans" { - t.Error("the partial answer must survive the refusal") - } -} - -func TestToolCallsBelongToTheCandidateThatMadeThem(t *testing.T) { - t.Parallel() - - call := func(name string) genai.Part { - return genai.FunctionCall{Name: name, Args: map[string]any{"a": 1}} - } - resp, err := convertCandidates([]*genai.Candidate{ - {Content: &genai.Content{Parts: []genai.Part{call("alpha")}}, FinishReason: genai.FinishReasonStop}, - {Content: &genai.Content{Parts: []genai.Part{call("beta")}}, FinishReason: genai.FinishReasonStop}, - }, nil) - if err != nil { - t.Fatalf("convertCandidates: %v", err) - } - - for i, want := range []string{"alpha", "beta"} { - got := resp.Choices[i].ToolCalls - if len(got) != 1 || got[0].FunctionCall.Name != want { - names := make([]string, 0, len(got)) - for _, c := range got { - names = append(names, c.FunctionCall.Name) - } - b, _ := json.Marshal(names) - t.Errorf("choice %d carries %s, want exactly [%q]", i, b, want) - } - } -} diff --git a/llms/googleai/vertex/generation_config_test.go b/llms/googleai/vertex/generation_config_test.go deleted file mode 100644 index 1fccd1f12..000000000 --- a/llms/googleai/vertex/generation_config_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package vertex - -import ( - "math" - "testing" - - "cloud.google.com/go/vertexai/genai" - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/googleai" -) - -func TestGenerationConfigSaturatesInsteadOfWrapping(t *testing.T) { - t.Parallel() - - for _, tc := range []struct { - name string - in int - wantTokens int32 - }{ - {"ordinary", 16384, 16384}, - {"exactly the ceiling", math.MaxInt32, math.MaxInt32}, - {"above the ceiling", math.MaxInt32 + 1, math.MaxInt32}, - {"far above the ceiling", 3_000_000_000, math.MaxInt32}, - } { - t.Run(tc.name, func(t *testing.T) { - t.Parallel() - n := tc.in - model := &genai.GenerativeModel{} - applyGenerationConfig(model, llms.CallOptions{ - MaxTokens: &n, - CandidateCount: &n, - TopK: &n, - }) - - if got := *model.MaxOutputTokens; got != tc.wantTokens { - t.Errorf("MaxOutputTokens = %d, want %d", got, tc.wantTokens) - } - if got := *model.CandidateCount; got != tc.wantTokens { - t.Errorf("CandidateCount = %d, want %d", got, tc.wantTokens) - } - if got := *model.TopK; got != tc.wantTokens { - t.Errorf("TopK = %d, want %d", got, tc.wantTokens) - } - }) - } -} - -func TestResolveCallOptionsFillsTheTemperatureTheCallerLeftUnset(t *testing.T) { - t.Parallel() - - for _, tc := range []struct { - name string - model string - opts []llms.CallOption - want float64 - }{ - {"a thinking-level model runs at 1.0", "gemini-3-pro-preview", nil, 1.0}, - {"an explicit value survives", "gemini-3-pro-preview", []llms.CallOption{llms.WithTemperature(0.2)}, 0.2}, - {"other families keep the client default", "gemini-2.5-flash", nil, 0.5}, - } { - t.Run(tc.name, func(t *testing.T) { - t.Parallel() - g := &Vertex{opts: googleai.Options{DefaultModel: tc.model, DefaultTemperature: 0.5}} - - got := g.resolveCallOptions(tc.opts) - if got.Temperature == nil { - t.Fatal("temperature must be resolved, not left to the model") - } - if *got.Temperature != tc.want { - t.Errorf("temperature = %v, want %v", *got.Temperature, tc.want) - } - }) - } -} - -func TestRefusesReasoningOffOnlyWhereOmittingWouldNotDisable(t *testing.T) { - t.Parallel() - - off := llms.WithReasoningDisabled() - for _, tc := range []struct { - model string - want bool - }{ - {"gemini-2.0-flash", false}, - {"gemini-1.5-flash", false}, - {"gemini-2.5-flash-lite", false}, - {"gemini-2.5-flash", true}, - {"gemini-2.5-pro", true}, - {"", true}, - } { - opts := llms.CallOptions{Model: &tc.model} - off(&opts) - if got := refusesReasoningOff(opts); got != tc.want { - t.Errorf("refusesReasoningOff(%q) = %v, want %v", tc.model, got, tc.want) - } - } - - none := llms.CallOptions{} - if refusesReasoningOff(none) { - t.Error("a call that never asked to disable must not be refused") - } -} diff --git a/llms/googleai/vertex/new.go b/llms/googleai/vertex/new.go deleted file mode 100644 index b6124e88e..000000000 --- a/llms/googleai/vertex/new.go +++ /dev/null @@ -1,77 +0,0 @@ -// package vertex implements a langchaingo provider for Google Vertex AI LLMs, -// including the new Gemini models. -// See https://cloud.google.com/vertex-ai for more details. -package vertex - -import ( - "context" - - "github.com/vxcontrol/langchaingo/callbacks" - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/googleai" - "github.com/vxcontrol/langchaingo/llms/googleai/internal/palmclient" - - "cloud.google.com/go/vertexai/genai" -) - -// Vertex is a type that represents a Vertex AI API client. -// -// Right now, the Vertex Gemini SDK doesn't support embeddings; therefore, -// for embeddings we also hold a palmclient. -type Vertex struct { - CallbacksHandler callbacks.Handler - client *genai.Client - opts googleai.Options - palmClient *palmclient.PaLMClient -} - -var _ llms.Model = &Vertex{} - -// New creates a new Vertex client. -func New(ctx context.Context, opts ...googleai.Option) (*Vertex, error) { - clientOptions := googleai.DefaultOptions() - for _, opt := range opts { - opt(&clientOptions) - } - - client, err := genai.NewClient( - ctx, - clientOptions.CloudProject, - clientOptions.CloudLocation, - clientOptions.ClientOptions...) - if err != nil { - return nil, err - } - - palmOpts := []palmclient.Option{ - palmclient.WithEmbeddingModelName(clientOptions.DefaultEmbeddingModel), - palmclient.WithClientOptions(clientOptions.ClientOptions...), - } - palmClient, err := palmclient.New( - ctx, - clientOptions.CloudProject, - clientOptions.CloudLocation, - palmOpts...) - if err != nil { - return nil, err - } - - v := &Vertex{ - opts: clientOptions, - client: client, - palmClient: palmClient, - } - return v, nil -} - -// Close closes the underlying genai and palm clients. -// This should be called when the Vertex instance is no longer needed -// to prevent memory leaks from the underlying gRPC connections. -func (v *Vertex) Close() error { - var err error - if v.client != nil { - err = v.client.Close() - } - // Note: palmClient doesn't have a Close method based on the codebase - return err -} diff --git a/llms/googleai/vertex/new_test.go b/llms/googleai/vertex/new_test.go deleted file mode 100644 index 7f065c10b..000000000 --- a/llms/googleai/vertex/new_test.go +++ /dev/null @@ -1,248 +0,0 @@ -package vertex - -import ( - "net/http" - "testing" - - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/googleai" - - "google.golang.org/api/option" -) - -func TestNewWithOptions(t *testing.T) { - // Since we can't control the genai.NewClient behavior in tests, - // we'll skip these tests that require actual API interaction - t.Skip("Skipping New() tests that require actual API credentials or mocked clients") -} - -func TestDefaultOptions(t *testing.T) { - opts := googleai.DefaultOptions() - - // Test default values - if opts.DefaultModel != "gemini-2.5-flash" { - t.Errorf("expected default model 'gemini-2.5-flash', got %q", opts.DefaultModel) - } - if opts.DefaultEmbeddingModel != "gemini-embedding-001" { - t.Errorf("expected default embedding model 'gemini-embedding-001', got %q", opts.DefaultEmbeddingModel) - } - if opts.DefaultCandidateCount != 1 { - t.Errorf("expected default candidate count 1, got %d", opts.DefaultCandidateCount) - } - if opts.DefaultMaxTokens != llms.DefaultMaxTokens { - t.Errorf("expected default max tokens %d, got %d", llms.DefaultMaxTokens, opts.DefaultMaxTokens) - } - if opts.DefaultTemperature != 0.5 { - t.Errorf("expected default temperature 0.5, got %f", opts.DefaultTemperature) - } - if opts.DefaultTopK != 3 { - t.Errorf("expected default TopK 3, got %d", opts.DefaultTopK) - } - if opts.DefaultTopP != 0.95 { - t.Errorf("expected default TopP 0.95, got %f", opts.DefaultTopP) - } - if opts.HarmThreshold != googleai.HarmBlockNone { - t.Errorf("expected default harm threshold HarmBlockNone, got %v", opts.HarmThreshold) - } -} - -func TestOptionsApplication(t *testing.T) { //nolint:funlen // comprehensive test //nolint:funlen // comprehensive test - // Test that options modify the default correctly - defaultOpts := googleai.DefaultOptions() - - // Apply options - googleai.WithDefaultModel("custom-model")(&defaultOpts) - if defaultOpts.DefaultModel != "custom-model" { - t.Errorf("WithDefaultModel did not update model") - } - - googleai.WithDefaultEmbeddingModel("custom-embedding")(&defaultOpts) - if defaultOpts.DefaultEmbeddingModel != "custom-embedding" { - t.Errorf("WithDefaultEmbeddingModel did not update embedding model") - } - - googleai.WithDefaultCandidateCount(3)(&defaultOpts) - if defaultOpts.DefaultCandidateCount != 3 { - t.Errorf("WithDefaultCandidateCount did not update candidate count") - } - - googleai.WithDefaultMaxTokens(4096)(&defaultOpts) - if defaultOpts.DefaultMaxTokens != 4096 { - t.Errorf("WithDefaultMaxTokens did not update max tokens") - } - - googleai.WithDefaultTemperature(0.9)(&defaultOpts) - if defaultOpts.DefaultTemperature != 0.9 { - t.Errorf("WithDefaultTemperature did not update temperature") - } - - googleai.WithDefaultTopK(5)(&defaultOpts) - if defaultOpts.DefaultTopK != 5 { - t.Errorf("WithDefaultTopK did not update TopK") - } - - googleai.WithDefaultTopP(0.99)(&defaultOpts) - if defaultOpts.DefaultTopP != 0.99 { - t.Errorf("WithDefaultTopP did not update TopP") - } - - googleai.WithHarmThreshold(googleai.HarmBlockNone)(&defaultOpts) - if defaultOpts.HarmThreshold != googleai.HarmBlockNone { - t.Errorf("WithHarmThreshold did not update harm threshold") - } - - googleai.WithCloudProject("my-project")(&defaultOpts) - if defaultOpts.CloudProject != "my-project" { - t.Errorf("WithCloudProject did not update project") - } - - googleai.WithCloudLocation("europe-west1")(&defaultOpts) - if defaultOpts.CloudLocation != "europe-west1" { - t.Errorf("WithCloudLocation did not update location") - } - - // Test client options - googleai.WithAPIKey("test-key")(&defaultOpts) - if len(defaultOpts.ClientOptions) == 0 { - t.Error("WithAPIKey did not add client option") - } - - googleai.WithCredentialsFile("creds.json")(&defaultOpts) - found := false - for _, opt := range defaultOpts.ClientOptions { - if opt != nil { - found = true - break - } - } - if !found { - t.Error("WithCredentialsFile did not add client option") - } - - googleai.WithCredentialsJSON([]byte("{}"))(&defaultOpts) - if len(defaultOpts.ClientOptions) < 2 { - t.Error("WithCredentialsJSON did not add client option") - } - - // Test empty credential options - emptyOpts := googleai.DefaultOptions() - googleai.WithCredentialsFile("")(&emptyOpts) - googleai.WithCredentialsJSON([]byte{})(&emptyOpts) - if len(emptyOpts.ClientOptions) != 0 { - t.Error("Empty credential options should not add client options") - } -} - -func TestHarmThresholdValues(t *testing.T) { - // Test that harm threshold constants have expected values - tests := []struct { - name string - threshold googleai.HarmBlockThreshold - expected string - }{ - {"HarmBlockUnspecified", googleai.HarmBlockUnspecified, "HARM_BLOCK_THRESHOLD_UNSPECIFIED"}, - {"HarmBlockLowAndAbove", googleai.HarmBlockLowAndAbove, "BLOCK_LOW_AND_ABOVE"}, - {"HarmBlockMediumAndAbove", googleai.HarmBlockMediumAndAbove, "BLOCK_MEDIUM_AND_ABOVE"}, - {"HarmBlockOnlyHigh", googleai.HarmBlockOnlyHigh, "BLOCK_ONLY_HIGH"}, - {"HarmBlockNone", googleai.HarmBlockNone, "BLOCK_NONE"}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if string(tt.threshold) != tt.expected { - t.Errorf("expected %s to be %s, got %s", tt.name, tt.expected, string(tt.threshold)) - } - }) - } -} - -func TestVertexStructure(t *testing.T) { - // Test that Vertex has the expected fields - // This is mainly for documentation and to catch breaking changes - v := &Vertex{} - - // Check that fields exist by assignment (will fail to compile if missing) - v.CallbacksHandler = nil - _ = v.CallbacksHandler - v.client = nil - _ = v.client - v.opts = googleai.Options{} - _ = v.opts - v.palmClient = nil - _ = v.palmClient -} - -func TestWithHTTPClientOption(t *testing.T) { - opts := googleai.DefaultOptions() - - // Create a custom HTTP client - httpClient := &http.Client{} - - // Apply the HTTP client option - googleai.WithHTTPClient(httpClient)(&opts) - - // We can't directly check the client options, but we can verify - // that the option was added - if len(opts.ClientOptions) == 0 { - t.Error("WithHTTPClient did not add a client option") - } -} - -func TestOptionsEnsureAuthPresent(t *testing.T) { - tests := []struct { - name string - opts googleai.Options - envAPIKey string - expectAddition bool - }{ - { - name: "with existing auth options", - opts: googleai.Options{ - ClientOptions: []option.ClientOption{ - option.WithAPIKey("existing-key"), - }, - }, - envAPIKey: "env-key", - expectAddition: false, - }, - { - name: "without auth options but with env key", - opts: googleai.Options{}, - envAPIKey: "env-key", - expectAddition: true, - }, - { - name: "without auth options and no env key", - opts: googleai.Options{}, - envAPIKey: "", - expectAddition: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // Clear env var first - t.Setenv("GOOGLE_API_KEY", "") - - // Set env var for test if needed - if tt.envAPIKey != "" { - t.Setenv("GOOGLE_API_KEY", tt.envAPIKey) - } - - // Make a copy of opts to avoid modifying the original - opts := tt.opts - initialLen := len(opts.ClientOptions) - opts.EnsureAuthPresent() - - if tt.expectAddition { - if len(opts.ClientOptions) <= initialLen { - t.Error("expected auth option to be added") - } - } else { - if len(opts.ClientOptions) > initialLen { - t.Error("expected no auth option to be added") - } - } - }) - } -} diff --git a/llms/googleai/vertex/partial_stream_test.go b/llms/googleai/vertex/partial_stream_test.go deleted file mode 100644 index 7b9715ddb..000000000 --- a/llms/googleai/vertex/partial_stream_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package vertex - -import ( - "bytes" - "context" - "io" - "net/http" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/googleai" - "github.com/vxcontrol/langchaingo/llms/streaming" -) - -type deliverThenBreak struct{} - -func (deliverThenBreak) RoundTrip(r *http.Request) (*http.Response, error) { - const body = `[{"candidates":[{"content":{"parts":[{"text":"sixty rooms are free"}],` + - `"role":"model"},"index":0}]},` + `{not json at all` - return &http.Response{ - StatusCode: http.StatusOK, - Header: http.Header{"Content-Type": []string{"application/json"}}, - Body: io.NopCloser(bytes.NewReader([]byte(body))), - Request: r, - }, nil -} - -func TestAStreamThatBreaksMidAnswerKeepsWhatArrived(t *testing.T) { - t.Setenv("GOOGLE_API_KEY", "unit-test-key") - - v, err := New(context.Background(), - googleai.WithRest(), googleai.WithAPIKey("unit-test-key"), - googleai.WithCloudProject("unit"), googleai.WithCloudLocation("us-central1"), - googleai.WithDefaultModel("gemini-2.5-flash"), - googleai.WithHTTPClient(&http.Client{Transport: deliverThenBreak{}})) - require.NoError(t, err) - t.Cleanup(func() { _ = v.Close() }) - - delivered := "" - resp, err := v.GenerateContent(context.Background(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, - llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { - if chunk.Type == streaming.ChunkTypeText { - delivered += chunk.Content - } - return nil - })) - - require.Error(t, err, "a broken stream must not look like a success") - require.Equal(t, "sixty rooms are free", delivered, "the first chunk did reach the consumer") - require.NotNil(t, resp, "what reached the consumer must travel with the error") - require.NotEmpty(t, resp.Choices) - assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) -} diff --git a/llms/googleai/vertex/structured_output.go b/llms/googleai/vertex/structured_output.go deleted file mode 100644 index 1e516572f..000000000 --- a/llms/googleai/vertex/structured_output.go +++ /dev/null @@ -1,315 +0,0 @@ -// This file is hand-written (not generated). It builds Vertex's response schema -// from the provider-neutral llms.StructuredOutput. The Vertex SDK accepts only a -// *genai.Schema (a subset of OpenAPI 3.0), so the raw JSON Schema is converted -// explicitly; any construct that cannot be represented without changing meaning is -// a typed error rather than a silent drop. -package vertex - -import ( - "bytes" - "encoding/json" - "fmt" - - "cloud.google.com/go/vertexai/genai" - - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/structuredoutput" -) - -const providerVertex = "vertex" - -// applyVertexResponseFormat sets the model's response format from the call options. -// With a per-call StructuredOutput it sets ResponseSchema (converted from the raw -// JSON Schema) plus application/json; otherwise it keeps the pre-existing schema- -// less JSON mode / ResponseMIMEType behavior. -func applyVertexResponseFormat(model *genai.GenerativeModel, opts *llms.CallOptions) error { - if so := opts.StructuredOutput; so != nil { - if err := opts.ValidateStructuredOutput(); err != nil { - return err - } - switch opts.GetResponseMIMEType() { - case "", ResponseMIMETypeJson: - model.ResponseMIMEType = ResponseMIMETypeJson - default: - return &llms.ErrStructuredOutputConflict{ - Provider: providerVertex, - Detail: "structured output requires the application/json response MIME type", - } - } - schema, err := convertJSONSchemaToVertex(so.Schema) - if err != nil { - return err - } - model.ResponseSchema = schema - return nil - } - - switch { - case opts.ResponseMIMEType != nil && opts.JSONMode: - return fmt.Errorf("conflicting options, can't use JSONMode and ResponseMIMEType together") - case opts.ResponseMIMEType != nil && !opts.JSONMode: - model.ResponseMIMEType = opts.GetResponseMIMEType() - case opts.GetResponseMIMEType() == "" && opts.JSONMode: - model.ResponseMIMEType = ResponseMIMETypeJson - } - return nil -} - -// validateVertexStructuredOutput validates each normal-final (FinishReasonStop) -// candidate against the original schema. -func validateVertexStructuredOutput(opts *llms.CallOptions, resp *llms.ContentResponse) error { - so := opts.StructuredOutput - if so == nil { - return nil - } - return structuredoutput.ValidateFinalChoices( - so.Schema, providerVertex, opts.GetModel(), wireFinishReason(genai.FinishReasonStop), resp) -} - -func unsupportedVertexSchema(reason string) error { - return &llms.ErrStructuredOutputUnsupported{Provider: providerVertex, Reason: reason} -} - -// vertexUnrepresentable lists JSON Schema keywords that *genai.Schema cannot -// express; their presence is a hard error so a constraint is never silently lost. -var vertexUnrepresentable = []string{ - "$ref", "$defs", "definitions", "anyOf", "oneOf", "allOf", "not", - "if", "then", "else", "const", "patternProperties", "dependentSchemas", -} - -// vertexKnownKeywords are the keywords convertVertexNode understands: the ones it -// maps onto genai.Schema plus purely annotative metadata that is safe to ignore. -// Anything outside this set is rejected rather than silently dropped. -var vertexKnownKeywords = map[string]bool{ - // mapped onto genai.Schema - "type": true, "description": true, "title": true, "format": true, - "nullable": true, "enum": true, "items": true, "properties": true, - "required": true, "additionalProperties": true, - "minimum": true, "maximum": true, "minItems": true, "maxItems": true, - "minProperties": true, "maxProperties": true, - "minLength": true, "maxLength": true, "pattern": true, - // annotative only — no effect on validation, safe to ignore - "$schema": true, "$id": true, "$comment": true, "default": true, - "examples": true, "readOnly": true, "writeOnly": true, "deprecated": true, -} - -// convertJSONSchemaToVertex converts a raw JSON Schema document to *genai.Schema. -// Numbers decode via json.Number so integer keywords can be checked for -// integrality instead of being silently truncated. -func convertJSONSchemaToVertex(raw json.RawMessage) (*genai.Schema, error) { - dec := json.NewDecoder(bytes.NewReader(raw)) - dec.UseNumber() - var node map[string]any - if err := dec.Decode(&node); err != nil { - return nil, unsupportedVertexSchema(fmt.Sprintf("schema is not a JSON object: %v", err)) - } - return convertVertexNode(node) -} - -func convertVertexNode(node map[string]any) (*genai.Schema, error) { //nolint:funlen // linear JSON Schema -> *genai.Schema field mapping - for _, k := range vertexUnrepresentable { - if _, ok := node[k]; ok { - return nil, unsupportedVertexSchema(fmt.Sprintf("construct %q is not representable by the Vertex schema type", k)) - } - } - // Reject any keyword we neither map nor knowingly ignore, so a real constraint - // (multipleOf, exclusiveMinimum, uniqueItems, ...) is never silently lost. - for k := range node { - if !vertexKnownKeywords[k] { - return nil, unsupportedVertexSchema(fmt.Sprintf("keyword %q is not representable by the Vertex schema type", k)) - } - } - - schema := &genai.Schema{} - - gt, nullable, err := vertexTypeOf(node) - if err != nil { - return nil, err - } - schema.Type = gt - schema.Nullable = nullable - - if n, ok := node["nullable"]; ok { - b, ok := n.(bool) - if !ok { - return nil, unsupportedVertexSchema(`keyword "nullable" must be a boolean`) - } - schema.Nullable = schema.Nullable || b - } - - if s, ok := node["description"].(string); ok { - schema.Description = s - } - if s, ok := node["title"].(string); ok { - schema.Title = s - } - if s, ok := node["format"].(string); ok { - schema.Format = s - } - if s, ok := node["pattern"].(string); ok { - schema.Pattern = s - } - - if ap, ok := node["additionalProperties"]; ok { - if _, isBool := ap.(bool); !isBool { - return nil, unsupportedVertexSchema("a schema-valued additionalProperties is not representable") - } - } - - if enum, ok := node["enum"]; ok { - arr, ok := enum.([]any) - if !ok { - return nil, unsupportedVertexSchema("enum must be an array") - } - for _, v := range arr { - s, ok := v.(string) - if !ok { - return nil, unsupportedVertexSchema("Vertex enum supports only string values") - } - schema.Enum = append(schema.Enum, s) - } - } - - if items, ok := node["items"]; ok { - itemMap, ok := items.(map[string]any) - if !ok { - return nil, unsupportedVertexSchema("items must be a single schema object (tuple items are not representable)") - } - child, err := convertVertexNode(itemMap) - if err != nil { - return nil, err - } - schema.Items = child - } - - if props, ok := node["properties"]; ok { - propMap, ok := props.(map[string]any) - if !ok { - return nil, unsupportedVertexSchema("properties must be an object") - } - schema.Properties = make(map[string]*genai.Schema, len(propMap)) - for name, raw := range propMap { - childMap, ok := raw.(map[string]any) - if !ok { - return nil, unsupportedVertexSchema(fmt.Sprintf("property %q must be a schema object", name)) - } - child, err := convertVertexNode(childMap) - if err != nil { - return nil, err - } - schema.Properties[name] = child - } - } - - if req, hasReq := node["required"]; hasReq { - arr, ok := req.([]any) - if !ok { - return nil, unsupportedVertexSchema("required must be an array of strings") - } - for _, r := range arr { - s, ok := r.(string) - if !ok { - return nil, unsupportedVertexSchema("required must contain only strings") - } - schema.Required = append(schema.Required, s) - } - } - - return schema, setVertexNumeric(schema, node) -} - -// vertexTypeOf resolves the genai type from a "type" that is a string or a -// [T, "null"] pair (the common JSON Schema nullable idiom). A wider union is not -// representable. -func vertexTypeOf(node map[string]any) (genai.Type, bool, error) { - rawType, ok := node["type"] - if !ok { - // Infer from shape when the type keyword is absent. - if _, hasProps := node["properties"]; hasProps { - return genai.TypeObject, false, nil - } - if _, hasItems := node["items"]; hasItems { - return genai.TypeArray, false, nil - } - return genai.TypeUnspecified, false, unsupportedVertexSchema("schema node is missing a type") - } - switch tv := rawType.(type) { - case string: - gt, err := mapVertexType(tv) - return gt, false, err - case []any: - var nonNull string - count, nullable := 0, false - for _, e := range tv { - s, _ := e.(string) - if s == "null" { - nullable = true - continue - } - nonNull = s - count++ - } - if count != 1 { - return genai.TypeUnspecified, false, unsupportedVertexSchema("union types are not representable (only [T, \"null\"] is)") - } - gt, err := mapVertexType(nonNull) - return gt, nullable, err - default: - return genai.TypeUnspecified, false, unsupportedVertexSchema("type must be a string or array") - } -} - -func mapVertexType(t string) (genai.Type, error) { - switch t { - case "string": - return genai.TypeString, nil - case "number": - return genai.TypeNumber, nil - case "integer": - return genai.TypeInteger, nil - case "boolean": - return genai.TypeBoolean, nil - case "array": - return genai.TypeArray, nil - case "object": - return genai.TypeObject, nil - default: - return genai.TypeUnspecified, unsupportedVertexSchema(fmt.Sprintf("unsupported type %q", t)) - } -} - -// setVertexNumeric transfers numeric keywords. Values arrive as json.Number -// (UseNumber). Float-valued keywords parse as float64; integer-valued keywords -// (item/property/length counts) must be integral — a fractional value is a typed -// error rather than a silent truncation. -func setVertexNumeric(schema *genai.Schema, node map[string]any) error { - floats := map[string]*float64{"minimum": &schema.Minimum, "maximum": &schema.Maximum} - for key, dst := range floats { - n, ok := node[key].(json.Number) - if !ok { - continue - } - f, err := n.Float64() - if err != nil { - return unsupportedVertexSchema(fmt.Sprintf("%s must be a number", key)) - } - *dst = f - } - ints := map[string]*int64{ - "minItems": &schema.MinItems, "maxItems": &schema.MaxItems, - "minProperties": &schema.MinProperties, "maxProperties": &schema.MaxProperties, - "minLength": &schema.MinLength, "maxLength": &schema.MaxLength, - } - for key, dst := range ints { - n, ok := node[key].(json.Number) - if !ok { - continue - } - i, err := n.Int64() - if err != nil { - return unsupportedVertexSchema(fmt.Sprintf("%s must be an integer", key)) - } - *dst = i - } - return nil -} diff --git a/llms/googleai/vertex/structured_output_test.go b/llms/googleai/vertex/structured_output_test.go deleted file mode 100644 index 78ee65d1d..000000000 --- a/llms/googleai/vertex/structured_output_test.go +++ /dev/null @@ -1,287 +0,0 @@ -package vertex - -import ( - "encoding/json" - "errors" - "os" - "strings" - "testing" - - "cloud.google.com/go/vertexai/genai" - - "github.com/vxcontrol/langchaingo/llms" -) - -func TestVertex_12F0_HandMaintained(t *testing.T) { - t.Parallel() - src, err := os.ReadFile("vertex.go") - if err != nil { - t.Fatal(err) - } - s := string(src) - if strings.Contains(s, "automatically generated") { - t.Error("vertex.go must no longer claim to be automatically generated") - } - if !strings.Contains(s, "hand-maintained") { - t.Error("vertex.go must document that it is hand-maintained") - } -} - -func TestConvertJSONSchemaToVertex(t *testing.T) { //nolint:funlen // table-driven test - t.Parallel() - - t.Run("representable object", func(t *testing.T) { - t.Parallel() - raw := json.RawMessage(`{ - "type":"object", - "properties":{ - "name":{"type":"string"}, - "tags":{"type":"array","items":{"type":"string"}}, - "age":{"type":"integer"}, - "color":{"type":"string","enum":["red","green"]} - }, - "required":["name"], - "additionalProperties":false - }`) - schema, err := convertJSONSchemaToVertex(raw) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if schema.Type != genai.TypeObject { - t.Errorf("root type = %v, want object", schema.Type) - } - if len(schema.Properties) != 4 { - t.Errorf("properties = %d, want 4", len(schema.Properties)) - } - if schema.Properties["tags"].Type != genai.TypeArray || schema.Properties["tags"].Items.Type != genai.TypeString { - t.Error("array items not converted") - } - if len(schema.Properties["color"].Enum) != 2 { - t.Error("enum not converted") - } - if len(schema.Required) != 1 || schema.Required[0] != "name" { - t.Errorf("required = %v", schema.Required) - } - }) - - t.Run("both nullable spellings reach the schema", func(t *testing.T) { - t.Parallel() - for _, raw := range []string{ - `{"type":["string","null"]}`, - `{"type":"string","nullable":true}`, - } { - schema, err := convertJSONSchemaToVertex(json.RawMessage(raw)) - if err != nil { - t.Fatalf("%s: unexpected error: %v", raw, err) - } - if schema.Type != genai.TypeString { - t.Errorf("%s: type = %v, want string", raw, schema.Type) - } - if !schema.Nullable { - t.Errorf("%s: Nullable = false, want true", raw) - } - } - }) - - t.Run("nullable must be a boolean", func(t *testing.T) { - t.Parallel() - if _, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"string","nullable":"yes"}`)); err == nil { - t.Error("want an error for a non-boolean nullable, got nil") - } - }) - - t.Run("string constraints are preserved", func(t *testing.T) { - t.Parallel() - schema, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"string","minLength":2,"maxLength":8,"pattern":"^[a-z]+$"}`)) - if err != nil { - t.Fatal(err) - } - if schema.MinLength != 2 || schema.MaxLength != 8 || schema.Pattern != "^[a-z]+$" { - t.Errorf("string constraints lost: minLen=%d maxLen=%d pattern=%q", schema.MinLength, schema.MaxLength, schema.Pattern) - } - }) - - t.Run("array/numeric constraints are preserved", func(t *testing.T) { - t.Parallel() - schema, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"array","items":{"type":"integer","minimum":1,"maximum":9},"minItems":1,"maxItems":3}`)) - if err != nil { - t.Fatal(err) - } - if schema.MinItems != 1 || schema.MaxItems != 3 { - t.Errorf("array constraints lost: min=%d max=%d", schema.MinItems, schema.MaxItems) - } - if schema.Items.Minimum != 1 || schema.Items.Maximum != 9 { - t.Errorf("numeric constraints lost: min=%v max=%v", schema.Items.Minimum, schema.Items.Maximum) - } - }) - - t.Run("unknown keyword is rejected", func(t *testing.T) { - t.Parallel() - _, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"integer","multipleOf":2}`)) - var unsup *llms.ErrStructuredOutputUnsupported - if !errors.As(err, &unsup) { - t.Fatalf("unknown constraint must be rejected, got %v", err) - } - }) - - t.Run("fractional integer keyword is rejected", func(t *testing.T) { - t.Parallel() - _, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"array","items":{"type":"string"},"minItems":1.5}`)) - var unsup *llms.ErrStructuredOutputUnsupported - if !errors.As(err, &unsup) { - t.Fatalf("fractional minItems must be rejected, got %v", err) - } - }) - - t.Run("required with non-string is rejected", func(t *testing.T) { - t.Parallel() - _, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},"required":[1],"additionalProperties":false}`)) - var unsup *llms.ErrStructuredOutputUnsupported - if !errors.As(err, &unsup) { - t.Fatalf("non-string required must be rejected, got %v", err) - } - }) - - t.Run("nullable via [T,null]", func(t *testing.T) { - t.Parallel() - schema, err := convertJSONSchemaToVertex(json.RawMessage(`{"type":["string","null"]}`)) - if err != nil { - t.Fatal(err) - } - if schema.Type != genai.TypeString || !schema.Nullable { - t.Errorf("want nullable string, got type=%v nullable=%v", schema.Type, schema.Nullable) - } - }) - - unrepresentable := map[string]string{ - "$ref": `{"$ref":"#/x"}`, - "anyOf": `{"anyOf":[{"type":"string"}]}`, - "oneOf": `{"oneOf":[{"type":"string"}]}`, - "const": `{"const":"x"}`, - "schema-valued additionalProperties": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":{"type":"string"}}`, - "union type": `{"type":["string","number"]}`, - } - for name, raw := range unrepresentable { - t.Run("rejects "+name, func(t *testing.T) { - t.Parallel() - _, err := convertJSONSchemaToVertex(json.RawMessage(raw)) - var unsup *llms.ErrStructuredOutputUnsupported - if !errors.As(err, &unsup) { - t.Fatalf("want ErrStructuredOutputUnsupported, got %v", err) - } - }) - } - - for name, raw := range map[string]string{ - "absent": `{"type":"object","properties":{"a":{"type":"string"}}}`, - "additionalProperties false": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":false}`, - "additionalProperties true": `{"type":"object","properties":{"a":{"type":"string"}},"additionalProperties":true}`, - } { - t.Run("accepts "+name, func(t *testing.T) { - t.Parallel() - got, err := convertJSONSchemaToVertex(json.RawMessage(raw)) - if err != nil { - t.Fatalf("an explicit boolean says no more than its absence does: %v", err) - } - if got == nil { - t.Fatal("want a schema") - } - }) - } -} - -func TestApplyVertexResponseFormat(t *testing.T) { - t.Parallel() - schema := &llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},"required":["a"],"additionalProperties":false}`)} - - t.Run("structured output sets ResponseSchema and MIME", func(t *testing.T) { - t.Parallel() - model := &genai.GenerativeModel{} - opts := &llms.CallOptions{JSONMode: true, StructuredOutput: schema} - if err := applyVertexResponseFormat(model, opts); err != nil { - t.Fatal(err) - } - if model.ResponseMIMEType != ResponseMIMETypeJson { - t.Errorf("MIME = %q", model.ResponseMIMEType) - } - if model.ResponseSchema == nil { - t.Error("ResponseSchema must be set") - } - }) - - t.Run("other MIME conflicts", func(t *testing.T) { - t.Parallel() - model := &genai.GenerativeModel{} - mime := "text/plain" - opts := &llms.CallOptions{JSONMode: true, ResponseMIMEType: &mime, StructuredOutput: schema} - err := applyVertexResponseFormat(model, opts) - var conflict *llms.ErrStructuredOutputConflict - if !errors.As(err, &conflict) { - t.Fatalf("want conflict, got %v", err) - } - }) - - t.Run("schema-less JSONMode unchanged", func(t *testing.T) { - t.Parallel() - model := &genai.GenerativeModel{} - if err := applyVertexResponseFormat(model, &llms.CallOptions{JSONMode: true}); err != nil { - t.Fatal(err) - } - if model.ResponseMIMEType != ResponseMIMETypeJson || model.ResponseSchema != nil { - t.Error("schema-less mode must set only MIME, not ResponseSchema") - } - }) -} - -func TestValidateVertexStructuredOutput(t *testing.T) { - t.Parallel() - opts := &llms.CallOptions{ - JSONMode: true, - StructuredOutput: &llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},"required":["a"],"additionalProperties":false}`)}, - } - stop := "STOP" - - if err := validateVertexStructuredOutput(opts, &llms.ContentResponse{Choices: []*llms.ContentChoice{{Content: `{"a":"ok"}`, StopReason: stop}}}); err != nil { - t.Errorf("valid STOP must pass: %v", err) - } - - err := validateVertexStructuredOutput(opts, &llms.ContentResponse{Choices: []*llms.ContentChoice{{Content: `{"a":1}`, StopReason: stop}}}) - var ve *llms.ErrStructuredOutputValidation - if !errors.As(err, &ve) { - t.Errorf("invalid STOP must fail typed: %v", err) - } - - toolTurn := &llms.ContentChoice{ - Content: "", - StopReason: stop, - ToolCalls: []llms.ToolCall{{ - ID: "call_1", - Type: "function", - FunctionCall: &llms.FunctionCall{Name: "getWeather", Arguments: `{"city":"Paris"}`}, - }}, - } - if err := validateVertexStructuredOutput(opts, &llms.ContentResponse{Choices: []*llms.ContentChoice{toolTurn}}); err != nil { - t.Errorf("a STOP turn carrying tool calls must not be validated as JSON: %v", err) - } -} - -func TestValidateVertexStructuredOutputOnConvertedResponse(t *testing.T) { - t.Parallel() - opts := &llms.CallOptions{ - JSONMode: true, - StructuredOutput: &llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},"required":["a"],"additionalProperties":false}`)}, - } - - resp, err := convertCandidates([]*genai.Candidate{{ - Content: &genai.Content{Parts: []genai.Part{genai.Text(`{"a":1}`)}}, - FinishReason: genai.FinishReasonStop, - }}, nil) - if err != nil { - t.Fatalf("convertCandidates: %v", err) - } - - var ve *llms.ErrStructuredOutputValidation - if got := validateVertexStructuredOutput(opts, resp); !errors.As(got, &ve) { - t.Errorf("schema violation on a converted STOP turn must fail typed, got %v", got) - } -} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 8c30a9e1f..0b9c3697a 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -1,645 +1,59 @@ -// This file is hand-maintained. It was historically code-generated from -// googleai.go, but the two packages now target different SDKs (googleai uses -// google.golang.org/genai while vertex uses cloud.google.com/go/vertexai/genai), -// so the generator is obsolete and must not be run. See the README in this -// directory. - -//nolint:all +// Package vertex implements a langchaingo provider for Google Vertex AI LLMs, +// including the Gemini models. +// See https://cloud.google.com/vertex-ai for more details. package vertex import ( "context" - "encoding/json" "errors" - "fmt" - "io" - "strings" - - "github.com/vxcontrol/langchaingo/llms/googleai" - "github.com/vxcontrol/langchaingo/llms/streaming" + "os" - aiplatformpb "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb" - "cloud.google.com/go/vertexai/genai" - "github.com/vxcontrol/langchaingo/internal/imageutil" - "github.com/vxcontrol/langchaingo/internal/numutil" "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/reasoning" - "google.golang.org/api/iterator" -) - -var ( - ErrNoContentInResponse = errors.New("no content in generation response") - ErrUnknownPartInResponse = errors.New("unknown part type in generation response") - ErrInvalidMimeType = errors.New("invalid mime type on content") + "github.com/vxcontrol/langchaingo/llms/googleai" ) -const ( - CITATIONS = "citations" - SAFETY = "safety" - RoleSystem = "system" - RoleModel = "model" - RoleUser = "user" - RoleTool = "tool" - ResponseMIMETypeJson = "application/json" -) +// ErrMissingCloudTarget reports a client asked for Vertex without naming where. +var ErrMissingCloudTarget = errors.New("vertex: a cloud project and a cloud location are both required") -// Call implements the [llms.Model] interface. -func (g *Vertex) Call(ctx context.Context, prompt string, options ...llms.CallOption) (string, error) { - return llms.GenerateFromSinglePrompt(ctx, g, prompt, options...) +// Vertex reaches Gemini through the Vertex AI backend of the Google GenAI SDK. +type Vertex struct { + *googleai.GoogleAI } -// GenerateContent implements the [llms.Model] interface. -func (g *Vertex) GenerateContent( - ctx context.Context, - messages []llms.MessageContent, - options ...llms.CallOption, -) (resp *llms.ContentResponse, err error) { //nolint:nonamedreturns - // Emit exactly one closing callback: HandleLLMError on any error (transport, - // config or a structured-output validation failure), otherwise - // HandleLLMGenerateContentEnd — consistent across every provider adapter. - if g.CallbacksHandler != nil { - g.CallbacksHandler.HandleLLMGenerateContentStart(ctx, messages) - defer func() { - if err != nil { - g.CallbacksHandler.HandleLLMError(ctx, err) - } else { - g.CallbacksHandler.HandleLLMGenerateContentEnd(ctx, resp) - } - }() - } - - opts := g.resolveCallOptions(options) - if refusesReasoningOff(opts) { - return nil, &reasoning.ErrReasoningOffUnsupported{Model: opts.GetModel()} - } - - model := g.client.GenerativeModel(opts.GetModel()) - applyGenerationConfig(model, opts) - model.SafetySettings = []*genai.SafetySetting{ - { - Category: genai.HarmCategoryDangerousContent, - Threshold: convertVertexHarmBlockThreshold(g.opts.HarmThreshold), - }, - { - Category: genai.HarmCategoryHarassment, - Threshold: convertVertexHarmBlockThreshold(g.opts.HarmThreshold), - }, - { - Category: genai.HarmCategoryHateSpeech, - Threshold: convertVertexHarmBlockThreshold(g.opts.HarmThreshold), - }, - { - Category: genai.HarmCategorySexuallyExplicit, - Threshold: convertVertexHarmBlockThreshold(g.opts.HarmThreshold), - }, - } - if model.Tools, err = convertTools(opts.Tools); err != nil { - return nil, err - } - - // set model.ResponseMIMEType / ResponseSchema from JSONMode, ResponseMIMEType - // or a per-call structured-output schema - if err := applyVertexResponseFormat(model, &opts); err != nil { - return nil, err - } - - var response *llms.ContentResponse +var _ llms.Model = &Vertex{} - if len(messages) == 1 { - theMessage := messages[0] - if theMessage.Role != llms.ChatMessageTypeHuman { - return nil, fmt.Errorf("got %v message role, want human", theMessage.Role) - } - response, err = generateFromSingleMessage(ctx, model, theMessage.Parts, &opts) - } else { - response, err = generateFromMessages(ctx, model, messages, &opts) - } - if err != nil { - return response, err - } - - if err := finishVertexResponse(&opts, response); err != nil { - return response, err - } - - return response, nil -} - -func finishVertexResponse(opts *llms.CallOptions, response *llms.ContentResponse) error { - if err := llms.CheckTruncation(response, *opts); err != nil { - return err - } - return validateVertexStructuredOutput(opts, response) -} - -// convertCandidates converts a sequence of genai.Candidate to a response. -func classifyVertexError(err error) error { - var blocked *genai.BlockedError - if !errors.As(err, &blocked) { - return err - } - message := "the model blocked the exchange" - if blocked.PromptFeedback != nil { - message = "the prompt was blocked (" + blocked.PromptFeedback.BlockReason.String() + ")" - if blocked.PromptFeedback.BlockReasonMessage != "" { - message += ": " + blocked.PromptFeedback.BlockReasonMessage - } - } else if blocked.Candidate != nil { - message = "the answer was blocked (" + blocked.Candidate.FinishReason.String() + ")" - } - return &llms.Error{ - Code: llms.ErrCodeContentFilter, - Message: message, - Provider: "vertex", - } -} - -func convertCandidates(candidates []*genai.Candidate, usage *genai.UsageMetadata) (*llms.ContentResponse, error) { - var contentResponse llms.ContentResponse - - for _, candidate := range candidates { - buf := strings.Builder{} - var toolCalls []llms.ToolCall - - if candidate.Content != nil { - for _, part := range candidate.Content.Parts { - switch v := part.(type) { - case genai.Text: - _, err := buf.WriteString(string(v)) - if err != nil { - return nil, err - } - case genai.FunctionCall: - b, err := json.Marshal(v.Args) - if err != nil { - return nil, err - } - toolCall := llms.ToolCall{ - FunctionCall: &llms.FunctionCall{ - Name: v.Name, - Arguments: string(b), - }, - } - toolCalls = append(toolCalls, toolCall) - default: - return nil, ErrUnknownPartInResponse - } - } - } - - metadata := make(map[string]any) - metadata[CITATIONS] = candidate.CitationMetadata - metadata[SAFETY] = candidate.SafetyRatings - - if usage != nil { - metadata["input_tokens"] = usage.PromptTokenCount - metadata["output_tokens"] = usage.CandidatesTokenCount - metadata["total_tokens"] = usage.TotalTokenCount - } - - stopReason := wireFinishReason(candidate.FinishReason) - contentResponse.Choices = append(contentResponse.Choices, - &llms.ContentChoice{ - Content: buf.String(), - StopReason: stopReason, - Truncated: llms.IsTruncated(stopReason), - GenerationInfo: metadata, - ToolCalls: toolCalls, - }) - } - return &contentResponse, nil -} - -// convertParts converts between a sequence of langchain parts and genai parts. -func convertParts(parts []llms.ContentPart) ([]genai.Part, error) { - convertedParts := make([]genai.Part, 0, len(parts)) - for _, part := range parts { - var out genai.Part - - switch p := part.(type) { - case llms.TextContent: - out = genai.Text(p.Text) - case llms.BinaryContent: - out = genai.Blob{MIMEType: p.MIMEType, Data: p.Data} - case llms.ImageURLContent: - typ, data, err := imageutil.DownloadImageData(p.URL) - if err != nil { - return nil, err - } - out = genai.ImageData(typ, data) - case llms.ToolCall: - fc := p.FunctionCall - var argsMap map[string]any - if err := json.Unmarshal([]byte(fc.Arguments), &argsMap); err != nil { - return convertedParts, err - } - out = genai.FunctionCall{ - Name: fc.Name, - Args: argsMap, - } - case llms.ToolCallResponse: - out = genai.FunctionResponse{ - Name: p.Name, - Response: map[string]any{ - "response": p.Content, - }, - } - } - - convertedParts = append(convertedParts, out) - } - return convertedParts, nil -} - -// convertContent converts between a langchain MessageContent and genai content. -func convertContent(content llms.MessageContent) (*genai.Content, error) { - parts, err := convertParts(content.Parts) - if err != nil { - return nil, err - } - - c := &genai.Content{ - Parts: parts, - } - - switch content.Role { - case llms.ChatMessageTypeSystem: - c.Role = RoleSystem - case llms.ChatMessageTypeAI: - c.Role = RoleModel - case llms.ChatMessageTypeHuman: - c.Role = RoleUser - case llms.ChatMessageTypeGeneric: - c.Role = RoleUser - case llms.ChatMessageTypeTool: - c.Role = RoleUser - case llms.ChatMessageTypeFunction: - fallthrough - default: - return nil, fmt.Errorf("role %v not supported", content.Role) - } - - return c, nil -} - -// generateFromSingleMessage generates content from the parts of a single -// message. -func generateFromSingleMessage( - ctx context.Context, - model *genai.GenerativeModel, - parts []llms.ContentPart, - opts *llms.CallOptions, -) (*llms.ContentResponse, error) { - convertedParts, err := convertParts(parts) - if err != nil { - return nil, err - } - - if opts.StreamingFunc == nil { - // When no streaming is requested, just call GenerateContent and return - // the complete response with a list of candidates. - resp, err := model.GenerateContent(ctx, convertedParts...) - if err != nil { - return nil, classifyVertexError(err) - } - - if len(resp.Candidates) == 0 { - return nil, ErrNoContentInResponse - } - return convertCandidates(resp.Candidates, resp.UsageMetadata) +// New creates a client bound to the Vertex AI backend. The project and the +// location come from the options, or from GOOGLE_CLOUD_PROJECT and +// GOOGLE_CLOUD_LOCATION when the options leave them empty. +func New(ctx context.Context, opts ...googleai.Option) (*Vertex, error) { + resolved := googleai.DefaultOptions() + for _, opt := range opts { + opt(&resolved) } - iter := model.GenerateContentStream(ctx, convertedParts...) - return convertAndStreamFromIterator(ctx, iter, opts) -} -func generateFromMessages( - ctx context.Context, - model *genai.GenerativeModel, - messages []llms.MessageContent, - opts *llms.CallOptions, -) (*llms.ContentResponse, error) { - history := make([]*genai.Content, 0, len(messages)) - for _, mc := range messages { - content, err := convertContent(mc) - if err != nil { - return nil, err - } - if mc.Role == RoleSystem { - model.SystemInstruction = content - continue + if resolved.CloudProject == "" { + if project := os.Getenv("GOOGLE_CLOUD_PROJECT"); project != "" { + resolved.CloudProject = project + opts = append(opts, googleai.WithCloudProject(project)) } - history = append(history, content) } - - // Given N total messages, genai's chat expects the first N-1 messages as - // history and the last message as the actual request. - n := len(history) - reqContent := history[n-1] - history = history[:n-1] - - session := model.StartChat() - session.History = history - - if opts.StreamingFunc == nil { - resp, err := session.SendMessage(ctx, reqContent.Parts...) - if err != nil { - return nil, classifyVertexError(err) + if resolved.CloudLocation == "" { + if location := os.Getenv("GOOGLE_CLOUD_LOCATION"); location != "" { + resolved.CloudLocation = location + opts = append(opts, googleai.WithCloudLocation(location)) } - - if len(resp.Candidates) == 0 { - return nil, ErrNoContentInResponse - } - return convertCandidates(resp.Candidates, resp.UsageMetadata) } - iter := session.SendMessageStream(ctx, reqContent.Parts...) - return convertAndStreamFromIterator(ctx, iter, opts) -} - -// convertAndStreamFromIterator takes an iterator of GenerateContentResponse -// and produces a llms.ContentResponse reply from it, while streaming the -// resulting text into the opts-provided streaming function. -// Note that this is tricky in the face of multiple -// candidates, so this code assumes only a single candidate for now. -func convertAndStreamFromIterator( - ctx context.Context, - iter *genai.GenerateContentResponseIterator, - opts *llms.CallOptions, -) (*llms.ContentResponse, error) { - defer streaming.CallWithDone(ctx, opts.StreamingFunc) //nolint:errcheck - - candidate := &genai.Candidate{ - Content: &genai.Content{}, + if resolved.CloudProject == "" || resolved.CloudLocation == "" { + return nil, ErrMissingCloudTarget } - var streamErr error -DoStream: - for { - resp, err := iter.Next() - if errors.Is(err, iterator.Done) { - break DoStream - } - if err != nil { - streamErr = classifyVertexError(err) - break DoStream - } - - if len(resp.Candidates) != 1 { - streamErr = fmt.Errorf("expect single candidate in stream mode; got %v", len(resp.Candidates)) - break DoStream - } - respCandidate := resp.Candidates[0] - if !mergeStreamCandidate(candidate, respCandidate) { - break DoStream - } - - for _, part := range respCandidate.Content.Parts { - if text, ok := part.(genai.Text); ok { - if err := streaming.CallWithText(ctx, opts.StreamingFunc, string(text)); err != nil { - streamErr = err - break DoStream - } - } - } - } - var usage *genai.UsageMetadata - if mresp := iter.MergedResponse(); mresp != nil { - usage = mresp.UsageMetadata - } - resp, err := convertCandidates([]*genai.Candidate{candidate}, usage) + client, err := googleai.New(ctx, opts...) if err != nil { - if streamErr != nil { - return nil, streamErr - } return nil, err } - return resp, streamErr -} - -// mergeStreamCandidate folds one streamed candidate into the accumulator. It -// records the finish reason and metadata even when the chunk carries no content — -// the finish reason often arrives on a trailing content-less chunk, and dropping -// it would leave StopReason unset and silently skip structured-output validation. -// It reports whether the chunk had content to append (false ends the stream). -func mergeStreamCandidate(acc, chunk *genai.Candidate) bool { - acc.FinishReason = chunk.FinishReason - acc.SafetyRatings = chunk.SafetyRatings - acc.CitationMetadata = chunk.CitationMetadata - if chunk.Content == nil { - return false - } - acc.Content.Parts = append(acc.Content.Parts, chunk.Content.Parts...) - acc.Content.Role = chunk.Content.Role - return true -} - -// convertTools converts from a list of langchaingo tools to a list of genai -// tools. -func convertTools(tools []llms.Tool) ([]*genai.Tool, error) { - genaiFuncDecls := make([]*genai.FunctionDeclaration, 0, len(tools)) - for i, tool := range tools { - if tool.Type != "function" { - return nil, fmt.Errorf("tool [%d]: unsupported type %q, want 'function'", i, tool.Type) - } - - // We have a llms.FunctionDefinition in tool.Function, and we have to - // convert it to genai.FunctionDeclaration - genaiFuncDecl := &genai.FunctionDeclaration{ - Name: tool.Function.Name, - Description: tool.Function.Description, - } - - // Expect the Parameters field to be a map[string]any, from which we will - // extract properties to populate the schema. - params, ok := tool.Function.Parameters.(map[string]any) - if !ok { - paramsData, err := json.Marshal(tool.Function.Parameters) - if err != nil { - return nil, fmt.Errorf("tool [%d]: failed to marshal parameters: %w", i, err) - } - if err := json.Unmarshal(paramsData, ¶ms); err != nil { - return nil, fmt.Errorf("tool [%d]: failed to unmarshal parameters: %w", i, err) - } - } - - schema := &genai.Schema{} - if ty, ok := params["type"]; ok { - tyString, ok := ty.(string) - if !ok { - return nil, fmt.Errorf("tool [%d]: expected string for type", i) - } - schema.Type = convertToolSchemaType(tyString) - } - - paramProperties, ok := params["properties"].(map[string]any) - if !ok { - return nil, fmt.Errorf("tool [%d]: expected to find a map of properties", i) - } - - schema.Properties = make(map[string]*genai.Schema) - for propName, propValue := range paramProperties { - valueMap, ok := propValue.(map[string]any) - if !ok { - return nil, fmt.Errorf("tool [%d], property [%v]: expect to find a value map", i, propName) - } - schema.Properties[propName] = &genai.Schema{} - - if ty, ok := valueMap["type"]; ok { - tyString, ok := ty.(string) - if !ok { - return nil, fmt.Errorf("tool [%d]: expected string for type", i) - } - schema.Properties[propName].Type = convertToolSchemaType(tyString) - } - if desc, ok := valueMap["description"]; ok { - descString, ok := desc.(string) - if !ok { - return nil, fmt.Errorf("tool [%d]: expected string for description", i) - } - schema.Properties[propName].Description = descString - } - } - - if required, ok := params["required"]; ok { - if rs, ok := required.([]string); ok { - schema.Required = rs - } else if ri, ok := required.([]interface{}); ok { - rs := make([]string, 0, len(ri)) - for _, r := range ri { - rString, ok := r.(string) - if !ok { - return nil, fmt.Errorf("tool [%d]: expected string for required", i) - } - rs = append(rs, rString) - } - schema.Required = rs - } else { - return nil, fmt.Errorf("tool [%d]: expected string for required", i) - } - } - genaiFuncDecl.Parameters = schema - - // google genai only support one tool, multiple tools must be embedded into function declarations: - // https://github.com/GoogleCloudPlatform/generative-ai/issues/636 - // https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling#chat-samples - genaiFuncDecls = append(genaiFuncDecls, genaiFuncDecl) - } - - // Return nil if no tools are provided - if len(genaiFuncDecls) == 0 { - return nil, nil - } - - genaiTools := []*genai.Tool{{FunctionDeclarations: genaiFuncDecls}} - - return genaiTools, nil -} - -// convertToolSchemaType converts a tool's schema type from its langchaingo -// representation (string) to a genai enum. -func convertToolSchemaType(ty string) genai.Type { - switch ty { - case "object": - return genai.TypeObject - case "string": - return genai.TypeString - case "number": - return genai.TypeNumber - case "integer": - return genai.TypeInteger - case "boolean": - return genai.TypeBoolean - case "array": - return genai.TypeArray - default: - return genai.TypeUnspecified - } -} - -// showContent is a debugging helper for genai.Content. -func showContent(w io.Writer, cs []*genai.Content) { - fmt.Fprintf(w, "Content (len=%v)\n", len(cs)) - for i, c := range cs { - fmt.Fprintf(w, "[%d]: Role=%s\n", i, c.Role) - for j, p := range c.Parts { - fmt.Fprintf(w, " Parts[%v]: ", j) - switch pp := p.(type) { - case genai.Text: - fmt.Fprintf(w, "Text %q\n", pp) - case genai.Blob: - fmt.Fprintf(w, "Blob MIME=%q, size=%d\n", pp.MIMEType, len(pp.Data)) - case genai.FunctionCall: - fmt.Fprintf(w, "FunctionCall Name=%v, Args=%v\n", pp.Name, pp.Args) - case genai.FunctionResponse: - fmt.Fprintf(w, "FunctionResponse Name=%v Response=%v\n", pp.Name, pp.Response) - default: - fmt.Fprintf(w, "unknown type %T\n", pp) - } - } - } -} - -func convertVertexHarmBlockThreshold(threshold googleai.HarmBlockThreshold) genai.HarmBlockThreshold { - switch threshold { - case googleai.HarmBlockUnspecified: - return genai.HarmBlockUnspecified - case googleai.HarmBlockLowAndAbove: - return genai.HarmBlockLowAndAbove - case googleai.HarmBlockMediumAndAbove: - return genai.HarmBlockMediumAndAbove - case googleai.HarmBlockOnlyHigh: - return genai.HarmBlockOnlyHigh - case googleai.HarmBlockNone: - return genai.HarmBlockNone - default: - return genai.HarmBlockOnlyHigh // Safe default - } -} - -func (g *Vertex) resolveCallOptions(options []llms.CallOption) llms.CallOptions { - opts := llms.CallOptions{ - Model: &g.opts.DefaultModel, - CandidateCount: &g.opts.DefaultCandidateCount, - MaxTokens: &g.opts.DefaultMaxTokens, - TopP: &g.opts.DefaultTopP, - TopK: &g.opts.DefaultTopK, - } - for _, opt := range options { - opt(&opts) - } - if opts.Temperature == nil { - temperature := g.opts.ResolveTemperature(opts.GetModel()) - opts.Temperature = &temperature - } - return opts -} - -// refusesReasoningOff reports whether an explicit disable cannot be honored. -// This door builds no thinking config at all, so only a model that is already -// off once the config is omitted can be turned off here. -func refusesReasoningOff(opts llms.CallOptions) bool { - return opts.Reasoning.ResolveMode() == llms.ReasoningOff && - reasoning.ResolveOff(opts.GetModel(), reasoning.ProviderGoogleAI) != reasoning.OffOmit -} - -func applyGenerationConfig(model *genai.GenerativeModel, opts llms.CallOptions) { - if opts.CandidateCount != nil { - model.SetCandidateCount(numutil.SaturateInt32(opts.GetCandidateCount())) - } - if opts.MaxTokens != nil { - model.SetMaxOutputTokens(numutil.SaturateInt32(opts.GetMaxTokens())) - } - if opts.Temperature != nil { - model.SetTemperature(float32(opts.GetTemperature())) - } - if opts.TopP != nil { - model.SetTopP(float32(opts.GetTopP())) - } - if opts.TopK != nil { - model.SetTopK(numutil.SaturateInt32(opts.GetTopK())) - } - model.StopSequences = opts.StopWords + return &Vertex{GoogleAI: client}, nil } -func wireFinishReason(r genai.FinishReason) string { - return aiplatformpb.Candidate_FinishReason(r).String() +func (v *Vertex) Close() error { + return nil } diff --git a/llms/googleai/vertex/vertex_test.go b/llms/googleai/vertex/vertex_test.go index 0dd4b46c3..3c0948c0e 100644 --- a/llms/googleai/vertex/vertex_test.go +++ b/llms/googleai/vertex/vertex_test.go @@ -1,521 +1,190 @@ -package vertex +package vertex_test import ( "context" - "os" - "path/filepath" - "strings" + "encoding/json" + "io" + "net/http" + "net/http/httptest" "testing" - "github.com/vxcontrol/langchaingo/httputil" - "github.com/vxcontrol/langchaingo/internal/httprr" - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/googleai" - "github.com/vxcontrol/langchaingo/llms/streaming" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" -) -func newHTTPRRClient(t *testing.T, opts ...googleai.Option) *Vertex { - t.Helper() + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/googleai" + "github.com/vxcontrol/langchaingo/llms/googleai/vertex" +) - // Always check for recordings first - prefer recordings over environment variables - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - - // Temporarily unset Google API key environment variable to prevent bypass - oldKey := os.Getenv("GOOGLE_API_KEY") - os.Unsetenv("GOOGLE_API_KEY") - t.Cleanup(func() { - if oldKey != "" { - os.Setenv("GOOGLE_API_KEY", oldKey) - } - }) - - // Use httputil.DefaultTransport - httprr handles wrapping - rr := httprr.OpenForTest(t, httputil.DefaultTransport) - - // Configure client with httprr and test values - opts = append(opts, - googleai.WithHTTPClient(rr.Client()), - googleai.WithCloudProject("test-project"), - googleai.WithCloudLocation("us-central1"), - ) - - llm, err := New(t.Context(), opts...) - require.NoError(t, err) - return llm +type toLocalServer struct { + host string + seen *string } -// hasExistingRecording checks if a httprr recording exists for this test -func hasExistingRecording(t *testing.T) bool { - testName := strings.ReplaceAll(t.Name(), "/", "_") - testName = strings.ReplaceAll(testName, " ", "_") - recordingPath := filepath.Join("testdata", testName+".httprr") - _, err := os.Stat(recordingPath) - return err == nil +func (t *toLocalServer) RoundTrip(req *http.Request) (*http.Response, error) { + *t.seen = req.URL.String() + req.URL.Scheme = "http" + req.URL.Host = t.host + return http.DefaultTransport.RoundTrip(req) } -func TestVertexGenerateContent(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("What is the capital of France?"), - }, - }, - } - - resp, err := llm.GenerateContent(t.Context(), content) - require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) - assert.Contains(t, resp.Choices[0].Content, "Paris") -} - -func TestVertexGenerateContentWithMultipleMessages(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("My name is Bob"), - }, - }, - { - Role: llms.ChatMessageTypeAI, - Parts: []llms.ContentPart{ - llms.TextPart("Nice to meet you, Bob!"), - }, - }, - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("What's my name?"), - }, - }, - } +func vertexAgainstALocalServer(t *testing.T, body string, opts ...googleai.Option) (*vertex.Vertex, *string) { + t.Helper() - resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel("gemini-1.5-flash")) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + seen := new(string) + llm, err := vertex.New(context.Background(), append([]googleai.Option{ + googleai.WithCloudProject("hotel-desk"), + googleai.WithCloudLocation("europe-west4"), + googleai.WithDefaultModel("gemini-2.5-flash"), + googleai.WithHTTPClient(&http.Client{ + Transport: &toLocalServer{host: srv.Listener.Addr().String(), seen: seen}, + }), + }, opts...)...) require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) - assert.Contains(t, resp.Choices[0].Content, "Bob") + return llm, seen } -func TestVertexGenerateContentWithSystemMessage(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) +func TestVertexRefusesToGuessWhereItIs(t *testing.T) { + t.Setenv("GOOGLE_CLOUD_PROJECT", "") + t.Setenv("GOOGLE_CLOUD_LOCATION", "") - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeSystem, - Parts: []llms.ContentPart{ - llms.TextPart("You are a helpful assistant that always responds in haiku format."), - }, - }, - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("Tell me about the moon"), - }, - }, - } - - resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel("gemini-1.5-flash")) - require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) + _, err := vertex.New(context.Background()) + require.ErrorIs(t, err, vertex.ErrMissingCloudTarget, + "a door that reaches one cloud must be told which project and location, not fall back to another backend") } -func TestVertexCall(t *testing.T) { - t.Parallel() +func TestVertexTakesItsCloudTargetFromTheEnvironment(t *testing.T) { + t.Setenv("GOOGLE_CLOUD_PROJECT", "night-porter") + t.Setenv("GOOGLE_CLOUD_LOCATION", "us-central1") - llm := newHTTPRRClient(t) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"ok"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":1,"candidatesTokenCount":1,"totalTokenCount":2}}`) + })) + t.Cleanup(srv.Close) - output, err := llm.Call(t.Context(), "What is 3 + 3?") + seen := new(string) + llm, err := vertex.New(context.Background(), + googleai.WithDefaultModel("gemini-2.5-flash"), + googleai.WithHTTPClient(&http.Client{ + Transport: &toLocalServer{host: srv.Listener.Addr().String(), seen: seen}, + })) require.NoError(t, err) - assert.NotEmpty(t, output) - assert.Contains(t, output, "6") -} - -func TestVertexCreateEmbedding(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - texts := []string{"hello vertex", "goodbye vertex", "hello vertex"} - - embeddings, err := llm.CreateEmbedding(t.Context(), texts) + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) require.NoError(t, err) - assert.Len(t, embeddings, 3) - assert.NotEmpty(t, embeddings[0]) - assert.NotEmpty(t, embeddings[1]) - assert.NotEmpty(t, embeddings[2]) - // First and third should be identical since they're the same text - assert.Equal(t, embeddings[0], embeddings[2]) -} -func TestVertexWithOptions(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t, - googleai.WithDefaultModel("gemini-1.5-flash"), - googleai.WithDefaultMaxTokens(150), - googleai.WithDefaultTemperature(0.2), - ) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("List the primary colors"), - }, - }, - } - - resp, err := llm.GenerateContent(t.Context(), content) - require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) + assert.Contains(t, *seen, "/projects/night-porter/locations/us-central1/", + "the environment names the cloud target when the caller does not") } -func TestVertexWithStreaming(t *testing.T) { +func TestVertexAddressesTheVertexBackend(t *testing.T) { t.Parallel() - llm := newHTTPRRClient(t) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("Tell me a short story about a robot"), - }, - }, - } - - var ( - streamedContent strings.Builder - streamDone bool - ) - resp, err := llm.GenerateContent( - t.Context(), - content, - llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { - switch chunk.Type { - case streaming.ChunkTypeText: - streamedContent.WriteString(chunk.Content) - case streaming.ChunkTypeDone: - streamDone = true - default: - // Ignore other chunk types - } - return nil - }), - ) + llm, seen := vertexAgainstALocalServer(t, + `{"candidates":[{"content":{"role":"model","parts":[{"text":"sixty rooms are free"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":3,"candidatesTokenCount":5,"totalTokenCount":8}}`) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}) require.NoError(t, err) - require.NotNil(t, resp) - require.True(t, streamDone) - assert.NotEmpty(t, resp.Choices) - assert.NotEmpty(t, streamedContent.String()) - assert.Contains(t, streamedContent.String(), "robot") -} - -func TestVertexWithTools(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - - tools := []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "getTemperature", - Description: "Get the temperature for a location", - Parameters: map[string]any{ - "type": "object", - "properties": map[string]any{ - "location": map[string]any{ - "type": "string", - "description": "The location to get temperature for", - }, - "unit": map[string]any{ - "type": "string", - "description": "Temperature unit (celsius or fahrenheit)", - "enum": []string{"celsius", "fahrenheit"}, - }, - }, - "required": []string{"location"}, - }, - }, - }, - } - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("What's the temperature in Tokyo?"), - }, - }, - } - - resp, err := llm.GenerateContent( - t.Context(), - content, - llms.WithTools(tools), - ) - - require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) - - // Check if tool call was made - if len(resp.Choices[0].ToolCalls) > 0 { - toolCall := resp.Choices[0].ToolCalls[0] - assert.Equal(t, "getTemperature", toolCall.FunctionCall.Name) - assert.Contains(t, toolCall.FunctionCall.Arguments, "Tokyo") - } + assert.Contains(t, *seen, "-aiplatform.googleapis.com/", + "the door must reach Vertex, not the Gemini API") + assert.Contains(t, *seen, "/projects/hotel-desk/locations/europe-west4/") + require.Len(t, resp.Choices, 1) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) + assert.Equal(t, 3, resp.Choices[0].GenerationInfo["PromptTokens"]) } -func TestVertexWithJSONMode(t *testing.T) { +func TestVertexEmbedsThroughTheSameBackend(t *testing.T) { t.Parallel() - llm := newHTTPRRClient(t) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("List three animals as a JSON array"), - }, - }, - } - - resp, err := llm.GenerateContent( - t.Context(), - content, - llms.WithJSONMode(), - ) + llm, seen := vertexAgainstALocalServer(t, + `{"predictions":[{"embeddings":{"values":[0.1,0.2]}}],`+ + `"embeddings":[{"values":[0.1,0.2]}]}`) + embeddings, err := llm.CreateEmbedding(context.Background(), []string{"a room"}) require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) - // Response should be valid JSON - assert.Contains(t, resp.Choices[0].Content, "[") - assert.Contains(t, resp.Choices[0].Content, "]") + require.Len(t, embeddings, 1) + assert.Equal(t, []float32{0.1, 0.2}, embeddings[0]) + assert.Contains(t, *seen, "-aiplatform.googleapis.com/", + "embeddings go to the same backend as generation, with no second client") } -func TestVertexMultiModalContent(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - - // Create a small test image data - imageData := []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A} // PNG header - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.BinaryPart("image/png", imageData), - llms.TextPart("Describe this image"), - }, - }, - } - - resp, err := llm.GenerateContent( - t.Context(), - content, - llms.WithModel("gemini-pro-vision"), - ) +func vertexRequestBody(t *testing.T, call ...llms.CallOption) map[string]any { + t.Helper() + var got string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + got = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"ok"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":1,"candidatesTokenCount":1,"totalTokenCount":2}}`) + })) + t.Cleanup(srv.Close) + + seen := new(string) + llm, err := vertex.New(context.Background(), + googleai.WithCloudProject("hotel-desk"), googleai.WithCloudLocation("europe-west4"), + googleai.WithDefaultModel("gemini-2.5-flash"), + googleai.WithHTTPClient(&http.Client{ + Transport: &toLocalServer{host: srv.Listener.Addr().String(), seen: seen}, + })) require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) -} - -func TestVertexBatchEmbedding(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - - // Test with more than 100 texts to trigger batching - texts := make([]string, 105) - for i := range texts { - texts[i] = "vertex text " + string(rune('a'+i%26)) - } - - embeddings, err := llm.CreateEmbedding(t.Context(), texts) + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) require.NoError(t, err) - assert.Len(t, embeddings, 105) - for i, emb := range embeddings { - assert.NotEmpty(t, emb, "embedding at index %d should not be empty", i) - } -} - -func TestVertexWithHarmThreshold(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t, - googleai.WithHarmThreshold(googleai.HarmBlockLowAndAbove), - ) - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("Tell me about content moderation"), - }, - }, - } - - resp, err := llm.GenerateContent(t.Context(), content) - require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) + var body map[string]any + require.NoError(t, json.Unmarshal([]byte(got), &body)) + return body } -func TestVertexToolCallResponse(t *testing.T) { +func TestVertexCarriesTheThinkingBudgetTheCallerAskedFor(t *testing.T) { t.Parallel() - llm := newHTTPRRClient(t) - - tools := []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "multiply", - Description: "Multiply two numbers", - Parameters: map[string]any{ - "type": "object", - "properties": map[string]any{ - "a": map[string]any{ - "type": "number", - "description": "First number", - }, - "b": map[string]any{ - "type": "number", - "description": "Second number", - }, - }, - "required": []string{"a", "b"}, - }, - }, - }, - } - - // Initial request - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("What is 12 times 8?"), - }, - }, - } + body := vertexRequestBody(t, llms.WithReasoning(llms.ReasoningNone, 2048)) - resp1, err := llm.GenerateContent( - t.Context(), - content, - llms.WithTools(tools), - ) - require.NoError(t, err) - require.NotNil(t, resp1) - - // If tool was called, send back response - if len(resp1.Choices[0].ToolCalls) > 0 { - // Add assistant's tool call to history - content = append(content, llms.MessageContent{ - Role: llms.ChatMessageTypeAI, - Parts: []llms.ContentPart{resp1.Choices[0].ToolCalls[0]}, - }) - - // Add tool response - content = append(content, llms.MessageContent{ - Role: llms.ChatMessageTypeTool, - Parts: []llms.ContentPart{ - llms.ToolCallResponse{ - Name: resp1.Choices[0].ToolCalls[0].FunctionCall.Name, - Content: "96", - }, - }, - }) - - // Get final response - resp2, err := llm.GenerateContent( - t.Context(), - content, - llms.WithTools(tools), - ) - require.NoError(t, err) - require.NotNil(t, resp2) - assert.Contains(t, resp2.Choices[0].Content, "96") - } + config, ok := body["generationConfig"].(map[string]any) + require.True(t, ok) + thinking, ok := config["thinkingConfig"].(map[string]any) + require.True(t, ok, "the door used to accept a thinking request and send nothing") + assert.Equal(t, float64(2048), thinking["thinkingBudget"]) } -func TestVertexWithResponseMIMEType(t *testing.T) { +func TestVertexCarriesTheToolChoiceTheCallerAskedFor(t *testing.T) { t.Parallel() - llm := newHTTPRRClient(t) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("Return a JSON object with name and age fields"), + tools := []llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "rooms_free", + Description: "how many rooms are free", + Parameters: map[string]any{ + "type": "object", + "properties": map[string]any{"floor": map[string]any{"type": "integer"}}, }, }, - } + }} - resp, err := llm.GenerateContent( - t.Context(), - content, - llms.WithResponseMIMEType("application/json"), - ) + body := vertexRequestBody(t, llms.WithTools(tools), llms.WithToolChoice("required")) - require.NoError(t, err) - require.NotNil(t, resp) - assert.NotEmpty(t, resp.Choices) - // Response should be valid JSON - assert.Contains(t, resp.Choices[0].Content, "{") - assert.Contains(t, resp.Choices[0].Content, "}") -} - -func TestVertexErrorOnConflictingOptions(t *testing.T) { - t.Parallel() - - llm := newHTTPRRClient(t) - - content := []llms.MessageContent{ - { - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextPart("Hello"), - }, - }, - } - - // Should error when both JSONMode and ResponseMIMEType are set - _, err := llm.GenerateContent( - t.Context(), - content, - llms.WithJSONMode(), - llms.WithResponseMIMEType("application/json"), - ) - - assert.Error(t, err) - assert.Contains(t, err.Error(), "conflicting options") + config, ok := body["toolConfig"].(map[string]any) + require.True(t, ok, "the door used to convert the tools and drop the choice") + calling, ok := config["functionCallingConfig"].(map[string]any) + require.True(t, ok) + assert.Equal(t, "ANY", calling["mode"]) } diff --git a/llms/googleai/vertex/vertex_unit_test.go b/llms/googleai/vertex/vertex_unit_test.go deleted file mode 100644 index 61f0279ea..000000000 --- a/llms/googleai/vertex/vertex_unit_test.go +++ /dev/null @@ -1,774 +0,0 @@ -package vertex - -import ( - "encoding/json" - "errors" - "strings" - "testing" - - "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/reasoning" - - "cloud.google.com/go/vertexai/genai" -) - -func TestConvertToolSchemaType(t *testing.T) { - tests := []struct { - name string - input string - expected genai.Type - }{ - {"object type", "object", genai.TypeObject}, - {"string type", "string", genai.TypeString}, - {"number type", "number", genai.TypeNumber}, - {"integer type", "integer", genai.TypeInteger}, - {"boolean type", "boolean", genai.TypeBoolean}, - {"array type", "array", genai.TypeArray}, - {"unknown type", "unknown", genai.TypeUnspecified}, - {"empty type", "", genai.TypeUnspecified}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := convertToolSchemaType(tt.input) - if result != tt.expected { - t.Errorf("convertToolSchemaType(%q) = %v, want %v", tt.input, result, tt.expected) - } - }) - } -} - -func TestConvertParts(t *testing.T) { //nolint:funlen // comprehensive test //nolint:funlen // comprehensive test - tests := []struct { - name string - parts []llms.ContentPart - wantErr bool - check func(t *testing.T, result []genai.Part) - }{ - { - name: "text content", - parts: []llms.ContentPart{ - llms.TextContent{Text: "Hello, world!"}, - }, - wantErr: false, - check: func(t *testing.T, result []genai.Part) { - if len(result) != 1 { - t.Fatalf("expected 1 part, got %d", len(result)) - } - text, ok := result[0].(genai.Text) - if !ok { - t.Fatalf("expected genai.Text, got %T", result[0]) - } - if string(text) != "Hello, world!" { - t.Errorf("expected text 'Hello, world!', got %q", text) - } - }, - }, - { - name: "binary content", - parts: []llms.ContentPart{ - llms.BinaryContent{ - MIMEType: "image/png", - Data: []byte{0x89, 0x50, 0x4E, 0x47}, - }, - }, - wantErr: false, - check: func(t *testing.T, result []genai.Part) { - if len(result) != 1 { - t.Fatalf("expected 1 part, got %d", len(result)) - } - blob, ok := result[0].(genai.Blob) - if !ok { - t.Fatalf("expected genai.Blob, got %T", result[0]) - } - if blob.MIMEType != "image/png" { - t.Errorf("expected MIME type 'image/png', got %q", blob.MIMEType) - } - if len(blob.Data) != 4 { - t.Errorf("expected data length 4, got %d", len(blob.Data)) - } - }, - }, - { - name: "tool call", - parts: []llms.ContentPart{ - llms.ToolCall{ - FunctionCall: &llms.FunctionCall{ - Name: "test_function", - Arguments: `{"arg1": "value1", "arg2": 42}`, - }, - }, - }, - wantErr: false, - check: func(t *testing.T, result []genai.Part) { - if len(result) != 1 { - t.Fatalf("expected 1 part, got %d", len(result)) - } - fc, ok := result[0].(genai.FunctionCall) - if !ok { - t.Fatalf("expected genai.FunctionCall, got %T", result[0]) - } - if fc.Name != "test_function" { - t.Errorf("expected function name 'test_function', got %q", fc.Name) - } - if fc.Args["arg1"] != "value1" { - t.Errorf("expected arg1='value1', got %v", fc.Args["arg1"]) - } - if fc.Args["arg2"] != float64(42) { // JSON unmarshals numbers as float64 - t.Errorf("expected arg2=42, got %v", fc.Args["arg2"]) - } - }, - }, - { - name: "tool call response", - parts: []llms.ContentPart{ - llms.ToolCallResponse{ - Name: "test_function", - Content: "Function executed successfully", - }, - }, - wantErr: false, - check: func(t *testing.T, result []genai.Part) { - if len(result) != 1 { - t.Fatalf("expected 1 part, got %d", len(result)) - } - fr, ok := result[0].(genai.FunctionResponse) - if !ok { - t.Fatalf("expected genai.FunctionResponse, got %T", result[0]) - } - if fr.Name != "test_function" { - t.Errorf("expected function name 'test_function', got %q", fr.Name) - } - response, ok := fr.Response["response"].(string) - if !ok { - t.Fatalf("expected response string, got %T", fr.Response["response"]) - } - if response != "Function executed successfully" { - t.Errorf("expected response content, got %q", response) - } - }, - }, - { - name: "invalid tool call JSON", - parts: []llms.ContentPart{ - llms.ToolCall{ - FunctionCall: &llms.FunctionCall{ - Name: "test_function", - Arguments: `invalid json`, - }, - }, - }, - wantErr: true, - }, - { - name: "multiple mixed parts", - parts: []llms.ContentPart{ - llms.TextContent{Text: "First part"}, - llms.TextContent{Text: "Second part"}, - llms.BinaryContent{MIMEType: "image/jpeg", Data: []byte{0xFF, 0xD8}}, - }, - wantErr: false, - check: func(t *testing.T, result []genai.Part) { - if len(result) != 3 { - t.Fatalf("expected 3 parts, got %d", len(result)) - } - if text, ok := result[0].(genai.Text); !ok || string(text) != "First part" { - t.Errorf("expected first part to be 'First part', got %v", result[0]) - } - if text, ok := result[1].(genai.Text); !ok || string(text) != "Second part" { - t.Errorf("expected second part to be 'Second part', got %v", result[1]) - } - if blob, ok := result[2].(genai.Blob); !ok || blob.MIMEType != "image/jpeg" { - t.Errorf("expected third part to be image/jpeg blob, got %v", result[2]) - } - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := convertParts(tt.parts) - if (err != nil) != tt.wantErr { - t.Errorf("convertParts() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !tt.wantErr && tt.check != nil { - tt.check(t, result) - } - }) - } -} - -func TestConvertContent(t *testing.T) { //nolint:funlen // comprehensive test //nolint:funlen // comprehensive test - tests := []struct { - name string - content llms.MessageContent - wantErr bool - expectedRole string - }{ - { - name: "system message", - content: llms.MessageContent{ - Role: llms.ChatMessageTypeSystem, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "You are a helpful assistant"}, - }, - }, - expectedRole: RoleSystem, - }, - { - name: "AI message", - content: llms.MessageContent{ - Role: llms.ChatMessageTypeAI, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "I'm here to help"}, - }, - }, - expectedRole: RoleModel, - }, - { - name: "human message", - content: llms.MessageContent{ - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "Hello"}, - }, - }, - expectedRole: RoleUser, - }, - { - name: "generic message", - content: llms.MessageContent{ - Role: llms.ChatMessageTypeGeneric, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "Generic message"}, - }, - }, - expectedRole: RoleUser, - }, - { - name: "tool message", - content: llms.MessageContent{ - Role: llms.ChatMessageTypeTool, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "Tool response"}, - }, - }, - expectedRole: RoleUser, - }, - { - name: "unsupported function role", - content: llms.MessageContent{ - Role: llms.ChatMessageTypeFunction, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "Function message"}, - }, - }, - wantErr: true, - }, - { - name: "unsupported custom role", - content: llms.MessageContent{ - Role: llms.ChatMessageType("custom"), - Parts: []llms.ContentPart{ - llms.TextContent{Text: "Custom message"}, - }, - }, - wantErr: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := convertContent(tt.content) - if (err != nil) != tt.wantErr { - t.Errorf("convertContent() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !tt.wantErr { - if result.Role != tt.expectedRole { - t.Errorf("expected role %q, got %q", tt.expectedRole, result.Role) - } - if len(result.Parts) != len(tt.content.Parts) { - t.Errorf("expected %d parts, got %d", len(tt.content.Parts), len(result.Parts)) - } - } - }) - } -} - -func TestConvertCandidates(t *testing.T) { //nolint:funlen // comprehensive test //nolint:funlen // comprehensive test - tests := []struct { - name string - candidates []*genai.Candidate - usage *genai.UsageMetadata - wantErr bool - check func(t *testing.T, result *llms.ContentResponse) - }{ - { - name: "single text candidate", - candidates: []*genai.Candidate{ - { - Content: &genai.Content{ - Parts: []genai.Part{ - genai.Text("Response text"), - }, - }, - FinishReason: genai.FinishReasonStop, - }, - }, - check: func(t *testing.T, result *llms.ContentResponse) { - if len(result.Choices) != 1 { - t.Fatalf("expected 1 choice, got %d", len(result.Choices)) - } - if result.Choices[0].Content != "Response text" { - t.Errorf("expected content 'Response text', got %q", result.Choices[0].Content) - } - if result.Choices[0].StopReason != "STOP" { - t.Errorf("expected stop reason 'STOP', got %q", result.Choices[0].StopReason) - } - }, - }, - { - name: "multiple text parts", - candidates: []*genai.Candidate{ - { - Content: &genai.Content{ - Parts: []genai.Part{ - genai.Text("Part 1"), - genai.Text(" Part 2"), - }, - }, - }, - }, - check: func(t *testing.T, result *llms.ContentResponse) { - if result.Choices[0].Content != "Part 1 Part 2" { - t.Errorf("expected concatenated content, got %q", result.Choices[0].Content) - } - }, - }, - { - name: "function call candidate", - candidates: []*genai.Candidate{ - { - Content: &genai.Content{ - Parts: []genai.Part{ - genai.FunctionCall{ - Name: "test_function", - Args: map[string]any{"x": 1, "y": 2}, - }, - }, - }, - }, - }, - check: func(t *testing.T, result *llms.ContentResponse) { - if len(result.Choices[0].ToolCalls) != 1 { - t.Fatalf("expected 1 tool call, got %d", len(result.Choices[0].ToolCalls)) - } - tc := result.Choices[0].ToolCalls[0] - if tc.FunctionCall.Name != "test_function" { - t.Errorf("expected function name 'test_function', got %q", tc.FunctionCall.Name) - } - var args map[string]any - if err := json.Unmarshal([]byte(tc.FunctionCall.Arguments), &args); err != nil { - t.Fatalf("failed to unmarshal arguments: %v", err) - } - if args["x"] != float64(1) || args["y"] != float64(2) { - t.Errorf("expected args {x:1, y:2}, got %v", args) - } - }, - }, - { - name: "with usage metadata", - candidates: []*genai.Candidate{ - { - Content: &genai.Content{ - Parts: []genai.Part{genai.Text("Response")}, - }, - }, - }, - usage: &genai.UsageMetadata{ - PromptTokenCount: 10, - CandidatesTokenCount: 5, - TotalTokenCount: 15, - }, - check: func(t *testing.T, result *llms.ContentResponse) { - metadata := result.Choices[0].GenerationInfo - if metadata["input_tokens"] != int32(10) { - t.Errorf("expected input_tokens=10, got %v", metadata["input_tokens"]) - } - if metadata["output_tokens"] != int32(5) { - t.Errorf("expected output_tokens=5, got %v", metadata["output_tokens"]) - } - if metadata["total_tokens"] != int32(15) { - t.Errorf("expected total_tokens=15, got %v", metadata["total_tokens"]) - } - }, - }, - { - name: "with safety ratings and citations", - candidates: []*genai.Candidate{ - { - Content: &genai.Content{ - Parts: []genai.Part{genai.Text("Safe response")}, - }, - SafetyRatings: []*genai.SafetyRating{ - {Category: genai.HarmCategoryHateSpeech, Probability: genai.HarmProbabilityLow}, - }, - CitationMetadata: &genai.CitationMetadata{ - Citations: []*genai.Citation{ - {URI: "https://example.com"}, - }, - }, - }, - }, - check: func(t *testing.T, result *llms.ContentResponse) { - metadata := result.Choices[0].GenerationInfo - if metadata[SAFETY] == nil { - t.Error("expected safety ratings in metadata") - } - if metadata[CITATIONS] == nil { - t.Error("expected citations in metadata") - } - }, - }, - // Note: We can't test unknown part types easily because genai.Part - // has an unexported method, so we can't create a mock implementation - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := convertCandidates(tt.candidates, tt.usage) - if (err != nil) != tt.wantErr { - t.Errorf("convertCandidates() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !tt.wantErr && tt.check != nil { - tt.check(t, result) - } - }) - } -} - -// Note: We cannot create a custom type that implements genai.Part -// because it has an unexported method toPart() - -func TestConvertTools(t *testing.T) { //nolint:funlen // comprehensive test //nolint:funlen // comprehensive test - tests := []struct { - name string - tools []llms.Tool - wantErr bool - check func(t *testing.T, result []*genai.Tool) - }{ - { - name: "single function tool", - tools: []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "get_weather", - Description: "Get weather information", - Parameters: map[string]any{ - "type": "object", - "properties": map[string]any{ - "location": map[string]any{ - "type": "string", - "description": "The city name", - }, - "unit": map[string]any{ - "type": "string", - "description": "Temperature unit", - }, - }, - "required": []string{"location"}, - }, - }, - }, - }, - check: func(t *testing.T, result []*genai.Tool) { - if len(result) != 1 { - t.Fatalf("expected 1 tool, got %d", len(result)) - } - if len(result[0].FunctionDeclarations) != 1 { - t.Fatalf("expected 1 function declaration, got %d", len(result[0].FunctionDeclarations)) - } - fd := result[0].FunctionDeclarations[0] - if fd.Name != "get_weather" { - t.Errorf("expected function name 'get_weather', got %q", fd.Name) - } - if fd.Description != "Get weather information" { - t.Errorf("expected description, got %q", fd.Description) - } - if fd.Parameters.Type != genai.TypeObject { - t.Errorf("expected object type, got %v", fd.Parameters.Type) - } - if len(fd.Parameters.Properties) != 2 { - t.Errorf("expected 2 properties, got %d", len(fd.Parameters.Properties)) - } - if fd.Parameters.Properties["location"].Type != genai.TypeString { - t.Errorf("expected location to be string type") - } - if len(fd.Parameters.Required) != 1 || fd.Parameters.Required[0] != "location" { - t.Errorf("expected required=['location'], got %v", fd.Parameters.Required) - } - }, - }, - { - name: "unsupported tool type", - tools: []llms.Tool{ - { - Type: "unsupported", - Function: &llms.FunctionDefinition{ - Name: "test", - }, - }, - }, - wantErr: true, - }, - { - name: "invalid parameters type", - tools: []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "test", - Parameters: "invalid", - }, - }, - }, - wantErr: true, - }, - { - name: "invalid properties type", - tools: []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "test", - Parameters: map[string]any{ - "type": "object", - "properties": "invalid", - }, - }, - }, - }, - wantErr: true, - }, - { - name: "required as interface slice", - tools: []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "test", - Parameters: map[string]any{ - "type": "object", - "properties": map[string]any{ - "field": map[string]any{"type": "string"}, - }, - "required": []interface{}{"field"}, - }, - }, - }, - }, - check: func(t *testing.T, result []*genai.Tool) { - fd := result[0].FunctionDeclarations[0] - if len(fd.Parameters.Required) != 1 || fd.Parameters.Required[0] != "field" { - t.Errorf("expected required=['field'], got %v", fd.Parameters.Required) - } - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := convertTools(tt.tools) - if (err != nil) != tt.wantErr { - t.Errorf("convertTools() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !tt.wantErr && tt.check != nil { - tt.check(t, result) - } - }) - } -} - -func TestShowContent(t *testing.T) { - // This is mainly for coverage - just ensure it doesn't panic - var buf strings.Builder - contents := []*genai.Content{ - { - Role: "user", - Parts: []genai.Part{ - genai.Text("Hello"), - genai.Blob{MIMEType: "image/png", Data: []byte{1, 2, 3}}, - genai.FunctionCall{Name: "test", Args: map[string]any{"x": 1}}, - genai.FunctionResponse{Name: "test", Response: map[string]any{"result": "ok"}}, - }, - }, - } - - // Should not panic - showContent(&buf, contents) - - output := buf.String() - if !strings.Contains(output, "Role=user") { - t.Error("expected output to contain role") - } - if !strings.Contains(output, "Text \"Hello\"") { - t.Error("expected output to contain text") - } - if !strings.Contains(output, "Blob MIME=\"image/png\"") { - t.Error("expected output to contain blob info") - } - if !strings.Contains(output, "FunctionCall Name=test") { - t.Error("expected output to contain function call") - } - if !strings.Contains(output, "FunctionResponse Name=test") { - t.Error("expected output to contain function response") - } -} - -func TestErrorValues(t *testing.T) { - // Test that error variables are properly defined - if ErrNoContentInResponse == nil { - t.Error("ErrNoContentInResponse should not be nil") - } - if ErrUnknownPartInResponse == nil { - t.Error("ErrUnknownPartInResponse should not be nil") - } - if ErrInvalidMimeType == nil { - t.Error("ErrInvalidMimeType should not be nil") - } - - // Test error messages - if !strings.Contains(ErrNoContentInResponse.Error(), "no content") { - t.Error("ErrNoContentInResponse should mention 'no content'") - } - if !strings.Contains(ErrUnknownPartInResponse.Error(), "unknown part") { - t.Error("ErrUnknownPartInResponse should mention 'unknown part'") - } - if !strings.Contains(ErrInvalidMimeType.Error(), "invalid mime") { - t.Error("ErrInvalidMimeType should mention 'invalid mime'") - } -} - -func TestConstants(t *testing.T) { - // Test that constants have expected values - tests := []struct { - name string - constant string - expected string - }{ - {"CITATIONS", CITATIONS, "citations"}, - {"SAFETY", SAFETY, "safety"}, - {"RoleSystem", RoleSystem, "system"}, - {"RoleModel", RoleModel, "model"}, - {"RoleUser", RoleUser, "user"}, - {"RoleTool", RoleTool, "tool"}, - {"ResponseMIMETypeJson", ResponseMIMETypeJson, "application/json"}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if tt.constant != tt.expected { - t.Errorf("expected %s to be %q, got %q", tt.name, tt.expected, tt.constant) - } - }) - } -} - -func TestConvertAndStreamFromIterator(t *testing.T) { - // Skip actual implementation tests since we can't create a real iterator - // These tests would need integration with the actual genai package - t.Skip("Skipping iterator tests - requires real genai.GenerateContentResponseIterator") -} - -// A stream whose finish reason arrives on a trailing content-less chunk must still -// carry that reason onto the accumulated candidate, so structured-output -// validation runs on a normal STOP instead of being silently skipped. -func TestMergeStreamCandidateCarriesFinishReasonOnContentlessChunk(t *testing.T) { - t.Parallel() - - acc := &genai.Candidate{Content: &genai.Content{}} - - // First chunk: content, not yet finished. - contentChunk := &genai.Candidate{ - Content: &genai.Content{Role: "model", Parts: []genai.Part{genai.Text(`{"x":"hi"}`)}}, - FinishReason: genai.FinishReasonUnspecified, - } - if !mergeStreamCandidate(acc, contentChunk) { - t.Fatal("content chunk must report content to append") - } - - // Final chunk: no content, only the finish reason. - finalChunk := &genai.Candidate{FinishReason: genai.FinishReasonStop} - if mergeStreamCandidate(acc, finalChunk) { - t.Fatal("content-less chunk must report no content (end of stream)") - } - - if acc.FinishReason != genai.FinishReasonStop { - t.Fatalf("finish reason = %v, want STOP", acc.FinishReason) - } - if len(acc.Content.Parts) != 1 { - t.Fatalf("accumulated parts = %d, want 1", len(acc.Content.Parts)) - } -} - -// Test that Vertex implements llms.Model interface -func TestVertexImplementsModel(t *testing.T) { - var _ llms.Model = &Vertex{} -} - -func TestVertexRejectsExplicitReasoningOff(t *testing.T) { - t.Parallel() - - llm := &Vertex{} - _, err := llm.GenerateContent(t.Context(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, - llms.WithReasoningDisabled(), - ) - - var unsupported *reasoning.ErrReasoningOffUnsupported - if !errors.As(err, &unsupported) { - t.Fatalf("err = %v, want ErrReasoningOffUnsupported", err) - } -} - -func TestConvertCandidatesReportsTruncation(t *testing.T) { - t.Parallel() - - for _, tc := range []struct { - name string - finishReason genai.FinishReason - wantStop string - wantTruncated bool - }{ - {"out of budget", genai.FinishReasonMaxTokens, "MAX_TOKENS", true}, - {"finished on its own", genai.FinishReasonStop, "STOP", false}, - {"blocked by safety", genai.FinishReasonSafety, "SAFETY", false}, - {"blocked by recitation", genai.FinishReasonRecitation, "RECITATION", false}, - } { - t.Run(tc.name, func(t *testing.T) { - t.Parallel() - resp, err := convertCandidates([]*genai.Candidate{{ - FinishReason: tc.finishReason, - Content: &genai.Content{Parts: []genai.Part{genai.Text("half an ans")}}, - }}, nil) - if err != nil { - t.Fatalf("convertCandidates: %v", err) - } - if got := resp.Choices[0].Truncated; got != tc.wantTruncated { - t.Fatalf("Truncated = %v, want %v", got, tc.wantTruncated) - } - if got := resp.Choices[0].StopReason; got != tc.wantStop { - t.Fatalf("StopReason = %q, want %q", got, tc.wantStop) - } - if got := llms.IsTruncated(resp.Choices[0].StopReason); got != tc.wantTruncated { - t.Fatalf("IsTruncated(%q) = %v, want it to agree with Truncated = %v", - resp.Choices[0].StopReason, got, tc.wantTruncated) - } - }) - } -} From bf0f012ffe24538295c587e2845c6d19aa04c09f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:39:08 +0300 Subject: [PATCH 383/618] test(vertex): pin both sampling penalties on the Vertex backend The vertex door dropped WithFrequencyPenalty and WithPresencePenalty on the floor: its own generation config carried neither field, while the googleai door next to it sent both. Moving the door onto the googleai backend closed the hole; this test states it, and reddens on both assertions when the two fields stop reaching the request body. Refs PAGI-255 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex_backend_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/llms/googleai/vertex_backend_test.go b/llms/googleai/vertex_backend_test.go index 69f364a7c..d65efbc1e 100644 --- a/llms/googleai/vertex_backend_test.go +++ b/llms/googleai/vertex_backend_test.go @@ -107,3 +107,17 @@ func TestTheVertexBackendCarriesTheToolChoice(t *testing.T) { assert.Equal(t, "ANY", calling["mode"], "required means the vendor's ANY, not the default AUTO") } + +func TestTheVertexBackendCarriesBothPenalties(t *testing.T) { + t.Parallel() + + _, body, _ := vertexCall(t, nil, + llms.WithFrequencyPenalty(0.7), llms.WithPresencePenalty(0.4)) + + config, ok := body["generationConfig"].(map[string]any) + require.True(t, ok, "the request carries a generation config") + assert.InDelta(t, 0.7, config["frequencyPenalty"], 1e-6, + "the frequency penalty the caller named reaches the vendor") + assert.InDelta(t, 0.4, config["presencePenalty"], 1e-6, + "the presence penalty the caller named reaches the vendor") +} From f9ca9d5d0870684c7d89aee8771d0199e8591ccc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:47:35 +0300 Subject: [PATCH 384/618] test(llmtest): hold every door to the streaming contract it actually has MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The conformance suite decided a door streams by asserting it to an interface with GenerateContentStream returning a channel. Nothing in the fork has that method except the suite's own MockLLM, so the Streaming subtest was never registered for any of the nine doors that run the suite — and not skipped either, it simply did not exist, which reads in the report as coverage. Both streaming bodies were dead code for the same reason. Doors stream by calling llms.WithStreamingFunc, so the suite now does that: it collects the text chunks, requires the door to emit some, and requires them to concatenate to the content the call returns. A door that does not stream says so at the call site with WithoutStreaming instead of being guessed at — huggingface is the only one. The fake door now honours the callback, so CI exercises the gate rather than skipping it, and both bedrock conformance cassettes were re-recorded through the native passthrough so the streamed turn replays offline. Two audits keep them honest: every recorded request names the vendor host and carries no credential, and each recording holds its door's streaming path. Package docs claimed an iterator API the fork never had; they now show the callback. Refs PAGI-271 Co-Authored-By: Claude Opus 5 --- doc.go | 12 +- llms/bedrock/llmtest_converse_test.go | 56 ++++-- llms/bedrock/llmtest_test.go | 10 +- llms/bedrock/testdata/TestLLM.httprr | Bin 11770 -> 21600 bytes llms/bedrock/testdata/TestLLMConverse.httprr | Bin 14687 -> 17016 bytes llms/fake/fakellm.go | 24 ++- llms/huggingface/llmtest_test.go | 2 +- testing/llmtest/doc.go | 2 +- testing/llmtest/llmtest.go | 176 ++++++++----------- 9 files changed, 143 insertions(+), 139 deletions(-) diff --git a/doc.go b/doc.go index de232ac38..1f4fc9403 100644 --- a/doc.go +++ b/doc.go @@ -161,11 +161,13 @@ // // Streaming responses: // -// stream, err := llm.GenerateContentStream(ctx, messages) -// for stream.Next() { -// chunk := stream.Value() -// fmt.Print(chunk.Choices[0].Content) -// } +// _, err := llm.GenerateContent(ctx, messages, +// llms.WithStreamingFunc(func(ctx context.Context, chunk streaming.Chunk) error { +// if chunk.Type == streaming.ChunkTypeText { +// fmt.Print(chunk.Content) +// } +// return nil +// })) // // Function calling: // diff --git a/llms/bedrock/llmtest_converse_test.go b/llms/bedrock/llmtest_converse_test.go index 50879912f..6eeb30f16 100644 --- a/llms/bedrock/llmtest_converse_test.go +++ b/llms/bedrock/llmtest_converse_test.go @@ -98,24 +98,50 @@ func TestLLMConverse(t *testing.T) { llmtest.TestLLM(t, llm) } -func TestTheConformanceRecordingAddressesTheVendor(t *testing.T) { +func TestTheConformanceRecordingsAddressTheVendor(t *testing.T) { t.Parallel() - recorded, err := os.ReadFile(filepath.Join("testdata", "TestLLMConverse.httprr")) - if err != nil { - t.Skip("no recording for TestLLMConverse yet") + for _, name := range []string{"TestLLM.httprr", "TestLLMConverse.httprr"} { + t.Run(name, func(t *testing.T) { + t.Parallel() + + recorded, err := os.ReadFile(filepath.Join("testdata", name)) + if err != nil { + t.Skipf("no recording for %s yet", name) + } + + requests := 0 + for _, line := range strings.Split(string(recorded), "\n") { + switch { + case strings.HasPrefix(line, "POST "): + requests++ + require.Contains(t, line, awsBedrockHost, + "a recording made through a gateway must be stored under the vendor's own address") + case strings.HasPrefix(line, "Authorization:"): + require.Fail(t, "the recording carries a credential header") + } + } + require.NotZero(t, requests, "the recording must hold at least one request") + }) } +} - requests := 0 - for _, line := range strings.Split(string(recorded), "\n") { - switch { - case strings.HasPrefix(line, "POST "): - requests++ - require.Contains(t, line, awsBedrockHost, - "a recording made through a gateway must be stored under the vendor's own address") - case strings.HasPrefix(line, "Authorization:"): - require.Fail(t, "the recording carries a credential header") - } +func TestTheConformanceRecordingsCoverStreaming(t *testing.T) { + t.Parallel() + + for name, streamPath := range map[string]string{ + "TestLLM.httprr": "/invoke-with-response-stream", + "TestLLMConverse.httprr": "/converse-stream", + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + recorded, err := os.ReadFile(filepath.Join("testdata", name)) + if err != nil { + t.Skipf("no recording for %s yet", name) + } + require.Contains(t, string(recorded), streamPath, + "the suite streams on this door, so the recording has to carry a streamed turn") + }) } - require.NotZero(t, requests, "the recording must hold at least one request") } diff --git a/llms/bedrock/llmtest_test.go b/llms/bedrock/llmtest_test.go index d4d557e29..b4dd1623a 100644 --- a/llms/bedrock/llmtest_test.go +++ b/llms/bedrock/llmtest_test.go @@ -18,7 +18,7 @@ func TestLLM(t *testing.T) { t.Fatal(err) } if _, statErr := os.Stat(cassette); statErr != nil && !recording { - t.Skip("no httprr recording for TestLLM; re-run with -httprecord=. and real AWS credentials") + t.Skip("no httprr recording for TestLLM; re-run with -httprecord=. and a gateway key") } rr := httprr.OpenForTest(t, http.DefaultTransport) @@ -30,12 +30,8 @@ func TestLLM(t *testing.T) { } }) - client, err := setUpTestWithTransport(rr) - if err != nil { - t.Fatal(err) - } - - llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithModel(bedrock.ModelAnthropicClaudeHaiku45)) + llm, err := bedrock.New(bedrock.WithClient(conformanceClient(t, rr)), + bedrock.WithModel(bedrock.ModelAnthropicClaudeHaiku45)) if err != nil { t.Fatalf("Failed to create Bedrock LLM: %v", err) } diff --git a/llms/bedrock/testdata/TestLLM.httprr b/llms/bedrock/testdata/TestLLM.httprr index 97c8a651ae2ac3d16d77afb35b946552e7325745..60369ded7fe55b13ca20452af834c3db1a66e1a7 100644 GIT binary patch literal 21600 zcmeHPOKcp?Rt~yCfRPc>Wx?*YW)pOka{5*M81xG{PHc}8kCU-8ulrw_>gww0p6QqS zF*7}p#SW0zu)8}p2*i>NOIU)$>TXydHi$LrD|T?IXU3kfCy5<9PW~`Tti)ZXs;f?) zI_InNC^yUEBoVTNP$mqe4OLbINyFyG>!afn!G+ee`t+&A>?EQCl;mON1#Bx%5hH1a zq%9JVNfeS%x<#YlX%N}Wf10OTB+T3-iaokTeUjS@xx^dfNJSXQqKqX`l+aMBich_8 z7!8=Pe{%Brsk9|+ZtO>CRuyje!p)7hDNE3HkA=|5Ct;7mi^5)n_{@`JVFQKgaizckg_z3l2mvcMj?BA+2MU$c}_Cm)=AEu2%;ez zvl!klYl0|NRa}*HVejx{bK{sLz^|$h_PlTmzh;R?Gjx)WFpZ-mL-W~G1>hS3K7FT1 zSkXjL+}voA1g1CrQs_lUBOBJexzR@3!6Zb_X7ad0sLN1;5gXOQIETSG^U+QOa#|H& zm@D)vh$L+V)i9dM0D1-M3^}7z83gCbXh(T=?VZ5v8C8Rw<-k?Xt_n=27*j@(Of4Cy zhAAUclnHVSiP_9#24M#8H5ieG8IBi9m|GEC88Rle0|h9$nk~RxQzx{9IC-UFvFC=hXCdF+)F7JBoMioJZ+T{ zHRsndbtzgPb04BPBnfPVn~gW4ea#YDDz^^~e3W=FF!4X~{;9xzgyhi1iqrt;9$3iV9G`nZS&F$(QxJo#|kB zFjK%JO}#XO*}$WZYT=`opl6>{Ks&~#3D~?+_k*aPW_c3A0A)kUw>s$1N;S-VfA-L3 z8S#8j{nKYT=V+z+uHtb;b!jCum;~2irxb?gJUm?{04p+Whi3bIZS%f-d=|UFhJ^U1 zIJi!K*($kLThE_VqEe+@%ua>1fD-p8JIy>WTUA&u*ddbGmGg5I6uzX3+P4Z7G}!Gw zJgBe_x;(lAS^zUQH$!v#yhaNbkm9CjfrGA3MGJsnQ3X3fv9QNNL54y5ls>im9U|!nrW*lT{N<*(1MA7=x70;&z8pE zAh5X9WrXlactZNvs1JZCKDx3wu8=>>fUgf(!0D6ao;o4E=Q)Wxm<%SqujT|tv7QI2 zHI{vCBu^MsG*268v1$#@?h9Fzih2z$-UluW75osI{EdPOS%L%K1A&XXxgjz*!)Yd1i%{6X+$(TBdk51&kXI4p3*fJhJ+5XaF2} zBPRw}yt%zw!;))W2dtEKXUR8G1JBwuFNRSb+Lq{6c`+`j7Q7f5mI)zDM15y;iA+N`kV#co2~`cvEL}SD zo}pzN^8kqB!_JQKjC##Eu{_DI4{HpWB#{D$alH{y69=k&&7%0WruwQsY^M}r4 z6sC@n61ON~`7FFQFGg(z&RFnO-`$M?3TW=9nEN8GdKc#HU&4 z#69~cnR^`54EPc}TpUCNAL`to@&n|m(8rYn>=Io0|D=S#i^3^5GtS@dg*4Z%e_{eqht9}bNecMpwx>68C;%@ykXw09OGTZD&Qam2P0M-h^+n0uk|C(YBeWR-VM7=b7Jr97WPgptp$=# zmAc!N-+D)33N+@R+ZuUC-hpd{jfe*3h_nv#jy!hlR>ObQa$VBOq*o_zvih-D96ql} zhbP;k!(&N4Jc&j%Z{(5I8{R*ovh8$&MnNPKTa!j$%j01;=(?S@omqQXVYf_;1u&v5JMH>} zwCiH0g+)%^k>&Lm>8mBM@@WdRomAX&cP2URY zFy56mx#0ufVr&1@uy+ph8N&1EX@ zf?RcX4os&leg~)Y7(|d*)Mif4_4)%p2&4EcNwa)78W)r8XFJbd?C$N?4l3vWZT<7F z9zFWC-{-sGC;z$si_g9rE+k{u^sGIz4^q0YD|}cqt|a5$0u)_t#+p?O0uHj%DMRS zzxzGl%a1u?qMEP3|FzxtaWFiQ@o)#pEl-Yqu_u%>eUAHV#|9|047$r-Wv@5Uc| z2}YD!bE@?*XzCtlsAr${jVtH>do29~KI}j6_57msshdfm+~4kd~3hqPWSj# zYY};%2L_<^BpRsRr&*0L*Q`=$iNTV=-dUmLUr1c$D_r_nP^u z)`8#MKNxmoNE~Qk8I<*uaRbS>_YdNZ0wxq-&Wu5COS3wt4{Z(?z_itmN1mlLMQ+BM zQ!q=)qqJe)%SjN5}nB)|ob7Aas$9w~6WRDi!_l8Y^r@OqqW3G3%P z4|L53e%xB~VZATD7X1Kl`7T-A$D}CJxo_yTRCxyNJvuF?Iqjd_MfqUa+p<<>A}<9r zR|Y&()yWG*F8-_EI8CWx=ow|RNN4N|?=>Dz--&(<|v$HN}MeXQ64 zmNSp^jkG$EJ?{>7UWb@8y+d^z_J%ly`0fpnR`G%pofg$l5AGgKg5 zf{cZHD8&&?T{T6d8>$LbT`Gk#DX2tKR3v_vuMe5i#Quys|}XRGQu>tR35BggNJV{bSaM)AmD*~Cg{Zy4o) z*H7#`9^*neOOik<5_{acw|pq+`%wNqRK5?@??bM0X9-Y{f^+``UXXkA^%i(Z0AJo; z;iaj(!t0y$c`C*OR(Rbp?WyIG>~Sh&E)zyjC+M<7@Iv93gaXv|hLo48{!s}YR-|e7 zSav$=bS+VPk3pXH!k|u+2tkG+JP|pp?-%yna#gksbpyKmqm&3u1oKfB;O&ouLTK9WM=z1`3 zNy(opS$(T;5#0a4GohBeDy!1O`DF?-vISfOMcho*WvCa|z*C}1Pzz>aTS1bDiDg@k zqI^|(;ugjPQ`bCkGFZj&sDg^Upkw_ zUF+#V#eL0q3+o@kTk9b6{a(Mb4l?tbCDuXpb#lQv$>IlKtT>n&CS3cW-s}pnkGh+$ zTn6@OcZBI!)kMwI5K$z!^@9)!l{;{BB90<56=rVg<#gBHL7%;^BMN!ysvl(1SDQHFILLTqMaYQn4nqs36WcbIv^O+&k~b z9k3w&1Ik$!x^$ndZe7=n8#jV$K{qZ$(8+CWvr*D4+{`e`&wM_=?@wP3{`hz;D9bd@ zjWTzIG-~TPY-7XGqYM7hH8lF_UaqfRT)94~${@+Z&Mm`awrz~=9$+xOHF^gej7N}A zqm)Gn+%yCeIoE^HtNOwCE&a)0tiQkbuD&!{f90<9t{Wya4rFRT6Vm>%jqPod8vC~n z^~3iL^&6L7TOy{Ze_Oq#-(OnWaIq(-$!q|*B>{$90j~N_#}UYej1fYi{``Y|)C9Pq zZbP#Q`k5QxG*wlMNj;f2^KLGuY3`R&g%WzDjt=Huvpv>bCRc=xt@)mUFFe(adz%ML7m6N zel}#}NvvE6#U-_XXFD#ymMMT^x(K*EDwdEiBp$_Di8zeBxD9h}nodRA*`l6A9*XOv zP~D^oynNEN_RNctHVqIVoqr6ejq{)C8|2$%%nZk(Cn ze3_eildWxVBwR!&0>tzB%R~qQ=2`@}$|bhNxpWj+7!9Vv$GptFs4W`k*D;o9mvsfk zm_)FD6|=~8XIYX8VWYh48mXN*ymv= zvnqfy6_A3bSzCmWB;gEoMNz~!Ky45P5zVW#E#p8==S>g1qX&C0zvMU{?pAd(o$q#c z$eqr)-KYcpkw$wv&(FeAdd5NN_A{%qy}t&I&i2=r|F7cNlj3dmw0HrLRKfzL>oR~T zW5BVL4J?yE>@kx`h8O>2KJBEvopIh#}}K{UTmATNiV5XWNzD@oNLe7 z#9jz#!OKHMEAt=Hg>D$6|V?vLMm zzTesX{(h|8eK9p~Hc6_rnwQjsGTs8}ZCvf&lI|iThq?7O7Df#foDeO6G%5rnFdRr2 zh5*6{Bg0XIBW9OJu8v9+X~rl5R0h%&Vg|T`3TPflDHs=q2llc*+{FUQVdF~gqvykrBH>sv#h^&797kcrdTY2)rx78 z)bghJ-o8t>j1m|suBZkgiUUB1GlsDkfq-bpq2VG9#i~ko8rypI)++PWoM*2LMm7_E z+<2;QZ)&NdqvIX7roUXy4D{t%xFESuH9Z}flBw6l88efJTGF3Wm2%>=v|kR0YPFbG zBFR_EPt4UT<^Ei|yj{@MYIVu4`Z-@nrA>V1Y<{j#ER`$ObG3RhzwpBO3m12GPwv|N z^d8?XXErYl_WbdSL%HqN$z}G_w)HrJZGg#QMHP0NVj}LFX>F(dWo^#;IhggAbhD|S zyW}V4eB!Xt=`ucD4*bRJy;QVB?A^EjnF9w8O&vaRbb994@e?O!Pdy9$#k*hs{)SWZ zp<5^39{TR^dQ}6fEK8~|lT@nzv#NXeze?^eEs8h2_Z{Xnw~l_W@2!W|qxSv%J^TmA zf5Gvye%g$GKtXQzR%ts$v%_|I9YR~Zu|M> zXWl&ce7QQG9IF&ex$fr>&H9!3WX%(9UmJTYQ|Zkd2x#CT%wa1}cX-=ddD{B13!^N? zfl)C7kv0$zp*7$Bd?5}{l)%av=qI1o*K^O-RO9?_rxNC`=2&P%wOMPSl!zb!8A4=%Xkv@xvk`G?1Ak20u2X3#W`U|<47Y4S3mNdC zHp~XS*7BqSKOF4$+0$p=J$G%oPQDS=oEUxf&>AX8DhYyBgv>2aNKDn3e}(TaV|Igu z1?Ch$FlPw02(ZtroEsV^mvraTsil5+u-|{3{kVF({OQVC*{vgIt(4fB;k}i?QO-Fg z0aZ5$GC6kjBC^$%3iIHNlt9Q87-JPEdsWtymFSZ6Vmi_O#o=E&Y$Z Pc0GG^^{f8y;D>(zwFw+8 diff --git a/llms/fake/fakellm.go b/llms/fake/fakellm.go index 456a5ef5b..9592631f6 100644 --- a/llms/fake/fakellm.go +++ b/llms/fake/fakellm.go @@ -3,9 +3,11 @@ package fake import ( "context" "errors" + "strings" "sync" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" ) type LLM struct { @@ -22,11 +24,10 @@ func NewFakeLLM(responses []string) *LLM { } // GenerateContent generate fake content. -func (f *LLM) GenerateContent(_ context.Context, _ []llms.MessageContent, _ ...llms.CallOption) (*llms.ContentResponse, error) { +func (f *LLM) GenerateContent(ctx context.Context, _ []llms.MessageContent, options ...llms.CallOption) (*llms.ContentResponse, error) { f.mu.Lock() - defer f.mu.Unlock() - if len(f.responses) == 0 { + f.mu.Unlock() return nil, errors.New("no responses configured") } if f.index >= len(f.responses) { @@ -34,6 +35,23 @@ func (f *LLM) GenerateContent(_ context.Context, _ []llms.MessageContent, _ ...l } response := f.responses[f.index] f.index++ + f.mu.Unlock() + + opts := llms.CallOptions{} + for _, opt := range options { + opt(&opts) + } + if opts.StreamingFunc != nil { + for _, part := range strings.SplitAfter(response, " ") { + if err := streaming.CallWithText(ctx, opts.StreamingFunc, part); err != nil { + return nil, err + } + } + if err := streaming.CallWithDone(ctx, opts.StreamingFunc); err != nil { + return nil, err + } + } + return &llms.ContentResponse{ Choices: []*llms.ContentChoice{{Content: response}}, }, nil diff --git a/llms/huggingface/llmtest_test.go b/llms/huggingface/llmtest_test.go index fa9f2006f..3b683d171 100644 --- a/llms/huggingface/llmtest_test.go +++ b/llms/huggingface/llmtest_test.go @@ -17,5 +17,5 @@ func TestLLM(t *testing.T) { t.Fatalf("Failed to create HuggingFace LLM: %v", err) } - llmtest.TestLLM(t, llm) + llmtest.TestLLM(t, llm, llmtest.WithoutStreaming()) } diff --git a/testing/llmtest/doc.go b/testing/llmtest/doc.go index 098f854da..468d497a1 100644 --- a/testing/llmtest/doc.go +++ b/testing/llmtest/doc.go @@ -29,7 +29,7 @@ // // The package automatically detects and tests supported capabilities: // - Basic operations (Call, GenerateContent) -// - Streaming (if model implements streaming interface) +// - Streaming (unless the call site passes WithoutStreaming) // - Tool/Function calling (probed with test tool) // - Reasoning/Thinking mode (if supported) // - Token counting (if usage information provided) diff --git a/testing/llmtest/llmtest.go b/testing/llmtest/llmtest.go index 51c669e13..5614af50c 100644 --- a/testing/llmtest/llmtest.go +++ b/testing/llmtest/llmtest.go @@ -14,6 +14,7 @@ import ( "time" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" ) // TestLLM tests an LLM implementation. @@ -31,10 +32,15 @@ import ( // } // llmtest.TestLLM(t, llm) // } -func TestLLM(t *testing.T, model llms.Model) { +func TestLLM(t *testing.T, model llms.Model, opts ...Option) { t.Helper() t.Parallel() + var declared TestOptions + for _, opt := range opts { + opt(&declared) + } + // Run core tests as subtests - these should always work t.Run("Core", func(t *testing.T) { t.Parallel() @@ -54,8 +60,7 @@ func TestLLM(t *testing.T, model llms.Model) { t.Run("Capabilities", func(t *testing.T) { t.Parallel() - // Test streaming if supported - if supportsStreaming(model) { + if !declared.SkipStreaming { t.Run("Streaming", func(t *testing.T) { t.Parallel() testStreaming(t, model) @@ -86,15 +91,6 @@ func TestLLM(t *testing.T, model llms.Model) { // Capability detection functions -// supportsStreaming checks if the model supports streaming -func supportsStreaming(model llms.Model) bool { - // Check if model implements the streaming interface - _, ok := model.(interface { - GenerateContentStream(context.Context, []llms.MessageContent, ...llms.CallOption) (<-chan llms.ContentResponse, error) - }) - return ok -} - // supportsTools probes if the model supports tool calls func supportsTools(model llms.Model) bool { // Try a simple tool call with a dummy tool @@ -148,6 +144,15 @@ func TestLLMWithOptions(t *testing.T, model llms.Model, opts TestOptions, expect runTestsWithContext(t, testCtx) } +// Option declares, at the call site, what the door under test cannot do. +type Option func(*TestOptions) + +// WithoutStreaming declares a door that does not deliver a streaming callback, +// so the suite must not hold it to that contract. +func WithoutStreaming() Option { + return func(o *TestOptions) { o.SkipStreaming = true } +} + // TestOptions configures test execution. type TestOptions struct { // Timeout for each test operation @@ -301,7 +306,6 @@ func testGenerateContentWithContext(t *testing.T, tctx *testContext) { func testStreaming(t *testing.T, model llms.Model) { t.Helper() - ctx := context.Background() messages := []llms.MessageContent{ { @@ -312,34 +316,7 @@ func testStreaming(t *testing.T, model llms.Model) { }, } - // Skip if model doesn't support streaming - streamer, ok := model.(interface { - GenerateContentStream(context.Context, []llms.MessageContent, ...llms.CallOption) (<-chan llms.ContentResponse, error) - }) - if !ok { - t.Skip("Model doesn't support streaming") - } - - stream, err := streamer.GenerateContentStream(ctx, messages, llms.WithMaxTokens(50)) - if err != nil { - t.Fatalf("GenerateContentStream failed: %v", err) - } - - var chunks []string - for chunk := range stream { - if len(chunk.Choices) > 0 { - chunks = append(chunks, chunk.Choices[0].Content) - } - } - - if len(chunks) == 0 { - t.Error("No chunks received from stream") - } - - fullContent := strings.Join(chunks, "") - if fullContent == "" { - t.Error("Stream produced no content") - } + assertStreams(t, context.Background(), model, messages, llms.WithMaxTokens(50)) } func testStreamingWithContext(t *testing.T, tctx *testContext) { @@ -363,29 +340,42 @@ func testStreamingWithContext(t *testing.T, tctx *testContext) { } } - // Skip if model doesn't support streaming - streamer, ok := tctx.model.(interface { - GenerateContentStream(context.Context, []llms.MessageContent, ...llms.CallOption) (<-chan llms.ContentResponse, error) + opts := append([]llms.CallOption{llms.WithMaxTokens(50)}, tctx.options.CallOptions...) + assertStreams(t, ctx, tctx.model, messages, opts...) +} + +func assertStreams(t *testing.T, ctx context.Context, model llms.Model, messages []llms.MessageContent, opts ...llms.CallOption) { + t.Helper() + + var mu sync.Mutex + var streamed strings.Builder + collect := llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + mu.Lock() + defer mu.Unlock() + streamed.WriteString(chunk.Content) + return nil }) - if !ok { - t.Skip("Model doesn't support streaming") - } - opts := append([]llms.CallOption{llms.WithMaxTokens(50)}, tctx.options.CallOptions...) - stream, err := streamer.GenerateContentStream(ctx, messages, opts...) + resp, err := model.GenerateContent(ctx, messages, append(opts, collect)...) if err != nil { - t.Fatalf("GenerateContentStream failed: %v", err) + t.Fatalf("GenerateContent with a streaming callback failed: %v", err) } - var chunks []string - for chunk := range stream { - if len(chunk.Choices) > 0 { - chunks = append(chunks, chunk.Choices[0].Content) - } - } + mu.Lock() + got := streamed.String() + mu.Unlock() - if len(chunks) == 0 { - t.Error("No chunks received from stream") + if got == "" { + t.Fatal("the door took a streaming callback and never called it with text") + } + if len(resp.Choices) == 0 { + t.Fatal("streaming call returned no choices") + } + if content := resp.Choices[0].Content; content != got { + t.Errorf("the streamed text and the returned content disagree:\n streamed: %q\n returned: %q", got, content) } } @@ -597,61 +587,33 @@ func (m *MockLLM) GenerateContent(ctx context.Context, messages []llms.MessageCo m.LastMessages = messages m.mu.Unlock() - if m.GenerateResponse != nil { - return m.GenerateResponse, m.GenerateError - } - - // Default response - return &llms.ContentResponse{ - Choices: []*llms.ContentChoice{ - { - Content: "mock response", + response := m.GenerateResponse + if response == nil { + response = &llms.ContentResponse{ + Choices: []*llms.ContentChoice{ + { + Content: "mock response", + }, }, - }, - }, m.GenerateError -} - -// GenerateContentStream implements streaming -func (m *MockLLM) GenerateContentStream(ctx context.Context, messages []llms.MessageContent, options ...llms.CallOption) (<-chan llms.ContentResponse, error) { - // Create a channel and send the mock response - ch := make(chan llms.ContentResponse, 1) - - // Capture the response under lock - m.mu.Lock() - hasResponse := m.GenerateResponse != nil - var response llms.ContentResponse - if hasResponse { - response = *m.GenerateResponse + } } - m.mu.Unlock() - // Send the response in chunks - go func() { - defer close(ch) - - // Simulate streaming by sending the response in parts - if hasResponse { - ch <- response - } else { - // Default streaming response - ch <- llms.ContentResponse{ - Choices: []*llms.ContentChoice{ - { - Content: "mock", - }, - }, - } - ch <- llms.ContentResponse{ - Choices: []*llms.ContentChoice{ - { - Content: " response", - }, - }, + opts := llms.CallOptions{} + for _, opt := range options { + opt(&opts) + } + if opts.StreamingFunc != nil && len(response.Choices) > 0 { + for _, part := range strings.SplitAfter(response.Choices[0].Content, " ") { + if err := streaming.CallWithText(ctx, opts.StreamingFunc, part); err != nil { + return nil, err } } - }() + if err := streaming.CallWithDone(ctx, opts.StreamingFunc); err != nil { + return nil, err + } + } - return ch, nil + return response, m.GenerateError } // Verify MockLLM implements llms.Model From a48b61646ca2a0b891e1b1e1da9887e87bc2fe0b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:48:15 +0300 Subject: [PATCH 385/618] test(vertex): drop the door-option parameter no caller fills Every call site passed nil, so the parameter only widened the helper's signature; the linter reports it as unparam and the CI lint job fails. Refs PAGI-255 Co-Authored-By: Claude Opus 5 --- llms/googleai/vertex_backend_test.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/llms/googleai/vertex_backend_test.go b/llms/googleai/vertex_backend_test.go index d65efbc1e..246acd294 100644 --- a/llms/googleai/vertex_backend_test.go +++ b/llms/googleai/vertex_backend_test.go @@ -14,7 +14,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" ) -func vertexCall(t *testing.T, opts []Option, call ...llms.CallOption) (string, map[string]any, *llms.ContentResponse) { +func vertexCall(t *testing.T, call ...llms.CallOption) (string, map[string]any, *llms.ContentResponse) { t.Helper() var gotURL, gotBody string @@ -27,12 +27,11 @@ func vertexCall(t *testing.T, opts []Option, call ...llms.CallOption) (string, m })) t.Cleanup(srv.Close) - llm, err := New(context.Background(), append([]Option{ + llm, err := New(context.Background(), WithCloudProject("hotel-desk"), WithCloudLocation("europe-west4"), WithDefaultModel("gemini-2.5-flash"), - WithHTTPClient(&http.Client{Transport: &toLocalServer{host: srv.Listener.Addr().String()}}), - }, opts...)...) + WithHTTPClient(&http.Client{Transport: &toLocalServer{host: srv.Listener.Addr().String()}})) require.NoError(t, err) resp, err := llm.GenerateContent(context.Background(), @@ -57,7 +56,7 @@ func (t *toLocalServer) RoundTrip(req *http.Request) (*http.Response, error) { func TestTheVertexBackendAddressesTheProjectTheCallerNamed(t *testing.T) { t.Parallel() - got, _, resp := vertexCall(t, nil) + got, _, resp := vertexCall(t) assert.Contains(t, got, "/projects/hotel-desk/locations/europe-west4/", "the project and location the caller gave decide the address") @@ -73,7 +72,7 @@ func TestTheVertexBackendAddressesTheProjectTheCallerNamed(t *testing.T) { func TestTheVertexBackendCarriesAThinkingBudget(t *testing.T) { t.Parallel() - _, body, _ := vertexCall(t, nil, llms.WithReasoning(llms.ReasoningNone, 2048)) + _, body, _ := vertexCall(t, llms.WithReasoning(llms.ReasoningNone, 2048)) config, ok := body["generationConfig"].(map[string]any) require.True(t, ok, "the request carries a generation config") @@ -98,7 +97,7 @@ func TestTheVertexBackendCarriesTheToolChoice(t *testing.T) { }, }} - _, body, _ := vertexCall(t, nil, llms.WithTools(tools), llms.WithToolChoice("required")) + _, body, _ := vertexCall(t, llms.WithTools(tools), llms.WithToolChoice("required")) config, ok := body["toolConfig"].(map[string]any) require.True(t, ok, "a caller that required a tool gets a tool config on the wire") @@ -111,7 +110,7 @@ func TestTheVertexBackendCarriesTheToolChoice(t *testing.T) { func TestTheVertexBackendCarriesBothPenalties(t *testing.T) { t.Parallel() - _, body, _ := vertexCall(t, nil, + _, body, _ := vertexCall(t, llms.WithFrequencyPenalty(0.7), llms.WithPresencePenalty(0.4)) config, ok := body["generationConfig"].(map[string]any) From 01a0bd80a02f5df1042ec70136d234b47762e33f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 03:58:03 +0300 Subject: [PATCH 386/618] fix(embeddings): an answer without vectors is an error, not a panic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A 200 whose data list is empty reached EmbedQuery as zero vectors and a nil error, and EmbedQuery indexed element zero: a gateway answering with an empty list crashed the caller's process instead of returning an error. Live repro on the mistral door: index out of range [0] with length 0. Three of the six embedder doors let that answer through — mistral, googleai and jina — while openai, ollama and huggingface already refused both an empty list and a list shorter than the inputs. The three now refuse the same way, and EmbedQuery refuses a client that hands back nothing whatever the door. Refs PAGI-272 Co-Authored-By: Claude Opus 5 --- embeddings/embedding.go | 6 +++ embeddings/embedding_test.go | 17 +++++++ embeddings/jina/jina.go | 12 +++++ embeddings/jina/short_response_test.go | 54 ++++++++++++++++++++ llms/googleai/embed_short_response_test.go | 57 ++++++++++++++++++++++ llms/googleai/embeddings.go | 13 +++++ llms/mistral/embed_short_response_test.go | 54 ++++++++++++++++++++ llms/mistral/mistralembed.go | 8 +++ 8 files changed, 221 insertions(+) create mode 100644 embeddings/jina/short_response_test.go create mode 100644 llms/googleai/embed_short_response_test.go create mode 100644 llms/mistral/embed_short_response_test.go diff --git a/embeddings/embedding.go b/embeddings/embedding.go index 57e986e80..50096c0c0 100644 --- a/embeddings/embedding.go +++ b/embeddings/embedding.go @@ -2,12 +2,15 @@ package embeddings import ( "context" + "errors" "fmt" "strings" "github.com/vxcontrol/langchaingo/internal/sliceutil" ) +var ErrNoEmbedding = errors.New("embeddings: the client returned no vector for the query") + // NewEmbedder creates a new Embedder from the given EmbedderClient, with // some options that affect how embedding will be done. func NewEmbedder(client EmbedderClient, opts ...Option) (*EmbedderImpl, error) { @@ -62,6 +65,9 @@ func (ei *EmbedderImpl) EmbedQuery(ctx context.Context, text string) ([]float32, if err != nil { return nil, fmt.Errorf("error embedding query: %w", err) } + if len(emb) == 0 { + return nil, ErrNoEmbedding + } return emb[0], nil } diff --git a/embeddings/embedding_test.go b/embeddings/embedding_test.go index 15549852f..86c414c2c 100644 --- a/embeddings/embedding_test.go +++ b/embeddings/embedding_test.go @@ -1,9 +1,11 @@ package embeddings import ( + "context" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestBatchTexts(t *testing.T) { @@ -60,3 +62,18 @@ func TestBatchTexts(t *testing.T) { assert.Equal(t, tc.expected, BatchTexts(tc.texts, tc.batchSize)) } } + +func TestEmbedQueryRefusesAnAnswerWithoutAVector(t *testing.T) { + t.Parallel() + + client := EmbedderClientFunc(func(context.Context, []string) ([][]float32, error) { + return [][]float32{}, nil + }) + e, err := NewEmbedder(client) + require.NoError(t, err) + + got, err := e.EmbedQuery(context.Background(), "hello") + + require.ErrorIs(t, err, ErrNoEmbedding) + assert.Nil(t, got) +} diff --git a/embeddings/jina/jina.go b/embeddings/jina/jina.go index 869479863..3cebe8d1e 100644 --- a/embeddings/jina/jina.go +++ b/embeddings/jina/jina.go @@ -12,6 +12,11 @@ import ( "github.com/vxcontrol/langchaingo/embeddings" ) +var ( + ErrEmptyEmbeddings = errors.New("jina: the vendor returned no embeddings") + ErrShortEmbeddings = errors.New("jina: fewer embeddings than inputs") +) + type Jina struct { Model string InputText []string @@ -122,6 +127,13 @@ func (j *Jina) CreateEmbedding(ctx context.Context, texts []string) ([][]float32 return nil, err } + if len(embeddingResponse.Data) == 0 { + return nil, ErrEmptyEmbeddings + } + if len(embeddingResponse.Data) != len(texts) { + return nil, ErrShortEmbeddings + } + embs := make([][]float32, 0, len(embeddingResponse.Data)) for _, data := range embeddingResponse.Data { embs = append(embs, data.Embedding) diff --git a/embeddings/jina/short_response_test.go b/embeddings/jina/short_response_test.go new file mode 100644 index 000000000..e0420021b --- /dev/null +++ b/embeddings/jina/short_response_test.go @@ -0,0 +1,54 @@ +package jina + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func embedAgainst(t *testing.T, body string, inputs ...string) ([][]float32, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + j, err := NewJina(WithAPIBaseURL(srv.URL), WithAPIKey("k")) + require.NoError(t, err) + return j.CreateEmbedding(context.Background(), inputs) +} + +func TestAnEmptyEmbeddingListIsAFailure(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"data":[]}`, "one") + + require.ErrorIs(t, err, ErrEmptyEmbeddings) + assert.Nil(t, got, "a caller that gets an error must not also get a slice to index") +} + +func TestFewerEmbeddingsThanInputsIsAFailure(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"data":[{"embedding":[0.1,0.2]}]}`, "one", "two") + + require.ErrorIs(t, err, ErrShortEmbeddings) + assert.Nil(t, got) +} + +func TestOneEmbeddingPerInputIsTheHappyPath(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"data":[{"embedding":[0.1,0.2]},{"embedding":[0.3,0.4]}]}`, "one", "two") + + require.NoError(t, err) + require.Len(t, got, 2) + assert.InDelta(t, float32(0.3), got[1][0], 1e-6) +} diff --git a/llms/googleai/embed_short_response_test.go b/llms/googleai/embed_short_response_test.go new file mode 100644 index 000000000..cef27be80 --- /dev/null +++ b/llms/googleai/embed_short_response_test.go @@ -0,0 +1,57 @@ +package googleai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func embedAgainst(t *testing.T, body string, inputs ...string) ([][]float32, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + llm, err := New(context.Background(), + WithAPIKey("k"), + WithDefaultEmbeddingModel("text-embedding-004"), + WithHTTPClient(&http.Client{Transport: &toLocalServer{host: srv.Listener.Addr().String()}})) + require.NoError(t, err) + return llm.CreateEmbedding(context.Background(), inputs) +} + +func TestAnEmptyEmbeddingListIsAFailure(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"embeddings":[]}`, "one") + + require.ErrorIs(t, err, ErrEmptyEmbeddings) + assert.Nil(t, got, "a caller that gets an error must not also get a slice to index") +} + +func TestFewerEmbeddingsThanInputsIsAFailure(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"embeddings":[{"values":[0.1,0.2]}]}`, "one", "two") + + require.ErrorIs(t, err, ErrShortEmbeddings) + assert.Nil(t, got) +} + +func TestOneEmbeddingPerInputIsTheHappyPath(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"embeddings":[{"values":[0.1,0.2]},{"values":[0.3,0.4]}]}`, "one", "two") + + require.NoError(t, err) + require.Len(t, got, 2) + assert.InDelta(t, float32(0.3), got[1][0], 1e-6) +} diff --git a/llms/googleai/embeddings.go b/llms/googleai/embeddings.go index 3b559b174..422289890 100644 --- a/llms/googleai/embeddings.go +++ b/llms/googleai/embeddings.go @@ -2,11 +2,17 @@ package googleai import ( "context" + "errors" "fmt" "google.golang.org/genai" ) +var ( + ErrEmptyEmbeddings = errors.New("googleai: the vendor returned no embeddings") + ErrShortEmbeddings = errors.New("googleai: fewer embeddings than inputs") +) + // CreateEmbedding creates embeddings from texts. func (g *GoogleAI) CreateEmbedding(ctx context.Context, texts []string) ([][]float32, error) { if len(texts) == 0 { @@ -31,6 +37,13 @@ func (g *GoogleAI) CreateEmbedding(ctx context.Context, texts []string) ([][]flo results = append(results, batchResults...) } + if len(results) == 0 { + return nil, ErrEmptyEmbeddings + } + if len(results) != len(texts) { + return nil, ErrShortEmbeddings + } + return results, nil } diff --git a/llms/mistral/embed_short_response_test.go b/llms/mistral/embed_short_response_test.go new file mode 100644 index 000000000..023205ef4 --- /dev/null +++ b/llms/mistral/embed_short_response_test.go @@ -0,0 +1,54 @@ +package mistral + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func embedAgainst(t *testing.T, body string, inputs ...string) ([][]float32, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k")) + require.NoError(t, err) + return m.CreateEmbedding(context.Background(), inputs) +} + +func TestAnEmptyEmbeddingListIsAFailure(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"id":"x","object":"list","data":[],"model":"mistral-embed"}`, "one") + + require.ErrorIs(t, err, ErrEmptyEmbeddings) + assert.Nil(t, got, "a caller that gets an error must not also get a slice to index") +} + +func TestFewerEmbeddingsThanInputsIsAFailure(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"data":[{"embedding":[0.1,0.2]}]}`, "one", "two") + + require.ErrorIs(t, err, ErrShortEmbeddings) + assert.Nil(t, got) +} + +func TestOneEmbeddingPerInputIsTheHappyPath(t *testing.T) { + t.Parallel() + + got, err := embedAgainst(t, `{"data":[{"embedding":[0.1,0.2]},{"embedding":[0.3,0.4]}]}`, "one", "two") + + require.NoError(t, err) + require.Len(t, got, 2) + assert.InDelta(t, float32(0.3), got[1][0], 1e-6) +} diff --git a/llms/mistral/mistralembed.go b/llms/mistral/mistralembed.go index fe5bd0576..063499c66 100644 --- a/llms/mistral/mistralembed.go +++ b/llms/mistral/mistralembed.go @@ -15,6 +15,7 @@ import ( var ( ErrEmptyEmbeddings = errors.New("empty embeddings") + ErrShortEmbeddings = errors.New("mistral: fewer embeddings than inputs") ErrEmbeddingFailed = errors.New("mistral: embedding request failed") ) @@ -92,6 +93,13 @@ func (m *Model) CreateEmbedding(ctx context.Context, inputTexts []string) ([][]f return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) } + if len(decoded.Data) == 0 { + return nil, ErrEmptyEmbeddings + } + if len(decoded.Data) != len(inputTexts) { + return nil, ErrShortEmbeddings + } + allEmbds := make([][]float32, len(decoded.Data)) for i, embs := range decoded.Data { if len(embs.Embedding) == 0 { From 55c416143c3973acbd7fdff6a2390b6b5b38fbad Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 04:04:24 +0300 Subject: [PATCH 387/618] fix(mistral): the embeddings call honours the retry count and the caller's client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CreateEmbedding built its own one-shot http.Client, so two caller intentions died on this path. WithMaxRetries reached only the chat client of the vendor SDK: against a server answering 500, a door asked for five attempts sent exactly one request. And there was no way at all to hand the door a transport, which is why the consumer's proxy and TLS client was dropped for this provider alone. The embeddings request now retries up to the count the caller named, on the same statuses the vendor SDK retries — 429, 500, 502, 503, 504 — with the same 500ms-per-attempt backoff, rebuilding the body each time, and stops the moment the caller's context is done. WithEmbeddingHTTPClient hands the door the transport to send it on; the name says embeddings because the chat surface is SDK-bound and can take none. Refs PAGI-273 Co-Authored-By: Claude Opus 5 --- llms/mistral/client_options.go | 11 ++ llms/mistral/embed_transport_test.go | 144 +++++++++++++++++++++++++++ llms/mistral/mistralembed.go | 72 ++++++++++++-- 3 files changed, 217 insertions(+), 10 deletions(-) create mode 100644 llms/mistral/embed_transport_test.go diff --git a/llms/mistral/client_options.go b/llms/mistral/client_options.go index 7d6d58b25..a2f63f9b5 100644 --- a/llms/mistral/client_options.go +++ b/llms/mistral/client_options.go @@ -1,6 +1,7 @@ package mistral import ( + "net/http" "time" "github.com/vxcontrol/langchaingo/callbacks" @@ -16,6 +17,8 @@ type clientOptions struct { model string embeddingModel string callbacksHandler callbacks.Handler + + embeddingHTTPClient *http.Client } type Option func(*clientOptions) @@ -63,6 +66,14 @@ func WithEmbeddingModel(embeddingModel string) Option { } } +// Sets the HTTP client the embeddings request travels on. The chat surface takes +// no client: it is built on the vendor SDK, which makes its own. +func WithEmbeddingHTTPClient(client *http.Client) Option { + return func(o *clientOptions) { + o.embeddingHTTPClient = client + } +} + // Sets the Langchain callbacks handler to use for the Model being instantiated. Defaults to callbacks.SimpleHandler. func WithCallbacksHandler(callbacksHandler callbacks.Handler) Option { return func(o *clientOptions) { diff --git a/llms/mistral/embed_transport_test.go b/llms/mistral/embed_transport_test.go new file mode 100644 index 000000000..9945dc63c --- /dev/null +++ b/llms/mistral/embed_transport_test.go @@ -0,0 +1,144 @@ +package mistral + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func countingServer(t *testing.T, status func(attempt int32) int) (*httptest.Server, *int32) { + t.Helper() + + var seen int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + attempt := atomic.AddInt32(&seen, 1) + code := status(attempt) + if code != http.StatusOK { + w.WriteHeader(code) + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"data":[{"embedding":[0.1,0.2]}]}`) + })) + t.Cleanup(srv.Close) + return srv, &seen +} + +func TestTheEmbeddingCallRetriesAsManyTimesAsTheCallerAsked(t *testing.T) { + t.Parallel() + + srv, seen := countingServer(t, func(int32) int { return http.StatusInternalServerError }) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), WithMaxRetries(3)) + require.NoError(t, err) + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + + require.ErrorIs(t, err, ErrEmbeddingFailed) + assert.Equal(t, int32(3), atomic.LoadInt32(seen), + "three attempts were asked for, so the vendor sees three requests") +} + +func TestARetriedEmbeddingCallReturnsTheVectorItEventuallyGot(t *testing.T) { + t.Parallel() + + srv, seen := countingServer(t, func(attempt int32) int { + if attempt < 3 { + return http.StatusServiceUnavailable + } + return http.StatusOK + }) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), WithMaxRetries(4)) + require.NoError(t, err) + got, err := m.CreateEmbedding(context.Background(), []string{"x"}) + + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, int32(3), atomic.LoadInt32(seen)) +} + +func TestARefusalTheVendorWillNotChangeIsNotRetried(t *testing.T) { + t.Parallel() + + srv, seen := countingServer(t, func(int32) int { return http.StatusUnauthorized }) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), WithMaxRetries(5)) + require.NoError(t, err) + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + + require.ErrorIs(t, err, ErrEmbeddingFailed) + assert.Equal(t, int32(1), atomic.LoadInt32(seen), + "401 is the vendor's answer, not a hiccup to sit out") +} + +func TestACancelledContextStopsTheRetries(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(context.Background()) + var seen int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + atomic.AddInt32(&seen, 1) + cancel() + w.WriteHeader(http.StatusInternalServerError) + })) + t.Cleanup(srv.Close) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), WithMaxRetries(5)) + require.NoError(t, err) + + started := time.Now() + _, err = m.CreateEmbedding(ctx, []string{"x"}) + elapsed := time.Since(started) + + require.Error(t, err) + assert.Equal(t, int32(1), atomic.LoadInt32(&seen), + "a cancelled caller does not keep the vendor busy") + assert.Less(t, elapsed, retryBackoffStep, + "a cancelled caller gets its answer now, not after the whole backoff ladder") +} + +func TestZeroRetriesStillSendsTheRequestOnce(t *testing.T) { + t.Parallel() + + srv, seen := countingServer(t, func(int32) int { return http.StatusOK }) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), WithMaxRetries(0)) + require.NoError(t, err) + got, err := m.CreateEmbedding(context.Background(), []string{"x"}) + + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, int32(1), atomic.LoadInt32(seen)) +} + +type recordingTransport struct { + seen *int32 +} + +func (r *recordingTransport) RoundTrip(req *http.Request) (*http.Response, error) { + atomic.AddInt32(r.seen, 1) + return http.DefaultTransport.RoundTrip(req) +} + +func TestTheEmbeddingRequestTravelsOnTheCallersClient(t *testing.T) { + t.Parallel() + + srv, _ := countingServer(t, func(int32) int { return http.StatusOK }) + + var through int32 + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), + WithEmbeddingHTTPClient(&http.Client{Transport: &recordingTransport{seen: &through}})) + require.NoError(t, err) + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + + require.NoError(t, err) + assert.Equal(t, int32(1), atomic.LoadInt32(&through), + "the caller's transport carries the request, not a client the door made") +} diff --git a/llms/mistral/mistralembed.go b/llms/mistral/mistralembed.go index 063499c66..348dbce72 100644 --- a/llms/mistral/mistralembed.go +++ b/llms/mistral/mistralembed.go @@ -11,6 +11,7 @@ import ( "net/url" "path" "strings" + "time" ) var ( @@ -19,7 +20,16 @@ var ( ErrEmbeddingFailed = errors.New("mistral: embedding request failed") ) +var retryEmbeddingStatus = map[int]bool{ + http.StatusTooManyRequests: true, + http.StatusInternalServerError: true, + http.StatusBadGateway: true, + http.StatusServiceUnavailable: true, + http.StatusGatewayTimeout: true, +} + const ( + retryBackoffStep = 500 * time.Millisecond defaultEmbeddingModel = "mistral-embed" apiVersionSegment = "v1" embeddingsSegment = "embeddings" @@ -49,6 +59,56 @@ func (m *Model) embeddingsURL() (string, error) { return endpoint.String(), nil } +func (m *Model) embeddingsHTTPClient() *http.Client { + if m.clientOptions.embeddingHTTPClient != nil { + return m.clientOptions.embeddingHTTPClient + } + return &http.Client{Timeout: m.clientOptions.timeout} +} + +func (m *Model) postEmbeddings(ctx context.Context, endpoint string, body []byte) (*http.Response, error) { + client := m.embeddingsHTTPClient() + + attempts := m.clientOptions.maxRetries + if attempts < 1 { + attempts = 1 + } + + var lastErr error + for attempt := range attempts { + if attempt > 0 { + select { + case <-ctx.Done(): + return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, ctx.Err()) + case <-time.After(time.Duration(attempt) * retryBackoffStep): + } + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(body)) + if err != nil { + return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + } + req.Header.Set("Authorization", "Bearer "+m.clientOptions.apiKey) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "application/json") + + resp, err := client.Do(req) + if err != nil { + lastErr = fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + continue + } + if !retryEmbeddingStatus[resp.StatusCode] { + return resp, nil + } + + detail, _ := io.ReadAll(io.LimitReader(resp.Body, 4096)) + resp.Body.Close() + lastErr = fmt.Errorf("%w: %s: %s", ErrEmbeddingFailed, resp.Status, strings.TrimSpace(string(detail))) + } + + return nil, lastErr +} + // CreateEmbedding implements the embeddings.EmbedderClient interface and creates embeddings for the given input texts. func (m *Model) CreateEmbedding(ctx context.Context, inputTexts []string) ([][]float32, error) { model := m.clientOptions.embeddingModel @@ -65,17 +125,9 @@ func (m *Model) CreateEmbedding(ctx context.Context, inputTexts []string) ([][]f return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(body)) + resp, err := m.postEmbeddings(ctx, endpoint, body) if err != nil { - return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) - } - req.Header.Set("Authorization", "Bearer "+m.clientOptions.apiKey) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Accept", "application/json") - - resp, err := (&http.Client{Timeout: m.clientOptions.timeout}).Do(req) - if err != nil { - return nil, fmt.Errorf("%w: %w", ErrEmbeddingFailed, err) + return nil, err } defer resp.Body.Close() From 4b782c1b700afdfac6f3d57043edbb40ea2a81ae Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 04:14:03 +0300 Subject: [PATCH 388/618] fix(mistral): announce no tools when none were asked for, keep the usage a chunk gave MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two losses on the chat surface, both in this door rather than the SDK. The tool slice was allocated on every request, so it was never nil and the SDK wrote the key: a caller that named no tool still sent "tools":[]. It is now built only when there is something to put in it. The streaming path assigned created, model and usage from every chunk in turn, and the vendor sends usage once, usually not last — so the final chunk overwrote the count with zeros and the caller saw no spend at all. Each field is now written only by a chunk that carries it. Refs PAGI-275 Co-Authored-By: Claude Opus 5 --- llms/mistral/chat_wire_test.go | 114 +++++++++++++++++++++++++++++++++ llms/mistral/mistralmodel.go | 13 ++-- 2 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 llms/mistral/chat_wire_test.go diff --git a/llms/mistral/chat_wire_test.go b/llms/mistral/chat_wire_test.go new file mode 100644 index 000000000..061e83381 --- /dev/null +++ b/llms/mistral/chat_wire_test.go @@ -0,0 +1,114 @@ +package mistral + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + sdk "github.com/gage-technologies/mistral-go" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func chatBodyOnTheWire(t *testing.T, call ...llms.CallOption) map[string]any { + t.Helper() + + var raw []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + m, err := New(WithAPIKey("k"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + _, err = m.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) + require.NoError(t, err) + + var body map[string]any + require.NoError(t, json.Unmarshal(raw, &body)) + return body +} + +func TestACallWithoutToolsDoesNotAnnounceTools(t *testing.T) { + t.Parallel() + + body := chatBodyOnTheWire(t) + + assert.NotContains(t, body, "tools", + "a caller that named no tool must not have one announced for it") +} + +func TestACallWithToolsCarriesThem(t *testing.T) { + t.Parallel() + + tools := []llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "rooms_free", + Description: "how many rooms are free", + Parameters: map[string]any{ + "type": "object", + "properties": map[string]any{"floor": map[string]any{"type": "integer"}}, + }, + }, + }} + + body := chatBodyOnTheWire(t, llms.WithTools(tools)) + + carried, ok := body["tools"].([]any) + require.True(t, ok, "the tools the caller named reach the wire") + require.Len(t, carried, 1) +} + +func TestUsageSurvivesAChunkThatDoesNotCarryIt(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + flusher, _ := w.(http.Flusher) + for _, chunk := range []string{ + `{"id":"x","object":"chat.completion.chunk","created":17,"model":"mistral-small-latest",` + + `"choices":[{"index":0,"delta":{"role":"assistant","content":"an answer"},"finish_reason":""}],` + + `"usage":{"prompt_tokens":5,"completion_tokens":3,"total_tokens":8}}`, + `{"id":"x","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}]}`, + } { + _, _ = fmt.Fprintf(w, "data: %s\n\n", chunk) + if flusher != nil { + flusher.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + m, err := New(WithAPIKey("k"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + + sink := func(context.Context, streaming.Chunk) error { return nil } + resp, err := m.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStreamingFunc(sink)) + require.NoError(t, err) + + info := resp.Choices[0].GenerationInfo + usage, ok := info["usage"].(sdk.UsageInfo) + require.True(t, ok, "the usage the vendor sent reaches the caller") + assert.Equal(t, 8, usage.TotalTokens, + "a later chunk without usage must not erase the count the vendor already gave") + assert.Equal(t, 17, info["created"], + "the same holds for the fields that ride along with it") +} diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index b7e8a1611..a48e213fd 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -155,7 +155,6 @@ func mistralChatParamsFromCallOptions(callOpts *llms.CallOptions) (sdk.ChatReque chatOpts.ResponseFormat = sdk.ResponseFormatJsonObject } chatOpts.ToolChoice = mistralToolChoice(callOpts.ToolChoice) - chatOpts.Tools = make([]sdk.Tool, 0) if len(callOpts.Tools) > 0 { for _, tool := range callOpts.Tools { chatOpts.Tools = append(chatOpts.Tools, sdk.Tool{ @@ -258,9 +257,15 @@ func generateStreamingContent(ctx context.Context, m *Model, callOptions *llms.C for chatResChunk := range chatResChan { chunkStr := "" - langchainContentResponse.Choices[0].GenerationInfo["created"] = chatResChunk.Created - langchainContentResponse.Choices[0].GenerationInfo["model"] = chatResChunk.Model - langchainContentResponse.Choices[0].GenerationInfo["usage"] = chatResChunk.Usage + if chatResChunk.Created != 0 { + langchainContentResponse.Choices[0].GenerationInfo["created"] = chatResChunk.Created + } + if chatResChunk.Model != "" { + langchainContentResponse.Choices[0].GenerationInfo["model"] = chatResChunk.Model + } + if chatResChunk.Usage.TotalTokens != 0 { + langchainContentResponse.Choices[0].GenerationInfo["usage"] = chatResChunk.Usage + } if chatResChunk.Error == nil { for _, choice := range chatResChunk.Choices { chunkStr += choice.Delta.Content From 1da84798e075fe407195f99b624acef19f80c53b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 05:49:16 +0300 Subject: [PATCH 389/618] fix(mistral): Call goes through GenerateContent like every other door Six of the seven doors implement Call by delegating to llms.GenerateFromSinglePrompt, which calls the door's own GenerateContent and therefore inherits everything it does. The mistral door built the request itself instead, and two caller intentions died on that path: a streaming callback was never invoked, because Call always took the non-streaming client method, and a truncated answer came back as a whole one with a nil error, because CheckTruncation is only reached through GenerateContent. Delegating removes the second path rather than teaching it the same tricks, so any future change to GenerateContent reaches Call too. The empty-choices refusal keeps its behaviour and its callback; only the message is now the shared one, and the test says so. Refs PAGI-277 Co-Authored-By: Claude Opus 5 --- llms/mistral/call_errors_test.go | 2 +- llms/mistral/call_parity_test.go | 81 ++++++++++++++++++++++++++++++++ llms/mistral/mistralmodel.go | 28 +---------- 3 files changed, 83 insertions(+), 28 deletions(-) create mode 100644 llms/mistral/call_parity_test.go diff --git a/llms/mistral/call_errors_test.go b/llms/mistral/call_errors_test.go index 370c2f08f..b13831ad8 100644 --- a/llms/mistral/call_errors_test.go +++ b/llms/mistral/call_errors_test.go @@ -55,7 +55,7 @@ func TestCallRejectsAnAnswerThatIsNotASingleChoice(t *testing.T) { require.Error(t, err) assert.Empty(t, out) - assert.Contains(t, err.Error(), "length of the Choices slice must be 1") + assert.Contains(t, err.Error(), "length of the Choices slice must be greater than or equal 1") require.Len(t, rec.errs, 1) assert.ErrorIs(t, rec.errs[0], err) } diff --git a/llms/mistral/call_parity_test.go b/llms/mistral/call_parity_test.go new file mode 100644 index 000000000..abf9edd36 --- /dev/null +++ b/llms/mistral/call_parity_test.go @@ -0,0 +1,81 @@ +package mistral + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func mistralStreaming(t *testing.T, chunks ...string) *Model { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + flusher, _ := w.(http.Flusher) + for _, chunk := range chunks { + _, _ = fmt.Fprintf(w, "data: %s\n\n", chunk) + if flusher != nil { + flusher.Flush() + } + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + m, err := New(WithAPIKey("k"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + return m +} + +func TestCallDeliversTheStreamTheCallerAskedFor(t *testing.T) { + t.Parallel() + + m := mistralStreaming(t, + `{"id":"x","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"delta":{"role":"assistant","content":"an "},"finish_reason":""}]}`, + `{"id":"x","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"answer"},"finish_reason":"stop"}]}`) + + var chunks int32 + got, err := m.Call(context.Background(), "hi", + llms.WithStreamingFunc(func(_ context.Context, c streaming.Chunk) error { + if c.Type == streaming.ChunkTypeText { + atomic.AddInt32(&chunks, 1) + } + return nil + })) + + require.NoError(t, err) + assert.Equal(t, "an answer", got) + assert.Positive(t, atomic.LoadInt32(&chunks), + "a caller that passed a streaming callback to Call must be called with the text") +} + +func TestCallRefusesATruncatedAnswerWhenAskedTo(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"half an ans"},"finish_reason":"length"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":16,"total_tokens":17}}`) + })) + t.Cleanup(srv.Close) + + m, err := New(WithAPIKey("k"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + + _, err = m.Call(context.Background(), "hi", llms.WithMaxTokens(16), llms.WithFailOnTruncation()) + + require.Error(t, err, "Call must refuse a truncated answer when the caller forbade truncation") +} diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index a48e213fd..e65b5be83 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -55,33 +55,7 @@ func New(opts ...Option) (*Model, error) { // Call implements the langchaingo llms.Model interface. func (m *Model) Call(ctx context.Context, prompt string, options ...llms.CallOption) (string, error) { - callOptions := resolveDefaultOptions(sdk.DefaultChatRequestParams, m.clientOptions) - setCallOptions(options, callOptions) - mistralChatParams, err := mistralChatParamsFromCallOptions(callOptions) - if err != nil { - return "", err - } - - messages := []sdk.ChatMessage{{ - Role: "user", - Content: prompt, - }} - res, err := m.client.Chat(callOptions.GetModel(), messages, &mistralChatParams) - if err != nil { - if m.CallbacksHandler != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) - } - return "", err - } - if len(res.Choices) != 1 { - err := errors.New("unexpected response from Mistral SDK, length of the Choices slice must be 1") - if m.CallbacksHandler != nil { - m.CallbacksHandler.HandleLLMError(ctx, err) - } - return "", err - } - - return res.Choices[0].Message.Content, nil + return llms.GenerateFromSinglePrompt(ctx, m, prompt, options...) } // GenerateContent implements the langchaingo llms.Model interface. From 79ccb4663f26a1cb145b44dcb5b9da03f745008b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 05:58:47 +0300 Subject: [PATCH 390/618] fix(bedrock): the Converse door carries the caller's top_k MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WithTopK reached the vendor on the legacy path and nowhere on the Converse one: ConverseInput had no field for it, so the option was lost a layer above the client and the word TopK appeared nowhere in the Converse builder. Turning on WithConverseAPI therefore changed the sampling distribution without saying so. The vendor takes the field where the door already puts thinking: through additionalModelRequestFields on Anthropic models, confirmed live against the native protocol, with a garbage key on the same request refused as "Extra inputs are not permitted" so the acceptance means something. top_k now rides there, under the rules the legacy path already applies: not while thinking, and not on models that refuse sampling outright. The families that carry their own shape — Nova and Grok — keep it untouched, and a family that does not document the field gets nothing. Assembling the additional fields once, after the reasoning switch rather than inside it, is what makes room for a field that is not about reasoning at all. Refs PAGI-278 Co-Authored-By: Claude Opus 5 --- llms/bedrock/bedrockllm.go | 3 + .../bedrockclient/bedrockclient_converse.go | 25 +++-- .../bedrockclient/converse_top_k_test.go | 104 ++++++++++++++++++ 3 files changed, 124 insertions(+), 8 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/converse_top_k_test.go diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 7557c5e18..3fc9a2515 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -205,6 +205,9 @@ func (l *LLM) generateContentWithConverseAPI(ctx context.Context, messages []llm if opts.TopP != nil { input.TopP = opts.TopP } + if opts.TopK != nil { + input.TopK = opts.TopK + } if len(opts.StopWords) > 0 { input.StopSequences = opts.StopWords } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 53f1beff4..41c5e3d4e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -68,6 +68,7 @@ type ConverseInput struct { MaxTokens *int Temperature *float64 TopP *float64 + TopK *int StopSequences []string Tools []llms.Tool ToolChoice any @@ -94,6 +95,7 @@ type converseOutputConfig struct { type converseAdditionalModelRequestFields struct { Thinking *converseThinkingPayload `json:"thinking,omitempty" document:"thinking,omitempty"` OutputConfig *converseOutputConfig `json:"output_config,omitempty" document:"output_config,omitempty"` + TopK *int `json:"top_k,omitempty" document:"top_k,omitempty"` } type converseNovaReasoningConfig struct { @@ -171,10 +173,10 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } // Add additional model fields + additionalModelFields := converseAdditionalModelRequestFields{} + var familyFields any switch input.ReasoningConfig.ResolveMode() { case llms.ReasoningOn: - additionalModelFields := converseAdditionalModelRequestFields{} - var familyFields any maxTokens := 0 // Use 0 to let it use default maxTokens if input.MaxTokens != nil { maxTokens = *input.MaxTokens @@ -241,11 +243,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti case reasoning.MechanismGrokEffort: setGrok() } - if familyFields != nil { - converseInput.AdditionalModelRequestFields = document.NewLazyDocument(familyFields) - } if additionalModelFields.Thinking != nil { - converseInput.AdditionalModelRequestFields = document.NewLazyDocument(additionalModelFields) if budget := additionalModelFields.Thinking.BudgetTokens; budget > 0 { ceiling := reasoning.ClaudeMaxTokensForBudget(budget, maxTokens) inferenceConfig.MaxTokens = aws.Int32(numutil.SaturateInt32(ceiling)) @@ -254,8 +252,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti case llms.ReasoningOff: switch reasoning.ResolveOff(input.ModelID, reasoning.ProviderBedrock) { case reasoning.OffDisableClaude: - fields := converseAdditionalModelRequestFields{Thinking: &converseThinkingPayload{Type: "disabled"}} - converseInput.AdditionalModelRequestFields = document.NewLazyDocument(fields) + additionalModelFields.Thinking = &converseThinkingPayload{Type: "disabled"} case reasoning.OffUnsupported: return nil, &reasoning.ErrReasoningOffUnsupported{Model: input.ModelID} } @@ -271,6 +268,18 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti inferenceConfig.TopP = nil } + if input.TopK != nil && isAnthropicModelID(input.ModelID) && + additionalModelFields.Thinking == nil && + !reasoning.ClaudeRejectsSampling(input.ModelID) { + additionalModelFields.TopK = input.TopK + } + switch { + case familyFields != nil: + converseInput.AdditionalModelRequestFields = document.NewLazyDocument(familyFields) + case additionalModelFields != converseAdditionalModelRequestFields{}: + converseInput.AdditionalModelRequestFields = document.NewLazyDocument(additionalModelFields) + } + // Native AWS structured output rides on the top-level OutputConfig.TextFormat, // independent of the provider-specific reasoning fields above. if err := applyConverseStructuredOutput(input, converseInput); err != nil { diff --git a/llms/bedrock/internal/bedrockclient/converse_top_k_test.go b/llms/bedrock/internal/bedrockclient/converse_top_k_test.go new file mode 100644 index 000000000..21d330516 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/converse_top_k_test.go @@ -0,0 +1,104 @@ +package bedrockclient + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func additionalFields(t *testing.T, in *ConverseInput) map[string]any { + t.Helper() + + got, err := NewConverseClient(&MockBedrockRuntimeClient{}).buildConverseInput(in) + require.NoError(t, err) + if got.AdditionalModelRequestFields == nil { + return nil + } + raw, err := got.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(raw, &fields)) + return fields +} + +func humanTurn() []Message { + return []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}} +} + +func TestConverseCarriesTheTopKTheCallerAskedFor(t *testing.T) { + t.Parallel() + + topK := 40 + fields := additionalFields(t, &ConverseInput{ + ModelID: "us.anthropic.claude-haiku-4-5-20251001-v1:0", + Messages: humanTurn(), + TopK: &topK, + }) + + require.NotNil(t, fields, "a caller that named top_k gets additional model fields") + assert.EqualValues(t, 40, fields["top_k"], + "the vendor takes top_k beside thinking, and the legacy door already sends it") +} + +func TestConverseDropsTopKWhileThinking(t *testing.T) { + t.Parallel() + + topK, budget := 40, 2048 + fields := additionalFields(t, &ConverseInput{ + ModelID: "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + Messages: humanTurn(), + TopK: &topK, + MaxTokens: &[]int{8192}[0], + ReasoningConfig: &llms.ReasoningConfig{Tokens: budget}, + }) + + require.NotNil(t, fields) + assert.Contains(t, fields, "thinking", "the request is a thinking one") + assert.NotContains(t, fields, "top_k", + "budget thinking rejects top_k, exactly as the legacy door already handles it") +} + +func TestConverseSendsNoAdditionalFieldsWhenTheCallerNamedNothing(t *testing.T) { + t.Parallel() + + fields := additionalFields(t, &ConverseInput{ + ModelID: "us.anthropic.claude-haiku-4-5-20251001-v1:0", + Messages: humanTurn(), + }) + + assert.Nil(t, fields, "a bare request must not grow a field the caller never named") +} + +func TestConverseKeepsTheNovaShapeWhenTopKIsNamed(t *testing.T) { + t.Parallel() + + topK := 40 + fields := additionalFields(t, &ConverseInput{ + ModelID: "us.amazon.nova-2-lite-v1:0", + Messages: humanTurn(), + TopK: &topK, + ReasoningConfig: &llms.ReasoningConfig{Effort: llms.ReasoningHigh}, + }) + + require.NotNil(t, fields) + assert.Contains(t, fields, "reasoningConfig", "nova keeps its own shape") + assert.NotContains(t, fields, "top_k", "top_k is an anthropic field, not a nova one") +} + +func TestConverseSendsNoTopKToAFamilyThatDoesNotDocumentIt(t *testing.T) { + t.Parallel() + + topK := 40 + fields := additionalFields(t, &ConverseInput{ + ModelID: "meta.llama3-70b-instruct-v1:0", + Messages: humanTurn(), + TopK: &topK, + }) + + assert.Nil(t, fields, + "top_k in additionalModelRequestFields is an anthropic field; inventing it elsewhere is a guess") +} From c3763db27db6818bab0355677c660bb62420353b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 06:50:47 +0300 Subject: [PATCH 391/618] fix(openai): refuse an unservable thinking level instead of inverting it The vendor rejects reasoning_effort on a request that also carries function tools for gpt-5.4, 5.5 and 5.6, and the door has known this since the guard that stopped five calls from returning 400. What the guard did with an explicit request, though, was answer it with its opposite: a caller asking gpt-5.6 to think at high got "none" on the wire, and one asking gpt-5.4 got no field at all, which for an opt-in generation is the same thing. No error, no signal, a different answer. An intention this path cannot carry is a typed error before the network, so that is what it returns now, naming the model, the level, and the fact that the vendor serves the combination on its responses API. A caller who asked for nothing still gets the guard: the explicit "none" that keeps gpt-5.6 from refusing a tool call is untouched, and so is an explicit request not to think. Measured against the vendor on the native route, transparency probe passing on each model: a level with tools answers 400 on all three, an omitted field answers 400 on 5.6 and 200 on 5.4 and 5.5, and "none" answers 200 everywhere. The table already said exactly that. Refs PAGI-279 Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 64 ++++++++++++++++++++++++--- llms/openai/openaillm.go | 8 +--- llms/reasoning/effort_wire.go | 17 ++++++- 3 files changed, 76 insertions(+), 13 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index fa67a95ce..21c3c9e03 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -2,6 +2,7 @@ package openai import ( "context" + "errors" "io" "net/http" "net/http/httptest" @@ -9,6 +10,7 @@ import ( "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) func weatherTool() llms.Tool { @@ -61,16 +63,10 @@ func TestEffortAndToolsOnTheWire(t *testing.T) { want string absent bool }{ - {"5.6 with tools and a level degrades to none", "gpt-5.6-sol", - []llms.CallOption{tools, high}, `"reasoning_effort":"none"`, false}, {"5.6 with tools and no request still sends none", "gpt-5.6-sol", []llms.CallOption{tools}, `"reasoning_effort":"none"`, false}, {"5.6 without tools keeps the level", "gpt-5.6-sol", []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, - {"5.5 with tools omits the field", "gpt-5.5", - []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, - {"5.4-nano with tools omits the field", "gpt-5.4-nano", - []llms.CallOption{tools, high}, `"reasoning_effort"`, true}, {"5.5 without tools keeps the level", "gpt-5.5", []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, {"5.2 with tools keeps the level", "gpt-5.2", @@ -186,3 +182,59 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { }) } } + +func TestAnUnservableEffortWithToolsIsRefusedBeforeTheNetwork(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5.6-sol", "gpt-5.5", "gpt-5.4-nano"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + var reached bool + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + reached = true + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","choices":[]}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTools([]llms.Tool{weatherTool()}), llms.WithReasoning(llms.ReasoningHigh, 0)) + + var want *reasoning.ErrEffortWithTools + if !errors.As(err, &want) { + t.Fatalf("asking %s to think alongside tools must be refused, got err=%v", model, err) + } + if reached { + t.Error("the refusal must come before the request leaves") + } + }) + } +} + +func TestAnExplicitNoThinkingWithToolsIsStillServed(t *testing.T) { + t.Parallel() + + body := bodyForCall(t, "gpt-5.6-sol", + llms.WithTools([]llms.Tool{weatherTool()}), llms.WithReasoningDisabled()) + + if !strings.Contains(body, `"reasoning_effort":"none"`) { + t.Errorf("a caller who asked not to think keeps being served\nbody: %s", body) + } +} + +func TestAskingForTheNoneLevelWithToolsIsNotARefusal(t *testing.T) { + t.Parallel() + + body := bodyForCall(t, "gpt-5.6-sol", + llms.WithTools([]llms.Tool{weatherTool()}), llms.WithReasoning(llms.ReasoningNone, 0)) + + if !strings.Contains(body, `"reasoning_effort":"none"`) { + t.Errorf("a caller who named the none level asked for what the vendor serves\nbody: %s", body) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 1ec7d5697..f3cfe41fa 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -380,12 +380,8 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone - switch toolsRule { //nolint:exhaustive // EffortToolsFree leaves the request alone - case reasoning.EffortToolsDisable: - o.writeDisableEffort(req) - return reasoning.OpenAIDisableEffort, nil - case reasoning.EffortToolsOmit: - sendsEffort = false + if toolsRule != reasoning.EffortToolsFree { + return "", &reasoning.ErrEffortWithTools{Model: model, Effort: string(reasoningEffort)} } if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && reasoning.DashScopeTakesThinkingBudget(model) { diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 3c4de007a..d99594fd0 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -1,6 +1,9 @@ package reasoning -import "strings" +import ( + "fmt" + "strings" +) // RejectsPenalties reports whether frequency_penalty and presence_penalty // must stay off the wire. @@ -71,6 +74,18 @@ const ( EffortToolsDisable ) +type ErrEffortWithTools struct { + Model string + Effort string +} + +func (e *ErrEffortWithTools) Error() string { + return fmt.Sprintf( + "model %q rejects reasoning effort %q on a request carrying function tools; "+ + "the vendor serves this combination on the responses API only", + e.Model, e.Effort) +} + // EffortWithTools reports the rule for a model. An unlisted generation stays free. func EffortWithTools(model string) EffortToolsRule { for _, form := range modelSpellings(model) { From 72f50ea1c8d21e20735383113287fbf74b25fa76 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 11:27:31 +0300 Subject: [PATCH 392/618] fix(bedrock): refuse an off the legacy door cannot serve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Asking a model that always reasons to stop went nowhere on the legacy path: five of the seven providers never read the reasoning options at all, so deepseek.r1 took the request, reasoned, and billed for it without a word. The Converse door refuses the same model with a typed error, so the two doors disagreed about the same call, and the silent one is the default. The refusal now sits where the structured-output refusal already sits, in the one place that knows both the provider and the caller's full options, which is also the only place a provider added later cannot forget it. That makes the anthropic payload builder's own copy unreachable, so it is gone, and the test that pinned it now states the behaviour at the door where it is observable. Only models whose disable wire does not exist are turned away. Where omitting the field is already off — meta, cohere, ai21, amazon, nova — the call goes through untouched, and a call that said nothing about thinking is never refused at all. Refs PAGI-280 Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient.go | 4 + .../bedrockclient/provider_anthropic.go | 5 +- .../provider_anthropic_reasoning_test.go | 10 +- .../bedrockclient/reasoning_off_test.go | 106 ++++++++++++++++++ 4 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/reasoning_off_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient.go b/llms/bedrock/internal/bedrockclient/bedrockclient.go index 45cafd9b9..9c1a7d9f6 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient.go @@ -114,6 +114,10 @@ func (c *Client) CreateCompletion(ctx context.Context, Reason: "legacy InvokeModel structured output is only implemented for Anthropic models; use the Converse API for other providers", } } + if options.Reasoning.ResolveMode() == llms.ReasoningOff && + reasoning.ResolveOff(modelID, reasoning.ProviderBedrock) == reasoning.OffUnsupported { + return nil, &reasoning.ErrReasoningOffUnsupported{Model: modelID} + } switch provider { case "ai21": return createAi21Completion(ctx, c.client, modelID, messages, options) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 23b89b35c..4599a8565 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -827,11 +827,8 @@ func applyAnthropicReasoning( case llms.ReasoningDefault: return nil case llms.ReasoningOff: - switch reasoning.ResolveOff(modelID, reasoning.ProviderBedrock) { - case reasoning.OffDisableClaude: + if reasoning.ResolveOff(modelID, reasoning.ProviderBedrock) == reasoning.OffDisableClaude { input.Thinking = &anthropicThinkingPayload{Type: "disabled"} - case reasoning.OffUnsupported: - return &reasoning.ErrReasoningOffUnsupported{Model: modelID} } return nil } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index 0d7c498fb..506913ea6 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -7,7 +7,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/reasoning" ) func marshalAnthropicInput(t *testing.T, input anthropicTextGenerationInput) map[string]any { @@ -237,18 +236,17 @@ func TestApplyAnthropicReasoning_OffDefaultOffOmits(t *testing.T) { assert.Nil(t, input.Thinking, "off on a default-off model omits thinking") } -func TestApplyAnthropicReasoning_OffAlwaysOnErrors(t *testing.T) { +func TestApplyAnthropicReasoning_OffAlwaysOnSendsNoThinking(t *testing.T) { t.Parallel() - // Fable 5 cannot disable thinking; an explicit off is a typed error, not a silent send. input := anthropicTextGenerationInput{MaxTokens: 2048} err := applyAnthropicReasoning(&input, &llms.ReasoningConfig{Mode: llms.ReasoningOff}, "us.anthropic.claude-fable-5-v1:0", 2048) - var offErr *reasoning.ErrReasoningOffUnsupported - require.ErrorAs(t, err, &offErr) - assert.Nil(t, input.Thinking) + require.NoError(t, err) + assert.Nil(t, input.Thinking, + "the refusal belongs to the door, which turns the call away before this payload is built") } func TestApplyAnthropicReasoning_DropsTopPWhenBothSamplingParamsSet(t *testing.T) { diff --git a/llms/bedrock/internal/bedrockclient/reasoning_off_test.go b/llms/bedrock/internal/bedrockclient/reasoning_off_test.go new file mode 100644 index 000000000..78d3a8865 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/reasoning_off_test.go @@ -0,0 +1,106 @@ +package bedrockclient + +import ( + "context" + "net/http" + "sync/atomic" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +type countingTransport struct{ seen *int32 } + +func (c *countingTransport) Do(req *http.Request) (*http.Response, error) { + atomic.AddInt32(c.seen, 1) + return &http.Response{ + StatusCode: http.StatusOK, + Body: http.NoBody, + Header: http.Header{}, + Request: req, + }, nil +} + +func legacyClientCounting(seen *int32) *Client { + return &Client{client: bedrockruntime.New(bedrockruntime.Options{ + Region: "us-east-1", + Credentials: credentials.NewStaticCredentialsProvider("k", "s", ""), + HTTPClient: &countingTransport{seen: seen}, + RetryMaxAttempts: 1, + })} +} + +func offCall(t *testing.T, model string) (int32, error) { + t.Helper() + + var seen int32 + _, err := legacyClientCounting(&seen).CreateCompletion(context.Background(), model, + []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + llms.CallOptions{Model: aws.String(model), Reasoning: &llms.ReasoningConfig{Mode: llms.ReasoningOff}}, + ) + return atomic.LoadInt32(&seen), err +} + +func TestTheLegacyDoorRefusesAnUndisableableThinking(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "us.deepseek.r1-v1:0", + "us.anthropic.claude-sonnet-5-v1:0", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + seen, err := offCall(t, model) + + var offErr *reasoning.ErrReasoningOffUnsupported + require.ErrorAs(t, err, &offErr, + "the Converse door refuses this model; the default door must refuse it too") + assert.Zero(t, seen, "the refusal must come before the request leaves") + }) + } +} + +func TestTheLegacyDoorServesAnOffThatOmittingAlreadyMeans(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "meta.llama3-70b-instruct-v1:0", + "us.amazon.nova-2-lite-v1:0", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + _, err := offCall(t, model) + + var offErr *reasoning.ErrReasoningOffUnsupported + if err != nil { + require.NotErrorAs(t, err, &offErr, + "omitting the field already means off here, so the caller loses nothing") + } + }) + } +} + +func TestTheLegacyDoorLeavesACallThatSaidNothingAboutThinkingAlone(t *testing.T) { + t.Parallel() + + model := "us.anthropic.claude-sonnet-5-v1:0" + var seen int32 + _, err := legacyClientCounting(&seen).CreateCompletion(context.Background(), model, + []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + llms.CallOptions{Model: aws.String(model)}, + ) + + var offErr *reasoning.ErrReasoningOffUnsupported + require.NotErrorAs(t, err, &offErr, + "a caller who said nothing about thinking asked for nothing that could be refused") + assert.Positive(t, atomic.LoadInt32(&seen), "the call must reach the vendor") +} From f40c2a9c37776f0386ba0c8711eeb1fbd8d0530b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 18:37:01 +0300 Subject: [PATCH 393/618] fix(huggingface): address the router and keep the caller's URL The door's default base named api-inference.huggingface.co, a host that publishes no A, AAAA or CNAME record any more, so a default configuration failed to resolve on every call. Naming an inference provider additionally overwrote a URL the caller had set explicitly, so a request could not be pointed anywhere else. The recording made against the retired host is dropped; the base and the provider choice are pinned by wire tests instead. PAGI-282 Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm.go | 5 -- llms/huggingface/huggingfacellm_option.go | 8 +- llms/huggingface/huggingfacellm_test.go | 52 ------------- ...TestHuggingFaceLLMStandardInference.httprr | 28 ------- llms/huggingface/wire_test.go | 78 +++++++++++++++++++ 5 files changed, 81 insertions(+), 90 deletions(-) delete mode 100644 llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr create mode 100644 llms/huggingface/wire_test.go diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 235298b0a..090a0a111 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -101,11 +101,6 @@ func New(opts ...Option) (*LLM, error) { return nil, ErrMissingToken } - // If a provider is specified, use the router URL - if options.provider != "" { - options.url = routerURL - } - var clientOpts []huggingfaceclient.Option if options.httpClient != nil { clientOpts = append(clientOpts, huggingfaceclient.WithHTTPClient(options.httpClient)) diff --git a/llms/huggingface/huggingfacellm_option.go b/llms/huggingface/huggingfacellm_option.go index ff4733ef7..a27e48ca4 100644 --- a/llms/huggingface/huggingfacellm_option.go +++ b/llms/huggingface/huggingfacellm_option.go @@ -13,8 +13,7 @@ const ( xdgCacheHomeEnvVar = "XDG_CACHE_HOME" // XDG cache directory defaultTokenPath = "token" // Default token filename defaultModel = "meta-llama/Llama-3.1-8B-Instruct" - defaultURL = "https://api-inference.huggingface.co" - routerURL = "https://router.huggingface.co" + defaultURL = "https://router.huggingface.co" ) type options struct { @@ -58,9 +57,8 @@ func WithHTTPClient(httpClient *http.Client) Option { } } -// WithInferenceProvider passes the inference provider to use with HuggingFace's router. -// When set, the client will use the router URL (https://router.huggingface.co/{provider}/v1/...) -// instead of the default inference API. Common providers include "hyperbolic", "nebius", etc. +// WithInferenceProvider names the inference provider that serves the request behind +// HuggingFace's router. Common providers include "hyperbolic", "nebius", etc. func WithInferenceProvider(provider string) Option { return func(opts *options) { opts.provider = provider diff --git a/llms/huggingface/huggingfacellm_test.go b/llms/huggingface/huggingfacellm_test.go index 9564ae2a4..92b334e31 100644 --- a/llms/huggingface/huggingfacellm_test.go +++ b/llms/huggingface/huggingfacellm_test.go @@ -63,58 +63,6 @@ func TestHuggingFaceLLMWithProvider(t *testing.T) { } } -func TestHuggingFaceLLMStandardInference(t *testing.T) { - ctx := t.Context() - - // Skip if no credentials and no recording - HuggingFace accepts either token - if os.Getenv("HF_TOKEN") == "" && os.Getenv("HUGGINGFACEHUB_API_TOKEN") == "" { - httprr.SkipIfNoCredentialsAndRecordingMissing(t, "HF_TOKEN") - } - - rr := httprr.OpenForTest(t, nil) - defer rr.Close() - - apiKey := "test-api-key" - if rr.Recording() { - // Try HF_TOKEN first, then fall back to HUGGINGFACEHUB_API_TOKEN - if key := os.Getenv("HF_TOKEN"); key != "" { - apiKey = key - } else if key := os.Getenv("HUGGINGFACEHUB_API_TOKEN"); key != "" { - apiKey = key - } - } - - // Create standard LLM without provider - opts := []Option{ - WithModel("HuggingFaceH4/zephyr-7b-beta"), - WithHTTPClient(rr.Client()), - WithToken(apiKey), - } - - llm, err := New(opts...) - if err != nil { - t.Fatal(err) - } - - // Test the LLM call - result, err := llm.Call(ctx, "Hello, say hi back", - llms.WithTemperature(0.5), - llms.WithMaxLength(20), - ) - - // Skip test if model is not available - if err != nil && strings.Contains(err.Error(), "404") { - t.Skip("Model not available on HuggingFace API, skipping test") - } - - if err != nil { - t.Fatal(err) - } - if result == "" { - t.Fatal("expected non-empty result") - } -} - func TestHuggingFaceLLMGenerateContent(t *testing.T) { t.Skip("temporarily skip") diff --git a/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr b/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr deleted file mode 100644 index 58f5aea1b..000000000 --- a/llms/huggingface/testdata/TestHuggingFaceLLMStandardInference.httprr +++ /dev/null @@ -1,28 +0,0 @@ -httprr trace v1 -340 873 -POST https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta HTTP/1.1 -Host: api-inference.huggingface.co -User-Agent: langchaingo-httprr -Content-Length: 95 -Authorization: Bearer test-api-key -Content-Type: application/json - -{"inputs":"Hello, say hi back","parameters":{"temperature":0.5,"max_length":20,"details":true}}HTTP/2.0 404 Not Found -Content-Length: 9 -Access-Control-Allow-Credentials: true -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash -Content-Type: text/plain; charset=utf-8 -Cross-Origin-Opener-Policy: same-origin -Date: Mon, 18 Aug 2025 12:37:01 GMT -Referrer-Policy: strict-origin-when-cross-origin -Vary: origin, access-control-request-method, access-control-request-headers -Via: 1.1 09d324ff4ef3ad9ee0e07d2d9be971c8.cloudfront.net (CloudFront) -X-Amz-Cf-Id: KpCHCJmPy4y8dPFkhSsUPFL4JxYibD8JQ8hIvnAd254Wfs2GMr1tig== -X-Amz-Cf-Pop: CDG55-P3 -X-Cache: Error from cloudfront -X-Inference-Provider: hf-inference -X-Powered-By: huggingface-moon -X-Request-Id: Root=1-68a31e6d-2b6c0a240c504c04298015bb - -Not Found \ No newline at end of file diff --git a/llms/huggingface/wire_test.go b/llms/huggingface/wire_test.go new file mode 100644 index 000000000..26bafecbd --- /dev/null +++ b/llms/huggingface/wire_test.go @@ -0,0 +1,78 @@ +package huggingface + +import ( + "context" + "io" + "net/http" + "net/url" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type capturingTransport struct { + body []byte + requests []*url.URL + reply string +} + +func (c *capturingTransport) RoundTrip(r *http.Request) (*http.Response, error) { + c.requests = append(c.requests, r.URL) + if r.Body != nil { + c.body, _ = io.ReadAll(r.Body) + } + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(strings.NewReader(c.reply)), + Request: r, + }, nil +} + +func callThroughTransport(t *testing.T, tr *capturingTransport, opts ...Option) { + t.Helper() + + tr.reply = `[{"generated_text":"hi"}]` + llm, err := New(append([]Option{ + WithToken("t"), + WithModel("gpt2"), + WithHTTPClient(&http.Client{Transport: tr}), + }, opts...)...) + require.NoError(t, err) + + _, err = llm.Call(context.Background(), "hi") + require.NoError(t, err) +} + +func TestWithoutAnExplicitURLTheDoorAddressesTheRouter(t *testing.T) { + t.Parallel() + + tr := &capturingTransport{} + callThroughTransport(t, tr) + + require.Len(t, tr.requests, 1) + assert.Equal(t, "router.huggingface.co", tr.requests[0].Host) +} + +func TestAnExplicitURLSurvivesTheChoiceOfProvider(t *testing.T) { + t.Parallel() + + tr := &capturingTransport{} + tr.reply = `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}` + llm, err := New( + WithToken("t"), + WithModel("gpt2"), + WithURL("https://proxy.example.test"), + WithInferenceProvider("nebius"), + WithHTTPClient(&http.Client{Transport: tr}), + ) + require.NoError(t, err) + + _, err = llm.Call(context.Background(), "hi") + require.NoError(t, err) + + require.Len(t, tr.requests, 1) + assert.Equal(t, "proxy.example.test", tr.requests[0].Host) +} From 1aeb83b4450e9fc0a5a0b21bad41e2bbf04bef1d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 18:37:32 +0300 Subject: [PATCH 394/618] fix(huggingface): route embeddings through the provider and the task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The feature-extraction request went to {base}/models/{model}. On the router that path answers 404 before authentication, while a path that opens with a provider segment answers 401 — the segment is part of the routing, not decoration. The task the caller chose was accepted and never read, so the same URL was built for every task. The request now carries the provider segment, defaulting to hf-inference, and the chosen task as the final segment. PAGI-282 Co-Authored-By: Claude Opus 5 --- llms/huggingface/embeddings_wire_test.go | 50 +++++++++++++++++++ .../internal/huggingfaceclient/embeddings.go | 14 ++++-- 2 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 llms/huggingface/embeddings_wire_test.go diff --git a/llms/huggingface/embeddings_wire_test.go b/llms/huggingface/embeddings_wire_test.go new file mode 100644 index 000000000..8cd8ba6ce --- /dev/null +++ b/llms/huggingface/embeddings_wire_test.go @@ -0,0 +1,50 @@ +package huggingface + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func embeddingsPathOf(t *testing.T, opts []Option, model, task string) string { + t.Helper() + + var path string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + path = r.URL.Path + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `[[0.1,0.2]]`) + })) + t.Cleanup(srv.Close) + + llm, err := New(append([]Option{WithToken("t"), WithURL(srv.URL)}, opts...)...) + require.NoError(t, err) + + _, err = llm.CreateEmbedding(context.Background(), []string{"hi"}, model, task) + require.NoError(t, err) + + return path +} + +func TestTheEmbeddingsPathCarriesTheProviderAndTheTask(t *testing.T) { + t.Parallel() + + path := embeddingsPathOf(t, nil, "BAAI/bge-small-en-v1.5", "feature-extraction") + + assert.Equal(t, "/hf-inference/models/BAAI/bge-small-en-v1.5/pipeline/feature-extraction", path) +} + +func TestTheNamedInferenceProviderReplacesTheDefaultSegment(t *testing.T) { + t.Parallel() + + path := embeddingsPathOf(t, []Option{WithInferenceProvider("scaleway")}, + "Qwen/Qwen3-Embedding-8B", "feature-extraction") + + assert.Equal(t, "/scaleway/models/Qwen/Qwen3-Embedding-8B/pipeline/feature-extraction", path) +} diff --git a/llms/huggingface/internal/huggingfaceclient/embeddings.go b/llms/huggingface/internal/huggingfaceclient/embeddings.go index 8afd26486..395ac9505 100644 --- a/llms/huggingface/internal/huggingfaceclient/embeddings.go +++ b/llms/huggingface/internal/huggingfaceclient/embeddings.go @@ -14,8 +14,17 @@ type embeddingPayload struct { Inputs []string `json:"inputs"` } +const defaultEmbeddingProvider = "hf-inference" + +func (c *Client) embeddingProvider() string { + if c.provider == "" { + return defaultEmbeddingProvider + } + return c.provider +} + // nolint:lll -func (c *Client) createEmbedding(ctx context.Context, model string, task string, payload *embeddingPayload) ([][]float32, error) { +func (c *Client) createEmbedding(ctx context.Context, model, task string, payload *embeddingPayload) ([][]float32, error) { body := map[string]any{ "inputs": payload.Inputs, } @@ -27,8 +36,7 @@ func (c *Client) createEmbedding(ctx context.Context, model string, task string, if err != nil { return nil, fmt.Errorf("marshal payload: %w", err) } - // Use /models/ endpoint for embeddings as /pipeline/ is deprecated - url := fmt.Sprintf("%s/models/%s", c.url, model) + url := fmt.Sprintf("%s/%s/models/%s/pipeline/%s", c.url, c.embeddingProvider(), model, task) req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(payloadBytes)) if err != nil { return nil, fmt.Errorf("create request: %w", err) From ae150eccb3018ae6a6280ed8cda81a27b1603557 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 18:38:57 +0300 Subject: [PATCH 395/618] fix(huggingface): send only what the feature-extraction task documents Every embedding request carried use_gpu and wait_for_model. Neither appears in the documented payload of the feature-extraction task, whose request table lists inputs, normalize, prompt_name, truncate and truncation_direction; both belonged to the options object of the serverless API that the router replaced. The options plumbing had no other caller and is removed with them. PAGI-282 Co-Authored-By: Claude Opus 5 --- llms/huggingface/embeddings_wire_test.go | 28 +++++++++++++++---- llms/huggingface/huggingfacellm.go | 4 --- .../internal/huggingfaceclient/embeddings.go | 12 ++------ .../huggingfaceclient/huggingfaceclient.go | 6 ++-- .../huggingfaceclient_test.go | 3 -- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/llms/huggingface/embeddings_wire_test.go b/llms/huggingface/embeddings_wire_test.go index 8cd8ba6ce..ffb90a5a7 100644 --- a/llms/huggingface/embeddings_wire_test.go +++ b/llms/huggingface/embeddings_wire_test.go @@ -2,22 +2,28 @@ package huggingface import ( "context" + "encoding/json" "io" + "maps" "net/http" "net/http/httptest" + "slices" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -func embeddingsPathOf(t *testing.T, opts []Option, model, task string) string { +func embeddingsRequestOf(t *testing.T, opts []Option, model, task string) (string, []byte) { t.Helper() - var path string + var ( + path string + body []byte + ) srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { path = r.URL.Path - _, _ = io.Copy(io.Discard, r.Body) + body, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") _, _ = io.WriteString(w, `[[0.1,0.2]]`) })) @@ -29,13 +35,13 @@ func embeddingsPathOf(t *testing.T, opts []Option, model, task string) string { _, err = llm.CreateEmbedding(context.Background(), []string{"hi"}, model, task) require.NoError(t, err) - return path + return path, body } func TestTheEmbeddingsPathCarriesTheProviderAndTheTask(t *testing.T) { t.Parallel() - path := embeddingsPathOf(t, nil, "BAAI/bge-small-en-v1.5", "feature-extraction") + path, _ := embeddingsRequestOf(t, nil, "BAAI/bge-small-en-v1.5", "feature-extraction") assert.Equal(t, "/hf-inference/models/BAAI/bge-small-en-v1.5/pipeline/feature-extraction", path) } @@ -43,8 +49,18 @@ func TestTheEmbeddingsPathCarriesTheProviderAndTheTask(t *testing.T) { func TestTheNamedInferenceProviderReplacesTheDefaultSegment(t *testing.T) { t.Parallel() - path := embeddingsPathOf(t, []Option{WithInferenceProvider("scaleway")}, + path, _ := embeddingsRequestOf(t, []Option{WithInferenceProvider("scaleway")}, "Qwen/Qwen3-Embedding-8B", "feature-extraction") assert.Equal(t, "/scaleway/models/Qwen/Qwen3-Embedding-8B/pipeline/feature-extraction", path) } + +func TestTheEmbeddingsBodyCarriesNothingButTheInputs(t *testing.T) { + t.Parallel() + + _, body := embeddingsRequestOf(t, nil, "BAAI/bge-small-en-v1.5", "feature-extraction") + + var sent map[string]any + require.NoError(t, json.Unmarshal(body, &sent)) + assert.Equal(t, []string{"inputs"}, slices.Sorted(maps.Keys(sent))) +} diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 090a0a111..ddcd3e9a3 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -181,10 +181,6 @@ func (o *LLM) CreateEmbedding( ) ([][]float32, error) { embeddings, err := o.client.CreateEmbedding(ctx, model, task, &huggingfaceclient.EmbeddingRequest{ Inputs: inputTexts, - Options: map[string]any{ - "use_gpu": false, - "wait_for_model": true, - }, }) if err != nil { return nil, err diff --git a/llms/huggingface/internal/huggingfaceclient/embeddings.go b/llms/huggingface/internal/huggingfaceclient/embeddings.go index 395ac9505..018692a98 100644 --- a/llms/huggingface/internal/huggingfaceclient/embeddings.go +++ b/llms/huggingface/internal/huggingfaceclient/embeddings.go @@ -10,8 +10,7 @@ import ( ) type embeddingPayload struct { - Options map[string]any - Inputs []string `json:"inputs"` + Inputs []string `json:"inputs"` } const defaultEmbeddingProvider = "hf-inference" @@ -25,14 +24,7 @@ func (c *Client) embeddingProvider() string { // nolint:lll func (c *Client) createEmbedding(ctx context.Context, model, task string, payload *embeddingPayload) ([][]float32, error) { - body := map[string]any{ - "inputs": payload.Inputs, - } - for key, value := range payload.Options { - body[key] = value - } - - payloadBytes, err := json.Marshal(body) + payloadBytes, err := json.Marshal(payload) if err != nil { return nil, fmt.Errorf("marshal payload: %w", err) } diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go index d20cd432d..3757fb439 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go @@ -114,8 +114,7 @@ func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (* // EmbeddingRequest is a request to create an embedding. type EmbeddingRequest struct { - Options map[string]any `json:"options"` - Inputs []string `json:"inputs"` + Inputs []string `json:"inputs"` } // CreateEmbedding creates embeddings. @@ -126,8 +125,7 @@ func (c *Client) CreateEmbedding( r *EmbeddingRequest, ) ([][]float32, error) { resp, err := c.createEmbedding(ctx, model, task, &embeddingPayload{ - Inputs: r.Inputs, - Options: r.Options, + Inputs: r.Inputs, }) if err != nil { return nil, err diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go index a884398b2..2ae572846 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go @@ -134,9 +134,6 @@ func TestClient_CreateEmbedding(t *testing.T) { req := &EmbeddingRequest{ Inputs: []string{"Hello world", "How are you?"}, - Options: map[string]any{ - "wait_for_model": true, - }, } embeddings, err := client.CreateEmbedding(ctx, "BAAI/bge-small-en-v1.5", "feature-extraction", req) From a17d0251c612bd5c35a8adffbf181b3afa17d71c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 18:55:01 +0300 Subject: [PATCH 396/618] fix(huggingface): speak the documented chat-completions contract The chat surface built {base}/models/{model} with a {inputs, parameters} body. On the router that path answers 404 before authentication, and the text-generation task whose contract that body implements is documented as served by no provider. Hugging Face documents chat on router.huggingface.co/v1/chat/completions, with a per-provider prefix when one is named. The request now goes there and carries the model in the body. top_k, min_length and repetition_penalty leave the wire: the documented chat-completion payload has no field for them, so no endpoint would have accepted them. seed does have a field and is sent. The two recordings made against the retired host are dropped; the endpoint and the body are pinned by wire tests instead. PAGI-282 Co-Authored-By: Claude Opus 5 --- llms/huggingface/call_model_test.go | 46 +++-- llms/huggingface/huggingfacellm.go | 16 +- .../huggingfaceclient/chat_wire_test.go | 65 +++++++ .../huggingfaceclient/huggingfaceclient.go | 66 +++---- .../huggingfaceclient_test.go | 95 +--------- .../internal/huggingfaceclient/inference.go | 169 +++--------------- .../testdata/TestClient_RunInference.httprr | 28 --- .../TestClient_RunInferenceText2Text.httprr | 28 --- llms/huggingface/truncation_test.go | 22 ++- llms/huggingface/wire_test.go | 2 +- 10 files changed, 156 insertions(+), 381 deletions(-) create mode 100644 llms/huggingface/internal/huggingfaceclient/chat_wire_test.go delete mode 100644 llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr delete mode 100644 llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr diff --git a/llms/huggingface/call_model_test.go b/llms/huggingface/call_model_test.go index 66ca8c3ed..1cf2f12e1 100644 --- a/llms/huggingface/call_model_test.go +++ b/llms/huggingface/call_model_test.go @@ -2,6 +2,7 @@ package huggingface import ( "context" + "encoding/json" "io" "net/http" "net/http/httptest" @@ -13,15 +14,14 @@ import ( "github.com/vxcontrol/langchaingo/llms" ) -func TestTheModelOfTheCallReachesTheRequest(t *testing.T) { - t.Parallel() +func modelOnTheWire(t *testing.T, call ...llms.CallOption) string { + t.Helper() - var path string + var raw []byte srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - path = r.URL.Path - _, _ = io.Copy(io.Discard, r.Body) + raw, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") - _, _ = io.WriteString(w, `[{"generated_text":"hi"}]`) + _, _ = io.WriteString(w, `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}`) })) t.Cleanup(srv.Close) @@ -29,32 +29,28 @@ func TestTheModelOfTheCallReachesTheRequest(t *testing.T) { require.NoError(t, err) _, err = llm.GenerateContent(context.Background(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, - llms.WithModel("meta-llama/Llama-3.1-8B-Instruct")) + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) require.NoError(t, err) - assert.Contains(t, path, "meta-llama/Llama-3.1-8B-Instruct", - "the model named by the call must address the request, not the one from the constructor") + var body struct { + Model string `json:"model"` + } + require.NoError(t, json.Unmarshal(raw, &body)) + + return body.Model } -func TestWithoutAModelOnTheCallTheConstructorsModelIsUsed(t *testing.T) { +func TestTheModelOfTheCallReachesTheRequest(t *testing.T) { t.Parallel() - var path string - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - path = r.URL.Path - _, _ = io.Copy(io.Discard, r.Body) - w.Header().Set("Content-Type", "application/json") - _, _ = io.WriteString(w, `[{"generated_text":"hi"}]`) - })) - t.Cleanup(srv.Close) + model := modelOnTheWire(t, llms.WithModel("meta-llama/Llama-3.1-8B-Instruct")) - llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("gpt2")) - require.NoError(t, err) + assert.Equal(t, "meta-llama/Llama-3.1-8B-Instruct", model, + "the model named by the call must address the request, not the one from the constructor") +} - _, err = llm.GenerateContent(context.Background(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) - require.NoError(t, err) +func TestWithoutAModelOnTheCallTheConstructorsModelIsUsed(t *testing.T) { + t.Parallel() - assert.Contains(t, path, "gpt2") + assert.Equal(t, "gpt2", modelOnTheWire(t)) } diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index ddcd3e9a3..a4a50e702 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -56,16 +56,12 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten msg0 := messages[0] part := msg0.Parts[0] result, err := o.client.RunInference(ctx, &huggingfaceclient.InferenceRequest{ - Model: opts.GetModel(), - Prompt: part.(llms.TextContent).Text, - Task: huggingfaceclient.InferenceTaskTextGeneration, - Temperature: opts.GetTemperature(), - TopP: opts.GetTopP(), - TopK: opts.GetTopK(), - MinLength: opts.GetMinLength(), - MaxLength: opts.GetMaxLength(), - RepetitionPenalty: opts.GetRepetitionPenalty(), - Seed: opts.GetSeed(), + Model: opts.GetModel(), + Prompt: part.(llms.TextContent).Text, + Temperature: opts.GetTemperature(), + TopP: opts.GetTopP(), + MaxLength: opts.GetMaxLength(), + Seed: opts.GetSeed(), }) if err != nil { return nil, err diff --git a/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go b/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go new file mode 100644 index 000000000..ce190223b --- /dev/null +++ b/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go @@ -0,0 +1,65 @@ +package huggingfaceclient + +import ( + "encoding/json" + "io" + "maps" + "net/http" + "net/http/httptest" + "slices" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func chatRequestOf(t *testing.T, opts []Option) (string, map[string]any) { + t.Helper() + + var ( + path string + raw []byte + ) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + path = r.URL.Path + raw, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}`) + })) + t.Cleanup(srv.Close) + + client, err := New("t", "gpt2", srv.URL, opts...) + require.NoError(t, err) + + resp, err := client.RunInference(t.Context(), &InferenceRequest{ + Model: "gpt2", + Prompt: "hi", + Temperature: 0.5, + MaxLength: 20, + }) + require.NoError(t, err) + assert.Equal(t, "stop", resp.StopReason) + + var body map[string]any + require.NoError(t, json.Unmarshal(raw, &body)) + + return path, body +} + +func TestTheChatRequestAddressesTheDocumentedEndpoint(t *testing.T) { + t.Parallel() + + path, body := chatRequestOf(t, nil) + + assert.Equal(t, "/v1/chat/completions", path) + assert.Equal(t, []string{"max_tokens", "messages", "model", "stream", "temperature"}, + slices.Sorted(maps.Keys(body))) +} + +func TestANamedProviderPrefixesTheChatEndpoint(t *testing.T) { + t.Parallel() + + path, _ := chatRequestOf(t, []Option{WithProvider("nebius")}) + + assert.Equal(t, "/nebius/v1/chat/completions", path) +} diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go index 3757fb439..5ff8438a9 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go @@ -59,57 +59,43 @@ func WithProvider(provider string) Option { } type InferenceRequest struct { - Model string `json:"repositoryId"` - Prompt string `json:"prompt"` - Task InferenceTask `json:"task"` - Temperature float64 `json:"temperature"` - TopP float64 `json:"top_p,omitempty"` - TopK int `json:"top_k,omitempty"` - MinLength int `json:"min_length,omitempty"` - MaxLength int `json:"max_length,omitempty"` - RepetitionPenalty float64 `json:"repetition_penalty,omitempty"` - Seed int `json:"seed,omitempty"` + Model string + Prompt string + Temperature float64 + TopP float64 + MaxLength int + Seed int } type InferenceResponse struct { - Text string `json:"generated_text"` + Text string // StopReason is the vendor's finish reason, empty when the door did not report one. - StopReason string `json:"finish_reason,omitempty"` + StopReason string } func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (*InferenceResponse, error) { - payload := &inferencePayload{ - Model: request.Model, - Inputs: request.Prompt, - Parameters: parameters{ - Temperature: request.Temperature, - TopP: request.TopP, - TopK: request.TopK, - MinLength: request.MinLength, - MaxLength: request.MaxLength, - RepetitionPenalty: request.RepetitionPenalty, - Seed: request.Seed, - Details: true, - }, + payload := &chatCompletionsPayload{ + Model: request.Model, + Messages: []chatMessage{{Role: "user", Content: request.Prompt}}, } - resp, err := c.runInference(ctx, payload) - if err != nil { - return nil, fmt.Errorf("failed to run inference: %w", err) + if request.Temperature > 0 { + payload.Temperature = &request.Temperature } - if len(resp) == 0 { - return nil, ErrEmptyResponse + if request.TopP > 0 { + payload.TopP = &request.TopP + } + if request.MaxLength > 0 { + payload.MaxTokens = &request.MaxLength } - text := resp[0].Text - var stopReason string - if resp[0].Details != nil { - stopReason = resp[0].Details.FinishReason + if request.Seed > 0 { + payload.Seed = &request.Seed } - // TODO: Add response cleaning based on Model. - // e.g., for gpt2, text = text[len(request.Prompt)+1:] - return &InferenceResponse{ - Text: text, - StopReason: stopReason, - }, nil + + resp, err := c.runChatCompletions(ctx, payload) + if err != nil { + return nil, fmt.Errorf("failed to run inference: %w", err) + } + return resp, nil } // EmbeddingRequest is a request to create an embedding. diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go index 2ae572846..0767e799f 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go @@ -12,99 +12,7 @@ import ( "github.com/stretchr/testify/require" ) -const testURL = "https://api-inference.huggingface.co" - -func TestClient_RunInference(t *testing.T) { - ctx := t.Context() - - // Check both HF_TOKEN and HUGGINGFACEHUB_API_TOKEN - if os.Getenv("HF_TOKEN") == "" && os.Getenv("HUGGINGFACEHUB_API_TOKEN") == "" { - httprr.SkipIfNoCredentialsAndRecordingMissing(t, "HF_TOKEN") - } - - rr := httprr.OpenForTest(t, httputil.DefaultTransport) - defer rr.Close() - - apiKey := "test-api-key" - if rr.Recording() { - // Try HF_TOKEN first, then fall back to HUGGINGFACEHUB_API_TOKEN - if key := os.Getenv("HF_TOKEN"); key != "" { - apiKey = key - } else if key := os.Getenv("HUGGINGFACEHUB_API_TOKEN"); key != "" { - apiKey = key - } - } - - // Create client with recording HTTP client - // Using HuggingFaceH4/zephyr-7b-beta which is a working model - client, err := New(apiKey, "HuggingFaceH4/zephyr-7b-beta", testURL, WithHTTPClient(rr.Client())) - require.NoError(t, err) - - req := &InferenceRequest{ - Model: "HuggingFaceH4/zephyr-7b-beta", - Prompt: "Hello, my name is", - Task: InferenceTaskTextGeneration, - Temperature: 0.5, - MaxLength: 20, - } - - resp, err := client.RunInference(ctx, req) - - // Skip test if model is not available (404 error) - if err != nil && strings.Contains(err.Error(), "404") { - t.Skip("Model not available on HuggingFace API, skipping test") - } - - require.NoError(t, err) - assert.NotNil(t, resp) - assert.NotEmpty(t, resp.Text) -} - -func TestClient_RunInferenceText2Text(t *testing.T) { - ctx := t.Context() - - // Check both HF_TOKEN and HUGGINGFACEHUB_API_TOKEN - if os.Getenv("HF_TOKEN") == "" && os.Getenv("HUGGINGFACEHUB_API_TOKEN") == "" { - httprr.SkipIfNoCredentialsAndRecordingMissing(t, "HF_TOKEN") - } - - rr := httprr.OpenForTest(t, httputil.DefaultTransport) - defer rr.Close() - - apiKey := "test-api-key" - if rr.Recording() { - // Try HF_TOKEN first, then fall back to HUGGINGFACEHUB_API_TOKEN - if key := os.Getenv("HF_TOKEN"); key != "" { - apiKey = key - } else if key := os.Getenv("HUGGINGFACEHUB_API_TOKEN"); key != "" { - apiKey = key - } - } - - // Create client with recording HTTP client - // Using the same model that works for text generation - client, err := New(apiKey, "HuggingFaceH4/zephyr-7b-beta", testURL, WithHTTPClient(rr.Client())) - require.NoError(t, err) - - req := &InferenceRequest{ - Model: "HuggingFaceH4/zephyr-7b-beta", - Prompt: "Translate to French: Hello, how are you?", - Task: InferenceTaskText2TextGeneration, - Temperature: 0.5, - MaxLength: 50, - } - - resp, err := client.RunInference(ctx, req) - - // Skip test if model is not available (404 error) - if err != nil && strings.Contains(err.Error(), "404") { - t.Skip("Model not available on HuggingFace API, skipping test") - } - - require.NoError(t, err) - assert.NotNil(t, resp) - assert.NotEmpty(t, resp.Text) -} +const testURL = "https://router.huggingface.co" func TestClient_CreateEmbedding(t *testing.T) { t.Skip("temporary skip") @@ -180,7 +88,6 @@ func TestClient_RunInferenceWithProvider(t *testing.T) { req := &InferenceRequest{ Model: "deepseek-ai/DeepSeek-R1-0528", Prompt: "Hello, how are you?", - Task: InferenceTaskTextGeneration, Temperature: 0.5, MaxLength: 50, } diff --git a/llms/huggingface/internal/huggingfaceclient/inference.go b/llms/huggingface/internal/huggingfaceclient/inference.go index 24a64d6e3..7e68b3635 100644 --- a/llms/huggingface/internal/huggingfaceclient/inference.go +++ b/llms/huggingface/internal/huggingfaceclient/inference.go @@ -10,34 +10,11 @@ import ( "net/http" ) -var ErrUnexpectedStatusCode = errors.New("unexpected status code") - -// InferenceTask is the type of inference task to run. -type InferenceTask string - -const ( - InferenceTaskTextGeneration InferenceTask = "text-generation" - InferenceTaskText2TextGeneration InferenceTask = "text2text-generation" +var ( + ErrUnexpectedStatusCode = errors.New("unexpected status code") + ErrNoChoices = errors.New("no choices in response") ) -type inferencePayload struct { - Model string `json:"-"` - Inputs string `json:"inputs"` - Parameters parameters `json:"parameters,omitempty"` -} - -type parameters struct { - Temperature float64 `json:"temperature"` - TopP float64 `json:"top_p,omitempty"` - TopK int `json:"top_k,omitempty"` - MinLength int `json:"min_length,omitempty"` - MaxLength int `json:"max_length,omitempty"` - RepetitionPenalty float64 `json:"repetition_penalty,omitempty"` - Seed int `json:"seed,omitempty"` - Details bool `json:"details,omitempty"` -} - -// Chat completions API structures for router-based requests type chatCompletionsPayload struct { Model string `json:"model"` Messages []chatMessage `json:"messages"` @@ -45,6 +22,7 @@ type chatCompletionsPayload struct { Temperature *float64 `json:"temperature,omitempty"` TopP *float64 `json:"top_p,omitempty"` MaxTokens *int `json:"max_tokens,omitempty"` + Seed *int `json:"seed,omitempty"` } type chatMessage struct { @@ -62,116 +40,20 @@ type chatCompletionsResponse struct { } `json:"choices"` } -type ( - inferenceResponsePayload []inferenceResponse - inferenceResponse struct { - Text string `json:"generated_text"` - Details *inferenceDetails `json:"details,omitempty"` - } - inferenceDetails struct { - FinishReason string `json:"finish_reason"` - } -) - -func (c *Client) runInference(ctx context.Context, payload *inferencePayload) (inferenceResponsePayload, error) { - if c.provider != "" { - // Use chat completions API for router-based requests - return c.runChatCompletions(ctx, payload) - } - - // Standard inference API - payloadBytes, err := json.Marshal(payload) - if err != nil { - return nil, err - } - body := bytes.NewReader(payloadBytes) - - requestURL := fmt.Sprintf("%s/models/%s", c.url, payload.Model) - - req, err := http.NewRequestWithContext(ctx, http.MethodPost, requestURL, body) - if err != nil { - return nil, err - } - req.Header.Set("Authorization", "Bearer "+c.Token) - req.Header.Set("Content-Type", "application/json") - - // debug print the http request with httputil: - - // reqDump, err := httputil.DumpRequestOut(req, true) - // if err != nil { - // return nil, err - // } - // fmt.Fprintf(os.Stderr, "%s", reqDump) - - r, err := c.httpClient.Do(req) - if err != nil { - return nil, err - } - defer r.Body.Close() - - if r.StatusCode != http.StatusOK { - b, err := io.ReadAll(r.Body) - if err != nil { - return nil, fmt.Errorf("failed to read response body: %w", err) - } - - if len(b) > 0 { - err = fmt.Errorf("%w: %d, body: %s", ErrUnexpectedStatusCode, r.StatusCode, string(b)) - } else { - err = fmt.Errorf("%w: %d", ErrUnexpectedStatusCode, r.StatusCode) - } - return nil, err - } - - // debug print the http response with httputil: - // resDump, err := httputil.DumpResponse(r, true) - // if err != nil { - // return nil, err - // } - // fmt.Fprintf(os.Stderr, "%s", resDump) - - var response inferenceResponsePayload - err = json.NewDecoder(r.Body).Decode(&response) - if err != nil { - return nil, err +func (c *Client) chatCompletionsURL() string { + if c.provider == "" { + return c.url + "/v1/chat/completions" } - return response, nil + return fmt.Sprintf("%s/%s/v1/chat/completions", c.url, c.provider) } -// runChatCompletions runs inference using the chat completions API format for router-based requests -func (c *Client) runChatCompletions(ctx context.Context, payload *inferencePayload) (inferenceResponsePayload, error) { - // Convert parameters to chat completions format - chatPayload := chatCompletionsPayload{ - Model: payload.Model, - Messages: []chatMessage{ - { - Role: "user", - Content: payload.Inputs, - }, - }, - Stream: false, - } - - // Map parameters - if payload.Parameters.Temperature > 0 { - chatPayload.Temperature = &payload.Parameters.Temperature - } - if payload.Parameters.TopP > 0 { - chatPayload.TopP = &payload.Parameters.TopP - } - if payload.Parameters.MaxLength > 0 { - chatPayload.MaxTokens = &payload.Parameters.MaxLength - } - - payloadBytes, err := json.Marshal(chatPayload) +func (c *Client) runChatCompletions(ctx context.Context, payload *chatCompletionsPayload) (*InferenceResponse, error) { + payloadBytes, err := json.Marshal(payload) if err != nil { return nil, err } - body := bytes.NewReader(payloadBytes) - - requestURL := fmt.Sprintf("%s/%s/v1/chat/completions", c.url, c.provider) - req, err := http.NewRequestWithContext(ctx, http.MethodPost, requestURL, body) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.chatCompletionsURL(), bytes.NewReader(payloadBytes)) if err != nil { return nil, err } @@ -191,30 +73,21 @@ func (c *Client) runChatCompletions(ctx context.Context, payload *inferencePaylo } if len(b) > 0 { - err = fmt.Errorf("%w: %d, body: %s", ErrUnexpectedStatusCode, r.StatusCode, string(b)) - } else { - err = fmt.Errorf("%w: %d", ErrUnexpectedStatusCode, r.StatusCode) + return nil, fmt.Errorf("%w: %d, body: %s", ErrUnexpectedStatusCode, r.StatusCode, string(b)) } - return nil, err + return nil, fmt.Errorf("%w: %d", ErrUnexpectedStatusCode, r.StatusCode) } - var chatResponse chatCompletionsResponse - err = json.NewDecoder(r.Body).Decode(&chatResponse) - if err != nil { + var response chatCompletionsResponse + if err := json.NewDecoder(r.Body).Decode(&response); err != nil { return nil, err } - - // Convert chat completions response to inference response format - if len(chatResponse.Choices) == 0 { - return nil, errors.New("no choices in response") - } - - // Convert to the expected response format - response := make(inferenceResponsePayload, 1) - response[0] = inferenceResponse{ - Text: chatResponse.Choices[0].Message.Content, - Details: &inferenceDetails{FinishReason: chatResponse.Choices[0].FinishReason}, + if len(response.Choices) == 0 { + return nil, ErrNoChoices } - return response, nil + return &InferenceResponse{ + Text: response.Choices[0].Message.Content, + StopReason: response.Choices[0].FinishReason, + }, nil } diff --git a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr b/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr deleted file mode 100644 index 3c9c7638f..000000000 --- a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInference.httprr +++ /dev/null @@ -1,28 +0,0 @@ -httprr trace v1 -339 873 -POST https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta HTTP/1.1 -Host: api-inference.huggingface.co -User-Agent: langchaingo-httprr -Content-Length: 94 -Authorization: Bearer test-api-key -Content-Type: application/json - -{"inputs":"Hello, my name is","parameters":{"temperature":0.5,"max_length":20,"details":true}}HTTP/2.0 404 Not Found -Content-Length: 9 -Access-Control-Allow-Credentials: true -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash -Content-Type: text/plain; charset=utf-8 -Cross-Origin-Opener-Policy: same-origin -Date: Mon, 18 Aug 2025 12:36:28 GMT -Referrer-Policy: strict-origin-when-cross-origin -Vary: origin, access-control-request-method, access-control-request-headers -Via: 1.1 4d87a1e7909a1a7d7668982112e840ba.cloudfront.net (CloudFront) -X-Amz-Cf-Id: DhbjL6m2RbLCqaFnwOco16Owkdw-ma0KPUnu2svT6Pr_PHGZwSkj2A== -X-Amz-Cf-Pop: CDG55-P3 -X-Cache: Error from cloudfront -X-Inference-Provider: hf-inference -X-Powered-By: huggingface-moon -X-Request-Id: Root=1-68a31e4c-64caec96543b308231f88adf - -Not Found \ No newline at end of file diff --git a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr b/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr deleted file mode 100644 index 2f7134ce0..000000000 --- a/llms/huggingface/internal/huggingfaceclient/testdata/TestClient_RunInferenceText2Text.httprr +++ /dev/null @@ -1,28 +0,0 @@ -httprr trace v1 -363 873 -POST https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta HTTP/1.1 -Host: api-inference.huggingface.co -User-Agent: langchaingo-httprr -Content-Length: 117 -Authorization: Bearer test-api-key -Content-Type: application/json - -{"inputs":"Translate to French: Hello, how are you?","parameters":{"temperature":0.5,"max_length":50,"details":true}}HTTP/2.0 404 Not Found -Content-Length: 9 -Access-Control-Allow-Credentials: true -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash -Content-Type: text/plain; charset=utf-8 -Cross-Origin-Opener-Policy: same-origin -Date: Mon, 18 Aug 2025 12:36:29 GMT -Referrer-Policy: strict-origin-when-cross-origin -Vary: origin, access-control-request-method, access-control-request-headers -Via: 1.1 4d87a1e7909a1a7d7668982112e840ba.cloudfront.net (CloudFront) -X-Amz-Cf-Id: yzJ5X-bxz1-lFsyT0AYgP82WqwGp6WgizqOBWh0qRRSNyckGtHjS4g== -X-Amz-Cf-Pop: CDG55-P3 -X-Cache: Error from cloudfront -X-Inference-Provider: hf-inference -X-Powered-By: huggingface-moon -X-Request-Id: Root=1-68a31e4d-197358e072cede205d9f41b8 - -Not Found \ No newline at end of file diff --git a/llms/huggingface/truncation_test.go b/llms/huggingface/truncation_test.go index a4227dba1..b1073b1d4 100644 --- a/llms/huggingface/truncation_test.go +++ b/llms/huggingface/truncation_test.go @@ -43,9 +43,17 @@ func TestTruncationOnTheInferenceDoor(t *testing.T) { reason string truncated bool }{ - {"hit the limit", `[{"generated_text":"partial","details":{"finish_reason":"length"}}]`, "length", true}, - {"finished", `[{"generated_text":"done","details":{"finish_reason":"eos_token"}}]`, "eos_token", false}, - {"no details", `[{"generated_text":"done"}]`, "", false}, + { + "hit the limit", + `{"choices":[{"message":{"content":"partial"},"finish_reason":"length"}]}`, + "length", true, + }, + { + "finished", + `{"choices":[{"message":{"content":"done"},"finish_reason":"eos_token"}]}`, + "eos_token", false, + }, + {"no reason", `{"choices":[{"message":{"content":"done"}}]}`, "", false}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -65,8 +73,8 @@ func TestTruncationOnTheInferenceDoor(t *testing.T) { if got := resp.Choices[0].Truncated; got != tc.truncated { t.Errorf("Truncated = %v, want %v", got, tc.truncated) } - if !strings.Contains(*request, `"details":true`) { - t.Errorf("the door reports a finish reason only when details are requested, got body: %s", *request) + if !strings.Contains(*request, `"messages":[{"role":"user","content":"hi"}]`) { + t.Errorf("the prompt must reach the request as a chat message, got body: %s", *request) } }) } @@ -102,7 +110,7 @@ func TestTruncationOnTheRouterDoor(t *testing.T) { func TestFailOnTruncationOnTheInferenceDoor(t *testing.T) { t.Parallel() - srv, _ := serveJSON(t, `[{"generated_text":"partial","details":{"finish_reason":"length"}}]`) + srv, _ := serveJSON(t, `{"choices":[{"message":{"content":"partial"},"finish_reason":"length"}]}`) llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("m")) if err != nil { t.Fatalf("New() error: %v", err) @@ -151,7 +159,7 @@ func (h *recordingCallbacks) HandleLLMGenerateContentEnd(context.Context, *llms. func TestAnAnsweredCallClosesTheCallbackPair(t *testing.T) { t.Parallel() - srv, _ := serveJSON(t, `[{"generated_text":"sixty rooms are free","details":{"finish_reason":"stop"}}]`) + srv, _ := serveJSON(t, `{"choices":[{"message":{"content":"sixty rooms are free"},"finish_reason":"stop"}]}`) llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("m")) if err != nil { t.Fatalf("New() error: %v", err) diff --git a/llms/huggingface/wire_test.go b/llms/huggingface/wire_test.go index 26bafecbd..8d2688eff 100644 --- a/llms/huggingface/wire_test.go +++ b/llms/huggingface/wire_test.go @@ -34,7 +34,7 @@ func (c *capturingTransport) RoundTrip(r *http.Request) (*http.Response, error) func callThroughTransport(t *testing.T, tr *capturingTransport, opts ...Option) { t.Helper() - tr.reply = `[{"generated_text":"hi"}]` + tr.reply = `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}` llm, err := New(append([]Option{ WithToken("t"), WithModel("gpt2"), From e83061c33dbcdb807814983bcb00c5d942721d9d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 8 Sep 2026 19:04:29 +0300 Subject: [PATCH 397/618] feat(huggingface): carry the caller's reasoning effort to the vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The door accepted WithReasoning and WithReasoningDisabled and dropped both: its request had no field for them. On the chat-completions contract it now speaks, reasoning_effort is a documented payload field whose values include none, so the intent is expressible. The asked-for level goes out as written. HuggingFace publishes no per-model support list for the field — the documentation says support is provider- and model-dependent — so clamping it here would invent a fact about the model; the provider answers for itself. PAGI-282 Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm.go | 11 +++ .../huggingfaceclient/huggingfaceclient.go | 2 + .../internal/huggingfaceclient/inference.go | 1 + llms/huggingface/reasoning_wire_test.go | 69 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 llms/huggingface/reasoning_wire_test.go diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index a4a50e702..e9f2e8d6f 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -62,6 +62,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten TopP: opts.GetTopP(), MaxLength: opts.GetMaxLength(), Seed: opts.GetSeed(), + Effort: reasoningEffort(opts), }) if err != nil { return nil, err @@ -82,6 +83,16 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return resp, nil } +func reasoningEffort(opts *llms.CallOptions) string { + if opts.Reasoning == nil { + return "" + } + if opts.Reasoning.ResolveMode() == llms.ReasoningOff { + return "none" + } + return string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) +} + func New(opts ...Option) (*LLM, error) { options := &options{ token: getHuggingFaceToken(), diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go index 5ff8438a9..100ec9c99 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go @@ -65,6 +65,7 @@ type InferenceRequest struct { TopP float64 MaxLength int Seed int + Effort string } type InferenceResponse struct { @@ -77,6 +78,7 @@ func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (* payload := &chatCompletionsPayload{ Model: request.Model, Messages: []chatMessage{{Role: "user", Content: request.Prompt}}, + Effort: request.Effort, } if request.Temperature > 0 { payload.Temperature = &request.Temperature diff --git a/llms/huggingface/internal/huggingfaceclient/inference.go b/llms/huggingface/internal/huggingfaceclient/inference.go index 7e68b3635..900c948b1 100644 --- a/llms/huggingface/internal/huggingfaceclient/inference.go +++ b/llms/huggingface/internal/huggingfaceclient/inference.go @@ -23,6 +23,7 @@ type chatCompletionsPayload struct { TopP *float64 `json:"top_p,omitempty"` MaxTokens *int `json:"max_tokens,omitempty"` Seed *int `json:"seed,omitempty"` + Effort string `json:"reasoning_effort,omitempty"` } type chatMessage struct { diff --git a/llms/huggingface/reasoning_wire_test.go b/llms/huggingface/reasoning_wire_test.go new file mode 100644 index 000000000..a02d84213 --- /dev/null +++ b/llms/huggingface/reasoning_wire_test.go @@ -0,0 +1,69 @@ +package huggingface + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func effortOnTheWire(t *testing.T, call ...llms.CallOption) (string, bool) { + t.Helper() + + var raw []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("Qwen/Qwen3-32B")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) + require.NoError(t, err) + + var body map[string]any + require.NoError(t, json.Unmarshal(raw, &body)) + effort, present := body["reasoning_effort"] + if !present { + return "", false + } + + return effort.(string), true +} + +func TestTheAskedForEffortReachesTheWireUnchanged(t *testing.T) { + t.Parallel() + + effort, present := effortOnTheWire(t, llms.WithReasoning(llms.ReasoningHigh, 0)) + + require.True(t, present) + assert.Equal(t, "high", effort) +} + +func TestSwitchingThinkingOffSendsTheDocumentedNone(t *testing.T) { + t.Parallel() + + effort, present := effortOnTheWire(t, llms.WithReasoningDisabled()) + + require.True(t, present) + assert.Equal(t, "none", effort) +} + +func TestACallThatSaidNothingAboutThinkingCarriesNoEffort(t *testing.T) { + t.Parallel() + + _, present := effortOnTheWire(t) + + assert.False(t, present, "a caller who said nothing must not have an effort invented for them") +} From fc7e513eb74abcdd26e88c5af06036761ee69084 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:21:00 +0300 Subject: [PATCH 398/618] feat(llms): tell the caller which options never reached the vendor A door could drop, clamp or replace a caller option on the way to the wire and say nothing: a request built with WithTemperature(0.2), WithTopP(0.9) and WithLogProbs(true) on gpt-5 went out with temperature 1.0 and neither of the other two, and the caller had no way to learn it. ContentResponse now carries Warnings, and the openai door fills it for the sampling policy and for the answer limit raised to make room for a thinking budget. The policy itself is untouched: the request is snapshotted before it runs and diffed after, so a warning appears only where a value really changed. Co-Authored-By: Claude Opus 5 --- llms/generatecontent.go | 4 + llms/openai/openaillm.go | 56 ++++++++--- llms/openai/openaillm_test.go | 2 +- llms/openai/sampling_warnings.go | 108 +++++++++++++++++++++ llms/openai/sampling_warnings_test.go | 80 +++++++++++++++ llms/openai/structured_output_unit_test.go | 12 +-- llms/warning.go | 52 ++++++++++ llms/warning_test.go | 24 +++++ 8 files changed, 316 insertions(+), 22 deletions(-) create mode 100644 llms/openai/sampling_warnings.go create mode 100644 llms/openai/sampling_warnings_test.go create mode 100644 llms/warning.go create mode 100644 llms/warning_test.go diff --git a/llms/generatecontent.go b/llms/generatecontent.go index 7773e84d1..895f20e9a 100644 --- a/llms/generatecontent.go +++ b/llms/generatecontent.go @@ -150,6 +150,10 @@ func (ToolCallResponse) isPart() {} // It can potentially return multiple content choices. type ContentResponse struct { Choices []*ContentChoice + + // Warnings lists the caller options this request lost, clamped or replaced. + // An empty list is not a promise that every option reached the vendor. + Warnings []Warning } // ContentChoice is one of the response choices returned by GenerateContent diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index f3cfe41fa..3d5b1ef47 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -3,6 +3,7 @@ package openai import ( "context" "fmt" + "strconv" "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" @@ -110,7 +111,8 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } - req, err := o.createChatRequest(chatMsgs, opts) + warn := &llms.Warnings{} + req, err := o.createChatRequest(chatMsgs, opts, warn) if err != nil { return nil, err } @@ -120,13 +122,13 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten if result == nil || len(result.Choices) == 0 { return nil, err } - return o.processResponse(result), err + return o.processResponse(result, warn), err } if len(result.Choices) == 0 { return nil, ErrEmptyResponse } - response := o.processResponse(result) + response := o.processResponse(result, warn) if refusal, choice := refusalFrom(result); refusal != nil { if opts.StructuredOutput != nil { @@ -254,7 +256,9 @@ func (o *LLM) handleToolMessage(mc llms.MessageContent) error { } // createChatRequest creates an OpenAI chat request with the given parameters. -func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) (*openaiclient.ChatRequest, error) { +func (o *LLM) createChatRequest( + chatMsgs []*ChatMessage, opts llms.CallOptions, warn *llms.Warnings, +) (*openaiclient.ChatRequest, error) { req := &openaiclient.ChatRequest{ Model: opts.GetModel(), StopWords: opts.StopWords, @@ -326,11 +330,11 @@ func (o *LLM) createChatRequest(chatMsgs []*ChatMessage, opts llms.CallOptions) return nil, err } - wireEffort, err := o.setReasoning(req, opts) + wireEffort, err := o.setReasoning(req, opts, warn) if err != nil { return nil, err } - o.applySamplingPolicy(req, opts, wireEffort) + o.applySamplingPolicy(req, opts, wireEffort, warn) return req, nil } @@ -357,7 +361,9 @@ func wireEffortOf(sent bool, effort llms.ReasoningEffort) string { } // setReasoning writes the reasoning fields and reports the effort that reached the wire. -func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) (string, error) { +func (o *LLM) setReasoning( + req *openaiclient.ChatRequest, opts llms.CallOptions, warn *llms.Warnings, +) (string, error) { model := o.effectiveModel(opts) toolsRule := reasoning.EffortToolsFree if len(opts.Tools) > 0 { @@ -397,16 +403,17 @@ func (o *LLM) setReasoning(req *openaiclient.ChatRequest, opts llms.CallOptions) effortBudget = llms.ReasoningEffortBudget(reasoningEffort, opts.GetMaxTokens()) } - return o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget), nil + return o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget, warnCtx{model, warn}), nil } func (o *LLM) writeEffort( req *openaiclient.ChatRequest, sends bool, effort llms.ReasoningEffort, budget, effortBudget int, + wc warnCtx, ) string { if !o.client.ModernReasoningFormat { if sends { req.ReasoningEffort = &effort - o.raiseAnswerLimitForBudget(req, effortBudget) + o.raiseAnswerLimitForBudget(req, effortBudget, wc) } return wireEffortOf(sends, effort) } @@ -414,20 +421,27 @@ func (o *LLM) writeEffort( switch { case o.client.UseReasoningMaxTokens && budget > 0: req.Reasoning = &openaiclient.ReasoningOptions{MaxTokens: budget} - o.raiseAnswerLimitForBudget(req, budget) + o.raiseAnswerLimitForBudget(req, budget, wc) case sends: req.Reasoning = &openaiclient.ReasoningOptions{Effort: effort} - o.raiseAnswerLimitForBudget(req, effortBudget) + o.raiseAnswerLimitForBudget(req, effortBudget, wc) } return wireEffortOf(sends, effort) } -func (o *LLM) raiseAnswerLimitForBudget(req *openaiclient.ChatRequest, budget int) { +func (o *LLM) raiseAnswerLimitForBudget(req *openaiclient.ChatRequest, budget int, wc warnCtx) { for _, limit := range []**int{&req.MaxCompletionTokens, &req.MaxTokens} { if *limit == nil || **limit <= 0 { continue } raised := reasoning.ClaudeMaxTokensForBudget(budget, **limit) + if raised != **limit { + wc.sink.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithMaxTokens", Model: wc.model, + Asked: strconv.Itoa(**limit), Sent: strconv.Itoa(raised), + Reason: "the answer limit was raised to leave room for the thinking budget", + }) + } *limit = &raised } } @@ -460,7 +474,17 @@ func (o *LLM) writeDisableEffort(req *openaiclient.ChatRequest) { } } -func (o *LLM) applySamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string) { +func (o *LLM) applySamplingPolicy( + req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string, warn *llms.Warnings, +) { + model := o.effectiveModel(opts) + before := takeSamplingSnapshot(req) + reason := samplingReason(model, opts, wireEffort) + o.enforceSamplingPolicy(req, opts, wireEffort) + before.report(req, model, reason, warn) +} + +func (o *LLM) enforceSamplingPolicy(req *openaiclient.ChatRequest, opts llms.CallOptions, wireEffort string) { model := o.effectiveModel(opts) if reasoning.RejectsMinP(model) { req.MinP = nil @@ -561,7 +585,9 @@ func refusalFrom(result *openaiclient.ChatCompletionResponse) (*llms.ErrModelRef } // processResponse processes the OpenAI API response into a ContentResponse. -func (o *LLM) processResponse(result *openaiclient.ChatCompletionResponse) *llms.ContentResponse { +func (o *LLM) processResponse( + result *openaiclient.ChatCompletionResponse, warn *llms.Warnings, +) *llms.ContentResponse { choices := make([]*llms.ContentChoice, len(result.Choices)) for i, c := range result.Choices { @@ -583,7 +609,7 @@ func (o *LLM) processResponse(result *openaiclient.ChatCompletionResponse) *llms o.processToolCalls(choices[i], c) } - return &llms.ContentResponse{Choices: choices} + return &llms.ContentResponse{Choices: choices, Warnings: warn.List()} } func (o *LLM) processUsage(usage *openaiclient.ChatUsage) map[string]any { diff --git a/llms/openai/openaillm_test.go b/llms/openai/openaillm_test.go index 66e5e318e..a74164d2b 100644 --- a/llms/openai/openaillm_test.go +++ b/llms/openai/openaillm_test.go @@ -961,7 +961,7 @@ func TestCreateChatRequest_ReasoningModelTemperature(t *testing.T) { Temperature: &tt.temperature, } - req, err := llm.createChatRequest([]*ChatMessage{}, opts) + req, err := llm.createChatRequest([]*ChatMessage{}, opts, nil) require.NoError(t, err) require.NotNil(t, req.Temperature) if req.Temperature != nil { diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go new file mode 100644 index 000000000..2f5be2b67 --- /dev/null +++ b/llms/openai/sampling_warnings.go @@ -0,0 +1,108 @@ +package openai + +import ( + "strconv" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/openai/internal/openaiclient" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +type warnCtx struct { + model string + sink *llms.Warnings +} + +type samplingSnapshot struct { + temperature *float64 + topP *float64 + topK *int + minP *float64 + frequencyPenalty *float64 + presencePenalty *float64 + logProbs bool + topLogProbs int +} + +func takeSamplingSnapshot(req *openaiclient.ChatRequest) samplingSnapshot { + return samplingSnapshot{ + temperature: req.Temperature, + topP: req.TopP, + topK: req.TopK, + minP: req.MinP, + frequencyPenalty: req.FrequencyPenalty, + presencePenalty: req.PresencePenalty, + logProbs: req.LogProbs, + topLogProbs: req.TopLogProbs, + } +} + +func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason string, warn *llms.Warnings) { + warnFloat(warn, "WithTemperature", model, reason, s.temperature, req.Temperature) + warnFloat(warn, "WithTopP", model, reason, s.topP, req.TopP) + warnInt(warn, "WithTopK", model, reason, s.topK, req.TopK) + warnFloat(warn, "WithMinP", model, "the model rejects min_p", s.minP, req.MinP) + warnFloat(warn, "WithFrequencyPenalty", model, reason, s.frequencyPenalty, req.FrequencyPenalty) + warnFloat(warn, "WithPresencePenalty", model, reason, s.presencePenalty, req.PresencePenalty) + + if s.logProbs && !req.LogProbs { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, + Asked: "true", Reason: reason, + }) + } + if s.topLogProbs > 0 && req.TopLogProbs != s.topLogProbs { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, + Asked: strconv.Itoa(s.topLogProbs), Reason: reason, + }) + } +} + +func warnFloat(warn *llms.Warnings, option, model, reason string, before, after *float64) { + render := func(v *float64) string { + if v == nil { + return "" + } + return strconv.FormatFloat(*v, 'g', -1, 64) + } + addChange(warn, option, model, reason, render(before), render(after)) +} + +func warnInt(warn *llms.Warnings, option, model, reason string, before, after *int) { + render := func(v *int) string { + if v == nil { + return "" + } + return strconv.Itoa(*v) + } + addChange(warn, option, model, reason, render(before), render(after)) +} + +func addChange(warn *llms.Warnings, option, model, reason, before, after string) { + switch { + case before == "" || before == after: + return + case after == "": + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: before, Reason: reason, + }) + default: + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: option, Model: model, + Asked: before, Sent: after, Reason: reason, + }) + } +} + +func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { + switch { + case reasoning.ClaudeRejectsSampling(model): + return "the model rejects sampling parameters" + case refusesSamplingWhileThinking(model, opts, wireEffort): + return "the model refuses sampling while thinking" + default: + return "the model does not accept this combination of sampling parameters" + } +} diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go new file mode 100644 index 000000000..bfc7b5b16 --- /dev/null +++ b/llms/openai/sampling_warnings_test.go @@ -0,0 +1,80 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func sendForWarnings(t *testing.T, model string, opts ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, completion) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + if err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + return resp +} + +func warningFor(t *testing.T, resp *llms.ContentResponse, option string) llms.Warning { + t.Helper() + + for _, w := range resp.Warnings { + if w.Option == option { + return w + } + } + t.Fatalf("no warning for %s, got %v", option, resp.Warnings) + return llms.Warning{} +} + +func TestTheCallerLearnsWhatTheSamplingPolicyTookAway(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-5", + llms.WithTemperature(0.2), llms.WithTopP(0.9), + llms.WithLogProbs(true), llms.WithTopLogProbs(3)) + + temperature := warningFor(t, resp, "WithTemperature") + if temperature.Kind != llms.WarningSubstitute || temperature.Asked != "0.2" || temperature.Sent != "1" { + t.Errorf("temperature warning = %+v", temperature) + } + if temperature.Model != "gpt-5" { + t.Errorf("temperature warning names model %q", temperature.Model) + } + + for _, option := range []string{"WithTopP", "WithLogProbs", "WithTopLogProbs"} { + if got := warningFor(t, resp, option); got.Kind != llms.WarningDrop || got.Sent != "" { + t.Errorf("%s warning = %+v", option, got) + } + } +} + +func TestAnUntouchedRequestCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-4o", llms.WithTemperature(0.2), llms.WithTopP(0.9)) + if len(resp.Warnings) != 0 { + t.Errorf("want no warnings on a model that keeps sampling, got %v", resp.Warnings) + } +} diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index 274de04f2..599694b40 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -38,7 +38,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / llm := newUnitLLM(t, WithModel("gpt-4o-2024-08-06")) var opts llms.CallOptions llms.WithJSONMode()(&opts) - req, err := llm.createChatRequest(nil, opts) + req, err := llm.createChatRequest(nil, opts, nil) if err != nil { t.Fatal(err) } @@ -52,7 +52,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / llm := newUnitLLM(t, WithModel("gpt-4o-2024-08-06")) var opts llms.CallOptions llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Description: "d", Schema: objectSchema()})(&opts) - req, err := llm.createChatRequest(nil, opts) + req, err := llm.createChatRequest(nil, opts, nil) if err != nil { t.Fatal(err) } @@ -88,7 +88,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / WithResponseFormat(&ResponseFormat{Type: "json_object"})) var opts llms.CallOptions llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) - _, err := llm.createChatRequest(nil, opts) + _, err := llm.createChatRequest(nil, opts, nil) var conflict *llms.ErrStructuredOutputConflict if !errors.As(err, &conflict) { t.Fatalf("want ErrStructuredOutputConflict, got %v", err) @@ -100,7 +100,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / llm := newUnitLLM(t, WithModel("gpt-4o-2024-08-06")) var opts llms.CallOptions llms.WithStructuredOutput(llms.StructuredOutputConfig{Schema: objectSchema()})(&opts) - _, err := llm.createChatRequest(nil, opts) + _, err := llm.createChatRequest(nil, opts, nil) if !errors.Is(err, llms.ErrStructuredOutputConfig) { t.Fatalf("want ErrStructuredOutputConfig, got %v", err) } @@ -112,7 +112,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / llm := newUnitLLM(t, WithModel(model)) var opts llms.CallOptions llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) - _, err := llm.createChatRequest(nil, opts) + _, err := llm.createChatRequest(nil, opts, nil) var unsup *llms.ErrStructuredOutputUnsupported if !errors.As(err, &unsup) { t.Fatalf("%s: want ErrStructuredOutputUnsupported, got %v", model, err) @@ -125,7 +125,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / llm := newUnitLLM(t, WithModel("gpt-6-ultra-preview")) var opts llms.CallOptions llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) - req, err := llm.createChatRequest(nil, opts) + req, err := llm.createChatRequest(nil, opts, nil) if err != nil { t.Fatalf("unknown model must pass through, got %v", err) } diff --git a/llms/warning.go b/llms/warning.go new file mode 100644 index 000000000..34fc2495b --- /dev/null +++ b/llms/warning.go @@ -0,0 +1,52 @@ +package llms + +import "fmt" + +// WarningKind names what a door did to a caller option on the way to the wire. +type WarningKind string + +const ( + WarningDrop WarningKind = "drop" + WarningClamp WarningKind = "clamp" + WarningSubstitute WarningKind = "substitute" +) + +// Warning reports one caller option that did not reach the vendor as asked. +// Asked and Sent are rendered values; an empty Sent means nothing reached the wire. +type Warning struct { + Kind WarningKind + Option string + Model string + Asked string + Sent string + Reason string +} + +func (w Warning) String() string { + sent := w.Sent + if sent == "" { + sent = "nothing" + } + return fmt.Sprintf("%s: %s asked %s, %s sent %s on %s (%s)", + w.Kind, w.Option, w.Asked, w.Option, sent, w.Model, w.Reason) +} + +// Warnings collects Warning values while a request is built. A nil *Warnings is +// valid and keeps nothing. +type Warnings struct { + items []Warning +} + +func (w *Warnings) Add(warning Warning) { + if w == nil { + return + } + w.items = append(w.items, warning) +} + +func (w *Warnings) List() []Warning { + if w == nil { + return nil + } + return w.items +} diff --git a/llms/warning_test.go b/llms/warning_test.go new file mode 100644 index 000000000..b7b163ede --- /dev/null +++ b/llms/warning_test.go @@ -0,0 +1,24 @@ +package llms + +import "testing" + +func TestANilSinkAcceptsWarningsAndKeepsNone(t *testing.T) { + t.Parallel() + + var sink *Warnings + sink.Add(Warning{Kind: WarningDrop, Option: "WithTopP"}) + if got := sink.List(); got != nil { + t.Errorf("a nil sink kept %v", got) + } +} + +func TestASinkKeepsWhatItIsGiven(t *testing.T) { + t.Parallel() + + sink := &Warnings{} + sink.Add(Warning{Kind: WarningDrop, Option: "WithTopP", Model: "m", Asked: "0.9"}) + sink.Add(Warning{Kind: WarningClamp, Option: "WithMaxTokens", Model: "m", Asked: "1", Sent: "2"}) + if got := sink.List(); len(got) != 2 || got[0].Option != "WithTopP" || got[1].Sent != "2" { + t.Errorf("sink kept %v", got) + } +} From d64e17596bf8905acb905bb08ed3a30d1c01d441 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:26:15 +0300 Subject: [PATCH 399/618] feat(anthropic): report the sampling the thinking path takes away The door zeroes temperature, top_p and top_k when thinking runs, and raises the answer limit when the budget does not fit under it. All four happened without a word: a caller asking for 0.2 got 1.0, and a caller capping the answer at 1000 tokens got 2048. The request build now fills ContentResponse.Warnings by diffing the values it sends against the ones the caller passed, so a warning names the option, the model, what was asked and what went out. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 13 ++- llms/anthropic/sampling_warnings.go | 41 +++++++++ llms/anthropic/sampling_warnings_test.go | 103 +++++++++++++++++++++++ llms/openai/sampling_warnings.go | 49 ++--------- llms/warning.go | 46 +++++++++- 5 files changed, 204 insertions(+), 48 deletions(-) create mode 100644 llms/anthropic/sampling_warnings.go create mode 100644 llms/anthropic/sampling_warnings_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 4698a3e62..f61b5676d 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -265,6 +265,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag } } + warn := &llms.Warnings{} temperature, topP, topK, maxTokens := opts.Temperature, opts.TopP, opts.TopK, opts.GetMaxTokens() switch { case thinking != nil && thinking.Type == "adaptive": @@ -296,6 +297,8 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag topP = nil } + reportAnthropicSampling(warn, model, *opts, thinking, temperature, topP, topK, maxTokens) + result, err := o.client.CreateMessage(ctx, &anthropicclient.MessageRequest{ Model: opts.GetModel(), Messages: chatMessages, @@ -319,13 +322,13 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag if result == nil { return nil, wrapped } - partial, buildErr := processAnthropicResponse(result) + partial, buildErr := processAnthropicResponse(result, warn) if buildErr != nil { return nil, wrapped } return partial, wrapped } - response, err := processAnthropicResponse(result) + response, err := processAnthropicResponse(result, warn) if err != nil { return response, err } @@ -369,7 +372,9 @@ func anthropicRefusal(result *anthropicclient.MessageResponsePayload) *ErrModelR } // processAnthropicResponse converts Anthropic API response to standard ContentResponse -func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (*llms.ContentResponse, error) { +func processAnthropicResponse( + result *anthropicclient.MessageResponsePayload, warn *llms.Warnings, +) (*llms.ContentResponse, error) { if result == nil { return nil, ErrEmptyResponse } @@ -459,7 +464,7 @@ func processAnthropicResponse(result *anthropicclient.MessageResponsePayload) (* }, } - response := &llms.ContentResponse{Choices: []*llms.ContentChoice{choice}} + response := &llms.ContentResponse{Choices: []*llms.ContentChoice{choice}, Warnings: warn.List()} if result.StopReason == "refusal" { return response, anthropicRefusal(result) } diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go new file mode 100644 index 000000000..e1df16856 --- /dev/null +++ b/llms/anthropic/sampling_warnings.go @@ -0,0 +1,41 @@ +package anthropic + +import ( + "strconv" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic/internal/anthropicclient" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func reportAnthropicSampling( + warn *llms.Warnings, model string, opts llms.CallOptions, + thinking *anthropicclient.ThinkingPayload, + temperature, topP *float64, topK *int, maxTokens int, +) { + reason := anthropicSamplingReason(model, thinking) + warn.AddFloatChange("WithTemperature", model, reason, opts.Temperature, temperature) + warn.AddFloatChange("WithTopP", model, reason, opts.TopP, topP) + warn.AddIntChange("WithTopK", model, reason, opts.TopK, topK) + + if asked := opts.GetMaxTokens(); asked > 0 && maxTokens != asked { + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithMaxTokens", Model: model, + Asked: strconv.Itoa(asked), Sent: strconv.Itoa(maxTokens), + Reason: "the answer limit was raised to leave room for the thinking budget", + }) + } +} + +func anthropicSamplingReason(model string, thinking *anthropicclient.ThinkingPayload) string { + switch { + case reasoning.ClaudeRejectsSampling(model): + return "the model rejects sampling parameters" + case thinking != nil && thinking.Type == "adaptive": + return "adaptive thinking takes no sampling parameters" + case thinking != nil && thinking.Type == "enabled": + return "the model refuses sampling while thinking" + default: + return "the model does not accept this combination of sampling parameters" + } +} diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go new file mode 100644 index 000000000..9ade605c3 --- /dev/null +++ b/llms/anthropic/sampling_warnings_test.go @@ -0,0 +1,103 @@ +package anthropic_test + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" +) + +func generateForWarnings(t *testing.T, model string, callOpts ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"id":"msg_test","type":"message","role":"assistant",` + + `"model":"` + model + `","content":[{"type":"text","text":"ok"}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`)) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel(model), + ) + require.NoError(t, err) + + messages := []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{llms.TextPart("hi")}, + }} + resp, err := llm.GenerateContent(t.Context(), messages, callOpts...) + require.NoError(t, err) + return resp +} + +func warningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestThinkingTakesTheSamplingParamsAndSaysSo(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "claude-sonnet-4-5", + llms.WithReasoning(llms.ReasoningMedium, 4096), + llms.WithMaxTokens(4096), + llms.WithTemperature(0.2), + llms.WithTopP(0.9), + llms.WithTopK(40), + ) + + got := warningsByOption(resp.Warnings) + + temperature, ok := got["WithTemperature"] + require.True(t, ok, "no temperature warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, temperature.Kind) + require.Equal(t, "0.2", temperature.Asked) + require.Equal(t, "1", temperature.Sent) + + for _, option := range []string{"WithTopP", "WithTopK"} { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Empty(t, w.Sent) + } + + require.NotContains(t, got, "WithMaxTokens", + "the answer limit fits the budget here, so nothing should be raised") +} + +func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "claude-sonnet-4-5", + llms.WithReasoning(llms.ReasoningMedium, 4096), + llms.WithMaxTokens(1000), + ) + + limit, ok := warningsByOption(resp.Warnings)["WithMaxTokens"] + require.True(t, ok, "no max-tokens warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, limit.Kind) + require.Equal(t, "1000", limit.Asked) + require.Equal(t, "2048", limit.Sent) +} + +func TestARequestThatKeepsItsSamplingCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "claude-sonnet-4-5", + llms.WithTemperature(0.2), + llms.WithMaxTokens(4096), + ) + require.Empty(t, resp.Warnings) +} diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 2f5be2b67..3d6a8fd51 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -38,12 +38,12 @@ func takeSamplingSnapshot(req *openaiclient.ChatRequest) samplingSnapshot { } func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason string, warn *llms.Warnings) { - warnFloat(warn, "WithTemperature", model, reason, s.temperature, req.Temperature) - warnFloat(warn, "WithTopP", model, reason, s.topP, req.TopP) - warnInt(warn, "WithTopK", model, reason, s.topK, req.TopK) - warnFloat(warn, "WithMinP", model, "the model rejects min_p", s.minP, req.MinP) - warnFloat(warn, "WithFrequencyPenalty", model, reason, s.frequencyPenalty, req.FrequencyPenalty) - warnFloat(warn, "WithPresencePenalty", model, reason, s.presencePenalty, req.PresencePenalty) + warn.AddFloatChange("WithTemperature", model, reason, s.temperature, req.Temperature) + warn.AddFloatChange("WithTopP", model, reason, s.topP, req.TopP) + warn.AddIntChange("WithTopK", model, reason, s.topK, req.TopK) + warn.AddFloatChange("WithMinP", model, "the model rejects min_p", s.minP, req.MinP) + warn.AddFloatChange("WithFrequencyPenalty", model, reason, s.frequencyPenalty, req.FrequencyPenalty) + warn.AddFloatChange("WithPresencePenalty", model, reason, s.presencePenalty, req.PresencePenalty) if s.logProbs && !req.LogProbs { warn.Add(llms.Warning{ @@ -59,43 +59,6 @@ func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason st } } -func warnFloat(warn *llms.Warnings, option, model, reason string, before, after *float64) { - render := func(v *float64) string { - if v == nil { - return "" - } - return strconv.FormatFloat(*v, 'g', -1, 64) - } - addChange(warn, option, model, reason, render(before), render(after)) -} - -func warnInt(warn *llms.Warnings, option, model, reason string, before, after *int) { - render := func(v *int) string { - if v == nil { - return "" - } - return strconv.Itoa(*v) - } - addChange(warn, option, model, reason, render(before), render(after)) -} - -func addChange(warn *llms.Warnings, option, model, reason, before, after string) { - switch { - case before == "" || before == after: - return - case after == "": - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: option, Model: model, - Asked: before, Reason: reason, - }) - default: - warn.Add(llms.Warning{ - Kind: llms.WarningSubstitute, Option: option, Model: model, - Asked: before, Sent: after, Reason: reason, - }) - } -} - func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { switch { case reasoning.ClaudeRejectsSampling(model): diff --git a/llms/warning.go b/llms/warning.go index 34fc2495b..92d556ab9 100644 --- a/llms/warning.go +++ b/llms/warning.go @@ -1,6 +1,9 @@ package llms -import "fmt" +import ( + "fmt" + "strconv" +) // WarningKind names what a door did to a caller option on the way to the wire. type WarningKind string @@ -22,6 +25,20 @@ type Warning struct { Reason string } +func renderFloat(v *float64) string { + if v == nil { + return "" + } + return strconv.FormatFloat(*v, 'g', -1, 64) +} + +func renderInt(v *int) string { + if v == nil { + return "" + } + return strconv.Itoa(*v) +} + func (w Warning) String() string { sent := w.Sent if sent == "" { @@ -44,6 +61,33 @@ func (w *Warnings) Add(warning Warning) { w.items = append(w.items, warning) } +// AddFloatChange records an optional float option that the door changed on the +// way to the wire. A nil after means the option never reached it. +func (w *Warnings) AddFloatChange(option, model, reason string, before, after *float64) { + w.addChange(option, model, reason, renderFloat(before), renderFloat(after)) +} + +func (w *Warnings) AddIntChange(option, model, reason string, before, after *int) { + w.addChange(option, model, reason, renderInt(before), renderInt(after)) +} + +func (w *Warnings) addChange(option, model, reason, before, after string) { + switch { + case before == "" || before == after: + return + case after == "": + w.Add(Warning{ + Kind: WarningDrop, Option: option, Model: model, + Asked: before, Reason: reason, + }) + default: + w.Add(Warning{ + Kind: WarningSubstitute, Option: option, Model: model, + Asked: before, Sent: after, Reason: reason, + }) + } +} + func (w *Warnings) List() []Warning { if w == nil { return nil From ff63ffd7f5f581cc37eb15f3903317d755640b05 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:48:25 +0300 Subject: [PATCH 400/618] feat(googleai): report the options this door reads nowhere WithN, WithLogProbs and WithTopLogProbs have no field in the generation config this door builds, so a caller who set them got a plain call and no sign of it. A thinking budget is capped at two thirds of the answer limit, and the gemma-4 family is driven by thinking level, so any effort or budget asked for there goes out as the top level. All four now land in ContentResponse.Warnings, naming the option, what was asked and what went out. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 6 +++ llms/googleai/warnings.go | 66 ++++++++++++++++++++++++ llms/googleai/warnings_test.go | 93 ++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 llms/googleai/warnings.go create mode 100644 llms/googleai/warnings_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 579c7abbb..c5a63acb1 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -172,6 +172,9 @@ func (g *GoogleAI) GenerateContent( }, } + warn := &llms.Warnings{} + reportGoogleAIOptions(warn, opts.GetModel(), opts, tc) + var response *llms.ContentResponse if len(messages) == 1 { @@ -183,6 +186,9 @@ func (g *GoogleAI) GenerateContent( } else { response, err = g.generateFromMessages(ctx, opts.GetModel(), messages, config, &opts) } + if response != nil { + response.Warnings = warn.List() + } if err != nil { return response, err } diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go new file mode 100644 index 000000000..289b12596 --- /dev/null +++ b/llms/googleai/warnings.go @@ -0,0 +1,66 @@ +package googleai + +import ( + "strconv" + + "google.golang.org/genai" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOptions, tc *genai.ThinkingConfig) { + if opts.N != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithN", Model: model, + Asked: strconv.Itoa(*opts.N), + Reason: "the door sends candidate_count and never reads n", + }) + } + if opts.LogProbs != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, + Asked: strconv.FormatBool(*opts.LogProbs), + Reason: "the door's generation config carries no logprobs field", + }) + } + if opts.TopLogProbs != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, + Asked: strconv.Itoa(*opts.TopLogProbs), + Reason: "the door's generation config carries no logprobs field", + }) + } + reportGoogleAIThinking(warn, model, opts, tc) +} + +func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOptions, tc *genai.ThinkingConfig) { + cfg := opts.Reasoning + if cfg == nil || cfg.ResolveMode() != llms.ReasoningOn { + return + } + + if reasoning.GeminiTogglesThinkingByLevel(model) { + asked := string(cfg.GetEffort(opts.GetMaxTokens())) + if cfg.HasExplicitTokens() { + asked = strconv.Itoa(cfg.Tokens) + " tokens" + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: asked, Sent: string(genai.ThinkingLevelHigh), + Reason: "the door drives this family by thinking level and sends its top level whatever was asked", + }) + return + } + + if !cfg.HasExplicitTokens() || tc == nil || tc.ThinkingBudget == nil { + return + } + if sent := int(*tc.ThinkingBudget); sent != cfg.Tokens { + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: model, + Asked: strconv.Itoa(cfg.Tokens), Sent: strconv.Itoa(sent), + Reason: "the thinking budget is capped at two thirds of the answer limit", + }) + } +} diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go new file mode 100644 index 000000000..02e4f2a2b --- /dev/null +++ b/llms/googleai/warnings_test.go @@ -0,0 +1,93 @@ +package googleai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func generateForWarnings(t *testing.T, model string, callOpts ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"hi"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{}}`) + })) + t.Cleanup(server.Close) + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithEndpoint(server.URL), WithDefaultModel(model)) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, callOpts...) + require.NoError(t, err) + return resp +} + +func googleWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestOptionsThisDoorNeverReadsAreReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemini-2.5-flash", + llms.WithN(3), llms.WithLogProbs(true), llms.WithTopLogProbs(2)) + + got := googleWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithN": "3", "WithLogProbs": "true", "WithTopLogProbs": "2", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + require.Equal(t, "gemini-2.5-flash", w.Model) + } +} + +func TestAThinkingBudgetCappedByTheAnswerLimitIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemini-2.5-flash", + llms.WithMaxTokens(1000), llms.WithReasoning(llms.ReasoningHigh, 8000)) + + w, ok := googleWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "8000", w.Asked) + require.Equal(t, "666", w.Sent) +} + +func TestAFamilyDrivenByLevelReportsTheLevelItSubstitutes(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemma-4-27b-it", + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningLow, 0)) + + w, ok := googleWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "low", w.Asked) + require.Equal(t, "HIGH", w.Sent) +} + +func TestAPlainGoogleCallCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemini-2.5-flash", llms.WithTemperature(0.2)) + require.Empty(t, resp.Warnings) +} From 05948f76e35ff144e579acab05104dae3602ab0d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:50:53 +0300 Subject: [PATCH 401/618] feat(ollama): report the caller options this door cannot express WithMinP, WithLogProbs, WithTopLogProbs, WithN, WithCandidateCount and WithToolChoice are read nowhere in this door, so a caller who set them got a plain call. An effort outside ollama's think levels became a bare "think: true", and a thinking token budget had no field to go into. All of them now reach the caller through ContentResponse.Warnings on both the completed and the partial-plus-error path. Co-Authored-By: Claude Opus 5 --- llms/ollama/ollamallm.go | 5 ++ llms/ollama/warnings.go | 80 +++++++++++++++++++++++++++++++ llms/ollama/warnings_test.go | 91 ++++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 llms/ollama/warnings.go create mode 100644 llms/ollama/warnings_test.go diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index e4d8f80cc..435ecb0ba 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -158,6 +158,9 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } + warn := &llms.Warnings{} + reportOllamaOptions(warn, model, opts) + if err := o.processTools(req, opts.Tools); err != nil { return nil, err } @@ -168,10 +171,12 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten if len(partial.Choices) == 0 || isEmptyChoice(partial.Choices[0]) { return nil, err } + partial.Warnings = warn.List() return partial, err } response = o.createContentResponse(resp) + response.Warnings = warn.List() if err = llms.CheckTruncation(response, opts); err != nil { return response, err diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go new file mode 100644 index 000000000..148f7400a --- /dev/null +++ b/llms/ollama/warnings.go @@ -0,0 +1,80 @@ +package ollama + +import ( + "fmt" + "strconv" + + "github.com/ollama/ollama/api" + + "github.com/vxcontrol/langchaingo/llms" +) + +func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOptions) { + const unread = "the door builds no field for it" + + if opts.MinP != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithMinP", Model: model, + Asked: strconv.FormatFloat(*opts.MinP, 'g', -1, 64), + Reason: "the door sends only the min_p set on the client", + }) + } + if opts.LogProbs != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, + Asked: strconv.FormatBool(*opts.LogProbs), Reason: unread, + }) + } + if opts.TopLogProbs != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, + Asked: strconv.Itoa(*opts.TopLogProbs), Reason: unread, + }) + } + if opts.N != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithN", Model: model, + Asked: strconv.Itoa(*opts.N), Reason: unread, + }) + } + if opts.CandidateCount != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithCandidateCount", Model: model, + Asked: strconv.Itoa(*opts.CandidateCount), Reason: unread, + }) + } + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset { + asked := name + if asked == "" { + asked = fmt.Sprintf("kind %d", kind) + } + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithToolChoice", Model: model, + Asked: asked, Reason: unread, + }) + } + reportOllamaThinking(warn, model, opts) +} + +func reportOllamaThinking(warn *llms.Warnings, model string, opts llms.CallOptions) { + cfg := opts.Reasoning + if cfg == nil || cfg.ResolveMode() != llms.ReasoningOn { + return + } + + effort := string(cfg.GetEffort(opts.GetMaxTokens())) + if level := (&api.ThinkValue{Value: effort}); !level.IsValid() { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: effort, Sent: "true", + Reason: "ollama takes a think level from a closed set and this effort is not in it", + }) + } + if cfg.HasExplicitTokens() { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoningTokens", Model: model, + Asked: strconv.Itoa(cfg.Tokens), + Reason: "ollama expresses thinking as a level, so a token budget has nowhere to go", + }) + } +} diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go new file mode 100644 index 000000000..12d51004b --- /dev/null +++ b/llms/ollama/warnings_test.go @@ -0,0 +1,91 @@ +package ollama + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func generateForWarnings(t *testing.T, callOpts ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/x-ndjson") + _, _ = w.Write([]byte(`{"model":"glm-5","message":{"role":"assistant","content":"hi"},` + + `"done":true,"done_reason":"stop"}` + "\n")) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("glm-5")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, callOpts...) + require.NoError(t, err) + return resp +} + +func ollamaWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestOptionsWithNoFieldOnThisDoorAreReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithMinP(0.05), llms.WithLogProbs(true), llms.WithTopLogProbs(2), + llms.WithN(2), llms.WithCandidateCount(3), + llms.WithToolChoice(llms.ToolChoice{ + Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}, + })) + + got := ollamaWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithMinP": "0.05", "WithLogProbs": "true", "WithTopLogProbs": "2", + "WithN": "2", "WithCandidateCount": "3", "WithToolChoice": "get_weather", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + require.Equal(t, "glm-5", w.Model) + } +} + +func TestAnEffortOllamaHasNoLevelForIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithReasoning(llms.ReasoningXHigh, 0)) + + w, ok := ollamaWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "xhigh", w.Asked) + require.Equal(t, "true", w.Sent) +} + +func TestAThinkingTokenBudgetHasNowhereToGoOnOllama(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningHigh, 2048)) + + w, ok := ollamaWarningsByOption(resp.Warnings)["WithReasoningTokens"] + require.True(t, ok, "no reasoning-tokens warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "2048", w.Asked) +} + +func TestAPlainOllamaCallCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithTemperature(0.2)) + require.Empty(t, resp.Warnings) +} From c3d0da7d0b67d130460f530428aceabe1b4d5365 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:53:46 +0300 Subject: [PATCH 402/618] feat(mistral): report the intents this door has no field for A named tool choice, stop words, a structured-output schema and any reasoning request all vanished on this door: its tool choice is a bare string, it builds no stop field, it reads only the JSON-mode flag and it has no reasoning field at all. Callers saw a normal completion. Each now reaches the caller through ContentResponse.Warnings. Switching thinking off stays silent on purpose: every mistral model disables by omission, so sending nothing is the off wire rather than a lost intent, and a test holds that line. Co-Authored-By: Claude Opus 5 --- llms/mistral/mistralmodel.go | 12 ++++- llms/mistral/warnings.go | 43 ++++++++++++++++++ llms/mistral/warnings_test.go | 85 +++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 llms/mistral/warnings.go create mode 100644 llms/mistral/warnings_test.go diff --git a/llms/mistral/mistralmodel.go b/llms/mistral/mistralmodel.go index e65b5be83..165f2a6ad 100644 --- a/llms/mistral/mistralmodel.go +++ b/llms/mistral/mistralmodel.go @@ -84,10 +84,18 @@ func (m *Model) GenerateContent(ctx context.Context, langchainMessages []llms.Me return nil, err } + warn := &llms.Warnings{} + reportMistralOptions(warn, callOptions.GetModel(), callOptions) + if callOptions.StreamingFunc != nil { - return generateStreamingContent(ctx, m, callOptions, messages, chatOpts) + resp, err = generateStreamingContent(ctx, m, callOptions, messages, chatOpts) + } else { + resp, err = generateNonStreamingContent(m, callOptions, messages, chatOpts) + } + if resp != nil { + resp.Warnings = warn.List() } - return generateNonStreamingContent(m, callOptions, messages, chatOpts) + return resp, err } func setCallOptions(options []llms.CallOption, callOpts *llms.CallOptions) { diff --git a/llms/mistral/warnings.go b/llms/mistral/warnings.go new file mode 100644 index 000000000..c912e8323 --- /dev/null +++ b/llms/mistral/warnings.go @@ -0,0 +1,43 @@ +package mistral + +import ( + "strconv" + "strings" + + "github.com/vxcontrol/langchaingo/llms" +) + +func reportMistralOptions(warn *llms.Warnings, model string, opts *llms.CallOptions) { + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind == llms.ToolChoiceNamed { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithToolChoice", Model: model, + Asked: name, + Reason: "the door's tool choice is a bare string, so a named tool has no shape to travel in", + }) + } + if len(opts.StopWords) > 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithStopWords", Model: model, + Asked: strings.Join(opts.StopWords, ","), + Reason: "the door builds no stop field", + }) + } + if opts.StructuredOutput != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithStructuredOutput", Model: model, + Asked: opts.StructuredOutput.Name, + Reason: "the door reads only the JSON-mode flag, never a schema", + }) + } + if cfg := opts.Reasoning; cfg != nil && cfg.ResolveMode() == llms.ReasoningOn { + asked := string(cfg.GetEffort(opts.GetMaxTokens())) + if cfg.HasExplicitTokens() { + asked = strconv.Itoa(cfg.Tokens) + " tokens" + } + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: asked, + Reason: "the door builds no reasoning field at all", + }) + } +} diff --git a/llms/mistral/warnings_test.go b/llms/mistral/warnings_test.go new file mode 100644 index 000000000..f5685331c --- /dev/null +++ b/llms/mistral/warnings_test.go @@ -0,0 +1,85 @@ +package mistral + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func generateForWarnings(t *testing.T, call ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + m, err := New(WithAPIKey("k"), WithEndpoint(srv.URL), WithModel("mistral-small-latest")) + require.NoError(t, err) + + resp, err := m.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) + require.NoError(t, err) + return resp +} + +func mistralWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestTheDoorReportsEveryIntentItCannotCarry(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithToolChoice(llms.ToolChoice{ + Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}, + }), + llms.WithStopWords([]string{"STOP"}), + llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "answer", Schema: json.RawMessage(`{"type":"object"}`), + }), + llms.WithReasoning(llms.ReasoningHigh, 0), + ) + + got := mistralWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithToolChoice": "get_weather", "WithStopWords": "STOP", + "WithStructuredOutput": "answer", "WithReasoning": "high", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + require.Equal(t, "mistral-small-latest", w.Model) + } +} + +func TestSwitchingThinkingOffOnMistralIsNotALoss(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithReasoningDisabled()) + require.Empty(t, resp.Warnings, + "every mistral model disables by omission, so sending no field is the off wire, not a dropped intent") +} + +func TestAPlainMistralCallCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithTemperature(0.2)) + require.Empty(t, resp.Warnings) +} From 84e0a409eddd77f5736c9395911ba160c2f7004c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:56:38 +0300 Subject: [PATCH 403/618] feat(huggingface): report the options and the messages this door leaves behind MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This door builds seven fields. Everything else a caller can ask for — max tokens, top-k, min length, n, candidate count, the penalties, min-p, logprobs, stop words, tools, functions, a tool choice, a streaming callback, a schema, JSON mode, a response MIME type — is read nowhere, and the prompt is the first part of the first message, so a conversation arrives as its opening line. All of it now reaches the caller through ContentResponse.Warnings, including how many message parts were left behind. Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm.go | 4 ++ llms/huggingface/warnings.go | 97 ++++++++++++++++++++++++++++++ llms/huggingface/warnings_test.go | 93 ++++++++++++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 llms/huggingface/warnings.go create mode 100644 llms/huggingface/warnings_test.go diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index e9f2e8d6f..4ae1895d8 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -52,6 +52,9 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten opt(opts) } + warn := &llms.Warnings{} + reportHuggingFaceOptions(warn, opts.GetModel(), opts, messages) + // Assume we get a single text message msg0 := messages[0] part := msg0.Parts[0] @@ -76,6 +79,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten Truncated: llms.IsTruncated(result.StopReason), }, }, + Warnings: warn.List(), } if err = llms.CheckTruncation(resp, *opts); err != nil { return resp, err diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go new file mode 100644 index 000000000..411fd0259 --- /dev/null +++ b/llms/huggingface/warnings.go @@ -0,0 +1,97 @@ +package huggingface + +import ( + "fmt" + "strconv" + + "github.com/vxcontrol/langchaingo/llms" +) + +func reportHuggingFaceOptions( + warn *llms.Warnings, model string, opts *llms.CallOptions, messages []llms.MessageContent, +) { + const unread = "the door builds no field for it" + + drop := func(option, asked string) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: asked, Reason: unread, + }) + } + dropFloat := func(option string, v *float64) { + if v != nil { + drop(option, strconv.FormatFloat(*v, 'g', -1, 64)) + } + } + dropInt := func(option string, v *int) { + if v != nil { + drop(option, strconv.Itoa(*v)) + } + } + + dropInt("WithMaxTokens", opts.MaxTokens) + dropInt("WithTopK", opts.TopK) + dropInt("WithMinLength", opts.MinLength) + dropInt("WithN", opts.N) + dropInt("WithCandidateCount", opts.CandidateCount) + dropInt("WithTopLogProbs", opts.TopLogProbs) + dropFloat("WithMinP", opts.MinP) + dropFloat("WithRepetitionPenalty", opts.RepetitionPenalty) + dropFloat("WithFrequencyPenalty", opts.FrequencyPenalty) + dropFloat("WithPresencePenalty", opts.PresencePenalty) + + reportHuggingFaceShapedOptions(opts, drop) + reportHuggingFaceMessages(warn, model, messages) +} + +func reportHuggingFaceShapedOptions(opts *llms.CallOptions, drop func(option, asked string)) { + if opts.LogProbs != nil { + drop("WithLogProbs", strconv.FormatBool(*opts.LogProbs)) + } + if len(opts.StopWords) > 0 { + drop("WithStopWords", strconv.Itoa(len(opts.StopWords))+" words") + } + if len(opts.Tools) > 0 { + drop("WithTools", strconv.Itoa(len(opts.Tools))+" tools") + } + if len(opts.Functions) > 0 { + drop("WithFunctions", strconv.Itoa(len(opts.Functions))+" functions") + } + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset { + asked := name + if asked == "" { + asked = fmt.Sprintf("kind %d", kind) + } + drop("WithToolChoice", asked) + } + if opts.StreamingFunc != nil { + drop("WithStreamingFunc", "a callback") + } + if opts.StructuredOutput != nil { + drop("WithStructuredOutput", opts.StructuredOutput.Name) + } + if opts.JSONMode { + drop("WithJSONMode", "true") + } + if opts.ResponseMIMEType != nil { + drop("WithResponseMIMEType", *opts.ResponseMIMEType) + } +} + +func reportHuggingFaceMessages(warn *llms.Warnings, model string, messages []llms.MessageContent) { + carried := 0 + if len(messages) > 0 && len(messages[0].Parts) > 0 { + carried = 1 + } + total := 0 + for _, m := range messages { + total += len(m.Parts) + } + if total > carried { + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "messages", Model: model, + Asked: strconv.Itoa(total) + " parts", Sent: strconv.Itoa(carried) + " part", + Reason: "the door sends the first part of the first message as the whole prompt", + }) + } +} diff --git a/llms/huggingface/warnings_test.go b/llms/huggingface/warnings_test.go new file mode 100644 index 000000000..2cbd02df6 --- /dev/null +++ b/llms/huggingface/warnings_test.go @@ -0,0 +1,93 @@ +package huggingface + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func generateForWarnings(t *testing.T, messages []llms.MessageContent, call ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("Qwen/Qwen3-32B")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), messages, call...) + require.NoError(t, err) + return resp +} + +func hfWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func oneMessage() []llms.MessageContent { + return []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} +} + +func TestEveryOptionWithNoFieldOnThisDoorIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, oneMessage(), + llms.WithMaxTokens(100), llms.WithTopK(5), llms.WithMinLength(2), + llms.WithN(2), llms.WithCandidateCount(3), llms.WithTopLogProbs(4), + llms.WithMinP(0.1), llms.WithRepetitionPenalty(1.1), + llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.25), + llms.WithLogProbs(true), llms.WithStopWords([]string{"STOP"}), + llms.WithJSONMode(), + ) + + got := hfWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithMaxTokens": "100", "WithTopK": "5", "WithMinLength": "2", + "WithN": "2", "WithCandidateCount": "3", "WithTopLogProbs": "4", + "WithMinP": "0.1", "WithRepetitionPenalty": "1.1", + "WithFrequencyPenalty": "0.5", "WithPresencePenalty": "0.25", + "WithLogProbs": "true", "WithStopWords": "1 words", "WithJSONMode": "true", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + require.Equal(t, "Qwen/Qwen3-32B", w.Model) + } +} + +func TestTheMessagesThisDoorLeavesBehindAreReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeSystem, "be brief"), + llms.TextParts(llms.ChatMessageTypeHuman, "hi", "and again"), + }) + + w, ok := hfWarningsByOption(resp.Warnings)["messages"] + require.True(t, ok, "no messages warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "3 parts", w.Asked) + require.Equal(t, "1 part", w.Sent) +} + +func TestAPlainHuggingFaceCallCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, oneMessage(), llms.WithTemperature(0.2)) + require.Empty(t, resp.Warnings) +} From f739eb62a2282e80f175d596a8dffe5df20a3013 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 04:59:40 +0300 Subject: [PATCH 404/618] feat(bedrock): report what the legacy payloads have no field for Six of the seven legacy InvokeModel payloads carry no tools and no tool choice, five carry no top_k, and meta's carries no stop sequences. A caller who set any of them got a plain completion with no sign that the request had been reshaped. CreateCompletion now fills ContentResponse.Warnings from the payload each provider actually builds, so the reporting lives at the single dispatch point rather than in seven builders. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient.go | 25 +++-- .../internal/bedrockclient/warnings.go | 51 +++++++++ .../internal/bedrockclient/warnings_test.go | 101 ++++++++++++++++++ 3 files changed, 170 insertions(+), 7 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/warnings.go create mode 100644 llms/bedrock/internal/bedrockclient/warnings_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient.go b/llms/bedrock/internal/bedrockclient/bedrockclient.go index 9c1a7d9f6..104d7047e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient.go @@ -118,24 +118,35 @@ func (c *Client) CreateCompletion(ctx context.Context, reasoning.ResolveOff(modelID, reasoning.ProviderBedrock) == reasoning.OffUnsupported { return nil, &reasoning.ErrReasoningOffUnsupported{Model: modelID} } + warn := &llms.Warnings{} + reportLegacyOptions(warn, provider, modelID, options) + + var ( + resp *llms.ContentResponse + err error + ) switch provider { case "ai21": - return createAi21Completion(ctx, c.client, modelID, messages, options) + resp, err = createAi21Completion(ctx, c.client, modelID, messages, options) case "amazon": - return createAmazonCompletion(ctx, c.client, modelID, messages, options) + resp, err = createAmazonCompletion(ctx, c.client, modelID, messages, options) case "nova": - return createNovaCompletion(ctx, c.client, modelID, messages, options) + resp, err = createNovaCompletion(ctx, c.client, modelID, messages, options) case "anthropic": - return createAnthropicCompletion(ctx, c.client, modelID, messages, options) + resp, err = createAnthropicCompletion(ctx, c.client, modelID, messages, options) case "cohere": - return createCohereCompletion(ctx, c.client, modelID, messages, options) + resp, err = createCohereCompletion(ctx, c.client, modelID, messages, options) case "meta": - return createMetaCompletion(ctx, c.client, modelID, messages, options) + resp, err = createMetaCompletion(ctx, c.client, modelID, messages, options) case "deepseek": - return createDeepSeekCompletion(ctx, c.client, modelID, messages, options) + resp, err = createDeepSeekCompletion(ctx, c.client, modelID, messages, options) default: return nil, errors.New("unsupported provider") } + if resp != nil { + resp.Warnings = warn.List() + } + return resp, err } // Helper function to process input text chat diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go new file mode 100644 index 000000000..6c7082c05 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -0,0 +1,51 @@ +package bedrockclient + +import ( + "strconv" + "strings" + + "github.com/vxcontrol/langchaingo/llms" +) + +// A provider is listed here only where its own payload struct has the field — +// not where the vendor supports the option. +var ( + legacyCarriesTools = map[string]bool{"anthropic": true} + legacyCarriesTopK = map[string]bool{"anthropic": true, "cohere": true} + legacyCarriesStopWords = map[string]bool{"meta": false} +) + +func reportLegacyOptions(warn *llms.Warnings, provider, modelID string, options llms.CallOptions) { + reason := "the legacy " + provider + " payload has no field for it" + + if !legacyCarriesTools[provider] { + if len(options.Tools) > 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTools", Model: modelID, + Asked: strconv.Itoa(len(options.Tools)) + " tools", Reason: reason, + }) + } + if kind, name := llms.ClassifyToolChoice(options.ToolChoice); kind != llms.ToolChoiceUnset { + asked := name + if asked == "" { + asked = "kind " + strconv.Itoa(int(kind)) + } + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithToolChoice", Model: modelID, + Asked: asked, Reason: reason, + }) + } + } + if !legacyCarriesTopK[provider] && options.TopK != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTopK", Model: modelID, + Asked: strconv.Itoa(*options.TopK), Reason: reason, + }) + } + if carries, known := legacyCarriesStopWords[provider]; known && !carries && len(options.StopWords) > 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithStopWords", Model: modelID, + Asked: strings.Join(options.StopWords, ","), Reason: reason, + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/warnings_test.go b/llms/bedrock/internal/bedrockclient/warnings_test.go new file mode 100644 index 000000000..4cfbd3cb2 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/warnings_test.go @@ -0,0 +1,101 @@ +package bedrockclient + +import ( + "context" + "io" + "net/http" + "strings" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +type cannedTransport struct{ body string } + +func (c *cannedTransport) Do(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(strings.NewReader(c.body)), + Header: http.Header{"Content-Type": []string{"application/json"}}, + Request: req, + }, nil +} + +func legacyClientAnswering(body string) *Client { + return &Client{client: bedrockruntime.New(bedrockruntime.Options{ + Region: "us-east-1", + Credentials: credentials.NewStaticCredentialsProvider("k", "s", ""), + HTTPClient: &cannedTransport{body: body}, + RetryMaxAttempts: 1, + })} +} + +func legacyCall(t *testing.T, model string, options llms.CallOptions) *llms.ContentResponse { + t.Helper() + + options.Model = aws.String(model) + resp, err := legacyClientAnswering(`{"generation":"hi","stop_reason":"stop"}`). + CreateCompletion(context.Background(), model, + []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, options) + require.NoError(t, err) + return resp +} + +func legacyWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestALegacyPayloadWithoutAFieldReportsWhatItDropped(t *testing.T) { + t.Parallel() + + const model = "meta.llama3-70b-instruct-v1:0" + topK := 40 + resp := legacyCall(t, model, llms.CallOptions{ + TopK: &topK, + StopWords: []string{"STOP"}, + Tools: []llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{Name: "get_weather"}}}, + ToolChoice: llms.ToolChoice{ + Type: "function", Function: &llms.FunctionReference{Name: "get_weather"}, + }, + }) + + got := legacyWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithTopK": "40", "WithStopWords": "STOP", + "WithTools": "1 tools", "WithToolChoice": "get_weather", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + require.Equal(t, model, w.Model) + } +} + +func TestACallThatAskedForNothingCarriesNoWarnings(t *testing.T) { + t.Parallel() + + resp := legacyCall(t, "meta.llama3-70b-instruct-v1:0", llms.CallOptions{}) + require.Empty(t, resp.Warnings) +} + +func TestAPayloadThatCarriesTopKReportsNoTopKLoss(t *testing.T) { + t.Parallel() + + topK := 40 + cohere := legacyClientAnswering(`{"generations":[{"text":"hi","finish_reason":"COMPLETE"}]}`) + got, err := cohere.CreateCompletion(context.Background(), "cohere.command-text-v14", + []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + llms.CallOptions{Model: aws.String("cohere.command-text-v14"), TopK: &topK}) + require.NoError(t, err) + require.NotContains(t, legacyWarningsByOption(got.Warnings), "WithTopK") +} From a0c2b21651bd34430b368a763baa2cd669e94842 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 05:03:11 +0300 Subject: [PATCH 405/618] feat(bedrock): report how the converse request differs from what was asked Budget thinking pins temperature to 1.0, drops top_p and raises the answer limit; adaptive thinking and a clearing Nova effort drop sampling outright; and a model that takes temperature or top_p but not both keeps the temperature and drops the other. None of it reached the caller. CreateCompletionConverse now diffs the request it built against the values it was given and fills ContentResponse.Warnings from the difference, comparing at float32 so the narrowing the SDK does is not mistaken for a substitution. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 6 + .../bedrockclient/converse_warnings.go | 80 +++++++++++++ .../bedrockclient/converse_warnings_test.go | 108 ++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 llms/bedrock/internal/bedrockclient/converse_warnings.go create mode 100644 llms/bedrock/internal/bedrockclient/converse_warnings_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 41c5e3d4e..b71324bb0 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -46,12 +46,18 @@ func (c *ConverseClient) CreateCompletionConverse(ctx context.Context, input *Co return nil, fmt.Errorf("failed to build converse input: %w", err) } + warn := &llms.Warnings{} + reportConverseInput(warn, input, converseInput) + var resp *llms.ContentResponse if input.StreamingFunc != nil { resp, err = c.handleStreamingResponse(ctx, converseInput, input.StreamingFunc) } else { resp, err = c.handleNonStreamingResponse(ctx, converseInput) } + if resp != nil { + resp.Warnings = warn.List() + } if err != nil { return resp, err } diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go new file mode 100644 index 000000000..bd60e0985 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -0,0 +1,80 @@ +package bedrockclient + +import ( + "strconv" + + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + + "github.com/vxcontrol/langchaingo/llms" +) + +func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedrockruntime.ConverseInput) { + if built == nil { + return + } + model := input.ModelID + const reshaped = "the door did not put it on the converse request" + + cfg := built.InferenceConfig + if input.Temperature != nil { + sent := (*float32)(nil) + if cfg != nil { + sent = cfg.Temperature + } + reportConverseFloat(warn, "WithTemperature", model, reshaped, float32(*input.Temperature), sent) + } + if input.TopP != nil { + sent := (*float32)(nil) + if cfg != nil { + sent = cfg.TopP + } + reportConverseFloat(warn, "WithTopP", model, reshaped, float32(*input.TopP), sent) + } + if input.MaxTokens != nil && *input.MaxTokens > 0 { + var sent *int32 + if cfg != nil { + sent = cfg.MaxTokens + } + switch { + case sent == nil: + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithMaxTokens", Model: model, + Asked: strconv.Itoa(*input.MaxTokens), Reason: reshaped, + }) + case int(*sent) != *input.MaxTokens: + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithMaxTokens", Model: model, + Asked: strconv.Itoa(*input.MaxTokens), Sent: strconv.FormatInt(int64(*sent), 10), + Reason: reshaped, + }) + } + } + if len(input.StopSequences) > 0 && (cfg == nil || len(cfg.StopSequences) == 0) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithStopWords", Model: model, + Asked: strconv.Itoa(len(input.StopSequences)) + " words", Reason: reshaped, + }) + } + if len(input.Tools) > 0 && built.ToolConfig == nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTools", Model: model, + Asked: strconv.Itoa(len(input.Tools)) + " tools", Reason: reshaped, + }) + } +} + +func reportConverseFloat(warn *llms.Warnings, option, model, reason string, asked float32, sent *float32) { + render := func(v float32) string { return strconv.FormatFloat(float64(v), 'g', -1, 32) } + switch { + case sent == nil: + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: render(asked), Reason: reason, + }) + case *sent != asked: + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: option, Model: model, + Asked: render(asked), Sent: render(*sent), Reason: reason, + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go new file mode 100644 index 000000000..9e83b4b3a --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -0,0 +1,108 @@ +package bedrockclient + +import ( + "context" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime/types" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func converseCall(t *testing.T, in *ConverseInput) *llms.ContentResponse { + t.Helper() + + mockClient := &MockBedrockRuntimeClient{} + mockClient.On("Converse", mock.Anything, mock.Anything, mock.Anything).Return( + &bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "hi"}}, + }, + }, + StopReason: types.StopReasonEndTurn, + }, nil) + + resp, err := NewConverseClient(mockClient).CreateCompletionConverse(context.Background(), in) + require.NoError(t, err) + return resp +} + +func converseWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestConverseReportsTheSamplingBudgetThinkingReshapes(t *testing.T) { + t.Parallel() + + temperature, topP, maxTokens := 0.2, 0.9, 1000 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + Temperature: &temperature, + TopP: &topP, + MaxTokens: &maxTokens, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningMedium}, + }) + + got := converseWarningsByOption(resp.Warnings) + + temp, ok := got["WithTemperature"] + require.True(t, ok, "no temperature warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, temp.Kind) + require.Equal(t, "0.2", temp.Asked) + require.Equal(t, "1", temp.Sent) + + tp, ok := got["WithTopP"] + require.True(t, ok, "no top-p warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, tp.Kind) + require.Empty(t, tp.Sent) + + limit, ok := got["WithMaxTokens"] + require.True(t, ok, "no max-tokens warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, limit.Kind) + require.Equal(t, "1000", limit.Asked) + require.NotEqual(t, limit.Asked, limit.Sent) +} + +func TestConverseReportsTopPDroppedForTemperature(t *testing.T) { + t.Parallel() + + temperature, topP, maxTokens := 0.2, 0.9, 1000 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + Temperature: &temperature, + TopP: &topP, + MaxTokens: &maxTokens, + }) + + got := converseWarningsByOption(resp.Warnings) + tp, ok := got["WithTopP"] + require.True(t, ok, "no top-p warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, tp.Kind) + require.Equal(t, "0.9", tp.Asked) + require.NotContains(t, got, "WithTemperature", "the temperature this model keeps is not a loss") +} + +func TestConverseCarriesAPlainRequestWithoutWarnings(t *testing.T) { + t.Parallel() + + temperature, maxTokens := 0.2, 1000 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + Temperature: &temperature, + MaxTokens: &maxTokens, + }) + + require.Empty(t, resp.Warnings) +} From 7b1af51937dbe85eadb23507a874e759ab27b7ee Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 05:17:47 +0300 Subject: [PATCH 406/618] test(reasoning): pair every provider constant with the door that passes it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Provider enum could grow a constant that no adapter ever passes, and nothing would notice — the question of whether ollama and mistral belong in it had no mechanical answer. A sentinel closes the enum and a test pairs each constant with its door, so a new one has to arrive with a caller. The mistral half of that question is settled by the catalogue rather than by a new constant: every mistral model resolves to OffOmit, so its door disabling by omission is correct, and a test holds that. Co-Authored-By: Claude Opus 5 --- llms/reasoning/off.go | 3 +++ llms/reasoning/provider_enum_test.go | 38 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 llms/reasoning/provider_enum_test.go diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index b5c600925..011ea34e0 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -15,6 +15,9 @@ const ( ProviderBedrock ProviderOpenAI ProviderGoogleAI + + // providerCount must stay last: a new provider goes above it. + providerCount ) // OffWire is how a provider expresses "thinking off" for a given model. It is the diff --git a/llms/reasoning/provider_enum_test.go b/llms/reasoning/provider_enum_test.go new file mode 100644 index 000000000..3b1d63c7f --- /dev/null +++ b/llms/reasoning/provider_enum_test.go @@ -0,0 +1,38 @@ +package reasoning + +import "testing" + +func TestEveryProviderConstantHasADoorThatPassesIt(t *testing.T) { + t.Parallel() + + doors := map[Provider]string{ + ProviderUnknown: "callers with no door of their own", + ProviderAnthropic: "llms/anthropic", + ProviderBedrock: "llms/bedrock", + ProviderOpenAI: "llms/openai", + ProviderGoogleAI: "llms/googleai", + } + + if len(doors) != int(providerCount) { + t.Fatalf("the enum holds %d providers, this test pairs %d of them with a door", + int(providerCount), len(doors)) + } + for p := ProviderUnknown; p < providerCount; p++ { + if doors[p] == "" { + t.Errorf("provider %d has no door listed", int(p)) + } + } +} + +func TestEveryMistralModelDisablesByOmission(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "mistral-small-latest", "mistral-medium-latest", + "mistral-large-latest", "magistral-medium-latest", + } { + if got := ResolveOff(model, ProviderUnknown); got != OffOmit { + t.Errorf("ResolveOff(%q) = %v, want OffOmit", model, got) + } + } +} From fed62346ba3d2b576e97b593127778d691c6a948 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 06:04:12 +0300 Subject: [PATCH 407/618] fix(llms): stop three warnings from telling the caller something untrue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A gemma-4 call that asked for the level the door sends was told its level had been substituted. The ollama door named the lost option WithReasoningTokens, which no caller can write — the budget rides on WithReasoning. The googleai door blamed a missing logprobs field on a generation config that has two of them; the door simply never sets them. The converse door handed a substituted value the reason it had been left off the request entirely. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/converse_warnings.go | 24 +++++++++++-------- llms/googleai/warnings.go | 18 ++++++++------ llms/googleai/warnings_test.go | 10 ++++++++ llms/ollama/warnings.go | 2 +- llms/ollama/warnings_test.go | 4 ++-- 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index bd60e0985..04b9844e8 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -13,7 +13,10 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro return } model := input.ModelID - const reshaped = "the door did not put it on the converse request" + const ( + omitted = "the door left it off the converse request" + different = "the door put a different value on the converse request" + ) cfg := built.InferenceConfig if input.Temperature != nil { @@ -21,14 +24,14 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro if cfg != nil { sent = cfg.Temperature } - reportConverseFloat(warn, "WithTemperature", model, reshaped, float32(*input.Temperature), sent) + reportConverseFloat(warn, "WithTemperature", model, float32(*input.Temperature), sent) } if input.TopP != nil { sent := (*float32)(nil) if cfg != nil { sent = cfg.TopP } - reportConverseFloat(warn, "WithTopP", model, reshaped, float32(*input.TopP), sent) + reportConverseFloat(warn, "WithTopP", model, float32(*input.TopP), sent) } if input.MaxTokens != nil && *input.MaxTokens > 0 { var sent *int32 @@ -39,42 +42,43 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro case sent == nil: warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMaxTokens", Model: model, - Asked: strconv.Itoa(*input.MaxTokens), Reason: reshaped, + Asked: strconv.Itoa(*input.MaxTokens), Reason: omitted, }) case int(*sent) != *input.MaxTokens: warn.Add(llms.Warning{ Kind: llms.WarningClamp, Option: "WithMaxTokens", Model: model, Asked: strconv.Itoa(*input.MaxTokens), Sent: strconv.FormatInt(int64(*sent), 10), - Reason: reshaped, + Reason: different, }) } } if len(input.StopSequences) > 0 && (cfg == nil || len(cfg.StopSequences) == 0) { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithStopWords", Model: model, - Asked: strconv.Itoa(len(input.StopSequences)) + " words", Reason: reshaped, + Asked: strconv.Itoa(len(input.StopSequences)) + " words", Reason: omitted, }) } if len(input.Tools) > 0 && built.ToolConfig == nil { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTools", Model: model, - Asked: strconv.Itoa(len(input.Tools)) + " tools", Reason: reshaped, + Asked: strconv.Itoa(len(input.Tools)) + " tools", Reason: omitted, }) } } -func reportConverseFloat(warn *llms.Warnings, option, model, reason string, asked float32, sent *float32) { +func reportConverseFloat(warn *llms.Warnings, option, model string, asked float32, sent *float32) { render := func(v float32) string { return strconv.FormatFloat(float64(v), 'g', -1, 32) } switch { case sent == nil: warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: option, Model: model, - Asked: render(asked), Reason: reason, + Asked: render(asked), Reason: "the door left it off the converse request", }) case *sent != asked: warn.Add(llms.Warning{ Kind: llms.WarningSubstitute, Option: option, Model: model, - Asked: render(asked), Sent: render(*sent), Reason: reason, + Asked: render(asked), Sent: render(*sent), + Reason: "the door put a different value on the converse request", }) } } diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 289b12596..18a6fe2cb 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -2,6 +2,7 @@ package googleai import ( "strconv" + "strings" "google.golang.org/genai" @@ -21,14 +22,14 @@ func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOpti warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, Asked: strconv.FormatBool(*opts.LogProbs), - Reason: "the door's generation config carries no logprobs field", + Reason: "the door never sets logprobs on the generation config it builds", }) } if opts.TopLogProbs != nil { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, Asked: strconv.Itoa(*opts.TopLogProbs), - Reason: "the door's generation config carries no logprobs field", + Reason: "the door never sets logprobs on the generation config it builds", }) } reportGoogleAIThinking(warn, model, opts, tc) @@ -41,15 +42,18 @@ func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOpt } if reasoning.GeminiTogglesThinkingByLevel(model) { + sent := string(genai.ThinkingLevelHigh) asked := string(cfg.GetEffort(opts.GetMaxTokens())) if cfg.HasExplicitTokens() { asked = strconv.Itoa(cfg.Tokens) + " tokens" } - warn.Add(llms.Warning{ - Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, - Asked: asked, Sent: string(genai.ThinkingLevelHigh), - Reason: "the door drives this family by thinking level and sends its top level whatever was asked", - }) + if !strings.EqualFold(asked, sent) { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: asked, Sent: sent, + Reason: "the door drives this family by thinking level and sends its top level whatever was asked", + }) + } return } diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go index 02e4f2a2b..5255bfdc5 100644 --- a/llms/googleai/warnings_test.go +++ b/llms/googleai/warnings_test.go @@ -85,6 +85,16 @@ func TestAFamilyDrivenByLevelReportsTheLevelItSubstitutes(t *testing.T) { require.Equal(t, "HIGH", w.Sent) } +func TestTheLevelThisFamilyRunsAtIsNotASubstitution(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemma-4-27b-it", + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningHigh, 0)) + + require.Empty(t, resp.Warnings, + "the caller asked for the level the door sends, so nothing was substituted") +} + func TestAPlainGoogleCallCarriesNoWarnings(t *testing.T) { t.Parallel() diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 148f7400a..3b3b0e5b0 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -72,7 +72,7 @@ func reportOllamaThinking(warn *llms.Warnings, model string, opts llms.CallOptio } if cfg.HasExplicitTokens() { warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithReasoningTokens", Model: model, + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, Asked: strconv.Itoa(cfg.Tokens), Reason: "ollama expresses thinking as a level, so a token budget has nowhere to go", }) diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 12d51004b..f110e4778 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -77,8 +77,8 @@ func TestAThinkingTokenBudgetHasNowhereToGoOnOllama(t *testing.T) { resp := generateForWarnings(t, llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningHigh, 2048)) - w, ok := ollamaWarningsByOption(resp.Warnings)["WithReasoningTokens"] - require.True(t, ok, "no reasoning-tokens warning in %v", resp.Warnings) + w, ok := ollamaWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "2048", w.Asked) } From e686ec33e8694dcf5582a6e958b43eb330d18473 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 06:07:07 +0300 Subject: [PATCH 408/618] fix(openai): report the reasoning this door lowers, drops or caps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three losses escaped the sampling diff. The penalties are erased for the grok family inside createChatRequest, 195 lines before the snapshot that was meant to catch them, so a caller who set both got neither and heard nothing. An effort above what the model records as acceptable was lowered — the very case PAGI-133 names — with no word to the caller, and on a model that sends no effort field at all the request simply went out plain. A thinking budget was cut to fit the answer limit on both the DashScope and the Claude path without a warning, though googleai reports the same cut on its own door. Each is reported from the value the caller actually set: an effort the door resolved for a silent caller is not something to warn about. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 11 +++- llms/openai/sampling_warnings.go | 42 +++++++++++++++ llms/openai/sampling_warnings_test.go | 74 +++++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 2 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 3d5b1ef47..ef374dd31 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -283,7 +283,10 @@ func (o *LLM) createChatRequest( ExtraBody: getExtraBody(&opts), } - if reasoning.RejectsPenalties(o.effectiveModel(opts)) { + if model := o.effectiveModel(opts); reasoning.RejectsPenalties(model) { + const refused = "the door does not send the penalties on this model family" + warn.AddFloatChange("WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) + warn.AddFloatChange("WithPresencePenalty", model, refused, req.PresencePenalty, nil) req.FrequencyPenalty = nil req.PresencePenalty = nil } @@ -382,22 +385,26 @@ func (o *LLM) setReasoning( } acceptsEffort := reasoning.AcceptsEffortWire(model) - effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))) + askedEffort := string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) + effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(askedEffort) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone + reportOpenAIEffort(warn, model, opts.Reasoning, string(reasoningEffort), sendsEffort) if toolsRule != reasoning.EffortToolsFree { return "", &reasoning.ErrEffortWithTools{Model: model, Effort: string(reasoningEffort)} } if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && reasoning.DashScopeTakesThinkingBudget(model) { req.ThinkingBudget = &reasoningTokens + reportOpenAIBudget(warn, model, opts.Reasoning, reasoningTokens) return wireEffortOf(true, reasoningEffort), nil } budget := 0 if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { budget = reasoning.ClaudeClampBudget(model, reasoningTokens) } + reportOpenAIBudget(warn, model, opts.Reasoning, budget) effortBudget := 0 if reasoning.ClaudeSpendsThinkingBudget(model) { effortBudget = llms.ReasoningEffortBudget(reasoningEffort, opts.GetMaxTokens()) diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 3d6a8fd51..3845dbc09 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -69,3 +69,45 @@ func samplingReason(model string, opts llms.CallOptions, wireEffort string) stri return "the model does not accept this combination of sampling parameters" } } + +func reportOpenAIEffort(warn *llms.Warnings, model string, cfg *llms.ReasoningConfig, sent string, sends bool) { + if cfg == nil { + return + } + asked := string(cfg.Effort) + switch { + case asked == "" || asked == string(llms.ReasoningNone): + return + case !sends: + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: asked, Reason: "the door sends no effort field on this model", + }) + case asked != sent: + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: model, + Asked: asked, Sent: sent, + Reason: "the door sends only the efforts it records this model as accepting", + }) + } +} + +func reportOpenAIBudget(warn *llms.Warnings, model string, cfg *llms.ReasoningConfig, sent int) { + if cfg == nil || !cfg.HasExplicitTokens() || sent == cfg.Tokens { + return + } + switch { + case sent <= 0: + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: strconv.Itoa(cfg.Tokens) + " tokens", + Reason: "the door sends no thinking budget on this model", + }) + default: + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: model, + Asked: strconv.Itoa(cfg.Tokens) + " tokens", Sent: strconv.Itoa(sent) + " tokens", + Reason: "the thinking budget is capped by the answer limit and by what the model records", + }) + } +} diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index bfc7b5b16..394cc660c 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -78,3 +78,77 @@ func TestAnUntouchedRequestCarriesNoWarnings(t *testing.T) { t.Errorf("want no warnings on a model that keeps sampling, got %v", resp.Warnings) } } + +func TestPenaltiesRefusedByTheFamilyAreReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "grok-4", + llms.WithFrequencyPenalty(0.7), llms.WithPresencePenalty(0.4)) + + for option, asked := range map[string]string{ + "WithFrequencyPenalty": "0.7", "WithPresencePenalty": "0.4", + } { + w := warningFor(t, resp, option) + if w.Kind != llms.WarningDrop || w.Asked != asked || w.Sent != "" { + t.Errorf("%s warning = %+v", option, w) + } + } +} + +func TestAnEffortLoweredToWhatTheModelTakesIsReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-5.1", llms.WithReasoning(llms.ReasoningXHigh, 0)) + + w := warningFor(t, resp, "WithReasoning") + if w.Kind != llms.WarningClamp || w.Asked != "xhigh" || w.Sent != "high" { + t.Errorf("reasoning warning = %+v", w) + } +} + +func TestAnEffortOnAModelThatSendsNoneIsReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-4o", llms.WithReasoning(llms.ReasoningHigh, 0)) + + w := warningFor(t, resp, "WithReasoning") + if w.Kind != llms.WarningDrop || w.Asked != "high" || w.Sent != "" { + t.Errorf("reasoning warning = %+v", w) + } +} + +func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "claude-sonnet-4-5", + llms.WithMaxTokens(1000), llms.WithReasoning(llms.ReasoningMedium, 4096)) + + w := warningFor(t, resp, "WithMaxTokens") + if w.Kind != llms.WarningClamp || w.Asked != "1000" { + t.Errorf("max-tokens warning = %+v", w) + } + if w.Sent == w.Asked { + t.Errorf("max-tokens warning reports no change: %+v", w) + } +} + +func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { + t.Parallel() + + for _, model := range []string{"qwen3-max", "claude-sonnet-4-5"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, model, + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) + + w := warningFor(t, resp, "WithReasoning") + if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" { + t.Fatalf("reasoning warning = %+v (all: %v)", w, resp.Warnings) + } + if w.Sent == w.Asked || w.Sent == "" { + t.Errorf("reasoning warning reports no cut: %+v", w) + } + }) + } +} From 9c0d9f2dada95520936b82593a0faf9eee767c88 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 06:08:38 +0300 Subject: [PATCH 409/618] fix(anthropic,googleai): close the parity gaps the doors left open The anthropic door reported only the four sampling values it sends; a caller who set min-p, a repetition, frequency or presence penalty, n, a candidate count or logprobs got a plain request and no sign of it, though sibling doors report every one of them. Its thinking budget was also cut to fit the answer limit in silence. googleai had the same hole for min-p and the repetition penalty while already reporting n and logprobs beside them. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 69 ++++++++++++++++++++++++ llms/anthropic/sampling_warnings_test.go | 49 +++++++++++++++-- llms/googleai/warnings.go | 14 +++++ llms/googleai/warnings_test.go | 17 ++++++ 4 files changed, 145 insertions(+), 4 deletions(-) diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index e1df16856..69e8244ac 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -8,11 +8,80 @@ import ( "github.com/vxcontrol/langchaingo/llms/reasoning" ) +func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOptions) { + const unread = "the door builds no field for it" + + drop := func(option, asked string) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: asked, Reason: unread, + }) + } + for _, o := range []struct { + option string + value *float64 + }{ + {"WithMinP", opts.MinP}, + {"WithRepetitionPenalty", opts.RepetitionPenalty}, + {"WithFrequencyPenalty", opts.FrequencyPenalty}, + {"WithPresencePenalty", opts.PresencePenalty}, + } { + if o.value != nil { + drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) + } + } + for _, o := range []struct { + option string + value *int + }{ + {"WithN", opts.N}, + {"WithCandidateCount", opts.CandidateCount}, + {"WithTopLogProbs", opts.TopLogProbs}, + } { + if o.value != nil { + drop(o.option, strconv.Itoa(*o.value)) + } + } + if opts.LogProbs != nil { + drop("WithLogProbs", strconv.FormatBool(*opts.LogProbs)) + } +} + +func reportAnthropicBudget(warn *llms.Warnings, model string, opts llms.CallOptions, thinking *anthropicclient.ThinkingPayload) { + cfg := opts.Reasoning + if cfg == nil || !cfg.HasExplicitTokens() { + return + } + sent := 0 + if thinking != nil { + sent = thinking.Budget + } + if sent == cfg.Tokens { + return + } + if sent <= 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: strconv.Itoa(cfg.Tokens) + " tokens", + Reason: "the door sends no thinking budget on this model", + }) + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: model, + Asked: strconv.Itoa(cfg.Tokens) + " tokens", Sent: strconv.Itoa(sent) + " tokens", + Reason: "the thinking budget is capped by the answer limit and by what the model records", + }) +} + func reportAnthropicSampling( warn *llms.Warnings, model string, opts llms.CallOptions, thinking *anthropicclient.ThinkingPayload, temperature, topP *float64, topK *int, maxTokens int, ) { + reportAnthropicUnread(warn, model, opts) + reportAnthropicBudget(warn, model, opts, thinking) + reason := anthropicSamplingReason(model, thinking) warn.AddFloatChange("WithTemperature", model, reason, opts.Temperature, temperature) warn.AddFloatChange("WithTopP", model, reason, opts.TopP, topP) diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index 9ade605c3..fad215d41 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -11,9 +11,13 @@ import ( "github.com/vxcontrol/langchaingo/llms/anthropic" ) -func generateForWarnings(t *testing.T, model string, callOpts ...llms.CallOption) *llms.ContentResponse { +const warningsTestModel = "claude-sonnet-4-5" + +func generateForWarnings(t *testing.T, callOpts ...llms.CallOption) *llms.ContentResponse { t.Helper() + const model = warningsTestModel + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") @@ -50,7 +54,7 @@ func warningsByOption(warnings []llms.Warning) map[string]llms.Warning { func TestThinkingTakesTheSamplingParamsAndSaysSo(t *testing.T) { t.Parallel() - resp := generateForWarnings(t, "claude-sonnet-4-5", + resp := generateForWarnings(t, llms.WithReasoning(llms.ReasoningMedium, 4096), llms.WithMaxTokens(4096), llms.WithTemperature(0.2), @@ -80,7 +84,7 @@ func TestThinkingTakesTheSamplingParamsAndSaysSo(t *testing.T) { func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { t.Parallel() - resp := generateForWarnings(t, "claude-sonnet-4-5", + resp := generateForWarnings(t, llms.WithReasoning(llms.ReasoningMedium, 4096), llms.WithMaxTokens(1000), ) @@ -95,9 +99,46 @@ func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { func TestARequestThatKeepsItsSamplingCarriesNoWarnings(t *testing.T) { t.Parallel() - resp := generateForWarnings(t, "claude-sonnet-4-5", + resp := generateForWarnings(t, llms.WithTemperature(0.2), llms.WithMaxTokens(4096), ) require.Empty(t, resp.Warnings) } + +func TestOptionsThisDoorBuildsNoFieldForAreReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithMinP(0.05), llms.WithRepetitionPenalty(1.1), + llms.WithFrequencyPenalty(0.7), llms.WithPresencePenalty(0.25), + llms.WithN(3), llms.WithCandidateCount(2), + llms.WithLogProbs(true), llms.WithTopLogProbs(4), + ) + + got := warningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithMinP": "0.05", "WithRepetitionPenalty": "1.1", + "WithFrequencyPenalty": "0.7", "WithPresencePenalty": "0.25", + "WithN": "3", "WithCandidateCount": "2", + "WithLogProbs": "true", "WithTopLogProbs": "4", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + } +} + +func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningMedium, 30000)) + + w, ok := warningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "30000 tokens", w.Asked) + require.NotEqual(t, w.Asked, w.Sent) +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 18a6fe2cb..937b834ec 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -18,6 +18,20 @@ func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOpti Reason: "the door sends candidate_count and never reads n", }) } + if opts.MinP != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithMinP", Model: model, + Asked: strconv.FormatFloat(*opts.MinP, 'g', -1, 64), + Reason: "the door's generation config has no min-p field to set", + }) + } + if opts.RepetitionPenalty != nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithRepetitionPenalty", Model: model, + Asked: strconv.FormatFloat(*opts.RepetitionPenalty, 'g', -1, 64), + Reason: "the door's generation config has no repetition-penalty field to set", + }) + } if opts.LogProbs != nil { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go index 5255bfdc5..7ea5ff759 100644 --- a/llms/googleai/warnings_test.go +++ b/llms/googleai/warnings_test.go @@ -101,3 +101,20 @@ func TestAPlainGoogleCallCarriesNoWarnings(t *testing.T) { resp := generateForWarnings(t, "gemini-2.5-flash", llms.WithTemperature(0.2)) require.Empty(t, resp.Warnings) } + +func TestSamplingOptionsWithNoGoogleFieldAreReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemini-2.5-flash", + llms.WithMinP(0.05), llms.WithRepetitionPenalty(1.1)) + + got := googleWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithMinP": "0.05", "WithRepetitionPenalty": "1.1", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + } +} From 78455bcb16617fb2c3db9e3c4b7afae7183efbb5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 06:12:33 +0300 Subject: [PATCH 410/618] fix(bedrock): report the values both doors reshape, not only the missing fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legacy reporter compared caller options against a table of which payload has which field, so on the default anthropic path — the one a plain bedrock.New takes — a request whose temperature was pinned to 1, whose top_p and top_k were dropped and whose answer limit was doubled for a thinking budget came back with no warnings at all. It now diffs the payload the builder actually produced. The converse reporter read temperature, top_p, max tokens, stop words and tools but never top_k, which that door drops for every non-anthropic model and for anthropic while thinking — the same loss its legacy sibling already reported. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient.go | 2 +- .../bedrockclient/converse_warnings.go | 23 ++++++++ .../bedrockclient/converse_warnings_test.go | 30 ++++++++++ .../bedrockclient/provider_anthropic.go | 3 + .../internal/bedrockclient/warnings.go | 57 +++++++++++++++++++ .../internal/bedrockclient/warnings_test.go | 45 ++++++++++++++- 6 files changed, 158 insertions(+), 2 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient.go b/llms/bedrock/internal/bedrockclient/bedrockclient.go index 104d7047e..66d8c9430 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient.go @@ -133,7 +133,7 @@ func (c *Client) CreateCompletion(ctx context.Context, case "nova": resp, err = createNovaCompletion(ctx, c.client, modelID, messages, options) case "anthropic": - resp, err = createAnthropicCompletion(ctx, c.client, modelID, messages, options) + resp, err = createAnthropicCompletion(ctx, c.client, modelID, messages, options, warn) case "cohere": resp, err = createCohereCompletion(ctx, c.client, modelID, messages, options) case "meta": diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 04b9844e8..9e1830368 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -1,6 +1,7 @@ package bedrockclient import ( + "encoding/json" "strconv" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" @@ -58,6 +59,12 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro Asked: strconv.Itoa(len(input.StopSequences)) + " words", Reason: omitted, }) } + if input.TopK != nil && !converseCarriesTopK(built) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithTopK", Model: model, + Asked: strconv.Itoa(*input.TopK), Reason: omitted, + }) + } if len(input.Tools) > 0 && built.ToolConfig == nil { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTools", Model: model, @@ -66,6 +73,22 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro } } +func converseCarriesTopK(built *bedrockruntime.ConverseInput) bool { + if built.AdditionalModelRequestFields == nil { + return false + } + raw, err := built.AdditionalModelRequestFields.MarshalSmithyDocument() + if err != nil { + return false + } + var fields map[string]any + if err := json.Unmarshal(raw, &fields); err != nil { + return false + } + _, carried := fields["top_k"] + return carried +} + func reportConverseFloat(warn *llms.Warnings, option, model string, asked float32, sent *float32) { render := func(v float32) string { return strconv.FormatFloat(float64(v), 'g', -1, 32) } switch { diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index 9e83b4b3a..8b3abaad2 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -106,3 +106,33 @@ func TestConverseCarriesAPlainRequestWithoutWarnings(t *testing.T) { require.Empty(t, resp.Warnings) } + +func TestConverseReportsATopKThatNeverReachesTheRequest(t *testing.T) { + t.Parallel() + + topK := 40 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + TopK: &topK, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningMedium}, + }) + + w, ok := converseWarningsByOption(resp.Warnings)["WithTopK"] + require.True(t, ok, "no top-k warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "40", w.Asked) +} + +func TestConverseStaysSilentOnATopKItCarries(t *testing.T) { + t.Parallel() + + topK := 40 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + TopK: &topK, + }) + + require.NotContains(t, converseWarningsByOption(resp.Warnings), "WithTopK") +} diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 4599a8565..ed8f3063e 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -224,6 +224,7 @@ func createAnthropicCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { inputContents, systemPrompt, err := processInputMessagesAnthropic(messages) if err != nil { @@ -272,6 +273,8 @@ func createAnthropicCompletion(ctx context.Context, return nil, err } + reportLegacyAnthropic(warn, modelID, options, &input) + body, err := json.Marshal(input) if err != nil { return nil, err diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index 6c7082c05..1e3f4bd3a 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -49,3 +49,60 @@ func reportLegacyOptions(warn *llms.Warnings, provider, modelID string, options }) } } + +func reportLegacyAnthropic( + warn *llms.Warnings, modelID string, options llms.CallOptions, input *anthropicTextGenerationInput, +) { + const reshaped = "the door reshaped the legacy anthropic payload for this model" + + if options.Temperature != nil { + reportLegacyFloat(warn, "WithTemperature", modelID, reshaped, *options.Temperature, input.Temperature) + } + if options.TopP != nil { + reportLegacyFloat(warn, "WithTopP", modelID, reshaped, *options.TopP, input.TopP) + } + if options.TopK != nil && input.TopK != *options.TopK { + reportLegacyInt(warn, "WithTopK", modelID, reshaped, *options.TopK, input.TopK) + } + if options.MaxTokens != nil && *options.MaxTokens > 0 && input.MaxTokens != *options.MaxTokens { + reportLegacyInt(warn, "WithMaxTokens", modelID, reshaped, *options.MaxTokens, input.MaxTokens) + } + if len(options.StopWords) > 0 && len(input.StopSequences) == 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithStopWords", Model: modelID, + Asked: strings.Join(options.StopWords, ","), Reason: reshaped, + }) + } +} + +func reportLegacyFloat(warn *llms.Warnings, option, modelID, reason string, asked, sent float64) { + if asked == sent { + return + } + render := func(v float64) string { return strconv.FormatFloat(v, 'g', -1, 64) } + if sent == 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: modelID, + Asked: render(asked), Reason: reason, + }) + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: option, Model: modelID, + Asked: render(asked), Sent: render(sent), Reason: reason, + }) +} + +func reportLegacyInt(warn *llms.Warnings, option, modelID, reason string, asked, sent int) { + if sent == 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: modelID, + Asked: strconv.Itoa(asked), Reason: reason, + }) + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: option, Model: modelID, + Asked: strconv.Itoa(asked), Sent: strconv.Itoa(sent), Reason: reason, + }) +} diff --git a/llms/bedrock/internal/bedrockclient/warnings_test.go b/llms/bedrock/internal/bedrockclient/warnings_test.go index 4cfbd3cb2..48a179051 100644 --- a/llms/bedrock/internal/bedrockclient/warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/warnings_test.go @@ -37,15 +37,24 @@ func legacyClientAnswering(body string) *Client { func legacyCall(t *testing.T, model string, options llms.CallOptions) *llms.ContentResponse { t.Helper() + return legacyCallAnswering(t, model, `{"generation":"hi","stop_reason":"stop"}`, options) +} + +func legacyCallAnswering(t *testing.T, model, body string, options llms.CallOptions) *llms.ContentResponse { + t.Helper() options.Model = aws.String(model) - resp, err := legacyClientAnswering(`{"generation":"hi","stop_reason":"stop"}`). + resp, err := legacyClientAnswering(body). CreateCompletion(context.Background(), model, []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, options) require.NoError(t, err) return resp } +const anthropicLegacyBody = `{"id":"msg_1","type":"message","role":"assistant",` + + `"content":[{"type":"text","text":"hi"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + func legacyWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { byOption := make(map[string]llms.Warning, len(warnings)) for _, w := range warnings { @@ -99,3 +108,37 @@ func TestAPayloadThatCarriesTopKReportsNoTopKLoss(t *testing.T) { require.NoError(t, err) require.NotContains(t, legacyWarningsByOption(got.Warnings), "WithTopK") } + +func TestTheLegacyAnthropicPayloadReportsWhatThinkingReshaped(t *testing.T) { + t.Parallel() + + const model = "us.anthropic.claude-sonnet-4-5-v1:0" + temperature, topP, topK, maxTokens := 0.2, 0.9, 40, 1000 + resp := legacyCallAnswering(t, model, anthropicLegacyBody, llms.CallOptions{ + Temperature: &temperature, + TopP: &topP, + TopK: &topK, + MaxTokens: &maxTokens, + Reasoning: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 4000}, + }) + + got := legacyWarningsByOption(resp.Warnings) + for _, option := range []string{"WithTemperature", "WithTopP", "WithTopK", "WithMaxTokens"} { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, model, w.Model) + require.NotEqual(t, w.Asked, w.Sent) + } +} + +func TestALegacyAnthropicCallThatKeepsItsValuesReportsNothing(t *testing.T) { + t.Parallel() + + temperature, maxTokens := 0.2, 1000 + resp := legacyCallAnswering(t, "us.anthropic.claude-sonnet-4-5-v1:0", anthropicLegacyBody, llms.CallOptions{ + Temperature: &temperature, + MaxTokens: &maxTokens, + }) + + require.Empty(t, resp.Warnings) +} From aa5635b35bdd4c8c3ef4e74685bc3bbead8f6ef2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 06:13:38 +0300 Subject: [PATCH 411/618] fix(anthropic): report a thinking mechanism the model does not offer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WithAdaptiveReasoning expresses a mechanism, and the door resolves the mechanism from the model instead: on a budget-only generation the adaptive request became budget thinking with no word to the caller. An unset preference stays silent — only an explicit ask that the model overrides is reported. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 13 +++++++++++++ llms/anthropic/sampling_warnings_test.go | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 69e8244ac..16c516ec4 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -47,6 +47,18 @@ func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOpti } } +func reportAnthropicMechanism(warn *llms.Warnings, model string, opts llms.CallOptions, thinking *anthropicclient.ThinkingPayload) { + cfg := opts.Reasoning + if cfg == nil || !cfg.Adaptive || thinking == nil || thinking.Type == "adaptive" { + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithAdaptiveReasoning", Model: model, + Asked: "adaptive", Sent: thinking.Type, + Reason: "the door takes the thinking mechanism from the model, not from the preference", + }) +} + func reportAnthropicBudget(warn *llms.Warnings, model string, opts llms.CallOptions, thinking *anthropicclient.ThinkingPayload) { cfg := opts.Reasoning if cfg == nil || !cfg.HasExplicitTokens() { @@ -81,6 +93,7 @@ func reportAnthropicSampling( ) { reportAnthropicUnread(warn, model, opts) reportAnthropicBudget(warn, model, opts, thinking) + reportAnthropicMechanism(warn, model, opts, thinking) reason := anthropicSamplingReason(model, thinking) warn.AddFloatChange("WithTemperature", model, reason, opts.Temperature, temperature) diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index fad215d41..ec95202e8 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -142,3 +142,15 @@ func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { require.Equal(t, "30000 tokens", w.Asked) require.NotEqual(t, w.Asked, w.Sent) } + +func TestAThinkingMechanismTheModelDoesNotOfferIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithAdaptiveReasoning(llms.ReasoningHigh)) + + w, ok := warningsByOption(resp.Warnings)["WithAdaptiveReasoning"] + require.True(t, ok, "no mechanism warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "adaptive", w.Asked) + require.Equal(t, "enabled", w.Sent) +} From 9a1d6cb5e63047f39900cfd649ded10bc7fed36b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 06:42:36 +0300 Subject: [PATCH 412/618] fix(llms): report the reasoning from the request, and stop reporting non-losses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The second review pass caught the worst class: a warning that lies. On the default openai door the thinking budget reported was a local variable the request never carried — "sent 2730 tokens" for a body with no budget field at all — while a budget that reached nothing was reported as nothing at all. Both reporters now read the request the door has written, so an effort replaced by a budget on the DashScope path is reported too. Three quieter defects went with it. Asking for the state a door already produces — logprobs false, one choice, a zero penalty — was reported as a loss on four doors. The mistral door reported four of the thirteen options it has no field for and swallowed the nine sampling ones. Neither bedrock door diffed the thinking budget, the one cut every sibling door already reported. The cache stored a response together with the warnings of the call that produced it, and its key leaves out the options that carry no JSON, so a later caller was told a streaming callback it never passed had been dropped. Stored answers no longer carry warnings. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 19 ++++---- llms/anthropic/sampling_warnings_test.go | 13 +++++ .../bedrockclient/converse_warnings.go | 29 +++++++++-- .../bedrockclient/converse_warnings_test.go | 18 +++++++ .../internal/bedrockclient/warnings.go | 26 ++++++++++ .../internal/bedrockclient/warnings_test.go | 17 +++++++ llms/cache/cache.go | 13 ++++- llms/cache/cache_test.go | 26 ++++++++++ llms/googleai/warnings.go | 12 ++--- llms/huggingface/warnings.go | 17 ++++--- llms/mistral/warnings.go | 44 +++++++++++++++++ llms/mistral/warnings_test.go | 24 ++++++++++ llms/ollama/warnings.go | 12 ++--- llms/openai/openaillm.go | 9 ++-- llms/openai/sampling_warnings.go | 26 ++++++++-- llms/openai/sampling_warnings_test.go | 48 +++++++++++++------ 16 files changed, 298 insertions(+), 55 deletions(-) diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 16c516ec4..f66a34cec 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -26,24 +26,25 @@ func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOpti {"WithFrequencyPenalty", opts.FrequencyPenalty}, {"WithPresencePenalty", opts.PresencePenalty}, } { - if o.value != nil { + if o.value != nil && *o.value != 0 { drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) } } for _, o := range []struct { - option string - value *int + option string + value *int + neutral int }{ - {"WithN", opts.N}, - {"WithCandidateCount", opts.CandidateCount}, - {"WithTopLogProbs", opts.TopLogProbs}, + {"WithN", opts.N, 1}, + {"WithCandidateCount", opts.CandidateCount, 1}, + {"WithTopLogProbs", opts.TopLogProbs, 0}, } { - if o.value != nil { + if o.value != nil && *o.value != o.neutral { drop(o.option, strconv.Itoa(*o.value)) } } - if opts.LogProbs != nil { - drop("WithLogProbs", strconv.FormatBool(*opts.LogProbs)) + if opts.LogProbs != nil && *opts.LogProbs { + drop("WithLogProbs", "true") } } diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index ec95202e8..fa0e2f2aa 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -154,3 +154,16 @@ func TestAThinkingMechanismTheModelDoesNotOfferIsReported(t *testing.T) { require.Equal(t, "adaptive", w.Asked) require.Equal(t, "enabled", w.Sent) } + +func TestAskingForWhatTheDoorAlreadyDoesIsNotALoss(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithMaxTokens(4096), + llms.WithLogProbs(false), llms.WithN(1), llms.WithCandidateCount(1), + llms.WithTopLogProbs(0), llms.WithFrequencyPenalty(0), + ) + + require.Empty(t, resp.Warnings, + "a single choice with no logprobs and no penalty is what the door sends anyway") +} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 9e1830368..53e8f738a 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -65,6 +65,9 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro Asked: strconv.Itoa(*input.TopK), Reason: omitted, }) } + if cfg := input.ReasoningConfig; cfg != nil && cfg.HasExplicitTokens() { + reportThinkingBudget(warn, model, cfg.Tokens, converseThinkingBudget(built)) + } if len(input.Tools) > 0 && built.ToolConfig == nil { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTools", Model: model, @@ -73,22 +76,38 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro } } -func converseCarriesTopK(built *bedrockruntime.ConverseInput) bool { +func converseAdditionalFields(built *bedrockruntime.ConverseInput) map[string]any { if built.AdditionalModelRequestFields == nil { - return false + return nil } raw, err := built.AdditionalModelRequestFields.MarshalSmithyDocument() if err != nil { - return false + return nil } var fields map[string]any if err := json.Unmarshal(raw, &fields); err != nil { - return false + return nil } - _, carried := fields["top_k"] + return fields +} + +func converseCarriesTopK(built *bedrockruntime.ConverseInput) bool { + _, carried := converseAdditionalFields(built)["top_k"] return carried } +func converseThinkingBudget(built *bedrockruntime.ConverseInput) int { + thinking, ok := converseAdditionalFields(built)["thinking"].(map[string]any) + if !ok { + return 0 + } + budget, ok := thinking["budget_tokens"].(float64) + if !ok { + return 0 + } + return int(budget) +} + func reportConverseFloat(warn *llms.Warnings, option, model string, asked float32, sent *float32) { render := func(v float32) string { return strconv.FormatFloat(float64(v), 'g', -1, 32) } switch { diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index 8b3abaad2..e96b6c40d 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -136,3 +136,21 @@ func TestConverseStaysSilentOnATopKItCarries(t *testing.T) { require.NotContains(t, converseWarningsByOption(resp.Warnings), "WithTopK") } + +func TestConverseReportsAThinkingBudgetItCut(t *testing.T) { + t.Parallel() + + maxTokens := 4096 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + MaxTokens: &maxTokens, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 30000}, + }) + + w, ok := converseWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "30000 tokens", w.Asked) + require.NotEqual(t, w.Asked, w.Sent) +} diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index 1e3f4bd3a..c3c28a97d 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -67,6 +67,13 @@ func reportLegacyAnthropic( if options.MaxTokens != nil && *options.MaxTokens > 0 && input.MaxTokens != *options.MaxTokens { reportLegacyInt(warn, "WithMaxTokens", modelID, reshaped, *options.MaxTokens, input.MaxTokens) } + if cfg := options.Reasoning; cfg != nil && cfg.HasExplicitTokens() { + sent := 0 + if input.Thinking != nil { + sent = input.Thinking.BudgetTokens + } + reportThinkingBudget(warn, modelID, cfg.Tokens, sent) + } if len(options.StopWords) > 0 && len(input.StopSequences) == 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithStopWords", Model: modelID, @@ -106,3 +113,22 @@ func reportLegacyInt(warn *llms.Warnings, option, modelID, reason string, asked, Asked: strconv.Itoa(asked), Sent: strconv.Itoa(sent), Reason: reason, }) } + +func reportThinkingBudget(warn *llms.Warnings, modelID string, asked, sent int) { + if asked <= 0 || sent == asked { + return + } + if sent <= 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: modelID, + Asked: strconv.Itoa(asked) + " tokens", + Reason: "the door puts no thinking budget on the request for this model", + }) + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: modelID, + Asked: strconv.Itoa(asked) + " tokens", Sent: strconv.Itoa(sent) + " tokens", + Reason: "the thinking budget is capped by the answer limit and by what the model records", + }) +} diff --git a/llms/bedrock/internal/bedrockclient/warnings_test.go b/llms/bedrock/internal/bedrockclient/warnings_test.go index 48a179051..de947b53a 100644 --- a/llms/bedrock/internal/bedrockclient/warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/warnings_test.go @@ -142,3 +142,20 @@ func TestALegacyAnthropicCallThatKeepsItsValuesReportsNothing(t *testing.T) { require.Empty(t, resp.Warnings) } + +func TestTheLegacyDoorReportsAThinkingBudgetItCut(t *testing.T) { + t.Parallel() + + const model = "us.anthropic.claude-sonnet-4-5-v1:0" + maxTokens := 4096 + resp := legacyCallAnswering(t, model, anthropicLegacyBody, llms.CallOptions{ + MaxTokens: &maxTokens, + Reasoning: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Tokens: 30000}, + }) + + w, ok := legacyWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "30000 tokens", w.Asked) + require.NotEqual(t, w.Asked, w.Sent) +} diff --git a/llms/cache/cache.go b/llms/cache/cache.go index 385921165..085b64d50 100644 --- a/llms/cache/cache.go +++ b/llms/cache/cache.go @@ -80,11 +80,22 @@ func (c *Cacher) GenerateContent(ctx context.Context, messages []llms.MessageCon return response, err } - c.cache.Put(ctx, key, response) + // The key encodes only the options that carry JSON, so a hit can serve a call + // that set different ones. + c.cache.Put(ctx, key, withoutWarnings(response)) return response, nil } +func withoutWarnings(response *llms.ContentResponse) *llms.ContentResponse { + if response == nil || len(response.Warnings) == 0 { + return response + } + stored := *response + stored.Warnings = nil + return &stored +} + // hashKeyForCache is a helper function that generates a unique key for a given // set of messages and call options. func hashKeyForCache(messages []llms.MessageContent, opts llms.CallOptions) (string, error) { diff --git a/llms/cache/cache_test.go b/llms/cache/cache_test.go index 97713ae0c..17ab2beb9 100644 --- a/llms/cache/cache_test.go +++ b/llms/cache/cache_test.go @@ -197,3 +197,29 @@ func TestAWarmCacheReturnsItsAnswerWhenTheConsumerGivesUp(t *testing.T) { require.Len(t, resp.Choices, 1) require.Equal(t, "sixty rooms are free", resp.Choices[0].Content) } + +func TestACachedAnswerDoesNotCarryTheFirstCallsWarnings(t *testing.T) { + t.Parallel() + + answer := &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: "sixty rooms are free"}}, + Warnings: []llms.Warning{{ + Kind: llms.WarningDrop, Option: "WithStreamingFunc", Model: "m", + Asked: "a callback", Reason: "the door builds no field for it", + }}, + } + inner := newMockLLM(answer, nil) + llm := New(inner, newMockCache()) + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")} + + first, err := llm.GenerateContent(context.Background(), msgs, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, first.Warnings, 1, "the call that reached the door keeps its own warning") + + second, err := llm.GenerateContent(context.Background(), msgs) + require.NoError(t, err) + require.Equal(t, 1, inner.called, "the second call is a cache hit") + require.Empty(t, second.Warnings, + "a caller that passed no streaming callback must not be told one was dropped") +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 937b834ec..76dd19357 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -11,35 +11,35 @@ import ( ) func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOptions, tc *genai.ThinkingConfig) { - if opts.N != nil { + if opts.N != nil && *opts.N != 1 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithN", Model: model, Asked: strconv.Itoa(*opts.N), Reason: "the door sends candidate_count and never reads n", }) } - if opts.MinP != nil { + if opts.MinP != nil && *opts.MinP != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMinP", Model: model, Asked: strconv.FormatFloat(*opts.MinP, 'g', -1, 64), Reason: "the door's generation config has no min-p field to set", }) } - if opts.RepetitionPenalty != nil { + if opts.RepetitionPenalty != nil && *opts.RepetitionPenalty != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithRepetitionPenalty", Model: model, Asked: strconv.FormatFloat(*opts.RepetitionPenalty, 'g', -1, 64), Reason: "the door's generation config has no repetition-penalty field to set", }) } - if opts.LogProbs != nil { + if opts.LogProbs != nil && *opts.LogProbs { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, - Asked: strconv.FormatBool(*opts.LogProbs), + Asked: "true", Reason: "the door never sets logprobs on the generation config it builds", }) } - if opts.TopLogProbs != nil { + if opts.TopLogProbs != nil && *opts.TopLogProbs != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, Asked: strconv.Itoa(*opts.TopLogProbs), diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index 411fd0259..8c22ac3b4 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -19,12 +19,12 @@ func reportHuggingFaceOptions( }) } dropFloat := func(option string, v *float64) { - if v != nil { + if v != nil && *v != 0 { drop(option, strconv.FormatFloat(*v, 'g', -1, 64)) } } dropInt := func(option string, v *int) { - if v != nil { + if v != nil && *v != 0 { drop(option, strconv.Itoa(*v)) } } @@ -32,8 +32,13 @@ func reportHuggingFaceOptions( dropInt("WithMaxTokens", opts.MaxTokens) dropInt("WithTopK", opts.TopK) dropInt("WithMinLength", opts.MinLength) - dropInt("WithN", opts.N) - dropInt("WithCandidateCount", opts.CandidateCount) + dropCount := func(option string, v *int) { + if v != nil && *v != 1 { + drop(option, strconv.Itoa(*v)) + } + } + dropCount("WithN", opts.N) + dropCount("WithCandidateCount", opts.CandidateCount) dropInt("WithTopLogProbs", opts.TopLogProbs) dropFloat("WithMinP", opts.MinP) dropFloat("WithRepetitionPenalty", opts.RepetitionPenalty) @@ -45,8 +50,8 @@ func reportHuggingFaceOptions( } func reportHuggingFaceShapedOptions(opts *llms.CallOptions, drop func(option, asked string)) { - if opts.LogProbs != nil { - drop("WithLogProbs", strconv.FormatBool(*opts.LogProbs)) + if opts.LogProbs != nil && *opts.LogProbs { + drop("WithLogProbs", "true") } if len(opts.StopWords) > 0 { drop("WithStopWords", strconv.Itoa(len(opts.StopWords))+" words") diff --git a/llms/mistral/warnings.go b/llms/mistral/warnings.go index c912e8323..b9a67496c 100644 --- a/llms/mistral/warnings.go +++ b/llms/mistral/warnings.go @@ -7,7 +7,51 @@ import ( "github.com/vxcontrol/langchaingo/llms" ) +func reportMistralUnread(warn *llms.Warnings, model string, opts *llms.CallOptions) { + const unread = "the door's request has no field for it" + + drop := func(option, asked string) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: asked, Reason: unread, + }) + } + for _, o := range []struct { + option string + value *float64 + }{ + {"WithMinP", opts.MinP}, + {"WithRepetitionPenalty", opts.RepetitionPenalty}, + {"WithFrequencyPenalty", opts.FrequencyPenalty}, + {"WithPresencePenalty", opts.PresencePenalty}, + } { + if o.value != nil && *o.value != 0 { + drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) + } + } + for _, o := range []struct { + option string + value *int + neutral int + }{ + {"WithTopK", opts.TopK, 0}, + {"WithMinLength", opts.MinLength, 0}, + {"WithTopLogProbs", opts.TopLogProbs, 0}, + {"WithN", opts.N, 1}, + {"WithCandidateCount", opts.CandidateCount, 1}, + } { + if o.value != nil && *o.value != o.neutral { + drop(o.option, strconv.Itoa(*o.value)) + } + } + if opts.LogProbs != nil && *opts.LogProbs { + drop("WithLogProbs", "true") + } +} + func reportMistralOptions(warn *llms.Warnings, model string, opts *llms.CallOptions) { + reportMistralUnread(warn, model, opts) + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind == llms.ToolChoiceNamed { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithToolChoice", Model: model, diff --git a/llms/mistral/warnings_test.go b/llms/mistral/warnings_test.go index f5685331c..017bd8f30 100644 --- a/llms/mistral/warnings_test.go +++ b/llms/mistral/warnings_test.go @@ -83,3 +83,27 @@ func TestAPlainMistralCallCarriesNoWarnings(t *testing.T) { resp := generateForWarnings(t, llms.WithTemperature(0.2)) require.Empty(t, resp.Warnings) } + +func TestTheSamplingOptionsThisDoorHasNoFieldForAreReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithTopK(40), llms.WithMinP(0.1), llms.WithMinLength(2), + llms.WithN(3), llms.WithCandidateCount(2), llms.WithTopLogProbs(4), + llms.WithLogProbs(true), llms.WithRepetitionPenalty(1.1), + llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.25), + ) + + got := mistralWarningsByOption(resp.Warnings) + for option, asked := range map[string]string{ + "WithTopK": "40", "WithMinP": "0.1", "WithMinLength": "2", + "WithN": "3", "WithCandidateCount": "2", "WithTopLogProbs": "4", + "WithLogProbs": "true", "WithRepetitionPenalty": "1.1", + "WithFrequencyPenalty": "0.5", "WithPresencePenalty": "0.25", + } { + w, ok := got[option] + require.True(t, ok, "no %s warning in %v", option, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + } +} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 3b3b0e5b0..88ddab4bd 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -12,32 +12,32 @@ import ( func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOptions) { const unread = "the door builds no field for it" - if opts.MinP != nil { + if opts.MinP != nil && *opts.MinP != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMinP", Model: model, Asked: strconv.FormatFloat(*opts.MinP, 'g', -1, 64), Reason: "the door sends only the min_p set on the client", }) } - if opts.LogProbs != nil { + if opts.LogProbs != nil && *opts.LogProbs { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, - Asked: strconv.FormatBool(*opts.LogProbs), Reason: unread, + Asked: "true", Reason: unread, }) } - if opts.TopLogProbs != nil { + if opts.TopLogProbs != nil && *opts.TopLogProbs != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, Asked: strconv.Itoa(*opts.TopLogProbs), Reason: unread, }) } - if opts.N != nil { + if opts.N != nil && *opts.N != 1 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithN", Model: model, Asked: strconv.Itoa(*opts.N), Reason: unread, }) } - if opts.CandidateCount != nil { + if opts.CandidateCount != nil && *opts.CandidateCount != 1 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithCandidateCount", Model: model, Asked: strconv.Itoa(*opts.CandidateCount), Reason: unread, diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index ef374dd31..2378fd0f2 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -390,27 +390,28 @@ func (o *LLM) setReasoning( reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone - reportOpenAIEffort(warn, model, opts.Reasoning, string(reasoningEffort), sendsEffort) if toolsRule != reasoning.EffortToolsFree { return "", &reasoning.ErrEffortWithTools{Model: model, Effort: string(reasoningEffort)} } if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && reasoning.DashScopeTakesThinkingBudget(model) { req.ThinkingBudget = &reasoningTokens - reportOpenAIBudget(warn, model, opts.Reasoning, reasoningTokens) + reportOpenAIReasoning(warn, model, opts.Reasoning, req) return wireEffortOf(true, reasoningEffort), nil } budget := 0 if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { budget = reasoning.ClaudeClampBudget(model, reasoningTokens) } - reportOpenAIBudget(warn, model, opts.Reasoning, budget) + effortBudget := 0 if reasoning.ClaudeSpendsThinkingBudget(model) { effortBudget = llms.ReasoningEffortBudget(reasoningEffort, opts.GetMaxTokens()) } - return o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget, warnCtx{model, warn}), nil + wire := o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget, warnCtx{model, warn}) + reportOpenAIReasoning(warn, model, opts.Reasoning, req) + return wire, nil } func (o *LLM) writeEffort( diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 3845dbc09..4e3f46677 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -70,15 +70,35 @@ func samplingReason(model string, opts llms.CallOptions, wireEffort string) stri } } -func reportOpenAIEffort(warn *llms.Warnings, model string, cfg *llms.ReasoningConfig, sent string, sends bool) { +func reportOpenAIReasoning(warn *llms.Warnings, model string, cfg *llms.ReasoningConfig, req *openaiclient.ChatRequest) { if cfg == nil { return } + effort, budget := "", 0 + if req.ReasoningEffort != nil { + effort = string(*req.ReasoningEffort) + } + if req.ThinkingBudget != nil { + budget = *req.ThinkingBudget + } + if req.Reasoning != nil { + if req.Reasoning.Effort != "" { + effort = string(req.Reasoning.Effort) + } + if req.Reasoning.MaxTokens > 0 { + budget = req.Reasoning.MaxTokens + } + } + reportOpenAIEffort(warn, model, cfg, effort) + reportOpenAIBudget(warn, model, cfg, budget) +} + +func reportOpenAIEffort(warn *llms.Warnings, model string, cfg *llms.ReasoningConfig, sent string) { asked := string(cfg.Effort) switch { case asked == "" || asked == string(llms.ReasoningNone): return - case !sends: + case sent == "" || sent == reasoning.OpenAIDisableEffort: warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, Asked: asked, Reason: "the door sends no effort field on this model", @@ -93,7 +113,7 @@ func reportOpenAIEffort(warn *llms.Warnings, model string, cfg *llms.ReasoningCo } func reportOpenAIBudget(warn *llms.Warnings, model string, cfg *llms.ReasoningConfig, sent int) { - if cfg == nil || !cfg.HasExplicitTokens() || sent == cfg.Tokens { + if !cfg.HasExplicitTokens() || sent == cfg.Tokens { return } switch { diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 394cc660c..967dc5421 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -135,20 +135,38 @@ func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3-max", "claude-sonnet-4-5"} { - t.Run(model, func(t *testing.T) { - t.Parallel() - - resp := sendForWarnings(t, model, - llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) - - w := warningFor(t, resp, "WithReasoning") - if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" { - t.Fatalf("reasoning warning = %+v (all: %v)", w, resp.Warnings) - } - if w.Sent == w.Asked || w.Sent == "" { - t.Errorf("reasoning warning reports no cut: %+v", w) - } - }) + resp := sendForWarnings(t, "qwen3-max", + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) + + w := warningFor(t, resp, "WithReasoning") + if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" { + t.Fatalf("reasoning warning = %+v (all: %v)", w, resp.Warnings) + } + if w.Sent == w.Asked || w.Sent == "" { + t.Errorf("reasoning warning reports no cut: %+v", w) + } +} + +func TestABudgetThisDoorPutsOnNoFieldIsReportedAsDropped(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "claude-sonnet-4-5", + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) + + w := warningFor(t, resp, "WithReasoning") + if w.Kind != llms.WarningDrop || w.Asked != "30000 tokens" || w.Sent != "" { + t.Errorf("reasoning warning = %+v (all: %v)", w, resp.Warnings) + } +} + +func TestAnEffortReplacedByABudgetIsReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "qwen3.8-plus", + llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningHigh, 4096)) + + w := warningFor(t, resp, "WithReasoning") + if w.Kind != llms.WarningDrop || w.Asked != "high" || w.Sent != "" { + t.Errorf("reasoning warning = %+v (all: %v)", w, resp.Warnings) } } From 8d25c01faa82bd38b351a09a8c6b59100274410d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 07:17:26 +0300 Subject: [PATCH 413/618] fix(llms): report the effort every door lowers and the options bedrock never carries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The third pass found one root under eight of its twelve findings: openai was the only door reporting an effort it had lowered. anthropic, both bedrock doors and googleai's thinking level all substituted the caller's level in silence — an xhigh asked for on a model that tops out at high went out as high, and a minimal asked for on a Gemini 3 pro went out as LOW, with nothing said. Bedrock reported none of the eight options that reach neither its legacy payloads nor ConverseInput — min-p, the three penalties, n, the candidate count and logprobs — though every sibling door reports them. They are now reported once, at the door, for both paths. Two smaller ones: a tool choice of "none" becomes "auto" on the converse request, and the openai door still counted an explicitly zero penalty or min-p as a dropped option, the class already fixed on four other doors. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 2 +- llms/anthropic/sampling_warnings.go | 34 ++++++- llms/anthropic/sampling_warnings_test.go | 18 +++- llms/bedrock/bedrockllm.go | 3 + .../bedrockclient/converse_warnings.go | 20 +++++ .../bedrockclient/converse_warnings_test.go | 18 ++++ .../internal/bedrockclient/warnings.go | 25 ++++++ .../internal/bedrockclient/warnings_test.go | 17 ++++ llms/bedrock/warnings.go | 51 +++++++++++ llms/bedrock/warnings_test.go | 90 +++++++++++++++++++ llms/googleai/warnings.go | 12 +++ llms/googleai/warnings_test.go | 13 +++ llms/openai/openaillm.go | 4 +- llms/openai/sampling_warnings.go | 14 ++- llms/openai/sampling_warnings_test.go | 11 +++ 15 files changed, 324 insertions(+), 8 deletions(-) create mode 100644 llms/bedrock/warnings.go create mode 100644 llms/bedrock/warnings_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index f61b5676d..91ad4b365 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -297,7 +297,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag topP = nil } - reportAnthropicSampling(warn, model, *opts, thinking, temperature, topP, topK, maxTokens) + reportAnthropicSampling(warn, model, *opts, thinking, outputConfig, temperature, topP, topK, maxTokens) result, err := o.client.CreateMessage(ctx, &anthropicclient.MessageRequest{ Model: opts.GetModel(), diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index f66a34cec..192be0619 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -2,6 +2,7 @@ package anthropic import ( "strconv" + "strings" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/anthropic/internal/anthropicclient" @@ -48,6 +49,36 @@ func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOpti } } +func reportAnthropicEffort( + warn *llms.Warnings, model string, opts llms.CallOptions, + thinking *anthropicclient.ThinkingPayload, outputConfig *anthropicclient.OutputConfig, +) { + cfg := opts.Reasoning + if cfg == nil || cfg.Effort == "" || cfg.Effort == llms.ReasoningNone { + return + } + asked := string(cfg.Effort) + sent := "" + if outputConfig != nil { + sent = outputConfig.Effort + } + switch { + case sent == "" && thinking != nil: + return + case sent == "": + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: asked, Reason: "the door puts no thinking on the request for this model", + }) + case !strings.EqualFold(asked, sent): + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: model, + Asked: asked, Sent: sent, + Reason: "the door sends only the efforts it records this model as accepting", + }) + } +} + func reportAnthropicMechanism(warn *llms.Warnings, model string, opts llms.CallOptions, thinking *anthropicclient.ThinkingPayload) { cfg := opts.Reasoning if cfg == nil || !cfg.Adaptive || thinking == nil || thinking.Type == "adaptive" { @@ -89,12 +120,13 @@ func reportAnthropicBudget(warn *llms.Warnings, model string, opts llms.CallOpti func reportAnthropicSampling( warn *llms.Warnings, model string, opts llms.CallOptions, - thinking *anthropicclient.ThinkingPayload, + thinking *anthropicclient.ThinkingPayload, outputConfig *anthropicclient.OutputConfig, temperature, topP *float64, topK *int, maxTokens int, ) { reportAnthropicUnread(warn, model, opts) reportAnthropicBudget(warn, model, opts, thinking) reportAnthropicMechanism(warn, model, opts, thinking) + reportAnthropicEffort(warn, model, opts, thinking, outputConfig) reason := anthropicSamplingReason(model, thinking) warn.AddFloatChange("WithTemperature", model, reason, opts.Temperature, temperature) diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index fa0e2f2aa..7f4b96790 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -15,8 +15,11 @@ const warningsTestModel = "claude-sonnet-4-5" func generateForWarnings(t *testing.T, callOpts ...llms.CallOption) *llms.ContentResponse { t.Helper() + return generateForModel(t, warningsTestModel, callOpts...) +} - const model = warningsTestModel +func generateForModel(t *testing.T, model string, callOpts ...llms.CallOption) *llms.ContentResponse { + t.Helper() srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) @@ -167,3 +170,16 @@ func TestAskingForWhatTheDoorAlreadyDoesIsNotALoss(t *testing.T) { require.Empty(t, resp.Warnings, "a single choice with no logprobs and no penalty is what the door sends anyway") } + +func TestAnEffortLoweredToWhatTheModelTakesIsReported(t *testing.T) { + t.Parallel() + + resp := generateForModel(t, "claude-sonnet-4-6", + llms.WithMaxTokens(8192), llms.WithAdaptiveReasoning(llms.ReasoningXHigh)) + + w, ok := warningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "xhigh", w.Asked) + require.Equal(t, "high", w.Sent) +} diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 3fc9a2515..d64081e15 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -157,6 +157,9 @@ func (l *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten } else { resp, err = l.generateContentWithLegacyAPI(ctx, messages, opts) } + if resp != nil { + resp.Warnings = append(resp.Warnings, unreadBedrockOptions(opts.GetModel(), opts)...) + } if err != nil { return resp, err } diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 53e8f738a..63d144a0b 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -5,6 +5,7 @@ import ( "strconv" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime/types" "github.com/vxcontrol/langchaingo/llms" ) @@ -65,6 +66,25 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro Asked: strconv.Itoa(*input.TopK), Reason: omitted, }) } + if cfg := input.ReasoningConfig; cfg != nil && cfg.Effort != "" && cfg.Effort != llms.ReasoningNone { + fields := converseAdditionalFields(built) + sent := "" + if oc, ok := fields["output_config"].(map[string]any); ok { + sent, _ = oc["effort"].(string) + } + _, thinkingSent := fields["thinking"] + reportEffortClamp(warn, model, string(cfg.Effort), sent, thinkingSent) + } + if kind, _ := llms.ClassifyToolChoice(input.ToolChoice); kind == llms.ToolChoiceNone && + built.ToolConfig != nil && built.ToolConfig.ToolChoice != nil { + if _, auto := built.ToolConfig.ToolChoice.(*types.ToolChoiceMemberAuto); auto { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithToolChoice", Model: model, + Asked: "none", Sent: "auto", + Reason: "the door builds no none for the converse tool config", + }) + } + } if cfg := input.ReasoningConfig; cfg != nil && cfg.HasExplicitTokens() { reportThinkingBudget(warn, model, cfg.Tokens, converseThinkingBudget(built)) } diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index e96b6c40d..ad73f0342 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -154,3 +154,21 @@ func TestConverseReportsAThinkingBudgetItCut(t *testing.T) { require.Equal(t, "30000 tokens", w.Asked) require.NotEqual(t, w.Asked, w.Sent) } + +func TestConverseReportsAnEffortItLowered(t *testing.T) { + t.Parallel() + + maxTokens := 8000 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "anthropic.claude-opus-4-6-v1:0", + MaxTokens: &maxTokens, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningXHigh}, + }) + + w, ok := converseWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "xhigh", w.Asked) + require.Equal(t, "high", w.Sent) +} diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index c3c28a97d..c81396e14 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -67,6 +67,13 @@ func reportLegacyAnthropic( if options.MaxTokens != nil && *options.MaxTokens > 0 && input.MaxTokens != *options.MaxTokens { reportLegacyInt(warn, "WithMaxTokens", modelID, reshaped, *options.MaxTokens, input.MaxTokens) } + if cfg := options.Reasoning; cfg != nil && cfg.Effort != "" && cfg.Effort != llms.ReasoningNone { + sent := "" + if input.OutputConfig != nil { + sent = input.OutputConfig.Effort + } + reportEffortClamp(warn, modelID, string(cfg.Effort), sent, input.Thinking != nil) + } if cfg := options.Reasoning; cfg != nil && cfg.HasExplicitTokens() { sent := 0 if input.Thinking != nil { @@ -132,3 +139,21 @@ func reportThinkingBudget(warn *llms.Warnings, modelID string, asked, sent int) Reason: "the thinking budget is capped by the answer limit and by what the model records", }) } + +func reportEffortClamp(warn *llms.Warnings, modelID, asked, sent string, thinkingSent bool) { + switch { + case sent == "" && thinkingSent: + return + case sent == "": + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: modelID, + Asked: asked, Reason: "the door puts no thinking on the request for this model", + }) + case !strings.EqualFold(asked, sent): + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: modelID, + Asked: asked, Sent: sent, + Reason: "the door sends only the efforts it records this model as accepting", + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/warnings_test.go b/llms/bedrock/internal/bedrockclient/warnings_test.go index de947b53a..cb50970ee 100644 --- a/llms/bedrock/internal/bedrockclient/warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/warnings_test.go @@ -159,3 +159,20 @@ func TestTheLegacyDoorReportsAThinkingBudgetItCut(t *testing.T) { require.Equal(t, "30000 tokens", w.Asked) require.NotEqual(t, w.Asked, w.Sent) } + +func TestTheLegacyDoorReportsAnEffortItLowered(t *testing.T) { + t.Parallel() + + const model = "anthropic.claude-opus-4-6-v1:0" + maxTokens := 8000 + resp := legacyCallAnswering(t, model, anthropicLegacyBody, llms.CallOptions{ + MaxTokens: &maxTokens, + Reasoning: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningXHigh}, + }) + + w, ok := legacyWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "xhigh", w.Asked) + require.Equal(t, "high", w.Sent) +} diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go new file mode 100644 index 000000000..1460efb1d --- /dev/null +++ b/llms/bedrock/warnings.go @@ -0,0 +1,51 @@ +package bedrock + +import ( + "strconv" + + "github.com/vxcontrol/langchaingo/llms" +) + +// unreadBedrockOptions covers both paths: these options reach neither the legacy +// payloads nor ConverseInput. +func unreadBedrockOptions(model string, opts llms.CallOptions) []llms.Warning { + const unread = "neither bedrock request has a field for it" + + var warnings []llms.Warning + drop := func(option, asked string) { + warnings = append(warnings, llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: asked, Reason: unread, + }) + } + for _, o := range []struct { + option string + value *float64 + }{ + {"WithMinP", opts.MinP}, + {"WithRepetitionPenalty", opts.RepetitionPenalty}, + {"WithFrequencyPenalty", opts.FrequencyPenalty}, + {"WithPresencePenalty", opts.PresencePenalty}, + } { + if o.value != nil && *o.value != 0 { + drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) + } + } + for _, o := range []struct { + option string + value *int + neutral int + }{ + {"WithN", opts.N, 1}, + {"WithCandidateCount", opts.CandidateCount, 1}, + {"WithTopLogProbs", opts.TopLogProbs, 0}, + } { + if o.value != nil && *o.value != o.neutral { + drop(o.option, strconv.Itoa(*o.value)) + } + } + if opts.LogProbs != nil && *opts.LogProbs { + drop("WithLogProbs", "true") + } + return warnings +} diff --git a/llms/bedrock/warnings_test.go b/llms/bedrock/warnings_test.go new file mode 100644 index 000000000..8315b9452 --- /dev/null +++ b/llms/bedrock/warnings_test.go @@ -0,0 +1,90 @@ +package bedrock_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func bedrockWarningsFor(t *testing.T, answer string, opts []bedrock.Option, call ...llms.CallOption) *llms.ContentResponse { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, opts...) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) + require.NoError(t, err) + return resp +} + +func bedrockWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { + byOption := make(map[string]llms.Warning, len(warnings)) + for _, w := range warnings { + byOption[w.Option] = w + } + return byOption +} + +func TestOptionsNeitherBedrockRequestCarriesAreReported(t *testing.T) { + t.Parallel() + + call := []llms.CallOption{ + llms.WithMaxTokens(1024), + llms.WithMinP(0.05), llms.WithRepetitionPenalty(1.1), + llms.WithFrequencyPenalty(0.3), llms.WithPresencePenalty(0.7), + llms.WithN(2), llms.WithCandidateCount(3), + llms.WithLogProbs(true), llms.WithTopLogProbs(5), + } + want := map[string]string{ + "WithMinP": "0.05", "WithRepetitionPenalty": "1.1", + "WithFrequencyPenalty": "0.3", "WithPresencePenalty": "0.7", + "WithN": "2", "WithCandidateCount": "3", + "WithLogProbs": "true", "WithTopLogProbs": "5", + } + + for _, door := range []struct { + name string + answer string + opts []bedrock.Option + }{ + {"legacy", legacyAnswer, []bedrock.Option{bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0")}}, + {"converse", converseAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + got := bedrockWarningsByOption(bedrockWarningsFor(t, door.answer, door.opts, call...).Warnings) + for option, asked := range want { + w, ok := got[option] + require.True(t, ok, "no %s warning on the %s door", option, door.name) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, asked, w.Asked) + } + }) + } +} + +func TestABedrockCallThatSetsNothingExtraCarriesNoSuchWarnings(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, legacyAnswer, + []bedrock.Option{bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0")}, + llms.WithMaxTokens(1024)) + + require.Empty(t, resp.Warnings) +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 76dd19357..9bc3162a1 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -71,6 +71,18 @@ func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOpt return } + if tc != nil && tc.ThinkingLevel != "" { + asked := string(cfg.GetEffort(opts.GetMaxTokens())) + if cfg.Effort != "" && !strings.EqualFold(asked, string(tc.ThinkingLevel)) { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: asked, Sent: string(tc.ThinkingLevel), + Reason: "the door sends only the thinking levels it records this model as accepting", + }) + } + return + } + if !cfg.HasExplicitTokens() || tc == nil || tc.ThinkingBudget == nil { return } diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go index 7ea5ff759..764e03e36 100644 --- a/llms/googleai/warnings_test.go +++ b/llms/googleai/warnings_test.go @@ -118,3 +118,16 @@ func TestSamplingOptionsWithNoGoogleFieldAreReported(t *testing.T) { require.Equal(t, asked, w.Asked) } } + +func TestAThinkingLevelTheModelDoesNotTakeIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemini-3-pro-preview", + llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningMinimal, 0)) + + w, ok := googleWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "minimal", w.Asked) + require.Equal(t, "LOW", w.Sent) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 2378fd0f2..506f833da 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -285,8 +285,8 @@ func (o *LLM) createChatRequest( if model := o.effectiveModel(opts); reasoning.RejectsPenalties(model) { const refused = "the door does not send the penalties on this model family" - warn.AddFloatChange("WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) - warn.AddFloatChange("WithPresencePenalty", model, refused, req.PresencePenalty, nil) + addNonZeroChange(warn, "WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) + addNonZeroChange(warn, "WithPresencePenalty", model, refused, req.PresencePenalty, nil) req.FrequencyPenalty = nil req.PresencePenalty = nil } diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 4e3f46677..6bde97b0b 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -41,9 +41,9 @@ func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason st warn.AddFloatChange("WithTemperature", model, reason, s.temperature, req.Temperature) warn.AddFloatChange("WithTopP", model, reason, s.topP, req.TopP) warn.AddIntChange("WithTopK", model, reason, s.topK, req.TopK) - warn.AddFloatChange("WithMinP", model, "the model rejects min_p", s.minP, req.MinP) - warn.AddFloatChange("WithFrequencyPenalty", model, reason, s.frequencyPenalty, req.FrequencyPenalty) - warn.AddFloatChange("WithPresencePenalty", model, reason, s.presencePenalty, req.PresencePenalty) + addNonZeroChange(warn, "WithMinP", model, "the model rejects min_p", s.minP, req.MinP) + addNonZeroChange(warn, "WithFrequencyPenalty", model, reason, s.frequencyPenalty, req.FrequencyPenalty) + addNonZeroChange(warn, "WithPresencePenalty", model, reason, s.presencePenalty, req.PresencePenalty) if s.logProbs && !req.LogProbs { warn.Add(llms.Warning{ @@ -59,6 +59,14 @@ func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason st } } +// addNonZeroChange is for options whose zero asks for nothing — unlike temperature. +func addNonZeroChange(warn *llms.Warnings, option, model, reason string, before, after *float64) { + if before == nil || *before == 0 { + return + } + warn.AddFloatChange(option, model, reason, before, after) +} + func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { switch { case reasoning.ClaudeRejectsSampling(model): diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 967dc5421..36c50ce38 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -170,3 +170,14 @@ func TestAnEffortReplacedByABudgetIsReported(t *testing.T) { t.Errorf("reasoning warning = %+v (all: %v)", w, resp.Warnings) } } + +func TestAZeroPenaltyIsNotALoss(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "grok-4", + llms.WithFrequencyPenalty(0), llms.WithPresencePenalty(0)) + + if len(resp.Warnings) != 0 { + t.Errorf("no penalty was asked for, got %v", resp.Warnings) + } +} From 4a3f1a03a98de3340f4e0f13229121e0df10ab14 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 07:18:32 +0300 Subject: [PATCH 414/618] test(bedrock): hold the tool choice the converse door turns into auto The substitution shipped with the last commit had no test of its own, so removing the report left the package green. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/converse_warnings_test.go | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index ad73f0342..83f3d7537 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -172,3 +172,28 @@ func TestConverseReportsAnEffortItLowered(t *testing.T) { require.Equal(t, "xhigh", w.Asked) require.Equal(t, "high", w.Sent) } + +func TestConverseReportsAToolChoiceItTurnsIntoAuto(t *testing.T) { + t.Parallel() + + resp := converseCall(t, &ConverseInput{ + Messages: []Message{ + {Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}, + {Role: llms.ChatMessageTypeAI, Type: "tool_use", ToolCall: &ToolCall{ + ID: "t1", Name: "get_weather", Arguments: map[string]any{}, + }}, + {Role: llms.ChatMessageTypeTool, Type: "tool_result", ToolResult: &ToolResult{ + ToolCallID: "t1", ToolName: "get_weather", Content: "sunny", + }}, + }, + ModelID: "anthropic.claude-sonnet-4-5-v1:0", + Tools: []llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{Name: "get_weather"}}}, + ToolChoice: "none", + }) + + w, ok := converseWarningsByOption(resp.Warnings)["WithToolChoice"] + require.True(t, ok, "no tool-choice warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "none", w.Asked) + require.Equal(t, "auto", w.Sent) +} From 1804622a8fea78ace2bfcd4372fce4300c72e685 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 10:08:55 +0300 Subject: [PATCH 415/618] fix(bedrock): read the effort in the shape each family writes it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The converse effort report looked only for the Claude output_config, so a Nova or Grok request — which carry the effort as reasoningConfig or as a reasoning object — was reported as having no thinking on it at all. The caller was told the door dropped an effort the wire demonstrably carried, and a grok max lowered to xhigh read as a total loss instead of a clamp. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/converse_warnings.go | 32 +++++++++++++--- .../bedrockclient/converse_warnings_test.go | 37 +++++++++++++++++++ 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 63d144a0b..6101b8c15 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -67,12 +67,7 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro }) } if cfg := input.ReasoningConfig; cfg != nil && cfg.Effort != "" && cfg.Effort != llms.ReasoningNone { - fields := converseAdditionalFields(built) - sent := "" - if oc, ok := fields["output_config"].(map[string]any); ok { - sent, _ = oc["effort"].(string) - } - _, thinkingSent := fields["thinking"] + sent, thinkingSent := converseEffortOnTheWire(built) reportEffortClamp(warn, model, string(cfg.Effort), sent, thinkingSent) } if kind, _ := llms.ClassifyToolChoice(input.ToolChoice); kind == llms.ToolChoiceNone && @@ -111,6 +106,31 @@ func converseAdditionalFields(built *bedrockruntime.ConverseInput) map[string]an return fields } +// converseEffortOnTheWire reads the three shapes this door writes: the Claude +// output_config, the Nova reasoningConfig and the Grok reasoning object. +func converseEffortOnTheWire(built *bedrockruntime.ConverseInput) (string, bool) { + fields := converseAdditionalFields(built) + nested := func(key, effortKey string) (string, bool) { + block, ok := fields[key].(map[string]any) + if !ok { + return "", false + } + effort, _ := block[effortKey].(string) + return effort, true + } + for _, shape := range []struct{ key, effortKey string }{ + {"output_config", "effort"}, + {"reasoningConfig", "maxReasoningEffort"}, + {"reasoning", "effort"}, + } { + if effort, present := nested(shape.key, shape.effortKey); present { + return effort, true + } + } + _, thinking := fields["thinking"] + return "", thinking +} + func converseCarriesTopK(built *bedrockruntime.ConverseInput) bool { _, carried := converseAdditionalFields(built)["top_k"] return carried diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index 83f3d7537..840d7e296 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -197,3 +197,40 @@ func TestConverseReportsAToolChoiceItTurnsIntoAuto(t *testing.T) { require.Equal(t, "none", w.Asked) require.Equal(t, "auto", w.Sent) } + +func TestConverseReadsTheEffortEveryFamilyWritesItsOwnWay(t *testing.T) { + t.Parallel() + + maxTokens := 8192 + for _, tc := range []struct { + model string + effort llms.ReasoningEffort + want *llms.Warning + }{ + {"us.amazon.nova-2-lite-v1:0", llms.ReasoningHigh, nil}, + {"us.xai.grok-4.3", llms.ReasoningMax, &llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Asked: "max", Sent: "xhigh", + }}, + } { + t.Run(tc.model, func(t *testing.T) { + t.Parallel() + + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: tc.model, + MaxTokens: &maxTokens, + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: tc.effort}, + }) + + got, ok := converseWarningsByOption(resp.Warnings)["WithReasoning"] + if tc.want == nil { + require.False(t, ok, "the effort reached the wire, so nothing was lost: %v", resp.Warnings) + return + } + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, tc.want.Kind, got.Kind) + require.Equal(t, tc.want.Asked, got.Asked) + require.Equal(t, tc.want.Sent, got.Sent) + }) + } +} From 309986c6d930ea61c7cde1f2b8387742dbb536a3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 10:47:53 +0300 Subject: [PATCH 416/618] fix(llms): stop four more warnings that report a loss that did not happen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bedrock door called min-p, the penalties and the candidate count "unread" for every model, but the legacy ai21 payload carries all three penalties and the candidate count, and cohere carries the count — so a caller who set them on those models was told they had vanished while the wire carried every one. The list is now keyed on the payload each provider actually builds, and the Converse path, which has none of these fields, still reports them. A tool choice of "auto" was reported as dropped on ollama and huggingface, though auto is exactly what those doors do when no choice is given, and a dropped choice was rendered as an internal enum ordinal — "kind 2" instead of "none". ToolChoiceKind now has a name. A top-k of zero was reported as a lost option on four doors, though zero is this library's own neutral for it. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 4 +- llms/bedrock/bedrockllm.go | 2 +- .../bedrockclient/converse_warnings.go | 2 +- .../internal/bedrockclient/warnings.go | 4 +- llms/bedrock/warnings.go | 42 ++++++++++++------- llms/bedrock/warnings_test.go | 34 +++++++++++++++ llms/huggingface/warnings.go | 6 +-- llms/ollama/warnings.go | 6 +-- llms/ollama/warnings_test.go | 24 +++++++++++ llms/openai/sampling_warnings.go | 9 +++- llms/openai/sampling_warnings_test.go | 9 ++++ llms/turn.go | 15 +++++++ 12 files changed, 130 insertions(+), 27 deletions(-) diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 192be0619..82ad780a5 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -131,7 +131,9 @@ func reportAnthropicSampling( reason := anthropicSamplingReason(model, thinking) warn.AddFloatChange("WithTemperature", model, reason, opts.Temperature, temperature) warn.AddFloatChange("WithTopP", model, reason, opts.TopP, topP) - warn.AddIntChange("WithTopK", model, reason, opts.TopK, topK) + if opts.TopK != nil && *opts.TopK != 0 { + warn.AddIntChange("WithTopK", model, reason, opts.TopK, topK) + } if asked := opts.GetMaxTokens(); asked > 0 && maxTokens != asked { warn.Add(llms.Warning{ diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index d64081e15..28dfe4d0b 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -158,7 +158,7 @@ func (l *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten resp, err = l.generateContentWithLegacyAPI(ctx, messages, opts) } if resp != nil { - resp.Warnings = append(resp.Warnings, unreadBedrockOptions(opts.GetModel(), opts)...) + resp.Warnings = append(resp.Warnings, unreadBedrockOptions(opts.GetModel(), l.useConverseAPI, opts)...) } if err != nil { return resp, err diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 6101b8c15..5d247a797 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -60,7 +60,7 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro Asked: strconv.Itoa(len(input.StopSequences)) + " words", Reason: omitted, }) } - if input.TopK != nil && !converseCarriesTopK(built) { + if input.TopK != nil && *input.TopK != 0 && !converseCarriesTopK(built) { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTopK", Model: model, Asked: strconv.Itoa(*input.TopK), Reason: omitted, diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index c81396e14..b855fe260 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -36,7 +36,7 @@ func reportLegacyOptions(warn *llms.Warnings, provider, modelID string, options }) } } - if !legacyCarriesTopK[provider] && options.TopK != nil { + if !legacyCarriesTopK[provider] && options.TopK != nil && *options.TopK != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithTopK", Model: modelID, Asked: strconv.Itoa(*options.TopK), Reason: reason, @@ -61,7 +61,7 @@ func reportLegacyAnthropic( if options.TopP != nil { reportLegacyFloat(warn, "WithTopP", modelID, reshaped, *options.TopP, input.TopP) } - if options.TopK != nil && input.TopK != *options.TopK { + if options.TopK != nil && *options.TopK != 0 && input.TopK != *options.TopK { reportLegacyInt(warn, "WithTopK", modelID, reshaped, *options.TopK, input.TopK) } if options.MaxTokens != nil && *options.MaxTokens > 0 && input.MaxTokens != *options.MaxTokens { diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go index 1460efb1d..b31d7e52e 100644 --- a/llms/bedrock/warnings.go +++ b/llms/bedrock/warnings.go @@ -4,12 +4,22 @@ import ( "strconv" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" ) -// unreadBedrockOptions covers both paths: these options reach neither the legacy -// payloads nor ConverseInput. -func unreadBedrockOptions(model string, opts llms.CallOptions) []llms.Warning { - const unread = "neither bedrock request has a field for it" +// The legacy payloads differ per provider; the Converse request has none of +// these fields at all. +var ( + legacyCarriesPenalties = map[string]bool{"ai21": true} + legacyCarriesCandidateCount = map[string]bool{"ai21": true, "cohere": true} +) + +func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) []llms.Warning { + const unread = "the bedrock request for this model has no field for it" + + provider := bedrockclient.GetProvider(model) + carriesPenalties := !converse && legacyCarriesPenalties[provider] + carriesCandidateCount := !converse && legacyCarriesCandidateCount[provider] var warnings []llms.Warning drop := func(option, asked string) { @@ -19,15 +29,16 @@ func unreadBedrockOptions(model string, opts llms.CallOptions) []llms.Warning { }) } for _, o := range []struct { - option string - value *float64 + option string + value *float64 + carried bool }{ - {"WithMinP", opts.MinP}, - {"WithRepetitionPenalty", opts.RepetitionPenalty}, - {"WithFrequencyPenalty", opts.FrequencyPenalty}, - {"WithPresencePenalty", opts.PresencePenalty}, + {"WithMinP", opts.MinP, false}, + {"WithRepetitionPenalty", opts.RepetitionPenalty, carriesPenalties}, + {"WithFrequencyPenalty", opts.FrequencyPenalty, carriesPenalties}, + {"WithPresencePenalty", opts.PresencePenalty, carriesPenalties}, } { - if o.value != nil && *o.value != 0 { + if !o.carried && o.value != nil && *o.value != 0 { drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) } } @@ -35,12 +46,13 @@ func unreadBedrockOptions(model string, opts llms.CallOptions) []llms.Warning { option string value *int neutral int + carried bool }{ - {"WithN", opts.N, 1}, - {"WithCandidateCount", opts.CandidateCount, 1}, - {"WithTopLogProbs", opts.TopLogProbs, 0}, + {"WithN", opts.N, 1, false}, + {"WithCandidateCount", opts.CandidateCount, 1, carriesCandidateCount}, + {"WithTopLogProbs", opts.TopLogProbs, 0, false}, } { - if o.value != nil && *o.value != o.neutral { + if !o.carried && o.value != nil && *o.value != o.neutral { drop(o.option, strconv.Itoa(*o.value)) } } diff --git a/llms/bedrock/warnings_test.go b/llms/bedrock/warnings_test.go index 8315b9452..a682b3d1e 100644 --- a/llms/bedrock/warnings_test.go +++ b/llms/bedrock/warnings_test.go @@ -88,3 +88,37 @@ func TestABedrockCallThatSetsNothingExtraCarriesNoSuchWarnings(t *testing.T) { require.Empty(t, resp.Warnings) } + +func TestAPayloadThatCarriesThePenaltiesReportsNoLoss(t *testing.T) { + t.Parallel() + + const ai21Answer = `{"completions":[{"data":{"text":"ok"},"finishReason":{"reason":"endoftext"}}]}` + + resp := bedrockWarningsFor(t, ai21Answer, + []bedrock.Option{bedrock.WithModel("ai21.j2-ultra-v1")}, + llms.WithRepetitionPenalty(1.1), llms.WithFrequencyPenalty(0.3), + llms.WithPresencePenalty(0.7), llms.WithCandidateCount(3), + llms.WithMinP(0.05), + ) + + got := bedrockWarningsByOption(resp.Warnings) + for _, option := range []string{ + "WithRepetitionPenalty", "WithFrequencyPenalty", "WithPresencePenalty", "WithCandidateCount", + } { + require.NotContains(t, got, option, "the ai21 payload carries it: %v", resp.Warnings) + } + require.Contains(t, got, "WithMinP", "no payload carries min-p") +} + +func TestTheConversePathReportsWhatTheLegacyPayloadWouldHaveCarried(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, converseAnswer, + []bedrock.Option{bedrock.WithModel("ai21.jamba-1-5-large-v1:0"), bedrock.WithConverseAPI()}, + llms.WithFrequencyPenalty(0.3), llms.WithCandidateCount(3), + ) + + got := bedrockWarningsByOption(resp.Warnings) + require.Contains(t, got, "WithFrequencyPenalty", "ConverseInput has no penalty field") + require.Contains(t, got, "WithCandidateCount", "ConverseInput has no candidate-count field") +} diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index 8c22ac3b4..504234a51 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -1,7 +1,6 @@ package huggingface import ( - "fmt" "strconv" "github.com/vxcontrol/langchaingo/llms" @@ -62,10 +61,11 @@ func reportHuggingFaceShapedOptions(opts *llms.CallOptions, drop func(option, as if len(opts.Functions) > 0 { drop("WithFunctions", strconv.Itoa(len(opts.Functions))+" functions") } - if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset { + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset && + kind != llms.ToolChoiceAuto { asked := name if asked == "" { - asked = fmt.Sprintf("kind %d", kind) + asked = kind.String() } drop("WithToolChoice", asked) } diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 88ddab4bd..d728361fe 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -1,7 +1,6 @@ package ollama import ( - "fmt" "strconv" "github.com/ollama/ollama/api" @@ -43,10 +42,11 @@ func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOption Asked: strconv.Itoa(*opts.CandidateCount), Reason: unread, }) } - if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset { + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset && + kind != llms.ToolChoiceAuto { asked := name if asked == "" { - asked = fmt.Sprintf("kind %d", kind) + asked = kind.String() } warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithToolChoice", Model: model, diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index f110e4778..6c1a375a6 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -89,3 +89,27 @@ func TestAPlainOllamaCallCarriesNoWarnings(t *testing.T) { resp := generateForWarnings(t, llms.WithTemperature(0.2)) require.Empty(t, resp.Warnings) } + +func TestAToolChoiceOfAutoIsNotALoss(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithToolChoice("auto")) + require.Empty(t, resp.Warnings, "auto is what the door does with no tool choice at all") +} + +func TestADroppedToolChoiceIsNamedNotNumbered(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithToolChoice("none")) + + w, ok := ollamaWarningsByOption(resp.Warnings)["WithToolChoice"] + require.True(t, ok, "no tool-choice warning in %v", resp.Warnings) + require.Equal(t, "none", w.Asked) +} + +func TestAZeroTopKIsNotALoss(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithTopK(0)) + require.Empty(t, resp.Warnings) +} diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 6bde97b0b..1eea3c72b 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -40,7 +40,7 @@ func takeSamplingSnapshot(req *openaiclient.ChatRequest) samplingSnapshot { func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason string, warn *llms.Warnings) { warn.AddFloatChange("WithTemperature", model, reason, s.temperature, req.Temperature) warn.AddFloatChange("WithTopP", model, reason, s.topP, req.TopP) - warn.AddIntChange("WithTopK", model, reason, s.topK, req.TopK) + addNonZeroIntChange(warn, "WithTopK", model, reason, s.topK, req.TopK) addNonZeroChange(warn, "WithMinP", model, "the model rejects min_p", s.minP, req.MinP) addNonZeroChange(warn, "WithFrequencyPenalty", model, reason, s.frequencyPenalty, req.FrequencyPenalty) addNonZeroChange(warn, "WithPresencePenalty", model, reason, s.presencePenalty, req.PresencePenalty) @@ -67,6 +67,13 @@ func addNonZeroChange(warn *llms.Warnings, option, model, reason string, before, warn.AddFloatChange(option, model, reason, before, after) } +func addNonZeroIntChange(warn *llms.Warnings, option, model, reason string, before, after *int) { + if before == nil || *before == 0 { + return + } + warn.AddIntChange(option, model, reason, before, after) +} + func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { switch { case reasoning.ClaudeRejectsSampling(model): diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 36c50ce38..365f7507f 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -181,3 +181,12 @@ func TestAZeroPenaltyIsNotALoss(t *testing.T) { t.Errorf("no penalty was asked for, got %v", resp.Warnings) } } + +func TestAZeroTopKIsNotALoss(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-5", llms.WithTopK(0)) + if len(resp.Warnings) != 0 { + t.Errorf("no top-k was asked for, got %v", resp.Warnings) + } +} diff --git a/llms/turn.go b/llms/turn.go index be497553a..dd7ec5b48 100644 --- a/llms/turn.go +++ b/llms/turn.go @@ -14,6 +14,21 @@ const ( ToolChoiceNamed ) +func (k ToolChoiceKind) String() string { + switch k { + case ToolChoiceAuto: + return "auto" + case ToolChoiceNone: + return "none" + case ToolChoiceAny: + return "any" + case ToolChoiceNamed: + return "a named tool" + default: + return "unset" + } +} + // ClassifyToolChoice reads every spelling the doors accept and reports what was // asked, naming the tool when the caller picked one. func ClassifyToolChoice(choice any) (ToolChoiceKind, string) { From 05e352dbf426a9dbeec7668384fdde611502c134 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 10:51:32 +0300 Subject: [PATCH 417/618] fix(llms): report the JSON mode, the answer bounds and the budget these doors drop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A bare WithJSONMode reaches nothing on anthropic and on either bedrock path — neither builds a json field, and neither said so. Every other door carries it, and pentagi appends it to whatever door its SimpleJSON agent runs on, so a caller asking for JSON got prose with no clue why. The openai door had no unread-option list at all: a candidate count, a minimum or maximum length and a response MIME type were read nowhere and reported nowhere. huggingface expresses thinking as an effort bucket, so a token budget has no field there either. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 3 +++ llms/anthropic/sampling_warnings_test.go | 11 ++++++++++ llms/bedrock/warnings.go | 3 +++ llms/bedrock/warnings_test.go | 12 +++++++++++ llms/huggingface/warnings.go | 3 +++ llms/huggingface/warnings_test.go | 12 +++++++++++ llms/openai/openaillm.go | 1 + llms/openai/sampling_warnings.go | 27 ++++++++++++++++++++++++ llms/openai/sampling_warnings_test.go | 18 ++++++++++++++++ 9 files changed, 90 insertions(+) diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 82ad780a5..3f6d01643 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -47,6 +47,9 @@ func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOpti if opts.LogProbs != nil && *opts.LogProbs { drop("WithLogProbs", "true") } + if opts.JSONMode { + drop("WithJSONMode", "true") + } } func reportAnthropicEffort( diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index 7f4b96790..97c0c262f 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -183,3 +183,14 @@ func TestAnEffortLoweredToWhatTheModelTakesIsReported(t *testing.T) { require.Equal(t, "xhigh", w.Asked) require.Equal(t, "high", w.Sent) } + +func TestAskingForJSONOnADoorThatSendsNoneIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithJSONMode()) + + w, ok := warningsByOption(resp.Warnings)["WithJSONMode"] + require.True(t, ok, "no json-mode warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "true", w.Asked) +} diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go index b31d7e52e..8011c96bb 100644 --- a/llms/bedrock/warnings.go +++ b/llms/bedrock/warnings.go @@ -59,5 +59,8 @@ func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) [] if opts.LogProbs != nil && *opts.LogProbs { drop("WithLogProbs", "true") } + if opts.JSONMode { + drop("WithJSONMode", "true") + } return warnings } diff --git a/llms/bedrock/warnings_test.go b/llms/bedrock/warnings_test.go index a682b3d1e..8a556a330 100644 --- a/llms/bedrock/warnings_test.go +++ b/llms/bedrock/warnings_test.go @@ -122,3 +122,15 @@ func TestTheConversePathReportsWhatTheLegacyPayloadWouldHaveCarried(t *testing.T require.Contains(t, got, "WithFrequencyPenalty", "ConverseInput has no penalty field") require.Contains(t, got, "WithCandidateCount", "ConverseInput has no candidate-count field") } + +func TestAskingForJSONOnBedrockIsReported(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, legacyAnswer, + []bedrock.Option{bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0")}, + llms.WithJSONMode()) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithJSONMode"] + require.True(t, ok, "no json-mode warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) +} diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index 504234a51..7641d46b0 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -45,6 +45,9 @@ func reportHuggingFaceOptions( dropFloat("WithPresencePenalty", opts.PresencePenalty) reportHuggingFaceShapedOptions(opts, drop) + if cfg := opts.Reasoning; cfg != nil && cfg.HasExplicitTokens() { + drop("WithReasoning", strconv.Itoa(cfg.Tokens)+" tokens") + } reportHuggingFaceMessages(warn, model, messages) } diff --git a/llms/huggingface/warnings_test.go b/llms/huggingface/warnings_test.go index 2cbd02df6..4c2398cf2 100644 --- a/llms/huggingface/warnings_test.go +++ b/llms/huggingface/warnings_test.go @@ -91,3 +91,15 @@ func TestAPlainHuggingFaceCallCarriesNoWarnings(t *testing.T) { resp := generateForWarnings(t, oneMessage(), llms.WithTemperature(0.2)) require.Empty(t, resp.Warnings) } + +func TestAThinkingTokenBudgetHasNoFieldOnThisDoor(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, oneMessage(), + llms.WithMaxLength(8192), llms.WithReasoning(llms.ReasoningHigh, 4096)) + + w, ok := hfWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "4096 tokens", w.Asked) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 506f833da..db449f1f7 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -112,6 +112,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten } warn := &llms.Warnings{} + reportOpenAIUnread(warn, o.effectiveModel(opts), opts) req, err := o.createChatRequest(chatMsgs, opts, warn) if err != nil { return nil, err diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 1eea3c72b..b5c0725a6 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -74,6 +74,33 @@ func addNonZeroIntChange(warn *llms.Warnings, option, model, reason string, befo warn.AddIntChange(option, model, reason, before, after) } +func reportOpenAIUnread(warn *llms.Warnings, model string, opts llms.CallOptions) { + const unread = "the door builds no field for it" + + drop := func(option, asked string) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: asked, Reason: unread, + }) + } + for _, o := range []struct { + option string + value *int + neutral int + }{ + {"WithCandidateCount", opts.CandidateCount, 1}, + {"WithMinLength", opts.MinLength, 0}, + {"WithMaxLength", opts.MaxLength, 0}, + } { + if o.value != nil && *o.value != o.neutral { + drop(o.option, strconv.Itoa(*o.value)) + } + } + if opts.ResponseMIMEType != nil && *opts.ResponseMIMEType != "" { + drop("WithResponseMIMEType", *opts.ResponseMIMEType) + } +} + func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { switch { case reasoning.ClaudeRejectsSampling(model): diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 365f7507f..4241c3d2e 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -190,3 +190,21 @@ func TestAZeroTopKIsNotALoss(t *testing.T) { t.Errorf("no top-k was asked for, got %v", resp.Warnings) } } + +func TestOptionsThisDoorReadsNowhereAreReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-4o", + llms.WithCandidateCount(3), llms.WithMinLength(10), + llms.WithMaxLength(4096), llms.WithResponseMIMEType("application/json")) + + for option, asked := range map[string]string{ + "WithCandidateCount": "3", "WithMinLength": "10", + "WithMaxLength": "4096", "WithResponseMIMEType": "application/json", + } { + w := warningFor(t, resp, option) + if w.Kind != llms.WarningDrop || w.Asked != asked { + t.Errorf("%s warning = %+v", option, w) + } + } +} From a76e71c8049fae7756cfd4151312fefadb5f23d0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 10:52:41 +0300 Subject: [PATCH 418/618] fix(bedrock): report the thinking mechanism the model overrides WithAdaptiveReasoning expresses a mechanism, and both bedrock doors resolve the mechanism from the model instead: on a budget-only generation the adaptive request became budget thinking with no word to the caller, while the direct anthropic door reports that same swap. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/converse_warnings.go | 4 ++++ .../bedrockclient/converse_warnings_test.go | 20 +++++++++++++++++++ .../internal/bedrockclient/warnings.go | 14 +++++++++++++ 3 files changed, 38 insertions(+) diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 5d247a797..63dfdb6d7 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -80,6 +80,10 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro }) } } + if thinking, ok := converseAdditionalFields(built)["thinking"].(map[string]any); ok { + sentType, _ := thinking["type"].(string) + reportMechanismSwap(warn, model, input.ReasoningConfig, sentType) + } if cfg := input.ReasoningConfig; cfg != nil && cfg.HasExplicitTokens() { reportThinkingBudget(warn, model, cfg.Tokens, converseThinkingBudget(built)) } diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index 840d7e296..e47ec8793 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -234,3 +234,23 @@ func TestConverseReadsTheEffortEveryFamilyWritesItsOwnWay(t *testing.T) { }) } } + +func TestConverseReportsAMechanismTheModelDoesNotOffer(t *testing.T) { + t.Parallel() + + maxTokens := 8192 + resp := converseCall(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + MaxTokens: &maxTokens, + ReasoningConfig: &llms.ReasoningConfig{ + Mode: llms.ReasoningOn, Effort: llms.ReasoningHigh, Adaptive: true, + }, + }) + + w, ok := converseWarningsByOption(resp.Warnings)["WithAdaptiveReasoning"] + require.True(t, ok, "no mechanism warning in %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "adaptive", w.Asked) + require.Equal(t, "enabled", w.Sent) +} diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index b855fe260..7017d836d 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -74,6 +74,9 @@ func reportLegacyAnthropic( } reportEffortClamp(warn, modelID, string(cfg.Effort), sent, input.Thinking != nil) } + if input.Thinking != nil { + reportMechanismSwap(warn, modelID, options.Reasoning, input.Thinking.Type) + } if cfg := options.Reasoning; cfg != nil && cfg.HasExplicitTokens() { sent := 0 if input.Thinking != nil { @@ -157,3 +160,14 @@ func reportEffortClamp(warn *llms.Warnings, modelID, asked, sent string, thinkin }) } } + +func reportMechanismSwap(warn *llms.Warnings, modelID string, cfg *llms.ReasoningConfig, sentType string) { + if cfg == nil || !cfg.Adaptive || sentType == "" || sentType == "adaptive" { + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithAdaptiveReasoning", Model: modelID, + Asked: "adaptive", Sent: sentType, + Reason: "the door takes the thinking mechanism from the model, not from the preference", + }) +} From 1c4148fe8ecc2a40f9a9be918d142b94118dfee0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 10:55:11 +0300 Subject: [PATCH 419/618] fix(bedrock): report what the legacy nova path takes away Nova expresses thinking as an effort, so a caller's token budget has no field to travel in, and at the efforts where the vendor's request drops the sampling block the door zeroes max tokens, temperature and top-p as well. All four went out unreported, because the legacy reporter only covered the anthropic payload. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient.go | 2 +- .../internal/bedrockclient/provider_nova.go | 6 ++-- .../internal/bedrockclient/warnings.go | 34 +++++++++++++++++++ .../internal/bedrockclient/warnings_test.go | 21 ++++++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient.go b/llms/bedrock/internal/bedrockclient/bedrockclient.go index 66d8c9430..86b033d1b 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient.go @@ -131,7 +131,7 @@ func (c *Client) CreateCompletion(ctx context.Context, case "amazon": resp, err = createAmazonCompletion(ctx, c.client, modelID, messages, options) case "nova": - resp, err = createNovaCompletion(ctx, c.client, modelID, messages, options) + resp, err = createNovaCompletion(ctx, c.client, modelID, messages, options, warn) case "anthropic": resp, err = createAnthropicCompletion(ctx, c.client, modelID, messages, options, warn) case "cohere": diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 84d127f92..3a52067eb 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -165,7 +165,7 @@ const ( ) func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemPrompt, modelID string, - options llms.CallOptions, + options llms.CallOptions, warn *llms.Warnings, ) ([]byte, error) { inferenceConfig := novaInferenceConfigInput{ MaxTokens: options.GetMaxTokens(), @@ -181,6 +181,7 @@ func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemProm inferenceConfig.Temperature = 0 inferenceConfig.TopP = 0 } + reportNovaReasoning(warn, modelID, options, effort) } input := novaTextGenerationInput{ @@ -220,13 +221,14 @@ func createNovaCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { inputContents, systemPrompt, err := processInputMessagesNova(messages) if err != nil { return nil, err } - body, err := novaInputToJSON(inputContents, systemPrompt, modelID, options) + body, err := novaInputToJSON(inputContents, systemPrompt, modelID, options, warn) if err != nil { return nil, err } diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index 7017d836d..ea5e86e7d 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) // A provider is listed here only where its own payload struct has the field — @@ -171,3 +172,36 @@ func reportMechanismSwap(warn *llms.Warnings, modelID string, cfg *llms.Reasonin Reason: "the door takes the thinking mechanism from the model, not from the preference", }) } + +func reportNovaReasoning(warn *llms.Warnings, modelID string, options llms.CallOptions, effort string) { + const cleared = "the nova request drops the sampling values at this reasoning effort" + + if cfg := options.Reasoning; cfg != nil && cfg.HasExplicitTokens() { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: modelID, + Asked: strconv.Itoa(cfg.Tokens) + " tokens", + Reason: "nova takes a reasoning effort, so a token budget has nowhere to go", + }) + } + if !reasoning.NovaClearsInferenceConfigAt(effort) { + return + } + if options.MaxTokens != nil && *options.MaxTokens > 0 { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithMaxTokens", Model: modelID, + Asked: strconv.Itoa(*options.MaxTokens), Reason: cleared, + }) + } + reportLegacyFloatDrop(warn, "WithTemperature", modelID, cleared, options.Temperature) + reportLegacyFloatDrop(warn, "WithTopP", modelID, cleared, options.TopP) +} + +func reportLegacyFloatDrop(warn *llms.Warnings, option, modelID, reason string, asked *float64) { + if asked == nil { + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: modelID, + Asked: strconv.FormatFloat(*asked, 'g', -1, 64), Reason: reason, + }) +} diff --git a/llms/bedrock/internal/bedrockclient/warnings_test.go b/llms/bedrock/internal/bedrockclient/warnings_test.go index cb50970ee..b3b6380ba 100644 --- a/llms/bedrock/internal/bedrockclient/warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/warnings_test.go @@ -176,3 +176,24 @@ func TestTheLegacyDoorReportsAnEffortItLowered(t *testing.T) { require.Equal(t, "xhigh", w.Asked) require.Equal(t, "high", w.Sent) } + +func TestTheLegacyNovaPathReportsWhatItDrops(t *testing.T) { + t.Parallel() + + const novaAnswer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1}}` + + const model = "us.amazon.nova-2-lite-v1:0" + temperature, maxTokens := 0.2, 8192 + resp := legacyCallAnswering(t, model, novaAnswer, llms.CallOptions{ + Temperature: &temperature, + MaxTokens: &maxTokens, + Reasoning: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: llms.ReasoningHigh, Tokens: 4096}, + }) + + got := legacyWarningsByOption(resp.Warnings) + w, ok := got["WithReasoning"] + require.True(t, ok, "no reasoning warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "4096 tokens", w.Asked) +} From ca48b1b8c7dbe616a780813634475eb3cc3dde46 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 17:07:11 +0300 Subject: [PATCH 420/618] fix(openai): keep top_k and repetition_penalty off OpenAI's own endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pentagi offers Top K and Repetition Penalty as fields on every agent, and this door put both on the wire for every model it serves. OpenAI's chat-completions endpoint fails the whole request on them rather than ignoring them, so an operator who filled either field got a provider that answered nothing at all — measured on the stand as Simple 0/25 with "Unrecognized request arguments supplied: repetition_penalty, top_k". Both now stay behind for OpenAI's own catalogue and are reported through ContentResponse.Warnings instead. The other vendors this door serves keep them: the same measurement shows glm-4.5-air answering 200 with top_k on the wire, and a test holds that line. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 11 +++++++- llms/openai/sampling_warnings.go | 2 ++ llms/openai/sampling_warnings_test.go | 36 +++++++++++++++++++++++++++ llms/reasoning/effort_wire.go | 26 +++++++++++++++++++ llms/reasoning/provider_enum_test.go | 15 +++++++++++ 5 files changed, 89 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index db449f1f7..33cef90a5 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -284,13 +284,22 @@ func (o *LLM) createChatRequest( ExtraBody: getExtraBody(&opts), } - if model := o.effectiveModel(opts); reasoning.RejectsPenalties(model) { + model := o.effectiveModel(opts) + if reasoning.RejectsPenalties(model) { const refused = "the door does not send the penalties on this model family" addNonZeroChange(warn, "WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) addNonZeroChange(warn, "WithPresencePenalty", model, refused, req.PresencePenalty, nil) req.FrequencyPenalty = nil req.PresencePenalty = nil } + if reasoning.RejectsTopK(model) && req.TopK != nil { + addNonZeroIntChange(warn, "WithTopK", model, refusedByEndpoint, req.TopK, nil) + req.TopK = nil + } + if reasoning.RejectsRepetitionPenalty(model) && req.RepetitionPenalty != nil { + addNonZeroChange(warn, "WithRepetitionPenalty", model, refusedByEndpoint, req.RepetitionPenalty, nil) + req.RepetitionPenalty = nil + } if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) { if opts.StreamingFunc == nil { diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index b5c0725a6..87ed48365 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -60,6 +60,8 @@ func (s samplingSnapshot) report(req *openaiclient.ChatRequest, model, reason st } // addNonZeroChange is for options whose zero asks for nothing — unlike temperature. +const refusedByEndpoint = "the endpoint refuses the whole request when this field is present" + func addNonZeroChange(warn *llms.Warnings, option, model, reason string, before, after *float64) { if before == nil || *before == 0 { return diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 4241c3d2e..332aa1a97 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -5,6 +5,7 @@ import ( "io" "net/http" "net/http/httptest" + "strings" "testing" "github.com/vxcontrol/langchaingo/llms" @@ -208,3 +209,38 @@ func TestOptionsThisDoorReadsNowhereAreReported(t *testing.T) { } } } + +func TestFieldsThisEndpointRefusesStayOffTheWire(t *testing.T) { + t.Parallel() + + body := sendForWire(t, "gpt-4o", llms.WithTopK(7), llms.WithRepetitionPenalty(1.1)) + + for _, field := range []string{`"top_k"`, `"repetition_penalty"`} { + if strings.Contains(body, field) { + t.Errorf("%s reached the wire; OpenAI answers 400 on it: %s", field, body) + } + } +} + +func TestAFieldTheEndpointRefusesIsReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-4o", llms.WithTopK(7), llms.WithRepetitionPenalty(1.1)) + + for option, asked := range map[string]string{"WithTopK": "7", "WithRepetitionPenalty": "1.1"} { + w := warningFor(t, resp, option) + if w.Kind != llms.WarningDrop || w.Asked != asked { + t.Errorf("%s warning = %+v", option, w) + } + } +} + +func TestAVendorThatTakesTopKStillGetsIt(t *testing.T) { + t.Parallel() + + body := sendForWire(t, "zai/glm-4.5-air", llms.WithTopK(7)) + + if !strings.Contains(body, `"top_k":7`) { + t.Errorf("glm takes top_k and answered 200 to it; the wire lost it: %s", body) + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index d99594fd0..6b3439f87 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -16,6 +16,32 @@ func RejectsPenalties(model string) bool { return false } +// RejectsTopK reports whether top_k must stay off the wire. +func RejectsTopK(model string) bool { + return openAIProperName(model) +} + +// RejectsRepetitionPenalty reports whether repetition_penalty must stay off the wire. +func RejectsRepetitionPenalty(model string) bool { + return openAIProperName(model) +} + +// openAIProperName reports whether the name belongs to OpenAI's own catalogue +// rather than to another vendor this door serves. +func openAIProperName(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "gpt-oss") { + return false + } + if strings.HasPrefix(form, "gpt-") || strings.HasPrefix(form, "chatgpt-") || + strings.HasPrefix(form, "o1") || strings.HasPrefix(form, "o3") || + strings.HasPrefix(form, "o4-") { + return true + } + } + return false +} + // RejectsMinP reports whether min_p must stay off the wire. func RejectsMinP(model string) bool { return isClaudeModel(model) diff --git a/llms/reasoning/provider_enum_test.go b/llms/reasoning/provider_enum_test.go index 3b1d63c7f..c7915aa31 100644 --- a/llms/reasoning/provider_enum_test.go +++ b/llms/reasoning/provider_enum_test.go @@ -36,3 +36,18 @@ func TestEveryMistralModelDisablesByOmission(t *testing.T) { } } } + +func TestOnlyOpenAIsOwnCatalogueRefusesTopK(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-4o", "gpt-5.4-nano", "o3", "o4-mini", "chatgpt-4o-latest"} { + if !RejectsTopK(model) { + t.Errorf("%q is OpenAI's own name; its endpoint fails the call on top_k", model) + } + } + for _, model := range []string{"gpt-oss:20b", "gpt-oss-120b", "zai/glm-4.5-air", "qwen3-max", "grok-4"} { + if RejectsTopK(model) { + t.Errorf("%q is not an OpenAI name and must not inherit its refusal", model) + } + } +} From bcf7eb1ad236a9f6f2142ecddb421248228c62e5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 17:49:26 +0300 Subject: [PATCH 421/618] fix(googleai): disable thinking on Gemini 3 through the level scale A request that asked for thinking off on a Gemini 3 model carried thinkingBudget: 0, the control the vendor documents for Gemini 2.5 and earlier. Gemini 3 is driven by thinking_level, whose lowest rung is MINIMAL, so the disable now travels as that level and the caller is told by a substitute warning that off became the lowest level. The same misclassification cut both ways: models that do offer MINIMAL were refused as undisablable, and every flash-lite name was treated as already off, so nothing was sent to models that think by default. Disabling is now decided by whether the model offers MINIMAL, and only Gemini 2.5 Flash-Lite counts as off until asked. The production model table now mirrors all fourteen names in the pentagi catalogue instead of nine. PAGI-284 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_core_unit_test.go | 15 +++-- llms/googleai/thinking_wire_test.go | 73 ++++++++++++++++++++++++ llms/googleai/warnings.go | 20 ++++++- llms/googleai/warnings_test.go | 24 ++++++++ llms/reasoning/detect_hint_test.go | 8 +-- llms/reasoning/gemini_capability.go | 19 +----- llms/reasoning/gemini_capability_test.go | 16 ++++-- llms/reasoning/off.go | 4 +- llms/reasoning/off_test.go | 16 +++--- llms/reasoning_support_test.go | 21 ++++--- 10 files changed, 167 insertions(+), 49 deletions(-) create mode 100644 llms/googleai/thinking_wire_test.go diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index bfa97a900..41c65c404 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1049,13 +1049,18 @@ var productionGeminiModels = []struct { togglesByLevel bool // on/off only, through thinking_level: high or minimal disable disableWire }{ - {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableZeroBudget}, + {name: "gemini-3.8-flash", usesThinkingLevel: true, disable: disableUnsupported}, + {name: "gemini-3.7-flash", usesThinkingLevel: true, disable: disableUnsupported}, + {name: "gemini-3.6-flash", usesThinkingLevel: true, disable: disableMinimalLevel}, + {name: "gemini-3.5-flash", usesThinkingLevel: true, disable: disableMinimalLevel}, + {name: "gemini-3.5-flash-lite", usesThinkingLevel: true, disable: disableMinimalLevel}, {name: "gemini-3.1-pro-preview", usesThinkingLevel: true, disable: disableUnsupported}, {name: "gemini-3.1-pro-preview-customtools", usesThinkingLevel: true, disable: disableUnsupported}, - {name: "gemini-3.1-flash-lite", usesThinkingLevel: true, disable: disableOmit}, + {name: "gemini-3.1-flash-lite", usesThinkingLevel: true, disable: disableMinimalLevel}, + {name: "gemini-3-flash-preview", usesThinkingLevel: true, disable: disableMinimalLevel}, {name: "gemini-2.5-pro", usesThinkingLevel: false, disable: disableUnsupported}, {name: "gemini-2.5-flash", usesThinkingLevel: false, disable: disableZeroBudget}, - {name: "gemini-2.5-flash-lite", usesThinkingLevel: false, disable: disableOmit}, + {name: "gemini-2.5-flash-lite", usesThinkingLevel: false, disable: disableZeroBudget}, {name: "gemma-4-31b-it", usesThinkingLevel: false, togglesByLevel: true, disable: disableMinimalLevel}, {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, togglesByLevel: true, disable: disableMinimalLevel}, } @@ -1134,7 +1139,7 @@ func TestResolveThinkingConfig(t *testing.T) { //nolint:funlen }) t.Run("off on non-disablable model errors, no budget zero", func(t *testing.T) { - for _, model := range []string{"gemini-2.5-pro", "gemini-3.1-pro", "gemini-3.6-flash", "gemini-3.7-flash"} { + for _, model := range []string{"gemini-2.5-pro", "gemini-3.1-pro", "gemini-3.7-flash", "gemini-3.8-flash"} { tc, err := resolveThinkingConfig(model, &llms.ReasoningConfig{Mode: llms.ReasoningOff}, 1000) var offErr *reasoning.ErrReasoningOffUnsupported require.ErrorAs(t, err, &offErr, "off on %s must be unsupported", model) @@ -1227,7 +1232,7 @@ func TestResolveThinkingConfig(t *testing.T) { //nolint:funlen func TestProductionGeminiModels_ThinkingConfig(t *testing.T) { t.Parallel() - require.Len(t, productionGeminiModels, 9, "models.yml currently lists 9 models; update this table when the catalog changes") + require.Len(t, productionGeminiModels, 14, "models.yml currently lists 14 models; update this table when the catalog changes") for _, m := range productionGeminiModels { t.Run(m.name, func(t *testing.T) { diff --git a/llms/googleai/thinking_wire_test.go b/llms/googleai/thinking_wire_test.go new file mode 100644 index 000000000..12ccae749 --- /dev/null +++ b/llms/googleai/thinking_wire_test.go @@ -0,0 +1,73 @@ +package googleai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func thinkingWireFor(t *testing.T, model string, opts ...llms.CallOption) string { + t.Helper() + + var body string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, _ := io.ReadAll(r.Body) + body = string(b) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"candidates":[{"content":{"role":"model","parts":[{"text":"hi"}]},`+ + `"finishReason":"STOP"}],"usageMetadata":{}}`) + })) + t.Cleanup(server.Close) + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithEndpoint(server.URL), WithDefaultModel(model)) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + require.NoError(t, err) + return body +} + +func TestNoThinkingBudgetReachesAGemini3Model(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "gemini-3.6-flash", "gemini-3.5-flash", "gemini-3.5-flash-lite", + "gemini-3.1-flash-lite", "gemini-3-flash-preview", + } { + for name, opt := range map[string]llms.CallOption{ + "disabled": llms.WithReasoningDisabled(), + "effort": llms.WithReasoning(llms.ReasoningMedium, 0), + } { + body := thinkingWireFor(t, model, opt, llms.WithMaxTokens(8192)) + assert.NotContains(t, body, "thinkingBudget", + "%s on %s: this generation is driven by the level scale", name, model) + } + } +} + +func TestDisablingThinkingOnAGemini3ModelSendsTheLowestLevel(t *testing.T) { + t.Parallel() + + body := thinkingWireFor(t, "gemini-3.5-flash", llms.WithReasoningDisabled()) + assert.Contains(t, body, `"thinkingLevel":"MINIMAL"`) +} + +func TestDisablingThinkingOnGemini25StillSendsBudgetZero(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-2.5-flash", "gemini-2.5-flash-lite"} { + body := thinkingWireFor(t, model, llms.WithReasoningDisabled()) + assert.Contains(t, body, `"thinkingBudget":0`, "%s takes the budget wire", model) + assert.NotContains(t, body, "thinkingLevel", + "%s answers with an error when a level is present", model) + } +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 9bc3162a1..e56e0bcc3 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -51,7 +51,14 @@ func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOpti func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOptions, tc *genai.ThinkingConfig) { cfg := opts.Reasoning - if cfg == nil || cfg.ResolveMode() != llms.ReasoningOn { + if cfg == nil { + return + } + if cfg.ResolveMode() == llms.ReasoningOff { + reportGoogleAIDisableFloor(warn, model, tc) + return + } + if cfg.ResolveMode() != llms.ReasoningOn { return } @@ -94,3 +101,14 @@ func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOpt }) } } + +func reportGoogleAIDisableFloor(warn *llms.Warnings, model string, tc *genai.ThinkingConfig) { + if tc == nil || tc.ThinkingLevel == "" { + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoningDisabled", Model: model, + Asked: "off", Sent: strings.ToLower(string(tc.ThinkingLevel)), + Reason: "this model has no off switch, only a lowest thinking level", + }) +} diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go index 764e03e36..241f29328 100644 --- a/llms/googleai/warnings_test.go +++ b/llms/googleai/warnings_test.go @@ -131,3 +131,27 @@ func TestAThinkingLevelTheModelDoesNotTakeIsReported(t *testing.T) { require.Equal(t, "minimal", w.Asked) require.Equal(t, "LOW", w.Sent) } + +func TestADisableThisModelCanOnlyApproximateIsReported(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-3.6-flash", "gemini-3.5-flash-lite", "gemini-3-flash-preview"} { + resp := generateForWarnings(t, model, llms.WithReasoningDisabled()) + + w, ok := googleWarningsByOption(resp.Warnings)["WithReasoningDisabled"] + require.True(t, ok, "no disable warning for %s in %v", model, resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "off", w.Asked) + require.Equal(t, "minimal", w.Sent) + require.Equal(t, model, w.Model) + } +} + +func TestADisableThatReallyTurnsThinkingOffIsNotAWarning(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-2.5-flash", "gemini-2.5-flash-lite"} { + resp := generateForWarnings(t, model, llms.WithReasoningDisabled()) + require.Empty(t, resp.Warnings, "%s takes budget zero, nothing is lost", model) + } +} diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index 4816114f6..ecd62152a 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -63,7 +63,7 @@ func TestNonTextModalitiesAreNotGuessedAsReasoning(t *testing.T) { } } -func TestFlashLiteIsRecognisedOnlyWithinTheGoogleFamilies(t *testing.T) { +func TestOnlyTheGemini25FlashLiteLeavesThinkingOff(t *testing.T) { t.Parallel() for _, tc := range []struct { @@ -71,10 +71,10 @@ func TestFlashLiteIsRecognisedOnlyWithinTheGoogleFamilies(t *testing.T) { want bool }{ {"gemini-2.5-flash-lite", true}, - {"gemini-3.1-flash-lite", true}, - {"gemini-3.5-flash-lite", true}, - {"gemma-4-flash-lite", true}, {"models/gemini-2.5-flash-lite-preview-06-17", true}, + {"gemini-3.1-flash-lite", false}, + {"gemini-3.5-flash-lite", false}, + {"gemma-4-flash-lite", false}, {"some-flash-lite-thing", false}, {"llama-4-flash-lite", false}, {"gemini-2.5-flash", false}, diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 455a87251..621ff3e77 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -111,7 +111,7 @@ func GeminiCanDisable(model string) bool { return true } if hasFamily(m, "gemini-3") { - return geminiBudgetZeroDisables(m) + return GeminiAcceptsMinimalLevel(m) } if hasFamily(m, "gemini-2.5") && strings.Contains(m, "pro") { return false @@ -119,22 +119,9 @@ func GeminiCanDisable(model string) bool { return true } -func geminiBudgetZeroDisables(model string) bool { - if strings.Contains(model, "pro") { - return false - } - if hasFamily(model, "gemini-3.5") { - return true - } - return !strings.HasPrefix(model, "gemini-3.") -} - // GeminiThinkingOffByDefault reports whether the model leaves thinking off until // asked, so omitting the thinking config already yields "off". func GeminiThinkingOffByDefault(model string) bool { - m := baseModelName(model) - if !strings.Contains(m, "flash-lite") { - return false - } - return strings.Contains(m, "gemini") || strings.Contains(m, "gemma") + return hasFamily(baseModelName(model), "gemini-2.5") && + strings.Contains(baseModelName(model), "flash-lite") } diff --git a/llms/reasoning/gemini_capability_test.go b/llms/reasoning/gemini_capability_test.go index 0635369a6..53f6e6616 100644 --- a/llms/reasoning/gemini_capability_test.go +++ b/llms/reasoning/gemini_capability_test.go @@ -42,8 +42,9 @@ func TestGeminiCanDisable(t *testing.T) { {"gemini-3.1-pro-preview", false}, {"gemini-3.5-flash", true}, {"gemini-3.5-pro", false}, - {"gemini-3.6-flash", false}, + {"gemini-3.6-flash", true}, {"gemini-3.7-flash", false}, + {"gemini-3.8-flash", false}, {"some-unknown-google-model", true}, // optimistic } for _, tc := range cases { @@ -110,20 +111,23 @@ func TestGeminiFamilyBoundary(t *testing.T) { } } -func TestGeminiFlashLiteDisablesByOmitting(t *testing.T) { +func TestTheDisableWireFollowsTheGenerationOfTheModel(t *testing.T) { t.Parallel() cases := []struct { model string canDisable bool off OffWire }{ - {"gemini-2.5-flash-lite", true, OffOmit}, - {"gemini-3.1-flash-lite", true, OffOmit}, - {"gemini-3.5-flash-lite", true, OffOmit}, + {"gemini-2.5-flash-lite", true, OffZeroBudget}, {"gemini-2.5-flash", true, OffZeroBudget}, {"gemini-2.5-pro", false, OffUnsupported}, + {"gemini-3.1-flash-lite", true, OffMinimalLevel}, + {"gemini-3.5-flash-lite", true, OffMinimalLevel}, + {"gemini-3.6-flash", true, OffMinimalLevel}, + {"gemini-3-flash-preview", true, OffMinimalLevel}, + {"gemini-3.7-flash", false, OffUnsupported}, + {"gemini-3.8-flash", false, OffUnsupported}, {"gemini-3.1-pro-preview", false, OffUnsupported}, - {"gemini-3.6-flash", false, OffUnsupported}, } for _, tc := range cases { if got := GeminiCanDisable(tc.model); got != tc.canDisable { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 011ea34e0..661f056af 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -83,10 +83,10 @@ func ResolveOff(model string, p Provider) OffWire { } // Known non-thinking families reject thinkingBudget:0, so omit rather than // send it; unknown Gemini/Gemma names stay optimistic (attempt budget:0). - if geminiKnownNonThinking(model) || GeminiThinkingOffByDefault(model) { + if geminiKnownNonThinking(model) { return OffOmit } - if GeminiTogglesThinkingByLevel(model) { + if GeminiTogglesThinkingByLevel(model) || GeminiUsesThinkingLevel(model) { return OffMinimalLevel } return OffZeroBudget diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 4e453130a..c6b4c7727 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -19,18 +19,20 @@ func TestResolveOff(t *testing.T) { {"claude-sonnet-4-5", ProviderBedrock, OffOmit}, // off by default {"claude-3-5-haiku", ProviderAnthropic, OffOmit}, // no thinking {"gemini-2.5-flash", ProviderGoogleAI, OffZeroBudget}, - {"gemini-2.5-flash-lite", ProviderGoogleAI, OffOmit}, + {"gemini-2.5-flash-lite", ProviderGoogleAI, OffZeroBudget}, {"gemini-2.5-pro", ProviderGoogleAI, OffUnsupported}, // Pro cannot disable thinking {"gemini-3.1-pro", ProviderGoogleAI, OffUnsupported}, {"gemini-3.1-pro-preview", ProviderGoogleAI, OffUnsupported}, {"gemini-3.1-pro-preview-customtools", ProviderGoogleAI, OffUnsupported}, - {"gemini-3.1-flash-lite", ProviderGoogleAI, OffOmit}, - {"gemini-3-flash", ProviderGoogleAI, OffZeroBudget}, - {"gemini-3-flash-preview", ProviderGoogleAI, OffZeroBudget}, - {"gemini-3.5-flash", ProviderGoogleAI, OffZeroBudget}, - {"models/gemini-3.5-flash", ProviderGoogleAI, OffZeroBudget}, - {"gemini-3.6-flash", ProviderGoogleAI, OffUnsupported}, + {"gemini-3.1-flash-lite", ProviderGoogleAI, OffMinimalLevel}, + {"gemini-3-flash", ProviderGoogleAI, OffMinimalLevel}, + {"gemini-3-flash-preview", ProviderGoogleAI, OffMinimalLevel}, + {"gemini-3.5-flash", ProviderGoogleAI, OffMinimalLevel}, + {"gemini-3.5-flash-lite", ProviderGoogleAI, OffMinimalLevel}, + {"models/gemini-3.5-flash", ProviderGoogleAI, OffMinimalLevel}, + {"gemini-3.6-flash", ProviderGoogleAI, OffMinimalLevel}, {"gemini-3.7-flash", ProviderGoogleAI, OffUnsupported}, + {"gemini-3.8-flash", ProviderGoogleAI, OffUnsupported}, {"gemini-3.5-pro", ProviderGoogleAI, OffUnsupported}, {"gemma-4-31b-it", ProviderGoogleAI, OffMinimalLevel}, {"gemma-4-26b-a4b-it", ProviderGoogleAI, OffMinimalLevel}, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index cc9de9fc2..c0af95c5f 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -196,20 +196,25 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } }) - t.Run("Gemini Flash-Lite is off until asked", func(t *testing.T) { - for _, model := range []string{"gemini-2.5-flash-lite", "gemini-3.1-flash-lite", "gemini-3.5-flash-lite"} { + t.Run("only Gemini 2.5 Flash-Lite is off until asked", func(t *testing.T) { + lite := ReasoningSupportFor("gemini-2.5-flash-lite", reasoning.ProviderGoogleAI) + eq(t, "2.5 Flash-Lite Supported", lite.Supported, true) + eq(t, "2.5 Flash-Lite CannotDisable", lite.CannotDisable, false) + if lite.DefaultOn == nil || *lite.DefaultOn { + t.Errorf("gemini-2.5-flash-lite DefaultOn = %v, want false", lite.DefaultOn) + } + for _, model := range []string{"gemini-3.1-flash-lite", "gemini-3.5-flash-lite", "gemini-3.6-flash"} { s := ReasoningSupportFor(model, reasoning.ProviderGoogleAI) eq(t, model+" Supported", s.Supported, true) eq(t, model+" CannotDisable", s.CannotDisable, false) - if s.DefaultOn == nil || *s.DefaultOn { - t.Errorf("%s DefaultOn = %v, want false", model, s.DefaultOn) + if s.DefaultOn == nil || !*s.DefaultOn { + t.Errorf("%s DefaultOn = %v, want true", model, s.DefaultOn) } } - flash := ReasoningSupportFor("gemini-3.6-flash", reasoning.ProviderGoogleAI) - if flash.DefaultOn == nil || !*flash.DefaultOn { - t.Errorf("gemini-3.6-flash DefaultOn = %v, want true", flash.DefaultOn) + for _, model := range []string{"gemini-3.7-flash", "gemini-3.8-flash"} { + s := ReasoningSupportFor(model, reasoning.ProviderGoogleAI) + eq(t, model+" CannotDisable", s.CannotDisable, true) } - eq(t, "gemini-3.6-flash CannotDisable", flash.CannotDisable, true) }) t.Run("Gemini 2.5 disable hint is model-dependent", func(t *testing.T) { From f76f0fa4a5527da44c236298d3522928cf851e1e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 18:06:31 +0300 Subject: [PATCH 422/618] fix(ollama): send gpt-oss only the think levels it reads The think field on gpt-oss models takes low, medium or high; a boolean or "max" is dropped by the vendor rather than refused. The door sent think: false for a disable and think: true for any effort outside the shared level set, so both requests reached the model as if nothing had been asked. A disable on those models is now refused before the request, since their trace cannot be turned off at all, and an effort is mapped onto the three levels they read, with a substitute warning when that moves it. Models outside the gpt-oss family keep the boolean wire. PAGI-285 Co-Authored-By: Claude Opus 5 --- llms/ollama/ollamallm.go | 33 +++++++++++-- llms/ollama/think_request_test.go | 79 ++++++++++++++++++++++++++++--- llms/ollama/warnings.go | 26 +++++++--- llms/ollama/warnings_test.go | 9 +++- 4 files changed, 128 insertions(+), 19 deletions(-) diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 435ecb0ba..88c3100f7 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -300,12 +300,16 @@ func (o *LLM) convertToolCall(toolCall llms.ToolCall) (api.ToolCall, error) { return tc, nil } -func resolveThink(opts llms.CallOptions) *api.ThinkValue { +func resolveThink(model string, opts llms.CallOptions) *api.ThinkValue { switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningDefault leaves the field unset case llms.ReasoningOff: return &api.ThinkValue{Value: false} case llms.ReasoningOn: - if level := (&api.ThinkValue{Value: string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))}); level.IsValid() { + effort := opts.Reasoning.GetEffort(opts.GetMaxTokens()) + if takesOnlyGPTOSSLevels(model) { + return &api.ThinkValue{Value: gptOSSLevel(effort)} + } + if level := (&api.ThinkValue{Value: string(effort)}); level.IsValid() { return level } return &api.ThinkValue{Value: true} @@ -313,6 +317,25 @@ func resolveThink(opts llms.CallOptions) *api.ThinkValue { return nil } +func takesOnlyGPTOSSLevels(model string) bool { + name := strings.ToLower(model) + if idx := strings.LastIndex(name, "/"); idx != -1 { + name = name[idx+1:] + } + return strings.HasPrefix(name, "gpt-oss") +} + +func gptOSSLevel(effort llms.ReasoningEffort) string { + switch effort { + case llms.ReasoningMinimal, llms.ReasoningLow: + return "low" + case llms.ReasoningMedium: + return "medium" + default: + return "high" + } +} + // createChatRequest creates a chat request with the given parameters. func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms.CallOptions) (*api.ChatRequest, error) { format, err := o.resolveFormat(opts) @@ -326,6 +349,10 @@ func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms. return nil, fmt.Errorf("error creating ollama options: %w", err) } + if opts.Reasoning.IsDisabled() && takesOnlyGPTOSSLevels(model) { + return nil, &reasoning.ErrReasoningOffUnsupported{Model: model} + } + stream := opts.StreamingFunc != nil req := &api.ChatRequest{ @@ -335,7 +362,7 @@ func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms. Options: ollamaOptions, Stream: &stream, Tools: make(api.Tools, len(opts.Tools)), - Think: resolveThink(opts), + Think: resolveThink(model, opts), } keepAlive := o.options.keepAlive diff --git a/llms/ollama/think_request_test.go b/llms/ollama/think_request_test.go index 8f0c71249..2bfced8a3 100644 --- a/llms/ollama/think_request_test.go +++ b/llms/ollama/think_request_test.go @@ -9,30 +9,43 @@ import ( "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) func captureChatRequest(t *testing.T, opts ...llms.CallOption) map[string]any { t.Helper() + return captureChatRequestFor(t, "glm-5", opts...) +} + +func captureChatRequestFor(t *testing.T, model string, opts ...llms.CallOption) map[string]any { + t.Helper() + + body, err := sendChatRequest(t, model, opts...) + require.NoError(t, err) + + var got map[string]any + require.NoError(t, json.Unmarshal(body, &got)) + return got +} + +func sendChatRequest(t *testing.T, model string, opts ...llms.CallOption) ([]byte, error) { + t.Helper() var body []byte srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { body, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/x-ndjson") - _, _ = w.Write([]byte(`{"model":"glm-5","message":{"role":"assistant","content":"ok"},` + + _, _ = w.Write([]byte(`{"model":"` + model + `","message":{"role":"assistant","content":"ok"},` + `"done":true,"done_reason":"stop"}` + "\n")) })) t.Cleanup(srv.Close) - llm, err := New(WithServerURL(srv.URL), WithModel("glm-5")) + llm, err := New(WithServerURL(srv.URL), WithModel(model)) require.NoError(t, err) _, err = llm.GenerateContent(t.Context(), []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) - require.NoError(t, err) - - var got map[string]any - require.NoError(t, json.Unmarshal(body, &got)) - return got + return body, err } func TestThinkReachesTheWire(t *testing.T) { @@ -58,3 +71,55 @@ func TestThinkReachesTheWire(t *testing.T) { require.NotContains(t, captureChatRequest(t), "think") }) } + +func TestGPTOSSNeverGetsAThinkValueItIgnores(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-oss", "gpt-oss:120b", "gpt-oss:20b", "library/gpt-oss:20b"} { + for _, effort := range []llms.ReasoningEffort{ + llms.ReasoningMinimal, llms.ReasoningLow, llms.ReasoningMedium, + llms.ReasoningHigh, llms.ReasoningXHigh, llms.ReasoningMax, + } { + think := captureChatRequestFor(t, model, llms.WithReasoning(effort, 0))["think"] + require.Contains(t, []any{"low", "medium", "high"}, think, + "%s asked %s", model, effort) + } + } +} + +func TestDisablingThinkingOnGPTOSSIsRefusedBeforeTheRequest(t *testing.T) { + t.Parallel() + + body, err := sendChatRequest(t, "gpt-oss:120b", llms.WithReasoningDisabled()) + + var offErr *reasoning.ErrReasoningOffUnsupported + require.ErrorAs(t, err, &offErr) + require.Empty(t, body, "the request must not reach the server") +} + +func TestAnEffortGPTOSSCannotTakeIsReported(t *testing.T) { + t.Parallel() + + for asked, sent := range map[llms.ReasoningEffort]string{ + llms.ReasoningMinimal: "low", + llms.ReasoningXHigh: "high", + llms.ReasoningMax: "high", + } { + resp := generateForWarningsOn(t, "gpt-oss:120b", llms.WithReasoning(asked, 0)) + + w, ok := ollamaWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no warning for %s in %v", asked, resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, string(asked), w.Asked) + require.Equal(t, sent, w.Sent) + } +} + +func TestAnEffortGPTOSSTakesIsNotAWarning(t *testing.T) { + t.Parallel() + + for _, effort := range []llms.ReasoningEffort{llms.ReasoningLow, llms.ReasoningMedium, llms.ReasoningHigh} { + resp := generateForWarningsOn(t, "gpt-oss:120b", llms.WithReasoning(effort, 0)) + require.Empty(t, resp.Warnings, "%s is in the vendor set, nothing is lost", effort) + } +} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index d728361fe..18a713d09 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -62,13 +62,25 @@ func reportOllamaThinking(warn *llms.Warnings, model string, opts llms.CallOptio return } - effort := string(cfg.GetEffort(opts.GetMaxTokens())) - if level := (&api.ThinkValue{Value: effort}); !level.IsValid() { - warn.Add(llms.Warning{ - Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, - Asked: effort, Sent: "true", - Reason: "ollama takes a think level from a closed set and this effort is not in it", - }) + asked := cfg.GetEffort(opts.GetMaxTokens()) + effort := string(asked) + switch { + case takesOnlyGPTOSSLevels(model): + if sent := gptOSSLevel(asked); sent != effort { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: effort, Sent: sent, + Reason: "this model takes only low, medium or high, and ignores anything else", + }) + } + default: + if level := (&api.ThinkValue{Value: effort}); !level.IsValid() { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: effort, Sent: "true", + Reason: "ollama takes a think level from a closed set and this effort is not in it", + }) + } } if cfg.HasExplicitTokens() { warn.Add(llms.Warning{ diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 6c1a375a6..64e566bbc 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -12,15 +12,20 @@ import ( func generateForWarnings(t *testing.T, callOpts ...llms.CallOption) *llms.ContentResponse { t.Helper() + return generateForWarningsOn(t, "glm-5", callOpts...) +} + +func generateForWarningsOn(t *testing.T, model string, callOpts ...llms.CallOption) *llms.ContentResponse { + t.Helper() srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.Header().Set("Content-Type", "application/x-ndjson") - _, _ = w.Write([]byte(`{"model":"glm-5","message":{"role":"assistant","content":"hi"},` + + _, _ = w.Write([]byte(`{"model":"` + model + `","message":{"role":"assistant","content":"hi"},` + `"done":true,"done_reason":"stop"}` + "\n")) })) t.Cleanup(srv.Close) - llm, err := New(WithServerURL(srv.URL), WithModel("glm-5")) + llm, err := New(WithServerURL(srv.URL), WithModel(model)) require.NoError(t, err) resp, err := llm.GenerateContent(t.Context(), From e1be9fdf5344cbc84b958dceb70092fd19ff76e6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 18:14:49 +0300 Subject: [PATCH 423/618] fix(llms): report the extra body a door cannot merge WithExtraBody lived in the openai package and stored its fields under a key only that door read, while a caller attaches it to any provider. On anthropic, googleai, ollama, mistral, huggingface and both bedrock doors the fields were set, carried and dropped without a trace. The option now lives in llms, openai.WithExtraBody forwards to it so existing callers are untouched, and every door that builds its request through a vendor SDK reports the fields it had nowhere to put. The openai door still merges them and stays silent. PAGI-286 Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 4 ++++ llms/anthropic/sampling_warnings_test.go | 11 +++++++++ llms/bedrock/warnings.go | 6 +++++ llms/bedrock/warnings_test.go | 26 ++++++++++++++++++++ llms/googleai/warnings.go | 4 ++++ llms/googleai/warnings_test.go | 11 +++++++++ llms/huggingface/warnings.go | 4 ++++ llms/huggingface/warnings_test.go | 11 +++++++++ llms/mistral/warnings.go | 4 ++++ llms/mistral/warnings_test.go | 11 +++++++++ llms/ollama/warnings.go | 4 ++++ llms/ollama/warnings_test.go | 11 +++++++++ llms/openai/options.go | 15 ++---------- llms/openai/sampling_warnings_test.go | 30 ++++++++++++++++++++++++ llms/options.go | 23 ++++++++++++++++++ llms/warning.go | 19 +++++++++++++++ 16 files changed, 181 insertions(+), 13 deletions(-) diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 3f6d01643..931e4980e 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -12,6 +12,8 @@ import ( func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOptions) { const unread = "the door builds no field for it" + warn.AddUnreadExtraBody(model, opts, extraBodyUnread) + drop := func(option, asked string) { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: option, Model: model, @@ -159,3 +161,5 @@ func anthropicSamplingReason(model string, thinking *anthropicclient.ThinkingPay return "the model does not accept this combination of sampling parameters" } } + +const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index 97c0c262f..27d1374a8 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -194,3 +194,14 @@ func TestAskingForJSONOnADoorThatSendsNoneIsReported(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "true", w.Asked) } + +func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithExtraBody(map[string]any{"enable_thinking": false, "chat_template_kwargs": map[string]any{}})) + + w, ok := warningsByOption(resp.Warnings)["WithExtraBody"] + require.True(t, ok, "no extra-body warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) +} diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go index 8011c96bb..a55d925f5 100644 --- a/llms/bedrock/warnings.go +++ b/llms/bedrock/warnings.go @@ -22,6 +22,10 @@ func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) [] carriesCandidateCount := !converse && legacyCarriesCandidateCount[provider] var warnings []llms.Warning + var extra llms.Warnings + extra.AddUnreadExtraBody(model, opts, extraBodyUnread) + warnings = append(warnings, extra.List()...) + drop := func(option, asked string) { warnings = append(warnings, llms.Warning{ Kind: llms.WarningDrop, Option: option, Model: model, @@ -64,3 +68,5 @@ func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) [] } return warnings } + +const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/bedrock/warnings_test.go b/llms/bedrock/warnings_test.go index 8a556a330..eaaaa3c00 100644 --- a/llms/bedrock/warnings_test.go +++ b/llms/bedrock/warnings_test.go @@ -134,3 +134,29 @@ func TestAskingForJSONOnBedrockIsReported(t *testing.T) { require.True(t, ok, "no json-mode warning in %v", resp.Warnings) require.Equal(t, llms.WarningDrop, w.Kind) } + +func TestExtraBodyNeitherBedrockDoorCanMergeIsReported(t *testing.T) { + t.Parallel() + + for _, door := range []struct { + name string + answer string + opts []bedrock.Option + }{ + {"legacy", legacyAnswer, []bedrock.Option{bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0")}}, + {"converse", converseAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + got := bedrockWarningsByOption(bedrockWarningsFor(t, door.answer, door.opts, + llms.WithExtraBody(map[string]any{"enable_thinking": false, "chat_template_kwargs": map[string]any{}})).Warnings) + w, ok := got["WithExtraBody"] + require.True(t, ok, "no extra-body warning on the %s door", door.name) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) + }) + } +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index e56e0bcc3..92f0ecc3a 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -11,6 +11,8 @@ import ( ) func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOptions, tc *genai.ThinkingConfig) { + warn.AddUnreadExtraBody(model, opts, extraBodyUnread) + if opts.N != nil && *opts.N != 1 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithN", Model: model, @@ -112,3 +114,5 @@ func reportGoogleAIDisableFloor(warn *llms.Warnings, model string, tc *genai.Thi Reason: "this model has no off switch, only a lowest thinking level", }) } + +const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go index 241f29328..a51e8a07b 100644 --- a/llms/googleai/warnings_test.go +++ b/llms/googleai/warnings_test.go @@ -155,3 +155,14 @@ func TestADisableThatReallyTurnsThinkingOffIsNotAWarning(t *testing.T) { require.Empty(t, resp.Warnings, "%s takes budget zero, nothing is lost", model) } } + +func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, "gemini-2.5-flash", llms.WithExtraBody(map[string]any{"enable_thinking": false, "chat_template_kwargs": map[string]any{}})) + + w, ok := googleWarningsByOption(resp.Warnings)["WithExtraBody"] + require.True(t, ok, "no extra-body warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) +} diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index 7641d46b0..fedc1ab03 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -11,6 +11,8 @@ func reportHuggingFaceOptions( ) { const unread = "the door builds no field for it" + warn.AddUnreadExtraBody(model, *opts, extraBodyUnread) + drop := func(option, asked string) { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: option, Model: model, @@ -103,3 +105,5 @@ func reportHuggingFaceMessages(warn *llms.Warnings, model string, messages []llm }) } } + +const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/huggingface/warnings_test.go b/llms/huggingface/warnings_test.go index 4c2398cf2..67c5b52b5 100644 --- a/llms/huggingface/warnings_test.go +++ b/llms/huggingface/warnings_test.go @@ -103,3 +103,14 @@ func TestAThinkingTokenBudgetHasNoFieldOnThisDoor(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "4096 tokens", w.Asked) } + +func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, oneMessage(), llms.WithExtraBody(map[string]any{"enable_thinking": false, "chat_template_kwargs": map[string]any{}})) + + w, ok := hfWarningsByOption(resp.Warnings)["WithExtraBody"] + require.True(t, ok, "no extra-body warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) +} diff --git a/llms/mistral/warnings.go b/llms/mistral/warnings.go index b9a67496c..b540406e6 100644 --- a/llms/mistral/warnings.go +++ b/llms/mistral/warnings.go @@ -10,6 +10,8 @@ import ( func reportMistralUnread(warn *llms.Warnings, model string, opts *llms.CallOptions) { const unread = "the door's request has no field for it" + warn.AddUnreadExtraBody(model, *opts, extraBodyUnread) + drop := func(option, asked string) { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: option, Model: model, @@ -85,3 +87,5 @@ func reportMistralOptions(warn *llms.Warnings, model string, opts *llms.CallOpti }) } } + +const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/mistral/warnings_test.go b/llms/mistral/warnings_test.go index 017bd8f30..1490dfdc2 100644 --- a/llms/mistral/warnings_test.go +++ b/llms/mistral/warnings_test.go @@ -107,3 +107,14 @@ func TestTheSamplingOptionsThisDoorHasNoFieldForAreReported(t *testing.T) { require.Equal(t, asked, w.Asked) } } + +func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithExtraBody(map[string]any{"enable_thinking": false, "chat_template_kwargs": map[string]any{}})) + + w, ok := mistralWarningsByOption(resp.Warnings)["WithExtraBody"] + require.True(t, ok, "no extra-body warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) +} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 18a713d09..7b375475f 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -11,6 +11,8 @@ import ( func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOptions) { const unread = "the door builds no field for it" + warn.AddUnreadExtraBody(model, opts, extraBodyUnread) + if opts.MinP != nil && *opts.MinP != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMinP", Model: model, @@ -90,3 +92,5 @@ func reportOllamaThinking(warn *llms.Warnings, model string, opts llms.CallOptio }) } } + +const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 64e566bbc..588b00ba3 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -118,3 +118,14 @@ func TestAZeroTopKIsNotALoss(t *testing.T) { resp := generateForWarnings(t, llms.WithTopK(0)) require.Empty(t, resp.Warnings) } + +func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithExtraBody(map[string]any{"enable_thinking": false, "chat_template_kwargs": map[string]any{}})) + + w, ok := ollamaWarningsByOption(resp.Warnings)["WithExtraBody"] + require.True(t, ok, "no extra-body warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) +} diff --git a/llms/openai/options.go b/llms/openai/options.go index 62310a8c5..b86641b4e 100644 --- a/llms/openai/options.go +++ b/llms/openai/options.go @@ -61,20 +61,9 @@ func isLegacyMaxTokensField(opts *llms.CallOptions) bool { // }), // ) func WithExtraBody(extraBody map[string]any) llms.CallOption { - return func(opts *llms.CallOptions) { - if opts.Metadata == nil { - opts.Metadata = make(map[string]any) - } - opts.Metadata["openai:extra_body"] = extraBody - } + return llms.WithExtraBody(extraBody) } func getExtraBody(opts *llms.CallOptions) map[string]any { - if opts.Metadata == nil { - return nil - } - if extraBody, ok := opts.Metadata["openai:extra_body"].(map[string]any); ok { - return extraBody - } - return nil + return llms.ExtraBody(*opts) } diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 332aa1a97..28f67c89e 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -244,3 +244,33 @@ func TestAVendorThatTakesTopKStillGetsIt(t *testing.T) { t.Errorf("glm takes top_k and answered 200 to it; the wire lost it: %s", body) } } + +func TestTheDoorThatMergesExtraBodyReportsNoLoss(t *testing.T) { + t.Parallel() + + extra := llms.WithExtraBody(map[string]any{"enable_thinking": false}) + + body := sendForWire(t, "gpt-4o", extra) + if !strings.Contains(body, `"enable_thinking":false`) { + t.Errorf("extra body did not reach the wire: %s", body) + } + + resp := sendForWarnings(t, "gpt-4o", extra) + if len(resp.Warnings) != 0 { + t.Errorf("this door merges extra body, nothing is lost, got %v", resp.Warnings) + } +} + +func TestTheNeutralOptionAndTheDoorOptionAreTheSame(t *testing.T) { + t.Parallel() + + fields := map[string]any{"enable_thinking": false} + for name, opt := range map[string]llms.CallOption{ + "neutral": llms.WithExtraBody(fields), + "door": WithExtraBody(fields), + } { + if body := sendForWire(t, "gpt-4o", opt); !strings.Contains(body, `"enable_thinking":false`) { + t.Errorf("%s option lost the fields: %s", name, body) + } + } +} diff --git a/llms/options.go b/llms/options.go index 932efa540..767d701fc 100644 --- a/llms/options.go +++ b/llms/options.go @@ -922,3 +922,26 @@ func WithWebSearch(options *WebSearchOptions) CallOption { } } } + +const extraBodyKey = "openai:extra_body" + +// WithExtraBody carries provider-specific fields to merge into the request body. +// A door that builds its request through a vendor SDK cannot merge them and +// reports the loss through the response warnings instead. +func WithExtraBody(extraBody map[string]any) CallOption { + return func(o *CallOptions) { + if o.Metadata == nil { + o.Metadata = make(map[string]any) + } + o.Metadata[extraBodyKey] = extraBody + } +} + +// ExtraBody returns the fields WithExtraBody attached, or nil. +func ExtraBody(opts CallOptions) map[string]any { + if opts.Metadata == nil { + return nil + } + extraBody, _ := opts.Metadata[extraBodyKey].(map[string]any) + return extraBody +} diff --git a/llms/warning.go b/llms/warning.go index 92d556ab9..90fc8d166 100644 --- a/llms/warning.go +++ b/llms/warning.go @@ -2,7 +2,9 @@ package llms import ( "fmt" + "sort" "strconv" + "strings" ) // WarningKind names what a door did to a caller option on the way to the wire. @@ -88,6 +90,23 @@ func (w *Warnings) addChange(option, model, reason, before, after string) { } } +// AddUnreadExtraBody records the WithExtraBody fields a door cannot merge. +func (w *Warnings) AddUnreadExtraBody(model string, opts CallOptions, reason string) { + extraBody := ExtraBody(opts) + if len(extraBody) == 0 { + return + } + keys := make([]string, 0, len(extraBody)) + for key := range extraBody { + keys = append(keys, key) + } + sort.Strings(keys) + w.Add(Warning{ + Kind: WarningDrop, Option: "WithExtraBody", Model: model, + Asked: strings.Join(keys, ", "), Reason: reason, + }) +} + func (w *Warnings) List() []Warning { if w == nil { return nil From e7ef0660535de52fa77ccab6d2f25ac9a9e7f3fc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 18:23:26 +0300 Subject: [PATCH 424/618] fix(openai): keep a vendor's own sampling on its thinking models A thinking request lost its temperature to a forced 1.0 and its top_p entirely whenever the model had a known effort ladder. That ladder is also recorded for models from other vendors, so glm-5.3 and kimi-k3 were answering under OpenAI's rule: an operator asking for temperature 0.2 on GLM got 1.0 on the wire and no top_p at all, while Z.AI documents both with their own ranges and per-model defaults and ties neither to thinking. The rule now applies to models on OpenAI's own endpoint; Anthropic keeps its separate rule untouched. PAGI-288 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 2 +- llms/openai/sampling_warnings_test.go | 46 +++++++++++++++++++++++++++ llms/reasoning/effort_wire.go | 6 ++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 33cef90a5..a26a8f0b9 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -536,7 +536,7 @@ func refusesSamplingWhileThinking(model string, opts llms.CallOptions, wireEffor if !thinkingRuns(model, opts, wireEffort) { return false } - return reasoning.OpenAIReasoningCapsFor(model).Known || reasoning.ClaudeSupportsThinking(model) + return reasoning.RejectsSamplingWhileThinking(model) || reasoning.ClaudeSupportsThinking(model) } // thinkingRuns reports whether the model reasons on this request: an effort diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 28f67c89e..2eb5e69de 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -274,3 +274,49 @@ func TestTheNeutralOptionAndTheDoorOptionAreTheSame(t *testing.T) { } } } + +func TestAVendorThatKeepsSamplingWhileThinkingKeepsIt(t *testing.T) { + t.Parallel() + + for _, model := range []string{"glm-5.3", "zai/glm-5.3", "kimi-k3"} { + body := sendForWire(t, model, + llms.WithTemperature(0.2), llms.WithTopP(0.9), + llms.WithReasoning(llms.ReasoningHigh, 0)) + + if !strings.Contains(body, `"temperature":0.2`) { + t.Errorf("%s: the caller's temperature did not reach the wire: %s", model, body) + } + if !strings.Contains(body, `"top_p":0.9`) { + t.Errorf("%s: the caller's top_p did not reach the wire: %s", model, body) + } + } +} + +func TestOpenAIsOwnReasoningModelsStillLoseTheirSampling(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5.1", "o3-mini", "gpt-5-pro"} { + body := sendForWire(t, model, + llms.WithTemperature(0.2), llms.WithTopP(0.9), + llms.WithReasoning(llms.ReasoningHigh, 0)) + + if strings.Contains(body, `"temperature":0.2`) { + t.Errorf("%s: this endpoint refuses a sampling temperature while thinking: %s", model, body) + } + if strings.Contains(body, `"top_p"`) { + t.Errorf("%s: this endpoint refuses top_p while thinking: %s", model, body) + } + } +} + +func TestClaudeOnThisDoorStillLosesItsSampling(t *testing.T) { + t.Parallel() + + body := sendForWire(t, "claude-sonnet-4-5", + llms.WithTemperature(0.2), llms.WithTopP(0.9), + llms.WithReasoning(llms.ReasoningHigh, 4096)) + + if strings.Contains(body, `"temperature":0.2`) { + t.Errorf("thinking claude takes temperature 1: %s", body) + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 6b3439f87..0a179af04 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -42,6 +42,12 @@ func openAIProperName(model string) bool { return false } +// RejectsSamplingWhileThinking reports whether a thinking request must travel +// without the caller's temperature and top_p. +func RejectsSamplingWhileThinking(model string) bool { + return openAIProperName(model) && OpenAIReasoningCapsFor(model).Known +} + // RejectsMinP reports whether min_p must stay off the wire. func RejectsMinP(model string) bool { return isClaudeModel(model) From 618c86f0e0b55087ff20b399f98a07aa18829196 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 18:52:45 +0300 Subject: [PATCH 425/618] fix(googleai): let an adaptive request hand the depth back to the model Adaptive thinking asks the model to decide how much to reason, but the door resolved it to the same fixed budget an explicit high effort gets, so the request never carried that intent. It now travels the way the vendor documents it: the dynamic budget sentinel on the budget generation, and no level at all on Gemini 3, which reasons dynamically unless a level says otherwise. Both keep asking for thought summaries. A positive budget is now also held inside the range the vendor documents per model instead of only under two thirds of the answer limit, and the existing clamp warning names both bounds. PAGI-289 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 23 ++++++++++++++++- llms/googleai/thinking_wire_test.go | 38 +++++++++++++++++++++++++++++ llms/googleai/warnings.go | 2 +- llms/reasoning/gemini_capability.go | 19 +++++++++++++++ 4 files changed, 80 insertions(+), 2 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index c5a63acb1..84dc53128 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1118,6 +1118,9 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in if reasoning.GeminiTogglesThinkingByLevel(model) { return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelHigh, IncludeThoughts: true}, nil } + if cfg.Adaptive && cfg.Effort == "" && !cfg.HasExplicitTokens() { + return adaptiveThinkingConfig(model), nil + } // An effort with no explicit token budget maps to the qualitative // thinking_level on Gemini 3.x (its native control, where thinking_budget is // deprecated); an explicit budget or a 2.5 model still uses thinking_budget. @@ -1126,7 +1129,7 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in return &genai.ThinkingConfig{ThinkingLevel: level, IncludeThoughts: true}, nil } } - if budget := int32(cfg.GetTokens(maxTokens)); budget > 0 { + if budget := geminiBudgetInRange(model, cfg.GetTokens(maxTokens)); budget > 0 { return &genai.ThinkingConfig{ThinkingBudget: &budget, IncludeThoughts: true}, nil } return nil, &reasoning.ErrEffortHasNoBudget{Model: model, Effort: string(cfg.GetEffort(maxTokens))} @@ -1144,6 +1147,24 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in return nil, nil } +const geminiDynamicBudget = -1 + +func adaptiveThinkingConfig(model string) *genai.ThinkingConfig { + if reasoning.GeminiUsesThinkingLevel(model) { + return &genai.ThinkingConfig{IncludeThoughts: true} + } + dynamic := int32(geminiDynamicBudget) + return &genai.ThinkingConfig{ThinkingBudget: &dynamic, IncludeThoughts: true} +} + +func geminiBudgetInRange(model string, budget int) int32 { + minimum, maximum, known := reasoning.GeminiBudgetRange(model) + if !known || budget <= 0 { + return int32(budget) + } + return int32(min(max(budget, minimum), maximum)) +} + // checkEmptyStream reports an output limit too small to start an answer. func blockedPromptError(feedback *genai.GenerateContentResponsePromptFeedback) error { if feedback == nil || feedback.BlockReason == "" { diff --git a/llms/googleai/thinking_wire_test.go b/llms/googleai/thinking_wire_test.go index 12ccae749..f0dfcd32f 100644 --- a/llms/googleai/thinking_wire_test.go +++ b/llms/googleai/thinking_wire_test.go @@ -71,3 +71,41 @@ func TestDisablingThinkingOnGemini25StillSendsBudgetZero(t *testing.T) { "%s answers with an error when a level is present", model) } } + +func TestAdaptiveThinkingLetsTheModelChoose(t *testing.T) { + t.Parallel() + + for model, want := range map[string]string{ + "gemini-2.5-flash": `"thinkingBudget":-1`, + "gemini-2.5-flash-lite": `"thinkingBudget":-1`, + "gemini-2.5-pro": `"thinkingBudget":-1`, + } { + body := thinkingWireFor(t, model, llms.WithAdaptiveReasoning(""), llms.WithMaxTokens(8192)) + assert.Contains(t, body, want, "%s takes the dynamic budget sentinel", model) + } + + for _, model := range []string{"gemini-3.5-flash", "gemini-3-flash-preview"} { + body := thinkingWireFor(t, model, llms.WithAdaptiveReasoning(""), llms.WithMaxTokens(8192)) + assert.NotContains(t, body, "thinkingLevel", "%s decides its own depth", model) + assert.NotContains(t, body, "thinkingBudget", "%s reads no budget", model) + assert.Contains(t, body, `"includeThoughts":true`, "%s still returns its thought summaries", model) + } +} + +func TestABudgetOutsideTheModelRangeIsHeldInside(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + asked int + want string + }{ + {"gemini-2.5-pro", 50, `"thinkingBudget":128`}, + {"gemini-2.5-flash-lite", 100, `"thinkingBudget":512`}, + {"gemini-2.5-flash", 1, `"thinkingBudget":1`}, + } { + body := thinkingWireFor(t, tc.model, + llms.WithReasoning(llms.ReasoningNone, tc.asked), llms.WithMaxTokens(65536)) + assert.Contains(t, body, tc.want, "%s asked %d", tc.model, tc.asked) + } +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 92f0ecc3a..dd21b8961 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -99,7 +99,7 @@ func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOpt warn.Add(llms.Warning{ Kind: llms.WarningClamp, Option: "WithReasoning", Model: model, Asked: strconv.Itoa(cfg.Tokens), Sent: strconv.Itoa(sent), - Reason: "the thinking budget is capped at two thirds of the answer limit", + Reason: "the thinking budget is held inside the model's range and below two thirds of the answer limit", }) } } diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index 621ff3e77..f5cdbf25a 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -125,3 +125,22 @@ func GeminiThinkingOffByDefault(model string) bool { return hasFamily(baseModelName(model), "gemini-2.5") && strings.Contains(baseModelName(model), "flash-lite") } + +// GeminiBudgetRange returns the thinking_budget bounds the vendor documents for +// the model. An unknown model reports no bounds. +func GeminiBudgetRange(model string) (minimum, maximum int, known bool) { + m := baseModelName(model) + if !hasFamily(m, "gemini-2.5") { + return 0, 0, false + } + switch { + case strings.Contains(m, "pro"): + return 128, 32768, true + case strings.Contains(m, "flash-lite"): + return 512, 24576, true + case strings.Contains(m, "flash"): + return 1, 24576, true + default: + return 0, 0, false + } +} From d078da379785bbca775666495666bd336e4517c8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 19:22:55 +0300 Subject: [PATCH 426/618] fix(openai): keep min_p off OpenAI's own endpoint min_p was stripped only for Claude, so a caller who set it reached OpenAI's own models with a field that reference does not define. That endpoint refuses the whole request on an unrecognised argument, the same way it refused top_k, so no call to an OpenAI model succeeded while the option was set. It now travels the same vendor predicate as top_k and repetition_penalty, and the existing snapshot reporter turns the strip into a warning. Two matrix rows that pinned the old behaviour asserted an OpenAI model under the name "another vendor"; they now use a vendor that really does take the field. PAGI-294 Co-Authored-By: Claude Opus 5 --- llms/openai/sampling_matrix_test.go | 17 +++++++++++--- llms/openai/sampling_warnings_test.go | 33 +++++++++++++++++++++++++++ llms/reasoning/effort_wire.go | 2 +- llms/reasoning/effort_wire_test.go | 7 +++++- 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 349f090b8..78ae741b8 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -252,14 +252,25 @@ func TestMinPStaysOffTheWireForClaude(t *testing.T) { absent: []string{`"min_p"`}, }, { name: "a thinking model of another vendor keeps min_p", - model: "gpt-5.5", + model: "zai/glm-5.3", opts: []llms.CallOption{minP, high}, present: []string{`"min_p":0.05`}, }, { - name: "a plain model keeps min_p", - model: "gpt-4o", + name: "a plain model of another vendor keeps min_p", + model: "zai/glm-4.5-air", opts: []llms.CallOption{minP}, present: []string{`"min_p":0.05`}, + }, { + name: "OpenAI's own endpoint refuses the whole request on min_p", + model: "gpt-4o", + opts: []llms.CallOption{minP}, + absent: []string{`"min_p"`}, + }, { + name: "thinking does not put min_p back for OpenAI either", + model: "gpt-5.5", + opts: []llms.CallOption{minP, high}, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"min_p"`}, }}) } diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 2eb5e69de..510baf3c7 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -320,3 +320,36 @@ func TestClaudeOnThisDoorStillLosesItsSampling(t *testing.T) { t.Errorf("thinking claude takes temperature 1: %s", body) } } + +func TestMinPStaysOffOpenAIsOwnEndpoint(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-4o", "o3-mini", "gpt-5.1", "chatgpt-4o-latest"} { + if body := sendForWire(t, model, llms.WithMinP(0.05)); strings.Contains(body, `"min_p"`) { + t.Errorf("%s: this endpoint refuses the whole request on min_p: %s", model, body) + } + } + + resp := sendForWarnings(t, "gpt-4o", llms.WithMinP(0.05)) + w := warningFor(t, resp, "WithMinP") + if w.Kind != llms.WarningDrop || w.Asked != "0.05" { + t.Errorf("min-p warning = %+v", w) + } +} + +func TestAVendorThatTakesMinPStillGetsIt(t *testing.T) { + t.Parallel() + + body := sendForWire(t, "zai/glm-4.5-air", llms.WithMinP(0.05)) + if !strings.Contains(body, `"min_p":0.05`) { + t.Errorf("this vendor takes min_p; the wire lost it: %s", body) + } +} + +func TestAZeroMinPIsNotALoss(t *testing.T) { + t.Parallel() + + if resp := sendForWarnings(t, "gpt-4o", llms.WithMinP(0)); len(resp.Warnings) != 0 { + t.Errorf("no min-p was asked for, got %v", resp.Warnings) + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 0a179af04..20571e699 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -50,7 +50,7 @@ func RejectsSamplingWhileThinking(model string) bool { // RejectsMinP reports whether min_p must stay off the wire. func RejectsMinP(model string) bool { - return isClaudeModel(model) + return isClaudeModel(model) || openAIProperName(model) } // UsesLegacyMaxTokens reports whether the output limit must travel as diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 4fcd38935..96996daf1 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -55,10 +55,15 @@ func TestRejectsMinP(t *testing.T) { {"us.anthropic.claude-opus-4-6-v1:0", true}, {"claude-opus-4-7", true}, {"claude-haiku-4-5", true}, - {"gpt-5.5", false}, + {"gpt-5.5", true}, + {"gpt-4o", true}, + {"o3-mini", true}, + {"chatgpt-4o-latest", true}, + {"gpt-oss-120b", false}, {"grok-4.6", false}, {"qwen3-32b", false}, {"deepseek-v3.2", false}, + {"zai/glm-5.3", false}, } { if got := RejectsMinP(tc.model); got != tc.reject { t.Errorf("RejectsMinP(%q) = %v, want %v", tc.model, got, tc.reject) From 33b8381be0f14c2d4faf9a2c35961587c7d11439 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 19:24:54 +0300 Subject: [PATCH 427/618] fix(llms): give the extra body its own field WithExtraBody parked its fields inside the shared metadata map, and WithMetadata assigns that map rather than merging into it. Any call that set metadata after the extra body therefore lost the extra body entirely: the openai door sent none of it, and the doors that report the loss stayed silent too, because by then there was nothing left to read. The fields now live in their own CallOptions field, so neither option can reach the other. Both orders are pinned, on the door that merges them and on a door that only reports them. PAGI-293 Co-Authored-By: Claude Opus 5 --- llms/ollama/warnings_test.go | 13 +++++++++ llms/openai/options_test.go | 39 +++++++++++++-------------- llms/openai/sampling_warnings_test.go | 15 +++++++++++ llms/options.go | 16 ++++------- 4 files changed, 51 insertions(+), 32 deletions(-) diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 588b00ba3..898690503 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -129,3 +129,16 @@ func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) } + +func TestMetadataSetAfterExtraBodyStillReportsTheLoss(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithExtraBody(map[string]any{"enable_thinking": false}), + llms.WithMetadata(map[string]any{"user": "u1"})) + + w, ok := ollamaWarningsByOption(resp.Warnings)["WithExtraBody"] + require.True(t, ok, "no extra-body warning in %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "enable_thinking", w.Asked) +} diff --git a/llms/openai/options_test.go b/llms/openai/options_test.go index f73d95019..26eb5299a 100644 --- a/llms/openai/options_test.go +++ b/llms/openai/options_test.go @@ -183,7 +183,7 @@ func TestWebSearchOptionsConversion(t *testing.T) { } func TestWithExtraBody(t *testing.T) { - t.Run("sets extra body in metadata", func(t *testing.T) { + t.Run("sets extra body in its own field", func(t *testing.T) { opts := &llms.CallOptions{} extraBody := map[string]any{ "enable_thinking": false, @@ -192,26 +192,31 @@ func TestWithExtraBody(t *testing.T) { WithExtraBody(extraBody)(opts) - require.NotNil(t, opts.Metadata) - stored, ok := opts.Metadata["openai:extra_body"].(map[string]any) - require.True(t, ok) + stored := llms.ExtraBody(*opts) + require.NotNil(t, stored) assert.Equal(t, false, stored["enable_thinking"]) assert.Equal(t, "value", stored["custom_param"]) }) + t.Run("metadata set afterwards does not discard it", func(t *testing.T) { + opts := &llms.CallOptions{} + WithExtraBody(map[string]any{"a": 1})(opts) + llms.WithMetadata(map[string]any{"user": "u1"})(opts) + + assert.Equal(t, map[string]any{"a": 1}, llms.ExtraBody(*opts)) + assert.Equal(t, "u1", opts.Metadata["user"]) + }) + t.Run("nil extra body is handled", func(t *testing.T) { opts := &llms.CallOptions{} WithExtraBody(nil)(opts) - require.NotNil(t, opts.Metadata) + assert.Nil(t, llms.ExtraBody(*opts)) }) t.Run("empty extra body is handled", func(t *testing.T) { opts := &llms.CallOptions{} WithExtraBody(map[string]any{})(opts) - require.NotNil(t, opts.Metadata) - stored, ok := opts.Metadata["openai:extra_body"].(map[string]any) - require.True(t, ok) - assert.Empty(t, stored) + assert.Empty(t, llms.ExtraBody(*opts)) }) } @@ -231,25 +236,17 @@ func TestGetExtraBody(t *testing.T) { }) t.Run("returns extra body when present", func(t *testing.T) { - extraBody := map[string]any{"key": "value"} - opts := &llms.CallOptions{ - Metadata: map[string]any{ - "openai:extra_body": extraBody, - }, - } + opts := &llms.CallOptions{ExtraBody: map[string]any{"key": "value"}} result := getExtraBody(opts) require.NotNil(t, result) assert.Equal(t, "value", result["key"]) }) - t.Run("returns nil for wrong type", func(t *testing.T) { + t.Run("a metadata key of the old name is not read", func(t *testing.T) { opts := &llms.CallOptions{ - Metadata: map[string]any{ - "openai:extra_body": "not a map", - }, + Metadata: map[string]any{"openai:extra_body": map[string]any{"key": "value"}}, } - result := getExtraBody(opts) - assert.Nil(t, result) + assert.Nil(t, getExtraBody(opts)) }) } diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 510baf3c7..26047b3ff 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -353,3 +353,18 @@ func TestAZeroMinPIsNotALoss(t *testing.T) { t.Errorf("no min-p was asked for, got %v", resp.Warnings) } } + +func TestMetadataSetAfterExtraBodyDoesNotDiscardIt(t *testing.T) { + t.Parallel() + + fields := map[string]any{"enable_thinking": false} + orders := map[string][]llms.CallOption{ + "extra body first": {llms.WithExtraBody(fields), llms.WithMetadata(map[string]any{"user": "u1"})}, + "metadata first": {llms.WithMetadata(map[string]any{"user": "u1"}), llms.WithExtraBody(fields)}, + } + for name, opts := range orders { + if body := sendForWire(t, "gpt-4o", opts...); !strings.Contains(body, `"enable_thinking":false`) { + t.Errorf("%s: the extra body did not reach the wire: %s", name, body) + } + } +} diff --git a/llms/options.go b/llms/options.go index 767d701fc..2b42221d9 100644 --- a/llms/options.go +++ b/llms/options.go @@ -320,6 +320,9 @@ type CallOptions struct { // Deprecated: Use ToolChoice instead. FunctionCallBehavior FunctionCallBehavior `json:"function_call,omitempty"` + // ExtraBody holds provider-specific request-body fields set by WithExtraBody. + ExtraBody map[string]any `json:"extra_body,omitempty"` + // Metadata is a map of metadata to include in the request. // The meaning of this field is specific to the backend in use. Metadata map[string]interface{} `json:"metadata,omitempty"` @@ -923,25 +926,16 @@ func WithWebSearch(options *WebSearchOptions) CallOption { } } -const extraBodyKey = "openai:extra_body" - // WithExtraBody carries provider-specific fields to merge into the request body. // A door that builds its request through a vendor SDK cannot merge them and // reports the loss through the response warnings instead. func WithExtraBody(extraBody map[string]any) CallOption { return func(o *CallOptions) { - if o.Metadata == nil { - o.Metadata = make(map[string]any) - } - o.Metadata[extraBodyKey] = extraBody + o.ExtraBody = extraBody } } // ExtraBody returns the fields WithExtraBody attached, or nil. func ExtraBody(opts CallOptions) map[string]any { - if opts.Metadata == nil { - return nil - } - extraBody, _ := opts.Metadata[extraBodyKey].(map[string]any) - return extraBody + return opts.ExtraBody } From fe7ff171d8a5f773e15cc5a6683098d480b6a135 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 19:26:29 +0300 Subject: [PATCH 428/618] fix(googleai): stop sending thinking to families that do not think MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The disable path already knew the Google families that never think and sent them nothing; the enable path did not, so gemma-3-27b-it and gemini-2.0-flash received a thinkingConfig for a control their generation has no field for, and the caller's request to think vanished without a word. They now get no thinking config in any mode, and the lost option is reported. The disable-floor warning also fired for gemma-4, telling the operator the disable had only been approximated. For that family the lowest level IS the off position — which is why the door picks it and why the disable is offered at all — so the warning claimed a loss that never happened. PAGI-292 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 3 +++ llms/googleai/thinking_wire_test.go | 17 +++++++++++++++++ llms/googleai/warnings.go | 13 ++++++++++++- llms/googleai/warnings_test.go | 22 ++++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 84dc53128..8b68c0bbf 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1115,6 +1115,9 @@ func resolveTemperature(model string, clientOpts Options) float64 { func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens int) (*genai.ThinkingConfig, error) { switch cfg.ResolveMode() { case llms.ReasoningOn: + if !reasoning.GeminiSupportsThinking(model) { + return nil, nil + } if reasoning.GeminiTogglesThinkingByLevel(model) { return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelHigh, IncludeThoughts: true}, nil } diff --git a/llms/googleai/thinking_wire_test.go b/llms/googleai/thinking_wire_test.go index f0dfcd32f..4947e81e9 100644 --- a/llms/googleai/thinking_wire_test.go +++ b/llms/googleai/thinking_wire_test.go @@ -109,3 +109,20 @@ func TestABudgetOutsideTheModelRangeIsHeldInside(t *testing.T) { assert.Contains(t, body, tc.want, "%s asked %d", tc.model, tc.asked) } } + +func TestAModelThatDoesNotThinkGetsNoThinkingConfig(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-2.0-flash", "gemini-1.5-pro", "gemma-3-27b-it"} { + for name, opt := range map[string]llms.CallOption{ + "adaptive": llms.WithAdaptiveReasoning(""), + "effort": llms.WithReasoning(llms.ReasoningHigh, 0), + "budget": llms.WithReasoning(llms.ReasoningNone, 4096), + "disabled": llms.WithReasoningDisabled(), + } { + body := thinkingWireFor(t, model, opt, llms.WithMaxTokens(16384)) + assert.NotContains(t, body, "thinkingConfig", + "%s on %s: this family takes no thinking control", name, model) + } + } +} diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index dd21b8961..170ce026b 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -63,6 +63,17 @@ func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOpt if cfg.ResolveMode() != llms.ReasoningOn { return } + if !reasoning.GeminiSupportsThinking(model) { + asked := string(cfg.GetEffort(opts.GetMaxTokens())) + if cfg.HasExplicitTokens() { + asked = strconv.Itoa(cfg.Tokens) + " tokens" + } + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: asked, Reason: "this model does not think, so the door sends no thinking config", + }) + return + } if reasoning.GeminiTogglesThinkingByLevel(model) { sent := string(genai.ThinkingLevelHigh) @@ -105,7 +116,7 @@ func reportGoogleAIThinking(warn *llms.Warnings, model string, opts llms.CallOpt } func reportGoogleAIDisableFloor(warn *llms.Warnings, model string, tc *genai.ThinkingConfig) { - if tc == nil || tc.ThinkingLevel == "" { + if tc == nil || tc.ThinkingLevel == "" || reasoning.GeminiTogglesThinkingByLevel(model) { return } warn.Add(llms.Warning{ diff --git a/llms/googleai/warnings_test.go b/llms/googleai/warnings_test.go index a51e8a07b..3d95ad014 100644 --- a/llms/googleai/warnings_test.go +++ b/llms/googleai/warnings_test.go @@ -166,3 +166,25 @@ func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) } + +func TestAskingAModelThatDoesNotThinkToThinkIsReported(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemini-2.0-flash", "gemma-3-27b-it"} { + resp := generateForWarnings(t, model, llms.WithReasoning(llms.ReasoningHigh, 0)) + + w, ok := googleWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "no warning for %s in %v", model, resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "high", w.Asked) + } +} + +func TestDisablingThinkingOnAFamilyWhoseFloorIsOffIsNotAWarning(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gemma-4-31b-it", "gemma-4-26b-a4b-it", "models/gemma-4-31b-it"} { + resp := generateForWarnings(t, model, llms.WithReasoningDisabled()) + require.Empty(t, resp.Warnings, "%s: minimal is this family's off position", model) + } +} From 72903772c4e3bcdc05f67490ec7d3653cb1ab76f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 19:40:31 +0300 Subject: [PATCH 429/618] test(googleai): compare the thinking numbers as numbers The wire assertions searched the request body for a substring, and a JSON number has no right delimiter: the row asserting a budget of 512 passed just as happily on 5120, so widening any documented floor left the suite green. They now read the parsed thinking config and compare values. The adaptive rows never named an effort, so the guard that separates "you decide" from "think this hard" was pinned by nothing; a row for each generation now holds it, and the range rows cover the ceiling as well as the floor. PAGI-295 Co-Authored-By: Claude Opus 5 --- llms/googleai/thinking_wire_test.go | 60 ++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/llms/googleai/thinking_wire_test.go b/llms/googleai/thinking_wire_test.go index 4947e81e9..74ab2e149 100644 --- a/llms/googleai/thinking_wire_test.go +++ b/llms/googleai/thinking_wire_test.go @@ -2,6 +2,7 @@ package googleai import ( "context" + "encoding/json" "io" "net/http" "net/http/httptest" @@ -36,6 +37,27 @@ func thinkingWireFor(t *testing.T, model string, opts ...llms.CallOption) string return body } +func thinkingConfigFor(t *testing.T, model string, opts ...llms.CallOption) map[string]any { + t.Helper() + + var body struct { + GenerationConfig struct { + ThinkingConfig map[string]any `json:"thinkingConfig"` + } `json:"generationConfig"` + } + require.NoError(t, json.Unmarshal([]byte(thinkingWireFor(t, model, opts...)), &body)) + return body.GenerationConfig.ThinkingConfig +} + +func budgetOnTheWire(t *testing.T, model string, opts ...llms.CallOption) float64 { + t.Helper() + + tc := thinkingConfigFor(t, model, opts...) + budget, ok := tc["thinkingBudget"].(float64) + require.True(t, ok, "no thinkingBudget for %s, got %v", model, tc) + return budget +} + func TestNoThinkingBudgetReachesAGemini3Model(t *testing.T) { t.Parallel() @@ -75,13 +97,9 @@ func TestDisablingThinkingOnGemini25StillSendsBudgetZero(t *testing.T) { func TestAdaptiveThinkingLetsTheModelChoose(t *testing.T) { t.Parallel() - for model, want := range map[string]string{ - "gemini-2.5-flash": `"thinkingBudget":-1`, - "gemini-2.5-flash-lite": `"thinkingBudget":-1`, - "gemini-2.5-pro": `"thinkingBudget":-1`, - } { - body := thinkingWireFor(t, model, llms.WithAdaptiveReasoning(""), llms.WithMaxTokens(8192)) - assert.Contains(t, body, want, "%s takes the dynamic budget sentinel", model) + for _, model := range []string{"gemini-2.5-flash", "gemini-2.5-flash-lite", "gemini-2.5-pro"} { + budget := budgetOnTheWire(t, model, llms.WithAdaptiveReasoning(""), llms.WithMaxTokens(8192)) + assert.Equal(t, float64(-1), budget, "%s takes the dynamic budget sentinel", model) } for _, model := range []string{"gemini-3.5-flash", "gemini-3-flash-preview"} { @@ -98,15 +116,18 @@ func TestABudgetOutsideTheModelRangeIsHeldInside(t *testing.T) { for _, tc := range []struct { model string asked int - want string + want float64 }{ - {"gemini-2.5-pro", 50, `"thinkingBudget":128`}, - {"gemini-2.5-flash-lite", 100, `"thinkingBudget":512`}, - {"gemini-2.5-flash", 1, `"thinkingBudget":1`}, + {"gemini-2.5-pro", 50, 128}, + {"gemini-2.5-pro", 40000, 32768}, + {"gemini-2.5-flash-lite", 100, 512}, + {"gemini-2.5-flash-lite", 30000, 24576}, + {"gemini-2.5-flash", 1, 1}, + {"gemini-2.5-flash", 30000, 24576}, } { - body := thinkingWireFor(t, tc.model, + budget := budgetOnTheWire(t, tc.model, llms.WithReasoning(llms.ReasoningNone, tc.asked), llms.WithMaxTokens(65536)) - assert.Contains(t, body, tc.want, "%s asked %d", tc.model, tc.asked) + assert.Equal(t, tc.want, budget, "%s asked %d", tc.model, tc.asked) } } @@ -126,3 +147,16 @@ func TestAModelThatDoesNotThinkGetsNoThinkingConfig(t *testing.T) { } } } + +func TestAdaptiveWithANamedEffortStillHonoursThatEffort(t *testing.T) { + t.Parallel() + + budget := budgetOnTheWire(t, "gemini-2.5-flash", + llms.WithAdaptiveReasoning(llms.ReasoningHigh), llms.WithMaxTokens(8192)) + assert.Greater(t, budget, float64(0), "a named effort is a depth, not a hand-off") + + tc := thinkingConfigFor(t, "gemini-3.5-flash", + llms.WithAdaptiveReasoning(llms.ReasoningMedium), llms.WithMaxTokens(8192)) + assert.Equal(t, "MEDIUM", tc["thinkingLevel"]) + assert.NotContains(t, tc, "thinkingBudget") +} From a459111c8d8da0e5a45ab41d7a2e07524fc85038 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 10 Sep 2026 20:31:47 +0300 Subject: [PATCH 430/618] fix(llms): let an adaptive request without an effort take the vendor default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adaptive with no named effort means the caller handed the depth decision to the model. The shared resolver turned that into the top effort, so on doors whose vendor documents no adaptive mode the request went out at the most expensive setting — the opposite of what was asked. On gpt-5.4 and newer carrying tools it went further and refused the call before the network, because the vendor serves an effort with tools on another API only. Such a request now behaves as an unset mode: no effort field, the vendor's own default, and the vendor's own tools rule. Where that means the model will not reason at all — an opt-in generation, or one that demands an explicit disable alongside tools — the caller is told. An adaptive request that does name an effort still sends it, and the doors that have a real adaptive wire are untouched. PAGI-296 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 2 +- llms/ollama/ollamallm.go | 3 ++ llms/ollama/think_request_test.go | 18 +++++++ llms/openai/openaillm.go | 11 +++- .../reasoning_effort_passthrough_test.go | 6 +-- llms/openai/sampling_warnings.go | 15 ++++++ llms/openai/sampling_warnings_test.go | 51 +++++++++++++++++++ llms/options.go | 6 +++ 8 files changed, 107 insertions(+), 5 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 8b68c0bbf..89717d9ca 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1121,7 +1121,7 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in if reasoning.GeminiTogglesThinkingByLevel(model) { return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelHigh, IncludeThoughts: true}, nil } - if cfg.Adaptive && cfg.Effort == "" && !cfg.HasExplicitTokens() { + if cfg.DelegatesDepth() { return adaptiveThinkingConfig(model), nil } // An effort with no explicit token budget maps to the qualitative diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 88c3100f7..5b0cd3135 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -305,6 +305,9 @@ func resolveThink(model string, opts llms.CallOptions) *api.ThinkValue { case llms.ReasoningOff: return &api.ThinkValue{Value: false} case llms.ReasoningOn: + if opts.Reasoning.DelegatesDepth() { + return nil + } effort := opts.Reasoning.GetEffort(opts.GetMaxTokens()) if takesOnlyGPTOSSLevels(model) { return &api.ThinkValue{Value: gptOSSLevel(effort)} diff --git a/llms/ollama/think_request_test.go b/llms/ollama/think_request_test.go index 2bfced8a3..f1ec8c8b5 100644 --- a/llms/ollama/think_request_test.go +++ b/llms/ollama/think_request_test.go @@ -123,3 +123,21 @@ func TestAnEffortGPTOSSTakesIsNotAWarning(t *testing.T) { require.Empty(t, resp.Warnings, "%s is in the vendor set, nothing is lost", effort) } } + +func TestAdaptiveWithNoEffortLeavesTheThinkFieldOff(t *testing.T) { + t.Parallel() + + for _, model := range []string{"glm-5", "gpt-oss:120b", "llama3.2"} { + got := captureChatRequestFor(t, model, llms.WithAdaptiveReasoning("")) + require.NotContains(t, got, "think", "%s: the server default is the model's own choice", model) + } +} + +func TestAdaptiveWithANamedEffortStillSetsTheLevel(t *testing.T) { + t.Parallel() + + require.Equal(t, "low", + captureChatRequestFor(t, "glm-5", llms.WithAdaptiveReasoning(llms.ReasoningLow))["think"]) + require.Equal(t, "high", + captureChatRequestFor(t, "gpt-oss:120b", llms.WithAdaptiveReasoning(llms.ReasoningMax))["think"]) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index a26a8f0b9..274774f86 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -383,12 +383,21 @@ func (o *LLM) setReasoning( toolsRule = reasoning.EffortWithTools(model) } - switch opts.Reasoning.ResolveMode() { //nolint:exhaustive // ReasoningOn is handled by the code after the switch + mode := opts.Reasoning.ResolveMode() + delegated := opts.Reasoning.DelegatesDepth() + if delegated { + mode = llms.ReasoningDefault + } + switch mode { //nolint:exhaustive // ReasoningOn is handled by the code after the switch case llms.ReasoningDefault: if toolsRule == reasoning.EffortToolsDisable { o.writeDisableEffort(req) + reportDelegatedDepth(warn, model, delegated, reasoning.OpenAIDisableEffort) return reasoning.OpenAIDisableEffort, nil } + if delegated && reasoning.OpenAIThinkingOptIn(model) { + reportDelegatedDepth(warn, model, delegated, "") + } return "", nil case llms.ReasoningOff: return "", o.setReasoningOff(req, opts) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index af74d5800..357f893f8 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -71,7 +71,7 @@ func TestReasoningEffortPassthroughToWire(t *testing.T) { // WithAdaptiveReasoning with no explicit effort must not silently disable // reasoning here: it defaults to high, matching the Anthropic/Bedrock paths. -func TestAdaptiveReasoningNoEffortDefaultsToHighOnWire(t *testing.T) { +func TestAdaptiveReasoningWithNoEffortSendsNoEffort(t *testing.T) { t.Parallel() const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + @@ -98,8 +98,8 @@ func TestAdaptiveReasoningNoEffortDefaultsToHighOnWire(t *testing.T) { ); err != nil { t.Fatalf("GenerateContent() error: %v", err) } - if !strings.Contains(body, `"reasoning_effort":"high"`) { - t.Fatalf("adaptive-no-effort must send reasoning_effort=high, got body: %s", body) + if strings.Contains(body, `"reasoning_effort"`) { + t.Fatalf("adaptive with no effort asks the model to choose, got body: %s", body) } } diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 87ed48365..07f4a45ef 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -175,3 +175,18 @@ func reportOpenAIBudget(warn *llms.Warnings, model string, cfg *llms.ReasoningCo }) } } + +func reportDelegatedDepth(warn *llms.Warnings, model string, delegated bool, sent string) { + if !delegated { + return + } + kind := llms.WarningDrop + if sent != "" { + kind = llms.WarningSubstitute + } + warn.Add(llms.Warning{ + Kind: kind, Option: "WithAdaptiveReasoning", Model: model, + Asked: "adaptive", Sent: sent, + Reason: "this model does not reason unless an effort asks it to, and none was named", + }) +} diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 26047b3ff..18375f8e1 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -368,3 +368,54 @@ func TestMetadataSetAfterExtraBodyDoesNotDiscardIt(t *testing.T) { } } } + +func TestAdaptiveWithToolsNoLongerRefusesTheRequest(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5.4-mini", "gpt-5.4-nano", "gpt-5.5"} { + body := sendForWire(t, model, + llms.WithAdaptiveReasoning(llms.ReasoningNone), llms.WithTools([]llms.Tool{weatherTool()})) + + if strings.Contains(body, `"reasoning_effort"`) { + t.Errorf("%s: the vendor serves an effort with tools on another API only: %s", model, body) + } + if !strings.Contains(body, `"tools"`) { + t.Errorf("%s: the request lost its tools: %s", model, body) + } + } +} + +func TestAnEffortNamedAlongsideAdaptiveStillTravels(t *testing.T) { + t.Parallel() + + body := sendForWire(t, "gpt-5.1", llms.WithAdaptiveReasoning(llms.ReasoningLow)) + if !strings.Contains(body, `"reasoning_effort":"low"`) { + t.Errorf("a named effort is a depth, not a hand-off: %s", body) + } +} + +func TestDelegatedDepthOnAModelThatWillNotReasonIsReported(t *testing.T) { + t.Parallel() + + optIn := sendForWarnings(t, "gpt-5.1", llms.WithAdaptiveReasoning(llms.ReasoningNone)) + w := warningFor(t, optIn, "WithAdaptiveReasoning") + if w.Kind != llms.WarningDrop || w.Asked != "adaptive" || w.Sent != "" { + t.Errorf("opt-in model warning = %+v", w) + } + + withTools := sendForWarnings(t, "gpt-5.6", + llms.WithAdaptiveReasoning(llms.ReasoningNone), llms.WithTools([]llms.Tool{weatherTool()})) + w = warningFor(t, withTools, "WithAdaptiveReasoning") + if w.Kind != llms.WarningSubstitute || w.Sent != "none" { + t.Errorf("forced-disable warning = %+v", w) + } +} + +func TestDelegatedDepthOnAModelThatReasonsAnywayIsSilent(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "gpt-4o", llms.WithAdaptiveReasoning(llms.ReasoningNone)) + if len(resp.Warnings) != 0 { + t.Errorf("nothing was lost, got %v", resp.Warnings) + } +} diff --git a/llms/options.go b/llms/options.go index 2b42221d9..df1306bc1 100644 --- a/llms/options.go +++ b/llms/options.go @@ -131,6 +131,12 @@ func (r *ReasoningConfig) HasExplicitTokens() bool { return r != nil && r.Tokens != 0 } +// DelegatesDepth reports whether the caller handed the depth decision to the +// model: adaptive with no effort and no budget of its own. +func (r *ReasoningConfig) DelegatesDepth() bool { + return r != nil && r.Adaptive && r.Effort == ReasoningNone && !r.HasExplicitTokens() +} + func (r *ReasoningConfig) GetEffort(maxTokens int) ReasoningEffort { if r == nil { return ReasoningNone From 7e4748ce84359c2ddabb5d0c703ad3e22fc0278e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 00:45:25 +0300 Subject: [PATCH 431/618] fix(reasoning): give the ollama door its own disable wire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The hint asked ResolveOff with ProviderUnknown for every ollama model, so a name its own vendor serves as mandatory-thinking — deepseek-r1 — came back as OffUnsupported and the caller was told thinking cannot be turned off. The door meanwhile sends think:false, which Ollama documents as accepted for models that think; gpt-oss is the documented exception, where booleans are ignored and the trace cannot be disabled. ProviderOllama now resolves to OffDisableThinkBool everywhere except that family, and the door reads the same resolver instead of its own predicate, so hint and wire cannot classify a model differently. Co-Authored-By: Claude Opus 5 --- llms/ollama/ollamallm.go | 3 +- llms/ollama/think_request_test.go | 9 ++++ llms/reasoning/off.go | 69 ++++++++++++++++++---------- llms/reasoning/provider_enum_test.go | 24 ++++++++++ llms/reasoning_support_test.go | 18 ++++++++ 5 files changed, 98 insertions(+), 25 deletions(-) diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 5b0cd3135..c68f445a7 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -352,7 +352,8 @@ func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms. return nil, fmt.Errorf("error creating ollama options: %w", err) } - if opts.Reasoning.IsDisabled() && takesOnlyGPTOSSLevels(model) { + if opts.Reasoning.IsDisabled() && + reasoning.ResolveOff(model, reasoning.ProviderOllama) == reasoning.OffUnsupported { return nil, &reasoning.ErrReasoningOffUnsupported{Model: model} } diff --git a/llms/ollama/think_request_test.go b/llms/ollama/think_request_test.go index f1ec8c8b5..e52275c80 100644 --- a/llms/ollama/think_request_test.go +++ b/llms/ollama/think_request_test.go @@ -72,6 +72,15 @@ func TestThinkReachesTheWire(t *testing.T) { }) } +func TestOffReachesTheWireForNamesTheirOwnVendorCannotDisable(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-r1:7b", "magistral-small:24b"} { + got := captureChatRequestFor(t, model, llms.WithReasoningDisabled()) + require.Equal(t, false, got["think"], "model %s", model) + } +} + func TestGPTOSSNeverGetsAThinkValueItIgnores(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 661f056af..4e84a15b4 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -15,6 +15,7 @@ const ( ProviderBedrock ProviderOpenAI ProviderGoogleAI + ProviderOllama // providerCount must stay last: a new provider goes above it. providerCount @@ -41,6 +42,8 @@ const ( OffDisableDashScope // OffDisableThinkingObject → thinking:{type:"disabled"} on an OpenAI-shaped door. OffDisableThinkingObject + // OffDisableThinkBool → Ollama think:false. + OffDisableThinkBool // OffUnsupported: a known mandatory-thinking model that cannot be disabled // (adaptive-only Claude, OpenAI o-series). The adapter returns a typed error. OffUnsupported @@ -77,6 +80,11 @@ func ResolveOff(model string, p Provider) OffWire { } switch p { + case ProviderOllama: + if takesOnlyOllamaLevels(model) { + return OffUnsupported + } + return OffDisableThinkBool case ProviderGoogleAI: if !GeminiCanDisable(model) { return OffUnsupported @@ -91,30 +99,7 @@ func ResolveOff(model string, p Provider) OffWire { } return OffZeroBudget case ProviderOpenAI: - if !IsReasoningModel(model) { - return OffOmit // non-reasoning model does not think - } - if mandatoryThinking(model) { - return OffUnsupported - } - if offByOmission(model) { - return OffOmit - } - if QwenThinkingRequiresStream(model) || QwenThinkingOffByFlag(model) { - return OffDisableDashScope - } - if disablesByThinkingObject(model) { - return OffDisableThinkingObject - } - // The disable token rides on the effort field, so a door that refuses that - // field cannot express "off" at all. - if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { - return OffUnsupported - } - if !AcceptsEffortWire(model) { - return OffUnsupported - } - return OffEffortNone + return openAIOffWire(model) default: if mandatoryThinking(model) { return OffUnsupported @@ -176,6 +161,42 @@ func disablesByThinkingObject(model string) bool { return false } +func openAIOffWire(model string) OffWire { + if !IsReasoningModel(model) { + return OffOmit // non-reasoning model does not think + } + if mandatoryThinking(model) { + return OffUnsupported + } + if offByOmission(model) { + return OffOmit + } + if QwenThinkingRequiresStream(model) || QwenThinkingOffByFlag(model) { + return OffDisableDashScope + } + if disablesByThinkingObject(model) { + return OffDisableThinkingObject + } + // The disable token rides on the effort field, so a door that refuses that + // field cannot express "off" at all. + if caps := OpenAIReasoningCapsFor(model); caps.Known && !caps.CanDisable { + return OffUnsupported + } + if !AcceptsEffortWire(model) { + return OffUnsupported + } + return OffEffortNone +} + +func takesOnlyOllamaLevels(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "gpt-oss") { + return true + } + } + return false +} + func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "glm-5.3") || diff --git a/llms/reasoning/provider_enum_test.go b/llms/reasoning/provider_enum_test.go index c7915aa31..37b7616d8 100644 --- a/llms/reasoning/provider_enum_test.go +++ b/llms/reasoning/provider_enum_test.go @@ -11,6 +11,7 @@ func TestEveryProviderConstantHasADoorThatPassesIt(t *testing.T) { ProviderBedrock: "llms/bedrock", ProviderOpenAI: "llms/openai", ProviderGoogleAI: "llms/googleai", + ProviderOllama: "llms/ollama", } if len(doors) != int(providerCount) { @@ -24,6 +25,29 @@ func TestEveryProviderConstantHasADoorThatPassesIt(t *testing.T) { } } +func TestOllamaDisablesByBooleanEvenForNamesOtherVendorsServeAsMandatory(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-r1:7b", "qwen3:8b", "magistral-small:24b"} { + if got := ResolveOff(model, ProviderOllama); got != OffDisableThinkBool { + t.Errorf("ResolveOff(%q, ProviderOllama) = %v, want OffDisableThinkBool", model, got) + } + if same := ResolveOff(model, ProviderUnknown); same == OffDisableThinkBool { + t.Errorf("ResolveOff(%q, ProviderUnknown) already answers for the ollama door", model) + } + } +} + +func TestOllamaRefusesToDisableTheFamilyThatIgnoresBooleans(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-oss:120b", "gpt-oss:20b", "library/gpt-oss:120b"} { + if got := ResolveOff(model, ProviderOllama); got != OffUnsupported { + t.Errorf("ResolveOff(%q, ProviderOllama) = %v, want OffUnsupported", model, got) + } + } +} + func TestEveryMistralModelDisablesByOmission(t *testing.T) { t.Parallel() diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index c0af95c5f..b25d696c8 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -476,3 +476,21 @@ func TestTheHintNamesTheMechanismTheDoorActuallyUses(t *testing.T) { }) } } + +func TestTheOllamaDoorKeepsTheOffControlItsVendorDocuments(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-r1:7b", "qwen3:8b", "magistral-small:24b"} { + if ReasoningSupportFor(model, reasoning.ProviderOllama).CannotDisable { + t.Errorf("%s: the hint hides an off control the ollama door sends", model) + } + } + + if !ReasoningSupportFor("deepseek-r1", reasoning.ProviderOpenAI).CannotDisable { + t.Error("deepseek-r1 on its vendor door refuses an off, the hint should say so") + } + + if !ReasoningSupportFor("gpt-oss:120b", reasoning.ProviderOllama).CannotDisable { + t.Error("gpt-oss ignores booleans and its trace cannot be disabled: the hint must say so") + } +} From 413688803f761de8029b922580c94e6068d43255 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 19:54:40 +0300 Subject: [PATCH 432/618] fix(embeddings): refuse a batch the client answered with fewer vectors The batcher appended whatever came back, so an answer with fewer vectors than inputs left every later document paired with another document's vector, and an empty answer reached the caller as a short result instead of an error. CheckEmbeddings now gates every batch and gives the doors a single place to ask the same question (PAGI-306). Co-Authored-By: Claude Opus 5 --- embeddings/embedding.go | 20 ++++++++++++- embeddings/short_response_test.go | 48 +++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 embeddings/short_response_test.go diff --git a/embeddings/embedding.go b/embeddings/embedding.go index 50096c0c0..6a49281d4 100644 --- a/embeddings/embedding.go +++ b/embeddings/embedding.go @@ -9,7 +9,22 @@ import ( "github.com/vxcontrol/langchaingo/internal/sliceutil" ) -var ErrNoEmbedding = errors.New("embeddings: the client returned no vector for the query") +var ( + ErrNoEmbedding = errors.New("embeddings: the client returned no vector for the query") + ErrShortEmbedding = errors.New("embeddings: the client returned fewer vectors than inputs") +) + +// CheckEmbeddings reports whether the client answered every input with a vector. +func CheckEmbeddings(embs [][]float32, inputs int) error { + if len(embs) == 0 { + return ErrNoEmbedding + } + if len(embs) != inputs { + return fmt.Errorf("%w: %d for %d inputs", ErrShortEmbedding, len(embs), inputs) + } + + return nil +} // NewEmbedder creates a new Embedder from the given EmbedderClient, with // some options that affect how embedding will be done. @@ -112,6 +127,9 @@ func BatchedEmbed(ctx context.Context, embedder EmbedderClient, texts []string, if err != nil { return nil, fmt.Errorf("error embedding batch: %w", err) } + if err := CheckEmbeddings(curBatchEmbeddings, len(batch)); err != nil { + return nil, err + } emb = append(emb, curBatchEmbeddings...) } diff --git a/embeddings/short_response_test.go b/embeddings/short_response_test.go new file mode 100644 index 000000000..b4aef8114 --- /dev/null +++ b/embeddings/short_response_test.go @@ -0,0 +1,48 @@ +package embeddings + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestBatchedEmbedRefusesAnAnswerWithoutVectors(t *testing.T) { + t.Parallel() + + client := EmbedderClientFunc(func(context.Context, []string) ([][]float32, error) { + return [][]float32{}, nil + }) + + emb, err := BatchedEmbed(t.Context(), client, []string{"one"}, 8) + require.ErrorIs(t, err, ErrNoEmbedding) + require.Nil(t, emb) +} + +func TestBatchedEmbedRefusesAShortBatch(t *testing.T) { + t.Parallel() + + client := EmbedderClientFunc(func(_ context.Context, texts []string) ([][]float32, error) { + return [][]float32{{0.1}}, nil + }) + + emb, err := BatchedEmbed(t.Context(), client, []string{"one", "two"}, 8) + require.ErrorIs(t, err, ErrShortEmbedding) + require.Nil(t, emb) +} + +func TestBatchedEmbedKeepsEveryVectorOfAFullAnswer(t *testing.T) { + t.Parallel() + + client := EmbedderClientFunc(func(_ context.Context, texts []string) ([][]float32, error) { + out := make([][]float32, 0, len(texts)) + for range texts { + out = append(out, []float32{0.1}) + } + return out, nil + }) + + emb, err := BatchedEmbed(t.Context(), client, []string{"one", "two", "three"}, 2) + require.NoError(t, err) + require.Len(t, emb, 3) +} From 2a15d5688bca28f8d2c9aed151955c839a01e72b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 19:54:40 +0300 Subject: [PATCH 433/618] fix(voyageai): answer a vectorless response with an error, not a panic EmbedQuery indexed the first element of an empty list, so a 200 with no vectors crashed the caller through the Embedder interface; EmbedDocuments accepted a short list and shifted the pairing of texts to vectors (PAGI-306). Co-Authored-By: Claude Opus 5 --- embeddings/voyageai/short_response_test.go | 57 ++++++++++++++++++++++ embeddings/voyageai/voyageai.go | 15 ++++-- 2 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 embeddings/voyageai/short_response_test.go diff --git a/embeddings/voyageai/short_response_test.go b/embeddings/voyageai/short_response_test.go new file mode 100644 index 000000000..729285887 --- /dev/null +++ b/embeddings/voyageai/short_response_test.go @@ -0,0 +1,57 @@ +package voyageai + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/embeddings" + + "github.com/stretchr/testify/require" +) + +func embedderAnswering(t *testing.T, body string) *VoyageAI { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, body) + })) + t.Cleanup(srv.Close) + + v, err := NewVoyageAI(WithToken("t"), WithBaseURL(srv.URL)) + require.NoError(t, err) + + return v +} + +func TestEmbedQueryRefusesAnAnswerWithoutVectors(t *testing.T) { + t.Parallel() + + v := embedderAnswering(t, `{"data":[]}`) + + emb, err := v.EmbedQuery(t.Context(), "hi") + require.ErrorIs(t, err, embeddings.ErrNoEmbedding) + require.Nil(t, emb) +} + +func TestEmbedDocumentsRefusesAShortAnswer(t *testing.T) { + t.Parallel() + + v := embedderAnswering(t, `{"data":[{"embedding":[0.1]}]}`) + + emb, err := v.EmbedDocuments(t.Context(), []string{"one", "two"}) + require.ErrorIs(t, err, embeddings.ErrShortEmbedding) + require.Nil(t, emb) +} + +func TestEmbedDocumentsKeepsAFullAnswer(t *testing.T) { + t.Parallel() + + v := embedderAnswering(t, `{"data":[{"embedding":[0.1]},{"embedding":[0.2]}]}`) + + emb, err := v.EmbedDocuments(t.Context(), []string{"one", "two"}) + require.NoError(t, err) + require.Len(t, emb, 2) +} diff --git a/embeddings/voyageai/voyageai.go b/embeddings/voyageai/voyageai.go index 9d6479234..e46c02253 100644 --- a/embeddings/voyageai/voyageai.go +++ b/embeddings/voyageai/voyageai.go @@ -51,7 +51,7 @@ func (v *VoyageAI) EmbedDocuments(ctx context.Context, texts []string) ([][]floa v.BatchSize, ) - embeddings := make([][]float32, 0, len(texts)) + embs := make([][]float32, 0, len(texts)) for _, batch := range batchedTexts { req := embedDocumentsRequest{ Model: v.Model, @@ -74,11 +74,16 @@ func (v *VoyageAI) EmbedDocuments(ctx context.Context, texts []string) ([][]floa return nil, err } + batchEmbs := make([][]float32, 0, len(batch)) for _, data := range embeddingResp.Data { - embeddings = append(embeddings, data.Embedding) + batchEmbs = append(batchEmbs, data.Embedding) } + if err := embeddings.CheckEmbeddings(batchEmbs, len(batch)); err != nil { + return nil, err + } + embs = append(embs, batchEmbs...) } - return embeddings, nil + return embs, nil } type embedQueryRequest struct { @@ -108,6 +113,10 @@ func (v *VoyageAI) EmbedQuery(ctx context.Context, text string) ([]float32, erro if err := json.NewDecoder(resp.Body).Decode(&embeddingResp); err != nil { return nil, err } + if len(embeddingResp.Data) == 0 { + return nil, embeddings.ErrNoEmbedding + } + return embeddingResp.Data[0].Embedding, nil } From 70f0e12a2134bdc40c9abef7b1cb934253d07105 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 19:54:40 +0300 Subject: [PATCH 434/618] fix(bedrock): answer a vectorless response with an error, not a panic The cohere leg returns whatever the model listed, so an empty list panicked EmbedQuery and a short list left EmbedDocuments pairing texts with the wrong vectors. Both now report the shared embeddings errors (PAGI-306). Co-Authored-By: Claude Opus 5 --- embeddings/bedrock/bedrock.go | 23 ++++--- embeddings/bedrock/short_response_test.go | 78 +++++++++++++++++++++++ 2 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 embeddings/bedrock/short_response_test.go diff --git a/embeddings/bedrock/bedrock.go b/embeddings/bedrock/bedrock.go index 2884d67f7..9439ee0c4 100644 --- a/embeddings/bedrock/bedrock.go +++ b/embeddings/bedrock/bedrock.go @@ -42,15 +42,15 @@ func (b *Bedrock) EmbedDocuments(ctx context.Context, texts []string) ([][]float provider := getProvider(b.ModelID) allEmbeds := make([][]float32, 0, len(texts)) - var embeddings [][]float32 + var embs [][]float32 var err error for _, batch := range batchedTexts { switch provider { case "amazon": - embeddings, err = FetchAmazonTextEmbeddings(ctx, b.client, b.ModelID, batch) + embs, err = FetchAmazonTextEmbeddings(ctx, b.client, b.ModelID, batch) case "cohere": - embeddings, err = FetchCohereTextEmbeddings(ctx, b.client, b.ModelID, batch, CohereInputTypeText) + embs, err = FetchCohereTextEmbeddings(ctx, b.client, b.ModelID, batch, CohereInputTypeText) default: err = errors.New("unsupported text embedding provider: " + provider) } @@ -58,7 +58,10 @@ func (b *Bedrock) EmbedDocuments(ctx context.Context, texts []string) ([][]float if err != nil { return nil, err } - allEmbeds = append(allEmbeds, embeddings...) + if err := embeddings.CheckEmbeddings(embs, len(batch)); err != nil { + return nil, err + } + allEmbeds = append(allEmbeds, embs...) } return allEmbeds, nil } @@ -66,14 +69,14 @@ func (b *Bedrock) EmbedDocuments(ctx context.Context, texts []string) ([][]float // EmbedQuery implements embeddings.Embedder // and generates an embedding for the supplied text. func (b *Bedrock) EmbedQuery(ctx context.Context, text string) ([]float32, error) { - var embeddings [][]float32 + var embs [][]float32 var err error switch provider := getProvider(b.ModelID); provider { case "amazon": - embeddings, err = FetchAmazonTextEmbeddings(ctx, b.client, b.ModelID, []string{text}) + embs, err = FetchAmazonTextEmbeddings(ctx, b.client, b.ModelID, []string{text}) case "cohere": - embeddings, err = FetchCohereTextEmbeddings(ctx, b.client, b.ModelID, []string{text}, CohereInputTypeQuery) + embs, err = FetchCohereTextEmbeddings(ctx, b.client, b.ModelID, []string{text}, CohereInputTypeQuery) default: err = errors.New("unsupported text embedding provider: " + provider) } @@ -81,7 +84,11 @@ func (b *Bedrock) EmbedQuery(ctx context.Context, text string) ([]float32, error if err != nil { return nil, err } - return embeddings[0], nil + if len(embs) == 0 { + return nil, embeddings.ErrNoEmbedding + } + + return embs[0], nil } var _ embeddings.Embedder = &Bedrock{} diff --git a/embeddings/bedrock/short_response_test.go b/embeddings/bedrock/short_response_test.go new file mode 100644 index 000000000..7c1f40822 --- /dev/null +++ b/embeddings/bedrock/short_response_test.go @@ -0,0 +1,78 @@ +package bedrock_test + +import ( + "io" + "net/http" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/embeddings" + "github.com/vxcontrol/langchaingo/embeddings/bedrock" + + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/stretchr/testify/require" +) + +type roundTripperFunc func(*http.Request) (*http.Response, error) + +func (f roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) { return f(req) } + +func embedderAnswering(t *testing.T, body string) *bedrock.Bedrock { + t.Helper() + + httpClient := &http.Client{Transport: roundTripperFunc(func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(strings.NewReader(body)), + Request: req, + }, nil + })} + + cfg, err := config.LoadDefaultConfig(t.Context(), + config.WithHTTPClient(httpClient), + config.WithRegion(replayRegion), + config.WithCredentialsProvider(&fakeCredentialsProvider{}), + ) + require.NoError(t, err) + + client := bedrockruntime.NewFromConfig(cfg, func(o *bedrockruntime.Options) { + o.AuthSchemePreference = []string{"sigv4"} + }) + + b, err := bedrock.NewBedrock(bedrock.WithClient(client), bedrock.WithModel(bedrock.ModelCohereEn)) + require.NoError(t, err) + + return b +} + +func TestEmbedQueryRefusesAnAnswerWithoutVectors(t *testing.T) { + t.Parallel() + + b := embedderAnswering(t, `{"response_type":"embeddings_floats","embeddings":[]}`) + + emb, err := b.EmbedQuery(t.Context(), "hi") + require.ErrorIs(t, err, embeddings.ErrNoEmbedding) + require.Nil(t, emb) +} + +func TestEmbedDocumentsRefusesAShortAnswer(t *testing.T) { + t.Parallel() + + b := embedderAnswering(t, `{"response_type":"embeddings_floats","embeddings":[[0.1]]}`) + + emb, err := b.EmbedDocuments(t.Context(), []string{"one", "two"}) + require.ErrorIs(t, err, embeddings.ErrShortEmbedding) + require.Nil(t, emb) +} + +func TestEmbedDocumentsKeepsAFullAnswer(t *testing.T) { + t.Parallel() + + b := embedderAnswering(t, `{"response_type":"embeddings_floats","embeddings":[[0.1],[0.2]]}`) + + emb, err := b.EmbedDocuments(t.Context(), []string{"one", "two"}) + require.NoError(t, err) + require.Len(t, emb, 2) +} From abd8519c745f8f5a2c4464ded57369572b87cd21 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 19:54:40 +0300 Subject: [PATCH 435/618] fix(llms): drop the partial slice when the embedding answer is short Both doors returned the short slice next to ErrUnexpectedResponseLength, so a caller that reads the slice when err is non-nil indexed vectors that belong to other inputs. Neighbouring doors return nothing on that path (PAGI-306). Co-Authored-By: Claude Opus 5 --- llms/huggingface/embeddings_short_test.go | 27 +++++++++++++++++++++++ llms/huggingface/huggingfacellm.go | 2 +- llms/openai/embeddings_short_test.go | 27 +++++++++++++++++++++++ llms/openai/openaillm.go | 2 +- 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 llms/huggingface/embeddings_short_test.go create mode 100644 llms/openai/embeddings_short_test.go diff --git a/llms/huggingface/embeddings_short_test.go b/llms/huggingface/embeddings_short_test.go new file mode 100644 index 000000000..c7d0fea5a --- /dev/null +++ b/llms/huggingface/embeddings_short_test.go @@ -0,0 +1,27 @@ +package huggingface + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestCreateEmbeddingRefusesAShortAnswer(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `[[0.1,0.2]]`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithURL(srv.URL)) + require.NoError(t, err) + + emb, err := llm.CreateEmbedding(t.Context(), []string{"one", "two"}, "m", "feature-extraction") + require.ErrorIs(t, err, ErrUnexpectedResponseLength) + require.Nil(t, emb) +} diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 4ae1895d8..4aa0ec013 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -200,7 +200,7 @@ func (o *LLM) CreateEmbedding( return nil, ErrEmptyResponse } if len(inputTexts) != len(embeddings) { - return embeddings, ErrUnexpectedResponseLength + return nil, ErrUnexpectedResponseLength } return embeddings, nil } diff --git a/llms/openai/embeddings_short_test.go b/llms/openai/embeddings_short_test.go new file mode 100644 index 000000000..a00b35100 --- /dev/null +++ b/llms/openai/embeddings_short_test.go @@ -0,0 +1,27 @@ +package openai + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestCreateEmbeddingRefusesAShortAnswer(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"object":"list","model":"m","data":[{"object":"embedding","index":0,"embedding":[0.1,0.2]}]}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithBaseURL(srv.URL)) + require.NoError(t, err) + + emb, err := llm.CreateEmbedding(t.Context(), []string{"one", "two"}) + require.ErrorIs(t, err, ErrUnexpectedResponseLength) + require.Nil(t, emb) +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 274774f86..5c33e0360 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -712,7 +712,7 @@ func (o *LLM) CreateEmbedding(ctx context.Context, inputTexts []string) ([][]flo return nil, ErrEmptyResponse } if len(inputTexts) != len(embeddings) { - return embeddings, ErrUnexpectedResponseLength + return nil, ErrUnexpectedResponseLength } return embeddings, nil } From 2f5e0163e0fdd467654504394e8f591f0e7646e9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:02:08 +0300 Subject: [PATCH 436/618] fix(huggingface): send the caller's output cap, an explicit zero and nothing else The chat route built max_tokens out of WithMaxLength, so WithMaxTokens never reached the wire while the warning surface still claimed the door had no field for it. Value-typed request fields also made an explicit temperature or seed of zero indistinguishable from "not set", and the door dropped them; the request now carries pointers, so zero is sent and an unset option stays off the wire. An empty message list or a non-text first part panicked through llms.Model and now returns a typed error (PAGI-311). Co-Authored-By: Claude Opus 5 --- llms/huggingface/huggingfacellm.go | 24 +++-- .../huggingfaceclient/chat_wire_test.go | 6 +- .../huggingfaceclient/huggingfaceclient.go | 30 +++--- .../huggingfaceclient_test.go | 4 +- llms/huggingface/limits_wire_test.go | 99 +++++++++++++++++++ llms/huggingface/warnings.go | 2 +- llms/huggingface/warnings_test.go | 4 +- 7 files changed, 135 insertions(+), 34 deletions(-) create mode 100644 llms/huggingface/limits_wire_test.go diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 4aa0ec013..2a793a192 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "errors" + "fmt" "os" "path/filepath" @@ -13,9 +14,11 @@ import ( ) var ( + ErrEmptyMessages = errors.New("huggingface: the call carried no message to send") ErrEmptyResponse = errors.New("empty response") ErrMissingToken = errors.New("missing the Hugging Face API token. Set it in the HF_TOKEN or HUGGINGFACEHUB_API_TOKEN environment variable, or save it to ~/.cache/huggingface/token") //nolint:lll ErrUnexpectedResponseLength = errors.New("unexpected length of response") + ErrUnsupportedPart = errors.New("huggingface: the door sends text and the message carries another part") ) type LLM struct { @@ -52,19 +55,24 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten opt(opts) } + if len(messages) == 0 || len(messages[0].Parts) == 0 { + return nil, ErrEmptyMessages + } + part, ok := messages[0].Parts[0].(llms.TextContent) + if !ok { + return nil, fmt.Errorf("%w: %T", ErrUnsupportedPart, messages[0].Parts[0]) + } + warn := &llms.Warnings{} reportHuggingFaceOptions(warn, opts.GetModel(), opts, messages) - // Assume we get a single text message - msg0 := messages[0] - part := msg0.Parts[0] result, err := o.client.RunInference(ctx, &huggingfaceclient.InferenceRequest{ Model: opts.GetModel(), - Prompt: part.(llms.TextContent).Text, - Temperature: opts.GetTemperature(), - TopP: opts.GetTopP(), - MaxLength: opts.GetMaxLength(), - Seed: opts.GetSeed(), + Prompt: part.Text, + Temperature: opts.Temperature, + TopP: opts.TopP, + MaxTokens: opts.MaxTokens, + Seed: opts.Seed, Effort: reasoningEffort(opts), }) if err != nil { diff --git a/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go b/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go index ce190223b..c9b82ed6e 100644 --- a/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go +++ b/llms/huggingface/internal/huggingfaceclient/chat_wire_test.go @@ -34,8 +34,8 @@ func chatRequestOf(t *testing.T, opts []Option) (string, map[string]any) { resp, err := client.RunInference(t.Context(), &InferenceRequest{ Model: "gpt2", Prompt: "hi", - Temperature: 0.5, - MaxLength: 20, + Temperature: ptr(0.5), + MaxTokens: ptr(20), }) require.NoError(t, err) assert.Equal(t, "stop", resp.StopReason) @@ -63,3 +63,5 @@ func TestANamedProviderPrefixesTheChatEndpoint(t *testing.T) { assert.Equal(t, "/nebius/v1/chat/completions", path) } + +func ptr[T any](v T) *T { return &v } diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go index 100ec9c99..cdc121b63 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient.go @@ -61,10 +61,10 @@ func WithProvider(provider string) Option { type InferenceRequest struct { Model string Prompt string - Temperature float64 - TopP float64 - MaxLength int - Seed int + Temperature *float64 + TopP *float64 + MaxTokens *int + Seed *int Effort string } @@ -76,21 +76,13 @@ type InferenceResponse struct { func (c *Client) RunInference(ctx context.Context, request *InferenceRequest) (*InferenceResponse, error) { payload := &chatCompletionsPayload{ - Model: request.Model, - Messages: []chatMessage{{Role: "user", Content: request.Prompt}}, - Effort: request.Effort, - } - if request.Temperature > 0 { - payload.Temperature = &request.Temperature - } - if request.TopP > 0 { - payload.TopP = &request.TopP - } - if request.MaxLength > 0 { - payload.MaxTokens = &request.MaxLength - } - if request.Seed > 0 { - payload.Seed = &request.Seed + Model: request.Model, + Messages: []chatMessage{{Role: "user", Content: request.Prompt}}, + Effort: request.Effort, + Temperature: request.Temperature, + TopP: request.TopP, + MaxTokens: request.MaxTokens, + Seed: request.Seed, } resp, err := c.runChatCompletions(ctx, payload) diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go index 0767e799f..2f2c0d6fb 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go @@ -88,8 +88,8 @@ func TestClient_RunInferenceWithProvider(t *testing.T) { req := &InferenceRequest{ Model: "deepseek-ai/DeepSeek-R1-0528", Prompt: "Hello, how are you?", - Temperature: 0.5, - MaxLength: 50, + Temperature: ptr(0.5), + MaxTokens: ptr(50), } resp, err := client.RunInference(ctx, req) diff --git a/llms/huggingface/limits_wire_test.go b/llms/huggingface/limits_wire_test.go new file mode 100644 index 000000000..e3b04422b --- /dev/null +++ b/llms/huggingface/limits_wire_test.go @@ -0,0 +1,99 @@ +package huggingface + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func bodyOfCall(t *testing.T, messages []llms.MessageContent, call ...llms.CallOption) map[string]any { + t.Helper() + + var raw []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"choices":[{"message":{"content":"hi"},"finish_reason":"stop"}]}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithToken("t"), WithURL(srv.URL), WithModel("Qwen/Qwen3-32B")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), messages, call...) + require.NoError(t, err) + + var body map[string]any + require.NoError(t, json.Unmarshal(raw, &body)) + return body +} + +func TestTheOutputCapOnTheWireComesFromWithMaxTokens(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage(), llms.WithMaxTokens(500)) + assert.InDelta(t, 500, body["max_tokens"], 0) +} + +func TestWithMaxLengthNoLongerReachesTheWire(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage(), llms.WithMaxLength(20)) + assert.NotContains(t, body, "max_tokens") +} + +func TestAnExplicitZeroTemperatureReachesTheWire(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage(), llms.WithTemperature(0)) + require.Contains(t, body, "temperature") + assert.InDelta(t, 0, body["temperature"], 0) +} + +func TestAnUnsetTemperatureStaysOffTheWire(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage()) + assert.NotContains(t, body, "temperature") +} + +func TestAnExplicitZeroSeedReachesTheWire(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage(), llms.WithSeed(0)) + require.Contains(t, body, "seed") + assert.InDelta(t, 0, body["seed"], 0) +} + +func TestACallWithoutMessagesIsRefusedInsteadOfPanicking(t *testing.T) { + t.Parallel() + + llm, err := New(WithToken("t"), WithURL("http://127.0.0.1:1"), WithModel("Qwen/Qwen3-32B")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), nil) + require.ErrorIs(t, err, ErrEmptyMessages) + require.Nil(t, resp) +} + +func TestANonTextPartIsRefusedInsteadOfPanicking(t *testing.T) { + t.Parallel() + + llm, err := New(WithToken("t"), WithURL("http://127.0.0.1:1"), WithModel("Qwen/Qwen3-32B")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{{ + Role: llms.ChatMessageTypeHuman, + Parts: []llms.ContentPart{llms.ImageURLContent{URL: "https://example.com/a.png"}}, + }}) + require.ErrorIs(t, err, ErrUnsupportedPart) + require.Nil(t, resp) +} diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index fedc1ab03..49f26592b 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -30,7 +30,7 @@ func reportHuggingFaceOptions( } } - dropInt("WithMaxTokens", opts.MaxTokens) + dropInt("WithMaxLength", opts.MaxLength) dropInt("WithTopK", opts.TopK) dropInt("WithMinLength", opts.MinLength) dropCount := func(option string, v *int) { diff --git a/llms/huggingface/warnings_test.go b/llms/huggingface/warnings_test.go index 67c5b52b5..f0e0182ca 100644 --- a/llms/huggingface/warnings_test.go +++ b/llms/huggingface/warnings_test.go @@ -46,7 +46,7 @@ func TestEveryOptionWithNoFieldOnThisDoorIsReported(t *testing.T) { t.Parallel() resp := generateForWarnings(t, oneMessage(), - llms.WithMaxTokens(100), llms.WithTopK(5), llms.WithMinLength(2), + llms.WithMaxLength(100), llms.WithTopK(5), llms.WithMinLength(2), llms.WithN(2), llms.WithCandidateCount(3), llms.WithTopLogProbs(4), llms.WithMinP(0.1), llms.WithRepetitionPenalty(1.1), llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.25), @@ -56,7 +56,7 @@ func TestEveryOptionWithNoFieldOnThisDoorIsReported(t *testing.T) { got := hfWarningsByOption(resp.Warnings) for option, asked := range map[string]string{ - "WithMaxTokens": "100", "WithTopK": "5", "WithMinLength": "2", + "WithMaxLength": "100", "WithTopK": "5", "WithMinLength": "2", "WithN": "2", "WithCandidateCount": "3", "WithTopLogProbs": "4", "WithMinP": "0.1", "WithRepetitionPenalty": "1.1", "WithFrequencyPenalty": "0.5", "WithPresencePenalty": "0.25", From 162c3fd383f1168b86b2a08ed5656cf6fa696cdf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:20:46 +0300 Subject: [PATCH 437/618] fix(reasoning): stop calling Nova 2 Sonic a model that takes reasoningConfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The predicate listed nova-2-sonic beside nova-2-lite, so both Bedrock doors built a reasoning config for it while the name catalogue answered that the model does not think. AWS serves Nova 2 Sonic only on InvokeModelWithBidirectionalStream — its model card marks Converse and Invoke unsupported and names no reasoning configuration at all (PAGI-307). Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 2 +- llms/reasoning/bedrock_capability_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 348b4a591..0d0c8ca28 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -6,7 +6,7 @@ import "strings" // reasoningConfig. func IsNovaReasoningModel(model string) bool { base := baseModelName(model) - return strings.Contains(base, "amazon.nova-2-lite") || strings.Contains(base, "amazon.nova-2-sonic") + return strings.Contains(base, "amazon.nova-2-lite") } // NovaEffort maps a requested effort onto the three levels Nova accepts. Bedrock diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index a9f934cb3..5b3e25efa 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -2,10 +2,9 @@ package reasoning import "testing" -func TestOnlyNovaLiteAndSonicTakeReasoningConfig(t *testing.T) { +func TestOnlyNovaLiteTakesReasoningConfig(t *testing.T) { for _, model := range []string{ "amazon.nova-2-lite-v1:0", "us.amazon.nova-2-lite-v1:0", - "amazon.nova-2-sonic-v1:0", } { if !IsNovaReasoningModel(model) { t.Errorf("%s takes reasoningConfig", model) @@ -14,6 +13,7 @@ func TestOnlyNovaLiteAndSonicTakeReasoningConfig(t *testing.T) { for _, model := range []string{ "amazon.nova-pro-v1:0", "us.amazon.nova-lite-v1:0", "amazon.nova-micro-v1:0", "global.amazon.nova-2-pro-preview-20251202-v1:0", "us.amazon.nova-2-micro-v1:0", + "amazon.nova-2-sonic-v1:0", "us.anthropic.claude-opus-5", "openai.gpt-oss-120b-1:0", } { if IsNovaReasoningModel(model) { From d9263156ccc299b6cbce08f4f51603ae6c0a3643 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:20:46 +0300 Subject: [PATCH 438/618] fix(llms): report the sampling an OpenAI reasoning model refuses Both OpenAI branches left RejectsSampling false while the wire pins temperature to one and drops top_p, so a consumer drawing its controls from the hint showed a live slider for a value the door throws away (PAGI-307). Co-Authored-By: Claude Opus 5 --- llms/reasoning_sampling_hint_test.go | 33 ++++++++++++++++++++++++++++ llms/reasoning_support.go | 16 ++++++++------ 2 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 llms/reasoning_sampling_hint_test.go diff --git a/llms/reasoning_sampling_hint_test.go b/llms/reasoning_sampling_hint_test.go new file mode 100644 index 000000000..02eb8323d --- /dev/null +++ b/llms/reasoning_sampling_hint_test.go @@ -0,0 +1,33 @@ +package llms_test + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" + + "github.com/stretchr/testify/assert" +) + +func TestTheHintReportsTheSamplingTheWireRefuses(t *testing.T) { + t.Parallel() + + for _, model := range []string{"o3-mini", "gpt-5-mini", "o3", "gpt-5.1"} { + support := llms.ReasoningSupportFor(model, reasoning.ProviderOpenAI) + assert.True(t, support.Supported, "%s is a reasoning model", model) + assert.Equal(t, reasoning.RejectsSamplingWhileThinking(model), support.RejectsSampling, + "%s: the hint and the wire disagree about sampling", model) + assert.True(t, support.RejectsSampling, + "%s pins temperature and drops top_p on the wire", model) + } +} + +func TestAForeignVendorOnTheOpenAIDoorKeepsItsSampling(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-v3.1", "qwen3-max"} { + support := llms.ReasoningSupportFor(model, reasoning.ProviderOpenAI) + assert.Equal(t, reasoning.RejectsSamplingWhileThinking(model), support.RejectsSampling, + "%s: the hint and the wire disagree about sampling", model) + } +} diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index a91888968..1fee3d08d 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -105,19 +105,21 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { return ReasoningSupport{ - Supported: true, - Known: true, - CannotDisable: !caps.CanDisable, - Efforts: toReasoningEfforts(caps.Efforts), - Mechanism: ReasoningMechanismAdaptive, + Supported: true, + Known: true, + CannotDisable: !caps.CanDisable, + RejectsSampling: reasoning.RejectsSamplingWhileThinking(model), + Efforts: toReasoningEfforts(caps.Efforts), + Mechanism: ReasoningMechanismAdaptive, // DefaultOn is per-model on the GPT-5.x line (some default off) — leave unknown. } } if p == reasoning.ProviderOpenAI && reasoning.IsReasoningModel(model) { return ReasoningSupport{ - Supported: true, - CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + Supported: true, + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + RejectsSampling: reasoning.RejectsSamplingWhileThinking(model), } } From 203ab04eb2dc8e0b6a6387e537bd79077a923457 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:20:46 +0300 Subject: [PATCH 439/618] fix(reasoning): classify a fine-tuned model as its base model An "ft:"-wrapped identifier kept the wrapper through name normalisation, so the rules that refuse top_k and repetition_penalty for the base model let them through for its fine-tune and the vendor answered 400 (PAGI-307). Co-Authored-By: Claude Opus 5 --- llms/reasoning/name.go | 14 ++++++++++ llms/reasoning/name_finetune_test.go | 38 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 llms/reasoning/name_finetune_test.go diff --git a/llms/reasoning/name.go b/llms/reasoning/name.go index 26fc4075b..2eeb674a3 100644 --- a/llms/reasoning/name.go +++ b/llms/reasoning/name.go @@ -10,6 +10,7 @@ func modelSpellings(model string) []string { if idx := strings.LastIndex(m, "/"); idx != -1 { m = m[idx+1:] } + m = stripFineTuneWrapper(m) vendor, bare := splitPlatformPrefix(m) switch { @@ -59,3 +60,16 @@ func hasGeneration(model, generation string) bool { } return rest == "" || rest[0] < '0' || rest[0] > '9' } + +func stripFineTuneWrapper(model string) string { + rest, ok := strings.CutPrefix(model, "ft:") + if !ok { + return model + } + base, _, _ := strings.Cut(rest, ":") + if base == "" { + return model + } + + return base +} diff --git a/llms/reasoning/name_finetune_test.go b/llms/reasoning/name_finetune_test.go new file mode 100644 index 000000000..49b289c21 --- /dev/null +++ b/llms/reasoning/name_finetune_test.go @@ -0,0 +1,38 @@ +package reasoning + +import "testing" + +func TestAFineTunedNameIsClassifiedAsItsBaseModel(t *testing.T) { + const ( + base = "gpt-4o-2024-08-06" + fineTuned = "ft:gpt-4o-2024-08-06:acme::9xYzAbCd" + ) + + if RejectsTopK(base) != RejectsTopK(fineTuned) { + t.Errorf("RejectsTopK: base %v, fine-tuned %v", RejectsTopK(base), RejectsTopK(fineTuned)) + } + if RejectsRepetitionPenalty(base) != RejectsRepetitionPenalty(fineTuned) { + t.Error("RejectsRepetitionPenalty disagrees between a base model and its fine-tune") + } + if !RejectsTopK(fineTuned) { + t.Error("top_k must stay off the wire for a fine-tune of an OpenAI model") + } +} + +func TestTheWrapperIsStrippedWithAndWithoutTheTrailingFields(t *testing.T) { + for _, model := range []string{ + "ft:gpt-4o-2024-08-06:acme::9xYzAbCd", + "ft:gpt-4o-2024-08-06", + "ft:o3-mini:acme::1", + } { + if !RejectsTopK(model) { + t.Errorf("%s: top_k must stay off the wire, as it does for the base model", model) + } + } + if RejectsTopK("ft:") { + t.Error("an empty wrapper names no model and must not classify as one") + } + if RejectsTopK("ft:claude-opus-5:acme::1") { + t.Error("a fine-tune of another vendor's model is not an OpenAI name") + } +} From ff1a98a91acc04532b396e0d10538865f1cb396d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:20:47 +0300 Subject: [PATCH 440/618] fix(llms): decode tool call arguments exactly on googleai and ollama Both doors parsed the model's arguments with a plain unmarshal, so an integer wider than float64 came back changed on the way to the next turn: an id or a sum of money arrives as a different number. The idiom bedrock already carried moves to internal/toolcall, which also keeps the key order ollama's ordered map expects, and all three doors now share it (PAGI-307). Co-Authored-By: Claude Opus 5 --- internal/toolcall/arguments.go | 92 ++++++++++++++++++++++++++ internal/toolcall/arguments_test.go | 47 +++++++++++++ llms/bedrock/bedrockllm.go | 35 +--------- llms/googleai/googleai.go | 5 +- llms/googleai/toolcall_numbers_test.go | 30 +++++++++ llms/ollama/ollamallm.go | 7 +- llms/ollama/toolcall_numbers_test.go | 51 ++++++++++++++ 7 files changed, 231 insertions(+), 36 deletions(-) create mode 100644 internal/toolcall/arguments.go create mode 100644 internal/toolcall/arguments_test.go create mode 100644 llms/googleai/toolcall_numbers_test.go create mode 100644 llms/ollama/toolcall_numbers_test.go diff --git a/internal/toolcall/arguments.go b/internal/toolcall/arguments.go new file mode 100644 index 000000000..e243745b8 --- /dev/null +++ b/internal/toolcall/arguments.go @@ -0,0 +1,92 @@ +// Package toolcall decodes the arguments a model sent with a tool call. +package toolcall + +import ( + "encoding/json" + "errors" + "fmt" + "strings" +) + +// ErrNotAnObject reports arguments that are not a JSON object. +var ErrNotAnObject = errors.New("toolcall: arguments are not a JSON object") + +// Field is one argument, carrying the key order the model sent. +type Field struct { + Key string + Value any +} + +// DecodeFields decodes tool call arguments, keeping the order of the keys and +// the exact value of integers wider than float64 can hold. +func DecodeFields(raw string) ([]Field, error) { + dec := json.NewDecoder(strings.NewReader(raw)) + dec.UseNumber() + + open, err := dec.Token() + if err != nil { + return nil, err + } + if delim, ok := open.(json.Delim); !ok || delim != '{' { + return nil, fmt.Errorf("%w: %s", ErrNotAnObject, raw) + } + + var fields []Field + for dec.More() { + key, err := dec.Token() + if err != nil { + return nil, err + } + name, ok := key.(string) + if !ok { + return nil, fmt.Errorf("%w: %s", ErrNotAnObject, raw) + } + var value any + if err := dec.Decode(&value); err != nil { + return nil, err + } + fields = append(fields, Field{Key: name, Value: exactNumbers(value)}) + } + if _, err := dec.Token(); err != nil { + return nil, err + } + + return fields, nil +} + +// Decode decodes tool call arguments into a map, keeping integers exact. +func Decode(raw string) (map[string]any, error) { + fields, err := DecodeFields(raw) + if err != nil { + return nil, err + } + + arguments := make(map[string]any, len(fields)) + for _, field := range fields { + arguments[field.Key] = field.Value + } + + return arguments, nil +} + +func exactNumbers(value any) any { + switch typed := value.(type) { + case map[string]any: + for key, item := range typed { + typed[key] = exactNumbers(item) + } + case []any: + for i, item := range typed { + typed[i] = exactNumbers(item) + } + case json.Number: + if whole, err := typed.Int64(); err == nil { + return whole + } + if fraction, err := typed.Float64(); err == nil { + return fraction + } + } + + return value +} diff --git a/internal/toolcall/arguments_test.go b/internal/toolcall/arguments_test.go new file mode 100644 index 000000000..bf8899fb9 --- /dev/null +++ b/internal/toolcall/arguments_test.go @@ -0,0 +1,47 @@ +package toolcall_test + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/internal/toolcall" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDecodeKeepsAnIntegerWiderThanFloat64(t *testing.T) { + t.Parallel() + + args, err := toolcall.Decode(`{"id":9007199254740993,"nested":{"amount":12345678901234567}}`) + require.NoError(t, err) + assert.Equal(t, int64(9007199254740993), args["id"]) + assert.Equal(t, int64(12345678901234567), args["nested"].(map[string]any)["amount"]) +} + +func TestDecodeFieldsKeepsTheOrderTheModelSent(t *testing.T) { + t.Parallel() + + fields, err := toolcall.DecodeFields(`{"zebra":1,"alpha":2,"middle":3}`) + require.NoError(t, err) + require.Len(t, fields, 3) + assert.Equal(t, []string{"zebra", "alpha", "middle"}, + []string{fields[0].Key, fields[1].Key, fields[2].Key}) +} + +func TestDecodeRefusesArgumentsThatAreNotAnObject(t *testing.T) { + t.Parallel() + + _, err := toolcall.Decode(`[1,2,3]`) + require.ErrorIs(t, err, toolcall.ErrNotAnObject) +} + +func TestDecodeKeepsFractionsAndStrings(t *testing.T) { + t.Parallel() + + args, err := toolcall.Decode(`{"ratio":0.5,"name":"x","flag":true,"list":[1,2]}`) + require.NoError(t, err) + assert.InDelta(t, 0.5, args["ratio"], 0) + assert.Equal(t, "x", args["name"]) + assert.Equal(t, true, args["flag"]) + assert.Equal(t, []any{int64(1), int64(2)}, args["list"]) +} diff --git a/llms/bedrock/bedrockllm.go b/llms/bedrock/bedrockllm.go index 28dfe4d0b..0aa2317ab 100644 --- a/llms/bedrock/bedrockllm.go +++ b/llms/bedrock/bedrockllm.go @@ -2,13 +2,13 @@ package bedrock import ( "context" - "encoding/json" "errors" "fmt" "strings" "time" "github.com/vxcontrol/langchaingo/callbacks" + "github.com/vxcontrol/langchaingo/internal/toolcall" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" @@ -19,38 +19,7 @@ import ( const defaultModel = ModelAnthropicClaudeHaiku45 func decodeToolArguments(raw string) (map[string]any, error) { - decoder := json.NewDecoder(strings.NewReader(raw)) - decoder.UseNumber() - - var arguments map[string]any - if err := decoder.Decode(&arguments); err != nil { - return nil, err - } - for key, value := range arguments { - arguments[key] = exactNumbers(value) - } - return arguments, nil -} - -func exactNumbers(value any) any { - switch typed := value.(type) { - case map[string]any: - for key, item := range typed { - typed[key] = exactNumbers(item) - } - case []any: - for i, item := range typed { - typed[i] = exactNumbers(item) - } - case json.Number: - if whole, err := typed.Int64(); err == nil { - return whole - } - if fraction, err := typed.Float64(); err == nil { - return fraction - } - } - return value + return toolcall.Decode(raw) } // LLM is a Bedrock LLM implementation. diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 89717d9ca..d82e71d6d 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -14,6 +14,7 @@ import ( "github.com/vxcontrol/langchaingo/internal/imageutil" "github.com/vxcontrol/langchaingo/internal/numutil" + "github.com/vxcontrol/langchaingo/internal/toolcall" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -674,8 +675,8 @@ func convertParts(parts []llms.ContentPart) ([]*genai.Part, error) { case llms.ToolCall: fc := p.FunctionCall - var argsMap map[string]any - if err := json.Unmarshal([]byte(fc.Arguments), &argsMap); err != nil { + argsMap, err := toolcall.Decode(fc.Arguments) + if err != nil { return nil, err } genaiPart = &genai.Part{ diff --git a/llms/googleai/toolcall_numbers_test.go b/llms/googleai/toolcall_numbers_test.go new file mode 100644 index 000000000..7ecab206a --- /dev/null +++ b/llms/googleai/toolcall_numbers_test.go @@ -0,0 +1,30 @@ +package googleai + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestToolCallArgumentsKeepIntegersWiderThanFloat64(t *testing.T) { + t.Parallel() + + parts, err := convertParts([]llms.ContentPart{llms.ToolCall{ + ID: "call_1", + Type: "function", + FunctionCall: &llms.FunctionCall{ + Name: "charge", + Arguments: `{"account":9007199254740993,"cents":12345678901234567}`, + }, + }}) + require.NoError(t, err) + require.Len(t, parts, 1) + require.NotNil(t, parts[0].FunctionCall) + + args := parts[0].FunctionCall.Args + assert.Equal(t, int64(9007199254740993), args["account"]) + assert.Equal(t, int64(12345678901234567), args["cents"]) +} diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index c68f445a7..f3d6b6d15 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -13,6 +13,7 @@ import ( "strings" "github.com/vxcontrol/langchaingo/callbacks" + "github.com/vxcontrol/langchaingo/internal/toolcall" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/streaming" @@ -292,10 +293,14 @@ func (o *LLM) convertToolCall(toolCall llms.ToolCall) (api.ToolCall, error) { }, } - err := json.Unmarshal([]byte(toolCall.FunctionCall.Arguments), &tc.Function.Arguments) + fields, err := toolcall.DecodeFields(toolCall.FunctionCall.Arguments) if err != nil { return api.ToolCall{}, fmt.Errorf("error unmarshalling tool call arguments: %w", err) } + tc.Function.Arguments = api.NewToolCallFunctionArguments() + for _, field := range fields { + tc.Function.Arguments.Set(field.Key, field.Value) + } return tc, nil } diff --git a/llms/ollama/toolcall_numbers_test.go b/llms/ollama/toolcall_numbers_test.go new file mode 100644 index 000000000..db5cce5dd --- /dev/null +++ b/llms/ollama/toolcall_numbers_test.go @@ -0,0 +1,51 @@ +package ollama + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestToolCallArgumentsKeepIntegersWiderThanFloat64(t *testing.T) { + t.Parallel() + + o := &LLM{} + converted, err := o.convertToolCall(llms.ToolCall{ + ID: "1", + Type: "function", + FunctionCall: &llms.FunctionCall{ + Name: "charge", + Arguments: `{"account":9007199254740993,"cents":12345678901234567}`, + }, + }) + require.NoError(t, err) + + account, ok := converted.Function.Arguments.Get("account") + require.True(t, ok) + assert.Equal(t, int64(9007199254740993), account) + + cents, ok := converted.Function.Arguments.Get("cents") + require.True(t, ok) + assert.Equal(t, int64(12345678901234567), cents) +} + +func TestToolCallArgumentsKeepTheOrderTheModelSent(t *testing.T) { + t.Parallel() + + o := &LLM{} + converted, err := o.convertToolCall(llms.ToolCall{ + ID: "1", + Type: "function", + FunctionCall: &llms.FunctionCall{Name: "f", Arguments: `{"zebra":1,"alpha":2,"middle":3}`}, + }) + require.NoError(t, err) + + var keys []string + for key := range converted.Function.Arguments.All() { + keys = append(keys, key) + } + assert.Equal(t, []string{"zebra", "alpha", "middle"}, keys) +} From ae8e35734a97d05ff4de6b30d9b6787b6d297b83 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:36:04 +0300 Subject: [PATCH 441/618] fix(llms): let a partial answer still answer the truncation question Both doors checked truncation only on the success path, so a consumer error or a broken stream swallowed the signal: a caller who asked to fail on truncation got the partial text and an error about something else, while the stop reason already said the output limit was reached. The partial path now joins the truncation error to the one that interrupted the stream (PAGI-310). Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 3 + llms/anthropic/truncation_partial_test.go | 73 +++++++++++++++++++++ llms/openai/openaillm.go | 14 +++- llms/openai/truncation_partial_test.go | 78 +++++++++++++++++++++++ 4 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/truncation_partial_test.go create mode 100644 llms/openai/truncation_partial_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 91ad4b365..ba38b818b 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -326,6 +326,9 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag if buildErr != nil { return nil, wrapped } + if truncated := llms.CheckTruncation(partial, *opts); truncated != nil { + return partial, errors.Join(wrapped, truncated) + } return partial, wrapped } response, err := processAnthropicResponse(result, warn) diff --git a/llms/anthropic/truncation_partial_test.go b/llms/anthropic/truncation_partial_test.go new file mode 100644 index 000000000..05a719d3d --- /dev/null +++ b/llms/anthropic/truncation_partial_test.go @@ -0,0 +1,73 @@ +package anthropic_test + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/streaming" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +const truncatedThenBroken = deliveredThenBroken + `event: message_delta +data: {"type":"message_delta","delta":{"stop_reason":"max_tokens"},"usage":{"output_tokens":4}} + +event: error +data: {"type":"error","error":{"type":"overloaded_error","message":"overloaded"}} +` + +func truncatedStreamThenError(t *testing.T, call ...llms.CallOption) (*llms.ContentResponse, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, truncatedThenBroken) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-haiku-4-5")) + require.NoError(t, err) + + options := append([]llms.CallOption{ + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil }), + }, call...) + + return llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + options...) +} + +func TestAPartialAnswerStillAnswersTheTruncationQuestion(t *testing.T) { + t.Parallel() + + resp, err := truncatedStreamThenError(t, llms.WithFailOnTruncation()) + + require.Error(t, err) + require.NotNil(t, resp, "the text already delivered must travel with the error") + + var apiErr *llms.Error + require.True(t, errors.As(err, &apiErr), "the truncation error is reachable: %v", err) + assert.Equal(t, llms.ErrCodeTruncated, apiErr.Code) + assert.Contains(t, err.Error(), "overloaded", "the vendor error is kept alongside it") +} + +func TestAPartialAnswerIsSilentWhenTruncationWasNotAsked(t *testing.T) { + t.Parallel() + + _, err := truncatedStreamThenError(t) + + require.Error(t, err) + var apiErr *llms.Error + if errors.As(err, &apiErr) { + assert.NotEqual(t, llms.ErrCodeTruncated, apiErr.Code) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 5c33e0360..e66457842 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -2,6 +2,7 @@ package openai import ( "context" + "errors" "fmt" "strconv" @@ -123,7 +124,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten if result == nil || len(result.Choices) == 0 { return nil, err } - return o.processResponse(result, warn), err + return o.partialWithTruncation(result, warn, opts, err) } if len(result.Choices) == 0 { return nil, ErrEmptyResponse @@ -612,6 +613,17 @@ func refusalFrom(result *openaiclient.ChatCompletionResponse) (*llms.ErrModelRef } // processResponse processes the OpenAI API response into a ContentResponse. +func (o *LLM) partialWithTruncation( + result *openaiclient.ChatCompletionResponse, warn *llms.Warnings, opts llms.CallOptions, cause error, +) (*llms.ContentResponse, error) { + partial := o.processResponse(result, warn) + if truncated := llms.CheckTruncation(partial, opts); truncated != nil { + return partial, errors.Join(cause, truncated) + } + + return partial, cause +} + func (o *LLM) processResponse( result *openaiclient.ChatCompletionResponse, warn *llms.Warnings, ) *llms.ContentResponse { diff --git a/llms/openai/truncation_partial_test.go b/llms/openai/truncation_partial_test.go new file mode 100644 index 000000000..0cff983fa --- /dev/null +++ b/llms/openai/truncation_partial_test.go @@ -0,0 +1,78 @@ +package openai + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func truncatedStreamGivenUpOn(t *testing.T, call ...llms.CallOption) (*llms.ContentResponse, error) { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,`+ + `"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"sixty "},"finish_reason":null}]}`+"\n\n") + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,`+ + `"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"rooms"},"finish_reason":"length"}]}`+"\n\n") + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + delivered := 0 + options := append([]llms.CallOption{ + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return errGaveUp + } + return nil + }), + }, call...) + + return llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + options...) +} + +func TestAPartialAnswerStillAnswersTheTruncationQuestion(t *testing.T) { + t.Parallel() + + resp, err := truncatedStreamGivenUpOn(t, llms.WithFailOnTruncation()) + + require.Error(t, err) + require.NotNil(t, resp, "the text already delivered must travel with the error") + assert.ErrorIs(t, err, errGaveUp, "the error the consumer raised is kept") + + var apiErr *llms.Error + require.True(t, errors.As(err, &apiErr), "the truncation error is reachable: %v", err) + assert.Equal(t, llms.ErrCodeTruncated, apiErr.Code) +} + +func TestAPartialAnswerIsSilentWhenTruncationWasNotAsked(t *testing.T) { + t.Parallel() + + _, err := truncatedStreamGivenUpOn(t) + + require.Error(t, err) + var apiErr *llms.Error + if errors.As(err, &apiErr) { + assert.NotEqual(t, llms.ErrCodeTruncated, apiErr.Code, + "a caller who did not ask to fail on truncation gets only the stream error") + } +} From 74456997b0b6b538b7b5ca5fe60c5b5c96fa2f7c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 20:36:04 +0300 Subject: [PATCH 442/618] fix(fake): hand back the collected text when a stream consumer gives up The fake door and the conformance mock returned nothing next to the error, so tests written against them proved a contract the real doors do not have: every door hands back what it collected. Both now answer with the text delivered so far, buffered before the callback exactly as the real doors do (PAGI-310). Co-Authored-By: Claude Opus 5 --- llms/fake/fakellm.go | 12 +++++-- llms/fake/stream_cancel_test.go | 55 +++++++++++++++++++++++++++++++++ testing/llmtest/llmtest.go | 12 +++++-- testing/llmtest/llmtest_test.go | 34 ++++++++++++++++++++ 4 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 llms/fake/stream_cancel_test.go diff --git a/llms/fake/fakellm.go b/llms/fake/fakellm.go index 9592631f6..011a12acb 100644 --- a/llms/fake/fakellm.go +++ b/llms/fake/fakellm.go @@ -42,13 +42,15 @@ func (f *LLM) GenerateContent(ctx context.Context, _ []llms.MessageContent, opti opt(&opts) } if opts.StreamingFunc != nil { + var sent strings.Builder for _, part := range strings.SplitAfter(response, " ") { + sent.WriteString(part) if err := streaming.CallWithText(ctx, opts.StreamingFunc, part); err != nil { - return nil, err + return partialResponse(sent.String()), err } } if err := streaming.CallWithDone(ctx, opts.StreamingFunc); err != nil { - return nil, err + return partialResponse(sent.String()), err } } @@ -82,3 +84,9 @@ func (f *LLM) AddResponse(response string) { f.responses = append(f.responses, response) f.mu.Unlock() } + +func partialResponse(content string) *llms.ContentResponse { + return &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: content}}, + } +} diff --git a/llms/fake/stream_cancel_test.go b/llms/fake/stream_cancel_test.go new file mode 100644 index 000000000..b84ba7708 --- /dev/null +++ b/llms/fake/stream_cancel_test.go @@ -0,0 +1,55 @@ +package fake_test + +import ( + "context" + "errors" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/fake" + "github.com/vxcontrol/langchaingo/llms/streaming" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var errGaveUp = errors.New("the consumer gave up") + +func TestAConsumerThatGivesUpStillGetsWhatArrived(t *testing.T) { + t.Parallel() + + llm := fake.NewFakeLLM([]string{"sixty rooms are free"}) + + delivered := 0 + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return errGaveUp + } + return nil + })) + + require.ErrorIs(t, err, errGaveUp) + require.NotNil(t, resp, "a real door hands back the text it collected; the fake must too") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms ", resp.Choices[0].Content) +} + +func TestAStreamNobodyInterruptsStillReturnsEverything(t *testing.T) { + t.Parallel() + + llm := fake.NewFakeLLM([]string{"sixty rooms are free"}) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + require.NoError(t, err) + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) +} diff --git a/testing/llmtest/llmtest.go b/testing/llmtest/llmtest.go index 5614af50c..fae049794 100644 --- a/testing/llmtest/llmtest.go +++ b/testing/llmtest/llmtest.go @@ -603,18 +603,26 @@ func (m *MockLLM) GenerateContent(ctx context.Context, messages []llms.MessageCo opt(&opts) } if opts.StreamingFunc != nil && len(response.Choices) > 0 { + var sent strings.Builder for _, part := range strings.SplitAfter(response.Choices[0].Content, " ") { + sent.WriteString(part) if err := streaming.CallWithText(ctx, opts.StreamingFunc, part); err != nil { - return nil, err + return partialMockResponse(sent.String()), err } } if err := streaming.CallWithDone(ctx, opts.StreamingFunc); err != nil { - return nil, err + return partialMockResponse(sent.String()), err } } return response, m.GenerateError } +func partialMockResponse(content string) *llms.ContentResponse { + return &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: content}}, + } +} + // Verify MockLLM implements llms.Model var _ llms.Model = (*MockLLM)(nil) diff --git a/testing/llmtest/llmtest_test.go b/testing/llmtest/llmtest_test.go index f21c1fbed..12a74bcf1 100644 --- a/testing/llmtest/llmtest_test.go +++ b/testing/llmtest/llmtest_test.go @@ -1,10 +1,16 @@ package llmtest import ( + "context" + "errors" "os" "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) // TestMockLLM tests the mock implementation. @@ -75,3 +81,31 @@ func TestOpenAIIntegration(t *testing.T) { // Import is handled in the actual test files for each provider } + +func TestTheMockHandsBackWhatTheConsumerReceivedBeforeGivingUp(t *testing.T) { + t.Parallel() + + mock := &MockLLM{GenerateResponse: &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: "sixty rooms are free"}}, + }} + + gaveUp := errors.New("the consumer gave up") + delivered := 0 + resp, err := mock.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type != streaming.ChunkTypeText { + return nil + } + delivered++ + if delivered == 2 { + return gaveUp + } + return nil + })) + + require.ErrorIs(t, err, gaveUp) + require.NotNil(t, resp, "a real door hands back the text it collected; the mock must too") + require.NotEmpty(t, resp.Choices) + assert.Equal(t, "sixty rooms ", resp.Choices[0].Content) +} From 64226d5cf107d66f0cf0d26801c71ae941444bc1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 21:01:54 +0300 Subject: [PATCH 443/618] fix(llms): keep an explicit off out of the adaptive hand-off MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DelegatesDepth read the adaptive flag without looking at the mode, so a config carrying both — reachable by any caller filling the exported struct rather than using the call options, which each replace it whole — reported that the caller had left the depth to the vendor. Doors then took the default branch and the request travelled without the disable wire, which is the opposite of what the caller asked for (PAGI-308). Co-Authored-By: Claude Opus 5 --- llms/options.go | 3 ++- llms/reasoning_delegation_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 llms/reasoning_delegation_test.go diff --git a/llms/options.go b/llms/options.go index df1306bc1..09ba644b9 100644 --- a/llms/options.go +++ b/llms/options.go @@ -134,7 +134,8 @@ func (r *ReasoningConfig) HasExplicitTokens() bool { // DelegatesDepth reports whether the caller handed the depth decision to the // model: adaptive with no effort and no budget of its own. func (r *ReasoningConfig) DelegatesDepth() bool { - return r != nil && r.Adaptive && r.Effort == ReasoningNone && !r.HasExplicitTokens() + return r != nil && r.Mode != ReasoningOff && + r.Adaptive && r.Effort == ReasoningNone && !r.HasExplicitTokens() } func (r *ReasoningConfig) GetEffort(maxTokens int) ReasoningEffort { diff --git a/llms/reasoning_delegation_test.go b/llms/reasoning_delegation_test.go new file mode 100644 index 000000000..a52f0afcb --- /dev/null +++ b/llms/reasoning_delegation_test.go @@ -0,0 +1,26 @@ +package llms + +import "testing" + +func TestAnExplicitOffIsNotADelegationOfDepth(t *testing.T) { + t.Parallel() + + cfg := &ReasoningConfig{Mode: ReasoningOff, Adaptive: true} + if cfg.DelegatesDepth() { + t.Error("a caller who switched thinking off did not hand the depth to the vendor") + } + if cfg.ResolveMode() != ReasoningOff { + t.Errorf("ResolveMode() = %v, want %v", cfg.ResolveMode(), ReasoningOff) + } +} + +func TestAdaptiveWithoutAModeStillDelegatesDepth(t *testing.T) { + t.Parallel() + + if !(&ReasoningConfig{Adaptive: true}).DelegatesDepth() { + t.Error("adaptive with no effort and no budget leaves the depth to the vendor") + } + if !(&ReasoningConfig{Mode: ReasoningOn, Adaptive: true}).DelegatesDepth() { + t.Error("an explicit on with the adaptive flag still delegates the depth") + } +} From cc3ef5ee6a8fed5ef1f18feaef0148644189d1db Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 21:01:54 +0300 Subject: [PATCH 444/618] fix(openai): let a budget ride with tools, and hand the cost back as a number Two defects on the same door. A thinking budget was refused before the network whenever tools rode along, though the rule the vendor publishes is about reasoning_effort: the budget now travels and only the effort stays off the wire. And the upstream cost reached GenerationInfo as *float64, so a consumer whose type switch knows float64 silently lost it; it now travels as a value, and a cost the vendor did not send leaves no key behind (PAGI-308). Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 47 ++++++--- llms/openai/reasoning_off_and_budget_test.go | 102 +++++++++++++++++++ llms/openai/stream_usage_parity_test.go | 4 +- llms/openai/usage_cost_test.go | 58 +++++++++++ 4 files changed, 197 insertions(+), 14 deletions(-) create mode 100644 llms/openai/reasoning_off_and_budget_test.go create mode 100644 llms/openai/usage_cost_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index e66457842..5d3bf239b 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -411,7 +411,10 @@ func (o *LLM) setReasoning( reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone if toolsRule != reasoning.EffortToolsFree { - return "", &reasoning.ErrEffortWithTools{Model: model, Effort: string(reasoningEffort)} + if !o.sendsBudgetInsteadOfEffort(model, opts, reasoningTokens) { + return "", &reasoning.ErrEffortWithTools{Model: model, Effort: string(reasoningEffort)} + } + sendsEffort = false } if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && reasoning.DashScopeTakesThinkingBudget(model) { @@ -419,19 +422,31 @@ func (o *LLM) setReasoning( reportOpenAIReasoning(warn, model, opts.Reasoning, req) return wireEffortOf(true, reasoningEffort), nil } - budget := 0 - if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 { - budget = reasoning.ClaudeClampBudget(model, reasoningTokens) - } + budget, effortBudget := budgetsFor(model, opts, reasoningEffort, reasoningTokens) + wire := o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget, warnCtx{model, warn}) + reportOpenAIReasoning(warn, model, opts.Reasoning, req) + return wire, nil +} - effortBudget := 0 +func budgetsFor( + model string, opts llms.CallOptions, effort llms.ReasoningEffort, tokens int, +) (budget, effortBudget int) { + if opts.Reasoning.HasExplicitTokens() && tokens > 0 { + budget = reasoning.ClaudeClampBudget(model, tokens) + } if reasoning.ClaudeSpendsThinkingBudget(model) { - effortBudget = llms.ReasoningEffortBudget(reasoningEffort, opts.GetMaxTokens()) + effortBudget = llms.ReasoningEffortBudget(effort, opts.GetMaxTokens()) } - wire := o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget, warnCtx{model, warn}) - reportOpenAIReasoning(warn, model, opts.Reasoning, req) - return wire, nil + return budget, effortBudget +} + +func (o *LLM) sendsBudgetInsteadOfEffort(model string, opts llms.CallOptions, tokens int) bool { + if !opts.Reasoning.HasExplicitTokens() || tokens <= 0 { + return false + } + + return reasoning.DashScopeTakesThinkingBudget(model) || o.client.UseReasoningMaxTokens } func (o *LLM) writeEffort( @@ -652,7 +667,7 @@ func (o *LLM) processResponse( } func (o *LLM) processUsage(usage *openaiclient.ChatUsage) map[string]any { - return map[string]any{ + info := map[string]any{ "CompletionTokens": usage.CompletionTokens, "PromptTokens": usage.PromptTokens, "TotalTokens": usage.TotalTokens, @@ -666,10 +681,18 @@ func (o *LLM) processUsage(usage *openaiclient.ChatUsage) map[string]any { "CompletionReasoningTokens": usage.CompletionTokensDetails.ReasoningTokens, "CompletionAcceptedPredictionTokens": usage.CompletionTokensDetails.AcceptedPredictionTokens, "CompletionRejectedPredictionTokens": usage.CompletionTokensDetails.RejectedPredictionTokens, - // Special fields for OpenRouter provider + } + // Special fields for OpenRouter provider + for key, cost := range map[string]*float64{ "UpstreamInferencePromptCost": usage.CostDetails.UpstreamInferencePromptCost, "UpstreamInferenceCompletionsCost": usage.CostDetails.UpstreamInferenceCompletionsCost, + } { + if cost != nil { + info[key] = *cost + } } + + return info } // processReasoning processes reasoning content in the response. diff --git a/llms/openai/reasoning_off_and_budget_test.go b/llms/openai/reasoning_off_and_budget_test.go new file mode 100644 index 000000000..0df36712b --- /dev/null +++ b/llms/openai/reasoning_off_and_budget_test.go @@ -0,0 +1,102 @@ +package openai + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func wireBodyOf(t *testing.T, model string, opts []Option, call ...llms.CallOption) (map[string]any, error) { + t.Helper() + + var raw []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"`+model+`",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}]}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, append([]Option{WithBaseURL(srv.URL), WithModel(model)}, opts...)...) + + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) + if err != nil { + return nil, err + } + + var body map[string]any + require.NoError(t, json.Unmarshal(raw, &body)) + return body, nil +} + +// offAndAdaptive reaches past the call options: each of them replaces the whole +// config, so only a caller filling the exported struct can set both. +func offAndAdaptive() llms.CallOption { + return func(o *llms.CallOptions) { + o.Reasoning = &llms.ReasoningConfig{Mode: llms.ReasoningOff, Adaptive: true} + } +} + +func TestAnExplicitOffOutranksTheAdaptiveFlag(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-5.1", nil, offAndAdaptive()) + require.NoError(t, err) + + require.Contains(t, body, "reasoning_effort", + "the caller asked to switch thinking off, and the vendor needs the field to hear it") + assert.Equal(t, "none", body["reasoning_effort"]) +} + +func TestAdaptiveAloneStillLeavesTheDepthToTheVendor(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-5.1", nil, llms.WithAdaptiveReasoning("")) + require.NoError(t, err) + + assert.NotContains(t, body, "reasoning_effort", + "an adaptive request with no effort hands the depth to the vendor") +} + +func TestABudgetRequestWithToolsReachesTheVendor(t *testing.T) { + t.Parallel() + + tool := llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "lookup", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }} + + body, err := wireBodyOf(t, "gpt-5.6", []Option{WithModernReasoningFormat(), WithUsingReasoningMaxTokens()}, + llms.WithTools([]llms.Tool{tool}), llms.WithReasoning(llms.ReasoningNone, 3000)) + require.NoError(t, err, "a budget is not an effort; tools do not forbid it") + + reasoningField, ok := body["reasoning"].(map[string]any) + require.True(t, ok, "the budget must reach the wire: %v", body) + assert.InDelta(t, 3000, reasoningField["max_tokens"], 0) + assert.NotContains(t, reasoningField, "effort", + "the effort the vendor refuses next to tools stays off the wire") +} + +func TestAnEffortRequestWithToolsIsStillRefusedBeforeTheNetwork(t *testing.T) { + t.Parallel() + + tool := llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "lookup", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }} + + _, err := wireBodyOf(t, "gpt-5.6", nil, + llms.WithTools([]llms.Tool{tool}), llms.WithReasoning(llms.ReasoningHigh, 0)) + require.Error(t, err) + assert.Contains(t, err.Error(), "rejects reasoning effort") +} diff --git a/llms/openai/stream_usage_parity_test.go b/llms/openai/stream_usage_parity_test.go index 8ea73454c..a17834c77 100644 --- a/llms/openai/stream_usage_parity_test.go +++ b/llms/openai/stream_usage_parity_test.go @@ -89,6 +89,6 @@ func TestAStreamedAnswerReportsTheSameCountersAsAWholeOne(t *testing.T) { assert.Equal(t, 13, streamed["CacheCreationInputTokens"], "the cache-creation counter the vendor sent must reach the caller") - require.NotNil(t, streamed["UpstreamInferencePromptCost"]) - assert.InDelta(t, 0.000063, *streamed["UpstreamInferencePromptCost"].(*float64), 1e-9) + require.Contains(t, streamed, "UpstreamInferencePromptCost") + assert.InDelta(t, 0.000063, streamed["UpstreamInferencePromptCost"], 1e-9) } diff --git a/llms/openai/usage_cost_test.go b/llms/openai/usage_cost_test.go new file mode 100644 index 000000000..7bc972549 --- /dev/null +++ b/llms/openai/usage_cost_test.go @@ -0,0 +1,58 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func generationInfoOf(t *testing.T, usage string) map[string]any { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"gpt-4o",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":`+usage+`}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel("gpt-4o")) + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + require.NoError(t, err) + require.NotEmpty(t, resp.Choices) + + return resp.Choices[0].GenerationInfo +} + +func TestTheCostReachesTheCallerAsANumber(t *testing.T) { + t.Parallel() + + info := generationInfoOf(t, `{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2,`+ + `"cost_details":{"upstream_inference_prompt_cost":0.000063,"upstream_inference_completions_cost":0.00012}}`) + + require.Contains(t, info, "UpstreamInferencePromptCost") + assert.IsType(t, float64(0), info["UpstreamInferencePromptCost"], + "a consumer switching on float64 must see the cost") + assert.InDelta(t, 0.000063, info["UpstreamInferencePromptCost"], 1e-9) + assert.InDelta(t, 0.00012, info["UpstreamInferenceCompletionsCost"], 1e-9) +} + +func TestACostTheVendorDidNotSendLeavesNoKeyBehind(t *testing.T) { + t.Parallel() + + info := generationInfoOf(t, `{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}`) + + assert.NotContains(t, info, "UpstreamInferencePromptCost") + assert.NotContains(t, info, "UpstreamInferenceCompletionsCost") +} From 5471dd9f8a1daaa514df8706300dfc193f591e43 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 21:25:31 +0300 Subject: [PATCH 445/618] fix(vertex): take the credentials the caller names again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The move onto the shared googleai constructor refused WithCredentialsFile, WithCredentialsJSON and WithGRPCConn with a typed error before the client was built, which cut off the way a service account authenticates the Vertex backend — the way this repository's own provider guide still documents. The two credential options now build the SDK's credentials and travel to it; a gRPC connection stays refused, because the SDK speaks REST on every backend, and the error now names WithHTTPClient as the replacement (PAGI-309). Co-Authored-By: Claude Opus 5 --- go.mod | 2 +- llms/googleai/credentials.go | 27 +++++++++++ llms/googleai/credentials_test.go | 61 ++++++++++++++++++++++++ llms/googleai/googleai_unit_test.go | 4 +- llms/googleai/new.go | 9 +++- llms/googleai/option.go | 7 ++- llms/googleai/vertex/credentials_test.go | 50 +++++++++++++++++++ llms/googleai/vertex/vertex.go | 4 +- 8 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 llms/googleai/credentials.go create mode 100644 llms/googleai/credentials_test.go create mode 100644 llms/googleai/vertex/credentials_test.go diff --git a/go.mod b/go.mod index e6d3b2812..5877c3fe1 100644 --- a/go.mod +++ b/go.mod @@ -119,7 +119,7 @@ require ( require ( cloud.google.com/go v0.121.0 // indirect cloud.google.com/go/alloydb v1.14.0 // indirect - cloud.google.com/go/auth v0.16.2 // indirect + cloud.google.com/go/auth v0.16.2 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.2 // indirect diff --git a/llms/googleai/credentials.go b/llms/googleai/credentials.go new file mode 100644 index 000000000..a83c60fea --- /dev/null +++ b/llms/googleai/credentials.go @@ -0,0 +1,27 @@ +package googleai + +import ( + "fmt" + + "cloud.google.com/go/auth" + "cloud.google.com/go/auth/credentials" +) + +const cloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" + +func (o *Options) detectCredentials() (*auth.Credentials, error) { + if o.credentialsFile == "" && len(o.credentialsJSON) == 0 { + return nil, nil //nolint:nilnil // no credentials named is not an error + } + + detected, err := credentials.DetectDefault(&credentials.DetectOptions{ + CredentialsFile: o.credentialsFile, + CredentialsJSON: o.credentialsJSON, + Scopes: []string{cloudPlatformScope}, + }) + if err != nil { + return nil, fmt.Errorf("googleai: the credentials the caller named cannot be read: %w", err) + } + + return detected, nil +} diff --git a/llms/googleai/credentials_test.go b/llms/googleai/credentials_test.go new file mode 100644 index 000000000..ad62c1b5a --- /dev/null +++ b/llms/googleai/credentials_test.go @@ -0,0 +1,61 @@ +package googleai + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +const refreshTokenCredentials = `{"type":"authorized_user","client_id":"id.apps.googleusercontent.com",` + + `"client_secret":"secret","refresh_token":"token"}` + +func credentialsFile(t *testing.T) string { + t.Helper() + + path := filepath.Join(t.TempDir(), "credentials.json") + require.NoError(t, os.WriteFile(path, []byte(refreshTokenCredentials), 0o600)) + + return path +} + +func TestTheCallerCanNameACredentialsFile(t *testing.T) { + t.Parallel() + + client, err := New(t.Context(), + WithCloudProject("p"), WithCloudLocation("europe-west4"), + WithCredentialsFile(credentialsFile(t))) + require.NoError(t, err, "a service account is how the Vertex backend is authenticated") + require.NotNil(t, client) +} + +func TestTheCallerCanHandOverCredentialsJSON(t *testing.T) { + t.Parallel() + + client, err := New(t.Context(), + WithCloudProject("p"), WithCloudLocation("europe-west4"), + WithCredentialsJSON([]byte(refreshTokenCredentials))) + require.NoError(t, err) + require.NotNil(t, client) +} + +func TestCredentialsThatCannotBeReadAreReportedToTheCaller(t *testing.T) { + t.Parallel() + + _, err := New(t.Context(), + WithCloudProject("p"), WithCloudLocation("europe-west4"), + WithCredentialsFile(filepath.Join(t.TempDir(), "missing.json"))) + require.Error(t, err) + assert.Contains(t, err.Error(), "cannot be read") +} + +func TestACallerWhoNamedNoCredentialsKeepsTheDefaultChain(t *testing.T) { + t.Parallel() + + options := DefaultOptions() + detected, err := options.detectCredentials() + require.NoError(t, err) + assert.Nil(t, detected, "application default credentials stay in charge") +} diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 72996b6fd..dbea616e0 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -1112,9 +1112,7 @@ func TestNewRefusesTheOptionsThisDoorCannotCarry(t *testing.T) { t.Parallel() for name, opt := range map[string]Option{ - "WithCredentialsFile": WithCredentialsFile("path/to/creds.json"), - "WithCredentialsJSON": WithCredentialsJSON([]byte(`{"type":"service_account"}`)), - "WithGRPCConn": WithGRPCConn(nil), + "WithGRPCConn": WithGRPCConn(nil), } { t.Run(name, func(t *testing.T) { t.Parallel() diff --git a/llms/googleai/new.go b/llms/googleai/new.go index ec64ee945..6280d3705 100644 --- a/llms/googleai/new.go +++ b/llms/googleai/new.go @@ -64,6 +64,11 @@ func New(ctx context.Context, opts ...Option) (*GoogleAI, error) { if len(clientOptions.unhonoredOnREST) > 0 { return gi, &ErrOptionNotHonored{Options: clientOptions.unhonoredOnREST} } + credentials, err := clientOptions.detectCredentials() + if err != nil { + return gi, err + } + config.Credentials = credentials if clientOptions.BaseURL != "" { config.HTTPOptions.BaseURL = clientOptions.BaseURL } @@ -84,5 +89,7 @@ type ErrOptionNotHonored struct { } func (e *ErrOptionNotHonored) Error() string { - return fmt.Sprintf("googleai: the Gemini API client cannot honor %s", strings.Join(e.Options, ", ")) + return fmt.Sprintf( + "googleai: this client cannot honor %s; shape the transport with WithHTTPClient instead", + strings.Join(e.Options, ", ")) } diff --git a/llms/googleai/option.go b/llms/googleai/option.go index fc645b54a..d34df80b6 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -31,6 +31,9 @@ type Options struct { BaseURL string + credentialsFile string + credentialsJSON []byte + unhonoredOnREST []string // Set by WithDefaultTemperature; writing DefaultTemperature directly leaves @@ -81,7 +84,7 @@ func WithCredentialsJSON(credentialsJSON []byte) Option { if len(credentialsJSON) == 0 { return } - opts.unhonoredOnREST = append(opts.unhonoredOnREST, "WithCredentialsJSON") + opts.credentialsJSON = credentialsJSON opts.ClientOptions = append(opts.ClientOptions, option.WithCredentialsJSON(credentialsJSON)) } } @@ -94,7 +97,7 @@ func WithCredentialsFile(credentialsFile string) Option { if credentialsFile == "" { return } - opts.unhonoredOnREST = append(opts.unhonoredOnREST, "WithCredentialsFile") + opts.credentialsFile = credentialsFile opts.ClientOptions = append(opts.ClientOptions, option.WithCredentialsFile(credentialsFile)) } } diff --git a/llms/googleai/vertex/credentials_test.go b/llms/googleai/vertex/credentials_test.go new file mode 100644 index 000000000..86f99c0cc --- /dev/null +++ b/llms/googleai/vertex/credentials_test.go @@ -0,0 +1,50 @@ +package vertex_test + +import ( + "os" + "path/filepath" + "testing" + + "github.com/vxcontrol/langchaingo/llms/googleai" + "github.com/vxcontrol/langchaingo/llms/googleai/vertex" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +const refreshTokenCredentials = `{"type":"authorized_user","client_id":"id.apps.googleusercontent.com",` + + `"client_secret":"secret","refresh_token":"token"}` + +func TestVertexTakesTheServiceAccountTheCallerNames(t *testing.T) { + t.Parallel() + + path := filepath.Join(t.TempDir(), "credentials.json") + require.NoError(t, os.WriteFile(path, []byte(refreshTokenCredentials), 0o600)) + + for name, opt := range map[string]googleai.Option{ + "WithCredentialsFile": googleai.WithCredentialsFile(path), + "WithCredentialsJSON": googleai.WithCredentialsJSON([]byte(refreshTokenCredentials)), + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + client, err := vertex.New(t.Context(), + googleai.WithCloudProject("p"), googleai.WithCloudLocation("europe-west4"), opt) + require.NoError(t, err) + require.NotNil(t, client) + }) + } +} + +func TestVertexStillRefusesAGRPCConnectionAndSaysWhatToUse(t *testing.T) { + t.Parallel() + + _, err := vertex.New(t.Context(), + googleai.WithCloudProject("p"), googleai.WithCloudLocation("europe-west4"), + googleai.WithGRPCConn(nil)) + + var notHonored *googleai.ErrOptionNotHonored + require.ErrorAs(t, err, ¬Honored) + assert.Contains(t, err.Error(), "WithHTTPClient", + "the error must name the replacement, not only the refusal") +} diff --git a/llms/googleai/vertex/vertex.go b/llms/googleai/vertex/vertex.go index 0b9c3697a..c2c129e48 100644 --- a/llms/googleai/vertex/vertex.go +++ b/llms/googleai/vertex/vertex.go @@ -24,7 +24,9 @@ var _ llms.Model = &Vertex{} // New creates a client bound to the Vertex AI backend. The project and the // location come from the options, or from GOOGLE_CLOUD_PROJECT and -// GOOGLE_CLOUD_LOCATION when the options leave them empty. +// GOOGLE_CLOUD_LOCATION when the options leave them empty. Authentication comes +// from googleai.WithCredentialsFile or googleai.WithCredentialsJSON, and from +// application default credentials when neither is given. func New(ctx context.Context, opts ...googleai.Option) (*Vertex, error) { resolved := googleai.DefaultOptions() for _, opt := range opts { From 91293365a1681929e698f1dd70ff0c8fea30dd5a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 22:17:04 +0300 Subject: [PATCH 446/618] fix(llms): read a token budget with one predicate, not two MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HasExplicitTokens called any non-zero budget explicit while GetTokens read only a positive one, so a negative budget claimed the caller had named a depth, turned the adaptive hand-off off, and was then ignored anyway. Both now read the same thing: a budget is what the caller set above zero, and a negative one is no budget at all — it leaves the effort, or the vendor's own choice, in charge (PAGI-303). Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_wire_test.go | 6 +++--- llms/options.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index dc82eeb79..1cb44349b 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -91,11 +91,11 @@ func TestModernReasoningSendsNoBudgetItCannotCompute(t *testing.T) { absent: `"max_tokens":-`, }, { - name: "a negative budget under a mapped effort uses the effort's budget", + name: "a negative budget is no budget at all, so the effort travels", effort: llms.ReasoningMedium, tokens: -5, - present: `"max_tokens":5461`, - absent: `"effort"`, + present: `"effort":"medium"`, + absent: `"max_tokens"`, }, { name: "an explicit budget is sent as given", diff --git a/llms/options.go b/llms/options.go index 09ba644b9..1f8f5b675 100644 --- a/llms/options.go +++ b/llms/options.go @@ -128,7 +128,7 @@ func (r *ReasoningConfig) IsDisabled() bool { // HasExplicitTokens reports whether the caller set a token budget of its own, // rather than leaving the budget to be derived from an effort. func (r *ReasoningConfig) HasExplicitTokens() bool { - return r != nil && r.Tokens != 0 + return r != nil && r.Tokens > 0 } // DelegatesDepth reports whether the caller handed the depth decision to the From bd349348a385a2d2e222bd8b7b4df3d62dbd467c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 22:17:05 +0300 Subject: [PATCH 447/618] fix(llms): let the doors hand the depth to the vendor they were told to An adaptive request with no effort means the vendor picks the depth, and three doors picked it themselves instead: huggingface always asked GetEffort and sent reasoning_effort high; googleai answered the gemma family with thinkingLevel HIGH before it ever looked at the delegation, and its adaptive config sent a budget to families that take a level; Bedrock Converse gave Nova and Grok the top effort, which on Nova also cleared maxTokens, temperature and topP. Each now omits the depth field the caller left to the model (PAGI-303). Co-Authored-By: Claude Opus 5 --- .../bedrockclient/adaptive_delegation_test.go | 41 ++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 10 ++++ llms/googleai/adaptive_delegation_test.go | 48 +++++++++++++++++++ llms/googleai/googleai.go | 8 ++-- llms/huggingface/adaptive_delegation_test.go | 26 ++++++++++ llms/huggingface/huggingfacellm.go | 4 ++ 6 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/adaptive_delegation_test.go create mode 100644 llms/googleai/adaptive_delegation_test.go create mode 100644 llms/huggingface/adaptive_delegation_test.go diff --git a/llms/bedrock/internal/bedrockclient/adaptive_delegation_test.go b/llms/bedrock/internal/bedrockclient/adaptive_delegation_test.go new file mode 100644 index 000000000..5968ac53b --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/adaptive_delegation_test.go @@ -0,0 +1,41 @@ +package bedrockclient + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func converseFieldsFor(t *testing.T, model string, cfg *llms.ReasoningConfig) *ConverseInput { + t.Helper() + + limit := 4096 + return &ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Type: "text", Content: "hi"}}, + MaxTokens: &limit, + ReasoningConfig: cfg, + } +} + +func TestNovaTakesTheDelegationInsteadOfTheTopEffort(t *testing.T) { + t.Parallel() + + client := NewConverseClient(nil) + built, err := client.buildConverseInput( + converseFieldsFor(t, "amazon.nova-2-lite-v1:0", &llms.ReasoningConfig{Adaptive: true})) + require.NoError(t, err) + + require.NotNil(t, built.AdditionalModelRequestFields) + raw, err := built.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + + assert.Contains(t, string(raw), `"type":"enabled"`) + assert.NotContains(t, string(raw), "maxReasoningEffort", + "the caller left the depth to the vendor") + require.NotNil(t, built.InferenceConfig.MaxTokens, + "the top effort clears the sampling limits; a delegation must not") +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index b71324bb0..fa68af169 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -222,6 +222,12 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti return nil } setNova := func() { + if input.ReasoningConfig.DelegatesDepth() { + familyFields = converseNovaFields{ + ReasoningConfig: &converseNovaReasoningConfig{Type: "enabled"}, + } + return + } effort := reasoning.NovaEffort(string(input.ReasoningConfig.GetEffort(maxTokens))) familyFields = converseNovaFields{ ReasoningConfig: &converseNovaReasoningConfig{Type: "enabled", MaxReasoningEffort: effort}, @@ -233,6 +239,10 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } } setGrok := func() { + if input.ReasoningConfig.DelegatesDepth() { + familyFields = converseGrokFields{Reasoning: &converseGrokReasoning{}} + return + } effort := reasoning.GrokEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) familyFields = converseGrokFields{Reasoning: &converseGrokReasoning{Effort: effort}} } diff --git a/llms/googleai/adaptive_delegation_test.go b/llms/googleai/adaptive_delegation_test.go new file mode 100644 index 000000000..f3433c1ee --- /dev/null +++ b/llms/googleai/adaptive_delegation_test.go @@ -0,0 +1,48 @@ +package googleai + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNoFamilyInventsADepthTheCallerHandedToTheVendor(t *testing.T) { + t.Parallel() + + for model, carriesBudget := range map[string]bool{ + "gemma-4-27b-it": false, + "gemini-3.5-flash": false, + "gemini-2.5-flash": true, // its dynamic budget of -1 IS "the vendor decides" + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + config, err := resolveThinkingConfig(model, &llms.ReasoningConfig{Adaptive: true}, 0) + require.NoError(t, err) + require.NotNil(t, config) + assert.Empty(t, config.ThinkingLevel, "%s: the level is the vendor's to choose", model) + assert.True(t, config.IncludeThoughts) + + if carriesBudget { + require.NotNil(t, config.ThinkingBudget) + assert.Equal(t, int32(-1), *config.ThinkingBudget) + return + } + assert.Nil(t, config.ThinkingBudget, + "%s takes a level, so a budget is a depth it never asked for", model) + }) + } +} + +func TestAnEffortTheCallerNamedStillPicksTheLevel(t *testing.T) { + t.Parallel() + + config, err := resolveThinkingConfig("gemma-4-27b-it", + &llms.ReasoningConfig{Adaptive: true, Effort: llms.ReasoningHigh}, 0) + require.NoError(t, err) + require.NotNil(t, config) + assert.NotEmpty(t, config.ThinkingLevel, "a named effort is a depth the caller chose") +} diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index d82e71d6d..6388a2f21 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1119,12 +1119,12 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in if !reasoning.GeminiSupportsThinking(model) { return nil, nil } - if reasoning.GeminiTogglesThinkingByLevel(model) { - return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelHigh, IncludeThoughts: true}, nil - } if cfg.DelegatesDepth() { return adaptiveThinkingConfig(model), nil } + if reasoning.GeminiTogglesThinkingByLevel(model) { + return &genai.ThinkingConfig{ThinkingLevel: genai.ThinkingLevelHigh, IncludeThoughts: true}, nil + } // An effort with no explicit token budget maps to the qualitative // thinking_level on Gemini 3.x (its native control, where thinking_budget is // deprecated); an explicit budget or a 2.5 model still uses thinking_budget. @@ -1154,7 +1154,7 @@ func resolveThinkingConfig(model string, cfg *llms.ReasoningConfig, maxTokens in const geminiDynamicBudget = -1 func adaptiveThinkingConfig(model string) *genai.ThinkingConfig { - if reasoning.GeminiUsesThinkingLevel(model) { + if reasoning.GeminiUsesThinkingLevel(model) || reasoning.GeminiTogglesThinkingByLevel(model) { return &genai.ThinkingConfig{IncludeThoughts: true} } dynamic := int32(geminiDynamicBudget) diff --git a/llms/huggingface/adaptive_delegation_test.go b/llms/huggingface/adaptive_delegation_test.go new file mode 100644 index 000000000..1fc2720ce --- /dev/null +++ b/llms/huggingface/adaptive_delegation_test.go @@ -0,0 +1,26 @@ +package huggingface + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestAnAdaptiveRequestWithNoEffortLeavesTheDepthToTheVendor(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage(), llms.WithAdaptiveReasoning("")) + assert.NotContains(t, body, "reasoning_effort", + "the caller handed the depth to the model; inventing high spends its tokens") +} + +func TestAnAdaptiveRequestWithAnEffortStillCarriesIt(t *testing.T) { + t.Parallel() + + body := bodyOfCall(t, oneMessage(), llms.WithAdaptiveReasoning(llms.ReasoningLow)) + require.Contains(t, body, "reasoning_effort") + assert.Equal(t, "low", body["reasoning_effort"]) +} diff --git a/llms/huggingface/huggingfacellm.go b/llms/huggingface/huggingfacellm.go index 2a793a192..9215dd0a2 100644 --- a/llms/huggingface/huggingfacellm.go +++ b/llms/huggingface/huggingfacellm.go @@ -102,6 +102,10 @@ func reasoningEffort(opts *llms.CallOptions) string { if opts.Reasoning.ResolveMode() == llms.ReasoningOff { return "none" } + if opts.Reasoning.DelegatesDepth() { + return "" + } + return string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) } From 8c7433653e640f4ed73ab8264ee310c4f946af1d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 22:17:05 +0300 Subject: [PATCH 448/618] fix(llms): say so when a door cannot carry the delegation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ollama door drops the request silently — it has no field that asks a model to choose its own depth — and said nothing. The openai door did report the drop, but only for its own opt-in generations, so deepseek-v3.1 and magistral, which also reason only when asked, lost the request without a word. Both now report it (PAGI-303). Co-Authored-By: Claude Opus 5 --- llms/ollama/adaptive_delegation_test.go | 41 +++++++++++++++++++++ llms/ollama/warnings.go | 8 +++++ llms/openai/adaptive_delegation_test.go | 48 +++++++++++++++++++++++++ llms/openai/openaillm.go | 2 +- 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 llms/ollama/adaptive_delegation_test.go create mode 100644 llms/openai/adaptive_delegation_test.go diff --git a/llms/ollama/adaptive_delegation_test.go b/llms/ollama/adaptive_delegation_test.go new file mode 100644 index 000000000..2754a3dbd --- /dev/null +++ b/llms/ollama/adaptive_delegation_test.go @@ -0,0 +1,41 @@ +package ollama + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestADelegationThisDoorCannotExpressIsReported(t *testing.T) { + t.Parallel() + + warn := &llms.Warnings{} + opts := llms.CallOptions{Reasoning: &llms.ReasoningConfig{Adaptive: true}} + reportOllamaOptions(warn, "gpt-oss:120b", opts) + + var found *llms.Warning + for _, w := range warn.List() { + if w.Option == "WithAdaptiveReasoning" { + found = &w + break + } + } + require.NotNil(t, found, "the door sends no think field and must say so: %v", warn.List()) + assert.Equal(t, llms.WarningDrop, found.Kind) +} + +func TestAnEffortTheCallerNamedIsNotReportedAsDropped(t *testing.T) { + t.Parallel() + + warn := &llms.Warnings{} + opts := llms.CallOptions{Reasoning: &llms.ReasoningConfig{Adaptive: true, Effort: llms.ReasoningLow}} + reportOllamaOptions(warn, "gpt-oss:120b", opts) + + for _, w := range warn.List() { + assert.NotEqual(t, "WithAdaptiveReasoning", w.Option, + "the effort reaches the wire, so nothing was dropped") + } +} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 7b375475f..9d74e75f6 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -13,6 +13,14 @@ func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOption warn.AddUnreadExtraBody(model, opts, extraBodyUnread) + if opts.Reasoning.DelegatesDepth() { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithAdaptiveReasoning", Model: model, + Asked: "adaptive", + Reason: "the door has no field that asks the model to choose its own depth", + }) + } + if opts.MinP != nil && *opts.MinP != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMinP", Model: model, diff --git a/llms/openai/adaptive_delegation_test.go b/llms/openai/adaptive_delegation_test.go new file mode 100644 index 000000000..f36c3693e --- /dev/null +++ b/llms/openai/adaptive_delegation_test.go @@ -0,0 +1,48 @@ +package openai + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/openai/internal/openaiclient" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func droppedDelegationFor(t *testing.T, model string) bool { + t.Helper() + + warn := &llms.Warnings{} + req := &openaiclient.ChatRequest{} + llm := newUnitLLM(t, WithModel(model)) + + _, err := llm.setReasoning(req, llms.CallOptions{ + Model: &model, + Reasoning: &llms.ReasoningConfig{Adaptive: true}, + }, warn) + require.NoError(t, err) + + for _, w := range warn.List() { + if w.Option == "WithAdaptiveReasoning" { + return true + } + } + return false +} + +func TestEveryOptInModelReportsTheDelegationItCannotCarry(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5.1", "deepseek-v3.1", "magistral-medium-2509"} { + assert.True(t, droppedDelegationFor(t, model), + "%s does not reason unless asked, so a dropped delegation must be reported", model) + } +} + +func TestAModelThatAlreadyReasonsIsNotReportedAsDropped(t *testing.T) { + t.Parallel() + + assert.False(t, droppedDelegationFor(t, "o3-mini"), + "a model that reasons by default loses nothing when the depth is left to it") +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 5d3bf239b..2eb66463a 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -396,7 +396,7 @@ func (o *LLM) setReasoning( reportDelegatedDepth(warn, model, delegated, reasoning.OpenAIDisableEffort) return reasoning.OpenAIDisableEffort, nil } - if delegated && reasoning.OpenAIThinkingOptIn(model) { + if delegated && reasoning.ThinkingOptIn(model) { reportDelegatedDepth(warn, model, delegated, "") } return "", nil From c0e72f1dd9004d24a35866b3b14eb12b5e2b83c8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 22:43:32 +0300 Subject: [PATCH 449/618] fix(httprr): strip the gateway's headers from every recording, not one door MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recordings made through the LiteLLM gateway keep its response headers, and they carry the key's accumulated spend and the full deployment id — published with the fork. Only the googleai door removed them, with its own copy of the scrub, so every other door recorded through the gateway kept them. The default response scrubber now drops the whole header family, which covers any door that records this way, and the googleai copy is gone. A sweep over every recording in the repository fails if one carries them again (PAGI-302). Co-Authored-By: Claude Opus 5 --- internal/httprr/gateway_headers_test.go | 92 +++++++++++++++++++++++++ internal/httprr/rr.go | 8 +++ llms/googleai/googleai_test.go | 21 ------ 3 files changed, 100 insertions(+), 21 deletions(-) create mode 100644 internal/httprr/gateway_headers_test.go diff --git a/internal/httprr/gateway_headers_test.go b/internal/httprr/gateway_headers_test.go new file mode 100644 index 000000000..cffd5d28b --- /dev/null +++ b/internal/httprr/gateway_headers_test.go @@ -0,0 +1,92 @@ +package httprr + +import ( + "bytes" + "io" + "io/fs" + "net/http" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type gatewayRoundTripper struct{} + +func (gatewayRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: http.Header{ + "Content-Type": []string{"application/json"}, + "X-Litellm-Key-Spend": []string{"3783.008359056675"}, + "X-Litellm-Model-Id": []string{"6915d127a6e7"}, + }, + Body: io.NopCloser(strings.NewReader(`{"ok":true}`)), + ContentLength: 11, + Request: req, + }, nil +} + +func repositoryRoot(t *testing.T) string { + t.Helper() + + dir, err := os.Getwd() + require.NoError(t, err) + for { + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + return dir + } + parent := filepath.Dir(dir) + require.NotEqual(t, parent, dir, "go.mod not found above %s", dir) + dir = parent + } +} + +func TestNoRecordingInThisRepositoryCarriesGatewayHeaders(t *testing.T) { + root := repositoryRoot(t) + scanned := 0 + + require.NoError(t, filepath.WalkDir(root, func(path string, entry fs.DirEntry, err error) error { + if err != nil || entry.IsDir() || filepath.Ext(path) != ".httprr" { + return err //nolint:wrapcheck // the walk reports its own error unchanged + } + data, err := os.ReadFile(path) + if err != nil { + return err //nolint:wrapcheck // the walk reports its own error unchanged + } + scanned++ + name, _ := filepath.Rel(root, path) + assert.NotContains(t, strings.ToLower(string(data)), "x-litellm-", + "%s carries the gateway's headers: they hold the key's spend and the deployment id", name) + return nil + })) + assert.Positive(t, scanned, "the sweep found no recordings at all, so it proves nothing") +} + +func TestTheRecorderStripsGatewayHeadersFromAResponse(t *testing.T) { + path := filepath.Join(t.TempDir(), "gateway.httprr") + defer setRecordForTesting(".*")() + + rr, err := Open(path, gatewayRoundTripper{}) + require.NoError(t, err) + require.True(t, rr.Recording()) + + client := &http.Client{Transport: rr} + resp, err := client.Post("https://bedrock-runtime.us-east-1.amazonaws.com/model/x/invoke", + "application/json", bytes.NewReader([]byte(`{}`))) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + require.NoError(t, rr.Close()) + + recorded, err := os.ReadFile(path) + require.NoError(t, err) + assert.Contains(t, string(recorded), "Content-Type", "the recording kept the ordinary headers") + assert.NotContains(t, strings.ToLower(string(recorded)), "x-litellm-", + "a recording made through the gateway must not keep its headers") +} diff --git a/internal/httprr/rr.go b/internal/httprr/rr.go index 6bdda9d00..01d49cf45 100644 --- a/internal/httprr/rr.go +++ b/internal/httprr/rr.go @@ -1157,6 +1157,8 @@ func getDefaultRequestScrubbers() []func(*http.Request) error { // getDefaultResponseScrubbers returns the default response scrubbing functions to remove // sensitive headers and tracing information from response recordings. +const gatewayHeaderPrefix = "x-litellm-" + func getDefaultResponseScrubbers() []func(*bytes.Buffer) error { return []func(*bytes.Buffer) error{ func(buf *bytes.Buffer) error { @@ -1170,6 +1172,12 @@ func getDefaultResponseScrubbers() []func(*bytes.Buffer) error { resp.Header.Del("Cf-Ray") resp.Header.Del("cf-ray") + for name := range resp.Header { + if strings.HasPrefix(strings.ToLower(name), gatewayHeaderPrefix) { + resp.Header.Del(name) + } + } + // Remove Set-Cookie headers (session tokens, etc.) resp.Header.Del("Set-Cookie") resp.Header.Del("set-cookie") diff --git a/llms/googleai/googleai_test.go b/llms/googleai/googleai_test.go index 8645d86e4..50b3caf6b 100644 --- a/llms/googleai/googleai_test.go +++ b/llms/googleai/googleai_test.go @@ -1,7 +1,6 @@ package googleai import ( - "bytes" "cmp" "context" "encoding/json" @@ -20,25 +19,6 @@ import ( "github.com/stretchr/testify/require" ) -func scrubProxyHeaders(buf *bytes.Buffer) error { - const sep = "\r\n\r\n" - dump := buf.String() - end := strings.Index(dump, sep) - if end == -1 { - return nil - } - kept := make([]string, 0, strings.Count(dump[:end], "\r\n")+1) - for _, line := range strings.Split(dump[:end], "\r\n") { - if strings.HasPrefix(strings.ToLower(line), "x-litellm-") { - continue - } - kept = append(kept, line) - } - buf.Reset() - buf.WriteString(strings.Join(kept, "\r\n") + dump[end:]) - return nil -} - func newHTTPRRClient(t *testing.T, opts ...Option) *GoogleAI { t.Helper() @@ -59,7 +39,6 @@ func newHTTPRRClient(t *testing.T, opts ...Option) *GoogleAI { } rr := httprr.OpenForTest(t, transport) - rr.ScrubResp(scrubProxyHeaders) // Avoid issue with different view of request bodies for Google AI SDK rr.ScrubReq(httprr.JsonCompactScrubBody) From 93680bd36fd089a37960fbfbd18e82c70123ed95 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 22:43:33 +0300 Subject: [PATCH 450/618] fix(bedrock): rewrite the recordings without the gateway's headers Both cassettes carried 100 header lines each, including the key's spend. The rewrite goes through the trace format so the record lengths stay consistent; the requests and the response bodies are untouched and both suites still replay (PAGI-302). Co-Authored-By: Claude Opus 5 --- llms/bedrock/testdata/TestLLM.httprr | Bin 21600 -> 16838 bytes llms/bedrock/testdata/TestLLMConverse.httprr | Bin 17016 -> 12241 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/llms/bedrock/testdata/TestLLM.httprr b/llms/bedrock/testdata/TestLLM.httprr index 60369ded7fe55b13ca20452af834c3db1a66e1a7..a15a1d4ec49c428b298061181be2a474135dc6ad 100644 GIT binary patch delta 177 zcmaE`g7H{0;{;J=0}HdshMG4veh_A!oD!6>c?sJbMxdZ2NN}?>rx--^AK!eK==IIz zf@P@N%H}GY6^zV=78XF!>zn`BeT5i0$(4}_s{0|^=5oIcjGI$}{xAXnl;}S* literal 21600 zcmeHPOKcp?Rt~yCfRPc>Wx?*YW)pOka{5*M81xG{PHc}8kCU-8ulrw_>gww0p6QqS zF*7}p#SW0zu)8}p2*i>NOIU)$>TXydHi$LrD|T?IXU3kfCy5<9PW~`Tti)ZXs;f?) zI_InNC^yUEBoVTNP$mqe4OLbINyFyG>!afn!G+ee`t+&A>?EQCl;mON1#Bx%5hH1a zq%9JVNfeS%x<#YlX%N}Wf10OTB+T3-iaokTeUjS@xx^dfNJSXQqKqX`l+aMBich_8 z7!8=Pe{%Brsk9|+ZtO>CRuyje!p)7hDNE3HkA=|5Ct;7mi^5)n_{@`JVFQKgaizckg_z3l2mvcMj?BA+2MU$c}_Cm)=AEu2%;ez zvl!klYl0|NRa}*HVejx{bK{sLz^|$h_PlTmzh;R?Gjx)WFpZ-mL-W~G1>hS3K7FT1 zSkXjL+}voA1g1CrQs_lUBOBJexzR@3!6Zb_X7ad0sLN1;5gXOQIETSG^U+QOa#|H& zm@D)vh$L+V)i9dM0D1-M3^}7z83gCbXh(T=?VZ5v8C8Rw<-k?Xt_n=27*j@(Of4Cy zhAAUclnHVSiP_9#24M#8H5ieG8IBi9m|GEC88Rle0|h9$nk~RxQzx{9IC-UFvFC=hXCdF+)F7JBoMioJZ+T{ zHRsndbtzgPb04BPBnfPVn~gW4ea#YDDz^^~e3W=FF!4X~{;9xzgyhi1iqrt;9$3iV9G`nZS&F$(QxJo#|kB zFjK%JO}#XO*}$WZYT=`opl6>{Ks&~#3D~?+_k*aPW_c3A0A)kUw>s$1N;S-VfA-L3 z8S#8j{nKYT=V+z+uHtb;b!jCum;~2irxb?gJUm?{04p+Whi3bIZS%f-d=|UFhJ^U1 zIJi!K*($kLThE_VqEe+@%ua>1fD-p8JIy>WTUA&u*ddbGmGg5I6uzX3+P4Z7G}!Gw zJgBe_x;(lAS^zUQH$!v#yhaNbkm9CjfrGA3MGJsnQ3X3fv9QNNL54y5ls>im9U|!nrW*lT{N<*(1MA7=x70;&z8pE zAh5X9WrXlactZNvs1JZCKDx3wu8=>>fUgf(!0D6ao;o4E=Q)Wxm<%SqujT|tv7QI2 zHI{vCBu^MsG*268v1$#@?h9Fzih2z$-UluW75osI{EdPOS%L%K1A&XXxgjz*!)Yd1i%{6X+$(TBdk51&kXI4p3*fJhJ+5XaF2} zBPRw}yt%zw!;))W2dtEKXUR8G1JBwuFNRSb+Lq{6c`+`j7Q7f5mI)zDM15y;iA+N`kV#co2~`cvEL}SD zo}pzN^8kqB!_JQKjC##Eu{_DI4{HpWB#{D$alH{y69=k&&7%0WruwQsY^M}r4 z6sC@n61ON~`7FFQFGg(z&RFnO-`$M?3TW=9nEN8GdKc#HU&4 z#69~cnR^`54EPc}TpUCNAL`to@&n|m(8rYn>=Io0|D=S#i^3^5GtS@dg*4Z%e_{eqht9}bNecMpwx>68C;%@ykXw09OGTZD&Qam2P0M-h^+n0uk|C(YBeWR-VM7=b7Jr97WPgptp$=# zmAc!N-+D)33N+@R+ZuUC-hpd{jfe*3h_nv#jy!hlR>ObQa$VBOq*o_zvih-D96ql} zhbP;k!(&N4Jc&j%Z{(5I8{R*ovh8$&MnNPKTa!j$%j01;=(?S@omqQXVYf_;1u&v5JMH>} zwCiH0g+)%^k>&Lm>8mBM@@WdRomAX&cP2URY zFy56mx#0ufVr&1@uy+ph8N&1EX@ zf?RcX4os&leg~)Y7(|d*)Mif4_4)%p2&4EcNwa)78W)r8XFJbd?C$N?4l3vWZT<7F z9zFWC-{-sGC;z$si_g9rE+k{u^sGIz4^q0YD|}cqt|a5$0u)_t#+p?O0uHj%DMRS zzxzGl%a1u?qMEP3|FzxtaWFiQ@o)#pEl-Yqu_u%>eUAHV#|9|047$r-Wv@5Uc| z2}YD!bE@?*XzCtlsAr${jVtH>do29~KI}j6_57msshdfm+~4kd~3hqPWSj# zYY};%2L_<^BpRsRr&*0L*Q`=$iNTV=-dUmLUr1c$D_r_nP^u z)`8#MKNxmoNE~Qk8I<*uaRbS>_YdNZ0wxq-&Wu5COS3wt4{Z(?z_itmN1mlLMQ+BM zQ!q=)qqJe)%SjN5}nB)|ob7Aas$9w~6WRDi!_l8Y^r@OqqW3G3%P z4|L53e%xB~VZATD7X1Kl`7T-A$D}CJxo_yTRCxyNJvuF?Iqjd_MfqUa+p<<>A}<9r zR|Y&()yWG*F8-_EI8CWx=ow|RNN4N|?=>Dz--&(<|v$HN}MeXQ64 zmNSp^jkG$EJ?{>7UWb@8y+d^z_J%ly`0fpnR`G%pofg$l5AGgKg5 zf{cZHD8&&?T{T6d8>$LbT`Gk#DX2tKR3v_vuMe5i#Quys|}XRGQu>tR35BggNJV{bSaM)AmD*~Cg{Zy4o) z*H7#`9^*neOOik<5_{acw|pq+`%wNqRK5?@??bM0X9-Y{f^+``UXXkA^%i(Z0AJo; z;iaj(!t0y$c`C*OR(Rbp?WyIG>~Sh&E)zyjC+M<7@Iv93gaXv|hLo48{!s}YR-|e7 zSav$=bS+VPk3pXH!k|u+2tkG+JP|pp?-%yna#gksbpyKmqm&3u1oKfB;O&ouLTK9WM=z1`3 zNy(opS$(T;5#0a4GohBeDy!1O`DF?-vISfOMcho*WvCa|z*C}1Pzz>aTS1bDiDg@k zqI^|(;ugjPQ`bCkGFZj&sDg^Upkw_ zUF+#V#eL0q3+o@kTk9b6{a(Mb4l?tbCDuXpb#lQv$>IlKtT>n&CS3cW-s}pnkGh+$ zTn6@OcZBI!)kMwI5K$z!^@9)!l{;{BB90<56=rVg<#gBHL7%;^BMNIWkQSakQSin)Mx2?B?b&_MIR>tI0Qb-U9_qK?*l7 z<+FnbMhU-VHnK1S3KneMC6WvhRNTxc)y~XhZaCRc|JLSIISr7Y4Q!%=-aBRsV-uj}o13`}qM1SJHs3MLXM`(!%DS1?j*D?~h@%Q405uamF8}}l literal 17016 zcmeHO&2JmI70;#E!n+2tr#%z}2Dy?zKG?Eznah?cdQ;F9r6{qW?ot^w3LzUivte>{0B*vg5V0u8;__G#t+3hkn2J ze($kuOfSzJlMAVxJu>44+#xh1Gn*UDmeYo-MPp$h(kjp73zYX$lXP{xUmz_CgGgO; z#p^5;uZp_Nx(nS*>CQsGsEgFJ^Q@Q1y6lL)(x@$x7k$K#hbX2V!I+>u(!dKcOZRkM zXy-wzwYfm*WOn93R+xq};Ui~fwhNu3#a*4kO&yW$N_bSdn;~m^p3f|0sexFmtx%$r)0#yZ!j)X+nm?A97@YF)A4%3kQS zs5J;4%-6cQD8#OYk3WA?gOS(=m46$(4}a9Qbgy&Zyh=>lnR}o+oovn#sdCcHw82D2 zcM4q_d^2CmvyO)5eHaOR9+Xo->)4?fI~%LV=8ncdeSG|7Q_Fsym;`YVVuwD%( z-A&Sc_-OJ(8q~@~TJ*Bqppi8V2PO-_*1a&KWjt^v&5uwz8~)wk-~v= z{gJt&Zx}qdgbzDq<&43jz#5Yo(HS+Ocrai*bcpNTToR%T0HKOr7bGE=yt6pS0H#(q z!jNR_tY;lCVMuM|r*@Xea`{EyWOi-J#mPE{1ZSH7Y)QL6lrChRl!yyEs0Gh(>}A+O zSo@xp_YQ#irrgJ|i~-v@B0wLAd0ZgQ zghbr;0;c0wN>-9Yb@yB&_i-v!?1cnbNj1vgJw@Am783 z;L-wAl>xxza;4{bBWp)ING2gm@T>;|H}D~<3Bns3vVrSV#k&i#<#|K4jn&JF*Sz3( z0HX-$2E}VQ;z|dc15*VOI17Tdh+>8$XG+8o(1R?U-|8A(BWKAN3zrLpu#PA&6=x{a zu10YvLKUeXjDo0&V5e}_G+sN5fyZOItD&Om(u_ZU#6s_l{jQ3Eg7YxY#_EI=^zj92 zt`ET)=k8V04=PNqMfd82L+jR55$s|tJ;n2k&E*xIB(zj@g?)HpU=pJZ(k&rJyW*pPDj$3S5^+vya z{YWch*q2;-3W*?g5o17_VHgwSGKD$TT*SVp0^Iqy=YF2`dkyCt0(|vZQ@!#3P;b0- z>(=k!we{z3KfC>Dqx@YXE7p8+>$9P>)HEVDvkf^+q#RzneIjYn7&af?{e!ZrH?ZZ%OW5k6mtoF2$D!pH7nIOHJQo$PLa>&z^K1~6L=O-G{{Rb;QU46K= zzOniBRxeuMNbn zo!^6zzl7JCx8s02@!S1~$U!()8eq=JS7nEq{mC`r4m<5s%yRL(t5H z5+AS$P8Z!>&MNC&70Ab>?i0~FpCo#xY%s`XK3jD?7Xo;WuiAsUGS{i#?;j^4pE>qMocJ$IQKOoo*$FI)t-+(rp&4vcoO>| zMCuqUWm}fiN zF%{PZx;vf5E>|@spb;NR+()9ZJ1OrFuT+i0n@c*xrIjj~i_^|Tl|D^z;LL$udz8eB)WBX_l)}l^A}XvRu>$|9ISE zo~$O(4+aC@#|~jQxUnh?!%$^Z1+RNG{_ zK<#xZZ7K0jPIabjsUR468D)$2HB>ED42ZMb5e^8-=YHk>x- zV3M*)H>_kYZy-6le(YizMaYjB2g)O$6onGVPrFq4nnocntJ13b`x?nvQs84QD59Pg zh$$8z9%zChPGT=2oXGI3vdL))%CrRK{YM6Z356{{)NMG41o%~EHO4`$HipUb&USOr z=D>#4+f^VsEGdVcRshJ#@^YwDc=p&|e}0GWEbVy3k_cbgs`2e7%f~Qi@%$Myv^aKJ z8W5f}rllRVzg#U1imTst4ZL6yG0k_$U@%qFF7@2pR85 Date: Fri, 11 Sep 2026 23:22:05 +0300 Subject: [PATCH 451/618] fix(llms): keep the boundaries of a turn's thinking, and refuse an image the vendor cannot read MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Five places where a thought or a turn lost its shape between the doors: An encrypted thought is now a sequence. ContentReasoning.Redacted held one []byte, so several redacted_thinking blocks were concatenated into one opaque value with no way to split them again — and exactly one block travelled back to the vendor. It is [][]byte now, and the primary anthropic door, the legacy bedrock payload, the Converse builder and the Converse stream each keep one element per block. A Nova answer made only of reasoning was reported as "no results", losing the stop reason, the truncation flag and the thought itself; it is an answer now. A system message between two human turns split them into two consecutive user turns, which the vendor refuses: the lookahead skips system messages, which take no turn of their own. The legacy anthropic leg forwarded any image MIME type while Converse and Nova check an allow-list and return a typed error; it checks the same list now (PAGI-304). Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 8 +- llms/anthropic/redacted_thinking_wire_test.go | 38 +++++++++- .../bedrockclient/bedrockclient_converse.go | 31 +++++--- .../bedrockclient_converse_test.go | 8 +- .../bedrockclient/bedrockclient_test.go | 3 +- .../bedrockclient/nova_reasoning_only_test.go | 57 ++++++++++++++ .../bedrockclient/provider_anthropic.go | 32 +++++--- .../internal/bedrockclient/provider_nova.go | 5 +- .../bedrockclient/thinking_blocks_test.go | 75 +++++++++++++++++++ llms/bedrock/legacy_redacted_thinking_test.go | 4 +- llms/reasoning/content_reasoning_test.go | 6 +- llms/reasoning/reasoning.go | 10 ++- 12 files changed, 237 insertions(+), 40 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/nova_reasoning_only_test.go create mode 100644 llms/bedrock/internal/bedrockclient/thinking_blocks_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index ba38b818b..4af415f28 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -389,7 +389,7 @@ func processAnthropicResponse( // According to Anthropic docs, there's ONE thinking block per response var reasoningContent strings.Builder var signature []byte - var redacted []byte + var redacted [][]byte for _, content := range result.Content { switch cv := content.(type) { @@ -400,7 +400,7 @@ func processAnthropicResponse( } case *anthropicclient.RedactedThinkingContent: if cv.Data != "" { - redacted = append(redacted, []byte(cv.Data)...) + redacted = append(redacted, []byte(cv.Data)) } } } @@ -862,10 +862,10 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro if p.Reasoning.Content != "" || len(p.Reasoning.Signature) > 0 { message.Content = append(message.Content, thinkingBlock) } - if len(p.Reasoning.Redacted) > 0 { + for _, block := range p.Reasoning.Redacted { message.Content = append(message.Content, &anthropicclient.RedactedThinkingContent{ Type: anthropicclient.EventTypeRedactedThinking, - Data: string(p.Reasoning.Redacted), + Data: string(block), }) } } diff --git a/llms/anthropic/redacted_thinking_wire_test.go b/llms/anthropic/redacted_thinking_wire_test.go index ecac64870..2cded4189 100644 --- a/llms/anthropic/redacted_thinking_wire_test.go +++ b/llms/anthropic/redacted_thinking_wire_test.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "net/http/httptest" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -50,7 +51,7 @@ func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) require.NotNil(t, resp.Choices[0].Reasoning, "the encrypted half is still reasoning") - assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted)) + assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted[0])) assert.False(t, resp.Choices[0].Reasoning.IsEmpty(), "a turn carrying an encrypted thought is not an empty one") }) @@ -75,7 +76,7 @@ func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { _, err = llm.GenerateContent(context.Background(), []llms.MessageContent{ {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: []byte(encrypted)}), + llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: [][]byte{[]byte(encrypted)}}), }}, {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, }, llms.WithMaxTokens(64)) @@ -147,6 +148,37 @@ func TestAStreamedEncryptedThoughtDoesNotCostTheAnswer(t *testing.T) { assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) require.NotNil(t, resp.Choices[0].Reasoning, "the encrypted half is still reasoning on the streamed leg") - assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted)) + assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted[0])) assert.False(t, resp.Choices[0].Reasoning.IsEmpty()) } + +func TestTwoEncryptedBlocksGoBackAsTwo(t *testing.T) { + t.Parallel() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"msg_test","type":"message","role":"assistant",`+ + `"model":"claude-opus-4-6","content":[{"type":"text","text":"ok"}],`+ + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-opus-4-6")) + require.NoError(t, err) + + _, err = llm.GenerateContent(context.Background(), []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextContent{ + Text: "answer", + Reasoning: &reasoning.ContentReasoning{Redacted: [][]byte{[]byte("first"), []byte("second")}}, + }}}, + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, + }, llms.WithMaxTokens(64)) + require.NoError(t, err) + + assert.Equal(t, 2, strings.Count(string(body), `"type":"redacted_thinking"`), + "two encrypted blocks must reach the vendor as two") +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index fa68af169..e9f7d3af9 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -368,10 +368,12 @@ func (a *aiMessageAccumulator) build() types.Message { Value: &reasoningBlock, }) } - if a.reasoning != nil && len(a.reasoning.Redacted) > 0 { - content = append(content, &types.ContentBlockMemberReasoningContent{ - Value: &types.ReasoningContentBlockMemberRedactedContent{Value: a.reasoning.Redacted}, - }) + if a.reasoning != nil { + for _, block := range a.reasoning.Redacted { + content = append(content, &types.ContentBlockMemberReasoningContent{ + Value: &types.ReasoningContentBlockMemberRedactedContent{Value: block}, + }) + } } for _, text := range a.textBlocks { @@ -524,8 +526,7 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ } humanBlocks = append(humanBlocks, converseMsg.Content...) - isLast := i == len(messages)-1 - if isLast || messages[i+1].Role != llms.ChatMessageTypeHuman { + if nextSpeakingRole(messages, i) != llms.ChatMessageTypeHuman { flushHuman() } @@ -624,6 +625,16 @@ func (c *ConverseClient) addCachePointToMessages(messages []types.Message) { }) } +func nextSpeakingRole(messages []Message, from int) llms.ChatMessageType { + for _, msg := range messages[from+1:] { + if msg.Role != llms.ChatMessageTypeSystem { + return msg.Role + } + } + + return "" +} + // ErrUnsupportedImageFormat reports a MIME type Converse has no image format for. var ErrUnsupportedImageFormat = errors.New("bedrock: unsupported image mime type") @@ -954,7 +965,7 @@ func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { info["PromptTokens"] = promptTokens } -func (c *ConverseClient) processReasoning(reasoningContent string, signature, redacted []byte) *reasoning.ContentReasoning { +func (c *ConverseClient) processReasoning(reasoningContent string, signature []byte, redacted [][]byte) *reasoning.ContentReasoning { if reasoningContent == "" && len(signature) == 0 && len(redacted) == 0 { return nil } @@ -969,7 +980,7 @@ func (c *ConverseClient) processReasoning(reasoningContent string, signature, re type converseReasoningStream struct { text strings.Builder signature bytes.Buffer - redacted []byte + redacted [][]byte } func (a *converseReasoningStream) add(delta types.ReasoningContentBlockDelta) (readableText string) { @@ -982,7 +993,7 @@ func (a *converseReasoningStream) add(delta types.ReasoningContentBlockDelta) (r a.signature.WriteString(block.Value) } case *types.ReasoningContentBlockDeltaMemberRedactedContent: - a.redacted = append(a.redacted, block.Value...) + a.redacted = append(a.redacted, block.Value) } return "" } @@ -1064,7 +1075,7 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver case *types.ReasoningContentBlockMemberRedactedContent: if len(content.Value) > 0 { choice.Reasoning = ensureReasoning(choice.Reasoning) - choice.Reasoning.Redacted = append(choice.Reasoning.Redacted, content.Value...) + choice.Reasoning.Redacted = append(choice.Reasoning.Redacted, content.Value) } } } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 445c0ac8b..45251ea46 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1363,7 +1363,7 @@ func TestConverseClient_RedactedReasoningReachesTheCaller(t *testing.T) { require.NoError(t, err) require.Len(t, resp.Choices, 1) require.NotNil(t, resp.Choices[0].Reasoning, "the vendor returned a thought, encrypted or not") - assert.Equal(t, encrypted, resp.Choices[0].Reasoning.Redacted) + assert.Equal(t, [][]byte{encrypted}, resp.Choices[0].Reasoning.Redacted) assert.False(t, resp.Choices[0].Reasoning.HasContent(), "encrypted bytes are not readable thinking") } @@ -1393,7 +1393,7 @@ func TestConverseClient_RedactedReasoningTravelsBack(t *testing.T) { Role: llms.ChatMessageTypeAI, Content: "answer", Type: "text", - Reasoning: &reasoning.ContentReasoning{Redacted: encrypted}, + Reasoning: &reasoning.ContentReasoning{Redacted: [][]byte{encrypted}}, }, {Role: llms.ChatMessageTypeHuman, Content: "And now?", Type: "text"}, }, @@ -1422,10 +1422,12 @@ func TestConverseReasoningStreamKeepsEveryDelta(t *testing.T) { assert.Equal(t, "thinking", acc.add(&types.ReasoningContentBlockDeltaMemberText{Value: "thinking"})) assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberSignature{Value: "sig"})) assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x07, 0x08}})) + assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x09}})) got := acc.result(NewConverseClient(nil)) require.NotNil(t, got) assert.Equal(t, "thinking", got.Content) assert.Equal(t, []byte("sig"), got.Signature) - assert.Equal(t, []byte{0x07, 0x08}, got.Redacted) + assert.Equal(t, [][]byte{{0x07, 0x08}, {0x09}}, got.Redacted, + "two encrypted blocks stay two: their boundary cannot be rebuilt once merged") } diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_test.go index b783a5a7d..461e86e1c 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_test.go @@ -437,7 +437,8 @@ func TestGetAnthropicInputContent(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - result := getAnthropicInputContent(tt.message) + result, err := getAnthropicInputContent(tt.message) + require.NoError(t, err) tt.validate(t, result) }) } diff --git a/llms/bedrock/internal/bedrockclient/nova_reasoning_only_test.go b/llms/bedrock/internal/bedrockclient/nova_reasoning_only_test.go new file mode 100644 index 000000000..4c268c7d3 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/nova_reasoning_only_test.go @@ -0,0 +1,57 @@ +package bedrockclient + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" + + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestAnAnswerMadeOnlyOfReasoningIsStillAnAnswer(t *testing.T) { + t.Parallel() + + block := &novaReasoningContentOutput{} + block.ReasoningText.Text = "thinking" + content, thought := splitNovaReasoning([]novaOutputContent{{ReasoningContent: block}}) + require.Empty(t, content) + require.NotNil(t, thought, "the vendor did answer: with a thought and nothing else") + assert.Equal(t, "thinking", thought.Content) +} + +func TestAnEmptyAnswerIsStillAnError(t *testing.T) { + t.Parallel() + + content, thought := splitNovaReasoning(nil) + assert.Empty(t, content) + assert.Nil(t, thought) + var _ *reasoning.ContentReasoning = thought +} + +func TestANovaTurnOfPureReasoningIsNotAnError(t *testing.T) { + t.Parallel() + + client := bedrockruntime.New(bedrockruntime.Options{ + Region: "us-east-1", + Credentials: credentials.NewStaticCredentialsProvider("k", "s", ""), + RetryMaxAttempts: 1, + HTTPClient: &cannedTransport{body: `{"output":{"message":{"content":[` + + `{"reasoningContent":{"reasoningText":{"text":"thinking"}}}` + + `],"role":"assistant"}},"stopReason":"end_turn",` + + `"usage":{"inputTokens":1,"outputTokens":2}}`}, + }) + + resp, err := createNovaCompletion(t.Context(), client, "amazon.nova-2-lite-v1:0", + []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + llms.CallOptions{}, &llms.Warnings{}) + require.NoError(t, err, "a thought with no text is still an answer, not a missing one") + require.Len(t, resp.Choices, 1) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Equal(t, "thinking", resp.Choices[0].Reasoning.Content) + assert.Equal(t, "end_turn", resp.Choices[0].StopReason) +} diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index ed8f3063e..7b4d93508 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -326,7 +326,7 @@ func createAnthropicCompletion(ctx context.Context, var textContent string var reasoningContent string var signature []byte - var redacted []byte + var redacted [][]byte var toolCalls []llms.ToolCall for _, c := range output.Content { @@ -340,7 +340,7 @@ func createAnthropicCompletion(ctx context.Context, } case "redacted_thinking": if c.Data != "" { - redacted = append(redacted, []byte(c.Data)...) + redacted = append(redacted, []byte(c.Data)) } case "tool_use": argumentsJSON, err := json.Marshal(c.Input) @@ -457,7 +457,7 @@ func applyAnthropicUsage(info map[string]any, usage anthropicUsage) { info["ReasoningTokens"] = int(usage.OutputTokensDetails.ThinkingTokens) } -func processReasoning(reasoningContent string, signature, redacted []byte) *reasoning.ContentReasoning { +func processReasoning(reasoningContent string, signature []byte, redacted [][]byte) *reasoning.ContentReasoning { if reasoningContent == "" && len(signature) == 0 && len(redacted) == 0 { return nil } @@ -695,10 +695,13 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati return nil, "", errors.New("multiple system prompts") } for _, message := range chunk { - c := getAnthropicInputContent(message) - if c.Type != AnthropicMessageTypeText { + if message.Type != AnthropicMessageTypeText { return nil, "", errors.New("system prompt must be text") } + c, err := getAnthropicInputContent(message) + if err != nil { + return nil, "", err + } systemPrompt += c.Text } continue @@ -718,15 +721,19 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati } content = append(content, thinkingBlock) } - if len(message.Reasoning.Redacted) > 0 { + for _, block := range message.Reasoning.Redacted { content = append(content, anthropicTextGenerationInputContent{ Type: "redacted_thinking", - Data: string(message.Reasoning.Redacted), + Data: string(block), }) } } // Add regular content (text, tool_use, tool_result, etc.) - content = append(content, getAnthropicInputContent(message)) + block, err := getAnthropicInputContent(message) + if err != nil { + return nil, "", err + } + content = append(content, block) } inputContents = append(inputContents, &anthropicTextGenerationInputMessage{ Role: role, @@ -758,7 +765,7 @@ func getAnthropicRole(role llms.ChatMessageType) (string, error) { } } -func getAnthropicInputContent(message Message) anthropicTextGenerationInputContent { +func getAnthropicInputContent(message Message) (anthropicTextGenerationInputContent, error) { var c anthropicTextGenerationInputContent switch message.Type { case AnthropicMessageTypeText: @@ -773,6 +780,10 @@ func getAnthropicInputContent(message Message) anthropicTextGenerationInputConte } } case AnthropicMessageTypeImage: + if mimeTypeToFormat(message.MimeType) == "" { + return anthropicTextGenerationInputContent{}, + fmt.Errorf("%w: %s", ErrUnsupportedImageFormat, message.MimeType) + } c = anthropicTextGenerationInputContent{ Type: message.Type, Source: &anthropicBinGenerationInputSource{ @@ -805,7 +816,8 @@ func getAnthropicInputContent(message Message) anthropicTextGenerationInputConte } } } - return c + + return c, nil } // applyAnthropicReasoning resolves the thinking mechanism from the model via the diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 3a52067eb..a3d4fe251 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -260,7 +260,7 @@ func createNovaCompletion(ctx context.Context, } content, contentReasoning := splitNovaReasoning(output.Output.Message.Content) - if len(content) == 0 { + if len(content) == 0 && contentReasoning == nil { return nil, errors.New("no results") } else if stopReason := output.StopReason; stopReason != NovaCompletionReasonEndTurn && stopReason != NovaCompletionReasonStopSequence && @@ -268,6 +268,9 @@ func createNovaCompletion(ctx context.Context, stopReason != NovaCompletionReasonContentFiltered { return nil, errors.New("completed due to " + stopReason + ". Maybe try increasing max tokens") } + if len(content) == 0 { + content = []novaOutputContent{{}} + } Contentchoices := make([]*llms.ContentChoice, len(content)) for i, c := range content { Contentchoices[i] = &llms.ContentChoice{ diff --git a/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go b/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go new file mode 100644 index 000000000..cefaeba6b --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go @@ -0,0 +1,75 @@ +package bedrockclient + +import ( + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestTwoEncryptedBlocksTravelBackAsTwo(t *testing.T) { + t.Parallel() + + messages := []Message{ + {Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}, + { + Role: llms.ChatMessageTypeAI, Content: "answer", Type: "text", + Reasoning: &reasoning.ContentReasoning{Redacted: [][]byte{{0x01}, {0x02}}}, + }, + } + + contents, _, err := processInputMessagesAnthropic(messages) + require.NoError(t, err) + + blocks := 0 + for _, message := range contents { + for _, block := range message.Content { + if block.Type == "redacted_thinking" { + blocks++ + } + } + } + assert.Equal(t, 2, blocks, "merging them would leave nothing to split on the way back") +} + +func TestASystemMessageDoesNotSplitTwoHumanTurns(t *testing.T) { + t.Parallel() + + client := NewConverseClient(nil) + built, err := client.buildConverseInput(&ConverseInput{ + ModelID: "us.anthropic.claude-haiku-4-5-v1:0", + Messages: []Message{ + {Role: llms.ChatMessageTypeHuman, Content: "first", Type: "text"}, + {Role: llms.ChatMessageTypeSystem, Content: "be brief", Type: "text"}, + {Role: llms.ChatMessageTypeHuman, Content: "second", Type: "text"}, + }, + }) + require.NoError(t, err) + + require.Len(t, built.Messages, 1, "the vendor refuses two user turns in a row") + assert.Len(t, built.Messages[0].Content, 2, "both human blocks stay in that one turn") +} + +func TestALegacyImageFormatTheVendorRefusesIsCaughtBeforeTheWire(t *testing.T) { + t.Parallel() + + _, _, err := processInputMessagesAnthropic([]Message{{ + Role: llms.ChatMessageTypeHuman, Type: AnthropicMessageTypeImage, + MimeType: "image/heic", Content: "x", + }}) + require.ErrorIs(t, err, ErrUnsupportedImageFormat) +} + +func TestALegacyImageFormatTheVendorTakesStillTravels(t *testing.T) { + t.Parallel() + + contents, _, err := processInputMessagesAnthropic([]Message{{ + Role: llms.ChatMessageTypeHuman, Type: AnthropicMessageTypeImage, + MimeType: "image/png", Content: "x", + }}) + require.NoError(t, err) + require.NotEmpty(t, contents) +} diff --git a/llms/bedrock/legacy_redacted_thinking_test.go b/llms/bedrock/legacy_redacted_thinking_test.go index 69b30a5cf..9982db237 100644 --- a/llms/bedrock/legacy_redacted_thinking_test.go +++ b/llms/bedrock/legacy_redacted_thinking_test.go @@ -37,7 +37,7 @@ func TestTheLegacyPathCarriesTheEncryptedThought(t *testing.T) { assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) require.NotNil(t, resp.Choices[0].Reasoning, "a turn carrying an encrypted thought is not a turn without thought") - assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted)) + assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted[0])) }) t.Run("it goes back to the vendor unchanged", func(t *testing.T) { @@ -50,7 +50,7 @@ func TestTheLegacyPathCarriesTheEncryptedThought(t *testing.T) { _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: []byte(encrypted)}), + llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: [][]byte{[]byte(encrypted)}}), }}, {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, }) diff --git a/llms/reasoning/content_reasoning_test.go b/llms/reasoning/content_reasoning_test.go index 8a03c31b5..5065c957e 100644 --- a/llms/reasoning/content_reasoning_test.go +++ b/llms/reasoning/content_reasoning_test.go @@ -32,15 +32,15 @@ func TestHasContentSeparatesReasoningFromSignature(t *testing.T) { func TestRedactedReasoningIsCarriedButIsNotText(t *testing.T) { t.Parallel() - redacted := &ContentReasoning{Redacted: []byte{0x01, 0x02, 0x03}} + redacted := &ContentReasoning{Redacted: [][]byte{{0x01, 0x02, 0x03}}} if redacted.IsEmpty() { t.Error("an encrypted block is something to carry back, so it is not empty") } if redacted.HasContent() { t.Error("an encrypted block is not readable thinking") } - if got := redacted.String(); !strings.Contains(got, "3 bytes") { - t.Errorf("String() = %q, want the encrypted size named", got) + if got := redacted.String(); !strings.Contains(got, "3 bytes") || !strings.Contains(got, "1 blocks") { + t.Errorf("String() = %q, want the encrypted size and the block count named", got) } if !(&ContentReasoning{}).IsEmpty() { t.Error("a value with nothing in it stays empty") diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 484e24642..6baf00976 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -25,8 +25,8 @@ type ContentReasoning struct { Signature []byte `json:"signature,omitempty"` // Redacted is reasoning the provider encrypted. It carries no readable text - // and travels back to the vendor unchanged. - Redacted []byte `json:"redacted,omitempty"` + // and travels back to the vendor unchanged, one block per element. + Redacted [][]byte `json:"redacted,omitempty"` } // IsEmpty reports whether there is nothing to carry back into the next turn. @@ -52,7 +52,11 @@ func (r *ContentReasoning) String() string { buf.Write(r.Signature) } if len(r.Redacted) > 0 { - fmt.Fprintf(&buf, "\nRedacted: %d bytes", len(r.Redacted)) + size := 0 + for _, block := range r.Redacted { + size += len(block) + } + fmt.Fprintf(&buf, "\nRedacted: %d blocks, %d bytes", len(r.Redacted), size) } return buf.String() From 9473715f065c6e7064a6a37c0ea5a29ab10ec34e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 23:26:15 +0300 Subject: [PATCH 452/618] fix(bedrock): read the thinking both streams send, and hand over the salvaged call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three places where the streaming legs lost what the non-streaming ones keep: The legacy anthropic leg knew only tool_use in content_block_start, and its chunk had no field for the encrypted block's data, so a redacted thought was dropped on the floor — it now lands in the answer's reasoning. The Nova leg asked for thinking on the wire but its chunk carried only text, so the thought reached neither the answer nor the callback; the reasoning delta is parsed and delivered like text is. A tool call whose content block never closed was salvaged into the final answer at MessageStop but never handed to the consumer, so an agent living on chunks never saw it. Both paths now go through one delivery, which also stops the salvage when the consumer gives up (PAGI-304). Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 52 ++++++++++++----- .../nova_stream_reasoning_test.go | 35 ++++++++++++ .../bedrockclient/provider_anthropic.go | 15 ++++- .../internal/bedrockclient/provider_nova.go | 21 ++++++- .../bedrockclient/thinking_streams_test.go | 56 +++++++++++++++++++ 5 files changed, 164 insertions(+), 15 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/nova_stream_reasoning_test.go create mode 100644 llms/bedrock/internal/bedrockclient/thinking_streams_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index e9f7d3af9..385baa4a5 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -821,6 +821,34 @@ func (c *ConverseClient) handleStreamingResponse(ctx context.Context, input *bed } // processStreamingResponse processes streaming events +func deliverToolCall( + ctx context.Context, callback streaming.Callback, builder *converseToolCallBuilder, +) (llms.ToolCall, error) { + if callback != nil { + chunk := streaming.Chunk{Type: streaming.ChunkTypeToolCall, ToolCall: builder.streamingCall()} + if err := callback(ctx, chunk); err != nil { + return llms.ToolCall{}, err + } + } + + return builder.toolCall(), nil +} + +func salvageToolCalls( + ctx context.Context, callback streaming.Callback, pending map[int32]*converseToolCallBuilder, +) ([]llms.ToolCall, error) { + calls := make([]llms.ToolCall, 0, len(pending)) + for _, index := range slices.Sorted(maps.Keys(pending)) { + call, err := deliverToolCall(ctx, callback, pending[index]) + if err != nil { + return calls, err + } + calls = append(calls, call) + } + + return calls, nil +} + func (c *ConverseClient) processStreamingResponse(ctx context.Context, response *bedrockruntime.ConverseStreamOutput, callback streaming.Callback) (*llms.ContentResponse, error) { var fullContent strings.Builder var reasoningDeltas converseReasoningStream @@ -886,27 +914,25 @@ DoStream: index := aws.ToInt32(e.Value.ContentBlockIndex) if builder, ok := currentToolCalls[index]; ok { delete(currentToolCalls, index) - if callback != nil { - chunk := streaming.Chunk{ - Type: streaming.ChunkTypeToolCall, - ToolCall: builder.streamingCall(), - } - if err := callback(ctx, chunk); err != nil { - streamErr = err - break DoStream - } + call, err := deliverToolCall(ctx, callback, builder) + if err != nil { + streamErr = err + break DoStream } - toolCalls = append(toolCalls, builder.toolCall()) + toolCalls = append(toolCalls, call) } case *types.ConverseStreamOutputMemberMessageStop: // The terminal event carries the stop reason (end_turn, tool_use, // max_tokens, guardrail_intervened, content_filtered, ...). stopReason = string(e.Value.StopReason) // Stream completed - ensure any remaining tool calls are added - for _, index := range slices.Sorted(maps.Keys(currentToolCalls)) { - toolCalls = append(toolCalls, currentToolCalls[index].toolCall()) - } + salvaged, err := salvageToolCalls(ctx, callback, currentToolCalls) + toolCalls = append(toolCalls, salvaged...) currentToolCalls = nil + if err != nil { + streamErr = err + break DoStream + } case *types.ConverseStreamOutputMemberMetadata: usage = e.Value.Usage } diff --git a/llms/bedrock/internal/bedrockclient/nova_stream_reasoning_test.go b/llms/bedrock/internal/bedrockclient/nova_stream_reasoning_test.go new file mode 100644 index 000000000..1d4297119 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/nova_stream_reasoning_test.go @@ -0,0 +1,35 @@ +package bedrockclient + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestTheNovaStreamReadsAReasoningDelta(t *testing.T) { + t.Parallel() + + var chunk novaStreamingResponseChunk + require.NoError(t, json.Unmarshal( + []byte(`{"contentBlockDelta":{"delta":{"reasoningContent":{"text":"thinking"}}}}`), &chunk)) + + require.NotNil(t, chunk.ContentBlockDelta.Delta.ReasoningContent, + "the vendor sends the thought in this shape; ignoring it drops the thought") + assert.Equal(t, "thinking", chunk.ContentBlockDelta.Delta.ReasoningContent.Text) + assert.Empty(t, chunk.ContentBlockDelta.Delta.Text) +} + +func TestTheLegacyStreamReadsAnEncryptedBlock(t *testing.T) { + t.Parallel() + + var chunk streamingCompletionResponseChunk + require.NoError(t, json.Unmarshal( + []byte(`{"type":"content_block_start","content_block":{"type":"redacted_thinking","data":"deadbeef"}}`), + &chunk)) + + assert.Equal(t, "redacted_thinking", chunk.ContentBlock.Type) + assert.Equal(t, "deadbeef", chunk.ContentBlock.Data, + "without this field the encrypted thought has nowhere to land") +} diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 7b4d93508..96d9650c5 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -486,6 +486,7 @@ type streamingCompletionResponseChunk struct { ID string `json:"id"` Name string `json:"name"` Input map[string]any `json:"input"` + Data string `json:"data"` } `json:"content_block"` AmazonBedrockInvocationMetrics struct { InputTokenCount int32 `json:"inputTokenCount"` @@ -526,6 +527,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim var currentToolCall *streaming.ToolCall var toolCalls []llms.ToolCall var signature strings.Builder + var redacted [][]byte var streamErr error @@ -548,11 +550,16 @@ DoStream: usage = mergeAnthropicUsage(usage, resp.Message.Usage, resp.Usage) applyAnthropicUsage(contentchoices[0].GenerationInfo, usage) case "content_block_start": - if resp.ContentBlock.Type == "tool_use" { + switch resp.ContentBlock.Type { + case "tool_use": currentToolCall = &streaming.ToolCall{ ID: resp.ContentBlock.ID, Name: resp.ContentBlock.Name, } + case "redacted_thinking": + if resp.ContentBlock.Data != "" { + redacted = append(redacted, []byte(resp.ContentBlock.Data)) + } } case "content_block_delta": switch resp.Delta.Type { @@ -634,6 +641,12 @@ DoStream: } contentchoices[0].Reasoning.Signature = []byte(signature.String()) } + if len(redacted) > 0 { + if contentchoices[0].Reasoning == nil { + contentchoices[0].Reasoning = &reasoning.ContentReasoning{} + } + contentchoices[0].Reasoning.Redacted = append(contentchoices[0].Reasoning.Redacted, redacted...) + } contentchoices[0].Content = streamedContent.String() diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index a3d4fe251..47baab928 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -126,7 +126,10 @@ type novaTextGenerationOutput struct { type novaStreamingResponseChunk struct { ContentBlockDelta struct { Delta struct { - Text string `json:"text"` + Text string `json:"text"` + ReasoningContent *struct { + Text string `json:"text"` + } `json:"reasoningContent"` } `json:"delta"` } `json:"contentBlockDelta"` MessageStart struct { @@ -421,6 +424,7 @@ func parseNovaStreamingResponse(ctx context.Context, client *bedrockruntime.Clie contentchoices := []*llms.ContentChoice{{GenerationInfo: map[string]any{}}} var streamedContent strings.Builder + var streamedThought strings.Builder var streamErr error DoStream: @@ -438,6 +442,18 @@ DoStream: break DoStream } + if thought := resp.ContentBlockDelta.Delta.ReasoningContent; thought != nil && thought.Text != "" { + streamedThought.WriteString(thought.Text) + chunk := streaming.Chunk{ + Type: streaming.ChunkTypeReasoning, + Reasoning: &reasoning.ContentReasoning{Content: thought.Text}, + } + if err = options.StreamingFunc(ctx, chunk); err != nil { + streamErr = err + break DoStream + } + } + // Check for content delta (text chunks) if resp.ContentBlockDelta.Delta.Text != "" { streamedContent.WriteString(resp.ContentBlockDelta.Delta.Text) @@ -471,6 +487,9 @@ DoStream: } contentchoices[0].Content = streamedContent.String() + if streamedThought.Len() > 0 { + contentchoices[0].Reasoning = &reasoning.ContentReasoning{Content: streamedThought.String()} + } return &llms.ContentResponse{Choices: contentchoices}, streamErr } diff --git a/llms/bedrock/internal/bedrockclient/thinking_streams_test.go b/llms/bedrock/internal/bedrockclient/thinking_streams_test.go new file mode 100644 index 000000000..c6826e114 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/thinking_streams_test.go @@ -0,0 +1,56 @@ +package bedrockclient + +import ( + "context" + "errors" + "testing" + + "github.com/vxcontrol/langchaingo/llms/streaming" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func pendingToolCalls() map[int32]*converseToolCallBuilder { + return map[int32]*converseToolCallBuilder{ + 1: {id: "call_2", name: "second"}, + 0: {id: "call_1", name: "first"}, + } +} + +func TestASalvagedToolCallReachesTheConsumerToo(t *testing.T) { + t.Parallel() + + var delivered []string + calls, err := salvageToolCalls(t.Context(), + func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeToolCall { + delivered = append(delivered, chunk.ToolCall.Name) + } + return nil + }, pendingToolCalls()) + + require.NoError(t, err) + require.Len(t, calls, 2, "the final answer keeps both salvaged calls") + assert.Equal(t, []string{"first", "second"}, delivered, + "an agent living on chunks must see the calls the answer carries, in block order") +} + +func TestAConsumerThatRefusesASalvagedCallStopsTheSalvage(t *testing.T) { + t.Parallel() + + gaveUp := errors.New("the consumer gave up") + calls, err := salvageToolCalls(t.Context(), + func(context.Context, streaming.Chunk) error { return gaveUp }, pendingToolCalls()) + + require.ErrorIs(t, err, gaveUp) + assert.Empty(t, calls) +} + +func TestASalvageWithoutAConsumerStillFillsTheAnswer(t *testing.T) { + t.Parallel() + + calls, err := salvageToolCalls(t.Context(), nil, pendingToolCalls()) + require.NoError(t, err) + assert.Len(t, calls, 2) +} From ce69695b91db0edd94592ace802b105dc44358c2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 23:47:39 +0300 Subject: [PATCH 453/618] fix(llms): stop calling a schema that reached the wire a lost option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WithStructuredOutput sets the JSON-mode flag as well as the schema, and the bedrock and anthropic reporters read that flag alone. Both doors carry the schema to the wire — bedrock through output_config on either path, anthropic through output_config.format — so the caller was told the option was dropped while it was on the request. The flag is reported only when no schema rides with it. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 2 +- .../structured_output_warning_test.go | 47 +++++++++++++++++ .../bedrock/structured_output_warning_test.go | 52 +++++++++++++++++++ llms/bedrock/warnings.go | 2 +- 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 llms/anthropic/structured_output_warning_test.go create mode 100644 llms/bedrock/structured_output_warning_test.go diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 931e4980e..3a2f95cad 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -49,7 +49,7 @@ func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOpti if opts.LogProbs != nil && *opts.LogProbs { drop("WithLogProbs", "true") } - if opts.JSONMode { + if opts.JSONMode && opts.StructuredOutput == nil { drop("WithJSONMode", "true") } } diff --git a/llms/anthropic/structured_output_warning_test.go b/llms/anthropic/structured_output_warning_test.go new file mode 100644 index 000000000..b65f5d0ee --- /dev/null +++ b/llms/anthropic/structured_output_warning_test.go @@ -0,0 +1,47 @@ +package anthropic_test + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" +) + +func TestASchemaThatReachesTheAnthropicWireIsNotReportedAsLost(t *testing.T) { + t.Parallel() + + const schema = `{"type":"object","properties":{"answer":{"type":"string"}},` + + `"required":["answer"],"additionalProperties":false}` + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"m","type":"message","role":"assistant",`+ + `"model":"claude-sonnet-4-5","content":[{"type":"text","text":"{\"answer\":\"ok\"}"}],`+ + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-sonnet-4-5"), + ) + require.NoError(t, err) + + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "s", Schema: json.RawMessage(schema), + })) + require.NoError(t, err) + + require.NotContains(t, warningsByOption(resp.Warnings), "WithJSONMode", + "the schema reached the wire: %v", resp.Warnings) +} diff --git a/llms/bedrock/structured_output_warning_test.go b/llms/bedrock/structured_output_warning_test.go new file mode 100644 index 000000000..e60b5a1a5 --- /dev/null +++ b/llms/bedrock/structured_output_warning_test.go @@ -0,0 +1,52 @@ +package bedrock_test + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +const warnSchema = `{"type":"object","properties":{"answer":{"type":"string"}},` + + `"required":["answer"],"additionalProperties":false}` + +const ( + legacySchemaAnswer = `{"id":"x","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"{\"answer\":\"ok\"}"}],"stop_reason":"end_turn",` + + `"usage":{"input_tokens":1,"output_tokens":1}}` + converseSchemaAnswer = `{"output":{"message":{"role":"assistant",` + + `"content":[{"text":"{\"answer\":\"ok\"}"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` +) + +func TestASchemaThatReachesTheBedrockWireIsNotReportedAsLost(t *testing.T) { + t.Parallel() + + for _, door := range []struct { + name string + answer string + opts []bedrock.Option + }{ + {"legacy", legacySchemaAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), + }}, + {"converse", converseSchemaAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, door.answer, door.opts, + llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "s", Schema: json.RawMessage(warnSchema), + })) + + require.NotContains(t, bedrockWarningsByOption(resp.Warnings), "WithJSONMode", + "the schema reached the wire: %v", resp.Warnings) + }) + } +} diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go index a55d925f5..497a03b54 100644 --- a/llms/bedrock/warnings.go +++ b/llms/bedrock/warnings.go @@ -63,7 +63,7 @@ func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) [] if opts.LogProbs != nil && *opts.LogProbs { drop("WithLogProbs", "true") } - if opts.JSONMode { + if opts.JSONMode && opts.StructuredOutput == nil { drop("WithJSONMode", "true") } return warnings From 23eb31da3a6c372df6ced49bcaa79b1b606aae77 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 23:49:22 +0300 Subject: [PATCH 454/618] fix(bedrock): stop calling the caller's own "no tool" a lost tool list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The converse builder omits the tool config exactly when the caller asked for tool choice "none" and the turn carries no tool blocks — the tool config is built for every other input, and a conversion failure aborts the request. So the report of an omitted tool list could only ever fire on the one input where the omission was the answer, and it told the caller their tools were dropped. The branch had no other reachable input and is gone. Co-Authored-By: Claude Opus 5 --- .../converse_tool_choice_warning_test.go | 26 +++++++++++++++++++ .../bedrockclient/converse_warnings.go | 9 ++----- 2 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 llms/bedrock/converse_tool_choice_warning_test.go diff --git a/llms/bedrock/converse_tool_choice_warning_test.go b/llms/bedrock/converse_tool_choice_warning_test.go new file mode 100644 index 000000000..069907079 --- /dev/null +++ b/llms/bedrock/converse_tool_choice_warning_test.go @@ -0,0 +1,26 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestAskingForNoToolOnConverseIsNotReportedAsLosingTheTools(t *testing.T) { + t.Parallel() + + tool := llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "get_weather", Description: "weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }} + + resp := bedrockWarningsFor(t, converseAnswer, + []bedrock.Option{bedrock.WithModel("amazon.nova-lite-v1:0"), bedrock.WithConverseAPI()}, + llms.WithTools([]llms.Tool{tool}), llms.WithToolChoice("none")) + + require.NotContains(t, bedrockWarningsByOption(resp.Warnings), "WithTools", + "the caller asked for no tool, so the empty config is the answer: %v", resp.Warnings) +} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 63dfdb6d7..18f530865 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -70,7 +70,8 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro sent, thinkingSent := converseEffortOnTheWire(built) reportEffortClamp(warn, model, string(cfg.Effort), sent, thinkingSent) } - if kind, _ := llms.ClassifyToolChoice(input.ToolChoice); kind == llms.ToolChoiceNone && + choice, _ := llms.ClassifyToolChoice(input.ToolChoice) + if choice == llms.ToolChoiceNone && built.ToolConfig != nil && built.ToolConfig.ToolChoice != nil { if _, auto := built.ToolConfig.ToolChoice.(*types.ToolChoiceMemberAuto); auto { warn.Add(llms.Warning{ @@ -87,12 +88,6 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro if cfg := input.ReasoningConfig; cfg != nil && cfg.HasExplicitTokens() { reportThinkingBudget(warn, model, cfg.Tokens, converseThinkingBudget(built)) } - if len(input.Tools) > 0 && built.ToolConfig == nil { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithTools", Model: model, - Asked: strconv.Itoa(len(input.Tools)) + " tools", Reason: omitted, - }) - } } func converseAdditionalFields(built *bedrockruntime.ConverseInput) map[string]any { From b5a28820f17d5868198dc54c50ca23eb1d01d52c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 23:50:46 +0300 Subject: [PATCH 455/618] fix(bedrock): say so when a legacy payload has nowhere to put the thinking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An ask to think on a legacy model whose payload has no thinking field went to the vendor stripped and unreported: nova outside the one reasoning family, and every provider whose payload struct never had the field. The same call on the Converse path reports the loss, so the two routes disagreed about what the caller lost. The legacy reporter now names the ask in whichever shape it came in — budget, effort, or a bare request to think. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/provider_nova.go | 2 + .../internal/bedrockclient/warnings.go | 18 ++++++ llms/bedrock/legacy_thinking_warning_test.go | 57 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 llms/bedrock/legacy_thinking_warning_test.go diff --git a/llms/bedrock/internal/bedrockclient/provider_nova.go b/llms/bedrock/internal/bedrockclient/provider_nova.go index 47baab928..789e17188 100644 --- a/llms/bedrock/internal/bedrockclient/provider_nova.go +++ b/llms/bedrock/internal/bedrockclient/provider_nova.go @@ -185,6 +185,8 @@ func novaInputToJSON(inputContents []*novaTextGenerationInputMessage, systemProm inferenceConfig.TopP = 0 } reportNovaReasoning(warn, modelID, options, effort) + } else if options.Reasoning.ResolveMode() == llms.ReasoningOn { + reportThinkingUnsupported(warn, modelID, options.Reasoning) } input := novaTextGenerationInput{ diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index ea5e86e7d..b7ba9b150 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -14,6 +14,7 @@ var ( legacyCarriesTools = map[string]bool{"anthropic": true} legacyCarriesTopK = map[string]bool{"anthropic": true, "cohere": true} legacyCarriesStopWords = map[string]bool{"meta": false} + legacyCarriesThinking = map[string]bool{"anthropic": true, "nova": true} ) func reportLegacyOptions(warn *llms.Warnings, provider, modelID string, options llms.CallOptions) { @@ -49,6 +50,23 @@ func reportLegacyOptions(warn *llms.Warnings, provider, modelID string, options Asked: strings.Join(options.StopWords, ","), Reason: reason, }) } + if !legacyCarriesThinking[provider] && options.Reasoning.ResolveMode() == llms.ReasoningOn { + reportThinkingUnsupported(warn, modelID, options.Reasoning) + } +} + +func reportThinkingUnsupported(warn *llms.Warnings, modelID string, cfg *llms.ReasoningConfig) { + asked := "thinking" + switch { + case cfg.HasExplicitTokens(): + asked = strconv.Itoa(cfg.Tokens) + " tokens" + case cfg.Effort != "": + asked = string(cfg.Effort) + } + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: modelID, + Asked: asked, Reason: "the door puts no thinking on the request for this model", + }) } func reportLegacyAnthropic( diff --git a/llms/bedrock/legacy_thinking_warning_test.go b/llms/bedrock/legacy_thinking_warning_test.go new file mode 100644 index 000000000..bddf98d2b --- /dev/null +++ b/llms/bedrock/legacy_thinking_warning_test.go @@ -0,0 +1,57 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestThinkingNoLegacyPayloadCarriesIsReported(t *testing.T) { + t.Parallel() + + const novaAnswer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + const metaAnswer = `{"generation":"ok","stop_reason":"stop","prompt_token_count":1,` + + `"generation_token_count":1}` + + for _, door := range []struct { + name string + model string + answer string + }{ + {"nova without reasoning", "amazon.nova-lite-v1:0", novaAnswer}, + {"a payload with no thinking field at all", "meta.llama3-8b-instruct-v1:0", metaAnswer}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, door.answer, + []bedrock.Option{bedrock.WithModel(door.model)}, + llms.WithReasoning(llms.ReasoningHigh, 0)) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "the ask to think went nowhere unreported: %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "high", w.Asked) + }) + } +} + +func TestANovaModelThatThinksReportsNoLostThinking(t *testing.T) { + t.Parallel() + + const novaAnswer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + resp := bedrockWarningsFor(t, novaAnswer, + []bedrock.Option{bedrock.WithModel("amazon.nova-2-lite-v1:0")}, + llms.WithReasoning(llms.ReasoningHigh, 0)) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithReasoning"] + if ok { + require.NotEqual(t, llms.WarningDrop, w.Kind, "the effort reached the wire: %v", resp.Warnings) + } +} From 2c7d6da7fa3e1b5b578fdbb7150c19108666b5dd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 23:54:33 +0300 Subject: [PATCH 456/618] fix(bedrock): report the thinking mechanism the converse door picked, on every family MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mechanism report was read from the Claude thinking block alone, so a caller who asked for adaptive thinking on Nova or Grok was never told the door had put an effort on the request instead. The reader now takes the mechanism from whichever shape the family writes, and stays silent where the request settles no depth at all — there the vendor really does choose. Co-Authored-By: Claude Opus 5 --- .../converse_mechanism_warning_test.go | 60 +++++++++++++++++++ .../bedrockclient/converse_warnings.go | 27 +++++++-- 2 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 llms/bedrock/converse_mechanism_warning_test.go diff --git a/llms/bedrock/converse_mechanism_warning_test.go b/llms/bedrock/converse_mechanism_warning_test.go new file mode 100644 index 000000000..2d13fee09 --- /dev/null +++ b/llms/bedrock/converse_mechanism_warning_test.go @@ -0,0 +1,60 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestAMechanismTheConverseDoorPickedInsteadOfAdaptiveIsReported(t *testing.T) { + t.Parallel() + + for _, family := range []struct { + name string + model string + }{ + {"nova", "amazon.nova-2-lite-v1:0"}, + {"grok", "xai.grok-4-v1:0"}, + {"claude on a budget", "anthropic.claude-sonnet-4-5-v1:0"}, + } { + t.Run(family.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, converseAnswer, + []bedrock.Option{bedrock.WithModel(family.model), bedrock.WithConverseAPI()}, + llms.WithAdaptiveReasoning(llms.ReasoningHigh)) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithAdaptiveReasoning"] + require.True(t, ok, "the door picked the mechanism unreported: %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "adaptive", w.Asked) + require.NotEmpty(t, w.Sent) + }) + } +} + +func TestDelegatedDepthOnConverseIsNotReportedAsAPickedMechanism(t *testing.T) { + t.Parallel() + + for _, family := range []struct { + name string + model string + }{ + {"nova", "amazon.nova-2-lite-v1:0"}, + {"grok", "xai.grok-4-v1:0"}, + } { + t.Run(family.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, converseAnswer, + []bedrock.Option{bedrock.WithModel(family.model), bedrock.WithConverseAPI()}, + llms.WithAdaptiveReasoning("")) + + require.NotContains(t, bedrockWarningsByOption(resp.Warnings), "WithAdaptiveReasoning", + "the wire settles no depth, so the vendor picks it: %v", resp.Warnings) + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index 18f530865..c546f220d 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -81,10 +81,7 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro }) } } - if thinking, ok := converseAdditionalFields(built)["thinking"].(map[string]any); ok { - sentType, _ := thinking["type"].(string) - reportMechanismSwap(warn, model, input.ReasoningConfig, sentType) - } + reportMechanismSwap(warn, model, input.ReasoningConfig, converseMechanismOnTheWire(built)) if cfg := input.ReasoningConfig; cfg != nil && cfg.HasExplicitTokens() { reportThinkingBudget(warn, model, cfg.Tokens, converseThinkingBudget(built)) } @@ -130,6 +127,28 @@ func converseEffortOnTheWire(built *bedrockruntime.ConverseInput) (string, bool) return "", thinking } +func converseMechanismOnTheWire(built *bedrockruntime.ConverseInput) string { + fields := converseAdditionalFields(built) + if thinking, ok := fields["thinking"].(map[string]any); ok { + sentType, _ := thinking["type"].(string) + return sentType + } + for _, shape := range []struct{ key, effortKey string }{ + {"reasoningConfig", "maxReasoningEffort"}, + {"reasoning", "effort"}, + } { + block, ok := fields[shape.key].(map[string]any) + if !ok { + continue + } + if effort, _ := block[shape.effortKey].(string); effort != "" { + return "effort" + } + return "" + } + return "" +} + func converseCarriesTopK(built *bedrockruntime.ConverseInput) bool { _, carried := converseAdditionalFields(built)["top_k"] return carried From 8dcf844ceb7df7331915ff84f4cbc4de2daf9258 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 11 Sep 2026 23:57:05 +0300 Subject: [PATCH 457/618] fix(bedrock): ask what the payload carries, not what the provider is Two providers build two payload shapes each, and the legacy door picks the shape by model name: jamba carries no penalty fields and command-r no num_generations. The warning surface asked only who the provider was, so those two options were stripped in silence and reported as delivered. The shape question now has one answer that both the dispatcher and the report read. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient.go | 8 +++ .../internal/bedrockclient/provider_ai21.go | 2 +- .../internal/bedrockclient/provider_cohere.go | 2 +- .../legacy_payload_shape_warning_test.go | 54 +++++++++++++++++++ llms/bedrock/warnings.go | 24 +++++---- 5 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 llms/bedrock/legacy_payload_shape_warning_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient.go b/llms/bedrock/internal/bedrockclient/bedrockclient.go index 86b033d1b..c78217a7e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient.go @@ -172,6 +172,14 @@ func processInputMessagesGeneric(messages []Message) string { return sb.String() } +func IsAi21Jamba(modelID string) bool { + return strings.Contains(modelID, "jamba") +} + +func IsCohereCommandR(modelID string) bool { + return strings.Contains(modelID, "command-r") +} + func getMaxTokens(maxTokens, defaultValue int) int { if maxTokens <= 0 { return defaultValue diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index d8d62df53..e07f785e8 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -154,7 +154,7 @@ func getAi21Role(role llms.ChatMessageType) (string, error) { func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, modelID string, messages []Message, options llms.CallOptions) (*llms.ContentResponse, error) { // Check if this is a Jamba model (use messages API) - if strings.Contains(modelID, "jamba") { + if IsAi21Jamba(modelID) { return createAi21JambaCompletion(ctx, client, modelID, messages, options) } diff --git a/llms/bedrock/internal/bedrockclient/provider_cohere.go b/llms/bedrock/internal/bedrockclient/provider_cohere.go index 11f6761f1..9c7f8f0f2 100644 --- a/llms/bedrock/internal/bedrockclient/provider_cohere.go +++ b/llms/bedrock/internal/bedrockclient/provider_cohere.go @@ -125,7 +125,7 @@ func createCohereCompletion(ctx context.Context, options llms.CallOptions, ) (*llms.ContentResponse, error) { // Check if this is a Command R model - if strings.Contains(modelID, "command-r") { + if IsCohereCommandR(modelID) { return createCohereCommandRCompletion(ctx, client, modelID, messages, options) } diff --git a/llms/bedrock/legacy_payload_shape_warning_test.go b/llms/bedrock/legacy_payload_shape_warning_test.go new file mode 100644 index 000000000..93d061498 --- /dev/null +++ b/llms/bedrock/legacy_payload_shape_warning_test.go @@ -0,0 +1,54 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestOneProviderWithTwoPayloadShapesIsReportedByShape(t *testing.T) { + t.Parallel() + + const jambaAnswer = `{"id":"x","choices":[{"index":0,"message":{"role":"assistant","content":"ok"},` + + `"finish_reason":"stop"}],"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + const commandRAnswer = `{"text":"ok","finish_reason":"COMPLETE","generation_id":"g"}` + + for _, shape := range []struct { + name string + model string + answer string + lost []string + carried []string + }{ + { + name: "jamba has no penalty field", model: "ai21.jamba-1-5-large-v1:0", answer: jambaAnswer, + lost: []string{"WithFrequencyPenalty", "WithPresencePenalty", "WithRepetitionPenalty"}, + carried: []string{"WithCandidateCount"}, + }, + { + name: "command-r has no num_generations", model: "cohere.command-r-v1:0", answer: commandRAnswer, + lost: []string{"WithCandidateCount"}, + carried: nil, + }, + } { + t.Run(shape.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, shape.answer, + []bedrock.Option{bedrock.WithModel(shape.model)}, + llms.WithRepetitionPenalty(1.1), llms.WithFrequencyPenalty(0.3), + llms.WithPresencePenalty(0.7), llms.WithCandidateCount(3)) + + got := bedrockWarningsByOption(resp.Warnings) + for _, option := range shape.lost { + require.Contains(t, got, option, "this payload has no field for it: %v", resp.Warnings) + } + for _, option := range shape.carried { + require.NotContains(t, got, option, "this payload carries it: %v", resp.Warnings) + } + }) + } +} diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go index 497a03b54..1dc61f990 100644 --- a/llms/bedrock/warnings.go +++ b/llms/bedrock/warnings.go @@ -7,19 +7,25 @@ import ( "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" ) -// The legacy payloads differ per provider; the Converse request has none of -// these fields at all. -var ( - legacyCarriesPenalties = map[string]bool{"ai21": true} - legacyCarriesCandidateCount = map[string]bool{"ai21": true, "cohere": true} -) +func legacyCarriesPenalties(model string) bool { + return bedrockclient.GetProvider(model) == "ai21" && !bedrockclient.IsAi21Jamba(model) +} + +func legacyCarriesCandidateCount(model string) bool { + switch bedrockclient.GetProvider(model) { + case "ai21": + return true + case "cohere": + return !bedrockclient.IsCohereCommandR(model) + } + return false +} func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) []llms.Warning { const unread = "the bedrock request for this model has no field for it" - provider := bedrockclient.GetProvider(model) - carriesPenalties := !converse && legacyCarriesPenalties[provider] - carriesCandidateCount := !converse && legacyCarriesCandidateCount[provider] + carriesPenalties := !converse && legacyCarriesPenalties(model) + carriesCandidateCount := !converse && legacyCarriesCandidateCount(model) var warnings []llms.Warning var extra llms.Warnings From 7fb2a4cb937e385d23af0d8f37ab48b1e67673f0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 12 Sep 2026 00:02:19 +0300 Subject: [PATCH 458/618] refactor(llms): give every door one list of the options it never reads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each door kept its own list of caller options it leaves off the wire, and the lists had drifted: anthropic and both bedrock doors said nothing about the seed, the verbosity, the two length bounds or the response MIME type, and mistral named one length bound but not the other. Whether an option is reported now comes from one catalogue in llms, and a door names only what it does carry — so a missing option is a difference in one place instead of a silence nobody can see. Options a door reshapes stay out of it: those are still reported with the value that actually travelled. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings.go | 40 +----------- llms/anthropic/unread_parity_test.go | 25 ++++++++ llms/bedrock/unread_parity_test.go | 43 +++++++++++++ llms/bedrock/warnings.go | 60 ++++-------------- llms/googleai/warnings.go | 31 +--------- llms/huggingface/warnings.go | 34 +---------- llms/mistral/warnings.go | 39 +----------- llms/mistral/warnings_test.go | 11 ++++ llms/ollama/warnings.go | 27 +-------- llms/openai/sampling_warnings.go | 26 ++------ llms/unread_catalogue_test.go | 91 ++++++++++++++++++++++++++++ llms/warning.go | 72 ++++++++++++++++++++++ 12 files changed, 267 insertions(+), 232 deletions(-) create mode 100644 llms/anthropic/unread_parity_test.go create mode 100644 llms/bedrock/unread_parity_test.go create mode 100644 llms/unread_catalogue_test.go diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 3a2f95cad..6e497577d 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -13,45 +13,7 @@ func reportAnthropicUnread(warn *llms.Warnings, model string, opts llms.CallOpti const unread = "the door builds no field for it" warn.AddUnreadExtraBody(model, opts, extraBodyUnread) - - drop := func(option, asked string) { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: option, Model: model, - Asked: asked, Reason: unread, - }) - } - for _, o := range []struct { - option string - value *float64 - }{ - {"WithMinP", opts.MinP}, - {"WithRepetitionPenalty", opts.RepetitionPenalty}, - {"WithFrequencyPenalty", opts.FrequencyPenalty}, - {"WithPresencePenalty", opts.PresencePenalty}, - } { - if o.value != nil && *o.value != 0 { - drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) - } - } - for _, o := range []struct { - option string - value *int - neutral int - }{ - {"WithN", opts.N, 1}, - {"WithCandidateCount", opts.CandidateCount, 1}, - {"WithTopLogProbs", opts.TopLogProbs, 0}, - } { - if o.value != nil && *o.value != o.neutral { - drop(o.option, strconv.Itoa(*o.value)) - } - } - if opts.LogProbs != nil && *opts.LogProbs { - drop("WithLogProbs", "true") - } - if opts.JSONMode && opts.StructuredOutput == nil { - drop("WithJSONMode", "true") - } + warn.AddUnreadOptions(model, opts, unread, "WithTopK") } func reportAnthropicEffort( diff --git a/llms/anthropic/unread_parity_test.go b/llms/anthropic/unread_parity_test.go new file mode 100644 index 000000000..ab54d3011 --- /dev/null +++ b/llms/anthropic/unread_parity_test.go @@ -0,0 +1,25 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestTheAnthropicDoorReportsTheOptionsItNeverReads(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithSeed(7), llms.WithVerbosity("low"), + llms.WithMinLength(10), llms.WithMaxLength(20), + llms.WithResponseMIMEType("application/json")) + + got := warningsByOption(resp.Warnings) + for _, option := range []string{ + "WithSeed", "WithVerbosity", "WithMinLength", "WithMaxLength", "WithResponseMIMEType", + } { + require.Contains(t, got, option, "the request has no field for it: %v", resp.Warnings) + } +} diff --git a/llms/bedrock/unread_parity_test.go b/llms/bedrock/unread_parity_test.go new file mode 100644 index 000000000..b87bdad0b --- /dev/null +++ b/llms/bedrock/unread_parity_test.go @@ -0,0 +1,43 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestBothBedrockDoorsReportTheOptionsNeitherReads(t *testing.T) { + t.Parallel() + + for _, door := range []struct { + name string + answer string + opts []bedrock.Option + }{ + {"legacy", legacyAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), + }}, + {"converse", converseAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, door.answer, door.opts, + llms.WithSeed(7), llms.WithVerbosity("low"), + llms.WithMinLength(10), llms.WithMaxLength(20), + llms.WithResponseMIMEType("application/json")) + + got := bedrockWarningsByOption(resp.Warnings) + for _, option := range []string{ + "WithSeed", "WithVerbosity", "WithMinLength", "WithMaxLength", "WithResponseMIMEType", + } { + require.Contains(t, got, option, "the request has no field for it: %v", resp.Warnings) + } + }) + } +} diff --git a/llms/bedrock/warnings.go b/llms/bedrock/warnings.go index 1dc61f990..be62d29f7 100644 --- a/llms/bedrock/warnings.go +++ b/llms/bedrock/warnings.go @@ -1,8 +1,6 @@ package bedrock import ( - "strconv" - "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock/internal/bedrockclient" ) @@ -24,55 +22,21 @@ func legacyCarriesCandidateCount(model string) bool { func unreadBedrockOptions(model string, converse bool, opts llms.CallOptions) []llms.Warning { const unread = "the bedrock request for this model has no field for it" - carriesPenalties := !converse && legacyCarriesPenalties(model) - carriesCandidateCount := !converse && legacyCarriesCandidateCount(model) - - var warnings []llms.Warning - var extra llms.Warnings - extra.AddUnreadExtraBody(model, opts, extraBodyUnread) - warnings = append(warnings, extra.List()...) - - drop := func(option, asked string) { - warnings = append(warnings, llms.Warning{ - Kind: llms.WarningDrop, Option: option, Model: model, - Asked: asked, Reason: unread, - }) - } - for _, o := range []struct { - option string - value *float64 - carried bool - }{ - {"WithMinP", opts.MinP, false}, - {"WithRepetitionPenalty", opts.RepetitionPenalty, carriesPenalties}, - {"WithFrequencyPenalty", opts.FrequencyPenalty, carriesPenalties}, - {"WithPresencePenalty", opts.PresencePenalty, carriesPenalties}, - } { - if !o.carried && o.value != nil && *o.value != 0 { - drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) + carried := []string{"WithTopK"} + if !converse { + if legacyCarriesPenalties(model) { + carried = append(carried, + "WithRepetitionPenalty", "WithFrequencyPenalty", "WithPresencePenalty") } - } - for _, o := range []struct { - option string - value *int - neutral int - carried bool - }{ - {"WithN", opts.N, 1, false}, - {"WithCandidateCount", opts.CandidateCount, 1, carriesCandidateCount}, - {"WithTopLogProbs", opts.TopLogProbs, 0, false}, - } { - if !o.carried && o.value != nil && *o.value != o.neutral { - drop(o.option, strconv.Itoa(*o.value)) + if legacyCarriesCandidateCount(model) { + carried = append(carried, "WithCandidateCount") } } - if opts.LogProbs != nil && *opts.LogProbs { - drop("WithLogProbs", "true") - } - if opts.JSONMode && opts.StructuredOutput == nil { - drop("WithJSONMode", "true") - } - return warnings + + var warn llms.Warnings + warn.AddUnreadExtraBody(model, opts, extraBodyUnread) + warn.AddUnreadOptions(model, opts, unread, carried...) + return warn.List() } const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" diff --git a/llms/googleai/warnings.go b/llms/googleai/warnings.go index 170ce026b..5a38a39b4 100644 --- a/llms/googleai/warnings.go +++ b/llms/googleai/warnings.go @@ -20,34 +20,9 @@ func reportGoogleAIOptions(warn *llms.Warnings, model string, opts llms.CallOpti Reason: "the door sends candidate_count and never reads n", }) } - if opts.MinP != nil && *opts.MinP != 0 { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithMinP", Model: model, - Asked: strconv.FormatFloat(*opts.MinP, 'g', -1, 64), - Reason: "the door's generation config has no min-p field to set", - }) - } - if opts.RepetitionPenalty != nil && *opts.RepetitionPenalty != 0 { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithRepetitionPenalty", Model: model, - Asked: strconv.FormatFloat(*opts.RepetitionPenalty, 'g', -1, 64), - Reason: "the door's generation config has no repetition-penalty field to set", - }) - } - if opts.LogProbs != nil && *opts.LogProbs { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, - Asked: "true", - Reason: "the door never sets logprobs on the generation config it builds", - }) - } - if opts.TopLogProbs != nil && *opts.TopLogProbs != 0 { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, - Asked: strconv.Itoa(*opts.TopLogProbs), - Reason: "the door never sets logprobs on the generation config it builds", - }) - } + warn.AddUnreadOptions(model, opts, "the door's generation config has no field to set", + "WithTopK", "WithCandidateCount", "WithSeed", "WithN", + "WithFrequencyPenalty", "WithPresencePenalty", "WithResponseMIMEType", "WithJSONMode") reportGoogleAIThinking(warn, model, opts, tc) } diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index 49f26592b..5ab1f3e8e 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -12,6 +12,7 @@ func reportHuggingFaceOptions( const unread = "the door builds no field for it" warn.AddUnreadExtraBody(model, *opts, extraBodyUnread) + warn.AddUnreadOptions(model, *opts, unread, "WithSeed") drop := func(option, asked string) { warn.Add(llms.Warning{ @@ -19,33 +20,6 @@ func reportHuggingFaceOptions( Asked: asked, Reason: unread, }) } - dropFloat := func(option string, v *float64) { - if v != nil && *v != 0 { - drop(option, strconv.FormatFloat(*v, 'g', -1, 64)) - } - } - dropInt := func(option string, v *int) { - if v != nil && *v != 0 { - drop(option, strconv.Itoa(*v)) - } - } - - dropInt("WithMaxLength", opts.MaxLength) - dropInt("WithTopK", opts.TopK) - dropInt("WithMinLength", opts.MinLength) - dropCount := func(option string, v *int) { - if v != nil && *v != 1 { - drop(option, strconv.Itoa(*v)) - } - } - dropCount("WithN", opts.N) - dropCount("WithCandidateCount", opts.CandidateCount) - dropInt("WithTopLogProbs", opts.TopLogProbs) - dropFloat("WithMinP", opts.MinP) - dropFloat("WithRepetitionPenalty", opts.RepetitionPenalty) - dropFloat("WithFrequencyPenalty", opts.FrequencyPenalty) - dropFloat("WithPresencePenalty", opts.PresencePenalty) - reportHuggingFaceShapedOptions(opts, drop) if cfg := opts.Reasoning; cfg != nil && cfg.HasExplicitTokens() { drop("WithReasoning", strconv.Itoa(cfg.Tokens)+" tokens") @@ -80,12 +54,6 @@ func reportHuggingFaceShapedOptions(opts *llms.CallOptions, drop func(option, as if opts.StructuredOutput != nil { drop("WithStructuredOutput", opts.StructuredOutput.Name) } - if opts.JSONMode { - drop("WithJSONMode", "true") - } - if opts.ResponseMIMEType != nil { - drop("WithResponseMIMEType", *opts.ResponseMIMEType) - } } func reportHuggingFaceMessages(warn *llms.Warnings, model string, messages []llms.MessageContent) { diff --git a/llms/mistral/warnings.go b/llms/mistral/warnings.go index b540406e6..a362414ff 100644 --- a/llms/mistral/warnings.go +++ b/llms/mistral/warnings.go @@ -11,44 +11,7 @@ func reportMistralUnread(warn *llms.Warnings, model string, opts *llms.CallOptio const unread = "the door's request has no field for it" warn.AddUnreadExtraBody(model, *opts, extraBodyUnread) - - drop := func(option, asked string) { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: option, Model: model, - Asked: asked, Reason: unread, - }) - } - for _, o := range []struct { - option string - value *float64 - }{ - {"WithMinP", opts.MinP}, - {"WithRepetitionPenalty", opts.RepetitionPenalty}, - {"WithFrequencyPenalty", opts.FrequencyPenalty}, - {"WithPresencePenalty", opts.PresencePenalty}, - } { - if o.value != nil && *o.value != 0 { - drop(o.option, strconv.FormatFloat(*o.value, 'g', -1, 64)) - } - } - for _, o := range []struct { - option string - value *int - neutral int - }{ - {"WithTopK", opts.TopK, 0}, - {"WithMinLength", opts.MinLength, 0}, - {"WithTopLogProbs", opts.TopLogProbs, 0}, - {"WithN", opts.N, 1}, - {"WithCandidateCount", opts.CandidateCount, 1}, - } { - if o.value != nil && *o.value != o.neutral { - drop(o.option, strconv.Itoa(*o.value)) - } - } - if opts.LogProbs != nil && *opts.LogProbs { - drop("WithLogProbs", "true") - } + warn.AddUnreadOptions(model, *opts, unread, "WithSeed", "WithJSONMode") } func reportMistralOptions(warn *llms.Warnings, model string, opts *llms.CallOptions) { diff --git a/llms/mistral/warnings_test.go b/llms/mistral/warnings_test.go index 1490dfdc2..18d8eb847 100644 --- a/llms/mistral/warnings_test.go +++ b/llms/mistral/warnings_test.go @@ -118,3 +118,14 @@ func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) } + +func TestTheMistralDoorReportsBothLengthOptionsItNeverReads(t *testing.T) { + t.Parallel() + + got := mistralWarningsByOption( + generateForWarnings(t, llms.WithMinLength(10), llms.WithMaxLength(20)).Warnings) + + for _, option := range []string{"WithMinLength", "WithMaxLength"} { + require.Contains(t, got, option, "the door's request has no field for it") + } +} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 9d74e75f6..47840157c 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -21,6 +21,9 @@ func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOption }) } + warn.AddUnreadOptions(model, opts, unread, + "WithRepetitionPenalty", "WithFrequencyPenalty", "WithPresencePenalty", + "WithTopK", "WithSeed", "WithJSONMode") if opts.MinP != nil && *opts.MinP != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMinP", Model: model, @@ -28,30 +31,6 @@ func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOption Reason: "the door sends only the min_p set on the client", }) } - if opts.LogProbs != nil && *opts.LogProbs { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithLogProbs", Model: model, - Asked: "true", Reason: unread, - }) - } - if opts.TopLogProbs != nil && *opts.TopLogProbs != 0 { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithTopLogProbs", Model: model, - Asked: strconv.Itoa(*opts.TopLogProbs), Reason: unread, - }) - } - if opts.N != nil && *opts.N != 1 { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithN", Model: model, - Asked: strconv.Itoa(*opts.N), Reason: unread, - }) - } - if opts.CandidateCount != nil && *opts.CandidateCount != 1 { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: "WithCandidateCount", Model: model, - Asked: strconv.Itoa(*opts.CandidateCount), Reason: unread, - }) - } if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset && kind != llms.ToolChoiceAuto { asked := name diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 07f4a45ef..e5cda063c 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -79,28 +79,10 @@ func addNonZeroIntChange(warn *llms.Warnings, option, model, reason string, befo func reportOpenAIUnread(warn *llms.Warnings, model string, opts llms.CallOptions) { const unread = "the door builds no field for it" - drop := func(option, asked string) { - warn.Add(llms.Warning{ - Kind: llms.WarningDrop, Option: option, Model: model, - Asked: asked, Reason: unread, - }) - } - for _, o := range []struct { - option string - value *int - neutral int - }{ - {"WithCandidateCount", opts.CandidateCount, 1}, - {"WithMinLength", opts.MinLength, 0}, - {"WithMaxLength", opts.MaxLength, 0}, - } { - if o.value != nil && *o.value != o.neutral { - drop(o.option, strconv.Itoa(*o.value)) - } - } - if opts.ResponseMIMEType != nil && *opts.ResponseMIMEType != "" { - drop("WithResponseMIMEType", *opts.ResponseMIMEType) - } + warn.AddUnreadOptions(model, opts, unread, + "WithMinP", "WithRepetitionPenalty", "WithFrequencyPenalty", "WithPresencePenalty", + "WithTopK", "WithN", "WithTopLogProbs", "WithSeed", "WithVerbosity", + "WithLogProbs", "WithJSONMode") } func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { diff --git a/llms/unread_catalogue_test.go b/llms/unread_catalogue_test.go new file mode 100644 index 000000000..18bd58676 --- /dev/null +++ b/llms/unread_catalogue_test.go @@ -0,0 +1,91 @@ +package llms_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func everyCatalogueOption() []llms.CallOption { + return []llms.CallOption{ + llms.WithMinP(0.05), llms.WithRepetitionPenalty(1.1), + llms.WithFrequencyPenalty(0.3), llms.WithPresencePenalty(0.7), + llms.WithTopK(40), llms.WithN(2), llms.WithCandidateCount(3), + llms.WithTopLogProbs(5), llms.WithMinLength(10), llms.WithMaxLength(20), + llms.WithSeed(7), llms.WithVerbosity("low"), + llms.WithResponseMIMEType("application/json"), + llms.WithLogProbs(true), llms.WithJSONMode(), + } +} + +var catalogueOptionNames = []string{ + "WithMinP", "WithRepetitionPenalty", "WithFrequencyPenalty", "WithPresencePenalty", + "WithTopK", "WithN", "WithCandidateCount", "WithTopLogProbs", + "WithMinLength", "WithMaxLength", "WithSeed", "WithVerbosity", + "WithResponseMIMEType", "WithLogProbs", "WithJSONMode", +} + +func TestTheUnreadCatalogueReportsEveryOptionADoorDoesNotCarry(t *testing.T) { + t.Parallel() + + opts := llms.CallOptions{} + for _, apply := range everyCatalogueOption() { + apply(&opts) + } + + var warn llms.Warnings + warn.AddUnreadOptions("m", opts, "no field", "WithSeed", "WithTopK") + + reported := make(map[string]llms.Warning, len(catalogueOptionNames)) + for _, w := range warn.List() { + reported[w.Option] = w + } + for _, option := range catalogueOptionNames { + switch option { + case "WithSeed", "WithTopK": + require.NotContains(t, reported, option, "the door carries it") + default: + w, ok := reported[option] + require.True(t, ok, "%s went unreported", option) + require.Equal(t, llms.WarningDrop, w.Kind) + require.NotEmpty(t, w.Asked, "%s reported without the value asked", option) + } + } +} + +func TestADoorThatCarriesNothingReportsTheWholeCatalogue(t *testing.T) { + t.Parallel() + + opts := llms.CallOptions{} + for _, apply := range everyCatalogueOption() { + apply(&opts) + } + for _, apply := range []llms.CallOption{ + llms.WithTemperature(0.4), llms.WithTopP(0.9), llms.WithMaxTokens(1024), + llms.WithStopWords([]string{"stop"}), + } { + apply(&opts) + } + + var warn llms.Warnings + warn.AddUnreadOptions("m", opts, "no field") + + reported := make([]string, 0, len(catalogueOptionNames)) + for _, w := range warn.List() { + reported = append(reported, w.Option) + } + require.ElementsMatch(t, catalogueOptionNames, reported, + "the catalogue holds the options a door carries verbatim or not at all; "+ + "an option the door reshapes is reported with the value that travelled") +} + +func TestACallThatSetsNoCatalogueOptionReportsNothing(t *testing.T) { + t.Parallel() + + var warn llms.Warnings + warn.AddUnreadOptions("m", llms.CallOptions{}, "no field") + + require.Empty(t, warn.List()) +} diff --git a/llms/warning.go b/llms/warning.go index 90fc8d166..dee58d2a6 100644 --- a/llms/warning.go +++ b/llms/warning.go @@ -90,6 +90,78 @@ func (w *Warnings) addChange(option, model, reason, before, after string) { } } +var unreadCatalogue = []struct { + option string + asked func(CallOptions) string +}{ + {"WithMinP", func(o CallOptions) string { return askedFloat(o.MinP) }}, + {"WithRepetitionPenalty", func(o CallOptions) string { return askedFloat(o.RepetitionPenalty) }}, + {"WithFrequencyPenalty", func(o CallOptions) string { return askedFloat(o.FrequencyPenalty) }}, + {"WithPresencePenalty", func(o CallOptions) string { return askedFloat(o.PresencePenalty) }}, + {"WithTopK", func(o CallOptions) string { return askedInt(o.TopK, 0) }}, + {"WithN", func(o CallOptions) string { return askedInt(o.N, 1) }}, + {"WithCandidateCount", func(o CallOptions) string { return askedInt(o.CandidateCount, 1) }}, + {"WithTopLogProbs", func(o CallOptions) string { return askedInt(o.TopLogProbs, 0) }}, + {"WithMinLength", func(o CallOptions) string { return askedInt(o.MinLength, 0) }}, + {"WithMaxLength", func(o CallOptions) string { return askedInt(o.MaxLength, 0) }}, + {"WithSeed", func(o CallOptions) string { return askedInt(o.Seed, 0) }}, + {"WithVerbosity", func(o CallOptions) string { return askedString(o.Verbosity) }}, + {"WithResponseMIMEType", func(o CallOptions) string { return askedString(o.ResponseMIMEType) }}, + {"WithLogProbs", func(o CallOptions) string { + if o.LogProbs != nil && *o.LogProbs { + return "true" + } + return "" + }}, + {"WithJSONMode", func(o CallOptions) string { + if o.JSONMode && o.StructuredOutput == nil { + return "true" + } + return "" + }}, +} + +func askedFloat(v *float64) string { + if v == nil || *v == 0 { + return "" + } + return strconv.FormatFloat(*v, 'g', -1, 64) +} + +func askedInt(v *int, neutral int) string { + if v == nil || *v == neutral { + return "" + } + return strconv.Itoa(*v) +} + +func askedString(v *string) string { + if v == nil { + return "" + } + return *v +} + +// AddUnreadOptions reports every catalogue option the caller set that this door +// leaves off the wire. carried names the ones it does put there. +func (w *Warnings) AddUnreadOptions(model string, opts CallOptions, reason string, carried ...string) { + onTheWire := make(map[string]bool, len(carried)) + for _, option := range carried { + onTheWire[option] = true + } + for _, entry := range unreadCatalogue { + if onTheWire[entry.option] { + continue + } + if asked := entry.asked(opts); asked != "" { + w.Add(Warning{ + Kind: WarningDrop, Option: entry.option, Model: model, + Asked: asked, Reason: reason, + }) + } + } +} + // AddUnreadExtraBody records the WithExtraBody fields a door cannot merge. func (w *Warnings) AddUnreadExtraBody(model string, opts CallOptions, reason string) { extraBody := ExtraBody(opts) From 0bca786a59318eca87faf58efeb7a66992bec5da Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 12 Sep 2026 00:03:42 +0300 Subject: [PATCH 459/618] fix(anthropic): let the legacy path answer for what it drops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The text-completions path carries the prompt, the answer limit, the stop words and two sampling values; every other option the caller set went nowhere, and the path reported none of it — the same call gave three warnings on the messages path and silence here. It also skipped the effort check, so an effort no door records reached the network instead of failing before it. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 7 +++ .../legacy_completions_warning_test.go | 62 +++++++++++++++++++ llms/anthropic/sampling_warnings.go | 34 ++++++++++ 3 files changed, 103 insertions(+) create mode 100644 llms/anthropic/legacy_completions_warning_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 4af415f28..3b173f9af 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -124,6 +124,9 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten } func generateCompletionsContent(ctx context.Context, o *LLM, messages []llms.MessageContent, opts *llms.CallOptions) (*llms.ContentResponse, error) { //nolint:lll + if err := opts.ValidateReasoning(); err != nil { + return nil, err + } if len(messages) == 0 || len(messages[0].Parts) == 0 { return nil, ErrEmptyResponse } @@ -149,6 +152,9 @@ func generateCompletionsContent(ctx context.Context, o *LLM, messages []llms.Mes return nil, fmt.Errorf("anthropic: failed to create completion: %w", err) } + warn := &llms.Warnings{} + reportAnthropicCompletions(warn, o.client.EffectiveModel(opts.GetModel()), *opts) + resp := &llms.ContentResponse{ Choices: []*llms.ContentChoice{ { @@ -157,6 +163,7 @@ func generateCompletionsContent(ctx context.Context, o *LLM, messages []llms.Mes Truncated: llms.IsTruncated(result.StopReason), }, }, + Warnings: warn.List(), } if err := llms.CheckTruncation(resp, *opts); err != nil { return resp, err diff --git a/llms/anthropic/legacy_completions_warning_test.go b/llms/anthropic/legacy_completions_warning_test.go new file mode 100644 index 000000000..0e09007c9 --- /dev/null +++ b/llms/anthropic/legacy_completions_warning_test.go @@ -0,0 +1,62 @@ +package anthropic_test + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" +) + +func legacyCompletionsLLM(t *testing.T) *anthropic.LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"completion":"ok","stop_reason":"stop_sequence"}`) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New( + anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), + anthropic.WithModel("claude-2.1"), + anthropic.WithLegacyTextCompletionsAPI(), + ) + require.NoError(t, err) + return llm +} + +func TestTheLegacyAnthropicPathReportsWhatItCannotCarry(t *testing.T) { + t.Parallel() + + resp, err := legacyCompletionsLLM(t).GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithTopK(40), llms.WithSeed(7), llms.WithN(2), + llms.WithJSONMode(), llms.WithReasoning(llms.ReasoningHigh, 0), + llms.WithTools([]llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{Name: "f"}}}), + ) + require.NoError(t, err) + + got := warningsByOption(resp.Warnings) + for _, option := range []string{ + "WithTopK", "WithSeed", "WithN", "WithJSONMode", "WithReasoning", "WithTools", + } { + require.Contains(t, got, option, "the legacy request has no field for it: %v", resp.Warnings) + } +} + +func TestTheLegacyAnthropicPathRefusesAnEffortItCannotName(t *testing.T) { + t.Parallel() + + _, err := legacyCompletionsLLM(t).GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning("enormous", 0)) + + require.Error(t, err, "an effort no door records must not reach the network") +} diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 6e497577d..8bb48e4f3 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -125,3 +125,37 @@ func anthropicSamplingReason(model string, thinking *anthropicclient.ThinkingPay } const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" + +func reportAnthropicCompletions(warn *llms.Warnings, model string, opts llms.CallOptions) { + const unread = "the legacy text-completions request has no field for it" + + warn.AddUnreadExtraBody(model, opts, extraBodyUnread) + warn.AddUnreadOptions(model, opts, unread) + + drop := func(option, asked string) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: option, Model: model, + Asked: asked, Reason: unread, + }) + } + if len(opts.Tools) > 0 { + drop("WithTools", strconv.Itoa(len(opts.Tools))+" tools") + } + if kind, name := llms.ClassifyToolChoice(opts.ToolChoice); kind != llms.ToolChoiceUnset { + asked := name + if asked == "" { + asked = kind.String() + } + drop("WithToolChoice", asked) + } + if opts.StructuredOutput != nil { + drop("WithStructuredOutput", opts.StructuredOutput.Name) + } + if cfg := opts.Reasoning; cfg != nil && cfg.ResolveMode() != llms.ReasoningDefault { + asked := string(cfg.GetEffort(opts.GetMaxTokens())) + if cfg.HasExplicitTokens() { + asked = strconv.Itoa(cfg.Tokens) + " tokens" + } + drop("WithReasoning", asked) + } +} From bfc8decf392a0705c0bd3e834da5987719c89d2b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 12 Sep 2026 00:05:41 +0300 Subject: [PATCH 460/618] fix(bedrock): report the answer limit the legacy payload named for the caller Every legacy payload has to carry a limit, so a caller who names a non-positive one gets a number the door chose: 2048 on Claude, 20 on the older Cohere models, 512 elsewhere. That number went to the vendor unannounced, while the same call on Converse simply leaves the field off. The substitution is now reported at the one place the limit is decided, so no payload can add itself and stay quiet. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient.go | 25 +++++++-- .../internal/bedrockclient/provider_ai21.go | 10 ++-- .../internal/bedrockclient/provider_amazon.go | 3 +- .../bedrockclient/provider_anthropic.go | 2 +- .../internal/bedrockclient/provider_cohere.go | 8 +-- .../bedrockclient/provider_deepseek.go | 3 +- .../internal/bedrockclient/provider_meta.go | 3 +- .../bedrock/legacy_max_tokens_warning_test.go | 51 +++++++++++++++++++ 8 files changed, 88 insertions(+), 17 deletions(-) create mode 100644 llms/bedrock/legacy_max_tokens_warning_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient.go b/llms/bedrock/internal/bedrockclient/bedrockclient.go index c78217a7e..a1be984c3 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient.go @@ -3,6 +3,7 @@ package bedrockclient import ( "context" "errors" + "strconv" "strings" "github.com/vxcontrol/langchaingo/llms" @@ -127,19 +128,19 @@ func (c *Client) CreateCompletion(ctx context.Context, ) switch provider { case "ai21": - resp, err = createAi21Completion(ctx, c.client, modelID, messages, options) + resp, err = createAi21Completion(ctx, c.client, modelID, messages, options, warn) case "amazon": - resp, err = createAmazonCompletion(ctx, c.client, modelID, messages, options) + resp, err = createAmazonCompletion(ctx, c.client, modelID, messages, options, warn) case "nova": resp, err = createNovaCompletion(ctx, c.client, modelID, messages, options, warn) case "anthropic": resp, err = createAnthropicCompletion(ctx, c.client, modelID, messages, options, warn) case "cohere": - resp, err = createCohereCompletion(ctx, c.client, modelID, messages, options) + resp, err = createCohereCompletion(ctx, c.client, modelID, messages, options, warn) case "meta": - resp, err = createMetaCompletion(ctx, c.client, modelID, messages, options) + resp, err = createMetaCompletion(ctx, c.client, modelID, messages, options, warn) case "deepseek": - resp, err = createDeepSeekCompletion(ctx, c.client, modelID, messages, options) + resp, err = createDeepSeekCompletion(ctx, c.client, modelID, messages, options, warn) default: return nil, errors.New("unsupported provider") } @@ -180,6 +181,20 @@ func IsCohereCommandR(modelID string) bool { return strings.Contains(modelID, "command-r") } +func maxTokensOnTheWire( + warn *llms.Warnings, modelID string, options llms.CallOptions, defaultValue int, +) int { + sent := getMaxTokens(options.GetMaxTokens(), defaultValue) + if asked := options.MaxTokens; asked != nil && *asked <= 0 && sent != *asked { + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithMaxTokens", Model: modelID, + Asked: strconv.Itoa(*asked), Sent: strconv.Itoa(sent), + Reason: "the legacy payload has to name an answer limit, so the door named one", + }) + } + return sent +} + func getMaxTokens(maxTokens, defaultValue int) int { if maxTokens <= 0 { return defaultValue diff --git a/llms/bedrock/internal/bedrockclient/provider_ai21.go b/llms/bedrock/internal/bedrockclient/provider_ai21.go index e07f785e8..5d771d97f 100644 --- a/llms/bedrock/internal/bedrockclient/provider_ai21.go +++ b/llms/bedrock/internal/bedrockclient/provider_ai21.go @@ -152,10 +152,10 @@ func getAi21Role(role llms.ChatMessageType) (string, error) { } } -func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, modelID string, messages []Message, options llms.CallOptions) (*llms.ContentResponse, error) { +func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, modelID string, messages []Message, options llms.CallOptions, warn *llms.Warnings) (*llms.ContentResponse, error) { // Check if this is a Jamba model (use messages API) if IsAi21Jamba(modelID) { - return createAi21JambaCompletion(ctx, client, modelID, messages, options) + return createAi21JambaCompletion(ctx, client, modelID, messages, options, warn) } // Legacy J2 models (use prompt API) @@ -164,7 +164,7 @@ func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, mo Prompt: txt, Temperature: options.GetTemperature(), TopP: options.GetTopP(), - MaxTokens: getMaxTokens(options.GetMaxTokens(), 2048), + MaxTokens: maxTokensOnTheWire(warn, modelID, options, 2048), StopSequences: options.StopWords, CountPenalty: struct { Scale float64 `json:"scale"` @@ -232,7 +232,7 @@ func createAi21Completion(ctx context.Context, client *bedrockruntime.Client, mo return &llms.ContentResponse{Choices: choices}, nil } -func createAi21JambaCompletion(ctx context.Context, client *bedrockruntime.Client, modelID string, messages []Message, options llms.CallOptions) (*llms.ContentResponse, error) { +func createAi21JambaCompletion(ctx context.Context, client *bedrockruntime.Client, modelID string, messages []Message, options llms.CallOptions, warn *llms.Warnings) (*llms.ContentResponse, error) { jambaMessages := make([]struct { Role string `json:"role"` Content string `json:"content"` @@ -249,7 +249,7 @@ func createAi21JambaCompletion(ctx context.Context, client *bedrockruntime.Clien inputContent := ai21JambaInput{ Messages: jambaMessages, - MaxTokens: getMaxTokens(options.GetMaxTokens(), 4096), + MaxTokens: maxTokensOnTheWire(warn, modelID, options, 4096), Temperature: options.GetTemperature(), TopP: options.GetTopP(), Stop: options.StopWords, diff --git a/llms/bedrock/internal/bedrockclient/provider_amazon.go b/llms/bedrock/internal/bedrockclient/provider_amazon.go index bfb70b7b4..203818209 100644 --- a/llms/bedrock/internal/bedrockclient/provider_amazon.go +++ b/llms/bedrock/internal/bedrockclient/provider_amazon.go @@ -76,13 +76,14 @@ func createAmazonCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { txt := processInputMessagesGeneric(messages) inputContent := amazonTextGenerationInput{ InputText: txt, TextGenerationConfig: amazonTextGenerationConfigInput{ - MaxTokens: getMaxTokens(options.GetMaxTokens(), 512), + MaxTokens: maxTokensOnTheWire(warn, modelID, options, 512), TopP: options.GetTopP(), Temperature: options.GetTemperature(), StopSequences: options.StopWords, diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 96d9650c5..8c6960de5 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -246,7 +246,7 @@ func createAnthropicCompletion(ctx context.Context, system = systemPrompt } - maxTokens := getMaxTokens(options.GetMaxTokens(), 2048) + maxTokens := maxTokensOnTheWire(warn, modelID, options, 2048) input := anthropicTextGenerationInput{ AnthropicVersion: AnthropicLatestVersion, MaxTokens: maxTokens, diff --git a/llms/bedrock/internal/bedrockclient/provider_cohere.go b/llms/bedrock/internal/bedrockclient/provider_cohere.go index 9c7f8f0f2..0e132e06b 100644 --- a/llms/bedrock/internal/bedrockclient/provider_cohere.go +++ b/llms/bedrock/internal/bedrockclient/provider_cohere.go @@ -123,10 +123,11 @@ func createCohereCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { // Check if this is a Command R model if IsCohereCommandR(modelID) { - return createCohereCommandRCompletion(ctx, client, modelID, messages, options) + return createCohereCommandRCompletion(ctx, client, modelID, messages, options, warn) } // Legacy models (command-text-v14, command-light-text-v14) @@ -137,7 +138,7 @@ func createCohereCompletion(ctx context.Context, Temperature: options.GetTemperature(), P: options.GetTopP(), K: options.GetTopK(), - MaxTokens: getMaxTokens(options.GetMaxTokens(), 20), + MaxTokens: maxTokensOnTheWire(warn, modelID, options, 20), StopSequences: options.StopWords, NumGenerations: options.GetCandidateCount(), } @@ -199,6 +200,7 @@ func createCohereCommandRCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { // Convert messages to Cohere format var currentMessage string @@ -233,7 +235,7 @@ func createCohereCommandRCompletion(ctx context.Context, input := &cohereCommandRInput{ Message: currentMessage, ChatHistory: chatHistory, - MaxTokens: getMaxTokens(options.GetMaxTokens(), 512), + MaxTokens: maxTokensOnTheWire(warn, modelID, options, 512), Temperature: options.GetTemperature(), P: options.GetTopP(), K: options.GetTopK(), diff --git a/llms/bedrock/internal/bedrockclient/provider_deepseek.go b/llms/bedrock/internal/bedrockclient/provider_deepseek.go index c3b0e2f0b..7673f0d99 100644 --- a/llms/bedrock/internal/bedrockclient/provider_deepseek.go +++ b/llms/bedrock/internal/bedrockclient/provider_deepseek.go @@ -42,6 +42,7 @@ func createDeepSeekCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { // Format prompt with DeepSeek-R1 required formatting prompt := formatDeepSeekPrompt(messages) @@ -50,7 +51,7 @@ func createDeepSeekCompletion(ctx context.Context, Prompt: prompt, Temperature: options.GetTemperature(), TopP: options.GetTopP(), - MaxTokens: getMaxTokens(options.GetMaxTokens(), 512), + MaxTokens: maxTokensOnTheWire(warn, modelID, options, 512), Stop: options.StopWords, } diff --git a/llms/bedrock/internal/bedrockclient/provider_meta.go b/llms/bedrock/internal/bedrockclient/provider_meta.go index 646f09a27..0ada34a0d 100644 --- a/llms/bedrock/internal/bedrockclient/provider_meta.go +++ b/llms/bedrock/internal/bedrockclient/provider_meta.go @@ -69,6 +69,7 @@ func createMetaCompletion(ctx context.Context, modelID string, messages []Message, options llms.CallOptions, + warn *llms.Warnings, ) (*llms.ContentResponse, error) { txt := processInputMessagesGeneric(messages) @@ -76,7 +77,7 @@ func createMetaCompletion(ctx context.Context, Prompt: txt, Temperature: options.GetTemperature(), TopP: options.GetTopP(), - MaxGenLen: getMaxTokens(options.GetMaxTokens(), 512), + MaxGenLen: maxTokensOnTheWire(warn, modelID, options, 512), } body, err := json.Marshal(input) diff --git a/llms/bedrock/legacy_max_tokens_warning_test.go b/llms/bedrock/legacy_max_tokens_warning_test.go new file mode 100644 index 000000000..fa534d899 --- /dev/null +++ b/llms/bedrock/legacy_max_tokens_warning_test.go @@ -0,0 +1,51 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestAnAnswerLimitTheLegacyDoorNamedItselfIsReported(t *testing.T) { + t.Parallel() + + const cohereAnswer = `{"generations":[{"text":"ok","finish_reason":"COMPLETE"}]}` + + for _, payload := range []struct { + name string + model string + answer string + sent string + }{ + {"anthropic", "anthropic.claude-sonnet-4-5-v1:0", legacyAnswer, "2048"}, + {"cohere", "cohere.command-text-v14", cohereAnswer, "20"}, + } { + t.Run(payload.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, payload.answer, + []bedrock.Option{bedrock.WithModel(payload.model)}, + llms.WithMaxTokens(0)) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithMaxTokens"] + require.True(t, ok, "the door named a limit the caller did not: %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "0", w.Asked) + require.Equal(t, payload.sent, w.Sent) + }) + } +} + +func TestALimitTheLegacyDoorCarriesAsAskedIsNotReported(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, legacyAnswer, + []bedrock.Option{bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0")}, + llms.WithMaxTokens(1024)) + + require.NotContains(t, bedrockWarningsByOption(resp.Warnings), "WithMaxTokens", + "the limit travelled as asked: %v", resp.Warnings) +} From 9228f48ddd84f8bce759788fb20e4e8a5c64a059 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 12 Sep 2026 00:11:42 +0300 Subject: [PATCH 461/618] fix(llms): tell the caller what became of an effort on a budget model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A model that takes a thinking budget and no effort field left the effort unreported: the reporter returned as soon as any thinking reached the wire. The obvious repair — call a missing effort field a loss — would be false in the common case, where the effort travelled as the budget. So the two are now separate: an effort an explicitly named budget overrode is a loss, an effort that became the budget is a substitution, and a request that settles no depth stays silent because the vendor really does choose. Co-Authored-By: Claude Opus 5 --- llms/anthropic/effort_as_budget_test.go | 36 ++++++++ llms/anthropic/sampling_warnings.go | 27 +++++- llms/anthropic/sampling_warnings_test.go | 24 ++++-- llms/bedrock/effort_as_budget_test.go | 83 +++++++++++++++++++ .../bedrockclient/converse_warnings.go | 3 +- .../internal/bedrockclient/warnings.go | 34 +++++++- 6 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 llms/anthropic/effort_as_budget_test.go create mode 100644 llms/bedrock/effort_as_budget_test.go diff --git a/llms/anthropic/effort_as_budget_test.go b/llms/anthropic/effort_as_budget_test.go new file mode 100644 index 000000000..e908be0b8 --- /dev/null +++ b/llms/anthropic/effort_as_budget_test.go @@ -0,0 +1,36 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestAnEffortThatTravelledAsTheBudgetIsCalledASubstitution(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningMedium, 0)) + + found := warningsFor(resp.Warnings, "WithReasoning") + require.Len(t, found, 1, "one warning for one ask: %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, found[0].Kind) + require.Equal(t, "medium", found[0].Asked) + require.Contains(t, found[0].Sent, "tokens") +} + +func TestAnEffortAnExplicitBudgetOverrodeIsCalledALoss(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningMedium, 2048)) + + var dropped *llms.Warning + for _, w := range warningsFor(resp.Warnings, "WithReasoning") { + if w.Kind == llms.WarningDrop { + dropped = &w + } + } + require.NotNil(t, dropped, "the effort went nowhere unreported: %v", resp.Warnings) + require.Equal(t, "medium", dropped.Asked) +} diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 8bb48e4f3..294fe7fc3 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -29,9 +29,13 @@ func reportAnthropicEffort( if outputConfig != nil { sent = outputConfig.Effort } + sentBudget := 0 + if thinking != nil { + sentBudget = thinking.Budget + } switch { case sent == "" && thinking != nil: - return + reportAnthropicEffortAsBudget(warn, model, asked, cfg, sentBudget) case sent == "": warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, @@ -46,6 +50,27 @@ func reportAnthropicEffort( } } +func reportAnthropicEffortAsBudget( + warn *llms.Warnings, model, asked string, cfg *llms.ReasoningConfig, sentBudget int, +) { + if sentBudget <= 0 { + return + } + if cfg.HasExplicitTokens() { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: model, + Asked: asked, + Reason: "the door sends the budget this model takes and has no field for the effort", + }) + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: model, + Asked: asked, Sent: strconv.Itoa(sentBudget) + " tokens", + Reason: "the door turns the effort into the thinking budget this model takes", + }) +} + func reportAnthropicMechanism(warn *llms.Warnings, model string, opts llms.CallOptions, thinking *anthropicclient.ThinkingPayload) { cfg := opts.Reasoning if cfg == nil || !cfg.Adaptive || thinking == nil || thinking.Type == "adaptive" { diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index 27d1374a8..964f77504 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -54,6 +54,16 @@ func warningsByOption(warnings []llms.Warning) map[string]llms.Warning { return byOption } +func warningsFor(warnings []llms.Warning, option string) []llms.Warning { + var found []llms.Warning + for _, w := range warnings { + if w.Option == option { + found = append(found, w) + } + } + return found +} + func TestThinkingTakesTheSamplingParamsAndSaysSo(t *testing.T) { t.Parallel() @@ -139,11 +149,15 @@ func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { resp := generateForWarnings(t, llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningMedium, 30000)) - w, ok := warningsByOption(resp.Warnings)["WithReasoning"] - require.True(t, ok, "no reasoning warning in %v", resp.Warnings) - require.Equal(t, llms.WarningClamp, w.Kind) - require.Equal(t, "30000 tokens", w.Asked) - require.NotEqual(t, w.Asked, w.Sent) + var clamp *llms.Warning + for _, w := range warningsFor(resp.Warnings, "WithReasoning") { + if w.Kind == llms.WarningClamp { + clamp = &w + } + } + require.NotNil(t, clamp, "no budget clamp in %v", resp.Warnings) + require.Equal(t, "30000 tokens", clamp.Asked) + require.NotEqual(t, clamp.Asked, clamp.Sent) } func TestAThinkingMechanismTheModelDoesNotOfferIsReported(t *testing.T) { diff --git a/llms/bedrock/effort_as_budget_test.go b/llms/bedrock/effort_as_budget_test.go new file mode 100644 index 000000000..6705c09e5 --- /dev/null +++ b/llms/bedrock/effort_as_budget_test.go @@ -0,0 +1,83 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func bedrockWarningsFound(warnings []llms.Warning, option string) []llms.Warning { + var found []llms.Warning + for _, w := range warnings { + if w.Option == option { + found = append(found, w) + } + } + return found +} + +func TestBothBedrockDoorsCallTheEffortTurnedIntoABudgetASubstitution(t *testing.T) { + t.Parallel() + + for _, door := range []struct { + name string + answer string + opts []bedrock.Option + }{ + {"legacy", legacyAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), + }}, + {"converse", converseAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, door.answer, door.opts, + llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningMedium, 0)) + + found := bedrockWarningsFound(resp.Warnings, "WithReasoning") + require.Len(t, found, 1, "one warning for one ask: %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, found[0].Kind) + require.Equal(t, "medium", found[0].Asked) + require.Contains(t, found[0].Sent, "tokens") + }) + } +} + +func TestBothBedrockDoorsCallTheEffortAnExplicitBudgetOverrodeALoss(t *testing.T) { + t.Parallel() + + for _, door := range []struct { + name string + answer string + opts []bedrock.Option + }{ + {"legacy", legacyAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), + }}, + {"converse", converseAnswer, []bedrock.Option{ + bedrock.WithModel("anthropic.claude-sonnet-4-5-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, door.answer, door.opts, + llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningMedium, 2048)) + + var dropped *llms.Warning + for _, w := range bedrockWarningsFound(resp.Warnings, "WithReasoning") { + if w.Kind == llms.WarningDrop { + dropped = &w + } + } + require.NotNil(t, dropped, "the effort went nowhere unreported: %v", resp.Warnings) + require.Equal(t, "medium", dropped.Asked) + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index c546f220d..e3ac4a5e8 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -68,7 +68,8 @@ func reportConverseInput(warn *llms.Warnings, input *ConverseInput, built *bedro } if cfg := input.ReasoningConfig; cfg != nil && cfg.Effort != "" && cfg.Effort != llms.ReasoningNone { sent, thinkingSent := converseEffortOnTheWire(built) - reportEffortClamp(warn, model, string(cfg.Effort), sent, thinkingSent) + reportEffortClamp(warn, model, string(cfg.Effort), sent, thinkingSent, + cfg, converseThinkingBudget(built)) } choice, _ := llms.ClassifyToolChoice(input.ToolChoice) if choice == llms.ToolChoiceNone && diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index b7ba9b150..e89cf0f70 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -91,7 +91,11 @@ func reportLegacyAnthropic( if input.OutputConfig != nil { sent = input.OutputConfig.Effort } - reportEffortClamp(warn, modelID, string(cfg.Effort), sent, input.Thinking != nil) + sentBudget := 0 + if input.Thinking != nil { + sentBudget = input.Thinking.BudgetTokens + } + reportEffortClamp(warn, modelID, string(cfg.Effort), sent, input.Thinking != nil, cfg, sentBudget) } if input.Thinking != nil { reportMechanismSwap(warn, modelID, options.Reasoning, input.Thinking.Type) @@ -162,10 +166,13 @@ func reportThinkingBudget(warn *llms.Warnings, modelID string, asked, sent int) }) } -func reportEffortClamp(warn *llms.Warnings, modelID, asked, sent string, thinkingSent bool) { +func reportEffortClamp( + warn *llms.Warnings, modelID, asked, sent string, + thinkingSent bool, cfg *llms.ReasoningConfig, sentBudget int, +) { switch { case sent == "" && thinkingSent: - return + reportEffortAsBudget(warn, modelID, asked, cfg, sentBudget) case sent == "": warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithReasoning", Model: modelID, @@ -180,6 +187,27 @@ func reportEffortClamp(warn *llms.Warnings, modelID, asked, sent string, thinkin } } +func reportEffortAsBudget( + warn *llms.Warnings, modelID, asked string, cfg *llms.ReasoningConfig, sentBudget int, +) { + if sentBudget <= 0 { + return + } + if cfg != nil && cfg.HasExplicitTokens() { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithReasoning", Model: modelID, + Asked: asked, + Reason: "the door sends the budget this model takes and has no field for the effort", + }) + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithReasoning", Model: modelID, + Asked: asked, Sent: strconv.Itoa(sentBudget) + " tokens", + Reason: "the door turns the effort into the thinking budget this model takes", + }) +} + func reportMechanismSwap(warn *llms.Warnings, modelID string, cfg *llms.ReasoningConfig, sentType string) { if cfg == nil || !cfg.Adaptive || sentType == "" || sentType == "adaptive" { return From f49402b1a36d75eb100371d1ba0534d6770ddb5c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 12 Sep 2026 00:26:00 +0300 Subject: [PATCH 462/618] fix(llms): say each lost option once The shared catalogue reported two options a door was already reporting itself: ollama named min-p twice with two different reasons, huggingface named logprobs twice with the same one. A caller reading the list cannot tell a repeat from two separate losses, and the by-option maps the tests use hide it. The door now either names the option in its carried list and speaks for it alone, or leaves it to the catalogue. Co-Authored-By: Claude Opus 5 --- llms/huggingface/warnings.go | 3 --- llms/huggingface/warnings_test.go | 19 +++++++++++++++++++ llms/ollama/warnings.go | 2 +- llms/ollama/warnings_test.go | 19 +++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/llms/huggingface/warnings.go b/llms/huggingface/warnings.go index 5ab1f3e8e..e83fffb5f 100644 --- a/llms/huggingface/warnings.go +++ b/llms/huggingface/warnings.go @@ -28,9 +28,6 @@ func reportHuggingFaceOptions( } func reportHuggingFaceShapedOptions(opts *llms.CallOptions, drop func(option, asked string)) { - if opts.LogProbs != nil && *opts.LogProbs { - drop("WithLogProbs", "true") - } if len(opts.StopWords) > 0 { drop("WithStopWords", strconv.Itoa(len(opts.StopWords))+" words") } diff --git a/llms/huggingface/warnings_test.go b/llms/huggingface/warnings_test.go index f0e0182ca..b2546a8e8 100644 --- a/llms/huggingface/warnings_test.go +++ b/llms/huggingface/warnings_test.go @@ -114,3 +114,22 @@ func TestExtraBodyThisDoorCannotMergeIsReported(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "chat_template_kwargs, enable_thinking", w.Asked) } + +func TestTheHuggingFaceDoorReportsEachOptionOnce(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithLogProbs(true), llms.WithMinP(0.05), llms.WithTopK(40), + llms.WithN(2), llms.WithCandidateCount(3), llms.WithTopLogProbs(5), + llms.WithMinLength(10), llms.WithMaxLength(20), llms.WithJSONMode()) + + seen := make(map[string]int, len(resp.Warnings)) + for _, w := range resp.Warnings { + seen[w.Option]++ + } + for option, count := range seen { + require.Equal(t, 1, count, "%s reported %d times: %v", option, count, resp.Warnings) + } + require.Contains(t, seen, "WithLogProbs", "the door builds no logprobs field") +} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 47840157c..21a3a5b02 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -23,7 +23,7 @@ func reportOllamaOptions(warn *llms.Warnings, model string, opts llms.CallOption warn.AddUnreadOptions(model, opts, unread, "WithRepetitionPenalty", "WithFrequencyPenalty", "WithPresencePenalty", - "WithTopK", "WithSeed", "WithJSONMode") + "WithTopK", "WithSeed", "WithJSONMode", "WithMinP") if opts.MinP != nil && *opts.MinP != 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithMinP", Model: model, diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 898690503..6cd270287 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -142,3 +142,22 @@ func TestMetadataSetAfterExtraBodyStillReportsTheLoss(t *testing.T) { require.Equal(t, llms.WarningDrop, w.Kind) require.Equal(t, "enable_thinking", w.Asked) } + +func TestTheOllamaDoorReportsEachOptionOnce(t *testing.T) { + t.Parallel() + + resp := generateForWarnings(t, + llms.WithMinP(0.05), llms.WithN(2), llms.WithCandidateCount(3), + llms.WithLogProbs(true), llms.WithTopLogProbs(5), + llms.WithMinLength(10), llms.WithMaxLength(20), + llms.WithVerbosity("low"), llms.WithResponseMIMEType("application/json")) + + seen := make(map[string]int, len(resp.Warnings)) + for _, w := range resp.Warnings { + seen[w.Option]++ + } + for option, count := range seen { + require.Equal(t, 1, count, "%s reported %d times: %v", option, count, resp.Warnings) + } + require.Contains(t, seen, "WithMinP", "the door sends only the client's min-p") +} From 16cbeece78105683ab99bac595a38739614da0c0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sat, 12 Sep 2026 00:39:46 +0300 Subject: [PATCH 463/618] fix(llms): close three silences the parity work left behind MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Claude the legacy bedrock payload cannot make think dropped the whole request to think without a word, because the payload was asked whose provider it was rather than whether anything reached the wire. The legacy Nova payload picked an effort where the caller asked the model to choose, and only the converse leg said so. And the legacy anthropic path sends the first part of the first message as the entire prompt, throwing the rest away in silence — the huggingface door has the same limit and has always reported it. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 4 +- .../anthropic/legacy_messages_warning_test.go | 36 ++++++++++++ llms/anthropic/sampling_warnings.go | 15 +++++ .../internal/bedrockclient/warnings.go | 7 +++ llms/bedrock/legacy_thinking_parity_test.go | 56 +++++++++++++++++++ 5 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/legacy_messages_warning_test.go create mode 100644 llms/bedrock/legacy_thinking_parity_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 3b173f9af..764aee6c5 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -153,7 +153,9 @@ func generateCompletionsContent(ctx context.Context, o *LLM, messages []llms.Mes } warn := &llms.Warnings{} - reportAnthropicCompletions(warn, o.client.EffectiveModel(opts.GetModel()), *opts) + completionsModel := o.client.EffectiveModel(opts.GetModel()) + reportAnthropicCompletions(warn, completionsModel, *opts) + reportAnthropicCompletionsMessages(warn, completionsModel, messages) resp := &llms.ContentResponse{ Choices: []*llms.ContentChoice{ diff --git a/llms/anthropic/legacy_messages_warning_test.go b/llms/anthropic/legacy_messages_warning_test.go new file mode 100644 index 000000000..3f15d7fe3 --- /dev/null +++ b/llms/anthropic/legacy_messages_warning_test.go @@ -0,0 +1,36 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestTheLegacyAnthropicPathReportsTheMessagesItThrowsAway(t *testing.T) { + t.Parallel() + + resp, err := legacyCompletionsLLM(t).GenerateContent(t.Context(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "one", "two"), + llms.TextParts(llms.ChatMessageTypeHuman, "three"), + }) + require.NoError(t, err) + + w, ok := warningsByOption(resp.Warnings)["messages"] + require.True(t, ok, "two of three parts went nowhere unreported: %v", resp.Warnings) + require.Equal(t, llms.WarningClamp, w.Kind) + require.Equal(t, "3 parts", w.Asked) + require.Equal(t, "1 part", w.Sent) +} + +func TestASingleMessagePartOnTheLegacyPathIsNotReported(t *testing.T) { + t.Parallel() + + resp, err := legacyCompletionsLLM(t).GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "one")}) + require.NoError(t, err) + + require.NotContains(t, warningsByOption(resp.Warnings), "messages", + "the whole prompt travelled: %v", resp.Warnings) +} diff --git a/llms/anthropic/sampling_warnings.go b/llms/anthropic/sampling_warnings.go index 294fe7fc3..92ec670e4 100644 --- a/llms/anthropic/sampling_warnings.go +++ b/llms/anthropic/sampling_warnings.go @@ -151,6 +151,21 @@ func anthropicSamplingReason(model string, thinking *anthropicclient.ThinkingPay const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" +func reportAnthropicCompletionsMessages(warn *llms.Warnings, model string, messages []llms.MessageContent) { + total := 0 + for _, m := range messages { + total += len(m.Parts) + } + if total <= 1 { + return + } + warn.Add(llms.Warning{ + Kind: llms.WarningClamp, Option: "messages", Model: model, + Asked: strconv.Itoa(total) + " parts", Sent: "1 part", + Reason: "the legacy path sends the first part of the first message as the whole prompt", + }) +} + func reportAnthropicCompletions(warn *llms.Warnings, model string, opts llms.CallOptions) { const unread = "the legacy text-completions request has no field for it" diff --git a/llms/bedrock/internal/bedrockclient/warnings.go b/llms/bedrock/internal/bedrockclient/warnings.go index e89cf0f70..932dd98d1 100644 --- a/llms/bedrock/internal/bedrockclient/warnings.go +++ b/llms/bedrock/internal/bedrockclient/warnings.go @@ -107,6 +107,10 @@ func reportLegacyAnthropic( } reportThinkingBudget(warn, modelID, cfg.Tokens, sent) } + if cfg := options.Reasoning; cfg.ResolveMode() == llms.ReasoningOn && input.Thinking == nil && + cfg.Effort == "" && !cfg.HasExplicitTokens() { + reportThinkingUnsupported(warn, modelID, cfg) + } if len(options.StopWords) > 0 && len(input.StopSequences) == 0 { warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithStopWords", Model: modelID, @@ -229,6 +233,9 @@ func reportNovaReasoning(warn *llms.Warnings, modelID string, options llms.CallO Reason: "nova takes a reasoning effort, so a token budget has nowhere to go", }) } + if effort != "" { + reportMechanismSwap(warn, modelID, options.Reasoning, "effort") + } if !reasoning.NovaClearsInferenceConfigAt(effort) { return } diff --git a/llms/bedrock/legacy_thinking_parity_test.go b/llms/bedrock/legacy_thinking_parity_test.go new file mode 100644 index 000000000..090ca6d6f --- /dev/null +++ b/llms/bedrock/legacy_thinking_parity_test.go @@ -0,0 +1,56 @@ +package bedrock_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestAClaudeThatCannotThinkSaysSoOnTheLegacyDoor(t *testing.T) { + t.Parallel() + + resp := bedrockWarningsFor(t, legacyAnswer, + []bedrock.Option{bedrock.WithModel("anthropic.claude-instant-v1")}, + llms.WithAdaptiveReasoning("")) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithReasoning"] + require.True(t, ok, "the ask to think went nowhere unreported: %v", resp.Warnings) + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "thinking", w.Asked) +} + +func TestBothNovaDoorsReportTheMechanismTheyPicked(t *testing.T) { + t.Parallel() + + const novaAnswer = `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},` + + `"stopReason":"end_turn","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` + + for _, door := range []struct { + name string + opts []bedrock.Option + }{ + {"legacy", []bedrock.Option{bedrock.WithModel("amazon.nova-2-lite-v1:0")}}, + {"converse", []bedrock.Option{ + bedrock.WithModel("amazon.nova-2-lite-v1:0"), bedrock.WithConverseAPI(), + }}, + } { + t.Run(door.name, func(t *testing.T) { + t.Parallel() + + answer := novaAnswer + if door.name == "converse" { + answer = converseAnswer + } + resp := bedrockWarningsFor(t, answer, door.opts, + llms.WithAdaptiveReasoning(llms.ReasoningHigh)) + + w, ok := bedrockWarningsByOption(resp.Warnings)["WithAdaptiveReasoning"] + require.True(t, ok, "the door picked the mechanism unreported: %v", resp.Warnings) + require.Equal(t, llms.WarningSubstitute, w.Kind) + require.Equal(t, "adaptive", w.Asked) + }) + } +} From 6f235af3bc9443a792f0b9eb63d78e1558a66715 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 10:02:03 +0300 Subject: [PATCH 464/618] feat(reasoning): hold every block of a response in its order, and read every stored shape A vendor answers with one or more reasoning blocks, each signed on its own, and wants them back unchanged and in the order it produced them. The type had room for one text and one signature, so the doors folded several blocks into one: texts joined under the last signature, or signatures joined byte by byte. ContentReasoning gains Blocks: each Block is readable text with its signature, or encrypted data, and counts the tool calls the vendor put ahead of it, so a door can return it to its place among them. Content keeps the readable text of every block and Signature stays the signature of a lone block, so callers that read those fields keep working; a lone plain block keeps the classic shape. Sequence, GroupByToolCalls and Collector give every door one way to read and place blocks. Stored reasoning written with a single encrypted block as one base64 string failed to decode, and a consumer that reads a whole chain lost the chain with it. The decoder now accepts that string, the array, and the block list. Co-Authored-By: Claude Opus 5 --- llms/reasoning/blocks.go | 90 +++++++++++++++++ llms/reasoning/blocks_test.go | 180 ++++++++++++++++++++++++++++++++++ llms/reasoning/reasoning.go | 46 ++++++++- llms/stored_reasoning_test.go | 73 ++++++++++++++ 4 files changed, 387 insertions(+), 2 deletions(-) create mode 100644 llms/reasoning/blocks.go create mode 100644 llms/reasoning/blocks_test.go create mode 100644 llms/stored_reasoning_test.go diff --git a/llms/reasoning/blocks.go b/llms/reasoning/blocks.go new file mode 100644 index 000000000..61811013d --- /dev/null +++ b/llms/reasoning/blocks.go @@ -0,0 +1,90 @@ +package reasoning + +import "strings" + +// Block is one reasoning block as the vendor produced it: readable text with the +// signature that covers it, or encrypted data, never both. +type Block struct { + Text string `json:"text,omitempty"` + Signature []byte `json:"signature,omitempty"` + Redacted []byte `json:"redacted,omitempty"` + + // AfterToolCalls counts the tool calls the vendor put ahead of this block in + // the same response. + AfterToolCalls int `json:"after_tool_calls,omitempty"` +} + +// FromBlocks builds the reasoning of one response. A lone plain block comes +// back as Content and Signature with no Blocks, so read blocks through Sequence. +func FromBlocks(blocks []Block) *ContentReasoning { + switch { + case len(blocks) == 0: + return nil + case len(blocks) == 1 && blocks[0].Redacted == nil && blocks[0].AfterToolCalls == 0: + return &ContentReasoning{Content: blocks[0].Text, Signature: blocks[0].Signature} + } + + var text strings.Builder + for _, block := range blocks { + text.WriteString(block.Text) + } + return &ContentReasoning{Content: text.String(), Blocks: blocks} +} + +func (r *ContentReasoning) Sequence() []Block { + if r == nil { + return nil + } + if len(r.Blocks) > 0 { + return r.Blocks + } + + var sequence []Block + if r.Content != "" || len(r.Signature) > 0 { + sequence = append(sequence, Block{Text: r.Content, Signature: r.Signature}) + } + for _, data := range r.Redacted { + sequence = append(sequence, Block{Redacted: data}) + } + return sequence +} + +// GroupByToolCalls splits blocks by where they sit in a turn with toolCalls +// tool calls: group 0 opens the turn and group i follows tool call i-1. A block +// placed past the turn's last tool call closes it. +func GroupByToolCalls(blocks []Block, toolCalls int) [][]Block { + groups := make([][]Block, toolCalls+1) + for _, block := range blocks { + at := min(max(block.AfterToolCalls, 0), toolCalls) + groups[at] = append(groups[at], block) + } + return groups +} + +// Collector gathers the reasoning blocks of one response in the vendor's order. +type Collector struct { + blocks []Block + toolCalls int +} + +func (c *Collector) Thought(text string, signature []byte) { + if text == "" && len(signature) == 0 { + return + } + c.blocks = append(c.blocks, Block{Text: text, Signature: signature, AfterToolCalls: c.toolCalls}) +} + +func (c *Collector) Encrypted(data []byte) { + if len(data) == 0 { + return + } + c.blocks = append(c.blocks, Block{Redacted: data, AfterToolCalls: c.toolCalls}) +} + +func (c *Collector) ToolCall() { + c.toolCalls++ +} + +func (c *Collector) Reasoning() *ContentReasoning { + return FromBlocks(c.blocks) +} diff --git a/llms/reasoning/blocks_test.go b/llms/reasoning/blocks_test.go new file mode 100644 index 000000000..98be4b21c --- /dev/null +++ b/llms/reasoning/blocks_test.go @@ -0,0 +1,180 @@ +package reasoning + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestALonePlainBlockKeepsTheClassicShape(t *testing.T) { + t.Parallel() + + got := FromBlocks([]Block{{Text: "step", Signature: []byte("sig")}}) + + require.NotNil(t, got) + assert.Equal(t, "step", got.Content) + assert.Equal(t, []byte("sig"), got.Signature) + assert.Empty(t, got.Blocks) + assert.Equal(t, []Block{{Text: "step", Signature: []byte("sig")}}, got.Sequence()) +} + +func TestEveryBlockKeepsItsOwnSignature(t *testing.T) { + t.Parallel() + + blocks := []Block{ + {Text: "first", Signature: []byte("s1")}, + {Text: "second", Signature: []byte("s2")}, + } + got := FromBlocks(blocks) + + require.NotNil(t, got) + assert.Equal(t, blocks, got.Sequence()) + assert.Equal(t, "firstsecond", got.Content, "Content mirrors the readable text of every block") + assert.Empty(t, got.Signature, "no single signature covers two blocks") +} + +func TestALoneBlockThatIsEncryptedOrPlacedStaysABlock(t *testing.T) { + t.Parallel() + + for name, block := range map[string]Block{ + "encrypted": {Redacted: []byte("opaque")}, + "after a tool call": {Text: "update", Signature: []byte("s"), AfterToolCalls: 1}, + "encrypted and placed": {Redacted: []byte("opaque"), AfterToolCalls: 2}, + } { + got := FromBlocks([]Block{block}) + require.NotNil(t, got, name) + assert.Equal(t, []Block{block}, got.Blocks, name) + assert.Empty(t, got.Signature, name) + } + assert.Nil(t, FromBlocks(nil)) +} + +func TestAHandBuiltReasoningIsOneBlock(t *testing.T) { + t.Parallel() + + assert.Equal(t, + []Block{{Text: "step", Signature: []byte("sig")}}, + (&ContentReasoning{Content: "step", Signature: []byte("sig")}).Sequence()) + assert.Equal(t, + []Block{{Signature: []byte("sig")}}, + (&ContentReasoning{Signature: []byte("sig")}).Sequence(), + "a signature with its text withheld is still a block to return") + assert.Equal(t, + []Block{{Text: "step", Signature: []byte("sig")}, {Redacted: []byte("r1")}, {Redacted: []byte("r2")}}, + (&ContentReasoning{Content: "step", Signature: []byte("sig"), Redacted: [][]byte{[]byte("r1"), []byte("r2")}}).Sequence()) + assert.Empty(t, (&ContentReasoning{}).Sequence()) + assert.Empty(t, (*ContentReasoning)(nil).Sequence()) +} + +func TestBlocksAloneAreSomethingToCarryBack(t *testing.T) { + t.Parallel() + + r := &ContentReasoning{Blocks: []Block{{Redacted: []byte("opaque")}, {Signature: []byte("s")}}} + + assert.False(t, r.IsEmpty()) + assert.False(t, r.HasContent()) + assert.Contains(t, r.String(), "Blocks: 2, 1 encrypted (6 bytes)") +} + +func TestBlocksGroupAfterTheToolCallsAheadOfThem(t *testing.T) { + t.Parallel() + + lead := Block{Text: "reasoning", Signature: []byte("s1")} + update := Block{Text: "update", Signature: []byte("s2")} + second := Block{Text: "between", Signature: []byte("s3"), AfterToolCalls: 1} + trailing := Block{Text: "cut off", Signature: []byte("s4"), AfterToolCalls: 2} + stray := Block{Text: "past the end", Signature: []byte("s5"), AfterToolCalls: 7} + negative := Block{Text: "before anything", Signature: []byte("s6"), AfterToolCalls: -1} + + groups := GroupByToolCalls([]Block{lead, update, second, trailing, stray, negative}, 2) + + require.Len(t, groups, 3) + assert.Equal(t, []Block{lead, update, negative}, groups[0]) + assert.Equal(t, []Block{second}, groups[1]) + assert.Equal(t, []Block{trailing, stray}, groups[2]) + assert.Equal(t, [][]Block{{lead, second}}, GroupByToolCalls([]Block{lead, second}, 0), + "with no tool calls every block opens the turn") +} + +func TestTheCollectorNotesTheToolCallsAheadOfEachBlock(t *testing.T) { + t.Parallel() + + var c Collector + c.Thought("reasoning", []byte("s1")) + c.Thought("", nil) + c.ToolCall() + c.Encrypted(nil) + c.Encrypted([]byte("opaque")) + c.Thought("", []byte("s2")) + c.ToolCall() + + got := c.Reasoning() + + require.NotNil(t, got) + assert.Equal(t, []Block{ + {Text: "reasoning", Signature: []byte("s1")}, + {Redacted: []byte("opaque"), AfterToolCalls: 1}, + {Signature: []byte("s2"), AfterToolCalls: 1}, + }, got.Sequence()) + assert.Nil(t, (&Collector{}).Reasoning()) +} + +func TestStoredReasoningReadsInEveryShapeItWasWrittenIn(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + stored string + want []Block + }{ + { + name: "content and signature", + stored: `{"content":"step","signature":"c2ln"}`, + want: []Block{{Text: "step", Signature: []byte("sig")}}, + }, + { + name: "one encrypted block as a string", + stored: `{"content":"step","signature":"c2ln","redacted":"cmVk"}`, + want: []Block{{Text: "step", Signature: []byte("sig")}, {Redacted: []byte("red")}}, + }, + { + name: "encrypted blocks as an array", + stored: `{"redacted":["cjE=","cjI="]}`, + want: []Block{{Redacted: []byte("r1")}, {Redacted: []byte("r2")}}, + }, + { + name: "an empty encrypted value", + stored: `{"content":"step","redacted":null}`, + want: []Block{{Text: "step"}}, + }, + { + name: "blocks", + stored: `{"content":"ab","blocks":[{"text":"a","signature":"czE="},{"redacted":"cmVk","after_tool_calls":1}]}`, + want: []Block{{Text: "a", Signature: []byte("s1")}, {Redacted: []byte("red"), AfterToolCalls: 1}}, + }, + } { + var got ContentReasoning + require.NoError(t, json.Unmarshal([]byte(tc.stored), &got), tc.name) + assert.Equal(t, tc.want, got.Sequence(), tc.name) + } +} + +func TestBlocksSurviveARoundTrip(t *testing.T) { + t.Parallel() + + sent := FromBlocks([]Block{ + {Text: "a", Signature: []byte("s1")}, + {Redacted: []byte("opaque")}, + {Signature: []byte("s2"), AfterToolCalls: 1}, + }) + + data, err := json.Marshal(sent) + require.NoError(t, err) + + var got ContentReasoning + require.NoError(t, json.Unmarshal(data, &got)) + assert.Equal(t, sent.Sequence(), got.Sequence()) + assert.Equal(t, sent.Content, got.Content) +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 6baf00976..d066c17d0 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -27,11 +27,15 @@ type ContentReasoning struct { // Redacted is reasoning the provider encrypted. It carries no readable text // and travels back to the vendor unchanged, one block per element. Redacted [][]byte `json:"redacted,omitempty"` + + // Blocks, when set, is what travels back to the vendor; Content then only + // mirrors their text. + Blocks []Block `json:"blocks,omitempty"` } // IsEmpty reports whether there is nothing to carry back into the next turn. func (r *ContentReasoning) IsEmpty() bool { - return r == nil || (r.Content == "" && len(r.Signature) == 0 && len(r.Redacted) == 0) + return r == nil || (r.Content == "" && len(r.Signature) == 0 && len(r.Redacted) == 0 && len(r.Blocks) == 0) } // HasContent reports whether the model actually reasoned. @@ -58,6 +62,16 @@ func (r *ContentReasoning) String() string { } fmt.Fprintf(&buf, "\nRedacted: %d blocks, %d bytes", len(r.Redacted), size) } + if len(r.Blocks) > 0 { + encrypted, size := 0, 0 + for _, block := range r.Blocks { + if block.Redacted != nil { + encrypted++ + size += len(block.Redacted) + } + } + fmt.Fprintf(&buf, "\nBlocks: %d, %d encrypted (%d bytes)", len(r.Blocks), encrypted, size) + } return buf.String() } @@ -75,10 +89,38 @@ func (r *ContentReasoning) UnmarshalJSON(data []byte) error { type Alias ContentReasoning aux := &struct { *Alias + Redacted json.RawMessage `json:"redacted,omitempty"` }{ Alias: (*Alias)(r), } - return json.Unmarshal(data, aux) + if err := json.Unmarshal(data, aux); err != nil { + return err + } + return r.readStoredRedacted(aux.Redacted) +} + +func (r *ContentReasoning) readStoredRedacted(raw json.RawMessage) error { + raw = bytes.TrimSpace(raw) + switch { + case len(raw) == 0 || bytes.Equal(raw, []byte("null")): + return nil + case raw[0] == '"': + var block []byte + if err := json.Unmarshal(raw, &block); err != nil { + return err + } + if len(block) > 0 { + r.Redacted = append(r.Redacted, block) + } + return nil + } + + var blocks [][]byte + if err := json.Unmarshal(raw, &blocks); err != nil { + return err + } + r.Redacted = append(r.Redacted, blocks...) + return nil } type ChunkContentSplitterState int diff --git a/llms/stored_reasoning_test.go b/llms/stored_reasoning_test.go new file mode 100644 index 000000000..696e55d87 --- /dev/null +++ b/llms/stored_reasoning_test.go @@ -0,0 +1,73 @@ +package llms_test + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestAChainStoredByEarlierBuildsStillReads(t *testing.T) { + t.Parallel() + + for name, stored := range map[string]string{ + "encrypted thought as one string": `[ + {"role":"human","text":"hi"}, + {"role":"ai","parts":[ + {"type":"text","text":"x","reasoning":{"content":"t","signature":"c2ln","redacted":"cmVk"}}, + {"type":"tool_call","tool_call":{"id":"c1","type":"function","function":{"name":"f","arguments":"{}"},"reasoning":{"redacted":"cmVk"}}} + ]} + ]`, + "encrypted thoughts as an array": `[ + {"role":"human","text":"hi"}, + {"role":"ai","parts":[ + {"type":"text","text":"x","reasoning":{"content":"t","signature":"c2ln","redacted":["cmVk"]}}, + {"type":"tool_call","tool_call":{"id":"c1","type":"function","function":{"name":"f","arguments":"{}"},"reasoning":{"redacted":["cmVk"]}}} + ]} + ]`, + } { + var chain []llms.MessageContent + require.NoError(t, json.Unmarshal([]byte(stored), &chain), name) + require.Len(t, chain, 2, name) + require.Len(t, chain[1].Parts, 2, name) + + text, ok := chain[1].Parts[0].(llms.TextContent) + require.True(t, ok, name) + assert.Equal(t, + []reasoning.Block{{Text: "t", Signature: []byte("sig")}, {Redacted: []byte("red")}}, + text.Reasoning.Sequence(), name) + + call, ok := chain[1].Parts[1].(llms.ToolCall) + require.True(t, ok, name) + assert.Equal(t, []reasoning.Block{{Redacted: []byte("red")}}, call.Reasoning.Sequence(), name) + } +} + +func TestAChainKeepsTheBlocksOfEveryPartThroughStorage(t *testing.T) { + t.Parallel() + + thought := reasoning.FromBlocks([]reasoning.Block{ + {Text: "a", Signature: []byte("s1")}, + {Signature: []byte("s2"), AfterToolCalls: 1}, + }) + sent := []llms.MessageContent{ + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", thought), + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + llms.ToolCall{ID: "c2", Type: "function", FunctionCall: &llms.FunctionCall{Name: "g", Arguments: "{}"}}, + }}, + } + + data, err := json.Marshal(sent) + require.NoError(t, err) + + var got []llms.MessageContent + require.NoError(t, json.Unmarshal(data, &got)) + text, ok := got[0].Parts[0].(llms.TextContent) + require.True(t, ok) + assert.Equal(t, thought.Sequence(), text.Reasoning.Sequence()) +} From 9109db3ade7e4fe0c5ce29895a9e4e55fca73f86 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 10:08:12 +0300 Subject: [PATCH 465/618] fix(anthropic): hand back every thinking block with its own signature, in its place A response carries one or more thinking blocks, each signed on its own; on Fable 5.x a reasoning block and a progress update arrive together before the tool call the update introduces. The door folded them into one: texts joined, the last signature kept. Replaying the turn sent a block the vendor never signed and dropped the rest, and the vendor refuses a turn whose thinking blocks were edited, dropped or reordered. The door now keeps each thinking and encrypted block as its own block, noting how many tool calls came before it, on the stream as well as the whole answer. On the way back every block goes out where the vendor put it: the leading run opens the turn and a block that followed a tool call follows it again. A turn of one block goes out byte for byte as before. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 90 ++++---- .../internal/anthropicclient/messages.go | 3 - llms/anthropic/redacted_thinking_wire_test.go | 4 +- llms/anthropic/thinking_blocks_test.go | 215 ++++++++++++++++++ 4 files changed, 260 insertions(+), 52 deletions(-) create mode 100644 llms/anthropic/thinking_blocks_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 764aee6c5..7eedb5776 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -394,35 +394,18 @@ func processAnthropicResponse( return nil, ErrEmptyResponse } - // Extract ALL thinking content, signature - // According to Anthropic docs, there's ONE thinking block per response - var reasoningContent strings.Builder - var signature []byte - var redacted [][]byte - + var thoughts reasoning.Collector for _, content := range result.Content { switch cv := content.(type) { case *anthropicclient.ThinkingContent: - reasoningContent.WriteString(cv.Thinking) - if len(cv.Signature) > 0 { - signature = []byte(cv.Signature) - } + thoughts.Thought(cv.Thinking, []byte(cv.Signature)) case *anthropicclient.RedactedThinkingContent: - if cv.Data != "" { - redacted = append(redacted, []byte(cv.Data)) - } - } - } - - // Create reasoning object - var contentReasoning *reasoning.ContentReasoning - if reasoningContent.Len() > 0 || len(signature) > 0 || len(redacted) > 0 { - contentReasoning = &reasoning.ContentReasoning{ - Content: reasoningContent.String(), - Signature: signature, - Redacted: redacted, + thoughts.Encrypted([]byte(cv.Data)) + case *anthropicclient.ToolUseContent: + thoughts.ToolCall() } } + contentReasoning := thoughts.Reasoning() // Process content blocks to collect text and tool calls var toolCalls []llms.ToolCall @@ -851,34 +834,26 @@ func handleHumanMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, e } func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, error) { - message := anthropicclient.ChatMessage{ - Role: RoleAssistant, - Content: []anthropicclient.Content{}, - } - + var thoughts []reasoning.Block + toolCalls := 0 for _, part := range msg.Parts { - p, ok := part.(llms.TextContent) - if !ok || p.Reasoning.IsEmpty() { - continue - } - thinkingBlock := &anthropicclient.ThinkingContent{ - Type: "thinking", - Thinking: p.Reasoning.Content, - } - if len(p.Reasoning.Signature) > 0 { - thinkingBlock.Signature = string(p.Reasoning.Signature) - } - if p.Reasoning.Content != "" || len(p.Reasoning.Signature) > 0 { - message.Content = append(message.Content, thinkingBlock) - } - for _, block := range p.Reasoning.Redacted { - message.Content = append(message.Content, &anthropicclient.RedactedThinkingContent{ - Type: anthropicclient.EventTypeRedactedThinking, - Data: string(block), - }) + switch p := part.(type) { + case llms.TextContent: + thoughts = append(thoughts, p.Reasoning.Sequence()...) + case llms.ToolCall: + if p.FunctionCall != nil { + toolCalls++ + } } } + placed := reasoning.GroupByToolCalls(thoughts, toolCalls) + + message := anthropicclient.ChatMessage{ + Role: RoleAssistant, + Content: thinkingContents(placed[0]), + } + emitted := 0 for _, part := range msg.Parts { switch p := part.(type) { case llms.TextContent: @@ -911,6 +886,8 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro Input: inputStruct, } message.Content = append(message.Content, toolUse) + emitted++ + message.Content = append(message.Content, thinkingContents(placed[emitted])...) default: return anthropicclient.ChatMessage{}, fmt.Errorf("anthropic: %w for AI message", ErrInvalidContentType) } @@ -919,6 +896,25 @@ func handleAIMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, erro return message, nil } +func thinkingContents(blocks []reasoning.Block) []anthropicclient.Content { + contents := []anthropicclient.Content{} + for _, block := range blocks { + if block.Redacted != nil { + contents = append(contents, &anthropicclient.RedactedThinkingContent{ + Type: anthropicclient.EventTypeRedactedThinking, + Data: string(block.Redacted), + }) + continue + } + thinking := &anthropicclient.ThinkingContent{Type: "thinking", Thinking: block.Text} + if len(block.Signature) > 0 { + thinking.Signature = string(block.Signature) + } + contents = append(contents, thinking) + } + return contents +} + type ToolResult struct { Type string `json:"type"` ToolUseID string `json:"tool_use_id"` diff --git a/llms/anthropic/internal/anthropicclient/messages.go b/llms/anthropic/internal/anthropicclient/messages.go index 7932a6be9..e7ea15004 100644 --- a/llms/anthropic/internal/anthropicclient/messages.go +++ b/llms/anthropic/internal/anthropicclient/messages.go @@ -42,9 +42,6 @@ var ( ErrInvalidFieldType = fmt.Errorf("invalid field type") ) -// For correct using thinking events, use this guide: -// https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking -// In this implementation, we don't send the thinking block to the server. const ( EventTypeText = "text" EventTypeToolUse = "tool_use" diff --git a/llms/anthropic/redacted_thinking_wire_test.go b/llms/anthropic/redacted_thinking_wire_test.go index 2cded4189..afc7066b4 100644 --- a/llms/anthropic/redacted_thinking_wire_test.go +++ b/llms/anthropic/redacted_thinking_wire_test.go @@ -51,7 +51,7 @@ func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) require.NotNil(t, resp.Choices[0].Reasoning, "the encrypted half is still reasoning") - assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted[0])) + assert.Equal(t, []reasoning.Block{{Redacted: []byte(encrypted)}}, resp.Choices[0].Reasoning.Sequence()) assert.False(t, resp.Choices[0].Reasoning.IsEmpty(), "a turn carrying an encrypted thought is not an empty one") }) @@ -148,7 +148,7 @@ func TestAStreamedEncryptedThoughtDoesNotCostTheAnswer(t *testing.T) { assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) require.NotNil(t, resp.Choices[0].Reasoning, "the encrypted half is still reasoning on the streamed leg") - assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted[0])) + assert.Equal(t, []reasoning.Block{{Redacted: []byte(encrypted)}}, resp.Choices[0].Reasoning.Sequence()) assert.False(t, resp.Choices[0].Reasoning.IsEmpty()) } diff --git a/llms/anthropic/thinking_blocks_test.go b/llms/anthropic/thinking_blocks_test.go new file mode 100644 index 000000000..c84662ba4 --- /dev/null +++ b/llms/anthropic/thinking_blocks_test.go @@ -0,0 +1,215 @@ +package anthropic_test + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" + "github.com/vxcontrol/langchaingo/llms/reasoning" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type cannedMessages struct { + mu sync.Mutex + responses []string + requests [][]byte +} + +func (c *cannedMessages) serve(t *testing.T) *anthropic.LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ := io.ReadAll(r.Body) + c.mu.Lock() + c.requests = append(c.requests, body) + answer := c.responses[min(len(c.requests), len(c.responses))-1] + c.mu.Unlock() + if strings.HasPrefix(answer, "event:") { + w.Header().Set("Content-Type", "text/event-stream") + } else { + w.Header().Set("Content-Type", "application/json") + } + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + llm, err := anthropic.New(anthropic.WithToken("test-key"), + anthropic.WithBaseURL(srv.URL), anthropic.WithModel("claude-fable-5-1")) + require.NoError(t, err) + return llm +} + +func (c *cannedMessages) assistantContent(t *testing.T, request int) []map[string]any { + t.Helper() + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(c.requests[request], &payload)) + for _, m := range payload.Messages { + if m.Role == "assistant" { + return m.Content + } + } + t.Fatalf("request %d carries no assistant turn", request) + return nil +} + +func messageWith(content string) string { + return `{"id":"msg_1","type":"message","role":"assistant","model":"claude-fable-5-1",` + + `"content":[` + content + `],"stop_reason":"tool_use","usage":{"input_tokens":1,"output_tokens":1}}` +} + +func thinkingJSON(text, signature string) string { + return fmt.Sprintf(`{"type":"thinking","thinking":%q,"signature":%q}`, text, signature) +} + +func toolUseJSON(id string) string { + return fmt.Sprintf(`{"type":"tool_use","id":%q,"name":"lookup","input":{"q":%q}}`, id, id) +} + +func askWithTool(t *testing.T, llm *anthropic.LLM, opts ...llms.CallOption) *llms.ContentChoice { + t.Helper() + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + }, append(opts, llms.WithMaxTokens(64), llms.WithTools([]llms.Tool{lookupTool()}))...) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + return resp.Choices[0] +} + +func lookupTool() llms.Tool { + return llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "lookup", + Parameters: map[string]any{"type": "object", "properties": map[string]any{"q": map[string]any{"type": "string"}}}, + }} +} + +// replayTurn mirrors the turn pentagi builds from a choice: one text part +// carrying the reasoning, then the tool calls. +func replayTurn(t *testing.T, llm *anthropic.LLM, choice *llms.ContentChoice) { + t.Helper() + + turn := make([]llms.ContentPart, 0, 1+len(choice.ToolCalls)) + turn = append(turn, llms.TextPartWithReasoning(choice.Content, choice.Reasoning)) + results := make([]llms.ContentPart, 0, len(choice.ToolCalls)) + for _, call := range choice.ToolCalls { + turn = append(turn, call) + results = append(results, llms.ToolCallResponse{ToolCallID: call.ID, Name: call.FunctionCall.Name, Content: "done"}) + } + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: turn}, + {Role: llms.ChatMessageTypeTool, Parts: results}, + }, llms.WithMaxTokens(64), llms.WithTools([]llms.Tool{lookupTool()})) + require.NoError(t, err) +} + +func TestEveryThinkingBlockOfAResponseKeepsItsSignature(t *testing.T) { + t.Parallel() + + canned := &cannedMessages{responses: []string{messageWith( + thinkingJSON("", "sig-reasoning") + "," + thinkingJSON("checking the index", "sig-update") + "," + toolUseJSON("A"), + )}} + choice := askWithTool(t, canned.serve(t)) + + assert.Equal(t, []reasoning.Block{ + {Signature: []byte("sig-reasoning")}, + {Text: "checking the index", Signature: []byte("sig-update")}, + }, choice.Reasoning.Sequence()) + assert.Equal(t, "checking the index", choice.Reasoning.Content) + assert.Empty(t, choice.Reasoning.Signature, "no single signature covers two blocks") +} + +func TestAThinkingBlockBetweenToolCallsKnowsItsPlace(t *testing.T) { + t.Parallel() + + canned := &cannedMessages{responses: []string{messageWith( + thinkingJSON("plan", "s1") + "," + toolUseJSON("A") + "," + + thinkingJSON("next", "s2") + "," + `{"type":"redacted_thinking","data":"opaque"}` + "," + toolUseJSON("B"), + )}} + choice := askWithTool(t, canned.serve(t)) + + assert.Equal(t, []reasoning.Block{ + {Text: "plan", Signature: []byte("s1")}, + {Text: "next", Signature: []byte("s2"), AfterToolCalls: 1}, + {Redacted: []byte("opaque"), AfterToolCalls: 1}, + }, choice.Reasoning.Sequence()) +} + +func TestAStreamedResponseKeepsEachBlockWithItsOwnSignature(t *testing.T) { + t.Parallel() + + event := func(name, data string) string { return "event: " + name + "\ndata: " + data + "\n\n" } + stream := event("message_start", `{"type":"message_start","message":{"id":"msg_1","type":"message","role":"assistant",`+ + `"model":"claude-fable-5-1","content":[],"stop_reason":null,"usage":{"input_tokens":1,"output_tokens":1}}}`) + + event("content_block_start", `{"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":""}}`) + + event("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"first "}}`) + + event("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"thought"}}`) + + event("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"s1"}}`) + + event("content_block_stop", `{"type":"content_block_stop","index":0}`) + + event("content_block_start", `{"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":""}}`) + + event("content_block_delta", `{"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"second"}}`) + + event("content_block_delta", `{"type":"content_block_delta","index":1,"delta":{"type":"signature_delta","signature":"s2"}}`) + + event("content_block_stop", `{"type":"content_block_stop","index":1}`) + + event("content_block_start", `{"type":"content_block_start","index":2,"content_block":{"type":"tool_use","id":"A","name":"lookup","input":{}}}`) + + event("content_block_delta", `{"type":"content_block_delta","index":2,"delta":{"type":"input_json_delta","partial_json":"{\"q\":\"A\"}"}}`) + + event("content_block_stop", `{"type":"content_block_stop","index":2}`) + + event("message_delta", `{"type":"message_delta","delta":{"stop_reason":"tool_use"},"usage":{"output_tokens":9}}`) + + event("message_stop", `{"type":"message_stop"}`) + + canned := &cannedMessages{responses: []string{stream}} + choice := askWithTool(t, canned.serve(t), + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + assert.Equal(t, []reasoning.Block{ + {Text: "first thought", Signature: []byte("s1")}, + {Text: "second", Signature: []byte("s2")}, + }, choice.Reasoning.Sequence()) +} + +func TestAReplayedTurnGoesBackAsTheVendorSentIt(t *testing.T) { + t.Parallel() + + for name, original := range map[string][]string{ + "reasoning and a progress update before one call": { + thinkingJSON("", "sig-reasoning"), thinkingJSON("checking the index", "sig-update"), toolUseJSON("A"), + }, + "an update before each of two calls": { + thinkingJSON("plan", "s1"), toolUseJSON("A"), thinkingJSON("", "s2"), toolUseJSON("B"), + }, + "an update cut off after the last call": { + thinkingJSON("plan", "s1"), toolUseJSON("A"), thinkingJSON("", "s2"), + }, + "an encrypted block between signed ones": { + thinkingJSON("a", "s1"), `{"type":"redacted_thinking","data":"opaque"}`, thinkingJSON("b", "s2"), toolUseJSON("A"), + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + canned := &cannedMessages{responses: []string{messageWith(strings.Join(original, ",")), messageWith(`{"type":"text","text":"ok"}`)}} + llm := canned.serve(t) + replayTurn(t, llm, askWithTool(t, llm)) + + var want []map[string]any + require.NoError(t, json.Unmarshal([]byte("["+strings.Join(original, ",")+"]"), &want)) + assert.Equal(t, want, canned.assistantContent(t, 1)) + }) + } +} From 44115da2972cb8ea52a82e3d56e314a39ce64a51 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 10:15:22 +0300 Subject: [PATCH 466/618] fix(bedrock): keep every reasoning block of a Converse turn, each in its place A Converse answer carries one reasoningContent block per vendor thinking block, each with its own signature. The whole answer kept only the last of them; the stream ignored the content block index and joined the text of every block under a signature spliced from all of theirs; and a turn sent back kept only the first reasoning of the parts it merged, emitting it ahead of every text and tool use. The whole answer and the stream now keep each block, the stream by its content block index, and note how many tool uses came before it. The turn builder keeps the reasoning of every part it merges, counts the tool uses gathered before each part, and puts every block back where it stood: the leading run first, the rest right after the tool use they followed. A turn of one block goes out byte for byte as before. Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_thinking_blocks_test.go | 302 ++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 158 +++++---- .../bedrockclient_converse_test.go | 28 +- .../bedrockclient/reasoning_replay_test.go | 3 +- 4 files changed, 406 insertions(+), 85 deletions(-) create mode 100644 llms/bedrock/converse_thinking_blocks_test.go diff --git a/llms/bedrock/converse_thinking_blocks_test.go b/llms/bedrock/converse_thinking_blocks_test.go new file mode 100644 index 000000000..f117077c1 --- /dev/null +++ b/llms/bedrock/converse_thinking_blocks_test.go @@ -0,0 +1,302 @@ +package bedrock_test + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "sync" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/reasoning" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +const converseClaude = "anthropic.claude-sonnet-4-5-20250929-v1:0" + +type converseRecorder struct { + mu sync.Mutex + responses []string + requests [][]byte +} + +func (c *converseRecorder) serve(t *testing.T) *bedrock.LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ := io.ReadAll(r.Body) + c.mu.Lock() + c.requests = append(c.requests, body) + answer := c.responses[min(len(c.requests), len(c.responses))-1] + c.mu.Unlock() + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + return bedrockLLMAgainst(t, srv, bedrock.WithModel(converseClaude), bedrock.WithConverseAPI()) +} + +func converseReply(blocks ...string) string { + return `{"output":{"message":{"role":"assistant","content":[` + strings.Join(blocks, ",") + `]}},` + + `"stopReason":"tool_use","usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}` +} + +func converseThought(text, signature string) string { + return fmt.Sprintf(`{"reasoningContent":{"reasoningText":{"text":%q,"signature":%q}}}`, text, signature) +} + +func converseEncrypted(data string) string { + return fmt.Sprintf(`{"reasoningContent":{"redactedContent":%q}}`, base64.StdEncoding.EncodeToString([]byte(data))) +} + +func converseToolUse(id string) string { + return fmt.Sprintf(`{"toolUse":{"toolUseId":%q,"name":"lookup","input":{"q":%q}}}`, id, id) +} + +func converseShape(t *testing.T, content []map[string]any) []string { + t.Helper() + + shape := make([]string, 0, len(content)) + for _, block := range content { + switch { + case block["reasoningContent"] != nil: + thought, _ := block["reasoningContent"].(map[string]any) + if text, ok := thought["reasoningText"].(map[string]any); ok { + shape = append(shape, fmt.Sprintf("thought %v/%v", text["text"], text["signature"])) + } else { + shape = append(shape, fmt.Sprintf("encrypted %v", thought["redactedContent"])) + } + case block["toolUse"] != nil: + use, _ := block["toolUse"].(map[string]any) + shape = append(shape, fmt.Sprintf("tool %v", use["toolUseId"])) + case block["text"] != nil: + shape = append(shape, fmt.Sprintf("text %v", block["text"])) + default: + t.Fatalf("unexpected content block %v", block) + } + } + return shape +} + +func (c *converseRecorder) replayedAssistant(t *testing.T, request int) []string { + t.Helper() + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(c.requests[request], &payload)) + for _, m := range payload.Messages { + if m.Role == "assistant" { + return converseShape(t, m.Content) + } + } + t.Fatalf("request %d carries no assistant turn", request) + return nil +} + +func lookupTools() []llms.Tool { + return []llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ + Name: "lookup", + Parameters: map[string]any{"type": "object", "properties": map[string]any{"q": map[string]any{"type": "string"}}}, + }}} +} + +func askConverse(t *testing.T, llm *bedrock.LLM, opts ...llms.CallOption) *llms.ContentChoice { + t.Helper() + + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "look it up")}, + append(opts, llms.WithTools(lookupTools()))...) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + return resp.Choices[0] +} + +func TestConverseKeepsEveryReasoningBlockWithItsSignature(t *testing.T) { + t.Parallel() + + rec := &converseRecorder{responses: []string{converseReply( + converseThought("", "sig-reasoning"), converseThought("checking the index", "sig-update"), converseToolUse("A"), + )}} + choice := askConverse(t, rec.serve(t)) + + assert.Equal(t, []reasoning.Block{ + {Text: "", Signature: []byte("sig-reasoning")}, + {Text: "checking the index", Signature: []byte("sig-update")}, + }, choice.Reasoning.Sequence()) + assert.Empty(t, choice.Reasoning.Signature, "no single signature covers two blocks") +} + +func TestConverseNotesWhereEachReasoningBlockSat(t *testing.T) { + t.Parallel() + + rec := &converseRecorder{responses: []string{converseReply( + converseThought("plan", "s1"), converseToolUse("A"), + converseThought("next", "s2"), converseEncrypted("opaque"), converseToolUse("B"), + )}} + choice := askConverse(t, rec.serve(t)) + + assert.Equal(t, []reasoning.Block{ + {Text: "plan", Signature: []byte("s1")}, + {Text: "next", Signature: []byte("s2"), AfterToolCalls: 1}, + {Redacted: []byte("opaque"), AfterToolCalls: 1}, + }, choice.Reasoning.Sequence()) +} + +func TestTheConverseStreamKeepsEachBlockWithItsOwnSignature(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + delta := func(index int, payload string) { + writeConverseEvent(t, w, enc, "contentBlockDelta", + fmt.Sprintf(`{"contentBlockIndex":%d,"delta":%s}`, index, payload)) + } + stop := func(index int) { + writeConverseEvent(t, w, enc, "contentBlockStop", fmt.Sprintf(`{"contentBlockIndex":%d}`, index)) + } + + writeConverseEvent(t, w, enc, "messageStart", `{"role":"assistant"}`) + delta(0, `{"reasoningContent":{"text":"first "}}`) + delta(0, `{"reasoningContent":{"text":"thought"}}`) + delta(0, `{"reasoningContent":{"signature":"s1"}}`) + stop(0) + delta(1, `{"reasoningContent":{"text":"second"}}`) + delta(1, `{"reasoningContent":{"signature":"s2"}}`) + stop(1) + writeConverseEvent(t, w, enc, "contentBlockStart", + `{"contentBlockIndex":2,"start":{"toolUse":{"toolUseId":"A","name":"lookup"}}}`) + delta(2, `{"toolUse":{"input":"{\"q\":\"A\"}"}}`) + stop(2) + delta(3, `{"reasoningContent":{"signature":"s3"}}`) + stop(3) + writeConverseEvent(t, w, enc, "messageStop", `{"stopReason":"max_tokens"}`) + writeConverseEvent(t, w, enc, "metadata", `{"usage":{"inputTokens":1,"outputTokens":1,"totalTokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(converseClaude), bedrock.WithConverseAPI()) + choice := askConverse(t, llm, llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + assert.Equal(t, []reasoning.Block{ + {Text: "first thought", Signature: []byte("s1")}, + {Text: "second", Signature: []byte("s2")}, + {Signature: []byte("s3"), AfterToolCalls: 1}, + }, choice.Reasoning.Sequence()) +} + +func TestAReplayedConverseTurnGoesBackAsTheVendorSentIt(t *testing.T) { + t.Parallel() + + for name, original := range map[string][]string{ + "reasoning and a progress update before one call": { + converseThought("", "sig-reasoning"), converseThought("checking the index", "sig-update"), converseToolUse("A"), + }, + "an update before each of two calls": { + converseThought("plan", "s1"), converseToolUse("A"), converseThought("", "s2"), converseToolUse("B"), + }, + "an update cut off after the last call": { + converseThought("plan", "s1"), converseToolUse("A"), converseThought("", "s2"), + }, + "an encrypted block between signed ones": { + converseThought("a", "s1"), converseEncrypted("opaque"), converseThought("b", "s2"), converseToolUse("A"), + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + rec := &converseRecorder{responses: []string{ + converseReply(original...), + `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},"stopReason":"end_turn"}`, + }} + llm := rec.serve(t) + choice := askConverse(t, llm) + + turn := []llms.ContentPart{llms.TextPartWithReasoning(choice.Content, choice.Reasoning)} + results := make([]llms.ContentPart, 0, len(choice.ToolCalls)) + for _, call := range choice.ToolCalls { + turn = append(turn, call) + results = append(results, llms.ToolCallResponse{ToolCallID: call.ID, Name: "lookup", Content: "done"}) + } + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: turn}, + {Role: llms.ChatMessageTypeTool, Parts: results}, + }, llms.WithTools(lookupTools())) + require.NoError(t, err) + + var sent []map[string]any + require.NoError(t, json.Unmarshal([]byte("["+strings.Join(original, ",")+"]"), &sent)) + assert.Equal(t, converseShape(t, sent), rec.replayedAssistant(t, 1)) + }) + } +} + +func TestAMergedConverseTurnKeepsTheReasoningOfEveryPart(t *testing.T) { + t.Parallel() + + first := reasoning.FromBlocks([]reasoning.Block{{Text: "one", Signature: []byte("s1")}}) + second := reasoning.FromBlocks([]reasoning.Block{{Text: "two", Signature: []byte("s2")}}) + + callA := llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}} + callB := llms.ToolCall{ID: "B", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"B"}`}} + both := []string{"thought one/s1", "thought two/s2", "text t1", "text t2", "tool A"} + + for name, tc := range map[string]struct { + turn []llms.MessageContent + want []string + }{ + "two parts of one message": {turn: []llms.MessageContent{{Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("t1", first), + llms.TextPartWithReasoning("t2", second), + callA, + }}}, want: both}, + "two consecutive messages": {turn: []llms.MessageContent{ + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("t1", first)}}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("t2", second), callA}}, + }, want: both}, + "a later message after an earlier call": {turn: []llms.MessageContent{ + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("t1", first), callA}}, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("", second), callB}}, + }, want: []string{"thought one/s1", "text t1", "tool A", "thought two/s2", "tool B"}}, + "an empty reasoning ahead of a real one": {turn: []llms.MessageContent{{Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("t1", &reasoning.ContentReasoning{}), + llms.TextPartWithReasoning("t2", second), + callA, + }}}, want: []string{"thought two/s2", "text t1", "text t2", "tool A"}}, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + rec := &converseRecorder{responses: []string{ + `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},"stopReason":"end_turn"}`, + }} + history := append([]llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "look it up")}, tc.turn...) + results := []llms.ContentPart{llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}} + if tc.want[len(tc.want)-1] == "tool B" { + results = append(results, llms.ToolCallResponse{ToolCallID: "B", Name: "lookup", Content: "done"}) + } + history = append(history, llms.MessageContent{Role: llms.ChatMessageTypeTool, Parts: results}) + _, err := rec.serve(t).GenerateContent(context.Background(), history, llms.WithTools(lookupTools())) + require.NoError(t, err) + + assert.Equal(t, tc.want, rec.replayedAssistant(t, 0)) + }) + } +} diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 385baa4a5..277f6c861 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -308,7 +308,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti // aiMessageAccumulator accumulates consecutive AI messages into a single assistant message type aiMessageAccumulator struct { textBlocks []string - reasoning *reasoning.ContentReasoning + thoughts []reasoning.Block toolUseBlocks []types.ContentBlock cacheControl *CacheControl hasAnyContent bool @@ -320,8 +320,9 @@ func (a *aiMessageAccumulator) addTextContent(content string, reasoningContent * a.textBlocks = append(a.textBlocks, content) } - if a.reasoning == nil && reasoningContent != nil { - a.reasoning = reasoningContent + for _, block := range reasoningContent.Sequence() { + block.AfterToolCalls += len(a.toolUseBlocks) + a.thoughts = append(a.thoughts, block) } a.hasAnyContent = true @@ -354,34 +355,17 @@ func (a *aiMessageAccumulator) setCacheControl(cacheControl *CacheControl) { // build creates a Converse Message from accumulated data func (a *aiMessageAccumulator) build() types.Message { - content := make([]types.ContentBlock, 0) - - // Add reasoning content if present - if a.reasoning != nil && (a.reasoning.Content != "" || len(a.reasoning.Signature) > 0) { - reasoningBlock := types.ReasoningContentBlockMemberReasoningText{ - Value: types.ReasoningTextBlock{ - Text: aws.String(a.reasoning.Content), - Signature: ptrStringOrNil(string(a.reasoning.Signature)), - }, - } - content = append(content, &types.ContentBlockMemberReasoningContent{ - Value: &reasoningBlock, - }) - } - if a.reasoning != nil { - for _, block := range a.reasoning.Redacted { - content = append(content, &types.ContentBlockMemberReasoningContent{ - Value: &types.ReasoningContentBlockMemberRedactedContent{Value: block}, - }) - } - } + placed := reasoning.GroupByToolCalls(a.thoughts, len(a.toolUseBlocks)) + content := converseReasoningBlocks(placed[0]) for _, text := range a.textBlocks { content = append(content, &types.ContentBlockMemberText{Value: text}) } - // Add all tool use blocks - content = append(content, a.toolUseBlocks...) + for i, toolUse := range a.toolUseBlocks { + content = append(content, toolUse) + content = append(content, converseReasoningBlocks(placed[i+1])...) + } // Add cache point if needed if a.cacheControl != nil { @@ -404,10 +388,31 @@ func (a *aiMessageAccumulator) build() types.Message { } } +func converseReasoningBlocks(blocks []reasoning.Block) []types.ContentBlock { + content := make([]types.ContentBlock, 0, len(blocks)) + for _, block := range blocks { + if block.Redacted != nil { + content = append(content, &types.ContentBlockMemberReasoningContent{ + Value: &types.ReasoningContentBlockMemberRedactedContent{Value: block.Redacted}, + }) + continue + } + content = append(content, &types.ContentBlockMemberReasoningContent{ + Value: &types.ReasoningContentBlockMemberReasoningText{ + Value: types.ReasoningTextBlock{ + Text: aws.String(block.Text), + Signature: ptrStringOrNil(string(block.Signature)), + }, + }, + }) + } + return content +} + // reset clears the accumulator func (a *aiMessageAccumulator) reset() { a.textBlocks = nil - a.reasoning = nil + a.thoughts = nil a.toolUseBlocks = nil a.cacheControl = nil a.hasAnyContent = false @@ -882,7 +887,7 @@ DoStream: } } case *types.ContentBlockDeltaMemberReasoningContent: - text := reasoningDeltas.add(delta.Value) + text := reasoningDeltas.add(aws.ToInt32(e.Value.ContentBlockIndex), delta.Value) if text != "" && callback != nil { chunk := streaming.Chunk{ Type: streaming.ChunkTypeReasoning, @@ -904,6 +909,7 @@ DoStream: case *types.ConverseStreamOutputMemberContentBlockStart: if e.Value.Start != nil { if toolUse, ok := e.Value.Start.(*types.ContentBlockStartMemberToolUse); ok { + reasoningDeltas.toolCall(aws.ToInt32(e.Value.ContentBlockIndex)) currentToolCalls[aws.ToInt32(e.Value.ContentBlockIndex)] = &converseToolCallBuilder{ id: aws.ToString(toolUse.Value.ToolUseId), name: aws.ToString(toolUse.Value.Name), @@ -946,7 +952,7 @@ DoStream: Content: fullContent.String(), ToolCalls: toolCalls, GenerationInfo: make(map[string]any), - Reasoning: reasoningDeltas.result(c), + Reasoning: reasoningDeltas.result(), StopReason: stopReason, Truncated: llms.IsTruncated(stopReason), } @@ -991,52 +997,71 @@ func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { info["PromptTokens"] = promptTokens } -func (c *ConverseClient) processReasoning(reasoningContent string, signature []byte, redacted [][]byte) *reasoning.ContentReasoning { - if reasoningContent == "" && len(signature) == 0 && len(redacted) == 0 { - return nil - } - - return &reasoning.ContentReasoning{ - Content: reasoningContent, - Signature: signature, - Redacted: redacted, - } +type streamedThought struct { + text strings.Builder + signature bytes.Buffer + redacted []byte } type converseReasoningStream struct { - text strings.Builder - signature bytes.Buffer - redacted [][]byte + thoughts map[int32]*streamedThought + toolCalls map[int32]bool } -func (a *converseReasoningStream) add(delta types.ReasoningContentBlockDelta) (readableText string) { +func (a *converseReasoningStream) add(index int32, delta types.ReasoningContentBlockDelta) (readableText string) { + if a.thoughts == nil { + a.thoughts = make(map[int32]*streamedThought) + } + thought, ok := a.thoughts[index] + if !ok { + thought = &streamedThought{} + a.thoughts[index] = thought + } + switch block := delta.(type) { case *types.ReasoningContentBlockDeltaMemberText: - a.text.WriteString(block.Value) + thought.text.WriteString(block.Value) return block.Value case *types.ReasoningContentBlockDeltaMemberSignature: - if len(block.Value) > 0 { - a.signature.WriteString(block.Value) - } + thought.signature.WriteString(block.Value) case *types.ReasoningContentBlockDeltaMemberRedactedContent: - a.redacted = append(a.redacted, block.Value) + thought.redacted = append(thought.redacted, block.Value...) } return "" } -func (a *converseReasoningStream) result(c *ConverseClient) *reasoning.ContentReasoning { - var sig []byte - if a.signature.Len() > 0 { - sig = a.signature.Bytes() +func (a *converseReasoningStream) toolCall(index int32) { + if a.toolCalls == nil { + a.toolCalls = make(map[int32]bool) } - return c.processReasoning(a.text.String(), sig, a.redacted) + a.toolCalls[index] = true } -func ensureReasoning(r *reasoning.ContentReasoning) *reasoning.ContentReasoning { - if r == nil { - return &reasoning.ContentReasoning{} +func (a *converseReasoningStream) result() *reasoning.ContentReasoning { + indexes := make([]int32, 0, len(a.thoughts)+len(a.toolCalls)) + for index := range a.thoughts { + indexes = append(indexes, index) + } + for index := range a.toolCalls { + if _, isThought := a.thoughts[index]; !isThought { + indexes = append(indexes, index) + } + } + slices.Sort(indexes) + + var thoughts reasoning.Collector + for _, index := range indexes { + thought, isThought := a.thoughts[index] + switch { + case !isThought: + thoughts.ToolCall() + case thought.redacted != nil: + thoughts.Encrypted(thought.redacted) + default: + thoughts.Thought(thought.text.String(), bytes.Clone(thought.signature.Bytes())) + } } - return r + return thoughts.Reasoning() } // convertConverseResponse converts Converse response to ContentResponse @@ -1048,6 +1073,7 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver choice := &llms.ContentChoice{ GenerationInfo: make(map[string]any), } + var thoughts reasoning.Collector // Handle different output types switch output := response.Output.(type) { @@ -1082,32 +1108,22 @@ func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.Conver }, } choice.ToolCalls = append(choice.ToolCalls, toolCall) + thoughts.ToolCall() case *types.ContentBlockMemberReasoningContent: switch content := block.Value.(type) { case *types.ReasoningContentBlockMemberReasoningText: - reasoningText := "" - if content.Value.Text != nil { - reasoningText = *content.Value.Text - } var sig []byte if content.Value.Signature != nil { sig = []byte(*content.Value.Signature) } - if reasoningText != "" || len(sig) > 0 { - choice.Reasoning = ensureReasoning(choice.Reasoning) - choice.Reasoning.Content = reasoningText - choice.Reasoning.Signature = sig - } + thoughts.Thought(aws.ToString(content.Value.Text), sig) case *types.ReasoningContentBlockMemberRedactedContent: - if len(content.Value) > 0 { - choice.Reasoning = ensureReasoning(choice.Reasoning) - choice.Reasoning.Redacted = append(choice.Reasoning.Redacted, content.Value) - } + thoughts.Encrypted(content.Value) } } } - } + choice.Reasoning = thoughts.Reasoning() // The stop reason lives on the response, not inside types.Message. Surfacing it // distinguishes end_turn from tool_use, max_tokens, guardrail_intervened, diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 45251ea46..dd0cec9de 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1363,7 +1363,7 @@ func TestConverseClient_RedactedReasoningReachesTheCaller(t *testing.T) { require.NoError(t, err) require.Len(t, resp.Choices, 1) require.NotNil(t, resp.Choices[0].Reasoning, "the vendor returned a thought, encrypted or not") - assert.Equal(t, [][]byte{encrypted}, resp.Choices[0].Reasoning.Redacted) + assert.Equal(t, []reasoning.Block{{Redacted: encrypted}}, resp.Choices[0].Reasoning.Sequence()) assert.False(t, resp.Choices[0].Reasoning.HasContent(), "encrypted bytes are not readable thinking") } @@ -1415,19 +1415,21 @@ func TestConverseClient_RedactedReasoningTravelsBack(t *testing.T) { assert.Equal(t, encrypted, got, "the replayed turn carries the encrypted block unchanged") } -func TestConverseReasoningStreamKeepsEveryDelta(t *testing.T) { +func TestConverseReasoningStreamKeepsEachBlockApart(t *testing.T) { t.Parallel() var acc converseReasoningStream - assert.Equal(t, "thinking", acc.add(&types.ReasoningContentBlockDeltaMemberText{Value: "thinking"})) - assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberSignature{Value: "sig"})) - assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x07, 0x08}})) - assert.Empty(t, acc.add(&types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x09}})) - - got := acc.result(NewConverseClient(nil)) - require.NotNil(t, got) - assert.Equal(t, "thinking", got.Content) - assert.Equal(t, []byte("sig"), got.Signature) - assert.Equal(t, [][]byte{{0x07, 0x08}, {0x09}}, got.Redacted, - "two encrypted blocks stay two: their boundary cannot be rebuilt once merged") + assert.Equal(t, "first", acc.add(0, &types.ReasoningContentBlockDeltaMemberText{Value: "first"})) + assert.Empty(t, acc.add(0, &types.ReasoningContentBlockDeltaMemberSignature{Value: "s1"})) + assert.Empty(t, acc.add(1, &types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x07, 0x08}})) + assert.Empty(t, acc.add(1, &types.ReasoningContentBlockDeltaMemberRedactedContent{Value: []byte{0x09}})) + acc.toolCall(2) + assert.Equal(t, "second", acc.add(3, &types.ReasoningContentBlockDeltaMemberText{Value: "second"})) + assert.Empty(t, acc.add(3, &types.ReasoningContentBlockDeltaMemberSignature{Value: "s2"})) + + assert.Equal(t, []reasoning.Block{ + {Text: "first", Signature: []byte("s1")}, + {Redacted: []byte{0x07, 0x08, 0x09}}, + {Text: "second", Signature: []byte("s2"), AfterToolCalls: 1}, + }, acc.result().Sequence()) } diff --git a/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go b/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go index 4efa9c163..b540068e1 100644 --- a/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go +++ b/llms/bedrock/internal/bedrockclient/reasoning_replay_test.go @@ -35,7 +35,8 @@ func TestSignatureOnlyReasoningKeepsTheTextField(t *testing.T) { t.Run("accumulated message", func(t *testing.T) { t.Parallel() - acc := &aiMessageAccumulator{reasoning: signatureOnly} + acc := &aiMessageAccumulator{} + acc.addTextContent("", signatureOnly) block := reasoningTextOf(t, acc.build().Content) require.NotNil(t, block.Text) From 9bc70e5736415349bde11b9414f3c0f1a02c771c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 10:20:02 +0300 Subject: [PATCH 467/618] fix(bedrock): read the legacy Claude payload block by block, and put each back in its place The legacy InvokeModel payload for Claude folded a turn's thinking blocks the same way the primary door did: the whole answer joined the texts under the last signature, and the stream joined them under a signature spliced from every block's, so the two legs of one door disagreed and neither matched what the vendor sent. Both legs now keep each thinking and encrypted block, the stream by the index the vendor gives every content block, and note how many tool uses came before it; the Converse stream shares the same collector. On the way back each block goes out before its own part or right after the tool use it followed. A turn of one block goes out byte for byte as before. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/bedrockclient_converse.go | 53 +---- .../bedrockclient/provider_anthropic.go | 122 ++++------ .../bedrockclient/reasoning_stream.go | 66 ++++++ llms/bedrock/legacy_redacted_thinking_test.go | 2 +- llms/bedrock/legacy_thinking_blocks_test.go | 221 ++++++++++++++++++ 5 files changed, 336 insertions(+), 128 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/reasoning_stream.go create mode 100644 llms/bedrock/legacy_thinking_blocks_test.go diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 277f6c861..2b23f4aad 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -997,27 +997,12 @@ func applyConverseUsage(info map[string]any, usage *types.TokenUsage) { info["PromptTokens"] = promptTokens } -type streamedThought struct { - text strings.Builder - signature bytes.Buffer - redacted []byte -} - type converseReasoningStream struct { - thoughts map[int32]*streamedThought - toolCalls map[int32]bool + streamedReasoning } func (a *converseReasoningStream) add(index int32, delta types.ReasoningContentBlockDelta) (readableText string) { - if a.thoughts == nil { - a.thoughts = make(map[int32]*streamedThought) - } - thought, ok := a.thoughts[index] - if !ok { - thought = &streamedThought{} - a.thoughts[index] = thought - } - + thought := a.at(index) switch block := delta.(type) { case *types.ReasoningContentBlockDeltaMemberText: thought.text.WriteString(block.Value) @@ -1030,40 +1015,6 @@ func (a *converseReasoningStream) add(index int32, delta types.ReasoningContentB return "" } -func (a *converseReasoningStream) toolCall(index int32) { - if a.toolCalls == nil { - a.toolCalls = make(map[int32]bool) - } - a.toolCalls[index] = true -} - -func (a *converseReasoningStream) result() *reasoning.ContentReasoning { - indexes := make([]int32, 0, len(a.thoughts)+len(a.toolCalls)) - for index := range a.thoughts { - indexes = append(indexes, index) - } - for index := range a.toolCalls { - if _, isThought := a.thoughts[index]; !isThought { - indexes = append(indexes, index) - } - } - slices.Sort(indexes) - - var thoughts reasoning.Collector - for _, index := range indexes { - thought, isThought := a.thoughts[index] - switch { - case !isThought: - thoughts.ToolCall() - case thought.redacted != nil: - thoughts.Encrypted(thought.redacted) - default: - thoughts.Thought(thought.text.String(), bytes.Clone(thought.signature.Bytes())) - } - } - return thoughts.Reasoning() -} - // convertConverseResponse converts Converse response to ContentResponse func (c *ConverseClient) convertConverseResponse(response *bedrockruntime.ConverseOutput) (*llms.ContentResponse, error) { if response.Output == nil { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 8c6960de5..8f75055ed 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -324,9 +324,7 @@ func createAnthropicCompletion(ctx context.Context, // Group content blocks by type for this choice var textContent string - var reasoningContent string - var signature []byte - var redacted [][]byte + var thoughts reasoning.Collector var toolCalls []llms.ToolCall for _, c := range output.Content { @@ -334,14 +332,9 @@ func createAnthropicCompletion(ctx context.Context, case "text": textContent += c.Text case "thinking": - reasoningContent += c.Thinking - if len(c.Signature) > 0 { - signature = []byte(c.Signature) - } + thoughts.Thought(c.Thinking, []byte(c.Signature)) case "redacted_thinking": - if c.Data != "" { - redacted = append(redacted, []byte(c.Data)) - } + thoughts.Encrypted([]byte(c.Data)) case "tool_use": argumentsJSON, err := json.Marshal(c.Input) if err != nil { @@ -355,13 +348,14 @@ func createAnthropicCompletion(ctx context.Context, Arguments: string(argumentsJSON), }, }) + thoughts.ToolCall() } } // Create single choice with all content choice := &llms.ContentChoice{ Content: textContent, - Reasoning: processReasoning(reasoningContent, signature, redacted), + Reasoning: thoughts.Reasoning(), ToolCalls: toolCalls, StopReason: output.StopReason, Truncated: llms.IsTruncated(output.StopReason), @@ -457,18 +451,6 @@ func applyAnthropicUsage(info map[string]any, usage anthropicUsage) { info["ReasoningTokens"] = int(usage.OutputTokensDetails.ThinkingTokens) } -func processReasoning(reasoningContent string, signature []byte, redacted [][]byte) *reasoning.ContentReasoning { - if reasoningContent == "" && len(signature) == 0 && len(redacted) == 0 { - return nil - } - - return &reasoning.ContentReasoning{ - Content: reasoningContent, - Signature: signature, - Redacted: redacted, - } -} - type streamingCompletionResponseChunk struct { Type string `json:"type"` Index int `json:"index"` @@ -526,8 +508,7 @@ func parseStreamingCompletionResponse(ctx context.Context, client *bedrockruntim var streamedContent strings.Builder var currentToolCall *streaming.ToolCall var toolCalls []llms.ToolCall - var signature strings.Builder - var redacted [][]byte + var thoughts streamedReasoning var streamErr error @@ -552,14 +533,14 @@ DoStream: case "content_block_start": switch resp.ContentBlock.Type { case "tool_use": + thoughts.toolCall(int32(resp.Index)) currentToolCall = &streaming.ToolCall{ ID: resp.ContentBlock.ID, Name: resp.ContentBlock.Name, } case "redacted_thinking": - if resp.ContentBlock.Data != "" { - redacted = append(redacted, []byte(resp.ContentBlock.Data)) - } + thought := thoughts.at(int32(resp.Index)) + thought.redacted = append(thought.redacted, resp.ContentBlock.Data...) } case "content_block_delta": switch resp.Delta.Type { @@ -570,24 +551,21 @@ DoStream: break DoStream } case "thinking_delta": + thought := thoughts.at(int32(resp.Index)) + thought.signature.WriteString(resp.Delta.Signature) if resp.Delta.Thinking != "" { + thought.text.WriteString(resp.Delta.Thinking) chunk := streaming.Chunk{ Type: streaming.ChunkTypeReasoning, Reasoning: &reasoning.ContentReasoning{Content: resp.Delta.Thinking}, } - contentchoices[0].Reasoning = appendReasoning(contentchoices[0].Reasoning, resp.Delta.Thinking) if err = options.StreamingFunc(ctx, chunk); err != nil { streamErr = err break DoStream } } - if resp.Delta.Signature != "" { - signature.WriteString(resp.Delta.Signature) - } case "signature_delta": - if resp.Delta.Signature != "" { - signature.WriteString(resp.Delta.Signature) - } + thoughts.at(int32(resp.Index)).signature.WriteString(resp.Delta.Signature) case "input_json_delta": if currentToolCall != nil { // Bedrock already sends deltas in PartialJSON, not full accumulated JSON @@ -633,20 +611,7 @@ DoStream: // Add tool calls to the final response contentchoices[0].ToolCalls = toolCalls - - // Add signature to reasoning if accumulated - if signature.Len() > 0 { - if contentchoices[0].Reasoning == nil { - contentchoices[0].Reasoning = &reasoning.ContentReasoning{} - } - contentchoices[0].Reasoning.Signature = []byte(signature.String()) - } - if len(redacted) > 0 { - if contentchoices[0].Reasoning == nil { - contentchoices[0].Reasoning = &reasoning.ContentReasoning{} - } - contentchoices[0].Reasoning.Redacted = append(contentchoices[0].Reasoning.Redacted, redacted...) - } + contentchoices[0].Reasoning = thoughts.result() contentchoices[0].Content = streamedContent.String() @@ -667,15 +632,6 @@ DoStream: return response, nil } -func appendReasoning(reasoning *reasoning.ContentReasoning, reasoningContent string) *reasoning.ContentReasoning { - if reasoning == nil { - return processReasoning(reasoningContent, nil, nil) - } - - reasoning.Content += reasoningContent - return reasoning -} - // process the input messages to anthropic supported input // returns the input content and system prompt. func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerationInputMessage, string, error) { @@ -720,33 +676,36 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati continue } content := make([]anthropicTextGenerationInputContent, 0, len(chunk)) + toolUses := 0 for _, message := range chunk { - // For AI messages with reasoning, add thinking blocks before text - if message.Role == llms.ChatMessageTypeAI && message.Reasoning != nil { - // Add thinking block if present - if message.Reasoning.Content != "" || len(message.Reasoning.Signature) > 0 { - thinkingBlock := anthropicTextGenerationInputContent{ - Type: "thinking", - Thinking: message.Reasoning.Content, - } - if len(message.Reasoning.Signature) > 0 { - thinkingBlock.Signature = string(message.Reasoning.Signature) + if message.Type == AnthropicMessageTypeToolUse { + toolUses++ + } + } + afterToolUse := make([][]reasoning.Block, toolUses+1) + emitted := 0 + for _, message := range chunk { + if message.Role == llms.ChatMessageTypeAI { + for _, thought := range message.Reasoning.Sequence() { + at := min(emitted+max(thought.AfterToolCalls, 0), toolUses) + if at == emitted { + content = append(content, anthropicThinkingContent(thought)) + continue } - content = append(content, thinkingBlock) - } - for _, block := range message.Reasoning.Redacted { - content = append(content, anthropicTextGenerationInputContent{ - Type: "redacted_thinking", - Data: string(block), - }) + afterToolUse[at] = append(afterToolUse[at], thought) } } - // Add regular content (text, tool_use, tool_result, etc.) block, err := getAnthropicInputContent(message) if err != nil { return nil, "", err } content = append(content, block) + if message.Type == AnthropicMessageTypeToolUse { + emitted++ + for _, thought := range afterToolUse[emitted] { + content = append(content, anthropicThinkingContent(thought)) + } + } } inputContents = append(inputContents, &anthropicTextGenerationInputMessage{ Role: role, @@ -756,6 +715,17 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati return inputContents, systemPrompt, nil } +func anthropicThinkingContent(block reasoning.Block) anthropicTextGenerationInputContent { + if block.Redacted != nil { + return anthropicTextGenerationInputContent{Type: "redacted_thinking", Data: string(block.Redacted)} + } + return anthropicTextGenerationInputContent{ + Type: "thinking", + Thinking: block.Text, + Signature: string(block.Signature), + } +} + // process the role of the message to anthropic supported role. func getAnthropicRole(role llms.ChatMessageType) (string, error) { switch role { diff --git a/llms/bedrock/internal/bedrockclient/reasoning_stream.go b/llms/bedrock/internal/bedrockclient/reasoning_stream.go new file mode 100644 index 000000000..27c177980 --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/reasoning_stream.go @@ -0,0 +1,66 @@ +package bedrockclient + +import ( + "bytes" + "slices" + "strings" + + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +type streamedThought struct { + text strings.Builder + signature bytes.Buffer + redacted []byte +} + +type streamedReasoning struct { + thoughts map[int32]*streamedThought + toolCalls map[int32]bool +} + +func (s *streamedReasoning) at(index int32) *streamedThought { + if s.thoughts == nil { + s.thoughts = make(map[int32]*streamedThought) + } + thought, ok := s.thoughts[index] + if !ok { + thought = &streamedThought{} + s.thoughts[index] = thought + } + return thought +} + +func (s *streamedReasoning) toolCall(index int32) { + if s.toolCalls == nil { + s.toolCalls = make(map[int32]bool) + } + s.toolCalls[index] = true +} + +func (s *streamedReasoning) result() *reasoning.ContentReasoning { + indexes := make([]int32, 0, len(s.thoughts)+len(s.toolCalls)) + for index := range s.thoughts { + indexes = append(indexes, index) + } + for index := range s.toolCalls { + if _, isThought := s.thoughts[index]; !isThought { + indexes = append(indexes, index) + } + } + slices.Sort(indexes) + + var thoughts reasoning.Collector + for _, index := range indexes { + thought, isThought := s.thoughts[index] + switch { + case !isThought: + thoughts.ToolCall() + case thought.redacted != nil: + thoughts.Encrypted(thought.redacted) + default: + thoughts.Thought(thought.text.String(), bytes.Clone(thought.signature.Bytes())) + } + } + return thoughts.Reasoning() +} diff --git a/llms/bedrock/legacy_redacted_thinking_test.go b/llms/bedrock/legacy_redacted_thinking_test.go index 9982db237..ba0d4c3b1 100644 --- a/llms/bedrock/legacy_redacted_thinking_test.go +++ b/llms/bedrock/legacy_redacted_thinking_test.go @@ -37,7 +37,7 @@ func TestTheLegacyPathCarriesTheEncryptedThought(t *testing.T) { assert.Equal(t, "sixty rooms are free", resp.Choices[0].Content) require.NotNil(t, resp.Choices[0].Reasoning, "a turn carrying an encrypted thought is not a turn without thought") - assert.Equal(t, encrypted, string(resp.Choices[0].Reasoning.Redacted[0])) + assert.Equal(t, []reasoning.Block{{Redacted: []byte(encrypted)}}, resp.Choices[0].Reasoning.Sequence()) }) t.Run("it goes back to the vendor unchanged", func(t *testing.T) { diff --git a/llms/bedrock/legacy_thinking_blocks_test.go b/llms/bedrock/legacy_thinking_blocks_test.go new file mode 100644 index 000000000..bce14e82c --- /dev/null +++ b/llms/bedrock/legacy_thinking_blocks_test.go @@ -0,0 +1,221 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "sync" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/reasoning" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +type legacyRecorder struct { + mu sync.Mutex + responses []string + requests [][]byte +} + +func (l *legacyRecorder) serve(t *testing.T) *bedrock.LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ := io.ReadAll(r.Body) + l.mu.Lock() + l.requests = append(l.requests, body) + answer := l.responses[min(len(l.requests), len(l.responses))-1] + l.mu.Unlock() + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + + return bedrockLLMAgainst(t, srv, bedrock.WithModel(converseClaude)) +} + +func (l *legacyRecorder) replayedAssistant(t *testing.T, request int) []string { + t.Helper() + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(l.requests[request], &payload)) + for _, m := range payload.Messages { + if m.Role == "assistant" { + return legacyShape(m.Content) + } + } + t.Fatalf("request %d carries no assistant turn", request) + return nil +} + +func legacyShape(content []map[string]any) []string { + shape := make([]string, 0, len(content)) + for _, block := range content { + switch block["type"] { + case "thinking": + shape = append(shape, fmt.Sprintf("thought %v/%v", block["thinking"], block["signature"])) + case "redacted_thinking": + shape = append(shape, fmt.Sprintf("encrypted %v", block["data"])) + case "tool_use": + shape = append(shape, fmt.Sprintf("tool %v", block["id"])) + default: + shape = append(shape, fmt.Sprintf("%v %v", block["type"], block["text"])) + } + } + return shape +} + +func legacyReply(blocks ...string) string { + return `{"id":"msg_1","type":"message","role":"assistant","model":"m","content":[` + strings.Join(blocks, ",") + + `],"stop_reason":"tool_use","usage":{"input_tokens":1,"output_tokens":1}}` +} + +func legacyThought(text, signature string) string { + return fmt.Sprintf(`{"type":"thinking","thinking":%q,"signature":%q}`, text, signature) +} + +func legacyToolUse(id string) string { + return fmt.Sprintf(`{"type":"tool_use","id":%q,"name":"lookup","input":{"q":%q}}`, id, id) +} + +func TestTheLegacyDoorKeepsEveryThinkingBlockWithItsSignature(t *testing.T) { + t.Parallel() + + rec := &legacyRecorder{responses: []string{legacyReply( + legacyThought("", "sig-reasoning"), legacyThought("checking the index", "sig-update"), legacyToolUse("A"), + )}} + choice := askConverse(t, rec.serve(t)) + + assert.Equal(t, []reasoning.Block{ + {Signature: []byte("sig-reasoning")}, + {Text: "checking the index", Signature: []byte("sig-update")}, + }, choice.Reasoning.Sequence()) +} + +func TestTheLegacyDoorNotesWhereEachThinkingBlockSat(t *testing.T) { + t.Parallel() + + rec := &legacyRecorder{responses: []string{legacyReply( + legacyThought("plan", "s1"), legacyToolUse("A"), + legacyThought("next", "s2"), `{"type":"redacted_thinking","data":"opaque"}`, legacyToolUse("B"), + )}} + choice := askConverse(t, rec.serve(t)) + + assert.Equal(t, []reasoning.Block{ + {Text: "plan", Signature: []byte("s1")}, + {Text: "next", Signature: []byte("s2"), AfterToolCalls: 1}, + {Redacted: []byte("opaque"), AfterToolCalls: 1}, + }, choice.Reasoning.Sequence()) +} + +func TestTheLegacyStreamKeepsEachBlockWithItsOwnSignature(t *testing.T) { + t.Parallel() + + chunks := []string{ + `{"type":"message_start","message":{"usage":{"input_tokens":1,"output_tokens":0}}}`, + `{"type":"content_block_start","index":0,"content_block":{"type":"thinking"}}`, + `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"first "}}`, + `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"thought"}}`, + `{"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"s1"}}`, + `{"type":"content_block_stop","index":0}`, + `{"type":"content_block_start","index":1,"content_block":{"type":"redacted_thinking","data":"opaque"}}`, + `{"type":"content_block_stop","index":1}`, + `{"type":"content_block_start","index":2,"content_block":{"type":"thinking"}}`, + `{"type":"content_block_delta","index":2,"delta":{"type":"thinking_delta","thinking":"second"}}`, + `{"type":"content_block_delta","index":2,"delta":{"type":"signature_delta","signature":"s2"}}`, + `{"type":"content_block_stop","index":2}`, + `{"type":"content_block_start","index":3,"content_block":{"type":"tool_use","id":"A","name":"lookup","input":{}}}`, + `{"type":"content_block_delta","index":3,"delta":{"type":"input_json_delta","partial_json":"{\"q\":\"A\"}"}}`, + `{"type":"content_block_stop","index":3}`, + `{"type":"content_block_start","index":4,"content_block":{"type":"thinking"}}`, + `{"type":"content_block_delta","index":4,"delta":{"type":"signature_delta","signature":"s3"}}`, + `{"type":"content_block_stop","index":4}`, + `{"type":"message_delta","delta":{"stop_reason":"max_tokens"},"message":{"usage":{"input_tokens":1,"output_tokens":1}}}`, + `{"type":"message_stop"}`, + } + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/vnd.amazon.eventstream") + enc := eventstream.NewEncoder() + for _, chunk := range chunks { + writeBedrockChunk(t, w, enc, chunk) + } + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(converseClaude)) + choice := askConverse(t, llm, llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + assert.Equal(t, []reasoning.Block{ + {Text: "first thought", Signature: []byte("s1")}, + {Redacted: []byte("opaque")}, + {Text: "second", Signature: []byte("s2")}, + {Signature: []byte("s3"), AfterToolCalls: 1}, + }, choice.Reasoning.Sequence()) +} + +func TestAReplayedLegacyTurnGoesBackAsTheVendorSentIt(t *testing.T) { + t.Parallel() + + for name, original := range map[string][]string{ + "reasoning and a progress update before one call": { + legacyThought("", "sig-reasoning"), legacyThought("checking the index", "sig-update"), + `{"type":"text","text":"working"}`, legacyToolUse("A"), + }, + "an update before each of two calls": { + legacyThought("plan", "s1"), `{"type":"text","text":"working"}`, legacyToolUse("A"), + legacyThought("", "s2"), legacyToolUse("B"), + }, + "an update cut off after the last call": { + legacyThought("plan", "s1"), `{"type":"text","text":"working"}`, legacyToolUse("A"), legacyThought("", "s2"), + }, + "an encrypted block between signed ones": { + legacyThought("a", "s1"), `{"type":"redacted_thinking","data":"opaque"}`, legacyThought("b", "s2"), + `{"type":"text","text":"working"}`, legacyToolUse("A"), + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + rec := &legacyRecorder{responses: []string{ + legacyReply(original...), + `{"id":"msg_2","type":"message","role":"assistant","model":"m","content":[{"type":"text","text":"ok"}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`, + }} + llm := rec.serve(t) + choice := askConverse(t, llm) + + turn := []llms.ContentPart{llms.TextPartWithReasoning(choice.Content, choice.Reasoning)} + results := make([]llms.ContentPart, 0, len(choice.ToolCalls)) + for _, call := range choice.ToolCalls { + turn = append(turn, call) + results = append(results, llms.ToolCallResponse{ToolCallID: call.ID, Name: "lookup", Content: "done"}) + } + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: turn}, + {Role: llms.ChatMessageTypeTool, Parts: results}, + }, llms.WithTools(lookupTools())) + require.NoError(t, err) + + var sent []map[string]any + require.NoError(t, json.Unmarshal([]byte("["+strings.Join(original, ",")+"]"), &sent)) + assert.Equal(t, legacyShape(sent), rec.replayedAssistant(t, 1)) + }) + } +} From 5311089001fc55840f23768a2702f070d59d3c2f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 10:22:07 +0300 Subject: [PATCH 468/618] refactor(reasoning): let the block list carry encrypted thinking, and read the old field into it Every door now keeps encrypted thinking as a block of its own, in its place among the others, so the separate Redacted list has nothing left to hold. It never shipped in a tag, and no consumer code reads it. Stored reasoning written while it existed still reads: an encrypted value, as one base64 string or as an array, becomes encrypted blocks after the block the content and signature form, the order the doors of those builds sent them. Co-Authored-By: Claude Opus 5 --- llms/anthropic/redacted_thinking_wire_test.go | 4 +-- .../bedrockclient_converse_test.go | 2 +- .../bedrockclient/thinking_blocks_test.go | 2 +- llms/bedrock/legacy_redacted_thinking_test.go | 2 +- llms/reasoning/blocks.go | 10 ++---- llms/reasoning/blocks_test.go | 3 -- llms/reasoning/content_reasoning_test.go | 4 +-- llms/reasoning/reasoning.go | 31 +++++++------------ 8 files changed, 22 insertions(+), 36 deletions(-) diff --git a/llms/anthropic/redacted_thinking_wire_test.go b/llms/anthropic/redacted_thinking_wire_test.go index afc7066b4..e28003039 100644 --- a/llms/anthropic/redacted_thinking_wire_test.go +++ b/llms/anthropic/redacted_thinking_wire_test.go @@ -76,7 +76,7 @@ func TestAnEncryptedThoughtArrivesAndTravelsBack(t *testing.T) { _, err = llm.GenerateContent(context.Background(), []llms.MessageContent{ {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: [][]byte{[]byte(encrypted)}}), + llms.TextPartWithReasoning("", reasoning.FromBlocks([]reasoning.Block{{Redacted: []byte(encrypted)}})), }}, {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, }, llms.WithMaxTokens(64)) @@ -173,7 +173,7 @@ func TestTwoEncryptedBlocksGoBackAsTwo(t *testing.T) { {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextContent{ Text: "answer", - Reasoning: &reasoning.ContentReasoning{Redacted: [][]byte{[]byte("first"), []byte("second")}}, + Reasoning: reasoning.FromBlocks([]reasoning.Block{{Redacted: []byte("first")}, {Redacted: []byte("second")}}), }}}, {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, }, llms.WithMaxTokens(64)) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index dd0cec9de..5cdd50af7 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -1393,7 +1393,7 @@ func TestConverseClient_RedactedReasoningTravelsBack(t *testing.T) { Role: llms.ChatMessageTypeAI, Content: "answer", Type: "text", - Reasoning: &reasoning.ContentReasoning{Redacted: [][]byte{encrypted}}, + Reasoning: reasoning.FromBlocks([]reasoning.Block{{Redacted: encrypted}}), }, {Role: llms.ChatMessageTypeHuman, Content: "And now?", Type: "text"}, }, diff --git a/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go b/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go index cefaeba6b..140c6f790 100644 --- a/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go +++ b/llms/bedrock/internal/bedrockclient/thinking_blocks_test.go @@ -17,7 +17,7 @@ func TestTwoEncryptedBlocksTravelBackAsTwo(t *testing.T) { {Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}, { Role: llms.ChatMessageTypeAI, Content: "answer", Type: "text", - Reasoning: &reasoning.ContentReasoning{Redacted: [][]byte{{0x01}, {0x02}}}, + Reasoning: reasoning.FromBlocks([]reasoning.Block{{Redacted: []byte{0x01}}, {Redacted: []byte{0x02}}}), }, } diff --git a/llms/bedrock/legacy_redacted_thinking_test.go b/llms/bedrock/legacy_redacted_thinking_test.go index ba0d4c3b1..dbd998a79 100644 --- a/llms/bedrock/legacy_redacted_thinking_test.go +++ b/llms/bedrock/legacy_redacted_thinking_test.go @@ -50,7 +50,7 @@ func TestTheLegacyPathCarriesTheEncryptedThought(t *testing.T) { _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("hi")}}, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.TextPartWithReasoning("", &reasoning.ContentReasoning{Redacted: [][]byte{[]byte(encrypted)}}), + llms.TextPartWithReasoning("", reasoning.FromBlocks([]reasoning.Block{{Redacted: []byte(encrypted)}})), }}, {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{llms.TextPart("and now?")}}, }) diff --git a/llms/reasoning/blocks.go b/llms/reasoning/blocks.go index 61811013d..9ca3ebe58 100644 --- a/llms/reasoning/blocks.go +++ b/llms/reasoning/blocks.go @@ -39,14 +39,10 @@ func (r *ContentReasoning) Sequence() []Block { return r.Blocks } - var sequence []Block - if r.Content != "" || len(r.Signature) > 0 { - sequence = append(sequence, Block{Text: r.Content, Signature: r.Signature}) - } - for _, data := range r.Redacted { - sequence = append(sequence, Block{Redacted: data}) + if r.Content == "" && len(r.Signature) == 0 { + return nil } - return sequence + return []Block{{Text: r.Content, Signature: r.Signature}} } // GroupByToolCalls splits blocks by where they sit in a turn with toolCalls diff --git a/llms/reasoning/blocks_test.go b/llms/reasoning/blocks_test.go index 98be4b21c..ea7ba2bf5 100644 --- a/llms/reasoning/blocks_test.go +++ b/llms/reasoning/blocks_test.go @@ -61,9 +61,6 @@ func TestAHandBuiltReasoningIsOneBlock(t *testing.T) { []Block{{Signature: []byte("sig")}}, (&ContentReasoning{Signature: []byte("sig")}).Sequence(), "a signature with its text withheld is still a block to return") - assert.Equal(t, - []Block{{Text: "step", Signature: []byte("sig")}, {Redacted: []byte("r1")}, {Redacted: []byte("r2")}}, - (&ContentReasoning{Content: "step", Signature: []byte("sig"), Redacted: [][]byte{[]byte("r1"), []byte("r2")}}).Sequence()) assert.Empty(t, (&ContentReasoning{}).Sequence()) assert.Empty(t, (*ContentReasoning)(nil).Sequence()) } diff --git a/llms/reasoning/content_reasoning_test.go b/llms/reasoning/content_reasoning_test.go index 5065c957e..0fe077cad 100644 --- a/llms/reasoning/content_reasoning_test.go +++ b/llms/reasoning/content_reasoning_test.go @@ -32,14 +32,14 @@ func TestHasContentSeparatesReasoningFromSignature(t *testing.T) { func TestRedactedReasoningIsCarriedButIsNotText(t *testing.T) { t.Parallel() - redacted := &ContentReasoning{Redacted: [][]byte{{0x01, 0x02, 0x03}}} + redacted := FromBlocks([]Block{{Redacted: []byte{0x01, 0x02, 0x03}}}) if redacted.IsEmpty() { t.Error("an encrypted block is something to carry back, so it is not empty") } if redacted.HasContent() { t.Error("an encrypted block is not readable thinking") } - if got := redacted.String(); !strings.Contains(got, "3 bytes") || !strings.Contains(got, "1 blocks") { + if got := redacted.String(); !strings.Contains(got, "3 bytes") || !strings.Contains(got, "Blocks: 1") { t.Errorf("String() = %q, want the encrypted size and the block count named", got) } if !(&ContentReasoning{}).IsEmpty() { diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index d066c17d0..35277c943 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -24,10 +24,6 @@ type ContentReasoning struct { // Signature is the signature of the reasoning contents. Signature []byte `json:"signature,omitempty"` - // Redacted is reasoning the provider encrypted. It carries no readable text - // and travels back to the vendor unchanged, one block per element. - Redacted [][]byte `json:"redacted,omitempty"` - // Blocks, when set, is what travels back to the vendor; Content then only // mirrors their text. Blocks []Block `json:"blocks,omitempty"` @@ -35,7 +31,7 @@ type ContentReasoning struct { // IsEmpty reports whether there is nothing to carry back into the next turn. func (r *ContentReasoning) IsEmpty() bool { - return r == nil || (r.Content == "" && len(r.Signature) == 0 && len(r.Redacted) == 0 && len(r.Blocks) == 0) + return r == nil || (r.Content == "" && len(r.Signature) == 0 && len(r.Blocks) == 0) } // HasContent reports whether the model actually reasoned. @@ -55,13 +51,6 @@ func (r *ContentReasoning) String() string { buf.WriteString("\nSignature: ") buf.Write(r.Signature) } - if len(r.Redacted) > 0 { - size := 0 - for _, block := range r.Redacted { - size += len(block) - } - fmt.Fprintf(&buf, "\nRedacted: %d blocks, %d bytes", len(r.Redacted), size) - } if len(r.Blocks) > 0 { encrypted, size := 0, 0 for _, block := range r.Blocks { @@ -101,6 +90,7 @@ func (r *ContentReasoning) UnmarshalJSON(data []byte) error { func (r *ContentReasoning) readStoredRedacted(raw json.RawMessage) error { raw = bytes.TrimSpace(raw) + var encrypted [][]byte switch { case len(raw) == 0 || bytes.Equal(raw, []byte("null")): return nil @@ -109,17 +99,20 @@ func (r *ContentReasoning) readStoredRedacted(raw json.RawMessage) error { if err := json.Unmarshal(raw, &block); err != nil { return err } - if len(block) > 0 { - r.Redacted = append(r.Redacted, block) + encrypted = append(encrypted, block) + default: + if err := json.Unmarshal(raw, &encrypted); err != nil { + return err } - return nil } - var blocks [][]byte - if err := json.Unmarshal(raw, &blocks); err != nil { - return err + blocks := r.Sequence() + for _, data := range encrypted { + blocks = append(blocks, Block{Redacted: data}) + } + if stored := FromBlocks(blocks); stored != nil { + *r = *stored } - r.Redacted = append(r.Redacted, blocks...) return nil } From ef2bb465c6461bf3c38b1c9993ad10749a7f3487 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 10:55:40 +0300 Subject: [PATCH 469/618] fix(bedrock): count a block's place from the start of the turn on both bedrock legs Both bedrock legs see a turn as a flat list of parts, so a tool call placed ahead of the part that carries the reasoning looked like a tool call the vendor had put ahead of the thinking. Converse then moved a lone thought after that call, where the turn used to open with it, and the legacy payload anchored the thinking at its own part instead of the turn. A block's place now counts from the start of the assistant turn on both legs, as it does on the primary anthropic door: the leading run opens the turn and a block that followed a tool call follows it again, whatever order the parts come in. For a tool call ahead of the reasoning part the legacy payload now opens the turn with the thinking, as the other two doors do. Co-Authored-By: Claude Opus 5 --- llms/anthropic/thinking_blocks_test.go | 26 +++++++++++ llms/bedrock/converse_thinking_blocks_test.go | 16 +++---- .../bedrockclient/bedrockclient_converse.go | 5 +- .../bedrockclient/provider_anthropic.go | 46 +++++++++---------- llms/bedrock/legacy_thinking_blocks_test.go | 26 +++++++++++ 5 files changed, 82 insertions(+), 37 deletions(-) diff --git a/llms/anthropic/thinking_blocks_test.go b/llms/anthropic/thinking_blocks_test.go index c84662ba4..95c4774e5 100644 --- a/llms/anthropic/thinking_blocks_test.go +++ b/llms/anthropic/thinking_blocks_test.go @@ -213,3 +213,29 @@ func TestAReplayedTurnGoesBackAsTheVendorSentIt(t *testing.T) { }) } } + +func TestTheTurnOpensWithItsReasoningWhateverThePartOrder(t *testing.T) { + t.Parallel() + + canned := &cannedMessages{responses: []string{messageWith(`{"type":"text","text":"ok"}`)}} + thought := reasoning.FromBlocks([]reasoning.Block{ + {Text: "plan", Signature: []byte("s1")}, + {Signature: []byte("s2"), AfterToolCalls: 1}, + }) + _, err := canned.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, + llms.TextPartWithReasoning("working", thought), + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, + }}, + }, llms.WithMaxTokens(64), llms.WithTools([]llms.Tool{lookupTool()})) + require.NoError(t, err) + + var want []map[string]any + require.NoError(t, json.Unmarshal([]byte("["+thinkingJSON("plan", "s1")+","+toolUseJSON("A")+","+ + thinkingJSON("", "s2")+`,{"type":"text","text":"working"}]`), &want)) + assert.Equal(t, want, canned.assistantContent(t, 0)) +} diff --git a/llms/bedrock/converse_thinking_blocks_test.go b/llms/bedrock/converse_thinking_blocks_test.go index f117077c1..cd639bc71 100644 --- a/llms/bedrock/converse_thinking_blocks_test.go +++ b/llms/bedrock/converse_thinking_blocks_test.go @@ -255,7 +255,6 @@ func TestAMergedConverseTurnKeepsTheReasoningOfEveryPart(t *testing.T) { second := reasoning.FromBlocks([]reasoning.Block{{Text: "two", Signature: []byte("s2")}}) callA := llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}} - callB := llms.ToolCall{ID: "B", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"B"}`}} both := []string{"thought one/s1", "thought two/s2", "text t1", "text t2", "tool A"} for name, tc := range map[string]struct { @@ -271,10 +270,9 @@ func TestAMergedConverseTurnKeepsTheReasoningOfEveryPart(t *testing.T) { {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("t1", first)}}, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("t2", second), callA}}, }, want: both}, - "a later message after an earlier call": {turn: []llms.MessageContent{ - {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("t1", first), callA}}, - {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("", second), callB}}, - }, want: []string{"thought one/s1", "text t1", "tool A", "thought two/s2", "tool B"}}, + "a tool call ahead of the reasoning part": {turn: []llms.MessageContent{ + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{callA, llms.TextPartWithReasoning("t1", first)}}, + }, want: []string{"thought one/s1", "text t1", "tool A"}}, "an empty reasoning ahead of a real one": {turn: []llms.MessageContent{{Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ llms.TextPartWithReasoning("t1", &reasoning.ContentReasoning{}), llms.TextPartWithReasoning("t2", second), @@ -288,11 +286,9 @@ func TestAMergedConverseTurnKeepsTheReasoningOfEveryPart(t *testing.T) { `{"output":{"message":{"role":"assistant","content":[{"text":"ok"}]}},"stopReason":"end_turn"}`, }} history := append([]llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "look it up")}, tc.turn...) - results := []llms.ContentPart{llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}} - if tc.want[len(tc.want)-1] == "tool B" { - results = append(results, llms.ToolCallResponse{ToolCallID: "B", Name: "lookup", Content: "done"}) - } - history = append(history, llms.MessageContent{Role: llms.ChatMessageTypeTool, Parts: results}) + history = append(history, llms.MessageContent{Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, + }}) _, err := rec.serve(t).GenerateContent(context.Background(), history, llms.WithTools(lookupTools())) require.NoError(t, err) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 2b23f4aad..b74e50073 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -320,10 +320,7 @@ func (a *aiMessageAccumulator) addTextContent(content string, reasoningContent * a.textBlocks = append(a.textBlocks, content) } - for _, block := range reasoningContent.Sequence() { - block.AfterToolCalls += len(a.toolUseBlocks) - a.thoughts = append(a.thoughts, block) - } + a.thoughts = append(a.thoughts, reasoningContent.Sequence()...) a.hasAnyContent = true } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 8f75055ed..04450b5a1 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -675,26 +675,22 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati } continue } - content := make([]anthropicTextGenerationInputContent, 0, len(chunk)) + var thoughts []reasoning.Block toolUses := 0 for _, message := range chunk { + if message.Role == llms.ChatMessageTypeAI { + thoughts = append(thoughts, message.Reasoning.Sequence()...) + } if message.Type == AnthropicMessageTypeToolUse { toolUses++ } } - afterToolUse := make([][]reasoning.Block, toolUses+1) + placed := reasoning.GroupByToolCalls(thoughts, toolUses) + + content := make([]anthropicTextGenerationInputContent, 0, len(chunk)+len(thoughts)) + content = appendAnthropicThinking(content, placed[0]) emitted := 0 for _, message := range chunk { - if message.Role == llms.ChatMessageTypeAI { - for _, thought := range message.Reasoning.Sequence() { - at := min(emitted+max(thought.AfterToolCalls, 0), toolUses) - if at == emitted { - content = append(content, anthropicThinkingContent(thought)) - continue - } - afterToolUse[at] = append(afterToolUse[at], thought) - } - } block, err := getAnthropicInputContent(message) if err != nil { return nil, "", err @@ -702,9 +698,7 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati content = append(content, block) if message.Type == AnthropicMessageTypeToolUse { emitted++ - for _, thought := range afterToolUse[emitted] { - content = append(content, anthropicThinkingContent(thought)) - } + content = appendAnthropicThinking(content, placed[emitted]) } } inputContents = append(inputContents, &anthropicTextGenerationInputMessage{ @@ -715,15 +709,21 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati return inputContents, systemPrompt, nil } -func anthropicThinkingContent(block reasoning.Block) anthropicTextGenerationInputContent { - if block.Redacted != nil { - return anthropicTextGenerationInputContent{Type: "redacted_thinking", Data: string(block.Redacted)} - } - return anthropicTextGenerationInputContent{ - Type: "thinking", - Thinking: block.Text, - Signature: string(block.Signature), +func appendAnthropicThinking( + content []anthropicTextGenerationInputContent, blocks []reasoning.Block, +) []anthropicTextGenerationInputContent { + for _, block := range blocks { + if block.Redacted != nil { + content = append(content, anthropicTextGenerationInputContent{Type: "redacted_thinking", Data: string(block.Redacted)}) + continue + } + content = append(content, anthropicTextGenerationInputContent{ + Type: "thinking", + Thinking: block.Text, + Signature: string(block.Signature), + }) } + return content } // process the role of the message to anthropic supported role. diff --git a/llms/bedrock/legacy_thinking_blocks_test.go b/llms/bedrock/legacy_thinking_blocks_test.go index bce14e82c..a637aa058 100644 --- a/llms/bedrock/legacy_thinking_blocks_test.go +++ b/llms/bedrock/legacy_thinking_blocks_test.go @@ -219,3 +219,29 @@ func TestAReplayedLegacyTurnGoesBackAsTheVendorSentIt(t *testing.T) { }) } } + +func TestTheLegacyDoorOpensTheTurnWithItsReasoningWhateverThePartOrder(t *testing.T) { + t.Parallel() + + rec := &legacyRecorder{responses: []string{ + `{"id":"msg_2","type":"message","role":"assistant","model":"m","content":[{"type":"text","text":"ok"}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`, + }} + thought := reasoning.FromBlocks([]reasoning.Block{ + {Text: "plan", Signature: []byte("s1")}, + {Signature: []byte("s2"), AfterToolCalls: 1}, + }) + _, err := rec.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, + llms.TextPartWithReasoning("working", thought), + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, + }}, + }, llms.WithTools(lookupTools())) + require.NoError(t, err) + + assert.Equal(t, []string{"thought plan/s1", "tool A", "thought /s2", "text working"}, rec.replayedAssistant(t, 0)) +} From ae8df686e2ca2205062f62a787266b02f035115b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 11:26:26 +0300 Subject: [PATCH 470/618] refactor(llms): read a Claude answer in one pass, and keep streamed blocks in one map The primary anthropic door walked the answer twice, once for thinking and once for text and tool calls, so the tool-call count that places each block and the tool calls handed back lived in two loops over the same slice. Both bedrock doors already do this in one pass; the anthropic door now does too. The stream collector kept thinking blocks and tool uses in two maps, merged their indexes by hand, and each stream wrote the block fields itself. It now keeps one map by content block index and owns the writes both streams share. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 17 ++--- .../bedrockclient/bedrockclient_converse.go | 7 +- .../bedrockclient/provider_anthropic.go | 10 ++- .../bedrockclient/reasoning_stream.go | 64 +++++++++---------- 4 files changed, 44 insertions(+), 54 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 7eedb5776..411d71fd9 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -395,24 +395,15 @@ func processAnthropicResponse( } var thoughts reasoning.Collector + var toolCalls []llms.ToolCall + var textContent strings.Builder + for _, content := range result.Content { switch cv := content.(type) { case *anthropicclient.ThinkingContent: thoughts.Thought(cv.Thinking, []byte(cv.Signature)) case *anthropicclient.RedactedThinkingContent: thoughts.Encrypted([]byte(cv.Data)) - case *anthropicclient.ToolUseContent: - thoughts.ToolCall() - } - } - contentReasoning := thoughts.Reasoning() - - // Process content blocks to collect text and tool calls - var toolCalls []llms.ToolCall - var textContent strings.Builder - - for _, content := range result.Content { - switch cv := content.(type) { case *anthropicclient.TextContent: textContent.WriteString(cv.Text) case *anthropicclient.ToolUseContent: @@ -429,8 +420,10 @@ func processAnthropicResponse( }, } toolCalls = append(toolCalls, toolCall) + thoughts.ToolCall() } } + contentReasoning := thoughts.Reasoning() // Build response choice - reasoning ALWAYS goes to choice, not tool calls choice := &llms.ContentChoice{ diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index b74e50073..673d253ae 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -999,15 +999,14 @@ type converseReasoningStream struct { } func (a *converseReasoningStream) add(index int32, delta types.ReasoningContentBlockDelta) (readableText string) { - thought := a.at(index) switch block := delta.(type) { case *types.ReasoningContentBlockDeltaMemberText: - thought.text.WriteString(block.Value) + a.text(index, block.Value) return block.Value case *types.ReasoningContentBlockDeltaMemberSignature: - thought.signature.WriteString(block.Value) + a.signature(index, block.Value) case *types.ReasoningContentBlockDeltaMemberRedactedContent: - thought.redacted = append(thought.redacted, block.Value...) + a.encrypted(index, block.Value) } return "" } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 04450b5a1..711bc2712 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -539,8 +539,7 @@ DoStream: Name: resp.ContentBlock.Name, } case "redacted_thinking": - thought := thoughts.at(int32(resp.Index)) - thought.redacted = append(thought.redacted, resp.ContentBlock.Data...) + thoughts.encrypted(int32(resp.Index), []byte(resp.ContentBlock.Data)) } case "content_block_delta": switch resp.Delta.Type { @@ -551,10 +550,9 @@ DoStream: break DoStream } case "thinking_delta": - thought := thoughts.at(int32(resp.Index)) - thought.signature.WriteString(resp.Delta.Signature) + thoughts.signature(int32(resp.Index), resp.Delta.Signature) if resp.Delta.Thinking != "" { - thought.text.WriteString(resp.Delta.Thinking) + thoughts.text(int32(resp.Index), resp.Delta.Thinking) chunk := streaming.Chunk{ Type: streaming.ChunkTypeReasoning, Reasoning: &reasoning.ContentReasoning{Content: resp.Delta.Thinking}, @@ -565,7 +563,7 @@ DoStream: } } case "signature_delta": - thoughts.at(int32(resp.Index)).signature.WriteString(resp.Delta.Signature) + thoughts.signature(int32(resp.Index), resp.Delta.Signature) case "input_json_delta": if currentToolCall != nil { // Bedrock already sends deltas in PartialJSON, not full accumulated JSON diff --git a/llms/bedrock/internal/bedrockclient/reasoning_stream.go b/llms/bedrock/internal/bedrockclient/reasoning_stream.go index 27c177980..e87c31501 100644 --- a/llms/bedrock/internal/bedrockclient/reasoning_stream.go +++ b/llms/bedrock/internal/bedrockclient/reasoning_stream.go @@ -2,64 +2,64 @@ package bedrockclient import ( "bytes" + "maps" "slices" "strings" "github.com/vxcontrol/langchaingo/llms/reasoning" ) -type streamedThought struct { +type streamedBlock struct { + toolCall bool text strings.Builder signature bytes.Buffer redacted []byte } type streamedReasoning struct { - thoughts map[int32]*streamedThought - toolCalls map[int32]bool + blocks map[int32]*streamedBlock } -func (s *streamedReasoning) at(index int32) *streamedThought { - if s.thoughts == nil { - s.thoughts = make(map[int32]*streamedThought) +func (s *streamedReasoning) at(index int32) *streamedBlock { + if s.blocks == nil { + s.blocks = make(map[int32]*streamedBlock) } - thought, ok := s.thoughts[index] + block, ok := s.blocks[index] if !ok { - thought = &streamedThought{} - s.thoughts[index] = thought + block = &streamedBlock{} + s.blocks[index] = block } - return thought + return block +} + +func (s *streamedReasoning) text(index int32, text string) { + s.at(index).text.WriteString(text) +} + +func (s *streamedReasoning) signature(index int32, signature string) { + s.at(index).signature.WriteString(signature) +} + +func (s *streamedReasoning) encrypted(index int32, data []byte) { + block := s.at(index) + block.redacted = append(block.redacted, data...) } func (s *streamedReasoning) toolCall(index int32) { - if s.toolCalls == nil { - s.toolCalls = make(map[int32]bool) - } - s.toolCalls[index] = true + s.at(index).toolCall = true } func (s *streamedReasoning) result() *reasoning.ContentReasoning { - indexes := make([]int32, 0, len(s.thoughts)+len(s.toolCalls)) - for index := range s.thoughts { - indexes = append(indexes, index) - } - for index := range s.toolCalls { - if _, isThought := s.thoughts[index]; !isThought { - indexes = append(indexes, index) - } - } - slices.Sort(indexes) - var thoughts reasoning.Collector - for _, index := range indexes { - thought, isThought := s.thoughts[index] + for _, index := range slices.Sorted(maps.Keys(s.blocks)) { + block := s.blocks[index] switch { - case !isThought: + case block.redacted != nil: + thoughts.Encrypted(block.redacted) + case block.text.Len() > 0 || block.signature.Len() > 0: + thoughts.Thought(block.text.String(), bytes.Clone(block.signature.Bytes())) + case block.toolCall: thoughts.ToolCall() - case thought.redacted != nil: - thoughts.Encrypted(thought.redacted) - default: - thoughts.Thought(thought.text.String(), bytes.Clone(thought.signature.Bytes())) } } return thoughts.Reasoning() From fff7806a045f6bc5cbb542716082d119ef781dd1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 11:27:03 +0300 Subject: [PATCH 471/618] docs(bedrock): describe how reasoning blocks keep their signatures and places The README still said a turn's reasoning travels in one Signature field and that thinking always goes before the text. A response can carry several blocks, each with its own signature, and the doors now put each back where the vendor put it, so the section says that and shows reading blocks through Sequence. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 61f4cc779..1aaf66fee 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -271,28 +271,36 @@ Extended thinking/reasoning capabilities are model-specific features. OpenAI OSS ```mermaid flowchart TB A[AI Message with Reasoning] --> B{Legacy or Converse?} - B -->|Legacy API| C[Add thinking blocks
BEFORE text content] - B -->|Converse API| D[Add ReasoningContent blocks
with signature] + B -->|Legacy API| C[thinking and redacted_thinking blocks] + B -->|Converse API| D[reasoningContent blocks] C --> E[anthropicTextGenerationInputContent array] D --> F[types.ContentBlock array] ``` **Why order matters?** -Anthropic API spec requires thinking blocks before text blocks in assistant messages. +A response can carry several reasoning blocks, each signed on its own, with encrypted +blocks among them, and the vendor wants the blocks of the last assistant turn back +unchanged and in its order. Both paths put every block back where the vendor put it: +the blocks that came before any tool call open the turn, and a block that followed a +tool call follows that call again. ### Signature Preservation -**Challenge**: Reasoning signatures must round-trip through conversations. - -**Solution**: Store in `reasoning.ContentReasoning.Signature` field, re-insert on next turn. +Every block keeps its own signature. `reasoning.ContentReasoning` carries the blocks in +`Blocks`, in the vendor's order; a reasoning made of one plain block keeps the classic +`Content` and `Signature` fields instead. `Sequence()` reads both shapes. `Content` joins +the readable text of every block for display and is not what travels back when `Blocks` +is set, so hand the reasoning back as it came: ```go -// Receive -choice.Reasoning.Signature = []byte(...) +// Receive: every block with its signature and place +for _, block := range choice.Reasoning.Sequence() { + _ = block.Signature +} // Send back -llms.TextPartWithReasoning(content, reasoning) +llms.TextPartWithReasoning(choice.Content, choice.Reasoning) ``` ## Message Processing Pipeline From 1a29adcdd5b7cceddfdc4e89eb1898b13a1d689c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 11:44:50 +0300 Subject: [PATCH 472/618] docs(bedrock): name exactly which lone block keeps the classic fields A single block keeps Content and Signature only when it is not encrypted and came before any tool call; a lone block after a tool call stays in Blocks. The README said "one plain block", which read as any single block. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 1aaf66fee..15096ae2c 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -288,8 +288,9 @@ tool call follows that call again. ### Signature Preservation Every block keeps its own signature. `reasoning.ContentReasoning` carries the blocks in -`Blocks`, in the vendor's order; a reasoning made of one plain block keeps the classic -`Content` and `Signature` fields instead. `Sequence()` reads both shapes. `Content` joins +`Blocks`, in the vendor's order; a reasoning made of a single unencrypted block that came +before any tool call keeps the classic `Content` and `Signature` fields instead. +`Sequence()` reads both shapes. `Content` joins the readable text of every block for display and is not what travels back when `Blocks` is set, so hand the reasoning back as it came: From e9ae11a49e10f71911525ee1d97f2aa96c11c1ea Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 11:50:31 +0300 Subject: [PATCH 473/618] docs(reasoning): name which lone block FromBlocks keeps in the classic fields A single block that follows a tool call stays in Blocks so its place survives; the doc comment said any lone plain block keeps Content and Signature, which is what the bedrock README had to be corrected for. Co-Authored-By: Claude Opus 5 --- llms/reasoning/blocks.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/blocks.go b/llms/reasoning/blocks.go index 9ca3ebe58..a458300de 100644 --- a/llms/reasoning/blocks.go +++ b/llms/reasoning/blocks.go @@ -14,8 +14,9 @@ type Block struct { AfterToolCalls int `json:"after_tool_calls,omitempty"` } -// FromBlocks builds the reasoning of one response. A lone plain block comes -// back as Content and Signature with no Blocks, so read blocks through Sequence. +// FromBlocks builds the reasoning of one response. A lone plain block that no +// tool call precedes comes back as Content and Signature with no Blocks, so read +// blocks through Sequence. func FromBlocks(blocks []Block) *ContentReasoning { switch { case len(blocks) == 0: From 2a02688425f93fc974abbbde62ee154e2eff73e8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:04:24 +0300 Subject: [PATCH 474/618] fix(reasoning): let Bedrock turn thinking off on Opus 5 and Sonnet 5 WithReasoningDisabled() on us.anthropic.claude-sonnet-5 or claude-opus-5 returned ErrReasoningOffUnsupported on both Bedrock doors, and the hint told pentagi to hide the off switch. AWS documents the opposite: "To turn thinking off entirely on these models, pass thinking: {type: disabled} explicitly" (Bedrock adaptive-thinking guide, Sonnet 5 and Opus 5 cards). Both doors now send thinking:{type:disabled} with no effort beside it, which also keeps Opus 5 clear of its xhigh/max-with-disabled rejection. The OpenAI-shaped transport keeps refusing: it cannot express the Anthropic disable, and the gateway ignores reasoning_effort:none there. Fable and Mythos stay undisableable. The two wire tests that pinned the disabled body had been skipped; they run again, for both models. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 9 +-- .../bedrockclient_converse_test.go | 66 +++++++++---------- .../provider_anthropic_reasoning_test.go | 27 ++++---- .../bedrockclient/reasoning_off_test.go | 21 +++++- llms/bedrock/models_list.go | 7 +- llms/reasoning/off.go | 5 +- llms/reasoning/off_test.go | 15 +++-- llms/reasoning_support_test.go | 11 ++-- 8 files changed, 86 insertions(+), 75 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 15096ae2c..97205eb67 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -219,9 +219,9 @@ source of truth used by the first-party Anthropic provider): - **Adaptive-only** (Opus 4.7/4.8/5, Sonnet 5, Fable 5): `thinking.type=adaptive` + `output_config.effort`; budget thinking and sampling params are rejected. Opus 5, Sonnet 5, and Fable 5 think by default (Opus 5 is a breaking change from Opus 4.8, - which defaults off); on Bedrock a default-on model cannot be explicitly disabled - (always-on there), while Opus 4.7/4.8 default off, so omitting thinking already - yields off. + which defaults off). `WithReasoningDisabled()` sends `thinking.type=disabled` to + Opus 5 and Sonnet 5 and no effort beside it; Fable 5 cannot be disabled. Opus 4.7/4.8 + default off, so omitting thinking already yields off. - **Adaptive + budget** (Opus 4.6, Sonnet 4.6): either mechanism; caller preference honored. - **Budget-only** (Opus 4.5, Sonnet 4.5, Haiku 4.5): `thinking.type=enabled` + `budget_tokens`. Opus 4.6 and Sonnet 4.6 also carry `output_config.effort` on @@ -231,7 +231,8 @@ source of truth used by the first-party Anthropic provider): Nova 2 carries `type` plus `maxReasoningEffort` (low/medium/high) on both paths, and its top effort clears `maxTokens`, `temperature` and `topP`, which Nova refuses beside it. Grok carries an effort and nothing else. `WithReasoningDisabled()` -returns a typed `ErrReasoningOffUnsupported` for always-on Bedrock models. +returns a typed `ErrReasoningOffUnsupported` for a model whose thinking cannot be +turned off, such as Fable, Mythos or DeepSeek R1. ## Structured Output diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 5cdd50af7..4845350d6 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -344,44 +344,44 @@ func TestConverseClient_AdaptiveReasoning(t *testing.T) { } func TestConverseClient_ReasoningOffDefaultOnSendsDisabled(t *testing.T) { - t.Skip("Skipping test due to model not being available") - - mockClient := &MockBedrockRuntimeClient{} - client := NewConverseClient(mockClient) + for _, model := range []string{"us.anthropic.claude-sonnet-5-v1:0", "us.anthropic.claude-opus-5-v1:0"} { + t.Run(model, func(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) - var capturedInput *bedrockruntime.ConverseInput - mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { - capturedInput = input - return true - }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ - Output: &types.ConverseOutputMemberMessage{ - Value: types.Message{ - Role: types.ConversationRoleAssistant, - Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, - }, - }, - }, nil) + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) - input := &ConverseInput{ - ModelID: "us.anthropic.claude-sonnet-5-v1:0", // thinks by default - Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, - MaxTokens: ptr(2000), - ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOff}, - } + input := &ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(2000), + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOff, Effort: llms.ReasoningXHigh}, + } - _, err := client.CreateCompletionConverse(t.Context(), input) - assert.NoError(t, err) + _, err := client.CreateCompletionConverse(t.Context(), input) + require.NoError(t, err) - if !assert.NotNil(t, capturedInput.AdditionalModelRequestFields) { - return + require.NotNil(t, capturedInput.AdditionalModelRequestFields) + raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(raw, &fields)) + assert.Equal(t, map[string]any{"type": "disabled"}, fields["thinking"]) + assert.NotContains(t, fields, "output_config", "Opus 5 rejects xhigh and max next to disabled thinking") + mockClient.AssertExpectations(t) + }) } - raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() - assert.NoError(t, err) - var fields map[string]any - assert.NoError(t, json.Unmarshal(raw, &fields)) - thinking, _ := fields["thinking"].(map[string]any) - assert.Equal(t, "disabled", thinking["type"]) - mockClient.AssertExpectations(t) } func TestConverseClient_ReasoningOffDefaultOffOmits(t *testing.T) { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index 506913ea6..d483bd823 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -204,23 +204,20 @@ func TestApplyAnthropicReasoning_AdaptiveOnBudgetOnlyDowngrades(t *testing.T) { func TestApplyAnthropicReasoning_OffDefaultOnSendsDisabled(t *testing.T) { t.Parallel() - t.Skip("Skipping test due to model not being available") + for _, model := range []string{"us.anthropic.claude-sonnet-5-v1:0", "us.anthropic.claude-opus-5-v1:0"} { + t.Run(model, func(t *testing.T) { + t.Parallel() - // Sonnet 5 thinks by default, so an explicit off must send thinking:{disabled}. - input := anthropicTextGenerationInput{MaxTokens: 2048} - err := applyAnthropicReasoning(&input, - &llms.ReasoningConfig{Mode: llms.ReasoningOff}, - "us.anthropic.claude-sonnet-5-v1:0", 2048) + input := anthropicTextGenerationInput{MaxTokens: 2048} + err := applyAnthropicReasoning(&input, + &llms.ReasoningConfig{Mode: llms.ReasoningOff, Effort: llms.ReasoningXHigh}, model, 2048) + require.NoError(t, err) - require.NoError(t, err) - require.NotNil(t, input.Thinking) - assert.Equal(t, "disabled", input.Thinking.Type) - - fields := marshalAnthropicInput(t, input) - thinking, _ := fields["thinking"].(map[string]any) - assert.Equal(t, "disabled", thinking["type"]) - _, hasBudget := thinking["budget_tokens"] - assert.False(t, hasBudget, "disabled thinking carries no budget") + fields := marshalAnthropicInput(t, input) + assert.Equal(t, map[string]any{"type": "disabled"}, fields["thinking"]) + assert.NotContains(t, fields, "output_config", "Opus 5 rejects xhigh and max next to disabled thinking") + }) + } } func TestApplyAnthropicReasoning_OffDefaultOffOmits(t *testing.T) { diff --git a/llms/bedrock/internal/bedrockclient/reasoning_off_test.go b/llms/bedrock/internal/bedrockclient/reasoning_off_test.go index 78d3a8865..d9d541fbf 100644 --- a/llms/bedrock/internal/bedrockclient/reasoning_off_test.go +++ b/llms/bedrock/internal/bedrockclient/reasoning_off_test.go @@ -53,7 +53,7 @@ func TestTheLegacyDoorRefusesAnUndisableableThinking(t *testing.T) { for _, model := range []string{ "us.deepseek.r1-v1:0", - "us.anthropic.claude-sonnet-5-v1:0", + "us.anthropic.claude-fable-5-1", } { t.Run(model, func(t *testing.T) { t.Parallel() @@ -89,6 +89,25 @@ func TestTheLegacyDoorServesAnOffThatOmittingAlreadyMeans(t *testing.T) { } } +func TestTheLegacyDoorSendsTheOffADefaultOnClaudeAccepts(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "us.anthropic.claude-sonnet-5-v1:0", + "us.anthropic.claude-opus-5-v1:0", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + seen, err := offCall(t, model) + + var offErr *reasoning.ErrReasoningOffUnsupported + require.NotErrorAs(t, err, &offErr, "Bedrock documents thinking disabled for this model") + assert.Positive(t, seen, "the call must reach the vendor") + }) + } +} + func TestTheLegacyDoorLeavesACallThatSaidNothingAboutThinkingAlone(t *testing.T) { t.Parallel() diff --git a/llms/bedrock/models_list.go b/llms/bedrock/models_list.go index f9195660d..8293b9bd6 100644 --- a/llms/bedrock/models_list.go +++ b/llms/bedrock/models_list.go @@ -45,9 +45,7 @@ const ( // Claude Opus 5 is Anthropic's model for complex agentic coding and enterprise work, succeeding // Opus 4.8. Adaptive thinking is on by default (a breaking change from Opus 4.8, which defaulted - // off). Supports adaptive thinking only: budget thinking and sampling params are rejected. On - // Bedrock, adaptive thinking is always on and cannot be disabled, unlike the Anthropic API where - // it accepts an explicit disable. + // off). Supports adaptive thinking only: budget thinking and sampling params are rejected. // // Max tokens: 1M // Languages: English, French, Modern Standard Arabic, Mandarin Chinese, Hindi, Spanish, Portuguese, Korean, Japanese, German, Russian, Polish, and other languages. @@ -71,8 +69,7 @@ const ( // Claude Sonnet 5 is Anthropic's most capable Sonnet, built for coding, agents, and professional // work at scale with near-Opus intelligence at Sonnet cost. Adaptive thinking is on by default; - // budget thinking and non-default sampling params are rejected. On Bedrock, adaptive thinking is - // always on and cannot be disabled, unlike the Anthropic API where it accepts an explicit disable. + // budget thinking and non-default sampling params are rejected. // // Max tokens: 1M // Languages: English, French, Modern Standard Arabic, Mandarin Chinese, Hindi, Spanish, Portuguese, Korean, Japanese, German, Russian, Polish, and other languages. diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 4e84a15b4..f0a71f0aa 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -67,10 +67,7 @@ func ResolveOff(model string, p Provider) OffWire { case ClaudeThinkingAlwaysOn(model): return OffUnsupported // Fable 5 / Mythos 5: thinking cannot be disabled case ClaudeThinkingDefaultsOn(model): - // Only Anthropic-operated platforms accept thinking:{disabled} here. On - // Amazon Bedrock the adaptive-only default-on models (e.g. Sonnet 5) keep - // thinking always on, so a disable is rejected — report it as unsupported. - if p == ProviderBedrock || p == ProviderOpenAI { + if p == ProviderOpenAI { return OffUnsupported } return OffDisableClaude diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index c6b4c7727..f3457ae4d 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -11,13 +11,14 @@ func TestResolveOff(t *testing.T) { }{ {"claude-fable-5", ProviderAnthropic, OffUnsupported}, {"us.anthropic.claude-mythos-5", ProviderBedrock, OffUnsupported}, - {"claude-sonnet-5", ProviderAnthropic, OffDisableClaude}, // on by default, disablable on Anthropic - {"us.anthropic.claude-sonnet-5", ProviderBedrock, OffUnsupported}, // always on on Bedrock, not disablable - {"claude-opus-5", ProviderAnthropic, OffDisableClaude}, // on by default, disablable on Anthropic - {"us.anthropic.claude-opus-5", ProviderBedrock, OffUnsupported}, // always on on Bedrock, not disablable - {"claude-opus-4-8", ProviderAnthropic, OffOmit}, // off by default - {"claude-sonnet-4-5", ProviderBedrock, OffOmit}, // off by default - {"claude-3-5-haiku", ProviderAnthropic, OffOmit}, // no thinking + {"claude-sonnet-5", ProviderAnthropic, OffDisableClaude}, + {"us.anthropic.claude-sonnet-5", ProviderBedrock, OffDisableClaude}, + {"anthropic/claude-sonnet-5", ProviderOpenAI, OffUnsupported}, + {"claude-opus-5", ProviderAnthropic, OffDisableClaude}, + {"us.anthropic.claude-opus-5", ProviderBedrock, OffDisableClaude}, + {"claude-opus-4-8", ProviderAnthropic, OffOmit}, // off by default + {"claude-sonnet-4-5", ProviderBedrock, OffOmit}, // off by default + {"claude-3-5-haiku", ProviderAnthropic, OffOmit}, // no thinking {"gemini-2.5-flash", ProviderGoogleAI, OffZeroBudget}, {"gemini-2.5-flash-lite", ProviderGoogleAI, OffZeroBudget}, {"gemini-2.5-pro", ProviderGoogleAI, OffUnsupported}, // Pro cannot disable thinking diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index b25d696c8..27fbae2e8 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -75,12 +75,11 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } }) - t.Run("Sonnet 5 disable hint is provider-aware", func(t *testing.T) { - // Disablable on the Anthropic API, not disablable on Bedrock (always on). + t.Run("Sonnet 5 cannot be disabled only through an OpenAI-shaped gateway", func(t *testing.T) { anthropic := ReasoningSupportFor("claude-sonnet-5", reasoning.ProviderAnthropic) eq(t, "CannotDisable(Anthropic)", anthropic.CannotDisable, false) bedrock := ReasoningSupportFor("us.anthropic.claude-sonnet-5", reasoning.ProviderBedrock) - eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, true) + eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, false) gateway := ReasoningSupportFor("anthropic/claude-sonnet-5", reasoning.ProviderOpenAI) eq(t, "CannotDisable(OpenAI gateway)", gateway.CannotDisable, true) }) @@ -93,9 +92,8 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes if s.DefaultOn == nil || !*s.DefaultOn { t.Errorf("Opus 5 DefaultOn = %v, want true", s.DefaultOn) } - // Provider-aware, same rule as Sonnet 5: not disablable on Bedrock. bedrock := ReasoningSupportFor("us.anthropic.claude-opus-5", reasoning.ProviderBedrock) - eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, true) + eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, false) }) t.Run("OpenAI o-series cannot disable", func(t *testing.T) { @@ -325,7 +323,8 @@ func TestCannotDisableFollowsTheResolverOnEveryProvider(t *testing.T) { want bool }{ {"claude-sonnet-5", reasoning.ProviderAnthropic, false}, - {"claude-sonnet-5", reasoning.ProviderBedrock, true}, + {"claude-sonnet-5", reasoning.ProviderBedrock, false}, + {"claude-sonnet-5", reasoning.ProviderOpenAI, true}, {"claude-sonnet-5", reasoning.ProviderUnknown, false}, {"claude-fable-5", reasoning.ProviderAnthropic, true}, {"claude-fable-5", reasoning.ProviderBedrock, true}, From 6f03b03a0b27df7a879cb9a2a03d8b84a5ea1bb5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:23:00 +0300 Subject: [PATCH 475/618] fix(openai): give DeepSeek back the reasoning of every assistant turn With WithPreserveReasoningContent the openai door put reasoning_content only on assistant turns that called a tool. DeepSeek's thinking-mode guide requires it on every earlier assistant turn once the request carries tools ("even for turns where the model did not perform a tool call"; a missing one is a 400) and ignores it when the request has none. pentagi reaches this on its default DeepSeek path: a text-only answer goes back through the reflector with tools, and so does every second user message. DeepSeek models now get reasoning_content on every assistant turn; other vendors keep getting it only on tool turns, since their docs say nothing about the text turns. Through the gateway the vendor accepted both forms. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 8 +-- llms/openai/openaillm_option.go | 7 +-- llms/openai/openaillm_test.go | 2 +- llms/openai/reasoning_replay_test.go | 86 ++++++++++++++++++++++++++++ llms/reasoning/effort_wire.go | 11 ++++ 5 files changed, 105 insertions(+), 9 deletions(-) create mode 100644 llms/openai/reasoning_replay_test.go diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 2eb66463a..d183d553a 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -107,7 +107,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } - chatMsgs, err := o.convertMessages(messages) + chatMsgs, err := o.convertMessages(messages, o.effectiveModel(opts)) if err != nil { return nil, err } @@ -159,7 +159,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten } // convertMessages converts LangChain messages to OpenAI chat messages. -func (o *LLM) convertMessages(messages []llms.MessageContent) ([]*ChatMessage, error) { +func (o *LLM) convertMessages(messages []llms.MessageContent, model string) ([]*ChatMessage, error) { chatMsgs := make([]*ChatMessage, 0, len(messages)) for _, mc := range messages { msg := &ChatMessage{MultiContent: mc.Parts} @@ -172,8 +172,8 @@ func (o *LLM) convertMessages(messages []llms.MessageContent) ([]*ChatMessage, e msg.MultiContent = newParts msg.ToolCalls = toolCallsFromToolCalls(toolCalls) - // Preserve reasoning content for multi-turn conversations with tool calls - if o.client != nil && o.client.PreserveReasoningContent && msg.Role == RoleAssistant && len(toolCalls) > 0 { + if o.client != nil && o.client.PreserveReasoningContent && msg.Role == RoleAssistant && + (len(toolCalls) > 0 || reasoning.ReplaysReasoningOnEveryTurn(model)) { msg.ReasoningContent = extractReasoningContent(mc.Parts) } diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index b64b0e74f..af5f9431d 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -173,10 +173,9 @@ func WithModernReasoningFormat() Option { } } -// WithPreserveReasoningContent enables preservation of reasoning content -// in multi-turn conversations with tool calls. This is required for some -// LLM providers like Moonshot that expect reasoning_content field in -// assistant messages with tool calls. +// WithPreserveReasoningContent sends each assistant turn's reasoning back as +// reasoning_content: on the turns that called a tool, and on every assistant +// turn for DeepSeek models. func WithPreserveReasoningContent() Option { return func(opts *options) { opts.preserveReasoningContent = true diff --git a/llms/openai/openaillm_test.go b/llms/openai/openaillm_test.go index a74164d2b..c4709b915 100644 --- a/llms/openai/openaillm_test.go +++ b/llms/openai/openaillm_test.go @@ -796,7 +796,7 @@ func TestConvertMessages(t *testing.T) { //nolint:funlen for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { t.Parallel() - result, err := llm.convertMessages(tt.messages) + result, err := llm.convertMessages(tt.messages, "") if tt.expectError { assert.Error(t, err) diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go new file mode 100644 index 000000000..8d691cb1c --- /dev/null +++ b/llms/openai/reasoning_replay_test.go @@ -0,0 +1,86 @@ +package openai + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func replayedReasoning(t *testing.T, model string) []any { + t.Helper() + + var body map[string]any + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, err := io.ReadAll(r.Body) + if err != nil { + t.Errorf("read request: %v", err) + return + } + if err := json.Unmarshal(raw, &body); err != nil { + t.Errorf("decode request: %v", err) + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + defer server.Close() + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel(model), WithPreserveReasoningContent()) + require.NoError(t, err) + + thought := func(text string) *reasoning.ContentReasoning { return &reasoning.ContentReasoning{Content: text} } + history := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("answered in text", thought("text turn thought")), + }}, + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", thought("tool turn thought")), + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, + }}, + } + tools := []llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ + Name: "f", Parameters: map[string]any{"type": "object"}, + }}} + + _, err = llm.GenerateContent(context.Background(), history, llms.WithTools(tools)) + require.NoError(t, err) + + var replayed []any + for _, raw := range body["messages"].([]any) { + msg := raw.(map[string]any) + if msg["role"] == "assistant" { + replayed = append(replayed, msg["reasoning_content"]) + } + } + return replayed +} + +func TestDeepSeekGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-v4-pro"} { + assert.Equal(t, []any{"text turn thought", "tool turn thought"}, replayedReasoning(t, model), model) + } +} + +func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { + t.Parallel() + + assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, "kimi-k2.6")) +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 20571e699..cd89f130d 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -53,6 +53,17 @@ func RejectsMinP(model string) bool { return isClaudeModel(model) || openAIProperName(model) } +// ReplaysReasoningOnEveryTurn reports whether reasoning_content goes back on every +// earlier assistant turn, not only on the turns that called a tool. +func ReplaysReasoningOnEveryTurn(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "deepseek") { + return true + } + } + return false +} + // UsesLegacyMaxTokens reports whether the output limit must travel as // max_tokens rather than max_completion_tokens. func UsesLegacyMaxTokens(model string) bool { From b43095c6d0ed89b673b0c621433061a1a26887cf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:25:41 +0300 Subject: [PATCH 476/618] fix(openai): drop the temperature an OpenAI model refuses while it thinks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a request reaches an OpenAI reasoning model while it thinks — gpt-5, -mini and -nano always, gpt-5.1/5.2/5.4 at any effort other than none, gpt-5.5/5.6 by default, the o-series — the door replaced the caller's temperature with 1 and sent it. OpenAI's parameter-compatibility guide says requests that include temperature, top_p or logprobs there "will raise an error" and names no accepted value; the pin rested on a measurement that temperature 1 went through. The door now leaves temperature out and reports a drop, the same way it already treats top_p. The caller loses nothing: an absent temperature is the vendor's default of 1. Claude behind an OpenAI-shaped gateway keeps the pin, which is its own vendor's rule for thinking. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 6 ++- llms/openai/openaillm_test.go | 43 ++++++++++--------- llms/openai/options_test.go | 6 +-- .../reasoning_effort_passthrough_test.go | 8 ++-- llms/openai/sampling_matrix_test.go | 39 ++++++++--------- llms/openai/sampling_warnings_test.go | 2 +- 6 files changed, 54 insertions(+), 50 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index d183d553a..ffe06b684 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -539,7 +539,11 @@ func (o *LLM) enforceSamplingPolicy(req *openaiclient.ChatRequest, opts llms.Cal switch { case refusesSamplingWhileThinking(model, opts, wireEffort): - if req.Temperature != nil { + switch { + case req.Temperature == nil: + case reasoning.RejectsSamplingWhileThinking(model): + req.Temperature = nil + default: temperature := 1.0 req.Temperature = &temperature } diff --git a/llms/openai/openaillm_test.go b/llms/openai/openaillm_test.go index c4709b915..13ea48bee 100644 --- a/llms/openai/openaillm_test.go +++ b/llms/openai/openaillm_test.go @@ -874,30 +874,31 @@ var reasoningTemperatureCases = []struct { model string temperature float64 expectedTemperature float64 + dropped bool }{ { - name: "reasoning model o1-preview with non-1.0 temperature", - model: "o1-preview", - temperature: 0.7, - expectedTemperature: 1.0, + name: "reasoning model o1-preview with non-1.0 temperature", + model: "o1-preview", + temperature: 0.7, + dropped: true, }, { - name: "reasoning model o1-mini with zero temperature", - model: "o1-mini", - temperature: 0.0, - expectedTemperature: 1.0, + name: "reasoning model o1-mini with zero temperature", + model: "o1-mini", + temperature: 0.0, + dropped: true, }, { - name: "reasoning model o3-mini with temperature 0.5", - model: "o3-mini", - temperature: 0.5, - expectedTemperature: 1.0, + name: "reasoning model o3-mini with temperature 0.5", + model: "o3-mini", + temperature: 0.5, + dropped: true, }, { - name: "reasoning model with temperature already 1.0", - model: "o1-preview", - temperature: 1.0, - expectedTemperature: 1.0, + name: "reasoning model with temperature already 1.0", + model: "o1-preview", + temperature: 1.0, + dropped: true, }, { name: "non-reasoning model gpt-4 preserves temperature", @@ -963,11 +964,13 @@ func TestCreateChatRequest_ReasoningModelTemperature(t *testing.T) { req, err := llm.createChatRequest([]*ChatMessage{}, opts, nil) require.NoError(t, err) - require.NotNil(t, req.Temperature) - if req.Temperature != nil { - assert.Equal(t, tt.expectedTemperature, *req.Temperature, - "Temperature should be %v for model %s", tt.expectedTemperature, tt.model) + if tt.dropped { + assert.Nil(t, req.Temperature, "model %s takes no temperature", tt.model) + return } + require.NotNil(t, req.Temperature) + assert.Equal(t, tt.expectedTemperature, *req.Temperature, + "Temperature should be %v for model %s", tt.expectedTemperature, tt.model) }) } } diff --git a/llms/openai/options_test.go b/llms/openai/options_test.go index 26eb5299a..899b7063c 100644 --- a/llms/openai/options_test.go +++ b/llms/openai/options_test.go @@ -433,10 +433,10 @@ func TestZeroConfigTemperaturePinUsesDefaultModel(t *testing.T) { return body } - // The pin must read the client's model, which no per-call option supplies. + // The policy must read the client's model, which no per-call option supplies. clientModel := capture(t, WithModel("gpt-5.5")) - if !strings.Contains(clientModel, `"temperature":1`) { - t.Errorf("gpt-5.5 only accepts the default temperature, got body: %s", clientModel) + if strings.Contains(clientModel, `"temperature"`) { + t.Errorf("gpt-5.5 takes no temperature while it thinks, got body: %s", clientModel) } zeroConfig := capture(t) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index 357f893f8..cd99d7789 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -304,7 +304,7 @@ func TestReasoningDisabledForClaudeBehindOpenAITransport(t *testing.T) { }) } -func TestTemperaturePinnedOnlyWhereTheModelDemandsIt(t *testing.T) { +func TestTemperatureDroppedOnlyWhereTheModelRefusesIt(t *testing.T) { t.Parallel() const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + @@ -341,9 +341,9 @@ func TestTemperaturePinnedOnlyWhereTheModelDemandsIt(t *testing.T) { }) } for _, model := range []string{"gpt-5", "gpt-5-mini", "gpt-5.5", "gpt-5.6-terra", "o3-mini"} { - t.Run("pins/"+model, func(t *testing.T) { - if body := send(t, model); !strings.Contains(body, `"temperature":1`) { - t.Fatalf("%s only accepts the default temperature, got body: %s", model, body) + t.Run("drops/"+model, func(t *testing.T) { + if body := send(t, model); strings.Contains(body, `"temperature"`) { + t.Fatalf("%s takes no temperature while it thinks, got body: %s", model, body) } }) } diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index 78ae741b8..d5843d049 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -107,17 +107,17 @@ func TestSamplingMatrix(t *testing.T) { present: []string{`"temperature":0.3`}, absent: []string{`"reasoning_effort"`}, }, { - name: "the same model is pinned once an effort is asked for", + name: "the same model loses its sampling once an effort is asked for", model: "gpt-5.4", opts: []llms.CallOption{temp, topP, high}, - present: []string{`"temperature":1`, `"reasoning_effort":"high"`}, - absent: []string{`"top_p"`}, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"temperature"`, `"top_p"`}, }, { - name: "a model that thinks from the start is pinned without being asked", + name: "a model that thinks from the start loses its sampling", model: "gpt-5.5", opts: []llms.CallOption{temp, topP, high}, - present: []string{`"temperature":1`, `"reasoning_effort":"high"`}, - absent: []string{`"top_p"`}, + present: []string{`"reasoning_effort":"high"`}, + absent: []string{`"temperature"`, `"top_p"`}, }, { name: "disabled thinking leaves both sampling params alone", model: "gpt-5.5", @@ -130,11 +130,10 @@ func TestSamplingMatrix(t *testing.T) { present: []string{`"temperature":0.3`, `"top_p":0.9`}, absent: []string{`"reasoning_effort"`}, }, { - name: "omitted effort pins a name that thinks by default", - model: "gpt-5.5", - opts: []llms.CallOption{temp, topP}, - present: []string{`"temperature":1`}, - absent: []string{`"top_p"`, `"reasoning_effort"`}, + name: "omitted effort strips a name that thinks by default", + model: "gpt-5.5", + opts: []llms.CallOption{temp, topP}, + absent: []string{`"temperature"`, `"top_p"`, `"reasoning_effort"`}, }, { name: "thinking takes both penalties off the wire", model: "gpt-5.4", @@ -330,18 +329,16 @@ func TestOnlyModelsWhoseVendorRefusesLoseTheirSampling(t *testing.T) { runSamplingCases(t, []samplingCase{ { - name: "o3 is pinned: the vendor accepts only the default temperature", - model: "o3", - opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, - present: []string{`"temperature":1`}, - absent: []string{`"top_p"`}, + name: "o3 loses both: the vendor refuses sampling fields while it thinks", + model: "o3", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + absent: []string{`"temperature"`, `"top_p"`}, }, { - name: "gpt-5-mini is pinned for the same reason", - model: "gpt-5-mini", - opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, - present: []string{`"temperature":1`}, - absent: []string{`"top_p"`}, + name: "gpt-5-mini loses both for the same reason", + model: "gpt-5-mini", + opts: []llms.CallOption{llms.WithTemperature(0.25), llms.WithTopP(0.3)}, + absent: []string{`"temperature"`, `"top_p"`}, }, { name: "grok keeps both: the vendor takes them alongside thinking", diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 18375f8e1..deade350a 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -57,7 +57,7 @@ func TestTheCallerLearnsWhatTheSamplingPolicyTookAway(t *testing.T) { llms.WithLogProbs(true), llms.WithTopLogProbs(3)) temperature := warningFor(t, resp, "WithTemperature") - if temperature.Kind != llms.WarningSubstitute || temperature.Asked != "0.2" || temperature.Sent != "1" { + if temperature.Kind != llms.WarningDrop || temperature.Asked != "0.2" || temperature.Sent != "" { t.Errorf("temperature warning = %+v", temperature) } if temperature.Model != "gpt-5" { From 35c8901d9c47ae6dc7e21186169fad999009e11a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:42:46 +0300 Subject: [PATCH 477/618] fix(googleai): stop sending sampling values nobody asked for Every request through the googleai door carried topK 3, topP 0.95 and a temperature of 0.5 (1.0 on Gemini 3) unless the caller overrode them. Gemini documents these defaults as the model's own, reported by getModel, and every current model reports temperature 1, topP 0.95, topK 64; a model with no topK does not allow setting it. pentagi sets temperature and top_p per agent but never top_k, so each of its Gemini calls went out narrowed to the three likeliest tokens. DefaultOptions no longer carries sampling values, and the door sends a temperature, topP or topK only when the call or WithDefault* set one; WithDefaultTemperature(0) still sends zero. The cassettes lose the three invented fields from their request bodies and nothing else. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 19 +++---- llms/googleai/googleai_core_unit_test.go | 30 +++++------ llms/googleai/googleai_unit_test.go | 51 +++++++++++++------ llms/googleai/option.go | 17 ++----- .../googleai/testdata/TestGoogleAICall.httprr | 6 +-- .../testdata/TestGoogleAIErrorHandling.httprr | 6 +-- .../TestGoogleAIGenerateContent.httprr | 6 +-- ...GenerateContentWithMultipleMessages.httprr | 6 +-- ...eAIGenerateContentWithSystemMessage.httprr | 6 +-- .../TestGoogleAIMultiModalContent.httprr | 6 +-- ...turedOutput-array_schema_is_honored.httprr | 6 +-- ...uredOutput-object_schema_is_honored.httprr | 6 +-- ...treaming_object_schema_is_validated.httprr | 6 +-- ...oogleAIThinkingModels-non-streaming.httprr | 6 +-- ...estGoogleAIThinkingModels-streaming.httprr | 6 +-- .../TestGoogleAIToolCallResponse.httprr | 12 ++--- .../TestGoogleAITruncationIsReported.httprr | 18 +++---- ...AITruncationIsReportedWhenStreaming.httprr | 6 +-- .../TestGoogleAIWithHarmThreshold.httprr | 6 +-- .../testdata/TestGoogleAIWithJSONMode.httprr | 6 +-- .../testdata/TestGoogleAIWithOptions.httprr | 6 +-- .../testdata/TestGoogleAIWithStreaming.httprr | 6 +-- .../testdata/TestGoogleAIWithTools.httprr | 6 +-- .../TestGoogleAIWithToolsCustomType.httprr | 6 +-- .../TestGoogleAI_ExplicitCaching.httprr | 6 +-- .../TestGoogleAI_ImplicitCaching.httprr | 18 +++---- ...citCaching_ConversationContinuation.httprr | 18 +++---- ..._ConversationContinuation_Streaming.httprr | 18 +++---- ...tGoogleAI_ImplicitCaching_Streaming.httprr | 18 +++---- ..._ParallelFunctionCallsWithSignature.httprr | 12 ++--- ...quentialFunctionCallsWithSignatures.httprr | 12 ++--- ...eAI_SingleFunctionCallWithSignature.httprr | 12 ++--- ...tGoogleAI_TextResponseWithSignature.httprr | 12 ++--- ..._TextResponseWithSignatureStreaming.httprr | 12 ++--- 34 files changed, 200 insertions(+), 193 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 6388a2f21..d006eb40b 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -105,17 +105,18 @@ func (g *GoogleAI) GenerateContent( Model: getStringPointer(g.opts.DefaultModel), CandidateCount: getIntPointer(g.opts.DefaultCandidateCount), MaxTokens: getIntPointer(g.opts.DefaultMaxTokens), - TopP: getFloatPointer(g.opts.DefaultTopP), - TopK: getIntPointer(g.opts.DefaultTopK), + } + if g.opts.DefaultTopP != 0 { + opts.TopP = getFloatPointer(g.opts.DefaultTopP) + } + if g.opts.DefaultTopK != 0 { + opts.TopK = getIntPointer(g.opts.DefaultTopK) } for _, opt := range options { opt(&opts) } - - // Default temperature only when the caller left it unset; an explicit value is - // preserved. - if opts.Temperature == nil { - opts.Temperature = getFloatPointer(resolveTemperature(opts.GetModel(), g.opts)) + if temperature, ok := g.opts.defaultTemperature(); ok && opts.Temperature == nil { + opts.Temperature = &temperature } config := newGenerationConfig(opts) @@ -1105,10 +1106,6 @@ func convertIntToFloat32Pointer(i *int) *float32 { // resolveTemperature returns the temperature to use when the caller left it // unset. Gemini 3 defaults to 1.0, the value Google recommends (lower values can // cause looping and degraded reasoning); other models keep the SDK-wide default. -func resolveTemperature(model string, clientOpts Options) float64 { - return clientOpts.ResolveTemperature(model) -} - // resolveThinkingConfig builds the Gemini thinking config for the reasoning mode. // Off forces budget 0 on models that disable that way, since omitting would not // disable a default-on model; a model whose thinking cannot be disabled returns a diff --git a/llms/googleai/googleai_core_unit_test.go b/llms/googleai/googleai_core_unit_test.go index 41c65c404..011404ce8 100644 --- a/llms/googleai/googleai_core_unit_test.go +++ b/llms/googleai/googleai_core_unit_test.go @@ -1065,24 +1065,22 @@ var productionGeminiModels = []struct { {name: "gemma-4-26b-a4b-it", usesThinkingLevel: false, togglesByLevel: true, disable: disableMinimalLevel}, } -func TestResolveTemperature(t *testing.T) { +func TestDefaultTemperature(t *testing.T) { t.Parallel() - sdkDefault := Options{DefaultTemperature: 0.5} - // Gemini 3 defaults to 1.0; everything else keeps the SDK default (0.5 here). - assert.Equal(t, 1.0, resolveTemperature("gemini-3.1-pro", sdkDefault)) - assert.Equal(t, 1.0, resolveTemperature("gemini-3-flash", sdkDefault)) - assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-flash", sdkDefault)) - assert.Equal(t, 0.5, resolveTemperature("gemini-2.5-pro", sdkDefault)) - - configured := DefaultOptions() - WithDefaultTemperature(0.2)(&configured) - assert.Equal(t, 0.2, resolveTemperature("gemini-3.1-pro", configured)) - assert.Equal(t, 0.2, resolveTemperature("gemini-2.5-flash", configured)) - - sameAsDefault := DefaultOptions() - WithDefaultTemperature(0.5)(&sameAsDefault) - assert.Equal(t, 0.5, resolveTemperature("gemini-3-flash", sameAsDefault)) + _, ok := DefaultOptions().defaultTemperature() + assert.False(t, ok, "nothing configured leaves the model's own default") + + written := Options{DefaultTemperature: 0.5} + got, ok := written.defaultTemperature() + assert.True(t, ok) + assert.InDelta(t, 0.5, got, 1e-9) + + zero := DefaultOptions() + WithDefaultTemperature(0)(&zero) + got, ok = zero.defaultTemperature() + assert.True(t, ok, "a configured zero is a value") + assert.Zero(t, got) } func TestResolveThinkingConfigRefusesAnEffortThatMapsToNothing(t *testing.T) { diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index dbea616e0..54610b503 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -102,9 +102,9 @@ func TestDefaultOptions(t *testing.T) { assert.Equal(t, "gemini-embedding-001", opts.DefaultEmbeddingModel) assert.Equal(t, 1, opts.DefaultCandidateCount) assert.Equal(t, llms.DefaultMaxTokens, opts.DefaultMaxTokens) - assert.Equal(t, 0.5, opts.DefaultTemperature) - assert.Equal(t, 3, opts.DefaultTopK) - assert.Equal(t, 0.95, opts.DefaultTopP) + assert.Zero(t, opts.DefaultTemperature) + assert.Zero(t, opts.DefaultTopK) + assert.Zero(t, opts.DefaultTopP) assert.Equal(t, HarmBlockNone, opts.HarmThreshold) assert.Empty(t, opts.CloudProject) assert.Empty(t, opts.CloudLocation) @@ -994,27 +994,42 @@ func (t *captureTransport) RoundTrip(r *http.Request) (*http.Response, error) { }, nil } -func TestConfiguredDefaultTemperatureReachesTheWire(t *testing.T) { +func TestOnlyConfiguredSamplingReachesTheWire(t *testing.T) { t.Parallel() for _, tc := range []struct { name string opts []Option - want float64 + call []llms.CallOption + want map[string]float64 model string }{ - {name: "gemini-3 without a configured default", model: "gemini-3-flash", want: 1.0}, + {name: "gemini-3 with nothing configured", model: "gemini-3-flash", want: map[string]float64{}}, + {name: "gemini-2.5 with nothing configured", model: "gemini-2.5-flash", want: map[string]float64{}}, { name: "gemini-3 with a configured default", model: "gemini-3-flash", opts: []Option{WithDefaultTemperature(0.2)}, - want: 0.2, + want: map[string]float64{"temperature": 0.2}, }, { - name: "gemini-2.5 with a configured default", + name: "a configured zero temperature", model: "gemini-2.5-flash", - opts: []Option{WithDefaultTemperature(0.2)}, - want: 0.2, + opts: []Option{WithDefaultTemperature(0)}, + want: map[string]float64{"temperature": 0}, + }, + { + name: "configured top_k and top_p", + model: "gemini-2.5-flash", + opts: []Option{WithDefaultTopK(40), WithDefaultTopP(0.8)}, + want: map[string]float64{"topK": 40, "topP": 0.8}, + }, + { + name: "the call's own values win over the configured ones", + model: "gemini-2.5-flash", + opts: []Option{WithDefaultTemperature(0.2), WithDefaultTopK(40)}, + call: []llms.CallOption{llms.WithTemperature(0.7), llms.WithTopK(5), llms.WithTopP(0.5)}, + want: map[string]float64{"temperature": 0.7, "topK": 5, "topP": 0.5}, }, } { t.Run(tc.name, func(t *testing.T) { @@ -1035,17 +1050,21 @@ func TestConfiguredDefaultTemperatureReachesTheWire(t *testing.T) { require.NoError(t, err) _, err = llm.GenerateContent(t.Context(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}) + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, tc.call...) require.NoError(t, err) var payload struct { - GenerationConfig struct { - Temperature *float64 `json:"temperature"` - } `json:"generationConfig"` + GenerationConfig map[string]any `json:"generationConfig"` } require.NoError(t, json.Unmarshal(rt.body, &payload)) - require.NotNil(t, payload.GenerationConfig.Temperature) - require.InDelta(t, tc.want, *payload.GenerationConfig.Temperature, 1e-6) + got := map[string]float64{} + for _, field := range []string{"temperature", "topK", "topP"} { + if value, ok := payload.GenerationConfig[field].(float64); ok { + got[field] = value + } + } + assert.InDeltaMapValues(t, tc.want, got, 1e-6) + assert.Len(t, got, len(tc.want)) }) } } diff --git a/llms/googleai/option.go b/llms/googleai/option.go index d34df80b6..ec8415652 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -6,7 +6,6 @@ import ( "reflect" "github.com/vxcontrol/langchaingo/llms" - "github.com/vxcontrol/langchaingo/llms/reasoning" "google.golang.org/api/option" "google.golang.org/grpc" @@ -36,8 +35,7 @@ type Options struct { unhonoredOnREST []string - // Set by WithDefaultTemperature; writing DefaultTemperature directly leaves - // it false and lets the Gemini 3 recommendation win. + // Set by WithDefaultTemperature, so a configured zero still reaches the wire. temperatureFromCaller bool } @@ -49,9 +47,6 @@ func DefaultOptions() Options { DefaultEmbeddingModel: "gemini-embedding-001", DefaultCandidateCount: 1, DefaultMaxTokens: llms.DefaultMaxTokens, - DefaultTemperature: 0.5, - DefaultTopK: 3, - DefaultTopP: 0.95, HarmThreshold: HarmBlockNone, } } @@ -252,12 +247,10 @@ const ( HarmBlockNone HarmBlockThreshold = "BLOCK_NONE" ) -// ResolveTemperature reports the temperature to send when the caller set none. -func (o Options) ResolveTemperature(model string) float64 { - if !o.temperatureFromCaller && reasoning.GeminiUsesThinkingLevel(model) { - return 1.0 - } - return o.DefaultTemperature +// defaultTemperature reports the temperature to send when a call sets none; false +// leaves the model's own default in force. +func (o Options) defaultTemperature() (float64, bool) { + return o.DefaultTemperature, o.temperatureFromCaller || o.DefaultTemperature != 0 } // helper to inspect incoming client options for auth options. diff --git a/llms/googleai/testdata/TestGoogleAICall.httprr b/llms/googleai/testdata/TestGoogleAICall.httprr index 0b418e022..8d0dc3dad 100644 --- a/llms/googleai/testdata/TestGoogleAICall.httprr +++ b/llms/googleai/testdata/TestGoogleAICall.httprr @@ -1,14 +1,14 @@ httprr trace v1 -783 1168 +744 1168 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 463 +Content-Length: 424 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 2 + 2?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 2 + 2?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 578 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr b/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr index e34812f6a..aa6281a68 100644 --- a/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr +++ b/llms/googleai/testdata/TestGoogleAIErrorHandling.httprr @@ -1,14 +1,14 @@ httprr trace v1 -775 967 +736 967 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 455 +Content-Length: 416 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Hello"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]} +{"contents":[{"parts":[{"text":"Hello"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]} HTTP/2.0 400 Bad Request Content-Length: 581 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr index 7dcd660e7..3f51fc1bb 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContent.httprr @@ -1,14 +1,14 @@ httprr trace v1 -799 1195 +760 1195 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 479 +Content-Length: 440 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 605 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr index 291a1b20d..ee2d1ed23 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContentWithMultipleMessages.httprr @@ -1,14 +1,14 @@ httprr trace v1 -901 1181 +862 1181 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 581 +Content-Length: 542 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"My name is Alice"}],"role":"user"},{"parts":[{"text":"Nice to meet you, Alice!"}],"role":"model"},{"parts":[{"text":"What's my name?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"My name is Alice"}],"role":"user"},{"parts":[{"text":"Nice to meet you, Alice!"}],"role":"model"},{"parts":[{"text":"What's my name?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 591 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr b/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr index 434b4428d..053c38aae 100644 --- a/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr +++ b/llms/googleai/testdata/TestGoogleAIGenerateContentWithSystemMessage.httprr @@ -1,14 +1,14 @@ httprr trace v1 -917 1247 +878 1247 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 597 +Content-Length: 558 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Tell me about the ocean"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"You are a helpful assistant that always responds in haiku format."}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Tell me about the ocean"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"You are a helpful assistant that always responds in haiku format."}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 656 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr b/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr index 0bd4fadef..c30a5301e 100644 --- a/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr +++ b/llms/googleai/testdata/TestGoogleAIMultiModalContent.httprr @@ -1,14 +1,14 @@ httprr trace v1 -47867 1265 +47828 1265 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 47545 +Content-Length: 47506 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"What is in this image?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"What is in this image?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 674 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr index cfb492128..54bf8a0a7 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-array_schema_is_honored.httprr @@ -1,14 +1,14 @@ httprr trace v1 -961 1202 +922 1202 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 641 +Content-Length: 602 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"List three primary colors."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"colors":{"items":{"type":"string"},"type":"array"}},"required":["colors"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"List three primary colors."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"colors":{"items":{"type":"string"},"type":"array"}},"required":["colors"],"type":"object"},"responseMimeType":"application/json"},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 612 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr index 1890740b2..bac5f82ae 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-object_schema_is_honored.httprr @@ -1,14 +1,14 @@ httprr trace v1 -980 1219 +941 1219 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 660 +Content-Length: 621 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is the capital of France?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json"},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 629 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr b/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr index 89defa276..34e791482 100644 --- a/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr +++ b/llms/googleai/testdata/TestGoogleAIStructuredOutput-streaming_object_schema_is_validated.httprr @@ -1,14 +1,14 @@ httprr trace v1 -993 995 +954 995 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 659 +Content-Length: 620 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of Japan?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is the capital of Japan?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseJsonSchema":{"properties":{"capital":{"type":"string"},"country":{"type":"string"}},"required":["country","capital"],"type":"object"},"responseMimeType":"application/json"},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 442 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment diff --git a/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr b/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr index c51f487b9..2cea53746 100644 --- a/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIThinkingModels-non-streaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -912 4726 +873 4726 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 594 +Content-Length: 555 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 4133 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr b/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr index ca33be0b7..49fc0599a 100644 --- a/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIThinkingModels-streaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -926 14620 +887 14620 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 594 +Content-Length: 555 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the next number in this sequence: 2, 6, 12, 20, 30, ? Show your reasoning."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1000}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 14064 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment diff --git a/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr b/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr index 0e7d61e32..fd6e6fba3 100644 --- a/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr +++ b/llms/googleai/testdata/TestGoogleAIToolCallResponse.httprr @@ -1,14 +1,14 @@ httprr trace v1 -1035 1680 +996 1680 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 715 +Content-Length: 676 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 1089 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' @@ -65,16 +65,16 @@ X-Xss-Protection: 1; mode=block "modelVersion": "gemini-2.5-flash", "responseId": "LhOIapD5NPmNvdIPzOn8kAw" } -1536 1146 +1497 1146 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 1215 +Content-Length: 1176 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"expression":"15 * 7"},"name":"calculate"},"thoughtSignature":"CtIBARFNMg9bLy4DsYEqPnNlA2GOfovJLcDUSfrqxZniZfiwLCyVkytZps9AKV3nMLR671S4l0WLCm7rJXxX2Sz0iB0te5OhnULyEkj0lvMH3qXaM7QXgaHYmnSe3+pwhcGHDZvcBAjKSrJcYzc01XVNnD8hC+4lt74upVT1cLI/8b4ttwwSENdUD7NGD6Gbtr8bx22+yQ+2T0PV4717BEvPCax42DK2WGR86ybVHZJ7SyCsf4oPAt8DrSLjJ6N7Y++gAKpzSeKQzyaMsE1P2z4Dmcir"}],"role":"model"},{"parts":[{"functionResponse":{"name":"calculate","response":{"response":"105"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 15 * 7?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"expression":"15 * 7"},"name":"calculate"},"thoughtSignature":"CtIBARFNMg9bLy4DsYEqPnNlA2GOfovJLcDUSfrqxZniZfiwLCyVkytZps9AKV3nMLR671S4l0WLCm7rJXxX2Sz0iB0te5OhnULyEkj0lvMH3qXaM7QXgaHYmnSe3+pwhcGHDZvcBAjKSrJcYzc01XVNnD8hC+4lt74upVT1cLI/8b4ttwwSENdUD7NGD6Gbtr8bx22+yQ+2T0PV4717BEvPCax42DK2WGR86ybVHZJ7SyCsf4oPAt8DrSLjJ6N7Y++gAKpzSeKQzyaMsE1P2z4Dmcir"}],"role":"model"},{"parts":[{"functionResponse":{"name":"calculate","response":{"response":"105"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Perform a calculation","name":"calculate","parameters":{"properties":{"expression":{"description":"Mathematical expression to evaluate","type":"STRING"}},"required":["expression"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 556 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr b/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr index 07dc6e049..2e69588d9 100644 --- a/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr +++ b/llms/googleai/testdata/TestGoogleAITruncationIsReported.httprr @@ -1,14 +1,14 @@ httprr trace v1 -806 1058 +767 1058 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 486 +Content-Length: 447 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 468 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' @@ -52,16 +52,16 @@ X-Xss-Protection: 1; mode=block "modelVersion": "gemini-2.5-flash", "responseId": "fRyIav2wKe2cnsEPqoa7gAM" } -806 1058 +767 1058 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 486 +Content-Length: 447 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 468 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' @@ -105,16 +105,16 @@ X-Xss-Protection: 1; mode=block "modelVersion": "gemini-2.5-flash", "responseId": "fxyIav2AG62L7M8P-PTAuQo" } -808 9401 +769 9401 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 488 +Content-Length: 449 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":4096,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":4096},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 8808 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr b/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr index 0a35c0a6f..a8f5c929c 100644 --- a/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAITruncationIsReportedWhenStreaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -821 985 +782 985 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 487 +Content-Length: 448 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Describe the water cycle in full detail."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 431 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment diff --git a/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr b/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr index 3a848e5a8..239478903 100644 --- a/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithHarmThreshold.httprr @@ -1,14 +1,14 @@ httprr trace v1 -798 9950 +759 9950 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 478 +Content-Length: 439 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Tell me about safety features"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Tell me about safety features"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 9357 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr b/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr index 891dd8380..c165e9ce4 100644 --- a/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithJSONMode.httprr @@ -1,14 +1,14 @@ httprr trace v1 -840 1203 +801 1203 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 520 +Content-Length: 481 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"List three colors as a JSON array"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseMimeType":"application/json","temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"List three colors as a JSON array"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"responseMimeType":"application/json"},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 613 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIWithOptions.httprr b/llms/googleai/testdata/TestGoogleAIWithOptions.httprr index 0c5e82cbd..5919fac3a 100644 --- a/llms/googleai/testdata/TestGoogleAIWithOptions.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithOptions.httprr @@ -1,14 +1,14 @@ httprr trace v1 -784 994 +763 994 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 464 +Content-Length: 443 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Count from 1 to 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0.1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Count from 1 to 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0.1},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 583 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr b/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr index f907f8abe..e676ccd3e 100644 --- a/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithStreaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -816 6227 +777 6227 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 482 +Content-Length: 443 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Tell me a short story about a cat"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Tell me a short story about a cat"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 5672 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment diff --git a/llms/googleai/testdata/TestGoogleAIWithTools.httprr b/llms/googleai/testdata/TestGoogleAIWithTools.httprr index 37e63dce0..c5a8cffb5 100644 --- a/llms/googleai/testdata/TestGoogleAIWithTools.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithTools.httprr @@ -1,14 +1,14 @@ httprr trace v1 -1053 1733 +1014 1733 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 733 +Content-Length: 694 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 1142 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr b/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr index 8f78d7c1e..77b7cf30a 100644 --- a/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr +++ b/llms/googleai/testdata/TestGoogleAIWithToolsCustomType.httprr @@ -1,14 +1,14 @@ httprr trace v1 -1053 1733 +1014 1733 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 733 +Content-Length: 694 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the weather in New York?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the weather for a location","name":"getWeather","parameters":{"properties":{"location":{"description":"The location to get weather for","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 1142 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Security-Policy: frame-ancestors 'none' diff --git a/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr b/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr index 6b0392526..e79bab7b8 100644 --- a/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ExplicitCaching.httprr @@ -33,16 +33,16 @@ X-Xss-Protection: 0 "totalTokenCount": 77501 } } -897 1175 +858 1175 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 577 +Content-Length: 538 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"cachedContent":"cachedContents/qiw69iqddo7e3hen30g3r994dnixycpzp7o1o6o6","contents":[{"parts":[{"text":"What are the key things to look for in a Go code review?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"cachedContent":"cachedContents/qiw69iqddo7e3hen30g3r994dnixycpzp7o1o6o6","contents":[{"parts":[{"text":"What are the key things to look for in a Go code review?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":200},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 763 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr index 1b536b920..9d3ceffa6 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching.httprr @@ -1,14 +1,14 @@ httprr trace v1 -34837 930 +34816 930 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 34515 +Content-Length: 34494 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 552 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -52,16 +52,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-2.5-flash", "responseId": "cj13aZPDKMbg_uMP44nTkAE" } -34837 1073 +34816 1073 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 34515 +Content-Length: 34494 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 695 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -112,16 +112,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-2.5-flash", "responseId": "kj13adu-HpCj_uMPjoKmyQ0" } -34837 1073 +34816 1073 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 34515 +Content-Length: 34494 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\nImplicitTest-v1 Go is a compiled language with garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 695 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr index 00ba5f327..e6449f523 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation.httprr @@ -1,14 +1,14 @@ httprr trace v1 -26422 1021 +26401 1021 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 26094 +Content-Length: 26073 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 642 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -52,16 +52,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-3-flash-preview", "responseId": "t0h3aeDsD_zGjMcP2-ytiA4" } -26626 1178 +26605 1178 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 26298 +Content-Length: 26277 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"},{"parts":[{"text":"10 + 5 = 15","thoughtSignature":"EjQKMgFyyNp8ID75oDI0URvpt5R3fPVQJceerosicdLUgSnViQBHFn0XHbkZKq9jwQUs09LH"}],"role":"model"},{"parts":[{"text":"Now multiply that by 2"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"},{"parts":[{"text":"10 + 5 = 15","thoughtSignature":"EjQKMgFyyNp8ID75oDI0URvpt5R3fPVQJceerosicdLUgSnViQBHFn0XHbkZKq9jwQUs09LH"}],"role":"model"},{"parts":[{"text":"Now multiply that by 2"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 800 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -112,16 +112,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-3-flash-preview", "responseId": "yEh3adHfFO2NjMcPw9CggQ8" } -26842 1174 +26821 1174 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 26514 +Content-Length: 26493 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"},{"parts":[{"text":"10 + 5 = 15","thoughtSignature":"EjQKMgFyyNp8ID75oDI0URvpt5R3fPVQJceerosicdLUgSnViQBHFn0XHbkZKq9jwQUs09LH"}],"role":"model"},{"parts":[{"text":"Now multiply that by 2"}],"role":"user"},{"parts":[{"text":"15 multiplied by 2 is 30.","thoughtSignature":"EjQKMgFyyNp8DPszsMyf/CcCw1Q8PSgBItvFJ7DemE5sal29A4YQnGEdhqsBxjytf+RCiMhS"}],"role":"model"},{"parts":[{"text":"Now divide that by 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 10 + 5?"}],"role":"user"},{"parts":[{"text":"10 + 5 = 15","thoughtSignature":"EjQKMgFyyNp8ID75oDI0URvpt5R3fPVQJceerosicdLUgSnViQBHFn0XHbkZKq9jwQUs09LH"}],"role":"model"},{"parts":[{"text":"Now multiply that by 2"}],"role":"user"},{"parts":[{"text":"15 multiplied by 2 is 30.","thoughtSignature":"EjQKMgFyyNp8DPszsMyf/CcCw1Q8PSgBItvFJ7DemE5sal29A4YQnGEdhqsBxjytf+RCiMhS"}],"role":"model"},{"parts":[{"text":"Now divide that by 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 796 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr index 2f4bfb518..ec0f5d8f0 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_ConversationContinuation_Streaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -26441 1191 +26420 1191 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 26099 +Content-Length: 26078 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 794 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment @@ -27,16 +27,16 @@ data: {"candidates": [{"content": {"parts": [{"text": "8 + 7 = 15"}],"role": "mo data: {"candidates": [{"content": {"parts": [{"text": "","thoughtSignature": "EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 4517,"candidatesTokenCount": 8,"totalTokenCount": 4525,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 4517}]},"modelVersion": "gemini-3-flash-preview","responseId": "8Gp1afPfFs2MjMcPn6aWsAY"} -26644 1288 +26623 1288 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 26302 +Content-Length: 26281 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"},{"parts":[{"text":"8 + 7 = 15","thoughtSignature":"EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role":"model"},{"parts":[{"text":"Now multiply that by 3"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"},{"parts":[{"text":"8 + 7 = 15","thoughtSignature":"EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role":"model"},{"parts":[{"text":"Now multiply that by 3"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 891 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment @@ -55,16 +55,16 @@ data: {"candidates": [{"content": {"parts": [{"text": "15 * 3 = 45"}],"role": "m data: {"candidates": [{"content": {"parts": [{"text": "","thoughtSignature": "EjQKMgFyyNp8aIVmUSXaSockUWA0HZbRwPXK0oBkLZR5GCsw5A7LagoHdY8Z6RWmcKYALK1t"}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 4533,"candidatesTokenCount": 9,"totalTokenCount": 4542,"cachedContentTokenCount": 4058,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 4533}],"cacheTokensDetails": [{"modality": "TEXT","tokenCount": 4058}]},"modelVersion": "gemini-3-flash-preview","responseId": "AWt1ac2XGrHkjMcPrvCiwQ4"} -26846 1288 +26825 1288 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 26504 +Content-Length: 26483 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"},{"parts":[{"text":"8 + 7 = 15","thoughtSignature":"EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role":"model"},{"parts":[{"text":"Now multiply that by 3"}],"role":"user"},{"parts":[{"text":"15 * 3 = 45","thoughtSignature":"EjQKMgFyyNp8aIVmUSXaSockUWA0HZbRwPXK0oBkLZR5GCsw5A7LagoHdY8Z6RWmcKYALK1t"}],"role":"model"},{"parts":[{"text":"Now divide that by 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 8 + 7?"}],"role":"user"},{"parts":[{"text":"8 + 7 = 15","thoughtSignature":"EjQKMgFyyNp82UJzOTxhPr3FcpgNDSuaa8GYXE1gV7ALZ1oGDBoP6XxEiFwjJy4Q6Jk/hIHv"}],"role":"model"},{"parts":[{"text":"Now multiply that by 3"}],"role":"user"},{"parts":[{"text":"15 * 3 = 45","thoughtSignature":"EjQKMgFyyNp8aIVmUSXaSockUWA0HZbRwPXK0oBkLZR5GCsw5A7LagoHdY8Z6RWmcKYALK1t"}],"role":"model"},{"parts":[{"text":"Now divide that by 5"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":100,"temperature":0,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":66}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"ConvStreamTest-v1 Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. Go is a compiled language with garbage collection. "}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 890 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment diff --git a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr index 8406a9642..60cee4457 100644 --- a/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ImplicitCaching_Streaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -35851 777 +35830 777 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 35515 +Content-Length: 35494 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 380 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment @@ -25,16 +25,16 @@ X-Xss-Protection: 0 data: {"candidates": [{"content": {"parts": [{"text": "hello"}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 7006,"candidatesTokenCount": 1,"totalTokenCount": 7024,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 7006}],"thoughtsTokenCount": 17},"modelVersion": "gemini-2.5-flash","responseId": "VEp3adqaOMbg_uMP4onTkAE"} -35851 873 +35830 873 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 35515 +Content-Length: 35494 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 476 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment @@ -51,16 +51,16 @@ X-Xss-Protection: 0 data: {"candidates": [{"content": {"parts": [{"text": "hello"}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 7006,"candidatesTokenCount": 1,"totalTokenCount": 7024,"cachedContentTokenCount": 6121,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 7006}],"cacheTokensDetails": [{"modality": "TEXT","tokenCount": 6121}],"thoughtsTokenCount": 17},"modelVersion": "gemini-2.5-flash","responseId": "dEp3afP4OfCf_uMP38ec8Aw"} -35851 872 +35830 872 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 35515 +Content-Length: 35494 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Say 'hello'"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":50,"temperature":0},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"StreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\nStreamTest-v1 Rust ensures memory safety without garbage collection.\n"}],"role":"system"}}HTTP/2.0 200 OK Content-Length: 475 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment diff --git a/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr b/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr index 956685235..d7546895d 100644 --- a/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr +++ b/llms/googleai/testdata/TestGoogleAI_ParallelFunctionCallsWithSignature.httprr @@ -1,14 +1,14 @@ httprr trace v1 -1079 1906 +1042 1906 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 753 +Content-Length: 716 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the temperature in Paris and London?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current temperature for a location","name":"get_temperature","parameters":{"properties":{"location":{"description":"The city name, e.g. Paris","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the temperature in Paris and London?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current temperature for a location","name":"get_temperature","parameters":{"properties":{"location":{"description":"The city name, e.g. Paris","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 1493 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -71,16 +71,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-3-flash-preview", "responseId": "tbZxauHIDsiOvdIPgsDH2A4" } -1687 1023 +1650 1023 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 1360 +Content-Length: 1323 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What's the temperature in Paris and London?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Paris"},"id":"pkjly1p7","name":"get_temperature"},"thoughtSignature":"ErwCCrkCARFNMg9mMORTMaw4mPhBdF3AK++rCjOH+n+QysYX1w47IEVhSBpnj/qrc50FEW82LTDU4YtPHnpC3SNFH4O9tT12zbhW32B0DsixxEAiIC3OkxXZ9lzOohuckzMCbGMMmAboW06tW+9RKhFpO89BKVIwNTVIdaK46wDQ7/+5o6IsEaKLUwgWCxNy6frMOzRMHZwhd1cb+lO4tWW2uv7euMHXrGfS0f6bv0maY1xHo2IaardO4YR2K9XYKB7YyKP0QyFvb70ToGPagCZ9ehQvUmXQItb22d1gMXDUMichOcsHiawiMxa1mpZI08Nx48vzuYkMtyb4iKy6fmd6cp1XOeD1ijSNdbOOxii6xfEp8Xen0cyaMPjwqHjb5y3xB6IkIIuwx3ezNjabj4o/Rc2tHD87deZ81H+Q8Q=="},{"functionCall":{"args":{"location":"London"},"id":"bnxwmmb1","name":"get_temperature"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"pkjly1p7","name":"get_temperature","response":{"response":"22°C"}}},{"functionResponse":{"id":"bnxwmmb1","name":"get_temperature","response":{"response":"22°C"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":512,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What's the temperature in Paris and London?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Paris"},"id":"pkjly1p7","name":"get_temperature"},"thoughtSignature":"ErwCCrkCARFNMg9mMORTMaw4mPhBdF3AK++rCjOH+n+QysYX1w47IEVhSBpnj/qrc50FEW82LTDU4YtPHnpC3SNFH4O9tT12zbhW32B0DsixxEAiIC3OkxXZ9lzOohuckzMCbGMMmAboW06tW+9RKhFpO89BKVIwNTVIdaK46wDQ7/+5o6IsEaKLUwgWCxNy6frMOzRMHZwhd1cb+lO4tWW2uv7euMHXrGfS0f6bv0maY1xHo2IaardO4YR2K9XYKB7YyKP0QyFvb70ToGPagCZ9ehQvUmXQItb22d1gMXDUMichOcsHiawiMxa1mpZI08Nx48vzuYkMtyb4iKy6fmd6cp1XOeD1ijSNdbOOxii6xfEp8Xen0cyaMPjwqHjb5y3xB6IkIIuwx3ezNjabj4o/Rc2tHD87deZ81H+Q8Q=="},{"functionCall":{"args":{"location":"London"},"id":"bnxwmmb1","name":"get_temperature"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"pkjly1p7","name":"get_temperature","response":{"response":"22°C"}}},{"functionResponse":{"id":"bnxwmmb1","name":"get_temperature","response":{"response":"22°C"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":512},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 612 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr b/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr index be67d7394..f08bc6d87 100644 --- a/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr +++ b/llms/googleai/testdata/TestGoogleAI_SequentialFunctionCallsWithSignatures.httprr @@ -1,14 +1,14 @@ httprr trace v1 -1322 2614 +1285 2614 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 996 +Content-Length: 959 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"First get the number 10, then get the number 32, then add them together."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get a specific number","name":"get_number","parameters":{"properties":{"which":{"description":"Which number to get (first or second)","type":"STRING"}},"required":["which"],"type":"OBJECT"}},{"description":"Add two numbers together","name":"add_numbers","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"First get the number 10, then get the number 32, then add them together."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get a specific number","name":"get_number","parameters":{"properties":{"which":{"description":"Which number to get (first or second)","type":"STRING"}},"required":["which"],"type":"OBJECT"}},{"description":"Add two numbers together","name":"add_numbers","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 2201 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -62,16 +62,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-3-flash-preview", "responseId": "ubZxao3WFIWE28oP8LvymQM" } -2926 1392 +2889 1392 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 2599 +Content-Length: 2562 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"First get the number 10, then get the number 32, then add them together."}],"role":"user"},{"parts":[{"functionCall":{"args":{"which":"first"},"id":"sjtv17iq","name":"get_number"},"thoughtSignature":"EvcHCvQHARFNMg8CS384X5x2wGmq0N/mwEbUQuxnWWRXXwdOr2UmXzomX9rCmC2OcqUO3r/KcmC+1nwN5/39K+ijN64t7ooZiUkaHtI582aH9zk7Epry0OVcnpTBf4HLk5uk9Lk5pDs5l949QwWg3c2l/dtJSCBi7RjHev6BrWstPqP8CsDt9PIyQOWDrxy3+Hezs5yXeuKICGLyUylC15YGsPkJ8X+M100mkojK5GyEtdIoeQpAt/hwjF0y1ktPfU0jWRg84Or+Ex6Vnf1WQa9thOPgh5zC7a0+/oDzx/k3hTmw6CeHG3dlOGj9jZrRpmjAhzJFdGNzKIDVOdYFXM+PG+okP5GJHvBJx72R5owdSmGaEkqR+2V7Y/SS/GvnSE6mfyDVvQ4tNgebJSeP+OjojsL07MCwAFfoQSEFrQpIXMJw1t047JIXKDfTKM5qQUoKjaKuoX7JaP9RJ/OZONKpKA2iwKLxqE6Kok6h3Wda1mgzgagT6klwJDkE8k2iVWYgo0nb47PEqibdEO0ZtU2en+64cag0zULDfuT7r+w1clpSBljGsQieIBBzru+Phvm9/6iUDRwN1uaZrYld1WsWdMOlQp603sZ/RjW5RZ3biyAtnuR1dxOrk/vnPC8hKy60fZw4HgIgnQkhXSOOf3poeMnMToafAgnAkuJCzzh3JXaTWCzxebLB7B3kA+qwULwU8ZDVuBdhWfafB7rN+6WD4v3//XFCNy15n61TG0HPELOctKd13WCt2OqaDHRr9tIFjpV7L4kRcEtc0g52femhmB5lOo0K80XPkCxG/HQlPTuSKVODYyZ9/kW8Fe43041vEgxI4RkEn7myUzrWtFa0lvpkBwutEjZGKRh8+dffVhelaqhIBe6HktHrHdRmgkkadM+cOYMmIbUP/oy44zV2W94uPZ1Zh4OqegeCr35IAB89xGe57DkOAI3LB/cFcptpPWbrXoIQAZpsY3LRjo52Z7SR3QF+VcMQJTpWUbkJXXkhsDJDpZsytn8Xi1TfXhhk/Z7amMCHt5E0PbkujKdw8dCfRTw09DKI19lA54woBlasHnaKTNoDK6eZm2TuXV9Bnx4lKLRruvo9ku58DDyZg/QighNy3Blins9uBhvr5AMdMCT565WZqpRhE8hFRrAMPLSaVgY6BijrINTVf/K7Vmg9KZblcpRNFC6ZR/w/dhpOIqfBmUT7arBO9xF2uJHYQCcBFiXx2JxXKfwt9Ba+AA81PlFQoR4zsN7lvZBPWqrlwSeBAcAgLph8RBUmTpRvAqdUuxTn4ffxS6YadPXGEZfU6BH3oUfspxlSmI4rE+PgKoAfcf5uL+ujWYVPsMRsZOGUc/M8KQ=="}],"role":"model"},{"parts":[{"functionResponse":{"id":"sjtv17iq","name":"get_number","response":{"response":"10"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get a specific number","name":"get_number","parameters":{"properties":{"which":{"description":"Which number to get (first or second)","type":"STRING"}},"required":["which"],"type":"OBJECT"}},{"description":"Add two numbers together","name":"add_numbers","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"First get the number 10, then get the number 32, then add them together."}],"role":"user"},{"parts":[{"functionCall":{"args":{"which":"first"},"id":"sjtv17iq","name":"get_number"},"thoughtSignature":"EvcHCvQHARFNMg8CS384X5x2wGmq0N/mwEbUQuxnWWRXXwdOr2UmXzomX9rCmC2OcqUO3r/KcmC+1nwN5/39K+ijN64t7ooZiUkaHtI582aH9zk7Epry0OVcnpTBf4HLk5uk9Lk5pDs5l949QwWg3c2l/dtJSCBi7RjHev6BrWstPqP8CsDt9PIyQOWDrxy3+Hezs5yXeuKICGLyUylC15YGsPkJ8X+M100mkojK5GyEtdIoeQpAt/hwjF0y1ktPfU0jWRg84Or+Ex6Vnf1WQa9thOPgh5zC7a0+/oDzx/k3hTmw6CeHG3dlOGj9jZrRpmjAhzJFdGNzKIDVOdYFXM+PG+okP5GJHvBJx72R5owdSmGaEkqR+2V7Y/SS/GvnSE6mfyDVvQ4tNgebJSeP+OjojsL07MCwAFfoQSEFrQpIXMJw1t047JIXKDfTKM5qQUoKjaKuoX7JaP9RJ/OZONKpKA2iwKLxqE6Kok6h3Wda1mgzgagT6klwJDkE8k2iVWYgo0nb47PEqibdEO0ZtU2en+64cag0zULDfuT7r+w1clpSBljGsQieIBBzru+Phvm9/6iUDRwN1uaZrYld1WsWdMOlQp603sZ/RjW5RZ3biyAtnuR1dxOrk/vnPC8hKy60fZw4HgIgnQkhXSOOf3poeMnMToafAgnAkuJCzzh3JXaTWCzxebLB7B3kA+qwULwU8ZDVuBdhWfafB7rN+6WD4v3//XFCNy15n61TG0HPELOctKd13WCt2OqaDHRr9tIFjpV7L4kRcEtc0g52femhmB5lOo0K80XPkCxG/HQlPTuSKVODYyZ9/kW8Fe43041vEgxI4RkEn7myUzrWtFa0lvpkBwutEjZGKRh8+dffVhelaqhIBe6HktHrHdRmgkkadM+cOYMmIbUP/oy44zV2W94uPZ1Zh4OqegeCr35IAB89xGe57DkOAI3LB/cFcptpPWbrXoIQAZpsY3LRjo52Z7SR3QF+VcMQJTpWUbkJXXkhsDJDpZsytn8Xi1TfXhhk/Z7amMCHt5E0PbkujKdw8dCfRTw09DKI19lA54woBlasHnaKTNoDK6eZm2TuXV9Bnx4lKLRruvo9ku58DDyZg/QighNy3Blins9uBhvr5AMdMCT565WZqpRhE8hFRrAMPLSaVgY6BijrINTVf/K7Vmg9KZblcpRNFC6ZR/w/dhpOIqfBmUT7arBO9xF2uJHYQCcBFiXx2JxXKfwt9Ba+AA81PlFQoR4zsN7lvZBPWqrlwSeBAcAgLph8RBUmTpRvAqdUuxTn4ffxS6YadPXGEZfU6BH3oUfspxlSmI4rE+PgKoAfcf5uL+ujWYVPsMRsZOGUc/M8KQ=="}],"role":"model"},{"parts":[{"functionResponse":{"id":"sjtv17iq","name":"get_number","response":{"response":"10"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get a specific number","name":"get_number","parameters":{"properties":{"which":{"description":"Which number to get (first or second)","type":"STRING"}},"required":["which"],"type":"OBJECT"}},{"description":"Add two numbers together","name":"add_numbers","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 981 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr b/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr index 2c81e4a13..94de50b9b 100644 --- a/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr +++ b/llms/googleai/testdata/TestGoogleAI_SingleFunctionCallWithSignature.httprr @@ -1,14 +1,14 @@ httprr trace v1 -1093 1595 +1056 1595 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 767 +Content-Length: 730 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Use the multiply function to calculate 7 times 9"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Multiply two numbers together","name":"multiply","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Use the multiply function to calculate 7 times 9"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Multiply two numbers together","name":"multiply","parameters":{"properties":{"a":{"description":"First number","type":"NUMBER"},"b":{"description":"Second number","type":"NUMBER"}},"required":["a","b"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK Content-Length: 1182 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -63,16 +63,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-3-flash-preview", "responseId": "sbZxas7nCYX7vdIPwL6goQ4" } -1387 1248 +1350 1248 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 1060 +Content-Length: 1023 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Use the multiply function to calculate 7 times 9"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":7,"b":9},"id":"n5u72jdq","name":"multiply"},"thoughtSignature":"EvQBCvEBARFNMg+DspE09ruHIitzO7Rtj6iul3YH7KKQoEXyKfo7w8/KtUpPI1e21bLS4HXmejeLtRoHIXVdbNMws/7g0dM288dfRw9VeGqygB+ecVeBqKBvsS/V0TgoCDLQKN4jWA5VEY7g/04IpcwfaT9FX/knJtSwWzWI+ybxZ9HcdbeyrHGa2J8UVhdaWMPC0bN1+7xnlfFPv6YYN0eQpbZInobATWoCHDuPt5xcv/cXZZtckE99zJAf+RTvSr1sSJbFwQ6/t3MBNKyZQ48AZOarHbqcx9iw+wBWWrptT2o6/d/8Klx6KWBaYwK+TmVmDNEWdg=="}],"role":"model"},{"parts":[{"functionResponse":{"id":"n5u72jdq","name":"multiply","response":{"response":"63"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":512,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Use the multiply function to calculate 7 times 9"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":7,"b":9},"id":"n5u72jdq","name":"multiply"},"thoughtSignature":"EvQBCvEBARFNMg+DspE09ruHIitzO7Rtj6iul3YH7KKQoEXyKfo7w8/KtUpPI1e21bLS4HXmejeLtRoHIXVdbNMws/7g0dM288dfRw9VeGqygB+ecVeBqKBvsS/V0TgoCDLQKN4jWA5VEY7g/04IpcwfaT9FX/knJtSwWzWI+ybxZ9HcdbeyrHGa2J8UVhdaWMPC0bN1+7xnlfFPv6YYN0eQpbZInobATWoCHDuPt5xcv/cXZZtckE99zJAf+RTvSr1sSJbFwQ6/t3MBNKyZQ48AZOarHbqcx9iw+wBWWrptT2o6/d/8Klx6KWBaYwK+TmVmDNEWdg=="}],"role":"model"},{"parts":[{"functionResponse":{"id":"n5u72jdq","name":"multiply","response":{"response":"63"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":512},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 837 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr index 1f8c1abb2..cecf7bbcd 100644 --- a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr +++ b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignature.httprr @@ -1,14 +1,14 @@ httprr trace v1 -872 5354 +835 5354 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 546 +Content-Length: 509 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 15 + 27? Think step by step."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":1,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1024},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 15 + 27? Think step by step."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1024}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 4941 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 @@ -59,16 +59,16 @@ X-Xss-Protection: 0 "modelVersion": "gemini-3-flash-preview", "responseId": "nrZxaompHaLmxN8Pld_XgAE" } -3375 2369 +3338 2369 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 3048 +Content-Length: 3011 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is 15 + 27? Think step by step."}],"role":"user"},{"parts":[{"text":"To find the sum of **15 + 27**, we can break it down step by step:\n\n### Method 1: Adding by Place Value (Tens and Ones)\n1. **Break the numbers apart:**\n * 15 is **10 + 5**\n * 27 is **20 + 7**\n2. **Add the tens together:**\n * 10 + 20 = **30**\n3. **Add the ones together:**\n * 5 + 7 = **12**\n4. **Add the two results together:**\n * 30 + 12 = **42**\n\n---\n\n### Method 2: Column Addition (Carrying)\n1. **Add the ones column:** \n * 5 + 7 = **12**\n * Write down the **2** and carry the **1** to the tens column.\n2. **Add the tens column:** \n * 1 (carried) + 1 + 2 = **4**\n3. **Combine them:**\n * The result is **42**.\n\n**Final Answer:** 15 + 27 = **42**","thoughtSignature":"EoQKCoEKARFNMg+GIlHgyAx6VqYQbwvj4rpZlIzKvhRxrzJsIMoLxalgtxYPMpss/uW/wUgLIjFOw5K9IGKFOX9r0md0wVY2eix+dCBXd0CizY+zzoui5l5oeEfeJOOt7yTXmJ00pJxKKcVRYOTqa8PmXcCokLp7lkSbliKhsKjpG5vciZvsxHji9uf9+wFOezc+oqNeF6E8/Prq3HFJLrUble7JgXKc3DVKdS7ZKkaLniLZnQ0FsBWu8mNd7Vx9s6Bx1RFzIqJSTmp+9YJM1KsXy/8TgR7UP1pvCy/N2h3bg5NrEirMA+hJPtE5An23uEhMNWnDc034w9wCd1Ahpac2PIYS34P3SvtQcTUVDg6GSQKgRHSVQAtVFJd0+CQmN7caAVp1lVyekBeXT11CeHl+XOTTLN5oTqrvUARGLNNUcVZzBkiQ1DNHg8zi497f0uUN2bMAAJAvV2v5VYPEyv8CZH4dcXKAAtntifo6gtWDQT9Q+IDjMGytCeLZPVtYMm3G1erHzmahY2HUKN2cLFk7zDOdr6n9mQEVXk9iXbRWbPTM+2jPOIXVQf0cbLzTVXmPZ4lnhn3VqO84UBLqOGC4vw9Eupw+dYQYGnpAsNYAMCcDCxRCjUGTcdLzkPoKLnH2/oSV0aWJXf/d3xk2D/71eQnkcud6dgh0rk6H+FhHuF3AntMY5oRxkXTYNUf6P9CgA3sc6zptNvsaCIHi8MQlbyHN8HB5OKMfWFkwsZRDoX++UqGQ5aOrfiUwQy0Ghk8qU3oUpwDKzSAvKzeNmNnOlRW0X0KarW5rJPaBPhIwKM5g9gcfpdbjEWWMhphVQcGYIVWNPgv4sVDgICmfKppLS6ILorQIzjXY5dco/VQy1cJdSyqs6XEvMdlgWavITx2MLG6K/+5m2X5DKTNTHNyasOBWT+AFJkxo/0VRJTcWAWdQSfLCld8sFzZYERUoPTmkb3y21oFp62JtXj4mLMsyboBfIdf6vNln2hwT5d8FsrxzUDQ3NNft8bW0kRqATmKlr4IPdu7eea00ZKm6ix2F7Ybx83gGVBAJMh7GnwCHfmigoaxZAh3KtAvV0TGq7X1s8HXbUPIlF+7izOVziciL6w8dxTDyj7zOhA6aj9Jfq6tWBa7A/HvhFRYvRYOWm4WNMxxfLWanI4zgBI5vuouMQ4HGqAKUmM6un061X9oBPEWuLQh3W8BzB3EpC/07bd9wL1EHNTK5L1lK0MmxW/qGOwdjcRjwHYRNJGeqMQJUlN0NeLDF8C0PY7/t88q8iaeRki/axBZO7bEZW1dfTN5gckrB6XtR+S0L2owgp9z7ujyIcQTJ9u9Lsn4gOJrv+Gx53+jr/ng/FLnC2FOPu2kolmhItm/mMHI3KgbRMmEsnsyfVXkvQPk2dt+6REYQ/wqHIdYM3tK3fPwxjNkvLWA1clyykJCZiKXpQbFAO8VqktDbcX+ZQ1rBU6Cf0SGzh764lxR08O6AHxO09vm/U+SdceHJvVM2lvBHI32gvTEMvVEgGQgpAcVX1wNzu/FiX42n7afJBQGZ5cdouyUBdACkdH8f3OAN2X6CNrnh7cVPE0XMVv0jUZ6eGp6gMbmq/z0bkFIXqceQrGqmhSrzMIRllpq87FFCwd1mgQj9loDbBjmICC8NjB7jT1Hl2syuCqCntG5axWM7ITPBtao01wJV9cxhmEDoXuYrZZNnTxF+4aczsqde"}],"role":"model"},{"parts":[{"text":"Now multiply that result by 2"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"What is 15 + 27? Think step by step."}],"role":"user"},{"parts":[{"text":"To find the sum of **15 + 27**, we can break it down step by step:\n\n### Method 1: Adding by Place Value (Tens and Ones)\n1. **Break the numbers apart:**\n * 15 is **10 + 5**\n * 27 is **20 + 7**\n2. **Add the tens together:**\n * 10 + 20 = **30**\n3. **Add the ones together:**\n * 5 + 7 = **12**\n4. **Add the two results together:**\n * 30 + 12 = **42**\n\n---\n\n### Method 2: Column Addition (Carrying)\n1. **Add the ones column:** \n * 5 + 7 = **12**\n * Write down the **2** and carry the **1** to the tens column.\n2. **Add the tens column:** \n * 1 (carried) + 1 + 2 = **4**\n3. **Combine them:**\n * The result is **42**.\n\n**Final Answer:** 15 + 27 = **42**","thoughtSignature":"EoQKCoEKARFNMg+GIlHgyAx6VqYQbwvj4rpZlIzKvhRxrzJsIMoLxalgtxYPMpss/uW/wUgLIjFOw5K9IGKFOX9r0md0wVY2eix+dCBXd0CizY+zzoui5l5oeEfeJOOt7yTXmJ00pJxKKcVRYOTqa8PmXcCokLp7lkSbliKhsKjpG5vciZvsxHji9uf9+wFOezc+oqNeF6E8/Prq3HFJLrUble7JgXKc3DVKdS7ZKkaLniLZnQ0FsBWu8mNd7Vx9s6Bx1RFzIqJSTmp+9YJM1KsXy/8TgR7UP1pvCy/N2h3bg5NrEirMA+hJPtE5An23uEhMNWnDc034w9wCd1Ahpac2PIYS34P3SvtQcTUVDg6GSQKgRHSVQAtVFJd0+CQmN7caAVp1lVyekBeXT11CeHl+XOTTLN5oTqrvUARGLNNUcVZzBkiQ1DNHg8zi497f0uUN2bMAAJAvV2v5VYPEyv8CZH4dcXKAAtntifo6gtWDQT9Q+IDjMGytCeLZPVtYMm3G1erHzmahY2HUKN2cLFk7zDOdr6n9mQEVXk9iXbRWbPTM+2jPOIXVQf0cbLzTVXmPZ4lnhn3VqO84UBLqOGC4vw9Eupw+dYQYGnpAsNYAMCcDCxRCjUGTcdLzkPoKLnH2/oSV0aWJXf/d3xk2D/71eQnkcud6dgh0rk6H+FhHuF3AntMY5oRxkXTYNUf6P9CgA3sc6zptNvsaCIHi8MQlbyHN8HB5OKMfWFkwsZRDoX++UqGQ5aOrfiUwQy0Ghk8qU3oUpwDKzSAvKzeNmNnOlRW0X0KarW5rJPaBPhIwKM5g9gcfpdbjEWWMhphVQcGYIVWNPgv4sVDgICmfKppLS6ILorQIzjXY5dco/VQy1cJdSyqs6XEvMdlgWavITx2MLG6K/+5m2X5DKTNTHNyasOBWT+AFJkxo/0VRJTcWAWdQSfLCld8sFzZYERUoPTmkb3y21oFp62JtXj4mLMsyboBfIdf6vNln2hwT5d8FsrxzUDQ3NNft8bW0kRqATmKlr4IPdu7eea00ZKm6ix2F7Ybx83gGVBAJMh7GnwCHfmigoaxZAh3KtAvV0TGq7X1s8HXbUPIlF+7izOVziciL6w8dxTDyj7zOhA6aj9Jfq6tWBa7A/HvhFRYvRYOWm4WNMxxfLWanI4zgBI5vuouMQ4HGqAKUmM6un061X9oBPEWuLQh3W8BzB3EpC/07bd9wL1EHNTK5L1lK0MmxW/qGOwdjcRjwHYRNJGeqMQJUlN0NeLDF8C0PY7/t88q8iaeRki/axBZO7bEZW1dfTN5gckrB6XtR+S0L2owgp9z7ujyIcQTJ9u9Lsn4gOJrv+Gx53+jr/ng/FLnC2FOPu2kolmhItm/mMHI3KgbRMmEsnsyfVXkvQPk2dt+6REYQ/wqHIdYM3tK3fPwxjNkvLWA1clyykJCZiKXpQbFAO8VqktDbcX+ZQ1rBU6Cf0SGzh764lxR08O6AHxO09vm/U+SdceHJvVM2lvBHI32gvTEMvVEgGQgpAcVX1wNzu/FiX42n7afJBQGZ5cdouyUBdACkdH8f3OAN2X6CNrnh7cVPE0XMVv0jUZ6eGp6gMbmq/z0bkFIXqceQrGqmhSrzMIRllpq87FFCwd1mgQj9loDbBjmICC8NjB7jT1Hl2syuCqCntG5axWM7ITPBtao01wJV9cxhmEDoXuYrZZNnTxF+4aczsqde"}],"role":"model"},{"parts":[{"text":"Now multiply that result by 2"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 1956 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 diff --git a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr index 0c0c056a7..b322e38ba 100644 --- a/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr +++ b/llms/googleai/testdata/TestGoogleAI_TextResponseWithSignatureStreaming.httprr @@ -1,14 +1,14 @@ httprr trace v1 -884 12485 +847 12485 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:streamGenerateContent?alt=sse HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 544 +Content-Length: 507 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Calculate 23 * 17. Show your work."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":1,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1024},"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Calculate 23 * 17. Show your work."}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"thinkingConfig":{"includeThoughts":true,"thinkingBudget":1024}},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 12085 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Disposition: attachment @@ -69,16 +69,16 @@ data: {"candidates": [{"content": {"parts": [{"text": "Answer: 391**"}],"role": data: {"candidates": [{"content": {"parts": [{"text": "","thoughtSignature": "EoUKCoIKARFNMg/3bEZtKzkMaobT/rC1/XTyfucSqgk+M/CTphd53T09dfD1YyioME/tYW65lASxDU45IconJ6ZA34nJnNc3gWn7KsLYYEWvBYBzkb7AnUOqogBenTQcQJzvEZqg7q66l+1swQ5iDmR44b8wQsTI4FGyvr3bOr92KjI+NELY0iIw7U2ulQRi/zWj7/xHg0wgREjFMTybuH/1vOiE12zTDyfhSmrJu3FtmjTH9BrJcFe7ZtXdp9yg2TnMKNfnuMBkDf65kANQg0CI1w6pjuPfqeaMHnVrhpqlUF9UDIoohsj0dQwgIw4TjgYAa72p8hZaR+KzJRnu1wai8tBavhjkMtjpvwINcCJ6ID0dWehJiSVbUvG98o6QEQsVW8JBXwdNk6KUss/u9u/9ExFqK8z92bHDIbol9VZEKhfZ2gND2tiD1bFG7zzworb+l5293ZF2NUk8qkVkNi8XNIPPvWCea5TXUzT2RFvUfA6k+n/Msf8moxRng/luK/BtNhwZfaZgfqj49Ul67FiB3iFZdSU9kFdP0uXVNgTicVRrBPauk0RYqqMRjCw74i0DNxS1yo1gH3/WZZKoA/yb8+49iTiBsfj4LaFJNGOz+3NOc108OH1i/DuSVtZHqyOiXzo04uMT0owqmaHzTr5KQeTrObIwVMySmO1NhkeJDb4riUp//REW8upRtD7slzXUd2AEHSdyrgNvFdM+/uesgPnpzW6oyWMFK08qh+5i+AKscmff+wiDLPUqb3RH0B//vQBr/62WQsYw1uwC5WCOgm8OSEyzCsm/IuZ7PS2aDdazopECtwcLi7XwmdtmhzRGj1EmzbbuuByMfXUBEmWlqTca/v9SOuV6TUYAlqsoyiTt80WbX8fgH7n8DQIRG7K4E/inEjmUxZ4jWNc1jlkFUN0+mfnKhVhd3UwMnJMOFQdJSmFiqZ9PsAoVajFYR0B0A7JCTsYOB9mSsPbG/qVYP2e0kCf5nU2OXfIdDWqYrX55rUT/oEdGapfxehgMJRgKT0O+n1AlYZblnLXr2RSiPg2SXOChy/x/XkK/RSUU3npM0JRtzhZez+0uxWpKNULvS1LvtPucNX8AhjUqBH7mqSFpPDclZ9OXALUV2FrnXN2IIf3vHxcCH2SAq1MJX1bgHmqVJMhMwajdNDPOwiVG7M5IzS5aSnP+K7QQRJXjtGu9FOUxvXpEjko+BgpEKVZzR8YvxHLxmg1NPrPtQ8Ot2t8xSD6115RUwCI7tn7hk0N5tMdB8ohwZU7NNBf3thVZ0KwI1NcenAjP0tXjeKd0SfGDKIcvnPVkglednxVaIYNUJo1ZMhxvX21dcHFrr4gWfULa/hUEW0qp6tKPu0h0q4ko76Vfl709y7kEEfjHogg3U2JRJNhzlZQQM0cNGfBem5p4ELrPY74rNMTtjaAwR8NuDqlWITXcy7Y9Ed3E2o36zKXP3uerMY57F+pJP1zUMM66LCt6psvN00KX02dDjZ5v3eCcSOrbjFM9reRLCqPcaNXXkBjvIsSJOIZsaPT9fbo9QXB0pH+6Jkd1a2eWcCuVy72gO+PWLd0rk9lCYsNZNH5RuJL7i7X67zoXZlZDt8HExKqFSXeo5oD4z8l312EoQ++KriZRBazQvRWVfc5iW0ZFlWbCtXQrhK90hkkdh590w35fB+XVrYClWyEYljUp6sneHgUDyb/36SMvhYYqdulCsA=="}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 14,"candidatesTokenCount": 498,"totalTokenCount": 948,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 14}],"thoughtsTokenCount": 436,"serviceTier": "standard"},"modelVersion": "gemini-3-flash-preview","responseId": "qbZxauT8EIX-vdIPsfHt0A0"} -3801 2646 +3764 2646 POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 3474 +Content-Length: 3437 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"Calculate 23 * 17. Show your work."}],"role":"user"},{"parts":[{"text":"To calculate **23 × 17**, here are three different ways to show the work:\n\n### Method 1: Standard Long Multiplication\n1. Multiply **23** by the ones digit (**7**):\n * $7 \\times 3 = 21$ (Write down 1, carry the 2)\n * $7 \\times 2 = 14$; $14 + 2 = 16$\n * Result: **161**\n2. Multiply **23** by the tens digit (**1**, which represents **10**):\n * Place a 0 in the ones column.\n * $1 \\times 3 = 3$\n * $1 \\times 2 = 2$\n * Result: **230**\n3. Add the two results together:\n * $161 + 230 = 391$\n\n**Answer: 391**\n\n***\n\n### Method 2: Difference of Squares (Mental Math shortcut)\nSince 23 and 17 are both 3 units away from 20, you can use the formula $(a + b)(a - b) = a^2 - b^2$.\n* $23 = 20 + 3$\n* $17 = 20 - 3$\n\nCalculation:\n* $(20 + 3)(20 - 3) = 20^2 - 3^2$\n* $400 - 9 = 391$\n\n**Answer: 391**\n\n***\n\n### Method 3: Distributive Property (Breaking it down)\nYou can break 17 into $10 + 7$:\n* $23 \\times 17 = 23 \\times (10 + 7)$\n* $23 \\times 10 = 230$\n* $23 \\times 7 = 161$ (calculated as $20 \\times 7 + 3 \\times 7$)\n* $230 + 161 = 391$\n\n**Answer: 391**","thoughtSignature":"EoUKCoIKARFNMg/3bEZtKzkMaobT/rC1/XTyfucSqgk+M/CTphd53T09dfD1YyioME/tYW65lASxDU45IconJ6ZA34nJnNc3gWn7KsLYYEWvBYBzkb7AnUOqogBenTQcQJzvEZqg7q66l+1swQ5iDmR44b8wQsTI4FGyvr3bOr92KjI+NELY0iIw7U2ulQRi/zWj7/xHg0wgREjFMTybuH/1vOiE12zTDyfhSmrJu3FtmjTH9BrJcFe7ZtXdp9yg2TnMKNfnuMBkDf65kANQg0CI1w6pjuPfqeaMHnVrhpqlUF9UDIoohsj0dQwgIw4TjgYAa72p8hZaR+KzJRnu1wai8tBavhjkMtjpvwINcCJ6ID0dWehJiSVbUvG98o6QEQsVW8JBXwdNk6KUss/u9u/9ExFqK8z92bHDIbol9VZEKhfZ2gND2tiD1bFG7zzworb+l5293ZF2NUk8qkVkNi8XNIPPvWCea5TXUzT2RFvUfA6k+n/Msf8moxRng/luK/BtNhwZfaZgfqj49Ul67FiB3iFZdSU9kFdP0uXVNgTicVRrBPauk0RYqqMRjCw74i0DNxS1yo1gH3/WZZKoA/yb8+49iTiBsfj4LaFJNGOz+3NOc108OH1i/DuSVtZHqyOiXzo04uMT0owqmaHzTr5KQeTrObIwVMySmO1NhkeJDb4riUp//REW8upRtD7slzXUd2AEHSdyrgNvFdM+/uesgPnpzW6oyWMFK08qh+5i+AKscmff+wiDLPUqb3RH0B//vQBr/62WQsYw1uwC5WCOgm8OSEyzCsm/IuZ7PS2aDdazopECtwcLi7XwmdtmhzRGj1EmzbbuuByMfXUBEmWlqTca/v9SOuV6TUYAlqsoyiTt80WbX8fgH7n8DQIRG7K4E/inEjmUxZ4jWNc1jlkFUN0+mfnKhVhd3UwMnJMOFQdJSmFiqZ9PsAoVajFYR0B0A7JCTsYOB9mSsPbG/qVYP2e0kCf5nU2OXfIdDWqYrX55rUT/oEdGapfxehgMJRgKT0O+n1AlYZblnLXr2RSiPg2SXOChy/x/XkK/RSUU3npM0JRtzhZez+0uxWpKNULvS1LvtPucNX8AhjUqBH7mqSFpPDclZ9OXALUV2FrnXN2IIf3vHxcCH2SAq1MJX1bgHmqVJMhMwajdNDPOwiVG7M5IzS5aSnP+K7QQRJXjtGu9FOUxvXpEjko+BgpEKVZzR8YvxHLxmg1NPrPtQ8Ot2t8xSD6115RUwCI7tn7hk0N5tMdB8ohwZU7NNBf3thVZ0KwI1NcenAjP0tXjeKd0SfGDKIcvnPVkglednxVaIYNUJo1ZMhxvX21dcHFrr4gWfULa/hUEW0qp6tKPu0h0q4ko76Vfl709y7kEEfjHogg3U2JRJNhzlZQQM0cNGfBem5p4ELrPY74rNMTtjaAwR8NuDqlWITXcy7Y9Ed3E2o36zKXP3uerMY57F+pJP1zUMM66LCt6psvN00KX02dDjZ5v3eCcSOrbjFM9reRLCqPcaNXXkBjvIsSJOIZsaPT9fbo9QXB0pH+6Jkd1a2eWcCuVy72gO+PWLd0rk9lCYsNZNH5RuJL7i7X67zoXZlZDt8HExKqFSXeo5oD4z8l312EoQ++KriZRBazQvRWVfc5iW0ZFlWbCtXQrhK90hkkdh590w35fB+XVrYClWyEYljUp6sneHgUDyb/36SMvhYYqdulCsA=="}],"role":"model"},{"parts":[{"text":"Now divide that result by 23"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024,"temperature":1,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +{"contents":[{"parts":[{"text":"Calculate 23 * 17. Show your work."}],"role":"user"},{"parts":[{"text":"To calculate **23 × 17**, here are three different ways to show the work:\n\n### Method 1: Standard Long Multiplication\n1. Multiply **23** by the ones digit (**7**):\n * $7 \\times 3 = 21$ (Write down 1, carry the 2)\n * $7 \\times 2 = 14$; $14 + 2 = 16$\n * Result: **161**\n2. Multiply **23** by the tens digit (**1**, which represents **10**):\n * Place a 0 in the ones column.\n * $1 \\times 3 = 3$\n * $1 \\times 2 = 2$\n * Result: **230**\n3. Add the two results together:\n * $161 + 230 = 391$\n\n**Answer: 391**\n\n***\n\n### Method 2: Difference of Squares (Mental Math shortcut)\nSince 23 and 17 are both 3 units away from 20, you can use the formula $(a + b)(a - b) = a^2 - b^2$.\n* $23 = 20 + 3$\n* $17 = 20 - 3$\n\nCalculation:\n* $(20 + 3)(20 - 3) = 20^2 - 3^2$\n* $400 - 9 = 391$\n\n**Answer: 391**\n\n***\n\n### Method 3: Distributive Property (Breaking it down)\nYou can break 17 into $10 + 7$:\n* $23 \\times 17 = 23 \\times (10 + 7)$\n* $23 \\times 10 = 230$\n* $23 \\times 7 = 161$ (calculated as $20 \\times 7 + 3 \\times 7$)\n* $230 + 161 = 391$\n\n**Answer: 391**","thoughtSignature":"EoUKCoIKARFNMg/3bEZtKzkMaobT/rC1/XTyfucSqgk+M/CTphd53T09dfD1YyioME/tYW65lASxDU45IconJ6ZA34nJnNc3gWn7KsLYYEWvBYBzkb7AnUOqogBenTQcQJzvEZqg7q66l+1swQ5iDmR44b8wQsTI4FGyvr3bOr92KjI+NELY0iIw7U2ulQRi/zWj7/xHg0wgREjFMTybuH/1vOiE12zTDyfhSmrJu3FtmjTH9BrJcFe7ZtXdp9yg2TnMKNfnuMBkDf65kANQg0CI1w6pjuPfqeaMHnVrhpqlUF9UDIoohsj0dQwgIw4TjgYAa72p8hZaR+KzJRnu1wai8tBavhjkMtjpvwINcCJ6ID0dWehJiSVbUvG98o6QEQsVW8JBXwdNk6KUss/u9u/9ExFqK8z92bHDIbol9VZEKhfZ2gND2tiD1bFG7zzworb+l5293ZF2NUk8qkVkNi8XNIPPvWCea5TXUzT2RFvUfA6k+n/Msf8moxRng/luK/BtNhwZfaZgfqj49Ul67FiB3iFZdSU9kFdP0uXVNgTicVRrBPauk0RYqqMRjCw74i0DNxS1yo1gH3/WZZKoA/yb8+49iTiBsfj4LaFJNGOz+3NOc108OH1i/DuSVtZHqyOiXzo04uMT0owqmaHzTr5KQeTrObIwVMySmO1NhkeJDb4riUp//REW8upRtD7slzXUd2AEHSdyrgNvFdM+/uesgPnpzW6oyWMFK08qh+5i+AKscmff+wiDLPUqb3RH0B//vQBr/62WQsYw1uwC5WCOgm8OSEyzCsm/IuZ7PS2aDdazopECtwcLi7XwmdtmhzRGj1EmzbbuuByMfXUBEmWlqTca/v9SOuV6TUYAlqsoyiTt80WbX8fgH7n8DQIRG7K4E/inEjmUxZ4jWNc1jlkFUN0+mfnKhVhd3UwMnJMOFQdJSmFiqZ9PsAoVajFYR0B0A7JCTsYOB9mSsPbG/qVYP2e0kCf5nU2OXfIdDWqYrX55rUT/oEdGapfxehgMJRgKT0O+n1AlYZblnLXr2RSiPg2SXOChy/x/XkK/RSUU3npM0JRtzhZez+0uxWpKNULvS1LvtPucNX8AhjUqBH7mqSFpPDclZ9OXALUV2FrnXN2IIf3vHxcCH2SAq1MJX1bgHmqVJMhMwajdNDPOwiVG7M5IzS5aSnP+K7QQRJXjtGu9FOUxvXpEjko+BgpEKVZzR8YvxHLxmg1NPrPtQ8Ot2t8xSD6115RUwCI7tn7hk0N5tMdB8ohwZU7NNBf3thVZ0KwI1NcenAjP0tXjeKd0SfGDKIcvnPVkglednxVaIYNUJo1ZMhxvX21dcHFrr4gWfULa/hUEW0qp6tKPu0h0q4ko76Vfl709y7kEEfjHogg3U2JRJNhzlZQQM0cNGfBem5p4ELrPY74rNMTtjaAwR8NuDqlWITXcy7Y9Ed3E2o36zKXP3uerMY57F+pJP1zUMM66LCt6psvN00KX02dDjZ5v3eCcSOrbjFM9reRLCqPcaNXXkBjvIsSJOIZsaPT9fbo9QXB0pH+6Jkd1a2eWcCuVy72gO+PWLd0rk9lCYsNZNH5RuJL7i7X67zoXZlZDt8HExKqFSXeo5oD4z8l312EoQ++KriZRBazQvRWVfc5iW0ZFlWbCtXQrhK90hkkdh590w35fB+XVrYClWyEYljUp6sneHgUDyb/36SMvhYYqdulCsA=="}],"role":"model"},{"parts":[{"text":"Now divide that result by 23"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":1024},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK Content-Length: 2233 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 From 49a09c731bd4dbd768cf90cf4c8e4598328c5432 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:45:57 +0300 Subject: [PATCH 478/618] fix(openai): keep Kimi's fixed sampling off the wire Kimi fixes temperature, top_p and both penalties on kimi-k3, kimi-k2.7-code (and -highspeed) and kimi-k2.6: "Fixed means the parameter cannot be modified: passing any other value returns an error, so do not pass it explicitly" (platform.kimi.ai, models overview). The openai door had no Kimi rule since PAGI-288 took OpenAI's sampling rule off foreign vendors, so an operator's temperature 0.6 moved from a kimi-k2.6 agent to kimi-k3 went out and failed. Those models now get none of the four fields, with a drop warning for each the caller set; kimi-k2.6's temperature follows its thinking mode on the vendor side, which omitting leaves intact. Kimi models the table does not name keep the caller's sampling. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 5 +++ llms/openai/sampling_warnings.go | 2 ++ llms/openai/sampling_warnings_test.go | 45 ++++++++++++++++++++++++++- llms/reasoning/effort_wire.go | 12 +++++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index ffe06b684..d822f3115 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -536,6 +536,11 @@ func (o *LLM) enforceSamplingPolicy(req *openaiclient.ChatRequest, opts llms.Cal req.Temperature, req.TopP, req.TopK = nil, nil, nil return } + if reasoning.FixesSampling(model) { + req.Temperature, req.TopP = nil, nil + req.FrequencyPenalty, req.PresencePenalty = nil, nil + return + } switch { case refusesSamplingWhileThinking(model, opts, wireEffort): diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index e5cda063c..65bbbe55c 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -89,6 +89,8 @@ func samplingReason(model string, opts llms.CallOptions, wireEffort string) stri switch { case reasoning.ClaudeRejectsSampling(model): return "the model rejects sampling parameters" + case reasoning.FixesSampling(model): + return "the model runs on fixed sampling and refuses any value for it" case refusesSamplingWhileThinking(model, opts, wireEffort): return "the model refuses sampling while thinking" default: diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index deade350a..ec4dccf36 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -5,6 +5,7 @@ import ( "io" "net/http" "net/http/httptest" + "slices" "strings" "testing" @@ -278,7 +279,7 @@ func TestTheNeutralOptionAndTheDoorOptionAreTheSame(t *testing.T) { func TestAVendorThatKeepsSamplingWhileThinkingKeepsIt(t *testing.T) { t.Parallel() - for _, model := range []string{"glm-5.3", "zai/glm-5.3", "kimi-k3"} { + for _, model := range []string{"glm-5.3", "zai/glm-5.3", "kimi-k2-thinking"} { body := sendForWire(t, model, llms.WithTemperature(0.2), llms.WithTopP(0.9), llms.WithReasoning(llms.ReasoningHigh, 0)) @@ -419,3 +420,45 @@ func TestDelegatedDepthOnAModelThatReasonsAnywayIsSilent(t *testing.T) { t.Errorf("nothing was lost, got %v", resp.Warnings) } } + +func TestKimiModelsWithFixedSamplingGetNoneOfIt(t *testing.T) { + t.Parallel() + + sampling := []llms.CallOption{ + llms.WithTemperature(0.3), llms.WithTopP(0.5), + llms.WithPresencePenalty(0.2), llms.WithFrequencyPenalty(0.1), + } + requests := map[string][]llms.CallOption{ + "kimi-k3": sampling, + "moonshot/kimi-k3": sampling, + "kimi-k2.7-code": sampling, + "kimi-k2.7-code-highspeed": sampling, + "kimi-k2.6": slices.Concat(sampling, []llms.CallOption{llms.WithReasoningDisabled()}), + } + for model, opts := range requests { + body := sendForWire(t, model, opts...) + for _, field := range []string{`"temperature"`, `"top_p"`, `"presence_penalty"`, `"frequency_penalty"`} { + if strings.Contains(body, field) { + t.Errorf("%s: %s is fixed by the vendor and must stay off the wire: %s", model, field, body) + } + } + + resp := sendForWarnings(t, model, sampling...) + for _, option := range []string{"WithTemperature", "WithTopP", "WithPresencePenalty", "WithFrequencyPenalty"} { + if got := warningFor(t, resp, option); got.Kind != llms.WarningDrop { + t.Errorf("%s: %s warning = %+v", model, option, got) + } + } + } +} + +func TestKimiModelsOutsideTheFixedListKeepTheirSampling(t *testing.T) { + t.Parallel() + + for _, model := range []string{"kimi-k2-thinking", "kimi-k2.7", "kimi-k30"} { + body := sendForWire(t, model, llms.WithTemperature(0.3), llms.WithTopP(0.5)) + if !strings.Contains(body, `"temperature":0.3`) || !strings.Contains(body, `"top_p":0.5`) { + t.Errorf("%s: sampling the vendor does not fix must reach the wire: %s", model, body) + } + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index cd89f130d..93ce3cc3d 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -48,6 +48,18 @@ func RejectsSamplingWhileThinking(model string) bool { return openAIProperName(model) && OpenAIReasoningCapsFor(model).Known } +// FixesSampling reports whether the model runs on fixed temperature, top_p and +// penalties, so any value the caller sets for them stays off the wire. +func FixesSampling(model string) bool { + for _, form := range modelSpellings(model) { + if hasGeneration(form, "kimi-k3") || hasGeneration(form, "kimi-k2.6") || + hasGeneration(form, "kimi-k2.7-code") { + return true + } + } + return false +} + // RejectsMinP reports whether min_p must stay off the wire. func RejectsMinP(model string) bool { return isClaudeModel(model) || openAIProperName(model) From 82ad62267d3ac7631313348b9246d04560eb5740 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:49:19 +0300 Subject: [PATCH 479/618] fix(bedrock): refuse structured output for the Claude models Bedrock does not serve it for Both Bedrock doors sent a JSON schema to any current Claude model. The AWS model cards list structured outputs under Not Supported on bedrock-runtime for Opus 4.7, Opus 4.8, Opus 5 and Sonnet 5, the Fable cards do not list it, and Anthropic's own page closes the list: "On Amazon Bedrock, structured outputs are available for Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5, and Claude Haiku 4.5." pentagi's provider tester runs the schema case on simple_json, so an operator who put one of those models there got a vendor failure where the tester expects to score "unsupported". A Claude model outside that list now gets ErrStructuredOutputUnsupported before the request on both doors; other families on Converse go to the provider as before. The README model matrix says the same. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 16 +++-- .../bedrockclient/bedrockclient_util.go | 23 ++++--- .../bedrockclient/bedrockclient_util_test.go | 61 ++++++++++++++++++- llms/reasoning/claude_capability.go | 18 ++++++ 4 files changed, 103 insertions(+), 15 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 97205eb67..9f377be2a 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -237,7 +237,9 @@ turned off, such as Fable, Mythos or DeepSeek R1. ## Structured Output The provider-neutral `llms.WithStructuredOutput` is supported on both API paths for -Anthropic models: the final response is guaranteed to be a single JSON value +the Claude models Bedrock serves it for — Opus 4.6 and 4.5, Sonnet 4.6 and 4.5, Haiku +4.5; any other Claude model returns a typed `ErrStructuredOutputUnsupported` before +the request. The final response is guaranteed to be a single JSON value matching the supplied JSON Schema (Draft 2020-12), validated locally against the original schema. @@ -783,14 +785,16 @@ _(Schema-constrained structured output itself is already implemented — see the ## Supported Model Matrix -Structured Output and Caching apply to Anthropic (Claude) models. See `models_list.go` -for the exact model IDs. +Caching applies to Anthropic (Claude) models. See `models_list.go` for the exact +model IDs. | Provider | Tool Calling | Reasoning | Streaming | Multimodal | Caching | Structured Output | |----------|-------------|-----------|-----------|------------|---------|-------------------| -| Claude Fable 5 | ✅ | ✅ (always-on) | ✅ | ✅ | ✅ | ✅ | -| Claude Opus 5/4.8/4.7/4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| Claude Sonnet 5/4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| Claude Fable 5 | ✅ | ✅ (always-on) | ✅ | ✅ | ✅ | ❌ | +| Claude Opus 5/4.8/4.7 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Claude Opus 4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| Claude Sonnet 5 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Claude Sonnet 4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Claude Haiku 4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Nova 2 Lite | ✅ | ✅ | ✅ | ✅ | ❌ | Converse native* | | Nova 2 Pro/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go index 26cfdc4e5..de1cfb3fe 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go @@ -99,15 +99,21 @@ func isSimpleType(t reflect.Type) bool { } // applyConverseStructuredOutput sets the native Converse OutputConfig.TextFormat -// from a per-call schema. Converse Structured Outputs is not Claude-only, so there -// is no local model gate here — an unsupported model surfaces as the provider 4xx. -// The AWS JsonSchemaDefinition.Schema field is a JSON string, so the raw schema is -// passed as-is with no second encoding. +// from a per-call schema. Only Claude is checked against a local list; other +// families go to the provider as asked. The AWS JsonSchemaDefinition.Schema field +// is a JSON string, so the raw schema is passed as-is with no second encoding. func applyConverseStructuredOutput(input *ConverseInput, converseInput *bedrockruntime.ConverseInput) error { so := input.StructuredOutput if so == nil { return nil } + if isAnthropicModelID(input.ModelID) && !reasoning.ClaudeSupportsStructuredOutputOnBedrock(input.ModelID) { + return &llms.ErrStructuredOutputUnsupported{ + Provider: providerBedrock, + Model: input.ModelID, + Reason: bedrockClaudeStructuredOutputReason, + } + } // Bedrock rejects an object schema that omits additionalProperties:false; // surface that documented, locally-detectable requirement as a typed error. if err := structuredoutput.RequireClosedObjects(so.Schema); err != nil { @@ -128,18 +134,19 @@ func applyConverseStructuredOutput(input *ConverseInput, converseInput *bedrockr return nil } +const bedrockClaudeStructuredOutputReason = "Amazon Bedrock serves structured output for this Claude model on neither API" + // applyAnthropicStructuredOutput folds a per-call schema into the legacy Anthropic -// output_config.format, preserving any effort already set. A known-legacy model that -// predates structured output is rejected with a typed error before the request. +// output_config.format, preserving any effort already set. func applyAnthropicStructuredOutput(input *anthropicTextGenerationInput, modelID string, so *llms.StructuredOutputConfig) error { if so == nil { return nil } - if !reasoning.ClaudeSupportsStructuredOutput(modelID) { + if !reasoning.ClaudeSupportsStructuredOutputOnBedrock(modelID) { return &llms.ErrStructuredOutputUnsupported{ Provider: providerBedrock, Model: modelID, - Reason: "model predates the output_config.format JSON Schema mode", + Reason: bedrockClaudeStructuredOutputReason, } } // Bedrock rejects an object schema that omits additionalProperties:false; diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go index bea6e9b8a..9d1428ba1 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go @@ -3,6 +3,7 @@ package bedrockclient import ( "context" "errors" + "slices" "testing" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" @@ -207,7 +208,7 @@ func TestConverse_StructuredOutput_CoexistsWithReasoning(t *testing.T) { }), mock.Anything).Return(textOutput(`{"answer":"ok"}`, types.StopReasonEndTurn), nil) input := &ConverseInput{ - ModelID: "anthropic.claude-sonnet-5-v1:0", + ModelID: "anthropic.claude-sonnet-4-6", Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Adaptive: true, Effort: llms.ReasoningHigh}, StructuredOutput: soConfig(), @@ -307,3 +308,61 @@ func TestLegacyAnthropic_StructuredOutput_UnsupportedModel(t *testing.T) { var unsup *llms.ErrStructuredOutputUnsupported require.True(t, errors.As(err, &unsup), "legacy 3.x must be unsupported, got %v", err) } + +var ( + claudeWithoutStructuredOutputOnBedrock = []string{ + "us.anthropic.claude-opus-4-7", "us.anthropic.claude-opus-4-8", "us.anthropic.claude-opus-5", + "us.anthropic.claude-sonnet-5", "us.anthropic.claude-fable-5", "us.anthropic.claude-fable-5-1", + "anthropic.claude-3-sonnet-20240229-v1:0", + } + claudeWithStructuredOutputOnBedrock = []string{ + "us.anthropic.claude-opus-4-6-v1", "anthropic.claude-sonnet-4-6", "anthropic.claude-sonnet-4-5-20250929-v1:0", + "us.anthropic.claude-opus-4-5-20251101-v1:0", "global.anthropic.claude-haiku-4-5-20251001-v1:0", + } +) + +func TestConverse_StructuredOutput_FollowsBedrocksClaudeList(t *testing.T) { + for _, model := range claudeWithoutStructuredOutputOnBedrock { + mockClient := &MockBedrockRuntimeClient{} + _, err := NewConverseClient(mockClient).CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + StructuredOutput: soConfig(), + }) + var unsup *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsup, model) + mockClient.AssertNotCalled(t, "Converse") + } + + for _, model := range append(slices.Clone(claudeWithStructuredOutputOnBedrock), "openai.gpt-oss-120b-1:0") { + mockClient := &MockBedrockRuntimeClient{} + var captured *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(in *bedrockruntime.ConverseInput) bool { + captured = in + return true + }), mock.Anything).Return(textOutput(`{"answer":"ok"}`, types.StopReasonEndTurn), nil) + + _, err := NewConverseClient(mockClient).CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + StructuredOutput: soConfig(), + }) + require.NoError(t, err, model) + require.NotNil(t, captured.OutputConfig, model) + } +} + +func TestLegacyAnthropic_StructuredOutput_FollowsBedrocksClaudeList(t *testing.T) { + t.Parallel() + + for _, model := range claudeWithoutStructuredOutputOnBedrock { + err := applyAnthropicStructuredOutput(&anthropicTextGenerationInput{}, model, soConfig()) + var unsup *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsup, model) + } + for _, model := range claudeWithStructuredOutputOnBedrock { + input := anthropicTextGenerationInput{} + require.NoError(t, applyAnthropicStructuredOutput(&input, model, soConfig()), model) + require.NotNil(t, input.OutputConfig, model) + } +} diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index ba782d68e..fe5f2bffc 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -263,6 +263,24 @@ func ClaudeSupportsStructuredOutput(model string) bool { return !containsAny(canonicalClaude(model), legacyNoStructuredClaude) } +var bedrockStructuredClaude = []string{ + "claude-opus-4-5", "claude-opus-4-6", "claude-sonnet-4-5", "claude-sonnet-4-6", "claude-haiku-4-5", +} + +// ClaudeSupportsStructuredOutputOnBedrock reports whether Amazon Bedrock serves +// schema constrained output for the Claude model. +func ClaudeSupportsStructuredOutputOnBedrock(model string) bool { + for _, form := range modelSpellings(model) { + name := canonicalClaude(form) + for _, family := range bedrockStructuredClaude { + if hasGeneration(name, family) { + return true + } + } + } + return false +} + // ResolveClaudeAdaptive returns whether to send adaptive thinking (true) or // budget thinking (false) for a Claude model, given the caller's preference // (adaptivePreferred is true when the caller used WithAdaptiveReasoning). From 61ac1517e4374083ea4f2d587a5ffe12558941cb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:50:25 +0300 Subject: [PATCH 480/618] fix(openai): refuse a JSON schema for DeepSeek and GLM before the request The openai door sent response_format json_schema to every model outside a short list of old OpenAI snapshots. DeepSeek's chat completions reference says response_format.type "must be one of text or json_object", and Z.ai's schema for the endpoint enumerates the same two values. pentagi's provider tester runs the schema case on simple_json, which ships as deepseek-flash and glm-4.5-air, so the case failed on a vendor error where the tester scores ErrStructuredOutputUnsupported as unsupported. DeepSeek and GLM names now get that typed error before the network, in every spelling the door already strips a routing prefix from; JSON mode, which both vendors document, still goes out as json_object. Co-Authored-By: Claude Opus 5 --- llms/openai/structured_output.go | 24 +++++++++++++--------- llms/openai/structured_output_unit_test.go | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index bc1d75d52..dcebf8fd4 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -52,11 +52,11 @@ func (o *LLM) setStructuredOutput(req *openaiclient.ChatRequest, opts llms.CallO } } model := o.effectiveModel(opts) - if openAIStructuredOutputUnsupported(model) { + if reason := openAIStructuredOutputUnsupported(model); reason != "" { return &llms.ErrStructuredOutputUnsupported{ Provider: providerOpenAI, Model: model, - Reason: "model predates Structured Outputs (json_schema)", + Reason: reason, } } if err := validateOpenAIStructuredSchema(so.Schema); err != nil { @@ -86,24 +86,28 @@ func (o *LLM) validateStructuredResponse(result *openaiclient.ChatCompletionResp return nil } -// openAIStructuredOutputUnsupported reports models KNOWN to lack Structured Outputs -// (json_schema). Unknown or newer names pass through so the local table never -// blocks a future model — the API is the final arbiter. -func openAIStructuredOutputUnsupported(model string) bool { +// openAIStructuredOutputUnsupported names why a model KNOWN to lack Structured +// Outputs (json_schema) cannot take one, or returns "". Unknown or newer names +// pass through so the local table never blocks a future model. +func openAIStructuredOutputUnsupported(model string) string { + const predates = "model predates Structured Outputs (json_schema)" + m := strings.ToLower(model) if idx := strings.LastIndex(m, "/"); idx != -1 { m = m[idx+1:] } switch { + case strings.HasPrefix(m, "deepseek"), strings.HasPrefix(m, "glm-"): + return "the vendor's chat completions response_format takes only text and json_object" case strings.HasPrefix(m, "gpt-3.5"): - return true + return predates case m == "gpt-4", strings.HasPrefix(m, "gpt-4-0"), strings.HasPrefix(m, "gpt-4-32k"), strings.HasPrefix(m, "gpt-4-turbo"): - return true + return predates case m == "gpt-4o-2024-05-13": // The first gpt-4o snapshot predates json_schema (added in 2024-08-06). - return true + return predates default: - return false + return "" } } diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index 599694b40..bdadc0856 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -120,6 +120,27 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / } }) + t.Run("a vendor without json_schema is refused before the request", func(t *testing.T) { + t.Parallel() + for _, model := range []string{"deepseek-flash", "deepseek-v4-pro", "deepseek/deepseek-v4-pro", "glm-4.5-air", "zai/glm-5.3"} { + llm := newUnitLLM(t, WithModel(model)) + var opts llms.CallOptions + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) + _, err := llm.createChatRequest(nil, opts, nil) + var unsup *llms.ErrStructuredOutputUnsupported + if !errors.As(err, &unsup) { + t.Fatalf("%s: want ErrStructuredOutputUnsupported, got %v", model, err) + } + + var jsonMode llms.CallOptions + llms.WithJSONMode()(&jsonMode) + req, err := llm.createChatRequest(nil, jsonMode, nil) + if err != nil || req.ResponseFormat == nil || req.ResponseFormat.FormatType() != "json_object" { + t.Fatalf("%s: JSON mode is documented and must still reach the wire, got %+v, %v", model, req, err) + } + } + }) + t.Run("unknown model passes through", func(t *testing.T) { t.Parallel() llm := newUnitLLM(t, WithModel("gpt-6-ultra-preview")) From ebb99f3c41ce06af70587639cd89c37ee597adc2 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:53:29 +0300 Subject: [PATCH 481/618] fix(ollama): keep the format field off Ollama Cloud and refuse schemas there Ollama's structured-outputs page opens with "Ollama's Cloud currently does not support structured outputs" above both the format:"json" and the schema sections. The door sent either to ollama.com anyway: the cloud answered 200 and ignored it, and the caller was never told that no constraint applied. pentagi runs its tool-call fixer in JSON mode on every Ollama Cloud call, and its tester sends a schema to simple_json. On an ollama.com host a per-call schema is now ErrStructuredOutputUnsupported before the request, and JSON mode or a client-level format goes out as the empty format with a drop warning, so the fixer keeps working while saying what it did not get. Local servers are unchanged. The cloud schema cassettes are gone with the requests they recorded; the JSON-mode cassette records the empty format. Co-Authored-By: Claude Opus 5 --- llms/ollama/README.md | 5 +- llms/ollama/ollama_cloud_test.go | 58 +++++++------------ llms/ollama/ollama_test.go | 27 +++++++++ llms/ollama/ollamallm.go | 25 +++++++- llms/ollama/testdata/TestCloudJSONMode.httprr | 6 +- .../TestCloudStructuredOutput-glm.httprr | 24 -------- .../TestCloudStructuredOutput-kimi.httprr | 24 -------- llms/ollama/warnings.go | 15 +++++ llms/ollama/warnings_test.go | 28 +++++++++ 9 files changed, 121 insertions(+), 91 deletions(-) delete mode 100644 llms/ollama/testdata/TestCloudStructuredOutput-glm.httprr delete mode 100644 llms/ollama/testdata/TestCloudStructuredOutput-kimi.httprr diff --git a/llms/ollama/README.md b/llms/ollama/README.md index d4da8393a..d51aaf0c1 100644 --- a/llms/ollama/README.md +++ b/llms/ollama/README.md @@ -582,7 +582,7 @@ HTTPRR_RECORD=. HTTPRR_DEBUG=true go test -v -run TestCloud - Cloud model generation - Cloud streaming - Cloud tool calling - - Cloud JSON mode + - Cloud JSON mode is dropped with a warning; a schema is refused before the request - Various options (temperature, seed) - Uses `httprr.SkipIfNoCredentialsAndRecordingMissing("OLLAMA_API_KEY")` to skip when no credentials @@ -961,7 +961,8 @@ Models ending in `-cloud` are automatically routed to Ollama's cloud infrastruct | Tool Calling | ✅ | ✅ | Most models | | Reasoning | ✅ | ✅ | DeepSeek R1, QwQ, etc. | | Vision (Images) | ✅ | ❌ | llama3.2-vision, etc. | -| JSON Mode | ✅ | ✅ | Compatible models only | +| JSON Mode | ✅ | ❌ | Cloud: dropped with a warning — Ollama Cloud does not support structured outputs | +| Structured Output (JSON Schema) | ✅ | ❌ | Cloud: `ErrStructuredOutputUnsupported` before the request | | Embeddings | ✅ | ❌ | nomic-embed-text, etc. | | Auto Model Pull | ✅ | ❌ | Local only | | Custom Templates | ✅ | ❌ | Local only | diff --git a/llms/ollama/ollama_cloud_test.go b/llms/ollama/ollama_cloud_test.go index 6beb5607e..3aa7362ec 100644 --- a/llms/ollama/ollama_cloud_test.go +++ b/llms/ollama/ollama_cloud_test.go @@ -285,6 +285,9 @@ func TestCloudJSONMode(t *testing.T) { resp, err := llm.GenerateContent(ctx, content, llms.WithJSONMode()) require.NoError(t, err) require.NotEmpty(t, resp.Choices) + require.Len(t, resp.Warnings, 1) + assert.Equal(t, llms.WarningDrop, resp.Warnings[0].Kind) + assert.Equal(t, "WithJSONMode", resp.Warnings[0].Option) c1 := resp.Choices[0] assert.NotEmpty(t, c1.Content) @@ -296,47 +299,28 @@ func TestCloudJSONMode(t *testing.T) { assert.Contains(t, responseText, "colors") } -// TestCloudStructuredOutput exercises the structured-output mechanism against the -// real Ollama Cloud backend on several models (httprr-recorded). The SDK sends the -// schema in the request's `format` field and validates the response against it. -// -// Note on Ollama Cloud behavior: unlike a local Ollama server, the Cloud backend -// does not apply the `format` schema as a hard grammar constraint for these models -// — it is a soft hint. So the prompt also asks for a bare JSON object and the -// schema requires only the field the model reliably returns; the SDK then verifies -// the real response actually matches. Models such as gpt-oss ignore the hint and -// return prose, which the SDK correctly surfaces as ErrStructuredOutputValidation. -func TestCloudStructuredOutput(t *testing.T) { - schema := json.RawMessage(`{"type":"object","properties":{"capital":{"type":"string"}},"required":["capital"]}`) +type refusingTransport struct{ t *testing.T } - models := []struct{ name, model string }{ - {"glm", "glm-5.2"}, - {"kimi", "kimi-k2.5"}, - } - for _, tc := range models { - t.Run(tc.name, func(t *testing.T) { - llm := newCloudTestClient(t) +func (r refusingTransport) RoundTrip(req *http.Request) (*http.Response, error) { + r.t.Errorf("no request may leave for %s", req.URL) + return nil, http.ErrHandlerTimeout +} - content := []llms.MessageContent{{ - Role: llms.ChatMessageTypeHuman, - Parts: []llms.ContentPart{ - llms.TextContent{Text: "Reply with ONLY a JSON object (no prose, no markdown) giving the capital of France."}, - }, - }} +func TestCloudRefusesAStructuredOutputSchema(t *testing.T) { + t.Parallel() - resp, err := llm.GenerateContent(context.Background(), content, - llms.WithModel(tc.model), - llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "capital", Schema: schema})) - require.NoError(t, err) - require.NotEmpty(t, resp.Choices) + schema := json.RawMessage(`{"type":"object","properties":{"capital":{"type":"string"}},"required":["capital"]}`) + for _, model := range []string{"glm-5.2", "kimi-k2.5", "gpt-oss:120b"} { + llm, err := New(WithServerURL(CloudURL), WithModel(model), + WithHTTPClient(&http.Client{Transport: refusingTransport{t: t}})) + require.NoError(t, err) - var out struct { - Capital string `json:"capital"` - } - require.NoError(t, json.Unmarshal([]byte(resp.Choices[0].Content), &out), - "structured output must be valid JSON") - assert.Contains(t, strings.ToLower(out.Capital), "paris") - }) + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "capital of France")}, + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "capital", Schema: schema})) + + var unsup *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsup, model) } } diff --git a/llms/ollama/ollama_test.go b/llms/ollama/ollama_test.go index 5be3da025..39168e115 100644 --- a/llms/ollama/ollama_test.go +++ b/llms/ollama/ollama_test.go @@ -497,6 +497,33 @@ func TestResolveFormat(t *testing.T) { assert.JSONEq(t, ollamaSOSchema, string(got)) }) + t.Run("the cloud gets the empty format whatever was asked", func(t *testing.T) { + t.Parallel() + for _, server := range []string{CloudURL, "https://api.ollama.com"} { + llm, err := New(WithServerURL(server), WithModel("gpt-oss:120b"), WithFormat("json")) + require.NoError(t, err) + + got, err := llm.resolveFormat(applyOpts(llms.WithJSONMode())) + require.NoError(t, err) + assert.Equal(t, `""`, string(got), server) + + _, err = llm.resolveFormat(applyOpts( + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(ollamaSOSchema)}), + )) + var unsup *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsup, server) + } + }) + + t.Run("a server that only looks like the cloud keeps JSON mode", func(t *testing.T) { + t.Parallel() + llm, err := New(WithServerURL("https://notollama.com")) + require.NoError(t, err) + got, err := llm.resolveFormat(applyOpts(llms.WithJSONMode())) + require.NoError(t, err) + assert.Equal(t, `"json"`, string(got)) + }) + t.Run("invalid structured config errors", func(t *testing.T) { t.Parallel() llm := newUnitLLM(t) diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index f3d6b6d15..fd7b3ed60 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -161,6 +161,9 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten warn := &llms.Warnings{} reportOllamaOptions(warn, model, opts) + if o.servesCloud() { + reportOllamaCloudFormat(warn, model, opts, o.options.format) + } if err := o.processTools(req, opts.Tools); err != nil { return nil, err @@ -385,14 +388,24 @@ func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms. // resolveFormat picks the Ollama `format` field. A per-call structured-output // schema is sent as the native JSON Schema (Ollama constrains generation to it); // otherwise the legacy string mode is preserved unchanged — the client-level -// format, or "json" for JSONMode. +// format, or "json" for JSONMode. Ollama Cloud always gets the empty format. func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { if so := opts.StructuredOutput; so != nil { if err := opts.ValidateStructuredOutput(); err != nil { return nil, err } + if o.servesCloud() { + return nil, &llms.ErrStructuredOutputUnsupported{ + Provider: providerOllama, + Model: o.getModel(opts), + Reason: ollamaCloudFormatReason, + } + } return so.Schema, nil } + if o.servesCloud() { + return json.RawMessage(`""`), nil + } format := o.options.format if opts.JSONMode { format = "json" @@ -400,6 +413,16 @@ func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { return json.RawMessage(fmt.Sprintf(`"%s"`, format)), nil } +const ollamaCloudFormatReason = "Ollama Cloud does not support structured outputs" + +func (o *LLM) servesCloud() bool { + if o.options.ollamaServerURL == nil { + return false + } + host := strings.ToLower(o.options.ollamaServerURL.Hostname()) + return host == "ollama.com" || strings.HasSuffix(host, ".ollama.com") +} + // processTools adds tools to the chat request. func (o *LLM) processTools(req *api.ChatRequest, tools []llms.Tool) error { for i := range tools { diff --git a/llms/ollama/testdata/TestCloudJSONMode.httprr b/llms/ollama/testdata/TestCloudJSONMode.httprr index bf2dea856..f1d27c670 100644 --- a/llms/ollama/testdata/TestCloudJSONMode.httprr +++ b/llms/ollama/testdata/TestCloudJSONMode.httprr @@ -1,13 +1,13 @@ httprr trace v1 -361 944 +357 944 POST https://ollama.com/api/chat HTTP/1.1 Host: ollama.com User-Agent: langchaingo-httprr -Content-Length: 184 +Content-Length: 180 Accept: application/x-ndjson Content-Type: application/json -{"model":"gpt-oss:120b","messages":[{"role":"user","content":"List three colors in JSON format with a 'colors' array."}],"stream":false,"format":"json","options":{"num_predict":16384}}HTTP/2.0 200 OK +{"model":"gpt-oss:120b","messages":[{"role":"user","content":"List three colors in JSON format with a 'colors' array."}],"stream":false,"format":"","options":{"num_predict":16384}}HTTP/2.0 200 OK Content-Length: 415 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json diff --git a/llms/ollama/testdata/TestCloudStructuredOutput-glm.httprr b/llms/ollama/testdata/TestCloudStructuredOutput-glm.httprr deleted file mode 100644 index 064743770..000000000 --- a/llms/ollama/testdata/TestCloudStructuredOutput-glm.httprr +++ /dev/null @@ -1,24 +0,0 @@ -httprr trace v1 -461 1610 -POST https://ollama.com/api/chat HTTP/1.1 -Host: ollama.com -User-Agent: langchaingo-httprr -Content-Length: 284 -Accept: application/x-ndjson -Content-Type: application/json - -{"model":"glm-5.2","messages":[{"role":"user","content":"Reply with ONLY a JSON object (no prose, no markdown) giving the capital of France."}],"stream":false,"format":{"type":"object","properties":{"capital":{"type":"string"}},"required":["capital"]},"options":{"num_predict":16384}}HTTP/2.0 200 OK -Content-Length: 1104 -Alt-Svc: h3=":443"; ma=2592000 -Content-Type: application/json -Date: Fri, 17 Jul 2026 01:06:55 GMT -Server: Google Frontend -Traceparent: 00-ef04d05efcf84d633a3aee8fb716da16-d27dc36579c8914c-00 -Via: 1.1 google -X-Build-Commit: 497d56d78d9396981c6f7d0265656affaf63d3d7 -X-Build-Time: 2026-07-16T17:39:19-07:00 -X-Cloud-Trace-Context: ef04d05efcf84d633a3aee8fb716da16/15167493960655999308 -X-Frame-Options: DENY -X-Request-Id: 64187c99-5a2e-4d55-86a5-8a148b71ed4c - -{"model":"glm-5.2","created_at":"2026-07-17T01:06:55.792329867Z","message":{"role":"assistant","content":"{\"capital\": \"Paris\"}","thinking":"1. **Analyze the Request:**\n * Target: Give the capital of France.\n * Format: ONLY a JSON object.\n * Constraint 1: No prose.\n * Constraint 2: No markdown (e.g., no ```json ... ``` blocks).\n * Constraint 3: ONLY a JSON object.\n\n2. **Determine the Data:**\n * Capital of France: Paris.\n\n3. **Construct the JSON object:**\n * `{\"capital\": \"Paris\"}` or `{\"country\": \"France\", \"capital\": \"Paris\"}`. Either works, but keeping it simple is usually best. Let's use `{\"capital\": \"Paris\"}`.\n\n4. **Format the Output:**\n * Ensure there are no backticks, no explanations, just the raw JSON string.\n * Output: `{\"capital\": \"Paris\"}`\n\n5. **Final Verification:**\n * Is it only a JSON object? Yes.\n * No prose? Yes.\n * No markdown? Yes.\n * Capital of France? Yes."},"done":true,"done_reason":"stop","total_duration":9390319880,"prompt_eval_count":31,"eval_count":247} diff --git a/llms/ollama/testdata/TestCloudStructuredOutput-kimi.httprr b/llms/ollama/testdata/TestCloudStructuredOutput-kimi.httprr deleted file mode 100644 index 22a760a9c..000000000 --- a/llms/ollama/testdata/TestCloudStructuredOutput-kimi.httprr +++ /dev/null @@ -1,24 +0,0 @@ -httprr trace v1 -463 3490 -POST https://ollama.com/api/chat HTTP/1.1 -Host: ollama.com -User-Agent: langchaingo-httprr -Content-Length: 286 -Accept: application/x-ndjson -Content-Type: application/json - -{"model":"kimi-k2.5","messages":[{"role":"user","content":"Reply with ONLY a JSON object (no prose, no markdown) giving the capital of France."}],"stream":false,"format":{"type":"object","properties":{"capital":{"type":"string"}},"required":["capital"]},"options":{"num_predict":16384}}HTTP/2.0 200 OK -Content-Length: 2986 -Alt-Svc: h3=":443"; ma=2592000 -Content-Type: application/json -Date: Fri, 17 Jul 2026 01:07:01 GMT -Server: Google Frontend -Traceparent: 00-97b46e70a9d5d3d1604373a5caa4c589-0d914abe21e4393b-00 -Via: 1.1 google -X-Build-Commit: 497d56d78d9396981c6f7d0265656affaf63d3d7 -X-Build-Time: 2026-07-16T17:39:19-07:00 -X-Cloud-Trace-Context: 97b46e70a9d5d3d1604373a5caa4c589/977644774588954939 -X-Frame-Options: DENY -X-Request-Id: 476b7ba6-eefd-4682-af6a-40cb0c09a1ec - -{"model":"kimi-k2.5","created_at":"2026-07-17T01:07:01.008716213Z","message":{"role":"assistant","content":"{\"country\":\"France\",\"capital\":\"Paris\"}","thinking":"The user wants a JSON object that gives the capital of France. They specified:\n 1. Reply with ONLY a JSON object\n 2. No prose\n 3. No markdown\n \n So I should output something like:\n {\"capital\": \"Paris\"}\n or\n {\"country\": \"France\", \"capital\": \"Paris\"}\n \n The simplest valid JSON that answers the question would be:\n {\"capital\":\"Paris\"}\n \n or just\n {\"France\":\"Paris\"}\n \n I think {\"capital\":\"Paris\"} or {\"country\":\"France\",\"capital\":\"Paris\"} would be appropriate. I'll go with a clear simple object.\n \n Since they said \"giving the capital of France\", I'll provide a JSON object that contains this information clearly.\n \n Format: Just the raw JSON, no markdown code blocks, no extra text.\n \n Example:\n {\"capital\":\"Paris\"}\n \n or\n {\"country\":\"France\",\"capital\":\"Paris\"}\n \n I'll use the second one as it's more explicit about what the capital belongs to, but the first one is also valid since the user asked specifically about France. Actually, looking at the prompt again, it just says \"giving the capital of France\" so either works. I'll provide a clear object.\n \n Actually, to be safe and explicit:\n {\"capital\":\"Paris\"}\n \n Or perhaps:\n {\"name\":\"Paris\",\"country\":\"France\",\"is_capital\":true}\n \n But the simplest is best. I'll go with:\n {\"capital\":\"Paris\"}\n \n Wait, should I include the country name in the key or value? The user asked for the capital of France, so maybe:\n {\"France\":\"Paris\"}\n \n This is also valid JSON and directly answers the question.\n \n I'll go with:\n {\"capital\":\"Paris\"}\n \n But to be thorough and avoid ambiguity:\n {\"country\":\"France\",\"capital\":\"Paris\"}\n \n This is probably the safest bet as it's self-documenting.\n \n However, the user might want just the fact stated. Let me reconsider the exact wording: \"giving the capital of France\"\n \n So the JSON should convey that Paris is the capital of France.\n \n Options:\n 1. {\"capital\":\"Paris\"}\n 2. {\"France\":\"Paris\"}\n 3. {\"country\":\"France\",\"capital\":\"Paris\"}\n 4. {\"capital_of_France\":\"Paris\"}\n \n Option 3 is the most standard and readable. Option 1 is ambiguous (capital of what?). Option 2 treats France as the key which is okay but less conventional. Option 4 is explicit but uses underscores which is fine.\n \n I'll go with option 3: {\"country\":\"France\",\"capital\":\"Paris\"}\n \n Actually, looking at similar requests, usually a simple key-value is expected. But option 3 is clearest.\n \n Final check: The user wants ONLY a JSON object, no prose, no markdown. So no ```json and no ```. Just the raw JSON string.\n \n Final output: {\"country\":\"France\",\"capital\":\"Paris\"}"},"done":true,"done_reason":"stop","total_duration":3650171269,"prompt_eval_count":27,"eval_count":600} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index 21a3a5b02..c01373921 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -81,3 +81,18 @@ func reportOllamaThinking(warn *llms.Warnings, model string, opts llms.CallOptio } const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" + +func reportOllamaCloudFormat(warn *llms.Warnings, model string, opts llms.CallOptions, clientFormat string) { + switch { + case opts.JSONMode: + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithJSONMode", Model: model, + Asked: "true", Reason: ollamaCloudFormatReason, + }) + case clientFormat != "": + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithFormat", Model: model, + Asked: clientFormat, Reason: ollamaCloudFormatReason, + }) + } +} diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 6cd270287..16c99fa34 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -161,3 +161,31 @@ func TestTheOllamaDoorReportsEachOptionOnce(t *testing.T) { } require.Contains(t, seen, "WithMinP", "the door sends only the client's min-p") } + +func TestTheCloudReportsTheFormatItCannotSend(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + opts llms.CallOptions + clientFormat string + option string + }{ + {name: "per-call JSON mode", opts: llms.CallOptions{JSONMode: true}, option: "WithJSONMode"}, + {name: "client-level format", clientFormat: "json", option: "WithFormat"}, + {name: "nothing asked"}, + } { + warn := &llms.Warnings{} + reportOllamaCloudFormat(warn, "gpt-oss:120b", tc.opts, tc.clientFormat) + got := warn.List() + if tc.option == "" { + if len(got) != 0 { + t.Errorf("%s: want no warning, got %v", tc.name, got) + } + continue + } + if len(got) != 1 || got[0].Kind != llms.WarningDrop || got[0].Option != tc.option { + t.Errorf("%s: want one drop of %s, got %v", tc.name, tc.option, got) + } + } +} From cf4df890a3bd5775bf819c4e5186d981d4ef94fd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 12:57:54 +0300 Subject: [PATCH 482/618] fix(bedrock): lower xhigh and max where Bedrock does not serve them The Claude effort clamp used one table for every provider, so both Bedrock doors sent xhigh to Sonnet 5 and max to Opus 4.7. AWS's adaptive-thinking guide limits max to "Claude Opus 4.6, Claude Sonnet 4.6, and Claude Opus 5 ... Requests using max on unsupported models return an error" and xhigh to "Claude Opus 5 and Claude Opus 4.6 only"; Anthropic's own table has no xhigh on 4.6, and the Fable 5.1 card lists both levels. With the copies disagreeing the narrower set goes into code: on Bedrock xhigh is Opus 5 only and max is Opus 5, Opus 4.6 and Sonnet 4.6. ClaudeClampEffort and ClaudeEffortsFor now take the provider into account, so the doors lower the effort with the existing warning and the hint pentagi reads offers only what Bedrock serves. Anthropic's own API and the OpenAI-shaped gateway keep the full ladder. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 4 +- llms/bedrock/README.md | 4 +- .../bedrockclient/bedrockclient_converse.go | 4 +- .../bedrockclient_converse_test.go | 2 +- .../bedrockclient/provider_anthropic.go | 4 +- .../provider_anthropic_reasoning_test.go | 2 +- llms/openai/openaillm.go | 2 +- llms/reasoning/claude_capability.go | 50 ++++++++++++++----- llms/reasoning/claude_name_forms_test.go | 45 ++++++++++++++++- 9 files changed, 93 insertions(+), 24 deletions(-) diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 411d71fd9..31cf03aa0 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -202,7 +202,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag Display: "summarized", } outputConfig = &anthropicclient.OutputConfig{ - Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), + Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens())), reasoning.ProviderAnthropic), } } else if budget := reasoning.ClaudeClampBudget(model, opts.Reasoning.GetTokens(opts.GetMaxTokens())); budget > 0 { @@ -214,7 +214,7 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag // the caller's effort is silently dropped on the budget path. if reasoning.ClaudeSupportsEffortWithBudget(model, reasoning.ProviderAnthropic) { outputConfig = &anthropicclient.OutputConfig{ - Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens()))), + Effort: reasoning.ClaudeClampEffort(model, string(opts.Reasoning.GetEffort(opts.GetMaxTokens())), reasoning.ProviderAnthropic), } } } else { diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 9f377be2a..bdbb584ed 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -217,7 +217,9 @@ thinking from the model via the shared `llms/reasoning` capability tables (the s source of truth used by the first-party Anthropic provider): - **Adaptive-only** (Opus 4.7/4.8/5, Sonnet 5, Fable 5): `thinking.type=adaptive` + - `output_config.effort`; budget thinking and sampling params are rejected. Opus 5, + `output_config.effort`; budget thinking and sampling params are rejected. Bedrock + serves `xhigh` on Opus 5 only and `max` on Opus 5, Opus 4.6 and Sonnet 4.6; a higher + effort on any other Claude model is lowered to the top level it takes, with a warning. Opus 5, Sonnet 5, and Fable 5 think by default (Opus 5 is a breaking change from Opus 4.8, which defaults off). `WithReasoningDisabled()` sends `thinking.type=disabled` to Opus 5 and Sonnet 5 and no effort beside it; Fable 5 cannot be disabled. Opus 4.7/4.8 diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 673d253ae..8a549b611 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -188,7 +188,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti maxTokens = *input.MaxTokens } setAdaptive := func() { - effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) + effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens)), reasoning.ProviderBedrock) additionalModelFields.Thinking = &converseThinkingPayload{Type: "adaptive", Display: "summarized"} additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} // Adaptive models reject sampling params. @@ -205,7 +205,7 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti } additionalModelFields.Thinking = &converseThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(input.ModelID, reasoning.ProviderBedrock) { - effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) + effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens)), reasoning.ProviderBedrock) additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} } // Budget thinking requires temperature=1.0 and rejects top_p. diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 4845350d6..606078f36 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -529,7 +529,7 @@ func TestConverseClient_AdaptiveReasoningNewModelFamily(t *testing.T) { thinking, _ := fields["thinking"].(map[string]any) assert.Equal(t, "adaptive", thinking["type"]) outputConfig, _ := fields["output_config"].(map[string]any) - assert.Equal(t, "xhigh", outputConfig["effort"]) + assert.Equal(t, "high", outputConfig["effort"], "Bedrock serves xhigh on Opus 5 only") mockClient.AssertExpectations(t) } diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 711bc2712..b0c53c2a5 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -831,7 +831,7 @@ func applyAnthropicReasoning( setAdaptive := func() { input.Thinking = &anthropicThinkingPayload{Type: "adaptive", Display: "summarized"} - input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} + input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)), reasoning.ProviderBedrock)} input.Temperature = 0 input.TopP = 0 input.TopK = 0 @@ -843,7 +843,7 @@ func applyAnthropicReasoning( } input.Thinking = &anthropicThinkingPayload{Type: "enabled", BudgetTokens: tokens} if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { - input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)))} + input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)), reasoning.ProviderBedrock)} } // Budget thinking requires temperature=1.0 and rejects top_p/top_k. keepTopP := callerTemperature == 0 && diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go index d483bd823..67ceb456b 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic_reasoning_test.go @@ -40,7 +40,7 @@ func TestApplyAnthropicReasoning_Adaptive(t *testing.T) { assert.False(t, hasBudget, "adaptive thinking must not carry a token budget") outputConfig, _ := fields["output_config"].(map[string]any) - assert.Equal(t, "xhigh", outputConfig["effort"]) + assert.Equal(t, "high", outputConfig["effort"], "Bedrock serves xhigh on Opus 5 only") for _, key := range []string{"temperature", "top_p", "top_k"} { _, has := fields[key] diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index d822f3115..399e0d848 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -407,7 +407,7 @@ func (o *LLM) setReasoning( acceptsEffort := reasoning.AcceptsEffortWire(model) askedEffort := string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(askedEffort) - reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort)) + reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort, reasoning.ProviderOpenAI)) reasoningTokens := opts.Reasoning.GetTokens(opts.GetMaxTokens()) sendsEffort := acceptsEffort && reasoningEffort != llms.ReasoningNone if toolsRule != reasoning.EffortToolsFree { diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index fe5f2bffc..bb5e92834 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -115,6 +115,38 @@ var claudeEffortsByKind = map[ClaudeReasoningKind][]string{ ClaudeReasoningBudgetOnly: {"low", "medium", "high"}, } +var bedrockTopEfforts = map[string][]string{ + "xhigh": {"claude-opus-5"}, + "max": {"claude-opus-4-6", "claude-sonnet-4-6", "claude-opus-5"}, +} + +func claudeEffortsOn(model string, p Provider) []string { + accepted := claudeEffortsByKind[ClaudeReasoningKindFor(model)] + if p != ProviderBedrock { + return accepted + } + served := make([]string, 0, len(accepted)) + for _, level := range accepted { + if families, gated := bedrockTopEfforts[level]; gated && !claudeNamedIn(model, families) { + continue + } + served = append(served, level) + } + return served +} + +func claudeNamedIn(model string, families []string) bool { + for _, form := range modelSpellings(model) { + name := canonicalClaude(form) + for _, family := range families { + if hasGeneration(name, family) { + return true + } + } + } + return false +} + // ClaudeEffortsFor returns the effort levels the model's generation accepts on // the given provider, or nil for a model this package does not classify. func ClaudeEffortsFor(model string, p Provider) []string { @@ -122,21 +154,21 @@ func ClaudeEffortsFor(model string, p Provider) []string { if kind == ClaudeReasoningBudgetOnly && !ClaudeSupportsEffortWithBudget(model, p) { return nil } - return slices.Clone(claudeEffortsByKind[kind]) + return slices.Clone(claudeEffortsOn(model, p)) } var claudeEffortRank = map[string]int{"minimal": 1, "low": 2, "medium": 3, "high": 4, "xhigh": 5, "max": 6} -// ClaudeClampEffort moves an effort the model's generation does not accept to +// ClaudeClampEffort moves an effort the model does not accept on the provider to // the nearest one it does: down to the highest accepted level below it, or up // to the lowest accepted level when every one of them is higher. An // unclassified model and an unknown level pass through unchanged. -func ClaudeClampEffort(model, effort string) string { +func ClaudeClampEffort(model, effort string, p Provider) string { want, ok := claudeEffortRank[effort] if !ok { return effort } - accepted := claudeEffortsByKind[ClaudeReasoningKindFor(model)] + accepted := claudeEffortsOn(model, p) if len(accepted) == 0 || slices.Contains(accepted, effort) { return effort } @@ -270,15 +302,7 @@ var bedrockStructuredClaude = []string{ // ClaudeSupportsStructuredOutputOnBedrock reports whether Amazon Bedrock serves // schema constrained output for the Claude model. func ClaudeSupportsStructuredOutputOnBedrock(model string) bool { - for _, form := range modelSpellings(model) { - name := canonicalClaude(form) - for _, family := range bedrockStructuredClaude { - if hasGeneration(name, family) { - return true - } - } - } - return false + return claudeNamedIn(model, bedrockStructuredClaude) } // ResolveClaudeAdaptive returns whether to send adaptive thinking (true) or diff --git a/llms/reasoning/claude_name_forms_test.go b/llms/reasoning/claude_name_forms_test.go index 3a149479a..d04a0987c 100644 --- a/llms/reasoning/claude_name_forms_test.go +++ b/llms/reasoning/claude_name_forms_test.go @@ -223,8 +223,51 @@ func TestClaudeClampEffortMovesToTheNearestAcceptedLevel(t *testing.T) { {"grok-4", "xhigh", "xhigh"}, {"claude-opus-4-6", "", ""}, } { - if got := ClaudeClampEffort(tc.model, tc.effort); got != tc.want { + if got := ClaudeClampEffort(tc.model, tc.effort, ProviderAnthropic); got != tc.want { t.Errorf("ClaudeClampEffort(%q, %q) = %q, want %q", tc.model, tc.effort, got, tc.want) } } } + +func TestBedrockServesTheTopEffortsOnlyWhereItsGuideSays(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want []string + }{ + {"us.anthropic.claude-opus-5", []string{"low", "medium", "high", "xhigh", "max"}}, + {"us.anthropic.claude-opus-4-6-v1", []string{"low", "medium", "high", "max"}}, + {"us.anthropic.claude-sonnet-4-6", []string{"low", "medium", "high", "max"}}, + {"us.anthropic.claude-sonnet-5", []string{"low", "medium", "high"}}, + {"us.anthropic.claude-opus-4-7", []string{"low", "medium", "high"}}, + {"us.anthropic.claude-opus-4-8", []string{"low", "medium", "high"}}, + {"us.anthropic.claude-fable-5", []string{"low", "medium", "high"}}, + {"us.anthropic.claude-fable-5-1", []string{"low", "medium", "high"}}, + } { + if got := ClaudeEffortsFor(tc.model, ProviderBedrock); !slices.Equal(got, tc.want) { + t.Errorf("ClaudeEffortsFor(%q, Bedrock) = %v, want %v", tc.model, got, tc.want) + } + } + + for _, tc := range []struct{ model, effort, want string }{ + {"us.anthropic.claude-sonnet-5", "xhigh", "high"}, + {"us.anthropic.claude-sonnet-5", "max", "high"}, + {"us.anthropic.claude-opus-4-7", "max", "high"}, + {"us.anthropic.claude-fable-5-1", "xhigh", "high"}, + {"us.anthropic.claude-opus-4-6-v1", "xhigh", "high"}, + {"us.anthropic.claude-opus-4-6-v1", "max", "max"}, + {"us.anthropic.claude-opus-5", "xhigh", "xhigh"}, + {"us.anthropic.claude-opus-5", "max", "max"}, + } { + if got := ClaudeClampEffort(tc.model, tc.effort, ProviderBedrock); got != tc.want { + t.Errorf("ClaudeClampEffort(%q, %q, Bedrock) = %q, want %q", tc.model, tc.effort, got, tc.want) + } + } + + for _, model := range []string{"claude-sonnet-5", "claude-opus-4-7", "claude-fable-5-1"} { + if got := ClaudeClampEffort(model, "xhigh", ProviderAnthropic); got != "xhigh" { + t.Errorf("%s on Anthropic keeps xhigh, got %q", model, got) + } + } +} From 5d4ad5aedee09f2a2fa8e6b2a8b26caefb045c9f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 13:01:27 +0300 Subject: [PATCH 483/618] fix(openai): send Mistral only the effort it documents Mistral's reasoning guide names two models that take reasoning_effort, mistral-small-latest and mistral-medium-3-5, and two values, high and none; the chat reference enumerates six values without saying which models take them, and the narrower copy goes into code. The openai door had no Mistral entry: it sent low, medium and xhigh as asked, and sent an effort to mistral-large, ministral, codestral and every other Mistral model the guide leaves out. pentagi reaches both through its Mistral provider, whose Reasoning Max Tokens field becomes a budget the door turns into an effort. The reasoning Mistral models now get high for any effort, with a clamp warning; the other Mistral families get no reasoning_effort, with a drop warning. Off keeps travelling as omission, and magistral, deprecated by the vendor, is left as it was. Co-Authored-By: Claude Opus 5 --- llms/openai/mistral_effort_test.go | 45 +++++++++++++++++++++++++++++ llms/openai/sampling_matrix_test.go | 2 +- llms/reasoning/effort_wire.go | 3 ++ llms/reasoning/openai_capability.go | 2 ++ llms/reasoning/reasoning.go | 14 +++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 llms/openai/mistral_effort_test.go diff --git a/llms/openai/mistral_effort_test.go b/llms/openai/mistral_effort_test.go new file mode 100644 index 000000000..006bea070 --- /dev/null +++ b/llms/openai/mistral_effort_test.go @@ -0,0 +1,45 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestMistralReasoningModelsTakeOnlyTheHighEffort(t *testing.T) { + t.Parallel() + + for _, model := range []string{"mistral-small-latest", "mistral-medium-latest", "mistral-medium-3-5"} { + for _, effort := range []llms.ReasoningEffort{llms.ReasoningLow, llms.ReasoningMedium, llms.ReasoningXHigh} { + if body := sendForWire(t, model, llms.WithReasoning(effort, 0)); !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Errorf("%s at %s: Mistral documents only high, got body: %s", model, effort, body) + } + + resp := sendForWarnings(t, model, llms.WithReasoning(effort, 0)) + if got := warningFor(t, resp, "WithReasoning"); got.Kind != llms.WarningClamp || got.Sent != "high" { + t.Errorf("%s at %s: warning = %+v", model, effort, got) + } + } + if body := sendForWire(t, model, llms.WithReasoning(llms.ReasoningHigh, 0)); !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Errorf("%s: high must reach the wire, got body: %s", model, body) + } + } +} + +func TestMistralModelsThatDoNotReasonGetNoEffort(t *testing.T) { + t.Parallel() + + for _, model := range []string{"mistral-large-latest", "ministral-8b-latest", "codestral-latest", "devstral-medium-latest"} { + for _, opt := range []llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithReasoning("", 4096)} { + if body := sendForWire(t, model, opt); strings.Contains(body, `"reasoning_effort"`) { + t.Errorf("%s: Mistral names no effort for this model, got body: %s", model, body) + } + + resp := sendForWarnings(t, model, opt) + if got := warningFor(t, resp, "WithReasoning"); got.Kind != llms.WarningDrop { + t.Errorf("%s: warning = %+v", model, got) + } + } + } +} diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index d5843d049..d3425bfac 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -289,7 +289,7 @@ func TestOptInThinkingKeepsSamplingWhateverIsAsked(t *testing.T) { opts: []llms.CallOption{ llms.WithTemperature(0.3), llms.WithTopP(0.7), llms.WithReasoning(llms.ReasoningMedium, 0), }, - present: []string{`"temperature":0.3`, `"top_p":0.7`, `"reasoning_effort":"medium"`}, + present: []string{`"temperature":0.3`, `"top_p":0.7`, `"reasoning_effort":"high"`}, }, { name: "the provider-prefixed spelling resolves the same", diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 93ce3cc3d..d7fa7b6d1 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -105,6 +105,9 @@ func AcceptsEffortWire(model string) bool { if strings.HasPrefix(form, "gpt-3.5") || strings.HasPrefix(form, "gpt-4") { return false } + if mistralWithoutReasoning(form) { + return false + } if form == "grok-build-latest" { return true } diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index b8cf3329f..f1049b7a9 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -91,6 +91,8 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} case nonOpenAILowHighMax(m): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "high", "max"}} + case mistralReasons(m): + return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"high"}} default: return OpenAIReasoningCaps{Known: false} } diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 35277c943..f86c1c35c 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -234,6 +234,20 @@ func DefaultIsReasoningModel(model string) bool { return false } +func mistralWithoutReasoning(model string) bool { + if mistralReasons(model) || strings.HasPrefix(model, "magistral") { + return false + } + for _, prefix := range []string{ + "mistral-", "ministral-", "codestral", "devstral", "pixtral", "voxtral", "open-mistral", "open-mixtral", + } { + if strings.HasPrefix(model, prefix) { + return true + } + } + return false +} + func mistralReasons(model string) bool { if model == "mistral-medium" { return true From b89ada14e4411478a91a1b1e9d50c87c212de03b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 13:03:17 +0300 Subject: [PATCH 484/618] fix(anthropic): keep budget under max_tokens unless the model really interleaves With tools on a budget-thinking call the door adds the interleaved-thinking beta and then skipped raising max_tokens above the budget, since interleaving lets budget_tokens exceed max_tokens. That exception holds only where interleaving happens: "Claude Haiku 4.5 does not support interleaved thinking. On the Claude API, the beta header is accepted but ignored", and Opus 4.6 "manual mode has no interleaved thinking at all". A Haiku 4.5 agent with tools and max_tokens 1000 went out with budget_tokens 1024, breaking "less than max_tokens". The raise is now skipped only for the models the guide names as interleaving in manual mode: Opus 4.5, Sonnet 4.5, Sonnet 4.6 and the earlier Claude 4 models. The header itself still goes out as before. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 3 +- llms/anthropic/budget_interleaving_test.go | 44 ++++++++++++++++++++++ llms/reasoning/claude_capability.go | 21 +++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 llms/anthropic/budget_interleaving_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 31cf03aa0..82978c267 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -294,7 +294,8 @@ func generateMessagesContent(ctx context.Context, o *LLM, messages []llms.Messag topP = nil } topK = nil - if !slices.Contains(betaHeaders, anthropicInterleavedThinkingBeta) { + if !slices.Contains(betaHeaders, anthropicInterleavedThinkingBeta) || + !reasoning.ClaudeInterleavesOnBudget(model) { maxTokens = reasoning.ClaudeMaxTokensForBudget(thinking.Budget, maxTokens) } case reasoning.ClaudeRejectsSampling(model): diff --git a/llms/anthropic/budget_interleaving_test.go b/llms/anthropic/budget_interleaving_test.go new file mode 100644 index 000000000..8bdfd38be --- /dev/null +++ b/llms/anthropic/budget_interleaving_test.go @@ -0,0 +1,44 @@ +package anthropic_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestABudgetAboveTheAnswerLimitNeedsRealInterleaving(t *testing.T) { + t.Parallel() + + tools := llms.WithTools([]llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ + Name: "f", Parameters: map[string]any{"type": "object"}, + }}}) + budget := llms.WithReasoning("", 1024) + + for _, tc := range []struct { + model string + want float64 + }{ + {"claude-haiku-4-5", 2048}, + {"claude-opus-4-6", 2048}, + {"claude-sonnet-4-5", 1000}, + {"claude-opus-4-5", 1000}, + {"claude-sonnet-4-6", 1000}, + } { + body, header := captureMessagesRequestModel(t, tc.model, llms.WithMaxTokens(1000), budget, tools) + assert.Equal(t, tc.want, body["max_tokens"], tc.model) + assert.Contains(t, header.Get("Anthropic-Beta"), "interleaved-thinking-2025-05-14", tc.model) + } + + body, _ := captureMessagesRequestModel(t, "claude-haiku-4-5", llms.WithMaxTokens(1000), budget) + assert.Equal(t, float64(2048), body["max_tokens"], "without tools the budget rule was already kept") + + for _, model := range []string{"claude-opus-4", "claude-opus-4-0", "claude-sonnet-4-20250514", "anthropic.claude-opus-4-1-20250805-v1:0"} { + assert.True(t, reasoning.ClaudeInterleavesOnBudget(model), model) + } + for _, model := range []string{"claude-haiku-4-5", "claude-opus-4-6", "claude-opus-4-7", "claude-3-7-sonnet", "claude-mythos-preview"} { + assert.False(t, reasoning.ClaudeInterleavesOnBudget(model), model) + } +} diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index bb5e92834..7f1d7e76a 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -228,6 +228,27 @@ func ClaudeMaxTokensForBudget(budget, maxTokens int) int { return budget * 2 } +var budgetInterleavingClaude = []string{"claude-opus-4-5", "claude-sonnet-4-5", "claude-sonnet-4-6", "claude-opus-4-1"} + +// ClaudeInterleavesOnBudget reports whether budget thinking on the model +// interleaves with tool calls once the interleaved-thinking beta is on, which is +// the only case where budget_tokens may exceed max_tokens. +func ClaudeInterleavesOnBudget(model string) bool { + if claudeNamedIn(model, budgetInterleavingClaude) { + return true + } + for _, form := range modelSpellings(model) { + name := canonicalClaude(form) + for _, first := range []string{"claude-opus-4", "claude-sonnet-4"} { + rest, ok := strings.CutPrefix(name, first) + if ok && (rest == "" || strings.HasPrefix(rest, "-0") || strings.HasPrefix(rest, "-2025")) { + return true + } + } + } + return false +} + // budgetEffortClaude are budget-thinking models that also accept an effort // output_config alongside manual thinking (introduced with Opus 4.5). Newer // generations use adaptive thinking, where effort is always available. From dd890fd4b1c5c8656b7ff81e0d0c0d71d1b9d254 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 13:06:47 +0300 Subject: [PATCH 485/618] fix(googleai): sign a Gemini 3 function call that arrives without a signature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gemini 3 answers 400 "Function call is missing a thought_signature" when the first function call of a step in the current turn carries none, which is what a history replayed from another provider looks like — pentagi's failover to a Gemini fallback provider replays the chain mid-turn. Google documents the way through for exactly that case: put "skip_thought_signature_validator" in the part's thought_signature; only the current turn is validated. On Gemini 3 the door now gives that placeholder to the first function call of each model step after the last user message with ordinary content, when the history holds no signature for it. Earlier turns, parallel calls after the first and signatures the model gave go out as they came. Through the gateway's Gemini passthrough the same library call failed with that 400 before the change and answers after it. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 35 ++++++ .../thought_signature_placeholder_test.go | 102 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 llms/googleai/thought_signature_placeholder_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index d006eb40b..d8b1e6488 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "io" + "slices" "strings" "github.com/vxcontrol/langchaingo/internal/imageutil" @@ -316,6 +317,9 @@ func (g *GoogleAI) generateFromMessages( if systemInstruction != nil { config.SystemInstruction = systemInstruction } + if reasoning.GeminiUsesThinkingLevel(model) { + signCurrentTurn(contents) + } if opts.StreamingFunc == nil { resp, err := g.client.Models.GenerateContent(ctx, model, contents, config) @@ -328,6 +332,37 @@ func (g *GoogleAI) generateFromMessages( return g.generateStreamingContent(ctx, model, contents, config, opts) } +// geminiSignaturePlaceholder is the value Google documents for a function call +// whose history holds no signature, such as one carried over from another model. +const geminiSignaturePlaceholder = "skip_thought_signature_validator" + +// signCurrentTurn gives the first function call of each model step in the current +// turn the placeholder when it has no signature. +func signCurrentTurn(contents []*genai.Content) { + start := -1 + for i, content := range contents { + if content.Role == RoleUser && slices.ContainsFunc(content.Parts, func(part *genai.Part) bool { + return part.FunctionResponse == nil + }) { + start = i + } + } + for _, content := range contents[start+1:] { + if content.Role != RoleModel { + continue + } + for _, part := range content.Parts { + if part.FunctionCall == nil { + continue + } + if len(part.ThoughtSignature) == 0 { + part.ThoughtSignature = []byte(geminiSignaturePlaceholder) + } + break + } + } +} + func (g *GoogleAI) generateStreamingContent( ctx context.Context, model string, diff --git a/llms/googleai/thought_signature_placeholder_test.go b/llms/googleai/thought_signature_placeholder_test.go new file mode 100644 index 000000000..20b728305 --- /dev/null +++ b/llms/googleai/thought_signature_placeholder_test.go @@ -0,0 +1,102 @@ +package googleai + +import ( + "encoding/base64" + "encoding/json" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func sentSignatures(t *testing.T, model string, history []llms.MessageContent) []string { + t.Helper() + + rt := &captureTransport{resp: `{"candidates":[{"content":{"parts":[{"text":"ok"}],"role":"model"},"finishReason":"STOP","index":0}]}`} + llm, err := New(t.Context(), WithAPIKey("test-api-key"), WithDefaultModel(model), + WithHTTPClient(&http.Client{Transport: rt})) + require.NoError(t, err) + _, err = llm.GenerateContent(t.Context(), history) + require.NoError(t, err) + + var payload struct { + Contents []struct { + Parts []struct { + FunctionCall *struct{} `json:"functionCall"` + ThoughtSignature string `json:"thoughtSignature"` + } `json:"parts"` + } `json:"contents"` + } + require.NoError(t, json.Unmarshal(rt.body, &payload)) + var signatures []string + for _, content := range payload.Contents { + for _, part := range content.Parts { + if part.FunctionCall != nil { + signatures = append(signatures, part.ThoughtSignature) + } + } + } + return signatures +} + +func toolTurn(id string, signature []byte) llms.MessageContent { + call := llms.ToolCall{ID: id, Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}} + if signature != nil { + call.Reasoning = &reasoning.ContentReasoning{Signature: signature} + } + return llms.MessageContent{Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{call}} +} + +func toolResult(id string) llms.MessageContent { + return llms.MessageContent{Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: id, Name: "f", Content: "done"}, + }} +} + +func TestGemini3SignsACurrentTurnCallThatArrivedWithoutASignature(t *testing.T) { + t.Parallel() + + placeholder := base64.StdEncoding.EncodeToString([]byte(geminiSignaturePlaceholder)) + own := []byte("gemini-signature") + history := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "earlier question"), + toolTurn("a", nil), + toolResult("a"), + llms.TextParts(llms.ChatMessageTypeHuman, "current question"), + toolTurn("b", nil), + toolResult("b"), + toolTurn("c", own), + toolResult("c"), + } + + got := sentSignatures(t, "gemini-3-flash-preview", history) + assert.Equal(t, []string{"", placeholder, base64.StdEncoding.EncodeToString(own)}, got, + "only the current turn is validated, and a signature the model gave stays as it was") + + assert.Equal(t, []string{"", "", base64.StdEncoding.EncodeToString(own)}, + sentSignatures(t, "gemini-2.5-flash", history), "Gemini 2.5 keeps the history as it came") +} + +func TestGemini3SignsOnlyTheFirstOfParallelCalls(t *testing.T) { + t.Parallel() + + parallel := llms.MessageContent{Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "a", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + llms.ToolCall{ID: "b", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }} + history := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "question"), + parallel, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "a", Name: "f", Content: "1"}, + llms.ToolCallResponse{ToolCallID: "b", Name: "f", Content: "2"}, + }}, + } + + placeholder := base64.StdEncoding.EncodeToString([]byte(geminiSignaturePlaceholder)) + assert.Equal(t, []string{placeholder, ""}, sentSignatures(t, "gemini-3.1-pro-preview", history)) +} From 32c5a67c3c37685a31995782da7191bff0c2a941 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 13:23:40 +0300 Subject: [PATCH 486/618] fix(anthropic): send every tool result of a tool message handleToolMessage read only the first part of a tool-role message, so a turn that called two tools and got both results back in one message reached Anthropic with a single tool_result, leaving the other tool_use unanswered. The openai and Bedrock doors already take several results from one message; this door now turns every ToolCallResponse part into a tool_result block and still refuses a part of any other kind. Co-Authored-By: Claude Opus 5 --- llms/anthropic/anthropicllm.go | 21 ++++++++------ llms/anthropic/tool_results_test.go | 45 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 llms/anthropic/tool_results_test.go diff --git a/llms/anthropic/anthropicllm.go b/llms/anthropic/anthropicllm.go index 82978c267..e84047e56 100644 --- a/llms/anthropic/anthropicllm.go +++ b/llms/anthropic/anthropicllm.go @@ -916,19 +916,22 @@ type ToolResult struct { } func handleToolMessage(msg llms.MessageContent) (anthropicclient.ChatMessage, error) { - if toolCallResponse, ok := msg.Parts[0].(llms.ToolCallResponse); ok { - toolContent := &anthropicclient.ToolResultContent{ + results := make([]anthropicclient.Content, 0, len(msg.Parts)) + for _, part := range msg.Parts { + toolCallResponse, ok := part.(llms.ToolCallResponse) + if !ok { + return anthropicclient.ChatMessage{}, fmt.Errorf("anthropic: %w for tool message", ErrInvalidContentType) + } + results = append(results, &anthropicclient.ToolResultContent{ Type: "tool_result", ToolUseID: toolCallResponse.ToolCallID, Content: toolCallResponse.Content, - } - - return anthropicclient.ChatMessage{ - Role: RoleUser, - Content: []anthropicclient.Content{toolContent}, - }, nil + }) + } + if len(results) == 0 { + return anthropicclient.ChatMessage{}, fmt.Errorf("anthropic: %w for tool message", ErrInvalidContentType) } - return anthropicclient.ChatMessage{}, fmt.Errorf("anthropic: %w for tool message", ErrInvalidContentType) + return anthropicclient.ChatMessage{Role: RoleUser, Content: results}, nil } const ( diff --git a/llms/anthropic/tool_results_test.go b/llms/anthropic/tool_results_test.go new file mode 100644 index 000000000..b511e2400 --- /dev/null +++ b/llms/anthropic/tool_results_test.go @@ -0,0 +1,45 @@ +package anthropic_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestEveryToolResultOfOneMessageReachesTheVendor(t *testing.T) { + t.Parallel() + + canned := &cannedMessages{responses: []string{messageWith(`{"type":"text","text":"ok"}`)}} + _, err := canned.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look both up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "a", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: "{}"}}, + llms.ToolCall{ID: "b", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "a", Name: "lookup", Content: "1"}, + llms.ToolCallResponse{ToolCallID: "b", Name: "lookup", Content: "2"}, + }}, + }, llms.WithTools([]llms.Tool{lookupTool()})) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(canned.requests[0], &payload)) + last := payload.Messages[len(payload.Messages)-1] + ids := make([]any, 0, len(last.Content)) + for _, block := range last.Content { + ids = append(ids, block["tool_use_id"]) + } + assert.Equal(t, "user", last.Role) + assert.Equal(t, []any{"a", "b"}, ids) +} From f5aaaa2f68524968ca27345536cb6cfe00f60f5d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 13:23:40 +0300 Subject: [PATCH 487/618] fix(bedrock): drop the empty text block from a replayed legacy Claude turn A Claude turn that went straight from thinking to a tool call is stored by pentagi as an empty text part carrying the reasoning, and the legacy InvokeModel payload turned that part into {"type":"text"} with no text field. Converse and the first-party Anthropic door already skip empty text; the legacy payload now does the same, keeping the reasoning the part carried and any cache marker set on it. Co-Authored-By: Claude Opus 5 --- llms/bedrock/internal/bedrockclient/provider_anthropic.go | 3 +++ llms/bedrock/legacy_thinking_blocks_test.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index b0c53c2a5..9def8ac48 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -689,6 +689,9 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati content = appendAnthropicThinking(content, placed[0]) emitted := 0 for _, message := range chunk { + if message.Type == AnthropicMessageTypeText && message.Content == "" && message.CacheControl == nil { + continue + } block, err := getAnthropicInputContent(message) if err != nil { return nil, "", err diff --git a/llms/bedrock/legacy_thinking_blocks_test.go b/llms/bedrock/legacy_thinking_blocks_test.go index a637aa058..a1c31e97c 100644 --- a/llms/bedrock/legacy_thinking_blocks_test.go +++ b/llms/bedrock/legacy_thinking_blocks_test.go @@ -184,6 +184,9 @@ func TestAReplayedLegacyTurnGoesBackAsTheVendorSentIt(t *testing.T) { "an update cut off after the last call": { legacyThought("plan", "s1"), `{"type":"text","text":"working"}`, legacyToolUse("A"), legacyThought("", "s2"), }, + "a call with no text around it": { + legacyThought("plan", "s1"), legacyToolUse("A"), + }, "an encrypted block between signed ones": { legacyThought("a", "s1"), `{"type":"redacted_thinking","data":"opaque"}`, legacyThought("b", "s2"), `{"type":"text","text":"working"}`, legacyToolUse("A"), From 12398563c3d8ad7d1263063e479decb125d3b47a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:02:36 +0300 Subject: [PATCH 488/618] fix(openai): give Kimi and GLM back the reasoning of every assistant turn too The every-turn replay stopped at DeepSeek on the premise that other vendors say nothing about text-only turns. Kimi and Z.ai do: Kimi asks to "keep the reasoning_content from every historical assistant message as-is" under Preserved Thinking, always on for kimi-k3 and kimi-k2.7-code and switched on by keep "all" on kimi-k2.6; Z.ai asks to "return the complete, unmodified reasoning_content" when thinking is preserved. pentagi turns both on (PreserveReasoning, keep: all, clear_thinking: false), so a text answer that went back through the reflector lost its reasoning. Where the vendor does not preserve, it ignores the field. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm_option.go | 2 +- llms/openai/reasoning_replay_test.go | 11 ++++++++--- llms/reasoning/effort_wire.go | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index af5f9431d..23c7cf302 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -175,7 +175,7 @@ func WithModernReasoningFormat() Option { // WithPreserveReasoningContent sends each assistant turn's reasoning back as // reasoning_content: on the turns that called a tool, and on every assistant -// turn for DeepSeek models. +// turn for DeepSeek, Kimi and GLM models. func WithPreserveReasoningContent() Option { return func(opts *options) { opts.preserveReasoningContent = true diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index 8d691cb1c..fcaae6194 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -71,10 +71,13 @@ func replayedReasoning(t *testing.T, model string) []any { return replayed } -func TestDeepSeekGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) { +func TestPreservedThinkingGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) { t.Parallel() - for _, model := range []string{"deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-v4-pro"} { + for _, model := range []string{ + "deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-v4-pro", + "kimi-k3", "kimi-k2.7-code", "moonshot/kimi-k2.6", "glm-5.2", "zai/glm-5.3", + } { assert.Equal(t, []any{"text turn thought", "tool turn thought"}, replayedReasoning(t, model), model) } } @@ -82,5 +85,7 @@ func TestDeepSeekGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) { func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() - assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, "kimi-k2.6")) + for _, model := range []string{"qwen3.7-plus", "grok-4", "mistral-medium-latest"} { + assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, model), model) + } } diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index d7fa7b6d1..53849e9d3 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -69,7 +69,7 @@ func RejectsMinP(model string) bool { // earlier assistant turn, not only on the turns that called a tool. func ReplaysReasoningOnEveryTurn(model string) bool { for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "deepseek") { + if strings.HasPrefix(form, "deepseek") || strings.HasPrefix(form, "kimi-") || strings.HasPrefix(form, "glm-") { return true } } From 516af3aff4406e4e0c8d3d6e6bf37ae08d610de8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:02:53 +0300 Subject: [PATCH 489/618] fix(openai): refuse a JSON schema for GLM in every spelling of its name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The DeepSeek/GLM refusal matched the text after the last slash against "glm-", so glm-5-2 was refused while zai-glm-5-2 — the same model in Mistral's own listing, and the name pentagi's Mistral catalog uses — went out with json_schema, and zai.glm-4.7 escaped while zai/glm-4.7 did not. The check now goes through the shared name matcher (reasoning.TakesNoJSONSchema), so every spelling the other predicates already resolve gets the same answer. Co-Authored-By: Claude Opus 5 --- llms/openai/structured_output.go | 3 ++- llms/openai/structured_output_unit_test.go | 5 ++++- llms/reasoning/effort_wire.go | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index dcebf8fd4..05084e79f 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -7,6 +7,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/openai/internal/openaiclient" + "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/vxcontrol/langchaingo/llms/structuredoutput" ) @@ -97,7 +98,7 @@ func openAIStructuredOutputUnsupported(model string) string { m = m[idx+1:] } switch { - case strings.HasPrefix(m, "deepseek"), strings.HasPrefix(m, "glm-"): + case reasoning.TakesNoJSONSchema(model): return "the vendor's chat completions response_format takes only text and json_object" case strings.HasPrefix(m, "gpt-3.5"): return predates diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index bdadc0856..143236610 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -122,7 +122,10 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / t.Run("a vendor without json_schema is refused before the request", func(t *testing.T) { t.Parallel() - for _, model := range []string{"deepseek-flash", "deepseek-v4-pro", "deepseek/deepseek-v4-pro", "glm-4.5-air", "zai/glm-5.3"} { + for _, model := range []string{ + "deepseek-flash", "deepseek-v4-pro", "deepseek/deepseek-v4-pro", "glm-4.5-air", "zai/glm-5.3", + "glm-5-2", "zai-glm-5-2", "mistral/zai-glm-5-2", "zai.glm-4.7", + } { llm := newUnitLLM(t, WithModel(model)) var opts llms.CallOptions llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 53849e9d3..fb9674ff8 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -60,6 +60,17 @@ func FixesSampling(model string) bool { return false } +// TakesNoJSONSchema reports whether the vendor's chat completions response_format +// takes only text and json_object, so a JSON schema cannot be asked for. +func TakesNoJSONSchema(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "deepseek") || strings.HasPrefix(form, "glm-") { + return true + } + } + return false +} + // RejectsMinP reports whether min_p must stay off the wire. func RejectsMinP(model string) bool { return isClaudeModel(model) || openAIProperName(model) From b51b009ee45b185038ec85931b396b83c4928833 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:03:35 +0300 Subject: [PATCH 490/618] fix(googleai): keep a configured zero top_p or top_k on the wire After the door stopped inventing sampling values it treated a zero DefaultTopP or DefaultTopK as "not configured", so WithDefaultTopP(0), sent as topP 0 before, now vanished with no warning. The WithDefault* options mark the value as the caller's, as WithDefaultTemperature already did, and a marked zero goes out. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 4 ++-- llms/googleai/googleai_unit_test.go | 6 ++++++ llms/googleai/option.go | 7 ++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index d8b1e6488..ad7caaca8 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -107,10 +107,10 @@ func (g *GoogleAI) GenerateContent( CandidateCount: getIntPointer(g.opts.DefaultCandidateCount), MaxTokens: getIntPointer(g.opts.DefaultMaxTokens), } - if g.opts.DefaultTopP != 0 { + if g.opts.topPFromCaller || g.opts.DefaultTopP != 0 { opts.TopP = getFloatPointer(g.opts.DefaultTopP) } - if g.opts.DefaultTopK != 0 { + if g.opts.topKFromCaller || g.opts.DefaultTopK != 0 { opts.TopK = getIntPointer(g.opts.DefaultTopK) } for _, opt := range options { diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 54610b503..ef0053d5e 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -1018,6 +1018,12 @@ func TestOnlyConfiguredSamplingReachesTheWire(t *testing.T) { opts: []Option{WithDefaultTemperature(0)}, want: map[string]float64{"temperature": 0}, }, + { + name: "a configured zero top_p", + model: "gemini-2.5-flash", + opts: []Option{WithDefaultTopP(0)}, + want: map[string]float64{"topP": 0}, + }, { name: "configured top_k and top_p", model: "gemini-2.5-flash", diff --git a/llms/googleai/option.go b/llms/googleai/option.go index ec8415652..79b92afe3 100644 --- a/llms/googleai/option.go +++ b/llms/googleai/option.go @@ -35,8 +35,11 @@ type Options struct { unhonoredOnREST []string - // Set by WithDefaultTemperature, so a configured zero still reaches the wire. + // Set by the WithDefault* sampling options, so a configured zero still reaches + // the wire. temperatureFromCaller bool + topKFromCaller bool + topPFromCaller bool } func DefaultOptions() Options { @@ -202,6 +205,7 @@ func WithDefaultTemperature(defaultTemperature float64) Option { func WithDefaultTopK(defaultTopK int) Option { return func(opts *Options) { opts.DefaultTopK = defaultTopK + opts.topKFromCaller = true } } @@ -209,6 +213,7 @@ func WithDefaultTopK(defaultTopK int) Option { func WithDefaultTopP(defaultTopP float64) Option { return func(opts *Options) { opts.DefaultTopP = defaultTopP + opts.topPFromCaller = true } } From 010688e713195c92ba70f6161cacd61cf737ec22 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:04:46 +0300 Subject: [PATCH 491/618] fix(ollama): treat a -cloud model on a local server as Ollama Cloud MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The cloud format rule looked only at the host, so gpt-oss:120b-cloud pulled into a local daemon — which Ollama documents as offloaded to its cloud service — still went out with format "json" or a schema and no warning. A model whose tag is "cloud" or ends in "-cloud" now gets the same handling as ollama.com. The drop warning is also covered by a test that runs without the ollama.com signing key, which the cloud cassette tests need and CI lacks. Co-Authored-By: Claude Opus 5 --- llms/ollama/README.md | 2 +- llms/ollama/ollama_test.go | 45 ++++++++++++++++++++++++++++++++++++++ llms/ollama/ollamallm.go | 13 +++++++---- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/llms/ollama/README.md b/llms/ollama/README.md index d51aaf0c1..2833f734c 100644 --- a/llms/ollama/README.md +++ b/llms/ollama/README.md @@ -961,7 +961,7 @@ Models ending in `-cloud` are automatically routed to Ollama's cloud infrastruct | Tool Calling | ✅ | ✅ | Most models | | Reasoning | ✅ | ✅ | DeepSeek R1, QwQ, etc. | | Vision (Images) | ✅ | ❌ | llama3.2-vision, etc. | -| JSON Mode | ✅ | ❌ | Cloud: dropped with a warning — Ollama Cloud does not support structured outputs | +| JSON Mode | ✅ | ❌ | Cloud (ollama.com, or a `-cloud` model on a local server): dropped with a warning — Ollama Cloud does not support structured outputs | | Structured Output (JSON Schema) | ✅ | ❌ | Cloud: `ErrStructuredOutputUnsupported` before the request | | Embeddings | ✅ | ❌ | nomic-embed-text, etc. | | Auto Model Pull | ✅ | ❌ | Local only | diff --git a/llms/ollama/ollama_test.go b/llms/ollama/ollama_test.go index 39168e115..e2dff1674 100644 --- a/llms/ollama/ollama_test.go +++ b/llms/ollama/ollama_test.go @@ -4,7 +4,9 @@ import ( "context" "encoding/json" "errors" + "io" "net/http" + "net/http/httptest" "os" "strings" "testing" @@ -591,3 +593,46 @@ func TestValidateStructuredOutput(t *testing.T) { require.NoError(t, llm.validateStructuredOutput(opts, resp)) }) } + +func TestACloudModelOffloadedByALocalServerGetsNoFormat(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-oss:120b-cloud", "glm-4.6:cloud"} { + got := captureChatRequestFor(t, model, llms.WithJSONMode()) + assert.Equal(t, "", got["format"], model) + + _, err := sendChatRequest(t, model, llms.WithStructuredOutput( + llms.StructuredOutputConfig{Name: "s", Schema: json.RawMessage(ollamaSOSchema)})) + var unsup *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsup, model) + } + + assert.Equal(t, "json", captureChatRequestFor(t, "gpt-oss:120b", llms.WithJSONMode())["format"], + "a model the local server runs itself keeps JSON mode") +} + +func TestTheCloudDropWarningReachesTheResponse(t *testing.T) { + t.Parallel() + + for model, want := range map[string]int{"gpt-oss:120b-cloud": 1, "gpt-oss:120b": 0} { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + _, _ = w.Write([]byte(`{"model":"m","message":{"role":"assistant","content":"{}"},"done":true,"done_reason":"stop"}` + "\n")) + })) + llm, err := New(WithServerURL(srv.URL), WithModel(model)) + require.NoError(t, err) + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, llms.WithJSONMode()) + srv.Close() + require.NoError(t, err) + + var drops int + for _, w := range resp.Warnings { + if w.Option == "WithJSONMode" && w.Kind == llms.WarningDrop { + drops++ + } + } + assert.Equal(t, want, drops, model) + } +} diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index fd7b3ed60..c4f8293c7 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -161,7 +161,7 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten warn := &llms.Warnings{} reportOllamaOptions(warn, model, opts) - if o.servesCloud() { + if o.servesCloud(model) { reportOllamaCloudFormat(warn, model, opts, o.options.format) } @@ -394,7 +394,7 @@ func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { if err := opts.ValidateStructuredOutput(); err != nil { return nil, err } - if o.servesCloud() { + if o.servesCloud(o.getModel(opts)) { return nil, &llms.ErrStructuredOutputUnsupported{ Provider: providerOllama, Model: o.getModel(opts), @@ -403,7 +403,7 @@ func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { } return so.Schema, nil } - if o.servesCloud() { + if o.servesCloud(o.getModel(opts)) { return json.RawMessage(`""`), nil } format := o.options.format @@ -415,7 +415,12 @@ func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { const ollamaCloudFormatReason = "Ollama Cloud does not support structured outputs" -func (o *LLM) servesCloud() bool { +// servesCloud reports whether the model runs on Ollama Cloud: reached at +// ollama.com, or a cloud model a local server offloads, tagged "-cloud". +func (o *LLM) servesCloud(model string) bool { + if _, tag, ok := strings.Cut(strings.ToLower(model), ":"); ok && (tag == "cloud" || strings.HasSuffix(tag, "-cloud")) { + return true + } if o.options.ollamaServerURL == nil { return false } From d4d0e2916c9e405a56ab3b6f26a0a4d6e2a52c3d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:05:01 +0300 Subject: [PATCH 492/618] docs: correct three statements the pre-network work made false The ReasoningSupportFor comment still said Sonnet 5 cannot be disabled on Bedrock, the Bedrock integration page promised structured output for every Claude model on the InvokeModel path, and the doc comment of the deleted googleai resolveTemperature had fused onto the next function. Co-Authored-By: Claude Opus 5 --- .../modules/model_io/models/llms/Integrations/bedrock.mdx | 6 ++++-- llms/googleai/googleai.go | 3 --- llms/reasoning_support.go | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx b/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx index 32390a4f9..9be4ac46f 100644 --- a/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx +++ b/docs/docs/modules/model_io/models/llms/Integrations/bedrock.mdx @@ -34,8 +34,10 @@ it explicitly with `bedrock.WithModelProvider`. Useful options: - `bedrock.WithConverseAPI()` — use the unified Converse API. Claude models support - tool use, structured output and reasoning on the default InvokeModel path as well; - for every other provider those features are only available through Converse. + tool use and reasoning on the default InvokeModel path as well; for every other + provider those features are only available through Converse. Structured output + works on both paths for the Claude models Bedrock serves it for (Opus 4.6 and 4.5, + Sonnet 4.6 and 4.5, Haiku 4.5). - `bedrock.WithAutomaticCaching()` — enable Anthropic prompt caching on supported Claude models. - `bedrock.WithClient(...)` — supply a preconfigured `*bedrockruntime.Client`. diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index ad7caaca8..108125a2d 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -1138,9 +1138,6 @@ func convertIntToFloat32Pointer(i *int) *float32 { return &f32 } -// resolveTemperature returns the temperature to use when the caller left it -// unset. Gemini 3 defaults to 1.0, the value Google recommends (lower values can -// cause looping and degraded reasoning); other models keep the SDK-wide default. // resolveThinkingConfig builds the Gemini thinking config for the reasoning mode. // Off forces budget 0 on models that disable that way, since omitting would not // disable a default-on model; a model whose thinking cannot be disabled returns a diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 1fee3d08d..60f29778c 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -93,8 +93,8 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { Supported: true, Known: true, // Derive from the same resolver the wire uses so the hint tracks - // provider differences (e.g. Sonnet 5 is disablable on Anthropic but - // always on, hence not disablable, on Bedrock). + // provider differences (e.g. Sonnet 5 cannot be disabled through an + // OpenAI-shaped gateway, which has no field for Anthropic's disable). CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, RejectsSampling: reasoning.ClaudeRejectsSampling(model), Efforts: toReasoningEfforts(reasoning.ClaudeEffortsFor(model, p)), From e44296f07170ed4056b65fb901a4411d73f5e8e1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:06:53 +0300 Subject: [PATCH 493/618] fix(bedrock): drop an empty text block that carries a cache marker too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legacy payload kept an empty text block when it carried a cache marker, so an assistant turn of thinking alone went out under automatic caching as a text block with cache_control and no text — the shape the previous fix meant to remove, and one Converse sends as reasoning plus a separate cachePoint. The empty block is now always dropped and its marker moves to the last earlier block of the turn that can carry one; thinking blocks cannot, so a turn of thinking alone loses the marker. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/provider_anthropic.go | 19 ++++++- llms/bedrock/legacy_thinking_blocks_test.go | 54 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 9def8ac48..21f109bfb 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -689,7 +689,8 @@ func processInputMessagesAnthropic(messages []Message) ([]*anthropicTextGenerati content = appendAnthropicThinking(content, placed[0]) emitted := 0 for _, message := range chunk { - if message.Type == AnthropicMessageTypeText && message.Content == "" && message.CacheControl == nil { + if message.Type == AnthropicMessageTypeText && message.Content == "" { + moveCacheMarkBack(content, message.CacheControl) continue } block, err := getAnthropicInputContent(message) @@ -749,6 +750,22 @@ func getAnthropicRole(role llms.ChatMessageType) (string, error) { } } +func moveCacheMarkBack(content []anthropicTextGenerationInputContent, mark *CacheControl) { + if mark == nil { + return + } + for i := len(content) - 1; i >= 0; i-- { + switch content[i].Type { + case "thinking", "redacted_thinking": + continue + } + if content[i].CacheControl == nil { + content[i].CacheControl = &anthropicCacheControl{Type: mark.Type, TTL: mark.TTL} + } + return + } +} + func getAnthropicInputContent(message Message) (anthropicTextGenerationInputContent, error) { var c anthropicTextGenerationInputContent switch message.Type { diff --git a/llms/bedrock/legacy_thinking_blocks_test.go b/llms/bedrock/legacy_thinking_blocks_test.go index a1c31e97c..39dc02abb 100644 --- a/llms/bedrock/legacy_thinking_blocks_test.go +++ b/llms/bedrock/legacy_thinking_blocks_test.go @@ -248,3 +248,57 @@ func TestTheLegacyDoorOpensTheTurnWithItsReasoningWhateverThePartOrder(t *testin assert.Equal(t, []string{"thought plan/s1", "tool A", "thought /s2", "text working"}, rec.replayedAssistant(t, 0)) } + +func TestAnEmptyCachedTextNeverReachesTheLegacyPayload(t *testing.T) { + t.Parallel() + + thought := reasoning.FromBlocks([]reasoning.Block{{Text: "plan", Signature: []byte("s1")}}) + answer := `{"id":"msg_2","type":"message","role":"assistant","model":"m","content":[{"type":"text","text":"ok"}],` + + `"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}` + + auto := &legacyRecorder{responses: []string{answer}} + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ := io.ReadAll(r.Body) + auto.mu.Lock() + auto.requests = append(auto.requests, body) + auto.mu.Unlock() + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, answer) + })) + t.Cleanup(srv.Close) + llm := bedrockLLMAgainst(t, srv, bedrock.WithModel(converseClaude), bedrock.WithAutomaticCaching()) + _, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextPartWithReasoning("", thought)}}, + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + }) + require.NoError(t, err) + assert.Equal(t, []string{"thought plan/s1"}, auto.replayedAssistant(t, 0)) + assert.NotContains(t, string(auto.requests[0]), "cache_control", + "a thinking block cannot carry the marker, so it goes with the empty text") + + explicit := &legacyRecorder{responses: []string{answer}} + _, err = explicit.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, + bedrock.WithCacheControl(llms.TextContent{}, bedrock.EphemeralCache()), + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, + }}, + }, llms.WithTools(lookupTools())) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Role string `json:"role"` + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(explicit.requests[0], &payload)) + assistant := payload.Messages[1].Content + require.Len(t, assistant, 1) + assert.Equal(t, "tool_use", assistant[0]["type"]) + assert.NotNil(t, assistant[0]["cache_control"], "the marker moves to the block before the empty text") +} From 225a9fc4b3a13896bd0dee3f902bce049a0ab70e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:47:16 +0300 Subject: [PATCH 494/618] fix(openai): let GLM served by Mistral keep the schema Mistral documents for it The GLM refusal went through the shared name matcher, which also folds Mistral's spellings glm-5-2 and zai-glm-5-2 into GLM, so the Mistral- hosted model got ErrStructuredOutputUnsupported. The text/json_object list the refusal rests on is Z.ai's own endpoint; Mistral's page for zai-glm-5-2 lists Structured Outputs, and Mistral ships custom structured outputs for all its models. Names only Mistral's endpoint uses (reasoning.ServedByMistral) are no longer refused; Z.ai's glm-5.2, glm-4.5-air, glm-5-turbo and the Bedrock zai.glm-4.7 still are. Co-Authored-By: Claude Opus 5 --- llms/openai/structured_output_unit_test.go | 15 ++++++++++- llms/reasoning/effort_wire.go | 3 +++ llms/reasoning/reasoning.go | 31 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index 143236610..8cc04e8d0 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -124,7 +124,7 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / t.Parallel() for _, model := range []string{ "deepseek-flash", "deepseek-v4-pro", "deepseek/deepseek-v4-pro", "glm-4.5-air", "zai/glm-5.3", - "glm-5-2", "zai-glm-5-2", "mistral/zai-glm-5-2", "zai.glm-4.7", + "glm-5.2", "zai.glm-4.7", "glm-5-turbo", } { llm := newUnitLLM(t, WithModel(model)) var opts llms.CallOptions @@ -144,6 +144,19 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / } }) + t.Run("GLM served by Mistral keeps the schema Mistral documents for it", func(t *testing.T) { + t.Parallel() + for _, model := range []string{"glm-5-2", "zai-glm-5-2", "mistral/zai-glm-5-2"} { + llm := newUnitLLM(t, WithModel(model)) + var opts llms.CallOptions + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) + req, err := llm.createChatRequest(nil, opts, nil) + if err != nil || req.ResponseFormat.FormatType() != "json_schema" { + t.Fatalf("%s: want json_schema, got %+v, %v", model, req, err) + } + } + }) + t.Run("unknown model passes through", func(t *testing.T) { t.Parallel() llm := newUnitLLM(t, WithModel("gpt-6-ultra-preview")) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index fb9674ff8..e4a94aef1 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -63,6 +63,9 @@ func FixesSampling(model string) bool { // TakesNoJSONSchema reports whether the vendor's chat completions response_format // takes only text and json_object, so a JSON schema cannot be asked for. func TakesNoJSONSchema(model string) bool { + if ServedByMistral(model) { + return false + } for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "deepseek") || strings.HasPrefix(form, "glm-") { return true diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index f86c1c35c..4f96c4d34 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -234,6 +234,37 @@ func DefaultIsReasoningModel(model string) bool { return false } +// ServedByMistral reports whether the name is one only Mistral's endpoint uses: +// a Mistral family, or GLM spelled the way Mistral lists it (glm-5-2, zai-glm-5-2). +func ServedByMistral(model string) bool { + m := strings.ToLower(model) + if idx := strings.LastIndex(m, "/"); idx != -1 { + m = m[idx+1:] + } + if strings.HasPrefix(m, "zai-glm") || strings.HasPrefix(m, "magistral") || + mistralReasons(m) || mistralWithoutReasoning(m) { + return true + } + rest, ok := strings.CutPrefix(m, "glm-") + if !ok { + return false + } + major, minor, ok := strings.Cut(rest, "-") + return ok && isDigits(major) && isDigits(minor) +} + +func isDigits(s string) bool { + if s == "" { + return false + } + for _, r := range s { + if r < '0' || r > '9' { + return false + } + } + return true +} + func mistralWithoutReasoning(model string) bool { if mistralReasons(model) || strings.HasPrefix(model, "magistral") { return false From c07fcc3301fbe383dd6376967457f42907433d0a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 14:48:54 +0300 Subject: [PATCH 495/618] test: pin four guards the second review found unguarded Each of these could be reverted with every suite still green: Claude behind the OpenAI-shaped door keeping xhigh and max (the provider argument of ClaudeClampEffort), googleai sending a configured zero top_k, the legacy Bedrock cache marker walking past a thinking block after a tool call and keeping its one-hour TTL, and the anthropic door refusing a tool message that carries a part other than a result. The Gemini capability comment no longer names a temperature pin that is gone. Co-Authored-By: Claude Opus 5 --- llms/anthropic/tool_results_test.go | 20 +++++++++++++ llms/bedrock/legacy_thinking_blocks_test.go | 32 +++++++++++++++++++++ llms/googleai/googleai_unit_test.go | 6 ++++ llms/openai/mistral_effort_test.go | 13 +++++++++ llms/reasoning/gemini_capability.go | 3 +- 5 files changed, 73 insertions(+), 1 deletion(-) diff --git a/llms/anthropic/tool_results_test.go b/llms/anthropic/tool_results_test.go index b511e2400..bac7ef10b 100644 --- a/llms/anthropic/tool_results_test.go +++ b/llms/anthropic/tool_results_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/require" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/anthropic" ) func TestEveryToolResultOfOneMessageReachesTheVendor(t *testing.T) { @@ -43,3 +44,22 @@ func TestEveryToolResultOfOneMessageReachesTheVendor(t *testing.T) { assert.Equal(t, "user", last.Role) assert.Equal(t, []any{"a", "b"}, ids) } + +func TestAToolMessageWithANonResultPartIsRefusedBeforeTheRequest(t *testing.T) { + t.Parallel() + + canned := &cannedMessages{responses: []string{messageWith(`{"type":"text","text":"ok"}`)}} + _, err := canned.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "a", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "a", Name: "lookup", Content: "1"}, + llms.TextContent{Text: "note for the model"}, + }}, + }, llms.WithTools([]llms.Tool{lookupTool()})) + + require.ErrorIs(t, err, anthropic.ErrInvalidContentType) + assert.Empty(t, canned.requests, "the refusal comes before the request") +} diff --git a/llms/bedrock/legacy_thinking_blocks_test.go b/llms/bedrock/legacy_thinking_blocks_test.go index 39dc02abb..1cb644fe2 100644 --- a/llms/bedrock/legacy_thinking_blocks_test.go +++ b/llms/bedrock/legacy_thinking_blocks_test.go @@ -302,3 +302,35 @@ func TestAnEmptyCachedTextNeverReachesTheLegacyPayload(t *testing.T) { assert.Equal(t, "tool_use", assistant[0]["type"]) assert.NotNil(t, assistant[0]["cache_control"], "the marker moves to the block before the empty text") } + +func TestTheMovedCacheMarkWalksPastThinkingAndKeepsItsTTL(t *testing.T) { + t.Parallel() + + thought := reasoning.FromBlocks([]reasoning.Block{ + {Text: "plan", Signature: []byte("s1")}, + {Text: "next", Signature: []byte("s2"), AfterToolCalls: 1}, + }) + rec := &legacyRecorder{responses: []string{`{"id":"msg_2","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`}} + _, err := rec.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, + bedrock.WithCacheControl(llms.TextPartWithReasoning("", thought), bedrock.EphemeralCacheOneHour()), + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, + }}, + }, llms.WithTools(lookupTools())) + require.NoError(t, err) + + var payload struct { + Messages []struct { + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(rec.requests[0], &payload)) + assistant := payload.Messages[1].Content + require.Equal(t, []string{"thought plan/s1", "tool A", "thought next/s2"}, legacyShape(assistant)) + assert.Equal(t, map[string]any{"type": "ephemeral", "ttl": "1h"}, assistant[1]["cache_control"]) +} diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index ef0053d5e..1e8d97a4c 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -1018,6 +1018,12 @@ func TestOnlyConfiguredSamplingReachesTheWire(t *testing.T) { opts: []Option{WithDefaultTemperature(0)}, want: map[string]float64{"temperature": 0}, }, + { + name: "a configured zero top_k", + model: "gemini-2.5-flash", + opts: []Option{WithDefaultTopK(0)}, + want: map[string]float64{"topK": 0}, + }, { name: "a configured zero top_p", model: "gemini-2.5-flash", diff --git a/llms/openai/mistral_effort_test.go b/llms/openai/mistral_effort_test.go index 006bea070..35485b7b2 100644 --- a/llms/openai/mistral_effort_test.go +++ b/llms/openai/mistral_effort_test.go @@ -43,3 +43,16 @@ func TestMistralModelsThatDoNotReasonGetNoEffort(t *testing.T) { } } } + +func TestClaudeBehindTheOpenAIDoorKeepsItsTopEfforts(t *testing.T) { + t.Parallel() + + for _, model := range []string{"claude-sonnet-5", "anthropic/claude-opus-4-7"} { + for _, effort := range []llms.ReasoningEffort{llms.ReasoningXHigh, llms.ReasoningMax} { + body := sendForWire(t, model, llms.WithReasoning(effort, 0)) + if !strings.Contains(body, `"reasoning_effort":"`+string(effort)+`"`) { + t.Errorf("%s at %s: Anthropic serves this level off Bedrock, got body: %s", model, effort, body) + } + } + } +} diff --git a/llms/reasoning/gemini_capability.go b/llms/reasoning/gemini_capability.go index f5cdbf25a..63a408f50 100644 --- a/llms/reasoning/gemini_capability.go +++ b/llms/reasoning/gemini_capability.go @@ -97,7 +97,8 @@ func geminiKnownNonThinking(model string) bool { // GeminiTogglesThinkingByLevel reports whether the model expresses thinking as // on or off through thinking_level alone, with no budget and no level between. -// Kept apart from GeminiUsesThinkingLevel, which also pins temperature to 1.0. +// Kept apart from GeminiUsesThinkingLevel, which also turns on the Gemini 3 +// thought-signature placeholder. func GeminiTogglesThinkingByLevel(model string) bool { return hasFamily(baseModelName(model), "gemma-4") } From 4dad8a84bf1a4122cd2847d07c3fbb42209bde12 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 15:07:35 +0300 Subject: [PATCH 496/618] fix(openai): read Mistral's thinking chunks and send them back the way it takes them With reasoning_effort high, Mistral answers with content as a list of chunks: thinking chunks (a list of text chunks) and text chunks. The openai door read content only as a string, so a non-streamed answer failed to decode after a paid request, and the stream silently dropped every list chunk, including the transition chunk that carries the end of the thinking and the first piece of the answer ("91" came back for "391"). Content now decodes as a string or a chunk list on both paths: text chunks become the answer, thinking chunks the reasoning. History goes back in the form Mistral accepts. It rejects reasoning_content on an assistant turn (422 extra_forbidden) and wants the thinking chunk replayed in content. With PreserveReasoningContent, a model that reasons on Mistral now gets every earlier turn's reasoning as a thinking chunk heading content; a Mistral model that does not reason (codestral, mistral-large, ministral) gets none, since it refuses reasoning input with a 400. Other vendors keep reasoning_content as before. Checked live through the library on Mistral's native door: before, GenerateContent failed to decode and the stream lost the reasoning and the first answer piece; after, both return the answer and the reasoning, a tool turn replayed with its thinking gets a 200, and the same history sent to codestral-latest gets a 200. PAGI-323 Co-Authored-By: Claude Opus 5 --- llms/openai/internal/openaiclient/chat.go | 110 +++++++++++- .../openaiclient/thinking_chunk_test.go | 26 +++ llms/openai/mistral_thinking_test.go | 157 ++++++++++++++++++ llms/openai/openaillm.go | 12 +- llms/openai/openaillm_option.go | 4 +- llms/openai/reasoning_replay_test.go | 19 ++- llms/reasoning/effort_wire.go | 15 ++ llms/reasoning/mistral_replay_test.go | 26 +++ 8 files changed, 354 insertions(+), 15 deletions(-) create mode 100644 llms/openai/internal/openaiclient/thinking_chunk_test.go create mode 100644 llms/openai/mistral_thinking_test.go create mode 100644 llms/reasoning/mistral_replay_test.go diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 4747e2150..92c41cc09 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -324,12 +324,70 @@ type ChatMessage struct { //nolint:musttag // Refusal is set on a response message when the model declines to answer // (Structured Outputs). It must not be validated as final JSON. Refusal string `json:"refusal,omitempty"` + + // Thinking goes out as a thinking chunk at the head of a content list + // instead of reasoning_content. Requests only. + Thinking string +} + +type contentChunk struct { + Type string `json:"type"` + Text string `json:"text,omitempty"` + Thinking []contentChunk `json:"thinking,omitempty"` +} + +func decodeContent(raw json.RawMessage) (text, thinking string, err error) { + if len(raw) == 0 { + return "", "", nil + } + if raw[0] != '[' { + err = json.Unmarshal(raw, &text) + return text, "", err + } + var chunks []contentChunk + if err := json.Unmarshal(raw, &chunks); err != nil { + return "", "", err + } + var answer, thought strings.Builder + for _, chunk := range chunks { + switch chunk.Type { + case "text": + answer.WriteString(chunk.Text) + case "thinking": + for _, inner := range chunk.Thinking { + thought.WriteString(inner.Text) + } + } + } + return answer.String(), thought.String(), nil +} + +func (m ChatMessage) contentAfterThinking() []any { + content := []any{contentChunk{Type: "thinking", Thinking: []contentChunk{{Type: "text", Text: m.Thinking}}}} + for _, part := range m.MultiContent { + var chunk any = part + if text, isText := part.(llms.TextContent); isText { + chunk = contentChunk{Type: "text", Text: text.Text} + } + content = append(content, chunk) + } + return content } func (m ChatMessage) MarshalJSON() ([]byte, error) { if m.Content != "" && m.MultiContent != nil { return nil, ErrContentExclusive } + if m.Thinking != "" { + return json.Marshal(struct { + Role string `json:"role"` + Content []any `json:"content"` + Name string `json:"name,omitempty"` + ToolCalls []ToolCall `json:"tool_calls,omitempty"` + FunctionCall *FunctionCall `json:"function_call,omitempty"` + ToolCallID string `json:"tool_call_id,omitempty"` + }{m.Role, m.contentAfterThinking(), m.Name, m.ToolCalls, m.FunctionCall, m.ToolCallID}) + } if text, ok := isSingleTextContent(m.MultiContent); ok { m.Content = text m.MultiContent = nil @@ -355,6 +413,8 @@ func (m ChatMessage) MarshalJSON() ([]byte, error) { // Refusal is response-only; never sent on a request. Refusal string `json:"-"` + + Thinking string `json:"-"` }(m) if msg.ReasoningContent == "" && msg.Reasoning != "" { msg.ReasoningContent = msg.Reasoning @@ -380,6 +440,8 @@ func (m ChatMessage) MarshalJSON() ([]byte, error) { // Refusal is response-only; never sent on a request. Refusal string `json:"-"` + + Thinking string `json:"-"` }(m) if msg.ReasoningContent == "" && msg.Reasoning != "" { msg.ReasoningContent = msg.Reasoning @@ -396,9 +458,9 @@ func isSingleTextContent(parts []llms.ContentPart) (string, bool) { } func (m *ChatMessage) UnmarshalJSON(data []byte) error { - msg := struct { + type fields struct { Role string `json:"role"` - Content string `json:"content"` + Content string `json:"-"` MultiContent []llms.ContentPart `json:"-"` // not expected in response Name string `json:"name,omitempty"` ToolCalls []ToolCall `json:"tool_calls,omitempty"` @@ -415,15 +477,28 @@ func (m *ChatMessage) UnmarshalJSON(data []byte) error { // Refusal is populated when the model declines under Structured Outputs. Refusal string `json:"refusal,omitempty"` - }{} - err := json.Unmarshal(data, &msg) + + Thinking string `json:"-"` + } + var msg struct { + fields + Content json.RawMessage `json:"content"` + } + if err := json.Unmarshal(data, &msg); err != nil { + return err + } + text, thinking, err := decodeContent(msg.Content) if err != nil { return err } - if msg.ReasoningContent == "" && msg.Reasoning != "" { - msg.ReasoningContent = msg.Reasoning + *m = ChatMessage(msg.fields) + m.Content = text + if m.ReasoningContent == "" { + m.ReasoningContent = m.Reasoning + } + if m.ReasoningContent == "" { + m.ReasoningContent = thinking } - *m = ChatMessage(msg) return nil } @@ -552,6 +627,27 @@ type StreamedChatResponseChunkDelta struct { Refusal string `json:"refusal,omitempty"` } +func (d *StreamedChatResponseChunkDelta) UnmarshalJSON(data []byte) error { + type fields StreamedChatResponseChunkDelta + var delta struct { + fields + Content json.RawMessage `json:"content"` + } + if err := json.Unmarshal(data, &delta); err != nil { + return err + } + text, thinking, err := decodeContent(delta.Content) + if err != nil { + return err + } + *d = StreamedChatResponseChunkDelta(delta.fields) + d.Content = text + if d.ReasoningContent == "" { + d.ReasoningContent = thinking + } + return nil +} + // StreamedChatResponseChunk is a chunk from the stream. type StreamedChatResponseChunk struct { Index int `json:"index"` diff --git a/llms/openai/internal/openaiclient/thinking_chunk_test.go b/llms/openai/internal/openaiclient/thinking_chunk_test.go new file mode 100644 index 000000000..a9abe39f1 --- /dev/null +++ b/llms/openai/internal/openaiclient/thinking_chunk_test.go @@ -0,0 +1,26 @@ +package openaiclient + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestAPartThatIsNotTextKeepsItsPlaceAfterTheThinkingChunk(t *testing.T) { + t.Parallel() + + raw, err := json.Marshal(ChatMessage{Role: "assistant", Thinking: "seen", MultiContent: []llms.ContentPart{ + llms.TextContent{Text: "look"}, + llms.ImageURLContent{URL: "https://example.com/a.png"}, + }}) + require.NoError(t, err) + + assert.JSONEq(t, `{"role":"assistant","content":[`+ + `{"type":"thinking","thinking":[{"type":"text","text":"seen"}]},`+ + `{"type":"text","text":"look"},`+ + `{"type":"image_url","image_url":{"url":"https://example.com/a.png"}}]}`, string(raw)) +} diff --git a/llms/openai/mistral_thinking_test.go b/llms/openai/mistral_thinking_test.go new file mode 100644 index 000000000..b4c1c2a81 --- /dev/null +++ b/llms/openai/mistral_thinking_test.go @@ -0,0 +1,157 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func mistralAnswering(t *testing.T, message string) *LLM { + t.Helper() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"message":`+message+`,"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(server.Close) + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel("mistral-small-latest")) + require.NoError(t, err) + return llm +} + +func TestAMistralAnswerWithThinkingGivesTheTextAndTheReasoning(t *testing.T) { + t.Parallel() + + llm := mistralAnswering(t, `{"role":"assistant","content":[`+ + `{"type":"thinking","thinking":[{"type":"text","text":"17 times 23"},{"type":"text","text":" is 391."}],"closed":true},`+ + `{"type":"text","text":"391"}]}`) + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "What is 17*23?"), + }, llms.WithReasoning(llms.ReasoningHigh, 0)) + require.NoError(t, err) + + choice := resp.Choices[0] + assert.Equal(t, "391", choice.Content) + require.NotNil(t, choice.Reasoning) + assert.Equal(t, "17 times 23 is 391.", choice.Reasoning.Content) +} + +func TestAMistralToolCallWithThinkingKeepsTheCallAndTheReasoning(t *testing.T) { + t.Parallel() + + llm := mistralAnswering(t, `{"role":"assistant","content":[`+ + `{"type":"thinking","thinking":[{"type":"text","text":"The tool knows."}],"closed":true}],`+ + `"tool_calls":[{"id":"c1","type":"function","function":{"name":"lookup","arguments":"{\"city\": \"Paris\"}"},"index":0}]}`) + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "Population of Paris?"), + }, llms.WithReasoning(llms.ReasoningHigh, 0)) + require.NoError(t, err) + + choice := resp.Choices[0] + assert.Empty(t, choice.Content) + require.Len(t, choice.ToolCalls, 1) + assert.Equal(t, "lookup", choice.ToolCalls[0].FunctionCall.Name) + require.NotNil(t, choice.Reasoning) + assert.Equal(t, "The tool knows.", choice.Reasoning.Content) +} + +func TestTheMistralStreamHandsOverTheEndOfThinkingAndTheStartOfTheAnswer(t *testing.T) { + t.Parallel() + + deltas := []string{ + `{"role":"assistant","content":""}`, + `{"content":[{"type":"thinking","thinking":[{"type":"text","text":"17 times"}]}]}`, + `{"content":[{"type":"thinking","thinking":[{"type":"text","text":" 23"}],"closed":true}]}`, + `{"content":[{"type":"thinking","thinking":[{"type":"text","text":"."}],"closed":true},{"type":"text","text":"3"}]}`, + `{"content":"91"}`, + } + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "text/event-stream") + for i, delta := range deltas { + finish := "null" + if i == len(deltas)-1 { + finish = `"stop"` + } + _, _ = io.WriteString(w, `data: {"id":"1","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"delta":`+delta+`,"finish_reason":`+finish+`}]}`+"\n\n") + } + _, _ = io.WriteString(w, "data: [DONE]\n\n") + })) + defer server.Close() + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel("mistral-small-latest")) + require.NoError(t, err) + + var streamedText, streamedThought strings.Builder + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "What is 17*23?"), + }, llms.WithReasoning(llms.ReasoningHigh, 0), llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + switch chunk.Type { + case streaming.ChunkTypeText: + streamedText.WriteString(chunk.Content) + case streaming.ChunkTypeReasoning: + streamedThought.WriteString(chunk.Reasoning.Content) + default: + } + return nil + })) + require.NoError(t, err) + + assert.Equal(t, "391", streamedText.String()) + assert.Equal(t, "17 times 23.", streamedThought.String()) + assert.Equal(t, "391", resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Equal(t, "17 times 23.", resp.Choices[0].Reasoning.Content) +} + +func TestAReasoningMistralModelGetsItsThinkingBackAsAChunkOfContent(t *testing.T) { + t.Parallel() + + thinking := func(text string) map[string]any { + return map[string]any{"type": "thinking", "thinking": []any{map[string]any{"type": "text", "text": text}}} + } + for _, model := range []string{ + "mistral-medium-latest", "mistral-small-latest", "magistral-medium-latest", "zai-glm-5-2", "mistral/mistral-small-latest", + } { + turns := assistantTurnsSent(t, model) + require.Len(t, turns, 2, model) + + assert.Equal(t, []any{thinking("text turn thought"), map[string]any{"type": "text", "text": "answered in text"}}, + turns[0]["content"], model) + assert.Equal(t, []any{thinking("tool turn thought")}, turns[1]["content"], model) + assert.NotEmpty(t, turns[1]["tool_calls"], model) + for _, turn := range turns { + assert.NotContains(t, turn, "reasoning_content", model) + } + } +} + +func TestAMistralModelThatDoesNotReasonGetsNoThinkingBack(t *testing.T) { + t.Parallel() + + for _, model := range []string{"codestral-latest", "mistral-large-latest", "ministral-8b-latest"} { + turns := assistantTurnsSent(t, model) + require.Len(t, turns, 2, model) + + assert.Equal(t, "answered in text", turns[0]["content"], model) + assert.Empty(t, turns[1]["content"], model) + assert.NotEmpty(t, turns[1]["tool_calls"], model) + for _, turn := range turns { + assert.NotContains(t, turn, "reasoning_content", model) + } + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 399e0d848..9a1722346 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -172,9 +172,15 @@ func (o *LLM) convertMessages(messages []llms.MessageContent, model string) ([]* msg.MultiContent = newParts msg.ToolCalls = toolCallsFromToolCalls(toolCalls) - if o.client != nil && o.client.PreserveReasoningContent && msg.Role == RoleAssistant && - (len(toolCalls) > 0 || reasoning.ReplaysReasoningOnEveryTurn(model)) { - msg.ReasoningContent = extractReasoningContent(mc.Parts) + if o.client != nil && o.client.PreserveReasoningContent && msg.Role == RoleAssistant { + switch { + case reasoning.ServedByMistral(model): + if reasoning.ReplaysThinkingInContent(model) { + msg.Thinking = extractReasoningContent(mc.Parts) + } + case len(toolCalls) > 0 || reasoning.ReplaysReasoningOnEveryTurn(model): + msg.ReasoningContent = extractReasoningContent(mc.Parts) + } } if len(msg.MultiContent) != 0 || len(msg.ToolCalls) != 0 { diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index 23c7cf302..f4e52f3c7 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -175,7 +175,9 @@ func WithModernReasoningFormat() Option { // WithPreserveReasoningContent sends each assistant turn's reasoning back as // reasoning_content: on the turns that called a tool, and on every assistant -// turn for DeepSeek, Kimi and GLM models. +// turn for DeepSeek, Kimi and GLM models. A model Mistral serves takes it on +// every turn as a thinking chunk at the head of content instead, and one that +// does not reason there takes none. func WithPreserveReasoningContent() Option { return func(opts *options) { opts.preserveReasoningContent = true diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index fcaae6194..59a2279c8 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -18,6 +18,17 @@ import ( func replayedReasoning(t *testing.T, model string) []any { t.Helper() + turns := assistantTurnsSent(t, model) + replayed := make([]any, 0, len(turns)) + for _, turn := range turns { + replayed = append(replayed, turn["reasoning_content"]) + } + return replayed +} + +func assistantTurnsSent(t *testing.T, model string) []map[string]any { + t.Helper() + var body map[string]any server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { raw, err := io.ReadAll(r.Body) @@ -61,14 +72,14 @@ func replayedReasoning(t *testing.T, model string) []any { _, err = llm.GenerateContent(context.Background(), history, llms.WithTools(tools)) require.NoError(t, err) - var replayed []any + var turns []map[string]any for _, raw := range body["messages"].([]any) { msg := raw.(map[string]any) if msg["role"] == "assistant" { - replayed = append(replayed, msg["reasoning_content"]) + turns = append(turns, msg) } } - return replayed + return turns } func TestPreservedThinkingGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) { @@ -85,7 +96,7 @@ func TestPreservedThinkingGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3.7-plus", "grok-4", "mistral-medium-latest"} { + for _, model := range []string{"qwen3.7-plus", "grok-4"} { assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, model), model) } } diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index e4a94aef1..9a992550e 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -90,6 +90,21 @@ func ReplaysReasoningOnEveryTurn(model string) bool { return false } +// ReplaysThinkingInContent reports, for a model Mistral serves, whether its +// earlier assistant turns take their reasoning back, which they take only as a +// thinking chunk at the head of content, on every turn. +func ReplaysThinkingInContent(model string) bool { + if !ServedByMistral(model) { + return false + } + for _, form := range modelSpellings(model) { + if mistralWithoutReasoning(form) { + return false + } + } + return true +} + // UsesLegacyMaxTokens reports whether the output limit must travel as // max_tokens rather than max_completion_tokens. func UsesLegacyMaxTokens(model string) bool { diff --git a/llms/reasoning/mistral_replay_test.go b/llms/reasoning/mistral_replay_test.go new file mode 100644 index 000000000..00a98ab19 --- /dev/null +++ b/llms/reasoning/mistral_replay_test.go @@ -0,0 +1,26 @@ +package reasoning + +import "testing" + +func TestOnlyModelsThatReasonOnMistralTakeThinkingBackInContent(t *testing.T) { + t.Parallel() + + for model, want := range map[string]bool{ + "mistral-medium-latest": true, + "mistral-small-latest": true, + "magistral-small-latest": true, + "zai-glm-5-2": true, + "glm-5-2": true, + "mistral/mistral-medium-latest": true, + "codestral-latest": false, + "mistral-large-latest": false, + "ministral-8b-latest": false, + "glm-5.2": false, + "deepseek-v4-pro": false, + "kimi-k3": false, + } { + if got := ReplaysThinkingInContent(model); got != want { + t.Errorf("ReplaysThinkingInContent(%q) = %v, want %v", model, got, want) + } + } +} From 39bd660800fc7e770234938596354e3336565f17 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 15:59:00 +0300 Subject: [PATCH 497/618] fix(reasoning): count only Mistral's own spellings as served by Mistral ServedByMistral cut every prefix up to the last "/" and took any name starting with "magistral", so it also matched spellings other hosts use for the same weights: OpenRouter's mistralai/... and Ollama's tags (mistral-medium-3.5:latest, magistral:24b, bare magistral). With PreserveReasoningContent those names started to get their reasoning back as a thinking chunk in content: OpenRouter documents no such content part and takes reasoning_content instead, and Ollama's OpenAI layer answers 400 "invalid message format" to any part that is not text, image_url or input_audio. A name now counts as Mistral's when it is bare or carries LiteLLM's mistral/ prefix, has no Ollama tag, and spells magistral the way Mistral lists it (magistral-...). Mistral's live model list has no name with "/" or ":". OpenRouter spellings get reasoning_content on tool turns again, as before the thinking-chunk replay. The gateway's /v1 route with mistral/mistral-small-latest takes both replay forms. mistral-medium-3.5 without a tag is spelled the same by Mistral and by Ollama, so a name cannot tell them apart; that path stays as it is. PAGI-326 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_replay_test.go | 4 +++- llms/reasoning/mistral_replay_test.go | 6 ++++++ llms/reasoning/reasoning.go | 11 ++++++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index 59a2279c8..2244928d6 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -96,7 +96,9 @@ func TestPreservedThinkingGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() - for _, model := range []string{"qwen3.7-plus", "grok-4"} { + for _, model := range []string{ + "qwen3.7-plus", "grok-4", "mistralai/mistral-small-2603", "openrouter/mistralai/mistral-medium-3-5", "magistral:24b", + } { assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, model), model) } } diff --git a/llms/reasoning/mistral_replay_test.go b/llms/reasoning/mistral_replay_test.go index 00a98ab19..284963623 100644 --- a/llms/reasoning/mistral_replay_test.go +++ b/llms/reasoning/mistral_replay_test.go @@ -18,6 +18,12 @@ func TestOnlyModelsThatReasonOnMistralTakeThinkingBackInContent(t *testing.T) { "glm-5.2": false, "deepseek-v4-pro": false, "kimi-k3": false, + + "mistralai/mistral-small-2603": false, + "openrouter/mistralai/mistral-medium-3-5": false, + "mistral-medium-3.5:latest": false, + "magistral:24b": false, + "magistral": false, } { if got := ReplaysThinkingInContent(model); got != want { t.Errorf("ReplaysThinkingInContent(%q) = %v, want %v", model, got, want) diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 4f96c4d34..f4b463995 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -235,13 +235,14 @@ func DefaultIsReasoningModel(model string) bool { } // ServedByMistral reports whether the name is one only Mistral's endpoint uses: -// a Mistral family, or GLM spelled the way Mistral lists it (glm-5-2, zai-glm-5-2). +// a Mistral family, or GLM spelled the way Mistral lists it (glm-5-2, zai-glm-5-2), +// bare or behind LiteLLM's mistral/ prefix. func ServedByMistral(model string) bool { - m := strings.ToLower(model) - if idx := strings.LastIndex(m, "/"); idx != -1 { - m = m[idx+1:] + m := strings.TrimPrefix(strings.ToLower(model), "mistral/") + if strings.Contains(m, ":") { + return false } - if strings.HasPrefix(m, "zai-glm") || strings.HasPrefix(m, "magistral") || + if strings.HasPrefix(m, "zai-glm") || strings.HasPrefix(m, "magistral-") || mistralReasons(m) || mistralWithoutReasoning(m) { return true } From 5a23bb17e1591d3d84c46cf7c279c7bfdfc7abb8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 15:59:16 +0300 Subject: [PATCH 498/618] test: pin the prefixed spelling of a Mistral model that does not reason pentagi names Mistral models through LiteLLM's prefix (mistral/ministral-8b-latest for its utility agents), and such a model refuses reasoning input with a 400. ReplaysThinkingInContent strips the prefix before it asks whether the model reasons; only bare names were checked, so dropping that step left every test green. PAGI-326 Co-Authored-By: Claude Opus 5 --- llms/openai/mistral_thinking_test.go | 2 +- llms/reasoning/mistral_replay_test.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/llms/openai/mistral_thinking_test.go b/llms/openai/mistral_thinking_test.go index b4c1c2a81..239f0ffe7 100644 --- a/llms/openai/mistral_thinking_test.go +++ b/llms/openai/mistral_thinking_test.go @@ -143,7 +143,7 @@ func TestAReasoningMistralModelGetsItsThinkingBackAsAChunkOfContent(t *testing.T func TestAMistralModelThatDoesNotReasonGetsNoThinkingBack(t *testing.T) { t.Parallel() - for _, model := range []string{"codestral-latest", "mistral-large-latest", "ministral-8b-latest"} { + for _, model := range []string{"codestral-latest", "mistral-large-latest", "ministral-8b-latest", "mistral/ministral-8b-latest"} { turns := assistantTurnsSent(t, model) require.Len(t, turns, 2, model) diff --git a/llms/reasoning/mistral_replay_test.go b/llms/reasoning/mistral_replay_test.go index 284963623..2a630f1ed 100644 --- a/llms/reasoning/mistral_replay_test.go +++ b/llms/reasoning/mistral_replay_test.go @@ -15,6 +15,8 @@ func TestOnlyModelsThatReasonOnMistralTakeThinkingBackInContent(t *testing.T) { "codestral-latest": false, "mistral-large-latest": false, "ministral-8b-latest": false, + "mistral/ministral-8b-latest": false, + "mistral/codestral-latest": false, "glm-5.2": false, "deepseek-v4-pro": false, "kimi-k3": false, From 3517d05d274c1db60dbb8f6f793eee53ecc3489d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 15:59:16 +0300 Subject: [PATCH 499/618] test: pin joining the text chunks of one Mistral answer Mistral's chat completions can answer with text chunks around a reference chunk (its citations guide shows TextChunk and ReferenceChunk alternating in message.content). Every content list in the tests held at most one text chunk, so letting the last chunk win left the suite green. The answer must come back whole, streamed or not. PAGI-326 Co-Authored-By: Claude Opus 5 --- llms/openai/mistral_thinking_test.go | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/llms/openai/mistral_thinking_test.go b/llms/openai/mistral_thinking_test.go index 239f0ffe7..9b2f1e0b3 100644 --- a/llms/openai/mistral_thinking_test.go +++ b/llms/openai/mistral_thinking_test.go @@ -118,6 +118,37 @@ func TestTheMistralStreamHandsOverTheEndOfThinkingAndTheStartOfTheAnswer(t *test assert.Equal(t, "17 times 23.", resp.Choices[0].Reasoning.Content) } +func TestTextChunksAroundAReferenceMakeOneAnswer(t *testing.T) { + t.Parallel() + + chunks := `[{"type":"text","text":"Paris has "},{"type":"reference","reference_ids":[0]},{"type":"text","text":"2.1M people."}]` + + resp, err := mistralAnswering(t, `{"role":"assistant","content":`+chunks+`}`).GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "Population of Paris?")}) + require.NoError(t, err) + assert.Equal(t, "Paris has 2.1M people.", resp.Choices[0].Content) + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, `data: {"id":"1","object":"chat.completion.chunk","created":1,"model":"mistral-small-latest",`+ + `"choices":[{"index":0,"delta":{"content":`+chunks+`},"finish_reason":"stop"}]}`+"\n\ndata: [DONE]\n\n") + })) + defer server.Close() + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel("mistral-small-latest")) + require.NoError(t, err) + var streamed strings.Builder + resp, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "Population of Paris?")}, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + streamed.WriteString(chunk.Content) + return nil + })) + require.NoError(t, err) + assert.Equal(t, "Paris has 2.1M people.", streamed.String()) + assert.Equal(t, "Paris has 2.1M people.", resp.Choices[0].Content) +} + func TestAReasoningMistralModelGetsItsThinkingBackAsAChunkOfContent(t *testing.T) { t.Parallel() From f81a209f0cf1a818354aef02aaec0adf8153f69c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 16:00:40 +0300 Subject: [PATCH 500/618] test: pin the moved cache marker walking past a redacted thinking block moveCacheMarkBack skips both thinking and redacted_thinking on its way to the block that can carry the marker, since Anthropic caches neither directly. The test put only a plain thinking block after the tool call, so leaving redacted_thinking out of the skip kept the suite green while the one-hour marker landed on the redacted block. The table now runs both kinds of last block and checks the marker stays off it. PAGI-327 Co-Authored-By: Claude Opus 5 --- llms/bedrock/legacy_thinking_blocks_test.go | 58 ++++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/llms/bedrock/legacy_thinking_blocks_test.go b/llms/bedrock/legacy_thinking_blocks_test.go index 1cb644fe2..1fc002565 100644 --- a/llms/bedrock/legacy_thinking_blocks_test.go +++ b/llms/bedrock/legacy_thinking_blocks_test.go @@ -306,31 +306,37 @@ func TestAnEmptyCachedTextNeverReachesTheLegacyPayload(t *testing.T) { func TestTheMovedCacheMarkWalksPastThinkingAndKeepsItsTTL(t *testing.T) { t.Parallel() - thought := reasoning.FromBlocks([]reasoning.Block{ - {Text: "plan", Signature: []byte("s1")}, - {Text: "next", Signature: []byte("s2"), AfterToolCalls: 1}, - }) - rec := &legacyRecorder{responses: []string{`{"id":"msg_2","type":"message","role":"assistant","model":"m",` + - `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`}} - _, err := rec.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ - llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), - {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, - bedrock.WithCacheControl(llms.TextPartWithReasoning("", thought), bedrock.EphemeralCacheOneHour()), - }}, - {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ - llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, - }}, - }, llms.WithTools(lookupTools())) - require.NoError(t, err) - - var payload struct { - Messages []struct { - Content []map[string]any `json:"content"` - } `json:"messages"` + for _, tc := range []struct { + last reasoning.Block + shape string + }{ + {reasoning.Block{Text: "next", Signature: []byte("s2"), AfterToolCalls: 1}, "thought next/s2"}, + {reasoning.Block{Redacted: []byte("opaque"), AfterToolCalls: 1}, "encrypted opaque"}, + } { + thought := reasoning.FromBlocks([]reasoning.Block{{Text: "plan", Signature: []byte("s1")}, tc.last}) + rec := &legacyRecorder{responses: []string{`{"id":"msg_2","type":"message","role":"assistant","model":"m",` + + `"content":[{"type":"text","text":"ok"}],"stop_reason":"end_turn","usage":{"input_tokens":1,"output_tokens":1}}`}} + _, err := rec.serve(t).GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "look it up"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, + bedrock.WithCacheControl(llms.TextPartWithReasoning("", thought), bedrock.EphemeralCacheOneHour()), + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "A", Name: "lookup", Content: "done"}, + }}, + }, llms.WithTools(lookupTools())) + require.NoError(t, err, tc.shape) + + var payload struct { + Messages []struct { + Content []map[string]any `json:"content"` + } `json:"messages"` + } + require.NoError(t, json.Unmarshal(rec.requests[0], &payload)) + assistant := payload.Messages[1].Content + require.Equal(t, []string{"thought plan/s1", "tool A", tc.shape}, legacyShape(assistant)) + assert.Equal(t, map[string]any{"type": "ephemeral", "ttl": "1h"}, assistant[1]["cache_control"], tc.shape) + assert.Nil(t, assistant[2]["cache_control"], tc.shape) } - require.NoError(t, json.Unmarshal(rec.requests[0], &payload)) - assistant := payload.Messages[1].Content - require.Equal(t, []string{"thought plan/s1", "tool A", "thought next/s2"}, legacyShape(assistant)) - assert.Equal(t, map[string]any{"type": "ephemeral", "ttl": "1h"}, assistant[1]["cache_control"]) } From 80f8220c154f04c5af898fdb13a3a7ddc2b41ffb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Sun, 13 Sep 2026 16:28:47 +0300 Subject: [PATCH 501/618] fix(reasoning): refuse any host prefix left after mistral/ in ServedByMistral After the last change ServedByMistral stripped a leading mistral/ and rejected only Ollama's ":" tags; any other prefix went on to the family checks. A prefix that itself begins with a family token passed them: GitHub Models publishes Mistral as mistral-ai/..., and "mistral-ai/mistral-small-2603" matched "mistral-" from the list of Mistral models that do not reason. With PreserveReasoningContent such names got every earlier turn's reasoning as a thinking chunk, the form only Mistral's endpoint takes, and a non-reasoning model under that prefix lost reasoning_content on its tool turns. Any "/" left after the mistral/ prefix now means another host, as the doc comment already says. mistral-ai/... names get reasoning_content on tool turns like other hosts. PAGI-328 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_replay_test.go | 1 + llms/reasoning/mistral_replay_test.go | 1 + llms/reasoning/reasoning.go | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index 2244928d6..c22964327 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -98,6 +98,7 @@ func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { for _, model := range []string{ "qwen3.7-plus", "grok-4", "mistralai/mistral-small-2603", "openrouter/mistralai/mistral-medium-3-5", "magistral:24b", + "mistral-ai/mistral-small-2603", } { assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, model), model) } diff --git a/llms/reasoning/mistral_replay_test.go b/llms/reasoning/mistral_replay_test.go index 2a630f1ed..2a01e3f0b 100644 --- a/llms/reasoning/mistral_replay_test.go +++ b/llms/reasoning/mistral_replay_test.go @@ -22,6 +22,7 @@ func TestOnlyModelsThatReasonOnMistralTakeThinkingBackInContent(t *testing.T) { "kimi-k3": false, "mistralai/mistral-small-2603": false, + "mistral-ai/mistral-small-2603": false, "openrouter/mistralai/mistral-medium-3-5": false, "mistral-medium-3.5:latest": false, "magistral:24b": false, diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index f4b463995..6a7542ab8 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -239,7 +239,7 @@ func DefaultIsReasoningModel(model string) bool { // bare or behind LiteLLM's mistral/ prefix. func ServedByMistral(model string) bool { m := strings.TrimPrefix(strings.ToLower(model), "mistral/") - if strings.Contains(m, ":") { + if strings.ContainsAny(m, "/:") { return false } if strings.HasPrefix(m, "zai-glm") || strings.HasPrefix(m, "magistral-") || From dc2be390f82d36e789d142c4272fb0412871109e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:50:40 +0300 Subject: [PATCH 502/618] fix(googleai): give every streamed call without an ID its own ID Gemini 2.5 models stream parallel calls of one function as complete functionCall parts with no id. The stream kept the synthetic ID it had generated for a function name and handed it to every later call of that name without an ID, so five parallel get_weather calls came back with a single fcall_ ID, while the same answer without a stream got five. A caller that pairs tool results with calls by ID loses all but one pair. Each streamed part now gets an ID the same way as in the whole-answer path: the vendor's ID when it sends one, a fresh generated one when it does not. The Gemini API documents FunctionCall.id as the unique identifier of the call, and each functionCall part arrives whole: the partial-argument streaming fields exist only on Vertex AI behind an opt-in this package never sets. The new test streams two get_weather calls without IDs in one chunk and in two chunks, fails with a shared ID before the change, and also pins vendor IDs kept as they are and the whole-answer path. Live through the library on the gateway's native Gemini route: gemini-2.5-flash, -pro and -flash-lite now stream five parallel calls with five distinct IDs (one before); gemini-3.6-flash keeps its own call IDs. PAGI-335 Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai.go | 12 +-- llms/googleai/parallel_calls_stream_test.go | 100 ++++++++++++++++++++ 2 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 llms/googleai/parallel_calls_stream_test.go diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 108125a2d..c9a6c88ba 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -383,16 +383,6 @@ func (g *GoogleAI) generateStreamingContent( var blockReason *genai.GenerateContentResponsePromptFeedback var streamErr error - // Trying to keep the same ID for the same tool call name - toolCallIDs := make(map[string]string) - ensureStreamFunctionCallID := func(name, id string) string { - if rid, ok := toolCallIDs[name]; id == "" && ok { - return rid - } - toolCallIDs[name] = ensureFunctionCallID(id) - return toolCallIDs[name] - } - for chunk, err := range iter { if err != nil { streamErr = fmt.Errorf("error generating content: %w", err) @@ -454,7 +444,7 @@ func (g *GoogleAI) generateStreamingContent( if part.FunctionCall != nil { b, _ := json.Marshal(part.FunctionCall.Args) toolCall := llms.ToolCall{ - ID: ensureStreamFunctionCallID(part.FunctionCall.Name, part.FunctionCall.ID), + ID: ensureFunctionCallID(part.FunctionCall.ID), FunctionCall: &llms.FunctionCall{ Name: part.FunctionCall.Name, Arguments: string(b), diff --git a/llms/googleai/parallel_calls_stream_test.go b/llms/googleai/parallel_calls_stream_test.go new file mode 100644 index 000000000..e085d0cd2 --- /dev/null +++ b/llms/googleai/parallel_calls_stream_test.go @@ -0,0 +1,100 @@ +package googleai + +import ( + "context" + "net/http" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +func weatherCall(id, location string) string { + if id != "" { + id = `"id":"` + id + `",` + } + return `{"functionCall":{` + id + `"name":"get_weather","args":{"location":"` + location + `"}}}` +} + +func streamedCandidate(finish string, parts ...string) string { + return `data: {"candidates":[{"content":{"role":"model","parts":[` + strings.Join(parts, ",") + + `]},"finishReason":"` + finish + `","index":0}]}` + "\r\n\r\n" +} + +func TestParallelCallsOfOneFunctionGetTheirOwnIDs(t *testing.T) { + t.Parallel() + + paris, london := weatherCall("", "Paris"), weatherCall("", "London") + for _, tc := range []struct { + name string + body string + wantIDs []string + }{ + {name: "streamed in one chunk", body: streamedCandidate("STOP", paris, london)}, + {name: "streamed in two chunks", body: streamedCandidate("", paris) + streamedCandidate("STOP", london)}, + { + name: "streamed with the vendor's IDs", + body: streamedCandidate("", weatherCall("call-a", "Paris")) + + streamedCandidate("STOP", weatherCall("call-b", "London")), + wantIDs: []string{"call-a", "call-b"}, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + llm, err := New(t.Context(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: stubStreamTransport{body: tc.body}})) + require.NoError(t, err) + + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "weather in Paris and London?")}, + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + requireOneIDPerCall(t, resp.Choices[0].ToolCalls, tc.wantIDs) + }) + } + + t.Run("whole answer", func(t *testing.T) { + t.Parallel() + + transport := &captureTransport{resp: `{"candidates":[{"content":{"role":"model","parts":[` + + paris + `,` + london + `]},"finishReason":"STOP","index":0}]}`} + llm, err := New(t.Context(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: transport})) + require.NoError(t, err) + + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "weather in Paris and London?")}) + require.NoError(t, err) + require.Len(t, resp.Choices, 1) + + requireOneIDPerCall(t, resp.Choices[0].ToolCalls, nil) + }) +} + +func requireOneIDPerCall(t *testing.T, calls []llms.ToolCall, wantIDs []string) { + t.Helper() + + require.Len(t, calls, 2) + assert.JSONEq(t, `{"location":"Paris"}`, calls[0].FunctionCall.Arguments) + assert.JSONEq(t, `{"location":"London"}`, calls[1].FunctionCall.Arguments) + if wantIDs != nil { + assert.Equal(t, wantIDs, []string{calls[0].ID, calls[1].ID}) + return + } + for _, call := range calls { + assert.True(t, strings.HasPrefix(call.ID, GENERATED_FUNCTION_CALL_ID_PREFIX), call.ID) + } + assert.NotEqual(t, calls[0].ID, calls[1].ID, + "a tool result is matched to its call by ID, so two calls must never share one") +} From 0cf20b579ebc85ecf9e5447567a2af6c8dc5433e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:53:38 +0300 Subject: [PATCH 503/618] fix(reasoning): switch thinking off on DashScope guests with enable_thinking With Reasoning Mode Off, dashscope/glm-5.2 and dashscope/deepseek-v4-flash-0731 failed every call: the gateway answered "dashscope does not support parameters: ['thinking']". The off rule matched GLM, DeepSeek V4 and Kimi K2.6 by family in every spelling of the name, so it sent the family's own thinking object even when the name was DashScope's. DashScope's OpenAI-compatible mode switches a hybrid model off with enable_thinking false and takes the thinking object only in its Anthropic-compatible mode. A name behind dashscope/ that would get the thinking object now gets enable_thinking false. The native Z.ai and DeepSeek spellings, bare or behind zai/ and deepseek/, keep the thinking object. The new rows for the dashscope/ spellings fail on the old code; rows for zai/ and deepseek/ fail when the host check matches any prefixed name. PAGI-332 Co-Authored-By: Claude Opus 5 --- llms/reasoning/off.go | 9 ++++++++- llms/reasoning/off_test.go | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index f0a71f0aa..8f249e87e 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -158,6 +158,13 @@ func disablesByThinkingObject(model string) bool { return false } +func thinkingObjectOffOnHost(model string) OffWire { + if dashScopeGuestSpelling(model) != "" { + return OffDisableDashScope + } + return OffDisableThinkingObject +} + func openAIOffWire(model string) OffWire { if !IsReasoningModel(model) { return OffOmit // non-reasoning model does not think @@ -172,7 +179,7 @@ func openAIOffWire(model string) OffWire { return OffDisableDashScope } if disablesByThinkingObject(model) { - return OffDisableThinkingObject + return thinkingObjectOffOnHost(model) } // The disable token rides on the effort field, so a door that refuses that // field cannot express "off" at all. diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index f3457ae4d..0f7c8dc68 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -61,6 +61,7 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { for _, model := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "glm-5.2", "minimax-m3", "deepseek-v4-flash", "deepseek-v4-pro", + "zai/glm-5.2", "deepseek/deepseek-v4-flash", } { if got := ResolveOff(model, ProviderOpenAI); got != OffDisableThinkingObject { t.Errorf("ResolveOff(%q) = %v, want the thinking object: the effort token is either "+ @@ -79,6 +80,21 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { } } +func TestDashScopeGuestsSpellOffWithTheDashScopeFlag(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "dashscope/glm-5.2", "dashscope/glm-5.1", "dashscope/glm-5", "dashscope/glm-4.7", + "dashscope/glm-4.6", "dashscope/glm-4.5", + "dashscope/deepseek-v4-pro", "dashscope/deepseek-v4-flash", "dashscope/deepseek-v4-flash-0731", + "dashscope/kimi-k2.6", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffDisableDashScope { + t.Errorf("ResolveOff(%q, openai) = %v, want OffDisableDashScope", model, got) + } + } +} + func TestAlwaysThinkingFamiliesAreRefusedOnBedrockToo(t *testing.T) { t.Parallel() From 2e0721a534428f4f12a05f43ca745c334489c87a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:54:40 +0300 Subject: [PATCH 504/618] fix(reasoning): switch thinking off on GLM served by Mistral by omitting the field With Reasoning Mode Off, mistral/zai-glm-5-2 failed every call: the gateway answered "mistral does not support parameters: ['thinking']" and Mistral's own endpoint answers 422 extra_forbidden at body.thinking. The off rule matched glm-5-2 and zai-glm-5-2 as GLM 5 and sent the Z.ai thinking object, but Mistral's ChatCompletionRequest has no thinking field and forbids unknown ones. On Mistral this model reasons only when a request asks for it, the same as the other reasoning models Mistral serves, which already switch off by omission. A name ServedByMistral that would get the thinking object now sends no reasoning field. The new rows for zai-glm-5-2 and glm-5-2, bare and behind mistral/, fail on the old code. PAGI-332 Co-Authored-By: Claude Opus 5 --- llms/reasoning/off.go | 3 +++ llms/reasoning/off_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 8f249e87e..331fb7d3d 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -162,6 +162,9 @@ func thinkingObjectOffOnHost(model string) OffWire { if dashScopeGuestSpelling(model) != "" { return OffDisableDashScope } + if ServedByMistral(model) { + return OffOmit + } return OffDisableThinkingObject } diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 0f7c8dc68..44540d6a4 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -95,6 +95,18 @@ func TestDashScopeGuestsSpellOffWithTheDashScopeFlag(t *testing.T) { } } +func TestGLMServedByMistralSpellsOffByOmission(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "zai-glm-5-2", "mistral/zai-glm-5-2", "glm-5-2", "mistral/glm-5-2", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffOmit { + t.Errorf("ResolveOff(%q, openai) = %v, want OffOmit", model, got) + } + } +} + func TestAlwaysThinkingFamiliesAreRefusedOnBedrockToo(t *testing.T) { t.Parallel() From 8be8c30301ca361b13e438158128373bbdf6a572 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:55:04 +0300 Subject: [PATCH 505/618] fix(llms): report Qwen's opt-in thinking as off by default in the hint ReasoningSupportFor returned DefaultOn nil for qwen-plus, qwen-flash, qwen-turbo, qwen3-max, qwen3-vl-plus and qwen3-vl-flash on the openai door, although the door already treats them as thinking only on enable_thinking:true and resolves their off to sending nothing. A consumer that offers Off only where it takes effect reads an omitted disable on a model of unknown default as a silent no-op, so these models lost the off and budget controls the door executes. DashScope documents all six as hybrid thinking with thinking disabled by default, so the hint now says DefaultOn false for exactly the names the door reads through QwenThinkingEnabledByFlag. The Qwen3.5+ generations, which DashScope turns on by default, stay as they were. Verified by mutation: dropping the branch turns the test red for every listed name, widening it to any qwen name turns it red for qwen3.6-plus and qwen3.5-flash. Nothing on the wire changes. PAGI-353 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 5 +++++ llms/reasoning_support_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 60f29778c..71bf9633d 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -116,10 +116,15 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } if p == reasoning.ProviderOpenAI && reasoning.IsReasoningModel(model) { + var defaultOn *bool + if reasoning.QwenThinkingEnabledByFlag(model) { + defaultOn = boolPtr(false) + } return ReasoningSupport{ Supported: true, CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, RejectsSampling: reasoning.RejectsSamplingWhileThinking(model), + DefaultOn: defaultOn, } } diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 27fbae2e8..25628d8da 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -476,6 +476,34 @@ func TestTheHintNamesTheMechanismTheDoorActuallyUses(t *testing.T) { } } +func TestTheHintReportsQwenThinkingOffUntilAsked(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "qwen-plus", "qwen-flash", "qwen-turbo", "qwen3-max", + "qwen3-vl-plus", "qwen3-vl-flash", "dashscope/qwen3-max", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + s := ReasoningSupportFor(model, reasoning.ProviderOpenAI) + switch { + case s.DefaultOn == nil: + t.Errorf("%s DefaultOn = nil, want false: DashScope leaves its thinking off until "+ + "enable_thinking asks for it, and a consumer reads nil as an off control that does nothing", model) + case *s.DefaultOn: + t.Errorf("%s DefaultOn = true, want false", model) + } + }) + } + + for _, model := range []string{"qwen3.6-plus", "qwen3.5-flash"} { + if d := ReasoningSupportFor(model, reasoning.ProviderOpenAI).DefaultOn; d != nil && !*d { + t.Errorf("%s DefaultOn = false, but DashScope turns its thinking on by default", model) + } + } +} + func TestTheOllamaDoorKeepsTheOffControlItsVendorDocuments(t *testing.T) { t.Parallel() From ee3471572b379ec1c04dec01e7d8d9bcffcb7d9c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:55:42 +0300 Subject: [PATCH 506/618] test(openai): pin the off wire of GLM and DeepSeek behind dashscope/ and mistral/ The door-level off test covered only the native spellings, so nothing checked what an off request carries when DashScope or Mistral serves the family. The new rows read every reasoning field of the request body: dashscope/glm-5.2, dashscope/deepseek-v4-pro and dashscope/deepseek-v4-flash-0731 carry only enable_thinking false, mistral/zai-glm-5-2 and zai-glm-5-2 carry none. The native test gains zai/glm-5.2 and deepseek/deepseek-v4-pro, which keep the thinking object. On the story branch head every new row fails with the thinking object on the wire; dropping the enable_thinking write from the adapter fails the dashscope/ rows. PAGI-332 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_object_off_test.go | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index 62d180c8a..ba02e6484 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "net/http/httptest" + "reflect" "strings" "testing" @@ -19,6 +20,7 @@ func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) for _, model := range []string{ "glm-5.1", "glm-5.2", "glm-4.6", "minimax-m3", "kimi-k2.6", "deepseek-v4-flash", "deepseek-v4-pro", + "zai/glm-5.2", "deepseek/deepseek-v4-pro", } { body := sendForWire(t, model, llms.WithReasoningDisabled()) if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { @@ -30,6 +32,35 @@ func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) } } +func TestDisablingThinkingOnAHostThatServesTheFamilyUnderItsOwnName(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want map[string]any + }{ + {"dashscope/glm-5.2", map[string]any{"enable_thinking": false}}, + {"dashscope/deepseek-v4-pro", map[string]any{"enable_thinking": false}}, + {"dashscope/deepseek-v4-flash-0731", map[string]any{"enable_thinking": false}}, + {"mistral/zai-glm-5-2", map[string]any{}}, + {"zai-glm-5-2", map[string]any{}}, + } { + body, err := wireBodyOf(t, tc.model, nil, llms.WithReasoningDisabled()) + if err != nil { + t.Fatalf("%s: GenerateContent() error: %v", tc.model, err) + } + got := map[string]any{} + for _, key := range []string{"thinking", "reasoning_effort", "reasoning", "enable_thinking", "thinking_budget"} { + if value, ok := body[key]; ok { + got[key] = value + } + } + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("%s: reasoning fields on the wire = %v, want %v", tc.model, got, tc.want) + } + } +} + func TestDisablingThinkingOnAModelThatOnlyThinks(t *testing.T) { t.Parallel() From b7b35a53be9bc93bd867104455366fe642485504 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:56:12 +0300 Subject: [PATCH 507/618] test(llms): pin that opt-in alone does not make the hint report thinking off ThinkingOptIn is wider than what vendors document as off by default. It counts mistral-medium-latest and mistral-small-latest, whose reasoning_effort default Mistral does not state, and the door resolves their off to sending nothing; a DefaultOn false there lets a consumer offer an off that may do nothing. It also counts ernie-4.5-21b-a3b-thinking, which the openai door treats as thinking on because of the marker in its name. Deriving DefaultOn from ThinkingOptIn in the capability-table branch turns the test red on both Mistral names; doing it in the openai reasoning branch turns it red on the marked ERNIE name. PAGI-353 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 25628d8da..09ad5d1df 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -504,6 +504,28 @@ func TestTheHintReportsQwenThinkingOffUntilAsked(t *testing.T) { } } +func TestOptInAloneDoesNotMakeTheHintReportThinkingOff(t *testing.T) { + t.Parallel() + + for _, model := range []string{"mistral-medium-latest", "mistral-small-latest"} { + if !reasoning.ThinkingOptIn(model) { + t.Fatalf("%s: the door no longer counts it opt-in, so the case no longer covers what it claims", model) + } + if d := ReasoningSupportFor(model, reasoning.ProviderOpenAI).DefaultOn; d != nil { + t.Errorf("%s DefaultOn = %v, want nil: Mistral documents no default for reasoning_effort, and the "+ + "door's off sends nothing, so a false here offers an off that may do nothing", model, *d) + } + } + + const marked = "ernie-4.5-21b-a3b-thinking" + if !reasoning.ThinkingOptIn(marked) || !reasoning.ThinkingMarkedInName(marked) { + t.Fatalf("%s: no longer both opt-in and marked thinking, so the case no longer covers what it claims", marked) + } + if d := ReasoningSupportFor(marked, reasoning.ProviderOpenAI).DefaultOn; d != nil && !*d { + t.Errorf("%s DefaultOn = false, but the door counts the thinking marker in its name as thinking on", marked) + } +} + func TestTheOllamaDoorKeepsTheOffControlItsVendorDocuments(t *testing.T) { t.Parallel() From 07f62d5bdc53ffae034a2d91d4d130c81594e0bc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 01:59:54 +0300 Subject: [PATCH 508/618] test: pin six guards whose negation no test noticed (PAGI-337) Six guards on the main path could be negated or have their return flipped while every test stayed green: - the bedrock LLM copying WithTopK into the Converse input; - the Converse reporter reading the top_p the request carries; - the openai reporter reading the effort and the budget out of the modern reasoning object (two guards); - the ollama door treating a model as local when it has no server address, which only a zero-value LLM reaches: New always fills the address from OLLAMA_HOST or the default; - the mistral embeddings pausing before a retry. Each now has a test that reads the request or the report the guard shapes, and negating the guard turns that test red; the ollama test also panics when the nil check is removed. Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_top_k_test.go | 42 +++++++++ .../bedrockclient/converse_warnings_test.go | 28 +++++- llms/mistral/embed_transport_test.go | 32 +++++++ llms/ollama/ollama_test.go | 14 +++ llms/openai/sampling_warnings_test.go | 85 ++++++++++++++++++- 5 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 llms/bedrock/converse_top_k_test.go diff --git a/llms/bedrock/converse_top_k_test.go b/llms/bedrock/converse_top_k_test.go new file mode 100644 index 000000000..74291a16b --- /dev/null +++ b/llms/bedrock/converse_top_k_test.go @@ -0,0 +1,42 @@ +package bedrock_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/bedrock" +) + +func TestTheTopKPassedToTheLLMReachesTheConverseRequest(t *testing.T) { + t.Parallel() + + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, converseAnswer) + })) + t.Cleanup(srv.Close) + + llm := bedrockLLMAgainst(t, srv, + bedrock.WithModel("anthropic.claude-haiku-4-5-20251001-v1:0"), bedrock.WithConverseAPI()) + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "how many rooms are free?")}, + llms.WithTopK(40)) + require.NoError(t, err) + + var sent struct { + Fields map[string]any `json:"additionalModelRequestFields"` + } + require.NoError(t, json.Unmarshal(body, &sent)) + assert.Equal(t, map[string]any{"top_k": float64(40)}, sent.Fields) + assert.Empty(t, resp.Warnings) +} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index e47ec8793..9104c8fad 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -15,6 +15,13 @@ import ( func converseCall(t *testing.T, in *ConverseInput) *llms.ContentResponse { t.Helper() + resp, _ := converseCallSending(t, in) + return resp +} + +func converseCallSending(t *testing.T, in *ConverseInput) (*llms.ContentResponse, *bedrockruntime.ConverseInput) { + t.Helper() + mockClient := &MockBedrockRuntimeClient{} mockClient.On("Converse", mock.Anything, mock.Anything, mock.Anything).Return( &bedrockruntime.ConverseOutput{ @@ -29,7 +36,10 @@ func converseCall(t *testing.T, in *ConverseInput) *llms.ContentResponse { resp, err := NewConverseClient(mockClient).CreateCompletionConverse(context.Background(), in) require.NoError(t, err) - return resp + mockClient.AssertNumberOfCalls(t, "Converse", 1) + sent, ok := mockClient.Calls[0].Arguments.Get(1).(*bedrockruntime.ConverseInput) + require.True(t, ok, "the door must hand the SDK a converse input") + return resp, sent } func converseWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { @@ -137,6 +147,22 @@ func TestConverseStaysSilentOnATopKItCarries(t *testing.T) { require.NotContains(t, converseWarningsByOption(resp.Warnings), "WithTopK") } +func TestConverseStaysSilentOnATopPItCarries(t *testing.T) { + t.Parallel() + + topP, maxTokens := 0.9, 1000 + resp, sent := converseCallSending(t, &ConverseInput{ + Messages: humanTurn(), + ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", + TopP: &topP, + MaxTokens: &maxTokens, + }) + + require.NotNil(t, sent.InferenceConfig.TopP, "a lone top_p stays on the request") + require.InDelta(t, topP, *sent.InferenceConfig.TopP, 1e-6) + require.Empty(t, resp.Warnings) +} + func TestConverseReportsAThinkingBudgetItCut(t *testing.T) { t.Parallel() diff --git a/llms/mistral/embed_transport_test.go b/llms/mistral/embed_transport_test.go index 9945dc63c..0a57d7672 100644 --- a/llms/mistral/embed_transport_test.go +++ b/llms/mistral/embed_transport_test.go @@ -5,6 +5,7 @@ import ( "io" "net/http" "net/http/httptest" + "sync" "sync/atomic" "testing" "time" @@ -64,6 +65,37 @@ func TestARetriedEmbeddingCallReturnsTheVectorItEventuallyGot(t *testing.T) { assert.Equal(t, int32(3), atomic.LoadInt32(seen)) } +func TestARetryWaitsBeforeItAsksAgain(t *testing.T) { + t.Parallel() + + var mu sync.Mutex + var arrivals []time.Time + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + mu.Lock() + arrivals = append(arrivals, time.Now()) + isFirst := len(arrivals) == 1 + mu.Unlock() + if isFirst { + w.WriteHeader(http.StatusServiceUnavailable) + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"data":[{"embedding":[0.1,0.2]}]}`) + })) + t.Cleanup(srv.Close) + + m, err := New(WithEndpoint(srv.URL), WithAPIKey("k"), WithMaxRetries(2)) + require.NoError(t, err) + _, err = m.CreateEmbedding(context.Background(), []string{"x"}) + require.NoError(t, err) + + mu.Lock() + defer mu.Unlock() + require.Len(t, arrivals, 2) + assert.GreaterOrEqual(t, arrivals[1].Sub(arrivals[0]), retryBackoffStep, + "a vendor that answered 503 gets a pause before the next request") +} + func TestARefusalTheVendorWillNotChangeIsNotRetried(t *testing.T) { t.Parallel() diff --git a/llms/ollama/ollama_test.go b/llms/ollama/ollama_test.go index e2dff1674..0c7ac3b92 100644 --- a/llms/ollama/ollama_test.go +++ b/llms/ollama/ollama_test.go @@ -611,6 +611,20 @@ func TestACloudModelOffloadedByALocalServerGetsNoFormat(t *testing.T) { "a model the local server runs itself keeps JSON mode") } +func TestAnLLMWithNoServerAddressTreatsItsModelAsLocal(t *testing.T) { + t.Parallel() + + o := &LLM{} + for model, want := range map[string]string{ + "gpt-oss:120b": `"json"`, + "gpt-oss:120b-cloud": `""`, + } { + format, err := o.resolveFormat(llms.CallOptions{Model: &model, JSONMode: true}) + require.NoError(t, err, model) + assert.Equal(t, want, string(format), model) + } +} + func TestTheCloudDropWarningReachesTheResponse(t *testing.T) { t.Parallel() diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index ec4dccf36..8a81687ea 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -2,6 +2,7 @@ package openai import ( "context" + "encoding/json" "io" "net/http" "net/http/httptest" @@ -15,18 +16,28 @@ import ( func sendForWarnings(t *testing.T, model string, opts ...llms.CallOption) *llms.ContentResponse { t.Helper() + resp, _ := sendForWarningsWith(t, model, nil, opts...) + return resp +} + +func sendForWarningsWith( + t *testing.T, model string, client []Option, opts ...llms.CallOption, +) (*llms.ContentResponse, map[string]any) { + t.Helper() + const completion = `{"id":"x","object":"chat.completion","created":1,"model":"m",` + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],` + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}` + var body []byte srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, _ = io.ReadAll(r.Body) + body, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") _, _ = io.WriteString(w, completion) })) t.Cleanup(srv.Close) - llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + llm, err := New(append([]Option{WithBaseURL(srv.URL), WithToken("test"), WithModel(model)}, client...)...) if err != nil { t.Fatalf("New() error: %v", err) } @@ -35,7 +46,11 @@ func sendForWarnings(t *testing.T, model string, opts ...llms.CallOption) *llms. if err != nil { t.Fatalf("GenerateContent() error: %v", err) } - return resp + var sent map[string]any + if err := json.Unmarshal(body, &sent); err != nil { + t.Fatalf("the request body is not JSON: %v", err) + } + return resp, sent } func warningFor(t *testing.T, resp *llms.ContentResponse, option string) llms.Warning { @@ -173,6 +188,70 @@ func TestAnEffortReplacedByABudgetIsReported(t *testing.T) { } } +func reasoningWarnings(resp *llms.ContentResponse) []llms.Warning { + var found []llms.Warning + for _, w := range resp.Warnings { + if w.Option == "WithReasoning" { + w.Reason = "" + found = append(found, w) + } + } + return found +} + +func TestTheEffortInTheReasoningObjectIsReadBack(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + asked llms.ReasoningEffort + want []llms.Warning + }{ + {llms.ReasoningHigh, nil}, + {llms.ReasoningXHigh, []llms.Warning{{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: "gpt-5.1", Asked: "xhigh", Sent: "high", + }}}, + } { + resp, sent := sendForWarningsWith(t, "gpt-5.1", []Option{WithModernReasoningFormat()}, + llms.WithReasoning(tc.asked, 0)) + + object, _ := sent["reasoning"].(map[string]any) + if object["effort"] != "high" { + t.Errorf("%s: reasoning on the wire = %v", tc.asked, sent["reasoning"]) + } + if got := reasoningWarnings(resp); !slices.Equal(got, tc.want) { + t.Errorf("%s: reasoning warnings = %v, want %v", tc.asked, got, tc.want) + } + } +} + +func TestTheBudgetInTheReasoningObjectIsReadBack(t *testing.T) { + t.Parallel() + + client := []Option{WithModernReasoningFormat(), WithUsingReasoningMaxTokens()} + for _, tc := range []struct { + asked int + wire float64 + want []llms.Warning + }{ + {4096, 4096, nil}, + {40000, 10922, []llms.Warning{{ + Kind: llms.WarningClamp, Option: "WithReasoning", Model: "anthropic/claude-sonnet-4-5", + Asked: "40000 tokens", Sent: "10922 tokens", + }}}, + } { + resp, sent := sendForWarningsWith(t, "anthropic/claude-sonnet-4-5", client, + llms.WithReasoning(llms.ReasoningNone, tc.asked), llms.WithMaxTokens(16384)) + + object, _ := sent["reasoning"].(map[string]any) + if object["max_tokens"] != tc.wire { + t.Errorf("%d tokens: reasoning on the wire = %v", tc.asked, sent["reasoning"]) + } + if got := reasoningWarnings(resp); !slices.Equal(got, tc.want) { + t.Errorf("%d tokens: reasoning warnings = %v, want %v", tc.asked, got, tc.want) + } + } +} + func TestAZeroPenaltyIsNotALoss(t *testing.T) { t.Parallel() From b54d2d95cc70f864a2b714be374a211ca8612472 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:01:41 +0300 Subject: [PATCH 509/618] fix(bedrock): leave an assistant turn that carries nothing off the Converse wire An assistant turn holding only an empty text part went to Converse as {"role":"assistant","content":[]}: the accumulator counted the empty text as content. Converse refuses that shape before any model sees it, 400 "The content field in the Message object at messages.1 is empty", on every family tried. There is no block to put in its place: Claude rejects an empty text block ("text content blocks must be non-empty"), and Claude and Nova reject a cache point alone ("There is nothing available to cache"). Such a turn now leaves nothing on the wire, exactly like a turn with no parts: the user text on both sides of it goes as one user message, the way consecutive human parts already do, and a cache marker on it is dropped with it instead of attaching to the next assistant turn. A turn of thinking alone or of a tool call alone still goes out, and an empty user text with a cache marker stays in its own turn. Direct Converse calls with the stand's AWS keys: this history was 400 on Claude Sonnet 4.6, Haiku 4.5 and Nova Lite, through Converse and ConverseStream alike, and answers 200 after the change. The wire test fails on the old code for the empty text and for the empty text with a cache marker. PAGI-336 Co-Authored-By: Claude Opus 5 --- llms/bedrock/converse_turn_shape_test.go | 92 +++++++++++++++++++ .../bedrockclient/bedrockclient_converse.go | 16 ++-- 2 files changed, 100 insertions(+), 8 deletions(-) diff --git a/llms/bedrock/converse_turn_shape_test.go b/llms/bedrock/converse_turn_shape_test.go index 3c4fc4859..35c685ad3 100644 --- a/llms/bedrock/converse_turn_shape_test.go +++ b/llms/bedrock/converse_turn_shape_test.go @@ -3,9 +3,11 @@ package bedrock_test import ( "context" "encoding/json" + "fmt" "io" "net/http" "net/http/httptest" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -13,6 +15,7 @@ import ( "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/bedrock" + "github.com/vxcontrol/langchaingo/llms/reasoning" ) type wireTurn struct { @@ -65,6 +68,95 @@ func TestOneHumanTurnReachesConverseAsOneMessage(t *testing.T) { assert.Contains(t, turns[0].Content[2], "text") } +func turnShapes(turns []wireTurn) []string { + shapes := make([]string, 0, len(turns)) + for _, turn := range turns { + blocks := make([]string, 0, len(turn.Content)) + for _, block := range turn.Content { + switch { + case block["text"] != nil: + blocks = append(blocks, fmt.Sprintf("text %v", block["text"])) + case block["cachePoint"] != nil: + blocks = append(blocks, "cache") + case block["toolUse"] != nil: + use, _ := block["toolUse"].(map[string]any) + blocks = append(blocks, fmt.Sprintf("tool %v", use["toolUseId"])) + case block["reasoningContent"] != nil: + thought, _ := block["reasoningContent"].(map[string]any) + text, _ := thought["reasoningText"].(map[string]any) + blocks = append(blocks, fmt.Sprintf("thought %v/%v", text["text"], text["signature"])) + default: + blocks = append(blocks, fmt.Sprintf("%v", block)) + } + } + shapes = append(shapes, turn.Role+": "+strings.Join(blocks, ", ")) + } + return shapes +} + +func TestAnEmptyAssistantTurnNeverReachesConverse(t *testing.T) { + t.Parallel() + + first := llms.TextParts(llms.ChatMessageTypeHuman, "first") + second := llms.TextParts(llms.ChatMessageTypeHuman, "second") + thought := reasoning.FromBlocks([]reasoning.Block{{Text: "plan", Signature: []byte("s1")}}) + + for name, tc := range map[string]struct { + history []llms.MessageContent + want []string + }{ + "an empty text": { + history: []llms.MessageContent{first, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{llms.TextContent{}}}, second}, + want: []string{"user: text first, text second"}, + }, + "a turn with no parts": { + history: []llms.MessageContent{first, {Role: llms.ChatMessageTypeAI}, second}, + want: []string{"user: text first, text second"}, + }, + "an empty text with a cache marker": { + history: []llms.MessageContent{ + first, + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + bedrock.WithCacheControl(llms.TextContent{}, bedrock.EphemeralCache()), + }}, + second, + llms.TextParts(llms.ChatMessageTypeAI, "answer"), + llms.TextParts(llms.ChatMessageTypeHuman, "third"), + }, + want: []string{"user: text first, text second", "assistant: text answer", "user: text third, cache"}, + }, + "thinking alone": { + history: []llms.MessageContent{first, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", thought), + }}, second}, + want: []string{"user: text first", "assistant: thought plan/s1", "user: text second"}, + }, + "a tool call alone": { + history: []llms.MessageContent{first, {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "A", Type: "function", FunctionCall: &llms.FunctionCall{Name: "lookup", Arguments: `{"q":"A"}`}}, + }}, second}, + want: []string{"user: text first", "assistant: tool A", "user: text second"}, + }, + "an empty user text with a cache marker": { + history: []llms.MessageContent{ + {Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{ + llms.TextPart("first"), + bedrock.WithCacheControl(llms.TextContent{}, bedrock.EphemeralCache()), + }}, + llms.TextParts(llms.ChatMessageTypeAI, "answer"), + second, + }, + want: []string{"user: text first, cache", "assistant: text answer", "user: text second, cache"}, + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + assert.Equal(t, tc.want, turnShapes(converseTurns(t, tc.history))) + }) + } +} + func TestAnAssistantTurnKeepsEveryTextItCarried(t *testing.T) { t.Parallel() diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 8a549b611..5b10e79dd 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -311,7 +311,6 @@ type aiMessageAccumulator struct { thoughts []reasoning.Block toolUseBlocks []types.ContentBlock cacheControl *CacheControl - hasAnyContent bool } // addTextContent adds text content to the accumulator @@ -321,8 +320,6 @@ func (a *aiMessageAccumulator) addTextContent(content string, reasoningContent * } a.thoughts = append(a.thoughts, reasoningContent.Sequence()...) - - a.hasAnyContent = true } // addToolUse adds a tool use block to the accumulator @@ -339,7 +336,6 @@ func (a *aiMessageAccumulator) addToolUse(toolCall *ToolCall) error { }, }) - a.hasAnyContent = true return nil } @@ -412,12 +408,11 @@ func (a *aiMessageAccumulator) reset() { a.thoughts = nil a.toolUseBlocks = nil a.cacheControl = nil - a.hasAnyContent = false } // isEmpty returns true if no content has been accumulated func (a *aiMessageAccumulator) isEmpty() bool { - return !a.hasAnyContent + return len(a.textBlocks) == 0 && len(a.thoughts) == 0 && len(a.toolUseBlocks) == 0 } // toolResultAccumulator accumulates consecutive tool result messages into a single user message @@ -477,8 +472,8 @@ func (c *ConverseClient) convertMessages(messages []Message) ([]types.Message, [ flushAI := func() error { if !aiAccum.isEmpty() { converseMessages = append(converseMessages, aiAccum.build()) - aiAccum.reset() } + aiAccum.reset() return nil } @@ -629,7 +624,7 @@ func (c *ConverseClient) addCachePointToMessages(messages []types.Message) { func nextSpeakingRole(messages []Message, from int) llms.ChatMessageType { for _, msg := range messages[from+1:] { - if msg.Role != llms.ChatMessageTypeSystem { + if msg.Role != llms.ChatMessageTypeSystem && !isEmptyAssistantPart(msg) { return msg.Role } } @@ -637,6 +632,11 @@ func nextSpeakingRole(messages []Message, from int) llms.ChatMessageType { return "" } +func isEmptyAssistantPart(msg Message) bool { + return msg.Role == llms.ChatMessageTypeAI && msg.ToolCall == nil && msg.Content == "" && + len(msg.Reasoning.Sequence()) == 0 +} + // ErrUnsupportedImageFormat reports a MIME type Converse has no image format for. var ErrUnsupportedImageFormat = errors.New("bedrock: unsupported image mime type") From 962f8d2e02509ad0a7c959923977a4500e51b15a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:02:24 +0300 Subject: [PATCH 510/618] fix(openai): leave DeepSeek's penalties out, and its temperature while it thinks A call to deepseek/deepseek-v4-pro in thinking mode carried the caller's temperature, and every DeepSeek call carried frequency_penalty and presence_penalty, all without a warning. DeepSeek's API reference marks both penalties "no longer supported. It will not take effect if you pass it to the API" and says of temperature "Has no effect in thinking mode"; its Thinking Mode guide keeps top_p in effect while the model thinks. DashScope's DeepSeek page lists presence_penalty as a value that cannot be set for every DeepSeek model it serves. The penalties now stay off every DeepSeek spelling, as grok's do. Temperature stays off while thinking runs, and only for the names DeepSeek's own API serves, bare or behind deepseek/: DashScope gives the same models a settable temperature, so dashscope/ and other hosts keep it. Thinking counts as off when the caller turned it off through WithExtraBody with DeepSeek's thinking object or effort none, the way DeepSeek's guide passes it. top_p stays. Each removal is reported as a Warning. The tests pin the wire and the warnings and fail on the code before the change; removing the penalty prefix, the temperature case, its reason, the extra-body check, the route prefix or a listed name turns them red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 102 +++++++++++++++++++++++++- llms/openai/openaillm.go | 15 ++++ llms/openai/sampling_warnings.go | 2 + llms/reasoning/effort_wire.go | 11 ++- llms/reasoning/effort_wire_test.go | 26 +++++++ 5 files changed, 154 insertions(+), 2 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 5d5714cbe..baf2e1303 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "net/http/httptest" + "strings" "testing" "github.com/vxcontrol/langchaingo/llms" @@ -76,6 +77,105 @@ func TestDeepSeekV32KeepsSamplingEvenWithAnEffortOnTheWire(t *testing.T) { } } +func TestDeepSeekThinkingLeavesOutTheTemperatureItIgnores(t *testing.T) { + t.Parallel() + + sampling := []llms.CallOption{llms.WithTemperature(0.4), llms.WithTopP(0.97)} + requests := map[string][]llms.CallOption{ + "deepseek-v4-pro": sampling, + "deepseek/deepseek-v4-pro": sampling, + "deepseek-v4-flash": sampling, + "deepseek-v4-pro with an effort": append([]llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0)}, sampling...), + "deepseek-v4-pro thinking by object": append([]llms.CallOption{thinkingInExtraBody("enabled")}, sampling...), + } + for name, opts := range requests { + model, _, _ := strings.Cut(name, " ") + + body := captureDeepSeekRequest(t, model, opts...) + if _, ok := body["temperature"]; ok { + t.Errorf("%s: thinking mode ignores temperature, got body: %v", name, body) + } + if body["top_p"] != 0.97 { + t.Errorf("%s: top_p takes effect while thinking and must stay, got body: %v", name, body) + } + + resp := sendForWarnings(t, model, opts...) + w := warningFor(t, resp, "WithTemperature") + if w.Kind != llms.WarningDrop || w.Asked != "0.4" || !strings.Contains(w.Reason, "ignores temperature") { + t.Errorf("%s: temperature warning = %+v", name, w) + } + for _, other := range resp.Warnings { + if other.Option == "WithTopP" { + t.Errorf("%s: top_p reached the wire, yet it is reported: %+v", name, other) + } + } + } +} + +func TestDeepSeekKeepsTheTemperatureOnceThinkingIsOff(t *testing.T) { + t.Parallel() + + for name, off := range map[string]llms.CallOption{ + "reasoning disabled": llms.WithReasoningDisabled(), + "thinking object in the body": thinkingInExtraBody("disabled"), + "effort none in the body": llms.WithExtraBody(map[string]any{"reasoning_effort": "none"}), + } { + opts := []llms.CallOption{off, llms.WithTemperature(0.4)} + if body := captureDeepSeekRequest(t, "deepseek-v4-pro", opts...); body["temperature"] != 0.4 { + t.Errorf("%s: non-thinking mode takes temperature, got body: %v", name, body) + } + if resp := sendForWarnings(t, "deepseek-v4-pro", opts...); len(resp.Warnings) != 0 { + t.Errorf("%s: nothing was lost, got %v", name, resp.Warnings) + } + } +} + +func TestDeepSeekOnAnotherHostKeepsItsTemperatureWhileThinking(t *testing.T) { + t.Parallel() + + for _, model := range []string{"dashscope/deepseek-v4-pro", "openrouter/deepseek/deepseek-v4-pro"} { + body := captureDeepSeekRequest(t, model, llms.WithTemperature(0.4), llms.WithReasoning(llms.ReasoningHigh, 0)) + if body["temperature"] != 0.4 { + t.Errorf("%s: only DeepSeek's own API documents temperature as ignored while thinking, got body: %v", + model, body) + } + } +} + +func TestDeepSeekNeverGetsThePenaltiesItNoLongerSupports(t *testing.T) { + t.Parallel() + + penalties := []llms.CallOption{llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.3)} + requests := map[string][]llms.CallOption{ + "deepseek-v4-pro": penalties, + "deepseek/deepseek-v4-pro": penalties, + "deepseek-flash": penalties, + "dashscope/deepseek-v4-pro": penalties, + "deepseek-v4-pro thinking off": append([]llms.CallOption{llms.WithReasoningDisabled()}, penalties...), + } + for name, opts := range requests { + model, _, _ := strings.Cut(name, " ") + + body := captureDeepSeekRequest(t, model, opts...) + for _, field := range []string{"frequency_penalty", "presence_penalty"} { + if _, ok := body[field]; ok { + t.Errorf("%s: %s takes no effect on DeepSeek, got body: %v", name, field, body) + } + } + + resp := sendForWarnings(t, model, opts...) + for option, asked := range map[string]string{"WithFrequencyPenalty": "0.5", "WithPresencePenalty": "0.3"} { + if w := warningFor(t, resp, option); w.Kind != llms.WarningDrop || w.Asked != asked { + t.Errorf("%s: %s warning = %+v", name, option, w) + } + } + } +} + +func thinkingInExtraBody(kind string) llms.CallOption { + return llms.WithExtraBody(map[string]any{"thinking": map[string]any{"type": kind}}) +} + func TestChatVariantsKeepTheTemperatureTheCallerSet(t *testing.T) { t.Parallel() @@ -105,7 +205,7 @@ func TestPenaltiesStayOffTheDoorsThatRefuseThem(t *testing.T) { } } - for _, model := range []string{"gpt-5.4", "deepseek-v4-pro", "glm-5.2", "mistral-medium-latest"} { + for _, model := range []string{"gpt-5.4", "glm-5.2", "mistral-medium-latest"} { body := captureDeepSeekRequest(t, model, llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.5)) if body["frequency_penalty"] != 0.5 || body["presence_penalty"] != 0.5 { diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 9a1722346..c18cb8f93 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -567,6 +567,8 @@ func (o *LLM) enforceSamplingPolicy(req *openaiclient.ChatRequest, opts llms.Cal req.PresencePenalty = nil req.LogProbs = false req.TopLogProbs = 0 + case ignoresTemperatureWhileThinking(model, opts, wireEffort): + req.Temperature = nil case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: req.TopP = nil } @@ -579,6 +581,19 @@ func refusesSamplingWhileThinking(model string, opts llms.CallOptions, wireEffor return reasoning.RejectsSamplingWhileThinking(model) || reasoning.ClaudeSupportsThinking(model) } +func ignoresTemperatureWhileThinking(model string, opts llms.CallOptions, wireEffort string) bool { + return reasoning.IgnoresTemperatureWhileThinking(model) && + thinkingRuns(model, opts, wireEffort) && !extraBodyStopsThinking(opts) +} + +func extraBodyStopsThinking(opts llms.CallOptions) bool { + extra := llms.ExtraBody(opts) + if thinking, ok := extra["thinking"].(map[string]any); ok && thinking["type"] == "disabled" { + return true + } + return extra["reasoning_effort"] == reasoning.OpenAIDisableEffort +} + // thinkingRuns reports whether the model reasons on this request: an effort // reached the wire, or none did and the model reasons until told otherwise. func thinkingRuns(model string, opts llms.CallOptions, wireEffort string) bool { diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 65bbbe55c..6cde4fd8e 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -93,6 +93,8 @@ func samplingReason(model string, opts llms.CallOptions, wireEffort string) stri return "the model runs on fixed sampling and refuses any value for it" case refusesSamplingWhileThinking(model, opts, wireEffort): return "the model refuses sampling while thinking" + case ignoresTemperatureWhileThinking(model, opts, wireEffort): + return "the model ignores temperature while thinking" default: return "the model does not accept this combination of sampling parameters" } diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 9a992550e..8ab76b808 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -2,6 +2,7 @@ package reasoning import ( "fmt" + "slices" "strings" ) @@ -9,13 +10,21 @@ import ( // must stay off the wire. func RejectsPenalties(model string) bool { for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "grok") { + if strings.HasPrefix(form, "grok") || strings.HasPrefix(form, "deepseek") { return true } } return false } +// deepSeekAPIModels mirrors the model names DeepSeek's own API serves, as its +// Models & Pricing page lists them. +var deepSeekAPIModels = []string{"deepseek-flash", "deepseek-v4-pro", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp"} + +func IgnoresTemperatureWhileThinking(model string) bool { + return slices.Contains(deepSeekAPIModels, strings.TrimPrefix(strings.ToLower(model), "deepseek/")) +} + // RejectsTopK reports whether top_k must stay off the wire. func RejectsTopK(model string) bool { return openAIProperName(model) diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 96996daf1..547d3eae4 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -71,6 +71,32 @@ func TestRejectsMinP(t *testing.T) { } } +func TestIgnoresTemperatureWhileThinking(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + ignores bool + }{ + {"deepseek-flash", true}, + {"deepseek-v4-pro", true}, + {"deepseek/deepseek-v4-pro", true}, + {"deepseek-v4-flash", true}, + {"deepseek-v4-flash-vision-exp", true}, + {"dashscope/deepseek-v4-pro", false}, + {"openrouter/deepseek/deepseek-v4-pro", false}, + {"deepseek-v4-flash-0731", false}, + {"deepseek-v4.1-flash", false}, + {"deepseek-r1", false}, + {"deepseek-v3.2", false}, + {"gpt-5.5", false}, + } { + if got := IgnoresTemperatureWhileThinking(tc.model); got != tc.ignores { + t.Errorf("IgnoresTemperatureWhileThinking(%q) = %v, want %v", tc.model, got, tc.ignores) + } + } +} + func TestResolveOffOnDoorsThatRejectEffort(t *testing.T) { t.Parallel() From 34a4387efb99f797dbf699caf394903bb108a1f0 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:04:14 +0300 Subject: [PATCH 511/618] test: pin the exact value every clamp and substitute warning reports (PAGI-337) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A warning's Sent is the caller's only record of what reached the wire, yet eight tests accepted any Sent that differed from Asked — an empty one included. Dropping the Sent field from the openai answer-limit clamp, from the anthropic and bedrock budget cuts, from the bedrock legacy clamp and substitute, from the Converse max-tokens clamp, or naming the wrong mechanism in the bedrock substitute, left all of them green. They now pin the exact Sent, and where the helper can see the request they check it against the value on the wire: max_completion_tokens and thinking_budget on openai, budget_tokens on anthropic, maxTokens and the thinking budget on Converse. Each of the mutations above now turns its test red. Co-Authored-By: Claude Opus 5 --- llms/anthropic/sampling_warnings_test.go | 25 +++++++++++++++--- .../converse_mechanism_warning_test.go | 9 ++++--- .../bedrockclient/converse_warnings_test.go | 26 ++++++++++++++++--- .../internal/bedrockclient/warnings_test.go | 8 +++--- llms/openai/sampling_warnings_test.go | 18 ++++++------- 5 files changed, 62 insertions(+), 24 deletions(-) diff --git a/llms/anthropic/sampling_warnings_test.go b/llms/anthropic/sampling_warnings_test.go index 964f77504..d6ee48cb2 100644 --- a/llms/anthropic/sampling_warnings_test.go +++ b/llms/anthropic/sampling_warnings_test.go @@ -1,6 +1,7 @@ package anthropic_test import ( + "encoding/json" "io" "net/http" "net/http/httptest" @@ -21,8 +22,18 @@ func generateForWarnings(t *testing.T, callOpts ...llms.CallOption) *llms.Conten func generateForModel(t *testing.T, model string, callOpts ...llms.CallOption) *llms.ContentResponse { t.Helper() + resp, _ := generateForModelSending(t, model, callOpts...) + return resp +} + +func generateForModelSending( + t *testing.T, model string, callOpts ...llms.CallOption, +) (*llms.ContentResponse, map[string]any) { + t.Helper() + + var body []byte srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, _ = io.ReadAll(r.Body) + body, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(`{"id":"msg_test","type":"message","role":"assistant",` + `"model":"` + model + `","content":[{"type":"text","text":"ok"}],` + @@ -43,7 +54,9 @@ func generateForModel(t *testing.T, model string, callOpts ...llms.CallOption) * }} resp, err := llm.GenerateContent(t.Context(), messages, callOpts...) require.NoError(t, err) - return resp + var sent map[string]any + require.NoError(t, json.Unmarshal(body, &sent)) + return resp, sent } func warningsByOption(warnings []llms.Warning) map[string]llms.Warning { @@ -146,7 +159,7 @@ func TestOptionsThisDoorBuildsNoFieldForAreReported(t *testing.T) { func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { t.Parallel() - resp := generateForWarnings(t, + resp, sent := generateForModelSending(t, warningsTestModel, llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningMedium, 30000)) var clamp *llms.Warning @@ -157,7 +170,11 @@ func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { } require.NotNil(t, clamp, "no budget clamp in %v", resp.Warnings) require.Equal(t, "30000 tokens", clamp.Asked) - require.NotEqual(t, clamp.Asked, clamp.Sent) + require.Equal(t, "2730 tokens", clamp.Sent) + + thinking, ok := sent["thinking"].(map[string]any) + require.True(t, ok, "no thinking on the wire: %v", sent) + require.EqualValues(t, 2730, thinking["budget_tokens"], "the warning reports the budget the request carries") } func TestAThinkingMechanismTheModelDoesNotOfferIsReported(t *testing.T) { diff --git a/llms/bedrock/converse_mechanism_warning_test.go b/llms/bedrock/converse_mechanism_warning_test.go index 2d13fee09..7631e4655 100644 --- a/llms/bedrock/converse_mechanism_warning_test.go +++ b/llms/bedrock/converse_mechanism_warning_test.go @@ -15,10 +15,11 @@ func TestAMechanismTheConverseDoorPickedInsteadOfAdaptiveIsReported(t *testing.T for _, family := range []struct { name string model string + sent string }{ - {"nova", "amazon.nova-2-lite-v1:0"}, - {"grok", "xai.grok-4-v1:0"}, - {"claude on a budget", "anthropic.claude-sonnet-4-5-v1:0"}, + {"nova", "amazon.nova-2-lite-v1:0", "effort"}, + {"grok", "xai.grok-4-v1:0", "effort"}, + {"claude on a budget", "anthropic.claude-sonnet-4-5-v1:0", "enabled"}, } { t.Run(family.name, func(t *testing.T) { t.Parallel() @@ -31,7 +32,7 @@ func TestAMechanismTheConverseDoorPickedInsteadOfAdaptiveIsReported(t *testing.T require.True(t, ok, "the door picked the mechanism unreported: %v", resp.Warnings) require.Equal(t, llms.WarningSubstitute, w.Kind) require.Equal(t, "adaptive", w.Asked) - require.NotEmpty(t, w.Sent) + require.Equal(t, family.sent, w.Sent) }) } } diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index 9104c8fad..e16d9e494 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -2,6 +2,7 @@ package bedrockclient import ( "context" + "encoding/json" "testing" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" @@ -42,6 +43,19 @@ func converseCallSending(t *testing.T, in *ConverseInput) (*llms.ContentResponse return resp, sent } +func sentAdditionalFields(t *testing.T, sent *bedrockruntime.ConverseInput) map[string]any { + t.Helper() + + if sent.AdditionalModelRequestFields == nil { + return nil + } + raw, err := sent.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(raw, &fields)) + return fields +} + func converseWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { byOption := make(map[string]llms.Warning, len(warnings)) for _, w := range warnings { @@ -54,7 +68,7 @@ func TestConverseReportsTheSamplingBudgetThinkingReshapes(t *testing.T) { t.Parallel() temperature, topP, maxTokens := 0.2, 0.9, 1000 - resp := converseCall(t, &ConverseInput{ + resp, sent := converseCallSending(t, &ConverseInput{ Messages: humanTurn(), ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", Temperature: &temperature, @@ -80,7 +94,9 @@ func TestConverseReportsTheSamplingBudgetThinkingReshapes(t *testing.T) { require.True(t, ok, "no max-tokens warning in %v", resp.Warnings) require.Equal(t, llms.WarningClamp, limit.Kind) require.Equal(t, "1000", limit.Asked) - require.NotEqual(t, limit.Asked, limit.Sent) + require.Equal(t, "2048", limit.Sent) + require.NotNil(t, sent.InferenceConfig.MaxTokens) + require.EqualValues(t, 2048, *sent.InferenceConfig.MaxTokens, "the warning reports the limit the request carries") } func TestConverseReportsTopPDroppedForTemperature(t *testing.T) { @@ -167,7 +183,7 @@ func TestConverseReportsAThinkingBudgetItCut(t *testing.T) { t.Parallel() maxTokens := 4096 - resp := converseCall(t, &ConverseInput{ + resp, sent := converseCallSending(t, &ConverseInput{ Messages: humanTurn(), ModelID: "us.anthropic.claude-sonnet-4-5-v1:0", MaxTokens: &maxTokens, @@ -178,7 +194,9 @@ func TestConverseReportsAThinkingBudgetItCut(t *testing.T) { require.True(t, ok, "no reasoning warning in %v", resp.Warnings) require.Equal(t, llms.WarningClamp, w.Kind) require.Equal(t, "30000 tokens", w.Asked) - require.NotEqual(t, w.Asked, w.Sent) + require.Equal(t, "2730 tokens", w.Sent) + require.Equal(t, map[string]any{"type": "enabled", "budget_tokens": float64(2730)}, + sentAdditionalFields(t, sent)["thinking"], "the warning reports the budget the request carries") } func TestConverseReportsAnEffortItLowered(t *testing.T) { diff --git a/llms/bedrock/internal/bedrockclient/warnings_test.go b/llms/bedrock/internal/bedrockclient/warnings_test.go index b3b6380ba..5c4c5a9e4 100644 --- a/llms/bedrock/internal/bedrockclient/warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/warnings_test.go @@ -123,11 +123,13 @@ func TestTheLegacyAnthropicPayloadReportsWhatThinkingReshaped(t *testing.T) { }) got := legacyWarningsByOption(resp.Warnings) - for _, option := range []string{"WithTemperature", "WithTopP", "WithTopK", "WithMaxTokens"} { + for option, sent := range map[string]string{ + "WithTemperature": "1", "WithTopP": "", "WithTopK": "", "WithMaxTokens": "2048", + } { w, ok := got[option] require.True(t, ok, "no %s warning in %v", option, resp.Warnings) require.Equal(t, model, w.Model) - require.NotEqual(t, w.Asked, w.Sent) + require.Equal(t, sent, w.Sent, option) } } @@ -157,7 +159,7 @@ func TestTheLegacyDoorReportsAThinkingBudgetItCut(t *testing.T) { require.True(t, ok, "no reasoning warning in %v", resp.Warnings) require.Equal(t, llms.WarningClamp, w.Kind) require.Equal(t, "30000 tokens", w.Asked) - require.NotEqual(t, w.Asked, w.Sent) + require.Equal(t, "2730 tokens", w.Sent) } func TestTheLegacyDoorReportsAnEffortItLowered(t *testing.T) { diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 8a81687ea..3538d9c47 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -137,30 +137,30 @@ func TestAnEffortOnAModelThatSendsNoneIsReported(t *testing.T) { func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { t.Parallel() - resp := sendForWarnings(t, "claude-sonnet-4-5", + resp, sent := sendForWarningsWith(t, "claude-sonnet-4-5", nil, llms.WithMaxTokens(1000), llms.WithReasoning(llms.ReasoningMedium, 4096)) w := warningFor(t, resp, "WithMaxTokens") - if w.Kind != llms.WarningClamp || w.Asked != "1000" { + if w.Kind != llms.WarningClamp || w.Asked != "1000" || w.Sent != "4096" { t.Errorf("max-tokens warning = %+v", w) } - if w.Sent == w.Asked { - t.Errorf("max-tokens warning reports no change: %+v", w) + if got := sent["max_completion_tokens"]; got != float64(4096) { + t.Errorf("max_completion_tokens on the wire = %v, want the 4096 the warning reports", got) } } func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { t.Parallel() - resp := sendForWarnings(t, "qwen3-max", + resp, sent := sendForWarningsWith(t, "qwen3-max", nil, llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) w := warningFor(t, resp, "WithReasoning") - if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" { - t.Fatalf("reasoning warning = %+v (all: %v)", w, resp.Warnings) + if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" || w.Sent != "2730 tokens" { + t.Errorf("reasoning warning = %+v (all: %v)", w, resp.Warnings) } - if w.Sent == w.Asked || w.Sent == "" { - t.Errorf("reasoning warning reports no cut: %+v", w) + if got := sent["thinking_budget"]; got != float64(2730) { + t.Errorf("thinking_budget on the wire = %v, want the 2730 the warning reports", got) } } From 9f2d8d79ad624ab6d1b0dca7fdbc5587619e7f28 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:05:26 +0300 Subject: [PATCH 512/618] fix(openai): leave top_k off MiniMax's API, which has no field for it minimax/MiniMax-M3 with WithTopK(40) put top_k on the wire with no warning, and every pentagi agent on MiniMax sets it. Neither MiniMax reference has the field: the OpenAI-compatible Chat Completions schema lists model, service_tier, messages, thinking, reasoning_split, stream, stream_options, max_completion_tokens, temperature, top_p, tools and max_tokens, and the native Text Generation V2 schema has no top_k either. The vendor also accepts a non-numeric top_k, so it does not read the field. top_k now stays off MiniMax names, bare or behind minimax/, and the caller gets a Warning that the vendor's API has no top_k field. MiniMax served by another host keeps it. The field drops move out of createChatRequest into one helper so the function stays within the statement limit. The tests fail on the code before the change; removing the drop, the route prefix or the host check, or reusing the endpoint-refuses reason, turns them red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 39 ++++++++++++++++----------- llms/openai/sampling_warnings_test.go | 30 +++++++++++++++++++++ llms/reasoning/effort_wire.go | 8 ++++++ 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index c18cb8f93..3875eca24 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -291,22 +291,7 @@ func (o *LLM) createChatRequest( ExtraBody: getExtraBody(&opts), } - model := o.effectiveModel(opts) - if reasoning.RejectsPenalties(model) { - const refused = "the door does not send the penalties on this model family" - addNonZeroChange(warn, "WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) - addNonZeroChange(warn, "WithPresencePenalty", model, refused, req.PresencePenalty, nil) - req.FrequencyPenalty = nil - req.PresencePenalty = nil - } - if reasoning.RejectsTopK(model) && req.TopK != nil { - addNonZeroIntChange(warn, "WithTopK", model, refusedByEndpoint, req.TopK, nil) - req.TopK = nil - } - if reasoning.RejectsRepetitionPenalty(model) && req.RepetitionPenalty != nil { - addNonZeroChange(warn, "WithRepetitionPenalty", model, refusedByEndpoint, req.RepetitionPenalty, nil) - req.RepetitionPenalty = nil - } + dropFieldsTheModelTakesNot(req, o.effectiveModel(opts), warn) if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) { if opts.StreamingFunc == nil { @@ -359,6 +344,28 @@ func (o *LLM) createChatRequest( return req, nil } +func dropFieldsTheModelTakesNot(req *openaiclient.ChatRequest, model string, warn *llms.Warnings) { + if reasoning.RejectsPenalties(model) { + const refused = "the door does not send the penalties on this model family" + addNonZeroChange(warn, "WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) + addNonZeroChange(warn, "WithPresencePenalty", model, refused, req.PresencePenalty, nil) + req.FrequencyPenalty = nil + req.PresencePenalty = nil + } + if reasoning.RejectsTopK(model) && req.TopK != nil { + addNonZeroIntChange(warn, "WithTopK", model, refusedByEndpoint, req.TopK, nil) + req.TopK = nil + } + if reasoning.TakesNoTopK(model) && req.TopK != nil { + addNonZeroIntChange(warn, "WithTopK", model, "the vendor's API has no top_k field", req.TopK, nil) + req.TopK = nil + } + if reasoning.RejectsRepetitionPenalty(model) && req.RepetitionPenalty != nil { + addNonZeroChange(warn, "WithRepetitionPenalty", model, refusedByEndpoint, req.RepetitionPenalty, nil) + req.RepetitionPenalty = nil + } +} + // effectiveModel resolves the model the request runs on: a per-call model wins, // then the client default, and finally the package default the client itself // substitutes on the wire — so capability decisions (reasoning-off, effort clamp, diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index ec4dccf36..4e927fd76 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -246,6 +246,36 @@ func TestAVendorThatTakesTopKStillGetsIt(t *testing.T) { } } +func TestMiniMaxGetsNoTopKItsAPIHasNoFieldFor(t *testing.T) { + t.Parallel() + + for _, model := range []string{"MiniMax-M3", "minimax/MiniMax-M3", "MiniMax-M2.7", "MiniMax-M2.7-highspeed"} { + body := sendForWire(t, model, llms.WithTopK(40), llms.WithTopP(0.95)) + if strings.Contains(body, `"top_k"`) { + t.Errorf("%s: MiniMax's API documents no top_k, got body: %s", model, body) + } + if !strings.Contains(body, `"top_p":0.95`) { + t.Errorf("%s: MiniMax documents top_p and must keep getting it, got body: %s", model, body) + } + + resp := sendForWarnings(t, model, llms.WithTopK(40)) + w := warningFor(t, resp, "WithTopK") + if w.Kind != llms.WarningDrop || w.Asked != "40" || !strings.Contains(w.Reason, "no top_k") { + t.Errorf("%s: top-k warning = %+v", model, w) + } + } +} + +func TestMiniMaxOnAnotherHostKeepsTopK(t *testing.T) { + t.Parallel() + + for _, model := range []string{"openrouter/minimax/minimax-m3", "minimax.minimax-m2.5"} { + if body := sendForWire(t, model, llms.WithTopK(40)); !strings.Contains(body, `"top_k":40`) { + t.Errorf("%s: only MiniMax's own API lacks top_k, got body: %s", model, body) + } + } +} + func TestTheDoorThatMergesExtraBodyReportsNoLoss(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 8ab76b808..f2e469314 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -30,6 +30,14 @@ func RejectsTopK(model string) bool { return openAIProperName(model) } +func TakesNoTopK(model string) bool { + return onMiniMaxAPI(model, "minimax-") +} + +func onMiniMaxAPI(model, family string) bool { + return strings.HasPrefix(strings.TrimPrefix(strings.ToLower(model), "minimax/"), family) +} + // RejectsRepetitionPenalty reports whether repetition_penalty must stay off the wire. func RejectsRepetitionPenalty(model string) bool { return openAIProperName(model) From 9475176c1e05d8e1c01142aec637c54e25d57a45 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:07:13 +0300 Subject: [PATCH 513/618] test: read the wire in the tests that only checked for no warning (PAGI-337) Three tests read "no warning" as "the value reached the vendor" without looking at the request: - the ai21 penalties test stayed green with the count penalty zeroed or numResults dropped from the payload, because the warning list comes from a model predicate, not from the body; - the Converse family-effort test stayed green for Nova with the reasoningConfig type flipped to disabled, because the reporter reads only maxReasoningEffort; - the mistral thinking-off test stayed green with the door writing a field for off. The ai21 test now reads countPenalty, frequencyPenalty, presencePenalty and numResults off the payload; the family test pins the whole additionalModelRequestFields of Nova and Grok; the mistral test checks that the off request equals the request of a caller who named no reasoning and carries no reasoning_effort. Each mutation above now turns its test red. Co-Authored-By: Claude Opus 5 --- .../bedrockclient/converse_warnings_test.go | 12 ++++++-- llms/bedrock/warnings_test.go | 28 +++++++++++++++++-- llms/mistral/warnings_test.go | 5 ++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index e16d9e494..f05fe089b 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -249,23 +249,29 @@ func TestConverseReadsTheEffortEveryFamilyWritesItsOwnWay(t *testing.T) { for _, tc := range []struct { model string effort llms.ReasoningEffort + wire map[string]any want *llms.Warning }{ - {"us.amazon.nova-2-lite-v1:0", llms.ReasoningHigh, nil}, - {"us.xai.grok-4.3", llms.ReasoningMax, &llms.Warning{ + {"us.amazon.nova-2-lite-v1:0", llms.ReasoningHigh, map[string]any{ + "reasoningConfig": map[string]any{"type": "enabled", "maxReasoningEffort": "high"}, + }, nil}, + {"us.xai.grok-4.3", llms.ReasoningMax, map[string]any{ + "reasoning": map[string]any{"effort": "xhigh"}, + }, &llms.Warning{ Kind: llms.WarningClamp, Option: "WithReasoning", Asked: "max", Sent: "xhigh", }}, } { t.Run(tc.model, func(t *testing.T) { t.Parallel() - resp := converseCall(t, &ConverseInput{ + resp, sent := converseCallSending(t, &ConverseInput{ Messages: humanTurn(), ModelID: tc.model, MaxTokens: &maxTokens, ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: tc.effort}, }) + require.Equal(t, tc.wire, sentAdditionalFields(t, sent), "the family's own shape carries the effort") got, ok := converseWarningsByOption(resp.Warnings)["WithReasoning"] if tc.want == nil { require.False(t, ok, "the effort reached the wire, so nothing was lost: %v", resp.Warnings) diff --git a/llms/bedrock/warnings_test.go b/llms/bedrock/warnings_test.go index eaaaa3c00..d162759a1 100644 --- a/llms/bedrock/warnings_test.go +++ b/llms/bedrock/warnings_test.go @@ -2,6 +2,7 @@ package bedrock_test import ( "context" + "encoding/json" "io" "net/http" "net/http/httptest" @@ -16,8 +17,18 @@ import ( func bedrockWarningsFor(t *testing.T, answer string, opts []bedrock.Option, call ...llms.CallOption) *llms.ContentResponse { t.Helper() + resp, _ := bedrockWarningsSending(t, answer, opts, call...) + return resp +} + +func bedrockWarningsSending( + t *testing.T, answer string, opts []bedrock.Option, call ...llms.CallOption, +) (*llms.ContentResponse, map[string]any) { + t.Helper() + + var body []byte srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, _ = io.ReadAll(r.Body) + body, _ = io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") _, _ = io.WriteString(w, answer) })) @@ -27,7 +38,9 @@ func bedrockWarningsFor(t *testing.T, answer string, opts []bedrock.Option, call resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, call...) require.NoError(t, err) - return resp + var sent map[string]any + require.NoError(t, json.Unmarshal(body, &sent)) + return resp, sent } func bedrockWarningsByOption(warnings []llms.Warning) map[string]llms.Warning { @@ -94,7 +107,7 @@ func TestAPayloadThatCarriesThePenaltiesReportsNoLoss(t *testing.T) { const ai21Answer = `{"completions":[{"data":{"text":"ok"},"finishReason":{"reason":"endoftext"}}]}` - resp := bedrockWarningsFor(t, ai21Answer, + resp, sent := bedrockWarningsSending(t, ai21Answer, []bedrock.Option{bedrock.WithModel("ai21.j2-ultra-v1")}, llms.WithRepetitionPenalty(1.1), llms.WithFrequencyPenalty(0.3), llms.WithPresencePenalty(0.7), llms.WithCandidateCount(3), @@ -108,6 +121,15 @@ func TestAPayloadThatCarriesThePenaltiesReportsNoLoss(t *testing.T) { require.NotContains(t, got, option, "the ai21 payload carries it: %v", resp.Warnings) } require.Contains(t, got, "WithMinP", "no payload carries min-p") + + for field, want := range map[string]any{ + "countPenalty": map[string]any{"scale": 1.1}, + "frequencyPenalty": map[string]any{"scale": 0.3}, + "presencePenalty": map[string]any{"scale": 0.7}, + "numResults": float64(3), + } { + require.Equal(t, want, sent[field], "%s on the ai21 payload", field) + } } func TestTheConversePathReportsWhatTheLegacyPayloadWouldHaveCarried(t *testing.T) { diff --git a/llms/mistral/warnings_test.go b/llms/mistral/warnings_test.go index 18d8eb847..ca32930b8 100644 --- a/llms/mistral/warnings_test.go +++ b/llms/mistral/warnings_test.go @@ -75,6 +75,11 @@ func TestSwitchingThinkingOffOnMistralIsNotALoss(t *testing.T) { resp := generateForWarnings(t, llms.WithReasoningDisabled()) require.Empty(t, resp.Warnings, "every mistral model disables by omission, so sending no field is the off wire, not a dropped intent") + + off := chatBodyOnTheWire(t, llms.WithSeed(7), llms.WithReasoningDisabled()) + require.NotContains(t, off, "reasoning_effort") + require.Equal(t, chatBodyOnTheWire(t, llms.WithSeed(7)), off, + "off by omission is the request a caller who named no reasoning sends") } func TestAPlainMistralCallCarriesNoWarnings(t *testing.T) { From 7032ea03423abd087a443c63bddf100d93cac3e7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:07:33 +0300 Subject: [PATCH 514/618] fix(openai): refuse a JSON schema for MiniMax M-series before the request minimax/MiniMax-M3 with WithStructuredOutput sent response_format json_schema, got prose back, and the library failed on schema validation only after the paid call. MiniMax's OpenAI-compatible Chat Completions schema has no response_format field for any of its models, and its native Text Generation V2 reference says response_format is "only supported by MiniMax-Text-01". MiniMax M-series names, bare or behind minimax/, now return ErrStructuredOutputUnsupported before any request, with the reason that the vendor's API takes no response_format for the model. MiniMax-Text-01 and MiniMax on another host still get the schema. The tests fail on the code before the change and count the requests that reach the server: none may. Removing the refusal, widening it to MiniMax-Text-01 or dropping the reason turns them red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/structured_output.go | 2 + llms/openai/structured_output_unit_test.go | 45 ++++++++++++++++++++++ llms/reasoning/effort_wire.go | 4 ++ 3 files changed, 51 insertions(+) diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index 05084e79f..d8e0901cb 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -100,6 +100,8 @@ func openAIStructuredOutputUnsupported(model string) string { switch { case reasoning.TakesNoJSONSchema(model): return "the vendor's chat completions response_format takes only text and json_object" + case reasoning.TakesNoResponseFormat(model): + return "the vendor's chat completions API takes no response_format for this model" case strings.HasPrefix(m, "gpt-3.5"): return predates case m == "gpt-4", strings.HasPrefix(m, "gpt-4-0"), strings.HasPrefix(m, "gpt-4-32k"), strings.HasPrefix(m, "gpt-4-turbo"): diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index 8cc04e8d0..453f25b5e 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "net/http/httptest" + "strings" + "sync/atomic" "testing" "github.com/vxcontrol/langchaingo/callbacks" @@ -157,6 +159,19 @@ func TestCreateChatRequest_ResponseFormatModes(t *testing.T) { //nolint:funlen / } }) + t.Run("MiniMax outside its own M-series API keeps the schema", func(t *testing.T) { + t.Parallel() + for _, model := range []string{"MiniMax-Text-01", "openrouter/minimax/minimax-m3"} { + llm := newUnitLLM(t, WithModel(model)) + var opts llms.CallOptions + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) + req, err := llm.createChatRequest(nil, opts, nil) + if err != nil || req.ResponseFormat.FormatType() != "json_schema" { + t.Fatalf("%s: want json_schema, got %+v, %v", model, req, err) + } + } + }) + t.Run("unknown model passes through", func(t *testing.T) { t.Parallel() llm := newUnitLLM(t, WithModel("gpt-6-ultra-preview")) @@ -446,3 +461,33 @@ func TestStructuredOutputValidationFailureFiresSingleErrorCallback(t *testing.T) t.Fatalf("callback counts: starts=%d errs=%d ends=%d; want 1/1/0", h.starts, h.errs, h.ends) } } + +func TestMiniMaxJSONSchemaIsRefusedWithoutARequest(t *testing.T) { + t.Parallel() + + for _, model := range []string{"MiniMax-M3", "minimax/MiniMax-M3", "MiniMax-M2.7", "MiniMax-M2.7-highspeed"} { + var calls atomic.Int32 + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls.Add(1) + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"prose"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm := newUnitLLM(t, WithBaseURL(srv.URL), WithModel(model)) + _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})) + + var unsup *llms.ErrStructuredOutputUnsupported + if !errors.As(err, &unsup) || !strings.Contains(unsup.Reason, "response_format") { + t.Errorf("%s: want ErrStructuredOutputUnsupported naming response_format, got %v", model, err) + } + if n := calls.Load(); n != 0 { + t.Errorf("%s: a schema MiniMax cannot honor must not cost a request, got %d", model, n) + } + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index f2e469314..2267b4bd0 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -34,6 +34,10 @@ func TakesNoTopK(model string) bool { return onMiniMaxAPI(model, "minimax-") } +func TakesNoResponseFormat(model string) bool { + return onMiniMaxAPI(model, "minimax-m") +} + func onMiniMaxAPI(model, family string) bool { return strings.HasPrefix(strings.TrimPrefix(strings.ToLower(model), "minimax/"), family) } From b9e5acba3166905c77e73ea58e76d2eb777b922d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:09:21 +0300 Subject: [PATCH 515/618] test: pin the exact depth a named effort gets under adaptive on googleai (PAGI-337) Two googleai tests accepted any depth for an effort named alongside adaptive: a thinking budget above zero on gemini-2.5-flash, and a non-empty level on gemma-4. Replacing the named depth with the adaptive default budget, or sending MEDIUM for gemma's on state, left both green. The budget test also asked only for high, which is the adaptive default itself, so it could not tell a named effort from a hand-off. The budget test now walks low, medium and high at an 8192 limit and pins 2048, 2730 and 4096, each equal to the budget the same effort gets without adaptive. The level test pins LOW for gemini-3.5-flash and HIGH for gemma-4 whether the caller names low or high, since that family only switches thinking on. Both mutations above now turn these tests red. Co-Authored-By: Claude Opus 5 --- llms/googleai/adaptive_delegation_test.go | 23 ++++++++++++++++++----- llms/googleai/thinking_wire_test.go | 13 ++++++++++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/llms/googleai/adaptive_delegation_test.go b/llms/googleai/adaptive_delegation_test.go index f3433c1ee..474425cf8 100644 --- a/llms/googleai/adaptive_delegation_test.go +++ b/llms/googleai/adaptive_delegation_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "google.golang.org/genai" ) func TestNoFamilyInventsADepthTheCallerHandedToTheVendor(t *testing.T) { @@ -40,9 +41,21 @@ func TestNoFamilyInventsADepthTheCallerHandedToTheVendor(t *testing.T) { func TestAnEffortTheCallerNamedStillPicksTheLevel(t *testing.T) { t.Parallel() - config, err := resolveThinkingConfig("gemma-4-27b-it", - &llms.ReasoningConfig{Adaptive: true, Effort: llms.ReasoningHigh}, 0) - require.NoError(t, err) - require.NotNil(t, config) - assert.NotEmpty(t, config.ThinkingLevel, "a named effort is a depth the caller chose") + for _, tc := range []struct { + model string + effort llms.ReasoningEffort + want genai.ThinkingLevel + why string + }{ + {"gemini-3.5-flash", llms.ReasoningLow, genai.ThinkingLevelLow, "a named effort is a depth the caller chose"}, + {"gemma-4-27b-it", llms.ReasoningHigh, genai.ThinkingLevelHigh, "a named effort is a depth the caller chose"}, + {"gemma-4-27b-it", llms.ReasoningLow, genai.ThinkingLevelHigh, "this family only switches thinking on, and on is HIGH"}, + } { + config, err := resolveThinkingConfig(tc.model, + &llms.ReasoningConfig{Adaptive: true, Effort: tc.effort}, 0) + require.NoError(t, err) + require.NotNil(t, config) + assert.Equal(t, tc.want, config.ThinkingLevel, "%s %s: %s", tc.model, tc.effort, tc.why) + assert.Nil(t, config.ThinkingBudget, "%s takes a level, not a budget", tc.model) + } } diff --git a/llms/googleai/thinking_wire_test.go b/llms/googleai/thinking_wire_test.go index 74ab2e149..46232a229 100644 --- a/llms/googleai/thinking_wire_test.go +++ b/llms/googleai/thinking_wire_test.go @@ -151,9 +151,16 @@ func TestAModelThatDoesNotThinkGetsNoThinkingConfig(t *testing.T) { func TestAdaptiveWithANamedEffortStillHonoursThatEffort(t *testing.T) { t.Parallel() - budget := budgetOnTheWire(t, "gemini-2.5-flash", - llms.WithAdaptiveReasoning(llms.ReasoningHigh), llms.WithMaxTokens(8192)) - assert.Greater(t, budget, float64(0), "a named effort is a depth, not a hand-off") + for effort, want := range map[llms.ReasoningEffort]float64{ + llms.ReasoningLow: 2048, llms.ReasoningMedium: 2730, llms.ReasoningHigh: 4096, + } { + adaptive := budgetOnTheWire(t, "gemini-2.5-flash", + llms.WithAdaptiveReasoning(effort), llms.WithMaxTokens(8192)) + named := budgetOnTheWire(t, "gemini-2.5-flash", + llms.WithReasoning(effort, 0), llms.WithMaxTokens(8192)) + assert.Equal(t, want, adaptive, "%s: a named effort is a depth, not a hand-off", effort) + assert.Equal(t, named, adaptive, "%s: adaptive must not change the depth the effort names", effort) + } tc := thinkingConfigFor(t, "gemini-3.5-flash", llms.WithAdaptiveReasoning(llms.ReasoningMedium), llms.WithMaxTokens(8192)) From b70ab1dc4e7dd95f73bdccb23cedeb36e9f3913b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:10:09 +0300 Subject: [PATCH 516/618] test: the mistral Call refusal must be the truncation error (PAGI-337) TestCallRefusesATruncatedAnswerWhenAskedTo accepted any error, so a door that failed the call for another reason passed it: negating the empty-choices check in the non-streaming path makes Call fail with "unexpected response from Mistral SDK" before truncation is ever looked at, and the test stayed green. It now requires llms.IsTruncatedError, and the same mutation turns it red. Co-Authored-By: Claude Opus 5 --- llms/mistral/call_parity_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/llms/mistral/call_parity_test.go b/llms/mistral/call_parity_test.go index abf9edd36..01f8f1093 100644 --- a/llms/mistral/call_parity_test.go +++ b/llms/mistral/call_parity_test.go @@ -78,4 +78,5 @@ func TestCallRefusesATruncatedAnswerWhenAskedTo(t *testing.T) { _, err = m.Call(context.Background(), "hi", llms.WithMaxTokens(16), llms.WithFailOnTruncation()) require.Error(t, err, "Call must refuse a truncated answer when the caller forbade truncation") + require.True(t, llms.IsTruncatedError(err), "the refusal must say the answer was cut, got %v", err) } From 973ff6b31825e882afa1c899f9611bfc64c32cac Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:14:03 +0300 Subject: [PATCH 517/618] test(llmtest): fail a door that takes tools and never calls one (PAGI-337) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The conformance suite offered get_weather, asked for the weather in San Francisco, and when the answer carried no tool call it only logged "the model may not support tools". Any door that dropped the tools on the floor, or answered in prose, passed the ToolCalls subtest. A door the tool probe accepts must now answer with the call, or the subtest fails. A door that takes the tools field but cannot call — the fake LLM and the MockLLM — declares it at the call site with the new WithoutToolCalls option, the same way WithoutStreaming declares a door that cannot stream. Two suite self-tests pin the verdict: prose fails it, a get_weather call passes; logging, skipping, or ignoring the declaration each turns one of them red. The bedrock TestLLM and TestLLMConverse recordings already carry a get_weather call and stay green; the openai suite passes live against gpt-4.1-mini through the gateway's OpenAI passthrough. Co-Authored-By: Claude Opus 5 --- llms/fake/llmtest_test.go | 2 +- testing/llmtest/doc.go | 3 +- testing/llmtest/llmtest.go | 22 +++++++------ testing/llmtest/llmtest_test.go | 56 ++++++++++++++++++++++++++++++++- 4 files changed, 71 insertions(+), 12 deletions(-) diff --git a/llms/fake/llmtest_test.go b/llms/fake/llmtest_test.go index c5c3600cd..a734a15ba 100644 --- a/llms/fake/llmtest_test.go +++ b/llms/fake/llmtest_test.go @@ -35,5 +35,5 @@ func TestLLM(t *testing.T) { llm := NewFakeLLM(responses) // Test basic functionality only - llmtest.TestLLM(t, llm) + llmtest.TestLLM(t, llm, llmtest.WithoutToolCalls()) } diff --git a/testing/llmtest/doc.go b/testing/llmtest/doc.go index 468d497a1..98c896d43 100644 --- a/testing/llmtest/doc.go +++ b/testing/llmtest/doc.go @@ -30,7 +30,8 @@ // The package automatically detects and tests supported capabilities: // - Basic operations (Call, GenerateContent) // - Streaming (unless the call site passes WithoutStreaming) -// - Tool/Function calling (probed with test tool) +// - Tool/Function calling (probed with a test tool; a door that takes the +// tools must answer with a call unless the call site passes WithoutToolCalls) // - Reasoning/Thinking mode (if supported) // - Token counting (if usage information provided) // - Context caching (if implemented) diff --git a/testing/llmtest/llmtest.go b/testing/llmtest/llmtest.go index fae049794..1d8816e51 100644 --- a/testing/llmtest/llmtest.go +++ b/testing/llmtest/llmtest.go @@ -68,7 +68,7 @@ func TestLLM(t *testing.T, model llms.Model, opts ...Option) { } // Test tool calls if supported - if supportsTools(model) { + if !declared.SkipToolCalls && supportsTools(model) { t.Run("ToolCalls", func(t *testing.T) { t.Parallel() testToolCalls(t, model) @@ -153,6 +153,12 @@ func WithoutStreaming() Option { return func(o *TestOptions) { o.SkipStreaming = true } } +// WithoutToolCalls declares a door that takes tools but never answers with a +// call, so the suite must not hold it to that contract. +func WithoutToolCalls() Option { + return func(o *TestOptions) { o.SkipToolCalls = true } +} + // TestOptions configures test execution. type TestOptions struct { // Timeout for each test operation @@ -162,6 +168,7 @@ type TestOptions struct { SkipCall bool SkipGenerateContent bool SkipStreaming bool + SkipToolCalls bool // Custom test prompts TestPrompt string @@ -379,7 +386,7 @@ func assertStreams(t *testing.T, ctx context.Context, model llms.Model, messages } } -func testToolCalls(t *testing.T, model llms.Model) { +func testToolCalls(t testing.TB, model llms.Model) { t.Helper() ctx := context.Background() @@ -425,15 +432,12 @@ func testToolCalls(t *testing.T, model llms.Model) { t.Fatal("No choices in response") } - // Check if tool was called choice := resp.Choices[0] if len(choice.ToolCalls) == 0 { - t.Log("No tool calls in response (model may not support tools)") - } else { - toolCall := choice.ToolCalls[0] - if toolCall.FunctionCall.Name != "get_weather" { - t.Errorf("Expected get_weather tool call, got: %s", toolCall.FunctionCall.Name) - } + t.Fatalf("the door took the tools and answered without calling one: %q", choice.Content) + } + if call := choice.ToolCalls[0].FunctionCall; call == nil || call.Name != "get_weather" { + t.Errorf("expected a get_weather tool call, got %+v", choice.ToolCalls[0]) } } diff --git a/testing/llmtest/llmtest_test.go b/testing/llmtest/llmtest_test.go index 12a74bcf1..69a3c6396 100644 --- a/testing/llmtest/llmtest_test.go +++ b/testing/llmtest/llmtest_test.go @@ -4,6 +4,8 @@ import ( "context" "errors" "os" + "runtime" + "sync/atomic" "testing" "github.com/vxcontrol/langchaingo/llms" @@ -29,7 +31,59 @@ func TestMockLLM(t *testing.T) { }, } - TestLLM(t, mock) + TestLLM(t, mock, WithoutToolCalls()) +} + +type verdictRecorder struct { + testing.TB + failed atomic.Bool +} + +func (r *verdictRecorder) Fail() { r.failed.Store(true) } +func (r *verdictRecorder) Error(...any) { r.Fail() } +func (r *verdictRecorder) Errorf(string, ...any) { r.Fail() } +func (r *verdictRecorder) FailNow() { r.Fail(); runtime.Goexit() } +func (r *verdictRecorder) Fatal(...any) { r.FailNow() } +func (r *verdictRecorder) Fatalf(string, ...any) { r.FailNow() } +func (r *verdictRecorder) SkipNow() { runtime.Goexit() } +func (r *verdictRecorder) Skip(...any) { r.SkipNow() } +func (r *verdictRecorder) Skipf(string, ...any) { r.SkipNow() } + +func failsToolCalls(t *testing.T, model llms.Model) bool { + t.Helper() + + recorder := &verdictRecorder{TB: t} + done := make(chan struct{}) + go func() { + defer close(done) + testToolCalls(recorder, model) + }() + <-done + return recorder.failed.Load() +} + +func TestTheSuiteFailsADoorThatTakesToolsAndCallsNone(t *testing.T) { + t.Parallel() + + prose := &MockLLM{GenerateResponse: &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: "it is sunny in San Francisco"}}, + }} + + assert.True(t, failsToolCalls(t, prose), + "a door that answers in prose when the question needs the offered tool breaks the tool contract") +} + +func TestTheSuitePassesADoorThatCallsTheTool(t *testing.T) { + t.Parallel() + + caller := &MockLLM{GenerateResponse: &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{ToolCalls: []llms.ToolCall{{ + ID: "call_1", Type: "function", + FunctionCall: &llms.FunctionCall{Name: "get_weather", Arguments: `{"location":"San Francisco, US"}`}, + }}}}, + }} + + assert.False(t, failsToolCalls(t, caller)) } // TestValidateLLM tests the validation function. From e1d18de211c3ec51495a090d9a9d49525e4a54b6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:16:21 +0300 Subject: [PATCH 518/618] test(reasoning): check that each door passes its own provider constant (PAGI-337) TestEveryProviderConstantHasADoorThatPassesIt only checked that its own table named a door for every enum value, so it could not see a door passing the wrong constant: the anthropic door asking ResolveOff for bedrock's off wire left every test under ./llms/... green. The test now parses the non-test sources of each door and collects the reasoning.Provider* constants they pass. Each door must pass its own constant and no other; a new constant still fails the test until it is paired with a door. The anthropic mutation above and the ollama door passing ProviderUnknown both turn it red. Co-Authored-By: Claude Opus 5 --- llms/reasoning/provider_enum_test.go | 90 +++++++++++++++++++++++----- 1 file changed, 76 insertions(+), 14 deletions(-) diff --git a/llms/reasoning/provider_enum_test.go b/llms/reasoning/provider_enum_test.go index 37b7616d8..8db6d834d 100644 --- a/llms/reasoning/provider_enum_test.go +++ b/llms/reasoning/provider_enum_test.go @@ -1,26 +1,88 @@ package reasoning -import "testing" +import ( + "go/ast" + "go/parser" + "go/token" + "io/fs" + "maps" + "path/filepath" + "slices" + "strconv" + "strings" + "testing" +) + +const reasoningImportPath = "github.com/vxcontrol/langchaingo/llms/reasoning" + +func providerConstantsPassedIn(t *testing.T, dir string) map[string]bool { + t.Helper() + + passed := map[string]bool{} + err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error { + switch { + case err != nil: + return err + case d.IsDir() && d.Name() == "testdata": + return filepath.SkipDir + case d.IsDir() || !strings.HasSuffix(path, ".go") || strings.HasSuffix(path, "_test.go"): + return nil + } + file, err := parser.ParseFile(token.NewFileSet(), path, nil, parser.SkipObjectResolution) + if err != nil { + return err + } + local := "" + for _, spec := range file.Imports { + if importPath, _ := strconv.Unquote(spec.Path.Value); importPath == reasoningImportPath { + local = "reasoning" + if spec.Name != nil { + local = spec.Name.Name + } + } + } + if local == "" { + return nil + } + ast.Inspect(file, func(n ast.Node) bool { + sel, ok := n.(*ast.SelectorExpr) + if !ok { + return true + } + if pkg, ok := sel.X.(*ast.Ident); ok && pkg.Name == local && + strings.HasPrefix(sel.Sel.Name, "Provider") && sel.Sel.Name != "Provider" { + passed[sel.Sel.Name] = true + } + return true + }) + return nil + }) + if err != nil { + t.Fatalf("reading %s: %v", dir, err) + } + return passed +} func TestEveryProviderConstantHasADoorThatPassesIt(t *testing.T) { t.Parallel() - doors := map[Provider]string{ - ProviderUnknown: "callers with no door of their own", - ProviderAnthropic: "llms/anthropic", - ProviderBedrock: "llms/bedrock", - ProviderOpenAI: "llms/openai", - ProviderGoogleAI: "llms/googleai", - ProviderOllama: "llms/ollama", + doors := map[string]string{ + "ProviderAnthropic": "../anthropic", + "ProviderBedrock": "../bedrock", + "ProviderOpenAI": "../openai", + "ProviderGoogleAI": "../googleai", + "ProviderOllama": "../ollama", } - if len(doors) != int(providerCount) { - t.Fatalf("the enum holds %d providers, this test pairs %d of them with a door", - int(providerCount), len(doors)) + if len(doors) != int(providerCount)-1 { + t.Fatalf("the enum holds %d door providers besides ProviderUnknown, this test pairs %d of them with a door", + int(providerCount)-1, len(doors)) } - for p := ProviderUnknown; p < providerCount; p++ { - if doors[p] == "" { - t.Errorf("provider %d has no door listed", int(p)) + for constant, dir := range doors { + passed := providerConstantsPassedIn(t, dir) + if len(passed) != 1 || !passed[constant] { + t.Errorf("%s passes %v; it must pass %s and no other door's constant", + dir, slices.Sorted(maps.Keys(passed)), constant) } } } From a0baa8aca5ae2274262d789ae3baa3a7764fef09 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:36:17 +0300 Subject: [PATCH 519/618] test(llms): reach the unclassified openai branch with Mistral's magistral aliases The Mistral half of the opt-in test only used mistral-medium-latest and mistral-small-latest. Both sit in the OpenAI capability table, so they return from the Known branch and never reach the unclassified openai branch where DefaultOn is now set. Widening that branch's guard to every name whose off is sent by omission, or to every opt-in name without a thinking marker, kept all llms tests green while magistral-medium-latest and magistral-small-latest got DefaultOn false. Mistral's /v1/models lists those two as aliases of mistral-medium-latest and mistral-small-latest, so the hint must not report an off default for them either. The test now covers both spellings and checks, per case, which branch it goes through, so a case that stops reaching its branch fails instead of passing vacuously. Verified by mutation: both widened guards turn the magistral cases red; setting DefaultOn from ThinkingOptIn in the capability-table branch still turns the mistral cases red. PAGI-353 Co-Authored-By: Claude Opus 5 --- llms/reasoning_support_test.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 09ad5d1df..7c6dcba01 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -507,13 +507,23 @@ func TestTheHintReportsQwenThinkingOffUntilAsked(t *testing.T) { func TestOptInAloneDoesNotMakeTheHintReportThinkingOff(t *testing.T) { t.Parallel() - for _, model := range []string{"mistral-medium-latest", "mistral-small-latest"} { - if !reasoning.ThinkingOptIn(model) { - t.Fatalf("%s: the door no longer counts it opt-in, so the case no longer covers what it claims", model) + for _, tc := range []struct { + model string + inCapabilityTable bool + }{ + {"mistral-medium-latest", true}, + {"mistral-small-latest", true}, + {"magistral-medium-latest", false}, + {"magistral-small-latest", false}, + } { + if !reasoning.ThinkingOptIn(tc.model) || !reasoning.IsReasoningModel(tc.model) || + reasoning.OpenAIReasoningCapsFor(tc.model).Known != tc.inCapabilityTable { + t.Fatalf("%s: no longer an opt-in reasoning model with capability table membership %v, "+ + "so the case no longer covers what it claims", tc.model, tc.inCapabilityTable) } - if d := ReasoningSupportFor(model, reasoning.ProviderOpenAI).DefaultOn; d != nil { + if d := ReasoningSupportFor(tc.model, reasoning.ProviderOpenAI).DefaultOn; d != nil { t.Errorf("%s DefaultOn = %v, want nil: Mistral documents no default for reasoning_effort, and the "+ - "door's off sends nothing, so a false here offers an off that may do nothing", model, *d) + "door's off sends nothing, so a false here offers an off that may do nothing", tc.model, *d) } } From af74c13f189b0c1a2db7e461872055ea06625e97 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:41:31 +0300 Subject: [PATCH 520/618] fix(reasoning): turn thinking off on Claude 5 behind the openai door WithReasoningDisabled() on anthropic/claude-sonnet-5 or claude-opus-5 through an OpenAI-compatible endpoint returned ErrReasoningOffUnsupported before the network, and the hint told pentagi to hide the off switch for a custom provider serving Claude. The route does carry Anthropic's own switch: Anthropic's OpenAI SDK compatibility page takes the thinking parameter, LiteLLM passes it to Anthropic models on /v1/chat/completions, and Anthropic lists Sonnet 5 and Opus 5 as "On" models that "accept thinking: {type: "disabled"}". reasoning_effort cannot say it: Anthropic marks the field Ignored and LiteLLM sends no thinking field for "none", which leaves a default-on model thinking. ResolveOff now gives these models the thinking object on ProviderOpenAI, and the door sends thinking {type: disabled} with nothing else. Fable 5 and Mythos 5 stay refused, Opus 4.8 and older still omit. Before the fix the new rows of TestResolveOff, the door test and both CannotDisable tests fail. Through the library against the gateway /v1, Sonnet 5 on a Pell-equation prompt spends 736 reasoning tokens by default and 0 with the disable object. PAGI-331 Co-Authored-By: Claude Opus 5 --- .../openai/reasoning_effort_passthrough_test.go | 17 ++++++++++++----- llms/reasoning/off.go | 2 +- llms/reasoning/off_test.go | 5 ++++- llms/reasoning_support.go | 7 ++----- llms/reasoning_support_test.go | 7 ++++--- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/llms/openai/reasoning_effort_passthrough_test.go b/llms/openai/reasoning_effort_passthrough_test.go index cd99d7789..b29ba42ec 100644 --- a/llms/openai/reasoning_effort_passthrough_test.go +++ b/llms/openai/reasoning_effort_passthrough_test.go @@ -277,11 +277,18 @@ func TestReasoningDisabledForClaudeBehindOpenAITransport(t *testing.T) { return body, genErr } - t.Run("default-on Claude reports unsupported instead of a silent no-op", func(t *testing.T) { - body, err := send(t, "anthropic/claude-sonnet-5") - var unsupported *reasoning.ErrReasoningOffUnsupported - if !errors.As(err, &unsupported) { - t.Fatalf("want ErrReasoningOffUnsupported, got err=%v body=%s", err, body) + t.Run("default-on Claude is sent Anthropic's disable object", func(t *testing.T) { + for _, model := range []string{"anthropic/claude-sonnet-5", "anthropic/claude-opus-5"} { + body, err := send(t, model) + if err != nil { + t.Fatalf("%s: GenerateContent() error: %v", model, err) + } + if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { + t.Errorf("%s: want thinking disabled on the wire, got body: %s", model, body) + } + if strings.Contains(body, "reasoning") { + t.Errorf("%s: the route leaves thinking on for reasoning_effort none, got body: %s", model, body) + } } }) diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 331fb7d3d..df144ab97 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -68,7 +68,7 @@ func ResolveOff(model string, p Provider) OffWire { return OffUnsupported // Fable 5 / Mythos 5: thinking cannot be disabled case ClaudeThinkingDefaultsOn(model): if p == ProviderOpenAI { - return OffUnsupported + return OffDisableThinkingObject } return OffDisableClaude default: diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 44540d6a4..3e704b646 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -13,7 +13,10 @@ func TestResolveOff(t *testing.T) { {"us.anthropic.claude-mythos-5", ProviderBedrock, OffUnsupported}, {"claude-sonnet-5", ProviderAnthropic, OffDisableClaude}, {"us.anthropic.claude-sonnet-5", ProviderBedrock, OffDisableClaude}, - {"anthropic/claude-sonnet-5", ProviderOpenAI, OffUnsupported}, + {"anthropic/claude-sonnet-5", ProviderOpenAI, OffDisableThinkingObject}, + {"anthropic/claude-opus-5", ProviderOpenAI, OffDisableThinkingObject}, + {"anthropic/claude-fable-5", ProviderOpenAI, OffUnsupported}, + {"anthropic/claude-opus-4-8", ProviderOpenAI, OffOmit}, {"claude-opus-5", ProviderAnthropic, OffDisableClaude}, {"us.anthropic.claude-opus-5", ProviderBedrock, OffDisableClaude}, {"claude-opus-4-8", ProviderAnthropic, OffOmit}, // off by default diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 60f29778c..64c2b47e6 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -90,11 +90,8 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if reasoning.ClaudeSupportsThinking(model) { return ReasoningSupport{ - Supported: true, - Known: true, - // Derive from the same resolver the wire uses so the hint tracks - // provider differences (e.g. Sonnet 5 cannot be disabled through an - // OpenAI-shaped gateway, which has no field for Anthropic's disable). + Supported: true, + Known: true, CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, RejectsSampling: reasoning.ClaudeRejectsSampling(model), Efforts: toReasoningEfforts(reasoning.ClaudeEffortsFor(model, p)), diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 27fbae2e8..9bbe25313 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -75,13 +75,13 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes } }) - t.Run("Sonnet 5 cannot be disabled only through an OpenAI-shaped gateway", func(t *testing.T) { + t.Run("Sonnet 5 can be disabled on every door, the OpenAI-shaped one included", func(t *testing.T) { anthropic := ReasoningSupportFor("claude-sonnet-5", reasoning.ProviderAnthropic) eq(t, "CannotDisable(Anthropic)", anthropic.CannotDisable, false) bedrock := ReasoningSupportFor("us.anthropic.claude-sonnet-5", reasoning.ProviderBedrock) eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, false) gateway := ReasoningSupportFor("anthropic/claude-sonnet-5", reasoning.ProviderOpenAI) - eq(t, "CannotDisable(OpenAI gateway)", gateway.CannotDisable, true) + eq(t, "CannotDisable(OpenAI gateway)", gateway.CannotDisable, false) }) t.Run("Opus 5 defaults on but is disablable, like Sonnet 5 unlike Opus 4.8", func(t *testing.T) { @@ -324,7 +324,8 @@ func TestCannotDisableFollowsTheResolverOnEveryProvider(t *testing.T) { }{ {"claude-sonnet-5", reasoning.ProviderAnthropic, false}, {"claude-sonnet-5", reasoning.ProviderBedrock, false}, - {"claude-sonnet-5", reasoning.ProviderOpenAI, true}, + {"claude-sonnet-5", reasoning.ProviderOpenAI, false}, + {"claude-fable-5", reasoning.ProviderOpenAI, true}, {"claude-sonnet-5", reasoning.ProviderUnknown, false}, {"claude-fable-5", reasoning.ProviderAnthropic, true}, {"claude-fable-5", reasoning.ProviderBedrock, true}, From 6bec5f83fc695ddde3b2ef7db660c87966073129 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:51:07 +0300 Subject: [PATCH 521/618] fix(openai): send a Claude thinking budget in Anthropic's thinking object WithReasoning(ReasoningNone, 1024) with WithMaxTokens(1024) on claude-haiku-4-5 left the door as reasoning_effort "high" with max_completion_tokens 8192: the caller's budget became an effort, the answer limit rose for a budget that never went out, and the warnings reported the budget as dropped. On the top-level reasoning_effort format the door had no field for a budget. Anthropic's OpenAI SDK compatibility page marks reasoning_effort "Ignored" and enables thinking with thinking {type: enabled, budget_tokens}; LiteLLM documents the same thinking parameter for anthropic/ models on /v1/chat/completions and turns reasoning_effort into a fixed budget or into adaptive thinking. A Claude generation that takes budget thinking (4.5 and older, and 4.6 unless adaptive is asked) now gets that object with the budget raised to the 1024 floor, an answer limit above it, and no reasoning_effort. The forced-tool refusal counts it as manual thinking. Generations from 4.7 on, which answer type enabled with a 400, and the OpenRouter-style reasoning object keep their wire. Before the fix the new wire, warning and forced-tool tests fail with reasoning_effort on the wire. Dropping the format guard, the model predicate, the adaptive guard, the forced-tool wiring, the limit raise, the floor or the warning read each fails a test. Through the library on the gateway /v1: claude-haiku-4-5 with a 2048 budget answers with 964 reasoning tokens, a 1024 budget under a 1024 limit goes out with max_completion_tokens 2048, and claude-sonnet-4-6 takes a 2048 budget. PAGI-331 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_thinking_budget_test.go | 84 ++++++++++++++++++++++ llms/openai/internal/openaiclient/chat.go | 3 +- llms/openai/openaillm.go | 31 ++++++-- llms/openai/reasoning_wire_test.go | 4 +- llms/openai/sampling_warnings.go | 3 + llms/openai/sampling_warnings_test.go | 13 +++- llms/openai/turn_limits_test.go | 10 +++ 7 files changed, 140 insertions(+), 8 deletions(-) create mode 100644 llms/openai/claude_thinking_budget_test.go diff --git a/llms/openai/claude_thinking_budget_test.go b/llms/openai/claude_thinking_budget_test.go new file mode 100644 index 000000000..af0ae4ddb --- /dev/null +++ b/llms/openai/claude_thinking_budget_test.go @@ -0,0 +1,84 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestAClaudeBudgetTravelsAsAnthropicsThinkingObject(t *testing.T) { + t.Parallel() + + for _, model := range []string{"claude-haiku-4-5", "anthropic/claude-sonnet-4-5", "anthropic/claude-sonnet-4-6"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, model, nil, + llms.WithReasoning(llms.ReasoningNone, 2048), llms.WithMaxTokens(8192)) + + if !strings.Contains(body, `"thinking":{"type":"enabled","budget_tokens":2048}`) { + t.Errorf("want the budget in the thinking object, got body: %s", body) + } + if strings.Contains(body, "reasoning_effort") { + t.Errorf("an effort would replace the caller's budget on this route, got body: %s", body) + } + if !strings.Contains(body, `"max_completion_tokens":8192`) { + t.Errorf("an answer limit above the budget must reach the wire verbatim, got body: %s", body) + } + }) + } +} + +func TestTheAnswerLimitRisesUnderTheBudgetTheThinkingObjectCarries(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, "claude-haiku-4-5", nil, + llms.WithReasoning(llms.ReasoningNone, 1024), llms.WithMaxTokens(1024)) + + if !strings.Contains(body, `"thinking":{"type":"enabled","budget_tokens":1024}`) { + t.Fatalf("want the vendor-floor budget in the thinking object, got body: %s", body) + } + if !strings.Contains(body, `"max_completion_tokens":2048`) { + t.Errorf("the budget must be less than the answer limit, got body: %s", body) + } +} + +func TestAnAdaptiveOnlyClaudeGetsNoBudgetObject(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, "anthropic/claude-sonnet-5", nil, + llms.WithReasoning(llms.ReasoningNone, 2048), llms.WithMaxTokens(8192)) + + if strings.Contains(body, `"thinking"`) { + t.Errorf("this generation rejects thinking.type enabled, got body: %s", body) + } +} + +func TestAnAdaptivePreferenceKeepsTheEffortOnAGenerationThatTakesBoth(t *testing.T) { + t.Parallel() + + adaptiveWithBudget := func(o *llms.CallOptions) { + o.Reasoning = &llms.ReasoningConfig{Adaptive: true, Effort: llms.ReasoningHigh, Tokens: 2048} + } + body := captureWireWithClient(t, "anthropic/claude-opus-4-6", nil, adaptiveWithBudget, llms.WithMaxTokens(8192)) + + if strings.Contains(body, `"thinking"`) { + t.Errorf("the caller asked for adaptive thinking, got body: %s", body) + } + if !strings.Contains(body, `"reasoning_effort":"high"`) { + t.Errorf("want the effort that carries adaptive thinking, got body: %s", body) + } +} + +func TestABudgetStaysOffModelsThatAreNotClaude(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-5", "deepseek-v4-pro", "glm-5.2"} { + body := captureWireWithClient(t, model, nil, + llms.WithReasoning(llms.ReasoningNone, 2048), llms.WithMaxTokens(8192)) + if strings.Contains(body, `"budget_tokens"`) { + t.Errorf("%s: Anthropic's budget field is Claude's alone, got body: %s", model, body) + } + } +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 92c41cc09..bb61fa3bd 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -42,7 +42,8 @@ type ReasoningOptions struct { } type ThinkingOptions struct { - Type string `json:"type"` + Type string `json:"type"` + BudgetTokens int `json:"budget_tokens,omitempty"` } // ChatRequest is a request to complete a chat completion.. diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 9a1722346..129959c9f 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -102,7 +102,8 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten return nil, err } - sendsBudget := o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens() + sendsBudget := (o.client.UseReasoningMaxTokens && opts.Reasoning.HasExplicitTokens()) || + o.sendsClaudeBudget(o.effectiveModel(opts), opts) if err := llms.CheckClaudeTurnLimitsOnWire(o.effectiveModel(opts), opts, messages, sendsBudget); err != nil { return nil, err } @@ -422,9 +423,7 @@ func (o *LLM) setReasoning( } sendsEffort = false } - if opts.Reasoning.HasExplicitTokens() && reasoningTokens > 0 && - reasoning.DashScopeTakesThinkingBudget(model) { - req.ThinkingBudget = &reasoningTokens + if o.writeVendorBudget(req, opts, reasoningTokens, warnCtx{model, warn}) { reportOpenAIReasoning(warn, model, opts.Reasoning, req) return wireEffortOf(true, reasoningEffort), nil } @@ -447,6 +446,30 @@ func budgetsFor( return budget, effortBudget } +func (o *LLM) writeVendorBudget(req *openaiclient.ChatRequest, opts llms.CallOptions, tokens int, wc warnCtx) bool { + if !opts.Reasoning.HasExplicitTokens() || tokens <= 0 { + return false + } + switch { + case reasoning.DashScopeTakesThinkingBudget(wc.model): + req.ThinkingBudget = &tokens + case o.sendsClaudeBudget(wc.model, opts): + budget := reasoning.ClaudeClampBudget(wc.model, tokens) + req.Thinking = &openaiclient.ThinkingOptions{Type: "enabled", BudgetTokens: budget} + o.raiseAnswerLimitForBudget(req, budget, wc) + default: + return false + } + return true +} + +func (o *LLM) sendsClaudeBudget(model string, opts llms.CallOptions) bool { + return !o.client.ModernReasoningFormat && + opts.Reasoning.HasExplicitTokens() && + reasoning.ClaudeSpendsThinkingBudget(model) && + !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) +} + func (o *LLM) sendsBudgetInsteadOfEffort(model string, opts llms.CallOptions, tokens int) bool { if !opts.Reasoning.HasExplicitTokens() || tokens <= 0 { return false diff --git a/llms/openai/reasoning_wire_test.go b/llms/openai/reasoning_wire_test.go index 1cb44349b..edfd48105 100644 --- a/llms/openai/reasoning_wire_test.go +++ b/llms/openai/reasoning_wire_test.go @@ -239,8 +239,8 @@ func TestAnswerLimitClearsTheBudgetTheThinkingWillSpend(t *testing.T) { call []llms.CallOption want string }{ - {"legacy format, effort carries the thinking", nil, - []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)}, `"max_completion_tokens":8192`}, + {"legacy format, the thinking object carries the budget", nil, + []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)}, `"max_completion_tokens":2048`}, {"modern format, effort carries the thinking", modern, []llms.CallOption{llms.WithReasoning("", 2048), llms.WithMaxTokens(512)}, `"max_completion_tokens":8192`}, {"an effort with no budget of its own", nil, diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 65bbbe55c..d32834e39 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -109,6 +109,9 @@ func reportOpenAIReasoning(warn *llms.Warnings, model string, cfg *llms.Reasonin if req.ThinkingBudget != nil { budget = *req.ThinkingBudget } + if req.Thinking != nil && req.Thinking.BudgetTokens > 0 { + budget = req.Thinking.BudgetTokens + } if req.Reasoning != nil { if req.Reasoning.Effort != "" { effort = string(req.Reasoning.Effort) diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index ec4dccf36..35949de90 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -152,7 +152,7 @@ func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { func TestABudgetThisDoorPutsOnNoFieldIsReportedAsDropped(t *testing.T) { t.Parallel() - resp := sendForWarnings(t, "claude-sonnet-4-5", + resp := sendForWarnings(t, "anthropic/claude-sonnet-5", llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) w := warningFor(t, resp, "WithReasoning") @@ -161,6 +161,17 @@ func TestABudgetThisDoorPutsOnNoFieldIsReportedAsDropped(t *testing.T) { } } +func TestABudgetTheThinkingObjectCarriesIsNotReported(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "claude-sonnet-4-5", + llms.WithMaxTokens(8192), llms.WithReasoning(llms.ReasoningNone, 2048)) + + if len(resp.Warnings) != 0 { + t.Errorf("the budget reached the wire as asked, got %v", resp.Warnings) + } +} + func TestAnEffortReplacedByABudgetIsReported(t *testing.T) { t.Parallel() diff --git a/llms/openai/turn_limits_test.go b/llms/openai/turn_limits_test.go index 56f3fb10d..35b6a2b82 100644 --- a/llms/openai/turn_limits_test.go +++ b/llms/openai/turn_limits_test.go @@ -67,6 +67,16 @@ func TestClaudeTurnLimitsOnTheOpenAITransport(t *testing.T) { } }) + t.Run("a budget sent as the thinking object is refused with a forced tool", func(t *testing.T) { + t.Parallel() + err := turnLimitErr(t, "claude-opus-4-6", askedFor("hi"), + llms.WithReasoning(llms.ReasoningNone, 2048), forced) + var target *reasoning.ErrForcedToolUseWithThinking + if !errors.As(err, &target) { + t.Errorf("want ErrForcedToolUseWithThinking, got %v", err) + } + }) + t.Run("an effort with no budget is not refused", func(t *testing.T) { t.Parallel() if err := turnLimitErr(t, "claude-sonnet-4-5", askedFor("hi"), From d981b171dc49f9655ad3c7297c93fda0fd6145b5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:52:16 +0300 Subject: [PATCH 522/618] fix(llms): name the think levels gpt-oss takes on the ollama door in the hint ReasoningSupportFor had no branch for the ollama door, so gpt-oss there came back unclassified with no effort levels, although the door already sends low, medium and high for it. A consumer that builds its controls from the hint offered neither an off switch nor a level: no reasoning control at all for a model that always thinks. Ollama documents that gpt-oss takes only low, medium or high, ignores booleans and cannot turn its trace off, and that thinking is on by default. The hint now says exactly that for gpt-oss on ProviderOllama: known, cannot disable, levels low/medium/high, adaptive, on by default. The level set sits next to the predicate ResolveOff already reads for this family; other ollama models and other doors keep their answer. A door test sends every level the hint offers and requires it on the wire unchanged, so the hint cannot advertise a level the door substitutes. Checked live through the library against ollama.com with gpt-oss:120b: low, medium and high each travel as themselves, answer 200, and the trace grows with the level; an off is refused before the request (PAGI-300). Co-Authored-By: Claude Opus 5 --- llms/ollama/think_request_test.go | 12 ++++++++++ llms/reasoning/off.go | 9 +++++++ llms/reasoning_support.go | 17 ++++++++++--- llms/reasoning_support_test.go | 40 +++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/llms/ollama/think_request_test.go b/llms/ollama/think_request_test.go index e52275c80..83a898639 100644 --- a/llms/ollama/think_request_test.go +++ b/llms/ollama/think_request_test.go @@ -133,6 +133,18 @@ func TestAnEffortGPTOSSTakesIsNotAWarning(t *testing.T) { } } +func TestEveryLevelTheHintOffersGPTOSSTravelsAsItself(t *testing.T) { + t.Parallel() + + efforts := llms.ReasoningSupportFor("gpt-oss:120b", reasoning.ProviderOllama).Efforts + require.NotEmpty(t, efforts, "the hint offers no level, so nothing here is checked") + for _, effort := range efforts { + require.Equal(t, string(effort), + captureChatRequestFor(t, "gpt-oss:120b", llms.WithReasoning(effort, 0))["think"], + "the hint offers %s, so the door must send it unchanged", effort) + } +} + func TestAdaptiveWithNoEffortLeavesTheThinkFieldOff(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index f0a71f0aa..7cca288cb 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -185,6 +185,15 @@ func openAIOffWire(model string) OffWire { return OffEffortNone } +// OllamaEffortsFor returns the think levels a model takes on the ollama door; nil +// when Ollama documents no level set for that model. +func OllamaEffortsFor(model string) []string { + if takesOnlyOllamaLevels(model) { + return []string{"low", "medium", "high"} + } + return nil +} + func takesOnlyOllamaLevels(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "gpt-oss") { diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 71bf9633d..9794a8c3d 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -80,9 +80,9 @@ func lookupReasoningOverride(model string) (ReasoningSupport, bool) { func boolPtr(b bool) *bool { return &b } // ReasoningSupportFor returns the reasoning-control hint for a model on a -// provider. Registered overrides win; then Claude and OpenAI reasoning models are -// classified from the shared tables; everything else returns Known=false -// (optimistic — the UI shows all controls and the API rejects what it cannot do). +// provider. Registered overrides win; a model the shared tables do not classify +// returns Known=false (optimistic — the UI shows all controls and the API rejects +// what it cannot do). func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if s, ok := lookupReasoningOverride(model); ok { return s @@ -144,6 +144,17 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } + if efforts := reasoning.OllamaEffortsFor(model); p == reasoning.ProviderOllama && len(efforts) > 0 { + return ReasoningSupport{ + Supported: true, + Known: true, + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + Efforts: toReasoningEfforts(efforts), + Mechanism: ReasoningMechanismAdaptive, + DefaultOn: boolPtr(true), + } + } + return ReasoningSupport{ Supported: reasoning.LikelyReasoningModel(model), Known: false, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 7c6dcba01..06d883c4c 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -553,3 +553,43 @@ func TestTheOllamaDoorKeepsTheOffControlItsVendorDocuments(t *testing.T) { t.Error("gpt-oss ignores booleans and its trace cannot be disabled: the hint must say so") } } + +func TestTheOllamaHintOffersGPTOSSTheLevelsOllamaDocuments(t *testing.T) { + t.Parallel() + + want := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh} + for _, model := range []string{"gpt-oss:120b", "gpt-oss:20b", "gpt-oss:120b-cloud", "library/gpt-oss:20b"} { + s := ReasoningSupportFor(model, reasoning.ProviderOllama) + if !slices.Equal(s.Efforts, want) { + t.Errorf("%s Efforts = %v, want %v: a consumer offers only the levels the hint lists", model, s.Efforts, want) + } + if !s.Known || !s.Supported || !s.CannotDisable { + t.Errorf("%s = %+v, want a classified reasoning model whose thinking cannot be turned off", model, s) + } + if s.Mechanism != ReasoningMechanismAdaptive { + t.Errorf("%s Mechanism = %v, want adaptive: ollama takes a level, never a token budget", model, s.Mechanism) + } + if s.DefaultOn == nil || !*s.DefaultOn { + t.Errorf("%s DefaultOn = %v, want true: ollama thinks by default and gpt-oss cannot stop", model, s.DefaultOn) + } + } + + for _, model := range []string{"deepseek-r1:7b", "qwen3:8b", "llama3.2"} { + if s := ReasoningSupportFor(model, reasoning.ProviderOllama); s.Known || len(s.Efforts) != 0 { + t.Errorf("%s = %+v: ollama names no level set for this model, so the hint must not claim one", model, s) + } + } + + for _, tc := range []struct { + model string + p reasoning.Provider + }{ + {"gpt-oss:120b", reasoning.ProviderUnknown}, + {"openai.gpt-oss-120b-1:0", reasoning.ProviderBedrock}, + } { + if efforts := ReasoningSupportFor(tc.model, tc.p).Efforts; len(efforts) != 0 { + t.Errorf("%s on provider %d offers %v, but these levels are what ollama documents for its own door", + tc.model, tc.p, efforts) + } + } +} From 4023aad1fee9afe1164feea429d72b0b2c8dffa9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:54:45 +0300 Subject: [PATCH 523/618] fix(openai): keep JSON mode off the wire for Claude and say so WithJSONMode() on a Claude model through the openai door put response_format json_object on the wire with no warning. Anthropic's OpenAI SDK compatibility page marks response_format "Ignored" and points JSON output to structured outputs on the native API; LiteLLM documents response_format for Claude only as a json_schema turned into output_format, and the gateway drops json_object without a word. The caller asked for JSON and got nothing to tell it that no route honoured it, while the anthropic door reports the same flag as dropped. The door now leaves json_object off for Claude in every spelling and adds a drop warning for WithJSONMode. A schema from WithStructuredOutput is not reported as a lost JSON mode and keeps its path; other models keep json_object with no warning. Before the fix TestJSONModeStaysOffTheWireForClaude fails with json_object on the wire and no warning. Handing json_object back to Claude, taking it from every model, dropping the warning, or reporting a schema request each fails a test. Through the library on the gateway /v1, anthropic/claude-sonnet-5 goes out without response_format and the response carries the drop warning. PAGI-331 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_json_mode_test.go | 50 ++++++++++++++++++++++++++++ llms/openai/openaillm.go | 4 +-- llms/openai/structured_output.go | 16 +++++++++ llms/reasoning/effort_wire.go | 4 +++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 llms/openai/claude_json_mode_test.go diff --git a/llms/openai/claude_json_mode_test.go b/llms/openai/claude_json_mode_test.go new file mode 100644 index 000000000..e07f1e94d --- /dev/null +++ b/llms/openai/claude_json_mode_test.go @@ -0,0 +1,50 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestJSONModeStaysOffTheWireForClaude(t *testing.T) { + t.Parallel() + + for _, model := range []string{"anthropic/claude-sonnet-5", "claude-haiku-4-5", "us.anthropic.claude-opus-4-6-v1:0"} { + if body := sendForWire(t, model, llms.WithJSONMode()); strings.Contains(body, "response_format") { + t.Errorf("%s: the vendor has no json_object for this model, got body: %s", model, body) + } + w := warningFor(t, sendForWarnings(t, model, llms.WithJSONMode()), "WithJSONMode") + if w.Kind != llms.WarningDrop || w.Asked != "true" || w.Sent != "" { + t.Errorf("%s: json-mode warning = %+v", model, w) + } + } +} + +func TestJSONModeStillReachesAModelThatTakesIt(t *testing.T) { + t.Parallel() + + if body := sendForWire(t, "gpt-4o", llms.WithJSONMode()); !strings.Contains(body, `"response_format":{"type":"json_object"}`) { + t.Errorf("want json_object on the wire, got body: %s", body) + } + if resp := sendForWarnings(t, "gpt-4o", llms.WithJSONMode()); len(resp.Warnings) != 0 { + t.Errorf("JSON mode reached the wire, got %v", resp.Warnings) + } +} + +func TestASchemaForClaudeIsNotReportedAsALostJSONMode(t *testing.T) { + t.Parallel() + + llm := newUnitLLM(t, WithModel("anthropic/claude-sonnet-5")) + var opts llms.CallOptions + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "s", Schema: objectSchema()})(&opts) + warn := &llms.Warnings{} + if _, err := llm.createChatRequest(nil, opts, warn); err != nil { + t.Fatal(err) + } + for _, w := range warn.List() { + if w.Option == "WithJSONMode" { + t.Errorf("the schema carries the JSON request, got %v", w) + } + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 129959c9f..15a851208 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -331,9 +331,7 @@ func (o *LLM) createChatRequest( req.MaxCompletionTokens = opts.MaxTokens } - if opts.GetJSONMode() { - req.SetResponseFormat(ResponseFormatJSON) - } + setJSONMode(req, model, opts, warn) // add tools from functions and tool definitions if err := o.addToolsToRequest(req, opts); err != nil { diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index 05084e79f..4f7cb8dac 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -31,6 +31,22 @@ func (e *ErrStructuredOutputRefusal) Error() string { return fmt.Sprintf("openai structured output: model refused (model=%s choice=%d): %s", e.Model, e.Choice, e.Refusal) } +func setJSONMode(req *openaiclient.ChatRequest, model string, opts llms.CallOptions, warn *llms.Warnings) { + if !opts.GetJSONMode() { + return + } + if !reasoning.TakesNoJSONObject(model) { + req.SetResponseFormat(ResponseFormatJSON) + return + } + if opts.StructuredOutput == nil { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithJSONMode", Model: model, + Asked: "true", Reason: "the vendor has no json_object response format for this model", + }) + } +} + // setStructuredOutput translates a per-call llms.StructuredOutput into OpenAI's // json_schema response format with strict:true. It takes precedence over the // schema-less JSONMode json_object and returns a typed conflict against a diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 9a992550e..a0ad056a7 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -74,6 +74,10 @@ func TakesNoJSONSchema(model string) bool { return false } +func TakesNoJSONObject(model string) bool { + return isClaudeModel(model) +} + // RejectsMinP reports whether min_p must stay off the wire. func RejectsMinP(model string) bool { return isClaudeModel(model) || openAIProperName(model) From f598c2db861ebf7941738f0b1632b5baaec82f28 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:55:59 +0300 Subject: [PATCH 524/618] test(openai): check top_p in the Claude sampling test of the openai door TestClaudeOnThisDoorStillLosesItsSampling sends claude-sonnet-4-5 a temperature of 0.2, a top_p of 0.9 and a thinking budget, but it read only the temperature: a door that let the top_p through beside thinking passed it. The test now also requires that no top_p reaches the wire; Anthropic allows top_p while thinking only "at values between 0.95 and 1" on this generation. Removing the top_p drop from the thinking branch of the sampling policy leaves the old test green and fails the new check. PAGI-331 Co-Authored-By: Claude Opus 5 --- llms/openai/sampling_warnings_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 35949de90..9665771f8 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -331,6 +331,9 @@ func TestClaudeOnThisDoorStillLosesItsSampling(t *testing.T) { if strings.Contains(body, `"temperature":0.2`) { t.Errorf("thinking claude takes temperature 1: %s", body) } + if strings.Contains(body, `"top_p"`) { + t.Errorf("thinking claude takes no top_p below 0.95 or beside a temperature: %s", body) + } } func TestMinPStaysOffOpenAIsOwnEndpoint(t *testing.T) { From 9ea67b88ae5833a8d009ab5f8bc0e9929774d8c5 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:57:18 +0300 Subject: [PATCH 525/618] fix(bedrock): send gpt-oss the reasoning_effort its Converse request documents A reasoning request to openai.gpt-oss-120b-1:0 or openai.gpt-oss-20b-1:0 went to Converse with no reasoning field at all, so every level the caller asked for was lost and the model ran at its default depth. AWS documents the gpt-oss request body as OpenAI's chat completion body and, for Converse, says to put every field outside inferenceConfig into additionalModelRequestFields; OpenAI documents three reasoning levels for gpt-oss: low, medium and high. The door now resolves gpt-oss to its own mechanism and sends {"reasoning_effort": }: minimal rises to low, xhigh and max fall to high, a budget picks the level the way it does for Nova and Grok, and a request that delegates the depth sends nothing. The warnings read the new field, so a clamped level is reported as a clamp rather than as a drop, and an adaptive preference as a picked mechanism. The README moves gpt-oss into the Converse list and stops claiming that the families left without a field all reason unasked. Direct Converse calls with the stand's AWS keys, us-east-1: low, medium and high are accepted by both models and move the reasoning volume (120b: 139, 507 and 1509 characters, bare call 506; 20b: 276, 785 and 2678, bare 794); none is refused with "Harmony does not support reasoning_effort='none'", minimal and xhigh with a validation error. The gpt-oss entries of both Converse reasoning cassettes are re-recorded the same way; every other entry is byte-identical. A comparison of 648 Anthropic, Nova and Grok requests over reasoning settings and sampling shows the same wire and warnings as before the change. PAGI-354 Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 19 +++--- .../converse_mechanism_warning_test.go | 2 + .../bedrockclient/bedrockclient_converse.go | 14 ++++ .../bedrockclient_converse_test.go | 16 ++++- .../bedrockclient/converse_warnings.go | 9 ++- .../bedrockclient/converse_warnings_test.go | 4 ++ .../bedrockclient/gpt_oss_reasoning_test.go | 63 ++++++++++++++++++ .../TestAmazonReasoningConverseAPI.httprr | 26 ++++---- ...AmazonReasoningStreamingConverseAPI.httprr | Bin 106627 -> 109063 bytes llms/reasoning/bedrock_capability.go | 12 ++++ llms/reasoning/bedrock_capability_test.go | 32 ++++++++- llms/reasoning/mechanism.go | 3 + llms/reasoning/mechanism_test.go | 6 +- 13 files changed, 178 insertions(+), 28 deletions(-) create mode 100644 llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index bdbb584ed..f78abb961 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -191,7 +191,7 @@ if err != nil { ### Models Supporting Reasoning A reasoning request only reaches the wire for families that have a thinking -configuration on this platform. The rest reason on their own and carry nothing. +configuration on this platform. The rest carry nothing. **Converse API** — a thinking configuration is sent for: - Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` @@ -199,16 +199,17 @@ configuration on this platform. The rest reason on their own and carry nothing. - Amazon Nova 2 Lite and Sonic — `reasoningConfig` in `additionalModelRequestFields`. The vendor marks the field for those two only, so Nova 2 Pro and Micro do not get it - xAI Grok 4.x — `reasoning.effort` in `additionalModelRequestFields` +- OpenAI GPT OSS 120B and 20B — `reasoning_effort` in `additionalModelRequestFields` **Legacy API** (InvokeModel) — a thinking configuration is sent for: - Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in the Anthropic body - Amazon Nova 2 Lite and Sonic — `reasoningConfig` inside `inferenceConfig` -**Reasoning models that take no configuration here**: OpenAI GPT OSS (120B, 20B), -Moonshot Kimi K2-Thinking, MiniMax M2/M2.1/M2.5, DeepSeek R1, Z-AI GLM, NVIDIA -Nemotron 3. They think without being asked, and a `WithReasoning` call on them -changes nothing on the wire. +**Reasoning models that take no configuration here**: Moonshot Kimi K2-Thinking, +MiniMax M2/M2.1/M2.5, DeepSeek R1, Z-AI GLM 4.7/4.7 Flash/5, NVIDIA Nemotron 3 +Super, Qwen3 32B, Magistral Small. AWS documents no reasoning field for them, so a +`WithReasoning` call on them changes nothing on the wire. **How the wire shape is resolved** @@ -232,9 +233,11 @@ source of truth used by the first-party Anthropic provider): Nova 2 carries `type` plus `maxReasoningEffort` (low/medium/high) on both paths, and its top effort clears `maxTokens`, `temperature` and `topP`, which Nova refuses -beside it. Grok carries an effort and nothing else. `WithReasoningDisabled()` -returns a typed `ErrReasoningOffUnsupported` for a model whose thinking cannot be -turned off, such as Fable, Mythos or DeepSeek R1. +beside it. Grok carries an effort and nothing else. GPT OSS carries only +`reasoning_effort`: `low`, `medium` or `high`; `minimal` rises to `low`, `xhigh` and +`max` fall to `high`. `WithReasoningDisabled()` returns a typed +`ErrReasoningOffUnsupported` for a model whose thinking cannot be turned off, such as +Fable, Mythos, GPT OSS or DeepSeek R1. ## Structured Output diff --git a/llms/bedrock/converse_mechanism_warning_test.go b/llms/bedrock/converse_mechanism_warning_test.go index 2d13fee09..394f4bc91 100644 --- a/llms/bedrock/converse_mechanism_warning_test.go +++ b/llms/bedrock/converse_mechanism_warning_test.go @@ -18,6 +18,7 @@ func TestAMechanismTheConverseDoorPickedInsteadOfAdaptiveIsReported(t *testing.T }{ {"nova", "amazon.nova-2-lite-v1:0"}, {"grok", "xai.grok-4-v1:0"}, + {"gpt-oss", "openai.gpt-oss-120b-1:0"}, {"claude on a budget", "anthropic.claude-sonnet-4-5-v1:0"}, } { t.Run(family.name, func(t *testing.T) { @@ -45,6 +46,7 @@ func TestDelegatedDepthOnConverseIsNotReportedAsAPickedMechanism(t *testing.T) { }{ {"nova", "amazon.nova-2-lite-v1:0"}, {"grok", "xai.grok-4-v1:0"}, + {"gpt-oss", "openai.gpt-oss-120b-1:0"}, } { t.Run(family.name, func(t *testing.T) { t.Parallel() diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index 5b10e79dd..e7d6c573d 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -121,6 +121,10 @@ type converseGrokFields struct { Reasoning *converseGrokReasoning `json:"reasoning,omitempty" document:"reasoning,omitempty"` } +type converseGptOssFields struct { + ReasoningEffort string `json:"reasoning_effort" document:"reasoning_effort"` +} + // buildConverseInput converts our input to AWS Converse format func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockruntime.ConverseInput, error) { // Convert messages @@ -246,6 +250,14 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti effort := reasoning.GrokEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens))) familyFields = converseGrokFields{Reasoning: &converseGrokReasoning{Effort: effort}} } + setGptOss := func() { + if input.ReasoningConfig.DelegatesDepth() { + return + } + if effort := reasoning.GptOssEffort(string(input.ReasoningConfig.GetEffort(maxTokens))); effort != "" { + familyFields = converseGptOssFields{ReasoningEffort: effort} + } + } switch reasoning.ResolveMechanism(input.ModelID, input.ReasoningConfig.Adaptive, isAnthropicModelID(input.ModelID), c.supportsReasoning(input.ModelID)) { case reasoning.MechanismAdaptive: @@ -258,6 +270,8 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti setNova() case reasoning.MechanismGrokEffort: setGrok() + case reasoning.MechanismGptOssEffort: + setGptOss() } if additionalModelFields.Thinking != nil { if budget := additionalModelFields.Thinking.BudgetTokens; budget > 0 { diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 606078f36..99b0ff64a 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -608,7 +608,12 @@ func TestConverseClient_AdaptiveReasoningNonAnthropicModel(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, capturedInput.InferenceConfig.Temperature, "sampling params stay when adaptive is not applied") - assert.Nil(t, capturedInput.AdditionalModelRequestFields, + require.NotNil(t, capturedInput.AdditionalModelRequestFields) + raw, err := capturedInput.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(raw, &fields)) + assert.Equal(t, map[string]any{"reasoning_effort": "high"}, fields, "an Anthropic request shape does not travel to another vendor") } @@ -1159,10 +1164,17 @@ func TestConverseBudgetPinsTemperatureOnlyForClaude(t *testing.T) { func TestConverseClient_NonClaudeThinkersTakeNoThinkingConfiguration(t *testing.T) { for _, modelID := range []string{ + "us.deepseek.r1-v1:0", + "qwen.qwen3-32b-v1:0", + "mistral.magistral-small-2509", "zai.glm-4.7", + "zai.glm-4.7-flash", + "zai.glm-5", "minimax.minimax-m2.5", - "openai.gpt-oss-120b-1:0", + "minimax.minimax-m2.1", + "minimax.minimax-m2", "moonshot.kimi-k2-thinking", + "nvidia.nemotron-super-3-120b", } { t.Run(modelID, func(t *testing.T) { mockClient := &MockBedrockRuntimeClient{} diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings.go b/llms/bedrock/internal/bedrockclient/converse_warnings.go index e3ac4a5e8..ab5d909d6 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings.go @@ -103,10 +103,12 @@ func converseAdditionalFields(built *bedrockruntime.ConverseInput) map[string]an return fields } -// converseEffortOnTheWire reads the three shapes this door writes: the Claude -// output_config, the Nova reasoningConfig and the Grok reasoning object. +// converseEffortOnTheWire reads the effort from every shape this door writes. func converseEffortOnTheWire(built *bedrockruntime.ConverseInput) (string, bool) { fields := converseAdditionalFields(built) + if effort, ok := fields["reasoning_effort"].(string); ok { + return effort, true + } nested := func(key, effortKey string) (string, bool) { block, ok := fields[key].(map[string]any) if !ok { @@ -134,6 +136,9 @@ func converseMechanismOnTheWire(built *bedrockruntime.ConverseInput) string { sentType, _ := thinking["type"].(string) return sentType } + if effort, _ := fields["reasoning_effort"].(string); effort != "" { + return "effort" + } for _, shape := range []struct{ key, effortKey string }{ {"reasoningConfig", "maxReasoningEffort"}, {"reasoning", "effort"}, diff --git a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go index e47ec8793..cd079199b 100644 --- a/llms/bedrock/internal/bedrockclient/converse_warnings_test.go +++ b/llms/bedrock/internal/bedrockclient/converse_warnings_test.go @@ -211,6 +211,10 @@ func TestConverseReadsTheEffortEveryFamilyWritesItsOwnWay(t *testing.T) { {"us.xai.grok-4.3", llms.ReasoningMax, &llms.Warning{ Kind: llms.WarningClamp, Option: "WithReasoning", Asked: "max", Sent: "xhigh", }}, + {"openai.gpt-oss-120b-1:0", llms.ReasoningLow, nil}, + {"openai.gpt-oss-20b-1:0", llms.ReasoningMax, &llms.Warning{ + Kind: llms.WarningClamp, Option: "WithReasoning", Asked: "max", Sent: "high", + }}, } { t.Run(tc.model, func(t *testing.T) { t.Parallel() diff --git a/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go b/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go new file mode 100644 index 000000000..0710c12bc --- /dev/null +++ b/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go @@ -0,0 +1,63 @@ +package bedrockclient + +import ( + "encoding/json" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestConverseSendsGptOssTheReasoningEffortItDocuments(t *testing.T) { + t.Parallel() + + on := func(effort llms.ReasoningEffort) *llms.ReasoningConfig { + return &llms.ReasoningConfig{Mode: llms.ReasoningOn, Effort: effort} + } + for _, model := range []string{"openai.gpt-oss-120b-1:0", "openai.gpt-oss-20b-1:0"} { + for _, tc := range []struct { + name string + cfg *llms.ReasoningConfig + want map[string]any + }{ + {"low", on(llms.ReasoningLow), map[string]any{"reasoning_effort": "low"}}, + {"medium", on(llms.ReasoningMedium), map[string]any{"reasoning_effort": "medium"}}, + {"high", on(llms.ReasoningHigh), map[string]any{"reasoning_effort": "high"}}, + {"minimal rises to the lowest level", on(llms.ReasoningMinimal), map[string]any{"reasoning_effort": "low"}}, + {"xhigh falls to the highest level", on(llms.ReasoningXHigh), map[string]any{"reasoning_effort": "high"}}, + {"max falls to the highest level", on(llms.ReasoningMax), map[string]any{"reasoning_effort": "high"}}, + {"a budget picks the level", &llms.ReasoningConfig{Tokens: 3000}, map[string]any{"reasoning_effort": "high"}}, + {"delegated depth leaves the level to the model", &llms.ReasoningConfig{Adaptive: true}, nil}, + {"unset reasoning sends nothing", nil, nil}, + } { + t.Run(model+"/"+tc.name, func(t *testing.T) { + t.Parallel() + + temperature, maxTokens := 0.3, 4096 + got, err := NewConverseClient(&MockBedrockRuntimeClient{}).buildConverseInput(&ConverseInput{ + ModelID: model, + Messages: humanTurn(), + Temperature: &temperature, + MaxTokens: &maxTokens, + ReasoningConfig: tc.cfg, + }) + require.NoError(t, err) + + var fields map[string]any + if got.AdditionalModelRequestFields != nil { + raw, err := got.AdditionalModelRequestFields.MarshalSmithyDocument() + require.NoError(t, err) + require.NoError(t, json.Unmarshal(raw, &fields)) + } + assert.Equal(t, tc.want, fields) + + require.NotNil(t, got.InferenceConfig.Temperature, "gpt-oss takes sampling while it reasons") + assert.InDelta(t, temperature, *got.InferenceConfig.Temperature, 0.0001) + require.NotNil(t, got.InferenceConfig.MaxTokens) + assert.EqualValues(t, maxTokens, *got.InferenceConfig.MaxTokens) + }) + } + } +} diff --git a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr index 02caacf11..20bed00ea 100644 --- a/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr +++ b/llms/bedrock/testdata/TestAmazonReasoningConverseAPI.httprr @@ -69,35 +69,35 @@ Content-Type: application/json Date: Sat, 05 Sep 2026 13:43:02 GMT X-Amzn-Requestid: 9875b674-cf06-4155-a7d7-db7774f58cb6 -{"metrics":{"latencyMs":6418},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EswFCn4IERABGAIqQIOXECXE6Au6c2Nrgtv6m3kZZ51gDvnzsk3VDdMxIrZuja16LGz5S8/ea/ZyZR3cKJ4YZwcW+aHmEbUMPmOLX5wyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nWgw5NTA3MjQxMDY5NzISDAsxeyrpfZn2vo3dAxoMMGQRId8PYAqbWx8xIjDR3ORMZy7g7GBqc786H27Be6N/Awbch2Bozjn3bfKHYLg40LyMoWmcPSwtK8W+1fwq+wP0R7XheZNVYTeL0U9gHuqNCN6vUgq9NuHwCBJ2DELRznZfIHSfEfQq7xdPgEPenc5G8dNs1LHBlD4g+K3+G2wazN3k6Z6q/gB7T8u2s4qGWupAwrqd9GfXJcPcgrsAVFl0hmhw953VrIXA1/QvBl3AGJtyXUzpZm2AvSLLteiYQVSXY00V4MK1IdecUpZpTrifYT2pM8CEqqlw3HPcb74F+uedni7WTUPKLJV4h+6QPA5Xm2FiN7gZEulfnOeovvBm9YHNIBX6/wuriV5lmu0BGHJTSCfSPrqEeuMLexCCKvjcGCK3YCbgKonpsO4iHOi/XhMxGuOHMcjRvxnzbRZu9g4UWovVkVlUQfPkUwnVJSh76C8oMzgi8Fz/g4LJOaU2XqY40vb3J0LBlhn1+YXGAzLPoj0AnjjwaNcTzXBuxXfHBks9bV0nFo7djhQlZmQrTwyYLtv9tyzzuglq9A7ExEuu4nSThZMa8nQzgKdggR0V/f5TjbjHhPQS99ynqVRJaAHFl75Jbi0/3I6i1ket2BmDMNRNf78vJ9go8gcqfyivWJs0Lkc6zYZ6IRR60czKVnixzc0zG4qHZmcdOYx5qEqpVEEGG9PnFsTvQ9D18DV0lg8qOVnRLYNBhuLz5sYU2eGi7I3nGAOj7p4rVQTvIZEIngRCmJEeifMYAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nI can use the distributive property to make this easier:\n17 * 23 = 17 * (20 + 3)\n = (17 * 20) + (17 * 3)\n\nFirst part: 17 * 20\n17 * 20 = 17 * 2 * 10 = 34 * 10 = 340\n\nSecond part: 17 * 3\n17 * 3 = 51\n\nNow add them together:\n340 + 51 = 391\n\nLet me verify this another way:\n23 * 17 = 23 * (10 + 7)\n = (23 * 10) + (23 * 7)\n = 230 + (23 * 7)\n\n23 * 7 = 161\n230 + 161 = 391\n\nGood, I get the same answer both ways."}}},{"text":"# Calculating 17 × 23\n\nI'll break this into easier parts using the distributive property:\n\n## Method: Break 23 into (20 + 3)\n\n**17 × 23 = 17 × (20 + 3)**\n\n### Step 1: Calculate 17 × 20\n- 17 × 20 = 340\n\n### Step 2: Calculate 17 × 3\n- 17 × 3 = 51\n\n### Step 3: Add the results\n- 340 + 51 = **391**\n\n## Verification (alternative method):\nBreaking 17 into (10 + 7):\n- 23 × 10 = 230\n- 23 × 7 = 161\n- 230 + 161 = **391** ✓\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":454,"serverToolUsage":{},"totalTokens":509}}439 2087 +{"metrics":{"latencyMs":6418},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"signature":"EswFCn4IERABGAIqQIOXECXE6Au6c2Nrgtv6m3kZZ51gDvnzsk3VDdMxIrZuja16LGz5S8/ea/ZyZR3cKJ4YZwcW+aHmEbUMPmOLX5wyGmNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5OABCCHRoaW5raW5nWgw5NTA3MjQxMDY5NzISDAsxeyrpfZn2vo3dAxoMMGQRId8PYAqbWx8xIjDR3ORMZy7g7GBqc786H27Be6N/Awbch2Bozjn3bfKHYLg40LyMoWmcPSwtK8W+1fwq+wP0R7XheZNVYTeL0U9gHuqNCN6vUgq9NuHwCBJ2DELRznZfIHSfEfQq7xdPgEPenc5G8dNs1LHBlD4g+K3+G2wazN3k6Z6q/gB7T8u2s4qGWupAwrqd9GfXJcPcgrsAVFl0hmhw953VrIXA1/QvBl3AGJtyXUzpZm2AvSLLteiYQVSXY00V4MK1IdecUpZpTrifYT2pM8CEqqlw3HPcb74F+uedni7WTUPKLJV4h+6QPA5Xm2FiN7gZEulfnOeovvBm9YHNIBX6/wuriV5lmu0BGHJTSCfSPrqEeuMLexCCKvjcGCK3YCbgKonpsO4iHOi/XhMxGuOHMcjRvxnzbRZu9g4UWovVkVlUQfPkUwnVJSh76C8oMzgi8Fz/g4LJOaU2XqY40vb3J0LBlhn1+YXGAzLPoj0AnjjwaNcTzXBuxXfHBks9bV0nFo7djhQlZmQrTwyYLtv9tyzzuglq9A7ExEuu4nSThZMa8nQzgKdggR0V/f5TjbjHhPQS99ynqVRJaAHFl75Jbi0/3I6i1ket2BmDMNRNf78vJ9go8gcqfyivWJs0Lkc6zYZ6IRR60czKVnixzc0zG4qHZmcdOYx5qEqpVEEGG9PnFsTvQ9D18DV0lg8qOVnRLYNBhuLz5sYU2eGi7I3nGAOj7p4rVQTvIZEIngRCmJEeifMYAQ==","text":"I need to calculate 17 * 23. Let me break this down step by step.\n\nI can use the distributive property to make this easier:\n17 * 23 = 17 * (20 + 3)\n = (17 * 20) + (17 * 3)\n\nFirst part: 17 * 20\n17 * 20 = 17 * 2 * 10 = 34 * 10 = 340\n\nSecond part: 17 * 3\n17 * 3 = 51\n\nNow add them together:\n340 + 51 = 391\n\nLet me verify this another way:\n23 * 17 = 23 * (10 + 7)\n = (23 * 10) + (23 * 7)\n = 230 + (23 * 7)\n\n23 * 7 = 161\n230 + 161 = 391\n\nGood, I get the same answer both ways."}}},{"text":"# Calculating 17 × 23\n\nI'll break this into easier parts using the distributive property:\n\n## Method: Break 23 into (20 + 3)\n\n**17 × 23 = 17 × (20 + 3)**\n\n### Step 1: Calculate 17 × 20\n- 17 × 20 = 340\n\n### Step 2: Calculate 17 × 3\n- 17 × 3 = 51\n\n### Step 3: Add the results\n- 340 + 51 = **391**\n\n## Verification (alternative method):\nBreaking 17 into (10 + 7):\n- 23 × 10 = 230\n- 23 × 7 = 161\n- 230 + 161 = **391** ✓\n\n**Answer: 17 × 23 = 391**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":55,"outputTokens":454,"serverToolUsage":{},"totalTokens":509}}500 1398 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-120b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 156 +Content-Length: 217 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 1921 +{"additionalModelRequestFields":{"reasoning_effort":"medium"},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 1232 Content-Type: application/json -Date: Sat, 05 Sep 2026 13:43:06 GMT -X-Amzn-Requestid: da7b9b32-e279-4117-8a1c-e42669d82391 +Date: Mon, 14 Sep 2026 23:51:21 GMT +X-Amzn-Requestid: bc7de550-dbb0-4d29-a01b-27dfc88ac601 -{"metrics":{"latencyMs":3096},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We need to answer with step-by-step reasoning for multiplication 17 * 23. Provide process: break down, use distributive property, maybe show long multiplication. Provide final answer."}}},{"text":"**Step‑by‑step multiplication of 17 × 23**\n\n---\n\n### 1. Write the numbers in a convenient order\nIt’s usually easier to multiply the larger number by the smaller one, but either way works. \nWe’ll multiply **23** by **17**.\n\n```\n 23\n × 17\n ----\n```\n\n### 2. Multiply by the units digit (7)\n\n- 7 × 3 = 21 → write 1, carry 2. \n- 7 × 2 = 14; add the carry 2 → 14 + 2 = 16. \n\nSo the first partial product (for the 7) is **161**.\n\n```\n 23\n × 17\n ----\n 161 ← 7 × 23\n```\n\n### 3. Multiply by the tens digit (1), remembering its place value\n\nThe tens digit of 17 is **1**, but because it’s in the tens place we actually multiply by **10**.\n\n- 1 × 3 = 3 → write 3. \n- 1 × 2 = 2 → write 2.\n\nNow shift this result one place to the left (add a zero) to reflect the factor of 10:\n\n```\n 23\n × 17\n ----\n 161 ← 7 × 23\n+ 230 ← 1 (i.e., 10) × 23\n```\n\n### 4. Add the two partial products\n\n```\n 161\n+ 230\n-------\n 391\n```\n\n### 5. Result\n\n\\[\n17 \\times 23 = 391.\n\\]\n\n---\n\n#### Quick check with another method (distributive property)\n\n\\[\n\\begin{aligned}\n17 \\times 23 &= (10+7) \\times (20+3) \\\\\n&= 10\\!\\times\\!20 \\;+\\; 10\\!\\times\\!3 \\;+\\; 7\\!\\times\\!20 \\;+\\; 7\\!\\times\\!3 \\\\\n&= 200 \\;+\\; 30 \\;+\\; 140 \\;+\\; 21 \\\\\n&= 391.\n\\end{aligned}\n\\]\n\nBoth approaches give the same answer, confirming that **17 × 23 = 391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":551,"serverToolUsage":{},"totalTokens":636}}438 2300 +{"metrics":{"latencyMs":1979},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"User asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" So we need to compute multiplication, step-by-step explanation. 17*23 = (20+3)*17? Actually 23*17 = 23*10 + 23*7 = 230 + 161 = 391. Or 17*20 + 17*3 = 340 + 51 = 391. Provide reasoning. They want step-by-step. So answer: 391. Provide explanation."}}},{"text":"**Step‑by‑step multiplication**\n\nWe want \\(17 \\times 23\\).\n\n1. **Break one number into tens and ones** \n Write 23 as \\(20 + 3\\).\n\n2. **Distribute the multiplication over the sum** \n \\[\n 17 \\times 23 = 17 \\times (20 + 3) = 17 \\times 20 + 17 \\times 3\n \\]\n\n3. **Multiply each part** \n * \\(17 \\times 20 = 340\\) (because \\(17 \\times 2 = 34\\), then add a zero) \n * \\(17 \\times 3 = 51\\) (because \\(10 \\times 3 = 30\\) and \\(7 \\times 3 = 21\\); \\(30 + 21 = 51\\))\n\n4. **Add the two results together** \n \\[\n 340 + 51 = 391\n \\]\n\nTherefore,\n\n\\[\n\\boxed{17 \\times 23 = 391}\n\\]"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":346,"serverToolUsage":{},"totalTokens":431}}499 3594 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-20b-1%3A0/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr -Content-Length: 156 +Content-Length: 217 Authorization: AWS4-HMAC-SHA256 test-api-key Content-Type: application/json -{"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK -Content-Length: 2134 +{"additionalModelRequestFields":{"reasoning_effort":"medium"},"inferenceConfig":{"maxTokens":4096},"messages":[{"content":[{"text":"Think step by step: What is 17 * 23? Show your reasoning process."}],"role":"user"}]}HTTP/2.0 200 OK +Content-Length: 3428 Content-Type: application/json -Date: Sat, 05 Sep 2026 13:43:10 GMT -X-Amzn-Requestid: 4b723297-ee28-471c-9714-415c52417ece +Date: Mon, 14 Sep 2026 23:51:27 GMT +X-Amzn-Requestid: c5dfd7af-d3d3-4a0a-8c13-758129da41c3 -{"metrics":{"latencyMs":3241},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"The user asks: \"Think step by step: What is 17 * 23? Show your reasoning process.\" Straightforward multiplication: 17 × 23. 17 * 23 = (17 * 20) + (17 * 3) = 340 + 51 = 391.\n\nBut the user wants step-by-step reasoning. Could show as 17 * 30 - 17 * 7? But simple: 23 = 20 + 3. So 17*20 = 340, 17*3 = 51, sum 391.\n\nAlso show long multiplication: maybe show two-digit multiplication: 23 * 17: 3 * 17 = 51, write 51; 2*17 = 34, shift one: 340, sum 391. But they said \"Think step by step: What is 17 * 23? Show your reasoning process.\"\n\nWe can respond with description of the multiplication using distributive property or long multiplication.\n\nJust the answer, 391. Also pretty method: use associativity: 17 * 23 = (10+7) * 23 = 10*23 + 7*23 = 230 + 161 = 391.\n\nThus answer: 391.\n\nWill provide step-by-step. Let's create rational explanation.\n\nPotential deliverable: step 1: break one number into sum of place values, step 2: multiply each part, step 3: sum contributions.\n\nLet's produce a detailed reasoning."}}},{"text":"Sure! Let’s multiply \\(17\\) by \\(23\\) step‑by‑step, using the distributive property and some basic arithmetic.\n\n---\n\n### 1. Break one of the numbers into place values \nWe can write \\(23\\) as \\(20 + 3\\). \n(You could also split \\(17\\) into \\(10 + 7\\); either way works.)\n\n### 2. Multiply \\(17\\) by each component \n- \\(17 \\times 20 = 340\\) (because \\(17 \\times 2 = 34\\) and then add a zero for the *10* multiplier) \n- \\(17 \\times 3 = 51\\)\n\n### 3. Add the two products together \n\\(340 + 51 = 391\\)\n\nSo,\n\n\\[\n17 \\times 23 = 341 + 51 = \\boxed{391}\n\\]\n\n---\n\n#### Alternative view: using long multiplication\n\n```\n 1 7\n × 2 3\n ______\n 5 1 (3 × 17)\n +3 4 0 (20 × 17, shift one place left)\n ______\n 3 9 1\n```\n\nBoth approaches give the same result: **391**."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":593,"serverToolUsage":{},"totalTokens":678}}439 1544 +{"metrics":{"latencyMs":5181},"output":{"message":{"content":[{"reasoningContent":{"reasoningText":{"text":"We need to compute 17 * 23. Show reasoning process: likely mention multiplication, possible breakdown, maybe prime factorization, etc.\n\nWe should explain step by step, perhaps using long multiplication approach or using distributive property: 17*23 = 17*(20+3) = 17*20 + 17*3 = 340 + 51 = 391. Provide reasoning. Then maybe alternative methods: cross multiplication, or using calculator. Provide step by step explanation.\n\nGiven the instruction: \"Think step by step: What is 17 * 23? Show your reasoning process.\" We need to show reasoning. Possibly use different methods.\n\nThe answer: 391.\n\nWe can also verify by other method: 23*10=230; 23*7=161; sum=391.\n\nWe could also compute using long multiplication.\n\nThus the output will detail the calculation.\n\nGiven the question, user expects step-by-step reasoning. We can answer with reasoning.\n\nThus we produce the solution."}}},{"text":"Sure! Let’s work through the multiplication of 17 by 23 step by step, using a couple of different approaches so you can see the reasoning from multiple angles.\n\n---\n\n## 1️⃣ Shift‑and‑Add (Distributed Property)\n\nThe distributive law of multiplication over addition says:\n\\[\na \\times (b + c) = a \\times b + a \\times c\n\\]\n\n### Step 1: Break 23 into 20 + 3\n\\[\n17 \\times 23 = 17 \\times (20 + 3)\n\\]\n\n### Step 2: Apply the distributive law\n\\[\n= 17 \\times 20 + 17 \\times 3\n\\]\n\n### Step 3: Compute each product\n- \\(17 \\times 20 = 17 \\times 2 \\times 10 = 34 \\times 10 = 340\\)\n- \\(17 \\times 3 = 51\\) (just standard multiplication or “7 + 14 + 21”! )\n\n### Step 4: Add the two results\n\\[\n340 + 51 = 391\n\\]\n\n**Answer:** \\(17 \\times 23 = 391\\).\n\n---\n\n## 2️⃣ Traditional Long Multiplication\n\nWrite the numbers vertically and multiply digit by digit.\n\n```\n 17\n × 23\n ------\n 51 ← 17 × 3 (units place)\n 340 ← 17 × 20 (tens place, shift one position left)\n ------\n 391\n```\n\n- Multiply 7 (units of 17) by 3 → 21, write 1, carry 2.\n- Multiply 1 (tens of 17) by 3 → 3, add carry 2 → 5 → write 51.\n- Multiply 7 by 2 → 14, write 4, carry 1.\n- Multiply 1 by 2 → 2, add carry 1 → 3 → write 340.\n- Add 51 + 340 → 391.\n\n---\n\n## 3️⃣ Quick Check Using Base‑10 Slots\n\nTreat 17 and 23 as “10‑plus” numbers:\n\n- 17 = 10 + 7 \n- 23 = 20 + 3\n\nThen multiply each pair:\n\n| Multiply | Result |\n|-----------|--------|\n| \\(10 \\times 20\\) | 200 |\n| \\(10 \\times 3\\) | 30 |\n| \\(7 \\times 20\\) | 140 |\n| \\(7 \\times 3\\) | 21 |\n| **Sum** | 200 + 30 + 140 + 21 = **391** |\n\n---\n\n## 4️⃣ Cross‑Multiplication Confirmation (Optional)\n\nUse the identity \\((a+b)(c+d) = ac+ad+bc+bd\\):\n\n- \\(a = 10\\), \\(b = 7\\); \\(c = 20\\), \\(d = 3\\).\n\n\\[\n(10+7)(20+3) = 10\\!\\times\\!20 + 10\\!\\times\\!3 + 7\\!\\times\\!20 + 7\\!\\times\\!3\n= 200 + 30 + 140 + 21 = 391\n\\]\n\nSame result!\n\n---\n\n### Final Result\n\\[\n\\boxed{391}\n\\]\n\nThe number 391 is the product of 17 and 23. If you want to double‑check, just plug it back into the original statement: \\(391 ÷ 17 ≈ 23\\)."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":85,"outputTokens":987,"serverToolUsage":{},"totalTokens":1072}}439 1544 POST https://bedrock-runtime.us-east-1.amazonaws.com/model/moonshot.kimi-k2-thinking/converse HTTP/1.1 Host: bedrock-runtime.us-east-1.amazonaws.com User-Agent: langchaingo-httprr diff --git a/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr b/llms/bedrock/testdata/TestAmazonReasoningStreamingConverseAPI.httprr index 4ffbcc5d4c449884778042134d4aca0419b4e3a5..34cae46366fa344868267d4ae82c97d740623d37 100644 GIT binary patch delta 4067 zcmb7H4RBP|70#6qf|U^dHzdH#CWPH=cJqGrCs~s~B+#G%L4;IYgtz-{l4o|`TlT$8 zh;d2ePyUs8ws$CH_;KoVCI~@iYEmg#UIvv}JwdcP5VFR`^ zW%72}ckes*JLi1oJLhdaU-aDjMZ>32pRL%(1+Z7}dFe(QdUuS#2k1x)J!;P0fh!V3 z(lu34yVsJgE-hi$gZ3Dam1NAGs-u&3qqAeU0B5#d43;g`)H=+2@k$cM0w?&fAO?MW zP-vuU+mWr>%LRP0ztQiGbVYn_FHeYD5;(7040AqTmlPI#jbU2Cq3xy+PnrwH-$#G9 z1kEb4r+&5k#s{=$I_fuDt~Z$R$%W>{wy}ks>wf$KeP}+~Ko8GB^XTFPnoj=`MiWc= z6{82|P}6;WG=uID&^Y?_EHuvH!OIg`SPDl6a2WnzUoZHEWvyQgVm?qSh`1R$c+On0 zdLW>Yxw@mjbGQnMnDn+rR>ir}U z#9|}wF`r#Kt8~pjKkXJy>0yXd6vqd_?2H!r=soUSN=LzcIoDdr)=3pWeq zxks3PyXe;qsC*gLx~>eLFrI^|(|Dsr;zZv_QN1W27{Z`^yqyeUNK3tQ3D zxqJXzoZ0UQdgU!RoZP{<$~j6txP%G{y%520CT6|JvEv+rB{@RAN@92@VSPgq*x^oyH+)+Wx9;;? zC{zhhlo-+Bf3O+~-S2`6(B`k0Bf3~RSvD2|fO-bNb~(N*2cWG|%sm&#e=OhN=mjwY zZw-sP$l^|SHKQ_zuEgR|l3+BDlMzF|%ac$jOu7}-l$y#QCeJ)|dK*9rFi7q3;}dd_ zh6bgm(ybDRE{g-WpYal^3D-2kC%Xgx?pPHuTNU#bS;nmRuqW9f@BP+Q5o*{Thl-ZM z5t*3F67v9Gs_OlJ1HNX4@1Ap~kLM^cWSJ89Oc;nNj|LnHS&{Lw$h69`#mBgmFcheT z1ksaGL&t{JO@OC~yJEzggDi7EIw9W`_QPf2Z=Qt3K%N`$10q@uh^KIMUO?<)h=o_a ziRBPiy0E~5MX131-1!*7M=V6NZ5ZLYJ2$M<>eA@b8HL&dX@Gi`0h_sEs~^tv1aJHt z&f5vs>WXJJA22I>dg=TfXacNVioJ6%v$kTBZF+;b;J53{q4t@jH*Xv-f`wafEgRTW za+KCDLS2P?V?(2PYKqHz_PH{8X%U({Mhx)uViZ-EdVT&>YU72yzw~i_+|b~qDI4mb zSKVmS|0mLK+|%GU7wl}Z{TGcE=}0{)^YV>?w=od#x@CU=BwFS0&+&kf3!2cp#kGyqWmCO%!YIJ=$npQafvpH?%x_35Ywc7K-Dii6^MoChR9d|egF>_3 zh;;+HI&@6-9b^JnRb?I#oM7?q2V?u8`lhj1eX;(clB>Q&5Uf?uffBmGN{6*4kjQY9 z#6l`0TP4t&3@w|x0cMp+KU7*yy+Cs5$X3(>k!d;owvQejLc1C=I#X3ug$3xjN~9M{ zfGZ&xqhn{)2YTw zLA5m*^FiE}jU5XUFwF`R+m#+dKp>^23NZJ*Ukf|TpDo*9g=C(jvp}XhIm7@vEPO6( zp|kj8<(@uYgIa)7Q}^GK0xw}SDd;@)C9uG<)QNXI|6bNgMTZ3>k7&TN467DqM2Sd|9?ZIzWfzzX@bex31JG8y zFmNzBFb*Y;9T3gg`_ul8wMH3welseowl*@KGew|c37VsXpC$<{JudYSuwerm0}--@ z+P0$IVwV&#V3OiFU`t2^nvXu74XHjJjIz~CuVs0h4@LrC&h_Phl)x;OZNA_MMF-LB zBG%qQA+z!q4%pt+@!Bq z1=+?z4!j%rj~FkUxOFMz`(%=kyGegDci+z1lO#$^oc8_4}X zNmqpzTW?gY)*BV|w8FcdJdE7n{^uQAeq@e(l+F)*uojiCvZO!VZ4@;EV*z_Ll8kJl z$qorQ`5-#h`bZ+5rl3IQUwIWU-=!T>-B7&>qf1@3pa-y&NH8^oGuW}Z6eF3M^H|*r z!hqKlv$lH#uGPn42lr;j#c5{zu}P)pDk8^Vg$Ync=oG!U0oz4So!8+Mf{nOYwo+0&K1kY~D@fC~ zW&ws9llN}WE+dPf9*)5k(d!gExQ=~iUfGKf5Maw27TmbaVA9FI|Lg||XXXf1hhadD+B?RNPXN@xh6aw}@x)LQsi@_6>l_0lEXDvQ@AiWt(8F zX(`Exkuml<#(ujaT0~p1Vg(l5#C2PQtD(Ywwb0djz+TS*R9Oq&ipG@$Ry9k&fJqoNCZd&~sDqjX#qJvoUJfalVa089M zjy6F+cIodFLn7Ik+s|D*zmK_nq(jUB#1MT5weR6~E_H9tr(QSSmJJQ015@jLL@Po6 z*#P>M|7PQ{hxH9RSa$jac4tba&yAZimN92wLoq>vNsBk2WmPPWemCCGtH=jqW5@wsJbrs=1k5`QPv_p5BhS^TmKCL`H9} zB?pgG(vO^|j1;e2RpRq{)9LXy&rbS$e(VoZ9M? zhWg36&soan4V_v|gS*hHH0eQe=&hxwJTjPJF?Wtoz%@Dqrl%J&Lo#(u)p{Ty^i({C zV>*uOT2GEGR9Rx-uE)B8qj2~D3!IY$F2{&OxK>AgvU_fE^764ifNPxKny&G@d+Qjh zlD*UUGJ^sx3ZA;418B98kyEXS&0f7fr%}O~Of%iMgDp$(9^C*2Ppruq!D+QY^m^8k z$$u;*_-xVq4=+Bk5p=gR-TP*^=~xp=@NTe)ac=`~?pkc75`f!N2QLkrew!H!B~_~% zh{()J2ebGdR}FNbcjG=)q9vQrf_dx+>}L{nEk%CBYBC&}eGgQ(GS$B|(tqO3gpQA* z%C=0)U{|1raPAK}nd7`Z_Tr!32SjhiDfdIfc-Ivjbg^$v$R@dZYBkw^yEOmQU*4EU z-fBEVi#yShg}DZm!JX@RZZa0FEv~I|Z2@2`k2?z@TLxLjI1He_m%sIC03BeUQ^h}c zpZAM-PG`q7;-@zcqk7=3hiMm_$ofHsY?`q-2nZ99B{DB~)x;LPYD50=j$O9&>VfEW z&~udOIk}~!k`v@?=mfktolg387pfR`Ix+Y;%OKf|!+IaI5TIw3<)0e^jxI<81uK%= zi?viD%C>>Yd0gQ-^bt*!p%a|MNy)HGY)|UY{Y@s?QZxteVJ?>opl4edP@t{@lnMzt zht{WPs-juA2MQwz1wk8IP>_7Gp(KBs@WBYHs7xmsUJvZXGJ*9Fr~_zTSdKF}(E74A zC|s-HsmG9EW-_i?8Q8o%N(_$4L2?-qPH8IOWvCfZYA&EV`?OSxM1X7gA}c%kW!dwJy(KNQz0$a?BQ?mkZ+gR{P zIHnG8p0K6sZAsf2n-rB}N_S7MYD@1fnx6#MKGLIYKq)!lj13qDJ`%u;l*L2G?5J$` z{?0TzU}mtl<(fO*kd3L#$Apv#6_IJE7G#5D#CVs0m_Jmt8SZB0@87>aqGA3Kg8bKI zilJcOXCcO!kkaNBv;gSn#IC{;Fo;oA*M-+wf6ZxPH@^!eVMy5^hTC4qxjM}0^Zug9 zs;pP-wy>@#I2o5@1;>?ci`7i-lK}!Q;jm~)D=J_5;E0f!km?x`bgM>!jK5b-E*7!= z>ip!fm85uEX3(80>xQAomZq4do4$G$Eu0Bi#+_Q@hV*zaShjTW@iPdFdLEw6r~dlY z6S+}iE*M>4_}D*?Bk;68{oJ+ZVaC|YXN=2(vv$GaU3j){oTx3$%^0B&xlmS5Mvqjn q8KZQjKkTK=$5Bm5AQ(!g$vcJbv%h6wU)aY6jc>pE&o;Dt&;I}hnNa!w diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 0d0c8ca28..154828363 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -34,6 +34,18 @@ func IsBedrockAlwaysReasoningModel(model string) bool { return strings.Contains(baseModelName(model), "deepseek.r1") } +// IsGptOssModel reports whether the Bedrock model is one of OpenAI's gpt-oss models. +func IsGptOssModel(model string) bool { + base := baseModelName(model) + return strings.Contains(base, "openai.gpt-oss-120b") || strings.Contains(base, "openai.gpt-oss-20b") +} + +var gptOssCaps = OpenAIReasoningCaps{Known: true, Efforts: []string{"low", "medium", "high"}} + +func GptOssEffort(effort string) string { + return gptOssCaps.ClampEffort(strings.ToLower(effort)) +} + // IsGrokModel reports whether the Bedrock model belongs to the xAI Grok family, // which carries its effort in a reasoning object rather than a thinking one. func IsGrokModel(model string) bool { diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index 5b3e25efa..1a2cd764a 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -72,6 +72,34 @@ func TestGrokEffortFollowsTheGeneration(t *testing.T) { } } +func TestGptOssIsRecognisedOnlyByItsBedrockNames(t *testing.T) { + for _, model := range []string{"openai.gpt-oss-120b-1:0", "openai.gpt-oss-20b-1:0"} { + if !IsGptOssModel(model) { + t.Errorf("%s is gpt-oss", model) + } + } + for _, model := range []string{ + "openai.gpt-oss-safeguard-120b", "openai.gpt-oss-safeguard-20b", + "gpt-oss-120b", "openai/gpt-oss-20b", "gpt-oss:120b", "us.amazon.nova-2-lite-v1:0", + } { + if IsGptOssModel(model) { + t.Errorf("%s does not take the Bedrock gpt-oss effort field", model) + } + } +} + +func TestGptOssEffortCollapsesOntoThreeLevels(t *testing.T) { + cases := map[string]string{ + "minimal": "low", "low": "low", "medium": "medium", + "high": "high", "xhigh": "high", "max": "high", "": "", + } + for in, want := range cases { + if got := GptOssEffort(in); got != want { + t.Errorf("GptOssEffort(%q) = %q, want %q — Bedrock refuses anything outside low/medium/high", in, got, want) + } + } +} + func TestAlwaysReasoningModelCannotExpressOffOnAnyDoor(t *testing.T) { for _, model := range []string{"us.xai.grok-4.6", "xai.grok-4.6"} { for _, p := range []Provider{ProviderBedrock, ProviderOpenAI} { @@ -97,8 +125,8 @@ func TestMechanismSeparatesTheBedrockFamilies(t *testing.T) { {"us.xai.grok-4.6", false, MechanismGrokEffort}, {"us.anthropic.claude-opus-4-5-20251101-v1:0", true, MechanismBudget}, {"us.deepseek.r1-v1:0", false, MechanismNone}, - {"openai.gpt-oss-120b-1:0", false, MechanismNone}, - {"openai.gpt-oss-20b-1:0", false, MechanismNone}, + {"openai.gpt-oss-120b-1:0", false, MechanismGptOssEffort}, + {"openai.gpt-oss-20b-1:0", false, MechanismGptOssEffort}, {"mistral.magistral-small-2509", false, MechanismNone}, {"moonshot.kimi-k2-thinking", false, MechanismNone}, {"moonshotai.kimi-k2.5", false, MechanismNone}, diff --git a/llms/reasoning/mechanism.go b/llms/reasoning/mechanism.go index 91c1a5cf5..9ad3a7ad1 100644 --- a/llms/reasoning/mechanism.go +++ b/llms/reasoning/mechanism.go @@ -9,6 +9,7 @@ const ( MechanismBudget MechanismNovaReasoningConfig MechanismGrokEffort + MechanismGptOssEffort ) // ResolveMechanism picks the thinking mechanism for a model the caller asked to @@ -29,6 +30,8 @@ func ResolveMechanism(model string, adaptive, claudeFamily, reasons bool) Mechan return MechanismNovaReasoningConfig case IsGrokModel(model): return MechanismGrokEffort + case IsGptOssModel(model): + return MechanismGptOssEffort case IsBedrockAlwaysReasoningModel(model): return MechanismNone case reasons && claudeFamily: diff --git a/llms/reasoning/mechanism_test.go b/llms/reasoning/mechanism_test.go index 04c80e772..64b45a94b 100644 --- a/llms/reasoning/mechanism_test.go +++ b/llms/reasoning/mechanism_test.go @@ -35,7 +35,11 @@ func TestResolveMechanism(t *testing.T) { }, { "a non-Claude family with no mechanism of its own gets nothing", - "openai.gpt-oss-120b-1:0", true, false, true, reasoning.MechanismNone, + "zai.glm-5", true, false, true, reasoning.MechanismNone, + }, + { + "gpt-oss takes the effort field its request body documents", + "openai.gpt-oss-120b-1:0", true, false, true, reasoning.MechanismGptOssEffort, }, { "a model the door does not consider reasoning gets nothing", From e24602811c1630da76deddb34a9844bdae86eeac Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 02:59:44 +0300 Subject: [PATCH 526/618] fix(llms): offer the gpt-oss levels on the Bedrock hint ReasoningSupportFor reported both gpt-oss models on Bedrock as unclassified: no levels, no mechanism, no default state. A settings form built from the hint therefore offered no control at all, although the Converse door now sends reasoning_effort for them. On the Bedrock provider the hint now says what the door does: the model is known to reason and does so when reasoning is unset, it takes an effort level, and the levels are exactly low, medium and high, the ones the door sends unchanged. Off stays refused, since the door answers it with a typed error. Every other open model on Bedrock keeps a hint without levels, since AWS documents no reasoning field for them, and the openai door keeps its own hint for the same names. The test fails on the old hint for both gpt-oss names; offering xhigh, dropping the provider guard, the levels or the default state each turn it red again. PAGI-354 Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 9 ++++- llms/reasoning_support.go | 11 ++++++ llms/reasoning_support_test.go | 55 ++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 154828363..3fb7345d3 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -1,6 +1,9 @@ package reasoning -import "strings" +import ( + "slices" + "strings" +) // IsNovaReasoningModel reports whether the Bedrock model takes Amazon Nova's // reasoningConfig. @@ -46,6 +49,10 @@ func GptOssEffort(effort string) string { return gptOssCaps.ClampEffort(strings.ToLower(effort)) } +func GptOssEfforts() []string { + return slices.Clone(gptOssCaps.Efforts) +} + // IsGrokModel reports whether the Bedrock model belongs to the xAI Grok family, // which carries its effort in a reasoning object rather than a thinking one. func IsGrokModel(model string) bool { diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 60f29778c..bd8c8eddf 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -103,6 +103,17 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } + if p == reasoning.ProviderBedrock && reasoning.IsGptOssModel(model) { + return ReasoningSupport{ + Supported: true, + Known: true, + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + Efforts: toReasoningEfforts(reasoning.GptOssEfforts()), + Mechanism: ReasoningMechanismAdaptive, + DefaultOn: boolPtr(true), + } + } + if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { return ReasoningSupport{ Supported: true, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 27fbae2e8..739a1a7de 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -454,6 +454,61 @@ func TestTheBedrockHintReportsTheRefusalTheDoorWillGive(t *testing.T) { } } +func TestTheBedrockHintOffersOnlyTheLevelsTheConverseDoorSends(t *testing.T) { + t.Parallel() + + levels := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh} + for _, tc := range []struct { + model string + efforts []ReasoningEffort + mechanism ReasoningMechanism + }{ + {"openai.gpt-oss-120b-1:0", levels, ReasoningMechanismAdaptive}, + {"openai.gpt-oss-20b-1:0", levels, ReasoningMechanismAdaptive}, + {"us.deepseek.r1-v1:0", nil, ReasoningMechanismUnknown}, + {"qwen.qwen3-32b-v1:0", nil, ReasoningMechanismUnknown}, + {"mistral.magistral-small-2509", nil, ReasoningMechanismUnknown}, + {"moonshot.kimi-k2-thinking", nil, ReasoningMechanismUnknown}, + {"zai.glm-4.7", nil, ReasoningMechanismUnknown}, + {"zai.glm-4.7-flash", nil, ReasoningMechanismUnknown}, + {"zai.glm-5", nil, ReasoningMechanismUnknown}, + {"minimax.minimax-m2.5", nil, ReasoningMechanismUnknown}, + {"minimax.minimax-m2.1", nil, ReasoningMechanismUnknown}, + {"minimax.minimax-m2", nil, ReasoningMechanismUnknown}, + {"nvidia.nemotron-super-3-120b", nil, ReasoningMechanismUnknown}, + } { + t.Run(tc.model, func(t *testing.T) { + t.Parallel() + + s := ReasoningSupportFor(tc.model, reasoning.ProviderBedrock) + if !slices.Equal(s.Efforts, tc.efforts) { + t.Errorf("%s: hint Efforts = %v, want %v", tc.model, s.Efforts, tc.efforts) + } + if s.Mechanism != tc.mechanism { + t.Errorf("%s: hint Mechanism = %v, want %v", tc.model, s.Mechanism, tc.mechanism) + } + for _, effort := range s.Efforts { + if sent := reasoning.GptOssEffort(string(effort)); sent != string(effort) { + t.Errorf("%s: the hint offers %q but the door sends %q", tc.model, effort, sent) + } + } + if len(tc.efforts) == 0 { + return + } + if !s.Supported || !s.Known { + t.Errorf("%s: a model whose levels are documented is known to reason: %+v", tc.model, s) + } + if s.DefaultOn == nil || !*s.DefaultOn { + t.Errorf("%s: the model reasons when reasoning is unset, the hint must say so", tc.model) + } + if other := ReasoningSupportFor(tc.model, reasoning.ProviderOpenAI); len(other.Efforts) > 0 { + t.Errorf("%s: the openai door never sends the Converse field, yet its hint advertises %v", + tc.model, other.Efforts) + } + }) + } +} + func TestTheHintNamesTheMechanismTheDoorActuallyUses(t *testing.T) { t.Parallel() From 1c592be45f06285dd29bfd4f93ef08ed7abe8dbf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:04:30 +0300 Subject: [PATCH 527/618] test(llmtest): spare a door that reports the tools dropped (PAGI-337) The ToolCalls subtest now fails a door that answers without a call, and the tool probe counted every door that did not error as tool-capable. The huggingface door builds no tools field and reports WithTools as a drop, so a run with a token went red on ToolCalls: the request carried no tools, and the model had nothing to call. The same drop is reported by legacy anthropic completions and by bedrock legacy payloads for non-Anthropic models. The probe now reads the warnings on its own response and declines a door that reports WithTools dropped, so no call site has to declare it. The huggingface suite run against a fake server that answers in prose fails ToolCalls before this change and passes after it; the bedrock recordings still run ToolCalls and pass. A suite run over a mock that reports the drop fails without the check. Three probe cases pin the check to its scope: no warning, a drop of another option, and a clamp on WithTools each keep the door held to the tool contract, and loosening either half of the condition turns one of them red. Co-Authored-By: Claude Opus 5 --- testing/llmtest/llmtest.go | 8 +++++++- testing/llmtest/llmtest_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/testing/llmtest/llmtest.go b/testing/llmtest/llmtest.go index 1d8816e51..a91281a10 100644 --- a/testing/llmtest/llmtest.go +++ b/testing/llmtest/llmtest.go @@ -8,6 +8,7 @@ import ( "context" "errors" "fmt" + "slices" "strings" "sync" "testing" @@ -116,10 +117,15 @@ func supportsTools(model llms.Model) bool { } // Try with tools - if it doesn't error out, it's supported - _, err := model.GenerateContent(ctx, messages, + resp, err := model.GenerateContent(ctx, messages, llms.WithTools(tools), llms.WithMaxTokens(1), ) + if resp != nil && slices.ContainsFunc(resp.Warnings, func(w llms.Warning) bool { + return w.Kind == llms.WarningDrop && w.Option == "WithTools" + }) { + return false + } // If we get a specific "tools not supported" error, return false // Otherwise assume it's supported (even if other errors occur) diff --git a/testing/llmtest/llmtest_test.go b/testing/llmtest/llmtest_test.go index 69a3c6396..2fdf05ac3 100644 --- a/testing/llmtest/llmtest_test.go +++ b/testing/llmtest/llmtest_test.go @@ -86,6 +86,34 @@ func TestTheSuitePassesADoorThatCallsTheTool(t *testing.T) { assert.False(t, failsToolCalls(t, caller)) } +func TestTheSuiteSparesADoorThatReportsTheToolsDropped(t *testing.T) { + dropping := &MockLLM{GenerateResponse: &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: "Hello"}}, + Warnings: []llms.Warning{{Kind: llms.WarningDrop, Option: "WithTools", Asked: "1 tools"}}, + }} + + TestLLM(t, dropping) +} + +func TestTheToolProbeHoldsADoorThatDoesNotReportTheToolsDropped(t *testing.T) { + t.Parallel() + + for name, warnings := range map[string][]llms.Warning{ + "no warning": nil, + "another option dropped": {{Kind: llms.WarningDrop, Option: "WithSeed", Asked: "7"}}, + "the tools clamped": {{Kind: llms.WarningClamp, Option: "WithTools", Asked: "2 tools", Sent: "1 tools"}}, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + door := &MockLLM{GenerateResponse: &llms.ContentResponse{ + Choices: []*llms.ContentChoice{{Content: "Hello"}}, Warnings: warnings, + }} + assert.True(t, supportsTools(door)) + }) + } +} + // TestValidateLLM tests the validation function. func TestValidateLLM(t *testing.T) { // Test with nil model From d1a8ef8d9f026eb02203f9b2aa0a539b744d9e7b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:06:09 +0300 Subject: [PATCH 528/618] test(openai): hold the qwen3-max budget warning to the wire, not to 2730 (PAGI-337) The qwen3-max budget test pinned thinking_budget 2730 and a warning Sent of "2730 tokens". That number is 4096 * 2/3, the general reasoning cap the door applies under the answer limit. DashScope's deep-thinking page states that max_tokens limits only the final reply while max_completion_tokens covers the chain of thought and the reply, and that thinking_budget defaults to the model's maximum chain-of-thought length. Nothing there ties the thinking budget to max_tokens, so the test wrote an undocumented value into its contract. The test now checks what the library owns: the clamp warning's Sent is exactly the thinking_budget on the wire. The cut the door makes today is still what makes the clamp appear, as it did before this branch; whether DashScope should get that cut at all is a separate change to the door. Checked with mutations: halving the budget the DashScope branch writes, with the warning reporting it, turned the old test red and leaves this one green; dropping Sent from the budget clamp, or reporting one token more than the wire carries, turns it red. Co-Authored-By: Claude Opus 5 --- llms/openai/sampling_warnings_test.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 3538d9c47..1019c7365 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -3,6 +3,7 @@ package openai import ( "context" "encoding/json" + "fmt" "io" "net/http" "net/http/httptest" @@ -156,11 +157,11 @@ func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) w := warningFor(t, resp, "WithReasoning") - if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" || w.Sent != "2730 tokens" { + if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" { t.Errorf("reasoning warning = %+v (all: %v)", w, resp.Warnings) } - if got := sent["thinking_budget"]; got != float64(2730) { - t.Errorf("thinking_budget on the wire = %v, want the 2730 the warning reports", got) + if wire := fmt.Sprintf("%v tokens", sent["thinking_budget"]); w.Sent != wire { + t.Errorf("the warning reports %q sent, the wire carries %s", w.Sent, wire) } } From 1d8ad3ca90c82b412fc9791c2599f69bf92fbac9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:04:02 +0300 Subject: [PATCH 529/618] fix(openai): take DeepSeek's temperature rule only on DeepSeek's own host DashScope serves DeepSeek under the same bare names (deepseek-v4-pro, deepseek-v4-flash) and documents temperature as a settable parameter there, with no word of it being ignored while thinking. The rule that leaves temperature out while DeepSeek thinks read the bare name alone as DeepSeek's own API, so pentagi's Qwen provider, which sends bare deepseek-v4-pro to dashscope-us.aliyuncs.com with enable_thinking, lost the caller's temperature and got a warning that was not true for that host; enable_thinking:false did not help either. The door now keeps the host of its base URL, and the predicate counts a bare DeepSeek name as DeepSeek's API only on api.deepseek.com; the deepseek/ route of LiteLLM keeps counting on any host. Verified: bare deepseek-v4-pro and deepseek-v4-flash on the DashScope host and on a gateway host keep temperature 0.4 with no warning, while the same names on api.deepseek.com still drop it with the warning. Removing the host check turns TestServedByDeepSeek and TestDeepSeekOnAnotherHostKeepsItsTemperatureWhileThinking red; leaving the door's host empty turns TestDeepSeekThinkingLeavesOutTheTemperatureItIgnores red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 92 +++++++++++++++++++++------ llms/openai/openaillm.go | 10 +-- llms/openai/sampling_warnings.go | 4 +- llms/reasoning/effort_wire.go | 10 ++- llms/reasoning/effort_wire_test.go | 41 +++++++----- 5 files changed, 114 insertions(+), 43 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index baf2e1303..ff03e14bb 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "io" + "net" "net/http" "net/http/httptest" "strings" @@ -77,21 +78,61 @@ func TestDeepSeekV32KeepsSamplingEvenWithAnEffortOnTheWire(t *testing.T) { } } +const ( + deepSeekBaseURL = "http://api.deepseek.com" + dashScopeBaseURL = "http://dashscope-us.aliyuncs.com/compatible-mode/v1" + gatewayBaseURL = "http://litellm.example/v1" +) + +func sendToHost(t *testing.T, baseURL, model string, opts ...llms.CallOption) (map[string]any, *llms.ContentResponse) { + t.Helper() + + var body map[string]any + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + t.Errorf("decode request: %v", err) + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + addr := srv.Listener.Addr().String() + transport := &http.Transport{DialContext: func(ctx context.Context, network, _ string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, addr) + }} + t.Cleanup(transport.CloseIdleConnections) + + llm, err := New(WithBaseURL(baseURL), WithToken("token"), WithModel(model), + WithHTTPClient(&http.Client{Transport: transport})) + if err != nil { + t.Fatalf("new client: %v", err) + } + resp, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...) + if err != nil { + t.Fatalf("generate: %v", err) + } + return body, resp +} + func TestDeepSeekThinkingLeavesOutTheTemperatureItIgnores(t *testing.T) { t.Parallel() sampling := []llms.CallOption{llms.WithTemperature(0.4), llms.WithTopP(0.97)} - requests := map[string][]llms.CallOption{ - "deepseek-v4-pro": sampling, - "deepseek/deepseek-v4-pro": sampling, - "deepseek-v4-flash": sampling, - "deepseek-v4-pro with an effort": append([]llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0)}, sampling...), - "deepseek-v4-pro thinking by object": append([]llms.CallOption{thinkingInExtraBody("enabled")}, sampling...), - } - for name, opts := range requests { - model, _, _ := strings.Cut(name, " ") - - body := captureDeepSeekRequest(t, model, opts...) + for name, tc := range map[string]struct { + baseURL, model string + opts []llms.CallOption + }{ + "deepseek-v4-pro": {deepSeekBaseURL, "deepseek-v4-pro", sampling}, + "deepseek/deepseek-v4-pro": {gatewayBaseURL, "deepseek/deepseek-v4-pro", sampling}, + "deepseek-v4-flash": {deepSeekBaseURL, "deepseek-v4-flash", sampling}, + "deepseek-v4-pro with an effort": {deepSeekBaseURL, "deepseek-v4-pro", append([]llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0)}, sampling...)}, + "deepseek-v4-pro thinking by object": {deepSeekBaseURL, "deepseek-v4-pro", append([]llms.CallOption{thinkingInExtraBody("enabled")}, sampling...)}, + } { + body, resp := sendToHost(t, tc.baseURL, tc.model, tc.opts...) if _, ok := body["temperature"]; ok { t.Errorf("%s: thinking mode ignores temperature, got body: %v", name, body) } @@ -99,7 +140,6 @@ func TestDeepSeekThinkingLeavesOutTheTemperatureItIgnores(t *testing.T) { t.Errorf("%s: top_p takes effect while thinking and must stay, got body: %v", name, body) } - resp := sendForWarnings(t, model, opts...) w := warningFor(t, resp, "WithTemperature") if w.Kind != llms.WarningDrop || w.Asked != "0.4" || !strings.Contains(w.Reason, "ignores temperature") { t.Errorf("%s: temperature warning = %+v", name, w) @@ -120,11 +160,11 @@ func TestDeepSeekKeepsTheTemperatureOnceThinkingIsOff(t *testing.T) { "thinking object in the body": thinkingInExtraBody("disabled"), "effort none in the body": llms.WithExtraBody(map[string]any{"reasoning_effort": "none"}), } { - opts := []llms.CallOption{off, llms.WithTemperature(0.4)} - if body := captureDeepSeekRequest(t, "deepseek-v4-pro", opts...); body["temperature"] != 0.4 { + body, resp := sendToHost(t, deepSeekBaseURL, "deepseek-v4-pro", off, llms.WithTemperature(0.4)) + if body["temperature"] != 0.4 { t.Errorf("%s: non-thinking mode takes temperature, got body: %v", name, body) } - if resp := sendForWarnings(t, "deepseek-v4-pro", opts...); len(resp.Warnings) != 0 { + if len(resp.Warnings) != 0 { t.Errorf("%s: nothing was lost, got %v", name, resp.Warnings) } } @@ -133,11 +173,27 @@ func TestDeepSeekKeepsTheTemperatureOnceThinkingIsOff(t *testing.T) { func TestDeepSeekOnAnotherHostKeepsItsTemperatureWhileThinking(t *testing.T) { t.Parallel() - for _, model := range []string{"dashscope/deepseek-v4-pro", "openrouter/deepseek/deepseek-v4-pro"} { - body := captureDeepSeekRequest(t, model, llms.WithTemperature(0.4), llms.WithReasoning(llms.ReasoningHigh, 0)) + effort := llms.WithReasoning(llms.ReasoningHigh, 0) + for name, tc := range map[string]struct { + baseURL, model string + thinking llms.CallOption + }{ + "dashscope/deepseek-v4-pro": {gatewayBaseURL, "dashscope/deepseek-v4-pro", effort}, + "openrouter/deepseek/deepseek-v4-pro": {gatewayBaseURL, "openrouter/deepseek/deepseek-v4-pro", effort}, + "deepseek-v4-pro on DashScope": {dashScopeBaseURL, "deepseek-v4-pro", llms.WithExtraBody(map[string]any{"enable_thinking": true})}, + "deepseek-v4-pro on DashScope, off": {dashScopeBaseURL, "deepseek-v4-pro", llms.WithExtraBody(map[string]any{"enable_thinking": false})}, + "deepseek-v4-flash on DashScope": {dashScopeBaseURL, "deepseek-v4-flash", effort}, + "deepseek-v4-pro on a gateway": {gatewayBaseURL, "deepseek-v4-pro", effort}, + } { + body, resp := sendToHost(t, tc.baseURL, tc.model, tc.thinking, llms.WithTemperature(0.4)) if body["temperature"] != 0.4 { t.Errorf("%s: only DeepSeek's own API documents temperature as ignored while thinking, got body: %v", - model, body) + name, body) + } + for _, w := range resp.Warnings { + if w.Option == "WithTemperature" { + t.Errorf("%s: temperature reached the wire, yet it is reported: %+v", name, w) + } } } } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 3875eca24..a3fa2ca25 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -17,6 +17,7 @@ type ChatMessage = openaiclient.ChatMessage type LLM struct { CallbacksHandler callbacks.Handler client *openaiclient.Client + host string } const ( @@ -38,6 +39,7 @@ func New(opts ...Option) (*LLM, error) { return &LLM{ client: c, CallbacksHandler: opt.callbackHandler, + host: hostnameFromURL(opt.baseURL), }, err } @@ -535,7 +537,7 @@ func (o *LLM) applySamplingPolicy( ) { model := o.effectiveModel(opts) before := takeSamplingSnapshot(req) - reason := samplingReason(model, opts, wireEffort) + reason := samplingReason(model, o.host, opts, wireEffort) o.enforceSamplingPolicy(req, opts, wireEffort) before.report(req, model, reason, warn) } @@ -574,7 +576,7 @@ func (o *LLM) enforceSamplingPolicy(req *openaiclient.ChatRequest, opts llms.Cal req.PresencePenalty = nil req.LogProbs = false req.TopLogProbs = 0 - case ignoresTemperatureWhileThinking(model, opts, wireEffort): + case ignoresTemperatureWhileThinking(model, o.host, opts, wireEffort): req.Temperature = nil case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: req.TopP = nil @@ -588,8 +590,8 @@ func refusesSamplingWhileThinking(model string, opts llms.CallOptions, wireEffor return reasoning.RejectsSamplingWhileThinking(model) || reasoning.ClaudeSupportsThinking(model) } -func ignoresTemperatureWhileThinking(model string, opts llms.CallOptions, wireEffort string) bool { - return reasoning.IgnoresTemperatureWhileThinking(model) && +func ignoresTemperatureWhileThinking(model, host string, opts llms.CallOptions, wireEffort string) bool { + return reasoning.ServedByDeepSeek(model, host) && thinkingRuns(model, opts, wireEffort) && !extraBodyStopsThinking(opts) } diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index 6cde4fd8e..b29efcd0b 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -85,7 +85,7 @@ func reportOpenAIUnread(warn *llms.Warnings, model string, opts llms.CallOptions "WithLogProbs", "WithJSONMode") } -func samplingReason(model string, opts llms.CallOptions, wireEffort string) string { +func samplingReason(model, host string, opts llms.CallOptions, wireEffort string) string { switch { case reasoning.ClaudeRejectsSampling(model): return "the model rejects sampling parameters" @@ -93,7 +93,7 @@ func samplingReason(model string, opts llms.CallOptions, wireEffort string) stri return "the model runs on fixed sampling and refuses any value for it" case refusesSamplingWhileThinking(model, opts, wireEffort): return "the model refuses sampling while thinking" - case ignoresTemperatureWhileThinking(model, opts, wireEffort): + case ignoresTemperatureWhileThinking(model, host, opts, wireEffort): return "the model ignores temperature while thinking" default: return "the model does not accept this combination of sampling parameters" diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 2267b4bd0..a66a254d9 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -21,8 +21,14 @@ func RejectsPenalties(model string) bool { // Models & Pricing page lists them. var deepSeekAPIModels = []string{"deepseek-flash", "deepseek-v4-pro", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp"} -func IgnoresTemperatureWhileThinking(model string) bool { - return slices.Contains(deepSeekAPIModels, strings.TrimPrefix(strings.ToLower(model), "deepseek/")) +const deepSeekAPIHost = "api.deepseek.com" + +func ServedByDeepSeek(model, host string) bool { + m := strings.ToLower(model) + if rest, ok := strings.CutPrefix(m, "deepseek/"); ok { + return slices.Contains(deepSeekAPIModels, rest) + } + return host == deepSeekAPIHost && slices.Contains(deepSeekAPIModels, m) } // RejectsTopK reports whether top_k must stay off the wire. diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 547d3eae4..51240c827 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -71,28 +71,35 @@ func TestRejectsMinP(t *testing.T) { } } -func TestIgnoresTemperatureWhileThinking(t *testing.T) { +func TestServedByDeepSeek(t *testing.T) { t.Parallel() + const deepSeek, dashScope, gateway = "api.deepseek.com", "dashscope-us.aliyuncs.com", "litellm.example" for _, tc := range []struct { - model string - ignores bool + model, host string + served bool }{ - {"deepseek-flash", true}, - {"deepseek-v4-pro", true}, - {"deepseek/deepseek-v4-pro", true}, - {"deepseek-v4-flash", true}, - {"deepseek-v4-flash-vision-exp", true}, - {"dashscope/deepseek-v4-pro", false}, - {"openrouter/deepseek/deepseek-v4-pro", false}, - {"deepseek-v4-flash-0731", false}, - {"deepseek-v4.1-flash", false}, - {"deepseek-r1", false}, - {"deepseek-v3.2", false}, - {"gpt-5.5", false}, + {"deepseek-flash", deepSeek, true}, + {"deepseek-v4-pro", deepSeek, true}, + {"DeepSeek-V4-Pro", deepSeek, true}, + {"deepseek-v4-flash", deepSeek, true}, + {"deepseek-v4-flash-vision-exp", deepSeek, true}, + {"deepseek/deepseek-v4-pro", gateway, true}, + {"deepseek/deepseek-flash", gateway, true}, + {"deepseek-v4-pro", dashScope, false}, + {"deepseek-v4-flash", dashScope, false}, + {"deepseek-v4-pro", gateway, false}, + {"deepseek-v4-pro", "", false}, + {"dashscope/deepseek-v4-pro", gateway, false}, + {"openrouter/deepseek/deepseek-v4-pro", gateway, false}, + {"deepseek-v4-flash-0731", deepSeek, false}, + {"deepseek-v4.1-flash", deepSeek, false}, + {"deepseek-r1", deepSeek, false}, + {"deepseek-v3.2", deepSeek, false}, + {"gpt-5.5", deepSeek, false}, } { - if got := IgnoresTemperatureWhileThinking(tc.model); got != tc.ignores { - t.Errorf("IgnoresTemperatureWhileThinking(%q) = %v, want %v", tc.model, got, tc.ignores) + if got := ServedByDeepSeek(tc.model, tc.host); got != tc.served { + t.Errorf("ServedByDeepSeek(%q, %q) = %v, want %v", tc.model, tc.host, got, tc.served) } } } From 3c9a4d3afaf032b9ef6dea7a328d027ac3c7f0f8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:06:16 +0300 Subject: [PATCH 530/618] fix(reasoning): count deepseek-flash as a model that thinks by default DeepSeek's API reference lists exactly two models, deepseek-flash and deepseek-v4-pro, and gives the thinking field the default "enabled"; Models & Pricing says both run thinking by default. The catalogue knew the v4 names but not deepseek-flash, so IsReasoningModel said false and the door treated the model as one that never thinks: temperature 0.4 reached the wire in the default thinking mode with no warning, even with an effort and thinking:{type:enabled} in the body, and WithReasoningDisabled sent nothing at all, so DeepSeek kept thinking. deepseek-flash is pentagi's default DeepSeek model. deepseek-flash now reasons like the v4 names and turns thinking off with the thinking object, as they do. Verified: deepseek-flash and deepseek/deepseek-flash drop temperature while thinking with the warning and send thinking:{type:disabled} for WithReasoningDisabled; their wire matches deepseek-v4-pro for every effort, a budget, max tokens, JSON mode and penalties. Removing the catalogue entry turns TestIsReasoningModel, TestDeepSeekThinkingLeavesOutTheTemperatureItIgnores and both thinking-object tests red; removing it from the thinking-object list turns TestVendorsThatDisableWithAThinkingObject and TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 4 ++++ llms/openai/thinking_object_off_test.go | 2 +- llms/reasoning/off.go | 2 +- llms/reasoning/off_test.go | 2 +- llms/reasoning/reasoning.go | 3 ++- llms/reasoning/reasoning_test.go | 2 ++ 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index ff03e14bb..9d2a97e55 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -131,6 +131,10 @@ func TestDeepSeekThinkingLeavesOutTheTemperatureItIgnores(t *testing.T) { "deepseek-v4-flash": {deepSeekBaseURL, "deepseek-v4-flash", sampling}, "deepseek-v4-pro with an effort": {deepSeekBaseURL, "deepseek-v4-pro", append([]llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0)}, sampling...)}, "deepseek-v4-pro thinking by object": {deepSeekBaseURL, "deepseek-v4-pro", append([]llms.CallOption{thinkingInExtraBody("enabled")}, sampling...)}, + "deepseek-flash": {deepSeekBaseURL, "deepseek-flash", sampling}, + "deepseek/deepseek-flash": {gatewayBaseURL, "deepseek/deepseek-flash", sampling}, + "deepseek/deepseek-flash with an effort and thinking by object": {gatewayBaseURL, "deepseek/deepseek-flash", + append([]llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0), thinkingInExtraBody("enabled")}, sampling...)}, } { body, resp := sendToHost(t, tc.baseURL, tc.model, tc.opts...) if _, ok := body["temperature"]; ok { diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index 62d180c8a..5851d0d30 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -18,7 +18,7 @@ func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) for _, model := range []string{ "glm-5.1", "glm-5.2", "glm-4.6", "minimax-m3", "kimi-k2.6", - "deepseek-v4-flash", "deepseek-v4-pro", + "deepseek-v4-flash", "deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-flash", } { body := sendForWire(t, model, llms.WithReasoningDisabled()) if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index f0a71f0aa..d429899c7 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -148,7 +148,7 @@ func disablesByThinkingObject(model string) bool { } for _, generation := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1", - "kimi-k2.6", "deepseek-v4", + "kimi-k2.6", "deepseek-v4", "deepseek-flash", } { if hasGeneration(form, generation) { return true diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index f3457ae4d..996d5ad62 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -60,7 +60,7 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { for _, model := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "glm-5.2", - "minimax-m3", "deepseek-v4-flash", "deepseek-v4-pro", + "minimax-m3", "deepseek-v4-flash", "deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-flash", } { if got := ResolveOff(model, ProviderOpenAI); got != OffDisableThinkingObject { t.Errorf("ResolveOff(%q) = %v, want the thinking object: the effort token is either "+ diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 6a7542ab8..0cac04e85 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -338,7 +338,8 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat strings.Contains(modelLower, "deepseek-chat-v3.") || strings.Contains(modelLower, "deepseek-v3.1") || strings.HasPrefix(modelLower, "deepseek-v3.2") || - strings.HasPrefix(modelLower, "deepseek-v4") { + strings.HasPrefix(modelLower, "deepseek-v4") || + strings.HasPrefix(modelLower, "deepseek-flash") { return true } diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index ca838fe96..6a7acf1c7 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -668,6 +668,8 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen {"deepseek-v3.2", true}, {"deepseek-v3.2-exp", true}, {"deepseek/deepseek-r1", true}, + {"deepseek-flash", true}, + {"deepseek/deepseek-flash", true}, // Google Gemini / Gemma reasoning models (incl. production catalog) {"gemini-2.5-flash", true}, From 91acf114658606f17f3632ab124a694619ea9708 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:08:49 +0300 Subject: [PATCH 531/618] fix(openai): leave DeepSeek's top_p out once it is not thinking DeepSeek's API reference says of top_p that in non-thinking mode "it is fixed at 1.0 and the value you pass is ignored", and the Thinking Mode guide says the same. The door dropped only the temperature a thinking DeepSeek ignores, so the other half of that line still went silent: pentagi's five DeepSeek utility agents run deepseek-flash with thinking:{type:disabled} and top_p 0.9, and that top_p reached the wire with no warning, as it did for deepseek-v4-pro with WithReasoningDisabled. On DeepSeek's own API the door now drops temperature while the model thinks and top_p while it does not, each with its warning. Both keys off the same thinking state, so the earlier deepseek-flash fix is what keeps its top_p on the wire in the default thinking mode. DashScope documents top_p as settable and keeps it. Verified: deepseek-v4-pro and deepseek-flash on api.deepseek.com, and deepseek/deepseek-flash on a gateway, lose top_p 0.9 with a single WithTopP warning and keep temperature 0.3 for WithReasoningDisabled, thinking:{type:disabled} and reasoning_effort:none in the body; top_p 0.97 still travels while thinking. Removing the top_p branch, swapping the two branches, sharing one reason for both, or ignoring an off switch in the body each turns a DeepSeek test red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 38 +++++++++++++++++++++++++++ llms/openai/openaillm.go | 13 +++++---- llms/openai/sampling_warnings.go | 4 ++- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 9d2a97e55..c3287c6a5 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -174,6 +174,44 @@ func TestDeepSeekKeepsTheTemperatureOnceThinkingIsOff(t *testing.T) { } } +func TestDeepSeekOutOfThinkingLeavesOutTheTopPItIgnores(t *testing.T) { + t.Parallel() + + offs := map[string]llms.CallOption{ + "reasoning disabled": llms.WithReasoningDisabled(), + "thinking object in the body": thinkingInExtraBody("disabled"), + "effort none in the body": llms.WithExtraBody(map[string]any{"reasoning_effort": "none"}), + } + for _, target := range []struct{ baseURL, model string }{ + {deepSeekBaseURL, "deepseek-v4-pro"}, + {deepSeekBaseURL, "deepseek-flash"}, + {gatewayBaseURL, "deepseek/deepseek-flash"}, + } { + for name, off := range offs { + body, resp := sendToHost(t, target.baseURL, target.model, off, llms.WithTemperature(0.3), llms.WithTopP(0.9)) + if _, ok := body["top_p"]; ok { + t.Errorf("%s, %s: non-thinking mode fixes top_p at 1.0, got body: %v", target.model, name, body) + } + if body["temperature"] != 0.3 { + t.Errorf("%s, %s: non-thinking mode takes temperature, got body: %v", target.model, name, body) + } + + w := warningFor(t, resp, "WithTopP") + if w.Kind != llms.WarningDrop || w.Asked != "0.9" || !strings.Contains(w.Reason, "ignores top_p") { + t.Errorf("%s, %s: top_p warning = %+v", target.model, name, w) + } + if len(resp.Warnings) != 1 { + t.Errorf("%s, %s: only top_p was lost, got %v", target.model, name, resp.Warnings) + } + } + } + + off := llms.WithExtraBody(map[string]any{"enable_thinking": false}) + if body, _ := sendToHost(t, dashScopeBaseURL, "deepseek-v4-pro", off, llms.WithTopP(0.9)); body["top_p"] != 0.9 { + t.Errorf("DashScope documents top_p as settable, got body: %v", body) + } +} + func TestDeepSeekOnAnotherHostKeepsItsTemperatureWhileThinking(t *testing.T) { t.Parallel() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index a3fa2ca25..60cdfe56e 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -576,8 +576,12 @@ func (o *LLM) enforceSamplingPolicy(req *openaiclient.ChatRequest, opts llms.Cal req.PresencePenalty = nil req.LogProbs = false req.TopLogProbs = 0 - case ignoresTemperatureWhileThinking(model, o.host, opts, wireEffort): - req.Temperature = nil + case reasoning.ServedByDeepSeek(model, o.host): + if deepSeekThinks(model, opts, wireEffort) { + req.Temperature = nil + } else { + req.TopP = nil + } case reasoning.ClaudeMutuallyExclusiveSampling(model) && req.Temperature != nil && req.TopP != nil: req.TopP = nil } @@ -590,9 +594,8 @@ func refusesSamplingWhileThinking(model string, opts llms.CallOptions, wireEffor return reasoning.RejectsSamplingWhileThinking(model) || reasoning.ClaudeSupportsThinking(model) } -func ignoresTemperatureWhileThinking(model, host string, opts llms.CallOptions, wireEffort string) bool { - return reasoning.ServedByDeepSeek(model, host) && - thinkingRuns(model, opts, wireEffort) && !extraBodyStopsThinking(opts) +func deepSeekThinks(model string, opts llms.CallOptions, wireEffort string) bool { + return thinkingRuns(model, opts, wireEffort) && !extraBodyStopsThinking(opts) } func extraBodyStopsThinking(opts llms.CallOptions) bool { diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index b29efcd0b..f13e39e88 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -93,8 +93,10 @@ func samplingReason(model, host string, opts llms.CallOptions, wireEffort string return "the model runs on fixed sampling and refuses any value for it" case refusesSamplingWhileThinking(model, opts, wireEffort): return "the model refuses sampling while thinking" - case ignoresTemperatureWhileThinking(model, host, opts, wireEffort): + case reasoning.ServedByDeepSeek(model, host) && deepSeekThinks(model, opts, wireEffort): return "the model ignores temperature while thinking" + case reasoning.ServedByDeepSeek(model, host): + return "the model ignores top_p when not thinking" default: return "the model does not accept this combination of sampling parameters" } From 4ba2e12b0f063056beee57eb6d429e13e0a86bb1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:10:47 +0300 Subject: [PATCH 532/618] fix(openai): leave response_format off MiniMax M-series in JSON mode MiniMax's OpenAI-compatible Chat Completions schema has no response_format field, and its native API gives response_format only to MiniMax-Text-01. The door already refused a JSON schema for the M-series before the request, but WithJSONMode still put response_format:{type:json_object} on the wire with no warning; pentagi's simple_json agent runs MiniMax-M2.7 with json: true. JSON mode on the M-series now leaves the field out and reports the drop, as the door does for Ollama Cloud, which has no format field either. A typed error is not used: JSON mode carries no schema to check the answer against, so the request stays useful and the caller learns the format was not enforced. Verified: MiniMax-M3, minimax/MiniMax-M3, MiniMax-M2.7 and MiniMax-M2.7-highspeed send no response_format and warn WithJSONMode asked true; openrouter/minimax/minimax-m3 keeps json_object; the schema refusal is unchanged. Keeping the field or dropping the warning turns TestMiniMaxJSONModeLeavesOutTheResponseFormatItsAPILacks red. PAGI-333 Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 9 ++++++++- llms/openai/structured_output.go | 4 +++- llms/openai/structured_output_unit_test.go | 20 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 60cdfe56e..0d1bedd90 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -318,7 +318,14 @@ func (o *LLM) createChatRequest( } if opts.GetJSONMode() { - req.SetResponseFormat(ResponseFormatJSON) + if model := o.effectiveModel(opts); reasoning.TakesNoResponseFormat(model) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithJSONMode", Model: model, + Asked: "true", Reason: takesNoResponseFormat, + }) + } else { + req.SetResponseFormat(ResponseFormatJSON) + } } // add tools from functions and tool definitions diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index d8e0901cb..b3049d3b3 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -13,6 +13,8 @@ import ( const providerOpenAI = "openai" +const takesNoResponseFormat = "the vendor's chat completions API takes no response_format for this model" + // ErrStructuredOutputRefusal reports that the model declined a structured-output // request (OpenAI Structured Outputs). A refusal may legitimately not match the // schema, so it is a distinct typed outcome rather than a validation failure. The @@ -101,7 +103,7 @@ func openAIStructuredOutputUnsupported(model string) string { case reasoning.TakesNoJSONSchema(model): return "the vendor's chat completions response_format takes only text and json_object" case reasoning.TakesNoResponseFormat(model): - return "the vendor's chat completions API takes no response_format for this model" + return takesNoResponseFormat case strings.HasPrefix(m, "gpt-3.5"): return predates case m == "gpt-4", strings.HasPrefix(m, "gpt-4-0"), strings.HasPrefix(m, "gpt-4-32k"), strings.HasPrefix(m, "gpt-4-turbo"): diff --git a/llms/openai/structured_output_unit_test.go b/llms/openai/structured_output_unit_test.go index 453f25b5e..e84dee5dd 100644 --- a/llms/openai/structured_output_unit_test.go +++ b/llms/openai/structured_output_unit_test.go @@ -491,3 +491,23 @@ func TestMiniMaxJSONSchemaIsRefusedWithoutARequest(t *testing.T) { } } } + +func TestMiniMaxJSONModeLeavesOutTheResponseFormatItsAPILacks(t *testing.T) { + t.Parallel() + + for _, model := range []string{"MiniMax-M3", "minimax/MiniMax-M3", "MiniMax-M2.7", "MiniMax-M2.7-highspeed"} { + if body := sendForWire(t, model, llms.WithJSONMode()); strings.Contains(body, "response_format") { + t.Errorf("%s: MiniMax's chat completions API documents no response_format, got body: %s", model, body) + } + + w := warningFor(t, sendForWarnings(t, model, llms.WithJSONMode()), "WithJSONMode") + if w.Kind != llms.WarningDrop || w.Asked != "true" || !strings.Contains(w.Reason, "response_format") { + t.Errorf("%s: JSON mode warning = %+v", model, w) + } + } + + const jsonObject = `"response_format":{"type":"json_object"}` + if body := sendForWire(t, "openrouter/minimax/minimax-m3", llms.WithJSONMode()); !strings.Contains(body, jsonObject) { + t.Errorf("only MiniMax's own API lacks response_format, got body: %s", body) + } +} From 6a4cf823b829a4b1b99eb609cf044a8f7614fb18 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:18:48 +0300 Subject: [PATCH 533/618] fix(reasoning): resolve deepseek-flash as the model deepseek-v4-flash names DeepSeek now names its Flash model deepseek-flash. The capability rules only knew the V4 spelling, so deepseek-flash, bare or behind the deepseek/ prefix, came back as a model that does not reason: the hint reported Supported false, and an off resolved to sending nothing. On the wire WithReasoningDisabled then left the request without a thinking field and the model, which thinks by default, kept thinking; a consumer that derives its off control from the hint and the off wire offered none. DeepSeek's pricing page says the legacy names deepseek-v4-flash and deepseek-v4-flash-vision-exp are still accepted and served by the same DeepSeek-V4.1-Flash model that deepseek-flash names; its thinking mode guide switches thinking with {"thinking": {"type": "enabled/disabled"}}, on by default. The name matcher now reads deepseek-flash also as deepseek-v4-flash, so every rule answers for it what it answers for the V4 name; deepseek-v4-pro keeps its answer. Tests: the spelling group requires one capability answer for all five names, the hint and off wire of deepseek-flash equal those of deepseek-v4-flash on every provider, and the openai door sends the disabled thinking object for it. All three are red with the alias entry or its lookup removed. Checked live through the library on deepseek/deepseek-flash via the gateway: an off now sends "thinking":{"type":"disabled"} and the answer carries no reasoning_content, where before it sent no field and got 92 characters of it (PAGI-133). Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_object_off_test.go | 2 +- llms/reasoning/name.go | 6 ++++++ llms/reasoning/name_forms_test.go | 1 + llms/reasoning_support_test.go | 26 +++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index 62d180c8a..5851d0d30 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -18,7 +18,7 @@ func TestDisablingThinkingWhereTheEffortTokenDoesNotReachTheVendor(t *testing.T) for _, model := range []string{ "glm-5.1", "glm-5.2", "glm-4.6", "minimax-m3", "kimi-k2.6", - "deepseek-v4-flash", "deepseek-v4-pro", + "deepseek-v4-flash", "deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-flash", } { body := sendForWire(t, model, llms.WithReasoningDisabled()) if !strings.Contains(body, `"thinking":{"type":"disabled"}`) { diff --git a/llms/reasoning/name.go b/llms/reasoning/name.go index 2eeb674a3..ac2b0cde7 100644 --- a/llms/reasoning/name.go +++ b/llms/reasoning/name.go @@ -20,6 +20,9 @@ func modelSpellings(model string) []string { if stripped, ok := stripDashWrittenVendor(bare); ok { return []string{stripped, bare} } + if earlier, ok := earlierNames[bare]; ok { + return []string{earlier, bare} + } return []string{bare} default: return []string{bare, vendor + "-" + bare} @@ -31,6 +34,9 @@ func modelSpellings(model string) []string { // a vendor listing that names both spellings as one model. var dashWrittenVendors = []string{"zai"} +// earlierNames entries must be backed by a vendor page that serves both names with one model. +var earlierNames = map[string]string{"deepseek-flash": "deepseek-v4-flash"} + func stripDashWrittenVendor(model string) (string, bool) { for _, vendor := range dashWrittenVendors { if rest, ok := strings.CutPrefix(model, vendor+"-"); ok && rest != "" { diff --git a/llms/reasoning/name_forms_test.go b/llms/reasoning/name_forms_test.go index fa33aa9a7..1b555ed10 100644 --- a/llms/reasoning/name_forms_test.go +++ b/llms/reasoning/name_forms_test.go @@ -38,6 +38,7 @@ func TestEverySpellingResolvesToOneEntry(t *testing.T) { }, {"deepseek-r1", "deepseek.r1-v1:0", "us.deepseek.r1-v1:0"}, {"deepseek-v3.2", "deepseek.v3.2", "us.deepseek.v3.2"}, + {"deepseek-flash", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp", "deepseek/deepseek-flash", "DeepSeek-Flash"}, {"glm-4.7", "zai.glm-4.7"}, {"minimax-m2", "minimax.minimax-m2"}, {"kimi-k2-thinking", "moonshot.kimi-k2-thinking"}, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 06d883c4c..41989a08a 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -1,6 +1,7 @@ package llms import ( + "reflect" "slices" "testing" @@ -536,6 +537,31 @@ func TestOptInAloneDoesNotMakeTheHintReportThinkingOff(t *testing.T) { } } +func TestDeepSeekFlashResolvesLikeTheNameItReplaced(t *testing.T) { + t.Parallel() + + const replaced = "deepseek-v4-flash" + for _, model := range []string{"deepseek-flash", "deepseek/deepseek-flash", "DeepSeek-Flash"} { + s := ReasoningSupportFor(model, reasoning.ProviderOpenAI) + if off := reasoning.ResolveOff(model, reasoning.ProviderOpenAI); !s.Supported || off != reasoning.OffDisableThinkingObject { + t.Errorf("%s: Supported = %v, off = %v; want a reasoning model switched off by the thinking object", + model, s.Supported, off) + } + + for _, p := range []reasoning.Provider{ + reasoning.ProviderUnknown, reasoning.ProviderAnthropic, reasoning.ProviderBedrock, + reasoning.ProviderOpenAI, reasoning.ProviderGoogleAI, reasoning.ProviderOllama, + } { + if got, want := ReasoningSupportFor(model, p), ReasoningSupportFor(replaced, p); !reflect.DeepEqual(got, want) { + t.Errorf("%s on provider %d: hint %+v, want the hint of %s %+v", model, p, got, replaced, want) + } + if got, want := reasoning.ResolveOff(model, p), reasoning.ResolveOff(replaced, p); got != want { + t.Errorf("%s on provider %d: off = %v, want the off of %s %v", model, p, got, replaced, want) + } + } + } +} + func TestTheOllamaDoorKeepsTheOffControlItsVendorDocuments(t *testing.T) { t.Parallel() From ab0b6603c2416738da7e455bb817b79a24d3e57a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:30:41 +0300 Subject: [PATCH 534/618] fix(reasoning): refuse gpt-oss off on Bedrock under its GovCloud ID too AWS lists us-gov.openai.gpt-oss-120b-1:0 and us-gov.openai.gpt-oss-20b-1:0 as the GovCloud cross-region IDs of the two gpt-oss models. Under those IDs the Converse door already sent reasoning_effort, and ReasoningSupportFor offered the three levels as a known model, yet WithReasoningDisabled() went out with no reasoning field and no error, and the hint reported the model as one that can be turned off. The model kept reasoning: OpenAI documents only low, medium and high for gpt-oss. The enable path recognises gpt-oss with IsGptOssModel, while the Bedrock branch of ResolveOff relied on the name forms, which stop at the dashed us-gov prefix. That branch now reads IsGptOssModel as well, so the door and the hint refuse off under every documented ID. The new cases for ResolveOff, the Bedrock hint and the Converse door fail on the old code for both us-gov IDs and pass with the change; removing the IsGptOssModel check turns all three red again. The Converse refusal comes before the request leaves. PAGI-354 Co-Authored-By: Claude Opus 5 --- .../bedrockclient/gpt_oss_reasoning_test.go | 34 +++++++++++++++++++ llms/reasoning/off.go | 2 +- llms/reasoning/off_test.go | 2 ++ llms/reasoning_support_test.go | 2 ++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go b/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go index 0710c12bc..4506540f7 100644 --- a/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go +++ b/llms/bedrock/internal/bedrockclient/gpt_oss_reasoning_test.go @@ -4,12 +4,46 @@ import ( "encoding/json" "testing" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" + "github.com/aws/aws-sdk-go-v2/service/bedrockruntime/types" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) +func TestConverseRefusesToTurnGptOssReasoningOffUnderEveryDocumentedID(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "openai.gpt-oss-120b-1:0", "openai.gpt-oss-20b-1:0", + "us-gov.openai.gpt-oss-120b-1:0", "us-gov.openai.gpt-oss-20b-1:0", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + mockClient := &MockBedrockRuntimeClient{} + mockClient.On("Converse", mock.Anything, mock.Anything, mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }}, + }, nil).Maybe() + _, err := NewConverseClient(mockClient).CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: model, + Messages: humanTurn(), + ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOff}, + }) + + var offErr *reasoning.ErrReasoningOffUnsupported + require.ErrorAs(t, err, &offErr, "the door sends this model a reasoning level, so off must not pass silently") + mockClient.AssertNotCalled(t, "Converse") + }) + } +} + func TestConverseSendsGptOssTheReasoningEffortItDocuments(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index f0a71f0aa..e61146d2d 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -98,7 +98,7 @@ func ResolveOff(model string, p Provider) OffWire { case ProviderOpenAI: return openAIOffWire(model) default: - if mandatoryThinking(model) { + if mandatoryThinking(model) || IsGptOssModel(model) { return OffUnsupported } // Bedrock non-Claude and everything else: no clean disable signal — omit. diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index f3457ae4d..8a2f4c394 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -90,6 +90,8 @@ func TestAlwaysThinkingFamiliesAreRefusedOnBedrockToo(t *testing.T) { {"moonshot.kimi-k2-thinking", OffUnsupported}, {"us.deepseek.r1-v1:0", OffUnsupported}, {"openai.gpt-oss-120b-1:0", OffUnsupported}, + {"us-gov.openai.gpt-oss-120b-1:0", OffUnsupported}, + {"us-gov.openai.gpt-oss-20b-1:0", OffUnsupported}, {"us.xai.grok-4.6", OffUnsupported}, {"glm-5.3", OffUnsupported}, {"us.amazon.nova-2-lite-v1:0", OffOmit}, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 739a1a7de..646736f13 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -433,6 +433,8 @@ func TestTheBedrockHintReportsTheRefusalTheDoorWillGive(t *testing.T) { {"moonshot.kimi-k2-thinking", true}, {"us.deepseek.r1-v1:0", true}, {"openai.gpt-oss-120b-1:0", true}, + {"us-gov.openai.gpt-oss-120b-1:0", true}, + {"us-gov.openai.gpt-oss-20b-1:0", true}, {"us.xai.grok-4.6", true}, {"us.amazon.nova-2-lite-v1:0", false}, {"us.amazon.nova-pro-v1:0", false}, From 397ba14707e15ff0b7bff41ec014f88898afa42a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:33:14 +0300 Subject: [PATCH 535/618] fix(openai): give Qwen back the reasoning of every assistant turn too With preserved reasoning, a Qwen text answer went back into the history without its reasoning_content: the every-turn replay covered DeepSeek, Kimi and GLM only, so Qwen got its reasoning back on tool turns alone. DashScope documents the field on every earlier assistant message: preserve_thinking "specifies whether to append the reasoning_content from assistant messages in the conversation history to the model input", and qwen3.8-max and qwen3.8-flash, where it is on by default, "must send back all historical reasoning_content in the reasoning_content field". Where it is off, the model ignores the field. pentagi turns it on for qwen3.7-plus. Checked live through the gateway on dashscope/qwen3.7-plus with a codeword that only the previous turn's reasoning holds: without the change the model answers UNKNOWN, with it the codeword. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm_option.go | 2 +- llms/openai/reasoning_replay_test.go | 3 ++- llms/reasoning/effort_wire.go | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index f4e52f3c7..34591eb47 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -175,7 +175,7 @@ func WithModernReasoningFormat() Option { // WithPreserveReasoningContent sends each assistant turn's reasoning back as // reasoning_content: on the turns that called a tool, and on every assistant -// turn for DeepSeek, Kimi and GLM models. A model Mistral serves takes it on +// turn for DeepSeek, Kimi, GLM and Qwen models. A model Mistral serves takes it on // every turn as a thinking chunk at the head of content instead, and one that // does not reason there takes none. func WithPreserveReasoningContent() Option { diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index c22964327..6ba156288 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -88,6 +88,7 @@ func TestPreservedThinkingGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) for _, model := range []string{ "deepseek-v4-pro", "deepseek-flash", "deepseek/deepseek-v4-pro", "kimi-k3", "kimi-k2.7-code", "moonshot/kimi-k2.6", "glm-5.2", "zai/glm-5.3", + "qwen3.7-plus", "dashscope/qwen3.8-max", } { assert.Equal(t, []any{"text turn thought", "tool turn thought"}, replayedReasoning(t, model), model) } @@ -97,7 +98,7 @@ func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() for _, model := range []string{ - "qwen3.7-plus", "grok-4", "mistralai/mistral-small-2603", "openrouter/mistralai/mistral-medium-3-5", "magistral:24b", + "grok-4", "mistralai/mistral-small-2603", "openrouter/mistralai/mistral-medium-3-5", "magistral:24b", "mistral-ai/mistral-small-2603", } { assert.Equal(t, []any{nil, "tool turn thought"}, replayedReasoning(t, model), model) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index a66a254d9..a33651831 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -110,7 +110,8 @@ func RejectsMinP(model string) bool { // earlier assistant turn, not only on the turns that called a tool. func ReplaysReasoningOnEveryTurn(model string) bool { for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "deepseek") || strings.HasPrefix(form, "kimi-") || strings.HasPrefix(form, "glm-") { + if strings.HasPrefix(form, "deepseek") || strings.HasPrefix(form, "kimi-") || strings.HasPrefix(form, "glm-") || + strings.HasPrefix(form, "qwen") { return true } } From 51b63ac5ea4a03991870ee37aa477b3bda10e1df Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:42:03 +0300 Subject: [PATCH 536/618] fix(reasoning): keep reasoning_effort off GLM before 5.2 and Kimi K2 With a thinking budget, or any effort, zai/glm-5.1, moonshot/kimi-k2.6 and the bare names of pentagi's native GLM and Kimi providers carried reasoning_effort, and the gateway answered every call with "zai does not support parameters: ['reasoning_effort']" (and the same for moonshot). AcceptsEffortWire answered true for every GLM and Kimi name. Z.ai documents reasoning_effort as "supported by GLM-5.2 and above"; older generations have only the thinking switch. Moonshot documents reasoning_effort for kimi-k3 only and tells K2.x callers to use the thinking object. DashScope's GLM page lists reasoning_effort for glm-5.2 and glm-5.1, and its Kimi page names no reasoning_effort at all. GLM before 5.2 (before 5.1 behind dashscope/) and every Kimi K2 name now keep the field off; GLM spelled the way Mistral lists it is left alone. kimi-k2.5, whose off rode on reasoning_effort none, now turns off with the thinking object, or with enable_thinking false behind dashscope/, like kimi-k2.6. The new rows of TestAcceptsEffortWire, the Kimi catalogue test and the door test fail on the old code with reasoning_effort on the wire. Dropping the Kimi rule, the GLM rule, the DashScope floor, the Mistral guard, the major or the minor comparison, or the kimi-k2.5 thinking-object entry each fails a test. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_effort_door_test.go | 7 +++- llms/reasoning/catalogue_gaps_test.go | 13 ++++--- llms/reasoning/effort_wire.go | 46 +++++++++++++++++++++++ llms/reasoning/effort_wire_test.go | 28 +++++++++++--- llms/reasoning/off.go | 2 +- llms/reasoning/off_test.go | 3 +- 6 files changed, 84 insertions(+), 15 deletions(-) diff --git a/llms/openai/reasoning_effort_door_test.go b/llms/openai/reasoning_effort_door_test.go index 9a7dfb6f5..6404edeab 100644 --- a/llms/openai/reasoning_effort_door_test.go +++ b/llms/openai/reasoning_effort_door_test.go @@ -39,7 +39,10 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { return body, err } - for _, model := range []string{"qwen3-next-80b-a3b-thinking"} { + for _, model := range []string{ + "qwen3-next-80b-a3b-thinking", "kimi-k2.6", "moonshot/kimi-k2.6", "kimi-k2.7-code-highspeed", + "glm-5.1", "zai/glm-5.1", "glm-5-turbo", + } { t.Run(model+" drops a requested effort", func(t *testing.T) { body, err := capture(t, model, llms.WithReasoning(llms.ReasoningMedium, 0)) if err != nil { @@ -63,7 +66,7 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { }) } - for _, model := range []string{"kimi-k2.6", "kimi-k2.7-code-highspeed"} { + for _, model := range []string{"glm-5.2", "zai/glm-5.2", "dashscope/glm-5.1"} { t.Run(model+" carries the effort to the wire", func(t *testing.T) { body, err := capture(t, model, llms.WithReasoning(llms.ReasoningMedium, 0)) if err != nil { diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 49e04cab0..296b44500 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -281,16 +281,17 @@ func TestGLMLatestCannotStopThinking(t *testing.T) { } } -func TestKimiTakesEffortButNotAlwaysAnOff(t *testing.T) { +func TestKimiTakesEffortOnlyFromK3AndNotAlwaysAnOff(t *testing.T) { t.Parallel() - for _, model := range []string{ - "kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking", "kimi-k3", - } { - if !AcceptsEffortWire(model) { - t.Errorf("AcceptsEffortWire(%q) = false, but every route measured accepts an effort", model) + for _, model := range []string{"kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking"} { + if AcceptsEffortWire(model) { + t.Errorf("AcceptsEffortWire(%q) = true, but Moonshot documents reasoning_effort for kimi-k3 only", model) } } + if !AcceptsEffortWire("kimi-k3") { + t.Error(`AcceptsEffortWire("kimi-k3") = false, but kimi-k3 takes low, high and max`) + } for _, model := range []string{"kimi-k2-thinking", "kimi-k2.7-code", "kimi-k2.7-code-highspeed"} { if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index a0ad056a7..93acf86f4 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -2,6 +2,7 @@ package reasoning import ( "fmt" + "strconv" "strings" ) @@ -141,6 +142,9 @@ func AcceptsEffortWire(model string) bool { if mistralWithoutReasoning(form) { return false } + if hasGeneration(form, "kimi-k2") || glmBeforeEffortField(model, form) { + return false + } if form == "grok-build-latest" { return true } @@ -153,6 +157,48 @@ func AcceptsEffortWire(model string) bool { return true } +func glmBeforeEffortField(model, form string) bool { + if ServedByMistral(model) { + return false + } + major, minor, ok := glmGeneration(form) + if !ok { + return false + } + firstMinor := 2 + if dashScopeGuestSpelling(model) != "" { + firstMinor = 1 + } + return major < 5 || major == 5 && minor < firstMinor +} + +func glmGeneration(form string) (major, minor int, ok bool) { + rest, found := strings.CutPrefix(form, "glm-") + if !found { + return 0, 0, false + } + major, rest, ok = leadingNumber(rest) + if !ok { + return 0, 0, false + } + if after, dotted := strings.CutPrefix(rest, "."); dotted { + minor, _, _ = leadingNumber(after) + } + return major, minor, true +} + +func leadingNumber(s string) (n int, rest string, ok bool) { + end := 0 + for end < len(s) && isDigit(s[end]) { + end++ + } + if end == 0 { + return 0, s, false + } + n, err := strconv.Atoi(s[:end]) + return n, s[end:], err == nil +} + // EffortToolsRule reports what to do with reasoning_effort when function tools // ride on the same request. type EffortToolsRule int diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 96996daf1..6f67f0664 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -18,10 +18,13 @@ func TestAcceptsEffortWire(t *testing.T) { {"dashscope/qwen3.8-max", true}, {"qwen3.5-plus", false}, {"qwq-32b", false}, - {"kimi-k2.7-code-highspeed", true}, - {"moonshot/kimi-k2.7-code", true}, - {"kimi-k2.6", true}, - {"kimi-k2-thinking", true}, + {"kimi-k2.7-code-highspeed", false}, + {"moonshot/kimi-k2.7-code", false}, + {"dashscope/kimi-k2.7-code", false}, + {"kimi-k2.6", false}, + {"moonshot/kimi-k2.6", false}, + {"kimi-k2.5", false}, + {"kimi-k2-thinking", false}, {"kimi-k3", true}, {"moonshot/kimi-k3", true}, {"gpt-5.5", true}, @@ -33,7 +36,22 @@ func TestAcceptsEffortWire(t *testing.T) { {"openai/gpt-4o", false}, {"o3-mini", true}, {"deepseek-v4-pro", true}, - {"glm-5-turbo", true}, + {"glm-5-turbo", false}, + {"glm-5.1", false}, + {"zai/glm-5.1", false}, + {"glm-5", false}, + {"glm-4.7-flashx", false}, + {"glm-4.6v", false}, + {"glm-4.5-air", false}, + {"glm-5.2", true}, + {"zai/glm-5.2", true}, + {"glm-5.2-fast-preview", true}, + {"glm-5.3", true}, + {"glm-5.3-flash", true}, + {"dashscope/glm-5.1", true}, + {"dashscope/glm-5", false}, + {"zai-glm-5-2", true}, + {"mistral/glm-5-2", true}, {"minimax-m3", true}, } { if got := AcceptsEffortWire(tc.model); got != tc.accept { diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index df144ab97..1852dbe0f 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -148,7 +148,7 @@ func disablesByThinkingObject(model string) bool { } for _, generation := range []string{ "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5.1", - "kimi-k2.6", "deepseek-v4", + "kimi-k2.5", "kimi-k2.6", "deepseek-v4", } { if hasGeneration(form, generation) { return true diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 3e704b646..b5615b417 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -65,6 +65,7 @@ func TestVendorsThatDisableWithAThinkingObject(t *testing.T) { "glm-4.5", "glm-4.6", "glm-4.7", "glm-5", "glm-5-turbo", "glm-5.1", "glm-5.2", "minimax-m3", "deepseek-v4-flash", "deepseek-v4-pro", "zai/glm-5.2", "deepseek/deepseek-v4-flash", + "kimi-k2.5", "moonshot/kimi-k2.5", } { if got := ResolveOff(model, ProviderOpenAI); got != OffDisableThinkingObject { t.Errorf("ResolveOff(%q) = %v, want the thinking object: the effort token is either "+ @@ -90,7 +91,7 @@ func TestDashScopeGuestsSpellOffWithTheDashScopeFlag(t *testing.T) { "dashscope/glm-5.2", "dashscope/glm-5.1", "dashscope/glm-5", "dashscope/glm-4.7", "dashscope/glm-4.6", "dashscope/glm-4.5", "dashscope/deepseek-v4-pro", "dashscope/deepseek-v4-flash", "dashscope/deepseek-v4-flash-0731", - "dashscope/kimi-k2.6", + "dashscope/kimi-k2.6", "dashscope/kimi-k2.5", } { if got := ResolveOff(model, ProviderOpenAI); got != OffDisableDashScope { t.Errorf("ResolveOff(%q, openai) = %v, want OffDisableDashScope", model, got) From 7a5ee807d62dcc72398d1f6aac2eb7b084e90e3d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:43:15 +0300 Subject: [PATCH 537/618] fix(reasoning): keep reasoning_effort off MiniMax With a thinking budget or an effort, minimax/MiniMax-M3 and the bare names of pentagi's MiniMax provider carried reasoning_effort, and the gateway answered "minimax does not support parameters: ['reasoning_effort'], for model=MiniMax-M3" on every call. MiniMax's OpenAI-compatible API reference controls thinking only with the thinking object: M3 keeps it on with type adaptive and skips it with type disabled, M2.x cannot switch it off, and reasoning_effort is not among its parameters for any model. Every MiniMax M name now keeps the field off. The off wire does not change: M3 still sends the thinking object and M2 is still refused. The new rows of TestAcceptsEffortWire and the door test fail on the old code with reasoning_effort on the wire; narrowing the rule to M3 fails the M2.7 rows. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_effort_door_test.go | 1 + llms/reasoning/effort_wire.go | 3 ++- llms/reasoning/effort_wire_test.go | 7 ++++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/llms/openai/reasoning_effort_door_test.go b/llms/openai/reasoning_effort_door_test.go index 6404edeab..ffd9995ce 100644 --- a/llms/openai/reasoning_effort_door_test.go +++ b/llms/openai/reasoning_effort_door_test.go @@ -42,6 +42,7 @@ func TestReasoningEffortOmittedOnDoorsThatRejectIt(t *testing.T) { for _, model := range []string{ "qwen3-next-80b-a3b-thinking", "kimi-k2.6", "moonshot/kimi-k2.6", "kimi-k2.7-code-highspeed", "glm-5.1", "zai/glm-5.1", "glm-5-turbo", + "MiniMax-M3", "minimax/MiniMax-M3", "MiniMax-M2.7", } { t.Run(model+" drops a requested effort", func(t *testing.T) { body, err := capture(t, model, llms.WithReasoning(llms.ReasoningMedium, 0)) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 93acf86f4..7d1629c25 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -142,7 +142,8 @@ func AcceptsEffortWire(model string) bool { if mistralWithoutReasoning(form) { return false } - if hasGeneration(form, "kimi-k2") || glmBeforeEffortField(model, form) { + if hasGeneration(form, "kimi-k2") || glmBeforeEffortField(model, form) || + strings.HasPrefix(form, "minimax-m") { return false } if form == "grok-build-latest" { diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 6f67f0664..3133638ab 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -52,7 +52,12 @@ func TestAcceptsEffortWire(t *testing.T) { {"dashscope/glm-5", false}, {"zai-glm-5-2", true}, {"mistral/glm-5-2", true}, - {"minimax-m3", true}, + {"minimax-m3", false}, + {"MiniMax-M3", false}, + {"minimax/MiniMax-M3", false}, + {"MiniMax-M2.7", false}, + {"MiniMax-M2.7-highspeed", false}, + {"minimax/MiniMax-M2.5", false}, } { if got := AcceptsEffortWire(tc.model); got != tc.accept { t.Errorf("AcceptsEffortWire(%q) = %v, want %v", tc.model, got, tc.accept) From cea0a15bf76195ec5f14908d8752c4a2e927c558 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:47:29 +0300 Subject: [PATCH 538/618] fix(openai): give MiniMax back its reasoning inside think tags on every turn With preserved reasoning, a MiniMax M-series text answer went back into the history without its reasoning, and a tool turn carried it as reasoning_content, a field MiniMax does not document as input. MiniMax's OpenAI-compatible reference documents the assistant message as the model returned it: with reasoning_split off, the default, "the content field will contain tag content, which must be preserved completely", and its tool-use guide asks not to modify content in the history and to "preserve the model's thinking content completely, i.e., reasoning_content". Every assistant turn of a MiniMax M-series model on MiniMax's API now carries its reasoning that way at the head of content, and no reasoning_content. Checked live through the gateway on minimax/MiniMax-M3 with a codeword that only the previous turn's reasoning holds: without the change 0 of 6 runs recall it, with it 6 of 6. In a tool loop the replayed reasoning reaches the model on M3 and M2.7 alike: prompt tokens 476 -> 505 and 257 -> 285 against the same loop without it. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 18 ++++++++++++++++++ llms/openai/openaillm_option.go | 3 ++- llms/openai/reasoning_replay_test.go | 16 ++++++++++++++++ llms/reasoning/effort_wire.go | 4 ++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 0d1bedd90..e0946702f 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "slices" "strconv" "github.com/vxcontrol/langchaingo/callbacks" @@ -180,6 +181,8 @@ func (o *LLM) convertMessages(messages []llms.MessageContent, model string) ([]* if reasoning.ReplaysThinkingInContent(model) { msg.Thinking = extractReasoningContent(mc.Parts) } + case reasoning.ReplaysReasoningInThinkTags(model): + msg.MultiContent = withThinkTags(msg.MultiContent, extractReasoningContent(mc.Parts)) case len(toolCalls) > 0 || reasoning.ReplaysReasoningOnEveryTurn(model): msg.ReasoningContent = extractReasoningContent(mc.Parts) } @@ -839,6 +842,21 @@ func extractReasoningContent(parts []llms.ContentPart) string { return "" } +func withThinkTags(parts []llms.ContentPart, thought string) []llms.ContentPart { + if thought == "" { + return parts + } + head := "" + thought + "" + if len(parts) > 0 { + if text, ok := parts[0].(llms.TextContent); ok { + text.Text = head + text.Text + parts[0] = text + return parts + } + } + return slices.Insert(parts, 0, llms.ContentPart(llms.TextContent{Text: head})) +} + // toolFromTool converts an llms.Tool to a Tool. func toolFromTool(t llms.Tool) (openaiclient.Tool, error) { tool := openaiclient.Tool{ diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index 34591eb47..f7bd4e65d 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -177,7 +177,8 @@ func WithModernReasoningFormat() Option { // reasoning_content: on the turns that called a tool, and on every assistant // turn for DeepSeek, Kimi, GLM and Qwen models. A model Mistral serves takes it on // every turn as a thinking chunk at the head of content instead, and one that -// does not reason there takes none. +// does not reason there takes none. A MiniMax M-series model on MiniMax's API +// takes it on every turn inside tags at the head of content. func WithPreserveReasoningContent() Option { return func(opts *options) { opts.preserveReasoningContent = true diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index 6ba156288..30dde0fb1 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -94,6 +94,22 @@ func TestPreservedThinkingGetsBackTheReasoningOfEveryAssistantTurn(t *testing.T) } } +func TestMiniMaxGetsBackTheReasoningOfEveryAssistantTurnInThinkTags(t *testing.T) { + t.Parallel() + + for _, model := range []string{"minimax/MiniMax-M3", "MiniMax-M2.7"} { + turns := assistantTurnsSent(t, model) + require.Len(t, turns, 2, model) + + assert.Equal(t, "text turn thoughtanswered in text", turns[0]["content"], model) + assert.Equal(t, "tool turn thought", turns[1]["content"], model) + assert.NotEmpty(t, turns[1]["tool_calls"], model) + for _, turn := range turns { + assert.NotContains(t, turn, "reasoning_content", model) + } + } +} + func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index a33651831..44c180f21 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -133,6 +133,10 @@ func ReplaysThinkingInContent(model string) bool { return true } +func ReplaysReasoningInThinkTags(model string) bool { + return onMiniMaxAPI(model, "minimax-m") +} + // UsesLegacyMaxTokens reports whether the output limit must travel as // max_tokens rather than max_completion_tokens. func UsesLegacyMaxTokens(model string) bool { From 2f174a8e78d3c5d849ef8e6ed0384438ca2701cf Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:47:34 +0300 Subject: [PATCH 539/618] fix(openai): refuse a thinking budget that no field on the door can carry With reasoning_effort gone from GLM before 5.2, Kimi K2 and MiniMax, a budget such as WithReasoning(ReasoningNone, 1024) on zai/glm-5.1, moonshot/kimi-k2.6 or minimax/MiniMax-M3 left the request with no reasoning field at all: the model thought at its own default depth and the caller learned of it only from a dropped-option warning. None of these vendors has a field for a budget. Z.ai lists no thinking budget parameter and gives GLM before 5.2 only the thinking switch; Moonshot controls K2.x with the thinking object; MiniMax takes thinking adaptive or disabled and no budget. A cap the caller asked for cannot be honoured, so the door now returns ErrThinkingBudgetUnsupported before the request leaves. DashScope, which caps these guests with thinking_budget, keeps its wire, and a client on the reasoning-object format still sends reasoning.max_tokens. A budget on GLM 5.2 and Kimi K3 still becomes an effort level. The new predicate and door tests fail against a predicate that answers false, with the request reaching the server. Removing the door check, the explicit-budget guard, the reasoning-object exemption or the DashScope exclusion each fails a test. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 4 +- llms/openai/openaillm.go | 10 ++++ llms/openai/thinking_budget_field_test.go | 61 +++++++++++++++++++++++ llms/reasoning/effort_wire.go | 30 ++++++++++- llms/reasoning/effort_wire_test.go | 34 +++++++++++++ 5 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 llms/openai/thinking_budget_field_test.go diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 21c3c9e03..9eddc1929 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -150,7 +150,7 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"guest without a gateway name does not get a budget", "glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"bare kimi does not get a budget", "kimi-k2.7-code", + {"bare kimi does not get a budget", "kimi-k3", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"bare deepseek-v4 does not get a budget", "deepseek-v4-pro", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, @@ -158,7 +158,7 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"glm on its own gateway does not get a budget", "zai/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, - {"kimi on its own gateway does not get a budget", "moonshot/kimi-k2.7-code", + {"kimi on its own gateway does not get a budget", "moonshot/kimi-k3", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"glm via openrouter does not get a budget", "openrouter/z-ai/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 15a851208..09676660d 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -425,6 +425,9 @@ func (o *LLM) setReasoning( reportOpenAIReasoning(warn, model, opts.Reasoning, req) return wireEffortOf(true, reasoningEffort), nil } + if o.budgetHasNoField(model, opts) { + return "", &reasoning.ErrThinkingBudgetUnsupported{Model: model} + } budget, effortBudget := budgetsFor(model, opts, reasoningEffort, reasoningTokens) wire := o.writeEffort(req, sendsEffort, reasoningEffort, budget, effortBudget, warnCtx{model, warn}) reportOpenAIReasoning(warn, model, opts.Reasoning, req) @@ -461,6 +464,13 @@ func (o *LLM) writeVendorBudget(req *openaiclient.ChatRequest, opts llms.CallOpt return true } +func (o *LLM) budgetHasNoField(model string, opts llms.CallOptions) bool { + if !opts.Reasoning.HasExplicitTokens() || o.client.ModernReasoningFormat && o.client.UseReasoningMaxTokens { + return false + } + return reasoning.TakesNoThinkingDepth(model) +} + func (o *LLM) sendsClaudeBudget(model string, opts llms.CallOptions) bool { return !o.client.ModernReasoningFormat && opts.Reasoning.HasExplicitTokens() && diff --git a/llms/openai/thinking_budget_field_test.go b/llms/openai/thinking_budget_field_test.go new file mode 100644 index 000000000..6dc57c7d9 --- /dev/null +++ b/llms/openai/thinking_budget_field_test.go @@ -0,0 +1,61 @@ +package openai + +import ( + "context" + "errors" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestABudgetNoFieldCarriesIsRefusedBeforeTheNetwork(t *testing.T) { + t.Parallel() + + for _, model := range []string{"zai/glm-5.1", "glm-4.7", "moonshot/kimi-k2.6", "minimax/MiniMax-M3"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + var reached bool + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + reached = true + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","choices":[]}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningNone, 1024), llms.WithMaxTokens(8192)) + + var want *reasoning.ErrThinkingBudgetUnsupported + if !errors.As(err, &want) { + t.Fatalf("a budget %s has no field for must be refused, got err=%v", model, err) + } + if want.Model != model { + t.Errorf("the error names %q, want %q", want.Model, model) + } + if reached { + t.Error("the refusal must come before the request leaves") + } + }) + } +} + +func TestABudgetTheReasoningObjectCarriesIsNotRefused(t *testing.T) { + t.Parallel() + + body := sendModernReasoningForModel(t, "zai/glm-5.1", llms.ReasoningNone, 2048) + + if !strings.Contains(body, `"reasoning":{"max_tokens":2048}`) { + t.Errorf("the reasoning object carries the budget on this format, got body: %s", body) + } +} diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 7d1629c25..70a3fecb6 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -142,8 +142,7 @@ func AcceptsEffortWire(model string) bool { if mistralWithoutReasoning(form) { return false } - if hasGeneration(form, "kimi-k2") || glmBeforeEffortField(model, form) || - strings.HasPrefix(form, "minimax-m") { + if thinksBySwitchOnly(model, form) { return false } if form == "grok-build-latest" { @@ -158,6 +157,33 @@ func AcceptsEffortWire(model string) bool { return true } +// TakesNoThinkingDepth reports whether the model's own door takes neither a +// thinking budget nor an effort level. +func TakesNoThinkingDepth(model string) bool { + if dashScopeGuestSpelling(model) != "" { + return false + } + for _, form := range modelSpellings(model) { + if thinksBySwitchOnly(model, form) { + return true + } + } + return false +} + +// ErrThinkingBudgetUnsupported reports a thinking budget asked of a model that +// TakesNoThinkingDepth. +type ErrThinkingBudgetUnsupported struct{ Model string } + +func (e *ErrThinkingBudgetUnsupported) Error() string { + return fmt.Sprintf("model %q takes no thinking budget or effort level; leave the budget unset", e.Model) +} + +func thinksBySwitchOnly(model, form string) bool { + return hasGeneration(form, "kimi-k2") || glmBeforeEffortField(model, form) || + strings.HasPrefix(form, "minimax-m") +} + func glmBeforeEffortField(model, form string) bool { if ServedByMistral(model) { return false diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 3133638ab..ae576e0a7 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -65,6 +65,40 @@ func TestAcceptsEffortWire(t *testing.T) { } } +func TestTakesNoThinkingDepth(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + model string + want bool + }{ + {"glm-5.1", true}, + {"zai/glm-5.1", true}, + {"glm-5-turbo", true}, + {"glm-4.7", true}, + {"kimi-k2.6", true}, + {"moonshot/kimi-k2.6", true}, + {"kimi-k2.7-code", true}, + {"MiniMax-M3", true}, + {"minimax/MiniMax-M2.7", true}, + {"glm-5.2", false}, + {"zai/glm-5.2", false}, + {"kimi-k3", false}, + {"dashscope/glm-5.1", false}, + {"dashscope/glm-5", false}, + {"dashscope/kimi-k2.7-code", false}, + {"dashscope/kimi-k2.6", false}, + {"zai-glm-5-2", false}, + {"qwen3.7-plus", false}, + {"gpt-5", false}, + {"deepseek-v4-pro", false}, + } { + if got := TakesNoThinkingDepth(tc.model); got != tc.want { + t.Errorf("TakesNoThinkingDepth(%q) = %v, want %v", tc.model, got, tc.want) + } + } +} + func TestRejectsMinP(t *testing.T) { t.Parallel() From 6f0c1f59662768c1f3fd06cd35d34434890a29d8 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:49:29 +0300 Subject: [PATCH 540/618] test(openai): pin a budget on GLM 5.2+ and Kimi K3 to the adaptive-only Claude wire GLM from 5.2 on Z.ai and Kimi K3 on Moonshot take a thinking level and no budget: Z.ai lists reasoning_effort from GLM-5.2 and no budget parameter, Moonshot gives kimi-k3 reasoning_effort low, high and max and no budget. That is the position of an adaptive-only Claude behind the openai door, where a budget becomes the level GetEffort maps it to, travels as reasoning_effort, and the budget itself is reported as dropped. The door already does the same for these models, so the change is the test that holds them to it: reasoning_effort low for a 1024 budget under an 8192 limit, no thinking_budget, budget_tokens or thinking object, and a drop warning for the budget, on claude-sonnet-5 and on each of the four names. The test passes on the code before this branch as well. Moving GLM 5.2 or Kimi K3 under the switch-only rule, keeping a budget from becoming an effort, or silencing the drop warning each fails it. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_budget_field_test.go | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/llms/openai/thinking_budget_field_test.go b/llms/openai/thinking_budget_field_test.go index 6dc57c7d9..0a8280a75 100644 --- a/llms/openai/thinking_budget_field_test.go +++ b/llms/openai/thinking_budget_field_test.go @@ -50,6 +50,34 @@ func TestABudgetNoFieldCarriesIsRefusedBeforeTheNetwork(t *testing.T) { } } +func TestABudgetOnAnEffortOnlyModelTravelsAsAnEffortLikeAdaptiveClaude(t *testing.T) { + t.Parallel() + + budget := []llms.CallOption{llms.WithReasoning(llms.ReasoningNone, 1024), llms.WithMaxTokens(8192)} + for _, model := range []string{ + "anthropic/claude-sonnet-5", "zai/glm-5.2", "glm-5.2", "glm-5.3", "kimi-k3", "moonshot/kimi-k3", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, model, nil, budget...) + if !strings.Contains(body, `"reasoning_effort":"low"`) { + t.Errorf("want the level the budget maps to, got body: %s", body) + } + for _, field := range []string{`"thinking_budget"`, `"budget_tokens"`, `"thinking"`} { + if strings.Contains(body, field) { + t.Errorf("no budget field exists for this model, got %s in body: %s", field, body) + } + } + + w := warningFor(t, sendForWarnings(t, model, budget...), "WithReasoning") + if w.Kind != llms.WarningDrop || w.Asked != "1024 tokens" || w.Sent != "" { + t.Errorf("the caller must learn the budget itself did not travel, got %+v", w) + } + }) + } +} + func TestABudgetTheReasoningObjectCarriesIsNotRefused(t *testing.T) { t.Parallel() From 454df747105a6f8b410b5f02621af8e1fa3fe4fd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:49:30 +0300 Subject: [PATCH 541/618] fix(llms): offer Nova 2 Lite's off on the Bedrock hint A settings form built from the Bedrock hint showed Nova 2 Lite's levels but never an Off control. ReasoningSupportFor left the model unclassified with no default state, so a consumer could not tell that the omitted field the door sends for Off really is off; pentagi read that as a silent no-op and set cannotDisable. AWS documents reasoningConfig for Nova 2 Lite with "type: enabled or disabled (default: disabled)" and maxReasoningEffort low, medium or high, so the omission is the documented off. On the Bedrock provider the hint now says what the Converse door does: the model is known to reason when asked, not by default, takes one of the three levels NovaEffort sends unchanged, and Off is not refused. The wire is untouched. Other providers and the Nova models without reasoningConfig keep their old hint. The new test fails on the old hint for every Nova 2 Lite spelling; nine mutations (provider guard, branch, Known, levels, an extra level, mechanism, default state true or unknown, CannotDisable) each turn it red. Run through pentagi's ConvertModels over its Bedrock catalog, the only row that changes is Nova 2 Lite: cannotDisable true -> false, defaultOn null -> false. PAGI-354 Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 4 +++ llms/reasoning_support.go | 15 ++++++++-- llms/reasoning_support_test.go | 45 ++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 3fb7345d3..ce5be30a1 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -25,6 +25,10 @@ func NovaEffort(effort string) string { } } +func NovaEfforts() []string { + return []string{"low", "medium", "high"} +} + // NovaClearsInferenceConfigAt reports whether Nova refuses temperature, topP and // maxTokens alongside the given effort. func NovaClearsInferenceConfigAt(effort string) bool { diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index bd8c8eddf..f33b17e03 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -80,8 +80,8 @@ func lookupReasoningOverride(model string) (ReasoningSupport, bool) { func boolPtr(b bool) *bool { return &b } // ReasoningSupportFor returns the reasoning-control hint for a model on a -// provider. Registered overrides win; then Claude and OpenAI reasoning models are -// classified from the shared tables; everything else returns Known=false +// provider. Registered overrides win; then the models the shared tables classify +// for that provider; everything else returns Known=false // (optimistic — the UI shows all controls and the API rejects what it cannot do). func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { if s, ok := lookupReasoningOverride(model); ok { @@ -114,6 +114,17 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } + if p == reasoning.ProviderBedrock && reasoning.IsNovaReasoningModel(model) { + return ReasoningSupport{ + Supported: true, + Known: true, + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + Efforts: toReasoningEfforts(reasoning.NovaEfforts()), + Mechanism: ReasoningMechanismAdaptive, + DefaultOn: boolPtr(false), + } + } + if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { return ReasoningSupport{ Supported: true, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 646736f13..c77fce368 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -511,6 +511,51 @@ func TestTheBedrockHintOffersOnlyTheLevelsTheConverseDoorSends(t *testing.T) { } } +func TestTheBedrockHintOffersNovaOffAndTheLevelsTheDoorSends(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "us.amazon.nova-2-lite-v1:0", "amazon.nova-2-lite-v1:0", "global.amazon.nova-2-lite-v1:0", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + s := ReasoningSupportFor(model, reasoning.ProviderBedrock) + if !s.Supported || !s.Known { + t.Errorf("%s: Nova 2 Lite takes a documented reasoningConfig, so it is known to reason: %+v", model, s) + } + if want := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh}; !slices.Equal(s.Efforts, want) { + t.Errorf("%s: hint Efforts = %v, want %v", model, s.Efforts, want) + } + for _, effort := range s.Efforts { + if sent := reasoning.NovaEffort(string(effort)); sent != string(effort) { + t.Errorf("%s: the hint offers %q but the door sends %q", model, effort, sent) + } + } + if s.Mechanism != ReasoningMechanismAdaptive { + t.Errorf("%s: hint Mechanism = %v, want an effort level", model, s.Mechanism) + } + if wire := reasoning.ResolveOff(model, reasoning.ProviderBedrock); wire != reasoning.OffOmit { + t.Fatalf("%s: off wire = %v, want the omission Nova reads as disabled", model, wire) + } + if s.DefaultOn == nil || *s.DefaultOn { + t.Errorf("%s: DefaultOn = %v, want false — Off travels as an omitted field, which a consumer "+ + "can only offer when it knows the model does not reason unasked", model, s.DefaultOn) + } + if s.CannotDisable { + t.Errorf("%s: the door honours Off, yet the hint says it cannot", model) + } + }) + } + + if s := ReasoningSupportFor("us.amazon.nova-pro-v1:0", reasoning.ProviderBedrock); len(s.Efforts) > 0 || s.DefaultOn != nil { + t.Errorf("Nova Pro takes no reasoningConfig, yet its hint is classified: %+v", s) + } + if s := ReasoningSupportFor("us.amazon.nova-2-lite-v1:0", reasoning.ProviderOpenAI); len(s.Efforts) > 0 || s.DefaultOn != nil { + t.Errorf("the openai door never sends reasoningConfig, yet its hint classifies Nova: %+v", s) + } +} + func TestTheHintNamesTheMechanismTheDoorActuallyUses(t *testing.T) { t.Parallel() From 1d71dec6cc36c6b5080a626531a84b9b5f0c5e24 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 03:51:55 +0300 Subject: [PATCH 542/618] test(openai): pin the thinking wire of GLM, Kimi and MiniMax on each host One door-level table reads every reasoning field of the request body for the names pentagi sends: glm-5.1, kimi-k2.6 and MiniMax-M3, bare and behind zai/, moonshot/ and minimax/, with budgets that map to low, medium and high are refused with ErrThinkingBudgetUnsupported and never reach the server; glm-5.2 keeps the level its budget maps to; dashscope/glm-5.1 and dashscope/kimi-k2.7-code keep thinking_budget and nothing else; glm-5.1 and zai/glm-5.1 still switch off with the thinking object. With the switch-only families emptied, which is how the door behaved before this branch, every budget row fails with reasoning_effort low, medium or high on the wire. Removing the refusal, the DashScope thinking_budget write or glm-5.1 from the thinking-object off each fails the table. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_budget_field_test.go | 79 +++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/llms/openai/thinking_budget_field_test.go b/llms/openai/thinking_budget_field_test.go index 0a8280a75..164dee01a 100644 --- a/llms/openai/thinking_budget_field_test.go +++ b/llms/openai/thinking_budget_field_test.go @@ -2,10 +2,12 @@ package openai import ( "context" + "encoding/json" "errors" "io" "net/http" "net/http/httptest" + "reflect" "strings" "testing" @@ -78,6 +80,83 @@ func TestABudgetOnAnEffortOnlyModelTravelsAsAnEffortLikeAdaptiveClaude(t *testin } } +func TestTheThinkingWireOfGLMKimiAndMiniMaxOnEachHost(t *testing.T) { + t.Parallel() + + budget := func(tokens int) []llms.CallOption { + return []llms.CallOption{llms.WithReasoning(llms.ReasoningNone, tokens), llms.WithMaxTokens(8192)} + } + off := []llms.CallOption{llms.WithReasoningDisabled()} + + type row struct { + model string + call []llms.CallOption + refused bool + want map[string]any + } + refusedModels := []string{ + "glm-5.1", "zai/glm-5.1", "kimi-k2.6", "moonshot/kimi-k2.6", "MiniMax-M3", "minimax/MiniMax-M3", + } + budgets := []int{1024, 2500, 6000} + rows := make([]row, 0, len(refusedModels)*len(budgets)+6) + for _, model := range refusedModels { + for _, tokens := range budgets { + rows = append(rows, row{model: model, call: budget(tokens), refused: true}) + } + } + rows = append(rows, + row{model: "zai/glm-5.2", call: budget(1024), want: map[string]any{"reasoning_effort": "low"}}, + row{model: "glm-5.2", call: budget(6000), want: map[string]any{"reasoning_effort": "high"}}, + row{model: "dashscope/glm-5.1", call: budget(1024), want: map[string]any{"thinking_budget": float64(1024)}}, + row{model: "dashscope/kimi-k2.7-code", call: budget(1024), want: map[string]any{"thinking_budget": float64(1024)}}, + row{model: "glm-5.1", call: off, want: map[string]any{"thinking": map[string]any{"type": "disabled"}}}, + row{model: "zai/glm-5.1", call: off, want: map[string]any{"thinking": map[string]any{"type": "disabled"}}}, + ) + + for _, tc := range rows { + var raw []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + raw, _ = io.ReadAll(r.Body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}]}`) + })) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(tc.model)) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, tc.call...) + srv.Close() + + var refusal *reasoning.ErrThinkingBudgetUnsupported + if tc.refused { + if !errors.As(err, &refusal) || raw != nil { + t.Errorf("%s: want ErrThinkingBudgetUnsupported before the network, got err=%v body=%s", + tc.model, err, raw) + } + continue + } + if err != nil { + t.Errorf("%s: GenerateContent() error: %v", tc.model, err) + continue + } + var body map[string]any + if err := json.Unmarshal(raw, &body); err != nil { + t.Fatalf("%s: decode body: %v", tc.model, err) + } + got := map[string]any{} + for _, key := range []string{"thinking", "reasoning_effort", "reasoning", "enable_thinking", "thinking_budget"} { + if value, ok := body[key]; ok { + got[key] = value + } + } + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("%s: reasoning fields on the wire = %v, want %v", tc.model, got, tc.want) + } + } +} + func TestABudgetTheReasoningObjectCarriesIsNotRefused(t *testing.T) { t.Parallel() From 0fc2f42042b19275402ef528bb704eb2d61342be Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 04:14:42 +0300 Subject: [PATCH 543/618] fix(openai): leave a MiniMax turn alone when its content opens with a think block Streaming MiniMax through the LiteLLM gateway delivers the reasoning twice: in reasoning_content and inside a block in content. The streamed choice then holds content "\nR\n\n\nPONG" and reasoning R, and a caller that stores both, as pentagi does, got the turn back with the thought prepended once more: "R\nR\n\n\nPONG", on text and tool turns alike. MiniMax asks to keep content as the model returned it: "in the message history, do not modify the content field. You must preserve the model's thinking content completely, i.e., reasoning_content" (platform.minimax.io/docs/guides/text-m3-function-call). A turn whose content already opens with a block now goes back unchanged. Checked live through the gateway on minimax/MiniMax-M3, turn one streamed, turn two sent twice: with content plus reasoning as pentagi stores it, and with the content alone. Before the change prompt tokens were 230 against 213 on a text turn and 508 against 484 on a tool turn; after it the requests carry one block and match, 240/240 and 478/478. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 4 ++ llms/openai/openaillm_option.go | 3 +- llms/openai/reasoning_replay_test.go | 68 ++++++++++++++++++++++------ 3 files changed, 59 insertions(+), 16 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index e0946702f..b491fcad3 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -6,6 +6,7 @@ import ( "fmt" "slices" "strconv" + "strings" "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" @@ -849,6 +850,9 @@ func withThinkTags(parts []llms.ContentPart, thought string) []llms.ContentPart head := "" + thought + "" if len(parts) > 0 { if text, ok := parts[0].(llms.TextContent); ok { + if strings.HasPrefix(text.Text, "") { + return parts + } text.Text = head + text.Text parts[0] = text return parts diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index f7bd4e65d..072e869ca 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -178,7 +178,8 @@ func WithModernReasoningFormat() Option { // turn for DeepSeek, Kimi, GLM and Qwen models. A model Mistral serves takes it on // every turn as a thinking chunk at the head of content instead, and one that // does not reason there takes none. A MiniMax M-series model on MiniMax's API -// takes it on every turn inside tags at the head of content. +// takes it on every turn inside tags at the head of content, unless the +// content already opens with a block. func WithPreserveReasoningContent() Option { return func(opts *options) { opts.preserveReasoningContent = true diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index 30dde0fb1..4278a4419 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -29,6 +29,26 @@ func replayedReasoning(t *testing.T, model string) []any { func assistantTurnsSent(t *testing.T, model string) []map[string]any { t.Helper() + thought := func(text string) *reasoning.ContentReasoning { return &reasoning.ContentReasoning{Content: text} } + return assistantTurnsSentFor(t, model, []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("answered in text", thought("text turn thought")), + }}, + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", thought("tool turn thought")), + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, + }}, + }) +} + +func assistantTurnsSentFor(t *testing.T, model string, history []llms.MessageContent) []map[string]any { + t.Helper() + var body map[string]any server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { raw, err := io.ReadAll(r.Body) @@ -50,21 +70,6 @@ func assistantTurnsSent(t *testing.T, model string) []map[string]any { llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel(model), WithPreserveReasoningContent()) require.NoError(t, err) - thought := func(text string) *reasoning.ContentReasoning { return &reasoning.ContentReasoning{Content: text} } - history := []llms.MessageContent{ - llms.TextParts(llms.ChatMessageTypeHuman, "first"), - {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.TextPartWithReasoning("answered in text", thought("text turn thought")), - }}, - llms.TextParts(llms.ChatMessageTypeHuman, "second"), - {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ - llms.TextPartWithReasoning("", thought("tool turn thought")), - llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, - }}, - {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ - llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, - }}, - } tools := []llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ Name: "f", Parameters: map[string]any{"type": "object"}, }}} @@ -110,6 +115,39 @@ func TestMiniMaxGetsBackTheReasoningOfEveryAssistantTurnInThinkTags(t *testing.T } } +func TestMiniMaxTurnThatAlreadyHoldsItsThinkBlockGoesBackAsItIs(t *testing.T) { + t.Parallel() + + const textThought = `The user is asking me to reply with the single word "PONG".` + const toolThought = `The user is asking me to call the get_weather function for Paris.` + textContent := "\n" + textThought + "\n\n\nPONG" + toolContent := "\n" + toolThought + "\n\n\nI'll get the current weather for Paris for you." + + for _, model := range []string{"minimax/MiniMax-M3", "MiniMax-M2.7"} { + turns := assistantTurnsSentFor(t, model, []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "Reply with the single word PONG."), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning(textContent, &reasoning.ContentReasoning{Content: textThought}), + }}, + llms.TextParts(llms.ChatMessageTypeHuman, "Call get_weather for Paris."), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning(toolContent, &reasoning.ContentReasoning{Content: toolThought}), + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, + }}, + }) + require.Len(t, turns, 2, model) + + assert.Equal(t, textContent, turns[0]["content"], model) + assert.Equal(t, toolContent, turns[1]["content"], model) + for _, turn := range turns { + assert.NotContains(t, turn, "reasoning_content", model) + } + } +} + func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() From 8d2f933ec079ac206014b760688b27c25f04832a Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 04:15:30 +0300 Subject: [PATCH 544/618] test(openai): pin a MiniMax turn without reasoning going back without think tags Nothing checked that a MiniMax turn with no reasoning to replay leaves content alone: dropping the empty-thought guard in withThinkTags kept every test green, while such turns then went out as "summary" and a tool turn as "". pentagi sends turns like that: text pairs built from a completion without reasoning, and MiniMax-M3 answers with thinking turned off. The test sends a text turn and a tool-call-only turn with no reasoning to MiniMax-M3 and M2.7 and expects the content exactly as given, with no reasoning_content; it goes red once the guard is removed. Co-Authored-By: Claude Opus 5 --- llms/openai/reasoning_replay_test.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/llms/openai/reasoning_replay_test.go b/llms/openai/reasoning_replay_test.go index 4278a4419..11f2774ef 100644 --- a/llms/openai/reasoning_replay_test.go +++ b/llms/openai/reasoning_replay_test.go @@ -148,6 +148,32 @@ func TestMiniMaxTurnThatAlreadyHoldsItsThinkBlockGoesBackAsItIs(t *testing.T) { } } +func TestMiniMaxTurnWithoutReasoningGoesBackWithoutThinkTags(t *testing.T) { + t.Parallel() + + for _, model := range []string{"minimax/MiniMax-M3", "MiniMax-M2.7"} { + turns := assistantTurnsSentFor(t, model, []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + llms.TextParts(llms.ChatMessageTypeAI, "summary without reasoning"), + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, + }}, + }) + require.Len(t, turns, 2, model) + + assert.Equal(t, "summary without reasoning", turns[0]["content"], model) + assert.Equal(t, "", turns[1]["content"], model) + assert.NotEmpty(t, turns[1]["tool_calls"], model) + for _, turn := range turns { + assert.NotContains(t, turn, "reasoning_content", model) + } + } +} + func TestOtherVendorsGetBackOnlyTheReasoningOfToolTurns(t *testing.T) { t.Parallel() From 88d9f1c4a34c9553dc57fdcd606c890723a2a301 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 04:28:30 +0300 Subject: [PATCH 545/618] test(openai): pin the budget refusal when only one reasoning-object option is set The door lets a budget through to the reasoning object only when both WithModernReasoningFormat and WithUsingReasoningMaxTokens are set; with one of them alone nothing on the wire carries the budget, so GLM before 5.2, Kimi K2 and MiniMax must still get ErrThinkingBudgetUnsupported before the request leaves. Only the both-options case was under test: reducing the exception to either half of the condition kept every test green while zai/glm-5.1 with a 2048 budget went out as a bare request and a drop warning. The refusal test now runs each model with the default client, with the modern format alone and with reasoning max tokens alone. Reducing the condition to ModernReasoningFormat reddens the four modern-format-alone subtests; reducing it to UseReasoningMaxTokens reddens the four max-tokens-alone subtests. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/openai/thinking_budget_field_test.go | 69 +++++++++++++---------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/llms/openai/thinking_budget_field_test.go b/llms/openai/thinking_budget_field_test.go index 164dee01a..0df341abd 100644 --- a/llms/openai/thinking_budget_field_test.go +++ b/llms/openai/thinking_budget_field_test.go @@ -18,37 +18,48 @@ import ( func TestABudgetNoFieldCarriesIsRefusedBeforeTheNetwork(t *testing.T) { t.Parallel() + clients := []struct { + name string + opts []Option + }{ + {"default", nil}, + {"modern format alone", []Option{WithModernReasoningFormat()}}, + {"reasoning max tokens alone", []Option{WithUsingReasoningMaxTokens()}}, + } for _, model := range []string{"zai/glm-5.1", "glm-4.7", "moonshot/kimi-k2.6", "minimax/MiniMax-M3"} { - t.Run(model, func(t *testing.T) { - t.Parallel() - - var reached bool - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { - reached = true - w.Header().Set("Content-Type", "application/json") - _, _ = io.WriteString(w, `{"id":"x","choices":[]}`) - })) - t.Cleanup(srv.Close) - - llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) - if err != nil { - t.Fatalf("New() error: %v", err) - } - _, err = llm.GenerateContent(context.Background(), - []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, - llms.WithReasoning(llms.ReasoningNone, 1024), llms.WithMaxTokens(8192)) + for _, client := range clients { + t.Run(model+"/"+client.name, func(t *testing.T) { + t.Parallel() + + var reached bool + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + reached = true + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","choices":[]}`) + })) + t.Cleanup(srv.Close) + + opts := append([]Option{WithBaseURL(srv.URL), WithToken("test"), WithModel(model)}, client.opts...) + llm, err := New(opts...) + if err != nil { + t.Fatalf("New() error: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, + llms.WithReasoning(llms.ReasoningNone, 1024), llms.WithMaxTokens(8192)) - var want *reasoning.ErrThinkingBudgetUnsupported - if !errors.As(err, &want) { - t.Fatalf("a budget %s has no field for must be refused, got err=%v", model, err) - } - if want.Model != model { - t.Errorf("the error names %q, want %q", want.Model, model) - } - if reached { - t.Error("the refusal must come before the request leaves") - } - }) + var want *reasoning.ErrThinkingBudgetUnsupported + if !errors.As(err, &want) { + t.Fatalf("a budget %s has no field for must be refused, got err=%v", model, err) + } + if want.Model != model { + t.Errorf("the error names %q, want %q", want.Model, model) + } + if reached { + t.Error("the refusal must come before the request leaves") + } + }) + } } } From c2a4f228117ca07f081bd354c7839b51a8d22ef7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 04:29:22 +0300 Subject: [PATCH 546/618] test(reasoning): pin that an undated GLM alias is not a pre-5.2 generation glmGeneration gives up on a name with no number after glm-, so the aliases glm-latest and glm-flash-latest, which the catalogue already treats as the 5.3 line, keep the effort field and are not refused a budget. No test named a GLM spelling without a generation number: making that early return report generation 0 kept every test green, while glm-latest lost reasoning_effort ("medium" went out as a bare request and a drop warning) and a 1024 budget on it turned into ErrThinkingBudgetUnsupported. The effort-field and thinking-depth tables now carry the aliases. Making the early return report success reddens AcceptsEffortWire for glm-latest and glm-flash-latest and TakesNoThinkingDepth for glm-latest. PAGI-345 Co-Authored-By: Claude Opus 5 --- llms/reasoning/effort_wire_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index ae576e0a7..6fb9d43e7 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -48,6 +48,8 @@ func TestAcceptsEffortWire(t *testing.T) { {"glm-5.2-fast-preview", true}, {"glm-5.3", true}, {"glm-5.3-flash", true}, + {"glm-latest", true}, + {"glm-flash-latest", true}, {"dashscope/glm-5.1", true}, {"dashscope/glm-5", false}, {"zai-glm-5-2", true}, @@ -83,6 +85,7 @@ func TestTakesNoThinkingDepth(t *testing.T) { {"minimax/MiniMax-M2.7", true}, {"glm-5.2", false}, {"zai/glm-5.2", false}, + {"glm-latest", false}, {"kimi-k3", false}, {"dashscope/glm-5.1", false}, {"dashscope/glm-5", false}, From fe97a0088e6c8b7b3c366f3f5fe0c1a90e2c33bc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 04:37:54 +0300 Subject: [PATCH 547/618] test(llms): leave gpt-oss on Bedrock to the Bedrock hint tests The ollama hint test also asserted that openai.gpt-oss-120b-1:0 on Bedrock offers no levels, to show that ollama's levels stay on the ollama door. With the Bedrock hint now naming the reasoning_effort levels AWS documents for gpt-oss, that row asserted the opposite of the Bedrock contract. The leak check keeps the unknown provider; the Bedrock levels are pinned by the Bedrock tests. Co-Authored-By: Claude Opus 5 --- llms/reasoning_support_test.go | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 26e7f87ac..d57297b6e 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -709,16 +709,8 @@ func TestTheOllamaHintOffersGPTOSSTheLevelsOllamaDocuments(t *testing.T) { } } - for _, tc := range []struct { - model string - p reasoning.Provider - }{ - {"gpt-oss:120b", reasoning.ProviderUnknown}, - {"openai.gpt-oss-120b-1:0", reasoning.ProviderBedrock}, - } { - if efforts := ReasoningSupportFor(tc.model, tc.p).Efforts; len(efforts) != 0 { - t.Errorf("%s on provider %d offers %v, but these levels are what ollama documents for its own door", - tc.model, tc.p, efforts) - } + if efforts := ReasoningSupportFor("gpt-oss:120b", reasoning.ProviderUnknown).Efforts; len(efforts) != 0 { + t.Errorf("gpt-oss:120b on an unknown provider offers %v, but these levels are what ollama documents for its own door", + efforts) } } From 965d331afd09c30695d25d1e4878c2665920ca54 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 04:43:16 +0300 Subject: [PATCH 548/618] refactor(llms): build the level-only hint of gpt-oss, Nova and ollama in one place Three branches of ReasoningSupportFor built the same answer for a model that takes only an effort level, and together they pushed the function past the linter's length limit. They now share one constructor; every hint stays the same, as the hint tests show. Co-Authored-By: Claude Opus 5 --- llms/reasoning_support.go | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 934bf4597..32b580d44 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -101,25 +101,11 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } if p == reasoning.ProviderBedrock && reasoning.IsGptOssModel(model) { - return ReasoningSupport{ - Supported: true, - Known: true, - CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, - Efforts: toReasoningEfforts(reasoning.GptOssEfforts()), - Mechanism: ReasoningMechanismAdaptive, - DefaultOn: boolPtr(true), - } + return levelOnlySupport(model, p, reasoning.GptOssEfforts(), true) } if p == reasoning.ProviderBedrock && reasoning.IsNovaReasoningModel(model) { - return ReasoningSupport{ - Supported: true, - Known: true, - CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, - Efforts: toReasoningEfforts(reasoning.NovaEfforts()), - Mechanism: ReasoningMechanismAdaptive, - DefaultOn: boolPtr(false), - } + return levelOnlySupport(model, p, reasoning.NovaEfforts(), false) } if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { @@ -164,14 +150,7 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } if efforts := reasoning.OllamaEffortsFor(model); p == reasoning.ProviderOllama && len(efforts) > 0 { - return ReasoningSupport{ - Supported: true, - Known: true, - CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, - Efforts: toReasoningEfforts(efforts), - Mechanism: ReasoningMechanismAdaptive, - DefaultOn: boolPtr(true), - } + return levelOnlySupport(model, p, efforts, true) } return ReasoningSupport{ @@ -181,6 +160,17 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { } } +func levelOnlySupport(model string, p reasoning.Provider, efforts []string, defaultOn bool) ReasoningSupport { + return ReasoningSupport{ + Supported: true, + Known: true, + CannotDisable: reasoning.ResolveOff(model, p) == reasoning.OffUnsupported, + Efforts: toReasoningEfforts(efforts), + Mechanism: ReasoningMechanismAdaptive, + DefaultOn: boolPtr(defaultOn), + } +} + // toReasoningEfforts converts the resolver's raw effort strings to the public // ReasoningEffort type for UI hints. func toReasoningEfforts(efforts []string) []ReasoningEffort { From 6aa6de9a85faef91a478068839c03b443f15f403 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 08:00:20 +0300 Subject: [PATCH 549/618] fix(googleai): surface a failed stream before the empty-stream budget guess A stream that failed with an HTTP error leaves lastCandidate nil. When WithMaxTokens was also set, checkEmptyStream ran first and returned "max_tokens is too small to start an answer", hiding the real cause (e.g. a 429). Check streamErr before the empty-stream heuristic so the true error wins. Verified: a fake transport returning 429 with WithMaxTokens(24) returned token_limit before the fix and the 429 after; reverting the order turns the new test red. PAGI-247 Co-Authored-By: Claude Opus 4.8 --- llms/googleai/empty_stream_test.go | 38 ++++++++++++++++++++++++++++++ llms/googleai/googleai.go | 8 +++---- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/llms/googleai/empty_stream_test.go b/llms/googleai/empty_stream_test.go index feed6fbe7..af6af9a45 100644 --- a/llms/googleai/empty_stream_test.go +++ b/llms/googleai/empty_stream_test.go @@ -3,6 +3,7 @@ package googleai import ( "bytes" "context" + "errors" "io" "net/http" "testing" @@ -48,6 +49,43 @@ func TestStreamWithoutCandidatesIsNotASilentSuccess(t *testing.T) { assert.Empty(t, resp.Choices[0].Content) } +type failedStream struct{} + +func (failedStream) RoundTrip(r *http.Request) (*http.Response, error) { + body := `{"error":{"code":429,"message":"Resource has been exhausted (e.g. check quota).","status":"RESOURCE_EXHAUSTED"}}` + return &http.Response{ + StatusCode: http.StatusTooManyRequests, + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Request: r, + }, nil +} + +func TestARealStreamErrorIsNotBlamedOnTheBudget(t *testing.T) { + t.Parallel() + + llm, err := New(context.Background(), + WithAPIKey("unit-test-key"), WithRest(), + WithDefaultModel("gemini-2.5-flash"), + WithHTTPClient(&http.Client{Transport: failedStream{}})) + require.NoError(t, err) + + msgs := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")} + sink := func(context.Context, streaming.Chunk) error { return nil } + + _, err = llm.GenerateContent(context.Background(), msgs, + llms.WithMaxTokens(24), llms.WithStreamingFunc(sink)) + + require.Error(t, err) + assert.Contains(t, err.Error(), "429", + "a stream that failed HTTP must surface its own error, not a budget guess") + var apiErr *llms.Error + if errors.As(err, &apiErr) { + assert.NotEqual(t, llms.ErrCodeTokenLimit, apiErr.Code, + "a set max_tokens must not mask the real stream failure") + } +} + type blockedPromptStream struct{} func (blockedPromptStream) RoundTrip(r *http.Request) (*http.Response, error) { diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index c9a6c88ba..666b6b519 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -518,14 +518,12 @@ StreamEnd: GenerationInfo: metadata, }}, } - if err := checkEmptyStream(lastCandidate, blockReason, resp.Choices[0], opts); err != nil { - return resp, err - } - // A callback that returned an error stopped the stream early; surface it - // (matching the other providers) instead of masking it as a success. if streamErr != nil { return resp, streamErr } + if err := checkEmptyStream(lastCandidate, blockReason, resp.Choices[0], opts); err != nil { + return resp, err + } return resp, nil } From 7e8acaeb887e17cd55f26bdef3d12e0e1e2dd20c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 08:10:22 +0300 Subject: [PATCH 550/618] fix(openai): leave the DashScope thinking budget out of the answer-limit cut The DashScope wire carried thinking_budget = GetTokens(max_tokens), which caps the budget at max_tokens*2/3 to reserve answer room. Alibaba's Qwen Chat Completions reference states that once thinking_budget is passed, max_tokens limits the answer alone and the chain-of-thought is controlled separately by thinking_budget. Reserving answer room from the budget therefore shrinks the caller's thinking for no reason: WithMaxTokens(2000) + a 8192 budget went out as 1333. Send the caller's explicit budget, capped only by MaxReasoningTokens. Verified: a fake transport showed thinking_budget 1333 before and 8192 after for qwen/glm/deepseek; reverting turns the wire and warnings tests red. The pre-fix test that pinned the answer-limit cut now pins the model-cap cut instead. PAGI-247 Co-Authored-By: Claude Opus 4.8 --- llms/openai/effort_with_tools_test.go | 23 +++++++++++++++++++++++ llms/openai/openaillm.go | 3 ++- llms/openai/sampling_warnings_test.go | 19 ++++++++++++++++--- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 9eddc1929..bba9b469d 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -183,6 +183,29 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { } } +func TestDashScopeBudgetIsNotCappedByTheAnswerLimit(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + model string + }{ + {"qwen keeps the whole budget", "dashscope/qwen3-max"}, + {"glm keeps the whole budget", "dashscope/glm-5.2"}, + {"deepseek keeps the whole budget", "dashscope/deepseek-v4-pro"}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + body := bodyForCall(t, tc.model, + llms.WithMaxTokens(2000), llms.WithReasoning(llms.ReasoningLow, 8192)) + if !strings.Contains(body, `"thinking_budget":8192`) { + t.Errorf("a small answer limit must not shrink the thinking budget "+ + "(max_tokens limits the answer only when thinking_budget is set)\nbody: %s", body) + } + }) + } +} + func TestAnUnservableEffortWithToolsIsRefusedBeforeTheNetwork(t *testing.T) { t.Parallel() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index f1cb03885..7b5a26b16 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -467,7 +467,8 @@ func (o *LLM) writeVendorBudget(req *openaiclient.ChatRequest, opts llms.CallOpt } switch { case reasoning.DashScopeTakesThinkingBudget(wc.model): - req.ThinkingBudget = &tokens + budget := min(opts.Reasoning.Tokens, llms.MaxReasoningTokens) + req.ThinkingBudget = &budget case o.sendsClaudeBudget(wc.model, opts): budget := reasoning.ClaudeClampBudget(wc.model, tokens) req.Thinking = &openaiclient.ThinkingOptions{Type: "enabled", BudgetTokens: budget} diff --git a/llms/openai/sampling_warnings_test.go b/llms/openai/sampling_warnings_test.go index 10d8d14e4..f59b8619c 100644 --- a/llms/openai/sampling_warnings_test.go +++ b/llms/openai/sampling_warnings_test.go @@ -153,14 +153,14 @@ func TestAnAnswerLimitRaisedForTheBudgetIsReported(t *testing.T) { } } -func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { +func TestAThinkingBudgetAboveTheModelCapIsReported(t *testing.T) { t.Parallel() resp, sent := sendForWarningsWith(t, "qwen3-max", nil, - llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 100000)) w := warningFor(t, resp, "WithReasoning") - if w.Kind != llms.WarningClamp || w.Asked != "30000 tokens" { + if w.Kind != llms.WarningClamp || w.Asked != "100000 tokens" { t.Errorf("reasoning warning = %+v (all: %v)", w, resp.Warnings) } if wire := fmt.Sprintf("%v tokens", sent["thinking_budget"]); w.Sent != wire { @@ -168,6 +168,19 @@ func TestAThinkingBudgetCutToFitTheAnswerLimitIsReported(t *testing.T) { } } +func TestASmallAnswerLimitDoesNotClampTheDashScopeBudget(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "qwen3-max", + llms.WithMaxTokens(4096), llms.WithReasoning(llms.ReasoningNone, 30000)) + + for _, w := range resp.Warnings { + if w.Option == "WithReasoning" { + t.Errorf("the answer limit alone must not clamp a DashScope thinking budget: %+v", w) + } + } +} + func TestABudgetThisDoorPutsOnNoFieldIsReportedAsDropped(t *testing.T) { t.Parallel() From f2da7a90f129808933764d1b62e195a411e5d1ab Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 08:18:15 +0300 Subject: [PATCH 551/618] fix(reasoning): let every DashScope GLM and Kimi guest carry a thinking budget The guest-budget list only named glm-5.1/5.2, kimi-k2.7-code and deepseek-v4, so an explicit budget on dashscope/glm-5, dashscope/glm-4.x or dashscope/kimi-k2.5/2.6/k2-thinking was dropped with a warning and the call went out with the answer limit alone. Alibaba's Qwen Chat Completions reference states thinking_budget applies to the GLM and Kimi families (kimi-k3 excepted), and the deep-thinking page enumerates glm-5, glm-4.7, glm-4.6, glm-4.5(-air), kimi-k2.5, kimi-k2.6 and kimi-k2-thinking. Expand the list to cover those generations (glm-5 subsumes 5.1/5.2). dashscope/kimi-k3 still gets no budget, matching the vendor exception. Verified on a fake transport: the budget was dropped before and reaches the wire after; reverting the list turns the eight new rows red. PAGI-247 Co-Authored-By: Claude Opus 4.8 --- llms/openai/effort_with_tools_test.go | 18 ++++++++++++++++++ llms/reasoning/qwen_capability.go | 6 +++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index bba9b469d..548f1a6d1 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -140,6 +140,24 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"guest kimi takes a budget", "dashscope/kimi-k2.7-code", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest glm-5 takes a budget", "dashscope/glm-5", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest glm-4.7 takes a budget", "dashscope/glm-4.7", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest glm-4.6 takes a budget", "dashscope/glm-4.6", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest glm-4.5 takes a budget", "dashscope/glm-4.5", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest glm-4.5-air takes a budget", "dashscope/glm-4.5-air", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest kimi-k2.6 takes a budget", "dashscope/kimi-k2.6", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest kimi-k2.5 takes a budget", "dashscope/kimi-k2.5", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest kimi-k2-thinking takes a budget", "dashscope/kimi-k2-thinking", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"guest kimi-k3 still gets no budget", "dashscope/kimi-k3", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"guest deepseek-v4 takes a budget", "dashscope/deepseek-v4-pro", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"dated deepseek-v4 snapshot does too", "dashscope/deepseek-v4-flash-0731", diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 508ee55e0..6afa0a135 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -53,7 +53,11 @@ func QwenThinkingEnabledByFlag(model string) bool { return qwenFlagThinkers[dashScopeSpelling(model)] } -var dashScopeGuestBudget = []string{"glm-5.1", "glm-5.2", "kimi-k2.7-code", "deepseek-v4"} +var dashScopeGuestBudget = []string{ + "glm-5", "glm-4.7", "glm-4.6", "glm-4.5", + "kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking", + "deepseek-v4", +} func dashScopeGuestSpelling(model string) string { rest, ok := strings.CutPrefix(strings.ToLower(model), "dashscope/") From 9e17757f53aa303c0bc2f71a0a6ae9fc3215577e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 08:21:10 +0300 Subject: [PATCH 552/618] fix(llms): report an explicit zero seed as a dropped option Seed is a *int, so nil already means "no seed" and WithSeed(0) is a real deterministic seed. The unread-catalogue predicate used askedInt(o.Seed, 0), whose neutral of 0 made an explicit 0 look unset, so a door that carries no seed field dropped it without a warning. Report whenever Seed is non-nil, regardless of its value. Verified: on a door carrying no seed, WithSeed(0) produced no warning before and a WithSeed drop after; reverting the predicate turns the new test red. PAGI-247 Co-Authored-By: Claude Opus 4.8 --- llms/unread_catalogue_test.go | 19 +++++++++++++++++++ llms/warning.go | 7 ++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/llms/unread_catalogue_test.go b/llms/unread_catalogue_test.go index 18bd58676..761039347 100644 --- a/llms/unread_catalogue_test.go +++ b/llms/unread_catalogue_test.go @@ -81,6 +81,25 @@ func TestADoorThatCarriesNothingReportsTheWholeCatalogue(t *testing.T) { "an option the door reshapes is reported with the value that travelled") } +func TestAnExplicitZeroSeedIsReportedNotSwallowed(t *testing.T) { + t.Parallel() + + opts := llms.CallOptions{} + llms.WithSeed(0)(&opts) + + var warn llms.Warnings + warn.AddUnreadOptions("m", opts, "no field") + + reported := make(map[string]llms.Warning) + for _, w := range warn.List() { + reported[w.Option] = w + } + w, ok := reported["WithSeed"] + require.True(t, ok, "an explicit seed of 0 is a real seed, not the absence of one") + require.Equal(t, llms.WarningDrop, w.Kind) + require.Equal(t, "0", w.Asked) +} + func TestACallThatSetsNoCatalogueOptionReportsNothing(t *testing.T) { t.Parallel() diff --git a/llms/warning.go b/llms/warning.go index dee58d2a6..7bab9bd13 100644 --- a/llms/warning.go +++ b/llms/warning.go @@ -104,7 +104,12 @@ var unreadCatalogue = []struct { {"WithTopLogProbs", func(o CallOptions) string { return askedInt(o.TopLogProbs, 0) }}, {"WithMinLength", func(o CallOptions) string { return askedInt(o.MinLength, 0) }}, {"WithMaxLength", func(o CallOptions) string { return askedInt(o.MaxLength, 0) }}, - {"WithSeed", func(o CallOptions) string { return askedInt(o.Seed, 0) }}, + {"WithSeed", func(o CallOptions) string { + if o.Seed == nil { + return "" + } + return strconv.Itoa(*o.Seed) + }}, {"WithVerbosity", func(o CallOptions) string { return askedString(o.Verbosity) }}, {"WithResponseMIMEType", func(o CallOptions) string { return askedString(o.ResponseMIMEType) }}, {"WithLogProbs", func(o CallOptions) string { From fc1fed16c3e5775096e92181da75b4811623d391 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 08:32:51 +0300 Subject: [PATCH 553/618] fix(openai): keep top_k off DeepSeek's own door DeepSeek's Chat Completions reference lists a closed set of request parameters and top_k is not among them, yet the door forwarded a caller's WithTopK to deepseek-v4-pro/flash on DeepSeek's own API. Drop it there, with the same "the vendor's API has no top_k field" warning MiniMax uses. Scope it to ServedByDeepSeek so a deepseek served through DashScope, whose own surface documents top_k, keeps carrying it - matching how the door already keeps top_p on DashScope but not on DeepSeek's own API. Verified on a fake transport keyed by host: top_k left DeepSeek's own door before and is dropped with a warning after, while dashscope/deepseek still carries it; removing the ServedByDeepSeek clause turns the test red. PAGI-247 Co-Authored-By: Claude Opus 4.8 --- llms/openai/deepseek_sampling_test.go | 28 +++++++++++++++++++++++++++ llms/openai/openaillm.go | 6 +++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index c3287c6a5..1e202b409 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -270,6 +270,34 @@ func TestDeepSeekNeverGetsThePenaltiesItNoLongerSupports(t *testing.T) { } } +func TestDeepSeekOwnAPIDropsTheTopKItDoesNotDocument(t *testing.T) { + t.Parallel() + + for name, tc := range map[string]struct { + baseURL, model string + dropped bool + }{ + "deepseek-v4-pro on its own API": {deepSeekBaseURL, "deepseek-v4-pro", true}, + "deepseek/deepseek-v4-pro on a gateway": {gatewayBaseURL, "deepseek/deepseek-v4-pro", true}, + "deepseek-flash on its own API": {deepSeekBaseURL, "deepseek-flash", true}, + "dashscope/deepseek-v4-pro keeps it": {gatewayBaseURL, "dashscope/deepseek-v4-pro", false}, + "deepseek-v4-pro on DashScope keeps it": {dashScopeBaseURL, "deepseek-v4-pro", false}, + } { + body, resp := sendToHost(t, tc.baseURL, tc.model, llms.WithTopK(40)) + _, present := body["top_k"] + if tc.dropped { + if present { + t.Errorf("%s: DeepSeek's API documents no top_k, got body: %v", name, body) + } + if w := warningFor(t, resp, "WithTopK"); w.Kind != llms.WarningDrop || w.Asked != "40" { + t.Errorf("%s: top_k warning = %+v", name, w) + } + } else if body["top_k"] != float64(40) { + t.Errorf("%s: a deepseek served elsewhere keeps top_k, got body: %v", name, body) + } + } +} + func thinkingInExtraBody(kind string) llms.CallOption { return llms.WithExtraBody(map[string]any{"thinking": map[string]any{"type": kind}}) } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 7b5a26b16..01c541cca 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -299,7 +299,7 @@ func (o *LLM) createChatRequest( } model := o.effectiveModel(opts) - dropFieldsTheModelTakesNot(req, model, warn) + dropFieldsTheModelTakesNot(req, model, o.host, warn) if model := o.effectiveModel(opts); reasoning.QwenThinkingRequiresStream(model) { if opts.StreamingFunc == nil { @@ -350,7 +350,7 @@ func (o *LLM) createChatRequest( return req, nil } -func dropFieldsTheModelTakesNot(req *openaiclient.ChatRequest, model string, warn *llms.Warnings) { +func dropFieldsTheModelTakesNot(req *openaiclient.ChatRequest, model, host string, warn *llms.Warnings) { if reasoning.RejectsPenalties(model) { const refused = "the door does not send the penalties on this model family" addNonZeroChange(warn, "WithFrequencyPenalty", model, refused, req.FrequencyPenalty, nil) @@ -362,7 +362,7 @@ func dropFieldsTheModelTakesNot(req *openaiclient.ChatRequest, model string, war addNonZeroIntChange(warn, "WithTopK", model, refusedByEndpoint, req.TopK, nil) req.TopK = nil } - if reasoning.TakesNoTopK(model) && req.TopK != nil { + if (reasoning.TakesNoTopK(model) || reasoning.ServedByDeepSeek(model, host)) && req.TopK != nil { addNonZeroIntChange(warn, "WithTopK", model, "the vendor's API has no top_k field", req.TopK, nil) req.TopK = nil } From 327b9fdff2075784a89d90feb936a276b7c44199 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 15 Sep 2026 08:35:18 +0300 Subject: [PATCH 554/618] test(openai): mark the DashScope budget table as a long table test Expanding the guest-budget rows pushed TestDashScopeThinkingBudgetOnTheWire past the funlen limit; annotate it like the other table-driven tests in the tree. PAGI-247 Co-Authored-By: Claude Opus 4.8 --- llms/openai/effort_with_tools_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 548f1a6d1..79c281e74 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -90,7 +90,7 @@ func TestEffortAndToolsOnTheWire(t *testing.T) { } } -func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { +func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { //nolint:funlen // table-driven test t.Parallel() for _, tc := range []struct { From 0a9aec08006aab4643e4260caa950f8ece96cb76 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 05:46:44 +0300 Subject: [PATCH 555/618] fix(openai): leave the fields extra body does not name as the door built them Any WithExtraBody call decoded the whole request into map[string]any and encoded it again, so every field it did not mention changed on the wire: a seed above 2^53 lost its last digit (9007199254740993 went out as ...992), and a structured-output schema had its properties sorted, which reorders the answer since OpenAI produces Structured Outputs "in the same order as the ordering of keys in the schema". Merge at the level of raw top-level JSON values instead, so untouched fields keep the exact bytes the request builder produced. The marshal test that re-implemented the old merge now calls the real one. Verified through the public door: seed, response_format and messages with extra body are byte-identical to the same call without it; restoring the map[string]any decode turns the test red. PAGI-338 Co-Authored-By: Claude Opus 5 --- llms/openai/extra_body_merge_test.go | 76 +++++++++++++++++++ llms/openai/internal/openaiclient/chat.go | 35 +++++---- .../internal/openaiclient/marshal_test.go | 26 +------ 3 files changed, 101 insertions(+), 36 deletions(-) create mode 100644 llms/openai/extra_body_merge_test.go diff --git a/llms/openai/extra_body_merge_test.go b/llms/openai/extra_body_merge_test.go new file mode 100644 index 000000000..39a528b77 --- /dev/null +++ b/llms/openai/extra_body_merge_test.go @@ -0,0 +1,76 @@ +package openai + +import ( + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func extraBodyWire(t *testing.T, model string, client []Option, answer string, opts ...llms.CallOption) map[string]json.RawMessage { + t.Helper() + + content, err := json.Marshal(answer) + if err != nil { + t.Fatalf("answer: %v", err) + } + var body []byte + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ = io.ReadAll(r.Body) + if strings.Contains(string(body), `"stream":true`) { + w.Header().Set("Content-Type", "text/event-stream") + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,"model":"m",`+ + `"choices":[{"index":0,"delta":{"role":"assistant","content":`+string(content)+`},"finish_reason":"stop"}]}`+ + "\n\ndata: [DONE]\n\n") + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":`+string(content)+`},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + llm, err := New(append([]Option{WithBaseURL(srv.URL), WithToken("test"), WithModel(model)}, client...)...) + if err != nil { + t.Fatalf("New() error: %v", err) + } + if _, err := llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, opts...); err != nil { + t.Fatalf("GenerateContent() error: %v", err) + } + var fields map[string]json.RawMessage + if err := json.Unmarshal(body, &fields); err != nil { + t.Fatalf("the wire is not a JSON object: %v, body: %s", err, body) + } + return fields +} + +func TestExtraBodyLeavesTheFieldsItDoesNotNameAsTheDoorBuiltThem(t *testing.T) { + t.Parallel() + + seed := llms.WithSeed(9007199254740993) + schema := llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "verdict", + Schema: json.RawMessage(`{"type":"object","properties":{"reasoning":{"type":"string"},` + + `"answer":{"type":"string"}},"required":["reasoning","answer"],"additionalProperties":false}`), + }) + const answer = `{"reasoning":"r","answer":"a"}` + without := extraBodyWire(t, "gpt-4o", nil, answer, seed, schema) + with := extraBodyWire(t, "gpt-4o", nil, answer, + seed, schema, llms.WithExtraBody(map[string]any{"preserve_thinking": true})) + + for _, field := range []string{"seed", "response_format", "messages"} { + if string(with[field]) != string(without[field]) { + t.Errorf("%s changed under extra body:\nwant %s\ngot %s", field, without[field], with[field]) + } + } + if string(with["preserve_thinking"]) != "true" { + t.Errorf("the extra body field did not reach the wire: %s", with["preserve_thinking"]) + } +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index bb61fa3bd..1abfe31f6 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -737,19 +737,8 @@ func (c *Client) createChat(ctx context.Context, payload *ChatRequest) (*ChatCom return nil, err } - // If ExtraBody is provided, merge it with the standard payload - if len(payload.ExtraBody) > 0 { - var baseMap map[string]any - if err := json.Unmarshal(payloadBytes, &baseMap); err != nil { - return nil, err - } - - // Merge ExtraBody with priority (ExtraBody overwrites existing fields) - maps.Copy(baseMap, payload.ExtraBody) - - if payloadBytes, err = json.Marshal(baseMap); err != nil { - return nil, err - } + if payloadBytes, err = mergeExtraBody(payloadBytes, payload.ExtraBody); err != nil { + return nil, err } // Build request @@ -778,6 +767,26 @@ func (c *Client) createChat(ctx context.Context, payload *ChatRequest) (*ChatCom return parseChatResponse(r.Body) } +func mergeExtraBody(payload []byte, extraBody map[string]any) ([]byte, error) { + if len(extraBody) == 0 { + return payload, nil + } + var fields map[string]json.RawMessage + if err := json.Unmarshal(payload, &fields); err != nil { + return nil, err + } + extra, err := json.Marshal(extraBody) + if err != nil { + return nil, err + } + var extraFields map[string]json.RawMessage + if err := json.Unmarshal(extra, &extraFields); err != nil { + return nil, err + } + maps.Copy(fields, extraFields) + return json.Marshal(fields) +} + func parseChatResponse(body io.Reader) (*ChatCompletionResponse, error) { var response ChatCompletionResponse if err := json.NewDecoder(body).Decode(&response); err != nil { diff --git a/llms/openai/internal/openaiclient/marshal_test.go b/llms/openai/internal/openaiclient/marshal_test.go index d0ba3bb5e..f9516e149 100644 --- a/llms/openai/internal/openaiclient/marshal_test.go +++ b/llms/openai/internal/openaiclient/marshal_test.go @@ -2,7 +2,6 @@ package openaiclient import ( "encoding/json" - "maps" "testing" "github.com/stretchr/testify/assert" @@ -263,33 +262,14 @@ func TestChatRequest_ExtraBodyMarshal(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - // This test simulates the merging logic that will be in createChat - tt.request.ExtraBody = tt.extraBody - - // Step 1: Marshal without ExtraBody (standard fields) - tempExtraBody := tt.request.ExtraBody - tt.request.ExtraBody = nil - data, err := json.Marshal(tt.request) require.NoError(t, err) - - var result map[string]any - err = json.Unmarshal(data, &result) + data, err = mergeExtraBody(data, tt.extraBody) require.NoError(t, err) - // Step 2: Merge ExtraBody if present - if len(tempExtraBody) > 0 { - maps.Copy(result, tempExtraBody) - - // Re-marshal and unmarshal to ensure proper type conversion - // (This simulates what actually happens in the real code) - data, err = json.Marshal(result) - require.NoError(t, err) - err = json.Unmarshal(data, &result) - require.NoError(t, err) - } + var result map[string]any + require.NoError(t, json.Unmarshal(data, &result)) - // Verify the result if tt.checkFunc != nil { tt.checkFunc(t, result) } From 61477f9c9ef1eab3607feffff951835b64c7243f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 05:50:32 +0300 Subject: [PATCH 556/618] fix(openai): merge extra body objects into the objects the door builds An extra body object replaced the whole object the door had built under the same key. Reasoning Mode Off on a GLM agent whose extra body carries thinking: {clear_thinking: false} went out as "thinking":{"clear_thinking":false}: the door's type=disabled was lost and thinking stayed on. Kimi agents with thinking: {keep: "all"} lost it the same way, and so did a Claude budget object under thinking.display, the reasoning effort under reasoning.exclude, and stream_options.include_usage under include_obfuscation. Z.AI documents thinking.clear_thinking and Moonshot documents thinking.keep inside the thinking object next to thinking.type, so the door's toggle and the caller's key belong to one object. Merge JSON objects present on both sides key by key at every depth; a scalar, an array or null from extra body still replaces the door's value, so a caller's explicit leaf such as thinking.type=enabled still wins. The WithExtraBody docs state this contract instead of whole-field override. Verified through the public door on httptest: GLM (zai/ and bare, 4.5-air and 5.2) and Kimi (moonshot/ and bare, including a typed map) Off keep type=disabled beside their extra keys; the Claude budget, reasoning object, stream_options and a depth-two response_format leaf keep the door's siblings; scalars, the DashScope enable_thinking flag, arrays, null and a string over an object replace; the door still reports no WithExtraBody loss. Dropping the recursion turns the ten object cases red; treating null as an object turns the null case red. PAGI-338 Co-Authored-By: Claude Opus 5 --- llms/openai/extra_body_merge_test.go | 187 ++++++++++++++++++++++ llms/openai/internal/openaiclient/chat.go | 35 ++-- llms/openai/options.go | 7 +- llms/options.go | 3 + 4 files changed, 218 insertions(+), 14 deletions(-) diff --git a/llms/openai/extra_body_merge_test.go b/llms/openai/extra_body_merge_test.go index 39a528b77..8ee78e3fa 100644 --- a/llms/openai/extra_body_merge_test.go +++ b/llms/openai/extra_body_merge_test.go @@ -6,10 +6,12 @@ import ( "io" "net/http" "net/http/httptest" + "reflect" "strings" "testing" "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" ) func extraBodyWire(t *testing.T, model string, client []Option, answer string, opts ...llms.CallOption) map[string]json.RawMessage { @@ -74,3 +76,188 @@ func TestExtraBodyLeavesTheFieldsItDoesNotNameAsTheDoorBuiltThem(t *testing.T) { t.Errorf("the extra body field did not reach the wire: %s", with["preserve_thinking"]) } } + +func assertWireJSON(t *testing.T, fields map[string]json.RawMessage, want map[string]string) { + t.Helper() + + for field, wantJSON := range want { + var got, expected any + if err := json.Unmarshal(fields[field], &got); err != nil { + t.Errorf("%s is missing from the wire or is not JSON: %q", field, fields[field]) + continue + } + if err := json.Unmarshal([]byte(wantJSON), &expected); err != nil { + t.Fatalf("want for %s is not JSON: %v", field, err) + } + if !reflect.DeepEqual(got, expected) { + t.Errorf("%s on the wire:\nwant %s\ngot %s", field, wantJSON, fields[field]) + } + } +} + +func TestExtraBodyObjectsMergeIntoTheObjectsTheDoorBuilds(t *testing.T) { //nolint:funlen // table-driven test + t.Parallel() + + off := llms.WithReasoningDisabled() + extra := llms.WithExtraBody + clearThinking := extra(map[string]any{"thinking": map[string]any{"clear_thinking": false}}) + schema := llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "verdict", + Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},` + + `"required":["a"],"additionalProperties":false}`), + }) + stream := llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil }) + + for name, tc := range map[string]struct { + model string + client []Option + answer string + opts []llms.CallOption + want map[string]string + }{ + "glm off on its own gateway keeps clear_thinking": { + model: "zai/glm-4.5-air", opts: []llms.CallOption{off, clearThinking}, + want: map[string]string{"thinking": `{"type":"disabled","clear_thinking":false}`}, + }, + "bare glm off keeps clear_thinking": { + model: "glm-4.5-air", opts: []llms.CallOption{off, clearThinking}, + want: map[string]string{"thinking": `{"type":"disabled","clear_thinking":false}`}, + }, + "glm-5.2 off on its own gateway keeps clear_thinking": { + model: "zai/glm-5.2", opts: []llms.CallOption{off, clearThinking}, + want: map[string]string{"thinking": `{"type":"disabled","clear_thinking":false}`}, + }, + "bare glm-5.2 off keeps clear_thinking": { + model: "glm-5.2", opts: []llms.CallOption{off, clearThinking}, + want: map[string]string{"thinking": `{"type":"disabled","clear_thinking":false}`}, + }, + "kimi off on its own gateway keeps keep": { + model: "moonshot/kimi-k2.6", + opts: []llms.CallOption{off, extra(map[string]any{"thinking": map[string]any{"keep": "all"}})}, + want: map[string]string{"thinking": `{"type":"disabled","keep":"all"}`}, + }, + "bare kimi off keeps keep given as a typed map": { + model: "kimi-k2.6", + opts: []llms.CallOption{off, extra(map[string]any{"thinking": map[string]string{"keep": "all"}})}, + want: map[string]string{"thinking": `{"type":"disabled","keep":"all"}`}, + }, + "glm effort keeps its own field and gains clear_thinking": { + model: "zai/glm-5.2", opts: []llms.CallOption{llms.WithReasoning(llms.ReasoningHigh, 0), clearThinking}, + want: map[string]string{"reasoning_effort": `"high"`, "thinking": `{"clear_thinking":false}`}, + }, + "claude budget keeps type and budget and gains display": { + model: "anthropic/claude-sonnet-4-5", + opts: []llms.CallOption{ + llms.WithReasoning(llms.ReasoningNone, 2048), llms.WithMaxTokens(8192), + extra(map[string]any{"thinking": map[string]any{"display": "summarized"}}), + }, + want: map[string]string{"thinking": `{"type":"enabled","budget_tokens":2048,"display":"summarized"}`}, + }, + "reasoning object keeps the effort and gains exclude": { + model: "gpt-5", client: []Option{WithModernReasoningFormat()}, + opts: []llms.CallOption{ + llms.WithReasoning(llms.ReasoningHigh, 0), + extra(map[string]any{"reasoning": map[string]any{"exclude": true}}), + }, + want: map[string]string{"reasoning": `{"effort":"high","exclude":true}`}, + }, + "stream options keep include_usage": { + model: "gpt-4o", + opts: []llms.CallOption{ + stream, extra(map[string]any{"stream_options": map[string]any{"include_obfuscation": false}}), + }, + want: map[string]string{"stream_options": `{"include_usage":true,"include_obfuscation":false}`}, + }, + "a nested leaf is replaced and its siblings stay": { + model: "gpt-4o", answer: `{"a":"b"}`, + opts: []llms.CallOption{ + schema, + extra(map[string]any{"response_format": map[string]any{"json_schema": map[string]any{"strict": false}}}), + }, + want: map[string]string{"response_format": `{"type":"json_schema","json_schema":{"name":"verdict",` + + `"strict":false,"schema":{"type":"object","properties":{"a":{"type":"string"}},` + + `"required":["a"],"additionalProperties":false}}}`}, + }, + "the caller's thinking type still wins over the door's": { + model: "zai/glm-4.5-air", + opts: []llms.CallOption{ + off, extra(map[string]any{"thinking": map[string]any{"type": "enabled", "clear_thinking": false}}), + }, + want: map[string]string{"thinking": `{"type":"enabled","clear_thinking":false}`}, + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + answer := tc.answer + if answer == "" { + answer = "ok" + } + assertWireJSON(t, extraBodyWire(t, tc.model, tc.client, answer, tc.opts...), tc.want) + }) + } +} + +func TestExtraBodyValuesOtherThanObjectsReplaceTheDoors(t *testing.T) { + t.Parallel() + + off := llms.WithReasoningDisabled() + extra := llms.WithExtraBody + + for name, tc := range map[string]struct { + model string + opts []llms.CallOption + want map[string]string + }{ + "a scalar": { + model: "gpt-4o", + opts: []llms.CallOption{llms.WithTemperature(0.7), extra(map[string]any{"temperature": 0.9})}, + want: map[string]string{"temperature": `0.9`}, + }, + "the DashScope flag": { + model: "dashscope/glm-5.1", + opts: []llms.CallOption{off, extra(map[string]any{"enable_thinking": true})}, + want: map[string]string{"enable_thinking": `true`}, + }, + "an array": { + model: "gpt-4o", + opts: []llms.CallOption{llms.WithStopWords([]string{"a", "b"}), extra(map[string]any{"stop": []string{"c"}})}, + want: map[string]string{"stop": `["c"]`}, + }, + "null over an object": { + model: "zai/glm-4.5-air", + opts: []llms.CallOption{off, extra(map[string]any{"thinking": nil})}, + want: map[string]string{"thinking": `null`}, + }, + "a string over an object": { + model: "zai/glm-4.5-air", + opts: []llms.CallOption{off, extra(map[string]any{"thinking": "disabled"})}, + want: map[string]string{"thinking": `"disabled"`}, + }, + "new top-level keys beside the door's": { + model: "zai/glm-4.5-air", + opts: []llms.CallOption{off, extra(map[string]any{"preserve_thinking": true, "tool_choice": "auto"})}, + want: map[string]string{ + "thinking": `{"type":"disabled"}`, "preserve_thinking": `true`, "tool_choice": `"auto"`, + }, + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + assertWireJSON(t, extraBodyWire(t, tc.model, nil, "ok", tc.opts...), tc.want) + }) + } +} + +func TestAMergedThinkingObjectReportsNoExtraBodyLoss(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "zai/glm-4.5-air", llms.WithReasoningDisabled(), + llms.WithExtraBody(map[string]any{"thinking": map[string]any{"clear_thinking": false}})) + for _, warning := range resp.Warnings { + if warning.Option == "WithExtraBody" { + t.Errorf("this door merges extra body, nothing is lost, got %v", warning) + } + } +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 1abfe31f6..f4a522571 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "io" - "maps" "net/http" "strings" @@ -119,7 +118,6 @@ type ChatRequest struct { WebSearchOptions *WebSearchOptions `json:"web_search_options,omitempty"` // ExtraBody allows passing additional fields that will be merged into the request body. - // These fields take precedence over the standard fields. ExtraBody map[string]any `json:"-"` } @@ -771,20 +769,35 @@ func mergeExtraBody(payload []byte, extraBody map[string]any) ([]byte, error) { if len(extraBody) == 0 { return payload, nil } - var fields map[string]json.RawMessage - if err := json.Unmarshal(payload, &fields); err != nil { - return nil, err - } extra, err := json.Marshal(extraBody) if err != nil { return nil, err } - var extraFields map[string]json.RawMessage - if err := json.Unmarshal(extra, &extraFields); err != nil { - return nil, err + return mergeJSON(payload, extra) +} + +func mergeJSON(base, extra json.RawMessage) (json.RawMessage, error) { + baseFields, baseIsObject := jsonObject(base) + extraFields, extraIsObject := jsonObject(extra) + if !baseIsObject || !extraIsObject { + return extra, nil + } + for key, value := range extraFields { + merged, err := mergeJSON(baseFields[key], value) + if err != nil { + return nil, err + } + baseFields[key] = merged + } + return json.Marshal(baseFields) +} + +func jsonObject(value json.RawMessage) (map[string]json.RawMessage, bool) { + var fields map[string]json.RawMessage + if err := json.Unmarshal(value, &fields); err != nil || fields == nil { + return nil, false } - maps.Copy(fields, extraFields) - return json.Marshal(fields) + return fields, true } func parseChatResponse(body io.Reader) (*ChatCompletionResponse, error) { diff --git a/llms/openai/options.go b/llms/openai/options.go index b86641b4e..205fbd1d9 100644 --- a/llms/openai/options.go +++ b/llms/openai/options.go @@ -46,9 +46,10 @@ func isLegacyMaxTokensField(opts *llms.CallOptions) bool { } // WithExtraBody allows passing additional fields in the request body that will be sent -// to the OpenAI-compatible API. These fields will override any existing fields with the -// same name, allowing you to use provider-specific parameters not directly supported -// by the library. +// to the OpenAI-compatible API, allowing you to use provider-specific parameters not +// directly supported by the library. A JSON object merges key by key, at every depth, +// into the object the library built under the same name; any other value (a scalar, +// an array, null) replaces the library's, so a leaf set here always wins. // // Example usage: // diff --git a/llms/options.go b/llms/options.go index 1f8f5b675..f5485c706 100644 --- a/llms/options.go +++ b/llms/options.go @@ -328,6 +328,9 @@ type CallOptions struct { FunctionCallBehavior FunctionCallBehavior `json:"function_call,omitempty"` // ExtraBody holds provider-specific request-body fields set by WithExtraBody. + // A door that merges them merges a JSON object into the object it built under + // the same key, key by key at every depth; any other value (a scalar, an array, + // null) replaces the door's, so a leaf from ExtraBody always wins. ExtraBody map[string]any `json:"extra_body,omitempty"` // Metadata is a map of metadata to include in the request. From 78d5239d67b2c5b94f4eef19bc1464b2b41f2ed3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 06:07:57 +0300 Subject: [PATCH 557/618] test(openai): pin the GPT-5 sampling that survives none and dies at minimal OpenAI's GPT-5.4 guide: temperature, top_p and logprobs are "only supported" at reasoning effort none, and requests that include them "will raise an error for GPT-5.4 or GPT-5.2 with any other reasoning effort setting, or for older GPT-5 models such as gpt-5, gpt-5-mini, or gpt-5-nano". The door already follows both halves, but two of them were not under any test: logprobs were checked only on the way off the wire, and the first GPT-5 generation was checked only without an effort, so reading minimal as none would have passed. A gpt-5.4 call at none now has to keep logprobs and top_logprobs, and a gpt-5-mini call at minimal has to send "minimal" without temperature and top_p. Mutations: dropping logprobs for every GPT-5 name whatever the effort reddens the first row; treating a minimal effort as off reddens the second. Neither mutation reddened anything before these rows. Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 13 +++++++++++++ llms/openai/sampling_matrix_test.go | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 1e202b409..64d9deb38 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -388,4 +388,17 @@ func TestLogProbsReachTheWireAndYieldToThinking(t *testing.T) { t.Errorf("gpt-5.4 takes top_logprobs only at the none effort, got body: %v", body) } }) + + t.Run("the same generation at the none effort keeps them", func(t *testing.T) { + t.Parallel() + + body := captureDeepSeekRequest(t, "gpt-5.4", + llms.WithLogProbs(true), llms.WithTopLogProbs(3), llms.WithReasoningDisabled()) + if body["reasoning_effort"] != "none" { + t.Fatalf("the disable must reach the wire as none, got body: %v", body) + } + if body["logprobs"] != true || body["top_logprobs"] != float64(3) { + t.Errorf("gpt-5.4 takes logprobs at the none effort, got body: %v", body) + } + }) } diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index d3425bfac..b637ee369 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -149,6 +149,12 @@ func TestSamplingMatrix(t *testing.T) { llms.WithFrequencyPenalty(0.5), llms.WithPresencePenalty(0.4), off, }, present: []string{`"frequency_penalty":0.5`, `"presence_penalty":0.4`, `"reasoning_effort":"none"`}, + }, { + name: "the bottom of the first GPT-5 scale still thinks and loses its sampling", + model: "gpt-5-mini", + opts: []llms.CallOption{temp, topP, llms.WithReasoning(llms.ReasoningMinimal, 0)}, + present: []string{`"reasoning_effort":"minimal"`}, + absent: []string{`"temperature"`, `"top_p"`}, }, { name: "a non-reasoning model keeps everything", model: "gpt-4.1", From cd4166908eeb5810d0ad9f828c6f5848c5629330 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 06:07:57 +0300 Subject: [PATCH 558/618] test(googleai): pin that a thinking Gemini 3 call keeps the caller's sampling Google's Gemini 3 guide recommends keeping temperature at its default of 1.0 and warns that lowering it "may lead to unexpected behavior"; it does not reject it. The door therefore sends the caller's temperature and top_p whether or not thinking is asked for, unlike the OpenAI and Anthropic doors, but the only Gemini 3 row set sampling through a client default with no reasoning. The sampling table now has a gemini-3-flash call with an effort, a temperature and a top_p, and both values must reach generationConfig. Mutation: dropping temperature and top_p whenever a reasoning config is present reddens the new row. Co-Authored-By: Claude Opus 5 --- llms/googleai/googleai_unit_test.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 1e8d97a4c..086c8113e 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -1043,6 +1043,12 @@ func TestOnlyConfiguredSamplingReachesTheWire(t *testing.T) { call: []llms.CallOption{llms.WithTemperature(0.7), llms.WithTopK(5), llms.WithTopP(0.5)}, want: map[string]float64{"temperature": 0.7, "topK": 5, "topP": 0.5}, }, + { + name: "a thinking gemini-3 call keeps the caller's sampling", + model: "gemini-3-flash", + call: []llms.CallOption{llms.WithTemperature(0.4), llms.WithTopP(0.8), llms.WithReasoning(llms.ReasoningHigh, 0)}, + want: map[string]float64{"temperature": 0.4, "topP": 0.8}, + }, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() From cb9e16f4185937b306b7681f8d5f099ab33e78d6 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 06:08:17 +0300 Subject: [PATCH 559/618] test(bedrock): pin the top_p floor on a Claude model that takes both params Anthropic's thinking page: on models before Opus 4.7 "temperature and top_k are incompatible with thinking, and top_p is allowed at values between 0.95 and 1". On Converse the budget path drops a top_p below that floor, but every row that checked it used Sonnet 4.5, whose mutually-exclusive sampling rule drops top_p a few lines later anyway, so the drop in the budget path itself was unguarded. On Sonnet 4, Opus 4.0/4.1 and Claude 3.7 nothing else removes it and the pinned temperature of 1.0 would travel beside a top_p the vendor refuses. The table now has a below-floor row on anthropic.claude-sonnet-4-20250514. Mutation: deleting the else branch that clears top_p in the Converse budget path reddens only the new row; it reddened nothing before. Co-Authored-By: Claude Opus 5 --- llms/bedrock/internal/bedrockclient/thinking_top_p_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go b/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go index b45b5331f..47e9648cd 100644 --- a/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go +++ b/llms/bedrock/internal/bedrockclient/thinking_top_p_test.go @@ -47,6 +47,10 @@ func TestConverseThinkingKeepsTopPAboveTheFloor(t *testing.T) { {"above the floor reaches the wire", "anthropic.claude-sonnet-4-5-v1:0", 0.97, nil, ptr(float32(0.97))}, {"caller set both — top_p is dropped", "anthropic.claude-sonnet-4-5-v1:0", 0.97, ptr(0.3), nil}, {"below the floor is stripped", "anthropic.claude-sonnet-4-5-v1:0", 0.5, nil, nil}, + { + "below the floor is stripped where both params may travel together", + "anthropic.claude-sonnet-4-20250514-v1:0", 0.5, nil, nil, + }, {"model without sampling does not get it", "anthropic.claude-sonnet-5-v1:0", 0.97, nil, nil}, } { t.Run(tc.name, func(t *testing.T) { From 68f51d2b32dcd5c587be180831cc88c8a1f07692 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 06:08:18 +0300 Subject: [PATCH 560/618] test(reasoning): pin where DeepSeek stops waiting to be asked ThinkingOptIn names deepseek-v3.1 and deepseek-v3.2 by prefix, and every other version threshold in the package reddens a test when it is moved one version up or down. This one did not: renaming the deepseek-v3.2 entry to deepseek-v3.3 left the whole suite green, because the v3.2 rows only checked the sampling the openai door keeps, which does not depend on the opt-in flag. The new table covers both sides of the family: deepseek-v3 (below, not a reasoning model), v3.1 and v3.2 in every spelling the door sees (opt-in), and deepseek-v4-flash and deepseek-v4-pro (above), which DeepSeek's thinking-mode guide documents as "enabled by default". Mutations: deepseek-v3.2 -> deepseek-v3.3 (up), -> deepseek-v3 (down), -> deepseek-v (wide) and deepseek-v3.1 -> deepseek-v3.0 each redden it. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 296b44500..b7d019f57 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -213,6 +213,25 @@ func TestDeepSeekV31ReasonsOnlyWhenAsked(t *testing.T) { } } +func TestDeepSeekWaitsToBeAskedFromV31ThroughV32Only(t *testing.T) { + t.Parallel() + + for model, want := range map[string]bool{ + "deepseek-v3": false, + "deepseek-v3.1": true, + "deepseek-v3.2": true, + "deepseek.v3.2": true, + "us.deepseek.v3.2": true, + "deepseek-v3.2-exp": true, + "deepseek-v4-flash": false, + "deepseek-v4-pro": false, + } { + if got := ThinkingOptIn(model); got != want { + t.Errorf("ThinkingOptIn(%q) = %v, want %v", model, got, want) + } + } +} + func TestGrokModelsThatTakeNoEffortOnTheWire(t *testing.T) { t.Parallel() From 6c2d6cce90d291dc3d8cb161a9f9b3b741697706 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 06:08:41 +0300 Subject: [PATCH 561/618] refactor(llms): drop the vendor-fact comments that tests already pin Comments added on this branch stated vendor behaviour as prose next to code a test already holds to it. Prose about another API is never re-read and rots silently; two of these had already drifted: both Bedrock doors said budget thinking "rejects top_p", while the code keeps a top_p at or above 0.95, which is what Anthropic documents. Each statement is removed only where a mutation of the code it describes reddens a test: Bedrock budget thinking pins temperature 1.0 / clears top_p and top_k (Converse and legacy): TestConverseBudgetPinsTemperatureOnlyForClaude, TestApplyAnthropicReasoning_Budget, both TopPAboveTheFloor tests the Converse JSON schema travels without a second encoding: TestConverse_StructuredOutput_TextFormat Nova answers other levels with "is not a valid enum value": TestNovaEffortCollapsesOntoThreeLevels Grok carries its effort in a reasoning object: TestConverseGrokSendsReasoningEffort budget_tokens may exceed max_tokens only while interleaving: TestABudgetAboveTheAnswerLimitNeedsRealInterleaving the listed Claude models reject an assistant prefill: TestClaudeRejectsAssistantPrefill an omitted effort is not the explicit none gpt-5.6 needs with tools: TestEffortAndToolsOnTheWire where reasoning starts for GPT, Claude and the o-series: TestLikelyReasoningModel, TestClaudePreThinkingStopsBelow37 GPT-5.x DefaultOn is left unknown in the hint: TestReasoningSupportFor Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient_converse.go | 1 - llms/bedrock/internal/bedrockclient/bedrockclient_util.go | 3 +-- llms/bedrock/internal/bedrockclient/provider_anthropic.go | 1 - llms/reasoning/bedrock_capability.go | 6 ++---- llms/reasoning/claude_capability.go | 5 +---- llms/reasoning/detect_hint.go | 6 ------ llms/reasoning/effort_wire.go | 3 +-- llms/reasoning_support.go | 1 - 8 files changed, 5 insertions(+), 21 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go index e7d6c573d..db1b0bb13 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse.go @@ -212,7 +212,6 @@ func (c *ConverseClient) buildConverseInput(input *ConverseInput) (*bedrockrunti effort := reasoning.ClaudeClampEffort(input.ModelID, string(input.ReasoningConfig.GetEffort(maxTokens)), reasoning.ProviderBedrock) additionalModelFields.OutputConfig = &converseOutputConfig{Effort: effort} } - // Budget thinking requires temperature=1.0 and rejects top_p. if isAnthropicModelID(input.ModelID) { keepTopP := input.Temperature == nil && inferenceConfig.TopP != nil && reasoning.ClaudeKeepsTopPWhileThinking(input.ModelID, float64(*inferenceConfig.TopP)) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go index de1cfb3fe..08e49aa69 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go @@ -100,8 +100,7 @@ func isSimpleType(t reflect.Type) bool { // applyConverseStructuredOutput sets the native Converse OutputConfig.TextFormat // from a per-call schema. Only Claude is checked against a local list; other -// families go to the provider as asked. The AWS JsonSchemaDefinition.Schema field -// is a JSON string, so the raw schema is passed as-is with no second encoding. +// families go to the provider as asked. func applyConverseStructuredOutput(input *ConverseInput, converseInput *bedrockruntime.ConverseInput) error { so := input.StructuredOutput if so == nil { diff --git a/llms/bedrock/internal/bedrockclient/provider_anthropic.go b/llms/bedrock/internal/bedrockclient/provider_anthropic.go index 21f109bfb..eb0723ae7 100644 --- a/llms/bedrock/internal/bedrockclient/provider_anthropic.go +++ b/llms/bedrock/internal/bedrockclient/provider_anthropic.go @@ -865,7 +865,6 @@ func applyAnthropicReasoning( if reasoning.ClaudeSupportsEffortWithBudget(modelID, reasoning.ProviderBedrock) { input.OutputConfig = &anthropicOutputConfig{Effort: reasoning.ClaudeClampEffort(modelID, string(cfg.GetEffort(maxTokens)), reasoning.ProviderBedrock)} } - // Budget thinking requires temperature=1.0 and rejects top_p/top_k. keepTopP := callerTemperature == 0 && reasoning.ClaudeKeepsTopPWhileThinking(modelID, input.TopP) switch { diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index ce5be30a1..372d50cfd 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -12,8 +12,7 @@ func IsNovaReasoningModel(model string) bool { return strings.Contains(base, "amazon.nova-2-lite") } -// NovaEffort maps a requested effort onto the three levels Nova accepts. Bedrock -// answers anything else with "is not a valid enum value". +// NovaEffort maps a requested effort onto the three levels Nova accepts. func NovaEffort(effort string) string { switch strings.ToLower(effort) { case "minimal", "low": @@ -57,8 +56,7 @@ func GptOssEfforts() []string { return slices.Clone(gptOssCaps.Efforts) } -// IsGrokModel reports whether the Bedrock model belongs to the xAI Grok family, -// which carries its effort in a reasoning object rather than a thinking one. +// IsGrokModel reports whether the Bedrock model belongs to the xAI Grok family. func IsGrokModel(model string) bool { return strings.Contains(baseModelName(model), "xai.grok") } diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index 7f1d7e76a..e1334c5a6 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -231,8 +231,7 @@ func ClaudeMaxTokensForBudget(budget, maxTokens int) int { var budgetInterleavingClaude = []string{"claude-opus-4-5", "claude-sonnet-4-5", "claude-sonnet-4-6", "claude-opus-4-1"} // ClaudeInterleavesOnBudget reports whether budget thinking on the model -// interleaves with tool calls once the interleaved-thinking beta is on, which is -// the only case where budget_tokens may exceed max_tokens. +// interleaves with tool calls once the interleaved-thinking beta is on. func ClaudeInterleavesOnBudget(model string) bool { if claudeNamedIn(model, budgetInterleavingClaude) { return true @@ -270,8 +269,6 @@ func ClaudeSupportsEffortWithBudget(model string, p Provider) bool { return p != ProviderBedrock || !containsAny(m, bedrockRejectsBudgetEffortClaude) } -// noPrefillClaude models reject a conversation whose last message is an -// assistant turn. var noPrefillClaude = []string{ "claude-opus-4-6", "claude-sonnet-4-6", "claude-mythos-preview", "claude-opus-4-7", "claude-opus-4-8", diff --git a/llms/reasoning/detect_hint.go b/llms/reasoning/detect_hint.go index 311ff4890..790f229e1 100644 --- a/llms/reasoning/detect_hint.go +++ b/llms/reasoning/detect_hint.go @@ -51,14 +51,10 @@ func namesNonTextModality(m string) bool { return false } -// openAIPreReasoning matches the GPT generations below the GPT-5 line, where -// reasoning starts. func openAIPreReasoning(m string) bool { return strings.HasPrefix(m, "gpt-3") || strings.HasPrefix(m, "gpt-4") } -// claudePreThinking matches the Claude generations below 3.7, where extended -// thinking starts. func claudePreThinking(m string) bool { c := canonicalClaude(m) if strings.Contains(c, "claude-3-7") { @@ -77,8 +73,6 @@ func qwenPreReasoning(m string) bool { strings.HasPrefix(m, "qwen-2") } -// isOSeries matches the OpenAI o-series naming (o1, o3, o4-mini, successors); -// every generation of it reasons. func isOSeries(m string) bool { return len(m) > 1 && m[0] == 'o' && m[1] >= '1' && m[1] <= '9' } diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index d394a154d..05c17fb13 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -265,8 +265,7 @@ type EffortToolsRule int const ( EffortToolsFree EffortToolsRule = iota EffortToolsOmit - // EffortToolsDisable puts an explicit "none" on the wire; an omitted field is - // not equivalent. + // EffortToolsDisable puts an explicit "none" on the wire. EffortToolsDisable ) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 32b580d44..e7a096398 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -116,7 +116,6 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { RejectsSampling: reasoning.RejectsSamplingWhileThinking(model), Efforts: toReasoningEfforts(caps.Efforts), Mechanism: ReasoningMechanismAdaptive, - // DefaultOn is per-model on the GPT-5.x line (some default off) — leave unknown. } } From 689197b1bc7db45a2a457c9ab3d6b00bc5b48922 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 06:27:41 +0300 Subject: [PATCH 562/618] fix(openai): let an extra body object of another type replace the door's Merging extra body objects key by key kept fields that belong only to the variant the door had built. A Claude budget with extra body thinking {type: disabled} went out as {"budget_tokens":2048,"type":"disabled"}, and {type: adaptive} as {"budget_tokens":2048,"type":"adaptive"}; Anthropic answers both with 400 "thinking..budget_tokens: Extra inputs are not permitted", while the Story head sent the plain object and got 200. WithStructuredOutput with extra body response_format {type: json_object} kept json_schema, which OpenAI rejects with "Unknown parameter: 'response_format.json_schema'". The Messages reference lists budget_tokens only under type enabled, and the OpenAI schema gives the json_object format only a type. When both objects carry a type and the values differ, the extra body object now replaces the door's whole; otherwise the merge stays key by key, so clear_thinking, keep, display and exclude still land beside the door's fields. The WithExtraBody and CallOptions.ExtraBody docs state it. Verified through the public door on httptest: the two Claude cases, the json_object format and an allowed_tools choice over a named one send only the extra object; the same type keeps budget_tokens; a top-level type keeps the request. Live on llm.pentagi.net /v1 through the library, claude-opus-4-6 disabled and adaptive over a budget return 200 and 400 with the guard removed. Mutations: no replace, ignoring the type values, dropping either typed check each turn the tests red. PAGI-338 Co-Authored-By: Claude Opus 5 --- llms/openai/extra_body_merge_test.go | 79 +++++++++++++++++++++++ llms/openai/internal/openaiclient/chat.go | 8 ++- llms/openai/options.go | 3 +- llms/options.go | 3 +- 4 files changed, 90 insertions(+), 3 deletions(-) diff --git a/llms/openai/extra_body_merge_test.go b/llms/openai/extra_body_merge_test.go index 8ee78e3fa..3340f7774 100644 --- a/llms/openai/extra_body_merge_test.go +++ b/llms/openai/extra_body_merge_test.go @@ -261,3 +261,82 @@ func TestAMergedThinkingObjectReportsNoExtraBodyLoss(t *testing.T) { } } } + +func TestExtraBodyObjectOfAnotherTypeReplacesTheDoors(t *testing.T) { //nolint:funlen // table-driven test + t.Parallel() + + budgetAnd := func(thinking map[string]any) []llms.CallOption { + return []llms.CallOption{ + llms.WithReasoning(llms.ReasoningNone, 2048), llms.WithMaxTokens(8192), + llms.WithExtraBody(map[string]any{"thinking": thinking}), + } + } + schema := llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "verdict", + Schema: json.RawMessage(`{"type":"object","properties":{"a":{"type":"string"}},` + + `"required":["a"],"additionalProperties":false}`), + }) + tools := llms.WithTools([]llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{Name: "lookup", Parameters: json.RawMessage(`{"type":"object"}`)}, + }}) + named := llms.WithToolChoice(llms.ToolChoice{Type: "function", Function: &llms.FunctionReference{Name: "lookup"}}) + allowedTools := map[string]any{ + "type": "allowed_tools", + "allowed_tools": map[string]any{ + "mode": "auto", + "tools": []any{map[string]any{"type": "function", "function": map[string]any{"name": "lookup"}}}, + }, + } + + for name, tc := range map[string]struct { + model string + answer string + opts []llms.CallOption + want map[string]string + }{ + "claude budget under disabled thinking": { + model: "anthropic/claude-sonnet-4-5", + opts: budgetAnd(map[string]any{"type": "disabled"}), + want: map[string]string{"thinking": `{"type":"disabled"}`}, + }, + "claude budget under adaptive thinking": { + model: "anthropic/claude-opus-4-6", + opts: budgetAnd(map[string]any{"type": "adaptive", "display": "summarized"}), + want: map[string]string{"thinking": `{"type":"adaptive","display":"summarized"}`}, + }, + "claude budget under the same type keeps the budget": { + model: "anthropic/claude-sonnet-4-5", + opts: budgetAnd(map[string]any{"type": "enabled", "display": "omitted"}), + want: map[string]string{"thinking": `{"type":"enabled","budget_tokens":2048,"display":"omitted"}`}, + }, + "structured output under a json object format": { + model: "gpt-4o", answer: `{"a":"b"}`, + opts: []llms.CallOption{ + schema, llms.WithExtraBody(map[string]any{"response_format": map[string]any{"type": "json_object"}}), + }, + want: map[string]string{"response_format": `{"type":"json_object"}`}, + }, + "a type the door's object does not carry merges into it": { + model: "gpt-4o", + opts: []llms.CallOption{llms.WithExtraBody(map[string]any{"type": "chat"})}, + want: map[string]string{"model": `"gpt-4o"`, "type": `"chat"`}, + }, + "a named tool choice under allowed tools": { + model: "gpt-4o", + opts: []llms.CallOption{tools, named, llms.WithExtraBody(map[string]any{"tool_choice": allowedTools})}, + want: map[string]string{"tool_choice": `{"type":"allowed_tools","allowed_tools":{"mode":"auto",` + + `"tools":[{"type":"function","function":{"name":"lookup"}}]}}`}, + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + answer := tc.answer + if answer == "" { + answer = "ok" + } + assertWireJSON(t, extraBodyWire(t, tc.model, nil, answer, tc.opts...), tc.want) + }) + } +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index f4a522571..36980c238 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -779,7 +779,7 @@ func mergeExtraBody(payload []byte, extraBody map[string]any) ([]byte, error) { func mergeJSON(base, extra json.RawMessage) (json.RawMessage, error) { baseFields, baseIsObject := jsonObject(base) extraFields, extraIsObject := jsonObject(extra) - if !baseIsObject || !extraIsObject { + if !baseIsObject || !extraIsObject || selectsAnotherVariant(baseFields, extraFields) { return extra, nil } for key, value := range extraFields { @@ -792,6 +792,12 @@ func mergeJSON(base, extra json.RawMessage) (json.RawMessage, error) { return json.Marshal(baseFields) } +func selectsAnotherVariant(base, extra map[string]json.RawMessage) bool { + baseType, baseTyped := base["type"] + extraType, extraTyped := extra["type"] + return baseTyped && extraTyped && !bytes.Equal(baseType, extraType) +} + func jsonObject(value json.RawMessage) (map[string]json.RawMessage, bool) { var fields map[string]json.RawMessage if err := json.Unmarshal(value, &fields); err != nil || fields == nil { diff --git a/llms/openai/options.go b/llms/openai/options.go index 205fbd1d9..5c31dab14 100644 --- a/llms/openai/options.go +++ b/llms/openai/options.go @@ -49,7 +49,8 @@ func isLegacyMaxTokensField(opts *llms.CallOptions) bool { // to the OpenAI-compatible API, allowing you to use provider-specific parameters not // directly supported by the library. A JSON object merges key by key, at every depth, // into the object the library built under the same name; any other value (a scalar, -// an array, null) replaces the library's, so a leaf set here always wins. +// an array, null) replaces the library's, so a leaf set here always wins. An object +// whose "type" differs from the "type" of the library's object replaces it whole. // // Example usage: // diff --git a/llms/options.go b/llms/options.go index f5485c706..c7efcb04c 100644 --- a/llms/options.go +++ b/llms/options.go @@ -330,7 +330,8 @@ type CallOptions struct { // ExtraBody holds provider-specific request-body fields set by WithExtraBody. // A door that merges them merges a JSON object into the object it built under // the same key, key by key at every depth; any other value (a scalar, an array, - // null) replaces the door's, so a leaf from ExtraBody always wins. + // null) replaces the door's, so a leaf from ExtraBody always wins. An object + // whose "type" differs from the "type" of the door's object replaces it whole. ExtraBody map[string]any `json:"extra_body,omitempty"` // Metadata is a map of metadata to include in the request. From 0c57ff2de96b383211e892c2b89a292b34e9526e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 07:04:03 +0300 Subject: [PATCH 563/618] fix(reasoning): stop presenting GLM 4.7, 4.7 Flash and 5 as reasoning models on Bedrock The AWS model cards of zai.glm-4.7, zai.glm-4.7-flash and zai.glm-5 carry no Reasoning row and name no request field that turns reasoning on, and direct Converse and ConverseStream calls without such a field return no reasoningContent and no think tags. ReasoningSupportFor on the Bedrock provider now answers Known with DefaultOn false and no controls, so a consumer offers no reasoning control the door cannot fill; the classification on the models' native doors is unchanged. Nemotron Super 3 stays unclassified on Bedrock: bare direct calls occasionally return reasoning prose closed by inside the text. Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 8 ++++ llms/reasoning_support.go | 4 ++ llms/reasoning_support_test.go | 69 ++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index ce5be30a1..95da0664e 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -41,6 +41,14 @@ func IsBedrockAlwaysReasoningModel(model string) bool { return strings.Contains(baseModelName(model), "deepseek.r1") } +// IsBedrockNonReasoningModel reports whether the model answers without reasoning +// on the Converse door and AWS documents no field that turns it on. +func IsBedrockNonReasoningModel(model string) bool { + return slices.Contains(bedrockNonReasoningModels, baseModelName(model)) +} + +var bedrockNonReasoningModels = []string{"zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5"} + // IsGptOssModel reports whether the Bedrock model is one of OpenAI's gpt-oss models. func IsGptOssModel(model string) bool { base := baseModelName(model) diff --git a/llms/reasoning_support.go b/llms/reasoning_support.go index 32b580d44..63a85fff9 100644 --- a/llms/reasoning_support.go +++ b/llms/reasoning_support.go @@ -108,6 +108,10 @@ func ReasoningSupportFor(model string, p reasoning.Provider) ReasoningSupport { return levelOnlySupport(model, p, reasoning.NovaEfforts(), false) } + if p == reasoning.ProviderBedrock && reasoning.IsBedrockNonReasoningModel(model) { + return ReasoningSupport{Known: true, DefaultOn: boolPtr(false)} + } + if caps := reasoning.OpenAIReasoningCapsFor(model); caps.Known { return ReasoningSupport{ Supported: true, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index d57297b6e..af52f2521 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -714,3 +714,72 @@ func TestTheOllamaHintOffersGPTOSSTheLevelsOllamaDocuments(t *testing.T) { efforts) } } + +func TestTheBedrockHintPresentsNoReasoningWhereTheConverseDoorHasNone(t *testing.T) { + t.Parallel() + + for _, model := range []string{"zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + s := ReasoningSupportFor(model, reasoning.ProviderBedrock) + if s.Supported || !s.Known { + t.Errorf("%s = %+v, want a classified model that does not reason on Bedrock: AWS documents no "+ + "reasoning field for it and the Converse door answers without reasoning content", model, s) + } + if s.CannotDisable || len(s.Efforts) != 0 || s.Mechanism != ReasoningMechanismUnknown { + t.Errorf("%s = %+v, want no control at all", model, s) + } + if s.DefaultOn == nil || *s.DefaultOn { + t.Errorf("%s DefaultOn = %v, want false", model, s.DefaultOn) + } + if !reasoning.IsReasoningModel(model) { + t.Errorf("%s: the door-agnostic classification must stay as it is", model) + } + if other := ReasoningSupportFor(model, reasoning.ProviderOpenAI); !other.Supported { + t.Errorf("%s on the openai door = %+v: the Converse verdict must not reach another door", model, other) + } + }) + } + + for _, model := range []string{"glm-4.7", "glm-4.7-flash", "glm-5"} { + if s := ReasoningSupportFor(model, reasoning.ProviderOpenAI); !s.Supported { + t.Errorf("%s on its own vendor's door = %+v, want a reasoning model", model, s) + } + } + + for _, model := range []string{ + "us.deepseek.r1-v1:0", "moonshot.kimi-k2-thinking", "mistral.magistral-small-2509", + "openai.gpt-oss-120b-1:0", "us.amazon.nova-2-lite-v1:0", + } { + if s := ReasoningSupportFor(model, reasoning.ProviderBedrock); !s.Supported { + t.Errorf("%s = %+v: AWS documents reasoning for it, so the verdict must not reach it", model, s) + } + } + + if s := ReasoningSupportFor("zai.glm-5.1", reasoning.ProviderBedrock); s.Known { + t.Errorf("zai.glm-5.1 = %+v: a generation nobody measured on the door must stay unclassified", s) + } +} + +func TestTheBedrockHintDoesNotPresentOffForNemotronSuper(t *testing.T) { + t.Parallel() + + for _, model := range []string{"nvidia.nemotron-super-3-120b", "us-gov.nvidia.nemotron-super-3-120b"} { + s := ReasoningSupportFor(model, reasoning.ProviderBedrock) + if !s.Supported { + t.Errorf("%s = %+v, want a reasoning model: the Converse door returns its reasoning in the text "+ + "on requests that ask for none", model, s) + } + if len(s.Efforts) != 0 || s.Mechanism != ReasoningMechanismUnknown { + t.Errorf("%s = %+v: AWS documents no reasoning field for it, so the hint must offer no level", model, s) + } + if off := reasoning.ResolveOff(model, reasoning.ProviderBedrock); off != reasoning.OffOmit { + t.Errorf("%s ResolveOff = %v, want OffOmit: AWS documents no field that disables it", model, off) + } + if s.DefaultOn != nil && !*s.DefaultOn { + t.Errorf("%s DefaultOn = false, want unknown: an omitted Off would read as working while the model "+ + "still reasons on some requests", model) + } + } +} From dc9cfa3187997d90e0e712575160f38d70b89b41 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 07:37:32 +0300 Subject: [PATCH 564/618] fix(openai): turn adaptive thinking on for Claude 4.6-4.8 when the depth is delegated WithAdaptiveReasoning with no effort on anthropic/claude-opus-4-8 went out of the openai door with neither thinking nor reasoning_effort and without a warning, so the model answered without thinking. pentagi sends exactly this request for models its catalog marks adaptive-only. The delegated branch only reported the lost depth for models in ThinkingOptIn, and Claude is not there. Anthropic's thinking guide: "On Claude Opus 4.8, Claude Opus 4.7, Claude Opus 4.6, and Claude Sonnet 4.6, thinking is off until you set thinking: {type: "adaptive"}", while on Opus 5, Sonnet 5, Fable 5/5.1, Mythos 5/5.1 and Mythos Preview "thinking is already on and needs no configuration". LiteLLM documents thinking {type: adaptive} for anthropic/ models on /v1/chat/completions and forwards it unchanged. A delegated request on a Claude generation that takes adaptive thinking and does not think by default now carries thinking {type: adaptive}, from the same kind, adaptive and default-on tables the budget and off wires use, on the top-level reasoning_effort format only. The default-on generations, the budget-only ones, other models, an explicit off and the reasoning object format keep their wire. The sampling policy treats the request as thinking, so Opus 4.6 and Sonnet 4.6 send temperature 1 and no top_k, which Anthropic otherwise rejects with "temperature may only be set to 1 when thinking is enabled or in adaptive mode". Before the fix the wire tests for Opus 4.6/4.7/4.8 and Sonnet 4.6 (first- party, OpenRouter and Bedrock spellings), the sampling test and the extra body merge test fail. Dropping the default-on, adaptive-kind, Claude or format guard, the branch, or the thinking marker for the sampling policy each fails a test. Through the library on the gateway /v1 with no effort: claude-opus-4-8 goes from 0 to 53 reasoning tokens, claude-sonnet-4-6 from 0 to 3592, claude-opus-4-6 and the Bedrock us./global. 4.6 names think, sonnet-4-6 with temperature 0.3 goes out at 1 and answers, claude-opus-5 still goes out with no field, and a tool history answers with 200. PAGI-357 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_adaptive_thinking_test.go | 151 +++++++++++++++++++ llms/openai/openaillm.go | 37 +++-- 2 files changed, 179 insertions(+), 9 deletions(-) create mode 100644 llms/openai/claude_adaptive_thinking_test.go diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go new file mode 100644 index 000000000..fe2757093 --- /dev/null +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -0,0 +1,151 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestDelegatedAdaptiveTurnsThinkingOnWhereClaudeWaitsToBeAsked(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "claude-opus-4-8", "anthropic/claude-opus-4-8", "anthropic/claude-opus-4-7", + "anthropic/claude-opus-4-6", "anthropic/claude-sonnet-4-6", + "openrouter/anthropic/claude-opus-4.8", + "us.anthropic.claude-opus-4-8", "bedrock/us.anthropic.claude-opus-4-6-v1", + "bedrock/global.anthropic.claude-sonnet-4-6", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, model, nil, llms.WithAdaptiveReasoning(llms.ReasoningNone)) + + if !strings.Contains(body, `"thinking":{"type":"adaptive"`) { + t.Errorf("thinking stays off on this model until adaptive is set, got body: %s", body) + } + if strings.Contains(body, "reasoning_effort") || strings.Contains(body, "budget_tokens") { + t.Errorf("the caller named no depth, got body: %s", body) + } + }) + } +} + +func TestDelegatedAdaptiveThinkingTakesTheSamplingThinkingRefuses(t *testing.T) { + t.Parallel() + + for _, model := range []string{"anthropic/claude-sonnet-4-6", "anthropic/claude-opus-4-6"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + resp, sent := sendForWarningsWith(t, model, nil, llms.WithAdaptiveReasoning(llms.ReasoningNone), + llms.WithTemperature(0.3), llms.WithTopK(40)) + + if _, ok := sent["thinking"]; !ok { + t.Fatalf("want the adaptive thinking object, got %v", sent) + } + if temperature, ok := sent["temperature"]; ok && temperature != 1.0 { + t.Errorf("thinking takes temperature 1 or none, got %v", temperature) + } + if _, ok := sent["top_k"]; ok { + t.Errorf("thinking takes no top_k, got %v", sent) + } + if w := warningFor(t, resp, "WithTemperature"); w.Asked != "0.3" { + t.Errorf("the lost temperature must be reported, got %+v", w) + } + }) + } +} + +func TestDelegatedAdaptiveReachingTheWireIsNotReportedAsLost(t *testing.T) { + t.Parallel() + + resp := sendForWarnings(t, "anthropic/claude-opus-4-8", + llms.WithAdaptiveReasoning(llms.ReasoningNone), llms.WithTemperature(0.3), llms.WithTopP(0.9)) + + for _, w := range resp.Warnings { + if w.Option != "WithTemperature" && w.Option != "WithTopP" { + t.Errorf("only the sampling the model rejects was lost, got %+v", w) + } + } +} + +func TestDelegatedAdaptiveKeepsItsObjectOffOtherWires(t *testing.T) { + t.Parallel() + + offAndAdaptive := func(o *llms.CallOptions) { + o.Reasoning = &llms.ReasoningConfig{Mode: llms.ReasoningOff, Adaptive: true} + } + for name, tc := range map[string]struct { + model string + client []Option + opts []llms.CallOption + }{ + "a generation that predates adaptive": { + model: "anthropic/claude-haiku-4-5", opts: []llms.CallOption{llms.WithAdaptiveReasoning(llms.ReasoningNone)}, + }, + "a model that is not Claude": { + model: "glm-5.2", opts: []llms.CallOption{llms.WithAdaptiveReasoning(llms.ReasoningNone)}, + }, + "the reasoning object format": { + model: "anthropic/claude-opus-4-8", client: []Option{WithModernReasoningFormat()}, + opts: []llms.CallOption{llms.WithAdaptiveReasoning(llms.ReasoningNone)}, + }, + "an explicit off": { + model: "anthropic/claude-opus-4-8", opts: []llms.CallOption{offAndAdaptive}, + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, tc.model, tc.client, tc.opts...) + if strings.Contains(body, `"adaptive"`) { + t.Errorf("got body: %s", body) + } + }) + } +} + +func TestExtraBodyThinkingMeetsTheDelegatedAdaptiveObject(t *testing.T) { + t.Parallel() + + extra := func(thinking map[string]any) llms.CallOption { + return llms.WithExtraBody(map[string]any{"thinking": thinking}) + } + for name, tc := range map[string]struct { + thinking map[string]any + want string + }{ + "a key of the same object merges": {map[string]any{"display": "omitted"}, `{"type":"adaptive","display":"omitted"}`}, + "another type replaces the object": {map[string]any{"type": "disabled"}, `{"type":"disabled"}`}, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + fields := extraBodyWire(t, "anthropic/claude-opus-4-8", nil, "ok", + llms.WithAdaptiveReasoning(llms.ReasoningNone), extra(tc.thinking)) + assertWireJSON(t, fields, map[string]string{"thinking": tc.want}) + }) + } +} + +func TestDelegatedAdaptiveLeavesTheWireEmptyWhereClaudeThinksAlready(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "anthropic/claude-opus-5", "anthropic/claude-sonnet-5", "anthropic/claude-fable-5", + "anthropic/claude-fable-5-1", "anthropic/claude-mythos-5", "anthropic/claude-mythos-5-1", + "claude-mythos-preview", "bedrock/us.anthropic.claude-opus-5", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body := captureWireWithClient(t, model, nil, llms.WithAdaptiveReasoning(llms.ReasoningNone)) + + if strings.Contains(body, `"thinking"`) || strings.Contains(body, "reasoning_effort") { + t.Errorf("this model thinks with no configuration, got body: %s", body) + } + }) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 01c541cca..eafff8aad 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -410,15 +410,7 @@ func (o *LLM) setReasoning( } switch mode { //nolint:exhaustive // ReasoningOn is handled by the code after the switch case llms.ReasoningDefault: - if toolsRule == reasoning.EffortToolsDisable { - o.writeDisableEffort(req) - reportDelegatedDepth(warn, model, delegated, reasoning.OpenAIDisableEffort) - return reasoning.OpenAIDisableEffort, nil - } - if delegated && reasoning.ThinkingOptIn(model) { - reportDelegatedDepth(warn, model, delegated, "") - } - return "", nil + return o.setDeferredReasoning(req, opts, toolsRule, warn), nil case llms.ReasoningOff: return "", o.setReasoningOff(req, opts) } @@ -448,6 +440,26 @@ func (o *LLM) setReasoning( return wire, nil } +func (o *LLM) setDeferredReasoning( + req *openaiclient.ChatRequest, opts llms.CallOptions, toolsRule reasoning.EffortToolsRule, warn *llms.Warnings, +) string { + model := o.effectiveModel(opts) + delegated := opts.Reasoning.DelegatesDepth() + if toolsRule == reasoning.EffortToolsDisable { + o.writeDisableEffort(req) + reportDelegatedDepth(warn, model, delegated, reasoning.OpenAIDisableEffort) + return reasoning.OpenAIDisableEffort + } + if delegated && o.sendsClaudeAdaptive(model) { + req.Thinking = &openaiclient.ThinkingOptions{Type: "adaptive"} + return string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) + } + if delegated && reasoning.ThinkingOptIn(model) { + reportDelegatedDepth(warn, model, delegated, "") + } + return "" +} + func budgetsFor( model string, opts llms.CallOptions, effort llms.ReasoningEffort, tokens int, ) (budget, effortBudget int) { @@ -493,6 +505,13 @@ func (o *LLM) sendsClaudeBudget(model string, opts llms.CallOptions) bool { !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) } +func (o *LLM) sendsClaudeAdaptive(model string) bool { + return !o.client.ModernReasoningFormat && + reasoning.ClaudeSupportsThinking(model) && + reasoning.ResolveClaudeAdaptive(model, true) && + !reasoning.ClaudeThinkingDefaultsOn(model) +} + func (o *LLM) sendsBudgetInsteadOfEffort(model string, opts llms.CallOptions, tokens int) bool { if !opts.Reasoning.HasExplicitTokens() || tokens <= 0 { return false From 5109954ae3d0d52608f9b2a19bfc854b5540dace Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 07:40:03 +0300 Subject: [PATCH 565/618] fix(openai): ask Claude for summarized thinking when the depth is delegated With the delegated adaptive object in place, claude-opus-4-8 on the gateway /v1 thought (53 reasoning tokens) but returned no thinking text, while the same agent with a named effort got its reasoning back and the anthropic door sends display "summarized" for every adaptive request. Anthropic's thinking guide makes "omitted" the display default on Opus 4.7 and 4.8 ("thinking blocks are returned with an empty thinking field") and says display "works in both modes: set it alongside type: adaptive or type: enabled". A named effort travels as reasoning_effort, which LiteLLM turns into thinking {type: adaptive, display: summarized} plus output_config.effort, so only the delegated request lost the text. The delegated object now carries display "summarized". An extra body display still merges over it. Before the fix the new wire test fails with {"type":"adaptive"}; hiding the field from JSON or dropping the value fails it again. Through the library on the gateway /v1: claude-opus-4-8 returns 133 characters of reasoning instead of 0, claude-sonnet-4-6 keeps its text, extra body display "omitted" still goes out as omitted, and claude-opus-5 still goes out with no field. PAGI-357 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_adaptive_thinking_test.go | 13 +++++++++++++ llms/openai/internal/openaiclient/chat.go | 1 + llms/openai/openaillm.go | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go index fe2757093..2eace5ebd 100644 --- a/llms/openai/claude_adaptive_thinking_test.go +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -32,6 +32,19 @@ func TestDelegatedAdaptiveTurnsThinkingOnWhereClaudeWaitsToBeAsked(t *testing.T) } } +func TestDelegatedAdaptiveAsksForTheThinkingTextTheAnthropicDoorReturns(t *testing.T) { + t.Parallel() + + for _, model := range []string{"anthropic/claude-opus-4-8", "anthropic/claude-opus-4-7", "anthropic/claude-sonnet-4-6"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + fields := extraBodyWire(t, model, nil, "ok", llms.WithAdaptiveReasoning(llms.ReasoningNone)) + assertWireJSON(t, fields, map[string]string{"thinking": `{"type":"adaptive","display":"summarized"}`}) + }) + } +} + func TestDelegatedAdaptiveThinkingTakesTheSamplingThinkingRefuses(t *testing.T) { t.Parallel() diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index 36980c238..a63dca908 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -43,6 +43,7 @@ type ReasoningOptions struct { type ThinkingOptions struct { Type string `json:"type"` BudgetTokens int `json:"budget_tokens,omitempty"` + Display string `json:"display,omitempty"` } // ChatRequest is a request to complete a chat completion.. diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index eafff8aad..cb061d019 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -451,7 +451,7 @@ func (o *LLM) setDeferredReasoning( return reasoning.OpenAIDisableEffort } if delegated && o.sendsClaudeAdaptive(model) { - req.Thinking = &openaiclient.ThinkingOptions{Type: "adaptive"} + req.Thinking = &openaiclient.ThinkingOptions{Type: "adaptive", Display: "summarized"} return string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) } if delegated && reasoning.ThinkingOptIn(model) { From 5d719f34ce28abc733b88f92e01c0b78eb43ab4e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 08:14:11 +0300 Subject: [PATCH 566/618] test(openai): pin that a Claude request without reasoning goes out without thinking setDeferredReasoning also runs for a call that sets no reasoning option, because a nil reasoning config resolves to the default mode. Only the delegated guard keeps the adaptive thinking object off that call, and no test covered it: with the guard removed, go test ./llms/openai/... stayed green while anthropic/claude-sonnet-4-6 with WithTemperature(0.3) went out as thinking {type: adaptive, display: summarized} next to temperature 0.3. The new rows send only a temperature to anthropic/claude-opus-4-8, anthropic/claude-sonnet-4-6 and bedrock/us.anthropic.claude-opus-4-6-v1 and require no thinking field, with the temperature unchanged on the two models that take sampling. Dropping the delegated guard fails all three. PAGI-357 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_adaptive_thinking_test.go | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go index 2eace5ebd..318b42d37 100644 --- a/llms/openai/claude_adaptive_thinking_test.go +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -32,6 +32,29 @@ func TestDelegatedAdaptiveTurnsThinkingOnWhereClaudeWaitsToBeAsked(t *testing.T) } } +func TestAClaudeRequestWithoutReasoningStaysWithoutThinking(t *testing.T) { + t.Parallel() + + for model, keepsTemperature := range map[string]bool{ + "anthropic/claude-opus-4-8": false, + "anthropic/claude-sonnet-4-6": true, + "bedrock/us.anthropic.claude-opus-4-6-v1": true, + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + + _, sent := sendForWarningsWith(t, model, nil, llms.WithTemperature(0.3)) + + if _, ok := sent["thinking"]; ok { + t.Errorf("the caller asked for no thinking, got %v", sent) + } + if keepsTemperature && sent["temperature"] != 0.3 { + t.Errorf("a request without thinking keeps the caller's temperature, got %v", sent) + } + }) + } +} + func TestDelegatedAdaptiveAsksForTheThinkingTextTheAnthropicDoorReturns(t *testing.T) { t.Parallel() From e3e6509e87250a44584f375560c333401e9e0a5c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 08:19:44 +0300 Subject: [PATCH 567/618] fix(openai): keep the adaptive thinking object off hosts that resell Claude A delegated adaptive request on Claude Opus 4.6-4.8 or Sonnet 4.6 put thinking {type: adaptive, display: summarized} on the wire whatever served the model, because the check only read the Claude name. Through the gateway /v1, deepinfra/anthropic/claude-opus-4-8, deepinfra/anthropic/ claude-sonnet-4-6 and perplexity/anthropic/claude-opus-4-8 answered 400 "UnsupportedParamsError: deepinfra (perplexity) does not support parameters: ['thinking']", where the same call without the field answered 200. On openrouter/anthropic/claude-opus-4.8 the object went through and was ignored: 0 reasoning tokens, as with no field. pentagi sends this request for every agent without a reasoning block once its catalog, looked up by the last name segment, marks the model adaptive-only. None of these hosts documents the object. DeepInfra's API page for anthropic/claude-opus-4-8 lists reasoning_effort ("Currently supported values are none, minimal, low, medium, high, xhigh, and max") and no thinking field. Perplexity's Router chat completions rejects "any unrecognized top-level field" with a 400 and honors reasoning_effort. OpenRouter's parameters page has a reasoning object, and its Claude 4.7 guide opts in to adaptive thinking with "reasoning": {"enabled": true}. LiteLLM documents thinking for anthropic/, bedrock/ and vertex_ai/ Claude. The object now goes out only for a bare name or the anthropic/, bedrock/ and vertex_ai/ routes, and not to api.deepinfra.com, api.perplexity.ai or openrouter.ai. Elsewhere the delegated request travels without it and is reported as a dropped WithAdaptiveReasoning, as it was for these models before the object existed. The wire tests for the three gateway routes and the three hosts fail without the check; dropping the warning, any route or any host from the lists, or the bare-name case fails a test. Through the library on the gateway /v1: deepinfra/anthropic/claude-opus-4-8 and claude-sonnet-4-6, perplexity/anthropic/claude-sonnet-4-6 and openrouter/anthropic/claude- opus-4.8 answer with the warning and no thinking field, while anthropic/claude-opus-4-8 (61 reasoning tokens), anthropic/claude-sonnet- 4-6 (4036) and bedrock/global.anthropic.claude-sonnet-4-6 (5849) still think. PAGI-357 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_adaptive_thinking_test.go | 29 ++++++++++++++++++-- llms/openai/openaillm.go | 17 ++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go index 318b42d37..0b05f590f 100644 --- a/llms/openai/claude_adaptive_thinking_test.go +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -13,9 +13,8 @@ func TestDelegatedAdaptiveTurnsThinkingOnWhereClaudeWaitsToBeAsked(t *testing.T) for _, model := range []string{ "claude-opus-4-8", "anthropic/claude-opus-4-8", "anthropic/claude-opus-4-7", "anthropic/claude-opus-4-6", "anthropic/claude-sonnet-4-6", - "openrouter/anthropic/claude-opus-4.8", "us.anthropic.claude-opus-4-8", "bedrock/us.anthropic.claude-opus-4-6-v1", - "bedrock/global.anthropic.claude-sonnet-4-6", + "bedrock/global.anthropic.claude-sonnet-4-6", "vertex_ai/claude-opus-4-7", } { t.Run(model, func(t *testing.T) { t.Parallel() @@ -32,6 +31,32 @@ func TestDelegatedAdaptiveTurnsThinkingOnWhereClaudeWaitsToBeAsked(t *testing.T) } } +func TestDelegatedAdaptiveIsReportedWhereTheHostDocumentsNoThinkingObject(t *testing.T) { + t.Parallel() + + for name, tc := range map[string]struct{ baseURL, model string }{ + "the gateway's deepinfra route": {gatewayBaseURL, "deepinfra/anthropic/claude-opus-4-8"}, + "the gateway's perplexity route": {gatewayBaseURL, "perplexity/anthropic/claude-sonnet-4-6"}, + "the gateway's openrouter route": {gatewayBaseURL, "openrouter/anthropic/claude-opus-4.8"}, + "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-opus-4-8"}, + "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-opus-4-7"}, + "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-4.6"}, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + body, resp := sendToHost(t, tc.baseURL, tc.model, llms.WithAdaptiveReasoning(llms.ReasoningNone)) + + if _, ok := body["thinking"]; ok { + t.Errorf("this host documents no thinking object, got body: %v", body) + } + if w := warningFor(t, resp, "WithAdaptiveReasoning"); w.Kind != llms.WarningDrop || w.Sent != "" { + t.Errorf("the lost adaptive request must be reported, got %+v", w) + } + }) + } +} + func TestAClaudeRequestWithoutReasoningStaysWithoutThinking(t *testing.T) { t.Parallel() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index cb061d019..ddeb3195d 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -451,6 +451,10 @@ func (o *LLM) setDeferredReasoning( return reasoning.OpenAIDisableEffort } if delegated && o.sendsClaudeAdaptive(model) { + if !claudeThinkingObjectRoute(model, o.host) { + reportDelegatedDepth(warn, model, delegated, "") + return "" + } req.Thinking = &openaiclient.ThinkingOptions{Type: "adaptive", Display: "summarized"} return string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) } @@ -512,6 +516,19 @@ func (o *LLM) sendsClaudeAdaptive(model string) bool { !reasoning.ClaudeThinkingDefaultsOn(model) } +var ( + claudeThinkingObjectRoutes = []string{"anthropic", "bedrock", "vertex_ai"} + claudeResellerHosts = []string{"api.deepinfra.com", "api.perplexity.ai", "openrouter.ai"} +) + +func claudeThinkingObjectRoute(model, host string) bool { + if slices.Contains(claudeResellerHosts, host) { + return false + } + route, _, prefixed := strings.Cut(model, "/") + return !prefixed || slices.Contains(claudeThinkingObjectRoutes, route) +} + func (o *LLM) sendsBudgetInsteadOfEffort(model string, opts llms.CallOptions, tokens int) bool { if !opts.Reasoning.HasExplicitTokens() || tokens <= 0 { return false From f09c0cd444f58767fce62405f5c4d431d7e1f5ca Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 08:22:11 +0300 Subject: [PATCH 568/618] fix(openai): report adaptive thinking instead of sending it to Anthropic's compatibility endpoint With the base URL on api.anthropic.com, a delegated adaptive request on claude-opus-4-8 or claude-sonnet-4-6 went out as thinking {type: adaptive, display: summarized} and Anthropic answered 400 "Adaptive thinking is not available via the OpenAI compatibility endpoint." The same call without the field answers 200, and thinking {type: enabled, budget_tokens: 1024} answers 200 on claude-sonnet-4-6; {type: adaptive} without display is refused the same way. Checked on the gateway's native Anthropic passthrough, whose answers carry Anthropic's msg_01 ids and error shape. Anthropic's OpenAI SDK compatibility page says "You can enable thinking by adding the thinking parameter" and shows only {type: enabled, budget_tokens: 2000}; its field table lists reasoning_effort as "Ignored". The endpoint refuses the adaptive form the page does not show. On that host the delegated request now travels without the object and is reported as a dropped WithAdaptiveReasoning with the reason "the endpoint refuses adaptive thinking", not as a model waiting for an effort, which this endpoint ignores. The wire test for claude-opus-4-8, claude-opus-4-7 and claude-sonnet-4-6 on api.anthropic.com fails without the host check, without the warning, and with the effort reason in its place. Through the library with the base URL on api.anthropic.com routed to the passthrough: claude-opus-4-8 and claude-sonnet-4-6 answer 200 with the warning and no thinking field, and claude-opus-5 still goes out with no field and no warning. PAGI-357 Co-Authored-By: Claude Opus 5 --- llms/openai/claude_adaptive_thinking_test.go | 20 ++++++++++++++++++++ llms/openai/openaillm.go | 6 ++++++ llms/openai/sampling_warnings.go | 8 ++++++++ 3 files changed, 34 insertions(+) diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go index 0b05f590f..e2f01fc6b 100644 --- a/llms/openai/claude_adaptive_thinking_test.go +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -57,6 +57,26 @@ func TestDelegatedAdaptiveIsReportedWhereTheHostDocumentsNoThinkingObject(t *tes } } +func TestDelegatedAdaptiveIsReportedOnAnthropicsOpenAICompatibilityEndpoint(t *testing.T) { + t.Parallel() + + for _, model := range []string{"claude-opus-4-8", "claude-opus-4-7", "claude-sonnet-4-6"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body, resp := sendToHost(t, "http://api.anthropic.com/v1", model, llms.WithAdaptiveReasoning(llms.ReasoningNone)) + + if _, ok := body["thinking"]; ok { + t.Errorf("this endpoint answers adaptive thinking with a 400, got body: %v", body) + } + w := warningFor(t, resp, "WithAdaptiveReasoning") + if w.Kind != llms.WarningDrop || w.Sent != "" || !strings.Contains(w.Reason, "refuses adaptive thinking") { + t.Errorf("the refused adaptive request must be reported as refused, got %+v", w) + } + }) + } +} + func TestAClaudeRequestWithoutReasoningStaysWithoutThinking(t *testing.T) { t.Parallel() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index ddeb3195d..259b56253 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -451,6 +451,10 @@ func (o *LLM) setDeferredReasoning( return reasoning.OpenAIDisableEffort } if delegated && o.sendsClaudeAdaptive(model) { + if o.host == anthropicAPIHost { + reportAdaptiveRefused(warn, model) + return "" + } if !claudeThinkingObjectRoute(model, o.host) { reportDelegatedDepth(warn, model, delegated, "") return "" @@ -516,6 +520,8 @@ func (o *LLM) sendsClaudeAdaptive(model string) bool { !reasoning.ClaudeThinkingDefaultsOn(model) } +const anthropicAPIHost = "api.anthropic.com" + var ( claudeThinkingObjectRoutes = []string{"anthropic", "bedrock", "vertex_ai"} claudeResellerHosts = []string{"api.deepinfra.com", "api.perplexity.ai", "openrouter.ai"} diff --git a/llms/openai/sampling_warnings.go b/llms/openai/sampling_warnings.go index f3a1dcbfa..bbf0442dd 100644 --- a/llms/openai/sampling_warnings.go +++ b/llms/openai/sampling_warnings.go @@ -181,3 +181,11 @@ func reportDelegatedDepth(warn *llms.Warnings, model string, delegated bool, sen Reason: "this model does not reason unless an effort asks it to, and none was named", }) } + +func reportAdaptiveRefused(warn *llms.Warnings, model string) { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithAdaptiveReasoning", Model: model, + Asked: "adaptive", + Reason: "the endpoint refuses adaptive thinking", + }) +} From 854dec567329c11271c6a0d191430ee37742860c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 07:21:46 +0300 Subject: [PATCH 569/618] docs(reasoning): state only what AWS documents for the Bedrock non-reasoning list The doc comment of IsBedrockNonReasoningModel said the listed models answer without reasoning on the Converse door. That is an observation of calls without a reasoning field, not a documented property, and it says nothing about calls that carry an undocumented one. What backs the list is the AWS model cards of zai.glm-4.7, zai.glm-4.7-flash and zai.glm-5: they carry no Reasoning row, which the Claude cards do, and name no request field that controls it. The comment now says only that. No behaviour change. Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 2d1d8f2ca..0fafefb54 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -40,8 +40,8 @@ func IsBedrockAlwaysReasoningModel(model string) bool { return strings.Contains(baseModelName(model), "deepseek.r1") } -// IsBedrockNonReasoningModel reports whether the model answers without reasoning -// on the Converse door and AWS documents no field that turns it on. +// IsBedrockNonReasoningModel reports whether the model's Bedrock model card lists +// neither reasoning support nor a request field that controls it. func IsBedrockNonReasoningModel(model string) bool { return slices.Contains(bedrockNonReasoningModels, baseModelName(model)) } From 1509b8875b86f3fe836af24aad1b84f5bfffd6d7 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 08:25:28 +0300 Subject: [PATCH 570/618] test(bedrock): pin structured output on the us. and global. spellings of Claude Sonnet 4.6 The AWS structured-output guide sends readers to each model card, and the Claude Sonnet 4.6 card lists structured outputs as supported on bedrock-runtime, so every inference-profile spelling of the model keeps it on both Bedrock paths. Co-Authored-By: Claude Opus 5 --- .../internal/bedrockclient/bedrockclient_util_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go index 9d1428ba1..537db8da0 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go @@ -208,7 +208,7 @@ func TestConverse_StructuredOutput_CoexistsWithReasoning(t *testing.T) { }), mock.Anything).Return(textOutput(`{"answer":"ok"}`, types.StopReasonEndTurn), nil) input := &ConverseInput{ - ModelID: "anthropic.claude-sonnet-4-6", + ModelID: "anthropic.claude-opus-4-6-v1", Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, ReasoningConfig: &llms.ReasoningConfig{Mode: llms.ReasoningOn, Adaptive: true, Effort: llms.ReasoningHigh}, StructuredOutput: soConfig(), @@ -316,7 +316,8 @@ var ( "anthropic.claude-3-sonnet-20240229-v1:0", } claudeWithStructuredOutputOnBedrock = []string{ - "us.anthropic.claude-opus-4-6-v1", "anthropic.claude-sonnet-4-6", "anthropic.claude-sonnet-4-5-20250929-v1:0", + "us.anthropic.claude-opus-4-6-v1", "us.anthropic.claude-sonnet-4-6", "global.anthropic.claude-sonnet-4-6", + "anthropic.claude-sonnet-4-6", "anthropic.claude-sonnet-4-5-20250929-v1:0", "us.anthropic.claude-opus-4-5-20251101-v1:0", "global.anthropic.claude-haiku-4-5-20251001-v1:0", } ) From 99631b2d32b55a8b4b11ca722beea50033a0f766 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 16:51:23 +0300 Subject: [PATCH 571/618] test(bedrock): pin that an adaptive request on a model without a mechanism leaves Converse untouched The Converse test that kept Anthropic's adaptive shape off other vendors ran on gpt-oss, which now resolves to its own effort mechanism, so no door-level test reached the no-mechanism path with Adaptive set. A switch default that applied the adaptive shape to non-Claude models kept every bedrock test green. The new case sends WithAdaptiveReasoning to qwen.qwen3-32b-v1:0 with a temperature and top_p and asserts no additional fields and both sampling params kept. Under that mutation it fails on both assertions. Co-Authored-By: Claude Opus 5 --- .../bedrockclient_converse_test.go | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go index 99b0ff64a..b75dc5860 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_converse_test.go @@ -617,6 +617,43 @@ func TestConverseClient_AdaptiveReasoningNonAnthropicModel(t *testing.T) { "an Anthropic request shape does not travel to another vendor") } +func TestConverseClient_AdaptiveReasoningModelWithoutMechanism(t *testing.T) { + mockClient := &MockBedrockRuntimeClient{} + client := NewConverseClient(mockClient) + + var capturedInput *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(input *bedrockruntime.ConverseInput) bool { + capturedInput = input + return true + }), mock.Anything).Return(&bedrockruntime.ConverseOutput{ + Output: &types.ConverseOutputMemberMessage{ + Value: types.Message{ + Role: types.ConversationRoleAssistant, + Content: []types.ContentBlock{&types.ContentBlockMemberText{Value: "ok"}}, + }, + }, + }, nil) + + input := &ConverseInput{ + ModelID: "qwen.qwen3-32b-v1:0", + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "Hello", Type: "text"}}, + MaxTokens: ptr(2000), + Temperature: ptr(0.8), + TopP: ptr(0.9), + ReasoningConfig: &llms.ReasoningConfig{Effort: llms.ReasoningHigh, Adaptive: true}, + } + + _, err := client.CreateCompletionConverse(t.Context(), input) + require.NoError(t, err) + + assert.Nil(t, capturedInput.AdditionalModelRequestFields, + "an Anthropic request shape does not travel to another vendor") + require.NotNil(t, capturedInput.InferenceConfig.Temperature, "the caller's temperature must survive") + assert.InDelta(t, 0.8, *capturedInput.InferenceConfig.Temperature, 0.0001) + require.NotNil(t, capturedInput.InferenceConfig.TopP, "the caller's top_p must survive") + assert.InDelta(t, 0.9, *capturedInput.InferenceConfig.TopP, 0.0001) +} + func TestConverseClient_AdaptiveReasoningPreAdaptiveModelGated(t *testing.T) { mockClient := &MockBedrockRuntimeClient{} client := NewConverseClient(mockClient) From d9514e1e018e3385cc9357d2343a9efe9de533dc Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:53:12 +0300 Subject: [PATCH 572/618] docs(bedrock): stop listing Nova 2 Sonic among the models that take reasoningConfig The README named Nova 2 Lite and Sonic as taking reasoningConfig on both the Converse and legacy paths. IsNovaReasoningModel matches nova-2-lite only, both doors gate on it, and TestOnlyNovaLiteTakesReasoningConfig pins amazon.nova-2-sonic-v1:0 as not taking the field, so a WithReasoning call on Sonic sends nothing. Both bullets now name Lite alone, and Sonic joins Pro and Micro as models that do not get the field. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index f78abb961..64c93141a 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -196,15 +196,15 @@ configuration on this platform. The rest carry nothing. **Converse API** — a thinking configuration is sent for: - Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in `additionalModelRequestFields`, adaptive or budget (see below) -- Amazon Nova 2 Lite and Sonic — `reasoningConfig` in `additionalModelRequestFields`. - The vendor marks the field for those two only, so Nova 2 Pro and Micro do not get it +- Amazon Nova 2 Lite — `reasoningConfig` in `additionalModelRequestFields`. + Nova 2 Pro, Micro and Sonic do not get it - xAI Grok 4.x — `reasoning.effort` in `additionalModelRequestFields` - OpenAI GPT OSS 120B and 20B — `reasoning_effort` in `additionalModelRequestFields` **Legacy API** (InvokeModel) — a thinking configuration is sent for: - Claude: Fable 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5, Haiku 4.5 — `thinking` in the Anthropic body -- Amazon Nova 2 Lite and Sonic — `reasoningConfig` inside `inferenceConfig` +- Amazon Nova 2 Lite — `reasoningConfig` inside `inferenceConfig` **Reasoning models that take no configuration here**: Moonshot Kimi K2-Thinking, MiniMax M2/M2.1/M2.5, DeepSeek R1, Z-AI GLM 4.7/4.7 Flash/5, NVIDIA Nemotron 3 From 833b2369df618152ae8f798fa3eb82d15b58d68f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:53:46 +0300 Subject: [PATCH 573/618] docs(bedrock): stop presenting GLM 4.7, 4.7 Flash and 5 as reasoning models The README listed Z-AI GLM 4.7/4.7 Flash/5 under reasoning models that take no configuration, and the matrix footnote said GLM-5 reasons on its own. The hint says otherwise: IsBedrockNonReasoningModel lists the three, and ReasoningSupportFor returns Supported=false, Known=true, DefaultOn=false for them on Bedrock, pinned by TestTheBedrockHintPresentsNoReasoningWhereTheConverseDoorHasNone. GLM now has its own sentence saying it does not reason here. The footnote covers Nemotron 3 Super alone, and the GLM matrix row no longer points to it. Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index 64c93141a..a54bccbfb 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -207,9 +207,14 @@ configuration on this platform. The rest carry nothing. - Amazon Nova 2 Lite — `reasoningConfig` inside `inferenceConfig` **Reasoning models that take no configuration here**: Moonshot Kimi K2-Thinking, -MiniMax M2/M2.1/M2.5, DeepSeek R1, Z-AI GLM 4.7/4.7 Flash/5, NVIDIA Nemotron 3 -Super, Qwen3 32B, Magistral Small. AWS documents no reasoning field for them, so a -`WithReasoning` call on them changes nothing on the wire. +MiniMax M2/M2.1/M2.5, DeepSeek R1, NVIDIA Nemotron 3 Super, Qwen3 32B, Magistral +Small. AWS documents no reasoning field for them, so a `WithReasoning` call on them +changes nothing on the wire. + +**Z-AI GLM 4.7/4.7 Flash/5** are not reasoning models here: their AWS model cards +document neither reasoning nor a field that controls it, `ReasoningSupportFor` +reports them as not reasoning, and a `WithReasoning` call on them changes nothing +on the wire. **How the wire shape is resolved** @@ -812,7 +817,7 @@ model IDs. | Mistral | ✅*** | ❌ | ✅ | Some | ❌ | Converse native* | | Moonshot Kimi | ✅**** | ✅ | ✅ | Some | ❌ | Converse native* | | MiniMax M2/M2.1/M2.5 | ✅ | ✅ (always-on) | ✅ | ❌ | ❌ | Converse native* | -| GLM-4.7/4.7-Flash/5 | ❌***** | ❌****** | ✅ | ❌ | ❌ | Converse native* | +| GLM-4.7/4.7-Flash/5 | ❌***** | ❌ | ✅ | ❌ | ❌ | Converse native* | | NVIDIA Nemotron 3 Super | ✅ | ❌****** | ✅ | ❌ | ❌ | Converse native* | *Converse native: structured output is passed via AWS `OutputConfig.TextFormat`; support depends on what AWS advertises for the model at the time. The legacy InvokeModel structured-output path is implemented for Anthropic only. @@ -820,6 +825,6 @@ model IDs. ***Mistral: Large 3 and Large 2402 support tools, Magistral Small 2509 does not ****Moonshot: K2.5 supports tools, K2-Thinking is unstable in streaming *****GLM models: Backend incompatibility with Converse API tool format (requires string instead of JSON) -******GLM-5 and Nemotron 3 reason on their own, but this door sends them no thinking instruction: they belong to no family that has one on Bedrock, so `ResolveMechanism` returns none and a reasoning request on them is a no-op here. +******Nemotron 3 Super reasons on its own, but this door sends it no thinking instruction: it belongs to no family that has one on Bedrock, so `ResolveMechanism` returns none and a reasoning request on it is a no-op here. See `models_list.go` for the complete model list and detailed capabilities. From eb17e4934f841416de06a9287924f3e46353e356 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:54:08 +0300 Subject: [PATCH 574/618] docs(reasoning): drop the vendor sentence tests already pin from NovaClearsInferenceConfigAt The doc comment stated an AWS rule, that Nova refuses temperature, topP and maxTokens at the given effort, rather than our contract. Tests hold the fact: with the body replaced by return false, TestNovaRejectsSamplingOnlyAtTopEffort, TestTheLegacyNovaPathCarriesTheThinkingItWasAskedFor and TestConverseNovaClampsEffortAndDropsSamplingAtHigh fail. The sibling vendor sentence on NovaEffort was already removed on the same grounds. Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 0fafefb54..a8f316ffe 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -28,8 +28,6 @@ func NovaEfforts() []string { return []string{"low", "medium", "high"} } -// NovaClearsInferenceConfigAt reports whether Nova refuses temperature, topP and -// maxTokens alongside the given effort. func NovaClearsInferenceConfigAt(effort string) bool { return NovaEffort(effort) == "high" } From e93843d05ea70d0fe8b95cf67f6ad16755de930d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:54:40 +0300 Subject: [PATCH 575/618] docs(reasoning): describe IsBedrockNonReasoningModel as the list it checks The doc comment presented the function as a predicate over any model's AWS card, but the body only checks a three-entry list. A probe returned false for meta.llama3-3-70b-instruct-v1:0 and amazon.titan-text-express-v1, and true for zai.glm-5. The comment now says the function checks bedrockNonReasoningModels and names the model cards as the source of that list. Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index a8f316ffe..185653349 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -38,8 +38,9 @@ func IsBedrockAlwaysReasoningModel(model string) bool { return strings.Contains(baseModelName(model), "deepseek.r1") } -// IsBedrockNonReasoningModel reports whether the model's Bedrock model card lists -// neither reasoning support nor a request field that controls it. +// IsBedrockNonReasoningModel reports whether the model is in +// bedrockNonReasoningModels: Bedrock models whose AWS model card lists neither +// reasoning support nor a request field that controls it. func IsBedrockNonReasoningModel(model string) bool { return slices.Contains(bedrockNonReasoningModels, baseModelName(model)) } From 5a43de8ee3e008f7e8ead21edec43d5cc319a968 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:55:02 +0300 Subject: [PATCH 576/618] docs(reasoning): drop the NovaEffort comment that restates its switch The comment said NovaEffort maps an effort onto Nova's three levels. The switch below says the same, and TestNovaEffortCollapsesOntoThreeLevels pins it: a default branch that passes the input through turns it red. The Bedrock-scope docs on IsGptOssModel and IsGrokModel stay. They say the functions match Bedrock ids only, which the generic names do not: IsGptOssModel returns false for the ollama spelling gpt-oss:120b. Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 1 - 1 file changed, 1 deletion(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 185653349..536be3af5 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -12,7 +12,6 @@ func IsNovaReasoningModel(model string) bool { return strings.Contains(base, "amazon.nova-2-lite") } -// NovaEffort maps a requested effort onto the three levels Nova accepts. func NovaEffort(effort string) string { switch strings.ToLower(effort) { case "minimal", "low": From 28e64e9dd6b1a8291f3f152eeac2a9bd9c48fae9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:55:35 +0300 Subject: [PATCH 577/618] docs(reasoning): drop the EffortToolsDisable comment the wire test pins The constant carried a comment saying it puts an explicit "none" on the wire. TestEffortAndToolsOnTheWire holds that: with writeDisableEffort returning early, its 5.6_with_tools_and_no_request_still_sends_none case fails because the body lacks "reasoning_effort":"none". The neighbouring constants have no comment. Co-Authored-By: Claude Opus 5 --- llms/reasoning/effort_wire.go | 1 - 1 file changed, 1 deletion(-) diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 05c17fb13..995ff6862 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -265,7 +265,6 @@ type EffortToolsRule int const ( EffortToolsFree EffortToolsRule = iota EffortToolsOmit - // EffortToolsDisable puts an explicit "none" on the wire. EffortToolsDisable ) From 3fc454e9850878c202de9be78b7803b337bdd14f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:56:04 +0300 Subject: [PATCH 578/618] test(llmtest): drop the tool-probe comments that contradict the checks below them supportsTools opened with "if it doesn't error out, it's supported", but the next branch returns false when the call succeeds with a WithTools drop warning. TestTheSuiteSparesADoorThatReportsTheToolsDropped pins that branch: disabling it runs the ToolCalls subtest against a door that dropped the tools, and the test fails. The later "otherwise assume it's supported" comment was also wrong, because the final return reports false for any error that mentions tools. The comment above the ToolCalls subtest only repeated its condition. Co-Authored-By: Claude Opus 5 --- testing/llmtest/llmtest.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/testing/llmtest/llmtest.go b/testing/llmtest/llmtest.go index a91281a10..a0f15a7c8 100644 --- a/testing/llmtest/llmtest.go +++ b/testing/llmtest/llmtest.go @@ -68,7 +68,6 @@ func TestLLM(t *testing.T, model llms.Model, opts ...Option) { }) } - // Test tool calls if supported if !declared.SkipToolCalls && supportsTools(model) { t.Run("ToolCalls", func(t *testing.T) { t.Parallel() @@ -116,7 +115,6 @@ func supportsTools(model llms.Model) bool { }, } - // Try with tools - if it doesn't error out, it's supported resp, err := model.GenerateContent(ctx, messages, llms.WithTools(tools), llms.WithMaxTokens(1), @@ -127,8 +125,6 @@ func supportsTools(model llms.Model) bool { return false } - // If we get a specific "tools not supported" error, return false - // Otherwise assume it's supported (even if other errors occur) if err != nil && strings.Contains(strings.ToLower(err.Error()), "not support") { return false } From 5cdd49204e41142ca4a9071c8d5389d4a4db4192 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:56:39 +0300 Subject: [PATCH 579/618] fix(reasoning): keep the thinking budget off DashScope's glm-5.3 The DashScope guest-budget list named the glm-5 generation, and the generation match also accepts glm-5.3, so dashscope/glm-5.3 with a budget went out as thinking_budget and without reasoning_effort. Alibaba's OpenAI-compatible Chat reference says "glm-5.3 ignores the thinking_budget parameter" and lists reasoning_effort max, high and low for glm-5.3; the deep-thinking page lists glm-5.3 as thinking-only and glm-5.2, glm-5.1 and glm-5 as hybrid. Name glm-5.2 and glm-5.1 as generations and glm-5 exactly, so glm-5.3 gets the effort it takes and the budget is reported as dropped. Verified: the new glm-5.3 rows of TestDashScopeThinkingBudgetOnTheWire are red before (thinking_budget 2048, no reasoning_effort) and green after; breaking the exact glm-5 match turns the glm-5 row red. Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 4 ++++ llms/reasoning/qwen_capability.go | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 79c281e74..e01c83d37 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -156,6 +156,10 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { //nolint:funlen // tab llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"guest kimi-k2-thinking takes a budget", "dashscope/kimi-k2-thinking", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"glm-5.3 ignores a budget", "dashscope/glm-5.3", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, + {"glm-5.3 gets the effort instead", "dashscope/glm-5.3", + llms.WithReasoning(llms.ReasoningLow, 2048), `"reasoning_effort":"low"`, false}, {"guest kimi-k3 still gets no budget", "dashscope/kimi-k3", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"guest deepseek-v4 takes a budget", "dashscope/deepseek-v4-pro", diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 6afa0a135..473863600 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -54,7 +54,7 @@ func QwenThinkingEnabledByFlag(model string) bool { } var dashScopeGuestBudget = []string{ - "glm-5", "glm-4.7", "glm-4.6", "glm-4.5", + "glm-5.2", "glm-5.1", "glm-4.7", "glm-4.6", "glm-4.5", "kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking", "deepseek-v4", } @@ -75,6 +75,9 @@ func DashScopeTakesThinkingBudget(model string) bool { return false } if guest := dashScopeGuestSpelling(model); guest != "" { + if guest == "glm-5" { + return true + } for _, generation := range dashScopeGuestBudget { if hasGeneration(guest, generation) { return true From a7e9bbb3cf74354a1c58c71da9f82cd37206dc6f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 17:59:20 +0300 Subject: [PATCH 580/618] fix(openai): send the DashScope guest budget next to the answer-only max_tokens Once the DashScope budget stopped being cut to fit the answer limit, a GLM or Kimi guest carried it next to max_completion_tokens, since only Qwen, QwQ, QVQ, DeepSeek and Grok use the legacy field. Alibaba's OpenAI-compatible Chat reference defines max_completion_tokens as "the maximum length of the model's output, including the chain-of-thought and the model's answer", and DashScope refuses a budget that does not fit under it: dashscope/glm-5.2 with WithMaxTokens(300) and a 2000 budget got 400 "max_completion_tokens [300] must be greater than thinking_budget [2000]". The same reference defines max_tokens for glm-5.2 as the answer only "when the thinking_budget parameter is passed", and for the other models (Qwen, the other GLM and Kimi guests) as "the model's answer (excluding chain-of-thought)", which is the limit WithMaxTokens means. When a thinking_budget goes out, move the limit to max_tokens. Verified: TestDashScopeGuestBudgetTravelsWithTheAnswerOnlyLimit is red before (max_completion_tokens 300 on glm-5.2, glm-5.1, glm-4.7, kimi-k2.7-code, kimi-k2.6) and green after; removing the move turns it red. Through the library on the gateway, dashscope/glm-5.2, glm-5.1 and kimi-k2.7-code with max_tokens 300 and a 2000 budget answered with finish_reason stop and a non-empty answer (glm-5.2: 2000 reasoning tokens, 222 completion tokens beyond them). Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 20 ++++++++++++++++++++ llms/openai/openaillm.go | 3 +++ 2 files changed, 23 insertions(+) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index e01c83d37..6044e9714 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -205,6 +205,26 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { //nolint:funlen // tab } } +func TestDashScopeGuestBudgetTravelsWithTheAnswerOnlyLimit(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "dashscope/glm-5.2", "dashscope/glm-5.1", "dashscope/glm-4.7", + "dashscope/kimi-k2.7-code", "dashscope/kimi-k2.6", + } { + t.Run(model, func(t *testing.T) { + t.Parallel() + body := bodyForCall(t, model, + llms.WithMaxTokens(300), llms.WithReasoning(llms.ReasoningNone, 2000)) + if !strings.Contains(body, `"thinking_budget":2000`) || !strings.Contains(body, `"max_tokens":300`) || + strings.Contains(body, `"max_completion_tokens"`) { + t.Errorf("a budget above the limit must go out next to max_tokens, "+ + "not max_completion_tokens\nbody: %s", body) + } + }) + } +} + func TestDashScopeBudgetIsNotCappedByTheAnswerLimit(t *testing.T) { t.Parallel() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 259b56253..45f631dc6 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -489,6 +489,9 @@ func (o *LLM) writeVendorBudget(req *openaiclient.ChatRequest, opts llms.CallOpt case reasoning.DashScopeTakesThinkingBudget(wc.model): budget := min(opts.Reasoning.Tokens, llms.MaxReasoningTokens) req.ThinkingBudget = &budget + if req.MaxCompletionTokens != nil { + req.MaxTokens, req.MaxCompletionTokens = req.MaxCompletionTokens, nil + } case o.sendsClaudeBudget(wc.model, opts): budget := reasoning.ClaudeClampBudget(wc.model, tokens) req.Thinking = &openaiclient.ThinkingOptions{Type: "enabled", BudgetTokens: budget} From bf7897d5dfe8948e2310ebab3304080383d39160 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:02:11 +0300 Subject: [PATCH 581/618] fix(openai): leave answer room in the DashScope DeepSeek V4 thinking budget Once the DashScope budget stopped being cut to fit the answer limit, dashscope/deepseek-v4-pro with WithMaxTokens(600) and a 2000 budget went out as thinking_budget 2000 next to max_tokens 600 and came back with finish_reason length and an empty answer: all 600 tokens went to thinking. Alibaba's OpenAI-compatible Chat reference defines max_tokens on deepseek-v4-pro, deepseek-v4-flash and deepseek-v4-flash-0731 as "the sum of the model's answer and chain-of-thought content", and Model Studio's DeepSeek page gives these three a thinking_budget default of "393,216 in total", meaning "max_tokens and thinking_budget share the same limit". The same table marks thinking_budget on deepseek-v4.1-flash as "-", which "cannot be set", yet the deepseek-v4 generation match gave it a budget. Cut the DeepSeek V4 budget to the answer-room share of max_tokens, as the door did before, and name the three models the DeepSeek page lists instead of the generation. Verified: TestDashScopeDeepSeekBudgetLeavesRoomForTheAnswer and the deepseek-v4.1-flash row are red before and green after; dropping the cut turns the new test red. Through the library on the gateway, dashscope/deepseek-v4-pro with max_tokens 600 and a 2000 budget went out as thinking_budget 400 with a clamp warning and answered with finish_reason stop (400 reasoning tokens, 471 completion tokens). Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 21 ++++++++++++++++++++- llms/openai/openaillm.go | 3 +++ llms/reasoning/qwen_capability.go | 12 ++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 6044e9714..a113bbb66 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -166,6 +166,8 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { //nolint:funlen // tab llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"dated deepseek-v4 snapshot does too", "dashscope/deepseek-v4-flash-0731", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, + {"deepseek-v4.1-flash gets no budget", "dashscope/deepseek-v4.1-flash", + llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"guest omits effort when a budget is set", "dashscope/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"reasoning_effort"`, true}, {"deepseek-v3.2 does not get a budget", "dashscope/deepseek-v3.2", @@ -234,7 +236,6 @@ func TestDashScopeBudgetIsNotCappedByTheAnswerLimit(t *testing.T) { }{ {"qwen keeps the whole budget", "dashscope/qwen3-max"}, {"glm keeps the whole budget", "dashscope/glm-5.2"}, - {"deepseek keeps the whole budget", "dashscope/deepseek-v4-pro"}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -248,6 +249,24 @@ func TestDashScopeBudgetIsNotCappedByTheAnswerLimit(t *testing.T) { } } +func TestDashScopeDeepSeekBudgetLeavesRoomForTheAnswer(t *testing.T) { + t.Parallel() + + for _, model := range []string{"dashscope/deepseek-v4-pro", "dashscope/deepseek-v4-flash-0731"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + resp, sent := sendForWarningsWith(t, model, nil, + llms.WithMaxTokens(600), llms.WithReasoning(llms.ReasoningNone, 2000)) + if sent["thinking_budget"] != float64(400) || sent["max_tokens"] != float64(600) { + t.Errorf("max_tokens counts the thinking too, so the budget must leave answer room: %v", sent) + } + if w := warningFor(t, resp, "WithReasoning"); w.Kind != llms.WarningClamp || w.Sent != "400 tokens" { + t.Errorf("reasoning warning = %+v", w) + } + }) + } +} + func TestAnUnservableEffortWithToolsIsRefusedBeforeTheNetwork(t *testing.T) { t.Parallel() diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 45f631dc6..dcb6f5d32 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -488,6 +488,9 @@ func (o *LLM) writeVendorBudget(req *openaiclient.ChatRequest, opts llms.CallOpt switch { case reasoning.DashScopeTakesThinkingBudget(wc.model): budget := min(opts.Reasoning.Tokens, llms.MaxReasoningTokens) + if reasoning.DashScopeBudgetSharesAnswerLimit(wc.model) && opts.GetMaxTokens() > 0 { + budget = tokens + } req.ThinkingBudget = &budget if req.MaxCompletionTokens != nil { req.MaxTokens, req.MaxCompletionTokens = req.MaxCompletionTokens, nil diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 473863600..9bf051d76 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -3,6 +3,7 @@ package reasoning import ( "fmt" "regexp" + "slices" "strings" ) @@ -56,9 +57,10 @@ func QwenThinkingEnabledByFlag(model string) bool { var dashScopeGuestBudget = []string{ "glm-5.2", "glm-5.1", "glm-4.7", "glm-4.6", "glm-4.5", "kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking", - "deepseek-v4", } +var dashScopeDeepSeekBudget = []string{"deepseek-v4-pro", "deepseek-v4-flash", "deepseek-v4-flash-0731"} + func dashScopeGuestSpelling(model string) string { rest, ok := strings.CutPrefix(strings.ToLower(model), "dashscope/") if !ok || strings.Contains(rest, "/") { @@ -75,7 +77,7 @@ func DashScopeTakesThinkingBudget(model string) bool { return false } if guest := dashScopeGuestSpelling(model); guest != "" { - if guest == "glm-5" { + if guest == "glm-5" || slices.Contains(dashScopeDeepSeekBudget, guest) { return true } for _, generation := range dashScopeGuestBudget { @@ -91,3 +93,9 @@ func DashScopeTakesThinkingBudget(model string) bool { qwenFlagThinkers[m] || hasGeneration(m, "qwen3.8") } + +// DashScopeBudgetSharesAnswerLimit reports whether the model's thinking budget +// counts against max_tokens together with the answer. +func DashScopeBudgetSharesAnswerLimit(model string) bool { + return slices.Contains(dashScopeDeepSeekBudget, dashScopeGuestSpelling(model)) +} From 9a22b9bd92621fff3e7eb7e6ae43d46e5e2b52b3 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:03:46 +0300 Subject: [PATCH 582/618] fix(openai): turn thinking on for DashScope's Kimi K2.5 and K2.6 when asked A budget or effort on dashscope/kimi-k2.6 or dashscope/kimi-k2.5 went out as thinking_budget alone, and the door counted the budget as applied. Model Studio's deep-thinking page lists kimi-k2.6 and kimi-k2.5 deployed on Model Studio as "Hybrid thinking mode, thinking disabled by default", its Kimi page gives enable_thinking "false (default): Disables the thinking mode" for both, and its thinking_budget sample says "The enable_thinking parameter enables the thinking process, and thinking_budget sets its token limit". Only the Qwen flag thinkers got enable_thinking:true. Send enable_thinking:true on a thinking request to these two guests, as the Qwen flag thinkers get it. kimi-k2.7-code and kimi-k2-thinking are thinking-only and the GLM guests think by default, so they stay without it. Verified: the kimi-k2.6 and kimi-k2.5 rows of TestDashScopeThinkingBudgetOnTheWire are red before and green after; dropping kimi-k2.5 from the predicate turns its row red. Not measured live: the gateway has no healthy dashscope/kimi-k2.6 or kimi-k2.5 deployment. Co-Authored-By: Claude Opus 5 --- llms/openai/effort_with_tools_test.go | 10 ++++++++++ llms/openai/openaillm.go | 3 ++- llms/reasoning/qwen_capability.go | 7 +++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index a113bbb66..0a7de91e8 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -132,6 +132,16 @@ func TestDashScopeThinkingBudgetOnTheWire(t *testing.T) { //nolint:funlen // tab llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget"`, true}, {"the flag stays alongside the budget", "dashscope/qwen-plus", llms.WithReasoning(llms.ReasoningLow, 2048), `"enable_thinking":true`, false}, + {"guest kimi-k2.6 thinks only when asked to", "dashscope/kimi-k2.6", + llms.WithReasoning(llms.ReasoningNone, 2048), `"enable_thinking":true`, false}, + {"guest kimi-k2.5 thinks only when asked to", "dashscope/kimi-k2.5", + llms.WithReasoning(llms.ReasoningNone, 2048), `"enable_thinking":true`, false}, + {"guest kimi-k2.7-code needs no flag", "dashscope/kimi-k2.7-code", + llms.WithReasoning(llms.ReasoningNone, 2048), `"enable_thinking"`, true}, + {"guest glm-5.2 needs no flag", "dashscope/glm-5.2", + llms.WithReasoning(llms.ReasoningNone, 2048), `"enable_thinking"`, true}, + {"kimi-k2.6 on Moonshot gets no DashScope flag", "moonshot/kimi-k2.6", + llms.WithReasoning(llms.ReasoningLow, 0), `"enable_thinking"`, true}, {"guest glm-5.2 takes a budget", "dashscope/glm-5.2", llms.WithReasoning(llms.ReasoningLow, 2048), `"thinking_budget":2048`, false}, {"glm-5.2 generation snapshot does too", "dashscope/glm-5.2-fast-preview", diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index dcb6f5d32..6ae89b487 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -311,7 +311,8 @@ func (o *LLM) createChatRequest( } } - if model := o.effectiveModel(opts); reasoning.QwenThinkingEnabledByFlag(model) && + if model := o.effectiveModel(opts); (reasoning.QwenThinkingEnabledByFlag(model) || + reasoning.DashScopeGuestThinkingEnabledByFlag(model)) && opts.Reasoning.ResolveMode() == llms.ReasoningOn { thinkingOn := true req.EnableThinking = &thinkingOn diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index 9bf051d76..abb0683b6 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -54,6 +54,13 @@ func QwenThinkingEnabledByFlag(model string) bool { return qwenFlagThinkers[dashScopeSpelling(model)] } +// DashScopeGuestThinkingEnabledByFlag reports whether a guest model DashScope +// serves leaves its thinking off until enable_thinking:true asks for it. +func DashScopeGuestThinkingEnabledByFlag(model string) bool { + guest := dashScopeGuestSpelling(model) + return guest == "kimi-k2.6" || guest == "kimi-k2.5" +} + var dashScopeGuestBudget = []string{ "glm-5.2", "glm-5.1", "glm-4.7", "glm-4.6", "glm-4.5", "kimi-k2.5", "kimi-k2.6", "kimi-k2.7-code", "kimi-k2-thinking", From a0fffdf8567704115de8aecdc0ad58fb616f3ede Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:08:44 +0300 Subject: [PATCH 583/618] fix(openai): give a model sent to DashScope's own host the DashScope guest wire The door picked the DashScope guest wire only from the dashscope/ route prefix. A bare GLM, DeepSeek or Kimi name sent straight to Model Studio, which is how pentagi's Qwen provider calls it with an empty QWEN_PROVIDER, got the Z.AI and Moonshot wire: Off went out as thinking {type: disabled}, a budget on glm-5.2 became reasoning_effort, and a budget on glm-5.1 was refused before the network. A Moonshot-deployed Kimi id with its vendor segment (kimi/kimi-k2.6, or dashscope/kimi/kimi-k2.6 on a gateway) got the same wire. Alibaba's OpenAI-compatible Chat reference says enable_thinking "applies to ... the DeepSeek-V4-Pro/V4-Flash series, DeepSeek-V3.2/V3.2-exp/V3.1 series, Kimi-K2.7-code, Kimi-K2.6/K2.5 series, and GLM series", documents the thinking object only as controlling "the thinking mode of MiniMax/MiniMax-M3 supplied by MiniMax", says thinking_budget applies to "GLM and Kimi models", and lists reasoning_effort for glm-5.1. The deep-thinking page names kimi/kimi-k2.6 and kimi/kimi-k2.5 as the Moonshot-deployed ids. The same reference and the Model Studio regions page document the hosts: dashscope.aliyuncs.com, dashscope-intl.aliyuncs.com, cn-hongkong.dashscope.aliyuncs.com, {WorkspaceId}.{region}.maas.aliyuncs.com and trial.{region}.maas.aliyuncs.com; the OpenAI compatibility page names dashscope-us.aliyuncs.com for Virginia. Read a name sent to one of those hosts as its dashscope/ route for the off wire, the budget, the enable_thinking flag and effort acceptance, and read the kimi/ deployment segment as the guest behind it. The Alibaba-deployed Kimi K2.5 and K2.6 keep the enable_thinking:true of a thinking request; the Moonshot-deployed ones think by default and do not get it. Verified: TestDashScopeHostGetsTheGuestWireForNamesWithoutTheRoutePrefix is red before on every DashScope row and green after, with Z.AI and Moonshot rows unchanged. Mutations each turn rows red: dropping the kimi/ segment (4 rows), the maas.aliyuncs.com suffix (2), the host route on effort acceptance (glm-5.1 effort), on the off wire and budget (6), on the flag (bare kimi-k2.6), and reading the flag without the route prefix (Moonshot kimi-k2.6). Not measured live: no direct DashScope key is available and the gateway has no DashScope passthrough. Co-Authored-By: Claude Opus 5 --- llms/openai/openaillm.go | 11 +++--- llms/openai/thinking_object_off_test.go | 51 +++++++++++++++++++++++++ llms/reasoning/qwen_capability.go | 28 +++++++++++--- 3 files changed, 79 insertions(+), 11 deletions(-) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 6ae89b487..2df4110ce 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -312,7 +312,7 @@ func (o *LLM) createChatRequest( } if model := o.effectiveModel(opts); (reasoning.QwenThinkingEnabledByFlag(model) || - reasoning.DashScopeGuestThinkingEnabledByFlag(model)) && + reasoning.DashScopeGuestThinkingEnabledByFlag(reasoning.DashScopeRoute(model, o.host))) && opts.Reasoning.ResolveMode() == llms.ReasoningOn { thinkingOn := true req.EnableThinking = &thinkingOn @@ -416,7 +416,7 @@ func (o *LLM) setReasoning( return "", o.setReasoningOff(req, opts) } - acceptsEffort := reasoning.AcceptsEffortWire(model) + acceptsEffort := reasoning.AcceptsEffortWire(reasoning.DashScopeRoute(model, o.host)) askedEffort := string(opts.Reasoning.GetEffort(opts.GetMaxTokens())) effort := reasoning.OpenAIReasoningCapsFor(model).ClampEffort(askedEffort) reasoningEffort := llms.ReasoningEffort(reasoning.ClaudeClampEffort(model, effort, reasoning.ProviderOpenAI)) @@ -486,10 +486,11 @@ func (o *LLM) writeVendorBudget(req *openaiclient.ChatRequest, opts llms.CallOpt if !opts.Reasoning.HasExplicitTokens() || tokens <= 0 { return false } + route := reasoning.DashScopeRoute(wc.model, o.host) switch { - case reasoning.DashScopeTakesThinkingBudget(wc.model): + case reasoning.DashScopeTakesThinkingBudget(route): budget := min(opts.Reasoning.Tokens, llms.MaxReasoningTokens) - if reasoning.DashScopeBudgetSharesAnswerLimit(wc.model) && opts.GetMaxTokens() > 0 { + if reasoning.DashScopeBudgetSharesAnswerLimit(route) && opts.GetMaxTokens() > 0 { budget = tokens } req.ThinkingBudget = &budget @@ -595,7 +596,7 @@ func (o *LLM) raiseAnswerLimitForBudget(req *openaiclient.ChatRequest, budget in // a typed error. func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptions) error { model := o.effectiveModel(opts) - switch reasoning.ResolveOff(model, reasoning.ProviderOpenAI) { //nolint:exhaustive // only OpenAI-relevant wires are handled; others are a no-op + switch reasoning.ResolveOff(reasoning.DashScopeRoute(model, o.host), reasoning.ProviderOpenAI) { //nolint:exhaustive // only OpenAI-relevant wires are handled; others are a no-op case reasoning.OffUnsupported: return &reasoning.ErrReasoningOffUnsupported{Model: model} case reasoning.OffEffortNone: diff --git a/llms/openai/thinking_object_off_test.go b/llms/openai/thinking_object_off_test.go index 3f63bff15..92d583493 100644 --- a/llms/openai/thinking_object_off_test.go +++ b/llms/openai/thinking_object_off_test.go @@ -61,6 +61,57 @@ func TestDisablingThinkingOnAHostThatServesTheFamilyUnderItsOwnName(t *testing.T } } +func TestDashScopeHostGetsTheGuestWireForNamesWithoutTheRoutePrefix(t *testing.T) { + t.Parallel() + + const ( + intl = "http://dashscope-intl.aliyuncs.com/compatible-mode/v1" + hongKong = "http://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1" + workspace = "http://llm-abc.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1" + zai = "http://api.z.ai/api/paas/v4" + moonshot = "http://api.moonshot.ai/v1" + ) + off := llms.WithReasoningDisabled() + budget := llms.WithReasoning(llms.ReasoningNone, 2048) + disabled := map[string]any{"enable_thinking": false} + for _, tc := range []struct { + baseURL, model string + opt llms.CallOption + want map[string]any + }{ + {dashScopeBaseURL, "glm-5.2", off, disabled}, + {dashScopeBaseURL, "deepseek-v4-pro", off, disabled}, + {intl, "deepseek-v4-flash-0731", off, disabled}, + {hongKong, "kimi-k2.6", off, disabled}, + {workspace, "glm-5.1", off, disabled}, + {dashScopeBaseURL, "kimi/kimi-k2.6", off, disabled}, + {gatewayBaseURL, "dashscope/kimi/kimi-k2.6", off, disabled}, + {dashScopeBaseURL, "glm-5.2", budget, map[string]any{"thinking_budget": float64(2048)}}, + {workspace, "glm-5.1", budget, map[string]any{"thinking_budget": float64(2048)}}, + {dashScopeBaseURL, "kimi/kimi-k2.6", budget, map[string]any{"thinking_budget": float64(2048)}}, + {gatewayBaseURL, "dashscope/kimi/kimi-k2.6", budget, map[string]any{"thinking_budget": float64(2048)}}, + {dashScopeBaseURL, "kimi-k2.6", budget, + map[string]any{"thinking_budget": float64(2048), "enable_thinking": true}}, + {dashScopeBaseURL, "glm-5.1", llms.WithReasoning(llms.ReasoningHigh, 0), + map[string]any{"reasoning_effort": "high"}}, + {zai, "glm-5.2", off, map[string]any{"thinking": map[string]any{"type": "disabled"}}}, + {moonshot, "kimi-k2.6", llms.WithReasoning(llms.ReasoningHigh, 0), map[string]any{}}, + } { + t.Run(tc.baseURL+" "+tc.model, func(t *testing.T) { + body, _ := sendToHost(t, tc.baseURL, tc.model, tc.opt) + got := map[string]any{} + for _, key := range []string{"thinking", "reasoning_effort", "reasoning", "enable_thinking", "thinking_budget"} { + if value, ok := body[key]; ok { + got[key] = value + } + } + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("reasoning fields on the wire = %v, want %v", got, tc.want) + } + }) + } +} + func TestDisablingThinkingOnAModelThatOnlyThinks(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index abb0683b6..a5a4034ab 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -57,8 +57,8 @@ func QwenThinkingEnabledByFlag(model string) bool { // DashScopeGuestThinkingEnabledByFlag reports whether a guest model DashScope // serves leaves its thinking off until enable_thinking:true asks for it. func DashScopeGuestThinkingEnabledByFlag(model string) bool { - guest := dashScopeGuestSpelling(model) - return guest == "kimi-k2.6" || guest == "kimi-k2.5" + guest, ok := strings.CutPrefix(strings.ToLower(model), "dashscope/") + return ok && (guest == "kimi-k2.6" || guest == "kimi-k2.5") } var dashScopeGuestBudget = []string{ @@ -70,19 +70,31 @@ var dashScopeDeepSeekBudget = []string{"deepseek-v4-pro", "deepseek-v4-flash", " func dashScopeGuestSpelling(model string) string { rest, ok := strings.CutPrefix(strings.ToLower(model), "dashscope/") + rest = strings.TrimPrefix(rest, "kimi/") if !ok || strings.Contains(rest, "/") { return "" } return rest } +var dashScopeHosts = []string{ + "dashscope.aliyuncs.com", "dashscope-intl.aliyuncs.com", "dashscope-us.aliyuncs.com", + "cn-hongkong.dashscope.aliyuncs.com", +} + +// DashScopeRoute returns the name the rules read for a model sent to host: a +// name sent to Model Studio's own host reads as its dashscope/ route. +func DashScopeRoute(model, host string) string { + onDashScope := slices.Contains(dashScopeHosts, host) || strings.HasSuffix(host, ".maas.aliyuncs.com") + if !onDashScope || strings.HasPrefix(strings.ToLower(model), "dashscope/") { + return model + } + return "dashscope/" + model +} + // DashScopeTakesThinkingBudget reports whether DashScope caps the model's // thinking by a token budget. func DashScopeTakesThinkingBudget(model string) bool { - m := dashScopeSpelling(model) - if m == "" { - return false - } if guest := dashScopeGuestSpelling(model); guest != "" { if guest == "glm-5" || slices.Contains(dashScopeDeepSeekBudget, guest) { return true @@ -93,6 +105,10 @@ func DashScopeTakesThinkingBudget(model string) bool { } } } + m := dashScopeSpelling(model) + if m == "" { + return false + } return qwenDefaultThinkingName.MatchString(m) || qwenParameterCountName.MatchString(m) || qwenNextName.MatchString(m) || From f36aab12b3eb550688f2d643038c4e7185b427e1 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:10:41 +0300 Subject: [PATCH 584/618] fix(openai): keep top_k off the DeepSeek, Kimi and MiniMax models DashScope serves The door kept a caller's WithTopK on dashscope/deepseek-v4-pro, on a bare deepseek-v4-pro sent to DashScope's own host, and on the Kimi and MiniMax guests, with no warning, on the premise that DashScope documents top_k for them. Alibaba's OpenAI-compatible Chat reference says the opposite in its top_k entry: "The DeepSeek, Kimi, and MiniMax series do not support the top_k parameter." Drop top_k with the "the vendor's API has no top_k field" warning for those families when DashScope serves them, by the dashscope/ route or by DashScope's host, including their deployment-segment ids (kimi/kimi-k2.6, MiniMax/MiniMax-M3). Qwen and GLM on DashScope keep it. Verified: TestTopKStaysOffTheAPIsThatDoNotTakeIt is red before (top_k 40 on dashscope/deepseek-v4-pro with no warning) and green after. Mutations each turn it red: dropping the deepseek, kimi-, moonshot-kimi or minimax- family, reading the whole route instead of its last segment, dropping the dashscope/ requirement, and ignoring the host. Co-Authored-By: Claude Opus 5 --- llms/openai/deepseek_sampling_test.go | 26 ++++++++++++++++++-------- llms/openai/openaillm.go | 3 ++- llms/reasoning/qwen_capability.go | 9 +++++++++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/llms/openai/deepseek_sampling_test.go b/llms/openai/deepseek_sampling_test.go index 64d9deb38..8846903f1 100644 --- a/llms/openai/deepseek_sampling_test.go +++ b/llms/openai/deepseek_sampling_test.go @@ -270,30 +270,40 @@ func TestDeepSeekNeverGetsThePenaltiesItNoLongerSupports(t *testing.T) { } } -func TestDeepSeekOwnAPIDropsTheTopKItDoesNotDocument(t *testing.T) { +func TestTopKStaysOffTheAPIsThatDoNotTakeIt(t *testing.T) { t.Parallel() for name, tc := range map[string]struct { baseURL, model string dropped bool }{ - "deepseek-v4-pro on its own API": {deepSeekBaseURL, "deepseek-v4-pro", true}, - "deepseek/deepseek-v4-pro on a gateway": {gatewayBaseURL, "deepseek/deepseek-v4-pro", true}, - "deepseek-flash on its own API": {deepSeekBaseURL, "deepseek-flash", true}, - "dashscope/deepseek-v4-pro keeps it": {gatewayBaseURL, "dashscope/deepseek-v4-pro", false}, - "deepseek-v4-pro on DashScope keeps it": {dashScopeBaseURL, "deepseek-v4-pro", false}, + "deepseek-v4-pro on its own API": {deepSeekBaseURL, "deepseek-v4-pro", true}, + "deepseek/deepseek-v4-pro on a gateway": {gatewayBaseURL, "deepseek/deepseek-v4-pro", true}, + "deepseek-flash on its own API": {deepSeekBaseURL, "deepseek-flash", true}, + "dashscope/deepseek-v4-pro on a gateway": {gatewayBaseURL, "dashscope/deepseek-v4-pro", true}, + "deepseek-v4-pro on DashScope": {dashScopeBaseURL, "deepseek-v4-pro", true}, + "dashscope/kimi-k2.7-code on a gateway": {gatewayBaseURL, "dashscope/kimi-k2.7-code", true}, + "kimi-k2.6 on DashScope": {dashScopeBaseURL, "kimi-k2.6", true}, + "kimi/kimi-k2.6 on DashScope": {dashScopeBaseURL, "kimi/kimi-k2.6", true}, + "dashscope/MiniMax-M2.5 on a gateway": {gatewayBaseURL, "dashscope/MiniMax-M2.5", true}, + "MiniMax/MiniMax-M3 on DashScope": {dashScopeBaseURL, "MiniMax/MiniMax-M3", true}, + "Moonshot-Kimi-K2-Instruct on DashScope": {dashScopeBaseURL, "Moonshot-Kimi-K2-Instruct", true}, + "dashscope/qwen3.7-plus keeps it": {gatewayBaseURL, "dashscope/qwen3.7-plus", false}, + "glm-5.2 on DashScope keeps it": {dashScopeBaseURL, "glm-5.2", false}, + "kimi-k2.6 on a gateway's other route": {gatewayBaseURL, "moonshot/kimi-k2.6", false}, + "deepseek-v4-pro on another route keeps it": {gatewayBaseURL, "openrouter/deepseek/deepseek-v4-pro", false}, } { body, resp := sendToHost(t, tc.baseURL, tc.model, llms.WithTopK(40)) _, present := body["top_k"] if tc.dropped { if present { - t.Errorf("%s: DeepSeek's API documents no top_k, got body: %v", name, body) + t.Errorf("%s: the vendor's API takes no top_k, got body: %v", name, body) } if w := warningFor(t, resp, "WithTopK"); w.Kind != llms.WarningDrop || w.Asked != "40" { t.Errorf("%s: top_k warning = %+v", name, w) } } else if body["top_k"] != float64(40) { - t.Errorf("%s: a deepseek served elsewhere keeps top_k, got body: %v", name, body) + t.Errorf("%s: top_k must reach the wire, got body: %v", name, body) } } } diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 2df4110ce..b1b9d2c00 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -363,7 +363,8 @@ func dropFieldsTheModelTakesNot(req *openaiclient.ChatRequest, model, host strin addNonZeroIntChange(warn, "WithTopK", model, refusedByEndpoint, req.TopK, nil) req.TopK = nil } - if (reasoning.TakesNoTopK(model) || reasoning.ServedByDeepSeek(model, host)) && req.TopK != nil { + if (reasoning.TakesNoTopK(model) || reasoning.ServedByDeepSeek(model, host) || + reasoning.DashScopeTakesNoTopK(reasoning.DashScopeRoute(model, host))) && req.TopK != nil { addNonZeroIntChange(warn, "WithTopK", model, "the vendor's API has no top_k field", req.TopK, nil) req.TopK = nil } diff --git a/llms/reasoning/qwen_capability.go b/llms/reasoning/qwen_capability.go index a5a4034ab..ca2b7ba40 100644 --- a/llms/reasoning/qwen_capability.go +++ b/llms/reasoning/qwen_capability.go @@ -92,6 +92,15 @@ func DashScopeRoute(model, host string) string { return "dashscope/" + model } +// DashScopeTakesNoTopK reports whether DashScope serves the model from a family +// that takes no top_k. +func DashScopeTakesNoTopK(model string) bool { + rest, ok := strings.CutPrefix(strings.ToLower(model), "dashscope/") + name := rest[strings.LastIndex(rest, "/")+1:] + return ok && (strings.HasPrefix(name, "deepseek") || strings.HasPrefix(name, "kimi-") || + strings.HasPrefix(name, "moonshot-kimi") || strings.HasPrefix(name, "minimax-")) +} + // DashScopeTakesThinkingBudget reports whether DashScope caps the model's // thinking by a token budget. func DashScopeTakesThinkingBudget(model string) bool { From 1f12204e5caf72f355bffef86a06f0829d9d9e18 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:14:39 +0300 Subject: [PATCH 585/618] fix(openai): keep the Claude budget object off hosts that document no thinking object A Claude budget on the gateway's deepinfra/, perplexity/ and openrouter/ routes, and on api.deepinfra.com, api.perplexity.ai and openrouter.ai, went out as thinking {type: enabled, budget_tokens} with no warning. DeepInfra and Perplexity answer that field with a 400; before the budget object the same call carried reasoning_effort and reported the dropped budget. sendsClaudeBudget checked only the model and the format, while the delegated adaptive writer already asked claudeThinkingObjectRoute. The budget writer and the turn-limit check now ask it too, so off those routes the budget becomes an effort and is reported as before. Checked with a wire test over the three gateway routes and the three hosts: red without the route check, green with it. Co-Authored-By: Claude Opus 5 --- llms/openai/claude_thinking_budget_test.go | 30 ++++++++++++++++++++++ llms/openai/openaillm.go | 1 + 2 files changed, 31 insertions(+) diff --git a/llms/openai/claude_thinking_budget_test.go b/llms/openai/claude_thinking_budget_test.go index af0ae4ddb..d5148d44f 100644 --- a/llms/openai/claude_thinking_budget_test.go +++ b/llms/openai/claude_thinking_budget_test.go @@ -82,3 +82,33 @@ func TestABudgetStaysOffModelsThatAreNotClaude(t *testing.T) { } } } + +func TestAClaudeBudgetStaysOffHostsThatDocumentNoThinkingObject(t *testing.T) { + t.Parallel() + + for name, tc := range map[string]struct{ baseURL, model string }{ + "the gateway's deepinfra route": {gatewayBaseURL, "deepinfra/anthropic/claude-sonnet-4-6"}, + "the gateway's perplexity route": {gatewayBaseURL, "perplexity/anthropic/claude-sonnet-4-5"}, + "the gateway's openrouter route": {gatewayBaseURL, "openrouter/anthropic/claude-haiku-4.5"}, + "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-sonnet-4-6"}, + "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-sonnet-4-5"}, + "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-4.5"}, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + body, resp := sendToHost(t, tc.baseURL, tc.model, + llms.WithReasoning(llms.ReasoningNone, 2048), llms.WithMaxTokens(8192)) + + if _, ok := body["thinking"]; ok { + t.Errorf("this host documents no thinking object, got body: %v", body) + } + if _, ok := body["reasoning_effort"]; !ok { + t.Errorf("want the effort the budget maps to, got body: %v", body) + } + if w := warningFor(t, resp, "WithReasoning"); w.Asked == w.Sent { + t.Errorf("the budget that did not travel must be reported, got %+v", w) + } + }) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index b1b9d2c00..47a912834 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -517,6 +517,7 @@ func (o *LLM) budgetHasNoField(model string, opts llms.CallOptions) bool { func (o *LLM) sendsClaudeBudget(model string, opts llms.CallOptions) bool { return !o.client.ModernReasoningFormat && + claudeThinkingObjectRoute(model, o.host) && opts.Reasoning.HasExplicitTokens() && reasoning.ClaudeSpendsThinkingBudget(model) && !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) From d861f6e40cf6523797f841248b57cca3a781c243 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:16:58 +0300 Subject: [PATCH 586/618] fix(reasoning): refuse turning off a default-on Claude where no thinking object is taken WithReasoningDisabled on Claude Opus 5 and Sonnet 5 went out as thinking {type: disabled} on the gateway's deepinfra/, perplexity/ and openrouter/ routes, on api.deepinfra.com, api.perplexity.ai and openrouter.ai, and with the reasoning-object format. DeepInfra and Perplexity answer the field with a 400 and OpenRouter ignores it, so the model kept thinking with nothing reported. Before the disable object these calls returned ErrReasoningOffUnsupported before the network, and ReasoningSupportFor now offered an Off that does not work on those routes. The route allow-list moves into the reasoning package as ClaudeThinkingObjectRoute. ResolveOff answers OffUnsupported for a default-on Claude on a route outside it, so the hint reports CannotDisable there. The openai door asks one predicate, sendsClaudeThinkingObject (format, host, route), for the adaptive, budget and off objects, and refuses Off where it is false. Checked: the door test over three routes, three hosts and the reasoning object format is red before and green after; removing the door check turns the host and format rows red; removing the route check in ResolveOff turns the ResolveOff and ReasoningSupportFor rows red. Co-Authored-By: Claude Opus 5 --- llms/openai/claude_thinking_off_route_test.go | 79 +++++++++++++++++++ llms/openai/openaillm.go | 23 +++--- llms/reasoning/claude_capability.go | 10 +++ llms/reasoning/off.go | 3 + llms/reasoning/off_test.go | 7 ++ llms/reasoning_support_test.go | 2 + 6 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 llms/openai/claude_thinking_off_route_test.go diff --git a/llms/openai/claude_thinking_off_route_test.go b/llms/openai/claude_thinking_off_route_test.go new file mode 100644 index 000000000..77957fb6f --- /dev/null +++ b/llms/openai/claude_thinking_off_route_test.go @@ -0,0 +1,79 @@ +package openai + +import ( + "context" + "errors" + "io" + "net" + "net/http" + "net/http/httptest" + "testing" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func TestTurningOffClaudeIsRefusedWhereTheHostDocumentsNoThinkingObject(t *testing.T) { + t.Parallel() + + for name, tc := range map[string]struct { + baseURL, model string + clientOpts []Option + }{ + "the gateway's deepinfra route": {gatewayBaseURL, "deepinfra/anthropic/claude-opus-5", nil}, + "the gateway's perplexity route": {gatewayBaseURL, "perplexity/anthropic/claude-sonnet-5", nil}, + "the gateway's openrouter route": {gatewayBaseURL, "openrouter/anthropic/claude-sonnet-5", nil}, + "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-opus-5", nil}, + "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-sonnet-5", nil}, + "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-5", nil}, + "the reasoning object format": { + gatewayBaseURL, "anthropic/claude-sonnet-5", []Option{WithModernReasoningFormat()}, + }, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + sent, err := sendOffToHost(t, tc.baseURL, tc.model, tc.clientOpts) + + var unsupported *reasoning.ErrReasoningOffUnsupported + if !errors.As(err, &unsupported) { + t.Errorf("want ErrReasoningOffUnsupported, got err=%v", err) + } + if sent { + t.Error("the refusal must come before the network, but a request went out") + } + }) + } +} + +func sendOffToHost(t *testing.T, baseURL, model string, clientOpts []Option) (bool, error) { + t.Helper() + + sent := false + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + sent = true + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + t.Cleanup(srv.Close) + + addr := srv.Listener.Addr().String() + transport := &http.Transport{DialContext: func(ctx context.Context, network, _ string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, addr) + }} + t.Cleanup(transport.CloseIdleConnections) + + opts := append([]Option{ + WithBaseURL(baseURL), WithToken("token"), WithModel(model), + WithHTTPClient(&http.Client{Transport: transport}), + }, clientOpts...) + llm, err := New(opts...) + if err != nil { + t.Fatalf("new client: %v", err) + } + _, err = llm.GenerateContent(context.Background(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "hi")}, llms.WithReasoningDisabled()) + return sent, err +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 47a912834..2e8324714 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -457,7 +457,7 @@ func (o *LLM) setDeferredReasoning( reportAdaptiveRefused(warn, model) return "" } - if !claudeThinkingObjectRoute(model, o.host) { + if !o.sendsClaudeThinkingObject(model) { reportDelegatedDepth(warn, model, delegated, "") return "" } @@ -516,8 +516,7 @@ func (o *LLM) budgetHasNoField(model string, opts llms.CallOptions) bool { } func (o *LLM) sendsClaudeBudget(model string, opts llms.CallOptions) bool { - return !o.client.ModernReasoningFormat && - claudeThinkingObjectRoute(model, o.host) && + return o.sendsClaudeThinkingObject(model) && opts.Reasoning.HasExplicitTokens() && reasoning.ClaudeSpendsThinkingBudget(model) && !reasoning.ResolveClaudeAdaptive(model, opts.Reasoning.Adaptive) @@ -532,17 +531,12 @@ func (o *LLM) sendsClaudeAdaptive(model string) bool { const anthropicAPIHost = "api.anthropic.com" -var ( - claudeThinkingObjectRoutes = []string{"anthropic", "bedrock", "vertex_ai"} - claudeResellerHosts = []string{"api.deepinfra.com", "api.perplexity.ai", "openrouter.ai"} -) +var claudeResellerHosts = []string{"api.deepinfra.com", "api.perplexity.ai", "openrouter.ai"} -func claudeThinkingObjectRoute(model, host string) bool { - if slices.Contains(claudeResellerHosts, host) { - return false - } - route, _, prefixed := strings.Cut(model, "/") - return !prefixed || slices.Contains(claudeThinkingObjectRoutes, route) +func (o *LLM) sendsClaudeThinkingObject(model string) bool { + return !o.client.ModernReasoningFormat && + !slices.Contains(claudeResellerHosts, o.host) && + reasoning.ClaudeThinkingObjectRoute(model) } func (o *LLM) sendsBudgetInsteadOfEffort(model string, opts llms.CallOptions, tokens int) bool { @@ -607,6 +601,9 @@ func (o *LLM) setReasoningOff(req *openaiclient.ChatRequest, opts llms.CallOptio thinkingOff := false req.EnableThinking = &thinkingOff case reasoning.OffDisableThinkingObject: + if reasoning.ClaudeThinkingDefaultsOn(model) && !o.sendsClaudeThinkingObject(model) { + return &reasoning.ErrReasoningOffUnsupported{Model: model} + } req.Thinking = &openaiclient.ThinkingOptions{Type: "disabled"} } return nil diff --git a/llms/reasoning/claude_capability.go b/llms/reasoning/claude_capability.go index e1334c5a6..c72a11cf3 100644 --- a/llms/reasoning/claude_capability.go +++ b/llms/reasoning/claude_capability.go @@ -108,6 +108,16 @@ func ClaudeThinkingDefaultsOn(model string) bool { return containsAny(canonicalClaude(model), defaultOnClaude) } +var claudeThinkingObjectRoutes = []string{"anthropic", "bedrock", "vertex_ai"} + +// ClaudeThinkingObjectRoute reports whether a Claude name on an OpenAI-shaped +// door is bare or carries a LiteLLM route that passes Anthropic's thinking +// object on to a vendor that documents it. +func ClaudeThinkingObjectRoute(model string) bool { + route, _, prefixed := strings.Cut(model, "/") + return !prefixed || slices.Contains(claudeThinkingObjectRoutes, route) +} + // claudeEffortsByKind lists the effort levels each generation accepts. var claudeEffortsByKind = map[ClaudeReasoningKind][]string{ ClaudeReasoningAdaptiveOnly: {"low", "medium", "high", "xhigh", "max"}, diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 8cec1efa0..531ac9083 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -68,6 +68,9 @@ func ResolveOff(model string, p Provider) OffWire { return OffUnsupported // Fable 5 / Mythos 5: thinking cannot be disabled case ClaudeThinkingDefaultsOn(model): if p == ProviderOpenAI { + if !ClaudeThinkingObjectRoute(model) { + return OffUnsupported + } return OffDisableThinkingObject } return OffDisableClaude diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index df3ebf64c..11614e84f 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -15,6 +15,13 @@ func TestResolveOff(t *testing.T) { {"us.anthropic.claude-sonnet-5", ProviderBedrock, OffDisableClaude}, {"anthropic/claude-sonnet-5", ProviderOpenAI, OffDisableThinkingObject}, {"anthropic/claude-opus-5", ProviderOpenAI, OffDisableThinkingObject}, + {"claude-sonnet-5", ProviderOpenAI, OffDisableThinkingObject}, + {"bedrock/us.anthropic.claude-sonnet-5", ProviderOpenAI, OffDisableThinkingObject}, + {"vertex_ai/claude-opus-5", ProviderOpenAI, OffDisableThinkingObject}, + {"deepinfra/anthropic/claude-opus-5", ProviderOpenAI, OffUnsupported}, + {"perplexity/anthropic/claude-sonnet-5", ProviderOpenAI, OffUnsupported}, + {"openrouter/anthropic/claude-sonnet-5", ProviderOpenAI, OffUnsupported}, + {"azure_ai/claude-opus-5", ProviderOpenAI, OffUnsupported}, {"anthropic/claude-fable-5", ProviderOpenAI, OffUnsupported}, {"anthropic/claude-opus-4-8", ProviderOpenAI, OffOmit}, {"claude-opus-5", ProviderAnthropic, OffDisableClaude}, diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index af52f2521..b4d8974f2 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -83,6 +83,8 @@ func TestReasoningSupportFor(t *testing.T) { //nolint:funlen // table-driven tes eq(t, "CannotDisable(Bedrock)", bedrock.CannotDisable, false) gateway := ReasoningSupportFor("anthropic/claude-sonnet-5", reasoning.ProviderOpenAI) eq(t, "CannotDisable(OpenAI gateway)", gateway.CannotDisable, false) + reseller := ReasoningSupportFor("deepinfra/anthropic/claude-sonnet-5", reasoning.ProviderOpenAI) + eq(t, "CannotDisable(a gateway route that takes no thinking object)", reseller.CannotDisable, true) }) t.Run("Opus 5 defaults on but is disablable, like Sonnet 5 unlike Opus 4.8", func(t *testing.T) { From 0bd22a3e377051080d7ada3bb7e5b9dae317c13b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:18:15 +0300 Subject: [PATCH 587/618] fix(openai): send Anthropic's thinking object only to hosts outside the public provider list The host check for the adaptive, budget and disable thinking objects denied three hosts: api.deepinfra.com, api.perplexity.ai and openrouter.ai. Any other public aggregator that spells Claude as anthropic/ still got the object. ZenMux and Vercel AI Gateway are two of them. Neither documents a top-level thinking field on Chat Completions: ZenMux lists reasoning_effort and a reasoning object (https://zenmux.ai/docs/api/openai/create-chat-completion.html), and Vercel says to "Configure that with the reasoning object" (https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning). The check now allows the object on any host that APIKeyRequiredBaseURLs does not list. That covers a self-hosted LiteLLM and api.anthropic.com. The host part of RequiresAPIKey becomes publicProviderHost, and the door and the key check share it. Checked: ZenMux and Vercel rows added to the adaptive, budget and off host tests were red under the three-host list and are green now. Co-Authored-By: Claude Opus 5 --- llms/openai/apikey.go | 5 ++++- llms/openai/claude_adaptive_thinking_test.go | 2 ++ llms/openai/claude_thinking_budget_test.go | 2 ++ llms/openai/claude_thinking_off_route_test.go | 2 ++ llms/openai/openaillm.go | 4 +--- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/llms/openai/apikey.go b/llms/openai/apikey.go index 57d8ab8b9..38fac67c7 100644 --- a/llms/openai/apikey.go +++ b/llms/openai/apikey.go @@ -117,7 +117,10 @@ func RequiresAPIKey(baseURL string, apiType APIType) bool { if strings.TrimSpace(baseURL) == "" { return true } - host := hostnameFromURL(baseURL) + return publicProviderHost(hostnameFromURL(baseURL)) +} + +func publicProviderHost(host string) bool { if host == "" { return false } diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go index e2f01fc6b..cff07314b 100644 --- a/llms/openai/claude_adaptive_thinking_test.go +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -41,6 +41,8 @@ func TestDelegatedAdaptiveIsReportedWhereTheHostDocumentsNoThinkingObject(t *tes "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-opus-4-8"}, "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-opus-4-7"}, "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-4.6"}, + "ZenMux": {"http://zenmux.ai/api/v1", "anthropic/claude-opus-4.8"}, + "Vercel AI Gateway": {"http://ai-gateway.vercel.sh/v1", "anthropic/claude-opus-4.8"}, } { t.Run(name, func(t *testing.T) { t.Parallel() diff --git a/llms/openai/claude_thinking_budget_test.go b/llms/openai/claude_thinking_budget_test.go index d5148d44f..4b54bb652 100644 --- a/llms/openai/claude_thinking_budget_test.go +++ b/llms/openai/claude_thinking_budget_test.go @@ -93,6 +93,8 @@ func TestAClaudeBudgetStaysOffHostsThatDocumentNoThinkingObject(t *testing.T) { "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-sonnet-4-6"}, "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-sonnet-4-5"}, "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-4.5"}, + "ZenMux": {"http://zenmux.ai/api/v1", "anthropic/claude-sonnet-4.6"}, + "Vercel AI Gateway": {"http://ai-gateway.vercel.sh/v1", "anthropic/claude-sonnet-4.5"}, } { t.Run(name, func(t *testing.T) { t.Parallel() diff --git a/llms/openai/claude_thinking_off_route_test.go b/llms/openai/claude_thinking_off_route_test.go index 77957fb6f..f6ae7b0c4 100644 --- a/llms/openai/claude_thinking_off_route_test.go +++ b/llms/openai/claude_thinking_off_route_test.go @@ -26,6 +26,8 @@ func TestTurningOffClaudeIsRefusedWhereTheHostDocumentsNoThinkingObject(t *testi "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-opus-5", nil}, "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-sonnet-5", nil}, "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-5", nil}, + "ZenMux": {"http://zenmux.ai/api/v1", "anthropic/claude-opus-5", nil}, + "Vercel AI Gateway": {"http://ai-gateway.vercel.sh/v1", "anthropic/claude-sonnet-5", nil}, "the reasoning object format": { gatewayBaseURL, "anthropic/claude-sonnet-5", []Option{WithModernReasoningFormat()}, }, diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 2e8324714..9491f52d3 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -531,11 +531,9 @@ func (o *LLM) sendsClaudeAdaptive(model string) bool { const anthropicAPIHost = "api.anthropic.com" -var claudeResellerHosts = []string{"api.deepinfra.com", "api.perplexity.ai", "openrouter.ai"} - func (o *LLM) sendsClaudeThinkingObject(model string) bool { return !o.client.ModernReasoningFormat && - !slices.Contains(claudeResellerHosts, o.host) && + !publicProviderHost(o.host) && reasoning.ClaudeThinkingObjectRoute(model) } From b8ea0447aceb2277b92ab3af3039d1e18ee40c7c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:18:47 +0300 Subject: [PATCH 588/618] test(openai): pin the Claude thinking object route list as an allow-list The only gateway routes the adaptive host test rejected were the three listed hosts' own routes: deepinfra/, perplexity/ and openrouter/. A route list that denied just those three passed every door test, and it would send the object to azure_ai/, together_ai/ and every other LiteLLM route. The azure_ai/ and together_ai/ rows fail under that deny-list mutation and pass with the allow-list. Co-Authored-By: Claude Opus 5 --- llms/openai/claude_adaptive_thinking_test.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/llms/openai/claude_adaptive_thinking_test.go b/llms/openai/claude_adaptive_thinking_test.go index cff07314b..8cc5ca97d 100644 --- a/llms/openai/claude_adaptive_thinking_test.go +++ b/llms/openai/claude_adaptive_thinking_test.go @@ -35,14 +35,16 @@ func TestDelegatedAdaptiveIsReportedWhereTheHostDocumentsNoThinkingObject(t *tes t.Parallel() for name, tc := range map[string]struct{ baseURL, model string }{ - "the gateway's deepinfra route": {gatewayBaseURL, "deepinfra/anthropic/claude-opus-4-8"}, - "the gateway's perplexity route": {gatewayBaseURL, "perplexity/anthropic/claude-sonnet-4-6"}, - "the gateway's openrouter route": {gatewayBaseURL, "openrouter/anthropic/claude-opus-4.8"}, - "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-opus-4-8"}, - "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-opus-4-7"}, - "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-4.6"}, - "ZenMux": {"http://zenmux.ai/api/v1", "anthropic/claude-opus-4.8"}, - "Vercel AI Gateway": {"http://ai-gateway.vercel.sh/v1", "anthropic/claude-opus-4.8"}, + "the gateway's deepinfra route": {gatewayBaseURL, "deepinfra/anthropic/claude-opus-4-8"}, + "the gateway's perplexity route": {gatewayBaseURL, "perplexity/anthropic/claude-sonnet-4-6"}, + "the gateway's openrouter route": {gatewayBaseURL, "openrouter/anthropic/claude-opus-4.8"}, + "the gateway's azure_ai route": {gatewayBaseURL, "azure_ai/claude-opus-4-8"}, + "the gateway's together_ai route": {gatewayBaseURL, "together_ai/anthropic/claude-opus-4-8"}, + "DeepInfra": {"http://api.deepinfra.com/v1/openai", "anthropic/claude-opus-4-8"}, + "Perplexity": {"http://api.perplexity.ai", "anthropic/claude-opus-4-7"}, + "OpenRouter": {"http://openrouter.ai/api/v1", "anthropic/claude-sonnet-4.6"}, + "ZenMux": {"http://zenmux.ai/api/v1", "anthropic/claude-opus-4.8"}, + "Vercel AI Gateway": {"http://ai-gateway.vercel.sh/v1", "anthropic/claude-opus-4.8"}, } { t.Run(name, func(t *testing.T) { t.Parallel() From 73a1618beb1bcedc51fb3c7a9e9511cff306b4c4 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 18:22:59 +0300 Subject: [PATCH 589/618] fix(openai): hold a client-level json_object to the JSON-mode model rule WithJSONMode already leaves json_object off Claude and off MiniMax's M-series API and reports the drop, but a client-level WithResponseFormat(ResponseFormatJSON) was applied afterwards with no model check. openai.New(WithModel("anthropic/claude-sonnet-5"), WithResponseFormat(ResponseFormatJSON)) still put {"type":"json_object"} on the wire with no warning, the same silent non-enforcement the per-call flag no longer has, and MiniMax-M2.7 got a field its chat completions schema lacks. The client-level format now goes through the same model rule: a json_object for a model that takes none stays off the wire and a drop warning names WithResponseFormat. Other formats, such as a client json_schema, and other models are sent as before. TestClientJSONFormatFollowsTheJSONModeModelRule fails before the fix with json_object on the wire and no warning. Dropping the warning, dropping the format on every model, dropping it regardless of type, removing the Claude or the MiniMax case, or sending the format anyway each fails it. Through the library on the gateway /v1, anthropic/claude-sonnet-5 goes out without response_format and carries the drop warning, while openai/gpt-4.1-mini keeps json_object. Co-Authored-By: Claude Opus 5 --- llms/openai/claude_json_mode_test.go | 40 ++++++++++++++++++++++++++++ llms/openai/openaillm.go | 5 +--- llms/openai/structured_output.go | 35 +++++++++++++++++++----- 3 files changed, 69 insertions(+), 11 deletions(-) diff --git a/llms/openai/claude_json_mode_test.go b/llms/openai/claude_json_mode_test.go index e07f1e94d..f3de9d5a0 100644 --- a/llms/openai/claude_json_mode_test.go +++ b/llms/openai/claude_json_mode_test.go @@ -48,3 +48,43 @@ func TestASchemaForClaudeIsNotReportedAsALostJSONMode(t *testing.T) { } } } + +func TestClientJSONFormatFollowsTheJSONModeModelRule(t *testing.T) { + t.Parallel() + + client := []Option{WithResponseFormat(ResponseFormatJSON)} + for _, model := range []string{ + "anthropic/claude-sonnet-5", "claude-haiku-4-5", "us.anthropic.claude-opus-4-6-v1:0", + "MiniMax-M3", "minimax/MiniMax-M3", "MiniMax-M2.7", + } { + resp, sent := sendForWarningsWith(t, model, client) + if rf, ok := sent["response_format"]; ok { + t.Errorf("%s: the vendor takes no json_object for this model, got response_format %v", model, rf) + } + w := warningFor(t, resp, "WithResponseFormat") + if w.Kind != llms.WarningDrop || w.Asked != "json_object" || w.Sent != "" || w.Model != model { + t.Errorf("%s: response-format warning = %+v", model, w) + } + } + + for _, model := range []string{"gpt-4o", "openrouter/minimax/minimax-m3"} { + resp, sent := sendForWarningsWith(t, model, client) + if rf, _ := sent["response_format"].(map[string]any); rf["type"] != "json_object" { + t.Errorf("%s: want json_object on the wire, got %v", model, sent["response_format"]) + } + if len(resp.Warnings) != 0 { + t.Errorf("%s: the format reached the wire, got %v", model, resp.Warnings) + } + } + + schema := &ResponseFormat{Type: "json_schema", JSONSchema: &ResponseFormatJSONSchema{ + Name: "s", Strict: true, Schema: &ResponseFormatJSONSchemaProperty{Type: "object"}, + }} + resp, sent := sendForWarningsWith(t, "anthropic/claude-sonnet-5", []Option{WithResponseFormat(schema)}) + if rf, _ := sent["response_format"].(map[string]any); rf["type"] != "json_schema" { + t.Errorf("a schema is not json_object, want it on the wire, got %v", sent["response_format"]) + } + if len(resp.Warnings) != 0 { + t.Errorf("the schema reached the wire, got %v", resp.Warnings) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index 9491f52d3..a71451aae 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -331,10 +331,7 @@ func (o *LLM) createChatRequest( return nil, err } - // set response format from client if available - if o.client.ResponseFormat != nil { - req.SetResponseFormat(o.client.ResponseFormat) - } + setClientResponseFormat(req, model, o.client.ResponseFormat, warn) // per-call schema-constrained structured output takes precedence over JSONMode // and conflicts with a client-level response format. diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index 86889a0dc..440f065d0 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -33,17 +33,22 @@ func (e *ErrStructuredOutputRefusal) Error() string { return fmt.Sprintf("openai structured output: model refused (model=%s choice=%d): %s", e.Model, e.Choice, e.Refusal) } +func noJSONObjectReason(model string) string { + switch { + case reasoning.TakesNoResponseFormat(model): + return takesNoResponseFormat + case reasoning.TakesNoJSONObject(model): + return "the vendor has no json_object response format for this model" + } + return "" +} + func setJSONMode(req *openaiclient.ChatRequest, model string, opts llms.CallOptions, warn *llms.Warnings) { if !opts.GetJSONMode() { return } - var reason string - switch { - case reasoning.TakesNoResponseFormat(model): - reason = takesNoResponseFormat - case reasoning.TakesNoJSONObject(model): - reason = "the vendor has no json_object response format for this model" - default: + reason := noJSONObjectReason(model) + if reason == "" { req.SetResponseFormat(ResponseFormatJSON) return } @@ -55,6 +60,22 @@ func setJSONMode(req *openaiclient.ChatRequest, model string, opts llms.CallOpti } } +func setClientResponseFormat(req *openaiclient.ChatRequest, model string, rf *ResponseFormat, warn *llms.Warnings) { + if rf == nil { + return + } + if rf.Type == ResponseFormatJSON.Type { + if reason := noJSONObjectReason(model); reason != "" { + warn.Add(llms.Warning{ + Kind: llms.WarningDrop, Option: "WithResponseFormat", Model: model, + Asked: rf.Type, Reason: reason, + }) + return + } + } + req.SetResponseFormat(rf) +} + // setStructuredOutput translates a per-call llms.StructuredOutput into OpenAI's // json_schema response format with strict:true. It takes precedence over the // schema-less JSONMode json_object and returns a typed conflict against a From 200f1a6bef39ce811f1b9add553250921f099730 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Thu, 17 Sep 2026 19:12:51 +0300 Subject: [PATCH 590/618] fix(bedrock): refuse structured output on models whose AWS model card does not list it A Test of a Bedrock provider with Simple Json on us.amazon.nova-pro-v1:0 failed "Structured Output With JSON Schema" with a 400 the gateway surfaced as UnknownError. Sent straight to AWS with the same request, Converse answers: "This model doesn't support the outputConfig field. Remove outputConfig and try again." The Converse door checked only Claude against a list and passed every other family's schema to the wire. AWS model cards state structured outputs per model for the bedrock-runtime endpoint: Nova, Llama 3.x and 4, DeepSeek R1 and Qwen3 VL list it as not supported, while DeepSeek V3.x, GPT OSS, Qwen3, Mistral Large 3, GLM, Kimi, MiniMax and Nemotron list it as supported. The door now sends outputConfig only to a non-Claude model named on a supported card and returns ErrStructuredOutputUnsupported before the request for the rest, the same refusal Claude already had. Verified: the new converse test is red before the change on nova-pro (the mock is called) and green after; go test ./llms/bedrock/... ./llms/reasoning green. Refs PAGI-247 Co-Authored-By: Claude Opus 5 --- llms/bedrock/README.md | 20 ++++++---- .../bedrockclient/bedrockclient_util.go | 15 +++++-- .../bedrockclient/bedrockclient_util_test.go | 38 ++++++++++++++++++ llms/reasoning/bedrock_capability.go | 39 +++++++++++++++++++ 4 files changed, 101 insertions(+), 11 deletions(-) diff --git a/llms/bedrock/README.md b/llms/bedrock/README.md index a54bccbfb..8c1ada230 100644 --- a/llms/bedrock/README.md +++ b/llms/bedrock/README.md @@ -249,7 +249,11 @@ Fable, Mythos, GPT OSS or DeepSeek R1. The provider-neutral `llms.WithStructuredOutput` is supported on both API paths for the Claude models Bedrock serves it for — Opus 4.6 and 4.5, Sonnet 4.6 and 4.5, Haiku 4.5; any other Claude model returns a typed `ErrStructuredOutputUnsupported` before -the request. The final response is guaranteed to be a single JSON value +the request. On the Converse API the other families get it only where their AWS model +card lists structured outputs — among them DeepSeek V3.1 and V3.2, GPT OSS, Qwen3, +Mistral Large 3, GLM, Kimi, MiniMax and Nemotron. Nova, Llama and every model whose +card is silent return the same typed error. The final response is guaranteed to be a +single JSON value matching the supplied JSON Schema (Draft 2020-12), validated locally against the original schema. @@ -271,7 +275,7 @@ resp, err := llm.GenerateContent(ctx, messages, **Requirements and behavior**: - Every object node must set `additionalProperties: false` — Bedrock rejects a schema that omits it. The SDK enforces this locally with a typed `ErrStructuredOutputConfig` before the request is sent. -- Only Anthropic models are supported on the legacy path; a non-Anthropic legacy model returns a typed unsupported-path error. Converse is not restricted to Claude — any model AWS advertises as supporting Structured Outputs works. +- Only Anthropic models are supported on the legacy path; a non-Anthropic legacy model returns a typed unsupported-path error. Converse is not restricted to Claude — a model whose AWS model card lists Structured Outputs gets it; any other returns the typed unsupported error. - Only the final normal turn (`end_turn`/`stop_sequence`) is validated; a `tool_use`/`max_tokens`/guardrail/filtered turn is not treated as final JSON. - The response `StopReason` is surfaced on `ContentChoice.StopReason` (Converse now transfers it from the response/`MessageStopEvent`). @@ -806,12 +810,12 @@ model IDs. | Claude Sonnet 5 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | Claude Sonnet 4.6/4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Claude Haiku 4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| Nova 2 Lite | ✅ | ✅ | ✅ | ✅ | ❌ | Converse native* | -| Nova 2 Pro/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | -| Nova Pro/Lite/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | Converse native* | -| Llama 4 / 3.x | Limited | ❌ | ✅ | ✅ | ❌ | Converse native* | +| Nova 2 Lite | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | +| Nova 2 Pro/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | +| Nova Pro/Lite/Micro | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | +| Llama 4 / 3.x | Limited | ❌ | ✅ | ✅ | ❌ | ❌ | | DeepSeek V3.2 | ✅ | ❌ | ✅ | ❌ | ❌ | Converse native* | -| DeepSeek R1 | ❌ | ✅ (always-on) | ✅ | ❌ | ❌ | Converse native* | +| DeepSeek R1 | ❌ | ✅ (always-on) | ✅ | ❌ | ❌ | ❌ | | OpenAI GPT (OSS) | ✅ | ✅ | ✅ | ❌ | ❌ | Converse native* | | Qwen3 | Varies** | ❌ | ✅ | Some | ❌ | Converse native* | | Mistral | ✅*** | ❌ | ✅ | Some | ❌ | Converse native* | @@ -820,7 +824,7 @@ model IDs. | GLM-4.7/4.7-Flash/5 | ❌***** | ❌ | ✅ | ❌ | ❌ | Converse native* | | NVIDIA Nemotron 3 Super | ✅ | ❌****** | ✅ | ❌ | ❌ | Converse native* | -*Converse native: structured output is passed via AWS `OutputConfig.TextFormat`; support depends on what AWS advertises for the model at the time. The legacy InvokeModel structured-output path is implemented for Anthropic only. +*Converse native: structured output is passed via AWS `OutputConfig.TextFormat`; only for the models whose AWS model card lists Structured Outputs. The legacy InvokeModel structured-output path is implemented for Anthropic only. **Qwen3: Most models support tools, except Qwen3-VL (unstable in streaming) ***Mistral: Large 3 and Large 2402 support tools, Magistral Small 2509 does not ****Moonshot: K2.5 supports tools, K2-Thinking is unstable in streaming diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go index 08e49aa69..ce5621970 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util.go @@ -99,8 +99,7 @@ func isSimpleType(t reflect.Type) bool { } // applyConverseStructuredOutput sets the native Converse OutputConfig.TextFormat -// from a per-call schema. Only Claude is checked against a local list; other -// families go to the provider as asked. +// from a per-call schema. func applyConverseStructuredOutput(input *ConverseInput, converseInput *bedrockruntime.ConverseInput) error { so := input.StructuredOutput if so == nil { @@ -113,6 +112,13 @@ func applyConverseStructuredOutput(input *ConverseInput, converseInput *bedrockr Reason: bedrockClaudeStructuredOutputReason, } } + if !isAnthropicModelID(input.ModelID) && !reasoning.BedrockSupportsStructuredOutput(input.ModelID) { + return &llms.ErrStructuredOutputUnsupported{ + Provider: providerBedrock, + Model: input.ModelID, + Reason: bedrockModelCardStructuredOutputReason, + } + } // Bedrock rejects an object schema that omits additionalProperties:false; // surface that documented, locally-detectable requirement as a typed error. if err := structuredoutput.RequireClosedObjects(so.Schema); err != nil { @@ -133,7 +139,10 @@ func applyConverseStructuredOutput(input *ConverseInput, converseInput *bedrockr return nil } -const bedrockClaudeStructuredOutputReason = "Amazon Bedrock serves structured output for this Claude model on neither API" +const ( + bedrockClaudeStructuredOutputReason = "Amazon Bedrock serves structured output for this Claude model on neither API" + bedrockModelCardStructuredOutputReason = "the model's Amazon Bedrock model card does not list structured outputs" +) // applyAnthropicStructuredOutput folds a per-call schema into the legacy Anthropic // output_config.format, preserving any effort already set. diff --git a/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go b/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go index 537db8da0..eaa076c5e 100644 --- a/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go +++ b/llms/bedrock/internal/bedrockclient/bedrockclient_util_test.go @@ -353,6 +353,44 @@ func TestConverse_StructuredOutput_FollowsBedrocksClaudeList(t *testing.T) { } } +func TestConverse_StructuredOutput_FollowsTheModelCards(t *testing.T) { + for _, model := range []string{ + "us.amazon.nova-pro-v1:0", "us.amazon.nova-2-lite-v1:0", "us.meta.llama3-3-70b-instruct-v1:0", + "us.meta.llama4-maverick-17b-instruct-v1:0", "us.deepseek.r1-v1:0", "qwen.qwen3-vl-235b-a22b", + "mistral.mistral-large-2402-v1:0", + } { + mockClient := &MockBedrockRuntimeClient{} + _, err := NewConverseClient(mockClient).CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + StructuredOutput: soConfig(), + }) + var unsup *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsup, model) + mockClient.AssertNotCalled(t, "Converse") + } + + for _, model := range []string{ + "deepseek.v3.2", "qwen.qwen3-coder-next", "us-gov.nvidia.nemotron-nano-3-30b", + "mistral.mistral-large-3-675b-instruct", "zai.glm-5", + } { + mockClient := &MockBedrockRuntimeClient{} + var captured *bedrockruntime.ConverseInput + mockClient.On("Converse", mock.Anything, mock.MatchedBy(func(in *bedrockruntime.ConverseInput) bool { + captured = in + return true + }), mock.Anything).Return(textOutput(`{"answer":"ok"}`, types.StopReasonEndTurn), nil) + + _, err := NewConverseClient(mockClient).CreateCompletionConverse(t.Context(), &ConverseInput{ + ModelID: model, + Messages: []Message{{Role: llms.ChatMessageTypeHuman, Content: "hi", Type: "text"}}, + StructuredOutput: soConfig(), + }) + require.NoError(t, err, model) + require.NotNil(t, captured.OutputConfig, model) + } +} + func TestLegacyAnthropic_StructuredOutput_FollowsBedrocksClaudeList(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index 536be3af5..d88b557d9 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -46,6 +46,45 @@ func IsBedrockNonReasoningModel(model string) bool { var bedrockNonReasoningModels = []string{"zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5"} +// BedrockSupportsStructuredOutput reports whether the AWS model card of a +// non-Claude Bedrock model lists structured outputs for the bedrock-runtime +// endpoint. Claude follows ClaudeSupportsStructuredOutputOnBedrock. +func BedrockSupportsStructuredOutput(model string) bool { + return slices.Contains(bedrockStructuredOutputModels, bedrockModelWithoutRegion(model)) +} + +var bedrockStructuredOutputModels = []string{ + "deepseek.v3-v1:0", "deepseek.v3.1", "deepseek.v3.2", + "google.gemma-3-12b-it", "google.gemma-3-27b-it", + "minimax.minimax-m2", "minimax.minimax-m2.1", "minimax.minimax-m2.5", + "mistral.devstral-2-123b", "mistral.magistral-small-2509", "mistral.ministral-3-14b-instruct", + "mistral.ministral-3-8b-instruct", "mistral.ministral-3-3b-instruct", "mistral.mistral-large-3-675b-instruct", + "mistral.voxtral-mini-3b-2507", "mistral.voxtral-small-24b-2507", + "moonshot.kimi-k2-thinking", "moonshotai.kimi-k2-thinking", "moonshotai.kimi-k2.5", + "nvidia.nemotron-nano-12b-v2", "nvidia.nemotron-nano-3-30b", "nvidia.nemotron-nano-9b-v2", + "nvidia.nemotron-super-3-120b", + "openai.gpt-5.6-luna", "openai.gpt-oss-120b", "openai.gpt-oss-120b-1:0", "openai.gpt-oss-20b", + "openai.gpt-oss-20b-1:0", "openai.gpt-oss-safeguard-120b", "openai.gpt-oss-safeguard-20b", + "qwen.qwen3-235b-a22b-2507", "qwen.qwen3-235b-a22b-2507-v1:0", "qwen.qwen3-32b", "qwen.qwen3-32b-v1:0", + "qwen.qwen3-coder-30b-a3b-instruct", "qwen.qwen3-coder-30b-a3b-v1:0", "qwen.qwen3-coder-480b-a35b-instruct", + "qwen.qwen3-coder-480b-a35b-v1:0", "qwen.qwen3-coder-next", "qwen.qwen3-next-80b-a3b", + "qwen.qwen3-next-80b-a3b-instruct", + "writer.palmyra-vision-7b", + "zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5", +} + +var bedrockRegionPrefixes = []string{"us-gov.", "apac.", "global.", "us.", "eu.", "au.", "jp.", "in.", "ca."} + +func bedrockModelWithoutRegion(model string) string { + base := baseModelName(model) + for _, prefix := range bedrockRegionPrefixes { + if trimmed, found := strings.CutPrefix(base, prefix); found { + return trimmed + } + } + return base +} + // IsGptOssModel reports whether the Bedrock model is one of OpenAI's gpt-oss models. func IsGptOssModel(model string) bool { base := baseModelName(model) From c21b34bd88e654f05b03395995c7752f9a248e0e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 18 Sep 2026 01:48:49 +0300 Subject: [PATCH 591/618] test(chains): pin the model the cassettes record The package built its OpenAI client without a model, so every replay leaned on DefaultChatModel. When that default moved to gpt-5.4-mini the thirteen cassettes in chains/testdata stopped matching and the package failed deterministically, with a key and without one. Pin gpt-4.1-nano, the model the cassettes carry, the way agents, embeddings and vectorstores already do. PAGI-125 Co-Authored-By: Claude Opus 5 --- chains/constitutional_test.go | 1 + chains/conversation_test.go | 2 ++ chains/llm_math_test.go | 1 + chains/llm_test.go | 2 +- chains/question_answering_test.go | 1 + chains/retrieval_qa_test.go | 1 + chains/stuff_documents_test.go | 1 + chains/summarization_test.go | 1 + 8 files changed, 9 insertions(+), 1 deletion(-) diff --git a/chains/constitutional_test.go b/chains/constitutional_test.go index 44556c5da..fb7f2d21c 100644 --- a/chains/constitutional_test.go +++ b/chains/constitutional_test.go @@ -48,6 +48,7 @@ func TestConstitutionalChainBasic(t *testing.T) { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } diff --git a/chains/conversation_test.go b/chains/conversation_test.go index dd82094c8..14a3af156 100644 --- a/chains/conversation_test.go +++ b/chains/conversation_test.go @@ -33,6 +33,7 @@ func TestConversation(t *testing.T) { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } @@ -113,6 +114,7 @@ func TestConversationWithChatLLM(t *testing.T) { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } diff --git a/chains/llm_math_test.go b/chains/llm_math_test.go index eaf3e187a..d9b1f26d9 100644 --- a/chains/llm_math_test.go +++ b/chains/llm_math_test.go @@ -22,6 +22,7 @@ func TestLLMMath(t *testing.T) { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } diff --git a/chains/llm_test.go b/chains/llm_test.go index 72d337b82..31027cc05 100644 --- a/chains/llm_test.go +++ b/chains/llm_test.go @@ -63,7 +63,7 @@ func TestLLMChain(t *testing.T) { } var opts []openai.Option - opts = append(opts, openai.WithHTTPClient(rr.Client())) + opts = append(opts, openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client())) // Use test token when replaying if rr.Replaying() { diff --git a/chains/question_answering_test.go b/chains/question_answering_test.go index 770ac2bfb..63ae4fa39 100644 --- a/chains/question_answering_test.go +++ b/chains/question_answering_test.go @@ -24,6 +24,7 @@ func createOpenAILLMForQA(t *testing.T) *openai.LLM { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } diff --git a/chains/retrieval_qa_test.go b/chains/retrieval_qa_test.go index dedb75277..4a9359e6a 100644 --- a/chains/retrieval_qa_test.go +++ b/chains/retrieval_qa_test.go @@ -37,6 +37,7 @@ func createOpenAILLMForRetrieval(t *testing.T) *openai.LLM { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } diff --git a/chains/stuff_documents_test.go b/chains/stuff_documents_test.go index 3b0f22c54..79d446b17 100644 --- a/chains/stuff_documents_test.go +++ b/chains/stuff_documents_test.go @@ -25,6 +25,7 @@ func TestStuffDocuments(t *testing.T) { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } diff --git a/chains/summarization_test.go b/chains/summarization_test.go index 7626c05cb..16d0fcedf 100644 --- a/chains/summarization_test.go +++ b/chains/summarization_test.go @@ -43,6 +43,7 @@ func createOpenAILLMForTest(t *testing.T) *openai.LLM { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } From 4ea2c283375c435bc61509a54a33ddd7102e3e30 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 18 Sep 2026 02:28:07 +0300 Subject: [PATCH 592/618] fix(reasoning): the Bedrock non-reasoning verdict reads the inference profile too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IsBedrockNonReasoningModel compared the bare id, so zai.glm-5 was classified as a model that does not reason while us.zai.glm-5 — the same model behind an inference profile — was not, and the hint went on offering thinking controls for it. Strip the region prefix the way BedrockSupportsStructuredOutput next to it already does. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 2 +- llms/reasoning_support_test.go | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index d88b557d9..f52c4d049 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -41,7 +41,7 @@ func IsBedrockAlwaysReasoningModel(model string) bool { // bedrockNonReasoningModels: Bedrock models whose AWS model card lists neither // reasoning support nor a request field that controls it. func IsBedrockNonReasoningModel(model string) bool { - return slices.Contains(bedrockNonReasoningModels, baseModelName(model)) + return slices.Contains(bedrockNonReasoningModels, bedrockModelWithoutRegion(model)) } var bedrockNonReasoningModels = []string{"zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5"} diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index b4d8974f2..7d2a58629 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -720,7 +720,10 @@ func TestTheOllamaHintOffersGPTOSSTheLevelsOllamaDocuments(t *testing.T) { func TestTheBedrockHintPresentsNoReasoningWhereTheConverseDoorHasNone(t *testing.T) { t.Parallel() - for _, model := range []string{"zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5"} { + for _, model := range []string{ + "zai.glm-4.7", "zai.glm-4.7-flash", "zai.glm-5", + "us.zai.glm-5", "eu.zai.glm-4.7", "apac.zai.glm-4.7-flash", + } { t.Run(model, func(t *testing.T) { t.Parallel() From cf6e06bd8bf734640aaa26c9d94a69e2f964ad98 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 18 Sep 2026 03:13:43 +0300 Subject: [PATCH 593/618] feat(reasoning): carry GPT-6 Astra by its model card MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The card lists reasoning effort low, medium, high, xhigh and max, and the reasoning guide answers HTTP 400 to none, so the model is classified as one whose thinking cannot be turned off: an explicit disable now fails before the request instead of travelling as a silently omitted field. The changelog rules out custom temperature, top_p and logprobs, which the door already strips once the model is classified. Chat completions serves no function tools for it — "Chat Completions does not support function calling with GPT-6 Astra" — so a request carrying tools is refused locally with a typed error that points at the responses API, instead of reaching the vendor for a 400. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/openai/gpt6_astra_test.go | 85 +++++++++++++++++++++++++++++ llms/openai/openaillm.go | 6 ++ llms/reasoning/openai_capability.go | 29 ++++++++++ llms/reasoning/reasoning.go | 1 + llms/reasoning_support_test.go | 22 ++++++++ 5 files changed, 143 insertions(+) create mode 100644 llms/openai/gpt6_astra_test.go diff --git a/llms/openai/gpt6_astra_test.go b/llms/openai/gpt6_astra_test.go new file mode 100644 index 000000000..90b9e3e4f --- /dev/null +++ b/llms/openai/gpt6_astra_test.go @@ -0,0 +1,85 @@ +package openai + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +func astraTool() llms.Tool { + return llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "lookup", + Parameters: map[string]any{"type": "object", "properties": map[string]any{}}, + }} +} + +func TestAstraRefusesFunctionToolsBeforeTheNetwork(t *testing.T) { + t.Parallel() + + _, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithTools([]llms.Tool{astraTool()})) + require.Error(t, err) + + var unsupported *reasoning.ErrChatToolsUnsupported + require.True(t, errors.As(err, &unsupported), "want ErrChatToolsUnsupported, got %v", err) + assert.Equal(t, "gpt-6-astra", unsupported.Model) +} + +func TestAstraRefusesAnExplicitDisableBeforeTheNetwork(t *testing.T) { + t.Parallel() + + _, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithReasoningDisabled()) + require.Error(t, err) + + var off *reasoning.ErrReasoningOffUnsupported + require.True(t, errors.As(err, &off), "want ErrReasoningOffUnsupported, got %v", err) +} + +func TestAstraKeepsTheCallersSamplingOffTheWire(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-6-astra", nil, + llms.WithTemperature(0.7), llms.WithTopP(0.4), llms.WithReasoning(llms.ReasoningHigh, 0)) + require.NoError(t, err) + + assert.NotContains(t, body, "temperature") + assert.NotContains(t, body, "top_p") + assert.Equal(t, "high", body["reasoning_effort"]) +} + +func TestAstraCarriesTheTopEffortsItsCardLists(t *testing.T) { + t.Parallel() + + for _, effort := range []llms.ReasoningEffort{llms.ReasoningXHigh, llms.ReasoningMax} { + t.Run(string(effort), func(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithReasoning(effort, 0)) + require.NoError(t, err) + assert.Equal(t, string(effort), body["reasoning_effort"]) + }) + } +} + +func TestAstraClampsAnEffortItsCardDoesNotList(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithReasoning(llms.ReasoningMinimal, 0)) + require.NoError(t, err) + + assert.Equal(t, "low", body["reasoning_effort"], + "the card lists low as the floor, so a lower ask travels as low") +} + +func TestAstraSendsTheOutputLimitAsMaxCompletionTokens(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithMaxTokens(256)) + require.NoError(t, err) + + assert.Contains(t, body, "max_completion_tokens") + assert.NotContains(t, body, "max_tokens") +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index a71451aae..bf80b455f 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -708,6 +708,12 @@ func isThinkingOnTheWire(wireEffort string) bool { // addToolsToRequest adds tools to the request from functions and tool definitions. func (o *LLM) addToolsToRequest(req *openaiclient.ChatRequest, opts llms.CallOptions) error { + if len(opts.Tools) > 0 || len(opts.Functions) > 0 { + if model := o.effectiveModel(opts); reasoning.ChatToolsUnsupported(model) { + return &reasoning.ErrChatToolsUnsupported{Model: model} + } + } + // add function-based tools (deprecated approach) for _, fn := range opts.Functions { req.Tools = append(req.Tools, openaiclient.Tool{ diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index f1049b7a9..f29f7eb86 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -1,6 +1,7 @@ package reasoning import ( + "fmt" "slices" "strings" ) @@ -87,6 +88,8 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"minimal", "low", "medium", "high"}} case hasGeneration(m, "gpt-5.1"): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high"}} + case hasGeneration(m, "gpt-6-astra"): + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh", "max"}} case openAIXHighCeiling(m): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} case nonOpenAILowHighMax(m): @@ -139,3 +142,29 @@ func OpenAIThinkingOptIn(model string) bool { // OpenAIDisableEffort turns thinking off on the wire. It is not llms.ReasoningNone, // which is the empty string and instead omits the field. const OpenAIDisableEffort = "none" + +// ChatToolsUnsupported reports whether the vendor serves no function tools for +// the model on /chat/completions. OpenAI states it for GPT-6 Astra: tools ride +// on the responses API only, and the model has no effort level that turns +// thinking off to trade for them. +func ChatToolsUnsupported(model string) bool { + for _, form := range modelSpellings(model) { + if hasGeneration(form, "gpt-6-astra") { + return true + } + } + return false +} + +// ErrChatToolsUnsupported reports a request that carries function tools for a +// model whose chat completions endpoint does not serve them. +type ErrChatToolsUnsupported struct { + Model string +} + +func (e *ErrChatToolsUnsupported) Error() string { + return fmt.Sprintf( + "model %q carries function tools on chat completions, where the vendor does not serve them; "+ + "the responses API is the only door for tools on this model", + e.Model) +} diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 0cac04e85..261b7f75a 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -310,6 +310,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // OpenAI reasoning models if strings.HasPrefix(modelLower, "gpt-5") || + hasGeneration(modelLower, "gpt-6-astra") || strings.HasPrefix(modelLower, "gpt-oss") || strings.HasPrefix(modelLower, "o1") || strings.HasPrefix(modelLower, "o3") || diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index 7d2a58629..d49ad5459 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -788,3 +788,25 @@ func TestTheBedrockHintDoesNotPresentOffForNemotronSuper(t *testing.T) { } } } + +func TestTheAstraHintOffersTheLevelsItsCardListsAndNoDisable(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-6-astra", "openai/gpt-6-astra"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + s := ReasoningSupportFor(model, reasoning.ProviderOpenAI) + if !s.Supported || !s.Known { + t.Errorf("%s = %+v, want a classified reasoning model: the card lists its effort levels", model, s) + } + if !s.CannotDisable { + t.Errorf("%s CannotDisable = false, want true: the vendor answers HTTP 400 to reasoning_effort none", model) + } + want := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh, ReasoningXHigh, ReasoningMax} + if !slices.Equal(s.Efforts, want) { + t.Errorf("%s efforts = %v, want %v as the model card lists them", model, s.Efforts, want) + } + }) + } +} From fa65c9183f7c6a1d0c9d1d15e59a8d39abeb5996 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 18 Sep 2026 04:53:01 +0300 Subject: [PATCH 594/618] fix(reasoning): GPT-6 Astra takes the four effort levels its endpoint accepts The model card lists low, medium, high, xhigh and max, but the vendor answers a live request carrying max with 400: "Unsupported value: 'reasoning_effort' does not support 'max' with this model. Supported values are: 'low', 'medium', 'high', and 'xhigh'." Measured on the vendor's own door. The catalogue follows the endpoint, so a caller asking for max now travels as xhigh instead of earning a 400. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/openai/gpt6_astra_test.go | 21 ++++++++++++--------- llms/reasoning/openai_capability.go | 2 +- llms/reasoning_support_test.go | 4 ++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/llms/openai/gpt6_astra_test.go b/llms/openai/gpt6_astra_test.go index 90b9e3e4f..526b748ca 100644 --- a/llms/openai/gpt6_astra_test.go +++ b/llms/openai/gpt6_astra_test.go @@ -50,18 +50,21 @@ func TestAstraKeepsTheCallersSamplingOffTheWire(t *testing.T) { assert.Equal(t, "high", body["reasoning_effort"]) } -func TestAstraCarriesTheTopEffortsItsCardLists(t *testing.T) { +func TestAstraCarriesTheTopEffortTheVendorAccepts(t *testing.T) { t.Parallel() - for _, effort := range []llms.ReasoningEffort{llms.ReasoningXHigh, llms.ReasoningMax} { - t.Run(string(effort), func(t *testing.T) { - t.Parallel() + body, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithReasoning(llms.ReasoningXHigh, 0)) + require.NoError(t, err) + assert.Equal(t, "xhigh", body["reasoning_effort"]) +} - body, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithReasoning(effort, 0)) - require.NoError(t, err) - assert.Equal(t, string(effort), body["reasoning_effort"]) - }) - } +func TestAstraClampsMaxTheVendorRefuses(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, "gpt-6-astra", nil, llms.WithReasoning(llms.ReasoningMax, 0)) + require.NoError(t, err) + assert.Equal(t, "xhigh", body["reasoning_effort"], + "the vendor answers 400 to max with this model and names low, medium, high and xhigh") } func TestAstraClampsAnEffortItsCardDoesNotList(t *testing.T) { diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index f29f7eb86..e7ab94efa 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -89,7 +89,7 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { case hasGeneration(m, "gpt-5.1"): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high"}} case hasGeneration(m, "gpt-6-astra"): - return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh", "max"}} + return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} case openAIXHighCeiling(m): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} case nonOpenAILowHighMax(m): diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index d49ad5459..c81c671fa 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -803,9 +803,9 @@ func TestTheAstraHintOffersTheLevelsItsCardListsAndNoDisable(t *testing.T) { if !s.CannotDisable { t.Errorf("%s CannotDisable = false, want true: the vendor answers HTTP 400 to reasoning_effort none", model) } - want := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh, ReasoningXHigh, ReasoningMax} + want := []ReasoningEffort{ReasoningLow, ReasoningMedium, ReasoningHigh, ReasoningXHigh} if !slices.Equal(s.Efforts, want) { - t.Errorf("%s efforts = %v, want %v as the model card lists them", model, s.Efforts, want) + t.Errorf("%s efforts = %v, want %v: the vendor refuses max with this model", model, s.Efforts, want) } }) } From 2edb2f9d11f5e7b1566985a4387c2c75160ade37 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 18 Sep 2026 10:42:47 +0300 Subject: [PATCH 595/618] fix(reasoning): GLM 5.3 keeps thinking under the spelling Mistral serves it by mandatoryThinking read only the dotted generation, so the same model arriving as zai-glm-5-3 or glm-5-3 resolved to OffOmit: an explicit disable left every reasoning field off the wire and the model went on thinking, unnoticed by the caller. A live call to the Mistral door carrying no reasoning field answers 200 with reasoning_content, so omission does not express "off" for this model; the caller now gets ErrReasoningOffUnsupported before the request leaves. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/off.go | 1 + llms/reasoning/off_test.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index 531ac9083..d3b5e470c 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -219,6 +219,7 @@ func takesOnlyOllamaLevels(model string) bool { func mandatoryThinking(model string) bool { for _, form := range modelSpellings(model) { if strings.HasPrefix(form, "glm-5.3") || + hasGeneration(form, "glm-5-3") || form == "grok-build-latest" || strings.HasPrefix(form, "grok-4.5") || strings.HasPrefix(form, "grok-4.6") || diff --git a/llms/reasoning/off_test.go b/llms/reasoning/off_test.go index 11614e84f..23a87763d 100644 --- a/llms/reasoning/off_test.go +++ b/llms/reasoning/off_test.go @@ -118,6 +118,19 @@ func TestGLMServedByMistralSpellsOffByOmission(t *testing.T) { } } +func TestGLM53IsRefusedUnderTheSpellingMistralServesItBy(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "glm-5.3", "glm-5.3-flash", "glm-5-3", "zai-glm-5-3", "mistral/zai-glm-5-3", "mistral/glm-5-3", + } { + if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { + t.Errorf("ResolveOff(%q, openai) = %v, want OffUnsupported: the model answers with "+ + "reasoning_content when no reasoning field is sent, so omitting the field is not \"off\"", model, got) + } + } +} + func TestAlwaysThinkingFamiliesAreRefusedOnBedrockToo(t *testing.T) { t.Parallel() From 405ffe25a618550380bf3b0edf62d76b66275643 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Fri, 18 Sep 2026 11:18:42 +0300 Subject: [PATCH 596/618] feat(bedrock): gpt-oss-safeguard takes the reasoning effort OpenAI documents for it The door recognised gpt-oss only by the two general-purpose ids, so a level the caller asked for on either safeguard model was dropped and the model ran at its default depth. OpenAI names the control for these models by its machine name - the safeguard user guide says the reasoning_effort parameter takes low, medium or high and defaults to medium, and both model cards, the technical report and the help centre repeat the three levels. Direct Converse calls through the library move the reasoning volume with the level: 120b answers 156 characters of reasoning at low against 469 at high, 20b 98 against 752, and neither refuses the field. No level turns thinking off, so an explicit disable stays a typed error before the network. The recorded Converse cassettes carry no safeguard request and are untouched. PAGI-125 Co-Authored-By: Claude Opus 5 --- llms/reasoning/bedrock_capability.go | 12 +++++++++++- llms/reasoning/bedrock_capability_test.go | 6 ++++-- llms/reasoning_support_test.go | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/bedrock_capability.go b/llms/reasoning/bedrock_capability.go index f52c4d049..eb7809e86 100644 --- a/llms/reasoning/bedrock_capability.go +++ b/llms/reasoning/bedrock_capability.go @@ -88,7 +88,17 @@ func bedrockModelWithoutRegion(model string) string { // IsGptOssModel reports whether the Bedrock model is one of OpenAI's gpt-oss models. func IsGptOssModel(model string) bool { base := baseModelName(model) - return strings.Contains(base, "openai.gpt-oss-120b") || strings.Contains(base, "openai.gpt-oss-20b") + for _, name := range gptOssBedrockNames { + if strings.Contains(base, name) { + return true + } + } + return false +} + +var gptOssBedrockNames = []string{ + "openai.gpt-oss-120b", "openai.gpt-oss-20b", + "openai.gpt-oss-safeguard-120b", "openai.gpt-oss-safeguard-20b", } var gptOssCaps = OpenAIReasoningCaps{Known: true, Efforts: []string{"low", "medium", "high"}} diff --git a/llms/reasoning/bedrock_capability_test.go b/llms/reasoning/bedrock_capability_test.go index 1a2cd764a..48760c0cc 100644 --- a/llms/reasoning/bedrock_capability_test.go +++ b/llms/reasoning/bedrock_capability_test.go @@ -73,13 +73,15 @@ func TestGrokEffortFollowsTheGeneration(t *testing.T) { } func TestGptOssIsRecognisedOnlyByItsBedrockNames(t *testing.T) { - for _, model := range []string{"openai.gpt-oss-120b-1:0", "openai.gpt-oss-20b-1:0"} { + for _, model := range []string{ + "openai.gpt-oss-120b-1:0", "openai.gpt-oss-20b-1:0", + "openai.gpt-oss-safeguard-120b", "openai.gpt-oss-safeguard-20b", + } { if !IsGptOssModel(model) { t.Errorf("%s is gpt-oss", model) } } for _, model := range []string{ - "openai.gpt-oss-safeguard-120b", "openai.gpt-oss-safeguard-20b", "gpt-oss-120b", "openai/gpt-oss-20b", "gpt-oss:120b", "us.amazon.nova-2-lite-v1:0", } { if IsGptOssModel(model) { diff --git a/llms/reasoning_support_test.go b/llms/reasoning_support_test.go index c81c671fa..aebece565 100644 --- a/llms/reasoning_support_test.go +++ b/llms/reasoning_support_test.go @@ -767,6 +767,28 @@ func TestTheBedrockHintPresentsNoReasoningWhereTheConverseDoorHasNone(t *testing } } +func TestTheSafeguardHintOffersTheLevelsOpenAIDocumentsForIt(t *testing.T) { + t.Parallel() + + for _, model := range []string{"openai.gpt-oss-safeguard-120b", "openai.gpt-oss-safeguard-20b"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + s := ReasoningSupportFor(model, reasoning.ProviderBedrock) + if !s.Supported || !s.Known { + t.Errorf("%s = %+v, want a classified reasoning model", model, s) + } + want := []ReasoningEffort{"low", "medium", "high"} + if !slices.Equal(s.Efforts, want) { + t.Errorf("%s Efforts = %v, want %v", model, s.Efforts, want) + } + if !s.CannotDisable { + t.Errorf("%s CannotDisable = false: the vendor documents no level that turns thinking off", model) + } + }) + } +} + func TestTheBedrockHintDoesNotPresentOffForNemotronSuper(t *testing.T) { t.Parallel() From 504595cbe1504d9aa400eaab779640e81c5ff676 Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Mon, 21 Sep 2026 12:00:00 +0300 Subject: [PATCH 597/618] feat: implement metadata indexing and filtering in pgvector - Introduced `MetadataIndex` struct to define indexes over keys in the `cmetadata` column, including support for exclusion conditions. - Added validation for metadata indexes to ensure keys and names are valid identifiers. - Enhanced `filterPredicates` function to inline keys and return errors for invalid filter keys. - Updated tests to cover new functionality, including metadata index creation and filtering behavior. - Modified existing tests to ensure compatibility with the new filtering logic. --- vectorstores/pgvector/filter_test.go | 124 +++++--- vectorstores/pgvector/metadata_index.go | 175 +++++++++++ vectorstores/pgvector/metadata_index_test.go | 126 ++++++++ vectorstores/pgvector/narrowing_test.go | 293 ++++++++++++++++++ vectorstores/pgvector/options.go | 13 + vectorstores/pgvector/pgvector.go | 103 +++--- .../testdata/TestPgvectorAsRetriever.httprr | 81 ++--- ...rieverWithMetadataFilterNotSelected.httprr | 77 ++--- ...ectorAsRetrieverWithMetadataFilters.httprr | 99 +++--- ...vectorAsRetrieverWithScoreThreshold.httprr | 67 ++-- 10 files changed, 925 insertions(+), 233 deletions(-) create mode 100644 vectorstores/pgvector/metadata_index.go create mode 100644 vectorstores/pgvector/metadata_index_test.go create mode 100644 vectorstores/pgvector/narrowing_test.go diff --git a/vectorstores/pgvector/filter_test.go b/vectorstores/pgvector/filter_test.go index 22060ee39..7ec1f604b 100644 --- a/vectorstores/pgvector/filter_test.go +++ b/vectorstores/pgvector/filter_test.go @@ -1,45 +1,66 @@ package pgvector import ( + "errors" "strings" "testing" ) -func TestFilterPredicatesKeepCallerTextOutOfTheStatement(t *testing.T) { +func TestFilterPredicatesKeepCallerValuesOutOfTheStatement(t *testing.T) { t.Parallel() for _, tc := range []struct { - name string - filter map[string]any + name string + value string }{ - {"value closes the literal and appends a tautology", map[string]any{ - "kind": "x' OR '1'='1", - }}, - {"value ends the statement", map[string]any{ - "kind": "x'; DROP TABLE langchaingo_pg_embedding; --", - }}, - {"key closes the literal", map[string]any{ - "kind') = 'x' OR '1'='1": "y", - }}, - {"quote inside an ordinary value", map[string]any{ - "owner": "O'Brien", - }}, + {"value closes the literal and appends a tautology", "x' OR '1'='1"}, + {"value ends the statement", "x'; DROP TABLE langchaingo_pg_embedding; --"}, + {"quote inside an ordinary value", "O'Brien"}, + {"value carries a comment marker", "x --"}, } { t.Run(tc.name, func(t *testing.T) { t.Parallel() - predicates, args := filterPredicates("data.", tc.filter, 0) - joined := strings.Join(predicates, " AND ") - if strings.ContainsAny(joined, "'\";") { - t.Fatalf("caller text reached the statement: %q", joined) + predicates, args, err := filterPredicates("data.", map[string]any{"kind": tc.value}, 0) + if err != nil { + t.Fatalf("unexpected error: %v", err) } - for k, v := range tc.filter { - if !contains(args, k) { - t.Errorf("key %q must travel as an argument, got args %v", k, args) - } - if !contains(args, v) { - t.Errorf("value %q must travel as an argument, got args %v", v, args) - } + if want := "(data.cmetadata ->> 'kind') = $1"; predicates[0] != want { + t.Errorf("want %q, got %q", want, predicates[0]) + } + if len(args) != 1 || args[0] != tc.value { + t.Errorf("value must travel as an argument, got %v", args) + } + }) + } +} + +// The key reaches the statement as text, so the gate is the whole defence. +func TestFilterPredicatesRejectAKeyThatIsNotAnIdentifier(t *testing.T) { + t.Parallel() + + for _, key := range []string{ + "kind') = 'x' OR '1'='1", + "", + "1abc", + "a-b", + "a.b", + "a b", + "a;b", + `a"b`, + "a`b", + "ключ", + strings.Repeat("a", 64), + } { + t.Run(key, func(t *testing.T) { + t.Parallel() + + predicates, args, err := filterPredicates("data.", map[string]any{key: "y"}, 0) + if !errors.Is(err, ErrInvalidFilterKey) { + t.Fatalf("want ErrInvalidFilterKey, got %v", err) + } + if predicates != nil || args != nil { + t.Errorf("a rejected filter must render nothing, got %v and %v", predicates, args) } }) } @@ -48,24 +69,45 @@ func TestFilterPredicatesKeepCallerTextOutOfTheStatement(t *testing.T) { func TestFilterPredicatesNumberFromTheOffset(t *testing.T) { t.Parallel() - predicates, args := filterPredicates("data.", map[string]any{"a": "1", "b": "2"}, 4) - want := "(data.cmetadata ->> $5) = $6 AND (data.cmetadata ->> $7) = $8" + predicates, args, err := filterPredicates("data.", map[string]any{"a": "1", "b": "2"}, 4) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + want := "(data.cmetadata ->> 'a') = $5 AND (data.cmetadata ->> 'b') = $6" if got := strings.Join(predicates, " AND "); got != want { t.Errorf("want %q, got %q", want, got) } - if len(args) != 4 { - t.Errorf("want four arguments beside two pairs, got %v", args) + if len(args) != 2 || args[0] != "1" || args[1] != "2" { + t.Errorf("want the two values in key order, got %v", args) + } +} + +// Sorting is what keeps one filter rendering as one statement text, which is +// what lets the driver and the server reuse a plan for it. +func TestFilterPredicatesRenderTheSameTextWhateverTheInsertionOrder(t *testing.T) { + t.Parallel() + + first, _, err := filterPredicates("data.", map[string]any{"flow_id": "1", "doc_type": "memory"}, 4) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + second, _, err := filterPredicates("data.", map[string]any{"doc_type": "memory", "flow_id": "1"}, 4) + if err != nil { + t.Fatalf("unexpected error: %v", err) } - if args[0] != "a" || args[2] != "b" { - t.Errorf("keys must be ordered so the statement is stable, got %v", args) + if strings.Join(first, " AND ") != strings.Join(second, " AND ") { + t.Errorf("statement text varies with map order: %q vs %q", first, second) } } func TestFilterPredicatesOnValuesThatAreNotStrings(t *testing.T) { t.Parallel() - _, args := filterPredicates("t.", map[string]any{"n": 5}, 0) - if len(args) != 2 || args[1] != "5" { + _, args, err := filterPredicates("t.", map[string]any{"n": 5}, 0) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if len(args) != 1 || args[0] != "5" { t.Errorf("a non-string value must reach the wire as text, got %v", args) } } @@ -73,17 +115,11 @@ func TestFilterPredicatesOnValuesThatAreNotStrings(t *testing.T) { func TestFilterPredicatesOnAnEmptyFilter(t *testing.T) { t.Parallel() - predicates, args := filterPredicates("data.", map[string]any{}, 3) + predicates, args, err := filterPredicates("data.", map[string]any{}, 3) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } if len(predicates) != 0 || len(args) != 0 { t.Errorf("an empty filter must add nothing, got %v and %v", predicates, args) } } - -func contains(args []any, want any) bool { - for _, a := range args { - if a == want { - return true - } - } - return false -} diff --git a/vectorstores/pgvector/metadata_index.go b/vectorstores/pgvector/metadata_index.go new file mode 100644 index 000000000..8601795ff --- /dev/null +++ b/vectorstores/pgvector/metadata_index.go @@ -0,0 +1,175 @@ +package pgvector + +import ( + "context" + "fmt" + "hash/fnv" + "regexp" + "sort" + "strings" + + "github.com/jackc/pgx/v5" +) + +// metadataKeyPattern gates every metadata key that reaches the statement text. +// A key that travels as a bind parameter makes `cmetadata ->> $n` a different +// expression from the `cmetadata ->> 'key'` an index was built over, so the +// index becomes unreachable as soon as the planner chooses a generic plan. +// Inlining the key is what keeps the index in play, and nothing this pattern +// admits needs quoting. +var metadataKeyPattern = regexp.MustCompile(`^[A-Za-z_][A-Za-z0-9_]{0,62}$`) + +// maxIdentifierLen is PostgreSQL's NAMEDATALEN-1: a longer name is silently +// truncated, which would collide two distinct declarations under one index. +const maxIdentifierLen = 63 + +// MetadataIndex declares an index over keys inside the cmetadata column. The +// store creates every declared index it does not already find when it starts. +// +// Declaring an index is only half the work: a query reaches it solely when it +// constrains Keys from the first one onwards, so the leading key belongs to +// whichever filter every caller of that search path supplies. +type MetadataIndex struct { + // Name overrides the derived name. Leave it empty unless an existing index + // has to be adopted under the name it already carries. + Name string + + // Keys are the cmetadata keys in index order, most selective predicate + // first. At least one is required. + Keys []string + + // Exclude restricts the index to rows whose key does NOT hold the given + // value. It earns its place when the interesting rows are a small minority + // of the table: the index then spans that minority rather than every row. + Exclude map[string]string +} + +func (m MetadataIndex) validate() error { + if len(m.Keys) == 0 { + return fmt.Errorf("%w: an index needs at least one key", ErrInvalidMetadataIndex) + } + for _, key := range m.Keys { + if !metadataKeyPattern.MatchString(key) { + return fmt.Errorf("%w: key %q is not a bare identifier", ErrInvalidMetadataIndex, key) + } + } + for key := range m.Exclude { + if !metadataKeyPattern.MatchString(key) { + return fmt.Errorf("%w: excluded key %q is not a bare identifier", ErrInvalidMetadataIndex, key) + } + } + if m.Name != "" && !metadataKeyPattern.MatchString(m.Name) { + return fmt.Errorf("%w: name %q is not a bare identifier", ErrInvalidMetadataIndex, m.Name) + } + return nil +} + +func (m MetadataIndex) indexName(table string) string { + if m.Name != "" { + return m.Name + } + + parts := make([]string, 0, len(m.Keys)+3) + parts = append(parts, strings.ReplaceAll(table, ".", "_"), "meta") + parts = append(parts, m.Keys...) + if len(m.Exclude) > 0 { + parts = append(parts, "partial") + } + name := strings.Join(parts, "_") + if len(name) <= maxIdentifierLen { + return name + } + + sum := fnv.New32a() + _, _ = sum.Write([]byte(name)) + return fmt.Sprintf("%s_%08x", name[:maxIdentifierLen-9], sum.Sum32()) +} + +// ddl renders the CREATE INDEX for this declaration. Index expressions and +// predicates admit no bind parameters, so every part is rendered as literal +// text; validate must pass first. +func (m MetadataIndex) ddl(table string) (string, error) { + if err := m.validate(); err != nil { + return "", err + } + + columns := make([]string, 0, len(m.Keys)) + for _, key := range m.Keys { + columns = append(columns, fmt.Sprintf("(cmetadata ->> '%s')", key)) + } + + statement := fmt.Sprintf("CREATE INDEX IF NOT EXISTS %s ON %s (%s)", + m.indexName(table), table, strings.Join(columns, ", ")) + + if len(m.Exclude) == 0 { + return statement, nil + } + + keys := make([]string, 0, len(m.Exclude)) + for key := range m.Exclude { + keys = append(keys, key) + } + sort.Strings(keys) + + predicates := make([]string, 0, len(keys)) + for _, key := range keys { + literal, err := quoteLiteral(m.Exclude[key]) + if err != nil { + return "", err + } + // IS DISTINCT FROM rather than <>, so a row without the key is indexed + // instead of being dropped by a NULL comparison. + predicates = append(predicates, + fmt.Sprintf("(cmetadata ->> '%s') IS DISTINCT FROM %s", key, literal)) + } + + return statement + " WHERE " + strings.Join(predicates, " AND "), nil +} + +// quoteLiteral renders a string as an SQL literal. Doubling the quote is the +// whole of the escaping under standard_conforming_strings, which has been on by +// default since PostgreSQL 9.1; a backslash is rejected rather than trusted to +// it, and a NUL byte cannot appear in a statement at all. +func quoteLiteral(value string) (string, error) { + if strings.ContainsAny(value, "\x00\\") { + return "", fmt.Errorf("%w: value %q may not contain a backslash or a NUL byte", + ErrInvalidMetadataIndex, value) + } + return "'" + strings.ReplaceAll(value, "'", "''") + "'", nil +} + +// createMetadataIndexesIfNotExist brings the declared indexes into existence. +// +// It runs inside init's transaction, which already holds the embedding table's +// advisory lock, so concurrent stores opening against one table serialise here +// rather than racing. That also rules out CREATE INDEX CONCURRENTLY, which +// cannot run inside a transaction: the first build takes a ShareLock and blocks +// writers for its duration, and every start afterwards is a catalog lookup. +func (s Store) createMetadataIndexesIfNotExist(ctx context.Context, tx pgx.Tx) error { + if len(s.metadataIndexes) == 0 { + return nil + } + + if _, err := tx.Exec(ctx, "SELECT pg_advisory_xact_lock($1)", pgLockIDEmbeddingTable); err != nil { + return err + } + + for _, index := range s.metadataIndexes { + statement, err := index.ddl(s.embeddingTableName) + if err != nil { + return err + } + if _, err := tx.Exec(ctx, statement); err != nil { + return fmt.Errorf("create metadata index %s: %w", index.indexName(s.embeddingTableName), err) + } + } + + // An expression index carries no statistics of its own until the table is + // analysed, and until then the planner costs it off the column's own + // distribution and can reject it outright. + if _, err := tx.Exec(ctx, "ANALYZE "+s.embeddingTableName); err != nil { + return err + } + + return nil +} diff --git a/vectorstores/pgvector/metadata_index_test.go b/vectorstores/pgvector/metadata_index_test.go new file mode 100644 index 000000000..d607bb6bf --- /dev/null +++ b/vectorstores/pgvector/metadata_index_test.go @@ -0,0 +1,126 @@ +package pgvector + +import ( + "errors" + "strings" + "testing" +) + +func TestMetadataIndexDDL(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + index MetadataIndex + want string + }{ + { + name: "one key", + index: MetadataIndex{Keys: []string{"flow_id"}}, + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_flow_id " + + "ON langchain_pg_embedding ((cmetadata ->> 'flow_id'))", + }, + { + name: "keys keep the order they were declared in", + index: MetadataIndex{Keys: []string{"doc_type", "flow_id"}}, + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_doc_type_flow_id " + + "ON langchain_pg_embedding ((cmetadata ->> 'doc_type'), (cmetadata ->> 'flow_id'))", + }, + { + name: "an explicit name wins", + index: MetadataIndex{Name: "lpe_custom", Keys: []string{"flow_id"}}, + want: "CREATE INDEX IF NOT EXISTS lpe_custom ON langchain_pg_embedding ((cmetadata ->> 'flow_id'))", + }, + { + name: "exclude renders a partial index", + index: MetadataIndex{ + Keys: []string{"doc_type"}, + Exclude: map[string]string{"doc_type": "memory"}, + }, + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_doc_type_partial " + + "ON langchain_pg_embedding ((cmetadata ->> 'doc_type')) " + + "WHERE (cmetadata ->> 'doc_type') IS DISTINCT FROM 'memory'", + }, + { + name: "a quote in an excluded value is doubled", + index: MetadataIndex{ + Keys: []string{"owner"}, + Exclude: map[string]string{"owner": "O'Brien"}, + }, + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_owner_partial " + + "ON langchain_pg_embedding ((cmetadata ->> 'owner')) " + + "WHERE (cmetadata ->> 'owner') IS DISTINCT FROM 'O''Brien'", + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + got, err := tc.index.ddl("langchain_pg_embedding") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if got != tc.want { + t.Errorf("want:\n%s\ngot:\n%s", tc.want, got) + } + }) + } +} + +func TestMetadataIndexRejectsWhatCannotBeInlinedSafely(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + index MetadataIndex + }{ + {"no keys", MetadataIndex{}}, + {"key is not an identifier", MetadataIndex{Keys: []string{"a-b"}}}, + {"key closes the literal", MetadataIndex{Keys: []string{"x') OR true --"}}}, + {"excluded key is not an identifier", MetadataIndex{ + Keys: []string{"doc_type"}, Exclude: map[string]string{"a.b": "x"}, + }}, + {"name is not an identifier", MetadataIndex{Name: "a b", Keys: []string{"doc_type"}}}, + {"excluded value carries a backslash", MetadataIndex{ + Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": `a\b`}, + }}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + if _, err := tc.index.ddl("langchain_pg_embedding"); !errors.Is(err, ErrInvalidMetadataIndex) { + t.Fatalf("want ErrInvalidMetadataIndex, got %v", err) + } + }) + } +} + +// PostgreSQL truncates an identifier at 63 bytes, which would collide two +// distinct declarations under one index. +func TestMetadataIndexNameStaysWithinTheIdentifierLimit(t *testing.T) { + t.Parallel() + + long := MetadataIndex{Keys: []string{ + strings.Repeat("a", 60), strings.Repeat("b", 60), strings.Repeat("c", 60), + }} + first := long.indexName("langchain_pg_embedding") + if len(first) > maxIdentifierLen { + t.Fatalf("name is %d bytes: %s", len(first), first) + } + + other := MetadataIndex{Keys: []string{ + strings.Repeat("a", 60), strings.Repeat("b", 60), strings.Repeat("d", 60), + }} + if second := other.indexName("langchain_pg_embedding"); first == second { + t.Errorf("two declarations collapsed onto one name: %s", first) + } +} + +func TestMetadataIndexNameDistinguishesAPartialIndex(t *testing.T) { + t.Parallel() + + full := MetadataIndex{Keys: []string{"doc_type"}} + partial := MetadataIndex{Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}} + if full.indexName("lpe") == partial.indexName("lpe") { + t.Error("a partial index must not adopt the full index's name") + } +} diff --git a/vectorstores/pgvector/narrowing_test.go b/vectorstores/pgvector/narrowing_test.go new file mode 100644 index 000000000..ce0219029 --- /dev/null +++ b/vectorstores/pgvector/narrowing_test.go @@ -0,0 +1,293 @@ +package pgvector + +import ( + "context" + "fmt" + "math" + "os" + "strconv" + "strings" + "testing" + + "github.com/google/uuid" + "github.com/jackc/pgx/v5" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/schema" + "github.com/vxcontrol/langchaingo/vectorstores" +) + +// fixedEmbedder answers with a deterministic unit vector of a fixed width, so a +// search asserts about the statement the store builds rather than about a model. +type fixedEmbedder struct{ dims int } + +func (e fixedEmbedder) EmbedDocuments(_ context.Context, texts []string) ([][]float32, error) { + out := make([][]float32, len(texts)) + for i, text := range texts { + out[i] = e.vector(text) + } + return out, nil +} + +func (e fixedEmbedder) EmbedQuery(_ context.Context, text string) ([]float32, error) { + return e.vector(text), nil +} + +func (e fixedEmbedder) vector(text string) []float32 { + var seed uint32 = 2166136261 + for _, b := range []byte(text) { + seed ^= uint32(b) + seed *= 16777619 + } + vec := make([]float32, e.dims) + for i := range vec { + seed = seed*1664525 + 1013904223 + vec[i] = float32(seed%1000)/1000 + 0.001 + } + var norm float64 + for _, v := range vec { + norm += float64(v) * float64(v) + } + norm = math.Sqrt(norm) + for i := range vec { + vec[i] = float32(float64(vec[i]) / norm) + } + return vec +} + +// These cases live inside the package because they assert about the statement +// the store builds, so they cannot borrow the external suite's helpers. +func narrowingURL(t *testing.T) string { + t.Helper() + + if testing.Short() { + t.Skip("skipping integration test in short mode") + } + url := os.Getenv("PGVECTOR_CONNECTION_STRING") + if url == "" { + t.Skip("PGVECTOR_CONNECTION_STRING is not set") + } + return url +} + +func narrowingCollection() string { + return "narrowing-" + uuid.New().String() +} + +func newNarrowingStore(t *testing.T, url, collection string, dims int, indexes ...MetadataIndex) Store { + t.Helper() + + opts := []Option{ + Option(WithConnectionURL(url)), + WithEmbedder(fixedEmbedder{dims: dims}), + WithCollectionName(collection), + } + if len(indexes) > 0 { + opts = append(opts, WithMetadataIndexes(indexes...)) + } + + store, err := New(t.Context(), opts...) + require.NoError(t, err) + t.Cleanup(func() { _ = store.Close() }) + return store +} + +// A table written before an embedding model changed holds more than one vector +// width. The dimension guard has to be evaluated before the distance operator, +// or every search on such a table fails outright. +func TestSimilaritySearchToleratesAMixedWidthTableUnderFiltersAndThreshold(t *testing.T) { + t.Parallel() + + url := narrowingURL(t) + collection := narrowingCollection() + ctx := t.Context() + + wide := newNarrowingStore(t, url, collection, 64) + _, err := wide.AddDocuments(ctx, []schema.Document{ + {PageContent: "the lamp beside the desk is blue", Metadata: map[string]any{"flow_id": "7", "doc_type": "memory"}}, + {PageContent: "the chair beside the desk is beige", Metadata: map[string]any{"flow_id": "7", "doc_type": "memory"}}, + {PageContent: "the desk is orange", Metadata: map[string]any{"flow_id": "9", "doc_type": "memory"}}, + }) + require.NoError(t, err) + + // The same collection, now written by a narrower model, and landing in the + // very flow the search below scopes to. + narrow := newNarrowingStore(t, url, collection, 32) + _, err = narrow.AddDocuments(ctx, []schema.Document{ + {PageContent: "written after the model changed", Metadata: map[string]any{"flow_id": "7", "doc_type": "memory"}}, + }) + require.NoError(t, err) + + docs, err := wide.SimilaritySearch(ctx, "what colour is the lamp", 3, + vectorstores.WithScoreThreshold(0.2), + vectorstores.WithFilters(map[string]any{"flow_id": "7", "doc_type": "memory"})) + require.NoError(t, err) + require.NotEmpty(t, docs) + for _, doc := range docs { + require.Equal(t, "7", doc.Metadata["flow_id"]) + require.NotEqual(t, "written after the model changed", doc.PageContent) + } +} + +func TestSimilaritySearchKeepsTheFilterScope(t *testing.T) { + t.Parallel() + + url := narrowingURL(t) + collection := narrowingCollection() + ctx := t.Context() + + store := newNarrowingStore(t, url, collection, 64) + _, err := store.AddDocuments(ctx, []schema.Document{ + {PageContent: "mine", Metadata: map[string]any{"flow_id": "1", "doc_type": "memory"}}, + {PageContent: "theirs", Metadata: map[string]any{"flow_id": "2", "doc_type": "memory"}}, + }) + require.NoError(t, err) + + docs, err := store.SimilaritySearch(ctx, "anything", 10, + vectorstores.WithFilters(map[string]any{"flow_id": "1"})) + require.NoError(t, err) + require.Len(t, docs, 1) + require.Equal(t, "mine", docs[0].PageContent) +} + +// A key that cannot be inlined must fail the search rather than widen it: the +// filter it carries may be the only thing scoping the caller's results. +func TestSimilaritySearchRefusesAFilterKeyItCannotInline(t *testing.T) { + t.Parallel() + + url := narrowingURL(t) + collection := narrowingCollection() + ctx := t.Context() + + store := newNarrowingStore(t, url, collection, 64) + _, err := store.AddDocuments(ctx, []schema.Document{ + {PageContent: "mine", Metadata: map[string]any{"flow_id": "1"}}, + {PageContent: "theirs", Metadata: map[string]any{"flow_id": "2"}}, + }) + require.NoError(t, err) + + _, err = store.SimilaritySearch(ctx, "anything", 10, + vectorstores.WithFilters(map[string]any{"flow id": "1"})) + require.ErrorIs(t, err, ErrInvalidFilterKey) +} + +func TestStoreCreatesTheDeclaredMetadataIndexes(t *testing.T) { + t.Parallel() + + url := narrowingURL(t) + ctx := t.Context() + + declared := []MetadataIndex{ + {Keys: []string{"doc_type", "flow_id"}}, + {Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}}, + } + store := newNarrowingStore(t, url, narrowingCollection(), 64, declared...) + + conn, err := pgx.Connect(ctx, url) + require.NoError(t, err) + defer conn.Close(ctx) + + for _, index := range declared { + name := index.indexName(store.embeddingTableName) + var definition string + err := conn.QueryRow(ctx, + "SELECT indexdef FROM pg_indexes WHERE tablename = $1 AND indexname = $2", + store.embeddingTableName, name).Scan(&definition) + require.NoErrorf(t, err, "index %s was not created", name) + for _, key := range index.Keys { + require.Contains(t, definition, fmt.Sprintf("(cmetadata ->> '%s'::text)", key)) + } + } + + // A second store against the same table must be a no-op rather than an error. + newNarrowingStore(t, url, narrowingCollection(), 64, declared...) +} + +// The whole point of the rewrite: the scan reads one flow, not the table. +func TestSimilaritySearchReadsOnlyTheFilteredRows(t *testing.T) { + t.Parallel() + + url := narrowingURL(t) + ctx := t.Context() + + store := newNarrowingStore(t, url, narrowingCollection(), 64, + MetadataIndex{Keys: []string{"doc_type", "flow_id"}}) + + const flows, perFlow = 200, 25 + docs := make([]schema.Document, 0, flows*perFlow) + for flow := range flows { + for i := range perFlow { + docs = append(docs, schema.Document{ + PageContent: fmt.Sprintf("flow %d document %d", flow, i), + Metadata: map[string]any{"flow_id": strconv.Itoa(flow), "doc_type": "memory"}, + }) + } + } + for start := 0; start < len(docs); start += 500 { + _, err := store.AddDocuments(ctx, docs[start:min(start+500, len(docs))]) + require.NoError(t, err) + } + + conn, err := pgx.Connect(ctx, url) + require.NoError(t, err) + defer conn.Close(ctx) + _, err = conn.Exec(ctx, "ANALYZE "+store.embeddingTableName) + require.NoError(t, err) + + plan := explainSimilaritySearch(t, ctx, conn, store, "flow 3 document 1", + map[string]any{"doc_type": "memory", "flow_id": "3"}) + + require.Contains(t, plan, store.embeddingTableName+"_meta_doc_type_flow_id", + "the metadata index must carry the scan:\n%s", plan) + require.NotContains(t, plan, "Seq Scan on "+store.embeddingTableName, + "the whole table was read:\n%s", plan) +} + +func explainSimilaritySearch( + t *testing.T, ctx context.Context, conn *pgx.Conn, store Store, query string, filter map[string]any, +) string { + t.Helper() + + vector, err := store.embedder.EmbedQuery(ctx, query) + require.NoError(t, err) + + predicates, args, err := filterPredicates(store.embeddingTableName+".", filter, 4) + require.NoError(t, err) + + literals := make([]string, 0, len(vector)) + for _, v := range vector { + literals = append(literals, strconv.FormatFloat(float64(v), 'f', -1, 32)) + } + + statement := fmt.Sprintf(`EXPLAIN (COSTS OFF) WITH filtered_embedding_dims AS MATERIALIZED ( + SELECT %[1]s.uuid, %[1]s.document, %[1]s.cmetadata, %[1]s.embedding <=> '[%[2]s]'::vector AS distance + FROM %[1]s + WHERE %[1]s.collection_id = (SELECT %[3]s.uuid FROM %[3]s WHERE %[3]s.name = $1 ORDER BY %[3]s.name LIMIT 1) + AND vector_dims(%[1]s.embedding) = %[4]d + AND %[5]s +) +SELECT data.document, data.cmetadata, (1 - data.distance) AS score +FROM filtered_embedding_dims AS data +WHERE data.distance < 0.8 +ORDER BY data.distance, data.uuid LIMIT 3`, + store.embeddingTableName, strings.Join(literals, ","), store.collectionTableName, + len(vector), strings.Join(predicates, " AND ")) + + // filterPredicates numbered from 4 to match the live statement; here the + // collection name is $1 and the filter values follow it. + statement = strings.NewReplacer("$5", "$2", "$6", "$3", "$7", "$4").Replace(statement) + + params := append([]any{store.collectionName}, args...) + rows, err := conn.Query(ctx, statement, params...) + require.NoError(t, err) + defer rows.Close() + + var plan strings.Builder + for rows.Next() { + var line string + require.NoError(t, rows.Scan(&line)) + plan.WriteString(line) + plan.WriteString("\n") + } + require.NoError(t, rows.Err()) + return plan.String() +} diff --git a/vectorstores/pgvector/options.go b/vectorstores/pgvector/options.go index 7619fc048..7e00e9754 100644 --- a/vectorstores/pgvector/options.go +++ b/vectorstores/pgvector/options.go @@ -86,6 +86,19 @@ func WithVectorDimensions(size int) Option { } } +// WithMetadataIndexes declares indexes over keys inside the cmetadata column. +// The store creates any of them it does not find when it starts. +// +// Without one, a filtered search reads every row of the table: the metadata +// predicates narrow the candidate set only after a distance has already been +// computed for each row, and on a table of embeddings that cost is dominated by +// detoasting vectors that were never going to be returned. +func WithMetadataIndexes(indexes ...MetadataIndex) Option { + return func(p *Store) { + p.metadataIndexes = indexes + } +} + // WithHNSWIndex is an option for specifying the HNSW index parameters. // See here for more details: https://github.com/pgvector/pgvector#hnsw // diff --git a/vectorstores/pgvector/pgvector.go b/vectorstores/pgvector/pgvector.go index 7bad5abda..801f57442 100644 --- a/vectorstores/pgvector/pgvector.go +++ b/vectorstores/pgvector/pgvector.go @@ -35,6 +35,8 @@ var ( ErrEmbedderWrongNumberVectors = errors.New("number of vectors from embedder does not match number of documents") ErrInvalidScoreThreshold = errors.New("score threshold must be between 0 and 1") ErrInvalidFilters = errors.New("invalid filters") + ErrInvalidFilterKey = errors.New("filter key must be a bare identifier") + ErrInvalidMetadataIndex = errors.New("invalid metadata index") ErrUnsupportedOptions = errors.New("unsupported options") ) @@ -65,6 +67,7 @@ type Store struct { preDeleteCollection bool vectorDimensions int hnswIndex *HNSWIndex + metadataIndexes []MetadataIndex } type HNSWIndex struct { @@ -122,6 +125,9 @@ func (s *Store) init(ctx context.Context) error { if err := s.createEmbeddingTableIfNotExists(ctx, tx); err != nil { return err } + if err := s.createMetadataIndexesIfNotExist(ctx, tx); err != nil { + return err + } if s.preDeleteCollection { if err := s.RemoveCollection(ctx, tx); err != nil { return err @@ -295,46 +301,57 @@ func (s Store) SimilaritySearch( if err != nil { return nil, err } - args := make([]any, 0, 4+2*len(filter)) + args := make([]any, 0, 5+len(filter)) args = append(args, len(embedderData), pgvector.NewVector(embedderData), numDocuments, collectionName) - whereQuerys := make([]string, 0) - if scoreThreshold != 0 { - whereQuerys = append(whereQuerys, fmt.Sprintf("data.distance < %f", 1-scoreThreshold)) + + // Every predicate that can reject a row belongs inside the fence, so that a + // distance is computed only for the rows that survive it, and so that a + // metadata index is reachable at the scan. Hoisting them out, as this query + // once did, costs a full table scan and a detoast of every stored vector. + innerQuerys, filterArgs, err := filterPredicates(s.embeddingTableName+".", filter, len(args)) + if err != nil { + return nil, err } - filterQuerys, filterArgs := filterPredicates("data.", filter, len(args)) - whereQuerys = append(whereQuerys, filterQuerys...) args = append(args, filterArgs...) - whereQuery := strings.Join(whereQuerys, " AND ") - if len(whereQuery) == 0 { - whereQuery = "TRUE" + innerQuery := strings.Join(innerQuerys, " AND ") + if len(innerQuery) == 0 { + innerQuery = "TRUE" + } + + // The threshold is the one predicate that cannot move inside: it reads the + // distance the fenced select computes. + outerQuery := "TRUE" + if scoreThreshold != 0 { + args = append(args, float64(1-scoreThreshold)) + outerQuery = fmt.Sprintf("data.distance < $%d", len(args)) } + + // AS MATERIALIZED is load-bearing rather than decorative. It is what orders + // vector_dims() ahead of <=>, and a table holding more than one embedding + // dimension -- any table written before an embedding model was changed -- + // fails outright with "different vector dimensions" without it. sql := fmt.Sprintf(`WITH filtered_embedding_dims AS MATERIALIZED ( - SELECT - * - FROM - %s - WHERE - vector_dims ( - embedding - ) = $1 + SELECT + %[1]s.uuid, + %[1]s.document, + %[1]s.cmetadata, + %[1]s.embedding <=> $2 AS distance + FROM + %[1]s + WHERE %[1]s.collection_id = (SELECT %[2]s.uuid FROM %[2]s WHERE %[2]s.name = $4 ORDER BY %[2]s.name LIMIT 1) + AND vector_dims(%[1]s.embedding) = $1 + AND %[3]s ) SELECT data.document, data.cmetadata, (1 - data.distance) AS score -FROM ( - SELECT - filtered_embedding_dims.*, - embedding <=> $2 AS distance - FROM - filtered_embedding_dims - JOIN %s ON filtered_embedding_dims.collection_id=%s.uuid WHERE %s.name=$4) AS data -WHERE %s +FROM filtered_embedding_dims AS data +WHERE %[4]s ORDER BY - data.distance -LIMIT $3`, s.embeddingTableName, - s.collectionTableName, s.collectionTableName, s.collectionTableName, - whereQuery) + data.distance, + data.uuid +LIMIT $3`, s.embeddingTableName, s.collectionTableName, innerQuery, outerQuery) rows, err := s.conn.Query(ctx, sql, args...) if err != nil { return nil, err @@ -364,9 +381,12 @@ func (s Store) Search( if err != nil { return nil, err } - args := make([]any, 0, 2+2*len(filter)) + args := make([]any, 0, 2+len(filter)) args = append(args, numDocuments, collectionName) - whereQuerys, filterArgs := filterPredicates(s.embeddingTableName+".", filter, len(args)) + whereQuerys, filterArgs, err := filterPredicates(s.embeddingTableName+".", filter, len(args)) + if err != nil { + return nil, err + } args = append(args, filterArgs...) whereQuery := strings.Join(whereQuerys, " AND ") if len(whereQuery) == 0 { @@ -450,21 +470,30 @@ func (s Store) getScoreThreshold(opts vectorstores.Options) (float32, error) { // filterPredicates renders the metadata filter as predicates numbered from // argOffset; the returned args must be appended to the query in the same order. -func filterPredicates(prefix string, filter map[string]any, argOffset int) ([]string, []any) { +// Keys are sorted so that one filter always renders as one statement text. +// +// The key is inlined and only the value is bound, because `cmetadata ->> $n` is +// not the expression a metadata index was built over. A key that fails the gate +// is an error rather than a dropped predicate: a caller's filter may be the only +// thing keeping one tenant's documents out of another's results. +func filterPredicates(prefix string, filter map[string]any, argOffset int) ([]string, []any, error) { keys := make([]string, 0, len(filter)) for k := range filter { + if !metadataKeyPattern.MatchString(k) { + return nil, nil, fmt.Errorf("%w: %q", ErrInvalidFilterKey, k) + } keys = append(keys, k) } sort.Strings(keys) predicates := make([]string, 0, len(keys)) - args := make([]any, 0, len(keys)*2) + args := make([]any, 0, len(keys)) for _, k := range keys { - predicates = append(predicates, fmt.Sprintf("(%scmetadata ->> $%d) = $%d", - prefix, argOffset+len(args)+1, argOffset+len(args)+2)) - args = append(args, k, fmt.Sprintf("%v", filter[k])) + predicates = append(predicates, fmt.Sprintf("(%scmetadata ->> '%s') = $%d", + prefix, k, argOffset+len(args)+1)) + args = append(args, fmt.Sprintf("%v", filter[k])) } - return predicates, args + return predicates, args, nil } // getFilters return metadata filters, now only support map[key]value pattern diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr index fcce4e7a9..dad4e2c91 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetriever.httprr @@ -1,5 +1,5 @@ httprr trace v1 -340 64323 +340 64396 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -11,30 +11,33 @@ Content-Type: application/json Content-Length: 63433 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:08 GMT +Date: Mon, 21 Sep 2026 07:47:54 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 178 +Openai-Processing-Ms: 148 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-5c8d7bd656-hm6vb +Via: envoy-router-canary-78f5895f85-655jl X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 199 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 9999977 +X-Ratelimit-Remaining-Tokens: 9999978 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_abf0d970e0c4416886161077433d76b9 +X-Request-Id: req_ceae54eb3c10475585c6f81fb3c516ce { + "object": "list", "data": [ { "object": "embedding", @@ -42,9 +45,9 @@ X-Request-Id: req_abf0d970e0c4416886161077433d76b9 "embedding": [0.0045962376, 0.00861834, -0.008126223, -0.0057255807, -0.016656235, 0.023255637, -0.0021608942, 0.0004629361, 0.03417052, -0.009558408, -0.021224082, 0.019343946, 0.008006349, -0.017110497, -0.008088369, -0.009735065, 0.019672023, -0.024353435, 0.018031636, -0.0012744544, -0.03485191, 0.028063232, -0.0003330064, -0.0025457542, -0.0055268416, -0.005293402, 0.01669409, -0.013539501, 0.017047405, 0.007836002, -0.0042019137, -0.01500323, -0.011741384, -0.009659355, -0.010170398, -0.0058580735, -0.0010071029, 0.0023943337, -0.007186156, 8.675122e-06, 0.01755214, -0.0024795078, 0.0055457694, -0.030965455, -0.0057445085, 0.005832837, 0.0017397564, 0.0144227855, -0.022713048, 0.008290263, 0.0053501846, 0.026296662, -0.0006660128, -0.03437241, 0.0062997164, -0.011110466, 0.0062050787, 0.015596293, 0.0025773, -0.004785513, 0.010145161, -0.02176667, -0.011899114, -0.012328138, -0.029602673, -0.010511094, -0.017905453, -0.010498475, 0.005618325, 0.022511154, 0.019268235, 0.024782458, 0.0139180515, -0.001563888, 0.012782399, 0.013451172, -0.023444913, -0.012290282, 0.0012602587, 0.010908572, 0.006561547, -0.004507909, -0.033287235, 0.007507924, 0.029224122, 0.017791888, -0.015911752, 0.014902283, -0.039899256, 0.0029921287, 0.024429144, 0.041716296, 0.016845511, -0.008959035, -0.009053674, -0.014183037, 0.011993751, 0.029880276, 0.006914861, -0.026220951, -0.00060213235, 0.011318669, -0.048025478, 0.00761518, -0.03015788, 0.0017019013, -0.0023186237, -0.004255542, 0.027432315, -0.029577436, -0.025337666, 0.027508024, 0.024782458, -0.031520665, -0.00094085647, -8.300515e-05, 0.0006277634, -0.011854949, -0.0102397995, 0.01654267, 0.009911722, 0.021817144, 0.014637298, 0.017640468, -0.004946397, 0.005485832, -0.021968564, -0.044113785, -0.005362803, -0.0021640488, 0.009413296, 0.021526922, 0.015836041, 0.0018312394, -0.025640508, -0.0038643728, -0.026094768, 0.028416546, -0.024656275, -0.00353945, 0.009779229, 0.019558458, -0.023369202, -0.0035993871, 0.019836063, 0.02861844, 0.003400648, -0.0028706768, -0.0105174035, -0.030258827, 0.017779268, -0.031596374, 0.0141451815, 0.020580545, 0.020984333, 0.0360128, -0.008977963, 0.012662524, -0.03333771, 0.013526882, -0.025716217, -0.0013304483, 0.036441825, -0.006362808, 0.034321938, 0.018839212, 0.017564757, 0.0049053873, -0.028366074, 0.0011963783, -0.012403848, 0.035810906, -0.039571177, 0.021640487, 0.007886475, 0.01523036, -0.0057034986, 0.0015607334, -0.01669409, -0.0049716337, -0.041665826, -0.0055299965, 0.0111987945, 0.006681422, -0.0016798192, 0.012946437, 0.016138883, -0.008353354, 0.017817125, 0.0018959086, 0.021514304, 0.004731885, -0.0024479618, -0.00040891374, -0.6856312, -0.017981162, 0.010132543, -0.02200642, 0.02161525, 0.021526922, 0.026725687, 0.0070284265, -0.01577295, -0.017211443, -0.005914856, -0.0013501645, -0.010088379, -0.0015402286, 0.0032902374, -0.0035236771, 0.007829692, 0.01008207, 0.0049905614, 0.005022107, -0.0075647067, -0.009324968, -0.015066322, 0.001839126, 0.01577295, 0.009823393, 0.014788718, 0.0016861283, -0.028896045, 0.014902283, -0.015735095, 0.03470049, -0.0020094737, 0.008719287, 0.03263108, 0.0047129574, -0.02114837, 0.036896084, 0.021791907, 0.013829722, -0.0024952807, -0.0036151602, 0.019343946, -0.00020209092, -0.010126234, 0.006255552, 0.009501625, -0.010933809, 0.010334437, 0.0074069775, 0.00669404, -0.009451152, -0.00892749, 0.021034807, 0.021299792, 0.00046254176, 0.036492296, 0.020795057, -0.010151471, -0.0066435663, -0.00815146, 0.0025268267, -0.012485867, -0.021400739, -0.015129413, 0.002026824, -0.027785629, -0.01608841, -0.0141451815, -0.005340721, -0.00081625016, 0.017097877, -0.02294018, 0.023053743, 0.0026277734, -0.0019590005, 0.03480144, -0.008877017, -0.010801316, 0.013135713, 0.015343926, -0.018019019, -0.012126244, -0.018813975, 0.009028437, -0.015697239, -0.01885183, -0.019911772, 0.004432199, -0.027104238, 0.020214614, -0.0074069775, -0.014864428, -0.025135772, -0.013299751, 0.009817084, -0.0067508225, 0.02015152, 0.016138883, -0.021905473, -0.017577376, -0.008971654, 0.0007425116, 0.010397528, 0.03210111, 0.012302901, -0.004485827, 0.023508005, 0.0039022279, -0.026246188, 0.02215784, -0.0056877257, -0.015066322, 0.0061956146, -0.004763431, -0.02360895, 0.014940138, 0.0076404167, 0.02977933, -0.013690921, 0.02016414, 0.0032586914, -0.00073304784, -0.003369102, 0.0151041765, 0.0052965567, -0.010700369, -0.0050725807, -0.0048202137, 0.00042547533, 0.0031608993, 0.011671983, 0.022069512, 0.009552099, 0.013186187, 0.003378566, 0.00619246, -0.008612031, 0.031192586, -0.007192465, -0.014637298, 0.014536351, -0.01138807, 0.0065110736, -0.00946377, -0.031949688, -0.037981264, -0.018978013, -0.025097918, 0.01692122, -0.005851764, -0.00074448326, 0.0019858144, 0.015608911, -0.01162151, 0.011224031, 0.0012571041, -0.0008667236, -0.008397519, 0.013514264, 0.023419676, 0.015899133, -0.0026987516, 0.006580475, -0.01530607, -0.013842341, -0.018372333, 0.013413317, -0.01261205, -0.022031657, 0.007810765, -0.004078885, -0.013211423, -0.016214592, -0.01838495, 0.006977953, -0.03333771, -0.033135813, -0.004583619, -0.012996911, 0.01806949, 0.015470109, -0.004763431, -0.0027397615, 0.016530052, 0.0074889967, 0.037829842, 0.032429185, 0.0043060156, 0.0071483008, -0.0014771367, 0.0144480225, 0.0012768203, 0.022183077, 0.011640437, -0.009375442, -0.00077997235, 0.009154621, -0.004138822, 0.014889665, 0.02476984, 0.0024905489, 0.013678302, -0.020366034, -0.0027413387, -0.042902425, 0.020138903, 0.002561527, -0.001892754, 0.005946402, -0.019356564, -0.02208213, -0.01660576, -0.013375462, 0.009665663, -0.012018988, -0.005662489, 0.006422745, 0.009552099, -0.006971644, 0.006031576, 0.00011908577, 0.029022228, -0.00438488, -0.014460641, -0.012239809, 0.0004830466, 0.011160939, -0.014864428, -0.010132543, -0.021198845, 0.0073123397, -0.008107296, 0.009507935, -0.0028690996, 0.0105174035, 0.018296622, -0.020252468, 0.0013951174, -0.0013170413, 0.019179907, 0.026296662, 0.0017381791, -0.0076845814, 0.021817144, -0.0049116965, 0.010858099, -0.00034877934, -0.020504834, 0.014864428, -0.007753982, -0.0049337787, -0.014889665, -0.0005788673, 0.013375462, -0.01953322, 0.02685187, -0.0056025516, 0.026145242, 0.017741414, 0.03321152, 0.0060662767, -0.0007535527, -0.007817074, 0.00984232, -0.0016048977, -0.020631019, -0.008283953, -0.005794982, -0.025968585, -0.006100977, -0.009482698, 0.029224122, -0.0015694086, 0.0007488208, -0.007331267, 0.0021593168, -0.0016656235, 0.012170408, -0.009880176, -0.0078486195, -0.023381822, 0.0052460833, 0.012599433, -5.0769184e-05, -0.009438533, -0.0303093, 0.02100957, -0.015507964, 0.012971674, 0.026372373, 0.0016672008, 0.0063501894, -0.008567867, -0.00488646, -0.02839131, 0.0025362903, -0.0027902348, 0.015722476, -0.017060023, 0.008826543, -0.0193818, -0.007974803, -0.0010165666, 0.008069442, 0.022296643, 0.00885178, 0.0149275195, -0.012403848, -0.022801377, -0.029501725, -0.0076277987, 0.008006349, 0.009104147, -0.015293452, -0.0052681654, -0.025489086, -0.02476984, 0.024429144, 0.013287133, -0.00066522416, -0.0055489237, -0.01276978, -0.0008895944, 0.085602954, -0.018612081, 0.0021041115, -0.001769725, 0.023331348, -0.017425954, -0.016201975, 0.0061829966, -0.008347045, 0.026448082, 0.011413307, -0.002197172, 0.0069211703, 0.012492176, 0.00043217881, -0.0014211428, 0.024164159, -0.0116152, 0.012340756, -0.019507984, -0.026725687, 0.0029495417, 0.014725626, 0.007829692, -0.0040410296, 0.008990581, 0.012795017, 0.0006581263, 0.021413356, -0.009627809, -0.004861223, 0.013981143, -0.002235027, -0.019457512, -0.00091246516, -0.020138903, -0.03439765, -0.007400668, 0.01238492, -0.026220951, 0.029426016, 0.012151481, 0.008984272, -0.009571026, 0.002984242, 0.012006369, -0.0014637298, 0.0412368, -0.013022147, -0.010183017, 0.030889746, -0.017123114, 0.0014353384, 0.00438488, 0.013148331, 0.015810804, 0.005933784, 0.005523687, 0.01755214, -0.029804567, -0.0149275195, -0.025842402, -0.015899133, 0.002908532, -0.002946387, -0.03886455, -0.015091559, -0.00082413666, -0.022220932, -0.015318689, 0.025993822, -0.011299741, -0.018359713, 0.01515465, 0.024403907, 0.022952797, 0.002925882, -0.018965395, -0.019634169, 0.02016414, -0.012996911, -0.0021246164, 0.015041085, 0.008839161, -0.0041230493, -0.0027350294, 0.023318728, -0.027255658, -0.00792433, 0.022914942, 0.004823368, 0.0019558459, 0.030359775, 0.009451152, -0.008984272, 0.0043817256, -0.001984237, 0.009116765, -0.01669409, 0.0024448072, 0.010933809, -0.031066403, -0.013577355, -0.004548919, -0.0061041317, 0.0025063218, 0.010302891, -0.0005694035, -0.04138822, 0.005302866, 0.016807655, -0.017135734, 2.8194148e-05, -0.030208353, 0.003277619, 0.023861319, -0.019331327, 0.017577376, 0.0023659426, -0.03538188, 0.027205184, -0.036366113, 0.025123155, 0.010763461, -0.007356504, 0.004744503, 0.008895944, -0.0059211655, -0.016164118, 0.0039274646, 0.0022097903, 0.00082255935, -0.022145221, -0.012946437, -0.01969726, -0.013047384, 0.019444892, 0.0047728946, 4.029496e-05, -0.011255577, -0.0111987945, 0.011911732, 0.0030883437, -0.0017634158, -0.024731986, -0.016416486, 0.00276973, -0.0144480225, -0.013552119, 0.022750903, 0.016731946, -0.0076593445, -0.001903795, 0.022107366, 0.006839151, -0.009873867, -0.017981162, -0.004100967, 0.02161525, 0.029602673, 0.006681422, -0.00030402362, 0.02176667, -0.009552099, -0.016290303, -0.011968515, 0.0075836345, -0.0053911945, -0.021425975, 0.01962155, 0.01631554, 0.027861338, 0.015457491, 0.022271406, 0.0056372522, 0.015962224, 0.0049653244, -0.0027239884, -0.015205123, -0.037527002, -0.01808211, 0.0024243025, -0.019672023, 0.00423346, 0.021943329, -0.0035552229, 0.010883335, 0.01953322, 0.0077792187, 0.001205842, 0.02439129, -0.013665684, 0.042347215, -0.0028596357, -0.0072807935, -0.0058044456, -0.008914871, -0.011495326, 0.008952727, 0.0023359738, 0.018498516, 0.020366034, -0.021943329, -0.008208243, 0.0033943388, 0.019583695, -0.0014006379, -0.0057413536, 0.005302866, -0.012037915, -0.018675173, -0.018801356, -0.012719307, -0.043381922, 0.003608851, 0.010788698, -0.028643677, 0.022435443, -0.005239774, -0.020580545, -0.008895944, -0.0040284116, 0.011829712, -0.0040599573, 0.023735136, 0.0051829913, -0.02801276, -0.0150284665, 0.011047374, -0.0146499155, -0.01515465, 0.010832862, 0.0036624789, -0.012700379, -0.0034038026, 0.0110978475, 0.006801296, 0.012479558, -0.011690911, -0.009173548, 0.0035205225, 0.017716177, -0.017955925, 0.0074637597, -0.008580484, 0.025728837, -0.0068265325, -0.021741435, 0.0051672184, -0.011123084, -0.015255597, -0.009564717, -0.025817165, 0.012252428, 0.004848605, -0.008119915, 0.0035899235, 0.0107950065, -0.012933819, -0.0073817405, -0.009104147, 0.047066484, 0.0040820395, 0.012334446, 0.015533201, 0.026347136, 0.0041640587, -0.011608891, 0.010353364, 0.026220951, -0.0010496898, 0.0015701972, -0.0071735377, 0.05130625, 0.021590013, -0.009741374, -0.005186146, -0.014952756, -0.02215784, -0.013766631, 0.0145994425, -0.00087382144, -0.015419636, -0.0034101119, -0.027861338, -0.010277654, -0.027810866, -0.01300953, 0.010776079, -0.0031198894, -0.016353395, -0.013678302, -0.021993801, 0.027987523, 0.02099695, 9.715151e-05, -0.005785518, 0.010050524, -0.025211483, 0.018183056, -0.023104217, 0.022485917, -0.013375462, 0.008447992, 0.011791857, -0.018473279, 0.010599422, -0.00042271506, -0.0283156, -0.04555228, 0.009804466, -0.009198785, 0.012391229, -0.0063217985, -0.018612081, 0.010750842, 0.009110456, -0.015444873, -0.021791907, 0.010536331, -0.0060284217, -0.0019022177, 0.021943329, -0.0140947085, -0.0032050635, 0.019041106, -0.016820274, -0.00033596382, -0.0263219, -0.012795017, 0.016037935, 0.025640508, 5.6092555e-05, -0.021918092, 0.000246058, -0.015356544, -0.017905453, 0.0051262085, -0.005555233, 0.0014960644, 0.03591185, 0.025186246, -0.003962165, 0.0054448224, -0.02677616, -0.009501625, -0.021451212, -0.021261936, -0.016227212, -0.027659444, 0.00777291, 0.016832892, -0.0067318953, -0.019861298, 0.00078825315, 0.0122335, -0.0035741504, -0.018498516, 0.011413307, 0.015659384, 0.016668854, -0.0054826774, -0.0046277833, 0.02161525, -0.0016009544, 0.005952711, -0.0057508177, 0.003839136, 0.0020394425, -0.01261836, 0.021123135, 0.012056843, 0.0065741655, -0.019369183, 0.009135692, 0.008416446, 0.0052366196, 0.012403848, -0.008485847, 0.010990592, -0.008365973, 0.012933819, 0.008372282, 0.0073438855, 0.007671963, -0.008290263, -0.01823353, -0.0128518, 0.0014605751, -0.011356524, -0.00039294362, 0.020731965, 0.00021451213, -0.022675192, -0.0139937615, -0.01323666, -0.025198866, -0.016176738, 0.0065741655, 0.001552847, -0.0047918223, 0.011571036, 0.0023817155, 0.011854949, -0.0071987743, 0.002176667, -0.0137161575, 0.00022614466, -0.027533261, -0.01769094, 0.002523672, -0.02670045, -0.022637337, -0.024782458, 4.091109e-05, -0.0012839182, -0.004324943, -0.028567966, 0.027205184, 0.010372292, -0.0108707175, 0.0072303205, -0.043104317, -0.015091559, 0.009571026, -0.005063117, -0.008719287, -0.016290303, 0.010687751, 0.0033943388, -0.0044353534, -0.0057665906, 0.010151471, 0.015836041, 0.0056246337, 0.04063112, 0.22591911, -0.0003475964, -0.00011977584, 0.039217863, 0.016984312, 0.021564778, 0.0144732585, 0.017034786, 0.00296216, 0.015205123, -0.0037634259, -0.0050315713, -0.013438554, 0.014372312, 0.00046372472, -0.035129514, -0.030334538, -0.00861834, -0.0063186437, 0.007501615, -0.019608932, -0.026044294, -0.0071419915, -0.008990581, 0.0029590053, 0.006555238, -0.01815782, 0.014283983, 0.024214633, -0.0010796584, -0.0018848676, -0.035482828, 0.010731915, -0.003416421, -0.007015808, -0.0043407157, 0.005501605, -0.020883385, 0.025602652, 0.02685187, 0.00040043576, -0.0035615321, -0.024467, 0.0043407157, -0.013653065, 0.017148351, -0.0059211655, -0.00569088, 0.008119915, 0.008397519, -0.024000121, -0.021400739, 0.009375442, 0.047344085, -0.0052271555, 0.010927499, 0.015760332, -0.0021514304, 0.017160969, -0.0044195806, -0.027937049, 0.037880316, -0.020921241, 0.028138943, -0.0010110461, -0.002069411, -0.015268216, 0.0010930655, 0.00853632, -0.015596293, 0.01538178, 0.010012669, -0.0012878614, -0.007009499, -0.0059747933, -0.014990612, 0.031142112, 0.00626817, 0.030914983, 0.013690921, -0.02393703, 0.03000646, -0.022183077, -0.0011695642, 0.0112745045, -0.04010115, 0.012119935, -0.024517473, 0.013539501, 0.0020993797, 0.011123084, 0.0071672285, 0.00037657918, -0.0039747832, 0.01984868, 0.018208293, 0.0139180515, 0.027028527, -0.028643677, 0.0072240112, -0.037350345, -0.029224122, 0.017905453, 0.0051293634, -0.012530032, 0.008719287, 0.017148351, 0.0015694086, 0.021325028, -0.008977963, 0.025754072, -0.012637287, 0.0030015924, 5.6536166e-05, 0.016719326, 0.0001789244, -0.0056057065, -0.025060063, -0.003940083, 0.0076277987, -0.020908622, 0.0043438706, -0.01515465, 0.010788698, 0.014940138, -0.023280874, -0.018637318, 0.0103092, 0.0010347056, -0.048429266, 0.0006498455, 0.005318639, 0.039646886, -0.0034511215, -0.0142966015, 0.03437241, 0.01577295, -0.0335396, -0.0112492675, 0.002411684, -0.00091246516, -0.025640508, -0.0041262037, -0.016984312, -0.0012665679, -0.010094688, 0.0064732186, 0.00037993092, -0.029526962, -0.017981162, -0.019949628, 0.0011963783, -0.017943308, -0.011583654, 0.020366034, -0.02099695, -0.019823443, -0.012586814, 0.008813924, 0.029754093, -0.010176707, 0.019672023, 0.022321878, 0.0039116917, -0.019571077, 0.013564737, -0.16050553, 0.027280895, 0.011123084, 0.005318639, -0.012479558, -0.022826614, 0.006091513, 0.006485837, -0.013678302, 0.024050593, 0.025261957, 0.0083849, -0.016984312, 2.9845378e-05, -0.024277724, -0.0014053698, 0.0008194047, -0.0069211703, 0.018119965, 0.013337607, 0.013148331, -0.014940138, 0.015558437, 0.0014755594, -0.0068265325, -0.01007576, -0.011766621, 0.030284064, -0.001716097, -0.0315459, -0.0073880497, 0.0019053724, 0.0069653345, 0.0048139044, 0.014586824, 0.001315464, -0.0017350245, 0.0075647067, -0.0075647067, 0.0049337787, 0.0108959535, 0.0024369208, 0.017564757, 0.013072621, -0.02730613, 0.014586824, 0.02977933, 0.028870808, -0.009501625, -0.012391229, -0.019104198, -0.021905473, -0.006031576, -0.013653065, 0.03533141, 0.02307898, 0.0048517594, 0.012176718, -0.00013919629, -0.0055836244, -0.03061214, -0.009981123, 0.004608856, 0.0053281025, 0.019596312, -0.009110456, 0.008574176, 0.0052839383, -0.02376037, 0.012662524, -0.013337607, -0.03147019, -0.013123094, -0.0034416576, -0.003501595, 0.008340736, -0.017804505, -0.00015043451, -0.0049653244, -0.021211464, 0.0020189376, 0.037754133, -0.031899214, -0.024681512, -0.017022168, 0.020075811, -0.0057508177, 0.006504765, -0.008668813, -0.009501625, 0.008725596, -0.043432396, -0.0038265176, -0.024530092, 0.02116099, 0.020340797, 0.017589994, -0.001494487, -0.0027192566, -0.009217712, 0.005041035, -0.007671963, -0.012479558, 0.0028517493, 0.036189456, 0.0139180515, 0.0036214693, 0.02715471, 0.0315459, 0.022359734, -0.00892749, 0.015987461, 0.012946437, 0.013123094, 0.0027933894, -0.009343895, 0.018170439, -0.015444873, -0.0029369232, 0.005362803, 0.048429266, 0.0051293634, -0.018448042, 0.012454322, 0.00031723347, 0.0013541077, -0.094839595, -0.010649896, 0.023848701, 0.01253634, 0.0032003315, 0.0055646966, -0.0070725908, 0.03447336, 0.019924391, 0.018965395, -0.0041356673, -0.013539501, 0.0060820496, -0.026574265, 0.010712988, 0.0063186437, 0.01115463, -0.020302942, -0.032656316, 0.016706709, -0.0027192566, -0.006416436, -0.013627829, -0.008826543, 0.0021482757, -0.016492197, -0.04209485, 0.026498556, 0.004918006, 0.013362844, 0.028694151, 0.0020410197, -0.008088369, -0.0077035087, -0.0021088433, -0.0151041765, 0.0100631425, -0.008119915, 0.01947013, -0.019419655, -0.0011601005, -0.02339444, 0.0017949617, -0.041943427, 0.011564727, 0.00072042947, -0.01731239, 0.015583674, -0.009911722, -0.000672322, -0.005375421, 0.0108454805, -0.0056593344, 0.00010163695, 0.025653126, -0.01885183, 0.014258747, 0.019495366, -0.046057016, 0.007993731, 0.0044385083, 0.0057034986, -3.728824e-05, 0.029097939, -0.005457441, -0.005653025, -0.024668893, -0.005533151, 0.0073880497, -0.03384244, -0.018044256, 0.033135813, 0.0011246114, 0.023684662, -0.017791888, -0.006201924, -0.04461852, 0.00077129726, 0.020933859, -0.02276352, -0.01130605, -0.013766631, 0.007892784, -0.026372373, 0.0033375563, 0.019747734, 0.007507924, 0.009817084, 0.009552099, 0.00031683914, 0.018031636, 0.023899173, -0.0145742055, -0.024517473, -0.007394359, 0.012012679, -0.025817165, 0.004918006, 0.008132533, -0.018183056, -0.022713048, -0.023142071, -0.043028608, 0.01916729, -0.010914882, -0.02292756, 0.008403827, -0.0144732585, -0.0050063343, -0.0140694715, -0.021842381, 0.023747753, 0.0058233733, 0.026599502, -0.0030331383, -0.013564737, -0.0107445335, 0.009741374, -0.0136404475, -0.0018028482, 0.009028437, -0.00016206707, -0.010731915, 0.002053638, 0.011779239, -0.0017208288, -0.031066403, 0.0036403968, -0.006230315, 0.010933809, -0.03793079, -0.024101067, 0.006107286, -0.025325049, 0.0063501894, 0.05070057, -0.021602632, -0.024214633, -0.009280804, 0.007861238, 0.020782439, -0.02617048, -0.034448124, -0.044139024, 0.0016577371, -0.02876986, 0.0068454603, 0.012359683, 0.0009960618, -0.0006502399, 0.0073249578, 0.0064511364, 0.008365973, 0.021665724, -0.0065678563, -0.008763451, 0.0039810925, -0.034220994, -0.0022287178, -0.0009810774, 0.018599462, -0.005116745, 0.022410206, -0.018763501, 0.0056246337, 0.0034668944, 0.026372373, -0.0043123243, 0.017943308, 0.019192526, -0.0027097927, -0.04146393, 0.004533146, -0.009047364, 0.038687892, -0.00041443427, 0.024744604, 0.00400002, 0.014725626, -0.011091539, -0.013665684, 0.030485958, -0.0018343941, 0.02407583, -0.020605782, 0.024113687, 0.021287173, 0.010176707, -0.023142071, 0.0015047394, 0.0017854979, 0.017438574, -0.031949688, 0.0024668893, 0.013564737, 0.010555258, -0.009716137, 0.004924315, 0.008656195, -0.0105931135, 0.0030788798, 0.06647352, -0.011665674, 0.0014881778, -0.029552199, -0.035028566, -0.02685187, 0.009451152, -0.0068517695, -0.0145742055, 0.0058454555, 0.0077981465, 0.007041045, -0.0017870752, -0.0038896094, 0.021968564, -0.0077666007, 0.017968545, -0.01870041, -0.011634128, -0.004290242, 0.032959156, -0.010271345, 0.008277644, 0.0015938566, -0.0071356827, 0.002107266, 0.0074448325, 0.01776665, -0.01130605, 0.0016261912, 0.011318669, 0.011690911, -0.0019274545, -0.008492156, 0.0016766646, -0.020681491, -0.0071735377, 0.00977292, 0.018776119, 0.013602592, 0.0424734, 0.0062429337, -0.041337747, 0.015369163, -0.00036534097, 0.016630998, 0.007930639, 0.031646848, 0.015167269, -0.011287123, -0.00024802962, -0.0009692478, 0.026902344, 0.0014361271, -0.03131877, -0.021325028, -0.021375502, 0.026448082, -0.031268295, -0.0062366244, -0.0066120205, 0.017034786, 0.022599483, -0.0034290394, -0.015457491, -0.018107347, 0.012984293, -0.01770356, -0.0056120157, -0.006763441, 0.006388045, -0.0030709933, -0.024668893, 0.00043967098, 0.004362798, 0.0038801457, -0.009457461, -0.0043344065, 0.001630923, 0.011148321, 0.002599382, 0.033438653, -0.008403827, -0.006580475, 0.0074195955, 0.01123665, -0.019142052, -0.013135713, -0.02147645] }, { + "object": "embedding", "index": 1, - "embedding": [0.00089398306, -0.00462804, 0.0042670527, -0.0047607105, -0.017598893, 0.003273567, -0.024374345, -0.025522098, 0.0054086363, -0.024312638, -0.018931769, 0.029347945, -0.00042616535, -0.018746648, -0.011675002, -0.019425428, 0.024892684, -0.012687, 0.013587926, -0.008262594, -0.0074048643, 0.017352065, -0.029372627, 0.011428174, -0.007238255, -0.007355498, 0.02142474, -0.012582098, 0.03068082, -0.008873495, 0.008237911, -0.024053467, -0.0022800812, -0.018117234, -0.01122454, -0.00754062, 0.004739113, -0.0063033905, 8.147279e-05, -0.012150148, 0.02151113, -0.0002720902, 0.001740143, -0.01875899, 0.0031362686, -0.0052574533, 0.007546791, 0.010224883, -0.0011215283, 0.020894058, -0.0047175153, -0.0028323606, -0.008151521, -0.032852914, 0.011496051, -0.0066952314, -0.007694888, 0.033124425, -0.022732932, -0.013921144, 0.0149825085, 0.0007686403, -0.00968186, -0.0025608488, -0.012384635, -0.0065162806, 0.017870406, 0.0114405155, -0.005812818, 0.024756929, 0.00745423, -0.00065023964, 0.013180658, -0.0019345208, -0.0083798375, -0.023029128, -0.029965017, 0.003248884, 0.016586896, -0.003949261, 0.010718541, -0.0034093228, -0.03127321, 0.02655878, 0.024682881, 0.0031779208, -0.044676013, 0.0041528945, 0.0017771674, -0.0043842965, 0.01165649, 0.03314911, 0.021992447, -0.01636475, -0.0024096663, 0.0055845017, 0.020474449, 0.026237901, -0.0015565641, -0.023868345, 0.01336578, 0.0058745258, -0.029718189, 0.012322928, -0.03616042, -0.023596834, 0.009064788, 0.006744597, 0.010132322, -0.024300296, -0.021807324, 0.031075746, 0.035987638, -0.03675281, 0.016846066, 0.0029403481, 0.012421659, -0.009848469, -0.02673156, -0.0016167287, 0.016154945, 0.032877598, -0.0011654948, -0.014143291, 0.024868002, 0.0033445302, -0.011347954, -0.032359257, 0.0068001337, -0.0042824796, -0.0018357892, 0.0005187262, -0.011415832, 0.016006848, -0.008972227, 0.015044216, -0.02853341, 0.03872744, -0.02133835, -0.033469986, 0.012150148, 0.020338694, -0.02132601, 0.0056184405, -0.00847857, 0.020104205, 0.012477196, 0.011767563, 0.0057233428, -0.023436395, 0.028434679, -0.028829604, 0.03956666, 0.009496738, 0.017512504, 0.017450796, 0.0057480256, -0.01508124, -0.02981692, 0.013847096, -0.00797257, 0.011162832, 0.024386685, -0.0065779877, 0.014686313, 0.02365854, 0.0115947835, 0.0005488084, -0.0043380163, -0.0047144303, -0.010132322, 0.050698638, -0.018536843, -0.0021767216, -0.0032612255, 0.023510443, 0.015007191, 0.011551588, -0.024374345, -0.010471712, -0.0039184075, 0.0011222997, 0.03386491, 0.0052481974, 0.017672943, 0.013723682, 0.012847439, -0.01756187, -0.0005977885, -0.012020563, 0.015179971, 0.034852225, 0.01062598, -0.004362699, -0.68993586, -0.02211586, 0.007546791, -0.001740143, 0.013415146, 0.03386491, 0.029347945, 0.0034648594, -0.016636262, 0.0011747509, -0.00736784, 4.3002205e-05, 0.0029372629, -0.014291388, 0.007787449, -0.029347945, -0.014994849, 0.009817616, -0.017500162, 0.032532036, -0.0117613925, -0.019770987, -0.021498788, -0.0033291036, 0.026015757, 0.025299953, 0.006991426, 0.0030745612, -0.0033167622, 0.0023587577, -0.012822757, -0.0028863542, -0.0040911874, -0.008083643, 0.036283836, -0.013205341, -0.01122454, 0.031075746, 0.012032905, 0.031421307, 0.013995193, 0.014427143, -0.00021192567, -0.026805608, -0.0029681164, -0.011113467, -0.0043318453, -0.015636604, 0.016673286, 0.0029804579, 0.008614325, 0.0013591012, 0.009885494, 0.02571956, 0.0050846734, -0.006068903, 0.025423367, 0.015883433, -0.026435364, 0.00608433, -0.0023834407, 0.011434345, -0.0010189401, -0.021548154, 0.0048039057, 0.0053839535, -0.0068803527, 0.010897492, 0.009299275, 0.0042115166, -0.016006848, 0.003940005, -0.010070615, 0.0067816214, 3.0082261e-05, -0.005371612, 0.041442554, 0.012051417, -0.00924991, 0.019561183, 0.018438112, 0.007392523, -0.020412741, -0.008336643, 0.020671912, -0.025546782, -0.033198476, -0.013958169, 0.017500162, -0.010564273, 0.016241336, 0.029273896, -0.021005131, -0.0051309536, -0.011094955, 0.0064484025, -0.0091511775, 0.012421659, 0.0077689365, -0.0028863542, 0.0046372963, -0.030039065, -0.010317444, 0.009928688, 0.019598207, 0.01884538, -0.021412399, 0.002713574, -0.003427835, -0.023485761, 0.028928336, 0.011045589, -0.013526218, 0.03403769, -0.012921488, -0.025324635, 0.015871093, 0.014710996, 0.022918055, -0.04507094, 0.016031532, 0.006929719, 0.00012987437, 0.0114405155, -0.0063620126, -0.022560153, 0.0029881713, 0.008077472, -0.015463824, -0.029520726, 0.02742268, 0.0027922508, 0.019178597, 0.007016109, 0.008645179, -0.008435374, 0.016648604, 0.00063095614, 0.011687344, -0.017278016, -0.017919771, 0.014945484, -0.018129576, 0.008330472, 0.0024852576, -0.0066705486, -0.03401301, 0.0024405199, -0.00062671374, 0.0061151837, -0.019252647, -0.008805618, -0.020585522, -0.0044922843, -0.011002394, 0.0048902957, -0.0226342, -0.009712714, -0.0039369194, 0.006090501, 0.021622203, 0.014661631, -0.011804587, 6.05984e-05, -0.0112862475, -0.011064101, -0.0070901574, 0.034062374, -0.029545408, -0.014587582, 0.007923204, -0.0140692415, -0.013575585, -0.008342814, -0.019203281, 0.00086235814, -0.016253676, -0.024473077, -0.008540276, -0.0028385313, 0.009700372, -0.005896123, 0.0033815545, -0.010348298, 0.032186475, 0.002978915, 0.02571956, 0.027644826, -0.013118951, 0.033815548, -0.023238933, -0.013069585, -0.006615012, 0.019647572, -0.0031239272, 0.00030390796, -0.008885837, -0.00033244755, -0.009527592, 0.014686313, 0.01875899, 0.012551244, 0.022239275, -0.020462109, 0.027274583, -0.005704831, 0.008645179, -0.019166257, 0.017105237, 0.034383252, 0.0016367835, -0.009033934, -0.0048810397, 0.004985942, 0.007978741, -0.0023464162, 0.006892694, 0.015278703, 0.0030637626, -0.019351378, -0.02621322, 0.031248527, 0.03512374, -0.040010948, -0.019474793, -0.010440858, 0.017364407, 0.013081927, 0.0011678088, -0.017055871, -0.034210473, 0.010082956, 0.0016738079, 0.0014192656, -0.0034586887, -0.00031875627, 0.013674316, -0.015315727, 0.01901816, -0.0056523797, 0.015488507, 0.02870619, 0.020980448, -0.018820696, 0.017290358, -0.011773734, 0.022128202, 0.011002394, -0.009237568, 0.022955079, -0.013242366, 0.0046403813, -0.017031187, -0.005220429, -3.6108355e-05, -0.022239275, 0.04635445, -0.0031779208, 0.012174831, 0.012785732, 0.011884807, 0.0042115166, -0.00123183, -0.008151521, 1.9440178e-05, 0.011162832, -0.019203281, -0.0034586887, -0.00033726843, -0.012748708, -0.00030545064, -0.016130263, -0.0017864235, -0.030088432, 0.009077129, 0.0024220077, 0.010730882, -0.003292079, -7.6218035e-05, 0.025065465, 0.02168391, -0.0152910445, 0.017389089, 0.02981692, -0.019931426, -0.027447363, -0.037394565, 0.0059855985, -0.005621526, 0.004430577, 0.035025008, 0.023029128, 0.0181666, 0.012896805, 0.0008515594, -0.003616042, 0.019067526, 0.005991769, 0.018907087, -0.014809729, -0.005828245, -0.015562556, -0.032680135, -0.0056431238, 0.030433992, 0.026830291, 0.029347945, 0.009811445, 0.0042886506, -0.0020286243, -0.022498446, -0.020474449, -0.009749738, -0.007386352, -0.011347954, -0.0018990391, 0.008768593, -0.009367153, 0.024682881, 0.016673286, -0.0021921482, -0.009811445, 0.0037425417, -0.004985942, 0.07557898, -0.0059269764, 0.004695918, 0.0019545755, 0.007256767, -0.013032561, -0.024374345, -0.02210352, 0.0014084668, -0.0022847091, 0.0007239026, -0.021943081, -5.3849173e-05, -0.010348298, 0.0033105914, -0.0017077468, 0.0032828231, -0.014032218, 0.016006848, -0.017722309, -0.015871093, -0.0027475131, 0.001075248, -0.017537186, -0.0079170335, -0.0056091845, 0.017598893, 0.005741855, 0.020165913, -0.020116547, 0.0181666, 0.012582098, -0.015735336, -0.016920114, 0.006584158, -0.013513877, -0.0025253673, -0.0037302002, 0.011212198, -0.005158722, 0.015611921, 0.008015766, 0.0018728136, -0.0065162806, 0.0041004433, -0.0054456606, 9.458557e-05, 0.0037147736, -0.013526218, -0.02125196, 0.02544805, -0.0022245445, -0.012687, 0.0042207725, -0.0026318121, 0.014636948, -0.028113801, 0.0029079518, -0.02107918, -0.006584158, -0.0011770648, -0.0140692415, -0.0008330472, -0.00090709585, -0.031766865, -0.010212542, 0.003119299, -0.016303042, -0.0071580354, 0.00762701, 0.0003278195, -0.019573525, -0.017080553, 0.025670195, 0.03435857, 0.014254363, 0.0018234478, -0.017450796, -0.001894411, 0.023214249, -0.003986285, -0.007083987, 0.0116071245, -0.003350701, -0.0062262565, 0.006522451, 0.013180658, -0.020585522, -0.012909146, 0.014994849, 0.02425093, -0.0010073701, 0.01833938, -0.0068433285, -0.016130263, -0.0021042156, 0.0016228994, 0.00805279, -0.01695714, -0.0067260847, 0.017981479, -0.020634888, -0.016611578, -0.030656137, 0.02347342, -0.009120325, 0.020499133, -0.006121354, -0.01669797, 0.006436061, -0.009502909, -0.0065779877, 0.0041775773, -0.018154258, 0.0032334574, 0.012699342, -0.01620431, 0.024300296, -0.0026626657, -0.043096308, 0.009428861, -0.032063063, 0.032186475, 0.027521411, 0.010150835, 0.011422003, -0.019511817, -0.0061336956, -0.015031874, 0.011946514, 0.009052446, 0.018104892, -0.010983882, -0.010558102, -0.009897835, -0.015179971, 0.01585875, 0.020165913, 0.006349671, -0.010595126, -0.023818979, 0.024954392, 0.02707712, -0.011335613, -0.02038806, -0.014155632, 0.01482207, 0.02262186, -0.027768241, 0.017068211, -0.0026333549, -0.0028431593, -0.02836063, 0.0028693848, 0.02312786, 0.0020656486, -0.025818292, -0.0054610875, 0.015229337, 0.024781613, 0.028409995, -0.005297563, 0.017327381, -0.0096139815, -0.008453887, 0.009965713, 0.0054641725, 0.01568597, -0.018438112, 0.02406581, 0.027052436, -0.0038998951, 0.003214945, 0.013871779, -0.0049304054, 0.021980105, 0.00013459883, -0.0038998951, -0.0005333816, -0.036826856, -0.0030622198, 0.029027067, -0.012736366, 0.004146724, -0.0006857213, -0.003099244, -0.0060966713, -0.0044151503, 0.005192661, 0.020807669, 0.015537873, -0.019425428, 0.011730539, 0.0018758989, -0.002883269, -0.012970854, -0.032013696, -0.0009680317, 0.015155288, -0.0026009586, 0.03616042, 0.023152541, 0.0073740105, -0.017376747, -0.0041004433, 0.02947136, 0.01490846, -0.02947136, 0.022350349, -0.0045046257, -0.019758645, -0.016611578, -0.020104205, -0.039640706, 0.002232258, 0.005424063, -0.039023634, 0.017450796, -0.01585875, -0.016241336, -0.001154696, 0.01473568, 0.015389776, -0.029249214, 0.022041813, 0.00642989, -0.026978388, -0.021646887, 0.01800616, -0.009589299, -0.0064052073, 0.016784359, 0.021042155, -0.014957826, -0.0016275274, -0.007009938, 0.0102187125, 0.015722996, -0.030063748, -0.0012248879, 0.012008221, 0.015500849, -0.021992447, 0.0052667097, 0.0010305103, 0.006152208, -0.014538216, -0.015389776, 0.0074048643, -0.013057244, -0.02742268, 0.019499475, -0.02665751, -0.0020671913, 0.00874391, -0.026435364, 0.008768593, -0.019511817, -0.007738083, -0.004695918, -0.018672599, 0.033889595, 0.014933143, 0.030113114, 0.007324645, -0.011181345, -0.0059424033, -0.009996567, 0.011662661, 0.028558092, -0.0115701, -0.009996567, -0.015871093, 0.035000324, 0.0076516927, 0.0058004768, 0.0023541297, -0.009552275, -0.026978388, -0.0007929375, 0.020128889, -0.011434345, -0.024127515, 0.018462794, -0.030532723, -0.0009965713, -0.029940333, 0.003582103, 0.015895775, -0.0019283501, -0.019339036, 0.003788822, -0.01208844, 0.0052142586, 0.0060874154, -0.009620152, 0.018277673, 0.010261907, -0.024090491, 0.012316757, -0.009262251, 0.036925588, 0.00950908, 0.011366466, 0.020881716, -0.01824065, 0.025250586, -0.00079910824, -0.01851216, -0.009157348, 0.022214592, -0.007694888, 0.009453543, -0.01671031, 0.0050599906, 0.01748782, 0.024756929, -0.005766538, 0.00086081546, 0.012699342, -0.01669797, -0.0066890605, 0.021906056, -0.013242366, -0.0043441867, -0.0088303005, -0.012736366, 0.002724373, 0.0010567359, -0.018129576, -0.020857034, 0.010878979, -0.0035018837, -0.02099279, -0.007164206, -0.020104205, -0.01208227, 0.012612952, 0.008811789, 0.0071271816, 0.006460744, 0.025818292, 0.0006012595, 0.01620431, -0.029101117, 0.0069790846, 0.0077689365, 0.00668289, -0.014254363, -0.016340068, 0.0008322759, 0.010274249, 0.025768926, -0.03307506, -0.017709967, 0.0046897475, -0.022523127, 0.0034000669, -0.0014570613, 0.011977368, 0.020215278, -0.010033591, -0.011773734, 0.0033105914, 0.004720601, 0.0074665714, -0.0019345208, 0.010996223, -0.0018990391, -0.002030167, 0.011675002, 0.010866638, -0.017426113, -0.018919427, 0.0076516927, 0.014427143, 0.033124425, 0.019005818, -0.022436738, 0.033445302, -0.014883777, 0.004038736, 0.017919771, 0.02870619, 0.0020224536, -0.008552618, -0.02579361, -0.0069544017, 0.013982852, -0.0060781594, -0.014488851, 0.0028693848, 0.0134521695, -0.013378121, -0.016858408, -0.0030884454, -0.024645856, -0.017290358, -0.002540794, 0.009101812, -0.025744244, 0.013686657, 0.010311273, -0.0028092202, -0.00552588, -0.008669862, 0.0013459884, 0.005707916, -0.0100644445, -0.0028308178, -0.0017771674, -0.008034278, 0.0014439485, -0.023954736, 0.003341445, 0.017092895, -0.0143654365, -0.03751798, 0.031001698, -0.00951525, -0.018549185, 0.013094268, -0.020375717, -0.021622203, 0.013822413, -0.0063805245, -0.0028431593, -0.010342127, 0.008435374, 0.0015149118, -0.005004454, -0.02373259, -0.001538052, 0.028212532, -0.006744597, 0.03147067, 0.22056621, 0.002096502, 0.0037672247, 0.027101804, -0.017635917, 0.033445302, 0.0062108296, -0.010249566, -0.010582785, 0.012045246, 0.009194373, 0.01191566, -0.028089117, 0.0032427134, 0.013217682, -0.007941716, -0.012847439, -0.015957482, -0.022066494, -0.028508727, -0.016451139, 0.0014177229, -0.0116071245, 0.0025917024, 0.012069928, -1.4125164e-05, 0.0037086029, 0.025571464, 0.012921488, -0.0021366118, -0.01627836, -0.00951525, 0.015821727, -0.0067137433, -0.011082613, -0.003915322, 0.00057966204, 0.014957826, 0.013513877, 0.023325322, 0.020597864, 0.009274593, 0.015303385, -0.026805608, -0.016080897, 0.006127525, -0.016870748, -0.01740143, 0.0030406222, 0.0022091179, -0.02014123, -0.024287954, 0.017413773, 0.04823035, -0.004223858, 0.005390124, 0.027101804, 0.005760367, 0.0074912542, -0.004257797, -0.022325665, 0.008731569, -0.005982513, 0.011650319, -0.0016738079, 0.015266362, -0.02184435, 0.01422968, 0.011958855, -0.016056214, 0.02270825, -0.008935203, 0.015204654, -0.0021288984, 0.0034741154, -0.0031686649, 0.0106815165, -0.004334931, 0.032063063, 0.014316071, -0.0026379828, 0.008355155, 0.003230372, -0.0032365427, -0.0062509393, -0.021646887, 0.0039523463, 0.011545417, 0.028311264, 0.0016861493, 0.010638322, -0.005967086, -0.010576614, -0.027620142, 0.008262594, 0.025966391, 0.0055752457, 0.023596834, 0.009632494, 0.0021474105, -0.028138483, -0.020536156, 0.010514907, -0.0007084758, -0.0067199143, 0.014044559, 0.0041960897, 0.004763796, 0.020696595, -0.024399027, 0.020351036, -0.024584148, 0.022300983, -0.0072135716, 0.026410682, -0.0057788794, 0.005056905, -0.02433732, -0.0034864568, 0.0039523463, -0.0045601623, -0.001086818, 0.00711484, -0.008645179, -0.015969824, -0.021523472, -0.031914964, 0.010298932, -0.0122118555, -0.020684253, 0.003264311, -0.015661288, 0.04475006, -0.0021304411, -0.008441545, 0.016191969, -0.0053345873, -0.01182927, 0.006007196, -0.004140553, 0.01646348, 0.0009742024, 0.005680148, -0.009546104, -0.013550902, -0.009194373, -0.0054209777, -0.015994506, -0.043392505, -0.008170034, -0.01988206, -0.010786419, -0.019598207, -0.009725055, 0.012002051, -0.014994849, -0.0363332, 0.0019345208, 0.0028909824, 0.030878283, -0.009737397, 0.020276986, 0.013230024, -0.009996567, -0.008725398, -0.018462794, -0.15560088, 0.019388402, 0.0050846734, -0.007904693, -0.009836128, -0.011724368, 0.018796014, 0.015019532, -0.019339036, 0.03016248, 0.027546095, -0.016722651, -0.03727115, -0.012489538, 0.012810415, -0.00027131886, -0.0021258132, 0.023522785, 0.0035759322, 0.008355155, 0.0049211495, -0.028780239, 0.020116547, 0.0011153576, -0.011366466, 0.0029372629, -0.0031810063, 0.027792923, -0.015105923, -0.0181666, -0.007670205, -0.014513534, 0.011428174, 0.029841602, -0.0037980783, -0.00024200793, -0.023251273, 0.0045138816, -0.017981479, 0.019770987, -0.015611921, 0.009021593, -9.364549e-06, 0.0047853934, -0.010039762, 0.031643454, 0.015797043, 0.012822757, -0.0021798068, -0.013007878, 0.0061645494, -0.015624263, -0.0114528565, -0.017179284, 0.046329767, 0.03240862, 0.0058251596, 0.021449422, 0.011699685, 0.019203281, -0.016241336, -0.0036407248, 0.018388746, 0.0021690081, 0.015611921, -0.024028784, 0.018203624, 0.006676719, -0.029101117, 0.015241679, -0.0034926275, -0.009033934, -0.012921488, -0.021967763, 0.0016290701, 0.0055752457, -0.020659572, 0.015130606, -0.006608841, -0.026879657, -0.0013668145, 0.045712695, -0.0009680317, -0.018438112, -0.0076455222, 0.012748708, 0.017981479, -0.008410691, -0.013155975, -0.005735684, 0.00014520476, -0.043738063, 0.023325322, -0.037246466, 0.016549872, 0.010872809, -0.016944798, -0.0011894063, -0.0029125798, -0.0042732237, -0.0017092895, -0.0031285551, -0.024275612, -0.0019036671, 0.010126152, 0.021474106, 0.017956795, 0.01954884, 0.04114636, 0.025090149, -0.008935203, 0.015229337, 0.013353438, 0.028039752, -0.0030344515, 0.0047761374, 0.023461077, -0.0091511775, -0.0076455222, 0.01464929, 0.03914705, -0.01996845, 0.010440858, 0.014513534, 0.009990396, -0.020770645, -0.09379494, -0.027373314, 0.0034556033, 0.0012865951, 0.007448059, 0.0217703, -0.0054364046, 0.0115947835, -0.004732942, 0.014994849, -0.00685567, -0.020869376, -0.017919771, -0.012785732, 0.025040783, 0.0033599571, 0.024004102, -0.011724368, -0.03830783, 0.010089127, -0.020178255, -0.00951525, -0.021153228, 0.006152208, -0.0014161803, -0.010601297, -0.04050461, 0.016636262, 0.010891321, 0.0065101096, -0.0041436385, 0.010039762, 0.01594514, -0.022584835, -0.014081583, -0.013834755, -0.0140569005, -0.013513877, 0.011175174, -0.03418579, -0.0018033929, 8.282263e-05, 0.004393553, -0.027348632, -0.018055527, 0.00847857, -0.0024405199, 0.020795327, 0.0017200882, -0.00968186, -0.019215623, 0.017253334, -0.0030822747, 0.0034432618, 0.030656137, -0.024522442, 0.02082001, 0.005535136, -0.031569403, 0.011070272, -0.0015071984, 0.00924991, 0.018487478, 0.02312786, -0.017500162, -0.006590329, -0.016599238, 0.0123661235, 0.019647572, -0.029890968, -0.009286934, 0.010095298, -0.020289328, 0.004779223, -0.010514907, 0.00056539226, -0.03050804, -0.015525532, 0.020894058, -0.008151521, -0.009219056, -0.007898522, 0.0029295494, -0.035469297, -0.018055527, 0.0250161, 0.0053438437, -0.027546095, -0.0046156985, -0.005896123, 0.0012326014, 0.031692818, 0.02347342, -0.033198476, -0.026706876, 0.023559809, 8.370244e-06, 0.017092895, -0.015463824, -0.011835441, -0.00745423, -0.018610891, -0.032951646, 0.0167967, -0.009743567, -0.029150482, 0.0025809037, -0.008774764, 0.009398007, -0.018833037, -0.008620496, 0.022288641, -0.021461764, 0.0019391488, 0.0022384287, -0.009638665, -0.0344573, 0.020931082, -0.00084307464, 0.007293791, -0.00736784, -0.0066890605, -0.005655465, 0.012785732, -0.00823174, -0.008768593, -0.010582785, 0.004507711, 0.006254025, 0.02880492, -0.019215623, -0.018018503, 0.027447363, -0.012909146, 0.011175174, 0.02579361, -0.02056084, -0.024756929, 0.0017000334, 0.01054576, 0.008281106, -0.02406581, -0.00720123, -0.0317175, 0.009206714, -0.009953371, -0.010101469, 0.001460918, -0.023707906, -0.0044213207, 0.0022785384, 0.017524846, 0.0137483645, 0.023868345, -0.028730873, -0.007318474, -0.0062509393, -0.03102638, 0.0008723856, 0.0013297902, -0.006701402, -0.015821727, 0.02665751, -0.0067569385, 0.001011998, -0.014846752, 0.020696595, -0.0037949928, -0.009089471, -0.0039585168, -0.004276309, -0.02511483, -0.017759332, 0.008348985, 0.019055184, 0.0051463805, 0.021918397, -0.015537873, -0.0072197425, -0.021634545, -0.009410348, 0.007269108, 0.002695062, -0.006349671, -0.035000324, -0.00094334886, 0.03699964, 0.019561183, -0.013847096, 0.0007624696, -0.0021875203, -0.00075398484, -0.039048318, 0.007170377, -0.0018280759, -0.0008176204, -0.013958169, -0.0046588937, -0.006272537, -0.008367497, 0.004810076, 0.060522422, 0.009058617, 0.0031424393, -0.025398685, -0.03418579, -0.0041498095, 0.015179971, -0.001009684, -0.0023063067, -0.0126746595, -0.023448735, 0.019993134, -0.022905713, -0.006374354, 0.020523814, 0.003119299, 0.00066836615, -0.01721631, -0.01285978, -0.024300296, 0.03857934, -0.008207058, 0.02700307, -0.00968186, 0.016117921, 0.02887897, 0.002729001, 0.0126746595, -0.010638322, 0.010144664, 0.0044953697, 0.026929023, 0.0006228571, 0.0015642776, -0.0017231735, -0.036456615, 2.7286153e-05, 0.011644149, 0.015871093, -0.0060565616, 0.044700697, -0.0012611409, -0.04072675, 0.02766951, -0.0075961566, -0.0006085873, 0.024090491, -0.0053932094, -0.013575585, -0.008095984, 0.0005711773, 0.01173671, 0.018055527, 0.00565855, -0.025262928, -0.0045601623, -0.020782985, 0.0075035957, -0.033692133, -0.0209064, 0.014081583, 0.013180658, 0.015216996, 0.0062355124, 0.0067877923, -0.017500162, 0.017858064, -0.0023541297, 0.006368183, -0.0011153576, 0.0039369194, 0.014587582, -0.042355824, -0.013020219, 0.0028724703, 0.0005954745, -0.018018503, -0.021227278, 0.008632838, 0.02031401, 0.0004061105, 0.041417874, -0.016253676, -0.03203838, 0.014303729, -0.0027274583, -0.018314697, -0.019092208, -0.01714226], - "object": "embedding" + "embedding": [0.00089398306, -0.00462804, 0.0042670527, -0.0047607105, -0.017598893, 0.003273567, -0.024374345, -0.025522098, 0.0054086363, -0.024312638, -0.018931769, 0.029347945, -0.00042616535, -0.018746648, -0.011675002, -0.019425428, 0.024892684, -0.012687, 0.013587926, -0.008262594, -0.0074048643, 0.017352065, -0.029372627, 0.011428174, -0.007238255, -0.007355498, 0.02142474, -0.012582098, 0.03068082, -0.008873495, 0.008237911, -0.024053467, -0.0022800812, -0.018117234, -0.01122454, -0.00754062, 0.004739113, -0.0063033905, 8.147279e-05, -0.012150148, 0.02151113, -0.0002720902, 0.001740143, -0.01875899, 0.0031362686, -0.0052574533, 0.007546791, 0.010224883, -0.0011215283, 0.020894058, -0.0047175153, -0.0028323606, -0.008151521, -0.032852914, 0.011496051, -0.0066952314, -0.007694888, 0.033124425, -0.022732932, -0.013921144, 0.0149825085, 0.0007686403, -0.00968186, -0.0025608488, -0.012384635, -0.0065162806, 0.017870406, 0.0114405155, -0.005812818, 0.024756929, 0.00745423, -0.00065023964, 0.013180658, -0.0019345208, -0.0083798375, -0.023029128, -0.029965017, 0.003248884, 0.016586896, -0.003949261, 0.010718541, -0.0034093228, -0.03127321, 0.02655878, 0.024682881, 0.0031779208, -0.044676013, 0.0041528945, 0.0017771674, -0.0043842965, 0.01165649, 0.03314911, 0.021992447, -0.01636475, -0.0024096663, 0.0055845017, 0.020474449, 0.026237901, -0.0015565641, -0.023868345, 0.01336578, 0.0058745258, -0.029718189, 0.012322928, -0.03616042, -0.023596834, 0.009064788, 0.006744597, 0.010132322, -0.024300296, -0.021807324, 0.031075746, 0.035987638, -0.03675281, 0.016846066, 0.0029403481, 0.012421659, -0.009848469, -0.02673156, -0.0016167287, 0.016154945, 0.032877598, -0.0011654948, -0.014143291, 0.024868002, 0.0033445302, -0.011347954, -0.032359257, 0.0068001337, -0.0042824796, -0.0018357892, 0.0005187262, -0.011415832, 0.016006848, -0.008972227, 0.015044216, -0.02853341, 0.03872744, -0.02133835, -0.033469986, 0.012150148, 0.020338694, -0.02132601, 0.0056184405, -0.00847857, 0.020104205, 0.012477196, 0.011767563, 0.0057233428, -0.023436395, 0.028434679, -0.028829604, 0.03956666, 0.009496738, 0.017512504, 0.017450796, 0.0057480256, -0.01508124, -0.02981692, 0.013847096, -0.00797257, 0.011162832, 0.024386685, -0.0065779877, 0.014686313, 0.02365854, 0.0115947835, 0.0005488084, -0.0043380163, -0.0047144303, -0.010132322, 0.050698638, -0.018536843, -0.0021767216, -0.0032612255, 0.023510443, 0.015007191, 0.011551588, -0.024374345, -0.010471712, -0.0039184075, 0.0011222997, 0.03386491, 0.0052481974, 0.017672943, 0.013723682, 0.012847439, -0.01756187, -0.0005977885, -0.012020563, 0.015179971, 0.034852225, 0.01062598, -0.004362699, -0.68993586, -0.02211586, 0.007546791, -0.001740143, 0.013415146, 0.03386491, 0.029347945, 0.0034648594, -0.016636262, 0.0011747509, -0.00736784, 4.3002205e-05, 0.0029372629, -0.014291388, 0.007787449, -0.029347945, -0.014994849, 0.009817616, -0.017500162, 0.032532036, -0.0117613925, -0.019770987, -0.021498788, -0.0033291036, 0.026015757, 0.025299953, 0.006991426, 0.0030745612, -0.0033167622, 0.0023587577, -0.012822757, -0.0028863542, -0.0040911874, -0.008083643, 0.036283836, -0.013205341, -0.01122454, 0.031075746, 0.012032905, 0.031421307, 0.013995193, 0.014427143, -0.00021192567, -0.026805608, -0.0029681164, -0.011113467, -0.0043318453, -0.015636604, 0.016673286, 0.0029804579, 0.008614325, 0.0013591012, 0.009885494, 0.02571956, 0.0050846734, -0.006068903, 0.025423367, 0.015883433, -0.026435364, 0.00608433, -0.0023834407, 0.011434345, -0.0010189401, -0.021548154, 0.0048039057, 0.0053839535, -0.0068803527, 0.010897492, 0.009299275, 0.0042115166, -0.016006848, 0.003940005, -0.010070615, 0.0067816214, 3.0082261e-05, -0.005371612, 0.041442554, 0.012051417, -0.00924991, 0.019561183, 0.018438112, 0.007392523, -0.020412741, -0.008336643, 0.020671912, -0.025546782, -0.033198476, -0.013958169, 0.017500162, -0.010564273, 0.016241336, 0.029273896, -0.021005131, -0.0051309536, -0.011094955, 0.0064484025, -0.0091511775, 0.012421659, 0.0077689365, -0.0028863542, 0.0046372963, -0.030039065, -0.010317444, 0.009928688, 0.019598207, 0.01884538, -0.021412399, 0.002713574, -0.003427835, -0.023485761, 0.028928336, 0.011045589, -0.013526218, 0.03403769, -0.012921488, -0.025324635, 0.015871093, 0.014710996, 0.022918055, -0.04507094, 0.016031532, 0.006929719, 0.00012987437, 0.0114405155, -0.0063620126, -0.022560153, 0.0029881713, 0.008077472, -0.015463824, -0.029520726, 0.02742268, 0.0027922508, 0.019178597, 0.007016109, 0.008645179, -0.008435374, 0.016648604, 0.00063095614, 0.011687344, -0.017278016, -0.017919771, 0.014945484, -0.018129576, 0.008330472, 0.0024852576, -0.0066705486, -0.03401301, 0.0024405199, -0.00062671374, 0.0061151837, -0.019252647, -0.008805618, -0.020585522, -0.0044922843, -0.011002394, 0.0048902957, -0.0226342, -0.009712714, -0.0039369194, 0.006090501, 0.021622203, 0.014661631, -0.011804587, 6.05984e-05, -0.0112862475, -0.011064101, -0.0070901574, 0.034062374, -0.029545408, -0.014587582, 0.007923204, -0.0140692415, -0.013575585, -0.008342814, -0.019203281, 0.00086235814, -0.016253676, -0.024473077, -0.008540276, -0.0028385313, 0.009700372, -0.005896123, 0.0033815545, -0.010348298, 0.032186475, 0.002978915, 0.02571956, 0.027644826, -0.013118951, 0.033815548, -0.023238933, -0.013069585, -0.006615012, 0.019647572, -0.0031239272, 0.00030390796, -0.008885837, -0.00033244755, -0.009527592, 0.014686313, 0.01875899, 0.012551244, 0.022239275, -0.020462109, 0.027274583, -0.005704831, 0.008645179, -0.019166257, 0.017105237, 0.034383252, 0.0016367835, -0.009033934, -0.0048810397, 0.004985942, 0.007978741, -0.0023464162, 0.006892694, 0.015278703, 0.0030637626, -0.019351378, -0.02621322, 0.031248527, 0.03512374, -0.040010948, -0.019474793, -0.010440858, 0.017364407, 0.013081927, 0.0011678088, -0.017055871, -0.034210473, 0.010082956, 0.0016738079, 0.0014192656, -0.0034586887, -0.00031875627, 0.013674316, -0.015315727, 0.01901816, -0.0056523797, 0.015488507, 0.02870619, 0.020980448, -0.018820696, 0.017290358, -0.011773734, 0.022128202, 0.011002394, -0.009237568, 0.022955079, -0.013242366, 0.0046403813, -0.017031187, -0.005220429, -3.6108355e-05, -0.022239275, 0.04635445, -0.0031779208, 0.012174831, 0.012785732, 0.011884807, 0.0042115166, -0.00123183, -0.008151521, 1.9440178e-05, 0.011162832, -0.019203281, -0.0034586887, -0.00033726843, -0.012748708, -0.00030545064, -0.016130263, -0.0017864235, -0.030088432, 0.009077129, 0.0024220077, 0.010730882, -0.003292079, -7.6218035e-05, 0.025065465, 0.02168391, -0.0152910445, 0.017389089, 0.02981692, -0.019931426, -0.027447363, -0.037394565, 0.0059855985, -0.005621526, 0.004430577, 0.035025008, 0.023029128, 0.0181666, 0.012896805, 0.0008515594, -0.003616042, 0.019067526, 0.005991769, 0.018907087, -0.014809729, -0.005828245, -0.015562556, -0.032680135, -0.0056431238, 0.030433992, 0.026830291, 0.029347945, 0.009811445, 0.0042886506, -0.0020286243, -0.022498446, -0.020474449, -0.009749738, -0.007386352, -0.011347954, -0.0018990391, 0.008768593, -0.009367153, 0.024682881, 0.016673286, -0.0021921482, -0.009811445, 0.0037425417, -0.004985942, 0.07557898, -0.0059269764, 0.004695918, 0.0019545755, 0.007256767, -0.013032561, -0.024374345, -0.02210352, 0.0014084668, -0.0022847091, 0.0007239026, -0.021943081, -5.3849173e-05, -0.010348298, 0.0033105914, -0.0017077468, 0.0032828231, -0.014032218, 0.016006848, -0.017722309, -0.015871093, -0.0027475131, 0.001075248, -0.017537186, -0.0079170335, -0.0056091845, 0.017598893, 0.005741855, 0.020165913, -0.020116547, 0.0181666, 0.012582098, -0.015735336, -0.016920114, 0.006584158, -0.013513877, -0.0025253673, -0.0037302002, 0.011212198, -0.005158722, 0.015611921, 0.008015766, 0.0018728136, -0.0065162806, 0.0041004433, -0.0054456606, 9.458557e-05, 0.0037147736, -0.013526218, -0.02125196, 0.02544805, -0.0022245445, -0.012687, 0.0042207725, -0.0026318121, 0.014636948, -0.028113801, 0.0029079518, -0.02107918, -0.006584158, -0.0011770648, -0.0140692415, -0.0008330472, -0.00090709585, -0.031766865, -0.010212542, 0.003119299, -0.016303042, -0.0071580354, 0.00762701, 0.0003278195, -0.019573525, -0.017080553, 0.025670195, 0.03435857, 0.014254363, 0.0018234478, -0.017450796, -0.001894411, 0.023214249, -0.003986285, -0.007083987, 0.0116071245, -0.003350701, -0.0062262565, 0.006522451, 0.013180658, -0.020585522, -0.012909146, 0.014994849, 0.02425093, -0.0010073701, 0.01833938, -0.0068433285, -0.016130263, -0.0021042156, 0.0016228994, 0.00805279, -0.01695714, -0.0067260847, 0.017981479, -0.020634888, -0.016611578, -0.030656137, 0.02347342, -0.009120325, 0.020499133, -0.006121354, -0.01669797, 0.006436061, -0.009502909, -0.0065779877, 0.0041775773, -0.018154258, 0.0032334574, 0.012699342, -0.01620431, 0.024300296, -0.0026626657, -0.043096308, 0.009428861, -0.032063063, 0.032186475, 0.027521411, 0.010150835, 0.011422003, -0.019511817, -0.0061336956, -0.015031874, 0.011946514, 0.009052446, 0.018104892, -0.010983882, -0.010558102, -0.009897835, -0.015179971, 0.01585875, 0.020165913, 0.006349671, -0.010595126, -0.023818979, 0.024954392, 0.02707712, -0.011335613, -0.02038806, -0.014155632, 0.01482207, 0.02262186, -0.027768241, 0.017068211, -0.0026333549, -0.0028431593, -0.02836063, 0.0028693848, 0.02312786, 0.0020656486, -0.025818292, -0.0054610875, 0.015229337, 0.024781613, 0.028409995, -0.005297563, 0.017327381, -0.0096139815, -0.008453887, 0.009965713, 0.0054641725, 0.01568597, -0.018438112, 0.02406581, 0.027052436, -0.0038998951, 0.003214945, 0.013871779, -0.0049304054, 0.021980105, 0.00013459883, -0.0038998951, -0.0005333816, -0.036826856, -0.0030622198, 0.029027067, -0.012736366, 0.004146724, -0.0006857213, -0.003099244, -0.0060966713, -0.0044151503, 0.005192661, 0.020807669, 0.015537873, -0.019425428, 0.011730539, 0.0018758989, -0.002883269, -0.012970854, -0.032013696, -0.0009680317, 0.015155288, -0.0026009586, 0.03616042, 0.023152541, 0.0073740105, -0.017376747, -0.0041004433, 0.02947136, 0.01490846, -0.02947136, 0.022350349, -0.0045046257, -0.019758645, -0.016611578, -0.020104205, -0.039640706, 0.002232258, 0.005424063, -0.039023634, 0.017450796, -0.01585875, -0.016241336, -0.001154696, 0.01473568, 0.015389776, -0.029249214, 0.022041813, 0.00642989, -0.026978388, -0.021646887, 0.01800616, -0.009589299, -0.0064052073, 0.016784359, 0.021042155, -0.014957826, -0.0016275274, -0.007009938, 0.0102187125, 0.015722996, -0.030063748, -0.0012248879, 0.012008221, 0.015500849, -0.021992447, 0.0052667097, 0.0010305103, 0.006152208, -0.014538216, -0.015389776, 0.0074048643, -0.013057244, -0.02742268, 0.019499475, -0.02665751, -0.0020671913, 0.00874391, -0.026435364, 0.008768593, -0.019511817, -0.007738083, -0.004695918, -0.018672599, 0.033889595, 0.014933143, 0.030113114, 0.007324645, -0.011181345, -0.0059424033, -0.009996567, 0.011662661, 0.028558092, -0.0115701, -0.009996567, -0.015871093, 0.035000324, 0.0076516927, 0.0058004768, 0.0023541297, -0.009552275, -0.026978388, -0.0007929375, 0.020128889, -0.011434345, -0.024127515, 0.018462794, -0.030532723, -0.0009965713, -0.029940333, 0.003582103, 0.015895775, -0.0019283501, -0.019339036, 0.003788822, -0.01208844, 0.0052142586, 0.0060874154, -0.009620152, 0.018277673, 0.010261907, -0.024090491, 0.012316757, -0.009262251, 0.036925588, 0.00950908, 0.011366466, 0.020881716, -0.01824065, 0.025250586, -0.00079910824, -0.01851216, -0.009157348, 0.022214592, -0.007694888, 0.009453543, -0.01671031, 0.0050599906, 0.01748782, 0.024756929, -0.005766538, 0.00086081546, 0.012699342, -0.01669797, -0.0066890605, 0.021906056, -0.013242366, -0.0043441867, -0.0088303005, -0.012736366, 0.002724373, 0.0010567359, -0.018129576, -0.020857034, 0.010878979, -0.0035018837, -0.02099279, -0.007164206, -0.020104205, -0.01208227, 0.012612952, 0.008811789, 0.0071271816, 0.006460744, 0.025818292, 0.0006012595, 0.01620431, -0.029101117, 0.0069790846, 0.0077689365, 0.00668289, -0.014254363, -0.016340068, 0.0008322759, 0.010274249, 0.025768926, -0.03307506, -0.017709967, 0.0046897475, -0.022523127, 0.0034000669, -0.0014570613, 0.011977368, 0.020215278, -0.010033591, -0.011773734, 0.0033105914, 0.004720601, 0.0074665714, -0.0019345208, 0.010996223, -0.0018990391, -0.002030167, 0.011675002, 0.010866638, -0.017426113, -0.018919427, 0.0076516927, 0.014427143, 0.033124425, 0.019005818, -0.022436738, 0.033445302, -0.014883777, 0.004038736, 0.017919771, 0.02870619, 0.0020224536, -0.008552618, -0.02579361, -0.0069544017, 0.013982852, -0.0060781594, -0.014488851, 0.0028693848, 0.0134521695, -0.013378121, -0.016858408, -0.0030884454, -0.024645856, -0.017290358, -0.002540794, 0.009101812, -0.025744244, 0.013686657, 0.010311273, -0.0028092202, -0.00552588, -0.008669862, 0.0013459884, 0.005707916, -0.0100644445, -0.0028308178, -0.0017771674, -0.008034278, 0.0014439485, -0.023954736, 0.003341445, 0.017092895, -0.0143654365, -0.03751798, 0.031001698, -0.00951525, -0.018549185, 0.013094268, -0.020375717, -0.021622203, 0.013822413, -0.0063805245, -0.0028431593, -0.010342127, 0.008435374, 0.0015149118, -0.005004454, -0.02373259, -0.001538052, 0.028212532, -0.006744597, 0.03147067, 0.22056621, 0.002096502, 0.0037672247, 0.027101804, -0.017635917, 0.033445302, 0.0062108296, -0.010249566, -0.010582785, 0.012045246, 0.009194373, 0.01191566, -0.028089117, 0.0032427134, 0.013217682, -0.007941716, -0.012847439, -0.015957482, -0.022066494, -0.028508727, -0.016451139, 0.0014177229, -0.0116071245, 0.0025917024, 0.012069928, -1.4125164e-05, 0.0037086029, 0.025571464, 0.012921488, -0.0021366118, -0.01627836, -0.00951525, 0.015821727, -0.0067137433, -0.011082613, -0.003915322, 0.00057966204, 0.014957826, 0.013513877, 0.023325322, 0.020597864, 0.009274593, 0.015303385, -0.026805608, -0.016080897, 0.006127525, -0.016870748, -0.01740143, 0.0030406222, 0.0022091179, -0.02014123, -0.024287954, 0.017413773, 0.04823035, -0.004223858, 0.005390124, 0.027101804, 0.005760367, 0.0074912542, -0.004257797, -0.022325665, 0.008731569, -0.005982513, 0.011650319, -0.0016738079, 0.015266362, -0.02184435, 0.01422968, 0.011958855, -0.016056214, 0.02270825, -0.008935203, 0.015204654, -0.0021288984, 0.0034741154, -0.0031686649, 0.0106815165, -0.004334931, 0.032063063, 0.014316071, -0.0026379828, 0.008355155, 0.003230372, -0.0032365427, -0.0062509393, -0.021646887, 0.0039523463, 0.011545417, 0.028311264, 0.0016861493, 0.010638322, -0.005967086, -0.010576614, -0.027620142, 0.008262594, 0.025966391, 0.0055752457, 0.023596834, 0.009632494, 0.0021474105, -0.028138483, -0.020536156, 0.010514907, -0.0007084758, -0.0067199143, 0.014044559, 0.0041960897, 0.004763796, 0.020696595, -0.024399027, 0.020351036, -0.024584148, 0.022300983, -0.0072135716, 0.026410682, -0.0057788794, 0.005056905, -0.02433732, -0.0034864568, 0.0039523463, -0.0045601623, -0.001086818, 0.00711484, -0.008645179, -0.015969824, -0.021523472, -0.031914964, 0.010298932, -0.0122118555, -0.020684253, 0.003264311, -0.015661288, 0.04475006, -0.0021304411, -0.008441545, 0.016191969, -0.0053345873, -0.01182927, 0.006007196, -0.004140553, 0.01646348, 0.0009742024, 0.005680148, -0.009546104, -0.013550902, -0.009194373, -0.0054209777, -0.015994506, -0.043392505, -0.008170034, -0.01988206, -0.010786419, -0.019598207, -0.009725055, 0.012002051, -0.014994849, -0.0363332, 0.0019345208, 0.0028909824, 0.030878283, -0.009737397, 0.020276986, 0.013230024, -0.009996567, -0.008725398, -0.018462794, -0.15560088, 0.019388402, 0.0050846734, -0.007904693, -0.009836128, -0.011724368, 0.018796014, 0.015019532, -0.019339036, 0.03016248, 0.027546095, -0.016722651, -0.03727115, -0.012489538, 0.012810415, -0.00027131886, -0.0021258132, 0.023522785, 0.0035759322, 0.008355155, 0.0049211495, -0.028780239, 0.020116547, 0.0011153576, -0.011366466, 0.0029372629, -0.0031810063, 0.027792923, -0.015105923, -0.0181666, -0.007670205, -0.014513534, 0.011428174, 0.029841602, -0.0037980783, -0.00024200793, -0.023251273, 0.0045138816, -0.017981479, 0.019770987, -0.015611921, 0.009021593, -9.364549e-06, 0.0047853934, -0.010039762, 0.031643454, 0.015797043, 0.012822757, -0.0021798068, -0.013007878, 0.0061645494, -0.015624263, -0.0114528565, -0.017179284, 0.046329767, 0.03240862, 0.0058251596, 0.021449422, 0.011699685, 0.019203281, -0.016241336, -0.0036407248, 0.018388746, 0.0021690081, 0.015611921, -0.024028784, 0.018203624, 0.006676719, -0.029101117, 0.015241679, -0.0034926275, -0.009033934, -0.012921488, -0.021967763, 0.0016290701, 0.0055752457, -0.020659572, 0.015130606, -0.006608841, -0.026879657, -0.0013668145, 0.045712695, -0.0009680317, -0.018438112, -0.0076455222, 0.012748708, 0.017981479, -0.008410691, -0.013155975, -0.005735684, 0.00014520476, -0.043738063, 0.023325322, -0.037246466, 0.016549872, 0.010872809, -0.016944798, -0.0011894063, -0.0029125798, -0.0042732237, -0.0017092895, -0.0031285551, -0.024275612, -0.0019036671, 0.010126152, 0.021474106, 0.017956795, 0.01954884, 0.04114636, 0.025090149, -0.008935203, 0.015229337, 0.013353438, 0.028039752, -0.0030344515, 0.0047761374, 0.023461077, -0.0091511775, -0.0076455222, 0.01464929, 0.03914705, -0.01996845, 0.010440858, 0.014513534, 0.009990396, -0.020770645, -0.09379494, -0.027373314, 0.0034556033, 0.0012865951, 0.007448059, 0.0217703, -0.0054364046, 0.0115947835, -0.004732942, 0.014994849, -0.00685567, -0.020869376, -0.017919771, -0.012785732, 0.025040783, 0.0033599571, 0.024004102, -0.011724368, -0.03830783, 0.010089127, -0.020178255, -0.00951525, -0.021153228, 0.006152208, -0.0014161803, -0.010601297, -0.04050461, 0.016636262, 0.010891321, 0.0065101096, -0.0041436385, 0.010039762, 0.01594514, -0.022584835, -0.014081583, -0.013834755, -0.0140569005, -0.013513877, 0.011175174, -0.03418579, -0.0018033929, 8.282263e-05, 0.004393553, -0.027348632, -0.018055527, 0.00847857, -0.0024405199, 0.020795327, 0.0017200882, -0.00968186, -0.019215623, 0.017253334, -0.0030822747, 0.0034432618, 0.030656137, -0.024522442, 0.02082001, 0.005535136, -0.031569403, 0.011070272, -0.0015071984, 0.00924991, 0.018487478, 0.02312786, -0.017500162, -0.006590329, -0.016599238, 0.0123661235, 0.019647572, -0.029890968, -0.009286934, 0.010095298, -0.020289328, 0.004779223, -0.010514907, 0.00056539226, -0.03050804, -0.015525532, 0.020894058, -0.008151521, -0.009219056, -0.007898522, 0.0029295494, -0.035469297, -0.018055527, 0.0250161, 0.0053438437, -0.027546095, -0.0046156985, -0.005896123, 0.0012326014, 0.031692818, 0.02347342, -0.033198476, -0.026706876, 0.023559809, 8.370244e-06, 0.017092895, -0.015463824, -0.011835441, -0.00745423, -0.018610891, -0.032951646, 0.0167967, -0.009743567, -0.029150482, 0.0025809037, -0.008774764, 0.009398007, -0.018833037, -0.008620496, 0.022288641, -0.021461764, 0.0019391488, 0.0022384287, -0.009638665, -0.0344573, 0.020931082, -0.00084307464, 0.007293791, -0.00736784, -0.0066890605, -0.005655465, 0.012785732, -0.00823174, -0.008768593, -0.010582785, 0.004507711, 0.006254025, 0.02880492, -0.019215623, -0.018018503, 0.027447363, -0.012909146, 0.011175174, 0.02579361, -0.02056084, -0.024756929, 0.0017000334, 0.01054576, 0.008281106, -0.02406581, -0.00720123, -0.0317175, 0.009206714, -0.009953371, -0.010101469, 0.001460918, -0.023707906, -0.0044213207, 0.0022785384, 0.017524846, 0.0137483645, 0.023868345, -0.028730873, -0.007318474, -0.0062509393, -0.03102638, 0.0008723856, 0.0013297902, -0.006701402, -0.015821727, 0.02665751, -0.0067569385, 0.001011998, -0.014846752, 0.020696595, -0.0037949928, -0.009089471, -0.0039585168, -0.004276309, -0.02511483, -0.017759332, 0.008348985, 0.019055184, 0.0051463805, 0.021918397, -0.015537873, -0.0072197425, -0.021634545, -0.009410348, 0.007269108, 0.002695062, -0.006349671, -0.035000324, -0.00094334886, 0.03699964, 0.019561183, -0.013847096, 0.0007624696, -0.0021875203, -0.00075398484, -0.039048318, 0.007170377, -0.0018280759, -0.0008176204, -0.013958169, -0.0046588937, -0.006272537, -0.008367497, 0.004810076, 0.060522422, 0.009058617, 0.0031424393, -0.025398685, -0.03418579, -0.0041498095, 0.015179971, -0.001009684, -0.0023063067, -0.0126746595, -0.023448735, 0.019993134, -0.022905713, -0.006374354, 0.020523814, 0.003119299, 0.00066836615, -0.01721631, -0.01285978, -0.024300296, 0.03857934, -0.008207058, 0.02700307, -0.00968186, 0.016117921, 0.02887897, 0.002729001, 0.0126746595, -0.010638322, 0.010144664, 0.0044953697, 0.026929023, 0.0006228571, 0.0015642776, -0.0017231735, -0.036456615, 2.7286153e-05, 0.011644149, 0.015871093, -0.0060565616, 0.044700697, -0.0012611409, -0.04072675, 0.02766951, -0.0075961566, -0.0006085873, 0.024090491, -0.0053932094, -0.013575585, -0.008095984, 0.0005711773, 0.01173671, 0.018055527, 0.00565855, -0.025262928, -0.0045601623, -0.020782985, 0.0075035957, -0.033692133, -0.0209064, 0.014081583, 0.013180658, 0.015216996, 0.0062355124, 0.0067877923, -0.017500162, 0.017858064, -0.0023541297, 0.006368183, -0.0011153576, 0.0039369194, 0.014587582, -0.042355824, -0.013020219, 0.0028724703, 0.0005954745, -0.018018503, -0.021227278, 0.008632838, 0.02031401, 0.0004061105, 0.041417874, -0.016253676, -0.03203838, 0.014303729, -0.0027274583, -0.018314697, -0.019092208, -0.01714226] }, { "object": "embedding", @@ -56,9 +59,8 @@ X-Request-Id: req_abf0d970e0c4416886161077433d76b9 "usage": { "prompt_tokens": 24, "total_tokens": 24 - }, - "object": "list" -}265 22095 + } +}265 22162 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -70,44 +72,46 @@ Content-Type: application/json Content-Length: 21207 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:09 GMT +Date: Mon, 21 Sep 2026 07:47:56 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 36 +Openai-Processing-Ms: 98 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-5c8d7bd656-frpsx +Via: envoy-router-84fffc8dd7-ccgqv X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 53 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 9999995 +X-Ratelimit-Remaining-Tokens: 9999994 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_91060d2426ce49c8ab7885a26baa4a3b +X-Request-Id: req_eb5eade10a984f59872a758c105c830a { - "object": "list", "data": [ { + "object": "embedding", "index": 0, - "embedding": [0.014726514, -0.0071365014, 0.0019683642, -0.024905318, -0.01816564, 0.0029745921, -0.042025365, -0.011350376, 0.015494963, -0.006342857, 0.004730373, 0.008112811, -0.022121266, 0.0067837704, -0.014965867, 0.00699163, 0.021466194, 0.010367768, 0.007438842, -0.021466194, -0.044368505, 0.01642718, -0.010682707, 0.009750489, -0.022373216, 0.013617931, 0.023859724, -0.005798014, 0.0071365014, 0.012849482, 0.025043892, -0.0020077315, 0.0032375655, -0.03648245, -0.03144344, 0.019450588, 0.0027116186, 0.00944185, 0.019211235, -0.021113463, 0.0053161583, 0.004629593, 0.0036186408, 0.003999716, -0.002582494, 0.012792793, 0.015557951, 0.012824287, -0.0026029649, 0.011312583, 0.012427464, 0.044368505, -0.006308214, -0.013454163, 0.004210725, -0.02459038, 0.01408404, 0.025522599, -0.02571156, -0.005259469, 0.008534827, 0.0007751418, 0.0073569585, 0.0065507162, -0.012049539, 0.004163484, -0.010298482, 0.00995205, -0.012326684, 0.013554944, 0.025698964, 0.035348672, 0.022335423, 0.019715136, 0.023444006, 0.0040028654, 0.0074514397, 0.011696808, -0.017346801, -0.009334771, 0.0002572652, 0.005684636, -0.032174096, -0.002036076, 0.014978465, 0.0061507444, 0.006588509, 0.012389672, -0.031821363, -0.010386664, -0.014335991, 0.029931733, 0.029528612, -0.0051964815, -0.012836885, 0.009252886, 0.02540922, 0.017535763, 0.0073947506, -0.029024713, 0.005429536, 0.020735536, -0.023733748, -0.0016660235, -0.022310227, -0.005873599, 0.004465825, 0.0014250957, 0.020634755, -0.02642962, -0.035499845, 0.018304212, 0.02995693, -0.01659095, -0.0008865513, -0.012950262, 0.014613137, -0.018593956, -0.012055838, -0.006966435, 0.012257398, 0.041974973, 0.032728385, -0.029553808, 0.0382713, 0.0067837704, -0.016150035, -0.0058798976, -0.003628089, 0.0044374806, 0.010575628, 0.01652796, 0.0071616964, 0.014663527, -0.020433195, 0.0098638665, -0.0066326, 0.034063723, 0.005520868, -0.020193843, -0.0020502482, 0.029478222, -0.0032690594, 0.001273138, 0.0027368136, 0.028243665, 0.018329408, -0.0145627465, -0.017926287, 0.009007235, 0.0014652504, -0.006213732, 0.017573556, 0.02678235, 0.00095741235, 0.024325833, -0.025686366, -0.0111425165, -0.018694736, -0.0014250957, -0.019778123, -0.0035556532, 0.029075103, -0.006027919, 0.03345904, 0.024628174, 0.021718144, 0.013328188, -0.002443921, 0.011306284, -0.025169868, 0.02673196, -0.011444857, 0.013995857, 0.009126911, 0.0138320895, 0.021503985, -0.0012581784, -0.021831522, 0.01336598, -0.0148902815, 0.014940672, 0.0052783657, 0.011986551, 0.0068341605, -0.012893573, 0.016036658, -0.02326764, 0.018253822, -0.008446645, 0.015091842, 0.01704446, 0.0013188041, -0.015482366, -0.67280895, -0.04918076, 0.018493176, -0.0070231236, -0.0016408284, 0.03393775, 0.010374067, 0.02592572, -0.003026557, -0.029100297, 0.017271215, 0.0066703926, 0.01587289, -0.007256178, -0.0006956199, -0.033811774, 0.0033257483, 0.019639552, -0.00403121, 0.0025935168, -0.0019242729, 0.015469768, -0.008629309, -0.0031052914, 0.021781132, 0.017397191, 0.01791369, -0.015948474, -0.013895077, -0.008245084, -0.012301489, 0.01331559, -0.02469116, -0.0074451407, 0.040538855, 0.00018354997, -0.021151256, 0.025182465, -0.006506625, 0.032476436, -0.0037540642, 0.011016541, 0.0010204001, -0.018518372, -0.010437055, -0.004714626, 0.0130888345, 0.0066011064, 0.044116553, -0.011955057, 0.018845906, -0.016288608, 0.016805107, 0.015318598, 0.012515647, 0.005164988, 0.04414175, 0.01985371, 0.0035462051, -0.003184026, -0.008509632, 0.018556163, -0.02356998, -0.015066647, -0.017825507, 0.0037981556, -0.03408892, -0.02587533, -0.027991714, -0.013529749, 0.00612555, 0.0043146545, -0.014411576, 0.020634755, 0.030914342, 0.01117401, 0.020760732, -0.018430188, 0.007791573, -0.010890566, -0.010210299, -0.0053571, -0.018367201, -0.026555596, 0.029402638, -0.021315023, -0.013970662, -0.018039664, 0.01525561, 0.006216882, 0.022814129, 0.030939536, -0.0054169386, -0.0012644771, -0.0125534395, 0.030284464, 0.004342999, 0.0009959923, -0.009712697, 0.00015924066, 0.005098851, -0.014827294, 0.015583146, 0.012767598, 0.032224484, -0.010840176, -0.029830953, 0.041849, 0.013857285, -0.012257398, 0.02005527, -0.025043892, -0.032552022, 0.002138431, 0.01577211, -0.03025927, 0.054068603, 0.005375996, 0.010525238, 0.003398184, 0.01505405, -0.001191254, -0.0041004964, -0.009422953, 0.012597531, -0.008150603, -0.00883087, -0.013844687, -0.01612484, 0.009712697, 0.00653182, 0.000116330324, 0.01657835, 0.0023084977, -0.008389955, -0.0077537806, 0.016263412, -0.019626953, 0.006878252, -0.011690509, -0.01229519, -0.006563314, -0.012755, -0.0089883385, -0.008799376, -0.01403365, -0.035701405, -0.007123904, -0.020861512, 0.010204, -0.018770322, -0.028520811, -0.019425394, 0.005010668, 0.014487161, -0.021100866, -0.016817704, -0.015293403, -0.0055271666, 0.010518938, 0.0003253706, 0.002409278, -0.016956277, 0.0045036175, -0.0036627322, -0.02786574, -0.02015605, 0.044746432, -0.0056909346, -0.015331196, -0.011759795, 0.0026360333, -0.011281089, -0.013605334, -0.018102651, -0.016049255, -0.007224684, -0.033232287, -0.010109519, -0.0134793585, 0.0043304013, 0.016490169, -0.008673401, 0.0056909346, 0.037817787, -0.0020045822, 0.008515931, 0.045250334, -0.0074577383, 0.013126628, 0.007205788, -0.011016541, -0.005259469, -0.0009432401, 0.006802667, 0.00050350756, 0.0007310505, -0.0036784792, 0.0010093772, -0.0052752164, 0.020571768, -0.009618215, 0.0118605755, -0.008648206, 0.007527025, -0.0122133065, 0.01495327, -0.0034013335, 0.0022565327, 0.036608424, 0.0002501791, -0.017838104, 0.013378578, -0.005470478, 0.029150687, -0.0031934741, -0.02224724, 0.010348872, -0.023645567, -0.015406781, 0.007577415, 0.013945467, 0.030763172, -0.014197418, -0.01878292, -0.01209363, 0.037540644, 0.015696524, -0.0037414667, -0.024678564, -0.024514796, -0.008024627, -0.0021762236, 0.0039209817, -0.022751141, 0.0039115334, 0.004868946, -0.018077457, 0.005539764, 0.0045477087, 0.0035021137, 0.036306083, 0.023305433, -0.020219037, 0.019009674, -0.006689289, 0.018556163, 0.026253255, -0.025056489, 0.016666533, -0.024099078, -0.0018786069, -0.012389672, 0.017901093, 0.024628174, -0.010065427, 0.037061937, -0.010033933, 0.009347368, 0.011350376, -0.0032627606, -0.009788282, 0.0036816285, -0.009926855, 0.012786495, -0.012578635, -0.010859072, 0.0018439636, -0.0065129236, -0.030939536, -0.014361186, -0.0016345297, 0.012584934, -0.0019683642, 0.0025069087, -0.008560022, 0.008547425, -0.0066451975, 0.012339282, 0.0055523617, -0.005259469, -0.021869315, 0.02418726, 0.0012148744, -0.0004987835, -0.01806486, -0.009347368, 0.014814696, -0.012162916, -0.0008715917, 0.0084529435, 0.024955709, 0.004069003, -0.00821359, 0.0012298339, -0.02367076, 0.011986551, 0.008207291, 0.01321481, -0.0009448148, -0.009870166, -0.010632317, -0.03000732, -0.009410356, 0.006853057, 0.024162065, -0.0006842034, -0.0014471414, -0.014373783, -0.0321489, -0.0068089655, 0.0020439494, -0.0040564053, 0.0077033904, -0.013302993, 0.0056122, -0.03464321, -0.015784707, 0.027437422, 0.018770322, -0.0072183856, -0.023771541, 0.0005767307, -0.007130203, 0.06540638, 0.026152475, -0.009907958, 0.017208228, 0.012925067, -0.006333409, -0.018304212, -0.00032340226, -0.0043398496, -0.009139509, 0.012282593, -0.0004940594, -0.007130203, 0.0025887927, -0.012717208, 0.00035666762, 0.013328188, 0.00038205952, 0.017749922, -0.031166293, -0.011041736, 0.011602326, -0.009725294, 0.00837106, -0.010386664, 0.020609561, 0.005199631, -0.0075396225, 0.02259997, -0.021541778, -0.0031367852, 0.024010895, 0.0020266278, -0.0058389558, -0.008667101, -0.017472776, -0.017434983, 0.008018329, 0.00836476, -0.006960136, 0.023179457, 0.0056247977, 0.0036406866, -0.021881912, -0.0051964815, 0.009460746, -0.006081458, 0.016464973, -0.012629025, -0.014147027, 0.020773329, -0.0039871186, -0.019009674, 0.0008629309, 0.010078025, 0.00035095934, -0.021970095, -0.02525805, 0.001359746, -0.022562178, -0.0029919136, 0.008018329, 0.008679699, 0.006588509, -0.016162632, -0.027739763, -0.00089442474, -0.00077553553, 0.0016691729, 0.0016644488, -0.017901093, -0.016767314, -0.019223833, -0.0020785925, 0.033131506, 0.029175883, 0.024678564, -0.035071526, 0.0045729037, 0.031141097, 0.016301205, -0.020067867, 0.0050799544, -0.005470478, 0.005281515, -0.0010440204, 0.034315675, -0.0109472545, -0.00040705773, 0.0152808055, 0.03378658, 0.008786778, 0.020508781, -0.015898084, -0.007199489, -0.006802667, 0.02306608, 0.019110454, -0.02577455, -0.019601759, 0.010008738, -0.025220258, 0.0028958574, -0.008245084, -0.012440062, 0.0063145123, 0.014928075, -0.00046886437, -0.01652796, 0.014235211, 0.024766747, -0.014839891, -0.002393531, -0.018644346, 0.01296286, 0.015797304, 0.008037225, 0.016502766, -0.01714524, -0.017397191, 0.023947908, -0.039077543, 0.023532188, 0.013907675, -0.011048035, -0.004765016, 0.020269427, -0.01898448, -0.0037320186, 0.009479642, -0.001765229, 0.028999517, -0.028697176, -0.0117346, -0.020130854, -0.017472776, 0.024527393, 0.02122684, -0.013580139, 0.0044532274, -0.013920272, 0.012792793, -0.002102213, -0.001168421, -0.045930598, -0.02566117, -0.0098764645, 0.019450588, -0.022751141, 0.023292836, -0.006871953, 0.015507561, 0.001719563, 0.011041736, -0.0016140587, -0.019916696, -0.013277798, -0.008112811, 0.026656376, 0.013907675, 0.014638332, 0.010701602, -7.1353206e-05, 0.0011731451, 0.0003409207, -0.016338998, -0.0019825364, -0.012440062, -0.0013219535, 0.008963143, 0.016150035, 0.006934941, 0.0209245, 0.013592736, -0.0006782983, 0.030989926, -0.01672952, -0.009561527, -0.036633622, -0.02612728, 0.0079049505, -0.014487161, -0.020811122, -0.0046768333, -0.0041918284, -0.009070222, 0.016250815, 0.002127408, 0.0016053979, -0.0037225704, 0.032375656, 0.0036910765, 0.04169783, -0.01652796, 0.005139793, 0.004853199, -0.034517236, -0.0049413815, 0.010619719, 0.0077789756, 0.00826398, 0.012515647, 0.011671613, -0.00806242, 0.0003052933, -0.0004527238, 0.013769101, 0.012383373, -0.018379798, -0.019097857, -0.024829734, -0.023393616, -0.02826886, -0.037112325, 0.01873253, -0.0030202582, -0.041723024, 0.018203432, 0.0049476805, -0.028394835, -0.00068695913, 0.0039934176, 0.026958717, 0.0035493544, 0.005520868, 0.01689329, -0.01153304, -0.001339275, -0.00648143, -0.01577211, 0.0038265001, 0.035399064, 0.027286252, -0.015129635, 0.024703758, 0.009618215, -0.0044280323, 0.010758292, -0.0122133065, -0.018304212, -0.019677343, 0.002184097, -0.014928075, 0.017737323, -0.014701319, 0.013378578, -0.021970095, -0.012307788, 0.0009944176, -0.0016817704, -0.014348588, 0.003480068, -0.024225052, 0.0234692, 0.02786574, 0.0027746062, -0.016162632, -0.0049193357, -0.00959302, -0.0004641403, 0.011148815, 0.016540559, -0.008975741, 0.017220825, -0.005514569, 0.008295475, -0.031166293, 0.00347062, -0.0046673855, 0.024199858, -0.01280539, -0.00026356397, -0.012465257, 0.01158343, 0.029150687, -0.012326684, -0.0073317634, 0.00131408, -0.010115817, 0.00617279, 0.009196198, -0.016666533, -0.020886706, 0.017271215, -0.018329408, 0.0017337352, -0.027588593, -0.009416655, 0.019425394, -0.020445794, -0.016364193, -0.0015140658, 0.019488381, 0.020030074, 0.0042012767, -0.008465541, 0.027160278, -0.00011416513, -0.027689373, 0.023242446, -0.00053145835, 0.010065427, -0.011822783, 0.015734317, 0.005095701, -0.033131506, 0.028394835, 0.0068089655, -0.018430188, -0.031720582, 0.0055712583, -0.019815916, -0.0027541353, -0.011822783, -0.0012266845, 0.0043807914, 0.0168303, 0.006878252, -0.0019683642, -0.0058767484, -0.017749922, 0.0025541494, 0.00806242, -0.010235494, -0.0047114766, 0.008673401, -0.004979174, 0.013403773, -0.02597611, -0.006903447, -0.020647354, 0.012755, -0.01602406, -0.0069223433, -0.024779344, -0.0044122855, -0.011640118, -0.00069837563, -0.015646134, -0.0027399631, 0.0057161297, 0.030334854, -0.0030564761, 0.009712697, -0.008667101, -0.0028690877, -0.012351879, -0.021781132, -0.028445225, -0.015935877, 0.007413647, 0.00095741235, 0.0036910765, -0.035600625, -0.031141097, 0.01000244, 0.0063145123, -0.026958717, 0.015079245, 0.0063963966, 0.03504633, -0.010361469, -0.014273003, 0.019778123, -0.0024927366, -0.016288608, -0.023242446, -0.009958348, -0.002045524, -0.026757156, 0.0070546176, -0.015016257, -0.006383799, -0.021768535, 0.024174662, -0.00398082, 0.0034674704, -0.010147312, 0.009315874, 0.008081316, -0.0011196056, 0.0123959705, 0.047467496, 0.022335423, -0.0019179741, -0.024955709, -0.003867442, -0.00010904738, 0.03892637, -0.005117747, 0.0058515533, 0.005577557, -0.013605334, -0.0056972336, -0.027588593, 0.007999432, -0.0036721805, 0.018505773, 0.009479642, -0.007256178, -0.00030667114, 0.02005527, -0.0065759113, -0.017951483, -0.020659951, -0.0010503192, -0.027311448, -0.0069538374, 0.010367768, -0.035247892, 0.002853341, -0.013542346, 0.00087789044, -0.02520766, -0.03240085, -0.01801447, -0.001571542, -0.03005771, 0.02791613, 0.0076341038, -0.018417591, -0.0067837704, -0.017170435, -0.015482366, 0.00045036175, -0.018342005, -0.011249595, -0.03383697, -0.03000732, 0.0011707831, -0.0062515247, -0.020672549, 0.0014077742, 0.0055901543, 0.02663118, 0.02087411, 0.2332055, 0.017346801, 0.0050610583, 0.0525569, -0.0013219535, 0.031216683, 0.031367853, 0.0025415518, 0.0070294226, 0.02781535, 0.007432543, -0.0074451407, -0.006821563, 0.009939452, 0.010279586, -0.013920272, -0.033307873, -0.022070875, -0.0062011345, 0.004793361, 0.025031295, -0.0026360333, 0.011079528, 0.0003480068, 0.017246021, 0.016666533, -0.0029430983, -0.0018959284, 0.005382295, 0.0003334409, -0.008238785, -0.017208228, -0.002275429, 0.003924131, -0.00048776067, -0.0025447013, -0.012880975, -0.002036076, 0.019047467, 0.0331567, 0.015230415, -0.016515363, -0.03464321, -0.0055712583, -0.013139225, -0.0025935168, -0.012666818, -0.001359746, 0.006897148, 0.008755284, -0.01781291, -0.002867513, 0.0280673, 0.023960505, -0.01316442, 0.0098764645, 0.022184253, -0.023632968, 0.008629309, -0.019047467, -0.021718144, 0.029075103, -0.01500366, 0.0077789756, 0.0069538374, -0.012685714, -0.018959284, -0.0014770605, 0.02428804, -0.018669542, 0.0017699532, 0.013580139, 0.014713917, -0.0043335506, 0.004843751, -0.009265484, 0.022373216, 0.0036658817, 0.023305433, 0.0032533125, -0.009284381, -0.01408404, -0.021718144, 0.021466194, -0.0074640373, -0.014386381, 0.007035721, -0.0027998013, 0.035071526, -0.003306852, -0.0038170519, 0.010953553, 0.00067554263, 0.002092765, 0.016490169, 0.021516584, 0.0017101149, 0.029327054, -0.00847184, 0.00073734927, -0.03224968, -0.002454944, 0.008408852, -0.005234274, -0.019563965, 0.017787714, -0.00045744787, -0.0047083274, 0.031115903, -0.008994637, -0.0014148602, -0.015910681, 0.019312015, -0.007980536, -0.00070703647, 0.0023210952, -0.0011164562, -0.018228628, -0.026555596, -0.020811122, 0.0016439778, -0.031241877, -0.012099929, 0.00842145, -0.011287388, -0.013240005, 0.017346801, 0.015117037, -0.00043540218, -0.036910765, 0.008604114, 0.007016825, 0.031241877, -0.010015037, -0.017409788, 0.009725294, 0.005520868, 0.0039146827, 0.0060688606, -0.005986977, -0.01572172, -0.020911902, 0.012578635, -0.018140445, 0.017346801, -0.007596311, -0.0030690734, -0.012698311, -0.012326684, -0.021390608, -0.0023415661, -0.013038445, -0.0050799544, 0.008711193, 0.010991346, -0.008660803, -0.004276862, -0.010997645, -0.013252603, 0.019563965, 0.003842247, 0.038649227, 0.013038445, -0.0077033904, -0.010430756, 0.013491956, -0.1592328, 0.028697176, 0.008434047, -0.0030926939, -0.0134793585, 0.009347368, 0.013605334, 0.02642962, -0.008837168, 0.032350462, 0.004818556, -0.009844971, -0.032677997, -0.014096637, -0.0033635409, 0.0145501485, 0.001466825, -0.017901093, 0.013328188, 0.0065759113, 0.0076530003, -0.02137801, 0.0031383599, 0.002872237, 0.0076530003, -0.004862647, -0.025069088, 0.032224484, 0.00449102, -0.0141848205, -0.005398042, -0.010241793, -0.0057791173, 0.021264633, 0.0012723507, 0.008049822, 0.00836476, 0.0008582068, -0.008018329, 0.009844971, -0.0030706483, 0.026706766, -0.0039934176, -0.0032170946, -0.0145501485, 0.007287672, 0.017674336, 0.022763738, 0.007230983, -0.018102651, 0.019123053, -0.0362305, -0.018770322, -0.00801203, 0.023506993, 0.0156209385, 0.016981471, 0.0034769187, -0.0027210668, 0.0010109519, -0.008226188, -0.031015122, -0.0029509717, 0.0022329125, 0.0034611716, -0.0031115902, 0.0064940276, -0.00267855, -0.014159625, 0.010682707, -0.008427748, -0.011942459, 0.003892637, -0.026958717, 0.006827862, 0.019979684, -0.015646134, -0.0035115618, -0.005375996, -0.0038453965, 0.009511136, 0.038649227, -0.003810753, -0.0008645056, -0.007955341, -0.0002421088, -0.013542346, -0.00852223, -0.009611917, -0.013958065, 0.007344361, -0.034265283, 0.012282593, -0.024716357, 0.02995693, 0.009215094, -0.012874677, -6.579258e-05, 0.0010204001, -0.015847694, -0.010928358, -0.016616143, -0.029553808, 0.0199041, 0.020395404, 0.031065512, -0.010871669, 0.0122448, 0.037011545, 0.008106511, -0.025648573, 0.038548447, 0.016061852, 0.024766747, 0.02587533, 0.01388248, -0.006525521, -0.03628089, -0.0027761809, -0.006153894, 0.051498707, 0.0014660377, -0.020370208, 0.022310227, -0.0033698396, -0.0075144274, -0.091004565, -0.0043807914, 0.008282877, 0.015066647, 0.005675188, 0.02535883, 0.014046247, 0.02990654, 0.009366265, 0.030863952, -0.008465541, -0.004097347, -0.004506767, 0.00026139876, 0.0014148602, -0.009933153, -0.002760434, -0.02811769, -0.031720582, 0.012446361, -0.003530458, -0.015835097, 0.006408994, -0.0113251805, 0.0013644701, -0.02316686, -0.03403853, 0.014298198, 0.014701319, 0.0149028795, 0.013000652, -0.0152682075, -0.009970946, -0.00893165, -0.036406863, -0.0017069655, -0.0073506595, -0.007476635, 0.009555227, -0.034013335, 0.0052941125, 0.0152808055, 0.003480068, -0.043663044, -0.0010770889, 0.023506993, -0.019400198, 0.00076490635, -0.00091489573, -0.012414867, 0.009189899, 0.017409788, 0.00028009823, -0.016213022, 0.03383697, -0.011312583, 0.019979684, 0.024628174, -0.019790722, 0.0028942828, 0.0034737692, 0.034819577, 0.0028753865, 0.035499845, 0.0007987622, -0.013743906, -0.027487813, 0.0059460346, 0.025736757, -0.041874193, -0.005627947, 0.017737323, -0.028873542, -0.00052988366, -0.012540842, 0.00081883953, -0.027538203, 0.0042422186, 0.009630812, -0.0022029933, -0.020760732, -0.027613789, -0.012269995, -0.020697745, 0.00076254434, 0.028445225, -0.02771457, -0.009265484, 0.020382805, -0.022310227, -0.014260406, 0.044620454, 0.011375571, -0.020458391, 0.0030533266, 0.020937096, 0.0009463895, 0.00786086, 0.010235494, -0.015331196, -0.014310796, -0.003240715, -0.055882648, 0.010493743, -0.012679415, -0.03892637, 0.0028643636, 0.013504554, -0.0072435807, -0.017258618, -0.014096637, -0.007760079, 0.00093457935, 0.011470052, -0.01010322, -0.0056877853, -0.009164704, 0.0109472545, 0.020370208, 0.0039052346, 0.023381017, -0.0029525463, -0.014877684, 0.011388169, -0.0030486025, 0.007067215, -0.02786574, 0.016981471, -0.03388736, -0.027588593, -0.019375004, -0.021466194, 0.015646134, -0.01393287, 0.01577211, 0.036961157, -0.021264633, -0.020420598, -0.009372563, 0.037717007, 0.01515483, -0.027790153, -0.004122542, -0.029982124, 0.017598752, -0.015381586, 0.0015573698, 0.022562178, -0.0138320895, -0.0029871897, 0.015217817, -0.0074640373, 0.022184253, 0.028747566, 0.00898204, -0.0044815717, -0.009706398, -0.019072663, 0.0209245, -0.0039430275, 0.010468548, -0.036961157, 0.006062562, 0.0047083274, 0.0042422186, 0.023305433, 0.007199489, 0.0023714853, -0.0018282167, -0.010159909, -0.0015400482, -0.010657512, -0.001678621, -9.13321e-05, 0.04179861, -0.007873457, 0.028394835, 0.0011172435, 0.0021951199, -0.003204497, -0.0053445026, 0.028571201, -0.00075742655, -0.012377074, -0.03134266, 0.0079175485, 0.037893374, 0.012925067, -0.02612728, 0.0004409136, 0.004903589, 0.00083616114, -0.024149468, -0.0032060717, -0.016855497, -0.0062231803, 0.003933579, -0.008018329, -0.0077537806, -0.01316442, 0.014474563, 0.047366716, 0.011929862, -0.0039682225, -0.003703674, -0.040992368, -0.01204324, 0.008673401, -0.007363257, -0.01776252, -0.00444063, 0.010751992, 0.0039871186, -0.0008456093, -0.021503985, 0.018719932, 0.002780905, -0.0031304865, -0.0469384, -0.027084691, -0.023028286, 0.022612568, 0.0064215916, 0.000785771, 0.0042926087, 0.009164704, 0.021000085, 0.02127723, 0.042226925, -0.030612001, -0.0038642928, 0.031594608, 0.0131014325, 0.0014691871, 0.0037918568, -0.008874961, -0.010015037, -0.009063924, -0.008679699, 0.028042104, -0.0011077954, 0.06092166, -0.00021376436, -0.015646134, 0.021844119, 0.0013479359, 0.006802667, 0.032627605, -0.01565873, -0.012975457, -0.018140445, -0.0055492125, 0.0007235707, 0.021390608, 0.005990126, -0.017636543, -0.0016723223, -0.022587374, 0.03204812, -0.035852574, -0.009555227, 0.01076459, -0.0109598525, 0.0022833026, 0.010997645, -0.021806326, -0.0046106963, -0.004821705, 0.0018770321, -0.0022896014, -0.01005283, 0.028596396, -0.018820712, -0.020659951, -0.00760261, 0.008849766, -0.03388736, -0.021894509, -0.020067867, 3.907203e-05, 0.012610129, 0.0071868915, 0.01672952, -0.019992283, -0.022751141, -0.01153304, -0.0073947506, -0.014373783, -0.006169641, -0.020496184], - "object": "embedding" + "embedding": [0.014726514, -0.0071365014, 0.0019683642, -0.024905318, -0.01816564, 0.0029745921, -0.042025365, -0.011350376, 0.015494963, -0.006342857, 0.004730373, 0.008112811, -0.022121266, 0.0067837704, -0.014965867, 0.00699163, 0.021466194, 0.010367768, 0.007438842, -0.021466194, -0.044368505, 0.01642718, -0.010682707, 0.009750489, -0.022373216, 0.013617931, 0.023859724, -0.005798014, 0.0071365014, 0.012849482, 0.025043892, -0.0020077315, 0.0032375655, -0.03648245, -0.03144344, 0.019450588, 0.0027116186, 0.00944185, 0.019211235, -0.021113463, 0.0053161583, 0.004629593, 0.0036186408, 0.003999716, -0.002582494, 0.012792793, 0.015557951, 0.012824287, -0.0026029649, 0.011312583, 0.012427464, 0.044368505, -0.006308214, -0.013454163, 0.004210725, -0.02459038, 0.01408404, 0.025522599, -0.02571156, -0.005259469, 0.008534827, 0.0007751418, 0.0073569585, 0.0065507162, -0.012049539, 0.004163484, -0.010298482, 0.00995205, -0.012326684, 0.013554944, 0.025698964, 0.035348672, 0.022335423, 0.019715136, 0.023444006, 0.0040028654, 0.0074514397, 0.011696808, -0.017346801, -0.009334771, 0.0002572652, 0.005684636, -0.032174096, -0.002036076, 0.014978465, 0.0061507444, 0.006588509, 0.012389672, -0.031821363, -0.010386664, -0.014335991, 0.029931733, 0.029528612, -0.0051964815, -0.012836885, 0.009252886, 0.02540922, 0.017535763, 0.0073947506, -0.029024713, 0.005429536, 0.020735536, -0.023733748, -0.0016660235, -0.022310227, -0.005873599, 0.004465825, 0.0014250957, 0.020634755, -0.02642962, -0.035499845, 0.018304212, 0.02995693, -0.01659095, -0.0008865513, -0.012950262, 0.014613137, -0.018593956, -0.012055838, -0.006966435, 0.012257398, 0.041974973, 0.032728385, -0.029553808, 0.0382713, 0.0067837704, -0.016150035, -0.0058798976, -0.003628089, 0.0044374806, 0.010575628, 0.01652796, 0.0071616964, 0.014663527, -0.020433195, 0.0098638665, -0.0066326, 0.034063723, 0.005520868, -0.020193843, -0.0020502482, 0.029478222, -0.0032690594, 0.001273138, 0.0027368136, 0.028243665, 0.018329408, -0.0145627465, -0.017926287, 0.009007235, 0.0014652504, -0.006213732, 0.017573556, 0.02678235, 0.00095741235, 0.024325833, -0.025686366, -0.0111425165, -0.018694736, -0.0014250957, -0.019778123, -0.0035556532, 0.029075103, -0.006027919, 0.03345904, 0.024628174, 0.021718144, 0.013328188, -0.002443921, 0.011306284, -0.025169868, 0.02673196, -0.011444857, 0.013995857, 0.009126911, 0.0138320895, 0.021503985, -0.0012581784, -0.021831522, 0.01336598, -0.0148902815, 0.014940672, 0.0052783657, 0.011986551, 0.0068341605, -0.012893573, 0.016036658, -0.02326764, 0.018253822, -0.008446645, 0.015091842, 0.01704446, 0.0013188041, -0.015482366, -0.67280895, -0.04918076, 0.018493176, -0.0070231236, -0.0016408284, 0.03393775, 0.010374067, 0.02592572, -0.003026557, -0.029100297, 0.017271215, 0.0066703926, 0.01587289, -0.007256178, -0.0006956199, -0.033811774, 0.0033257483, 0.019639552, -0.00403121, 0.0025935168, -0.0019242729, 0.015469768, -0.008629309, -0.0031052914, 0.021781132, 0.017397191, 0.01791369, -0.015948474, -0.013895077, -0.008245084, -0.012301489, 0.01331559, -0.02469116, -0.0074451407, 0.040538855, 0.00018354997, -0.021151256, 0.025182465, -0.006506625, 0.032476436, -0.0037540642, 0.011016541, 0.0010204001, -0.018518372, -0.010437055, -0.004714626, 0.0130888345, 0.0066011064, 0.044116553, -0.011955057, 0.018845906, -0.016288608, 0.016805107, 0.015318598, 0.012515647, 0.005164988, 0.04414175, 0.01985371, 0.0035462051, -0.003184026, -0.008509632, 0.018556163, -0.02356998, -0.015066647, -0.017825507, 0.0037981556, -0.03408892, -0.02587533, -0.027991714, -0.013529749, 0.00612555, 0.0043146545, -0.014411576, 0.020634755, 0.030914342, 0.01117401, 0.020760732, -0.018430188, 0.007791573, -0.010890566, -0.010210299, -0.0053571, -0.018367201, -0.026555596, 0.029402638, -0.021315023, -0.013970662, -0.018039664, 0.01525561, 0.006216882, 0.022814129, 0.030939536, -0.0054169386, -0.0012644771, -0.0125534395, 0.030284464, 0.004342999, 0.0009959923, -0.009712697, 0.00015924066, 0.005098851, -0.014827294, 0.015583146, 0.012767598, 0.032224484, -0.010840176, -0.029830953, 0.041849, 0.013857285, -0.012257398, 0.02005527, -0.025043892, -0.032552022, 0.002138431, 0.01577211, -0.03025927, 0.054068603, 0.005375996, 0.010525238, 0.003398184, 0.01505405, -0.001191254, -0.0041004964, -0.009422953, 0.012597531, -0.008150603, -0.00883087, -0.013844687, -0.01612484, 0.009712697, 0.00653182, 0.000116330324, 0.01657835, 0.0023084977, -0.008389955, -0.0077537806, 0.016263412, -0.019626953, 0.006878252, -0.011690509, -0.01229519, -0.006563314, -0.012755, -0.0089883385, -0.008799376, -0.01403365, -0.035701405, -0.007123904, -0.020861512, 0.010204, -0.018770322, -0.028520811, -0.019425394, 0.005010668, 0.014487161, -0.021100866, -0.016817704, -0.015293403, -0.0055271666, 0.010518938, 0.0003253706, 0.002409278, -0.016956277, 0.0045036175, -0.0036627322, -0.02786574, -0.02015605, 0.044746432, -0.0056909346, -0.015331196, -0.011759795, 0.0026360333, -0.011281089, -0.013605334, -0.018102651, -0.016049255, -0.007224684, -0.033232287, -0.010109519, -0.0134793585, 0.0043304013, 0.016490169, -0.008673401, 0.0056909346, 0.037817787, -0.0020045822, 0.008515931, 0.045250334, -0.0074577383, 0.013126628, 0.007205788, -0.011016541, -0.005259469, -0.0009432401, 0.006802667, 0.00050350756, 0.0007310505, -0.0036784792, 0.0010093772, -0.0052752164, 0.020571768, -0.009618215, 0.0118605755, -0.008648206, 0.007527025, -0.0122133065, 0.01495327, -0.0034013335, 0.0022565327, 0.036608424, 0.0002501791, -0.017838104, 0.013378578, -0.005470478, 0.029150687, -0.0031934741, -0.02224724, 0.010348872, -0.023645567, -0.015406781, 0.007577415, 0.013945467, 0.030763172, -0.014197418, -0.01878292, -0.01209363, 0.037540644, 0.015696524, -0.0037414667, -0.024678564, -0.024514796, -0.008024627, -0.0021762236, 0.0039209817, -0.022751141, 0.0039115334, 0.004868946, -0.018077457, 0.005539764, 0.0045477087, 0.0035021137, 0.036306083, 0.023305433, -0.020219037, 0.019009674, -0.006689289, 0.018556163, 0.026253255, -0.025056489, 0.016666533, -0.024099078, -0.0018786069, -0.012389672, 0.017901093, 0.024628174, -0.010065427, 0.037061937, -0.010033933, 0.009347368, 0.011350376, -0.0032627606, -0.009788282, 0.0036816285, -0.009926855, 0.012786495, -0.012578635, -0.010859072, 0.0018439636, -0.0065129236, -0.030939536, -0.014361186, -0.0016345297, 0.012584934, -0.0019683642, 0.0025069087, -0.008560022, 0.008547425, -0.0066451975, 0.012339282, 0.0055523617, -0.005259469, -0.021869315, 0.02418726, 0.0012148744, -0.0004987835, -0.01806486, -0.009347368, 0.014814696, -0.012162916, -0.0008715917, 0.0084529435, 0.024955709, 0.004069003, -0.00821359, 0.0012298339, -0.02367076, 0.011986551, 0.008207291, 0.01321481, -0.0009448148, -0.009870166, -0.010632317, -0.03000732, -0.009410356, 0.006853057, 0.024162065, -0.0006842034, -0.0014471414, -0.014373783, -0.0321489, -0.0068089655, 0.0020439494, -0.0040564053, 0.0077033904, -0.013302993, 0.0056122, -0.03464321, -0.015784707, 0.027437422, 0.018770322, -0.0072183856, -0.023771541, 0.0005767307, -0.007130203, 0.06540638, 0.026152475, -0.009907958, 0.017208228, 0.012925067, -0.006333409, -0.018304212, -0.00032340226, -0.0043398496, -0.009139509, 0.012282593, -0.0004940594, -0.007130203, 0.0025887927, -0.012717208, 0.00035666762, 0.013328188, 0.00038205952, 0.017749922, -0.031166293, -0.011041736, 0.011602326, -0.009725294, 0.00837106, -0.010386664, 0.020609561, 0.005199631, -0.0075396225, 0.02259997, -0.021541778, -0.0031367852, 0.024010895, 0.0020266278, -0.0058389558, -0.008667101, -0.017472776, -0.017434983, 0.008018329, 0.00836476, -0.006960136, 0.023179457, 0.0056247977, 0.0036406866, -0.021881912, -0.0051964815, 0.009460746, -0.006081458, 0.016464973, -0.012629025, -0.014147027, 0.020773329, -0.0039871186, -0.019009674, 0.0008629309, 0.010078025, 0.00035095934, -0.021970095, -0.02525805, 0.001359746, -0.022562178, -0.0029919136, 0.008018329, 0.008679699, 0.006588509, -0.016162632, -0.027739763, -0.00089442474, -0.00077553553, 0.0016691729, 0.0016644488, -0.017901093, -0.016767314, -0.019223833, -0.0020785925, 0.033131506, 0.029175883, 0.024678564, -0.035071526, 0.0045729037, 0.031141097, 0.016301205, -0.020067867, 0.0050799544, -0.005470478, 0.005281515, -0.0010440204, 0.034315675, -0.0109472545, -0.00040705773, 0.0152808055, 0.03378658, 0.008786778, 0.020508781, -0.015898084, -0.007199489, -0.006802667, 0.02306608, 0.019110454, -0.02577455, -0.019601759, 0.010008738, -0.025220258, 0.0028958574, -0.008245084, -0.012440062, 0.0063145123, 0.014928075, -0.00046886437, -0.01652796, 0.014235211, 0.024766747, -0.014839891, -0.002393531, -0.018644346, 0.01296286, 0.015797304, 0.008037225, 0.016502766, -0.01714524, -0.017397191, 0.023947908, -0.039077543, 0.023532188, 0.013907675, -0.011048035, -0.004765016, 0.020269427, -0.01898448, -0.0037320186, 0.009479642, -0.001765229, 0.028999517, -0.028697176, -0.0117346, -0.020130854, -0.017472776, 0.024527393, 0.02122684, -0.013580139, 0.0044532274, -0.013920272, 0.012792793, -0.002102213, -0.001168421, -0.045930598, -0.02566117, -0.0098764645, 0.019450588, -0.022751141, 0.023292836, -0.006871953, 0.015507561, 0.001719563, 0.011041736, -0.0016140587, -0.019916696, -0.013277798, -0.008112811, 0.026656376, 0.013907675, 0.014638332, 0.010701602, -7.1353206e-05, 0.0011731451, 0.0003409207, -0.016338998, -0.0019825364, -0.012440062, -0.0013219535, 0.008963143, 0.016150035, 0.006934941, 0.0209245, 0.013592736, -0.0006782983, 0.030989926, -0.01672952, -0.009561527, -0.036633622, -0.02612728, 0.0079049505, -0.014487161, -0.020811122, -0.0046768333, -0.0041918284, -0.009070222, 0.016250815, 0.002127408, 0.0016053979, -0.0037225704, 0.032375656, 0.0036910765, 0.04169783, -0.01652796, 0.005139793, 0.004853199, -0.034517236, -0.0049413815, 0.010619719, 0.0077789756, 0.00826398, 0.012515647, 0.011671613, -0.00806242, 0.0003052933, -0.0004527238, 0.013769101, 0.012383373, -0.018379798, -0.019097857, -0.024829734, -0.023393616, -0.02826886, -0.037112325, 0.01873253, -0.0030202582, -0.041723024, 0.018203432, 0.0049476805, -0.028394835, -0.00068695913, 0.0039934176, 0.026958717, 0.0035493544, 0.005520868, 0.01689329, -0.01153304, -0.001339275, -0.00648143, -0.01577211, 0.0038265001, 0.035399064, 0.027286252, -0.015129635, 0.024703758, 0.009618215, -0.0044280323, 0.010758292, -0.0122133065, -0.018304212, -0.019677343, 0.002184097, -0.014928075, 0.017737323, -0.014701319, 0.013378578, -0.021970095, -0.012307788, 0.0009944176, -0.0016817704, -0.014348588, 0.003480068, -0.024225052, 0.0234692, 0.02786574, 0.0027746062, -0.016162632, -0.0049193357, -0.00959302, -0.0004641403, 0.011148815, 0.016540559, -0.008975741, 0.017220825, -0.005514569, 0.008295475, -0.031166293, 0.00347062, -0.0046673855, 0.024199858, -0.01280539, -0.00026356397, -0.012465257, 0.01158343, 0.029150687, -0.012326684, -0.0073317634, 0.00131408, -0.010115817, 0.00617279, 0.009196198, -0.016666533, -0.020886706, 0.017271215, -0.018329408, 0.0017337352, -0.027588593, -0.009416655, 0.019425394, -0.020445794, -0.016364193, -0.0015140658, 0.019488381, 0.020030074, 0.0042012767, -0.008465541, 0.027160278, -0.00011416513, -0.027689373, 0.023242446, -0.00053145835, 0.010065427, -0.011822783, 0.015734317, 0.005095701, -0.033131506, 0.028394835, 0.0068089655, -0.018430188, -0.031720582, 0.0055712583, -0.019815916, -0.0027541353, -0.011822783, -0.0012266845, 0.0043807914, 0.0168303, 0.006878252, -0.0019683642, -0.0058767484, -0.017749922, 0.0025541494, 0.00806242, -0.010235494, -0.0047114766, 0.008673401, -0.004979174, 0.013403773, -0.02597611, -0.006903447, -0.020647354, 0.012755, -0.01602406, -0.0069223433, -0.024779344, -0.0044122855, -0.011640118, -0.00069837563, -0.015646134, -0.0027399631, 0.0057161297, 0.030334854, -0.0030564761, 0.009712697, -0.008667101, -0.0028690877, -0.012351879, -0.021781132, -0.028445225, -0.015935877, 0.007413647, 0.00095741235, 0.0036910765, -0.035600625, -0.031141097, 0.01000244, 0.0063145123, -0.026958717, 0.015079245, 0.0063963966, 0.03504633, -0.010361469, -0.014273003, 0.019778123, -0.0024927366, -0.016288608, -0.023242446, -0.009958348, -0.002045524, -0.026757156, 0.0070546176, -0.015016257, -0.006383799, -0.021768535, 0.024174662, -0.00398082, 0.0034674704, -0.010147312, 0.009315874, 0.008081316, -0.0011196056, 0.0123959705, 0.047467496, 0.022335423, -0.0019179741, -0.024955709, -0.003867442, -0.00010904738, 0.03892637, -0.005117747, 0.0058515533, 0.005577557, -0.013605334, -0.0056972336, -0.027588593, 0.007999432, -0.0036721805, 0.018505773, 0.009479642, -0.007256178, -0.00030667114, 0.02005527, -0.0065759113, -0.017951483, -0.020659951, -0.0010503192, -0.027311448, -0.0069538374, 0.010367768, -0.035247892, 0.002853341, -0.013542346, 0.00087789044, -0.02520766, -0.03240085, -0.01801447, -0.001571542, -0.03005771, 0.02791613, 0.0076341038, -0.018417591, -0.0067837704, -0.017170435, -0.015482366, 0.00045036175, -0.018342005, -0.011249595, -0.03383697, -0.03000732, 0.0011707831, -0.0062515247, -0.020672549, 0.0014077742, 0.0055901543, 0.02663118, 0.02087411, 0.2332055, 0.017346801, 0.0050610583, 0.0525569, -0.0013219535, 0.031216683, 0.031367853, 0.0025415518, 0.0070294226, 0.02781535, 0.007432543, -0.0074451407, -0.006821563, 0.009939452, 0.010279586, -0.013920272, -0.033307873, -0.022070875, -0.0062011345, 0.004793361, 0.025031295, -0.0026360333, 0.011079528, 0.0003480068, 0.017246021, 0.016666533, -0.0029430983, -0.0018959284, 0.005382295, 0.0003334409, -0.008238785, -0.017208228, -0.002275429, 0.003924131, -0.00048776067, -0.0025447013, -0.012880975, -0.002036076, 0.019047467, 0.0331567, 0.015230415, -0.016515363, -0.03464321, -0.0055712583, -0.013139225, -0.0025935168, -0.012666818, -0.001359746, 0.006897148, 0.008755284, -0.01781291, -0.002867513, 0.0280673, 0.023960505, -0.01316442, 0.0098764645, 0.022184253, -0.023632968, 0.008629309, -0.019047467, -0.021718144, 0.029075103, -0.01500366, 0.0077789756, 0.0069538374, -0.012685714, -0.018959284, -0.0014770605, 0.02428804, -0.018669542, 0.0017699532, 0.013580139, 0.014713917, -0.0043335506, 0.004843751, -0.009265484, 0.022373216, 0.0036658817, 0.023305433, 0.0032533125, -0.009284381, -0.01408404, -0.021718144, 0.021466194, -0.0074640373, -0.014386381, 0.007035721, -0.0027998013, 0.035071526, -0.003306852, -0.0038170519, 0.010953553, 0.00067554263, 0.002092765, 0.016490169, 0.021516584, 0.0017101149, 0.029327054, -0.00847184, 0.00073734927, -0.03224968, -0.002454944, 0.008408852, -0.005234274, -0.019563965, 0.017787714, -0.00045744787, -0.0047083274, 0.031115903, -0.008994637, -0.0014148602, -0.015910681, 0.019312015, -0.007980536, -0.00070703647, 0.0023210952, -0.0011164562, -0.018228628, -0.026555596, -0.020811122, 0.0016439778, -0.031241877, -0.012099929, 0.00842145, -0.011287388, -0.013240005, 0.017346801, 0.015117037, -0.00043540218, -0.036910765, 0.008604114, 0.007016825, 0.031241877, -0.010015037, -0.017409788, 0.009725294, 0.005520868, 0.0039146827, 0.0060688606, -0.005986977, -0.01572172, -0.020911902, 0.012578635, -0.018140445, 0.017346801, -0.007596311, -0.0030690734, -0.012698311, -0.012326684, -0.021390608, -0.0023415661, -0.013038445, -0.0050799544, 0.008711193, 0.010991346, -0.008660803, -0.004276862, -0.010997645, -0.013252603, 0.019563965, 0.003842247, 0.038649227, 0.013038445, -0.0077033904, -0.010430756, 0.013491956, -0.1592328, 0.028697176, 0.008434047, -0.0030926939, -0.0134793585, 0.009347368, 0.013605334, 0.02642962, -0.008837168, 0.032350462, 0.004818556, -0.009844971, -0.032677997, -0.014096637, -0.0033635409, 0.0145501485, 0.001466825, -0.017901093, 0.013328188, 0.0065759113, 0.0076530003, -0.02137801, 0.0031383599, 0.002872237, 0.0076530003, -0.004862647, -0.025069088, 0.032224484, 0.00449102, -0.0141848205, -0.005398042, -0.010241793, -0.0057791173, 0.021264633, 0.0012723507, 0.008049822, 0.00836476, 0.0008582068, -0.008018329, 0.009844971, -0.0030706483, 0.026706766, -0.0039934176, -0.0032170946, -0.0145501485, 0.007287672, 0.017674336, 0.022763738, 0.007230983, -0.018102651, 0.019123053, -0.0362305, -0.018770322, -0.00801203, 0.023506993, 0.0156209385, 0.016981471, 0.0034769187, -0.0027210668, 0.0010109519, -0.008226188, -0.031015122, -0.0029509717, 0.0022329125, 0.0034611716, -0.0031115902, 0.0064940276, -0.00267855, -0.014159625, 0.010682707, -0.008427748, -0.011942459, 0.003892637, -0.026958717, 0.006827862, 0.019979684, -0.015646134, -0.0035115618, -0.005375996, -0.0038453965, 0.009511136, 0.038649227, -0.003810753, -0.0008645056, -0.007955341, -0.0002421088, -0.013542346, -0.00852223, -0.009611917, -0.013958065, 0.007344361, -0.034265283, 0.012282593, -0.024716357, 0.02995693, 0.009215094, -0.012874677, -6.579258e-05, 0.0010204001, -0.015847694, -0.010928358, -0.016616143, -0.029553808, 0.0199041, 0.020395404, 0.031065512, -0.010871669, 0.0122448, 0.037011545, 0.008106511, -0.025648573, 0.038548447, 0.016061852, 0.024766747, 0.02587533, 0.01388248, -0.006525521, -0.03628089, -0.0027761809, -0.006153894, 0.051498707, 0.0014660377, -0.020370208, 0.022310227, -0.0033698396, -0.0075144274, -0.091004565, -0.0043807914, 0.008282877, 0.015066647, 0.005675188, 0.02535883, 0.014046247, 0.02990654, 0.009366265, 0.030863952, -0.008465541, -0.004097347, -0.004506767, 0.00026139876, 0.0014148602, -0.009933153, -0.002760434, -0.02811769, -0.031720582, 0.012446361, -0.003530458, -0.015835097, 0.006408994, -0.0113251805, 0.0013644701, -0.02316686, -0.03403853, 0.014298198, 0.014701319, 0.0149028795, 0.013000652, -0.0152682075, -0.009970946, -0.00893165, -0.036406863, -0.0017069655, -0.0073506595, -0.007476635, 0.009555227, -0.034013335, 0.0052941125, 0.0152808055, 0.003480068, -0.043663044, -0.0010770889, 0.023506993, -0.019400198, 0.00076490635, -0.00091489573, -0.012414867, 0.009189899, 0.017409788, 0.00028009823, -0.016213022, 0.03383697, -0.011312583, 0.019979684, 0.024628174, -0.019790722, 0.0028942828, 0.0034737692, 0.034819577, 0.0028753865, 0.035499845, 0.0007987622, -0.013743906, -0.027487813, 0.0059460346, 0.025736757, -0.041874193, -0.005627947, 0.017737323, -0.028873542, -0.00052988366, -0.012540842, 0.00081883953, -0.027538203, 0.0042422186, 0.009630812, -0.0022029933, -0.020760732, -0.027613789, -0.012269995, -0.020697745, 0.00076254434, 0.028445225, -0.02771457, -0.009265484, 0.020382805, -0.022310227, -0.014260406, 0.044620454, 0.011375571, -0.020458391, 0.0030533266, 0.020937096, 0.0009463895, 0.00786086, 0.010235494, -0.015331196, -0.014310796, -0.003240715, -0.055882648, 0.010493743, -0.012679415, -0.03892637, 0.0028643636, 0.013504554, -0.0072435807, -0.017258618, -0.014096637, -0.007760079, 0.00093457935, 0.011470052, -0.01010322, -0.0056877853, -0.009164704, 0.0109472545, 0.020370208, 0.0039052346, 0.023381017, -0.0029525463, -0.014877684, 0.011388169, -0.0030486025, 0.007067215, -0.02786574, 0.016981471, -0.03388736, -0.027588593, -0.019375004, -0.021466194, 0.015646134, -0.01393287, 0.01577211, 0.036961157, -0.021264633, -0.020420598, -0.009372563, 0.037717007, 0.01515483, -0.027790153, -0.004122542, -0.029982124, 0.017598752, -0.015381586, 0.0015573698, 0.022562178, -0.0138320895, -0.0029871897, 0.015217817, -0.0074640373, 0.022184253, 0.028747566, 0.00898204, -0.0044815717, -0.009706398, -0.019072663, 0.0209245, -0.0039430275, 0.010468548, -0.036961157, 0.006062562, 0.0047083274, 0.0042422186, 0.023305433, 0.007199489, 0.0023714853, -0.0018282167, -0.010159909, -0.0015400482, -0.010657512, -0.001678621, -9.13321e-05, 0.04179861, -0.007873457, 0.028394835, 0.0011172435, 0.0021951199, -0.003204497, -0.0053445026, 0.028571201, -0.00075742655, -0.012377074, -0.03134266, 0.0079175485, 0.037893374, 0.012925067, -0.02612728, 0.0004409136, 0.004903589, 0.00083616114, -0.024149468, -0.0032060717, -0.016855497, -0.0062231803, 0.003933579, -0.008018329, -0.0077537806, -0.01316442, 0.014474563, 0.047366716, 0.011929862, -0.0039682225, -0.003703674, -0.040992368, -0.01204324, 0.008673401, -0.007363257, -0.01776252, -0.00444063, 0.010751992, 0.0039871186, -0.0008456093, -0.021503985, 0.018719932, 0.002780905, -0.0031304865, -0.0469384, -0.027084691, -0.023028286, 0.022612568, 0.0064215916, 0.000785771, 0.0042926087, 0.009164704, 0.021000085, 0.02127723, 0.042226925, -0.030612001, -0.0038642928, 0.031594608, 0.0131014325, 0.0014691871, 0.0037918568, -0.008874961, -0.010015037, -0.009063924, -0.008679699, 0.028042104, -0.0011077954, 0.06092166, -0.00021376436, -0.015646134, 0.021844119, 0.0013479359, 0.006802667, 0.032627605, -0.01565873, -0.012975457, -0.018140445, -0.0055492125, 0.0007235707, 0.021390608, 0.005990126, -0.017636543, -0.0016723223, -0.022587374, 0.03204812, -0.035852574, -0.009555227, 0.01076459, -0.0109598525, 0.0022833026, 0.010997645, -0.021806326, -0.0046106963, -0.004821705, 0.0018770321, -0.0022896014, -0.01005283, 0.028596396, -0.018820712, -0.020659951, -0.00760261, 0.008849766, -0.03388736, -0.021894509, -0.020067867, 3.907203e-05, 0.012610129, 0.0071868915, 0.01672952, -0.019992283, -0.022751141, -0.01153304, -0.0073947506, -0.014373783, -0.006169641, -0.020496184] } ], "model": "text-embedding-ada-002-v2", "usage": { "prompt_tokens": 6, "total_tokens": 6 - } -}610 1621 + }, + "object": "list" +}610 1663 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -118,18 +122,19 @@ Content-Type: application/json {"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the desk?\nHelpful Answer:"}]}HTTP/2.0 200 OK Content-Length: 838 Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:11 GMT +Date: Mon, 21 Sep 2026 07:47:58 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 232 +Openai-Processing-Ms: 483 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 247 X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 30000 X-Ratelimit-Limit-Tokens: 150000000 @@ -137,24 +142,23 @@ X-Ratelimit-Remaining-Requests: 29999 X-Ratelimit-Remaining-Tokens: 149999925 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_f26ea45bf905484aaa16eb73b9acd329 +X-Request-Id: req_ba173373096144b3ab37285acd629531 { - "id": "chatcmpl-D0vCVQoD2HoaM5g1lBSigOVHUpjMc", "object": "chat.completion", - "created": 1769112251, + "created": 1789976878, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { + "logprobs": null, + "finish_reason": "stop", + "index": 0, "message": { - "role": "assistant", "content": "The color of the desk is orange.", "refusal": null, - "annotations": [] - }, - "logprobs": null, - "finish_reason": "stop", - "index": 0 + "annotations": [], + "role": "assistant" + } } ], "usage": { @@ -162,8 +166,8 @@ X-Request-Id: req_f26ea45bf905484aaa16eb73b9acd329 "completion_tokens": 8, "total_tokens": 80, "prompt_tokens_details": { - "audio_tokens": 0, - "cached_tokens": 0 + "cached_tokens": 0, + "audio_tokens": 0 }, "completion_tokens_details": { "reasoning_tokens": 0, @@ -173,5 +177,6 @@ X-Request-Id: req_f26ea45bf905484aaa16eb73b9acd329 } }, "service_tier": "default", - "system_fingerprint": "fp_fe84ea9799" + "system_fingerprint": "fp_a8d11c9b56", + "id": "chatcmpl-EQT2kgHYfpj6QkEEOKrdCseaDi0oD" } \ No newline at end of file diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr index d7319a399..c6307c730 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilterNotSelected.httprr @@ -1,5 +1,5 @@ httprr trace v1 -554 106350 +554 106416 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -11,20 +11,22 @@ Content-Type: application/json Content-Length: 105459 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:24 GMT +Date: Mon, 21 Sep 2026 07:48:05 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 241 +Openai-Processing-Ms: 158 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-58675c86cb-8llg5 +Via: envoy-router-7d5f5f44cf-z9b2b X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 260 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 @@ -32,9 +34,10 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999926 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_df4996cfd74548ff9c92a98c5f091ebe +X-Request-Id: req_4c86eb857e274cc4b50ba9a666c97ea0 { + "object": "list", "data": [ { "object": "embedding", @@ -47,9 +50,9 @@ X-Request-Id: req_df4996cfd74548ff9c92a98c5f091ebe "embedding": [0.017523589, 6.212279e-05, -0.00040200076, -0.02405605, -0.0050159977, 0.018119805, -0.017679123, -0.013687063, 0.0186901, -0.009098786, -0.00013609296, 0.022552546, -0.006143625, 0.012384459, -0.016642224, -0.008534973, 0.027711118, 0.013213978, 0.027918497, -0.02352464, -0.029784916, 0.021036083, -0.007368461, 0.0015593985, -0.019182626, -0.016020086, 0.008035965, -0.017873542, -0.0028417506, 0.018677138, 0.0047308505, -0.016694069, 0.008735872, -0.03600631, -0.025170716, 0.0021823477, 0.0042383233, -0.010057918, 0.018080922, -0.0109328, 0.011917855, 0.011483653, -0.0006026974, -0.012015064, -0.008217422, 0.012306691, 0.028125877, 0.0096626, -0.009474662, 0.019273356, 0.0072453297, 0.033647362, -0.013933326, -0.019247433, -0.001123577, -0.028203646, 0.0036712694, 0.01186601, -0.0022098904, -0.008709949, -0.021087928, -0.01817165, 0.0004909067, -0.007031469, -0.0041767578, 0.0003876219, -0.016499652, -0.0052914238, 0.009636678, 0.017886503, 0.02784073, 0.024937414, 0.013220458, 0.02195633, 0.021723028, 0.016110813, -0.0038008818, 0.000109765446, 0.00061930396, -0.0013325769, -0.0013293365, -0.020336175, -0.043186832, -0.016046008, 0.0104597155, 0.0045429124, -0.025157755, 0.011042971, -0.0340362, -0.020219525, 0.00037830602, 0.033362217, 0.017199557, -0.011885451, -0.00018783663, 0.018223494, 0.020323215, 0.02846287, 0.0071351593, -0.02877394, 0.0092543205, 0.014516582, -0.04212401, -0.002499898, -0.041190803, -0.017458782, -0.0018421153, -0.011567901, 0.028955396, -0.019921416, -0.03958361, 0.022669198, 0.03927254, -0.03004414, -0.009280244, -0.011898412, -0.009882941, -0.022928422, -0.02006399, 0.0071157175, 0.007971159, 0.037354276, 0.008463685, -0.0052330983, 0.018223494, 0.00756288, -0.017510626, -0.032014247, 0.00036190194, -8.986793e-05, 0.012572397, 0.013298226, 0.017497666, 0.017186597, -0.016564457, -0.0134408, -0.0032516494, 0.014127745, -0.006629671, -0.021437882, 0.0008570616, 0.032999303, -0.018949324, -0.010861514, -0.0016549876, 0.037146896, 0.0151646435, -0.004578556, -0.015618287, -0.0035902618, 0.0027461615, -0.028385103, 0.013803714, 0.005223377, 0.0090275, 0.02405605, -0.009312646, 0.016460767, -0.026959367, 0.014555465, -0.022280362, 0.0011462591, 0.030432977, -0.009183034, 0.039635453, 0.0222674, 0.004756773, 0.019273356, -0.018003155, 0.0051618116, -0.009144151, 0.039039236, -0.03730243, 0.03214386, -0.0048896256, 0.0212305, 0.0032305876, 0.0001013609, -0.016538534, 0.009934786, -0.03297338, -0.010887437, 0.019053014, 0.0012418482, 0.0033277967, -0.008223902, 0.011632707, -0.011386444, 0.011140181, -0.0034962927, 0.024561537, 0.01712179, -0.019830687, -0.026907522, -0.6847679, -0.036706213, 0.016214503, -0.0060658576, 0.0059070825, 0.019947339, 0.015216488, 0.023174686, 0.00283689, -0.017692083, 0.0030815334, -4.3946682e-05, 0.012889947, -0.0058455165, 0.0039142924, -0.012015064, -0.0053724316, 0.012617761, 0.0014476078, -0.018016115, 0.0078091435, 0.0052168965, -0.001502693, 0.0027785646, 0.023978282, 0.0007080074, 0.02552067, 0.008554414, -0.017990192, 0.0055733304, -0.0073555, 0.017199557, 0.0068240897, -0.0033018743, 0.044871792, -0.013855559, -0.025624359, 0.01815869, 0.027607428, 0.012481668, -0.005385393, -0.017303247, -0.0023249213, -0.018249417, -0.0045655947, 0.010368987, 0.014529543, -0.011742878, 0.033906586, 0.009908863, 0.026298344, -0.036809903, -0.0017805495, 0.0009915344, 0.015683092, 0.010116243, 0.03800234, 0.0016436465, -0.005421036, -0.002363805, -0.017342132, -0.01554052, -0.011315157, -0.025753971, -0.020984238, 0.011535498, -0.040050212, -0.031599488, -0.010621731, -0.0094357785, -0.006461175, 0.011943777, -0.0134408, 0.02395236, 0.017497666, -0.00059095124, 0.02763335, -0.010245855, -0.001565069, -0.0036291454, 0.02500222, -0.014685078, -0.027788885, -0.023602407, 0.04214993, -0.015060954, -0.012481668, -0.011179064, 0.015294256, -0.011658629, 0.032299396, -0.0029713628, -0.015566442, -0.015190566, -0.0059524467, 0.03572116, -0.0005998621, -0.0016671387, 0.012157638, -0.009882941, -0.0016314953, -0.00367775, -0.0025274407, 0.003264611, 0.03258454, -0.0071027563, -0.022643276, 0.03025152, 0.009202476, -0.017355092, 0.021062005, -0.020413943, -0.0176532, 0.0026505722, -0.00054153654, -0.027918497, 0.03362144, 0.012468707, 0.013570412, -0.009105267, 0.0052330983, 0.0040179826, -0.007731376, -0.008735872, 0.012857544, 0.008943251, -0.010122724, -0.014736922, -0.01731621, -0.00050913345, -0.0070055467, -0.0005022478, 0.025248483, 0.0061533456, -0.0036647888, 0.00079266046, 0.013609296, -0.010414352, 0.04106119, -0.015773822, -0.023265414, -0.005097005, -0.023226531, 0.024652267, -0.005223377, -0.027140824, -0.024989258, -0.007206446, -0.037017282, 0.01806796, -0.014905419, -0.019299278, -0.025339212, 0.032429006, 0.019986223, -0.0047535324, -0.021165695, 0.008152616, -0.021334192, 0.01786058, 0.003392603, 0.0041346336, -0.0018972006, 0.006986105, 7.14893e-05, -0.028748017, -0.012215963, 0.03541009, -0.009805174, -0.032429006, 0.015696054, 0.0045234705, -0.0032224867, 0.00703795, -0.024069011, -0.0096626, -0.021139773, -0.03266231, 0.017082905, -0.0099801505, 0.012902908, 0.021710066, 0.0022196113, -0.021800796, 0.03245493, 0.004977114, 0.017743928, 0.018482719, 0.008573856, -0.012520552, -0.005515005, 0.004086029, -0.014335125, -0.009967189, 0.017808735, 0.0011179064, 0.010142165, 0.01879379, 0.014244396, -0.0029567815, 0.022034097, -0.009241359, 0.0071157175, -0.010738382, 0.005725625, -0.048682395, 0.019701075, -0.008684027, -0.0024545337, 0.021813756, -0.0052168965, -0.023693135, -0.01261128, -0.016538534, 0.020543555, 0.002593867, -0.017069945, 0.015501636, 0.00019077316, -0.016201543, 0.007919314, 0.008210941, 0.026596451, 0.006594028, -0.012319652, 0.0066879964, 0.038106028, 0.006662074, -0.011736398, -0.012805699, -0.02102312, -0.0013350071, -0.016707031, 0.020699091, -0.034399115, -0.008625701, 0.009831096, -0.038935546, 0.016992178, 0.014399931, -0.004792416, 0.043186832, 0.020452827, -0.006166307, 0.004546153, 0.019947339, 0.010057918, 0.008658105, -0.016525574, 0.004497548, -0.028644327, 0.0012734412, -0.006321842, 0.017912425, 0.030614434, -0.0052492996, 0.03416581, 0.009526507, 0.03318076, 0.018210534, -0.011114258, -0.0064773764, 0.0019312239, -0.00058325555, -0.0009615615, -0.0055733304, -0.008852523, -0.011684553, -0.013959249, -0.014762846, -0.011315157, 0.011088336, 0.028099954, -0.015605326, 0.014192551, -0.013946287, -0.010031995, -0.014879497, 0.020621324, 0.014011093, -0.013907404, -0.039557684, 0.02426343, -0.011937296, -0.007860988, -0.018314224, -0.025261445, 0.020660207, -0.0017578673, 0.013518567, 0.016940333, 0.0072842133, 0.023757942, -0.019130781, 0.0059070825, -0.043446057, 0.0040244632, -0.002930859, 0.024613382, 0.0031641612, -0.0010952243, -0.009338569, -0.035487857, -0.012060428, 0.0140759, -0.0017287045, -0.004977114, 0.010524522, -0.01112722, -0.037250586, -0.005061362, 0.0023152004, 0.0015310458, -0.019078936, -0.012326133, 0.0069925855, -0.028203646, -0.014788768, 0.02511887, 0.009753329, -0.003875409, -0.016642224, -0.01312325, 0.012416862, 0.08118917, 0.0067592836, -0.0043096105, 0.00504192, -0.0024853165, -0.015579403, -0.02279881, 0.004662804, -0.0097403675, 0.009396895, 0.016512612, -0.01712179, 0.013998132, 0.004047145, -0.013738908, -0.0035578588, 0.0058746794, -0.0019782083, 0.02121754, -0.022461819, -0.0007683581, 0.0065713455, -0.007303655, 0.015851589, 0.009202476, -0.016421882, 0.02090647, 0.0032905333, 0.027374126, -0.0045072692, -0.003593502, 0.011891932, -0.014723961, -0.015851589, -0.01134108, -0.006752803, -0.015151682, 0.0039142924, 0.006837051, -0.014153668, 0.031884637, 0.020400982, 0.012481668, -0.016888488, -0.0075369575, 0.01292235, -0.0085932985, 0.022708083, -0.0067592836, -0.0048248195, 0.022980267, 0.0105828475, -0.0034282464, 0.0027364404, 0.013324148, 0.008023004, -5.4528315e-05, 0.00012606825, 0.0016752395, -0.010466197, 0.013790753, -0.013142691, 0.011263312, -0.0033990836, -0.027918497, -0.0193252, -0.004273967, 0.0022860377, -0.024548577, -0.004630401, -0.0015221349, -0.017614316, -0.020945353, -0.0027753243, 0.02531329, 0.016240425, 0.0096172355, -0.009759809, -0.015320178, 0.034943487, -0.013226939, -0.00053465087, -0.0042804475, 0.0012726311, -0.007660089, 0.0025825258, 0.033310372, -0.028385103, -0.015514597, 0.0010903638, 0.039039236, -0.005839036, 0.013687063, -0.014477698, 0.0053141057, -0.0044424627, 0.0077961823, 0.0049933153, -0.009085825, -0.011574382, 0.0126890475, -0.024885569, -0.014309202, -0.013635218, 0.003998541, 0.0186901, 0.009779251, 0.005485842, -0.030821813, -0.001733565, 0.012377978, -0.002331402, -0.009798693, -0.004277207, 0.015397945, 0.018236456, -0.014412892, 0.02615577, 0.0064028497, -0.020025106, 0.017666161, -0.038365252, 0.023576485, 0.006733361, -0.009468181, -0.00388513, 0.027374126, -0.001806472, -0.012643684, 0.013712985, 0.0023913477, 0.010556925, -0.013725947, -0.02708898, -0.04023167, -0.025792856, 0.036602523, 0.0032484091, -0.01522945, -0.0061630667, 0.0041540754, 0.014775807, 0.0030993551, -5.6654768e-05, -0.011703994, -0.021645261, 0.011276273, -0.012436304, -0.010323623, 0.023278376, -0.0047114086, -0.0024205104, -0.012682567, 0.012585358, 0.004873424, -0.020323215, -0.020232486, -0.023615368, 0.022721043, 0.0016250147, 0.019610347, -0.0034800912, 0.0031430991, -0.00483454, -0.004380897, -0.0019036812, -0.0045072692, 0.0069601825, -0.041424103, 0.014555465, 0.02373202, 0.0072647715, 0.015099837, -0.0053400286, 0.010349546, 0.029758994, 0.0010020654, -0.0056510977, -0.022656238, -0.021204578, -0.0041443547, -0.010485638, -0.01335007, -0.017471744, 0.0020089913, -0.0057807104, 0.03543601, 0.008794197, 0.0051942146, -0.0010449995, 0.029136853, -0.011457731, 0.03727651, -0.0072194072, 0.00043622652, -0.0073295776, -0.014879497, -0.0061922297, 0.0042966492, 0.011269793, 0.01796427, 0.011276273, -0.0078674685, -0.026505724, 0.006383408, 0.017899465, 0.027063057, 3.4985205e-05, -0.01303252, -0.014335125, -0.0042998893, -0.017277325, -0.028099954, -0.053452127, 0.012047467, -0.0004054436, -0.030951427, 0.027114902, -0.014555465, -0.012915869, -0.00924784, 0.003023208, 0.023161724, -0.0034930524, 0.019908456, 0.0060658576, -0.0075693605, -0.010518041, 0.0017627279, -0.011885451, -0.0010684917, 0.025974313, 0.018236456, -0.008347034, 0.025468824, 0.016797759, 0.01659038, 0.02931831, -0.0052687414, -0.017588394, 0.0068111285, 0.014970225, -0.026350189, 0.0062635164, -0.02447081, 0.02111385, -0.017471744, -0.02111385, 0.0063412837, -0.0010490499, -0.013246381, -0.003813843, -0.042797994, 0.009306166, 0.009390414, 0.005417796, 0.008126694, -0.0007420306, -0.028877629, -0.0039240136, -0.0050905244, 0.030173752, -0.001858317, 0.008599779, 0.006419051, 0.012481668, -0.018858595, -0.0053303074, 0.0030539907, 0.025637321, -0.010122724, 0.004423021, -0.008003562, 0.024872608, 0.04728258, -0.016007124, -0.0051488504, -0.0034282464, -0.008742352, -0.0097403675, 0.007737857, 0.009921825, -0.011354041, 0.006383408, -0.026090965, -0.006986105, -0.0363433, 0.008431283, -0.0046206797, -0.018988207, -0.0013366273, -0.0151646435, 0.009358011, 0.0066879964, 0.012766816, 0.0025015182, 0.026116887, 0.009358011, -0.0135963345, 0.027244514, -0.02215075, 0.02141196, -0.0038948508, 0.017160675, 0.009753329, -0.022513663, 0.023045074, -0.02102312, -0.028177723, -0.022384051, -0.008586817, -0.017730968, 0.0069277794, -0.005644617, 0.0009356391, -0.013259342, 0.0015626388, -0.02342095, -0.012164118, -0.008781236, -0.026726063, 0.011263312, 0.028177723, -0.018106844, 0.0036226648, 0.0061501055, -0.0010296081, -0.001040139, -0.030536667, -0.0023881074, -0.012643684, 0.0155275585, 0.009396895, -0.011639188, 0.0027137583, -0.013674102, -0.01889748, 0.007835066, -0.0040536257, 0.014490659, 0.005631656, -0.0009842437, -0.026220577, 0.01786058, -0.015203527, 0.013110288, -0.014516582, -0.03204017, -0.018638255, 0.0005557129, 0.014399931, -0.00924784, -0.011639188, -0.040179826, -0.014361047, -0.0054048346, -0.008664585, 0.00084491045, 0.010965204, 0.0134148775, 0.021645261, -0.011042971, -0.011282754, 0.016642224, 0.0040082615, -0.00703795, -0.02288954, -0.0019976501, 0.0032386882, -0.007187004, 0.01228725, 0.012714971, -0.011405886, -0.020543555, 0.012896428, -0.01292235, -0.0031544403, -0.008742352, -0.007692492, -0.00054680207, 0.019467773, 0.019934379, 0.026103925, 0.014218474, -0.006901857, -0.016525574, -0.00011492969, 0.002068937, 0.033362217, -0.026570529, 0.008074849, 0.009422817, -0.011950257, -0.016227465, -0.030614434, 0.013648179, 0.0116651105, 0.0084701665, 0.011775281, -0.0058260746, 0.0076536085, 0.035876695, -0.0075175157, -0.0052817026, -0.00231196, -0.008580337, -0.03520271, -0.010258816, 0.0009680422, -0.021152733, 8.442523e-06, -0.018482719, -0.003224107, -0.021100888, 0.009461701, -0.025092948, -0.0063121207, -0.02225444, 0.024522655, 0.019078936, -0.017730968, 0.008437763, -0.031703178, -0.0027348204, -0.0051391292, -0.0069277794, 0.00096075144, -0.020802781, -0.007193485, -0.0068305703, -0.0030961148, -0.021826718, -0.0019360844, 0.015994163, 0.028748017, 0.01953258, 0.20841664, -0.0045105093, -0.012099312, 0.0422277, -0.006338043, 0.020128796, 0.018949324, -0.002362185, 0.031780947, 0.024626344, -0.013933326, 0.012008583, -0.0058779195, -0.0064968183, 0.000976953, -0.017912425, -0.033258528, -0.009461701, -0.010414352, -0.009688523, -0.006921299, -0.014516582, -0.0005455869, -0.008910848, 0.015605326, -0.00086192205, -0.009818135, 0.0023994483, 0.025728049, 0.018754905, -0.016940333, -0.016681109, -0.010064398, -0.02216371, -0.0014354567, 0.0029778434, -0.0055182455, -0.011807684, 0.021619339, 0.031806868, 0.008787717, -0.010330103, -0.022954345, -0.0015326659, -0.012883467, 0.02469115, -0.015683092, -0.011904893, 0.01554052, 0.0132334195, -0.020660207, -0.0023670453, 0.023356143, 0.022734005, -0.0015918015, 0.023615368, 0.02142492, -0.0035157346, 0.0071675624, 0.00020656966, -0.018210534, 0.023589445, -0.03289561, 0.0055538886, 0.0031220373, -0.0020106114, -0.003350479, -0.003235448, 0.025248483, -0.030173752, 0.0065843067, 0.0043225717, -0.012274289, 0.004179998, -0.01428328, -0.021969292, 0.024146779, -0.0069083376, 0.019999184, 0.008956213, -0.019726997, 0.0024221307, -0.014244396, 0.0057807104, -0.00095346075, -0.021710066, 0.0023589446, 0.0014532784, 0.02185264, -0.0028709134, 0.0005103486, -0.008029484, 0.008800678, 0.017355092, 0.028099954, 0.022604391, 0.0020964795, 0.0006699338, -0.02911093, -0.0026003476, -0.03248085, -0.043575667, 0.019156704, -0.003382882, -0.007854507, 0.014594349, -0.0076341666, 0.008347034, 0.039428074, 0.0034055642, 0.012215963, -0.013272303, 0.006739842, -0.0005609784, 0.004014742, -0.01009032, 0.011697514, -0.014011093, -0.008035965, -0.0026489522, 0.00031593008, -0.007608244, 0.0058163535, 0.0061987103, 0.020128796, -0.017912425, -0.009811654, 0.008282228, 0.002080278, -0.04274615, 0.027659273, -0.0027186188, 0.030873658, -0.010524522, -0.002122402, 0.029292388, 0.009695003, -0.011470692, -0.0045720753, 0.0021823477, 0.005599253, -0.012034506, 0.0096172355, 0.007511035, 0.004873424, 0.0009202476, 0.009513546, -0.0034476882, -0.021697106, -0.022202594, -0.018288301, 0.018262379, -0.00787395, -0.0050808038, 0.01691441, -0.013492645, -0.01565717, -0.016564457, 0.00651302, 0.026220577, -0.011334599, 0.010174569, 0.009403375, -0.0045882766, 0.003235448, 0.0039272537, -0.16611117, 0.017536549, 0.021360114, -0.007990601, -0.0037781997, 0.012040987, 0.00041759474, 0.028618405, -0.01815869, 0.026531646, -0.0043614553, 0.017069945, -0.034502804, -0.0075888024, -0.002595487, 0.008917329, -0.0023103398, -0.0108226305, 0.02132123, 0.01889748, 0.0038365251, -0.018832672, -0.0003612944, 0.0066361516, 0.010077359, -0.0036842306, -0.0023702856, 0.02225444, -0.004818339, -0.02698529, 0.005388633, 0.007394384, 0.015255372, 0.020608362, 0.032195706, 0.016149698, -0.014322164, 0.006966663, 0.0003718254, -0.008327593, 0.0010595808, 0.020310253, 0.0036518276, 0.015372023, -0.01354449, 0.014892458, 0.020025106, 0.0126307225, -0.0058033923, -0.014011093, 0.008522011, -0.03297338, -0.0041637965, -0.0053918734, 0.014309202, 0.030329287, 0.019726997, 0.007945237, -0.008599779, 0.009234879, -0.016655186, -0.0363433, -0.0043128505, 0.006564865, 0.009053422, -0.004821579, 0.01627931, 0.014088862, -0.021295307, -0.0023459834, -0.018741945, -0.021541571, -0.0096172355, -0.022111865, -0.003425006, 0.01417959, -0.009306166, -0.006772245, -0.005835796, -0.020323215, 0.0017319449, 0.034839798, -0.0072194072, 0.0025663243, -0.016058968, 0.007835066, -0.0047211293, 0.013790753, -0.02090647, -0.0036064633, 0.03823564, -0.034217656, 0.0022552547, -0.023070997, 0.010887437, 0.016551496, -0.001848596, -0.007530477, 0.005482602, 0.020102873, 0.014736922, -0.0056024934, -0.014490659, 0.014723961, 0.03004414, 0.019195586, -0.0025128592, 0.012844583, 0.024496732, -0.0014062938, -0.019351123, 0.02269512, -0.009118228, 0.01954554, 0.011321638, -0.0017400456, 0.015475714, -0.025922468, 0.0087747555, 0.009792212, 0.04282392, -0.001953906, -0.0029276188, 0.01008384, -0.01944185, -0.025365135, -0.1075264, -0.0002774514, 0.0193252, 0.03235124, 0.0013819915, 0.015890473, -0.0040277033, 0.022215554, 0.0030944946, 0.028203646, -0.021256423, -0.012591839, -0.012572397, -0.013816675, 0.0035319363, -0.010174569, 0.0040568663, -0.02784073, -0.044845868, 0.024496732, -0.0055733304, 0.00064968184, 0.004497548, -0.010064398, -0.0047535324, -0.0092543205, -0.029862683, 0.022824733, 0.003499533, -0.0034379673, 0.026570529, -0.012429823, 0.0020284331, -0.0013220458, -0.021463804, -0.0170181, 0.0076406472, -0.001973348, 0.0043614553, -0.03413989, -0.003907812, 0.0066555934, 0.013298226, -0.02541698, 0.002112681, 0.0055927723, -0.015553481, 0.015372023, -0.010796708, -0.009163592, 0.008658105, 0.018366069, -0.031340264, -0.0075693605, 0.03802826, -0.012261327, 0.018534565, 0.021710066, -0.028125877, 0.012844583, 0.0033099751, 0.013803714, -0.009656119, 0.024535615, -0.02763335, -0.009040461, -0.039246615, -0.012546474, 0.028748017, -0.020841664, -0.014218474, 0.017069945, -0.013725947, 0.016784798, -0.026194654, 0.0048896256, -0.018923402, -0.0058649583, 0.011827126, -0.01713475, -0.031210652, -0.021917446, -0.005064602, -0.002742921, -0.004883145, 0.02763335, -0.011094816, -0.008859003, 0.021684144, -0.006146865, -0.0026084483, 0.032117937, -0.0017141232, -0.02300619, -0.0039531766, 0.006176028, -0.0055085244, 0.00063712563, 0.00808781, -0.02269512, -0.010790227, -0.017264364, -0.042175855, 0.011652149, 0.00409575, -0.017730968, -0.0009121468, 0.0035578588, -0.0027753243, 0.0027218591, -0.020932393, 0.0060852994, 0.0046206797, 0.00058690086, -0.010738382, -0.02121754, -0.01576086, -0.0067592836, 0.0038948508, 0.006901857, 0.012442784, -0.0062959194, 0.0024010686, 0.00096885226, 0.011166103, 0.01713475, -0.037769035, 0.00346713, -0.0023168207, -0.01629227, -0.02522256, -0.015346101, 0.025792856, -0.030407054, -0.00178541, 0.038702246, -0.022837695, -0.025883583, -0.014996148, 0.02606504, 0.011211467, -0.015294256, -0.027607428, -0.033102993, 0.0132334195, -0.027244514, -0.00777026, 0.02877394, -0.014153668, -0.0017141232, -0.00043420133, 0.008223902, 0.019454813, 0.020452827, 0.008029484, -0.005576571, -0.01460731, -0.0140759, 0.029188698, 0.016577419, 0.02364129, -0.012066909, 0.0042836876, -0.0032516494, 0.0064125704, 0.012844583, 0.005113207, 0.014231435, 0.011107777, 0.0016541774, -0.0028741537, -0.013453761, -0.014011093, -0.011516056, 0.036084075, 0.018055, 0.0073879035, -0.0039434554, 0.0027024173, -0.009591313, -0.029396078, 0.031858712, 0.020193603, -0.0043322924, -0.009520026, 0.012339095, 0.023939399, 0.030847736, -0.037120976, 0.008100771, 0.0060528964, 0.008483128, -0.015838629, 0.005644617, 0.019921416, 0.019726997, 0.01386852, 0.0044716257, -0.014062938, -0.006111222, 0.00021284776, 0.031029195, -0.0039434554, -0.009111747, 0.00065575744, -0.04399043, -0.023058034, 0.009947747, -0.014153668, -0.013401916, 0.0018566968, 0.020400982, 0.011250351, 0.00043582148, -0.0063704466, 0.016383, -0.006253795, -0.0024496731, -0.013103807, -0.014062938, -0.020154718, 0.010978165, 0.00703795, 0.009578352, 0.01849568, -0.013427839, 0.013959249, 0.008560895, 0.02867025, -0.015942318, 0.015035031, 0.011438289, 0.011645668, 0.0040406645, -0.0031884636, 0.0021191617, 0.00041030406, -0.03035521, -0.00987646, 0.016953293, 0.0057321056, 0.0519227, -0.007154601, -0.044249654, 0.026622374, -0.008969174, 0.006334803, 0.017095868, 0.012902908, -0.00609178, -0.005495563, 0.011606785, 0.0068759345, 0.03569524, -0.009176553, -0.029033164, -0.0072129266, -0.024107896, 0.022980267, -0.025753971, -0.003005386, 0.009021019, -0.014127745, 0.010181049, 0.008722911, -0.020012146, -0.005560369, 0.011179064, 0.008165577, -0.003528696, -0.0011827126, 0.021995215, -0.019208549, -0.024963336, -0.001501883, 0.0043744165, -0.01870306, -0.018741945, -0.00986998, 0.011593823, 0.011580862, 0.012838102, 0.020828703, -0.022734005, -0.008671066, 0.006250555, -0.011114258, 0.0048280596, 0.011062413, -0.018366069] }, { - "object": "embedding", "index": 2, - "embedding": [0.016153779, -0.015616193, -0.008981606, -0.01708472, 0.0021126443, 0.014409905, -0.021975433, -0.0053955195, 0.0075065247, -0.018435238, 0.023837313, 0.0075327484, -0.01509172, 0.016783146, -0.026525239, -0.007637643, 0.03511349, -0.005415187, 0.02217211, -0.015353957, -0.03875858, 0.010004329, -0.01960219, 0.010850042, -0.0075327484, -0.015694864, 0.008286679, -0.024256893, 0.016822482, -0.0005588919, 0.012803705, -0.021372288, 0.012646363, -0.03340895, -0.029370507, 0.0135969715, 0.007886767, -0.004871046, 0.012253009, -0.027429955, 0.017700976, 0.0026518684, -0.005215232, -0.017910764, -0.0037335947, 0.022788366, 0.025371397, 0.00534635, -0.011990772, 0.020008657, 0.00051709794, 0.023640636, -0.011813762, -0.022631025, 0.009958438, -0.03304182, -0.0017979601, 0.013570747, -0.025476292, -0.02223767, -0.005359462, -0.0122989, -0.0019290785, -0.007781873, 0.004313793, -0.0018684362, -0.0038974925, 0.010895934, -0.0038089876, -0.0028846033, 0.030655466, 0.025135385, -0.001303808, 0.019562855, 0.0118006505, 0.0113024, -0.0063297376, 0.0026944818, 0.0058609894, -0.009348737, -0.00017905848, -0.023588188, -0.02517472, -0.0048612123, 0.014986826, 0.0101223355, -0.004176119, 0.0034975817, -0.025830312, -0.015026161, -0.0028682137, 0.02795443, 0.030288335, 0.0030566962, -0.004385908, 0.015485075, 0.0151441675, 0.026656358, 0.020978933, -0.022539241, 0.01380676, 0.019536631, -0.035637964, -0.0039991094, -0.029318059, -0.024322452, 0.010279678, 0.0008330112, 0.037709635, -0.02774464, -0.027639745, 0.021359177, 0.021359177, -0.020716697, -0.018697474, -0.023994654, -0.0035696966, -0.021765644, -0.029921204, -0.008339126, -0.00088422926, 0.040332, 0.015065497, -0.01401655, 0.029370507, 0.011027052, -0.007834321, -0.020978933, -0.010909045, 0.0049497173, 0.012292344, 0.018238561, 0.022867037, 0.016835595, -0.0058675455, -0.007237732, -0.004654701, 0.026931707, -0.0075130807, -0.030943926, 0.0189466, 0.028846033, -0.0030058878, -0.0044449116, -0.008227675, 0.0359002, 0.028347785, -0.0035238052, -0.0015299871, 0.0017405959, 0.0071918406, -0.03367119, 0.018776145, -0.00021327217, 0.011426963, -0.0030566962, -9.7442435e-06, 0.0013783815, -0.03359252, -0.0033189328, -0.014567247, 0.004539972, 0.027272614, 0.010705812, 0.020402012, 0.021057604, 0.00024297867, 0.0151441675, -0.00815556, 0.010738592, 0.0012194006, 0.030734139, -0.0169536, 0.026931707, -0.007145949, 0.0134068495, 0.004330183, 0.0017110943, -0.013701866, 0.008863599, -0.014331234, -0.0058839354, 0.016324233, -0.00081703113, 0.011453186, -0.009558527, 0.008981606, -0.008837376, 0.01408211, -0.008752149, 0.021936098, 0.02246057, -0.0018553245, -0.018356567, -0.69775933, -0.03325161, 0.0027141494, -0.000667884, 0.007991662, 0.021608302, 0.0042088986, 0.008850488, -0.0031075045, -0.015668642, -0.0011112279, 0.009912546, 0.004487525, -0.010017441, 0.008745593, -0.032936927, -0.011767871, 0.02761352, -0.0061527276, -0.009237287, -0.0015480159, -0.0005322585, -0.02695793, -0.00213559, 0.031337284, 0.013977215, 0.02474203, -0.0036155882, -0.00033496637, 0.016337344, -0.0065067476, -0.0032714026, -0.0075065247, -0.01608822, 0.040961366, 0.0091651715, -0.019038383, 0.008430909, 0.0034844698, 0.015839094, -0.009702757, -0.0044481894, -0.0049136598, -0.02244746, -0.006942716, -0.0015578497, 0.009853543, -0.00850958, 0.037735857, -0.00013111833, 0.023365287, -0.014934379, 0.0012964326, -0.0038745468, 0.024191333, -0.0023076828, 0.016652029, -0.0015119583, 0.006129782, -0.0023896317, -0.012200561, 0.0026420346, -0.018999048, -0.017176501, -0.012233341, 0.007585196, -0.03805054, -0.018723698, -0.0053004585, -0.0030353894, 0.00883082, 0.013282287, -0.015131056, 0.02811177, 0.014252563, 0.0016799537, 0.01652091, -0.019038383, 0.026774364, 0.013131501, 0.01694049, -0.006303514, -0.021188723, -0.004199065, 0.020179112, -0.0113024, -0.03275336, -0.02881981, 0.01644224, -0.010791039, 0.04413443, 0.0019176056, -0.004628477, -0.009289734, -0.002758402, 0.025751641, -0.009866655, -0.00023293991, 0.013059386, -0.012089111, 0.008430909, -0.026905483, -0.008699701, 0.0051562283, 0.03382853, 0.010941825, -0.029108271, 0.036031317, 0.011276177, -0.018972823, 0.01873681, -0.019051494, -0.02295882, -0.0009342181, 0.015537523, -0.022985045, 0.04568163, 0.017714087, 0.0072573996, -0.0055102482, -0.0036549235, -0.0011267982, -0.0064215204, -0.024873149, 0.007932659, -0.012987271, -0.0020356122, -0.0258172, -0.019077718, -0.004802209, 0.0063362936, -0.0028796864, 0.009184839, 0.006480524, -0.003220594, -0.003622144, 0.007926104, -0.017425627, 0.031337284, -0.030209664, -0.025843425, -0.012954491, -0.021136276, -0.004975941, -0.00757864, -0.018081218, -0.031153716, -0.0062248427, -0.029082047, 0.017989436, -0.03432678, -0.019969322, -0.03217644, 0.019274395, -0.00030382577, -0.006536249, -0.024178222, 0.0030353894, -0.009466744, 0.0314684, 0.0026469515, 0.00944052, -0.009899435, -0.004884158, -0.0017094553, -0.03784075, -0.000945691, 0.032858256, -0.0035729746, -0.03482503, -0.001888104, -0.0027125105, 0.010037108, -0.0065559167, -0.024584688, -0.015668642, -0.016756924, -0.023470182, 0.016861819, -0.010384572, 0.012515245, 0.0151441675, -0.0009383156, -0.024873149, 0.035716634, -0.0064838016, 0.016324233, 0.01401655, -0.0016602859, 0.008273567, -0.017032271, -0.0033697411, 0.0022339285, -0.012613583, 0.02010044, 0.007657311, -0.0031910925, 0.011735091, 0.0077687614, -0.0018667973, 0.015681753, -0.0010636975, 0.017399402, -0.018487684, 0.028793586, -0.028950928, 0.017333845, -0.006542805, 0.01147941, 0.03920438, 0.00026776822, -0.01945796, -0.0090471655, -0.01147941, 0.013288843, 0.015327733, -0.012259564, 0.029868757, 0.0046153655, -0.01165642, 0.002519111, 0.00043596845, 0.03975508, 0.0050218324, -0.013282287, -0.006001942, 0.036267333, 0.014855707, -0.011446631, -0.0025928651, -0.018461462, -0.0035860864, -0.020651137, 0.0052906247, -0.012279232, -0.010535358, 0.0042679016, -0.039781302, 0.01709783, 0.020493796, 0.006228121, 0.036346003, 0.037788305, -0.012220229, 0.009368405, -0.0041269497, 0.026210556, 0.008529248, -0.015825983, 0.00022003296, -0.022867037, -0.0015742395, -0.0030206386, 0.01701916, 0.03312049, 0.009656865, 0.037211385, 0.011715423, 0.03060302, 0.025436956, -0.026984153, -0.0058577117, 0.0135183, -0.012325124, 0.00022720349, -0.0037467065, -0.0043564066, 0.005765929, -0.004975941, -0.004802209, 0.0008735759, 0.0048415447, 0.02488626, -0.015458852, 0.01680937, -0.011853098, -0.020992046, -0.004556362, 0.017582968, 0.008214564, -0.006772262, -0.040515564, 0.0141870035, -0.0026977598, 0.0012898766, -0.020742921, -0.02782331, 0.018527022, -0.004798931, 0.011813762, 0.0102993455, 0.018579468, 0.02023156, 0.0022585134, 0.014724589, -0.029685192, 0.0020601968, -0.0055758073, 0.006231399, 0.0069951634, -0.0058675455, -0.0157342, -0.02573853, 0.0036516457, 0.013065942, 0.01538018, -0.018540133, 0.005451245, -0.017386291, -0.01966775, -0.007447521, -0.00062158285, -0.0013701866, -0.005192286, -0.011086055, 0.0011694117, -0.021634525, -0.009368405, 0.02774464, 0.0078408765, 0.026144996, -0.021936098, -0.009506079, -0.0013398655, 0.08349615, 0.012167782, -0.0063526835, 0.009020941, -0.0045137485, -0.013754313, -0.0155112995, 0.01054847, -0.012725035, -0.007794985, 0.0069754953, -0.009833875, 0.013819872, 0.008135892, -0.0004156861, -0.0110794995, 0.01140074, 0.009250399, 0.03812921, -0.012489022, -0.00082727475, 0.0019241616, -0.016652029, 0.003930272, 0.0013857569, -0.011499078, 0.027797086, 0.015563746, 0.018225448, -0.004871046, 0.0038188214, 0.019497296, -0.001970053, -0.011558081, -0.0151441675, -0.013439629, -0.010286233, 0.0033156548, 0.012305455, -0.021726308, 0.029527849, 0.018553244, 0.014265675, -0.020323342, -0.002442079, 0.010535358, -0.0060773348, 0.010482911, -0.007342627, 0.0026174497, 0.023811089, 0.005415187, 0.0012267759, -0.011571193, 0.009243842, 0.01987754, -0.0024617468, -0.001981526, 0.0021536187, -0.010319013, 0.0059724404, -0.01674381, 0.0024174943, -0.015340845, -0.023325952, -0.0045366944, 0.00041671045, -0.001494749, -0.0036418117, 0.0026272836, -0.002351935, -0.020047994, -0.022040993, 0.0075917514, 0.028059324, 0.016035773, 0.009427409, -0.0055102482, 0.007073834, 0.03854879, -0.010279678, 0.0005187369, -0.018540133, -0.0066411435, -0.012226785, 0.010423908, 0.021555854, -0.024191333, -0.0038712688, -0.009919102, 0.023876648, 0.0005437313, 0.00040953993, -0.017386291, -0.0010825457, -0.0147901485, 0.018343454, 0.0015988242, -0.015603082, -0.006480524, 0.0036155882, -0.02194921, -0.014436129, -0.0067525944, 0.010509134, 0.023627523, 0.021005157, 0.01701916, -0.018291008, -0.00021655012, 0.0280331, -0.011131947, 0.0017455128, -0.008358794, 0.003553307, 0.014606583, -0.017294507, 0.02631545, 0.013282287, -0.024322452, 0.004825155, -0.03081281, 0.019654639, -0.0025076382, -0.0049103815, 0.0016176725, 0.014475464, -0.01509172, -0.0011612168, 0.0014644279, 0.00095552485, 0.016979825, -0.008883268, -0.01981198, -0.042797025, -0.025017379, 0.006205175, -0.007709758, -0.018028772, -0.0055102482, -0.008070334, 0.020821592, 0.022355676, -0.0020749476, -0.026158107, -0.01694049, 0.0057233153, 0.0072967354, -0.0009669977, 0.011558081, -0.0033599073, -0.00025568076, -0.025358286, 0.02152963, 0.007349183, -0.0059658843, -0.02517472, -0.021280507, 0.012600472, 0.01083693, 0.030209664, -0.004726816, -0.0023863537, 0.0031271724, -0.010246898, 0.0024240501, -0.017438738, -0.006539527, -0.03503482, 0.0058577117, 0.013885432, 0.0019503853, 0.02181809, -0.002196232, 0.00865381, 0.012534913, -0.0019110497, -0.007001719, -0.023221057, -0.030786585, 0.001334129, -0.0037991537, -0.023181722, -0.011131947, 0.008942271, -0.011826874, 0.03262224, 0.016271785, 0.0043400167, -0.0059167147, 0.023352176, 0.0022716252, 0.028059324, -0.008142449, -0.005431577, -0.016638916, -0.022119664, -0.0060150535, 0.014488576, 0.00929629, 0.021568965, 0.005431577, -0.00045768495, -0.022919485, 0.023207946, 0.018985935, 0.028426455, 0.003471358, -0.007185285, -0.01952352, -0.012200561, -0.026577687, -0.026525239, -0.03553307, 0.010305901, 0.0018241839, -0.025895871, 0.026053213, -0.0011522024, -0.019575967, 0.012856153, -0.00054004363, 0.01616689, -0.004874324, 0.01151219, -0.0011661337, 0.0005957689, -0.012253009, -0.0034779138, -0.014357458, -0.010686144, 0.02645968, 0.010994272, -0.0019995547, 0.01687493, 0.02045446, 0.013583859, 0.033146717, -0.011984216, -0.013649419, 0.017530521, 0.012200561, -0.022853926, 0.008083445, -0.03411699, 0.016927376, -0.010502579, -0.020651137, -0.0024928874, -0.012397239, -0.01902527, -0.003930272, -0.042036537, 0.009630642, 0.011649864, -0.0059724404, 0.0019389124, -0.01104672, -0.017110942, -0.012541469, -0.0035762526, 0.016363569, -0.004231844, 0.014173892, -0.009217619, -0.000510542, -0.02782331, -0.002591226, -2.306095e-05, 0.02517472, -0.0025076382, -0.006287124, -0.014436129, 0.021306729, 0.03747362, -0.010201006, -0.0076638665, 0.006392019, -0.007309847, -0.0009768317, 0.025397621, 0.004871046, -0.016350456, 0.0070935017, -0.01937929, 0.009027497, -0.020939598, -0.0049136598, -0.012115334, -0.0050710016, -0.000452768, -0.008673478, 0.0076769786, -0.0034910257, 0.008489912, -0.018120553, 0.03288448, 0.0101813385, -0.008424353, 0.020978933, -0.011984216, 0.01544574, 0.00093995454, 0.013793649, 0.004097448, -0.018802369, 0.03524461, -0.013039718, -0.029029598, -0.009519191, 0.0076966463, -0.0056282547, -0.0038417673, -0.0020913375, 0.011145058, 0.0014095221, 0.020611802, -0.01652091, -0.015891543, 0.003845045, -0.028767362, -0.0017373179, 0.010345236, -0.016861819, -0.005739705, 0.008817708, 0.0020192224, 0.011610528, -0.045366943, -0.014816372, -0.015616193, 0.017936988, -0.006244511, -0.01387232, -0.017556746, 0.0046415892, -0.000989124, 0.009191396, -0.009381517, 0.010909045, -0.008286679, -0.0064543, -0.01422634, 0.021647638, -0.01859258, 0.006772262, -0.021228058, -0.009964993, -0.010771371, 0.010856598, -0.0057134815, -0.01658647, 0.0027207055, -0.039650183, -0.021214947, -0.01265292, -0.021123163, -0.002052002, 0.0089160465, 0.015957102, 0.0314684, -0.007939215, 0.0011284371, 0.021398513, 0.008306347, 0.0102993455, -0.036949147, -0.013282287, -0.000113601745, -0.018186113, 0.016429128, 0.011787538, 0.0015094999, -0.009079944, 0.002910827, -0.009984661, 0.008470245, -0.0147901485, -0.014593471, 0.0024978044, 0.018225448, 0.018212337, 0.031704415, 0.013354402, -0.013623195, -0.012790593, -0.006188785, 0.021700084, 0.025292726, -0.010305901, 0.0034057987, -0.0008752149, -0.013164281, 0.011767871, -0.007388518, 0.010397684, 0.004199065, 0.006451022, 0.007834321, -0.010941825, 0.00086128357, 0.015209727, -0.0070935017, -0.0062609003, -7.21535e-06, 0.0002074333, -0.03288448, -0.0057888743, 0.01416078, -0.007853989, -0.0061035585, -0.026197443, 0.0023388234, -0.04083025, 0.0055430275, -0.021306729, -0.002192954, -0.024374899, 0.016035773, 0.015655529, -0.031520847, -0.006451022, -0.026669469, -0.002045446, 0.0030058878, -0.010817262, -0.016153779, -0.020847816, -0.017045384, 0.002286376, 0.011289288, -0.025279615, -0.012836485, -0.0028944372, 0.01644224, 0.02874114, 0.21398512, 0.01408211, -0.017320732, 0.03503482, -0.009152059, 0.03917816, 0.023719307, -0.007493413, 0.022001656, 0.024309339, -0.011944881, 0.0053102924, 0.0023125997, -0.0033189328, -0.00028456777, -0.004330183, -0.032360006, 0.0010284594, -0.011630196, -0.0061789514, 0.0024928874, -0.007152505, 0.013623195, -0.006244511, 0.022683471, 0.010207563, -0.009152059, 0.0021011713, 0.03262224, 0.018710587, -0.011957992, -0.006677201, 0.0072967354, -0.008142449, -0.0036319778, -0.0020175835, -0.011145058, 0.0014586914, 0.007939215, 0.026538352, 0.011885877, 0.008811153, -0.024125773, -0.018330343, -0.00039233064, 0.028583797, -0.007657311, -0.0089160465, 0.022355676, 0.010863154, -0.026617022, -0.008522692, 0.033225387, 0.017674752, -0.001057961, 0.032648467, 0.019995546, -0.00801133, 0.016901154, -0.006700147, -0.008614475, 0.020205336, -0.019156389, -0.0072246203, 0.010607474, -0.0027272613, -0.007650755, 0.015642418, 0.009643754, -0.014960602, 0.023207946, 0.01276437, 0.010876266, 0.0044645793, -0.017609192, -0.018002547, 0.023719307, 0.012613583, 0.014895042, -0.010522246, -0.012384127, -0.0036778692, 0.0014324678, 0.023561966, -0.010142003, -0.02252613, -0.008548915, 0.013465853, 0.036922924, 0.0043498506, -0.0018667973, -0.009846987, 0.0146721415, 0.0069230483, 0.0009784705, 0.024204444, -0.014580359, 0.018041883, -0.035506845, 0.0062740124, -0.036660686, -0.024440458, 0.022198334, -0.009669977, -0.007408186, 0.008857043, -0.0030517792, 0.018081218, 0.037945647, -0.0035991983, 0.015498187, -0.011669531, 0.008017886, -0.0011972743, 0.015760424, -0.013623195, 0.011453186, -0.01558997, -0.018238561, -0.0104173515, 0.0043826303, -0.01766164, -0.012357903, 0.00740163, -0.0010931991, -0.0038024317, -0.015563746, 0.01679626, 8.609763e-05, -0.030550571, 0.032727137, -0.000109709166, 0.025895871, 0.0047464836, -0.005457801, 0.0040515563, -0.01722895, -0.00037286777, 0.0039171604, -0.008450577, -0.0015439184, -0.01645535, 0.0038089876, -0.0066444217, -0.0030501403, 0.0067394823, 0.018382791, -0.013321623, -0.014514799, -0.026787477, -0.008765261, -0.006080613, -0.0072246203, -0.013341291, 0.02331284, -0.02066425, -0.01981198, -0.0031058656, 0.0027338173, 0.02294571, -0.017818982, 0.008771816, 0.00028907496, -0.013741202, -0.0050742794, 0.0058708233, -0.16971958, 0.013688754, 0.018173002, -0.017753422, -0.0055364715, 0.004726816, 0.013819872, 0.02524028, -0.0084440205, 0.031232387, -0.0028616576, 0.013380626, -0.059003253, -0.00955197, 0.005274235, 0.015078609, -0.014750813, -0.0072705117, 0.024348674, 0.008293235, -0.0040450008, -0.024060214, 0.012738146, -0.006523137, -0.00075966684, 0.004952995, -0.012790593, 0.029632743, -0.0025650025, -0.0069623836, -0.0029583573, 0.00772287, 0.00048554759, 0.025279615, 0.022054104, -0.0006715717, -0.000104228835, 0.00613306, 0.0019864428, -0.0045596403, 0.0005298, 0.018081218, -0.0009112724, 0.0029468846, -0.017543633, 0.02031023, 0.032936927, 0.010325569, -0.007906436, -0.005913437, 0.020913374, -0.041276053, -0.010909045, -0.004972663, 0.0139509905, 0.009525747, 0.014895042, 0.016245563, -0.008280123, 0.015550635, 0.001181704, -0.040568013, -0.0026993987, 0.0071918406, -0.005113615, -0.011603973, 0.012161226, 0.0032074822, -0.023194833, 0.0129348235, -0.019287508, -0.0138329845, 0.012849597, -0.020205336, 0.0077556497, 0.0049136598, -0.004441634, 0.013544524, -0.004012221, -0.019864427, 0.0033336836, 0.029868757, 0.0016996214, -0.0023486572, -0.013714978, 0.022277005, -0.00740163, 0.016193114, -0.0122136725, -0.027875759, 0.027193943, -0.04418688, 0.004408854, -0.030078545, 0.0018717143, 0.017268285, -0.00045317775, -0.011984216, -0.0017569857, -0.0045301383, 0.00441541, -0.0023027658, -0.008896379, 0.021398513, 0.029763862, 0.024007767, 4.5456065e-05, 0.0069492715, 0.022919485, 0.004887436, -0.020257782, 0.020769143, 0.006074057, 0.020874038, -0.00045399723, 0.0012382488, 0.004562918, -0.022840815, 0.008214564, 0.01766164, 0.0280331, 0.0013882153, -0.005120171, -0.0032566516, -0.005674146, -0.018238561, -0.09676533, -0.023404622, 0.012528357, 0.018330343, 0.0030435843, 0.011649864, 0.0040318887, 0.027141495, -0.014711477, 0.037001595, -0.0071328375, -0.013354402, -0.014763924, 0.0032337059, 0.009433964, -0.0083850175, 0.0030337505, -0.02230323, -0.030340783, 0.009866655, -0.016625805, -0.0046973145, 0.0007965439, -0.010135448, -0.02495182, -0.015747312, -0.029134493, 0.014108333, 0.0056315325, -0.01151219, 0.025646746, -0.014816372, 0.011361403, 0.00050890306, -0.005831488, 0.006831265, -0.0124496855, 0.0025502515, 0.010423908, -0.037001595, -0.002196232, 0.0006191244, 0.008457133, -0.0056512, -0.00035156103, -0.0077032023, -0.01530151, 0.00033496637, -0.0054774685, -0.027508626, 0.0009293012, 0.030130994, -0.024401123, -0.0031271724, 0.03697537, -0.020834703, 0.015799759, 0.022919485, -0.018028772, 0.011630196, 0.014829484, 0.008817708, -0.0011358126, 0.03524461, -0.004628477, -0.016061995, -0.032648467, -0.014606583, 0.014842596, -0.0304719, -0.013144613, 0.0077490937, -0.021293618, 0.012947936, -0.019995546, -0.00047981116, -0.006805042, -0.016507799, 0.003690981, -0.004090892, -0.028216666, -0.020638026, 0.00029665523, -0.002751846, 0.003138645, 0.02109694, -0.0075327484, -0.015498187, 0.03841767, -0.015367069, 0.013714978, 0.028137995, 0.0067394823, -0.008693146, -0.012318567, 0.018395903, 0.011879321, 0.012489022, 0.009309402, -0.017740311, -0.020113552, -0.009506079, -0.047779523, 0.019012159, 0.0016766757, -0.022342565, -0.0028567407, 0.013478965, -0.013321623, 0.008627586, 0.0028551018, -0.00173404, -0.015891543, -0.0014808177, -0.01279715, -0.0035762526, -0.019326843, -0.00068878103, 0.009007829, -0.0042810137, 0.033566292, 0.004572752, 0.007309847, 0.0036778692, 0.007939215, 9.946555e-05, -0.02424378, 0.006519859, -0.01966775, -0.011033608, -0.026197443, -0.011630196, 0.006398575, -0.020493796, 0.0020044716, 0.047386166, -0.01437057, -0.027508626, 0.004595698, 0.032438677, 0.004015499, -0.013623195, -0.032779586, -0.0314684, 0.027429955, -0.012495577, -0.016783146, 0.013269176, -0.011636753, -0.0054053534, 0.003304182, -0.0020913375, 0.01322984, 0.016625805, 0.0013218367, -0.0075917514, -0.0026617022, -0.012233341, 0.038942147, 0.008339126, 0.0068968246, -0.020729808, 0.014134556, -0.0036516457, 0.0034844698, 0.02617122, 0.00940774, 0.0072246203, -0.0068247095, -0.015550635, 0.0047530397, -0.0017160112, -0.01844835, -0.0057757627, 0.031048821, 0.018356567, 0.019287508, 0.0027223444, -0.012397239, 0.0018815481, -0.0098273195, 0.017438738, 0.018068107, -0.008666922, -0.001494749, 0.016638916, 0.024912484, 0.046756797, -0.03739495, -0.006690313, 0.004425244, 0.0006056028, -0.017530521, 0.0013013495, -0.0014488576, -0.0016766757, -0.0017209281, 5.5417982e-05, -0.010201006, 0.008712813, 0.010135448, 0.032071546, 0.02194921, -0.008358794, -0.0035631408, -0.028846033, -0.01680937, 0.011289288, -0.008607918, -0.015563746, -0.015485075, 0.007886767, 0.0025699195, -0.012849597, 0.015576858, 0.016927376, -0.0031681468, -0.007244288, -0.014829484, -0.019890651, -0.020428237, 0.0020126665, 0.0036418117, 0.005733149, 0.0061265044, -0.018487684, 0.03154707, 0.013701866, 0.029213166, -0.031625744, 0.009034053, 0.010895934, 0.004189231, -0.0020683918, -0.015563746, -0.020428237, -0.017963212, -0.016258674, -0.019929986, 0.024178222, 0.0032419008, 0.04625855, -0.013203616, -0.03283203, 0.03254357, -0.01005022, 0.008037554, 0.0043793526, 0.0032107602, -0.016717589, -0.00631007, 0.010496023, 0.0045137485, 0.02503049, -0.00944052, -0.031651966, -0.009742092, -0.024846924, 0.010732036, -0.026499016, -0.014921267, 0.026407233, 0.005425021, 0.007001719, 0.0037860419, -0.026289226, -0.010135448, 0.012325124, 0.0027911814, -0.01244313, -0.013557636, 0.01258736, -0.014645918, -0.02167386, -0.007041055, 0.022827702, -0.024545353, -0.01679626, -0.020061105, 0.01380676, 0.0113155125, -0.002673175, 0.027351284, -0.022709696, -0.031153716, -0.008037554, -0.009230731, -0.012725035, 0.014475464, -0.014632806] + "embedding": [0.016153779, -0.015616193, -0.008981606, -0.01708472, 0.0021126443, 0.014409905, -0.021975433, -0.0053955195, 0.0075065247, -0.018435238, 0.023837313, 0.0075327484, -0.01509172, 0.016783146, -0.026525239, -0.007637643, 0.03511349, -0.005415187, 0.02217211, -0.015353957, -0.03875858, 0.010004329, -0.01960219, 0.010850042, -0.0075327484, -0.015694864, 0.008286679, -0.024256893, 0.016822482, -0.0005588919, 0.012803705, -0.021372288, 0.012646363, -0.03340895, -0.029370507, 0.0135969715, 0.007886767, -0.004871046, 0.012253009, -0.027429955, 0.017700976, 0.0026518684, -0.005215232, -0.017910764, -0.0037335947, 0.022788366, 0.025371397, 0.00534635, -0.011990772, 0.020008657, 0.00051709794, 0.023640636, -0.011813762, -0.022631025, 0.009958438, -0.03304182, -0.0017979601, 0.013570747, -0.025476292, -0.02223767, -0.005359462, -0.0122989, -0.0019290785, -0.007781873, 0.004313793, -0.0018684362, -0.0038974925, 0.010895934, -0.0038089876, -0.0028846033, 0.030655466, 0.025135385, -0.001303808, 0.019562855, 0.0118006505, 0.0113024, -0.0063297376, 0.0026944818, 0.0058609894, -0.009348737, -0.00017905848, -0.023588188, -0.02517472, -0.0048612123, 0.014986826, 0.0101223355, -0.004176119, 0.0034975817, -0.025830312, -0.015026161, -0.0028682137, 0.02795443, 0.030288335, 0.0030566962, -0.004385908, 0.015485075, 0.0151441675, 0.026656358, 0.020978933, -0.022539241, 0.01380676, 0.019536631, -0.035637964, -0.0039991094, -0.029318059, -0.024322452, 0.010279678, 0.0008330112, 0.037709635, -0.02774464, -0.027639745, 0.021359177, 0.021359177, -0.020716697, -0.018697474, -0.023994654, -0.0035696966, -0.021765644, -0.029921204, -0.008339126, -0.00088422926, 0.040332, 0.015065497, -0.01401655, 0.029370507, 0.011027052, -0.007834321, -0.020978933, -0.010909045, 0.0049497173, 0.012292344, 0.018238561, 0.022867037, 0.016835595, -0.0058675455, -0.007237732, -0.004654701, 0.026931707, -0.0075130807, -0.030943926, 0.0189466, 0.028846033, -0.0030058878, -0.0044449116, -0.008227675, 0.0359002, 0.028347785, -0.0035238052, -0.0015299871, 0.0017405959, 0.0071918406, -0.03367119, 0.018776145, -0.00021327217, 0.011426963, -0.0030566962, -9.7442435e-06, 0.0013783815, -0.03359252, -0.0033189328, -0.014567247, 0.004539972, 0.027272614, 0.010705812, 0.020402012, 0.021057604, 0.00024297867, 0.0151441675, -0.00815556, 0.010738592, 0.0012194006, 0.030734139, -0.0169536, 0.026931707, -0.007145949, 0.0134068495, 0.004330183, 0.0017110943, -0.013701866, 0.008863599, -0.014331234, -0.0058839354, 0.016324233, -0.00081703113, 0.011453186, -0.009558527, 0.008981606, -0.008837376, 0.01408211, -0.008752149, 0.021936098, 0.02246057, -0.0018553245, -0.018356567, -0.69775933, -0.03325161, 0.0027141494, -0.000667884, 0.007991662, 0.021608302, 0.0042088986, 0.008850488, -0.0031075045, -0.015668642, -0.0011112279, 0.009912546, 0.004487525, -0.010017441, 0.008745593, -0.032936927, -0.011767871, 0.02761352, -0.0061527276, -0.009237287, -0.0015480159, -0.0005322585, -0.02695793, -0.00213559, 0.031337284, 0.013977215, 0.02474203, -0.0036155882, -0.00033496637, 0.016337344, -0.0065067476, -0.0032714026, -0.0075065247, -0.01608822, 0.040961366, 0.0091651715, -0.019038383, 0.008430909, 0.0034844698, 0.015839094, -0.009702757, -0.0044481894, -0.0049136598, -0.02244746, -0.006942716, -0.0015578497, 0.009853543, -0.00850958, 0.037735857, -0.00013111833, 0.023365287, -0.014934379, 0.0012964326, -0.0038745468, 0.024191333, -0.0023076828, 0.016652029, -0.0015119583, 0.006129782, -0.0023896317, -0.012200561, 0.0026420346, -0.018999048, -0.017176501, -0.012233341, 0.007585196, -0.03805054, -0.018723698, -0.0053004585, -0.0030353894, 0.00883082, 0.013282287, -0.015131056, 0.02811177, 0.014252563, 0.0016799537, 0.01652091, -0.019038383, 0.026774364, 0.013131501, 0.01694049, -0.006303514, -0.021188723, -0.004199065, 0.020179112, -0.0113024, -0.03275336, -0.02881981, 0.01644224, -0.010791039, 0.04413443, 0.0019176056, -0.004628477, -0.009289734, -0.002758402, 0.025751641, -0.009866655, -0.00023293991, 0.013059386, -0.012089111, 0.008430909, -0.026905483, -0.008699701, 0.0051562283, 0.03382853, 0.010941825, -0.029108271, 0.036031317, 0.011276177, -0.018972823, 0.01873681, -0.019051494, -0.02295882, -0.0009342181, 0.015537523, -0.022985045, 0.04568163, 0.017714087, 0.0072573996, -0.0055102482, -0.0036549235, -0.0011267982, -0.0064215204, -0.024873149, 0.007932659, -0.012987271, -0.0020356122, -0.0258172, -0.019077718, -0.004802209, 0.0063362936, -0.0028796864, 0.009184839, 0.006480524, -0.003220594, -0.003622144, 0.007926104, -0.017425627, 0.031337284, -0.030209664, -0.025843425, -0.012954491, -0.021136276, -0.004975941, -0.00757864, -0.018081218, -0.031153716, -0.0062248427, -0.029082047, 0.017989436, -0.03432678, -0.019969322, -0.03217644, 0.019274395, -0.00030382577, -0.006536249, -0.024178222, 0.0030353894, -0.009466744, 0.0314684, 0.0026469515, 0.00944052, -0.009899435, -0.004884158, -0.0017094553, -0.03784075, -0.000945691, 0.032858256, -0.0035729746, -0.03482503, -0.001888104, -0.0027125105, 0.010037108, -0.0065559167, -0.024584688, -0.015668642, -0.016756924, -0.023470182, 0.016861819, -0.010384572, 0.012515245, 0.0151441675, -0.0009383156, -0.024873149, 0.035716634, -0.0064838016, 0.016324233, 0.01401655, -0.0016602859, 0.008273567, -0.017032271, -0.0033697411, 0.0022339285, -0.012613583, 0.02010044, 0.007657311, -0.0031910925, 0.011735091, 0.0077687614, -0.0018667973, 0.015681753, -0.0010636975, 0.017399402, -0.018487684, 0.028793586, -0.028950928, 0.017333845, -0.006542805, 0.01147941, 0.03920438, 0.00026776822, -0.01945796, -0.0090471655, -0.01147941, 0.013288843, 0.015327733, -0.012259564, 0.029868757, 0.0046153655, -0.01165642, 0.002519111, 0.00043596845, 0.03975508, 0.0050218324, -0.013282287, -0.006001942, 0.036267333, 0.014855707, -0.011446631, -0.0025928651, -0.018461462, -0.0035860864, -0.020651137, 0.0052906247, -0.012279232, -0.010535358, 0.0042679016, -0.039781302, 0.01709783, 0.020493796, 0.006228121, 0.036346003, 0.037788305, -0.012220229, 0.009368405, -0.0041269497, 0.026210556, 0.008529248, -0.015825983, 0.00022003296, -0.022867037, -0.0015742395, -0.0030206386, 0.01701916, 0.03312049, 0.009656865, 0.037211385, 0.011715423, 0.03060302, 0.025436956, -0.026984153, -0.0058577117, 0.0135183, -0.012325124, 0.00022720349, -0.0037467065, -0.0043564066, 0.005765929, -0.004975941, -0.004802209, 0.0008735759, 0.0048415447, 0.02488626, -0.015458852, 0.01680937, -0.011853098, -0.020992046, -0.004556362, 0.017582968, 0.008214564, -0.006772262, -0.040515564, 0.0141870035, -0.0026977598, 0.0012898766, -0.020742921, -0.02782331, 0.018527022, -0.004798931, 0.011813762, 0.0102993455, 0.018579468, 0.02023156, 0.0022585134, 0.014724589, -0.029685192, 0.0020601968, -0.0055758073, 0.006231399, 0.0069951634, -0.0058675455, -0.0157342, -0.02573853, 0.0036516457, 0.013065942, 0.01538018, -0.018540133, 0.005451245, -0.017386291, -0.01966775, -0.007447521, -0.00062158285, -0.0013701866, -0.005192286, -0.011086055, 0.0011694117, -0.021634525, -0.009368405, 0.02774464, 0.0078408765, 0.026144996, -0.021936098, -0.009506079, -0.0013398655, 0.08349615, 0.012167782, -0.0063526835, 0.009020941, -0.0045137485, -0.013754313, -0.0155112995, 0.01054847, -0.012725035, -0.007794985, 0.0069754953, -0.009833875, 0.013819872, 0.008135892, -0.0004156861, -0.0110794995, 0.01140074, 0.009250399, 0.03812921, -0.012489022, -0.00082727475, 0.0019241616, -0.016652029, 0.003930272, 0.0013857569, -0.011499078, 0.027797086, 0.015563746, 0.018225448, -0.004871046, 0.0038188214, 0.019497296, -0.001970053, -0.011558081, -0.0151441675, -0.013439629, -0.010286233, 0.0033156548, 0.012305455, -0.021726308, 0.029527849, 0.018553244, 0.014265675, -0.020323342, -0.002442079, 0.010535358, -0.0060773348, 0.010482911, -0.007342627, 0.0026174497, 0.023811089, 0.005415187, 0.0012267759, -0.011571193, 0.009243842, 0.01987754, -0.0024617468, -0.001981526, 0.0021536187, -0.010319013, 0.0059724404, -0.01674381, 0.0024174943, -0.015340845, -0.023325952, -0.0045366944, 0.00041671045, -0.001494749, -0.0036418117, 0.0026272836, -0.002351935, -0.020047994, -0.022040993, 0.0075917514, 0.028059324, 0.016035773, 0.009427409, -0.0055102482, 0.007073834, 0.03854879, -0.010279678, 0.0005187369, -0.018540133, -0.0066411435, -0.012226785, 0.010423908, 0.021555854, -0.024191333, -0.0038712688, -0.009919102, 0.023876648, 0.0005437313, 0.00040953993, -0.017386291, -0.0010825457, -0.0147901485, 0.018343454, 0.0015988242, -0.015603082, -0.006480524, 0.0036155882, -0.02194921, -0.014436129, -0.0067525944, 0.010509134, 0.023627523, 0.021005157, 0.01701916, -0.018291008, -0.00021655012, 0.0280331, -0.011131947, 0.0017455128, -0.008358794, 0.003553307, 0.014606583, -0.017294507, 0.02631545, 0.013282287, -0.024322452, 0.004825155, -0.03081281, 0.019654639, -0.0025076382, -0.0049103815, 0.0016176725, 0.014475464, -0.01509172, -0.0011612168, 0.0014644279, 0.00095552485, 0.016979825, -0.008883268, -0.01981198, -0.042797025, -0.025017379, 0.006205175, -0.007709758, -0.018028772, -0.0055102482, -0.008070334, 0.020821592, 0.022355676, -0.0020749476, -0.026158107, -0.01694049, 0.0057233153, 0.0072967354, -0.0009669977, 0.011558081, -0.0033599073, -0.00025568076, -0.025358286, 0.02152963, 0.007349183, -0.0059658843, -0.02517472, -0.021280507, 0.012600472, 0.01083693, 0.030209664, -0.004726816, -0.0023863537, 0.0031271724, -0.010246898, 0.0024240501, -0.017438738, -0.006539527, -0.03503482, 0.0058577117, 0.013885432, 0.0019503853, 0.02181809, -0.002196232, 0.00865381, 0.012534913, -0.0019110497, -0.007001719, -0.023221057, -0.030786585, 0.001334129, -0.0037991537, -0.023181722, -0.011131947, 0.008942271, -0.011826874, 0.03262224, 0.016271785, 0.0043400167, -0.0059167147, 0.023352176, 0.0022716252, 0.028059324, -0.008142449, -0.005431577, -0.016638916, -0.022119664, -0.0060150535, 0.014488576, 0.00929629, 0.021568965, 0.005431577, -0.00045768495, -0.022919485, 0.023207946, 0.018985935, 0.028426455, 0.003471358, -0.007185285, -0.01952352, -0.012200561, -0.026577687, -0.026525239, -0.03553307, 0.010305901, 0.0018241839, -0.025895871, 0.026053213, -0.0011522024, -0.019575967, 0.012856153, -0.00054004363, 0.01616689, -0.004874324, 0.01151219, -0.0011661337, 0.0005957689, -0.012253009, -0.0034779138, -0.014357458, -0.010686144, 0.02645968, 0.010994272, -0.0019995547, 0.01687493, 0.02045446, 0.013583859, 0.033146717, -0.011984216, -0.013649419, 0.017530521, 0.012200561, -0.022853926, 0.008083445, -0.03411699, 0.016927376, -0.010502579, -0.020651137, -0.0024928874, -0.012397239, -0.01902527, -0.003930272, -0.042036537, 0.009630642, 0.011649864, -0.0059724404, 0.0019389124, -0.01104672, -0.017110942, -0.012541469, -0.0035762526, 0.016363569, -0.004231844, 0.014173892, -0.009217619, -0.000510542, -0.02782331, -0.002591226, -2.306095e-05, 0.02517472, -0.0025076382, -0.006287124, -0.014436129, 0.021306729, 0.03747362, -0.010201006, -0.0076638665, 0.006392019, -0.007309847, -0.0009768317, 0.025397621, 0.004871046, -0.016350456, 0.0070935017, -0.01937929, 0.009027497, -0.020939598, -0.0049136598, -0.012115334, -0.0050710016, -0.000452768, -0.008673478, 0.0076769786, -0.0034910257, 0.008489912, -0.018120553, 0.03288448, 0.0101813385, -0.008424353, 0.020978933, -0.011984216, 0.01544574, 0.00093995454, 0.013793649, 0.004097448, -0.018802369, 0.03524461, -0.013039718, -0.029029598, -0.009519191, 0.0076966463, -0.0056282547, -0.0038417673, -0.0020913375, 0.011145058, 0.0014095221, 0.020611802, -0.01652091, -0.015891543, 0.003845045, -0.028767362, -0.0017373179, 0.010345236, -0.016861819, -0.005739705, 0.008817708, 0.0020192224, 0.011610528, -0.045366943, -0.014816372, -0.015616193, 0.017936988, -0.006244511, -0.01387232, -0.017556746, 0.0046415892, -0.000989124, 0.009191396, -0.009381517, 0.010909045, -0.008286679, -0.0064543, -0.01422634, 0.021647638, -0.01859258, 0.006772262, -0.021228058, -0.009964993, -0.010771371, 0.010856598, -0.0057134815, -0.01658647, 0.0027207055, -0.039650183, -0.021214947, -0.01265292, -0.021123163, -0.002052002, 0.0089160465, 0.015957102, 0.0314684, -0.007939215, 0.0011284371, 0.021398513, 0.008306347, 0.0102993455, -0.036949147, -0.013282287, -0.000113601745, -0.018186113, 0.016429128, 0.011787538, 0.0015094999, -0.009079944, 0.002910827, -0.009984661, 0.008470245, -0.0147901485, -0.014593471, 0.0024978044, 0.018225448, 0.018212337, 0.031704415, 0.013354402, -0.013623195, -0.012790593, -0.006188785, 0.021700084, 0.025292726, -0.010305901, 0.0034057987, -0.0008752149, -0.013164281, 0.011767871, -0.007388518, 0.010397684, 0.004199065, 0.006451022, 0.007834321, -0.010941825, 0.00086128357, 0.015209727, -0.0070935017, -0.0062609003, -7.21535e-06, 0.0002074333, -0.03288448, -0.0057888743, 0.01416078, -0.007853989, -0.0061035585, -0.026197443, 0.0023388234, -0.04083025, 0.0055430275, -0.021306729, -0.002192954, -0.024374899, 0.016035773, 0.015655529, -0.031520847, -0.006451022, -0.026669469, -0.002045446, 0.0030058878, -0.010817262, -0.016153779, -0.020847816, -0.017045384, 0.002286376, 0.011289288, -0.025279615, -0.012836485, -0.0028944372, 0.01644224, 0.02874114, 0.21398512, 0.01408211, -0.017320732, 0.03503482, -0.009152059, 0.03917816, 0.023719307, -0.007493413, 0.022001656, 0.024309339, -0.011944881, 0.0053102924, 0.0023125997, -0.0033189328, -0.00028456777, -0.004330183, -0.032360006, 0.0010284594, -0.011630196, -0.0061789514, 0.0024928874, -0.007152505, 0.013623195, -0.006244511, 0.022683471, 0.010207563, -0.009152059, 0.0021011713, 0.03262224, 0.018710587, -0.011957992, -0.006677201, 0.0072967354, -0.008142449, -0.0036319778, -0.0020175835, -0.011145058, 0.0014586914, 0.007939215, 0.026538352, 0.011885877, 0.008811153, -0.024125773, -0.018330343, -0.00039233064, 0.028583797, -0.007657311, -0.0089160465, 0.022355676, 0.010863154, -0.026617022, -0.008522692, 0.033225387, 0.017674752, -0.001057961, 0.032648467, 0.019995546, -0.00801133, 0.016901154, -0.006700147, -0.008614475, 0.020205336, -0.019156389, -0.0072246203, 0.010607474, -0.0027272613, -0.007650755, 0.015642418, 0.009643754, -0.014960602, 0.023207946, 0.01276437, 0.010876266, 0.0044645793, -0.017609192, -0.018002547, 0.023719307, 0.012613583, 0.014895042, -0.010522246, -0.012384127, -0.0036778692, 0.0014324678, 0.023561966, -0.010142003, -0.02252613, -0.008548915, 0.013465853, 0.036922924, 0.0043498506, -0.0018667973, -0.009846987, 0.0146721415, 0.0069230483, 0.0009784705, 0.024204444, -0.014580359, 0.018041883, -0.035506845, 0.0062740124, -0.036660686, -0.024440458, 0.022198334, -0.009669977, -0.007408186, 0.008857043, -0.0030517792, 0.018081218, 0.037945647, -0.0035991983, 0.015498187, -0.011669531, 0.008017886, -0.0011972743, 0.015760424, -0.013623195, 0.011453186, -0.01558997, -0.018238561, -0.0104173515, 0.0043826303, -0.01766164, -0.012357903, 0.00740163, -0.0010931991, -0.0038024317, -0.015563746, 0.01679626, 8.609763e-05, -0.030550571, 0.032727137, -0.000109709166, 0.025895871, 0.0047464836, -0.005457801, 0.0040515563, -0.01722895, -0.00037286777, 0.0039171604, -0.008450577, -0.0015439184, -0.01645535, 0.0038089876, -0.0066444217, -0.0030501403, 0.0067394823, 0.018382791, -0.013321623, -0.014514799, -0.026787477, -0.008765261, -0.006080613, -0.0072246203, -0.013341291, 0.02331284, -0.02066425, -0.01981198, -0.0031058656, 0.0027338173, 0.02294571, -0.017818982, 0.008771816, 0.00028907496, -0.013741202, -0.0050742794, 0.0058708233, -0.16971958, 0.013688754, 0.018173002, -0.017753422, -0.0055364715, 0.004726816, 0.013819872, 0.02524028, -0.0084440205, 0.031232387, -0.0028616576, 0.013380626, -0.059003253, -0.00955197, 0.005274235, 0.015078609, -0.014750813, -0.0072705117, 0.024348674, 0.008293235, -0.0040450008, -0.024060214, 0.012738146, -0.006523137, -0.00075966684, 0.004952995, -0.012790593, 0.029632743, -0.0025650025, -0.0069623836, -0.0029583573, 0.00772287, 0.00048554759, 0.025279615, 0.022054104, -0.0006715717, -0.000104228835, 0.00613306, 0.0019864428, -0.0045596403, 0.0005298, 0.018081218, -0.0009112724, 0.0029468846, -0.017543633, 0.02031023, 0.032936927, 0.010325569, -0.007906436, -0.005913437, 0.020913374, -0.041276053, -0.010909045, -0.004972663, 0.0139509905, 0.009525747, 0.014895042, 0.016245563, -0.008280123, 0.015550635, 0.001181704, -0.040568013, -0.0026993987, 0.0071918406, -0.005113615, -0.011603973, 0.012161226, 0.0032074822, -0.023194833, 0.0129348235, -0.019287508, -0.0138329845, 0.012849597, -0.020205336, 0.0077556497, 0.0049136598, -0.004441634, 0.013544524, -0.004012221, -0.019864427, 0.0033336836, 0.029868757, 0.0016996214, -0.0023486572, -0.013714978, 0.022277005, -0.00740163, 0.016193114, -0.0122136725, -0.027875759, 0.027193943, -0.04418688, 0.004408854, -0.030078545, 0.0018717143, 0.017268285, -0.00045317775, -0.011984216, -0.0017569857, -0.0045301383, 0.00441541, -0.0023027658, -0.008896379, 0.021398513, 0.029763862, 0.024007767, 4.5456065e-05, 0.0069492715, 0.022919485, 0.004887436, -0.020257782, 0.020769143, 0.006074057, 0.020874038, -0.00045399723, 0.0012382488, 0.004562918, -0.022840815, 0.008214564, 0.01766164, 0.0280331, 0.0013882153, -0.005120171, -0.0032566516, -0.005674146, -0.018238561, -0.09676533, -0.023404622, 0.012528357, 0.018330343, 0.0030435843, 0.011649864, 0.0040318887, 0.027141495, -0.014711477, 0.037001595, -0.0071328375, -0.013354402, -0.014763924, 0.0032337059, 0.009433964, -0.0083850175, 0.0030337505, -0.02230323, -0.030340783, 0.009866655, -0.016625805, -0.0046973145, 0.0007965439, -0.010135448, -0.02495182, -0.015747312, -0.029134493, 0.014108333, 0.0056315325, -0.01151219, 0.025646746, -0.014816372, 0.011361403, 0.00050890306, -0.005831488, 0.006831265, -0.0124496855, 0.0025502515, 0.010423908, -0.037001595, -0.002196232, 0.0006191244, 0.008457133, -0.0056512, -0.00035156103, -0.0077032023, -0.01530151, 0.00033496637, -0.0054774685, -0.027508626, 0.0009293012, 0.030130994, -0.024401123, -0.0031271724, 0.03697537, -0.020834703, 0.015799759, 0.022919485, -0.018028772, 0.011630196, 0.014829484, 0.008817708, -0.0011358126, 0.03524461, -0.004628477, -0.016061995, -0.032648467, -0.014606583, 0.014842596, -0.0304719, -0.013144613, 0.0077490937, -0.021293618, 0.012947936, -0.019995546, -0.00047981116, -0.006805042, -0.016507799, 0.003690981, -0.004090892, -0.028216666, -0.020638026, 0.00029665523, -0.002751846, 0.003138645, 0.02109694, -0.0075327484, -0.015498187, 0.03841767, -0.015367069, 0.013714978, 0.028137995, 0.0067394823, -0.008693146, -0.012318567, 0.018395903, 0.011879321, 0.012489022, 0.009309402, -0.017740311, -0.020113552, -0.009506079, -0.047779523, 0.019012159, 0.0016766757, -0.022342565, -0.0028567407, 0.013478965, -0.013321623, 0.008627586, 0.0028551018, -0.00173404, -0.015891543, -0.0014808177, -0.01279715, -0.0035762526, -0.019326843, -0.00068878103, 0.009007829, -0.0042810137, 0.033566292, 0.004572752, 0.007309847, 0.0036778692, 0.007939215, 9.946555e-05, -0.02424378, 0.006519859, -0.01966775, -0.011033608, -0.026197443, -0.011630196, 0.006398575, -0.020493796, 0.0020044716, 0.047386166, -0.01437057, -0.027508626, 0.004595698, 0.032438677, 0.004015499, -0.013623195, -0.032779586, -0.0314684, 0.027429955, -0.012495577, -0.016783146, 0.013269176, -0.011636753, -0.0054053534, 0.003304182, -0.0020913375, 0.01322984, 0.016625805, 0.0013218367, -0.0075917514, -0.0026617022, -0.012233341, 0.038942147, 0.008339126, 0.0068968246, -0.020729808, 0.014134556, -0.0036516457, 0.0034844698, 0.02617122, 0.00940774, 0.0072246203, -0.0068247095, -0.015550635, 0.0047530397, -0.0017160112, -0.01844835, -0.0057757627, 0.031048821, 0.018356567, 0.019287508, 0.0027223444, -0.012397239, 0.0018815481, -0.0098273195, 0.017438738, 0.018068107, -0.008666922, -0.001494749, 0.016638916, 0.024912484, 0.046756797, -0.03739495, -0.006690313, 0.004425244, 0.0006056028, -0.017530521, 0.0013013495, -0.0014488576, -0.0016766757, -0.0017209281, 5.5417982e-05, -0.010201006, 0.008712813, 0.010135448, 0.032071546, 0.02194921, -0.008358794, -0.0035631408, -0.028846033, -0.01680937, 0.011289288, -0.008607918, -0.015563746, -0.015485075, 0.007886767, 0.0025699195, -0.012849597, 0.015576858, 0.016927376, -0.0031681468, -0.007244288, -0.014829484, -0.019890651, -0.020428237, 0.0020126665, 0.0036418117, 0.005733149, 0.0061265044, -0.018487684, 0.03154707, 0.013701866, 0.029213166, -0.031625744, 0.009034053, 0.010895934, 0.004189231, -0.0020683918, -0.015563746, -0.020428237, -0.017963212, -0.016258674, -0.019929986, 0.024178222, 0.0032419008, 0.04625855, -0.013203616, -0.03283203, 0.03254357, -0.01005022, 0.008037554, 0.0043793526, 0.0032107602, -0.016717589, -0.00631007, 0.010496023, 0.0045137485, 0.02503049, -0.00944052, -0.031651966, -0.009742092, -0.024846924, 0.010732036, -0.026499016, -0.014921267, 0.026407233, 0.005425021, 0.007001719, 0.0037860419, -0.026289226, -0.010135448, 0.012325124, 0.0027911814, -0.01244313, -0.013557636, 0.01258736, -0.014645918, -0.02167386, -0.007041055, 0.022827702, -0.024545353, -0.01679626, -0.020061105, 0.01380676, 0.0113155125, -0.002673175, 0.027351284, -0.022709696, -0.031153716, -0.008037554, -0.009230731, -0.012725035, 0.014475464, -0.014632806], + "object": "embedding" }, { "object": "embedding", @@ -64,11 +67,10 @@ X-Request-Id: req_df4996cfd74548ff9c92a98c5f091ebe ], "model": "text-embedding-ada-002-v2", "usage": { - "total_tokens": 71, - "prompt_tokens": 71 - }, - "object": "list" -}278 22074 + "prompt_tokens": 71, + "total_tokens": 71 + } +}278 22141 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -80,20 +82,22 @@ Content-Type: application/json Content-Length: 21186 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:25 GMT +Date: Mon, 21 Sep 2026 07:48:06 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 34 +Openai-Processing-Ms: 97 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-76f6979656-fp26q +Via: envoy-router-7d5f5f44cf-rnj5b X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 52 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 @@ -101,23 +105,23 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999991 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_bb4610e3c12e477e8974e4e8a0e1d029 +X-Request-Id: req_df341c580d224d4395db06ccb6d1e43f { "object": "list", "data": [ { + "object": "embedding", "index": 0, - "embedding": [0.02230405, 0.008771547, 0.014554557, -0.011423711, -0.008448112, 0.015473112, 0.0068826885, -0.008881515, 0.004744786, -0.005595419, -0.016676288, 0.01731022, -0.017698342, 0.024891527, -0.0063878335, -0.0012743324, 0.031618968, 0.021294935, 0.013648941, -0.0046218806, -0.020337569, 0.025512522, -0.01429581, -0.001887241, -0.01562836, -0.008959139, 0.017374907, -0.008868577, -0.011934738, 0.006138789, 0.0034187038, -0.016792726, -0.012723918, -0.0168186, -0.016844476, 0.0169221, 0.010860935, 0.0039006216, 0.011591896, -0.014606307, 0.015718922, -0.0003416278, -0.00038286572, 0.00014958851, -0.0055177948, 0.007827118, -0.0011853878, 0.0067468463, -0.039355524, 0.01296326, -0.008124677, 0.0066562844, -0.012885635, -0.052706905, -0.026172329, 0.00087650784, 0.008674516, 0.01811234, -0.011714802, -0.0054789823, -0.0041917125, -0.0013471051, -0.014502808, 0.0060676336, -0.0006072485, -0.001574318, -0.0084093, 0.010860935, 0.017038535, -0.0021136452, 0.021424308, 0.028125875, 0.017581906, -0.00033576557, 0.029419612, -0.008752141, -0.020712754, -0.0023740102, 0.007109093, 0.00022701068, 0.0044892724, 0.0069279694, -0.03260221, 0.008758609, 0.018733334, 0.013441943, 0.0025923285, 0.018371087, -0.034594566, -0.0030613088, -0.013196132, 0.051439043, 0.030040607, -0.021760682, -0.012445764, 0.0054854513, -0.0074325274, 0.02478803, 0.0125169195, -0.013791252, 0.016119981, -0.015291989, -0.031308472, 0.005977072, -0.017129097, -0.023222605, 0.0037486071, 0.008480456, 0.032679833, -0.040105894, -0.03487919, 0.049187936, 0.039459024, -0.038449906, -0.021980617, -0.0070767496, 0.0012702894, -0.024141159, -0.037337292, 0.0070055937, -0.0022672766, 0.040468138, 0.017982965, -0.027530754, 0.04486685, -0.002137903, -0.026482826, -0.024503406, -0.024956215, 0.005016471, 0.010802716, 0.014929742, 0.013467818, 0.021243185, -0.008920327, 0.0013099102, -0.006513973, 0.024425782, -0.03793241, 0.00328933, 0.013545441, 0.006119383, -0.0047900667, -0.008059991, -0.0056406995, 0.030972099, 0.0048094727, -0.0027427257, -0.020402256, -0.0018662177, 0.005673043, -0.012717449, 0.023817725, 0.012827417, 0.0014692018, 0.016999723, -0.0019567795, 0.017827716, -0.044219982, 0.0069538443, -0.04931731, 0.0048968, 0.030402854, -0.005876807, 0.012342265, 0.028772743, 0.020686878, 0.0049744244, -0.010395189, 0.0075101517, -0.032576334, 0.027039135, -0.020466942, 0.03330083, 0.00044795693, 0.034930937, 0.007859461, -0.016158793, 0.003978246, 0.01157249, -0.0095930705, -0.0068438766, -0.008538674, -0.009146731, 0.0009783898, -0.017129097, 0.0017497813, -0.001466776, 0.024011785, -0.004550725, 0.01143018, 0.027763627, -0.015059115, -0.0069991252, -0.66901803, -0.032653958, 0.004961487, -0.0085904235, 0.0080988025, 0.013390193, 0.0239471, 0.028255248, -0.003522203, -0.016003545, 0.009386073, 0.007063812, 0.0042078844, -0.023934161, 0.0125233885, -0.021825368, -0.0053981235, 0.010893278, -0.00018577276, 0.0017788904, -0.008765078, 0.019108517, -0.0018112338, -0.00398148, 0.021411372, 0.022834484, 0.009638351, -0.016495166, -0.015020303, 0.012102923, -0.015304926, 0.011792426, 0.013099102, -0.023106169, 0.025447836, -0.003709795, -0.024555156, 0.028824493, 0.0054886853, 0.029962983, -0.028384622, -0.0021750978, 0.017323159, -0.02305442, -0.010666873, 0.010847997, 0.017568968, -0.00046129862, 0.046833333, -0.014024125, 0.012769199, -0.030014733, -0.015718922, 0.01844871, 0.018254649, 0.015990607, 0.046212338, 0.009858287, -0.008467519, 0.0031146754, -0.009987661, -0.018086463, 0.0013495309, 0.002897974, 0.007445465, 0.00079120195, -0.0252279, -0.023507228, -0.020104695, -0.022329926, -0.0035933587, 0.016158793, -0.03904503, 0.02423172, 0.0061064456, -0.010796247, 0.029911233, -0.007102624, -0.0024710405, -0.017206721, 0.002055427, -0.015123802, -0.02853987, -0.015123802, 0.01741372, -0.010472813, -0.014670994, -0.020893876, 0.015757734, 0.026987385, 0.009612476, 0.015046178, -0.01839696, 0.0003299033, -0.017103223, 0.03216234, -0.01646929, 0.0032181744, -0.011320212, -0.025033839, 0.000618973, -0.03270571, -0.0037453729, 0.013312569, 0.02913499, -0.0064428174, -0.0077494932, 0.031877715, 0.015641298, -0.014399309, 0.0004980893, -0.013176726, -0.021631308, 0.0009832412, 0.014502808, -0.022498112, 0.04877394, 0.013234944, 0.024218785, -0.015874172, 0.007607182, -0.0003988353, 0.014231123, -0.0182029, 0.020570442, 0.008965608, -0.013648941, -0.009146731, -0.009599539, 0.024218785, -0.011967081, 0.011346086, 0.010207596, -0.0065269107, -0.030583978, 0.0065269107, 0.01662454, -0.026094705, 0.013881814, -0.013312569, -0.01687035, 0.0033507827, -0.026651012, 0.007833586, -0.023481352, -0.027065009, -0.028358746, -0.007128499, -0.027686004, -0.012329328, -0.018332275, -0.025991205, -0.042977992, 0.007671869, 0.013299632, 0.0028947399, -0.015990607, -0.0078077116, -0.028332872, 0.006614238, 0.024956215, 0.011967081, -0.015421363, 0.003324908, -0.010304627, -0.024205847, -0.009981193, 0.02903149, 0.00025308758, -0.042822745, -0.0026004142, 0.0050229398, -0.002137903, 0.013868877, -0.011837707, -0.00040328252, -0.0031454016, -0.037984163, -0.006850345, -0.010298158, 0.012568669, 0.029393738, -0.015304926, 0.0046024746, 0.03423232, 0.012549263, 0.022679236, 0.023274355, 0.0025680708, 0.010511625, -0.015123802, -0.004977659, 0.013545441, -0.0077883056, 0.008726266, -0.0033281422, 0.022265239, -0.012872698, -0.00095332356, -0.011087338, 0.029600736, -0.0019017955, -0.005094095, -0.011514273, 0.029755985, -0.033870075, 0.009159668, -0.005210532, 0.013907689, 0.025253775, -0.007704213, -0.025745396, 0.0020344038, -0.022627486, 0.01641754, 0.010110566, -0.01687035, 0.028358746, -0.0054886853, -0.00026905717, 0.01063453, 0.011954144, 0.03635405, 0.0006104828, -0.015887108, 0.0037874193, 0.006649816, 0.020906813, 0.009787131, -0.011281399, -0.02804825, -0.0077624307, 5.4630127e-05, 0.006513973, -0.015279051, 0.0025179384, 0.008959139, -0.016404605, -0.0049841274, 0.0050714547, 0.020402256, 0.030972099, 0.022950921, 0.0077818367, 0.03244696, -0.0034963281, 0.00796296, 0.026288766, -0.02449047, 0.013726565, -0.008881515, -0.012374609, -0.024115285, 0.0058250576, 0.018086463, 0.0038359344, 0.032628085, -0.0063781305, 0.0040396983, 0.010906215, -0.0004334024, -0.0010632913, 0.016728038, -0.005912385, -0.0072578727, 0.008913858, -0.023287293, -0.014554557, 0.0029189973, -0.0059447284, -0.012853292, -0.008467519, 0.014774493, 0.0008178853, 0.017129097, 0.0022624251, -0.0077430247, -0.017090285, 0.018358149, 0.0336372, -0.0033895948, -0.02240755, 0.014308748, -0.0011603216, -0.014515745, -0.018422836, -0.018177025, 0.018513398, -0.017646592, 0.0072449353, 0.016326979, -0.0062519913, 0.024154097, -0.0005373058, 0.0018079996, -0.022886233, -0.001822554, -0.0007689658, 0.023222605, 0.005980306, -0.011139088, 0.00031231655, -0.027220257, -0.013855939, 0.016378729, 0.011857113, -0.016947974, -0.008364019, -0.006420177, -0.0251244, -0.023093231, -0.009871225, 0.004013824, 0.011223181, 0.013390193, 0.008053522, -0.019328453, -0.018358149, 0.023584852, 0.004159369, -0.021113811, -0.029238489, -0.011449586, -0.0014821391, 0.05852873, 0.009916506, -0.006306975, 0.017077347, -0.002411205, -0.0194837, -0.017737154, 0.012820948, -0.00930198, 0.010097628, 0.013196132, -0.007859461, -0.007587776, -0.009890631, -0.014748619, -0.0019406077, 0.0066821594, -0.009877693, 0.019328453, -0.007594245, -0.010472813, 0.0090820445, -0.0051523135, 0.02606883, -0.023390792, -0.011113213, 0.022394612, -0.014567495, 0.015123802, -0.01236814, -0.012161141, 0.016262293, -0.0058638696, -0.0024500173, -0.025706584, -0.01697385, -0.016107043, 0.008027648, 0.029238489, -0.0019001784, 0.027479006, 0.0066950964, 0.0009306831, -0.025603084, 0.000605227, 0.0065754256, -0.009974724, 0.02137256, 0.0066821594, -0.013687753, 8.136402e-05, -0.0019858885, -0.003997652, -0.0042984462, 0.0040526357, 9.975937e-05, -0.013273757, -0.024645718, 0.009366667, -0.01741372, -0.0038909183, 0.0034639847, 0.030816851, -0.0052364063, -0.03565543, -0.024063535, -0.0013940032, -0.011798895, -0.0080858655, -0.007794774, -0.0052816872, -0.015343738, -0.042072374, 0.012064111, 0.04719558, 0.024645718, 0.030532228, -0.0120511735, 0.0045442563, 0.01953545, 0.0043987106, -0.010375783, 0.0060223527, -0.006119383, -0.0105310315, -0.0052267034, 0.021036187, -0.012070579, -0.01434756, 0.027789501, 0.026198205, -0.0054304674, 0.02903149, -0.027737753, -0.007937086, -0.009263167, -0.0014675845, 0.02542196, -0.028074125, -0.012665699, 0.017012661, -0.019781262, 0.012588075, -0.035396684, -0.019781262, 0.01018819, -0.0041787755, -0.009418416, -0.03169659, 0.011171431, 0.0006618281, -0.020790378, -0.004023527, -0.014852118, 0.028876243, 0.01627523, -0.026159393, 0.012199954, -0.0047674263, -0.032032963, 0.009780663, -0.03542256, 0.026935635, 0.0014683931, -0.03679392, 0.005372249, 0.011928269, -0.009237292, 0.01890152, 0.008629235, 0.004744786, 0.01800884, -0.027789501, -0.014037062, -0.026935635, -0.007212592, 0.012555731, 0.009334323, -0.015097928, 0.014127624, -0.009935912, 0.019600138, -0.0029545752, -0.015072053, -0.011727739, -0.02631464, 0.011585428, -0.0010333736, 0.0063781305, 0.028229373, 0.01608117, 0.0050358768, -0.03596593, 0.017750092, -0.013073227, -0.019224953, -0.006164664, -0.016145855, 0.011449586, 0.013894751, 0.016042357, 0.0036192334, 0.0073225596, 0.005543669, -0.0065366137, 0.0056665745, 0.009017357, -0.0019470764, -0.027116759, -0.005669809, 0.011902394, 0.012083517, 0.015563673, 0.008933264, 0.01152721, 0.029212615, -0.005317265, 0.00062705885, -0.03482744, -0.026780386, 0.001640622, -0.016999723, -0.011734208, 0.0043696016, 0.0014303896, 0.013713628, 0.0067468463, -0.003897387, -0.015473112, -0.00925023, 0.029652486, -0.014632182, 0.044763353, -0.025344336, 0.014321685, -0.009127324, -0.038812153, -0.023106169, -0.0061873044, -0.020130571, 0.0059447284, 0.008376957, 0.0032197917, -0.02433522, 0.021980617, -0.0027799206, 0.018979143, -0.0007612842, -0.0071996544, -0.018177025, -0.03358545, -0.024050599, -0.022575736, -0.02869512, 0.016585726, -0.014412247, -0.03167072, 0.020454004, 0.0022769796, -0.007102624, -0.010479282, -0.009269636, 0.025163213, 0.013933564, 0.026237017, 0.013881814, -0.0050358768, -0.011714802, -0.022523986, -0.025913581, -0.017918278, 0.021424308, 0.022420488, 0.0047415514, 0.010472813, 0.0135066295, -0.0030499885, 0.012866229, -0.016003545, -0.0012161141, 0.013933564, 0.0068180016, -0.005026174, 0.00945076, -0.017504282, 0.023339042, -0.007950023, -0.008635704, 0.010291689, -0.0005227512, -0.021825368, -0.0012581607, -0.01844871, 0.035629556, 0.01687035, -0.011928269, 0.015744798, -0.016702164, -0.009554259, 0.0026699528, 0.0068891575, 0.035344936, 0.0009694953, 0.0055080913, 0.0076848064, 0.0074389963, -0.015563673, -0.00885564, 0.009431354, 0.029445488, -0.015550736, -0.0043598986, -0.0110355895, 0.020764502, 0.03032523, -0.01454162, 0.002259191, 0.0120252995, -0.01137843, 0.015162615, 0.020001197, -0.0037033265, -0.01741372, 0.0044601634, -0.03037698, 0.00420465, -0.026379328, -0.011714802, -0.00026663142, -0.03423232, 0.0016737741, 0.010265815, 0.024891527, 0.009515447, 0.0052331723, 0.0021136452, 0.028902117, -0.014114686, -0.0052752187, 0.0033895948, 0.01068628, 0.016753914, -0.016495166, 0.00413026, -0.0009694953, -0.041037384, 0.017517218, 0.010311096, -0.033119705, -0.0031890653, 0.022730986, -0.0038941528, 0.004773895, -0.016016481, -0.0038197627, 0.002102325, 0.0012056025, -0.012866229, 0.0041884785, -0.0056924494, -0.017995901, 0.015175552, 0.009683632, -0.0060126497, 0.00791768, 0.0048903315, -0.010252877, 0.012284047, -0.01513674, 0.0017708045, 0.0016066615, 0.018021777, -0.0014675845, -0.015990607, 0.011100276, -0.004366367, -0.008364019, -0.0014643503, 0.009192012, 0.008124677, 0.0036774515, 0.0144898705, -0.0039847144, 0.019651888, -0.03260221, -0.0073743095, -0.014231123, -0.034542818, -0.02641814, -0.020337569, -0.02547371, 0.007633057, -0.010666873, -0.028125875, 0.0021815666, -0.005795948, 0.008668047, -0.018384025, 0.0053690146, -0.0022478707, 0.008900921, -0.0019729512, -0.004476335, 0.026094705, 0.0038068255, -0.0029092943, -0.0078077116, 0.0048968, 0.006239054, -0.017271409, 0.0033863604, -0.0015597634, -0.008739203, -0.018733334, 0.018319337, 0.012109392, 0.011009715, -0.008972077, -0.020686878, 0.00727081, 0.004579834, 0.022562798, 0.02696151, 0.032886833, -0.012723918, -0.027686004, -0.02286036, -0.020466942, 0.014140561, -0.021657182, -0.007801243, 0.030635728, 0.009166137, -0.008829765, -0.031386096, -0.002327112, -0.004269337, 0.0055274977, 0.014231123, -0.00022559565, -0.011274931, 0.004026761, 0.016728038, -0.007044406, 0.0021055595, -0.005391655, -0.011785957, 0.00027896237, 0.008913858, 0.001550869, -0.0038003568, -0.014722744, -0.013338444, -0.016508102, -0.0012403717, -0.007341966, -0.02156662, -0.021087937, 0.024904465, 0.00939901, -0.015990607, 0.0026521639, -0.040778637, -0.020285819, -0.0004916206, -0.0066110035, 0.005158782, -0.030040607, -0.0050358768, 0.0011554701, -0.001466776, -0.018293463, -0.022562798, 0.003690389, 0.023623664, 0.012698043, 0.2370129, 0.008454581, 0.0027119992, 0.04199475, -0.008875046, 0.014205248, 0.027039135, 0.0049291435, 0.016443416, 0.023015607, -0.02750488, 0.0011109979, 0.009386073, 0.010938559, -0.011850644, -0.014554557, -0.01811234, -0.015304926, 0.01310557, 0.0023109403, 0.008021179, 9.2381015e-05, 0.0040041204, -0.021256123, 0.015304926, 0.021993553, -0.0022915343, -0.001701266, 0.019328453, 0.020259945, 0.005411061, -0.020945625, -0.008286395, -0.00024257596, -0.004456929, -0.0085710175, -0.0023869474, -0.0026521639, 0.0222523, 0.024813903, -0.0040688077, -0.0144769335, -0.020997375, 0.014127624, -0.006552785, -0.0051070326, -0.019858886, -0.012782136, 0.01687035, 0.0072449353, -0.017944153, -0.0072772787, 0.02324848, 0.023274355, -4.644319e-05, 0.0061711324, 0.02859162, -0.018138213, 0.00640724, 0.00865511, -0.006119383, 0.035267312, -0.020945625, 0.023636602, 0.010996777, -0.008344613, -0.002513087, -0.00048515192, 0.024425782, -0.012070579, 0.006300506, -0.0031421673, -0.0031648078, 0.015964733, 0.01760778, 0.007937086, 0.026832135, 0.010957965, 0.0095736645, 0.002344901, -0.010977371, -0.0075554326, -0.004421351, 0.028384622, 0.00058056513, -0.017180847, -0.0062455223, 0.008150552, 0.029419612, 0.009631883, 0.00390709, 0.0017643358, 0.0052008284, 0.017193785, 0.015317864, 0.022278177, 0.008422238, 0.00885564, -0.018992081, -0.0023060888, -0.029109115, -0.0115207415, 0.01879802, 0.002307706, -0.02696151, 0.011003246, 0.004211119, -0.021760682, 0.029238489, 0.0044860383, 0.004026761, -0.009192012, 0.008784484, 0.0013325507, 0.0059447284, -0.0029303175, 0.005158782, -0.031618968, -0.017245533, -0.0063231466, -0.008525737, -0.020738628, -0.010841528, -0.0013163789, -0.008234645, -0.025486648, -0.01562836, 0.013674815, 0.0073290286, -0.03780304, 0.0065107387, -0.012892104, 0.024451656, -0.0026861245, -0.0017109691, -0.0021314342, 0.013687753, -0.0080858655, 0.016857412, -0.012601012, 0.008519268, -0.008131146, 0.016546914, -0.0010738029, 0.0052267034, -0.011876519, 0.0044439915, -0.008480456, -0.014451059, -0.027530754, -0.01795709, -0.006219648, 0.0018662177, -0.021152625, 0.026094705, -0.012070579, -0.00045765997, 0.0020667473, 0.028436372, 0.01370069, -0.009463697, 0.0063393186, 0.013817127, -0.0021087937, -0.007503683, 0.0025858597, -0.16487403, 0.0057571363, 0.044219982, -0.03314558, -0.022045303, 0.00796296, 0.0095801335, 0.023558978, -0.014735681, 0.039640147, 0.00035961886, 0.011132619, -0.04572072, -0.0026020315, -0.010847997, 0.0036095304, -0.005391655, 0.019250829, -0.011578959, 0.006921501, 0.011443117, -0.018616896, 0.007037937, 0.014127624, -0.0037712476, -0.019431952, -0.02305442, 0.021644244, 0.01038872, -0.02300267, -0.009489572, -0.0003606296, 0.00051547395, 0.006400771, 0.009813006, 0.0034445787, 0.003968543, 0.0026295234, -0.013868877, 0.00059754547, -0.0077688997, 0.010802716, 0.017827716, 0.03348195, -0.0062778657, 0.020492818, 0.011986487, 0.0009039998, -0.01221936, -0.008933264, 0.009360198, -0.025137339, -0.0054045925, -0.002624672, 0.005540435, 0.02067394, 0.017103223, 0.01953545, 0.0009573665, -0.000321211, -0.008247583, -0.03834641, -0.011766551, -0.0025454303, 0.012406952, 0.009664226, 0.015887108, -0.0031551046, -0.017387845, 0.008985014, -0.00221391, -0.02088094, -0.0061226175, -0.019781262, 0.004903269, 0.011093807, 0.0030790975, -0.026094705, -0.011934738, -0.01009116, -0.002120114, 0.050171178, -0.017646592, 0.0125233885, -0.013674815, 0.01592592, 0.00041803924, 0.004560428, -0.027427256, 0.0015678493, 0.029109115, -0.010052348, 0.00846105, -0.02853987, 0.010744498, 0.0043501956, 0.0054498734, -0.00571509, 0.0004378496, 0.0018079996, -0.013674815, 0.010097628, -0.018862708, 0.021605432, 0.032860957, -0.00930198, -0.016339917, 0.018319337, 0.03749254, -0.005210532, -0.022174677, 0.010699217, 0.009819475, 0.020014133, 0.016184669, -0.005857401, 0.014877993, -0.0061452575, 0.024050599, 0.029471362, 0.04230525, -0.020518692, -0.015473112, 0.016314043, 0.0071802484, -0.016158793, -0.08569723, 0.003531906, -0.0037033265, 0.021346685, 0.0077106813, 0.028798617, 0.021631308, 0.035267312, 0.00687622, 0.01518849, -0.012232297, -0.011669521, -0.01608117, 0.009754788, 0.0008522502, -0.011391367, 0.01083506, -0.032576334, -0.04574659, 0.016145855, 0.000981624, -0.0030241136, 0.012801542, -0.0077300873, 0.006365193, -0.037673663, -0.038605157, 0.0110355895, 0.0035157343, 0.0034154695, 0.02349429, -0.027039135, -0.016986785, -0.013312569, -0.021708932, -0.0149814915, -0.021281999, -0.019263767, 0.011941206, -0.03961427, -0.008991483, 0.018306399, 0.0168186, -0.015563673, 0.015162615, -0.0058379946, -0.016197605, 0.012549263, -0.009386073, -0.022627486, 0.012665699, 0.0045054443, -0.008680985, -0.023416666, 0.026599264, -0.011734208, 0.008564549, 0.030144107, -0.013687753, 0.00895267, -0.0022656594, 0.028617496, -0.0004867691, 0.020945625, 0.0050100023, -0.026482826, -0.025680708, -0.0009444291, 0.009800069, -0.037259668, -0.036198802, -0.003531906, -0.0029384035, -0.013894751, -0.028902117, -0.008182895, -0.013648941, 0.016896224, -0.0016333448, -0.0054983883, -0.017530156, -0.022562798, 0.0057991827, 0.006064399, -0.001644665, 0.03555193, -0.031748343, -0.018772146, 0.0024144393, -0.0015686579, -0.0060417587, 0.019134391, 0.013124976, -0.016249355, -0.025098527, 0.018371087, -0.0025001497, 0.014670994, 0.02734963, -0.01890152, -0.022433424, 0.00079686206, -0.05387127, 0.019315515, -0.005165251, -0.013959438, -0.013429006, -0.0043437267, 0.005805651, -0.0063037407, -0.0067597837, 0.007193186, -0.008351082, 0.017866528, -0.010343439, 0.002391799, -0.0044957413, 0.0054789823, 0.009036764, 0.017504282, -0.0047577233, -0.00801471, -0.015537799, -0.0018338743, 0.017672468, 0.017737154, -0.029367864, 0.004773895, -0.008842702, 0.001822554, -0.022394612, -0.01370069, 0.03819116, -0.036923297, 0.0043404927, 0.04947256, -0.010653936, -0.039950643, -0.029859483, 0.030092357, 0.03423232, -0.040287014, -0.00791768, -0.025848895, 0.011456054, -0.024593968, 0.007982367, 0.031644844, -0.015641298, 0.006921501, 0.010673342, 0.0007115562, 0.022523986, 0.016883288, 0.0011045292, 0.0010754201, -0.010265815, -0.025797145, 0.02354604, -0.016055295, 0.029290238, -0.025745396, 0.011798895, 0.0055727786, 0.013312569, 0.008079397, 0.020686878, -0.011158494, 0.024865653, 0.0037680133, -0.0049905963, -0.014774493, 0.005753902, 0.010446938, 0.026780386, 0.016805662, 0.020363443, 0.002352987, 0.023468416, 0.0075101517, -0.016404605, 0.018138213, 0.019845948, -0.0027152337, -0.023313167, 0.014037062, 0.035836555, 0.0002749194, -0.036172926, 0.017750092, 0.010304627, 0.0036030617, -0.017504282, 0.0056762774, 0.008215239, 0.004615412, 0.008351082, 0.0041076196, -0.00472538, 0.01454162, -0.0036483426, 0.021100875, -0.015343738, -0.022769798, 0.0066821594, -0.02552546, -0.012969729, 0.005346374, -0.0050035333, -0.017970027, -0.0076395255, 0.003402532, 0.0042919773, 0.0011012949, 0.004139963, 0.007658932, 0.004589537, -0.006219648, -0.028953867, -0.023804788, -0.022472236, 0.015615423, 0.0015557205, 0.008972077, -0.005905916, 0.001896944, 0.0063748965, 0.01058278, 0.018189963, -0.011197306, 0.030532228, 0.02582302, 0.010479282, 0.0062455223, -0.0009436205, -0.0067015653, 0.001402089, -0.022718048, 0.0034898594, 0.011747145, -0.01276273, 0.06810239, 0.0030338168, -0.022601612, 0.03487919, -0.013726565, 0.033430204, 0.008441644, 0.009528384, -0.022032365, -0.009780663, -0.0017999136, 0.019548388, 0.011404305, -0.028850367, -0.02908324, -0.019224953, -0.024852715, 0.0059382594, -0.0004519999, -0.015253177, 0.018707458, -0.01725847, 0.007924148, 0.015059115, -0.022187615, -0.024115285, 0.0144898705, -0.0020360209, 0.0006181644, 0.0032214087, 0.021683056, -0.0045539592, -0.03293858, -0.0051070326, 0.014231123, -0.015822422, -0.011675989, -0.019199079, -0.008887983, -0.0038100597, 0.010828591, 0.027479006, -0.010155847, -0.008499862, 0.013196132, -0.014049999, -0.0034995626, 0.008661579, -0.0046024746], - "object": "embedding" + "embedding": [0.02230405, 0.008771547, 0.014554557, -0.011423711, -0.008448112, 0.015473112, 0.0068826885, -0.008881515, 0.004744786, -0.005595419, -0.016676288, 0.01731022, -0.017698342, 0.024891527, -0.0063878335, -0.0012743324, 0.031618968, 0.021294935, 0.013648941, -0.0046218806, -0.020337569, 0.025512522, -0.01429581, -0.001887241, -0.01562836, -0.008959139, 0.017374907, -0.008868577, -0.011934738, 0.006138789, 0.0034187038, -0.016792726, -0.012723918, -0.0168186, -0.016844476, 0.0169221, 0.010860935, 0.0039006216, 0.011591896, -0.014606307, 0.015718922, -0.0003416278, -0.00038286572, 0.00014958851, -0.0055177948, 0.007827118, -0.0011853878, 0.0067468463, -0.039355524, 0.01296326, -0.008124677, 0.0066562844, -0.012885635, -0.052706905, -0.026172329, 0.00087650784, 0.008674516, 0.01811234, -0.011714802, -0.0054789823, -0.0041917125, -0.0013471051, -0.014502808, 0.0060676336, -0.0006072485, -0.001574318, -0.0084093, 0.010860935, 0.017038535, -0.0021136452, 0.021424308, 0.028125875, 0.017581906, -0.00033576557, 0.029419612, -0.008752141, -0.020712754, -0.0023740102, 0.007109093, 0.00022701068, 0.0044892724, 0.0069279694, -0.03260221, 0.008758609, 0.018733334, 0.013441943, 0.0025923285, 0.018371087, -0.034594566, -0.0030613088, -0.013196132, 0.051439043, 0.030040607, -0.021760682, -0.012445764, 0.0054854513, -0.0074325274, 0.02478803, 0.0125169195, -0.013791252, 0.016119981, -0.015291989, -0.031308472, 0.005977072, -0.017129097, -0.023222605, 0.0037486071, 0.008480456, 0.032679833, -0.040105894, -0.03487919, 0.049187936, 0.039459024, -0.038449906, -0.021980617, -0.0070767496, 0.0012702894, -0.024141159, -0.037337292, 0.0070055937, -0.0022672766, 0.040468138, 0.017982965, -0.027530754, 0.04486685, -0.002137903, -0.026482826, -0.024503406, -0.024956215, 0.005016471, 0.010802716, 0.014929742, 0.013467818, 0.021243185, -0.008920327, 0.0013099102, -0.006513973, 0.024425782, -0.03793241, 0.00328933, 0.013545441, 0.006119383, -0.0047900667, -0.008059991, -0.0056406995, 0.030972099, 0.0048094727, -0.0027427257, -0.020402256, -0.0018662177, 0.005673043, -0.012717449, 0.023817725, 0.012827417, 0.0014692018, 0.016999723, -0.0019567795, 0.017827716, -0.044219982, 0.0069538443, -0.04931731, 0.0048968, 0.030402854, -0.005876807, 0.012342265, 0.028772743, 0.020686878, 0.0049744244, -0.010395189, 0.0075101517, -0.032576334, 0.027039135, -0.020466942, 0.03330083, 0.00044795693, 0.034930937, 0.007859461, -0.016158793, 0.003978246, 0.01157249, -0.0095930705, -0.0068438766, -0.008538674, -0.009146731, 0.0009783898, -0.017129097, 0.0017497813, -0.001466776, 0.024011785, -0.004550725, 0.01143018, 0.027763627, -0.015059115, -0.0069991252, -0.66901803, -0.032653958, 0.004961487, -0.0085904235, 0.0080988025, 0.013390193, 0.0239471, 0.028255248, -0.003522203, -0.016003545, 0.009386073, 0.007063812, 0.0042078844, -0.023934161, 0.0125233885, -0.021825368, -0.0053981235, 0.010893278, -0.00018577276, 0.0017788904, -0.008765078, 0.019108517, -0.0018112338, -0.00398148, 0.021411372, 0.022834484, 0.009638351, -0.016495166, -0.015020303, 0.012102923, -0.015304926, 0.011792426, 0.013099102, -0.023106169, 0.025447836, -0.003709795, -0.024555156, 0.028824493, 0.0054886853, 0.029962983, -0.028384622, -0.0021750978, 0.017323159, -0.02305442, -0.010666873, 0.010847997, 0.017568968, -0.00046129862, 0.046833333, -0.014024125, 0.012769199, -0.030014733, -0.015718922, 0.01844871, 0.018254649, 0.015990607, 0.046212338, 0.009858287, -0.008467519, 0.0031146754, -0.009987661, -0.018086463, 0.0013495309, 0.002897974, 0.007445465, 0.00079120195, -0.0252279, -0.023507228, -0.020104695, -0.022329926, -0.0035933587, 0.016158793, -0.03904503, 0.02423172, 0.0061064456, -0.010796247, 0.029911233, -0.007102624, -0.0024710405, -0.017206721, 0.002055427, -0.015123802, -0.02853987, -0.015123802, 0.01741372, -0.010472813, -0.014670994, -0.020893876, 0.015757734, 0.026987385, 0.009612476, 0.015046178, -0.01839696, 0.0003299033, -0.017103223, 0.03216234, -0.01646929, 0.0032181744, -0.011320212, -0.025033839, 0.000618973, -0.03270571, -0.0037453729, 0.013312569, 0.02913499, -0.0064428174, -0.0077494932, 0.031877715, 0.015641298, -0.014399309, 0.0004980893, -0.013176726, -0.021631308, 0.0009832412, 0.014502808, -0.022498112, 0.04877394, 0.013234944, 0.024218785, -0.015874172, 0.007607182, -0.0003988353, 0.014231123, -0.0182029, 0.020570442, 0.008965608, -0.013648941, -0.009146731, -0.009599539, 0.024218785, -0.011967081, 0.011346086, 0.010207596, -0.0065269107, -0.030583978, 0.0065269107, 0.01662454, -0.026094705, 0.013881814, -0.013312569, -0.01687035, 0.0033507827, -0.026651012, 0.007833586, -0.023481352, -0.027065009, -0.028358746, -0.007128499, -0.027686004, -0.012329328, -0.018332275, -0.025991205, -0.042977992, 0.007671869, 0.013299632, 0.0028947399, -0.015990607, -0.0078077116, -0.028332872, 0.006614238, 0.024956215, 0.011967081, -0.015421363, 0.003324908, -0.010304627, -0.024205847, -0.009981193, 0.02903149, 0.00025308758, -0.042822745, -0.0026004142, 0.0050229398, -0.002137903, 0.013868877, -0.011837707, -0.00040328252, -0.0031454016, -0.037984163, -0.006850345, -0.010298158, 0.012568669, 0.029393738, -0.015304926, 0.0046024746, 0.03423232, 0.012549263, 0.022679236, 0.023274355, 0.0025680708, 0.010511625, -0.015123802, -0.004977659, 0.013545441, -0.0077883056, 0.008726266, -0.0033281422, 0.022265239, -0.012872698, -0.00095332356, -0.011087338, 0.029600736, -0.0019017955, -0.005094095, -0.011514273, 0.029755985, -0.033870075, 0.009159668, -0.005210532, 0.013907689, 0.025253775, -0.007704213, -0.025745396, 0.0020344038, -0.022627486, 0.01641754, 0.010110566, -0.01687035, 0.028358746, -0.0054886853, -0.00026905717, 0.01063453, 0.011954144, 0.03635405, 0.0006104828, -0.015887108, 0.0037874193, 0.006649816, 0.020906813, 0.009787131, -0.011281399, -0.02804825, -0.0077624307, 5.4630127e-05, 0.006513973, -0.015279051, 0.0025179384, 0.008959139, -0.016404605, -0.0049841274, 0.0050714547, 0.020402256, 0.030972099, 0.022950921, 0.0077818367, 0.03244696, -0.0034963281, 0.00796296, 0.026288766, -0.02449047, 0.013726565, -0.008881515, -0.012374609, -0.024115285, 0.0058250576, 0.018086463, 0.0038359344, 0.032628085, -0.0063781305, 0.0040396983, 0.010906215, -0.0004334024, -0.0010632913, 0.016728038, -0.005912385, -0.0072578727, 0.008913858, -0.023287293, -0.014554557, 0.0029189973, -0.0059447284, -0.012853292, -0.008467519, 0.014774493, 0.0008178853, 0.017129097, 0.0022624251, -0.0077430247, -0.017090285, 0.018358149, 0.0336372, -0.0033895948, -0.02240755, 0.014308748, -0.0011603216, -0.014515745, -0.018422836, -0.018177025, 0.018513398, -0.017646592, 0.0072449353, 0.016326979, -0.0062519913, 0.024154097, -0.0005373058, 0.0018079996, -0.022886233, -0.001822554, -0.0007689658, 0.023222605, 0.005980306, -0.011139088, 0.00031231655, -0.027220257, -0.013855939, 0.016378729, 0.011857113, -0.016947974, -0.008364019, -0.006420177, -0.0251244, -0.023093231, -0.009871225, 0.004013824, 0.011223181, 0.013390193, 0.008053522, -0.019328453, -0.018358149, 0.023584852, 0.004159369, -0.021113811, -0.029238489, -0.011449586, -0.0014821391, 0.05852873, 0.009916506, -0.006306975, 0.017077347, -0.002411205, -0.0194837, -0.017737154, 0.012820948, -0.00930198, 0.010097628, 0.013196132, -0.007859461, -0.007587776, -0.009890631, -0.014748619, -0.0019406077, 0.0066821594, -0.009877693, 0.019328453, -0.007594245, -0.010472813, 0.0090820445, -0.0051523135, 0.02606883, -0.023390792, -0.011113213, 0.022394612, -0.014567495, 0.015123802, -0.01236814, -0.012161141, 0.016262293, -0.0058638696, -0.0024500173, -0.025706584, -0.01697385, -0.016107043, 0.008027648, 0.029238489, -0.0019001784, 0.027479006, 0.0066950964, 0.0009306831, -0.025603084, 0.000605227, 0.0065754256, -0.009974724, 0.02137256, 0.0066821594, -0.013687753, 8.136402e-05, -0.0019858885, -0.003997652, -0.0042984462, 0.0040526357, 9.975937e-05, -0.013273757, -0.024645718, 0.009366667, -0.01741372, -0.0038909183, 0.0034639847, 0.030816851, -0.0052364063, -0.03565543, -0.024063535, -0.0013940032, -0.011798895, -0.0080858655, -0.007794774, -0.0052816872, -0.015343738, -0.042072374, 0.012064111, 0.04719558, 0.024645718, 0.030532228, -0.0120511735, 0.0045442563, 0.01953545, 0.0043987106, -0.010375783, 0.0060223527, -0.006119383, -0.0105310315, -0.0052267034, 0.021036187, -0.012070579, -0.01434756, 0.027789501, 0.026198205, -0.0054304674, 0.02903149, -0.027737753, -0.007937086, -0.009263167, -0.0014675845, 0.02542196, -0.028074125, -0.012665699, 0.017012661, -0.019781262, 0.012588075, -0.035396684, -0.019781262, 0.01018819, -0.0041787755, -0.009418416, -0.03169659, 0.011171431, 0.0006618281, -0.020790378, -0.004023527, -0.014852118, 0.028876243, 0.01627523, -0.026159393, 0.012199954, -0.0047674263, -0.032032963, 0.009780663, -0.03542256, 0.026935635, 0.0014683931, -0.03679392, 0.005372249, 0.011928269, -0.009237292, 0.01890152, 0.008629235, 0.004744786, 0.01800884, -0.027789501, -0.014037062, -0.026935635, -0.007212592, 0.012555731, 0.009334323, -0.015097928, 0.014127624, -0.009935912, 0.019600138, -0.0029545752, -0.015072053, -0.011727739, -0.02631464, 0.011585428, -0.0010333736, 0.0063781305, 0.028229373, 0.01608117, 0.0050358768, -0.03596593, 0.017750092, -0.013073227, -0.019224953, -0.006164664, -0.016145855, 0.011449586, 0.013894751, 0.016042357, 0.0036192334, 0.0073225596, 0.005543669, -0.0065366137, 0.0056665745, 0.009017357, -0.0019470764, -0.027116759, -0.005669809, 0.011902394, 0.012083517, 0.015563673, 0.008933264, 0.01152721, 0.029212615, -0.005317265, 0.00062705885, -0.03482744, -0.026780386, 0.001640622, -0.016999723, -0.011734208, 0.0043696016, 0.0014303896, 0.013713628, 0.0067468463, -0.003897387, -0.015473112, -0.00925023, 0.029652486, -0.014632182, 0.044763353, -0.025344336, 0.014321685, -0.009127324, -0.038812153, -0.023106169, -0.0061873044, -0.020130571, 0.0059447284, 0.008376957, 0.0032197917, -0.02433522, 0.021980617, -0.0027799206, 0.018979143, -0.0007612842, -0.0071996544, -0.018177025, -0.03358545, -0.024050599, -0.022575736, -0.02869512, 0.016585726, -0.014412247, -0.03167072, 0.020454004, 0.0022769796, -0.007102624, -0.010479282, -0.009269636, 0.025163213, 0.013933564, 0.026237017, 0.013881814, -0.0050358768, -0.011714802, -0.022523986, -0.025913581, -0.017918278, 0.021424308, 0.022420488, 0.0047415514, 0.010472813, 0.0135066295, -0.0030499885, 0.012866229, -0.016003545, -0.0012161141, 0.013933564, 0.0068180016, -0.005026174, 0.00945076, -0.017504282, 0.023339042, -0.007950023, -0.008635704, 0.010291689, -0.0005227512, -0.021825368, -0.0012581607, -0.01844871, 0.035629556, 0.01687035, -0.011928269, 0.015744798, -0.016702164, -0.009554259, 0.0026699528, 0.0068891575, 0.035344936, 0.0009694953, 0.0055080913, 0.0076848064, 0.0074389963, -0.015563673, -0.00885564, 0.009431354, 0.029445488, -0.015550736, -0.0043598986, -0.0110355895, 0.020764502, 0.03032523, -0.01454162, 0.002259191, 0.0120252995, -0.01137843, 0.015162615, 0.020001197, -0.0037033265, -0.01741372, 0.0044601634, -0.03037698, 0.00420465, -0.026379328, -0.011714802, -0.00026663142, -0.03423232, 0.0016737741, 0.010265815, 0.024891527, 0.009515447, 0.0052331723, 0.0021136452, 0.028902117, -0.014114686, -0.0052752187, 0.0033895948, 0.01068628, 0.016753914, -0.016495166, 0.00413026, -0.0009694953, -0.041037384, 0.017517218, 0.010311096, -0.033119705, -0.0031890653, 0.022730986, -0.0038941528, 0.004773895, -0.016016481, -0.0038197627, 0.002102325, 0.0012056025, -0.012866229, 0.0041884785, -0.0056924494, -0.017995901, 0.015175552, 0.009683632, -0.0060126497, 0.00791768, 0.0048903315, -0.010252877, 0.012284047, -0.01513674, 0.0017708045, 0.0016066615, 0.018021777, -0.0014675845, -0.015990607, 0.011100276, -0.004366367, -0.008364019, -0.0014643503, 0.009192012, 0.008124677, 0.0036774515, 0.0144898705, -0.0039847144, 0.019651888, -0.03260221, -0.0073743095, -0.014231123, -0.034542818, -0.02641814, -0.020337569, -0.02547371, 0.007633057, -0.010666873, -0.028125875, 0.0021815666, -0.005795948, 0.008668047, -0.018384025, 0.0053690146, -0.0022478707, 0.008900921, -0.0019729512, -0.004476335, 0.026094705, 0.0038068255, -0.0029092943, -0.0078077116, 0.0048968, 0.006239054, -0.017271409, 0.0033863604, -0.0015597634, -0.008739203, -0.018733334, 0.018319337, 0.012109392, 0.011009715, -0.008972077, -0.020686878, 0.00727081, 0.004579834, 0.022562798, 0.02696151, 0.032886833, -0.012723918, -0.027686004, -0.02286036, -0.020466942, 0.014140561, -0.021657182, -0.007801243, 0.030635728, 0.009166137, -0.008829765, -0.031386096, -0.002327112, -0.004269337, 0.0055274977, 0.014231123, -0.00022559565, -0.011274931, 0.004026761, 0.016728038, -0.007044406, 0.0021055595, -0.005391655, -0.011785957, 0.00027896237, 0.008913858, 0.001550869, -0.0038003568, -0.014722744, -0.013338444, -0.016508102, -0.0012403717, -0.007341966, -0.02156662, -0.021087937, 0.024904465, 0.00939901, -0.015990607, 0.0026521639, -0.040778637, -0.020285819, -0.0004916206, -0.0066110035, 0.005158782, -0.030040607, -0.0050358768, 0.0011554701, -0.001466776, -0.018293463, -0.022562798, 0.003690389, 0.023623664, 0.012698043, 0.2370129, 0.008454581, 0.0027119992, 0.04199475, -0.008875046, 0.014205248, 0.027039135, 0.0049291435, 0.016443416, 0.023015607, -0.02750488, 0.0011109979, 0.009386073, 0.010938559, -0.011850644, -0.014554557, -0.01811234, -0.015304926, 0.01310557, 0.0023109403, 0.008021179, 9.2381015e-05, 0.0040041204, -0.021256123, 0.015304926, 0.021993553, -0.0022915343, -0.001701266, 0.019328453, 0.020259945, 0.005411061, -0.020945625, -0.008286395, -0.00024257596, -0.004456929, -0.0085710175, -0.0023869474, -0.0026521639, 0.0222523, 0.024813903, -0.0040688077, -0.0144769335, -0.020997375, 0.014127624, -0.006552785, -0.0051070326, -0.019858886, -0.012782136, 0.01687035, 0.0072449353, -0.017944153, -0.0072772787, 0.02324848, 0.023274355, -4.644319e-05, 0.0061711324, 0.02859162, -0.018138213, 0.00640724, 0.00865511, -0.006119383, 0.035267312, -0.020945625, 0.023636602, 0.010996777, -0.008344613, -0.002513087, -0.00048515192, 0.024425782, -0.012070579, 0.006300506, -0.0031421673, -0.0031648078, 0.015964733, 0.01760778, 0.007937086, 0.026832135, 0.010957965, 0.0095736645, 0.002344901, -0.010977371, -0.0075554326, -0.004421351, 0.028384622, 0.00058056513, -0.017180847, -0.0062455223, 0.008150552, 0.029419612, 0.009631883, 0.00390709, 0.0017643358, 0.0052008284, 0.017193785, 0.015317864, 0.022278177, 0.008422238, 0.00885564, -0.018992081, -0.0023060888, -0.029109115, -0.0115207415, 0.01879802, 0.002307706, -0.02696151, 0.011003246, 0.004211119, -0.021760682, 0.029238489, 0.0044860383, 0.004026761, -0.009192012, 0.008784484, 0.0013325507, 0.0059447284, -0.0029303175, 0.005158782, -0.031618968, -0.017245533, -0.0063231466, -0.008525737, -0.020738628, -0.010841528, -0.0013163789, -0.008234645, -0.025486648, -0.01562836, 0.013674815, 0.0073290286, -0.03780304, 0.0065107387, -0.012892104, 0.024451656, -0.0026861245, -0.0017109691, -0.0021314342, 0.013687753, -0.0080858655, 0.016857412, -0.012601012, 0.008519268, -0.008131146, 0.016546914, -0.0010738029, 0.0052267034, -0.011876519, 0.0044439915, -0.008480456, -0.014451059, -0.027530754, -0.01795709, -0.006219648, 0.0018662177, -0.021152625, 0.026094705, -0.012070579, -0.00045765997, 0.0020667473, 0.028436372, 0.01370069, -0.009463697, 0.0063393186, 0.013817127, -0.0021087937, -0.007503683, 0.0025858597, -0.16487403, 0.0057571363, 0.044219982, -0.03314558, -0.022045303, 0.00796296, 0.0095801335, 0.023558978, -0.014735681, 0.039640147, 0.00035961886, 0.011132619, -0.04572072, -0.0026020315, -0.010847997, 0.0036095304, -0.005391655, 0.019250829, -0.011578959, 0.006921501, 0.011443117, -0.018616896, 0.007037937, 0.014127624, -0.0037712476, -0.019431952, -0.02305442, 0.021644244, 0.01038872, -0.02300267, -0.009489572, -0.0003606296, 0.00051547395, 0.006400771, 0.009813006, 0.0034445787, 0.003968543, 0.0026295234, -0.013868877, 0.00059754547, -0.0077688997, 0.010802716, 0.017827716, 0.03348195, -0.0062778657, 0.020492818, 0.011986487, 0.0009039998, -0.01221936, -0.008933264, 0.009360198, -0.025137339, -0.0054045925, -0.002624672, 0.005540435, 0.02067394, 0.017103223, 0.01953545, 0.0009573665, -0.000321211, -0.008247583, -0.03834641, -0.011766551, -0.0025454303, 0.012406952, 0.009664226, 0.015887108, -0.0031551046, -0.017387845, 0.008985014, -0.00221391, -0.02088094, -0.0061226175, -0.019781262, 0.004903269, 0.011093807, 0.0030790975, -0.026094705, -0.011934738, -0.01009116, -0.002120114, 0.050171178, -0.017646592, 0.0125233885, -0.013674815, 0.01592592, 0.00041803924, 0.004560428, -0.027427256, 0.0015678493, 0.029109115, -0.010052348, 0.00846105, -0.02853987, 0.010744498, 0.0043501956, 0.0054498734, -0.00571509, 0.0004378496, 0.0018079996, -0.013674815, 0.010097628, -0.018862708, 0.021605432, 0.032860957, -0.00930198, -0.016339917, 0.018319337, 0.03749254, -0.005210532, -0.022174677, 0.010699217, 0.009819475, 0.020014133, 0.016184669, -0.005857401, 0.014877993, -0.0061452575, 0.024050599, 0.029471362, 0.04230525, -0.020518692, -0.015473112, 0.016314043, 0.0071802484, -0.016158793, -0.08569723, 0.003531906, -0.0037033265, 0.021346685, 0.0077106813, 0.028798617, 0.021631308, 0.035267312, 0.00687622, 0.01518849, -0.012232297, -0.011669521, -0.01608117, 0.009754788, 0.0008522502, -0.011391367, 0.01083506, -0.032576334, -0.04574659, 0.016145855, 0.000981624, -0.0030241136, 0.012801542, -0.0077300873, 0.006365193, -0.037673663, -0.038605157, 0.0110355895, 0.0035157343, 0.0034154695, 0.02349429, -0.027039135, -0.016986785, -0.013312569, -0.021708932, -0.0149814915, -0.021281999, -0.019263767, 0.011941206, -0.03961427, -0.008991483, 0.018306399, 0.0168186, -0.015563673, 0.015162615, -0.0058379946, -0.016197605, 0.012549263, -0.009386073, -0.022627486, 0.012665699, 0.0045054443, -0.008680985, -0.023416666, 0.026599264, -0.011734208, 0.008564549, 0.030144107, -0.013687753, 0.00895267, -0.0022656594, 0.028617496, -0.0004867691, 0.020945625, 0.0050100023, -0.026482826, -0.025680708, -0.0009444291, 0.009800069, -0.037259668, -0.036198802, -0.003531906, -0.0029384035, -0.013894751, -0.028902117, -0.008182895, -0.013648941, 0.016896224, -0.0016333448, -0.0054983883, -0.017530156, -0.022562798, 0.0057991827, 0.006064399, -0.001644665, 0.03555193, -0.031748343, -0.018772146, 0.0024144393, -0.0015686579, -0.0060417587, 0.019134391, 0.013124976, -0.016249355, -0.025098527, 0.018371087, -0.0025001497, 0.014670994, 0.02734963, -0.01890152, -0.022433424, 0.00079686206, -0.05387127, 0.019315515, -0.005165251, -0.013959438, -0.013429006, -0.0043437267, 0.005805651, -0.0063037407, -0.0067597837, 0.007193186, -0.008351082, 0.017866528, -0.010343439, 0.002391799, -0.0044957413, 0.0054789823, 0.009036764, 0.017504282, -0.0047577233, -0.00801471, -0.015537799, -0.0018338743, 0.017672468, 0.017737154, -0.029367864, 0.004773895, -0.008842702, 0.001822554, -0.022394612, -0.01370069, 0.03819116, -0.036923297, 0.0043404927, 0.04947256, -0.010653936, -0.039950643, -0.029859483, 0.030092357, 0.03423232, -0.040287014, -0.00791768, -0.025848895, 0.011456054, -0.024593968, 0.007982367, 0.031644844, -0.015641298, 0.006921501, 0.010673342, 0.0007115562, 0.022523986, 0.016883288, 0.0011045292, 0.0010754201, -0.010265815, -0.025797145, 0.02354604, -0.016055295, 0.029290238, -0.025745396, 0.011798895, 0.0055727786, 0.013312569, 0.008079397, 0.020686878, -0.011158494, 0.024865653, 0.0037680133, -0.0049905963, -0.014774493, 0.005753902, 0.010446938, 0.026780386, 0.016805662, 0.020363443, 0.002352987, 0.023468416, 0.0075101517, -0.016404605, 0.018138213, 0.019845948, -0.0027152337, -0.023313167, 0.014037062, 0.035836555, 0.0002749194, -0.036172926, 0.017750092, 0.010304627, 0.0036030617, -0.017504282, 0.0056762774, 0.008215239, 0.004615412, 0.008351082, 0.0041076196, -0.00472538, 0.01454162, -0.0036483426, 0.021100875, -0.015343738, -0.022769798, 0.0066821594, -0.02552546, -0.012969729, 0.005346374, -0.0050035333, -0.017970027, -0.0076395255, 0.003402532, 0.0042919773, 0.0011012949, 0.004139963, 0.007658932, 0.004589537, -0.006219648, -0.028953867, -0.023804788, -0.022472236, 0.015615423, 0.0015557205, 0.008972077, -0.005905916, 0.001896944, 0.0063748965, 0.01058278, 0.018189963, -0.011197306, 0.030532228, 0.02582302, 0.010479282, 0.0062455223, -0.0009436205, -0.0067015653, 0.001402089, -0.022718048, 0.0034898594, 0.011747145, -0.01276273, 0.06810239, 0.0030338168, -0.022601612, 0.03487919, -0.013726565, 0.033430204, 0.008441644, 0.009528384, -0.022032365, -0.009780663, -0.0017999136, 0.019548388, 0.011404305, -0.028850367, -0.02908324, -0.019224953, -0.024852715, 0.0059382594, -0.0004519999, -0.015253177, 0.018707458, -0.01725847, 0.007924148, 0.015059115, -0.022187615, -0.024115285, 0.0144898705, -0.0020360209, 0.0006181644, 0.0032214087, 0.021683056, -0.0045539592, -0.03293858, -0.0051070326, 0.014231123, -0.015822422, -0.011675989, -0.019199079, -0.008887983, -0.0038100597, 0.010828591, 0.027479006, -0.010155847, -0.008499862, 0.013196132, -0.014049999, -0.0034995626, 0.008661579, -0.0046024746] } ], "model": "text-embedding-ada-002-v2", "usage": { - "prompt_tokens": 9, - "total_tokens": 9 + "total_tokens": 9, + "prompt_tokens": 9 } -}1799 1863 +}1799 1824 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -126,20 +130,21 @@ Authorization: Bearer test-api-key Content-Type: application/json {"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein bedroom, The color of the lamp beside the desk is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ebedroom\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein sitting room, The color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein patio, The color of the lamp beside the desk is yellow.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003epatio\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein kitchen, The color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein office, The color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK -Content-Length: 1079 +Content-Length: 999 Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:27 GMT +Date: Mon, 21 Sep 2026 07:48:08 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 557 +Openai-Processing-Ms: 584 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 575 X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 30000 X-Ratelimit-Limit-Tokens: 150000000 @@ -147,10 +152,10 @@ X-Ratelimit-Remaining-Requests: 29999 X-Ratelimit-Remaining-Tokens: 149999735 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_a4f019c02b204d87a40521cfdfad688f +X-Request-Id: req_59ec5d0bc999440a8e58569fbd375a04 { - "created": 1769112266, + "created": 1789976888, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { @@ -158,7 +163,7 @@ X-Request-Id: req_a4f019c02b204d87a40521cfdfad688f "index": 0, "message": { "role": "assistant", - "content": "In the bedroom, the lamp beside the desk is blue. \nIn the sitting room, the lamp beside the desk is purple. \nIn the patio, the lamp beside the desk is yellow. \nIn the kitchen, the lamp beside the desk is black. \nIn the office, the lamp beside the desk is orange.", + "content": "In the bedroom, the lamp is blue. \nIn the sitting room, the lamp is purple. \nIn the patio, the lamp is yellow. \nIn the kitchen, the lamp is black. \nIn the office, the lamp is orange.", "refusal": null, "annotations": [] }, @@ -166,22 +171,22 @@ X-Request-Id: req_a4f019c02b204d87a40521cfdfad688f } ], "usage": { - "total_tokens": 333, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 }, "completion_tokens_details": { + "rejected_prediction_tokens": 0, "reasoning_tokens": 0, "audio_tokens": 0, - "accepted_prediction_tokens": 0, - "rejected_prediction_tokens": 0 + "accepted_prediction_tokens": 0 }, "prompt_tokens": 268, - "completion_tokens": 65 + "completion_tokens": 50, + "total_tokens": 318 }, "service_tier": "default", - "system_fingerprint": "fp_f0bc439dc3", - "id": "chatcmpl-D0vCkvp43gfSgGwthRyPn2rRIxp09", + "system_fingerprint": "fp_109d5ede69", + "id": "chatcmpl-EQT2uKzFSSRll5fbis9htIvBkSSNi", "object": "chat.completion" } \ No newline at end of file diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr index 300b25162..6eea8d177 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithMetadataFilters.httprr @@ -1,5 +1,5 @@ httprr trace v1 -431 64212 +431 64280 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -11,20 +11,22 @@ Content-Type: application/json Content-Length: 63324 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:31 GMT +Date: Mon, 21 Sep 2026 07:48:10 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 57 +Openai-Processing-Ms: 115 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-6b489b9458-tzj4z +Via: envoy-router-7d5f5f44cf-kcjq7 X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 77 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 @@ -32,9 +34,14 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999955 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_c01bb7e609204d759fd650266e4533c0 +X-Request-Id: req_7642a9d75e4c4d2f9b51bb9f50b91035 { + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 43, + "total_tokens": 43 + }, "object": "list", "data": [ { @@ -52,13 +59,8 @@ X-Request-Id: req_c01bb7e609204d759fd650266e4533c0 "index": 2, "embedding": [0.014424977, -0.008803002, -0.0020790275, -0.028590279, 0.0013365176, 0.030901391, -0.019891147, -0.011133589, -0.002213734, -0.007063175, 0.0026779042, 0.0068814023, -0.015970046, 0.02278653, -0.011217983, 0.002093634, 0.02595457, 0.0029603012, 0.03388766, -0.012126848, -0.028564312, 0.014996263, -0.0065178564, 0.0009299631, -0.01859277, -0.011140081, 0.010244201, -0.017969549, 0.0022461936, 0.021085655, 0.014801507, -0.01807342, 0.004550814, -0.03173235, -0.01825519, 0.0014103629, 0.017450197, 0.002220226, 0.023604508, -0.01175681, 0.0047488166, -0.003031712, 0.0005169166, -0.022929352, -0.012730594, 0.016710121, 0.028434472, 0.0028759066, -0.01175681, 0.01498328, 0.0054337108, 0.012393015, -0.016969798, -0.015970046, 0.0038821495, -0.021566054, 0.014386025, 0.023825232, -0.017865678, -0.015684403, -0.0049305893, 0.0021114869, -0.0017804005, 0.013555064, 0.010062427, -0.0075760344, 0.0056674187, 0.0032151078, 0.00063011894, 0.00807591, 0.03334234, 0.034978297, 0.006641202, 0.0135940155, 0.02749964, 0.010101379, -0.0058816513, 0.006193262, -0.014100382, -0.00093077455, 0.0072124884, -0.019566553, -0.018761558, -0.00091454486, 0.01498328, 0.0016797762, -0.012464426, 0.00979626, -0.013581031, -0.018346077, 0.00022701324, 0.038198274, 0.023150075, -0.0035413252, -0.00074291555, 0.02478603, 0.012438459, 0.013957561, 0.030174298, -0.021007752, 5.3558084e-05, 0.011620481, -0.027837219, 0.0016124229, -0.031498645, -0.022397017, 0.008932839, -0.0013697885, 0.028720116, -0.020916866, -0.034043465, 0.034432977, 0.033524115, -0.0282527, -0.017606003, -0.029447207, 0.006261427, -0.01698278, -0.029758818, 0.0028337094, 0.0039470685, 0.04014584, 0.020501385, -0.010004001, 0.032563314, -0.007647445, -0.01234108, -0.019371796, -0.018956315, 0.012367048, -0.014528847, 0.02357854, 0.018190272, 0.025318366, -0.021916617, 0.0018274667, -0.0064983806, -0.0006078031, -0.015528598, -0.026240215, 0.0045735356, 0.009101628, -0.018878413, -0.014178285, -0.0008650442, 0.028720116, 0.01663222, 0.01615182, -0.019047203, -0.014775539, 0.0060471944, -0.023903135, 0.010685649, -0.0089652985, -0.0062776566, 0.020488402, -0.020436466, 0.011049194, -0.035212006, -0.010653189, -0.010133838, -0.008264175, 0.0131460745, 0.005777781, 0.023877166, 0.02474708, -8.064143e-05, 0.012315113, -0.010906373, -0.0047585545, -0.006946321, 0.031888157, -0.017164554, 0.024292648, -0.013308372, 0.02124146, 0.009770293, -0.0007161365, -0.01825519, -0.0054629245, -0.024448453, -0.015749322, 0.019475667, -0.0056284675, 0.019099137, -0.01433409, 0.022539837, -0.0060991296, 0.0077383313, 0.0041126115, 0.017229473, 0.022384033, -0.02086493, -0.02457829, -0.6892828, -0.034796525, 0.012633216, -0.0039048712, 0.0015012493, 0.020774044, 0.007069667, 0.016073916, -0.00097053737, -0.025305383, -0.010971292, 0.00041142345, 0.01663222, 0.0022072422, 0.009965049, -0.016281657, -0.007881153, 0.006407494, 0.00862772, 0.0007490017, 0.0022380787, 0.017774792, -0.017008748, 0.012406, 0.016138835, 0.012633216, 0.015074166, -0.0045735356, -0.012678659, 0.022254195, -0.011380281, 0.024734097, -0.008582277, -0.019384779, 0.043158077, 0.008342077, -0.010880406, 0.011659432, 0.009367796, 0.030953325, -0.015671419, -0.014476912, 0.0032459444, -0.027863186, -0.011691892, 0.0027233474, 0.025941588, -0.02305919, 0.01615182, 0.00082406413, 0.038795527, -0.021656942, 0.001230213, 0.0025805258, 0.016658187, 0.0076344614, 0.020838963, -0.008101877, -0.006829467, 0.010153314, -0.0065632993, -0.0059790295, -0.012607248, -0.015139084, -0.014230221, 0.0006171352, -0.033627983, -0.020709125, -0.009504125, -0.0031177297, -0.007413737, 0.010400006, -0.027421739, 0.015892144, 0.016203754, -0.008809493, 0.014178285, -0.011523102, -0.013081156, 0.01615182, 0.008621228, -0.02395507, -0.040950835, -0.009783276, 0.032900892, -0.017346326, -0.030979292, -0.007868169, 0.030511877, 0.0026681663, 0.039262943, 0.0061965077, -0.027317869, -0.0068619265, -0.008958806, 0.025928603, -0.015918111, 0.0029083663, 0.01646343, -0.02069614, -0.001459052, -0.01481449, 0.0022608002, -0.006835959, 0.04227518, 0.014048447, -0.012698134, 0.029057695, 0.003202124, -0.017774792, 0.031135099, -0.010302627, -0.010523352, 0.0040736604, 0.016645202, -0.03388766, 0.05406445, 0.016788024, 0.0066866456, 0.0005347693, 0.0025058691, -0.0021244707, 0.00013369233, -0.008147321, 0.012185276, 0.01667117, -0.00687491, -0.0228904, -0.017138587, 0.005644697, -0.004609241, -0.01577529, 0.018644705, 0.0017706626, 0.00035887974, -0.011841205, 0.0180085, -0.008958806, 0.021085655, -0.016242705, -0.030148331, -0.01261374, -0.03194009, 0.010250692, -0.0069138617, -0.02814883, -0.03058978, -0.0075046234, -0.030252201, 0.02495482, -0.027811252, -0.011425724, -0.025474172, 0.022630725, 0.0081667965, -0.0020595517, -0.021423234, 0.0020822734, -0.016619235, 0.016476413, 0.0047682924, 0.008322601, -0.005200003, -0.009322353, -0.004265171, -0.029083662, -0.010705125, 0.032771055, 0.0019475666, -0.0272919, 0.00384969, -0.0008999381, -0.005183773, -0.012620232, -0.023942085, -0.0038626739, -0.009030217, -0.027188031, 0.0048169815, -0.005430465, -0.002166668, 0.015385777, 0.003570539, -0.009646947, 0.03503023, -0.003388766, 0.013736837, 0.028382538, -0.008186271, 0.019657439, -0.015749322, 0.0026389528, -0.0074851476, -0.0035835225, 0.0027233474, -0.0034764064, 0.0017300884, 0.008848445, 0.0069073695, 0.0031940092, 0.01773584, -0.012938335, 0.032615248, -0.016865928, 0.0065795295, -0.035861194, 0.011211492, -0.0134771615, 0.013223978, 0.036614254, 0.003153435, -0.017385278, -0.017411245, -0.015100134, 0.019164056, 0.018566802, -0.020566303, 0.02224121, -0.008608244, -0.017190522, 0.011016735, 0.014347075, 0.018475916, -0.0019021234, -0.0031761567, 0.0004211613, 0.03186219, 0.017995516, -0.016749073, -0.012925351, -0.016995765, 8.611896e-05, -0.0063945106, 0.023539588, -0.030745585, -0.012074913, 0.0022413246, -0.045910638, 0.016762057, 0.024032973, 0.0076149856, 0.02351362, 0.020877915, -0.010607746, 0.013879659, 0.011159557, 0.017476164, -0.0007396696, -0.0153078735, 0.01089339, -0.014217236, 0.0079071205, -0.009582028, 0.014879409, 0.043911137, -0.0025010002, 0.042742595, 0.011386773, 0.04887094, 0.020319613, -0.012789021, -0.016307624, 0.017567052, -0.00070152973, 0.005901127, -0.013684901, 0.009926098, -0.01433409, 0.006355559, -0.0013973791, 0.004086644, 0.00721898, 0.019332845, -0.025591025, -0.00025987843, -0.011062179, -0.011821729, -0.0040833983, 0.010159806, 0.011964551, -0.012431967, -0.038042467, 0.014217236, -0.0025285906, -0.0005712862, -0.0130292205, -0.031680416, 0.012626723, -0.0049370816, 0.004495633, 0.017112618, 0.0075176074, 0.024007006, -0.004213236, 0.013866674, -0.03503023, -0.00074494426, 0.0068619265, 0.020332595, -0.0021488152, -0.004664422, -0.016554317, -0.03323847, -0.012568297, 0.019631471, 0.011328346, -0.013009745, 0.008634212, -0.01825519, -0.015593517, -0.014853441, 0.010692141, -0.014100382, -0.002973285, -0.01842398, -0.01577529, -0.012412491, -0.012055437, 0.030901391, -0.002976531, 0.003791263, -0.013516112, -0.014009496, 0.001605931, 0.069333375, 0.009283401, 0.00419376, 0.01471062, 0.006375035, -0.007433213, -0.0209688, 0.003437455, 0.0004002655, 0.012594264, 0.0014858311, -0.007167045, 0.014918361, 0.001751187, -0.0031290904, 0.00015783405, 0.024123859, 0.015346825, 0.031368807, -0.016112868, 0.0015028722, 0.008205747, -0.010406498, 0.008329093, 0.006887894, 0.0045767818, 0.02996656, 0.0018485653, 0.030563813, -0.0027412002, -0.0021196017, 0.014775539, -0.003677655, -0.012892891, -0.018852444, 0.005832962, -0.011334837, 0.0037101144, 0.016099885, -0.0020011247, 0.031187033, 0.012827972, 0.007894137, -0.016710121, 0.0013381406, 0.01660625, -0.0046968814, 0.014827474, -0.013879659, -0.007420229, 0.020955818, 0.004904622, 0.0027071177, -0.01996905, 0.0143211065, -0.00039985977, -0.012237211, 0.002744446, -0.015242955, -0.013632966, 0.006482151, -0.010510368, 0.010698632, -0.018060435, -0.00849139, -0.008458931, 0.0019605504, -0.009763801, -0.02017679, 0.0010192265, -0.013905626, -0.006537332, -0.028382538, -0.0041158576, 0.018462932, 0.013568047, 0.012107372, -0.010425974, -0.0025496893, 0.03791263, -0.007920104, 0.011185524, -0.012003503, -0.010419481, -0.0033498146, 0.010387022, 0.034458946, -0.016320609, -0.005245446, 0.0060277185, 0.025889652, -0.008121353, -0.00017203506, -0.026486907, -0.0066866456, -0.011607497, 0.017891645, 0.013055189, -0.014996263, -0.009536585, 0.004245695, -0.025188528, -0.007777283, -0.008147321, 0.010497384, 0.012146324, 0.029836722, 0.017060684, -0.016956814, 0.0112439515, 0.01780076, -0.013152567, 0.004258679, 0.0017917613, -0.006952813, 0.013619983, -0.015814241, 0.01354208, 0.010231216, -0.025889652, -0.0005595197, -0.04344372, 0.030174298, 0.0034017498, 0.00040635167, 0.0030787783, 0.021202508, -0.014035463, 0.0037425738, 0.00076360843, 0.0018469424, 0.021228475, 0.0003767324, -0.019215992, -0.046144344, -0.020631222, 0.037237473, -0.00433009, -0.015424727, -0.0042878925, -0.0011912616, 0.008906871, 0.008919856, 0.0023159813, -0.022202259, -0.020215742, 0.00091454486, -0.0005136707, 0.0023987528, 0.015515614, -0.019566553, 0.0003276375, -0.014009496, 0.015957063, -0.0052097407, -0.00537853, -0.008471915, -0.028434472, 0.01460675, 0.008809493, 0.012821481, -0.009945573, 0.0033433228, 0.014879409, -0.0018323356, -0.0011855812, -0.021189526, 0.0034601768, -0.03791263, 0.019839212, 0.02522748, -0.0014833966, 0.025720863, -0.00769938, 0.003340077, 0.008062926, -0.0038302145, -0.00169276, -0.02739577, -0.020423481, -0.007167045, 0.017008748, -0.02305919, -0.006680154, 0.010523352, 0.00035218496, 0.02034558, 0.014541831, -0.004080152, -0.010198757, 0.026694646, -0.013529096, 0.022007503, -0.007063175, 0.016554317, -0.012074913, -0.02343572, -0.0059303404, 0.0006666358, -4.3718814e-05, 0.015762307, 0.002106618, -0.011419232, -0.03303073, 0.009296385, 0.018242208, 0.017489148, 2.9162782e-05, -0.006478905, -0.024591275, -0.0019199761, -0.023747329, -0.027421739, -0.036276676, 0.0061088675, -0.0008252814, -0.0389773, 0.025045708, -0.0036614253, -0.021656942, 0.0045930115, 0.0043528113, 0.029265435, -0.007121602, 0.01780076, 0.011562054, -0.008290142, -0.027473673, 0.0030203513, -0.011205, -0.0039568064, 0.014191269, 0.012711118, -0.017580034, 0.01189314, 0.012457934, 0.029784786, 0.028590279, 0.0029521864, 0.0051642978, 0.012698134, 0.02055332, -0.026642712, -0.004596257, -0.012295637, 0.019267926, -0.010205249, -0.028330602, 0.014632718, -0.0065632993, -0.016177787, 0.0055732867, -0.04448242, 0.012646199, 0.008854936, -0.005329841, -0.0022429475, -0.011140081, -0.0194497, -0.0008691016, -0.0021098638, 0.027551576, -0.0015402007, 0.013568047, 0.0060471944, 0.0010646698, -0.009504125, -0.0014209122, 0.010555811, 0.02698029, -0.0049305893, -0.0072124884, -0.0052876435, 0.042560823, 0.038925365, -0.021877665, -0.0039957576, -0.013555064, -0.0013292142, -0.0065178564, 0.016281657, 0.008218731, -0.0050474433, 0.027317869, -0.012769545, 0.00046295283, -0.024396518, 0.0037588037, -0.0053623, -0.0027769054, -0.0038659198, -0.0033222241, 0.0072709154, -0.0002022629, 0.00096161105, -0.0055505647, 0.018307127, 0.0008918232, -0.0074461964, 0.022903383, -0.013308372, 0.013853691, 0.00023756256, 0.018657688, -0.0055148597, -0.008127845, 0.029343337, -0.014996263, -0.020877915, -0.012548821, 0.014191269, 0.001983272, 0.0032232227, -0.015268923, 0.0037295902, -0.009607996, 0.013529096, -0.022942334, -0.014373042, 4.305948e-05, -0.02330588, 0.01625569, 0.026616745, -0.02649989, 0.016294641, 0.0114322165, -0.013022729, -0.0010297758, -0.034926362, -0.00443396, -0.021592023, 0.009835212, 0.015515614, -0.012172291, -0.006404248, -0.009114612, 0.0031940092, 0.008205747, -0.004833211, 0.01996905, 0.013736837, -0.003388766, -0.023812247, 0.015814241, -0.01735931, 0.007452688, -0.008257682, -0.010088395, -0.010698632, -0.00769938, -0.0007173537, -0.014191269, 0.0024766556, -0.041989535, -0.019683408, -0.0059335865, -0.027110128, -0.01299027, 0.010783027, -0.0016164803, 0.013658934, -0.01529489, -0.0066087428, 0.010393514, 0.015165052, 0.006303624, -0.028460441, -0.022046454, -0.006303624, -0.0170477, 0.002171537, 0.0012496886, -0.009062677, -0.019904131, 0.006894386, -0.015242955, 0.011471167, -0.0037295902, -0.015216988, -0.0035478172, -0.00077212905, 0.013529096, 0.02241, 0.0070242235, -0.002510738, -0.027889155, -0.005732338, 0.0023240962, 0.030330105, -0.020228725, -0.0010354563, 0.010601254, -0.023747329, -0.008368045, -0.009614487, -0.011399757, -0.011828221, 0.018268175, 0.021747828, -0.008134336, 0.0030154823, 0.031394776, 0.0005708805, -0.016865928, -0.0013852068, -0.00687491, -0.021838713, -0.004547568, 0.014450944, 0.0005436957, 0.009413239, -0.024967805, 0.016060933, -0.027188031, 0.0040022493, -0.01343821, -0.012763053, -0.011503627, 0.031109132, 0.027239965, -0.015061182, 0.0031096148, -0.03991213, 0.0047520627, -0.0048559327, -0.011620481, -0.0016278411, -0.034978297, -0.020254694, -0.0007765922, 0.0019362058, -0.02962898, 0.0038951333, 0.011776286, 0.015697388, 0.026902387, 0.2141804, 0.009367796, -0.010335087, 0.02708416, -0.0032345837, 0.038795527, 0.02113759, -0.0070891427, 0.03269315, 0.023760313, -0.01763197, 0.0077513154, 0.0051091164, -0.000626873, 0.0002450688, 0.0016862681, -0.031472676, -0.011750319, -0.025292398, -0.014749572, 0.0038853954, -0.01715157, 0.009069169, 0.009121104, 0.030667683, 0.0175281, -0.0051578055, 0.0017414491, 0.031680416, 0.02024171, -0.017203506, -0.0107246, -0.0051123626, -0.011639956, 0.009121104, -0.0037652955, -0.009049693, -0.01615182, 0.02942124, 0.027110128, 0.01832011, -0.0061575565, -0.01832011, -0.011678908, -0.0071605532, 0.0068034995, -0.017657937, -0.007569542, 0.009835212, 0.0059790295, -0.026590776, -0.007881153, 0.03503023, 0.016281657, -0.004372287, 0.02739577, 0.020527352, -0.01412635, 0.00934832, 0.00010559463, -0.024513371, 0.025188528, -0.02024171, 0.010049444, -0.008932839, -0.01625569, -0.0100689195, -0.005021476, 0.01529489, -0.024760064, 0.022630725, 0.0045702895, 0.004787768, 0.0145807825, -0.016047949, -0.014424977, 0.020371547, -0.00063214765, 0.0066736615, 0.0029927606, -0.011639956, 0.0093872715, -0.015905127, 0.009575536, -0.0010979407, -0.033160567, 0.0077707907, -0.0029635471, 0.009095136, 0.004508617, 0.005884897, -0.007004748, 0.008887396, 0.009309368, 0.022332098, 0.023461686, -0.01687891, 0.007257932, -0.024084907, 0.014411993, -0.032433476, -0.05520702, 0.018242208, 0.0012294014, -0.0036841468, 0.007660429, -0.00035380793, 0.019995017, 0.034770556, 0.0024182287, 0.011217983, -0.0120878965, 0.00934832, 0.0037880172, 0.01715157, -0.013970545, 0.007420229, -0.0123475725, -0.0080239745, -0.0073877694, -0.006420478, -0.022864433, -0.008647196, 0.018501883, 0.0014054939, -0.006719105, -0.02389015, 0.018112369, -0.008783526, -0.039678425, 0.03326444, -0.0053395787, 0.026434971, 0.00065446354, -0.0072059967, 0.010094887, -0.0009397009, 0.0023143583, 0.0069073695, 0.0041840225, 0.0006378281, -0.023669427, 0.016580284, 0.00079403917, 0.006241951, 0.0005335521, 0.0027217243, -0.021566054, -0.015242955, -0.039029237, -0.002796381, -0.008530342, -0.016385527, -0.0065632993, 0.017073667, -0.020137839, -0.010536335, 0.0028369555, 0.005479154, 0.020709125, -0.02468216, -0.0042327116, 0.00075427635, 0.0061023757, -0.0045118625, 0.0031972553, -0.16691944, 0.008257682, 0.0155675495, -0.015905127, -0.007861678, 0.02161799, 0.022864433, 0.02505869, -0.0137108695, 0.02516256, 0.013295388, 0.028538343, -0.046404023, -0.016788024, 5.026142e-05, 0.027162062, -0.0059887674, -0.011620481, 0.01959252, 0.020202758, 0.012289145, -0.011568545, 0.026357068, -0.0020514368, 0.013451193, 0.0024263435, -0.011613989, 0.015035215, -0.010990768, -0.008335585, 0.009471666, 0.010023477, 0.016515365, 0.009750817, 0.026616745, 0.006063424, -0.004586519, 0.0012407623, -0.016346576, 0.00034893904, 0.00807591, 0.0069593047, 0.0019102383, 0.011451691, -0.021384282, 0.01687891, 0.0016611121, 0.0124189835, -0.019215992, -0.008335585, 0.014788522, -0.041833732, -0.0032459444, -0.006034211, 0.0057583055, 0.024071924, 0.014554814, 0.0057388297, -0.013866674, 0.018540835, -0.0016797762, -0.0408989, -0.0063847727, 0.015723355, -0.013684901, -0.014658685, 0.0051805275, 0.012328097, -0.016398512, -0.0027558068, -0.014165301, -0.031836223, 0.018865429, -0.01343821, 0.011938583, 0.01769689, -0.00866018, -0.007952563, -0.011802254, -0.021955568, 0.006647694, 0.0360949, -0.005839454, 0.018891396, -0.021955568, 0.01134133, 0.009134088, 0.013801755, -0.025487155, -0.019436715, 0.025279416, -0.04214534, 0.0024620488, -0.032121867, -0.0070242235, 0.006822975, -0.0010906373, 0.0011182278, -0.0021828976, 0.0019134842, 0.0064107403, 0.0012391392, -0.015411744, 0.013133091, 0.02749964, 0.013152567, -0.006238705, 0.01715157, 0.011860681, -0.003930839, -0.011295887, 0.029395273, -0.00721898, 0.008777034, 0.0073228506, -0.010731092, 0.010458433, -0.022825481, 0.017476164, -0.005174035, 0.031290904, -0.0037652955, -0.008238207, 0.013736837, 0.0057842727, -0.019735342, -0.10335087, -0.0049273437, 0.026201263, 0.010237709, -0.0030544337, 0.013775788, 0.007965548, 0.035861194, -0.016891895, 0.030901391, -0.013321356, -0.019683408, -0.017294392, -0.01062073, 0.016891895, -0.015152069, 0.016242705, -0.030200267, -0.04739079, 0.002871038, 0.0112439515, -0.0045767818, 0.0028272176, -0.009711865, -0.022981286, -0.013347323, -0.019021234, 0.018346077, -0.0005051501, -0.0016667924, 0.020890899, -0.009828719, 0.014373042, -0.0077318395, -0.009088645, -0.013282404, 0.0055732867, -0.00064229127, 0.008692639, -0.021436216, -0.013275913, 0.0054044975, 0.022422984, -0.023500638, 0.0052843974, -0.01062073, -0.003794509, 0.008127845, -0.0035770307, -0.03835408, 0.003327093, 0.011393265, -0.007777283, -0.0093872715, 0.03973036, -0.026798517, 0.008809493, 0.013723853, -0.02553909, 0.010925849, 0.0029992526, 0.0031842715, 0.019657439, 0.013308372, -0.017398262, -0.017164554, -0.024123859, -0.029187532, 0.023240961, -0.023656443, -0.014944328, 0.015931096, -0.024889901, 0.0156065, -0.021812746, -0.008809493, -0.013736837, -0.011808746, 0.009465174, -0.023929102, -0.03588716, -0.019761309, 0.0032637971, -0.003262174, 0.0051805275, 0.02814883, -0.004670914, -0.012354065, 0.03908117, -0.013957561, 0.002213734, 0.03069365, 0.013159059, -0.02107267, -0.017372295, 0.01694383, 0.002687642, -0.0017674167, 0.012665675, -0.011821729, -0.03058978, -0.016099885, -0.03248541, 0.019527601, -0.0069398293, 0.00013602535, 0.0060601784, 0.0015913242, -0.010880406, 0.0034861444, -0.014087399, 0.002341949, -0.0057972567, -0.0010622353, -0.02203347, -0.01732036, -0.010906373, 0.0069657965, 0.010958308, 0.0042781546, 0.013879659, 0.0044631734, 0.001253746, -0.0014136088, 0.0107246, 0.008270666, -0.03482249, 0.010607746, -0.026279166, -0.022526855, -0.014230221, -0.008640704, 0.019293893, -0.022942334, 0.0060991296, 0.033524115, -0.017748823, -0.02395507, 0.001635956, 0.016762057, 0.009439207, -0.025850702, -0.04048342, -0.025889652, 0.026201263, -0.016073916, -0.016697139, 0.023734346, -0.012256686, 0.012827972, 0.00903671, -0.0026438218, 0.013840707, 0.02076106, 0.024409503, -0.004911114, -0.0066671697, -0.018449947, 0.022098389, 0.0069073695, 0.00501823, -0.015359809, -0.0035413252, -0.00097540626, 0.005917357, 0.019917116, 0.015113117, 0.01625569, -0.007465672, -0.0014858311, 0.00396979, -0.012568297, -0.013775788, 0.003794509, 0.028408505, 0.017852694, 0.027577544, -0.009640455, -0.0037036226, -0.0069982563, -0.008056434, 0.01615182, 0.026746582, 0.009062677, -0.009160055, 0.0056966324, 0.028953824, 0.0238512, -0.041600022, -0.016125852, 0.0068684183, 0.012146324, -0.016917862, 0.004310614, -0.009770293, 0.01571037, 0.010166298, -0.006991764, -0.0025837717, -0.010679157, -0.011763303, 0.034381043, -0.0026097393, -0.014450944, 0.00042075553, -0.020293644, -0.011419232, -0.008601753, -0.023864184, -0.002218603, -0.0008991266, 0.009380779, 0.0051058703, -0.011107622, 0.010107871, 0.011217983, 0.0033189782, 0.008192764, -0.0071475697, -0.01917704, -0.021085655, 0.010296135, 0.0053460705, -0.0075435746, 0.009224974, -0.005544073, 0.03326444, 0.007926596, 0.017670922, -0.0052876435, 0.015113117, -0.0040119872, 0.02076106, -0.0066931373, -0.015697388, -0.010224725, -0.007627969, -0.028330602, -0.008861428, 0.02931737, -0.006310116, 0.05406445, -0.010464924, -0.02340975, 0.025616992, -0.010912865, 0.014100382, 0.014762555, 0.0016505627, -0.018891396, -0.023799265, 0.013386275, 0.020787029, 0.032459445, -0.01471062, -0.02299427, -0.01821624, -0.030252201, 0.018034467, -0.022020487, -0.010432465, 0.02942124, 0.022332098, 0.005245446, 0.0052422, -0.023994021, -0.01498328, 0.022864433, 0.0029116122, -0.0024880164, -0.015697388, 0.010581778, -0.00515456, -0.019709375, -0.015814241, 0.010049444, -0.03635458, -0.011380281, -0.028486408, 0.00804345, 0.019644456, 0.017216489, 0.022539837, -0.017411245, -0.030979292, 0.011406248, 0.0023435717, -0.008731591, 0.009335336, -0.022968303] } - ], - "model": "text-embedding-ada-002-v2", - "usage": { - "prompt_tokens": 43, - "total_tokens": 43 - } -}278 22074 + ] +}278 22141 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -70,20 +72,22 @@ Content-Type: application/json Content-Length: 21186 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:33 GMT +Date: Mon, 21 Sep 2026 07:48:11 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 40 +Openai-Processing-Ms: 85 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-6558979846-vsb88 +Via: envoy-router-7d5f5f44cf-wqprl X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 62 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 @@ -91,23 +95,23 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999991 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_0996ff38e0bf486db41992938b2c629d +X-Request-Id: req_504948cceb074a42836386ac323d8102 { + "usage": { + "prompt_tokens": 9, + "total_tokens": 9 + }, "object": "list", "data": [ { + "embedding": [0.02230405, 0.008771547, 0.014554557, -0.011423711, -0.008448112, 0.015473112, 0.0068826885, -0.008881515, 0.004744786, -0.005595419, -0.016676288, 0.01731022, -0.017698342, 0.024891527, -0.0063878335, -0.0012743324, 0.031618968, 0.021294935, 0.013648941, -0.0046218806, -0.020337569, 0.025512522, -0.01429581, -0.001887241, -0.01562836, -0.008959139, 0.017374907, -0.008868577, -0.011934738, 0.006138789, 0.0034187038, -0.016792726, -0.012723918, -0.0168186, -0.016844476, 0.0169221, 0.010860935, 0.0039006216, 0.011591896, -0.014606307, 0.015718922, -0.0003416278, -0.00038286572, 0.00014958851, -0.0055177948, 0.007827118, -0.0011853878, 0.0067468463, -0.039355524, 0.01296326, -0.008124677, 0.0066562844, -0.012885635, -0.052706905, -0.026172329, 0.00087650784, 0.008674516, 0.01811234, -0.011714802, -0.0054789823, -0.0041917125, -0.0013471051, -0.014502808, 0.0060676336, -0.0006072485, -0.001574318, -0.0084093, 0.010860935, 0.017038535, -0.0021136452, 0.021424308, 0.028125875, 0.017581906, -0.00033576557, 0.029419612, -0.008752141, -0.020712754, -0.0023740102, 0.007109093, 0.00022701068, 0.0044892724, 0.0069279694, -0.03260221, 0.008758609, 0.018733334, 0.013441943, 0.0025923285, 0.018371087, -0.034594566, -0.0030613088, -0.013196132, 0.051439043, 0.030040607, -0.021760682, -0.012445764, 0.0054854513, -0.0074325274, 0.02478803, 0.0125169195, -0.013791252, 0.016119981, -0.015291989, -0.031308472, 0.005977072, -0.017129097, -0.023222605, 0.0037486071, 0.008480456, 0.032679833, -0.040105894, -0.03487919, 0.049187936, 0.039459024, -0.038449906, -0.021980617, -0.0070767496, 0.0012702894, -0.024141159, -0.037337292, 0.0070055937, -0.0022672766, 0.040468138, 0.017982965, -0.027530754, 0.04486685, -0.002137903, -0.026482826, -0.024503406, -0.024956215, 0.005016471, 0.010802716, 0.014929742, 0.013467818, 0.021243185, -0.008920327, 0.0013099102, -0.006513973, 0.024425782, -0.03793241, 0.00328933, 0.013545441, 0.006119383, -0.0047900667, -0.008059991, -0.0056406995, 0.030972099, 0.0048094727, -0.0027427257, -0.020402256, -0.0018662177, 0.005673043, -0.012717449, 0.023817725, 0.012827417, 0.0014692018, 0.016999723, -0.0019567795, 0.017827716, -0.044219982, 0.0069538443, -0.04931731, 0.0048968, 0.030402854, -0.005876807, 0.012342265, 0.028772743, 0.020686878, 0.0049744244, -0.010395189, 0.0075101517, -0.032576334, 0.027039135, -0.020466942, 0.03330083, 0.00044795693, 0.034930937, 0.007859461, -0.016158793, 0.003978246, 0.01157249, -0.0095930705, -0.0068438766, -0.008538674, -0.009146731, 0.0009783898, -0.017129097, 0.0017497813, -0.001466776, 0.024011785, -0.004550725, 0.01143018, 0.027763627, -0.015059115, -0.0069991252, -0.66901803, -0.032653958, 0.004961487, -0.0085904235, 0.0080988025, 0.013390193, 0.0239471, 0.028255248, -0.003522203, -0.016003545, 0.009386073, 0.007063812, 0.0042078844, -0.023934161, 0.0125233885, -0.021825368, -0.0053981235, 0.010893278, -0.00018577276, 0.0017788904, -0.008765078, 0.019108517, -0.0018112338, -0.00398148, 0.021411372, 0.022834484, 0.009638351, -0.016495166, -0.015020303, 0.012102923, -0.015304926, 0.011792426, 0.013099102, -0.023106169, 0.025447836, -0.003709795, -0.024555156, 0.028824493, 0.0054886853, 0.029962983, -0.028384622, -0.0021750978, 0.017323159, -0.02305442, -0.010666873, 0.010847997, 0.017568968, -0.00046129862, 0.046833333, -0.014024125, 0.012769199, -0.030014733, -0.015718922, 0.01844871, 0.018254649, 0.015990607, 0.046212338, 0.009858287, -0.008467519, 0.0031146754, -0.009987661, -0.018086463, 0.0013495309, 0.002897974, 0.007445465, 0.00079120195, -0.0252279, -0.023507228, -0.020104695, -0.022329926, -0.0035933587, 0.016158793, -0.03904503, 0.02423172, 0.0061064456, -0.010796247, 0.029911233, -0.007102624, -0.0024710405, -0.017206721, 0.002055427, -0.015123802, -0.02853987, -0.015123802, 0.01741372, -0.010472813, -0.014670994, -0.020893876, 0.015757734, 0.026987385, 0.009612476, 0.015046178, -0.01839696, 0.0003299033, -0.017103223, 0.03216234, -0.01646929, 0.0032181744, -0.011320212, -0.025033839, 0.000618973, -0.03270571, -0.0037453729, 0.013312569, 0.02913499, -0.0064428174, -0.0077494932, 0.031877715, 0.015641298, -0.014399309, 0.0004980893, -0.013176726, -0.021631308, 0.0009832412, 0.014502808, -0.022498112, 0.04877394, 0.013234944, 0.024218785, -0.015874172, 0.007607182, -0.0003988353, 0.014231123, -0.0182029, 0.020570442, 0.008965608, -0.013648941, -0.009146731, -0.009599539, 0.024218785, -0.011967081, 0.011346086, 0.010207596, -0.0065269107, -0.030583978, 0.0065269107, 0.01662454, -0.026094705, 0.013881814, -0.013312569, -0.01687035, 0.0033507827, -0.026651012, 0.007833586, -0.023481352, -0.027065009, -0.028358746, -0.007128499, -0.027686004, -0.012329328, -0.018332275, -0.025991205, -0.042977992, 0.007671869, 0.013299632, 0.0028947399, -0.015990607, -0.0078077116, -0.028332872, 0.006614238, 0.024956215, 0.011967081, -0.015421363, 0.003324908, -0.010304627, -0.024205847, -0.009981193, 0.02903149, 0.00025308758, -0.042822745, -0.0026004142, 0.0050229398, -0.002137903, 0.013868877, -0.011837707, -0.00040328252, -0.0031454016, -0.037984163, -0.006850345, -0.010298158, 0.012568669, 0.029393738, -0.015304926, 0.0046024746, 0.03423232, 0.012549263, 0.022679236, 0.023274355, 0.0025680708, 0.010511625, -0.015123802, -0.004977659, 0.013545441, -0.0077883056, 0.008726266, -0.0033281422, 0.022265239, -0.012872698, -0.00095332356, -0.011087338, 0.029600736, -0.0019017955, -0.005094095, -0.011514273, 0.029755985, -0.033870075, 0.009159668, -0.005210532, 0.013907689, 0.025253775, -0.007704213, -0.025745396, 0.0020344038, -0.022627486, 0.01641754, 0.010110566, -0.01687035, 0.028358746, -0.0054886853, -0.00026905717, 0.01063453, 0.011954144, 0.03635405, 0.0006104828, -0.015887108, 0.0037874193, 0.006649816, 0.020906813, 0.009787131, -0.011281399, -0.02804825, -0.0077624307, 5.4630127e-05, 0.006513973, -0.015279051, 0.0025179384, 0.008959139, -0.016404605, -0.0049841274, 0.0050714547, 0.020402256, 0.030972099, 0.022950921, 0.0077818367, 0.03244696, -0.0034963281, 0.00796296, 0.026288766, -0.02449047, 0.013726565, -0.008881515, -0.012374609, -0.024115285, 0.0058250576, 0.018086463, 0.0038359344, 0.032628085, -0.0063781305, 0.0040396983, 0.010906215, -0.0004334024, -0.0010632913, 0.016728038, -0.005912385, -0.0072578727, 0.008913858, -0.023287293, -0.014554557, 0.0029189973, -0.0059447284, -0.012853292, -0.008467519, 0.014774493, 0.0008178853, 0.017129097, 0.0022624251, -0.0077430247, -0.017090285, 0.018358149, 0.0336372, -0.0033895948, -0.02240755, 0.014308748, -0.0011603216, -0.014515745, -0.018422836, -0.018177025, 0.018513398, -0.017646592, 0.0072449353, 0.016326979, -0.0062519913, 0.024154097, -0.0005373058, 0.0018079996, -0.022886233, -0.001822554, -0.0007689658, 0.023222605, 0.005980306, -0.011139088, 0.00031231655, -0.027220257, -0.013855939, 0.016378729, 0.011857113, -0.016947974, -0.008364019, -0.006420177, -0.0251244, -0.023093231, -0.009871225, 0.004013824, 0.011223181, 0.013390193, 0.008053522, -0.019328453, -0.018358149, 0.023584852, 0.004159369, -0.021113811, -0.029238489, -0.011449586, -0.0014821391, 0.05852873, 0.009916506, -0.006306975, 0.017077347, -0.002411205, -0.0194837, -0.017737154, 0.012820948, -0.00930198, 0.010097628, 0.013196132, -0.007859461, -0.007587776, -0.009890631, -0.014748619, -0.0019406077, 0.0066821594, -0.009877693, 0.019328453, -0.007594245, -0.010472813, 0.0090820445, -0.0051523135, 0.02606883, -0.023390792, -0.011113213, 0.022394612, -0.014567495, 0.015123802, -0.01236814, -0.012161141, 0.016262293, -0.0058638696, -0.0024500173, -0.025706584, -0.01697385, -0.016107043, 0.008027648, 0.029238489, -0.0019001784, 0.027479006, 0.0066950964, 0.0009306831, -0.025603084, 0.000605227, 0.0065754256, -0.009974724, 0.02137256, 0.0066821594, -0.013687753, 8.136402e-05, -0.0019858885, -0.003997652, -0.0042984462, 0.0040526357, 9.975937e-05, -0.013273757, -0.024645718, 0.009366667, -0.01741372, -0.0038909183, 0.0034639847, 0.030816851, -0.0052364063, -0.03565543, -0.024063535, -0.0013940032, -0.011798895, -0.0080858655, -0.007794774, -0.0052816872, -0.015343738, -0.042072374, 0.012064111, 0.04719558, 0.024645718, 0.030532228, -0.0120511735, 0.0045442563, 0.01953545, 0.0043987106, -0.010375783, 0.0060223527, -0.006119383, -0.0105310315, -0.0052267034, 0.021036187, -0.012070579, -0.01434756, 0.027789501, 0.026198205, -0.0054304674, 0.02903149, -0.027737753, -0.007937086, -0.009263167, -0.0014675845, 0.02542196, -0.028074125, -0.012665699, 0.017012661, -0.019781262, 0.012588075, -0.035396684, -0.019781262, 0.01018819, -0.0041787755, -0.009418416, -0.03169659, 0.011171431, 0.0006618281, -0.020790378, -0.004023527, -0.014852118, 0.028876243, 0.01627523, -0.026159393, 0.012199954, -0.0047674263, -0.032032963, 0.009780663, -0.03542256, 0.026935635, 0.0014683931, -0.03679392, 0.005372249, 0.011928269, -0.009237292, 0.01890152, 0.008629235, 0.004744786, 0.01800884, -0.027789501, -0.014037062, -0.026935635, -0.007212592, 0.012555731, 0.009334323, -0.015097928, 0.014127624, -0.009935912, 0.019600138, -0.0029545752, -0.015072053, -0.011727739, -0.02631464, 0.011585428, -0.0010333736, 0.0063781305, 0.028229373, 0.01608117, 0.0050358768, -0.03596593, 0.017750092, -0.013073227, -0.019224953, -0.006164664, -0.016145855, 0.011449586, 0.013894751, 0.016042357, 0.0036192334, 0.0073225596, 0.005543669, -0.0065366137, 0.0056665745, 0.009017357, -0.0019470764, -0.027116759, -0.005669809, 0.011902394, 0.012083517, 0.015563673, 0.008933264, 0.01152721, 0.029212615, -0.005317265, 0.00062705885, -0.03482744, -0.026780386, 0.001640622, -0.016999723, -0.011734208, 0.0043696016, 0.0014303896, 0.013713628, 0.0067468463, -0.003897387, -0.015473112, -0.00925023, 0.029652486, -0.014632182, 0.044763353, -0.025344336, 0.014321685, -0.009127324, -0.038812153, -0.023106169, -0.0061873044, -0.020130571, 0.0059447284, 0.008376957, 0.0032197917, -0.02433522, 0.021980617, -0.0027799206, 0.018979143, -0.0007612842, -0.0071996544, -0.018177025, -0.03358545, -0.024050599, -0.022575736, -0.02869512, 0.016585726, -0.014412247, -0.03167072, 0.020454004, 0.0022769796, -0.007102624, -0.010479282, -0.009269636, 0.025163213, 0.013933564, 0.026237017, 0.013881814, -0.0050358768, -0.011714802, -0.022523986, -0.025913581, -0.017918278, 0.021424308, 0.022420488, 0.0047415514, 0.010472813, 0.0135066295, -0.0030499885, 0.012866229, -0.016003545, -0.0012161141, 0.013933564, 0.0068180016, -0.005026174, 0.00945076, -0.017504282, 0.023339042, -0.007950023, -0.008635704, 0.010291689, -0.0005227512, -0.021825368, -0.0012581607, -0.01844871, 0.035629556, 0.01687035, -0.011928269, 0.015744798, -0.016702164, -0.009554259, 0.0026699528, 0.0068891575, 0.035344936, 0.0009694953, 0.0055080913, 0.0076848064, 0.0074389963, -0.015563673, -0.00885564, 0.009431354, 0.029445488, -0.015550736, -0.0043598986, -0.0110355895, 0.020764502, 0.03032523, -0.01454162, 0.002259191, 0.0120252995, -0.01137843, 0.015162615, 0.020001197, -0.0037033265, -0.01741372, 0.0044601634, -0.03037698, 0.00420465, -0.026379328, -0.011714802, -0.00026663142, -0.03423232, 0.0016737741, 0.010265815, 0.024891527, 0.009515447, 0.0052331723, 0.0021136452, 0.028902117, -0.014114686, -0.0052752187, 0.0033895948, 0.01068628, 0.016753914, -0.016495166, 0.00413026, -0.0009694953, -0.041037384, 0.017517218, 0.010311096, -0.033119705, -0.0031890653, 0.022730986, -0.0038941528, 0.004773895, -0.016016481, -0.0038197627, 0.002102325, 0.0012056025, -0.012866229, 0.0041884785, -0.0056924494, -0.017995901, 0.015175552, 0.009683632, -0.0060126497, 0.00791768, 0.0048903315, -0.010252877, 0.012284047, -0.01513674, 0.0017708045, 0.0016066615, 0.018021777, -0.0014675845, -0.015990607, 0.011100276, -0.004366367, -0.008364019, -0.0014643503, 0.009192012, 0.008124677, 0.0036774515, 0.0144898705, -0.0039847144, 0.019651888, -0.03260221, -0.0073743095, -0.014231123, -0.034542818, -0.02641814, -0.020337569, -0.02547371, 0.007633057, -0.010666873, -0.028125875, 0.0021815666, -0.005795948, 0.008668047, -0.018384025, 0.0053690146, -0.0022478707, 0.008900921, -0.0019729512, -0.004476335, 0.026094705, 0.0038068255, -0.0029092943, -0.0078077116, 0.0048968, 0.006239054, -0.017271409, 0.0033863604, -0.0015597634, -0.008739203, -0.018733334, 0.018319337, 0.012109392, 0.011009715, -0.008972077, -0.020686878, 0.00727081, 0.004579834, 0.022562798, 0.02696151, 0.032886833, -0.012723918, -0.027686004, -0.02286036, -0.020466942, 0.014140561, -0.021657182, -0.007801243, 0.030635728, 0.009166137, -0.008829765, -0.031386096, -0.002327112, -0.004269337, 0.0055274977, 0.014231123, -0.00022559565, -0.011274931, 0.004026761, 0.016728038, -0.007044406, 0.0021055595, -0.005391655, -0.011785957, 0.00027896237, 0.008913858, 0.001550869, -0.0038003568, -0.014722744, -0.013338444, -0.016508102, -0.0012403717, -0.007341966, -0.02156662, -0.021087937, 0.024904465, 0.00939901, -0.015990607, 0.0026521639, -0.040778637, -0.020285819, -0.0004916206, -0.0066110035, 0.005158782, -0.030040607, -0.0050358768, 0.0011554701, -0.001466776, -0.018293463, -0.022562798, 0.003690389, 0.023623664, 0.012698043, 0.2370129, 0.008454581, 0.0027119992, 0.04199475, -0.008875046, 0.014205248, 0.027039135, 0.0049291435, 0.016443416, 0.023015607, -0.02750488, 0.0011109979, 0.009386073, 0.010938559, -0.011850644, -0.014554557, -0.01811234, -0.015304926, 0.01310557, 0.0023109403, 0.008021179, 9.2381015e-05, 0.0040041204, -0.021256123, 0.015304926, 0.021993553, -0.0022915343, -0.001701266, 0.019328453, 0.020259945, 0.005411061, -0.020945625, -0.008286395, -0.00024257596, -0.004456929, -0.0085710175, -0.0023869474, -0.0026521639, 0.0222523, 0.024813903, -0.0040688077, -0.0144769335, -0.020997375, 0.014127624, -0.006552785, -0.0051070326, -0.019858886, -0.012782136, 0.01687035, 0.0072449353, -0.017944153, -0.0072772787, 0.02324848, 0.023274355, -4.644319e-05, 0.0061711324, 0.02859162, -0.018138213, 0.00640724, 0.00865511, -0.006119383, 0.035267312, -0.020945625, 0.023636602, 0.010996777, -0.008344613, -0.002513087, -0.00048515192, 0.024425782, -0.012070579, 0.006300506, -0.0031421673, -0.0031648078, 0.015964733, 0.01760778, 0.007937086, 0.026832135, 0.010957965, 0.0095736645, 0.002344901, -0.010977371, -0.0075554326, -0.004421351, 0.028384622, 0.00058056513, -0.017180847, -0.0062455223, 0.008150552, 0.029419612, 0.009631883, 0.00390709, 0.0017643358, 0.0052008284, 0.017193785, 0.015317864, 0.022278177, 0.008422238, 0.00885564, -0.018992081, -0.0023060888, -0.029109115, -0.0115207415, 0.01879802, 0.002307706, -0.02696151, 0.011003246, 0.004211119, -0.021760682, 0.029238489, 0.0044860383, 0.004026761, -0.009192012, 0.008784484, 0.0013325507, 0.0059447284, -0.0029303175, 0.005158782, -0.031618968, -0.017245533, -0.0063231466, -0.008525737, -0.020738628, -0.010841528, -0.0013163789, -0.008234645, -0.025486648, -0.01562836, 0.013674815, 0.0073290286, -0.03780304, 0.0065107387, -0.012892104, 0.024451656, -0.0026861245, -0.0017109691, -0.0021314342, 0.013687753, -0.0080858655, 0.016857412, -0.012601012, 0.008519268, -0.008131146, 0.016546914, -0.0010738029, 0.0052267034, -0.011876519, 0.0044439915, -0.008480456, -0.014451059, -0.027530754, -0.01795709, -0.006219648, 0.0018662177, -0.021152625, 0.026094705, -0.012070579, -0.00045765997, 0.0020667473, 0.028436372, 0.01370069, -0.009463697, 0.0063393186, 0.013817127, -0.0021087937, -0.007503683, 0.0025858597, -0.16487403, 0.0057571363, 0.044219982, -0.03314558, -0.022045303, 0.00796296, 0.0095801335, 0.023558978, -0.014735681, 0.039640147, 0.00035961886, 0.011132619, -0.04572072, -0.0026020315, -0.010847997, 0.0036095304, -0.005391655, 0.019250829, -0.011578959, 0.006921501, 0.011443117, -0.018616896, 0.007037937, 0.014127624, -0.0037712476, -0.019431952, -0.02305442, 0.021644244, 0.01038872, -0.02300267, -0.009489572, -0.0003606296, 0.00051547395, 0.006400771, 0.009813006, 0.0034445787, 0.003968543, 0.0026295234, -0.013868877, 0.00059754547, -0.0077688997, 0.010802716, 0.017827716, 0.03348195, -0.0062778657, 0.020492818, 0.011986487, 0.0009039998, -0.01221936, -0.008933264, 0.009360198, -0.025137339, -0.0054045925, -0.002624672, 0.005540435, 0.02067394, 0.017103223, 0.01953545, 0.0009573665, -0.000321211, -0.008247583, -0.03834641, -0.011766551, -0.0025454303, 0.012406952, 0.009664226, 0.015887108, -0.0031551046, -0.017387845, 0.008985014, -0.00221391, -0.02088094, -0.0061226175, -0.019781262, 0.004903269, 0.011093807, 0.0030790975, -0.026094705, -0.011934738, -0.01009116, -0.002120114, 0.050171178, -0.017646592, 0.0125233885, -0.013674815, 0.01592592, 0.00041803924, 0.004560428, -0.027427256, 0.0015678493, 0.029109115, -0.010052348, 0.00846105, -0.02853987, 0.010744498, 0.0043501956, 0.0054498734, -0.00571509, 0.0004378496, 0.0018079996, -0.013674815, 0.010097628, -0.018862708, 0.021605432, 0.032860957, -0.00930198, -0.016339917, 0.018319337, 0.03749254, -0.005210532, -0.022174677, 0.010699217, 0.009819475, 0.020014133, 0.016184669, -0.005857401, 0.014877993, -0.0061452575, 0.024050599, 0.029471362, 0.04230525, -0.020518692, -0.015473112, 0.016314043, 0.0071802484, -0.016158793, -0.08569723, 0.003531906, -0.0037033265, 0.021346685, 0.0077106813, 0.028798617, 0.021631308, 0.035267312, 0.00687622, 0.01518849, -0.012232297, -0.011669521, -0.01608117, 0.009754788, 0.0008522502, -0.011391367, 0.01083506, -0.032576334, -0.04574659, 0.016145855, 0.000981624, -0.0030241136, 0.012801542, -0.0077300873, 0.006365193, -0.037673663, -0.038605157, 0.0110355895, 0.0035157343, 0.0034154695, 0.02349429, -0.027039135, -0.016986785, -0.013312569, -0.021708932, -0.0149814915, -0.021281999, -0.019263767, 0.011941206, -0.03961427, -0.008991483, 0.018306399, 0.0168186, -0.015563673, 0.015162615, -0.0058379946, -0.016197605, 0.012549263, -0.009386073, -0.022627486, 0.012665699, 0.0045054443, -0.008680985, -0.023416666, 0.026599264, -0.011734208, 0.008564549, 0.030144107, -0.013687753, 0.00895267, -0.0022656594, 0.028617496, -0.0004867691, 0.020945625, 0.0050100023, -0.026482826, -0.025680708, -0.0009444291, 0.009800069, -0.037259668, -0.036198802, -0.003531906, -0.0029384035, -0.013894751, -0.028902117, -0.008182895, -0.013648941, 0.016896224, -0.0016333448, -0.0054983883, -0.017530156, -0.022562798, 0.0057991827, 0.006064399, -0.001644665, 0.03555193, -0.031748343, -0.018772146, 0.0024144393, -0.0015686579, -0.0060417587, 0.019134391, 0.013124976, -0.016249355, -0.025098527, 0.018371087, -0.0025001497, 0.014670994, 0.02734963, -0.01890152, -0.022433424, 0.00079686206, -0.05387127, 0.019315515, -0.005165251, -0.013959438, -0.013429006, -0.0043437267, 0.005805651, -0.0063037407, -0.0067597837, 0.007193186, -0.008351082, 0.017866528, -0.010343439, 0.002391799, -0.0044957413, 0.0054789823, 0.009036764, 0.017504282, -0.0047577233, -0.00801471, -0.015537799, -0.0018338743, 0.017672468, 0.017737154, -0.029367864, 0.004773895, -0.008842702, 0.001822554, -0.022394612, -0.01370069, 0.03819116, -0.036923297, 0.0043404927, 0.04947256, -0.010653936, -0.039950643, -0.029859483, 0.030092357, 0.03423232, -0.040287014, -0.00791768, -0.025848895, 0.011456054, -0.024593968, 0.007982367, 0.031644844, -0.015641298, 0.006921501, 0.010673342, 0.0007115562, 0.022523986, 0.016883288, 0.0011045292, 0.0010754201, -0.010265815, -0.025797145, 0.02354604, -0.016055295, 0.029290238, -0.025745396, 0.011798895, 0.0055727786, 0.013312569, 0.008079397, 0.020686878, -0.011158494, 0.024865653, 0.0037680133, -0.0049905963, -0.014774493, 0.005753902, 0.010446938, 0.026780386, 0.016805662, 0.020363443, 0.002352987, 0.023468416, 0.0075101517, -0.016404605, 0.018138213, 0.019845948, -0.0027152337, -0.023313167, 0.014037062, 0.035836555, 0.0002749194, -0.036172926, 0.017750092, 0.010304627, 0.0036030617, -0.017504282, 0.0056762774, 0.008215239, 0.004615412, 0.008351082, 0.0041076196, -0.00472538, 0.01454162, -0.0036483426, 0.021100875, -0.015343738, -0.022769798, 0.0066821594, -0.02552546, -0.012969729, 0.005346374, -0.0050035333, -0.017970027, -0.0076395255, 0.003402532, 0.0042919773, 0.0011012949, 0.004139963, 0.007658932, 0.004589537, -0.006219648, -0.028953867, -0.023804788, -0.022472236, 0.015615423, 0.0015557205, 0.008972077, -0.005905916, 0.001896944, 0.0063748965, 0.01058278, 0.018189963, -0.011197306, 0.030532228, 0.02582302, 0.010479282, 0.0062455223, -0.0009436205, -0.0067015653, 0.001402089, -0.022718048, 0.0034898594, 0.011747145, -0.01276273, 0.06810239, 0.0030338168, -0.022601612, 0.03487919, -0.013726565, 0.033430204, 0.008441644, 0.009528384, -0.022032365, -0.009780663, -0.0017999136, 0.019548388, 0.011404305, -0.028850367, -0.02908324, -0.019224953, -0.024852715, 0.0059382594, -0.0004519999, -0.015253177, 0.018707458, -0.01725847, 0.007924148, 0.015059115, -0.022187615, -0.024115285, 0.0144898705, -0.0020360209, 0.0006181644, 0.0032214087, 0.021683056, -0.0045539592, -0.03293858, -0.0051070326, 0.014231123, -0.015822422, -0.011675989, -0.019199079, -0.008887983, -0.0038100597, 0.010828591, 0.027479006, -0.010155847, -0.008499862, 0.013196132, -0.014049999, -0.0034995626, 0.008661579, -0.0046024746], "object": "embedding", - "index": 0, - "embedding": [0.02230405, 0.008771547, 0.014554557, -0.011423711, -0.008448112, 0.015473112, 0.0068826885, -0.008881515, 0.004744786, -0.005595419, -0.016676288, 0.01731022, -0.017698342, 0.024891527, -0.0063878335, -0.0012743324, 0.031618968, 0.021294935, 0.013648941, -0.0046218806, -0.020337569, 0.025512522, -0.01429581, -0.001887241, -0.01562836, -0.008959139, 0.017374907, -0.008868577, -0.011934738, 0.006138789, 0.0034187038, -0.016792726, -0.012723918, -0.0168186, -0.016844476, 0.0169221, 0.010860935, 0.0039006216, 0.011591896, -0.014606307, 0.015718922, -0.0003416278, -0.00038286572, 0.00014958851, -0.0055177948, 0.007827118, -0.0011853878, 0.0067468463, -0.039355524, 0.01296326, -0.008124677, 0.0066562844, -0.012885635, -0.052706905, -0.026172329, 0.00087650784, 0.008674516, 0.01811234, -0.011714802, -0.0054789823, -0.0041917125, -0.0013471051, -0.014502808, 0.0060676336, -0.0006072485, -0.001574318, -0.0084093, 0.010860935, 0.017038535, -0.0021136452, 0.021424308, 0.028125875, 0.017581906, -0.00033576557, 0.029419612, -0.008752141, -0.020712754, -0.0023740102, 0.007109093, 0.00022701068, 0.0044892724, 0.0069279694, -0.03260221, 0.008758609, 0.018733334, 0.013441943, 0.0025923285, 0.018371087, -0.034594566, -0.0030613088, -0.013196132, 0.051439043, 0.030040607, -0.021760682, -0.012445764, 0.0054854513, -0.0074325274, 0.02478803, 0.0125169195, -0.013791252, 0.016119981, -0.015291989, -0.031308472, 0.005977072, -0.017129097, -0.023222605, 0.0037486071, 0.008480456, 0.032679833, -0.040105894, -0.03487919, 0.049187936, 0.039459024, -0.038449906, -0.021980617, -0.0070767496, 0.0012702894, -0.024141159, -0.037337292, 0.0070055937, -0.0022672766, 0.040468138, 0.017982965, -0.027530754, 0.04486685, -0.002137903, -0.026482826, -0.024503406, -0.024956215, 0.005016471, 0.010802716, 0.014929742, 0.013467818, 0.021243185, -0.008920327, 0.0013099102, -0.006513973, 0.024425782, -0.03793241, 0.00328933, 0.013545441, 0.006119383, -0.0047900667, -0.008059991, -0.0056406995, 0.030972099, 0.0048094727, -0.0027427257, -0.020402256, -0.0018662177, 0.005673043, -0.012717449, 0.023817725, 0.012827417, 0.0014692018, 0.016999723, -0.0019567795, 0.017827716, -0.044219982, 0.0069538443, -0.04931731, 0.0048968, 0.030402854, -0.005876807, 0.012342265, 0.028772743, 0.020686878, 0.0049744244, -0.010395189, 0.0075101517, -0.032576334, 0.027039135, -0.020466942, 0.03330083, 0.00044795693, 0.034930937, 0.007859461, -0.016158793, 0.003978246, 0.01157249, -0.0095930705, -0.0068438766, -0.008538674, -0.009146731, 0.0009783898, -0.017129097, 0.0017497813, -0.001466776, 0.024011785, -0.004550725, 0.01143018, 0.027763627, -0.015059115, -0.0069991252, -0.66901803, -0.032653958, 0.004961487, -0.0085904235, 0.0080988025, 0.013390193, 0.0239471, 0.028255248, -0.003522203, -0.016003545, 0.009386073, 0.007063812, 0.0042078844, -0.023934161, 0.0125233885, -0.021825368, -0.0053981235, 0.010893278, -0.00018577276, 0.0017788904, -0.008765078, 0.019108517, -0.0018112338, -0.00398148, 0.021411372, 0.022834484, 0.009638351, -0.016495166, -0.015020303, 0.012102923, -0.015304926, 0.011792426, 0.013099102, -0.023106169, 0.025447836, -0.003709795, -0.024555156, 0.028824493, 0.0054886853, 0.029962983, -0.028384622, -0.0021750978, 0.017323159, -0.02305442, -0.010666873, 0.010847997, 0.017568968, -0.00046129862, 0.046833333, -0.014024125, 0.012769199, -0.030014733, -0.015718922, 0.01844871, 0.018254649, 0.015990607, 0.046212338, 0.009858287, -0.008467519, 0.0031146754, -0.009987661, -0.018086463, 0.0013495309, 0.002897974, 0.007445465, 0.00079120195, -0.0252279, -0.023507228, -0.020104695, -0.022329926, -0.0035933587, 0.016158793, -0.03904503, 0.02423172, 0.0061064456, -0.010796247, 0.029911233, -0.007102624, -0.0024710405, -0.017206721, 0.002055427, -0.015123802, -0.02853987, -0.015123802, 0.01741372, -0.010472813, -0.014670994, -0.020893876, 0.015757734, 0.026987385, 0.009612476, 0.015046178, -0.01839696, 0.0003299033, -0.017103223, 0.03216234, -0.01646929, 0.0032181744, -0.011320212, -0.025033839, 0.000618973, -0.03270571, -0.0037453729, 0.013312569, 0.02913499, -0.0064428174, -0.0077494932, 0.031877715, 0.015641298, -0.014399309, 0.0004980893, -0.013176726, -0.021631308, 0.0009832412, 0.014502808, -0.022498112, 0.04877394, 0.013234944, 0.024218785, -0.015874172, 0.007607182, -0.0003988353, 0.014231123, -0.0182029, 0.020570442, 0.008965608, -0.013648941, -0.009146731, -0.009599539, 0.024218785, -0.011967081, 0.011346086, 0.010207596, -0.0065269107, -0.030583978, 0.0065269107, 0.01662454, -0.026094705, 0.013881814, -0.013312569, -0.01687035, 0.0033507827, -0.026651012, 0.007833586, -0.023481352, -0.027065009, -0.028358746, -0.007128499, -0.027686004, -0.012329328, -0.018332275, -0.025991205, -0.042977992, 0.007671869, 0.013299632, 0.0028947399, -0.015990607, -0.0078077116, -0.028332872, 0.006614238, 0.024956215, 0.011967081, -0.015421363, 0.003324908, -0.010304627, -0.024205847, -0.009981193, 0.02903149, 0.00025308758, -0.042822745, -0.0026004142, 0.0050229398, -0.002137903, 0.013868877, -0.011837707, -0.00040328252, -0.0031454016, -0.037984163, -0.006850345, -0.010298158, 0.012568669, 0.029393738, -0.015304926, 0.0046024746, 0.03423232, 0.012549263, 0.022679236, 0.023274355, 0.0025680708, 0.010511625, -0.015123802, -0.004977659, 0.013545441, -0.0077883056, 0.008726266, -0.0033281422, 0.022265239, -0.012872698, -0.00095332356, -0.011087338, 0.029600736, -0.0019017955, -0.005094095, -0.011514273, 0.029755985, -0.033870075, 0.009159668, -0.005210532, 0.013907689, 0.025253775, -0.007704213, -0.025745396, 0.0020344038, -0.022627486, 0.01641754, 0.010110566, -0.01687035, 0.028358746, -0.0054886853, -0.00026905717, 0.01063453, 0.011954144, 0.03635405, 0.0006104828, -0.015887108, 0.0037874193, 0.006649816, 0.020906813, 0.009787131, -0.011281399, -0.02804825, -0.0077624307, 5.4630127e-05, 0.006513973, -0.015279051, 0.0025179384, 0.008959139, -0.016404605, -0.0049841274, 0.0050714547, 0.020402256, 0.030972099, 0.022950921, 0.0077818367, 0.03244696, -0.0034963281, 0.00796296, 0.026288766, -0.02449047, 0.013726565, -0.008881515, -0.012374609, -0.024115285, 0.0058250576, 0.018086463, 0.0038359344, 0.032628085, -0.0063781305, 0.0040396983, 0.010906215, -0.0004334024, -0.0010632913, 0.016728038, -0.005912385, -0.0072578727, 0.008913858, -0.023287293, -0.014554557, 0.0029189973, -0.0059447284, -0.012853292, -0.008467519, 0.014774493, 0.0008178853, 0.017129097, 0.0022624251, -0.0077430247, -0.017090285, 0.018358149, 0.0336372, -0.0033895948, -0.02240755, 0.014308748, -0.0011603216, -0.014515745, -0.018422836, -0.018177025, 0.018513398, -0.017646592, 0.0072449353, 0.016326979, -0.0062519913, 0.024154097, -0.0005373058, 0.0018079996, -0.022886233, -0.001822554, -0.0007689658, 0.023222605, 0.005980306, -0.011139088, 0.00031231655, -0.027220257, -0.013855939, 0.016378729, 0.011857113, -0.016947974, -0.008364019, -0.006420177, -0.0251244, -0.023093231, -0.009871225, 0.004013824, 0.011223181, 0.013390193, 0.008053522, -0.019328453, -0.018358149, 0.023584852, 0.004159369, -0.021113811, -0.029238489, -0.011449586, -0.0014821391, 0.05852873, 0.009916506, -0.006306975, 0.017077347, -0.002411205, -0.0194837, -0.017737154, 0.012820948, -0.00930198, 0.010097628, 0.013196132, -0.007859461, -0.007587776, -0.009890631, -0.014748619, -0.0019406077, 0.0066821594, -0.009877693, 0.019328453, -0.007594245, -0.010472813, 0.0090820445, -0.0051523135, 0.02606883, -0.023390792, -0.011113213, 0.022394612, -0.014567495, 0.015123802, -0.01236814, -0.012161141, 0.016262293, -0.0058638696, -0.0024500173, -0.025706584, -0.01697385, -0.016107043, 0.008027648, 0.029238489, -0.0019001784, 0.027479006, 0.0066950964, 0.0009306831, -0.025603084, 0.000605227, 0.0065754256, -0.009974724, 0.02137256, 0.0066821594, -0.013687753, 8.136402e-05, -0.0019858885, -0.003997652, -0.0042984462, 0.0040526357, 9.975937e-05, -0.013273757, -0.024645718, 0.009366667, -0.01741372, -0.0038909183, 0.0034639847, 0.030816851, -0.0052364063, -0.03565543, -0.024063535, -0.0013940032, -0.011798895, -0.0080858655, -0.007794774, -0.0052816872, -0.015343738, -0.042072374, 0.012064111, 0.04719558, 0.024645718, 0.030532228, -0.0120511735, 0.0045442563, 0.01953545, 0.0043987106, -0.010375783, 0.0060223527, -0.006119383, -0.0105310315, -0.0052267034, 0.021036187, -0.012070579, -0.01434756, 0.027789501, 0.026198205, -0.0054304674, 0.02903149, -0.027737753, -0.007937086, -0.009263167, -0.0014675845, 0.02542196, -0.028074125, -0.012665699, 0.017012661, -0.019781262, 0.012588075, -0.035396684, -0.019781262, 0.01018819, -0.0041787755, -0.009418416, -0.03169659, 0.011171431, 0.0006618281, -0.020790378, -0.004023527, -0.014852118, 0.028876243, 0.01627523, -0.026159393, 0.012199954, -0.0047674263, -0.032032963, 0.009780663, -0.03542256, 0.026935635, 0.0014683931, -0.03679392, 0.005372249, 0.011928269, -0.009237292, 0.01890152, 0.008629235, 0.004744786, 0.01800884, -0.027789501, -0.014037062, -0.026935635, -0.007212592, 0.012555731, 0.009334323, -0.015097928, 0.014127624, -0.009935912, 0.019600138, -0.0029545752, -0.015072053, -0.011727739, -0.02631464, 0.011585428, -0.0010333736, 0.0063781305, 0.028229373, 0.01608117, 0.0050358768, -0.03596593, 0.017750092, -0.013073227, -0.019224953, -0.006164664, -0.016145855, 0.011449586, 0.013894751, 0.016042357, 0.0036192334, 0.0073225596, 0.005543669, -0.0065366137, 0.0056665745, 0.009017357, -0.0019470764, -0.027116759, -0.005669809, 0.011902394, 0.012083517, 0.015563673, 0.008933264, 0.01152721, 0.029212615, -0.005317265, 0.00062705885, -0.03482744, -0.026780386, 0.001640622, -0.016999723, -0.011734208, 0.0043696016, 0.0014303896, 0.013713628, 0.0067468463, -0.003897387, -0.015473112, -0.00925023, 0.029652486, -0.014632182, 0.044763353, -0.025344336, 0.014321685, -0.009127324, -0.038812153, -0.023106169, -0.0061873044, -0.020130571, 0.0059447284, 0.008376957, 0.0032197917, -0.02433522, 0.021980617, -0.0027799206, 0.018979143, -0.0007612842, -0.0071996544, -0.018177025, -0.03358545, -0.024050599, -0.022575736, -0.02869512, 0.016585726, -0.014412247, -0.03167072, 0.020454004, 0.0022769796, -0.007102624, -0.010479282, -0.009269636, 0.025163213, 0.013933564, 0.026237017, 0.013881814, -0.0050358768, -0.011714802, -0.022523986, -0.025913581, -0.017918278, 0.021424308, 0.022420488, 0.0047415514, 0.010472813, 0.0135066295, -0.0030499885, 0.012866229, -0.016003545, -0.0012161141, 0.013933564, 0.0068180016, -0.005026174, 0.00945076, -0.017504282, 0.023339042, -0.007950023, -0.008635704, 0.010291689, -0.0005227512, -0.021825368, -0.0012581607, -0.01844871, 0.035629556, 0.01687035, -0.011928269, 0.015744798, -0.016702164, -0.009554259, 0.0026699528, 0.0068891575, 0.035344936, 0.0009694953, 0.0055080913, 0.0076848064, 0.0074389963, -0.015563673, -0.00885564, 0.009431354, 0.029445488, -0.015550736, -0.0043598986, -0.0110355895, 0.020764502, 0.03032523, -0.01454162, 0.002259191, 0.0120252995, -0.01137843, 0.015162615, 0.020001197, -0.0037033265, -0.01741372, 0.0044601634, -0.03037698, 0.00420465, -0.026379328, -0.011714802, -0.00026663142, -0.03423232, 0.0016737741, 0.010265815, 0.024891527, 0.009515447, 0.0052331723, 0.0021136452, 0.028902117, -0.014114686, -0.0052752187, 0.0033895948, 0.01068628, 0.016753914, -0.016495166, 0.00413026, -0.0009694953, -0.041037384, 0.017517218, 0.010311096, -0.033119705, -0.0031890653, 0.022730986, -0.0038941528, 0.004773895, -0.016016481, -0.0038197627, 0.002102325, 0.0012056025, -0.012866229, 0.0041884785, -0.0056924494, -0.017995901, 0.015175552, 0.009683632, -0.0060126497, 0.00791768, 0.0048903315, -0.010252877, 0.012284047, -0.01513674, 0.0017708045, 0.0016066615, 0.018021777, -0.0014675845, -0.015990607, 0.011100276, -0.004366367, -0.008364019, -0.0014643503, 0.009192012, 0.008124677, 0.0036774515, 0.0144898705, -0.0039847144, 0.019651888, -0.03260221, -0.0073743095, -0.014231123, -0.034542818, -0.02641814, -0.020337569, -0.02547371, 0.007633057, -0.010666873, -0.028125875, 0.0021815666, -0.005795948, 0.008668047, -0.018384025, 0.0053690146, -0.0022478707, 0.008900921, -0.0019729512, -0.004476335, 0.026094705, 0.0038068255, -0.0029092943, -0.0078077116, 0.0048968, 0.006239054, -0.017271409, 0.0033863604, -0.0015597634, -0.008739203, -0.018733334, 0.018319337, 0.012109392, 0.011009715, -0.008972077, -0.020686878, 0.00727081, 0.004579834, 0.022562798, 0.02696151, 0.032886833, -0.012723918, -0.027686004, -0.02286036, -0.020466942, 0.014140561, -0.021657182, -0.007801243, 0.030635728, 0.009166137, -0.008829765, -0.031386096, -0.002327112, -0.004269337, 0.0055274977, 0.014231123, -0.00022559565, -0.011274931, 0.004026761, 0.016728038, -0.007044406, 0.0021055595, -0.005391655, -0.011785957, 0.00027896237, 0.008913858, 0.001550869, -0.0038003568, -0.014722744, -0.013338444, -0.016508102, -0.0012403717, -0.007341966, -0.02156662, -0.021087937, 0.024904465, 0.00939901, -0.015990607, 0.0026521639, -0.040778637, -0.020285819, -0.0004916206, -0.0066110035, 0.005158782, -0.030040607, -0.0050358768, 0.0011554701, -0.001466776, -0.018293463, -0.022562798, 0.003690389, 0.023623664, 0.012698043, 0.2370129, 0.008454581, 0.0027119992, 0.04199475, -0.008875046, 0.014205248, 0.027039135, 0.0049291435, 0.016443416, 0.023015607, -0.02750488, 0.0011109979, 0.009386073, 0.010938559, -0.011850644, -0.014554557, -0.01811234, -0.015304926, 0.01310557, 0.0023109403, 0.008021179, 9.2381015e-05, 0.0040041204, -0.021256123, 0.015304926, 0.021993553, -0.0022915343, -0.001701266, 0.019328453, 0.020259945, 0.005411061, -0.020945625, -0.008286395, -0.00024257596, -0.004456929, -0.0085710175, -0.0023869474, -0.0026521639, 0.0222523, 0.024813903, -0.0040688077, -0.0144769335, -0.020997375, 0.014127624, -0.006552785, -0.0051070326, -0.019858886, -0.012782136, 0.01687035, 0.0072449353, -0.017944153, -0.0072772787, 0.02324848, 0.023274355, -4.644319e-05, 0.0061711324, 0.02859162, -0.018138213, 0.00640724, 0.00865511, -0.006119383, 0.035267312, -0.020945625, 0.023636602, 0.010996777, -0.008344613, -0.002513087, -0.00048515192, 0.024425782, -0.012070579, 0.006300506, -0.0031421673, -0.0031648078, 0.015964733, 0.01760778, 0.007937086, 0.026832135, 0.010957965, 0.0095736645, 0.002344901, -0.010977371, -0.0075554326, -0.004421351, 0.028384622, 0.00058056513, -0.017180847, -0.0062455223, 0.008150552, 0.029419612, 0.009631883, 0.00390709, 0.0017643358, 0.0052008284, 0.017193785, 0.015317864, 0.022278177, 0.008422238, 0.00885564, -0.018992081, -0.0023060888, -0.029109115, -0.0115207415, 0.01879802, 0.002307706, -0.02696151, 0.011003246, 0.004211119, -0.021760682, 0.029238489, 0.0044860383, 0.004026761, -0.009192012, 0.008784484, 0.0013325507, 0.0059447284, -0.0029303175, 0.005158782, -0.031618968, -0.017245533, -0.0063231466, -0.008525737, -0.020738628, -0.010841528, -0.0013163789, -0.008234645, -0.025486648, -0.01562836, 0.013674815, 0.0073290286, -0.03780304, 0.0065107387, -0.012892104, 0.024451656, -0.0026861245, -0.0017109691, -0.0021314342, 0.013687753, -0.0080858655, 0.016857412, -0.012601012, 0.008519268, -0.008131146, 0.016546914, -0.0010738029, 0.0052267034, -0.011876519, 0.0044439915, -0.008480456, -0.014451059, -0.027530754, -0.01795709, -0.006219648, 0.0018662177, -0.021152625, 0.026094705, -0.012070579, -0.00045765997, 0.0020667473, 0.028436372, 0.01370069, -0.009463697, 0.0063393186, 0.013817127, -0.0021087937, -0.007503683, 0.0025858597, -0.16487403, 0.0057571363, 0.044219982, -0.03314558, -0.022045303, 0.00796296, 0.0095801335, 0.023558978, -0.014735681, 0.039640147, 0.00035961886, 0.011132619, -0.04572072, -0.0026020315, -0.010847997, 0.0036095304, -0.005391655, 0.019250829, -0.011578959, 0.006921501, 0.011443117, -0.018616896, 0.007037937, 0.014127624, -0.0037712476, -0.019431952, -0.02305442, 0.021644244, 0.01038872, -0.02300267, -0.009489572, -0.0003606296, 0.00051547395, 0.006400771, 0.009813006, 0.0034445787, 0.003968543, 0.0026295234, -0.013868877, 0.00059754547, -0.0077688997, 0.010802716, 0.017827716, 0.03348195, -0.0062778657, 0.020492818, 0.011986487, 0.0009039998, -0.01221936, -0.008933264, 0.009360198, -0.025137339, -0.0054045925, -0.002624672, 0.005540435, 0.02067394, 0.017103223, 0.01953545, 0.0009573665, -0.000321211, -0.008247583, -0.03834641, -0.011766551, -0.0025454303, 0.012406952, 0.009664226, 0.015887108, -0.0031551046, -0.017387845, 0.008985014, -0.00221391, -0.02088094, -0.0061226175, -0.019781262, 0.004903269, 0.011093807, 0.0030790975, -0.026094705, -0.011934738, -0.01009116, -0.002120114, 0.050171178, -0.017646592, 0.0125233885, -0.013674815, 0.01592592, 0.00041803924, 0.004560428, -0.027427256, 0.0015678493, 0.029109115, -0.010052348, 0.00846105, -0.02853987, 0.010744498, 0.0043501956, 0.0054498734, -0.00571509, 0.0004378496, 0.0018079996, -0.013674815, 0.010097628, -0.018862708, 0.021605432, 0.032860957, -0.00930198, -0.016339917, 0.018319337, 0.03749254, -0.005210532, -0.022174677, 0.010699217, 0.009819475, 0.020014133, 0.016184669, -0.005857401, 0.014877993, -0.0061452575, 0.024050599, 0.029471362, 0.04230525, -0.020518692, -0.015473112, 0.016314043, 0.0071802484, -0.016158793, -0.08569723, 0.003531906, -0.0037033265, 0.021346685, 0.0077106813, 0.028798617, 0.021631308, 0.035267312, 0.00687622, 0.01518849, -0.012232297, -0.011669521, -0.01608117, 0.009754788, 0.0008522502, -0.011391367, 0.01083506, -0.032576334, -0.04574659, 0.016145855, 0.000981624, -0.0030241136, 0.012801542, -0.0077300873, 0.006365193, -0.037673663, -0.038605157, 0.0110355895, 0.0035157343, 0.0034154695, 0.02349429, -0.027039135, -0.016986785, -0.013312569, -0.021708932, -0.0149814915, -0.021281999, -0.019263767, 0.011941206, -0.03961427, -0.008991483, 0.018306399, 0.0168186, -0.015563673, 0.015162615, -0.0058379946, -0.016197605, 0.012549263, -0.009386073, -0.022627486, 0.012665699, 0.0045054443, -0.008680985, -0.023416666, 0.026599264, -0.011734208, 0.008564549, 0.030144107, -0.013687753, 0.00895267, -0.0022656594, 0.028617496, -0.0004867691, 0.020945625, 0.0050100023, -0.026482826, -0.025680708, -0.0009444291, 0.009800069, -0.037259668, -0.036198802, -0.003531906, -0.0029384035, -0.013894751, -0.028902117, -0.008182895, -0.013648941, 0.016896224, -0.0016333448, -0.0054983883, -0.017530156, -0.022562798, 0.0057991827, 0.006064399, -0.001644665, 0.03555193, -0.031748343, -0.018772146, 0.0024144393, -0.0015686579, -0.0060417587, 0.019134391, 0.013124976, -0.016249355, -0.025098527, 0.018371087, -0.0025001497, 0.014670994, 0.02734963, -0.01890152, -0.022433424, 0.00079686206, -0.05387127, 0.019315515, -0.005165251, -0.013959438, -0.013429006, -0.0043437267, 0.005805651, -0.0063037407, -0.0067597837, 0.007193186, -0.008351082, 0.017866528, -0.010343439, 0.002391799, -0.0044957413, 0.0054789823, 0.009036764, 0.017504282, -0.0047577233, -0.00801471, -0.015537799, -0.0018338743, 0.017672468, 0.017737154, -0.029367864, 0.004773895, -0.008842702, 0.001822554, -0.022394612, -0.01370069, 0.03819116, -0.036923297, 0.0043404927, 0.04947256, -0.010653936, -0.039950643, -0.029859483, 0.030092357, 0.03423232, -0.040287014, -0.00791768, -0.025848895, 0.011456054, -0.024593968, 0.007982367, 0.031644844, -0.015641298, 0.006921501, 0.010673342, 0.0007115562, 0.022523986, 0.016883288, 0.0011045292, 0.0010754201, -0.010265815, -0.025797145, 0.02354604, -0.016055295, 0.029290238, -0.025745396, 0.011798895, 0.0055727786, 0.013312569, 0.008079397, 0.020686878, -0.011158494, 0.024865653, 0.0037680133, -0.0049905963, -0.014774493, 0.005753902, 0.010446938, 0.026780386, 0.016805662, 0.020363443, 0.002352987, 0.023468416, 0.0075101517, -0.016404605, 0.018138213, 0.019845948, -0.0027152337, -0.023313167, 0.014037062, 0.035836555, 0.0002749194, -0.036172926, 0.017750092, 0.010304627, 0.0036030617, -0.017504282, 0.0056762774, 0.008215239, 0.004615412, 0.008351082, 0.0041076196, -0.00472538, 0.01454162, -0.0036483426, 0.021100875, -0.015343738, -0.022769798, 0.0066821594, -0.02552546, -0.012969729, 0.005346374, -0.0050035333, -0.017970027, -0.0076395255, 0.003402532, 0.0042919773, 0.0011012949, 0.004139963, 0.007658932, 0.004589537, -0.006219648, -0.028953867, -0.023804788, -0.022472236, 0.015615423, 0.0015557205, 0.008972077, -0.005905916, 0.001896944, 0.0063748965, 0.01058278, 0.018189963, -0.011197306, 0.030532228, 0.02582302, 0.010479282, 0.0062455223, -0.0009436205, -0.0067015653, 0.001402089, -0.022718048, 0.0034898594, 0.011747145, -0.01276273, 0.06810239, 0.0030338168, -0.022601612, 0.03487919, -0.013726565, 0.033430204, 0.008441644, 0.009528384, -0.022032365, -0.009780663, -0.0017999136, 0.019548388, 0.011404305, -0.028850367, -0.02908324, -0.019224953, -0.024852715, 0.0059382594, -0.0004519999, -0.015253177, 0.018707458, -0.01725847, 0.007924148, 0.015059115, -0.022187615, -0.024115285, 0.0144898705, -0.0020360209, 0.0006181644, 0.0032214087, 0.021683056, -0.0045539592, -0.03293858, -0.0051070326, 0.014231123, -0.015822422, -0.011675989, -0.019199079, -0.008887983, -0.0038100597, 0.010828591, 0.027479006, -0.010155847, -0.008499862, 0.013196132, -0.014049999, -0.0034995626, 0.008661579, -0.0046024746] + "index": 0 } ], - "model": "text-embedding-ada-002-v2", - "usage": { - "prompt_tokens": 9, - "total_tokens": 9 - } -}823 1719 + "model": "text-embedding-ada-002-v2" +}823 1744 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -116,48 +120,48 @@ Authorization: Bearer test-api-key Content-Type: application/json {"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein sitting room, the color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003ckv key=\"square_feet\"\u003e400\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK -Content-Length: 936 +Content-Length: 919 Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:34 GMT +Date: Mon, 21 Sep 2026 07:48:13 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 405 +Openai-Processing-Ms: 436 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 426 X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 30000 X-Ratelimit-Limit-Tokens: 150000000 X-Ratelimit-Remaining-Requests: 29999 -X-Ratelimit-Remaining-Tokens: 149999890 +X-Ratelimit-Remaining-Tokens: 149999887 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_f0fa9acfeaaf4594a6e18641af8b4622 +X-Request-Id: req_0c518a26b8364e9a8eb31798f476f85b { - "object": "chat.completion", - "created": 1769112274, - "model": "gpt-4.1-nano-2025-04-14", "choices": [ { - "logprobs": null, - "finish_reason": "stop", "index": 0, "message": { - "annotations": [], "role": "assistant", - "content": "The lamp beside the desk in the sitting room is purple. The information does not specify the color of any lamps in other rooms.", - "refusal": null - } + "content": "The lamp beside the desk in the sitting room is purple. The color of the lamp in other rooms is not specified.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" } ], "usage": { - "total_tokens": 139, + "prompt_tokens": 113, + "completion_tokens": 24, + "total_tokens": 137, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 @@ -167,11 +171,12 @@ X-Request-Id: req_f0fa9acfeaaf4594a6e18641af8b4622 "audio_tokens": 0, "accepted_prediction_tokens": 0, "rejected_prediction_tokens": 0 - }, - "prompt_tokens": 113, - "completion_tokens": 26 + } }, "service_tier": "default", - "system_fingerprint": "fp_7f8eb7d1f9", - "id": "chatcmpl-D0vCs9SmMD5hRmNnR626pXbP6twgc" + "system_fingerprint": "fp_55df626f50", + "id": "chatcmpl-EQT2y8noqBAemUENIaOxkBLnqlYqr", + "object": "chat.completion", + "created": 1789976892, + "model": "gpt-4.1-nano-2025-04-14" } \ No newline at end of file diff --git a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr index 3fbe1aa65..9beea5155 100644 --- a/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr +++ b/vectorstores/pgvector/testdata/TestPgvectorAsRetrieverWithScoreThreshold.httprr @@ -1,5 +1,5 @@ httprr trace v1 -441 106523 +441 106590 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -11,20 +11,22 @@ Content-Type: application/json Content-Length: 105633 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:16 GMT +Date: Mon, 21 Sep 2026 07:48:00 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 43 +Openai-Processing-Ms: 157 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-76f6979656-n29nx +Via: envoy-router-7d5f5f44cf-kcjq7 X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 175 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 @@ -32,7 +34,7 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999954 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_058307448e324bc3958c7da418e46690 +X-Request-Id: req_6a5d3b7d1f8f44799d6223d910c166d6 { "usage": { @@ -57,9 +59,9 @@ X-Request-Id: req_058307448e324bc3958c7da418e46690 "embedding": [0.013982197, -0.018476475, -0.005729884, -0.023803027, 0.0031706425, 0.009507126, -0.044174526, -0.0043758387, 0.01791309, -0.02065319, 0.010851568, 0.010934795, -0.016222933, 0.019359965, -0.024520062, -0.0053873714, 0.03178005, -0.0010819557, 0.010729928, -0.022381758, -0.045480553, 0.0045486954, -0.020665996, 0.017695418, -0.016619865, 0.0010731529, 0.015685158, -0.015185793, 0.026453499, 0.010755536, 0.02481456, -0.012765798, 0.017285684, -0.037337076, -0.040947862, 0.017093621, -0.0021639115, 0.010064109, -0.0013468429, -0.020627582, 0.008495593, 0.0055666305, -0.003665205, -0.0038092525, -0.007996229, 0.013559658, 0.013918176, 0.010256172, -0.008854112, 0.010320193, -0.0048271874, 0.030858146, -0.0041229557, -0.0043150187, 0.01831002, -0.025621224, -0.00086028286, 0.01782346, -0.020947687, -0.016709493, 0.012714581, -0.0020694805, 0.005134488, -0.0097312, -0.0075928965, 0.010204955, -0.0059027406, -0.004638325, -0.0038860778, 0.0057522915, 0.02932164, 0.029372858, 0.00069662905, 0.0151473805, 0.0032106556, 0.013726113, -0.0042541986, -0.0020390705, -0.0048303884, -0.017503355, 0.0042894105, -0.012977066, -0.026171805, -0.0008050647, 0.027196143, 0.011869502, -0.002901754, 0.0011355734, -0.031088622, -0.012035958, -0.005256128, 0.029424075, 0.032471478, -0.0012075971, -0.013598071, 0.016427802, 0.022368954, 0.020000177, 0.005729884, -0.029065557, 0.0048976103, 0.014545582, -0.03836141, 0.0026472704, -0.036824908, -0.015531506, 0.015557115, -0.012573734, 0.027477834, -0.03211296, -0.020269064, 0.0089885555, 0.011082044, -0.020461127, -0.0070487177, -0.020025784, 0.017157642, -0.0084315725, -0.017861873, -0.015697962, 0.014558387, 0.037337076, 0.016824732, -0.023226837, 0.027247358, 0.0114149535, -0.01256093, -0.013329183, 0.0060243807, -0.0002958973, 0.011037229, 0.007829774, 0.01009612, 0.017554572, -0.0070295115, 0.010179347, -0.009058978, 0.03157518, 0.007855383, -0.029961852, 0.01523701, 0.02834852, -0.0064757294, -0.0077337427, -0.004628722, 0.030550845, 0.02025626, -0.016466213, 0.0021383031, 0.00906538, 0.0049616313, -0.024507258, 0.019897742, 0.013546854, 0.022983557, 0.0033098883, -0.011645429, -0.0093662795, -0.020115415, -0.016094891, -0.0067926333, 0.0061332164, 0.028655821, 0.002460009, 0.030730104, 0.019718483, 0.009711993, 0.019001449, 0.0012700176, 0.0035115546, -0.001566115, 0.035877395, -0.010569875, 0.014929709, 0.0047215526, 0.010544267, 0.012048761, 0.003950099, -0.014251086, 0.0031978514, -0.019001449, -0.0023671784, 0.013406008, 0.005432186, 0.0010955603, -0.009756808, 0.010441833, -0.020858059, 0.012208814, -0.013149924, 0.014609603, 0.018348433, 0.0051024775, -0.01654304, -0.6912225, -0.040282045, 0.0114789745, -0.0017381716, 0.0023895856, 0.03779803, 0.005845122, 0.012580137, 0.0074264416, -0.026069371, 0.0063572903, 0.008860514, 0.013092305, -0.0029545715, 0.007080728, -0.030192327, -0.0099872835, 0.015749179, -0.0035819777, 0.014327911, -0.009071783, -0.004180575, -0.028655821, -0.0047919755, 0.020153826, 0.018258803, 0.010998816, -0.0097376015, -0.0056914715, 0.020691603, -0.0045358916, -0.0046095154, -0.017951502, -0.020128218, 0.038335804, 0.0019030257, -0.015172989, 0.008194694, -0.008041044, 0.025185881, -0.0027897172, 0.015774786, -0.0015805197, -0.014686429, -0.010627494, -0.005720281, 0.0057010744, -0.0014436747, 0.033214122, -0.00071423483, 0.020819645, 0.003068209, 0.023700593, -0.005480202, 0.0148400795, -0.0010651503, 0.030192327, 0.0151473805, 0.0063092746, -0.007195966, -0.019564833, 0.012733787, -0.029577725, -0.009654375, -0.012516115, 0.00413576, -0.032164175, -0.017631397, -0.0015269021, -0.0019542426, 0.006078799, 0.007458452, -0.011178075, 0.029859418, 0.01651743, 0.0022791494, 0.026120588, -0.01788748, 0.021395834, 0.012554528, 0.0018069941, 0.003918088, -0.017324096, -0.009142206, 0.027759528, -0.021254988, -0.029526507, -0.02131901, 0.019475203, -0.011395747, 0.033956766, 0.019641658, 0.00074744574, -0.0029673756, -0.006274063, 0.014635212, -0.014443149, 0.0005897939, 0.0031306294, -0.0058003073, 0.014468757, -0.035288405, -0.0016821531, -0.0015725171, 0.039846703, 0.0045230873, -0.026146198, 0.033470206, 0.019808114, -0.017503355, 0.019180706, -0.011747863, -0.0246353, 0.0062484546, 0.0101729445, -0.024750538, 0.046223197, 0.009084587, 0.011594213, -0.003205854, 0.009379084, 0.0065525547, -0.00052177155, -0.014622408, 0.0006009976, -0.004820785, 0.00044174524, -0.016107697, -0.027913177, -0.0037356282, 0.015531506, -0.009475116, 0.009968078, 0.0053809695, 0.0030345977, -0.003841263, 0.005976365, -0.017938698, 0.02578768, -0.029961852, -0.025736462, -0.01073633, -0.013879764, -0.013585267, -0.00032290618, -0.009103794, -0.03093497, -0.0077721556, -0.019231923, 0.021447051, -0.033700682, -0.021639114, -0.017144836, 0.0021879193, -0.006405306, -0.0040877443, -0.022817103, 0.003543565, -0.0017749836, 0.02530112, 0.008457181, 0.003469941, -0.01548029, -0.00013364395, -0.00906538, -0.040077176, -0.009411095, 0.037337076, -0.014481561, -0.022343347, -0.006213243, -0.002821728, 0.0007470456, -0.023700593, -0.024891384, -0.011773471, -0.025749266, -0.023303661, 0.00018245999, -0.016248543, 0.014929709, 0.010268976, 0.005598641, -0.01921912, 0.035288405, -0.0067862314, 0.019795308, 0.03567253, -0.0020822845, 0.01937277, -0.008405964, -0.0072791935, -0.007925806, -0.011382943, 0.016094891, -0.0023031572, -0.0036524008, 0.006181232, 0.0006033984, -0.00037952478, 0.013559658, -0.0044174525, 0.019078273, -0.02040991, 0.01970568, -0.013265162, 0.01256093, -0.002040671, 0.015505899, 0.03613348, 0.002983381, -0.02259943, 0.0027513045, 0.0018566104, 0.017785048, -0.00103394, -0.012330454, 0.0147120375, -0.010864372, -0.014699233, -0.005419382, 0.0085532125, 0.043841615, -0.012746591, -0.014558387, -0.013341987, 0.03925771, 0.011357334, 0.0023879851, -0.008137075, -0.028758256, -0.0025624426, -0.01243929, 0.00018986243, -0.016824732, -0.0049168165, 0.00927665, -0.03129349, 0.014430345, 0.011440562, 0.010640299, 0.0422795, 0.032036133, -0.017925894, 0.022548214, -0.020448323, 0.026299847, 0.015621136, -0.0206788, 0.01426389, -0.018911818, -0.010185749, -0.017644202, 0.015672352, 0.022676256, 0.0028569393, 0.039488185, 0.003354703, 0.0270681, 0.01749055, -0.016389389, -0.011101251, 0.01475045, -0.017349705, 0.003841263, -0.0040557333, -0.008700461, 0.021639114, -0.007311204, -0.013393204, -0.004823986, 0.00094911206, 0.016978383, -0.003908485, 0.0018149968, -0.022215305, -0.011626223, 0.0031338304, 0.022164088, 0.010845166, 0.00095231313, -0.021088533, 0.009199825, 0.012087175, 0.0089885555, -0.021178164, -0.025646832, 0.021459855, -0.0062452536, 0.011216488, 0.023162816, 0.023777418, 0.01402061, 0.003482745, -0.0008050647, -0.02536514, 0.0047759702, -0.010134532, 0.0033995179, -0.002375181, -0.00939829, -0.015685158, -0.026555931, 0.0016949573, 0.0011403749, 0.027733918, -0.009468714, 0.006837448, -0.02609498, -0.011421355, 0.008745275, -0.0058131116, 0.0014132647, 0.0032490683, -0.019027056, -0.0012388073, -0.029065557, -0.010550669, 0.024788952, 0.022061653, 0.016875949, -0.01928314, -0.01158781, -0.0032490683, 0.0684257, 0.0055826358, -0.009161413, 0.010717124, 0.010192151, -0.016005263, -0.016261347, 0.0043182196, -0.00802824, -0.0028265293, 0.0020038588, 0.0015381058, 0.007375225, 0.0064149094, -0.00031870478, -0.014724841, 0.008706863, 0.00018716154, 0.030345978, -0.02162631, -0.0047855736, 0.010134532, -0.009455909, -0.0024664109, -0.0061204126, 0.0077145365, 0.022189695, 0.016402192, 0.015493094, -0.022176892, 0.008642842, 0.020537952, 0.00650774, -0.0121639995, -0.009558342, -0.01289384, -0.0032202587, 0.0047951764, 0.00696549, -0.02122938, 0.015992459, 0.0040877443, 0.0065173428, -0.021050122, -0.0066197766, 0.007291998, -0.011549397, 0.013457225, -0.020064197, 0.0030586056, 0.022727473, -0.010192151, -0.01265056, -0.007074326, 0.011703048, 0.0149041, -0.012624951, -0.008758079, -0.008444376, -0.018476475, 0.004571103, -0.017311292, -0.008258715, -0.0031050208, -0.0093662795, -0.013482833, -0.004468669, 0.004145363, -0.011363736, 0.0134700285, 0.0013700505, -0.01766981, -0.013802938, -0.0013628481, 0.030909363, 0.02627424, 0.006779829, -0.022868318, 0.010499452, 0.046760976, -0.0020294674, -0.0076377112, -0.0142126735, -0.0020134621, 0.005483403, 0.0008874918, 0.033290945, -0.013598071, 0.003409121, 0.002317562, 0.031370316, 0.0057522915, 0.0072279763, -0.0017877878, -0.007381627, -0.012087175, 0.022164088, 0.004820785, -0.014302302, -0.01548029, 0.0033258935, -0.023495726, -0.0058131116, 0.0009211029, 0.007624907, 0.01256093, 0.025006622, 0.0056914715, -0.021254988, 0.014635212, 0.026812015, -0.004551897, 0.0024584082, -0.008457181, 0.0029177594, 0.010550669, -0.0016565446, 0.013457225, 0.0022599432, -0.029654551, 0.005044859, -0.04437939, 0.02366218, 0.0010467442, -0.0033418988, -0.001234806, 0.01161982, -0.021088533, -0.0038092525, -0.00027769132, -0.013943785, 0.019628854, -0.028630214, -0.02658154, -0.031703223, -0.018937428, 0.009948871, 0.0069270777, -0.0023975882, -0.015006534, -0.025083447, 0.017785048, 0.018258803, -0.00016935568, -0.031037405, -0.022240913, -0.0065813637, 0.009539137, 0.0028297305, 0.012554528, -0.0041709715, 0.013572463, -0.012945056, 0.02186959, 0.0034635388, -0.012381671, -0.026043763, -0.017695418, 0.018975839, 0.010576277, 0.033751898, -0.006017979, 0.0011875905, 0.008886122, -0.006779829, -0.008169086, -0.007925806, -0.0134700285, -0.019411182, 0.013495637, 0.014724841, 0.0051568956, 0.017208857, -0.011818286, 0.009654375, 0.0051985094, -0.0055346196, -0.0143407155, -0.028425347, -0.022855515, 0.0014692831, 0.0015725171, -0.019846525, -0.012817014, 0.010000088, -0.0077145365, 0.023623768, 0.012938654, 0.0025352335, -0.0076953303, 0.028220478, 0.0068694586, 0.03014111, -0.009379084, 0.0013644486, 0.00019456397, -0.025698049, -0.0009363079, 0.009097391, 0.0130346855, 0.013508442, 0.0062068407, 0.0019030257, -0.020781232, 0.016235739, 0.017785048, 0.021754352, 0.0147760585, -0.0026392678, -0.023879852, -0.023777418, -0.03516036, -0.024584083, -0.032317825, 0.003297084, 0.011639027, -0.0343665, 0.021293402, -0.0013892568, -0.034929886, 0.014814471, 0.010140934, 0.024007894, -0.011735058, 0.005621048, 0.005496207, -0.011062837, -0.013329183, -0.0008022638, -0.016645472, -0.004206183, 0.033956766, 0.01021776, -0.003540364, 0.017592985, 0.005685069, 0.00022887526, 0.025915721, -0.017708223, -0.018079545, 0.0075352774, 0.015493094, -0.021754352, 0.019987373, -0.014135848, 0.013713309, -0.024763342, -0.029270424, -0.004990441, -0.00024067913, -0.018604517, 0.003260272, -0.038207762, 0.0041293576, 0.006363692, -0.007311204, -0.0075288755, -0.0048431926, -0.01766981, -0.018706951, -0.006280465, 0.0054065776, -0.012016751, 0.022663452, 0.0018117958, 0.0024744135, -0.031728834, -0.0028761458, 0.004574304, 0.027426617, -0.0016309363, -0.006219645, -0.010749134, 0.018002719, 0.0298082, -0.0058003073, -0.0054513924, -0.001447676, -0.0054673976, 0.0058195135, 0.017746635, -0.012644158, -0.008930936, 0.0139053725, -0.018899014, 0.005185705, -0.015697962, -0.019091077, -0.006040386, -0.01450717, -0.014251086, -0.0012083973, 0.011536594, 0.0027865162, 0.0067350143, -0.02503223, 0.031242272, 0.011318922, -0.021843983, 0.015377856, -0.0051024775, 0.009961676, 0.0026728788, 0.015224205, 0.0059443545, -0.019718483, 0.03449454, -0.009980882, -0.028066829, -0.015493094, 0.006411708, -0.008930936, -0.0005221717, 9.51813e-05, 0.002773712, -0.013239553, 0.02624863, -0.0014812871, -0.0015861215, -0.0040013157, -0.0234189, -0.015313835, 0.0026312652, -0.02019224, -0.0025112256, 0.014878492, -0.0018838194, 0.008783688, -0.040128395, -0.0059443545, -0.03129349, 0.01037141, -0.009660777, -0.012176803, -0.027247358, 0.0011203684, -0.008527604, -0.004218987, -0.009270248, 0.0013148324, -0.0058835344, 0.012304846, -0.007291998, 0.014443149, 0.0025832495, -0.0008882921, -0.012266433, -0.0014036616, -0.015249814, 0.0041901777, 0.0045839073, -0.017132033, 0.014161456, -0.031395923, -0.030345978, 0.007266389, -0.010198553, -0.0011355734, 0.011325324, 0.014545582, 0.03288121, -0.0029545715, -0.0016469415, 0.022420172, -0.0016901557, -0.00083867577, -0.038668714, -0.018489279, 0.0032426661, -0.017785048, 0.0041293576, -0.0034763431, -0.009942469, -0.022522606, 0.008277922, 0.0034219252, 0.007516071, -0.0081818905, 0.0069718924, 0.011703048, -0.001241208, 0.023098795, 0.032343436, 0.013700505, 0.005662662, -0.010992414, -0.010441833, 0.010742732, 0.036824908, -0.0007582493, -0.00068542536, -0.0034219252, -0.011805481, 0.00988485, -0.010723526, 0.014238281, 0.0054481914, 0.011094848, 0.005185705, -0.0090525765, -0.0049616313, 0.017388117, 0.0014820873, -0.007202368, -0.018758168, 0.013764526, -0.014443149, -0.008476387, 0.009142206, -0.024366412, -0.0065429513, -0.021908004, 0.00915501, -0.042049024, -0.0112292925, -0.023610963, -0.004641526, -0.033828724, 0.024609692, 0.01718325, -0.0170296, -0.006178031, -0.023982285, -0.003902083, -0.0021078931, -0.013828547, -0.02326525, -0.038694322, -0.03259952, -0.0058419206, 0.010544267, -0.017119229, -0.0060819997, -0.0040589347, 0.008521202, 0.024379216, 0.23068064, 0.010909187, -0.0053201495, 0.03257391, 0.0033611052, 0.04962912, 0.022970753, -0.008540408, 0.013201141, 0.020909276, 0.0037964482, 0.0025256304, 0.009379084, 0.0043150187, 0.0061428198, -0.0041773734, -0.028092436, -0.0008682855, -0.015800396, 0.010019294, 0.014635212, -0.017797852, 0.011280509, 0.00383166, 0.034725018, -0.001922232, -0.018169174, -0.0018197984, 0.023073187, 0.0054705986, -0.0062356503, -0.011472573, 0.0033354966, -0.009097391, -0.0070359134, -0.005502609, -0.01928314, 0.008201096, 0.020934884, 0.026069371, 0.012138391, 0.012932252, -0.032138567, -0.021818373, -0.0041261567, 0.02348292, -0.009404692, -0.0061908355, 0.019193511, 0.0066261785, -0.017759439, -0.001922232, 0.023777418, 0.02350853, 0.0011091647, 0.023226837, 0.022061653, -0.011690244, 0.029526507, -0.014891297, -0.014071827, 0.023457313, -0.018668538, 0.0031882483, 0.0077081346, -0.0071575535, -0.019808114, 0.009475116, 0.013457225, -0.010569875, 0.017746635, 0.010992414, 0.019628854, 0.0056402544, -0.006286867, -0.003236264, 0.024840167, 0.008162684, 0.026940057, -0.017900286, -0.0037420304, -0.014404736, -0.014404736, 0.022868318, -0.018719755, -0.022804298, 0.0076313093, 0.0020566762, 0.03569814, -0.008674853, -0.009263846, -0.009583951, 0.00976321, -0.010032099, 0.006238851, 0.024776146, -0.0134700285, 0.022151284, -0.02368779, 0.0031738435, -0.036517605, -0.01700399, 0.017900286, -0.010787547, -0.013649288, 0.011114054, 0.00480478, 0.015531506, 0.038873583, -0.008828503, 0.013457225, -0.005112081, 0.012003947, -0.0023223637, 0.01833563, -0.00136845, 0.0033835126, -0.012618549, -0.018450867, -0.0139053725, -0.00018806184, -0.022036046, -0.01441754, 0.009628766, -0.015710765, -0.0037388294, -0.0040877443, 0.020077001, 0.00031870478, -0.040282045, 0.03047402, -0.0020022583, 0.030909363, -0.0023719799, -0.009289455, -0.00086748524, -0.009526332, -0.005243324, 0.011504583, -0.01012813, -0.008636439, -0.008918133, 0.012445692, -0.013738917, 0.0056466567, 0.0077977637, 0.005105679, -0.012887438, -0.013585267, -0.017119229, 0.0010091318, -0.02147266, -0.00059219473, 0.003473142, 0.016146109, -0.013111511, -0.026376672, -0.007618505, -0.016389389, 0.019539224, -0.006824644, 0.025864504, -0.006472528, -0.014225477, -0.008905328, 0.0014468757, -0.16409875, 0.024071915, 0.004164569, -0.004033326, -0.013828547, -0.0011675839, 0.02578768, 0.018233195, -0.0010171344, 0.028322913, 0.015160184, -0.008649244, -0.0520107, -0.024123132, 0.008924535, 0.019001449, -0.0042285905, -0.015224205, 0.026402282, 0.009961676, -0.0029785794, -0.029142382, 0.012215217, -0.0026408683, 0.00465433, 0.00016485421, -0.00918702, 0.030243544, -0.0017877878, -0.007080728, -0.00465433, -0.0052721333, 0.0028057224, 0.036287133, 0.0072855954, 0.005067266, 0.00013964591, 0.005172901, 0.0010923592, 0.003972506, -0.008137075, 0.024929797, -0.006152423, 0.009628766, -0.019987373, 0.022970753, 0.03505793, 0.021101339, -0.0015829204, -0.0073048016, 0.008681254, -0.03157518, -0.023828635, -0.008649244, 0.01784907, 0.0052049113, 0.018566104, 0.009808025, -0.003850866, 0.022586627, 0.0036299936, -0.0267608, -0.0009651173, 0.0026200614, -0.0011043631, -0.012810612, 0.0030714099, 0.008258715, -0.031856876, 0.014788862, -0.013041088, -0.0066005704, 0.02323964, -0.017349705, 0.012477702, 0.009910459, -0.014571191, 0.012035958, -0.005377768, -0.010838764, 0.013329183, 0.02618461, 0.0016773515, -0.014519975, -0.016799124, 0.014865688, -0.013687701, 0.005672265, -0.006261259, -0.028246088, 0.00814988, -0.039949134, 0.0040013157, -0.03877115, 0.016094891, 0.0133804, -0.010448235, -0.011158869, -0.0011883908, -0.021088533, 0.011575006, -0.010883578, -0.012112782, 0.01809235, 0.024097523, 0.024660908, -0.00043574328, 0.010397019, 0.027042491, 0.008233107, -0.014699233, 0.031523965, 0.0142126735, 0.03323973, 0.014545582, -0.00028869492, 0.0083035305, -0.034801845, -0.0027080905, 0.006779829, 0.036773693, 0.012170401, -0.009692787, 0.009219031, -0.0030522035, -0.024673713, -0.095365755, -0.022919536, 0.012432888, 0.01475045, -0.0013924579, 0.0151473805, 0.010185749, 0.03743951, 0.00018466072, 0.02934725, -0.008322736, -0.017349705, -0.015019339, 0.002871344, 0.008476387, -0.013201141, 0.007996229, -0.025454769, -0.024981014, 0.0053297523, -0.004010919, -0.012420083, 0.0022039246, -0.004270204, -0.01629976, -0.020269064, -0.03920649, 0.019936156, 0.00498724, -0.00471515, 0.0152114015, -0.0072407806, 0.0048559965, -0.010768341, -0.017196054, 0.013790134, -0.014827276, -0.00037292263, 0.006101206, -0.03144714, 0.010268976, 0.012003947, 0.006510941, -0.028578997, -0.013508442, 0.0040269243, -0.013713309, -0.011971937, -0.009353476, -0.01937277, 0.010883578, 0.037004165, -0.0033835126, -0.011178075, 0.037516337, -0.020333085, 0.021280598, 0.0206788, -0.009455909, 0.004817584, 0.011088446, 0.012368867, 0.008508397, 0.02551879, -0.0053809695, -0.015390661, -0.027324185, 0.003533962, 0.012176803, -0.041895375, -0.0005985968, 0.02092208, -0.018745363, 0.013226749, -0.009603158, -0.001101162, -0.020755624, -0.011523789, 0.009558342, -0.00032050538, -0.026018154, -0.020614779, -0.006277264, -0.02366218, 0.0070423153, 0.022253716, -0.013341987, -0.004388643, 0.028604604, -0.014494366, 0.0005645856, 0.04312458, 0.013802938, -0.012260031, -0.0075352774, 0.011901514, 0.0122280205, 0.018284412, 0.00903337, -0.019398378, -0.021664724, -0.0026504714, -0.049321815, 0.010115326, -0.002378382, -0.023252446, -0.0032698752, 0.009878448, -0.01578759, -0.004033326, -0.005256128, -0.00535216, -0.0019750495, -0.002357575, -0.0050224513, 0.00065141416, -0.01402061, 0.0027016883, 0.018002719, -0.0050288537, 0.02722175, 0.00053697656, -0.0019126289, 0.014571191, 0.011101251, 0.0007462454, -0.016350977, 0.01742653, -0.03096058, -0.01523701, -0.016607061, -0.014468757, -0.0065493532, -0.018194782, 0.015006534, 0.039283317, -0.019257532, -0.01903986, -0.006155624, 0.030243544, 0.008822101, -0.020179436, -0.013687701, -0.043508705, 0.016632669, -0.013303574, -0.016325368, 0.0188606, -0.0016453409, -0.012727384, 0.005854725, -0.0013548455, 0.021050122, 0.027119316, -0.0002262744, -0.009122999, 0.00036051855, -0.017144836, 0.030089894, 0.008834905, 0.011120456, -0.03190809, 0.016607061, -0.012490507, -0.00034311283, 0.011939926, 0.008495593, 0.008521202, -0.017068012, -0.014699233, 0.0075736903, 0.007618505, -0.008265117, -0.00918702, 0.040256437, 0.008591625, 0.02323964, 0.0109476, -0.011991142, 0.0037964482, -0.0013764526, 0.008124271, 0.013239553, -0.0077721556, -0.019731287, 0.02691445, 0.020422716, 0.031984918, -0.038310196, -0.0009251042, 0.005364964, -0.005006446, -0.031370316, -0.004567902, -0.007701732, -0.002986582, -0.00413576, 0.0041901777, -0.0036620041, 0.0020870862, 0.015979653, 0.035390835, 0.013802938, -0.0062100417, -0.0079066, -0.026530324, -0.0088669155, 0.0077209384, -0.007804166, -0.0036363956, -0.012234422, 0.0076313093, 0.007080728, -0.021575093, -0.0007982625, 0.022010436, -0.0017189652, -0.005726683, -0.033316553, -0.028809473, -0.018783776, 0.0065557556, 0.0013556457, 0.011722255, -0.011658234, -0.010397019, 0.022253716, 0.027016884, 0.040154003, -0.031523965, -0.0037388294, 0.018719755, 0.011542995, -0.0032506688, 0.008469985, -0.01937277, -0.024443237, -0.0075096693, -0.019103881, 0.02609498, 0.016235739, 0.054084983, -0.004427056, -0.03577496, 0.017055208, 0.001292425, 0.007842579, 0.013802938, 0.0011843895, -0.014481561, -0.013713309, 0.002469612, 0.0009987283, 0.021203771, 0.0033451, -0.016837535, -0.0022279324, -0.01912949, 0.020000177, -0.031088622, -0.013028284, 0.022304934, 0.0052049113, 0.012356062, 0.0034571367, -0.016184522, -0.007151151, -0.006818242, 0.012388073, -0.005006446, -0.020909276, 0.017260075, -0.022420172, -0.023201229, -0.00021547085, 0.01466082, -0.018630126, -0.015685158, -0.025505986, -0.006213243, 0.014583996, -0.00046975445, 0.020819645, -0.015838807, -0.027452227, -0.011542995, -0.010064109, -0.020025784, 0.005979566, -0.023841439] }, { - "object": "embedding", "index": 3, - "embedding": [0.01577385, -0.0072296807, 0.0065341513, -0.021912377, -0.006553294, 0.0037105556, -0.01824968, -0.033232283, 0.011862292, -0.017496722, 0.019436548, 0.009731036, -0.0045847534, -0.0013471901, -0.016896907, -0.00010548602, 0.03307914, 0.011607052, 0.026468417, -0.016514046, -0.022308, 0.018185869, -0.008920648, 0.011626194, -0.020878654, -0.010196849, 0.008014545, -0.016654428, 0.0024199968, 0.015505847, 0.010509518, -0.018236918, 0.012238772, -0.025102882, -0.035759162, 0.015595181, 0.0045209434, -0.0034936012, 0.017062813, -0.018619778, -0.0006265351, 0.009845894, 0.0032798375, -0.007835876, -0.008984458, 0.012130294, 0.019538643, 0.0072871097, -0.017586054, 0.011638957, 0.003598888, 0.019181307, -0.018096536, -0.018734636, 0.011192286, -0.035248682, 0.0039466526, 0.017675389, 0.0057237633, -0.008180451, -0.0126024885, -0.016922431, 0.0041348925, -0.014050977, 0.004409276, -0.000938008, -0.009539605, 0.004303989, 0.00019840944, 0.0054972377, 0.021325326, 0.038005278, 0.006368245, 0.019359974, 0.025077358, 0.009265222, -0.013770213, 0.023418296, -0.004466705, -0.0031474316, 0.0009906513, -0.008735598, -0.03073093, -0.0048080888, 0.0144338375, -0.0017388244, -0.009628939, 0.00431037, -0.034993444, -0.0030772407, -0.011262477, 0.03073093, 0.026596038, -0.012111152, 0.00066123187, 0.014803936, 0.011313525, 0.029709969, 0.015735563, -0.035350777, 0.014931556, 0.004524134, -0.042446457, 0.0029831207, -0.024745544, -0.02059789, 0.0024790212, 0.003978558, 0.026162129, -0.020559605, -0.022256952, 0.023903253, 0.046683446, -0.023035435, -0.0019318499, -0.021044562, 0.012870491, -0.028306147, -0.017981678, -0.006052385, 0.0065245796, 0.051175676, 0.01799444, -0.015225083, 0.037060887, -0.0001232332, -0.008914267, -0.028969772, -0.0042178454, 0.015684515, -0.0063395305, 0.01730529, 0.0020706367, 0.01350221, 0.007274348, -0.0010265445, -0.0144338375, 0.02731071, -0.005950289, -0.019411024, 0.010815807, 0.032313418, -0.016067376, 0.0039307005, -0.006546913, 0.034993444, 0.015978042, -0.003972177, -0.020380937, -0.005615286, 0.0032479325, -0.011256096, 0.003187313, -0.0035765544, 0.015416513, 0.0052515687, -0.0071722516, 0.005302617, -0.027234137, 0.001990874, -0.019436548, -0.006451198, 0.030143877, -0.011875054, 0.04354399, 0.027872238, 0.0016104067, -0.002837953, -0.016258806, -0.002268448, 0.0006664164, 0.025166692, -0.012985349, 0.032313418, -0.017586054, 0.0121941045, 0.0077848285, -0.0018106108, -0.016360901, 0.004367799, -0.02491145, -0.003314933, 0.016207758, 0.004587944, 0.006033242, -0.00506971, 0.02547298, -0.008646265, 0.014880508, -0.004852756, 0.023801155, 0.025945174, -0.02160609, -0.033538572, -0.68118525, -0.043952376, 0.020074647, -0.0036339834, 0.0017978487, 0.02464345, 0.0067192004, 0.015442037, 0.0057173823, -0.01629709, 0.011811243, 0.005442999, 0.011077428, -0.013566021, -0.0060491944, -0.02243562, -0.0033851243, 0.022205904, -0.002155185, -0.015480323, 0.0005595345, 0.0069297734, -0.017649865, -0.011696386, 0.021963425, 0.009029125, 0.017445672, -0.00071148225, -0.017394625, -0.0018536826, -0.016845858, 0.015122986, -0.020827606, -0.013023635, 0.04696421, -0.011415621, -0.007070156, 0.024758307, 0.008799409, 0.026417369, -0.009635321, -0.0017547769, 0.01204096, -0.030935122, -0.013808499, 0.010694568, 0.015071939, -0.006680914, 0.0321858, 0.0014157859, 0.019500358, -0.03187951, 0.0051048053, 0.00994799, 0.007893305, 0.0015099058, 0.04234436, 0.00076292915, 0.0009435914, 0.007210538, 0.007133966, 0.0022174, -0.004664516, -0.016194995, -0.016628904, -0.0009108887, -0.038209468, -0.015850421, -0.018415585, -0.00071227987, -0.0053377124, 0.0041859406, -0.015850421, 0.02382668, 0.02027884, -0.005152663, 0.030756453, -0.009029125, 0.00024207945, -0.0021583757, 0.011141238, -0.014446599, -0.03111379, -0.017318053, 0.029633395, -0.021695424, -0.016246043, -0.025421932, 0.016105661, -0.0045751818, 0.025000785, -0.0013774999, -0.016105661, -0.0081357835, -0.013795737, 0.03614202, 0.002204638, 0.0030086448, 0.0034457438, 0.0059470986, -0.0026305702, -0.015978042, -0.0045177527, -1.5173586e-06, 0.026264224, -0.012213247, -0.027361758, 0.028408242, 0.0111795245, -0.015926993, 0.025077358, -0.0111795245, -0.009916085, 0.017662628, 0.011989912, -0.027846714, 0.04821489, 0.0024247826, 0.018709112, -0.008678169, 0.0065915803, 0.024822118, -0.009156745, -0.008295309, -0.0017834915, -0.013195923, -0.008907885, -0.012442963, -0.044207618, 0.0014556672, 0.0031649794, 0.009750179, 0.01679481, 0.006757486, 0.008646265, 0.0035574113, 0.010949808, -0.021618852, 0.024439257, -0.005797145, -0.011332668, -0.0010289374, -0.026008984, 0.013578783, 0.0033978862, -0.034253243, -0.03461058, -0.006119386, -0.012328105, 0.015352703, -0.023813918, -0.012315343, -0.039255954, 0.009903323, 0.015620705, -0.016526807, -0.02211657, -0.005430237, -0.013285256, 0.029837588, 0.016628904, 0.0011182715, 0.001812206, -0.0007577446, -0.0104329465, -0.0216699, -0.008295309, 0.0413234, -0.0007465778, -0.026442893, -0.021133894, 0.0010066038, -0.0039275098, -0.008212356, -0.015161272, -0.019972552, -0.0062629585, -0.015071939, 0.0034010767, -0.009437509, 0.01850492, 0.017164908, 0.009986276, -0.017407387, 0.04739812, 0.006999965, 0.016501283, 0.0028507148, 0.0015226678, -0.0018473015, -0.012525917, -0.010254278, 0.002959192, -0.0092779845, 0.009928847, 0.012149437, 0.010656281, 0.011211429, 0.0023817108, -0.0021950663, 0.00944389, -0.011351812, 0.017535007, -0.014280694, 0.00602048, -0.026876802, 0.017905105, -0.010694568, 0.0005623262, 0.026442893, 0.004367799, -0.023979824, -0.0032096466, -0.007574255, 0.016143948, -0.00589286, -0.024311636, 0.002935263, 0.0020339459, -0.0123344865, 0.0011836768, 0.014791174, 0.023520391, -0.014076501, -0.0037616035, 0.0016383235, 0.032338943, 0.01761158, -0.0070254887, -0.018173108, -0.023035435, -0.005101615, -0.012034579, 0.010700949, -0.032543134, -0.006077909, 0.0056408104, -0.0320837, 0.022308, 0.011938864, -0.011319906, 0.03517211, 0.025613362, 0.0048878514, 0.0039370814, -0.0013487854, 0.016335377, 0.011709148, -0.017854057, 0.006617104, -0.012525917, 0.009424747, -0.0034010767, 0.015658991, 0.039255954, -0.0083655, 0.036780123, 0.0015936565, 0.017101098, 0.023405533, -0.026085556, -0.0063714352, 0.0058450024, -0.0057684304, 0.013049159, -0.0009427938, -0.0054717134, -0.0018058249, 0.0050984244, -0.009386461, -0.017420148, -0.0018329442, 0.02876558, -0.007299872, 0.02674918, -0.010471232, -0.0052707116, -0.004361418, 0.0308075, 0.011422003, -0.008097498, -0.026111081, 0.014816698, -0.0011900578, -0.0047729933, -0.030118352, -0.023048198, 0.0177392, -0.0006349102, 0.009979894, 0.008378262, 0.009533225, 0.029199488, -0.0060842903, 0.0076189223, -0.02579203, 0.0057716207, 0.007880543, 0.01660338, 0.002325877, -0.004568801, -0.018275203, -0.032134753, -0.015875945, 0.011824006, 0.009845894, -0.006744724, 0.008422929, -0.01013942, -0.028740056, -0.011492194, -0.0005914396, 0.00079363777, -0.013770213, -0.005430237, -0.002332258, -0.029250536, 0.004530515, 0.034431912, 0.020802082, 0.005232426, -0.010113896, -0.012034579, -0.00880579, 0.077235706, 0.0249625, 0.008052831, 0.010094753, -0.002775738, -0.011562385, -0.028586911, 0.011983531, -0.01324697, -0.0065915803, 0.01660338, -0.026060032, 0.001767539, 0.004485848, 0.005165425, -0.006680914, 0.0071148225, -0.0013128922, 0.033793814, -0.020138457, 0.0061321477, 0.0017563722, -0.0140254535, 0.0123344865, 0.0037296985, -0.006483103, 0.007529588, -0.010228754, 0.015710039, -0.011568765, 0.00899722, 0.009737416, -0.007567874, -0.006572437, -0.017573293, 0.0024471162, -0.0017946583, 0.0056248577, 0.010145801, -0.014650792, 0.03606545, 0.004460324, 0.012787538, -0.0068851067, -0.02142742, 0.007076537, -0.014012692, 0.020546842, -0.011989912, -0.018173108, 0.026315272, 0.007357301, -0.015263368, 0.0059215743, 0.010720092, 0.0035893165, -0.010956189, -0.01807101, -0.007861401, 0.00093880564, 0.000978687, -0.007331777, 0.0024423304, -0.005494047, -0.015033652, -0.008659027, 0.0038636997, -0.0031043598, -0.017981678, -0.0034616962, 0.014625268, -0.012659918, -0.021874093, 0.0079954015, 0.027285187, 0.008544168, 0.017624341, -0.024311636, -0.01781577, 0.041655213, -0.0004343073, -0.0077401614, -0.0038668902, -0.0029879066, -0.0070382506, 0.0010345208, 0.025957936, -0.023494868, -0.014408314, -0.010560567, 0.03236447, -0.0018935638, 0.013068303, -0.005293045, -0.013770213, -0.010343612, 0.029607872, 0.0084612155, -0.009679987, 0.005293045, 0.003605269, -0.024783831, -0.00066163065, -0.015442037, 0.015799373, 0.01425517, 0.02851034, 0.0034553153, -0.017968915, 0.013195923, 0.0070127267, -0.009450272, -0.012557821, -0.0038987952, 0.004734707, 0.0068276776, -0.006065147, 0.014357266, -0.008722836, -0.027157566, -0.0015202749, -0.040838443, 0.027157566, 0.0017005383, 0.010675425, 0.0017101099, 0.027616998, -0.005755668, -0.013259732, 0.013323543, -0.009131221, 0.020648938, -0.010649901, -0.017330814, -0.033946957, -0.025485741, 0.033538572, 0.0022923767, -0.01604185, -0.0048814705, 0.011626194, 0.012762014, 0.009839512, 0.0026911898, -0.03529973, -0.023035435, -0.0055801906, 0.0040072724, -0.007070156, 0.016935192, -0.00957151, 0.0055546667, -0.009456652, 0.011071047, -0.001292154, -0.012666299, -0.031905036, -0.025562314, 0.03047569, 0.016743762, 0.017356338, -0.0026401416, 0.0038828426, 0.0016718238, -0.005666334, 0.0028826199, -0.00893341, 0.0018361347, -0.030118352, 0.014497648, 0.0138850715, -0.0028491195, 0.023941537, -0.005545095, 0.012436583, 0.013400114, -0.0042306078, -3.614242e-05, -0.026442893, -0.027412806, 0.007638065, -0.0001354967, -0.0076827323, -0.0018808017, -0.0001483584, -0.018594254, 0.01754777, 0.0029225012, -0.008008163, 0.0037616035, 0.03338543, -0.0009826751, 0.034304295, -0.0045528486, -0.002211019, -0.0052770926, -0.026902325, -0.0035223158, 0.013463925, 0.0068787253, 0.007236062, 0.005570619, 0.011906959, -0.024860403, 0.01577385, 0.01286411, 0.03149665, 0.008537787, -0.009207793, -0.01976836, -0.031011693, -0.036014404, -0.03662698, -0.03226237, 0.013336305, 0.0022317572, -0.031598747, 0.021542279, -0.008225118, -0.020457508, 0.008040069, 0.011530479, 0.029122915, 0.0008414953, 0.008907885, 0.02160609, -0.008595216, -0.008659027, 0.008320833, -0.011402859, -0.0067766295, 0.019270642, 0.019500358, -0.020227792, 0.024809355, 0.012723728, 0.011760196, 0.022091046, -0.009373699, -0.0033532192, -0.005289855, 0.010777521, -0.020776559, 0.011868672, -0.026136605, 0.005848193, -0.037290603, 0.0022923767, -0.0024168063, -0.010420185, -0.014663554, -0.0056535723, -0.03338543, 0.015327179, 0.021631613, 0.008391025, 0.006250196, -0.0068978686, -0.008384643, -0.0032176226, -0.010483994, 0.032721803, 0.00030868122, 0.0015354297, 0.006476722, -0.00128338, -0.010196849, -0.008257023, -0.003212837, 0.025370883, -0.0034489343, -0.0022174, -0.024132969, 0.008148545, 0.038617853, -0.01653957, -0.0007577446, -0.002136042, -0.0054334276, 0.0027214994, 0.006680914, 0.0018345395, -0.015199559, 0.018607017, -0.024069158, -0.012245152, -0.028050907, -0.0036084594, 0.008193213, -0.015607943, -0.005248378, -0.028050907, 0.014982604, 4.454242e-05, -0.0038381757, -0.017394625, 0.031037217, 0.005107996, -0.018594254, 0.01939826, 0.00013669314, 0.015901469, 0.002268448, 0.014318979, 0.004240179, -0.02515393, 0.030654358, 0.0021583757, -0.03529973, -0.027080994, -0.008907885, -0.0111795245, 0.0012618441, -0.005031424, 0.009335414, -0.0021902807, 0.013157636, -0.020636177, 0.0005794752, -0.005924765, -0.026340798, 0.018147584, 0.020623414, -0.020891417, -0.017522246, 0.0090099815, -0.011173143, 0.0013695236, -0.027361758, -0.008499501, -0.012647156, 0.01863254, 0.013221446, -0.01933445, -0.0039434624, -0.012321725, -0.012423821, 0.0033276952, -0.0021934712, 0.014370028, -0.0026991658, -0.0012474868, -0.024579639, 0.0142934555, -0.021465708, 0.013936119, 0.0016135972, -0.019755598, -0.017968915, -0.002136042, 0.0042050835, -0.004594325, -0.004811279, -0.030424641, -0.018351777, 0.0027023565, -0.003225599, -0.0027932858, 0.0017850867, 0.0081357835, 0.018262442, -0.0056535723, -0.015480323, 0.020546842, 0.0007437861, -0.0015936565, -0.018045487, -0.017841296, -0.008403786, -0.009297127, 0.013936119, 0.0038892238, 0.004556039, -0.008327214, 0.026442893, -0.016922431, 0.004916566, -0.004125321, -0.022997148, -0.00071307755, 0.02142742, 0.0200236, 0.031343505, 0.010069229, -0.008129403, -0.02313753, -0.005545095, 0.009469414, 0.037111938, -0.012513154, 0.0149698425, 0.009431128, -0.01033085, 0.0013926547, -0.03098617, 0.0075423503, 0.011683623, 0.021312563, 0.005596143, -0.0074849213, 0.011989912, 0.028586911, -0.0028507148, -0.022780195, -0.0014907627, -0.005360046, -0.03504449, 0.0014046192, 0.009533225, -0.028740056, 0.0076061604, -0.023673536, -0.004169988, -0.02344382, -0.007523207, -0.024796592, -0.00880579, -0.03392143, 0.028791104, 0.024554115, -0.009552367, 0.0088696, -0.028535863, -0.0027470235, -0.007006346, -0.009156745, -0.00969275, -0.026570512, -0.006623485, -0.007861401, 0.0006995179, -0.031649794, -0.005564238, 0.006540532, 0.0069170115, 0.020368174, 0.23420848, 0.008754741, -0.013591545, 0.032134753, -0.01812206, 0.025077358, 0.02376287, -0.015875945, 0.028484816, 0.036652505, -0.021657137, 0.0006440829, 0.00089174573, -0.0018345395, 0.011989912, -0.013030016, -0.03376829, -0.002338639, -0.0014357265, -0.0090801725, 0.01685862, 0.002649713, 0.009169507, 0.00033121413, 0.028995296, 0.015697276, -0.0069042495, 0.0036116499, 0.004476276, 0.01178572, -0.0012068079, -0.018721875, 0.004364609, -0.0060619568, 0.002522093, -0.0029065486, -0.0067383433, 0.003219218, 0.009386461, 0.038617853, 0.006058766, 0.0062629585, -0.024873165, -0.008550549, 0.004785755, 0.00849312, -0.015735563, -0.0067383433, 0.021950664, 0.015046414, -0.010152182, -0.0061449097, 0.044513904, 0.023214104, -0.011007237, 0.021823043, 0.033615146, -0.011268858, 0.025715457, -0.010349994, -0.0151102245, 0.023673536, -0.019883217, 0.004594325, 0.019155784, -0.0015721206, -0.015799373, 0.0051399013, 0.021912377, -0.022780195, 0.011332668, 0.0024550925, 0.0077146376, 0.0018042297, -0.0057173823, -0.019653501, 0.022716384, -0.006128957, 0.027897762, 0.006508627, -0.016360901, -0.008129403, -0.007644446, 0.01799444, -0.006700057, -0.008914267, -0.0018329442, 0.015684515, 0.022831243, -0.0068659633, 0.0041029872, -0.0029575967, 0.0016925621, 0.010273421, 0.030373594, 0.022550479, -0.005360046, 0.007363682, -0.026111081, -0.000995437, -0.034942392, -0.035657067, 0.004214655, -0.017190432, -0.00912484, 0.007248824, -0.0009746988, 0.0015107034, 0.033666193, -0.0004159619, 0.0040710825, -0.011996293, 0.0083335955, -0.008308071, 0.009003601, -0.0061576716, 0.013961643, -0.013234208, -0.017101098, -0.018747399, -0.0034648867, -0.020687224, 0.0017866819, -0.006700057, -4.6710964e-05, -0.019857693, -0.0027342616, -0.0025045453, 0.007261586, -0.042778272, 0.036473837, -0.0046868497, 0.02136361, -8.260413e-05, -0.005417475, 0.011906959, 0.00017288541, -0.0077210185, -0.00047059925, -0.008129403, 0.001628752, 0.0017404197, 0.00988418, -0.0052579497, 0.0014756079, -0.0066745332, 0.005886479, -0.02782119, -0.02718309, -0.024298875, -0.025396409, -0.010401041, -0.009405605, -0.0070573934, 0.009354556, 0.0030836216, -0.021478469, -0.008952552, 0.00095156766, 0.03111379, -0.0113773355, -0.0014588577, 0.026468417, -0.014803936, 0.013310781, 0.0030469308, -0.16253701, 0.024069158, 0.014140312, -0.014918794, -0.0050473763, -0.0026832134, 0.016182235, 0.020444747, -0.020189505, 0.028714532, -0.0036403644, 0.024630686, -0.042446457, -0.009137602, -0.012557821, 0.0009013172, 0.00013061124, -0.0009866632, 0.017407387, 0.0033564097, 0.007491302, -0.02091694, 0.022767432, 0.021057323, 0.0151102245, -0.0032559088, -0.026315272, 0.03256866, 0.0074721593, -0.007191395, -0.0070191077, -0.0034712679, -0.00025763316, 0.02491145, 0.016488522, -0.0026018557, 0.0023242817, 0.010547805, -0.00024566878, -0.010381898, 0.002238138, 0.028612435, 0.009609796, 0.012181343, 0.001036116, 0.02743833, 0.029097391, 0.02117218, 0.0035510303, -0.009597034, 0.023265151, -0.03338543, -0.013425639, -0.0078550195, 0.022154856, 0.020317126, 0.016399188, 0.009297127, -0.00817407, 0.009214174, 0.00066721404, -0.03864338, -0.023456581, 0.006377816, 0.0010608424, -0.0069808215, 0.01083495, 0.011906959, -0.004473086, 0.006052385, -0.020508556, -0.006259768, -0.0058450024, -0.02136361, -0.006559675, 0.0008973291, -0.01159429, -0.0026066413, -0.0035382684, -0.013183161, 0.010318088, 0.02249943, -0.015008128, -0.008786647, -0.008844076, 0.008927029, 0.004903804, 0.00823788, -0.024235064, -0.0005890467, 0.023290675, -0.036218595, 0.0037296985, -0.03946015, 0.008971696, 0.017343577, 0.0015737158, -0.011077428, 0.007848638, 0.012200485, 0.00022393346, 0.0013184756, -0.023839442, 0.00957151, 0.030322544, 0.018466635, -0.012238772, 0.0062151006, 0.030450165, -0.0040742727, -0.01685862, 0.022359049, -0.0046964213, 0.0067638676, 0.022984387, 0.010190468, 0.013731927, -0.02851034, -0.0014429052, 0.009597034, 0.048878513, -0.0061672432, -0.0062852916, 0.019500358, -0.0023099245, -0.030960646, -0.099952094, -0.013668117, 0.01780301, 0.020751035, 0.013706403, 0.02700442, 0.004986757, 0.0173691, 0.0023418295, 0.02414573, 0.0021870902, -0.022805719, -0.019500358, 0.0103627555, 0.005315379, -0.013463925, 0.018594254, -0.023022672, -0.05063967, 0.0037775561, -0.003924319, 0.0068532014, -0.0034234102, -0.016743762, -0.005296236, 0.0034457438, -0.024184017, 0.0058577643, 0.01786682, -0.0040327962, 0.010662663, -0.014791174, 0.0041923216, -0.0066681523, -0.008665407, -0.00039263134, -0.0047602314, 0.0012658322, 0.027514901, -0.030935122, -0.0045975153, 0.0022237808, 0.015263368, -0.032823898, -0.004138083, 0.010273421, -0.00010468839, 0.012296201, 0.0042497506, -0.019245116, 0.006077909, 0.020636177, -0.034636106, -0.009711892, 0.04410552, -0.029480252, 0.011613432, 0.01703729, -0.027080994, 0.021810282, 0.0048176604, 0.01703729, 0.0013152851, 0.029250536, -0.02598346, -0.016386425, -0.049006134, -0.008595216, 0.023022672, -0.031471126, 0.0034776488, 0.017535007, -0.016156709, -0.0040774634, -0.019819407, 0.019181307, -0.025192216, -0.013010873, 0.00842931, -0.012219628, -0.026417369, -0.020380937, 0.0081357835, -0.005666334, -0.0074147303, 0.029556824, -0.021950664, -0.008442072, 0.025549551, -0.002971954, 0.0133490665, 0.038617853, 0.013285256, -0.019525882, -0.008614359, 0.020967988, 0.007331777, 0.0028570958, 0.019206831, -0.018134821, -0.019755598, -0.0079252105, -0.035886783, 0.014778412, -0.014791174, -0.02445202, -0.0118559105, 0.013157636, -0.011709148, 0.0034680772, -0.011543241, -0.004476276, -0.011224192, -0.007344539, -0.012634394, -0.015978042, -0.005369617, 0.0027103326, 0.016756523, -0.001984493, 0.011875054, -0.009226936, -0.007248824, -0.0014915604, 0.0003704972, 0.008033688, -0.033232283, 0.0067192004, -0.016462998, -0.01906645, -0.029454729, -0.0020052313, 0.024184017, -0.02649394, 0.011485812, 0.026978897, -0.018709112, -0.03193056, -0.012162199, 0.021376373, 0.008435691, -0.020074647, -0.02389049, -0.022984387, 0.017152147, -0.0109817125, -0.01976836, 0.030781977, -0.01260887, -0.0076508275, 0.002065851, 0.012787538, 0.01850492, 0.017700912, 0.0027645712, -0.0052834735, -0.01159429, -0.008563311, 0.029148439, 0.012149437, 0.0067766295, -0.013821261, 0.0063522924, -0.0046868497, 0.013476687, 0.011664481, -0.0032463372, 0.018658064, -0.005666334, -0.0031266934, -0.0043199416, -0.023877729, -0.01425517, -0.0040264153, 0.050792817, 0.01634814, 0.012564203, -0.005950289, -0.009654463, -0.018262442, -0.012015436, 0.01703729, 0.0048240414, -0.0037233175, -0.01236001, -0.0010496756, 0.027642522, 0.023596963, -0.053243123, -0.008231499, 0.018262442, -0.0013639402, -0.024809355, 0.012755632, -0.0038605093, 0.008505883, 0.0132086845, 0.00033719634, -0.001473215, -0.006103433, -0.0029496204, 0.022333525, 0.0062246723, -0.017586054, -0.007382825, -0.03440639, -0.010113896, 0.024247827, -0.0069425358, -0.018339014, -0.0144338375, 0.018275203, 0.009112078, -0.014523172, 0.0035382684, 0.014114787, -0.0070382506, -0.0020291603, -0.039434623, -0.01013942, -0.013527735, 0.01362983, 0.011492194, 0.005190949, 0.009099316, -0.0032622898, 0.021376373, 0.010656281, 0.02649394, -0.038388137, 0.018466635, 0.007465778, 0.0027613807, 0.012876872, -0.015352703, 0.00228121, -0.024120206, -0.011996293, -0.016360901, 0.017956154, 0.0031346697, 0.0512012, -0.008856838, -0.031726368, 0.033308856, -0.024158493, 0.0015027272, 0.0121941045, 0.0007314229, -0.022831243, -0.0118559105, -0.0111795245, 0.013706403, 0.020176744, -0.016590618, -0.0045751818, -0.00020319519, -0.029812064, 0.027463853, -0.02807643, -0.0013352257, 0.028714532, 0.002611427, 0.011236954, 0.015442037, -0.018709112, -0.019053686, 0.014459361, 0.026111081, 0.0031665748, -0.0010576519, 0.019998075, -0.008754741, -0.022027235, -0.011504956, 0.0010209611, -0.0361165, -0.01596528, -0.014459361, -3.359999e-05, 0.014625268, 0.0084612155, 0.029888637, -0.020036362, -0.020100173, 0.005685477, -0.012781157, -0.0077848285, 0.007185014, -0.006240625] + "embedding": [0.01577385, -0.0072296807, 0.0065341513, -0.021912377, -0.006553294, 0.0037105556, -0.01824968, -0.033232283, 0.011862292, -0.017496722, 0.019436548, 0.009731036, -0.0045847534, -0.0013471901, -0.016896907, -0.00010548602, 0.03307914, 0.011607052, 0.026468417, -0.016514046, -0.022308, 0.018185869, -0.008920648, 0.011626194, -0.020878654, -0.010196849, 0.008014545, -0.016654428, 0.0024199968, 0.015505847, 0.010509518, -0.018236918, 0.012238772, -0.025102882, -0.035759162, 0.015595181, 0.0045209434, -0.0034936012, 0.017062813, -0.018619778, -0.0006265351, 0.009845894, 0.0032798375, -0.007835876, -0.008984458, 0.012130294, 0.019538643, 0.0072871097, -0.017586054, 0.011638957, 0.003598888, 0.019181307, -0.018096536, -0.018734636, 0.011192286, -0.035248682, 0.0039466526, 0.017675389, 0.0057237633, -0.008180451, -0.0126024885, -0.016922431, 0.0041348925, -0.014050977, 0.004409276, -0.000938008, -0.009539605, 0.004303989, 0.00019840944, 0.0054972377, 0.021325326, 0.038005278, 0.006368245, 0.019359974, 0.025077358, 0.009265222, -0.013770213, 0.023418296, -0.004466705, -0.0031474316, 0.0009906513, -0.008735598, -0.03073093, -0.0048080888, 0.0144338375, -0.0017388244, -0.009628939, 0.00431037, -0.034993444, -0.0030772407, -0.011262477, 0.03073093, 0.026596038, -0.012111152, 0.00066123187, 0.014803936, 0.011313525, 0.029709969, 0.015735563, -0.035350777, 0.014931556, 0.004524134, -0.042446457, 0.0029831207, -0.024745544, -0.02059789, 0.0024790212, 0.003978558, 0.026162129, -0.020559605, -0.022256952, 0.023903253, 0.046683446, -0.023035435, -0.0019318499, -0.021044562, 0.012870491, -0.028306147, -0.017981678, -0.006052385, 0.0065245796, 0.051175676, 0.01799444, -0.015225083, 0.037060887, -0.0001232332, -0.008914267, -0.028969772, -0.0042178454, 0.015684515, -0.0063395305, 0.01730529, 0.0020706367, 0.01350221, 0.007274348, -0.0010265445, -0.0144338375, 0.02731071, -0.005950289, -0.019411024, 0.010815807, 0.032313418, -0.016067376, 0.0039307005, -0.006546913, 0.034993444, 0.015978042, -0.003972177, -0.020380937, -0.005615286, 0.0032479325, -0.011256096, 0.003187313, -0.0035765544, 0.015416513, 0.0052515687, -0.0071722516, 0.005302617, -0.027234137, 0.001990874, -0.019436548, -0.006451198, 0.030143877, -0.011875054, 0.04354399, 0.027872238, 0.0016104067, -0.002837953, -0.016258806, -0.002268448, 0.0006664164, 0.025166692, -0.012985349, 0.032313418, -0.017586054, 0.0121941045, 0.0077848285, -0.0018106108, -0.016360901, 0.004367799, -0.02491145, -0.003314933, 0.016207758, 0.004587944, 0.006033242, -0.00506971, 0.02547298, -0.008646265, 0.014880508, -0.004852756, 0.023801155, 0.025945174, -0.02160609, -0.033538572, -0.68118525, -0.043952376, 0.020074647, -0.0036339834, 0.0017978487, 0.02464345, 0.0067192004, 0.015442037, 0.0057173823, -0.01629709, 0.011811243, 0.005442999, 0.011077428, -0.013566021, -0.0060491944, -0.02243562, -0.0033851243, 0.022205904, -0.002155185, -0.015480323, 0.0005595345, 0.0069297734, -0.017649865, -0.011696386, 0.021963425, 0.009029125, 0.017445672, -0.00071148225, -0.017394625, -0.0018536826, -0.016845858, 0.015122986, -0.020827606, -0.013023635, 0.04696421, -0.011415621, -0.007070156, 0.024758307, 0.008799409, 0.026417369, -0.009635321, -0.0017547769, 0.01204096, -0.030935122, -0.013808499, 0.010694568, 0.015071939, -0.006680914, 0.0321858, 0.0014157859, 0.019500358, -0.03187951, 0.0051048053, 0.00994799, 0.007893305, 0.0015099058, 0.04234436, 0.00076292915, 0.0009435914, 0.007210538, 0.007133966, 0.0022174, -0.004664516, -0.016194995, -0.016628904, -0.0009108887, -0.038209468, -0.015850421, -0.018415585, -0.00071227987, -0.0053377124, 0.0041859406, -0.015850421, 0.02382668, 0.02027884, -0.005152663, 0.030756453, -0.009029125, 0.00024207945, -0.0021583757, 0.011141238, -0.014446599, -0.03111379, -0.017318053, 0.029633395, -0.021695424, -0.016246043, -0.025421932, 0.016105661, -0.0045751818, 0.025000785, -0.0013774999, -0.016105661, -0.0081357835, -0.013795737, 0.03614202, 0.002204638, 0.0030086448, 0.0034457438, 0.0059470986, -0.0026305702, -0.015978042, -0.0045177527, -1.5173586e-06, 0.026264224, -0.012213247, -0.027361758, 0.028408242, 0.0111795245, -0.015926993, 0.025077358, -0.0111795245, -0.009916085, 0.017662628, 0.011989912, -0.027846714, 0.04821489, 0.0024247826, 0.018709112, -0.008678169, 0.0065915803, 0.024822118, -0.009156745, -0.008295309, -0.0017834915, -0.013195923, -0.008907885, -0.012442963, -0.044207618, 0.0014556672, 0.0031649794, 0.009750179, 0.01679481, 0.006757486, 0.008646265, 0.0035574113, 0.010949808, -0.021618852, 0.024439257, -0.005797145, -0.011332668, -0.0010289374, -0.026008984, 0.013578783, 0.0033978862, -0.034253243, -0.03461058, -0.006119386, -0.012328105, 0.015352703, -0.023813918, -0.012315343, -0.039255954, 0.009903323, 0.015620705, -0.016526807, -0.02211657, -0.005430237, -0.013285256, 0.029837588, 0.016628904, 0.0011182715, 0.001812206, -0.0007577446, -0.0104329465, -0.0216699, -0.008295309, 0.0413234, -0.0007465778, -0.026442893, -0.021133894, 0.0010066038, -0.0039275098, -0.008212356, -0.015161272, -0.019972552, -0.0062629585, -0.015071939, 0.0034010767, -0.009437509, 0.01850492, 0.017164908, 0.009986276, -0.017407387, 0.04739812, 0.006999965, 0.016501283, 0.0028507148, 0.0015226678, -0.0018473015, -0.012525917, -0.010254278, 0.002959192, -0.0092779845, 0.009928847, 0.012149437, 0.010656281, 0.011211429, 0.0023817108, -0.0021950663, 0.00944389, -0.011351812, 0.017535007, -0.014280694, 0.00602048, -0.026876802, 0.017905105, -0.010694568, 0.0005623262, 0.026442893, 0.004367799, -0.023979824, -0.0032096466, -0.007574255, 0.016143948, -0.00589286, -0.024311636, 0.002935263, 0.0020339459, -0.0123344865, 0.0011836768, 0.014791174, 0.023520391, -0.014076501, -0.0037616035, 0.0016383235, 0.032338943, 0.01761158, -0.0070254887, -0.018173108, -0.023035435, -0.005101615, -0.012034579, 0.010700949, -0.032543134, -0.006077909, 0.0056408104, -0.0320837, 0.022308, 0.011938864, -0.011319906, 0.03517211, 0.025613362, 0.0048878514, 0.0039370814, -0.0013487854, 0.016335377, 0.011709148, -0.017854057, 0.006617104, -0.012525917, 0.009424747, -0.0034010767, 0.015658991, 0.039255954, -0.0083655, 0.036780123, 0.0015936565, 0.017101098, 0.023405533, -0.026085556, -0.0063714352, 0.0058450024, -0.0057684304, 0.013049159, -0.0009427938, -0.0054717134, -0.0018058249, 0.0050984244, -0.009386461, -0.017420148, -0.0018329442, 0.02876558, -0.007299872, 0.02674918, -0.010471232, -0.0052707116, -0.004361418, 0.0308075, 0.011422003, -0.008097498, -0.026111081, 0.014816698, -0.0011900578, -0.0047729933, -0.030118352, -0.023048198, 0.0177392, -0.0006349102, 0.009979894, 0.008378262, 0.009533225, 0.029199488, -0.0060842903, 0.0076189223, -0.02579203, 0.0057716207, 0.007880543, 0.01660338, 0.002325877, -0.004568801, -0.018275203, -0.032134753, -0.015875945, 0.011824006, 0.009845894, -0.006744724, 0.008422929, -0.01013942, -0.028740056, -0.011492194, -0.0005914396, 0.00079363777, -0.013770213, -0.005430237, -0.002332258, -0.029250536, 0.004530515, 0.034431912, 0.020802082, 0.005232426, -0.010113896, -0.012034579, -0.00880579, 0.077235706, 0.0249625, 0.008052831, 0.010094753, -0.002775738, -0.011562385, -0.028586911, 0.011983531, -0.01324697, -0.0065915803, 0.01660338, -0.026060032, 0.001767539, 0.004485848, 0.005165425, -0.006680914, 0.0071148225, -0.0013128922, 0.033793814, -0.020138457, 0.0061321477, 0.0017563722, -0.0140254535, 0.0123344865, 0.0037296985, -0.006483103, 0.007529588, -0.010228754, 0.015710039, -0.011568765, 0.00899722, 0.009737416, -0.007567874, -0.006572437, -0.017573293, 0.0024471162, -0.0017946583, 0.0056248577, 0.010145801, -0.014650792, 0.03606545, 0.004460324, 0.012787538, -0.0068851067, -0.02142742, 0.007076537, -0.014012692, 0.020546842, -0.011989912, -0.018173108, 0.026315272, 0.007357301, -0.015263368, 0.0059215743, 0.010720092, 0.0035893165, -0.010956189, -0.01807101, -0.007861401, 0.00093880564, 0.000978687, -0.007331777, 0.0024423304, -0.005494047, -0.015033652, -0.008659027, 0.0038636997, -0.0031043598, -0.017981678, -0.0034616962, 0.014625268, -0.012659918, -0.021874093, 0.0079954015, 0.027285187, 0.008544168, 0.017624341, -0.024311636, -0.01781577, 0.041655213, -0.0004343073, -0.0077401614, -0.0038668902, -0.0029879066, -0.0070382506, 0.0010345208, 0.025957936, -0.023494868, -0.014408314, -0.010560567, 0.03236447, -0.0018935638, 0.013068303, -0.005293045, -0.013770213, -0.010343612, 0.029607872, 0.0084612155, -0.009679987, 0.005293045, 0.003605269, -0.024783831, -0.00066163065, -0.015442037, 0.015799373, 0.01425517, 0.02851034, 0.0034553153, -0.017968915, 0.013195923, 0.0070127267, -0.009450272, -0.012557821, -0.0038987952, 0.004734707, 0.0068276776, -0.006065147, 0.014357266, -0.008722836, -0.027157566, -0.0015202749, -0.040838443, 0.027157566, 0.0017005383, 0.010675425, 0.0017101099, 0.027616998, -0.005755668, -0.013259732, 0.013323543, -0.009131221, 0.020648938, -0.010649901, -0.017330814, -0.033946957, -0.025485741, 0.033538572, 0.0022923767, -0.01604185, -0.0048814705, 0.011626194, 0.012762014, 0.009839512, 0.0026911898, -0.03529973, -0.023035435, -0.0055801906, 0.0040072724, -0.007070156, 0.016935192, -0.00957151, 0.0055546667, -0.009456652, 0.011071047, -0.001292154, -0.012666299, -0.031905036, -0.025562314, 0.03047569, 0.016743762, 0.017356338, -0.0026401416, 0.0038828426, 0.0016718238, -0.005666334, 0.0028826199, -0.00893341, 0.0018361347, -0.030118352, 0.014497648, 0.0138850715, -0.0028491195, 0.023941537, -0.005545095, 0.012436583, 0.013400114, -0.0042306078, -3.614242e-05, -0.026442893, -0.027412806, 0.007638065, -0.0001354967, -0.0076827323, -0.0018808017, -0.0001483584, -0.018594254, 0.01754777, 0.0029225012, -0.008008163, 0.0037616035, 0.03338543, -0.0009826751, 0.034304295, -0.0045528486, -0.002211019, -0.0052770926, -0.026902325, -0.0035223158, 0.013463925, 0.0068787253, 0.007236062, 0.005570619, 0.011906959, -0.024860403, 0.01577385, 0.01286411, 0.03149665, 0.008537787, -0.009207793, -0.01976836, -0.031011693, -0.036014404, -0.03662698, -0.03226237, 0.013336305, 0.0022317572, -0.031598747, 0.021542279, -0.008225118, -0.020457508, 0.008040069, 0.011530479, 0.029122915, 0.0008414953, 0.008907885, 0.02160609, -0.008595216, -0.008659027, 0.008320833, -0.011402859, -0.0067766295, 0.019270642, 0.019500358, -0.020227792, 0.024809355, 0.012723728, 0.011760196, 0.022091046, -0.009373699, -0.0033532192, -0.005289855, 0.010777521, -0.020776559, 0.011868672, -0.026136605, 0.005848193, -0.037290603, 0.0022923767, -0.0024168063, -0.010420185, -0.014663554, -0.0056535723, -0.03338543, 0.015327179, 0.021631613, 0.008391025, 0.006250196, -0.0068978686, -0.008384643, -0.0032176226, -0.010483994, 0.032721803, 0.00030868122, 0.0015354297, 0.006476722, -0.00128338, -0.010196849, -0.008257023, -0.003212837, 0.025370883, -0.0034489343, -0.0022174, -0.024132969, 0.008148545, 0.038617853, -0.01653957, -0.0007577446, -0.002136042, -0.0054334276, 0.0027214994, 0.006680914, 0.0018345395, -0.015199559, 0.018607017, -0.024069158, -0.012245152, -0.028050907, -0.0036084594, 0.008193213, -0.015607943, -0.005248378, -0.028050907, 0.014982604, 4.454242e-05, -0.0038381757, -0.017394625, 0.031037217, 0.005107996, -0.018594254, 0.01939826, 0.00013669314, 0.015901469, 0.002268448, 0.014318979, 0.004240179, -0.02515393, 0.030654358, 0.0021583757, -0.03529973, -0.027080994, -0.008907885, -0.0111795245, 0.0012618441, -0.005031424, 0.009335414, -0.0021902807, 0.013157636, -0.020636177, 0.0005794752, -0.005924765, -0.026340798, 0.018147584, 0.020623414, -0.020891417, -0.017522246, 0.0090099815, -0.011173143, 0.0013695236, -0.027361758, -0.008499501, -0.012647156, 0.01863254, 0.013221446, -0.01933445, -0.0039434624, -0.012321725, -0.012423821, 0.0033276952, -0.0021934712, 0.014370028, -0.0026991658, -0.0012474868, -0.024579639, 0.0142934555, -0.021465708, 0.013936119, 0.0016135972, -0.019755598, -0.017968915, -0.002136042, 0.0042050835, -0.004594325, -0.004811279, -0.030424641, -0.018351777, 0.0027023565, -0.003225599, -0.0027932858, 0.0017850867, 0.0081357835, 0.018262442, -0.0056535723, -0.015480323, 0.020546842, 0.0007437861, -0.0015936565, -0.018045487, -0.017841296, -0.008403786, -0.009297127, 0.013936119, 0.0038892238, 0.004556039, -0.008327214, 0.026442893, -0.016922431, 0.004916566, -0.004125321, -0.022997148, -0.00071307755, 0.02142742, 0.0200236, 0.031343505, 0.010069229, -0.008129403, -0.02313753, -0.005545095, 0.009469414, 0.037111938, -0.012513154, 0.0149698425, 0.009431128, -0.01033085, 0.0013926547, -0.03098617, 0.0075423503, 0.011683623, 0.021312563, 0.005596143, -0.0074849213, 0.011989912, 0.028586911, -0.0028507148, -0.022780195, -0.0014907627, -0.005360046, -0.03504449, 0.0014046192, 0.009533225, -0.028740056, 0.0076061604, -0.023673536, -0.004169988, -0.02344382, -0.007523207, -0.024796592, -0.00880579, -0.03392143, 0.028791104, 0.024554115, -0.009552367, 0.0088696, -0.028535863, -0.0027470235, -0.007006346, -0.009156745, -0.00969275, -0.026570512, -0.006623485, -0.007861401, 0.0006995179, -0.031649794, -0.005564238, 0.006540532, 0.0069170115, 0.020368174, 0.23420848, 0.008754741, -0.013591545, 0.032134753, -0.01812206, 0.025077358, 0.02376287, -0.015875945, 0.028484816, 0.036652505, -0.021657137, 0.0006440829, 0.00089174573, -0.0018345395, 0.011989912, -0.013030016, -0.03376829, -0.002338639, -0.0014357265, -0.0090801725, 0.01685862, 0.002649713, 0.009169507, 0.00033121413, 0.028995296, 0.015697276, -0.0069042495, 0.0036116499, 0.004476276, 0.01178572, -0.0012068079, -0.018721875, 0.004364609, -0.0060619568, 0.002522093, -0.0029065486, -0.0067383433, 0.003219218, 0.009386461, 0.038617853, 0.006058766, 0.0062629585, -0.024873165, -0.008550549, 0.004785755, 0.00849312, -0.015735563, -0.0067383433, 0.021950664, 0.015046414, -0.010152182, -0.0061449097, 0.044513904, 0.023214104, -0.011007237, 0.021823043, 0.033615146, -0.011268858, 0.025715457, -0.010349994, -0.0151102245, 0.023673536, -0.019883217, 0.004594325, 0.019155784, -0.0015721206, -0.015799373, 0.0051399013, 0.021912377, -0.022780195, 0.011332668, 0.0024550925, 0.0077146376, 0.0018042297, -0.0057173823, -0.019653501, 0.022716384, -0.006128957, 0.027897762, 0.006508627, -0.016360901, -0.008129403, -0.007644446, 0.01799444, -0.006700057, -0.008914267, -0.0018329442, 0.015684515, 0.022831243, -0.0068659633, 0.0041029872, -0.0029575967, 0.0016925621, 0.010273421, 0.030373594, 0.022550479, -0.005360046, 0.007363682, -0.026111081, -0.000995437, -0.034942392, -0.035657067, 0.004214655, -0.017190432, -0.00912484, 0.007248824, -0.0009746988, 0.0015107034, 0.033666193, -0.0004159619, 0.0040710825, -0.011996293, 0.0083335955, -0.008308071, 0.009003601, -0.0061576716, 0.013961643, -0.013234208, -0.017101098, -0.018747399, -0.0034648867, -0.020687224, 0.0017866819, -0.006700057, -4.6710964e-05, -0.019857693, -0.0027342616, -0.0025045453, 0.007261586, -0.042778272, 0.036473837, -0.0046868497, 0.02136361, -8.260413e-05, -0.005417475, 0.011906959, 0.00017288541, -0.0077210185, -0.00047059925, -0.008129403, 0.001628752, 0.0017404197, 0.00988418, -0.0052579497, 0.0014756079, -0.0066745332, 0.005886479, -0.02782119, -0.02718309, -0.024298875, -0.025396409, -0.010401041, -0.009405605, -0.0070573934, 0.009354556, 0.0030836216, -0.021478469, -0.008952552, 0.00095156766, 0.03111379, -0.0113773355, -0.0014588577, 0.026468417, -0.014803936, 0.013310781, 0.0030469308, -0.16253701, 0.024069158, 0.014140312, -0.014918794, -0.0050473763, -0.0026832134, 0.016182235, 0.020444747, -0.020189505, 0.028714532, -0.0036403644, 0.024630686, -0.042446457, -0.009137602, -0.012557821, 0.0009013172, 0.00013061124, -0.0009866632, 0.017407387, 0.0033564097, 0.007491302, -0.02091694, 0.022767432, 0.021057323, 0.0151102245, -0.0032559088, -0.026315272, 0.03256866, 0.0074721593, -0.007191395, -0.0070191077, -0.0034712679, -0.00025763316, 0.02491145, 0.016488522, -0.0026018557, 0.0023242817, 0.010547805, -0.00024566878, -0.010381898, 0.002238138, 0.028612435, 0.009609796, 0.012181343, 0.001036116, 0.02743833, 0.029097391, 0.02117218, 0.0035510303, -0.009597034, 0.023265151, -0.03338543, -0.013425639, -0.0078550195, 0.022154856, 0.020317126, 0.016399188, 0.009297127, -0.00817407, 0.009214174, 0.00066721404, -0.03864338, -0.023456581, 0.006377816, 0.0010608424, -0.0069808215, 0.01083495, 0.011906959, -0.004473086, 0.006052385, -0.020508556, -0.006259768, -0.0058450024, -0.02136361, -0.006559675, 0.0008973291, -0.01159429, -0.0026066413, -0.0035382684, -0.013183161, 0.010318088, 0.02249943, -0.015008128, -0.008786647, -0.008844076, 0.008927029, 0.004903804, 0.00823788, -0.024235064, -0.0005890467, 0.023290675, -0.036218595, 0.0037296985, -0.03946015, 0.008971696, 0.017343577, 0.0015737158, -0.011077428, 0.007848638, 0.012200485, 0.00022393346, 0.0013184756, -0.023839442, 0.00957151, 0.030322544, 0.018466635, -0.012238772, 0.0062151006, 0.030450165, -0.0040742727, -0.01685862, 0.022359049, -0.0046964213, 0.0067638676, 0.022984387, 0.010190468, 0.013731927, -0.02851034, -0.0014429052, 0.009597034, 0.048878513, -0.0061672432, -0.0062852916, 0.019500358, -0.0023099245, -0.030960646, -0.099952094, -0.013668117, 0.01780301, 0.020751035, 0.013706403, 0.02700442, 0.004986757, 0.0173691, 0.0023418295, 0.02414573, 0.0021870902, -0.022805719, -0.019500358, 0.0103627555, 0.005315379, -0.013463925, 0.018594254, -0.023022672, -0.05063967, 0.0037775561, -0.003924319, 0.0068532014, -0.0034234102, -0.016743762, -0.005296236, 0.0034457438, -0.024184017, 0.0058577643, 0.01786682, -0.0040327962, 0.010662663, -0.014791174, 0.0041923216, -0.0066681523, -0.008665407, -0.00039263134, -0.0047602314, 0.0012658322, 0.027514901, -0.030935122, -0.0045975153, 0.0022237808, 0.015263368, -0.032823898, -0.004138083, 0.010273421, -0.00010468839, 0.012296201, 0.0042497506, -0.019245116, 0.006077909, 0.020636177, -0.034636106, -0.009711892, 0.04410552, -0.029480252, 0.011613432, 0.01703729, -0.027080994, 0.021810282, 0.0048176604, 0.01703729, 0.0013152851, 0.029250536, -0.02598346, -0.016386425, -0.049006134, -0.008595216, 0.023022672, -0.031471126, 0.0034776488, 0.017535007, -0.016156709, -0.0040774634, -0.019819407, 0.019181307, -0.025192216, -0.013010873, 0.00842931, -0.012219628, -0.026417369, -0.020380937, 0.0081357835, -0.005666334, -0.0074147303, 0.029556824, -0.021950664, -0.008442072, 0.025549551, -0.002971954, 0.0133490665, 0.038617853, 0.013285256, -0.019525882, -0.008614359, 0.020967988, 0.007331777, 0.0028570958, 0.019206831, -0.018134821, -0.019755598, -0.0079252105, -0.035886783, 0.014778412, -0.014791174, -0.02445202, -0.0118559105, 0.013157636, -0.011709148, 0.0034680772, -0.011543241, -0.004476276, -0.011224192, -0.007344539, -0.012634394, -0.015978042, -0.005369617, 0.0027103326, 0.016756523, -0.001984493, 0.011875054, -0.009226936, -0.007248824, -0.0014915604, 0.0003704972, 0.008033688, -0.033232283, 0.0067192004, -0.016462998, -0.01906645, -0.029454729, -0.0020052313, 0.024184017, -0.02649394, 0.011485812, 0.026978897, -0.018709112, -0.03193056, -0.012162199, 0.021376373, 0.008435691, -0.020074647, -0.02389049, -0.022984387, 0.017152147, -0.0109817125, -0.01976836, 0.030781977, -0.01260887, -0.0076508275, 0.002065851, 0.012787538, 0.01850492, 0.017700912, 0.0027645712, -0.0052834735, -0.01159429, -0.008563311, 0.029148439, 0.012149437, 0.0067766295, -0.013821261, 0.0063522924, -0.0046868497, 0.013476687, 0.011664481, -0.0032463372, 0.018658064, -0.005666334, -0.0031266934, -0.0043199416, -0.023877729, -0.01425517, -0.0040264153, 0.050792817, 0.01634814, 0.012564203, -0.005950289, -0.009654463, -0.018262442, -0.012015436, 0.01703729, 0.0048240414, -0.0037233175, -0.01236001, -0.0010496756, 0.027642522, 0.023596963, -0.053243123, -0.008231499, 0.018262442, -0.0013639402, -0.024809355, 0.012755632, -0.0038605093, 0.008505883, 0.0132086845, 0.00033719634, -0.001473215, -0.006103433, -0.0029496204, 0.022333525, 0.0062246723, -0.017586054, -0.007382825, -0.03440639, -0.010113896, 0.024247827, -0.0069425358, -0.018339014, -0.0144338375, 0.018275203, 0.009112078, -0.014523172, 0.0035382684, 0.014114787, -0.0070382506, -0.0020291603, -0.039434623, -0.01013942, -0.013527735, 0.01362983, 0.011492194, 0.005190949, 0.009099316, -0.0032622898, 0.021376373, 0.010656281, 0.02649394, -0.038388137, 0.018466635, 0.007465778, 0.0027613807, 0.012876872, -0.015352703, 0.00228121, -0.024120206, -0.011996293, -0.016360901, 0.017956154, 0.0031346697, 0.0512012, -0.008856838, -0.031726368, 0.033308856, -0.024158493, 0.0015027272, 0.0121941045, 0.0007314229, -0.022831243, -0.0118559105, -0.0111795245, 0.013706403, 0.020176744, -0.016590618, -0.0045751818, -0.00020319519, -0.029812064, 0.027463853, -0.02807643, -0.0013352257, 0.028714532, 0.002611427, 0.011236954, 0.015442037, -0.018709112, -0.019053686, 0.014459361, 0.026111081, 0.0031665748, -0.0010576519, 0.019998075, -0.008754741, -0.022027235, -0.011504956, 0.0010209611, -0.0361165, -0.01596528, -0.014459361, -3.359999e-05, 0.014625268, 0.0084612155, 0.029888637, -0.020036362, -0.020100173, 0.005685477, -0.012781157, -0.0077848285, 0.007185014, -0.006240625], + "object": "embedding" }, { "object": "embedding", @@ -68,7 +70,7 @@ X-Request-Id: req_058307448e324bc3958c7da418e46690 } ], "model": "text-embedding-ada-002-v2" -}327 22076 +}327 22142 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -80,20 +82,22 @@ Content-Type: application/json Content-Length: 21186 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:17 GMT +Date: Mon, 21 Sep 2026 07:48:02 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 105 +Openai-Processing-Ms: 110 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-5bddb4cdd8-ggbwb +Via: envoy-router-84fffc8dd7-pxjf2 X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 126 +X-Engine-Geography: EU X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 X-Ratelimit-Limit-Tokens: 10000000 @@ -101,15 +105,15 @@ X-Ratelimit-Remaining-Requests: 9999 X-Ratelimit-Remaining-Tokens: 9999979 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_25786abf429546a0a9de6148854e5360 +X-Request-Id: req_07c4f59d847c4190ab95c4fe99d92ec5 { "object": "list", "data": [ { - "object": "embedding", "index": 0, - "embedding": [0.010940914, 0.00037101895, 0.0019054401, -0.018620905, -0.012196111, 0.010196854, -0.024728665, -0.0048946193, 0.019022051, 0.0058942474, 0.0070329825, -0.0033191538, -0.022502957, 0.0068453504, -0.005832782, 0.0009373536, 0.010552709, 0.016097572, 0.026281487, -0.020885436, -0.032816272, 0.009122821, -0.003642658, -0.0032479828, -0.021040717, 0.008708735, 0.030823486, -0.004545235, 0.009433384, 0.01748217, 0.03421381, -0.010170974, 0.0015277489, -0.039596923, -0.012558435, 0.02888246, 0.00837229, 0.0072982563, 0.01519176, -0.007815863, -0.0021076303, 0.009562786, 0.00030207212, 9.371514e-05, -0.0046228757, 0.0040761535, 0.011186778, 0.016226973, -0.015748188, 0.0040082177, 0.021959469, 0.036517162, -0.02049723, -0.017805675, 0.009291043, -0.018426802, 0.0032415127, 0.041434426, -0.035973676, -0.011549102, 0.009724538, 0.002754639, -0.0017954487, -0.001341734, -0.004102034, -0.015049418, -0.01288841, 0.0018569145, -0.0029940319, 0.0110250255, 0.034343213, 0.055849776, 0.015101179, 0.01589053, 0.033152718, -0.0014484903, 0.0087928455, 0.0023809914, -0.0065024355, -0.0027853716, 0.00987335, 0.0012762243, -0.027873127, -0.0019572007, 0.023175845, 0.00016347074, 0.02357699, 0.027588444, -0.007912914, -0.0021302756, -0.015372923, 0.028494256, 0.009769829, -0.011251478, -0.0077058715, 0.01586465, 0.019229094, 0.022671178, 0.004791098, -0.02968475, 0.015579965, 0.017715093, -0.03856171, 0.0033417991, -0.019034991, -0.027484922, -0.000926031, -0.020717213, 0.020354887, -0.014907076, -0.034472615, 0.028261332, 0.023318186, -0.016201094, -0.002047782, -0.01818094, 0.035559587, -0.018698547, -0.009815119, -0.016421076, 0.0045064143, 0.043634254, 0.026126204, -0.026993196, 0.028753059, 0.002591269, -0.008864017, -0.0067030084, -0.026372068, -0.016472837, 0.007692931, 0.022671178, 0.009316923, 0.027536683, -0.006596252, 0.0040308633, -0.016252855, 0.021687726, 0.00646685, -0.008171718, 0.011736735, 0.015424684, -0.009252222, -0.0074858884, 0.00986688, 0.034162052, 0.012364333, -0.011283829, -0.021739487, -0.0035132563, 0.01445417, 0.00044684028, 0.015411743, 0.0130372215, 0.0069488715, 0.017145727, -0.03623248, -0.018336222, -0.030849367, -0.012726658, -0.023357008, -0.010119214, 0.025957981, -0.0077705723, 0.028649537, 0.020238427, 0.027226118, 0.012364333, -0.0064215595, -0.003500316, -0.012435504, 0.019940803, -0.020303128, 0.0072335554, 0.004037333, 0.0078029227, 0.017249247, -0.0077899825, -0.008876957, -0.0038917563, 0.0061336407, -0.020290187, 0.01749511, -0.009232812, -0.0095174955, -0.023939315, 0.0104103675, -0.01666694, 0.0027061133, -0.006631837, 0.030487042, 0.005842487, -0.0058133714, -0.011245009, -0.65384096, -0.046429332, 0.023887554, -0.02202417, 0.012344923, 0.03035764, 0.02357699, 0.030849367, 4.443129e-05, -0.02348641, 0.012830179, 0.0069553414, 0.027743725, -0.017702153, -0.0037300042, -0.024625145, 0.022425316, 0.014285948, -0.011490871, 0.0017356004, -0.0060527646, 0.020885436, 0.00063164206, -0.006389209, 0.02820957, 0.009045179, 0.017702153, -0.008488752, -0.009679248, 0.015308222, -0.024366342, 0.015321162, -0.020354887, -0.005528688, 0.037552375, -0.00085647753, -0.0212607, 0.015359983, 0.0062953928, 0.024819247, -0.0097439485, 0.008482282, 0.008495222, -0.01589053, 0.0074729486, 0.00025597276, 0.018944409, 0.0017792735, 0.0377853, -0.014492991, 0.00914223, -0.017081026, -0.0031638716, 0.014156546, 0.03284215, 0.0013207061, 0.04461771, 0.019306734, 0.005751906, 0.006282453, 0.003338564, -0.001672517, -0.035326667, -0.008132897, -0.031366974, 0.0043737777, -0.038173504, -0.03470554, -0.023046443, -0.02346053, 0.010462128, 0.011122077, -0.01900911, 0.020393709, 0.028468376, 0.0073306067, 0.02952947, 0.0032091623, 0.011458521, -0.012260811, -0.0056645595, -0.0049916706, -0.03108229, -0.0145447515, 0.029348306, -0.016615178, -0.019280855, -0.01667988, 0.016511658, 0.005020786, 0.013496598, 0.018646786, 0.00041812926, -0.006165991, -0.00142908, 0.026941435, -0.004781393, 0.0017339828, -0.00045411912, -0.001118516, 0.006123936, -0.012435504, -0.0060074744, 0.0031800468, 0.024081657, -0.015722306, -0.027484922, 0.03411029, 0.01977258, -0.00685829, 0.008728145, -0.04182263, -0.015994051, 0.0071947346, 0.009362213, -0.032221023, 0.045989364, 0.0014808407, 0.0024553973, -0.0042023202, 0.017663334, 0.0045064143, -0.007945265, -0.009232812, 0.024482803, 0.0016102424, 0.0017792735, -0.02509099, -0.018439744, 0.017986838, 0.019086752, 0.0007299065, 0.008119957, -0.00094058865, -0.009426914, -0.013276615, 0.009595136, -0.011070316, 0.023887554, -0.023952255, -0.021674786, -0.009051649, 0.0006474129, 0.0032318076, -0.004878444, -0.016563417, -0.030150598, -0.0001479021, -0.028546017, -0.0063374485, -0.03403265, -0.014648273, -0.04016629, 0.0066835983, 0.025686238, 0.001750158, -0.03328212, 0.00026648663, -0.0035035512, 0.016485777, 0.0033029786, -0.012551965, 0.0028533076, 0.005839252, -0.008139367, -0.021571264, -0.020587811, 0.023796974, -0.0003390729, -0.02505217, -0.0032512178, -0.008779906, -0.0055675083, -0.0077770427, -0.024599263, -0.004923735, -0.0044158334, -0.014790615, -0.00012242615, -0.0073370766, -0.00047595563, 0.008074666, -0.0029244786, 0.010772692, 0.032945674, 2.8913193e-05, 0.016861042, 0.018413862, -0.017042205, 0.006243632, 0.002578329, -0.0057195555, -0.014609452, -0.017728034, 0.0074664783, 0.0052569443, -0.005463987, -0.0063180383, 0.01062388, -0.0060333544, 0.025401555, -0.0032835682, 0.018802067, -0.028261332, 0.013406017, -0.02511687, 0.011542632, -0.008954598, -0.008391701, 0.028623657, 0.017792735, -0.042935487, 0.0024246646, -0.019345555, 0.017960956, -0.01291429, -0.020950137, 0.016861042, -0.019707879, 0.0038141152, 0.005011081, 0.0037720597, 0.02958123, -0.006227457, -0.015023538, -0.01065623, 0.023227606, 0.024547504, 0.0013902596, -0.013418957, -0.018879708, -0.012299632, -0.0061142305, 0.013444837, -0.017676273, 0.00681947, 0.0050434317, -0.017844494, -0.0035164913, 0.009756888, -0.006696538, 0.03266099, 0.0021852714, -0.005451047, 0.029814152, -0.0038335256, 0.007660581, 0.028313093, -0.027510803, 0.01138088, 0.0070847436, -0.00042823877, -0.01749511, 0.02197241, 0.018672666, -0.0107468115, 0.045212954, -0.012351393, 0.01290135, 0.012610196, -0.0020332243, -0.017236307, 0.012707247, -0.021623025, 0.014324768, -0.009808649, -0.025621537, -0.00493991, 0.012331982, -0.012293162, 2.7598957e-05, 0.010843863, 0.012991931, 0.0070265126, 0.009316923, -0.00681947, 0.0012835031, -0.018620905, 0.025699178, 0.0076864613, -0.006140111, -0.020898376, 0.021726547, 0.00683241, -0.0080681965, -0.008268769, -0.021687726, 0.01440241, -0.012759008, 0.009718068, 0.016511658, 0.027459042, 0.020419588, -0.0082364185, -0.00569691, -0.030538803, 0.007938795, 0.0078029227, 0.021765366, 0.0044352436, -0.009899231, -0.0009575726, -0.041356783, -0.013690701, 0.017042205, 0.010953855, 0.004710222, -0.015631726, -0.026203845, -0.04927617, -0.012564906, 0.00022584641, -0.01220258, -0.0042929016, -0.00569691, -0.008398171, -0.044255383, -0.009957462, 0.04557528, 0.0258674, -0.017365709, -0.028390734, -0.008689324, 0.0007481036, 0.07049805, 0.02743316, -0.013393076, 0.01587759, -0.00081765704, -0.010455658, -0.0034841408, -0.0019620534, 0.008022905, -0.008935188, 0.003068438, 0.002510393, 0.0032593054, -0.0079582045, 0.0036361879, -0.0070071025, -0.005628974, -0.019358495, 0.011743205, -0.03113405, -0.02127364, 0.017637452, -0.005758376, 0.020846615, -0.0070912135, 0.028002528, 0.014117726, 0.00058109453, 0.01667988, -0.026061503, 0.0099121705, 0.023072325, -0.012739598, 0.0050369613, -0.027717846, -0.030487042, -0.010889154, 0.021713607, 0.0070847436, -0.003581192, 0.022412375, 0.0019749936, -0.0024780426, -0.02274882, -0.0035456067, 0.025401555, -0.016175212, 0.011704384, -0.0076799914, -0.015554085, 0.007505299, -0.007117094, -0.0017275128, -0.0069359313, 0.0052342988, -0.011173837, -0.033825606, -0.014040085, -0.003869111, -0.022127692, 0.0061271708, 0.014040085, 0.009750418, 0.00084596366, -0.018310342, -0.032790393, -0.013975384, 0.0027837541, -0.008482282, -0.02192065, -0.020794854, -0.0036232478, -0.0073241363, -0.004244376, 0.03364444, 0.02655323, 0.025336854, -0.023589931, 0.005011081, 0.033592682, 0.0008322147, -0.010229205, 0.006690068, 0.0056225043, 0.010138623, -0.0012592403, 0.035896033, -0.009996282, -0.0048428588, 0.006224222, 0.030668205, -0.0019539658, 0.021480683, -0.015735248, -0.007867624, -0.0036620682, 0.01290782, 0.016589299, -0.025453316, -0.024443982, 0.013574239, -0.023991076, 0.0052342988, -0.017158667, -0.009938051, 0.0038270555, 0.008508163, -0.0028436026, -0.011982598, 0.013794222, 0.011866136, -0.0057195555, -0.016654, -0.005848957, 0.008844607, 0.008113487, 0.009614547, 0.024172239, -0.021403043, -0.0019086752, 0.033049196, -0.046843417, 0.030823486, -0.0040632137, -0.030927008, -0.0005730069, 0.008993419, -0.0039014614, 0.004930205, 0.0082881795, -0.018413862, 0.03656892, -0.0041376194, -0.011924367, -0.032428067, -0.010073923, 0.015450563, 0.014764735, -0.018620905, 0.0010384487, -0.011898487, 0.01366482, -0.008139367, -0.018659726, -0.03871699, -0.029891795, -0.0028565426, 0.017158667, -0.004260551, 0.026035624, -0.0045937607, 0.0068906406, -0.011963188, 0.0023098204, -0.022412375, -0.012060239, -0.01441535, -0.012681367, 0.021519504, 0.010520359, 0.008935188, 0.0019151452, 0.0070200423, 0.009724538, 0.0039273417, 0.0085146325, -0.016239913, -0.0073758974, 0.0008872104, 0.016188154, 0.010403897, 0.008669915, 0.010733872, 0.012713717, 0.008728145, 0.036931247, -0.017922137, -0.0110250255, -0.019552598, -0.032324545, 0.013781281, -0.014285948, -0.017378649, -0.0008221052, -0.0053604655, -0.000670867, 0.005454282, 0.0033547392, 0.0011872606, -0.016343435, 0.036206596, 0.0006227457, 0.033722084, -0.019707879, 0.01441535, 0.0075829397, -0.019863162, -0.014764735, -0.0065380214, -0.004344662, 0.0041635, 0.018931469, 0.008967538, -0.020303128, 0.0007489124, -0.008087606, 0.013354256, 0.0043964228, -0.016356375, -0.021830067, -0.030927008, -0.017210428, -0.017365709, -0.032143384, 0.012571376, -0.004402893, -0.045471758, 0.010552709, 0.007136504, -0.035430185, -0.009996282, -0.010830923, 0.026165025, 0.012978991, 0.0032835682, 0.017106906, -0.010319786, 0.0036103076, -0.023978136, -0.027795486, 0.00456788, 0.026734393, 0.03737121, -0.028494256, 0.027303759, 0.010073923, -0.015411743, 0.0009624252, -0.025530957, -0.00835288, -0.007822333, 0.017042205, -0.025919162, 0.011225598, -0.011613803, 0.0046714013, -0.011050906, -0.019086752, 0.02120894, -0.003788235, -0.002358346, 0.020160785, -0.0438413, 0.03258335, 0.021687726, 0.00911635, -0.019565538, 0.0020639573, -0.003642658, 0.0013465865, -0.0009041944, 0.017275129, -0.00454847, 0.009659837, 0.0063406834, 0.011911427, -0.022334734, -0.013354256, 0.0005232681, 0.026385007, -0.018517384, 0.0066447775, -0.009672778, 0.017986838, 0.048189197, -0.014182427, -0.0044417134, -0.0016708996, -0.02355111, 0.0037526495, 0.003720299, -0.016175212, -0.00014274626, 0.02129952, -0.017689213, -0.008909307, -0.013858923, -0.011989068, 0.004474064, -0.019358495, -0.02199829, -0.010086863, 0.0142083075, 0.009633957, 0.004855799, -0.021040717, 0.00906459, -0.008443461, -0.02494865, 0.035093743, -0.0069359313, 0.007667051, -0.014868256, 0.021428922, -0.0076799914, -0.023085264, 0.04404834, 0.0065768417, -0.029011862, -0.013910683, 0.016796341, -0.012972521, 0.0029180085, -0.013231324, -0.0015689956, -0.006677128, 0.012325512, -0.001672517, 0.0044546537, 0.0034776707, -0.012733128, 0.0047619827, 0.0027869893, -0.0049043247, 0.02114424, -0.0004650374, 0.007751162, 0.018245641, -0.024379281, -0.014855316, -0.012810769, 0.007518239, -0.0084564015, -0.006922991, -0.010805042, -0.0054995725, -0.0052116537, -0.007738222, -0.004655226, -0.004014688, 0.007447068, 0.02503923, -0.00015700066, 0.027148478, -0.011037965, 0.005017551, -0.018491503, -0.04026981, -0.03721593, -0.007207675, 0.007000632, 0.0034582606, 0.009808649, -0.044565946, -0.03405853, 0.020380769, -0.002689938, -0.02048429, 0.025207452, 0.007964675, 0.030202357, -0.0056580896, -0.024676906, 0.03263511, 0.008081136, -0.006961812, -0.019966682, -0.011102666, 0.0030797606, -0.024806308, 0.00606247, 0.0038497008, -0.0074988287, -0.030098837, 0.042210836, 0.0031881344, -0.013910683, -0.019177333, 0.0018763248, 0.0010344048, 0.0024634849, 0.014078906, 0.039648682, 0.01744335, -0.012448444, -0.02052311, -0.00058271206, 0.0056030937, 0.033980887, -0.016369315, -0.0035973673, 0.009336333, -0.012241402, -0.011665564, -0.014842375, 0.00986688, 0.013975384, 0.025065111, 0.011710854, -0.014298889, 0.008281709, 0.018491503, -0.007712342, -0.027096717, -0.012480794, -0.017766854, -0.032764513, -0.02582858, 0.014518871, -0.021066597, 0.0048202137, -0.009756888, -0.006288923, -0.013380136, -0.031004649, -0.02743316, -0.010242145, -0.009401034, 0.01891853, 0.019190272, -0.0030393226, 0.008249358, -0.032039862, -0.020096084, -0.018789127, -0.015411743, -0.01371658, -0.04459183, -0.014687094, 0.0060980553, -0.012196111, -0.01515294, 0.0024133418, 0.007343547, 0.025142752, 0.022826461, 0.23830618, 0.0027449336, -0.0038464656, 0.029814152, 0.0019572007, 0.032945674, 0.028338974, 0.004490239, 0.029193025, 0.04707634, -0.0068647605, 0.003869111, 0.0036264828, 0.006974752, 0.01965612, -0.011982598, -0.047024578, -0.015748188, -0.008113487, 0.018543264, 0.014078906, 0.00759588, 0.0093492735, -0.0057486705, 0.026294427, 0.010973264, -0.0060948203, 0.00028124652, 0.0006882553, 0.0050466666, 0.0014218013, -0.017948017, 0.0050434317, 0.004389953, -0.000111103494, -0.0033806195, -0.011814375, -0.004639051, 0.03273863, 0.023732273, 0.0105268285, -0.0125907855, -0.041434426, -0.0070718033, -0.0036717735, 0.008210538, -0.01890559, 0.0015277489, 0.02045841, 0.0027724316, -0.020005504, -0.006327743, 0.017003383, 0.027950767, -0.0020186666, 0.019099692, 0.016472837, -0.021079538, 0.018491503, -0.0033320938, -0.018387983, 0.038354665, -0.01444123, 0.010824453, 0.0060074744, -0.011296769, 0.0018569145, -0.002000874, 0.032479826, -0.016861042, 0.021027777, 0.017016325, 0.00170325, 0.0070718033, 0.016576359, -0.006159521, 0.020393709, -0.0101321535, 0.018620905, -0.0005256944, -0.0002980283, -0.025414495, -0.026294427, 0.025634477, -0.005528688, -0.019345555, 0.008721675, -0.004389953, 0.022955863, -0.007925854, -0.002916391, 0.017365709, -0.0039952775, 0.014273008, 0.015722306, 0.016628118, 0.0019636708, 0.01586465, -0.020212546, 0.0048105083, -0.02808017, 0.005389581, -0.008327, 0.0052828244, -0.021674786, 0.017184546, -0.013218384, -0.0066383076, 0.013302496, 0.00023393401, -0.003108876, -0.013470718, 0.011199717, -0.021066597, 0.019280855, 0.007880564, 0.0038529357, -0.012597256, -0.0227747, -0.009511026, -0.00913576, -0.02743316, -0.0156058455, 0.009316923, 0.0007266714, -0.018064478, 0.005897483, 0.015062358, 0.008948128, -0.034317333, 0.015463504, -0.020665452, 0.023253486, -0.016058752, -0.007997026, 0.010067453, -0.0034388504, -0.011212658, 0.008449932, -9.1642694e-05, -0.0069424016, -0.0095174955, 0.011329119, -0.018167999, 0.0075635295, -0.0077641024, -0.019565538, -0.023369947, -0.014091846, -0.023149965, -0.0051307776, -0.0024101068, -0.0048913844, -0.005302235, 0.0061271708, -0.005444577, 0.00906459, -0.02278764, 0.0003433189, 0.021403043, -0.0025217158, 0.004344662, 0.013250735, -0.0039014614, -0.022813521, 0.01603287, -0.16356376, 0.022554718, 0.018387983, -0.0018536794, -0.0009373536, 0.010817982, 0.014661213, 0.038949914, -0.019707879, 0.025246272, 0.010999145, -0.011367939, -0.027769607, -0.01890559, 0.004477299, 0.013897743, -0.006897111, 0.0027805192, 0.012416094, 0.017236307, 0.009672778, -0.024832187, 0.004085859, 0.013263674, 0.008475812, -0.010921504, -0.026993196, 0.026708512, 0.016162273, 0.0020186666, -0.008941658, -0.00571632, 0.010824453, 0.0035326665, 0.0049916706, 0.013457777, 0.0036038375, 0.003788235, -0.012616666, -0.005687205, -0.00841111, 0.024146358, -0.00571632, 0.01821976, -0.014234188, -0.00050062285, 0.029943554, 0.016925743, 0.0009737478, -0.020406649, 0.010313316, -0.03046116, -0.0061045256, -0.002875953, 0.011012085, 0.014932957, 0.03335976, 0.008385231, 0.004771688, 0.012733128, 0.017986838, -0.035714872, 0.007647641, 0.004609936, 0.0142083075, -0.013153683, 0.007673521, 0.0047425725, -0.012759008, -0.004859034, -0.014570632, -0.011691444, 0.021079538, -0.01371658, 0.006813, 0.030150598, -0.012319042, -0.014182427, 0.0046681664, 0.012959581, -0.0058295466, 0.0394934, -0.0154376235, -0.003196222, 0.0085146325, 0.0020623396, -0.01906087, -0.0030182947, -0.032298665, -0.0079582045, 0.01215082, -0.03346328, 0.0030328524, -0.029814152, 0.02193359, 0.011102666, -0.008553453, -0.005020786, 0.007162384, -0.0154893845, 0.006690068, -0.016265795, -0.013845982, 0.017262187, 0.028571896, 0.0064053843, -0.01811624, 0.016912803, 0.03423969, 0.0052342988, -0.016912803, 0.024780426, 0.01220258, 0.030176478, 0.024081657, 0.011697914, 0.0049754954, -0.02952947, 0.00042015116, 0.017210428, 0.038949914, -0.008145837, -0.030512922, 0.022929981, -0.007130034, -0.009769829, -0.10212383, 0.009841, 0.012500205, 0.014273008, 0.0032560704, 0.019410256, 0.009433384, 0.021726547, 0.00757, 0.03568899, -0.0010578589, -0.013418957, -0.0050499015, 0.009038709, -0.011290299, -0.014803555, -0.008974008, -0.027226118, -0.021778308, 0.012836649, 0.0009915406, -0.022981742, 0.004102034, -0.0073758974, 0.012765478, -0.011704384, -0.02808017, 0.008003496, 0.01666694, 0.011581453, 0.019474957, -0.014130666, -0.01603287, -0.0035294315, -0.01366482, -0.008993419, -0.01752099, -0.032013983, 0.012778418, -0.045627043, 0.009316923, 0.005451047, 0.002000874, -0.047412783, 0.0005968654, -0.003568252, -0.02268412, 0.0038205853, -0.0015350278, -0.009310452, 0.012002008, 0.013535419, -0.006677128, -0.01140029, 0.045989364, -0.004205555, 0.011633214, 0.030719966, -0.00837229, -0.0033288589, -0.0020380768, 0.017999778, 0.0067288885, 0.028649537, 0.0013740844, -0.01827152, -0.028364854, 0.0013069572, 0.019306734, -0.036775965, -0.0042087906, 0.0068712304, -0.023512289, 0.0109150335, -0.02122188, 0.00030106117, -0.0228394, -0.0062759826, 0.023434648, -0.007447068, -0.02968475, -0.029296545, -0.004412598, -0.006146581, 0.011335589, 0.027691964, -0.023253486, 0.0020041089, 0.0052828244, -0.008605214, 0.0011541015, 0.052821778, 0.015204701, -0.030538803, 0.0015131911, 0.011329119, -0.0003821394, 0.00026385815, 0.010293906, -0.0089610685, -0.024055777, -0.0014412114, -0.051165435, 0.017909195, -0.003632953, -0.022205332, 0.0068259398, 0.008831667, 0.012875469, -0.020096084, -0.006324508, 0.013833042, -0.019462017, 0.0062533375, -0.015722306, -0.0019410256, 0.0011904957, 0.019358495, 0.029348306, 0.006651248, 0.009174581, -0.012021419, -0.007453538, 0.008132897, 0.0125325555, 0.013004871, -0.019850222, 0.01436359, -0.017896255, -0.014803555, -0.02494865, -0.012196111, 0.031651657, -0.0071688546, 0.011574983, 0.047179863, -0.022218272, -0.019992564, -0.020587811, 0.035404306, 0.021610085, -0.029917674, -0.017805675, -0.029374188, -0.00052933383, -0.022502957, 0.004037333, 0.03423969, 0.010462128, -0.010151564, 0.016809281, -0.008838137, 0.016226973, 0.028934222, 0.017624512, -0.012377273, -0.015851708, -0.0061174654, 0.022929981, -0.009562786, 0.008217008, -0.025660358, 0.0019992564, 0.005059607, 0.022619419, 0.009653367, 0.010798573, 0.0060462947, 0.015579965, 0.0045387647, 0.0041343844, 0.00032754807, -0.023227606, 0.009569256, 0.022606477, -0.0020170491, 0.018866768, -0.014014205, -0.0069359313, 0.005975124, -0.014583572, 0.019940803, 0.007304726, -0.008799316, -0.021648906, 0.010073923, 0.043323692, -0.0100803925, -0.032039862, 0.015476444, -0.005693675, -0.0059298333, -0.03038352, 0.0051728333, -0.021131298, -0.0024084894, -0.0005022404, -0.010319786, -0.017663334, -0.0011775555, 0.010824453, 0.03719005, 0.0006716757, -0.009970401, 0.0009041944, -0.036646564, -0.017236307, 0.020743093, -0.01441535, -0.018090358, -0.02127364, 0.01673164, 0.0017081025, 0.004037333, -0.0069294614, 0.010397427, -0.0035035512, 0.013406017, -0.028157812, -0.020846615, -0.022619419, 0.016058752, 0.013897743, 0.010274495, 0.001939408, 0.011555572, 0.028701298, 0.024883948, 0.029141264, -0.019254973, 0.009808649, 0.021648906, 0.010093333, -0.010966795, 0.008449932, -0.0061692265, -0.01827152, -0.022347674, -0.0022386494, 0.021532444, -0.0040114527, 0.059680067, 0.00533135, -0.009989812, 0.028390734, -0.0008010774, 0.0020801325, 0.024016956, -0.0064377347, -0.0046843416, -0.020872494, -0.004250846, 0.010753281, 0.026242666, -0.004736102, -0.014945897, 0.0066447775, -0.036284238, 0.021687726, -0.033670325, -0.0037364743, 0.006586547, -0.017948017, 0.01590347, 0.0029066857, -0.026837913, -0.010287436, 0.009569256, -0.0020801325, -0.0066835983, -0.024793366, 0.023214666, -0.016899863, -0.038820513, -0.0100803925, -0.0028516902, -0.023033503, -0.025543896, -0.019138511, -7.218189e-05, 0.0039920425, 0.00161833, 0.00091389957, -0.032298665, 0.0037300042, -0.0062371623, -0.0058004316, -0.01604581, 0.0069359313, -0.03030588] + "embedding": [0.010940914, 0.00037101895, 0.0019054401, -0.018620905, -0.012196111, 0.010196854, -0.024728665, -0.0048946193, 0.019022051, 0.0058942474, 0.0070329825, -0.0033191538, -0.022502957, 0.0068453504, -0.005832782, 0.0009373536, 0.010552709, 0.016097572, 0.026281487, -0.020885436, -0.032816272, 0.009122821, -0.003642658, -0.0032479828, -0.021040717, 0.008708735, 0.030823486, -0.004545235, 0.009433384, 0.01748217, 0.03421381, -0.010170974, 0.0015277489, -0.039596923, -0.012558435, 0.02888246, 0.00837229, 0.0072982563, 0.01519176, -0.007815863, -0.0021076303, 0.009562786, 0.00030207212, 9.371514e-05, -0.0046228757, 0.0040761535, 0.011186778, 0.016226973, -0.015748188, 0.0040082177, 0.021959469, 0.036517162, -0.02049723, -0.017805675, 0.009291043, -0.018426802, 0.0032415127, 0.041434426, -0.035973676, -0.011549102, 0.009724538, 0.002754639, -0.0017954487, -0.001341734, -0.004102034, -0.015049418, -0.01288841, 0.0018569145, -0.0029940319, 0.0110250255, 0.034343213, 0.055849776, 0.015101179, 0.01589053, 0.033152718, -0.0014484903, 0.0087928455, 0.0023809914, -0.0065024355, -0.0027853716, 0.00987335, 0.0012762243, -0.027873127, -0.0019572007, 0.023175845, 0.00016347074, 0.02357699, 0.027588444, -0.007912914, -0.0021302756, -0.015372923, 0.028494256, 0.009769829, -0.011251478, -0.0077058715, 0.01586465, 0.019229094, 0.022671178, 0.004791098, -0.02968475, 0.015579965, 0.017715093, -0.03856171, 0.0033417991, -0.019034991, -0.027484922, -0.000926031, -0.020717213, 0.020354887, -0.014907076, -0.034472615, 0.028261332, 0.023318186, -0.016201094, -0.002047782, -0.01818094, 0.035559587, -0.018698547, -0.009815119, -0.016421076, 0.0045064143, 0.043634254, 0.026126204, -0.026993196, 0.028753059, 0.002591269, -0.008864017, -0.0067030084, -0.026372068, -0.016472837, 0.007692931, 0.022671178, 0.009316923, 0.027536683, -0.006596252, 0.0040308633, -0.016252855, 0.021687726, 0.00646685, -0.008171718, 0.011736735, 0.015424684, -0.009252222, -0.0074858884, 0.00986688, 0.034162052, 0.012364333, -0.011283829, -0.021739487, -0.0035132563, 0.01445417, 0.00044684028, 0.015411743, 0.0130372215, 0.0069488715, 0.017145727, -0.03623248, -0.018336222, -0.030849367, -0.012726658, -0.023357008, -0.010119214, 0.025957981, -0.0077705723, 0.028649537, 0.020238427, 0.027226118, 0.012364333, -0.0064215595, -0.003500316, -0.012435504, 0.019940803, -0.020303128, 0.0072335554, 0.004037333, 0.0078029227, 0.017249247, -0.0077899825, -0.008876957, -0.0038917563, 0.0061336407, -0.020290187, 0.01749511, -0.009232812, -0.0095174955, -0.023939315, 0.0104103675, -0.01666694, 0.0027061133, -0.006631837, 0.030487042, 0.005842487, -0.0058133714, -0.011245009, -0.65384096, -0.046429332, 0.023887554, -0.02202417, 0.012344923, 0.03035764, 0.02357699, 0.030849367, 4.443129e-05, -0.02348641, 0.012830179, 0.0069553414, 0.027743725, -0.017702153, -0.0037300042, -0.024625145, 0.022425316, 0.014285948, -0.011490871, 0.0017356004, -0.0060527646, 0.020885436, 0.00063164206, -0.006389209, 0.02820957, 0.009045179, 0.017702153, -0.008488752, -0.009679248, 0.015308222, -0.024366342, 0.015321162, -0.020354887, -0.005528688, 0.037552375, -0.00085647753, -0.0212607, 0.015359983, 0.0062953928, 0.024819247, -0.0097439485, 0.008482282, 0.008495222, -0.01589053, 0.0074729486, 0.00025597276, 0.018944409, 0.0017792735, 0.0377853, -0.014492991, 0.00914223, -0.017081026, -0.0031638716, 0.014156546, 0.03284215, 0.0013207061, 0.04461771, 0.019306734, 0.005751906, 0.006282453, 0.003338564, -0.001672517, -0.035326667, -0.008132897, -0.031366974, 0.0043737777, -0.038173504, -0.03470554, -0.023046443, -0.02346053, 0.010462128, 0.011122077, -0.01900911, 0.020393709, 0.028468376, 0.0073306067, 0.02952947, 0.0032091623, 0.011458521, -0.012260811, -0.0056645595, -0.0049916706, -0.03108229, -0.0145447515, 0.029348306, -0.016615178, -0.019280855, -0.01667988, 0.016511658, 0.005020786, 0.013496598, 0.018646786, 0.00041812926, -0.006165991, -0.00142908, 0.026941435, -0.004781393, 0.0017339828, -0.00045411912, -0.001118516, 0.006123936, -0.012435504, -0.0060074744, 0.0031800468, 0.024081657, -0.015722306, -0.027484922, 0.03411029, 0.01977258, -0.00685829, 0.008728145, -0.04182263, -0.015994051, 0.0071947346, 0.009362213, -0.032221023, 0.045989364, 0.0014808407, 0.0024553973, -0.0042023202, 0.017663334, 0.0045064143, -0.007945265, -0.009232812, 0.024482803, 0.0016102424, 0.0017792735, -0.02509099, -0.018439744, 0.017986838, 0.019086752, 0.0007299065, 0.008119957, -0.00094058865, -0.009426914, -0.013276615, 0.009595136, -0.011070316, 0.023887554, -0.023952255, -0.021674786, -0.009051649, 0.0006474129, 0.0032318076, -0.004878444, -0.016563417, -0.030150598, -0.0001479021, -0.028546017, -0.0063374485, -0.03403265, -0.014648273, -0.04016629, 0.0066835983, 0.025686238, 0.001750158, -0.03328212, 0.00026648663, -0.0035035512, 0.016485777, 0.0033029786, -0.012551965, 0.0028533076, 0.005839252, -0.008139367, -0.021571264, -0.020587811, 0.023796974, -0.0003390729, -0.02505217, -0.0032512178, -0.008779906, -0.0055675083, -0.0077770427, -0.024599263, -0.004923735, -0.0044158334, -0.014790615, -0.00012242615, -0.0073370766, -0.00047595563, 0.008074666, -0.0029244786, 0.010772692, 0.032945674, 2.8913193e-05, 0.016861042, 0.018413862, -0.017042205, 0.006243632, 0.002578329, -0.0057195555, -0.014609452, -0.017728034, 0.0074664783, 0.0052569443, -0.005463987, -0.0063180383, 0.01062388, -0.0060333544, 0.025401555, -0.0032835682, 0.018802067, -0.028261332, 0.013406017, -0.02511687, 0.011542632, -0.008954598, -0.008391701, 0.028623657, 0.017792735, -0.042935487, 0.0024246646, -0.019345555, 0.017960956, -0.01291429, -0.020950137, 0.016861042, -0.019707879, 0.0038141152, 0.005011081, 0.0037720597, 0.02958123, -0.006227457, -0.015023538, -0.01065623, 0.023227606, 0.024547504, 0.0013902596, -0.013418957, -0.018879708, -0.012299632, -0.0061142305, 0.013444837, -0.017676273, 0.00681947, 0.0050434317, -0.017844494, -0.0035164913, 0.009756888, -0.006696538, 0.03266099, 0.0021852714, -0.005451047, 0.029814152, -0.0038335256, 0.007660581, 0.028313093, -0.027510803, 0.01138088, 0.0070847436, -0.00042823877, -0.01749511, 0.02197241, 0.018672666, -0.0107468115, 0.045212954, -0.012351393, 0.01290135, 0.012610196, -0.0020332243, -0.017236307, 0.012707247, -0.021623025, 0.014324768, -0.009808649, -0.025621537, -0.00493991, 0.012331982, -0.012293162, 2.7598957e-05, 0.010843863, 0.012991931, 0.0070265126, 0.009316923, -0.00681947, 0.0012835031, -0.018620905, 0.025699178, 0.0076864613, -0.006140111, -0.020898376, 0.021726547, 0.00683241, -0.0080681965, -0.008268769, -0.021687726, 0.01440241, -0.012759008, 0.009718068, 0.016511658, 0.027459042, 0.020419588, -0.0082364185, -0.00569691, -0.030538803, 0.007938795, 0.0078029227, 0.021765366, 0.0044352436, -0.009899231, -0.0009575726, -0.041356783, -0.013690701, 0.017042205, 0.010953855, 0.004710222, -0.015631726, -0.026203845, -0.04927617, -0.012564906, 0.00022584641, -0.01220258, -0.0042929016, -0.00569691, -0.008398171, -0.044255383, -0.009957462, 0.04557528, 0.0258674, -0.017365709, -0.028390734, -0.008689324, 0.0007481036, 0.07049805, 0.02743316, -0.013393076, 0.01587759, -0.00081765704, -0.010455658, -0.0034841408, -0.0019620534, 0.008022905, -0.008935188, 0.003068438, 0.002510393, 0.0032593054, -0.0079582045, 0.0036361879, -0.0070071025, -0.005628974, -0.019358495, 0.011743205, -0.03113405, -0.02127364, 0.017637452, -0.005758376, 0.020846615, -0.0070912135, 0.028002528, 0.014117726, 0.00058109453, 0.01667988, -0.026061503, 0.0099121705, 0.023072325, -0.012739598, 0.0050369613, -0.027717846, -0.030487042, -0.010889154, 0.021713607, 0.0070847436, -0.003581192, 0.022412375, 0.0019749936, -0.0024780426, -0.02274882, -0.0035456067, 0.025401555, -0.016175212, 0.011704384, -0.0076799914, -0.015554085, 0.007505299, -0.007117094, -0.0017275128, -0.0069359313, 0.0052342988, -0.011173837, -0.033825606, -0.014040085, -0.003869111, -0.022127692, 0.0061271708, 0.014040085, 0.009750418, 0.00084596366, -0.018310342, -0.032790393, -0.013975384, 0.0027837541, -0.008482282, -0.02192065, -0.020794854, -0.0036232478, -0.0073241363, -0.004244376, 0.03364444, 0.02655323, 0.025336854, -0.023589931, 0.005011081, 0.033592682, 0.0008322147, -0.010229205, 0.006690068, 0.0056225043, 0.010138623, -0.0012592403, 0.035896033, -0.009996282, -0.0048428588, 0.006224222, 0.030668205, -0.0019539658, 0.021480683, -0.015735248, -0.007867624, -0.0036620682, 0.01290782, 0.016589299, -0.025453316, -0.024443982, 0.013574239, -0.023991076, 0.0052342988, -0.017158667, -0.009938051, 0.0038270555, 0.008508163, -0.0028436026, -0.011982598, 0.013794222, 0.011866136, -0.0057195555, -0.016654, -0.005848957, 0.008844607, 0.008113487, 0.009614547, 0.024172239, -0.021403043, -0.0019086752, 0.033049196, -0.046843417, 0.030823486, -0.0040632137, -0.030927008, -0.0005730069, 0.008993419, -0.0039014614, 0.004930205, 0.0082881795, -0.018413862, 0.03656892, -0.0041376194, -0.011924367, -0.032428067, -0.010073923, 0.015450563, 0.014764735, -0.018620905, 0.0010384487, -0.011898487, 0.01366482, -0.008139367, -0.018659726, -0.03871699, -0.029891795, -0.0028565426, 0.017158667, -0.004260551, 0.026035624, -0.0045937607, 0.0068906406, -0.011963188, 0.0023098204, -0.022412375, -0.012060239, -0.01441535, -0.012681367, 0.021519504, 0.010520359, 0.008935188, 0.0019151452, 0.0070200423, 0.009724538, 0.0039273417, 0.0085146325, -0.016239913, -0.0073758974, 0.0008872104, 0.016188154, 0.010403897, 0.008669915, 0.010733872, 0.012713717, 0.008728145, 0.036931247, -0.017922137, -0.0110250255, -0.019552598, -0.032324545, 0.013781281, -0.014285948, -0.017378649, -0.0008221052, -0.0053604655, -0.000670867, 0.005454282, 0.0033547392, 0.0011872606, -0.016343435, 0.036206596, 0.0006227457, 0.033722084, -0.019707879, 0.01441535, 0.0075829397, -0.019863162, -0.014764735, -0.0065380214, -0.004344662, 0.0041635, 0.018931469, 0.008967538, -0.020303128, 0.0007489124, -0.008087606, 0.013354256, 0.0043964228, -0.016356375, -0.021830067, -0.030927008, -0.017210428, -0.017365709, -0.032143384, 0.012571376, -0.004402893, -0.045471758, 0.010552709, 0.007136504, -0.035430185, -0.009996282, -0.010830923, 0.026165025, 0.012978991, 0.0032835682, 0.017106906, -0.010319786, 0.0036103076, -0.023978136, -0.027795486, 0.00456788, 0.026734393, 0.03737121, -0.028494256, 0.027303759, 0.010073923, -0.015411743, 0.0009624252, -0.025530957, -0.00835288, -0.007822333, 0.017042205, -0.025919162, 0.011225598, -0.011613803, 0.0046714013, -0.011050906, -0.019086752, 0.02120894, -0.003788235, -0.002358346, 0.020160785, -0.0438413, 0.03258335, 0.021687726, 0.00911635, -0.019565538, 0.0020639573, -0.003642658, 0.0013465865, -0.0009041944, 0.017275129, -0.00454847, 0.009659837, 0.0063406834, 0.011911427, -0.022334734, -0.013354256, 0.0005232681, 0.026385007, -0.018517384, 0.0066447775, -0.009672778, 0.017986838, 0.048189197, -0.014182427, -0.0044417134, -0.0016708996, -0.02355111, 0.0037526495, 0.003720299, -0.016175212, -0.00014274626, 0.02129952, -0.017689213, -0.008909307, -0.013858923, -0.011989068, 0.004474064, -0.019358495, -0.02199829, -0.010086863, 0.0142083075, 0.009633957, 0.004855799, -0.021040717, 0.00906459, -0.008443461, -0.02494865, 0.035093743, -0.0069359313, 0.007667051, -0.014868256, 0.021428922, -0.0076799914, -0.023085264, 0.04404834, 0.0065768417, -0.029011862, -0.013910683, 0.016796341, -0.012972521, 0.0029180085, -0.013231324, -0.0015689956, -0.006677128, 0.012325512, -0.001672517, 0.0044546537, 0.0034776707, -0.012733128, 0.0047619827, 0.0027869893, -0.0049043247, 0.02114424, -0.0004650374, 0.007751162, 0.018245641, -0.024379281, -0.014855316, -0.012810769, 0.007518239, -0.0084564015, -0.006922991, -0.010805042, -0.0054995725, -0.0052116537, -0.007738222, -0.004655226, -0.004014688, 0.007447068, 0.02503923, -0.00015700066, 0.027148478, -0.011037965, 0.005017551, -0.018491503, -0.04026981, -0.03721593, -0.007207675, 0.007000632, 0.0034582606, 0.009808649, -0.044565946, -0.03405853, 0.020380769, -0.002689938, -0.02048429, 0.025207452, 0.007964675, 0.030202357, -0.0056580896, -0.024676906, 0.03263511, 0.008081136, -0.006961812, -0.019966682, -0.011102666, 0.0030797606, -0.024806308, 0.00606247, 0.0038497008, -0.0074988287, -0.030098837, 0.042210836, 0.0031881344, -0.013910683, -0.019177333, 0.0018763248, 0.0010344048, 0.0024634849, 0.014078906, 0.039648682, 0.01744335, -0.012448444, -0.02052311, -0.00058271206, 0.0056030937, 0.033980887, -0.016369315, -0.0035973673, 0.009336333, -0.012241402, -0.011665564, -0.014842375, 0.00986688, 0.013975384, 0.025065111, 0.011710854, -0.014298889, 0.008281709, 0.018491503, -0.007712342, -0.027096717, -0.012480794, -0.017766854, -0.032764513, -0.02582858, 0.014518871, -0.021066597, 0.0048202137, -0.009756888, -0.006288923, -0.013380136, -0.031004649, -0.02743316, -0.010242145, -0.009401034, 0.01891853, 0.019190272, -0.0030393226, 0.008249358, -0.032039862, -0.020096084, -0.018789127, -0.015411743, -0.01371658, -0.04459183, -0.014687094, 0.0060980553, -0.012196111, -0.01515294, 0.0024133418, 0.007343547, 0.025142752, 0.022826461, 0.23830618, 0.0027449336, -0.0038464656, 0.029814152, 0.0019572007, 0.032945674, 0.028338974, 0.004490239, 0.029193025, 0.04707634, -0.0068647605, 0.003869111, 0.0036264828, 0.006974752, 0.01965612, -0.011982598, -0.047024578, -0.015748188, -0.008113487, 0.018543264, 0.014078906, 0.00759588, 0.0093492735, -0.0057486705, 0.026294427, 0.010973264, -0.0060948203, 0.00028124652, 0.0006882553, 0.0050466666, 0.0014218013, -0.017948017, 0.0050434317, 0.004389953, -0.000111103494, -0.0033806195, -0.011814375, -0.004639051, 0.03273863, 0.023732273, 0.0105268285, -0.0125907855, -0.041434426, -0.0070718033, -0.0036717735, 0.008210538, -0.01890559, 0.0015277489, 0.02045841, 0.0027724316, -0.020005504, -0.006327743, 0.017003383, 0.027950767, -0.0020186666, 0.019099692, 0.016472837, -0.021079538, 0.018491503, -0.0033320938, -0.018387983, 0.038354665, -0.01444123, 0.010824453, 0.0060074744, -0.011296769, 0.0018569145, -0.002000874, 0.032479826, -0.016861042, 0.021027777, 0.017016325, 0.00170325, 0.0070718033, 0.016576359, -0.006159521, 0.020393709, -0.0101321535, 0.018620905, -0.0005256944, -0.0002980283, -0.025414495, -0.026294427, 0.025634477, -0.005528688, -0.019345555, 0.008721675, -0.004389953, 0.022955863, -0.007925854, -0.002916391, 0.017365709, -0.0039952775, 0.014273008, 0.015722306, 0.016628118, 0.0019636708, 0.01586465, -0.020212546, 0.0048105083, -0.02808017, 0.005389581, -0.008327, 0.0052828244, -0.021674786, 0.017184546, -0.013218384, -0.0066383076, 0.013302496, 0.00023393401, -0.003108876, -0.013470718, 0.011199717, -0.021066597, 0.019280855, 0.007880564, 0.0038529357, -0.012597256, -0.0227747, -0.009511026, -0.00913576, -0.02743316, -0.0156058455, 0.009316923, 0.0007266714, -0.018064478, 0.005897483, 0.015062358, 0.008948128, -0.034317333, 0.015463504, -0.020665452, 0.023253486, -0.016058752, -0.007997026, 0.010067453, -0.0034388504, -0.011212658, 0.008449932, -9.1642694e-05, -0.0069424016, -0.0095174955, 0.011329119, -0.018167999, 0.0075635295, -0.0077641024, -0.019565538, -0.023369947, -0.014091846, -0.023149965, -0.0051307776, -0.0024101068, -0.0048913844, -0.005302235, 0.0061271708, -0.005444577, 0.00906459, -0.02278764, 0.0003433189, 0.021403043, -0.0025217158, 0.004344662, 0.013250735, -0.0039014614, -0.022813521, 0.01603287, -0.16356376, 0.022554718, 0.018387983, -0.0018536794, -0.0009373536, 0.010817982, 0.014661213, 0.038949914, -0.019707879, 0.025246272, 0.010999145, -0.011367939, -0.027769607, -0.01890559, 0.004477299, 0.013897743, -0.006897111, 0.0027805192, 0.012416094, 0.017236307, 0.009672778, -0.024832187, 0.004085859, 0.013263674, 0.008475812, -0.010921504, -0.026993196, 0.026708512, 0.016162273, 0.0020186666, -0.008941658, -0.00571632, 0.010824453, 0.0035326665, 0.0049916706, 0.013457777, 0.0036038375, 0.003788235, -0.012616666, -0.005687205, -0.00841111, 0.024146358, -0.00571632, 0.01821976, -0.014234188, -0.00050062285, 0.029943554, 0.016925743, 0.0009737478, -0.020406649, 0.010313316, -0.03046116, -0.0061045256, -0.002875953, 0.011012085, 0.014932957, 0.03335976, 0.008385231, 0.004771688, 0.012733128, 0.017986838, -0.035714872, 0.007647641, 0.004609936, 0.0142083075, -0.013153683, 0.007673521, 0.0047425725, -0.012759008, -0.004859034, -0.014570632, -0.011691444, 0.021079538, -0.01371658, 0.006813, 0.030150598, -0.012319042, -0.014182427, 0.0046681664, 0.012959581, -0.0058295466, 0.0394934, -0.0154376235, -0.003196222, 0.0085146325, 0.0020623396, -0.01906087, -0.0030182947, -0.032298665, -0.0079582045, 0.01215082, -0.03346328, 0.0030328524, -0.029814152, 0.02193359, 0.011102666, -0.008553453, -0.005020786, 0.007162384, -0.0154893845, 0.006690068, -0.016265795, -0.013845982, 0.017262187, 0.028571896, 0.0064053843, -0.01811624, 0.016912803, 0.03423969, 0.0052342988, -0.016912803, 0.024780426, 0.01220258, 0.030176478, 0.024081657, 0.011697914, 0.0049754954, -0.02952947, 0.00042015116, 0.017210428, 0.038949914, -0.008145837, -0.030512922, 0.022929981, -0.007130034, -0.009769829, -0.10212383, 0.009841, 0.012500205, 0.014273008, 0.0032560704, 0.019410256, 0.009433384, 0.021726547, 0.00757, 0.03568899, -0.0010578589, -0.013418957, -0.0050499015, 0.009038709, -0.011290299, -0.014803555, -0.008974008, -0.027226118, -0.021778308, 0.012836649, 0.0009915406, -0.022981742, 0.004102034, -0.0073758974, 0.012765478, -0.011704384, -0.02808017, 0.008003496, 0.01666694, 0.011581453, 0.019474957, -0.014130666, -0.01603287, -0.0035294315, -0.01366482, -0.008993419, -0.01752099, -0.032013983, 0.012778418, -0.045627043, 0.009316923, 0.005451047, 0.002000874, -0.047412783, 0.0005968654, -0.003568252, -0.02268412, 0.0038205853, -0.0015350278, -0.009310452, 0.012002008, 0.013535419, -0.006677128, -0.01140029, 0.045989364, -0.004205555, 0.011633214, 0.030719966, -0.00837229, -0.0033288589, -0.0020380768, 0.017999778, 0.0067288885, 0.028649537, 0.0013740844, -0.01827152, -0.028364854, 0.0013069572, 0.019306734, -0.036775965, -0.0042087906, 0.0068712304, -0.023512289, 0.0109150335, -0.02122188, 0.00030106117, -0.0228394, -0.0062759826, 0.023434648, -0.007447068, -0.02968475, -0.029296545, -0.004412598, -0.006146581, 0.011335589, 0.027691964, -0.023253486, 0.0020041089, 0.0052828244, -0.008605214, 0.0011541015, 0.052821778, 0.015204701, -0.030538803, 0.0015131911, 0.011329119, -0.0003821394, 0.00026385815, 0.010293906, -0.0089610685, -0.024055777, -0.0014412114, -0.051165435, 0.017909195, -0.003632953, -0.022205332, 0.0068259398, 0.008831667, 0.012875469, -0.020096084, -0.006324508, 0.013833042, -0.019462017, 0.0062533375, -0.015722306, -0.0019410256, 0.0011904957, 0.019358495, 0.029348306, 0.006651248, 0.009174581, -0.012021419, -0.007453538, 0.008132897, 0.0125325555, 0.013004871, -0.019850222, 0.01436359, -0.017896255, -0.014803555, -0.02494865, -0.012196111, 0.031651657, -0.0071688546, 0.011574983, 0.047179863, -0.022218272, -0.019992564, -0.020587811, 0.035404306, 0.021610085, -0.029917674, -0.017805675, -0.029374188, -0.00052933383, -0.022502957, 0.004037333, 0.03423969, 0.010462128, -0.010151564, 0.016809281, -0.008838137, 0.016226973, 0.028934222, 0.017624512, -0.012377273, -0.015851708, -0.0061174654, 0.022929981, -0.009562786, 0.008217008, -0.025660358, 0.0019992564, 0.005059607, 0.022619419, 0.009653367, 0.010798573, 0.0060462947, 0.015579965, 0.0045387647, 0.0041343844, 0.00032754807, -0.023227606, 0.009569256, 0.022606477, -0.0020170491, 0.018866768, -0.014014205, -0.0069359313, 0.005975124, -0.014583572, 0.019940803, 0.007304726, -0.008799316, -0.021648906, 0.010073923, 0.043323692, -0.0100803925, -0.032039862, 0.015476444, -0.005693675, -0.0059298333, -0.03038352, 0.0051728333, -0.021131298, -0.0024084894, -0.0005022404, -0.010319786, -0.017663334, -0.0011775555, 0.010824453, 0.03719005, 0.0006716757, -0.009970401, 0.0009041944, -0.036646564, -0.017236307, 0.020743093, -0.01441535, -0.018090358, -0.02127364, 0.01673164, 0.0017081025, 0.004037333, -0.0069294614, 0.010397427, -0.0035035512, 0.013406017, -0.028157812, -0.020846615, -0.022619419, 0.016058752, 0.013897743, 0.010274495, 0.001939408, 0.011555572, 0.028701298, 0.024883948, 0.029141264, -0.019254973, 0.009808649, 0.021648906, 0.010093333, -0.010966795, 0.008449932, -0.0061692265, -0.01827152, -0.022347674, -0.0022386494, 0.021532444, -0.0040114527, 0.059680067, 0.00533135, -0.009989812, 0.028390734, -0.0008010774, 0.0020801325, 0.024016956, -0.0064377347, -0.0046843416, -0.020872494, -0.004250846, 0.010753281, 0.026242666, -0.004736102, -0.014945897, 0.0066447775, -0.036284238, 0.021687726, -0.033670325, -0.0037364743, 0.006586547, -0.017948017, 0.01590347, 0.0029066857, -0.026837913, -0.010287436, 0.009569256, -0.0020801325, -0.0066835983, -0.024793366, 0.023214666, -0.016899863, -0.038820513, -0.0100803925, -0.0028516902, -0.023033503, -0.025543896, -0.019138511, -7.218189e-05, 0.0039920425, 0.00161833, 0.00091389957, -0.032298665, 0.0037300042, -0.0062371623, -0.0058004316, -0.01604581, 0.0069359313, -0.03030588], + "object": "embedding" } ], "model": "text-embedding-ada-002-v2", @@ -117,7 +121,7 @@ X-Request-Id: req_25786abf429546a0a9de6148854e5360 "prompt_tokens": 18, "total_tokens": 18 } -}1079 1682 +}1079 1724 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com User-Agent: langchaingo-httprr @@ -128,26 +132,27 @@ Content-Type: application/json {"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the house is blue.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors are all of the pieces of furniture next to the desk and the desk itself?\nHelpful Answer:"}]}HTTP/2.0 200 OK Content-Length: 899 Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Thu, 22 Jan 2026 20:04:19 GMT +Date: Mon, 21 Sep 2026 07:48:04 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 480 +Openai-Processing-Ms: 531 Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 496 X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 30000 X-Ratelimit-Limit-Tokens: 150000000 X-Ratelimit-Remaining-Requests: 29999 -X-Ratelimit-Remaining-Tokens: 149999845 +X-Ratelimit-Remaining-Tokens: 149999842 X-Ratelimit-Reset-Requests: 2ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_78edac29f6f24e4aba3040ffc7b70d3e +X-Request-Id: req_186937bc76964c9ea1bd399550ab95f0 { "model": "gpt-4.1-nano-2025-04-14", @@ -155,33 +160,33 @@ X-Request-Id: req_78edac29f6f24e4aba3040ffc7b70d3e { "index": 0, "message": { - "annotations": [], "role": "assistant", "content": "The desk is orange. The chair beside the desk is beige. The lamp beside the desk is black.", - "refusal": null + "refusal": null, + "annotations": [] }, "logprobs": null, "finish_reason": "stop" } ], "usage": { - "prompt_tokens": 144, "completion_tokens": 21, "total_tokens": 165, "prompt_tokens_details": { - "cached_tokens": 0, - "audio_tokens": 0 + "audio_tokens": 0, + "cached_tokens": 0 }, "completion_tokens_details": { "reasoning_tokens": 0, "audio_tokens": 0, "accepted_prediction_tokens": 0, "rejected_prediction_tokens": 0 - } + }, + "prompt_tokens": 144 }, "service_tier": "default", - "system_fingerprint": "fp_f0bc439dc3", - "id": "chatcmpl-D0vCdFfhT721xULlroI9tTIXclKQI", + "system_fingerprint": "fp_a8d11c9b56", + "id": "chatcmpl-EQT2qXEuRaDUlBKnlVLyVcV1Wu0AI", "object": "chat.completion", - "created": 1769112259 + "created": 1789976884 } \ No newline at end of file From da097ace91a6e49ba9c29dc2056b5f4ff82a030b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 22 Sep 2026 11:50:29 +0300 Subject: [PATCH 598/618] fix(pgvector): a failed init rolls back instead of keeping its connection (PAGI-405) init returned on any error without ending its transaction, so on a shared pgxpool every failure kept one connection acquired for the life of the pool, and once all of them were kept New blocked in Ping. The rollback ignores the caller's cancellation: pgx kills the connection when a rollback fails, which would take down a single pgx.Conn passed by WithConn. Co-Authored-By: Claude Opus 5 --- vectorstores/pgvector/init_test.go | 201 +++++++++++++++++++++++++++++ vectorstores/pgvector/pgvector.go | 7 +- 2 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 vectorstores/pgvector/init_test.go diff --git a/vectorstores/pgvector/init_test.go b/vectorstores/pgvector/init_test.go new file mode 100644 index 000000000..1b1937429 --- /dev/null +++ b/vectorstores/pgvector/init_test.go @@ -0,0 +1,201 @@ +package pgvector + +import ( + "context" + "errors" + "strings" + "testing" + "time" + + "github.com/google/uuid" + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgx/v5/pgxpool" + "github.com/stretchr/testify/require" +) + +type scriptedTx struct { + pgx.Tx + + failOn string + failWith error + + committed bool + rolledBack bool + rollbackCtxErr error +} + +func (tx *scriptedTx) fails(sql string) bool { + return tx.failOn != "" && strings.Contains(sql, tx.failOn) +} + +func (tx *scriptedTx) Exec(_ context.Context, sql string, _ ...any) (pgconn.CommandTag, error) { + if tx.fails(sql) { + return pgconn.CommandTag{}, tx.failWith + } + return pgconn.CommandTag{}, nil +} + +func (tx *scriptedTx) QueryRow(_ context.Context, sql string, _ ...any) pgx.Row { + if tx.fails(sql) { + return scriptedRow{err: tx.failWith} + } + return scriptedRow{} +} + +func (tx *scriptedTx) Commit(context.Context) error { + tx.committed = true + return nil +} + +func (tx *scriptedTx) Rollback(ctx context.Context) error { + tx.rolledBack = true + tx.rollbackCtxErr = ctx.Err() + return nil +} + +type scriptedRow struct{ err error } + +func (r scriptedRow) Scan(dest ...any) error { + if r.err != nil { + return r.err + } + if id, ok := dest[0].(*string); ok { + *id = uuid.NewString() + } + return nil +} + +type scriptedConn struct { + PGXConn + + tx *scriptedTx +} + +func (scriptedConn) Ping(context.Context) error { return nil } + +func (c scriptedConn) Begin(context.Context) (pgx.Tx, error) { return c.tx, nil } + +func openScripted(ctx context.Context, tx *scriptedTx) error { + _, err := New(ctx, + WithConn(scriptedConn{tx: tx}), + WithEmbedder(fixedEmbedder{dims: 3}), + WithPreDeleteCollection(true), + WithHNSWIndex(16, 64, "vector_l2_ops"), + WithMetadataIndexes(MetadataIndex{Keys: []string{"flow_id"}}), + ) + return err +} + +func TestInitRollsBackWhenAnyStepFails(t *testing.T) { + t.Parallel() + + failure := errors.New("step failed") + for _, step := range []string{ + "pg_advisory_xact_lock", + "CREATE EXTENSION", + "CREATE TABLE IF NOT EXISTS langchain_pg_collection", + "CREATE TABLE IF NOT EXISTS langchain_pg_embedding", + "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_collection_id", + "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_embedding_hnsw", + "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_flow_id", + "ANALYZE", + "DELETE FROM langchain_pg_collection", + "INSERT INTO langchain_pg_collection", + "SELECT uuid FROM langchain_pg_collection", + } { + t.Run(step, func(t *testing.T) { + t.Parallel() + + tx := &scriptedTx{failOn: step, failWith: failure} + require.ErrorIs(t, openScripted(t.Context(), tx), failure) + require.True(t, tx.rolledBack) + require.False(t, tx.committed) + }) + } +} + +func TestInitCommitsWithoutRollingBack(t *testing.T) { + t.Parallel() + + tx := &scriptedTx{} + require.NoError(t, openScripted(t.Context(), tx)) + require.True(t, tx.committed) + require.False(t, tx.rolledBack) +} + +func TestInitRollsBackEvenWhenTheCallerCancelled(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(t.Context()) + cancel() + + tx := &scriptedTx{failOn: "CREATE EXTENSION", failWith: context.Canceled} + require.ErrorIs(t, openScripted(ctx, tx), context.Canceled) + require.True(t, tx.rolledBack) + require.NoError(t, tx.rollbackCtxErr) +} + +// Not parallel: a store opening in parallel holds the advisory locks this timeout also bounds. +func TestFailedInitReturnsItsConnectionToThePool(t *testing.T) { + url := narrowingURL(t) + ctx := t.Context() + + suffix := strings.ReplaceAll(uuid.NewString(), "-", "")[:12] + collectionTable := "rollback_collection_" + suffix + embeddingTable := "rollback_embedding_" + suffix + + cfg, err := pgxpool.ParseConfig(url) + require.NoError(t, err) + cfg.MaxConns = 1 + cfg.ConnConfig.RuntimeParams["statement_timeout"] = "500" + pool, err := pgxpool.NewWithConfig(ctx, cfg) + require.NoError(t, err) + t.Cleanup(func() { + closed := make(chan struct{}) + go func() { + pool.Close() + close(closed) + }() + select { + case <-closed: + case <-time.After(5 * time.Second): + t.Error("closing the pool waits on a connection that was never released") + } + }) + + open := func(ctx context.Context) error { + _, err := New(ctx, + WithConn(pool), + WithEmbedder(fixedEmbedder{dims: 3}), + WithCollectionName("rollback"), + WithCollectionTableName(collectionTable), + WithEmbeddingTableName(embeddingTable), + ) + return err + } + require.NoError(t, open(ctx)) + t.Cleanup(func() { + conn, err := pgx.Connect(context.Background(), url) + if err != nil { + return + } + defer conn.Close(context.Background()) + _, _ = conn.Exec(context.Background(), "DROP TABLE IF EXISTS "+embeddingTable+", "+collectionTable) + }) + + writer, err := pgx.Connect(ctx, url) + require.NoError(t, err) + defer writer.Close(ctx) + held, err := writer.Begin(ctx) + require.NoError(t, err) + _, err = held.Exec(ctx, "LOCK TABLE "+embeddingTable+" IN ROW EXCLUSIVE MODE") + require.NoError(t, err) + + require.Error(t, open(ctx), "init must time out while a writer holds the table") + require.NoError(t, held.Rollback(ctx)) + + bounded, cancel := context.WithTimeout(ctx, 5*time.Second) + defer cancel() + require.NoError(t, open(bounded), "the failed init still holds the pool's only connection") +} diff --git a/vectorstores/pgvector/pgvector.go b/vectorstores/pgvector/pgvector.go index 801f57442..688b09499 100644 --- a/vectorstores/pgvector/pgvector.go +++ b/vectorstores/pgvector/pgvector.go @@ -110,11 +110,16 @@ func (s Store) Close() error { return nil } -func (s *Store) init(ctx context.Context) error { +func (s *Store) init(ctx context.Context) (err error) { tx, err := s.conn.Begin(ctx) if err != nil { return err } + defer func() { + if err != nil { + _ = tx.Rollback(context.WithoutCancel(ctx)) + } + }() if err := s.createVectorExtensionIfNotExists(ctx, tx); err != nil { return err From d88b9def2c5228da50fd79b9a3a924672606024c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 22 Sep 2026 14:30:25 +0300 Subject: [PATCH 599/618] fix(reasoning): grok-4.7 always reasons, so a disable is refused before the wire xAI documents that reasoning on grok-4.7 cannot be disabled and answers reasoning_effort "none" with 400. The model now resolves to OffUnsupported: the openai door returns ErrReasoningOffUnsupported, and CannotDisable keeps pentagi from offering Off for it. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 2 +- llms/reasoning/off.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index b7d019f57..93e35208c 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -252,7 +252,7 @@ func TestGrokModelsThatTakeNoEffortOnTheWire(t *testing.T) { func TestGrokGenerationsThatCannotStopThinking(t *testing.T) { t.Parallel() - for _, model := range []string{"grok-4.5", "grok-4.5-latest", "grok-4.6"} { + for _, model := range []string{"grok-4.5", "grok-4.5-latest", "grok-4.6", "grok-4.7", "xai/grok-4.7"} { if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the vendor answers "+ "\"This model does not support reasoning_effort value none\"", model, got) diff --git a/llms/reasoning/off.go b/llms/reasoning/off.go index d3b5e470c..bd8968cfe 100644 --- a/llms/reasoning/off.go +++ b/llms/reasoning/off.go @@ -223,6 +223,7 @@ func mandatoryThinking(model string) bool { form == "grok-build-latest" || strings.HasPrefix(form, "grok-4.5") || strings.HasPrefix(form, "grok-4.6") || + strings.HasPrefix(form, "grok-4.7") || strings.HasPrefix(form, "minimax-m2") || form == "glm-latest" || form == "glm-flash-latest" || From d3bf3ec0ac37958caf9d8933126ea05768b3ff3b Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Tue, 22 Sep 2026 14:53:29 +0300 Subject: [PATCH 600/618] test(reasoning): pin grok-4.7 spellings where every other family's are pinned Capability lookups normalise the name before matching, so the family test lists bare names; route prefixes, case and the Bedrock dotted form belong in TestEverySpellingResolvesToOneEntry, which had no grok group. Co-Authored-By: Claude Opus 5 --- llms/reasoning/catalogue_gaps_test.go | 2 +- llms/reasoning/name_forms_test.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/llms/reasoning/catalogue_gaps_test.go b/llms/reasoning/catalogue_gaps_test.go index 93e35208c..8082f274a 100644 --- a/llms/reasoning/catalogue_gaps_test.go +++ b/llms/reasoning/catalogue_gaps_test.go @@ -252,7 +252,7 @@ func TestGrokModelsThatTakeNoEffortOnTheWire(t *testing.T) { func TestGrokGenerationsThatCannotStopThinking(t *testing.T) { t.Parallel() - for _, model := range []string{"grok-4.5", "grok-4.5-latest", "grok-4.6", "grok-4.7", "xai/grok-4.7"} { + for _, model := range []string{"grok-4.5", "grok-4.5-latest", "grok-4.6", "grok-4.7"} { if got := ResolveOff(model, ProviderOpenAI); got != OffUnsupported { t.Errorf("ResolveOff(%q) = %v, want OffUnsupported: the vendor answers "+ "\"This model does not support reasoning_effort value none\"", model, got) diff --git a/llms/reasoning/name_forms_test.go b/llms/reasoning/name_forms_test.go index 1b555ed10..27ffbd1ff 100644 --- a/llms/reasoning/name_forms_test.go +++ b/llms/reasoning/name_forms_test.go @@ -43,6 +43,7 @@ func TestEverySpellingResolvesToOneEntry(t *testing.T) { {"minimax-m2", "minimax.minimax-m2"}, {"kimi-k2-thinking", "moonshot.kimi-k2-thinking"}, {"mistral-medium-3", "mistralai/mistral-medium-3"}, + {"grok-4.7", "xai/grok-4.7", "XAI/Grok-4.7", "openrouter/x-ai/grok-4.7", "us.xai.grok-4.7"}, } { canonical := group[0] want := capabilityAnswers(canonical) From dd63f697388ac9301597558a3192ac214d8e752e Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Tue, 22 Sep 2026 23:30:19 +0300 Subject: [PATCH 601/618] feat(reasoning): add support for new GPT-6 generations and update capability checks - Added support for "gpt-6-astra", "gpt-6-sol", and "gpt-6-luna" in the reasoning model tests and capability lookups. - Updated the reasoning model identification logic to include the new generations. - Enhanced tests to ensure proper handling of the new model names and their capabilities. --- llms/reasoning/detect_hint_test.go | 3 +++ llms/reasoning/openai_capability.go | 2 ++ llms/reasoning/reasoning.go | 2 +- llms/reasoning/reasoning_test.go | 6 ++++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/llms/reasoning/detect_hint_test.go b/llms/reasoning/detect_hint_test.go index ecd62152a..79e9b8ddb 100644 --- a/llms/reasoning/detect_hint_test.go +++ b/llms/reasoning/detect_hint_test.go @@ -14,6 +14,9 @@ func TestLikelyReasoningModel(t *testing.T) { {"o3-mini", true, "already classified"}, {"gpt-6", true, "generation newer than this build"}, + {"gpt-6-astra", true, "generation newer than this build"}, + {"gpt-6-sol", true, "generation newer than this build"}, + {"gpt-6-luna", true, "generation newer than this build"}, {"gpt-7-turbo", true, "generation newer than this build"}, {"claude-opus-6", true, "generation newer than this build"}, {"claude-sonnet-7", true, "generation newer than this build"}, diff --git a/llms/reasoning/openai_capability.go b/llms/reasoning/openai_capability.go index e7ab94efa..f2217b8f2 100644 --- a/llms/reasoning/openai_capability.go +++ b/llms/reasoning/openai_capability.go @@ -90,6 +90,8 @@ func openAICapsForForm(m string) OpenAIReasoningCaps { return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high"}} case hasGeneration(m, "gpt-6-astra"): return OpenAIReasoningCaps{Known: true, CanDisable: false, Efforts: []string{"low", "medium", "high", "xhigh"}} + case hasGeneration(m, "gpt-6-sol") || hasGeneration(m, "gpt-6-luna"): + return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} case openAIXHighCeiling(m): return OpenAIReasoningCaps{Known: true, CanDisable: true, Efforts: []string{"low", "medium", "high", "xhigh"}} case nonOpenAILowHighMax(m): diff --git a/llms/reasoning/reasoning.go b/llms/reasoning/reasoning.go index 261b7f75a..2c0237e1c 100644 --- a/llms/reasoning/reasoning.go +++ b/llms/reasoning/reasoning.go @@ -310,7 +310,7 @@ func namesReasoningModel(modelLower string) bool { //nolint:funlen // a flat cat // OpenAI reasoning models if strings.HasPrefix(modelLower, "gpt-5") || - hasGeneration(modelLower, "gpt-6-astra") || + hasGeneration(modelLower, "gpt-6") || strings.HasPrefix(modelLower, "gpt-oss") || strings.HasPrefix(modelLower, "o1") || strings.HasPrefix(modelLower, "o3") || diff --git a/llms/reasoning/reasoning_test.go b/llms/reasoning/reasoning_test.go index 6a7acf1c7..3af88f1a5 100644 --- a/llms/reasoning/reasoning_test.go +++ b/llms/reasoning/reasoning_test.go @@ -461,7 +461,7 @@ func BenchmarkSplitContentLargeString(b *testing.B) { largeText := builder.String() b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { reasoning, text := SplitContent(largeText) if reasoning == "" || text == "" { b.Fatal("Empty result") @@ -483,7 +483,7 @@ func BenchmarkChunkContentSplitter(b *testing.B) { } b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { splitter := NewChunkContentSplitter() var textResult, reasoningResult strings.Builder @@ -770,7 +770,9 @@ func TestIsReasoningModel(t *testing.T) { //nolint:funlen // OpenRouter catalog additions (matched by the distinctive model-name part) {"claude-opus-5", true}, + {"claude-opus-5-5", true}, {"anthropic/claude-opus-5", true}, + {"anthropic/claude-opus-5-5", true}, {"claude-sonnet-5", true}, {"claude-fable-5", true}, {"claude-mythos-5", true}, From 9a40f2fec62170c714c819c20731d1326bfc92cd Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 00:29:41 +0300 Subject: [PATCH 602/618] fix(reasoning): a us-gov model keeps the capabilities of its bare name splitPlatformPrefix reads only letters, so the hyphen in us-gov left the region on the name: us-gov.xai.grok-4.7 answered OffOmit where us.xai.grok-4.7 answers OffUnsupported, and the Bedrock door sent a disable request that the vendor refuses. The Bedrock region prefixes now come off in modelSpellings too. Co-Authored-By: Claude Opus 5 --- llms/reasoning/name.go | 10 ++++++++++ llms/reasoning/name_forms_test.go | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/llms/reasoning/name.go b/llms/reasoning/name.go index ac2b0cde7..53805aa4d 100644 --- a/llms/reasoning/name.go +++ b/llms/reasoning/name.go @@ -11,6 +11,7 @@ func modelSpellings(model string) []string { m = m[idx+1:] } m = stripFineTuneWrapper(m) + m = stripBedrockRegion(m) vendor, bare := splitPlatformPrefix(m) switch { @@ -46,6 +47,15 @@ func stripDashWrittenVendor(model string) (string, bool) { return "", false } +func stripBedrockRegion(model string) string { + for _, prefix := range bedrockRegionPrefixes { + if rest, ok := strings.CutPrefix(model, prefix); ok && rest != "" { + return rest + } + } + return model +} + func splitPlatformPrefix(model string) (vendor, rest string) { rest = model for { diff --git a/llms/reasoning/name_forms_test.go b/llms/reasoning/name_forms_test.go index 27ffbd1ff..96412c8fc 100644 --- a/llms/reasoning/name_forms_test.go +++ b/llms/reasoning/name_forms_test.go @@ -30,7 +30,7 @@ func TestEverySpellingResolvesToOneEntry(t *testing.T) { }, {"gpt-5.4", "openai/gpt-5.4", "GPT-5.4", "azure.gpt-5.4"}, {"o3", "openai/o3", "O3"}, - {"gpt-oss-120b", "openai.gpt-oss-120b-1:0", "openai/gpt-oss-120b"}, + {"gpt-oss-120b", "openai.gpt-oss-120b-1:0", "openai/gpt-oss-120b", "us-gov.openai.gpt-oss-120b-1:0"}, { "gemini-2.5-flash", "google/gemini-2.5-flash", @@ -43,7 +43,7 @@ func TestEverySpellingResolvesToOneEntry(t *testing.T) { {"minimax-m2", "minimax.minimax-m2"}, {"kimi-k2-thinking", "moonshot.kimi-k2-thinking"}, {"mistral-medium-3", "mistralai/mistral-medium-3"}, - {"grok-4.7", "xai/grok-4.7", "XAI/Grok-4.7", "openrouter/x-ai/grok-4.7", "us.xai.grok-4.7"}, + {"grok-4.7", "xai/grok-4.7", "XAI/Grok-4.7", "openrouter/x-ai/grok-4.7", "us.xai.grok-4.7", "us-gov.xai.grok-4.7"}, } { canonical := group[0] want := capabilityAnswers(canonical) From 9a0394f295d137fc1e52af931dafddc79706ffbb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 00:44:14 +0300 Subject: [PATCH 603/618] fix(reasoning): gpt-6-sol and gpt-6-luna take function tools only without effort Both refuse function tools on chat completions unless reasoning_effort is none, and the refusal comes even when the field is absent, since the card's default is medium. They now follow the gpt-5.6 rule: an explicit effort with tools fails before the wire, and the default path sends none. Co-Authored-By: Claude Opus 5.5 --- llms/openai/effort_with_tools_test.go | 8 +++++++- llms/reasoning/effort_wire.go | 2 +- llms/reasoning/effort_wire_test.go | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/llms/openai/effort_with_tools_test.go b/llms/openai/effort_with_tools_test.go index 0a7de91e8..c72d0d8bb 100644 --- a/llms/openai/effort_with_tools_test.go +++ b/llms/openai/effort_with_tools_test.go @@ -67,6 +67,12 @@ func TestEffortAndToolsOnTheWire(t *testing.T) { []llms.CallOption{tools}, `"reasoning_effort":"none"`, false}, {"5.6 without tools keeps the level", "gpt-5.6-sol", []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, + {"6-sol with tools and no request still sends none", "gpt-6-sol", + []llms.CallOption{tools}, `"reasoning_effort":"none"`, false}, + {"6-luna with tools and no request still sends none", "gpt-6-luna", + []llms.CallOption{tools}, `"reasoning_effort":"none"`, false}, + {"6-sol without tools keeps the level", "gpt-6-sol", + []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, {"5.5 without tools keeps the level", "gpt-5.5", []llms.CallOption{high}, `"reasoning_effort":"high"`, false}, {"5.2 with tools keeps the level", "gpt-5.2", @@ -280,7 +286,7 @@ func TestDashScopeDeepSeekBudgetLeavesRoomForTheAnswer(t *testing.T) { func TestAnUnservableEffortWithToolsIsRefusedBeforeTheNetwork(t *testing.T) { t.Parallel() - for _, model := range []string{"gpt-5.6-sol", "gpt-5.5", "gpt-5.4-nano"} { + for _, model := range []string{"gpt-5.6-sol", "gpt-6-sol", "gpt-6-luna", "gpt-5.5", "gpt-5.4-nano"} { t.Run(model, func(t *testing.T) { t.Parallel() diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index 995ff6862..f643efb6c 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -283,7 +283,7 @@ func (e *ErrEffortWithTools) Error() string { // EffortWithTools reports the rule for a model. An unlisted generation stays free. func EffortWithTools(model string) EffortToolsRule { for _, form := range modelSpellings(model) { - if hasGeneration(form, "gpt-5.6") { + if hasGeneration(form, "gpt-5.6") || hasGeneration(form, "gpt-6-sol") || hasGeneration(form, "gpt-6-luna") { return EffortToolsDisable } if hasGeneration(form, "gpt-5.4") || hasGeneration(form, "gpt-5.5") { diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index 0e9538fa9..ade540088 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -214,6 +214,8 @@ func TestEffortWithTools(t *testing.T) { {"gpt-5.6-sol", EffortToolsDisable}, {"gpt-5.6-terra", EffortToolsDisable}, {"openai/gpt-5.6", EffortToolsDisable}, + {"gpt-6-sol", EffortToolsDisable}, + {"gpt-6-luna", EffortToolsDisable}, {"gpt-5.5", EffortToolsOmit}, {"gpt-5.4-nano", EffortToolsOmit}, {"gpt-5.4-mini", EffortToolsOmit}, From e1c0414d9eff32445ba40002565284c31e4867cb Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 00:44:26 +0300 Subject: [PATCH 604/618] test(openai): pin max to xhigh for gpt-6-sol and gpt-6-luna Their cards list max, but the vendor's own door answers 400 to it and names none, low, medium, high and xhigh, as it does for gpt-6-astra. The catalogue already follows the endpoint; the test keeps a fix by the card from reaching the wire. Co-Authored-By: Claude Opus 5.5 --- llms/openai/gpt6_sol_luna_test.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 llms/openai/gpt6_sol_luna_test.go diff --git a/llms/openai/gpt6_sol_luna_test.go b/llms/openai/gpt6_sol_luna_test.go new file mode 100644 index 000000000..4943a7fdb --- /dev/null +++ b/llms/openai/gpt6_sol_luna_test.go @@ -0,0 +1,24 @@ +package openai + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/vxcontrol/langchaingo/llms" +) + +func TestSolAndLunaClampMaxTheVendorRefuses(t *testing.T) { + t.Parallel() + + for _, model := range []string{"gpt-6-sol", "gpt-6-luna"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + body, err := wireBodyOf(t, model, nil, llms.WithReasoning(llms.ReasoningMax, 0)) + require.NoError(t, err) + assert.Equal(t, "xhigh", body["reasoning_effort"], + "the card lists max, but the vendor answers 400 to it with this model and names none, low, medium, high and xhigh") + }) + } +} From abcf47d08cc87e948b0501835c7c3dba99315710 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 00:46:27 +0300 Subject: [PATCH 605/618] fix(pgvector): a cancelled init rolls back before the commit can close the connection pgx closes the connection when a commit fails outside the idle state, and a commit on a done context fails before it is sent. A caller that cancelled after the last init step lost the single pgx.Conn it passed by WithConn, and the shielded rollback never ran. init now returns the context error first. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/init_test.go | 50 ++++++++++++++++++++++++++++++ vectorstores/pgvector/pgvector.go | 3 ++ 2 files changed, 53 insertions(+) diff --git a/vectorstores/pgvector/init_test.go b/vectorstores/pgvector/init_test.go index 1b1937429..4fb123791 100644 --- a/vectorstores/pgvector/init_test.go +++ b/vectorstores/pgvector/init_test.go @@ -136,6 +136,56 @@ func TestInitRollsBackEvenWhenTheCallerCancelled(t *testing.T) { require.NoError(t, tx.rollbackCtxErr) } +type cancelAfterQuery struct { + marker string + cancel context.CancelFunc + armed bool +} + +func (c *cancelAfterQuery) TraceQueryStart( + ctx context.Context, _ *pgx.Conn, data pgx.TraceQueryStartData, +) context.Context { + c.armed = strings.Contains(data.SQL, c.marker) + return ctx +} + +func (c *cancelAfterQuery) TraceQueryEnd(context.Context, *pgx.Conn, pgx.TraceQueryEndData) { + if c.armed { + c.cancel() + } +} + +func TestInitCancelledBeforeCommitKeepsTheCallersConnection(t *testing.T) { + t.Parallel() + + url := narrowingURL(t) + collectionTable := "cancel_collection_" + strings.ReplaceAll(uuid.NewString(), "-", "")[:12] + + ctx, cancel := context.WithCancel(t.Context()) + defer cancel() + + cfg, err := pgx.ParseConfig(url) + require.NoError(t, err) + cfg.Tracer = &cancelAfterQuery{marker: "SELECT uuid FROM " + collectionTable, cancel: cancel} + conn, err := pgx.ConnectConfig(t.Context(), cfg) + require.NoError(t, err) + t.Cleanup(func() { _ = conn.Close(context.Background()) }) + + _, err = New(ctx, + WithConn(conn), + WithEmbedder(fixedEmbedder{dims: 3}), + WithCollectionName("cancel"), + WithCollectionTableName(collectionTable), + WithEmbeddingTableName("cancel_embedding_"+collectionTable[len("cancel_collection_"):]), + ) + require.ErrorIs(t, err, context.Canceled) + require.False(t, conn.IsClosed(), "a caller that cancelled before the commit lost its connection") + + var created bool + require.NoError(t, conn.QueryRow(t.Context(), "SELECT to_regclass($1) IS NOT NULL", collectionTable).Scan(&created)) + require.False(t, created, "a cancelled init must roll back rather than commit") +} + // Not parallel: a store opening in parallel holds the advisory locks this timeout also bounds. func TestFailedInitReturnsItsConnectionToThePool(t *testing.T) { url := narrowingURL(t) diff --git a/vectorstores/pgvector/pgvector.go b/vectorstores/pgvector/pgvector.go index 688b09499..f358e280d 100644 --- a/vectorstores/pgvector/pgvector.go +++ b/vectorstores/pgvector/pgvector.go @@ -141,6 +141,9 @@ func (s *Store) init(ctx context.Context) (err error) { if err := s.createOrGetCollection(ctx, tx); err != nil { return err } + if err := ctx.Err(); err != nil { + return err + } return tx.Commit(ctx) } From fdf1f72942df82fe47d905b64bd4b6f037f1879e Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 00:48:22 +0300 Subject: [PATCH 606/618] test(pgvector): explain the statement SimilaritySearch sends, not a copy The plan test built its own WITH ... AS MATERIALIZED text, so hoisting the filter out of the fence in the store kept it green. It now records the query the store runs and explains that with the same arguments; the hoisted filter turns it red. The index name comes from indexName instead of a literal. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/narrowing_test.go | 54 ++++++++++--------------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/vectorstores/pgvector/narrowing_test.go b/vectorstores/pgvector/narrowing_test.go index ce0219029..371a0acb4 100644 --- a/vectorstores/pgvector/narrowing_test.go +++ b/vectorstores/pgvector/narrowing_test.go @@ -77,7 +77,7 @@ func newNarrowingStore(t *testing.T, url, collection string, dims int, indexes . t.Helper() opts := []Option{ - Option(WithConnectionURL(url)), + WithConnectionURL(url), WithEmbedder(fixedEmbedder{dims: dims}), WithCollectionName(collection), } @@ -209,8 +209,8 @@ func TestSimilaritySearchReadsOnlyTheFilteredRows(t *testing.T) { url := narrowingURL(t) ctx := t.Context() - store := newNarrowingStore(t, url, narrowingCollection(), 64, - MetadataIndex{Keys: []string{"doc_type", "flow_id"}}) + index := MetadataIndex{Keys: []string{"doc_type", "flow_id"}} + store := newNarrowingStore(t, url, narrowingCollection(), 64, index) const flows, perFlow = 200, 25 docs := make([]schema.Document, 0, flows*perFlow) @@ -236,48 +236,36 @@ func TestSimilaritySearchReadsOnlyTheFilteredRows(t *testing.T) { plan := explainSimilaritySearch(t, ctx, conn, store, "flow 3 document 1", map[string]any{"doc_type": "memory", "flow_id": "3"}) - require.Contains(t, plan, store.embeddingTableName+"_meta_doc_type_flow_id", + require.Contains(t, plan, index.indexName(store.embeddingTableName), "the metadata index must carry the scan:\n%s", plan) require.NotContains(t, plan, "Seq Scan on "+store.embeddingTableName, "the whole table was read:\n%s", plan) } +type recordingConn struct { + PGXConn + + sql string + args []any +} + +func (c *recordingConn) Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error) { + c.sql, c.args = sql, args + return c.PGXConn.Query(ctx, sql, args...) +} + func explainSimilaritySearch( t *testing.T, ctx context.Context, conn *pgx.Conn, store Store, query string, filter map[string]any, ) string { t.Helper() - vector, err := store.embedder.EmbedQuery(ctx, query) + recorder := &recordingConn{PGXConn: store.conn} + store.conn = recorder + _, err := store.SimilaritySearch(ctx, query, 3, + vectorstores.WithScoreThreshold(0.2), vectorstores.WithFilters(filter)) require.NoError(t, err) - predicates, args, err := filterPredicates(store.embeddingTableName+".", filter, 4) - require.NoError(t, err) - - literals := make([]string, 0, len(vector)) - for _, v := range vector { - literals = append(literals, strconv.FormatFloat(float64(v), 'f', -1, 32)) - } - - statement := fmt.Sprintf(`EXPLAIN (COSTS OFF) WITH filtered_embedding_dims AS MATERIALIZED ( - SELECT %[1]s.uuid, %[1]s.document, %[1]s.cmetadata, %[1]s.embedding <=> '[%[2]s]'::vector AS distance - FROM %[1]s - WHERE %[1]s.collection_id = (SELECT %[3]s.uuid FROM %[3]s WHERE %[3]s.name = $1 ORDER BY %[3]s.name LIMIT 1) - AND vector_dims(%[1]s.embedding) = %[4]d - AND %[5]s -) -SELECT data.document, data.cmetadata, (1 - data.distance) AS score -FROM filtered_embedding_dims AS data -WHERE data.distance < 0.8 -ORDER BY data.distance, data.uuid LIMIT 3`, - store.embeddingTableName, strings.Join(literals, ","), store.collectionTableName, - len(vector), strings.Join(predicates, " AND ")) - - // filterPredicates numbered from 4 to match the live statement; here the - // collection name is $1 and the filter values follow it. - statement = strings.NewReplacer("$5", "$2", "$6", "$3", "$7", "$4").Replace(statement) - - params := append([]any{store.collectionName}, args...) - rows, err := conn.Query(ctx, statement, params...) + rows, err := conn.Query(ctx, "EXPLAIN (COSTS OFF) "+recorder.sql, recorder.args...) require.NoError(t, err) defer rows.Close() From a35a0a3cad3ee946a93e005a8e0c0cdaffea8342 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 00:51:45 +0300 Subject: [PATCH 607/618] fix(pgvector): a derived index name tells every declaration apart The name joined keys with the separator they may contain and marked any exclusion with a bare "partial", so different declarations shared a name and CREATE INDEX IF NOT EXISTS skipped all but the first. Every derived name now ends in a hash of the table, the keys and the excluded pairs; two declarations that still share a name with different DDL fail with ErrInvalidMetadataIndex. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/metadata_index.go | 38 ++++++---- vectorstores/pgvector/metadata_index_test.go | 75 +++++++++++++++++--- vectorstores/pgvector/narrowing_test.go | 4 ++ 3 files changed, 95 insertions(+), 22 deletions(-) diff --git a/vectorstores/pgvector/metadata_index.go b/vectorstores/pgvector/metadata_index.go index 8601795ff..3d2c2056f 100644 --- a/vectorstores/pgvector/metadata_index.go +++ b/vectorstores/pgvector/metadata_index.go @@ -4,8 +4,9 @@ import ( "context" "fmt" "hash/fnv" + "maps" "regexp" - "sort" + "slices" "strings" "github.com/jackc/pgx/v5" @@ -76,13 +77,23 @@ func (m MetadataIndex) indexName(table string) string { parts = append(parts, "partial") } name := strings.Join(parts, "_") - if len(name) <= maxIdentifierLen { - return name - } + return fmt.Sprintf("%s_%08x", name[:min(len(name), maxIdentifierLen-9)], m.fingerprint(table)) +} +func (m MetadataIndex) fingerprint(table string) uint32 { sum := fnv.New32a() - _, _ = sum.Write([]byte(name)) - return fmt.Sprintf("%s_%08x", name[:maxIdentifierLen-9], sum.Sum32()) + _, _ = fmt.Fprintf(sum, "%q", table) + for _, key := range m.Keys { + _, _ = fmt.Fprintf(sum, " k%q", key) + } + for _, key := range m.excludedKeys() { + _, _ = fmt.Fprintf(sum, " x%q=%q", key, m.Exclude[key]) + } + return sum.Sum32() +} + +func (m MetadataIndex) excludedKeys() []string { + return slices.Sorted(maps.Keys(m.Exclude)) } // ddl renders the CREATE INDEX for this declaration. Index expressions and @@ -105,12 +116,7 @@ func (m MetadataIndex) ddl(table string) (string, error) { return statement, nil } - keys := make([]string, 0, len(m.Exclude)) - for key := range m.Exclude { - keys = append(keys, key) - } - sort.Strings(keys) - + keys := m.excludedKeys() predicates := make([]string, 0, len(keys)) for _, key := range keys { literal, err := quoteLiteral(m.Exclude[key]) @@ -154,13 +160,19 @@ func (s Store) createMetadataIndexesIfNotExist(ctx context.Context, tx pgx.Tx) e return err } + statements := make(map[string]string, len(s.metadataIndexes)) for _, index := range s.metadataIndexes { statement, err := index.ddl(s.embeddingTableName) if err != nil { return err } + name := index.indexName(s.embeddingTableName) + if declared, ok := statements[name]; ok && declared != statement { + return fmt.Errorf("%w: two declarations share the index name %s", ErrInvalidMetadataIndex, name) + } + statements[name] = statement if _, err := tx.Exec(ctx, statement); err != nil { - return fmt.Errorf("create metadata index %s: %w", index.indexName(s.embeddingTableName), err) + return fmt.Errorf("create metadata index %s: %w", name, err) } } diff --git a/vectorstores/pgvector/metadata_index_test.go b/vectorstores/pgvector/metadata_index_test.go index d607bb6bf..df409b1d7 100644 --- a/vectorstores/pgvector/metadata_index_test.go +++ b/vectorstores/pgvector/metadata_index_test.go @@ -17,13 +17,13 @@ func TestMetadataIndexDDL(t *testing.T) { { name: "one key", index: MetadataIndex{Keys: []string{"flow_id"}}, - want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_flow_id " + + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_flow_id_6de4f5f1 " + "ON langchain_pg_embedding ((cmetadata ->> 'flow_id'))", }, { name: "keys keep the order they were declared in", index: MetadataIndex{Keys: []string{"doc_type", "flow_id"}}, - want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_doc_type_flow_id " + + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_doc_type_flow_id_6c451f01 " + "ON langchain_pg_embedding ((cmetadata ->> 'doc_type'), (cmetadata ->> 'flow_id'))", }, { @@ -37,7 +37,7 @@ func TestMetadataIndexDDL(t *testing.T) { Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}, }, - want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_doc_type_partial " + + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_doc_type_partial_bf975523 " + "ON langchain_pg_embedding ((cmetadata ->> 'doc_type')) " + "WHERE (cmetadata ->> 'doc_type') IS DISTINCT FROM 'memory'", }, @@ -47,7 +47,7 @@ func TestMetadataIndexDDL(t *testing.T) { Keys: []string{"owner"}, Exclude: map[string]string{"owner": "O'Brien"}, }, - want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_owner_partial " + + want: "CREATE INDEX IF NOT EXISTS langchain_pg_embedding_meta_owner_partial_fb6d36ce " + "ON langchain_pg_embedding ((cmetadata ->> 'owner')) " + "WHERE (cmetadata ->> 'owner') IS DISTINCT FROM 'O''Brien'", }, @@ -115,12 +115,69 @@ func TestMetadataIndexNameStaysWithinTheIdentifierLimit(t *testing.T) { } } -func TestMetadataIndexNameDistinguishesAPartialIndex(t *testing.T) { +func TestMetadataIndexNameDistinguishesEveryDeclaration(t *testing.T) { t.Parallel() - full := MetadataIndex{Keys: []string{"doc_type"}} - partial := MetadataIndex{Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}} - if full.indexName("lpe") == partial.indexName("lpe") { - t.Error("a partial index must not adopt the full index's name") + for _, tc := range []struct { + name string + a, b MetadataIndex + }{ + { + "a partial index and the full one", + MetadataIndex{Keys: []string{"doc_type"}}, + MetadataIndex{Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}}, + }, + { + "two partial indexes excluding different values", + MetadataIndex{Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}}, + MetadataIndex{Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "session"}}, + }, + { + "keys that regroup around an underscore", + MetadataIndex{Keys: []string{"a_b", "c"}}, + MetadataIndex{Keys: []string{"a", "b_c"}}, + }, + { + "a key named partial and a partial index", + MetadataIndex{Keys: []string{"flow_id", "partial"}}, + MetadataIndex{Keys: []string{"flow_id"}, Exclude: map[string]string{"doc_type": "memory"}}, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + if name := tc.a.indexName("lpe"); name == tc.b.indexName("lpe") { + t.Errorf("two declarations collapsed onto one name: %s", name) + } + }) + } +} + +func TestMetadataIndexesSharingANameMustAgree(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + indexes []MetadataIndex + refused bool + }{ + {"different keys under one name", []MetadataIndex{ + {Name: "lpe_shared", Keys: []string{"flow_id"}}, + {Name: "lpe_shared", Keys: []string{"doc_type"}}, + }, true}, + {"the same declaration twice", []MetadataIndex{ + {Name: "lpe_shared", Keys: []string{"flow_id"}}, + {Name: "lpe_shared", Keys: []string{"flow_id"}}, + }, false}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + store := Store{embeddingTableName: "langchain_pg_embedding", metadataIndexes: tc.indexes} + err := store.createMetadataIndexesIfNotExist(t.Context(), &scriptedTx{}) + if refused := errors.Is(err, ErrInvalidMetadataIndex); refused != tc.refused || (!refused && err != nil) { + t.Fatalf("refused = %v, want %v (err: %v)", refused, tc.refused, err) + } + }) } } diff --git a/vectorstores/pgvector/narrowing_test.go b/vectorstores/pgvector/narrowing_test.go index 371a0acb4..7c8a99486 100644 --- a/vectorstores/pgvector/narrowing_test.go +++ b/vectorstores/pgvector/narrowing_test.go @@ -179,6 +179,7 @@ func TestStoreCreatesTheDeclaredMetadataIndexes(t *testing.T) { declared := []MetadataIndex{ {Keys: []string{"doc_type", "flow_id"}}, {Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}}, + {Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "session"}}, } store := newNarrowingStore(t, url, narrowingCollection(), 64, declared...) @@ -196,6 +197,9 @@ func TestStoreCreatesTheDeclaredMetadataIndexes(t *testing.T) { for _, key := range index.Keys { require.Contains(t, definition, fmt.Sprintf("(cmetadata ->> '%s'::text)", key)) } + for _, value := range index.Exclude { + require.Contains(t, definition, fmt.Sprintf("'%s'::text", value)) + } } // A second store against the same table must be a no-op rather than an error. From 40b6fb1a9e4adb47aa76e44269d343559e2db3b9 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 01:22:14 +0300 Subject: [PATCH 608/618] fix(pgvector): a derived index name stays valid UTF-8 and the name guard folds case The readable prefix is cut at 54 bytes, which could split a multi-byte table name and make CREATE INDEX fail on an invalid byte sequence; the cut now drops the partial rune. PostgreSQL folds unquoted names to lower case, so two explicit names that differ only in case are one index and the guard now refuses them. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/metadata_index.go | 8 +++++--- vectorstores/pgvector/metadata_index_test.go | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/vectorstores/pgvector/metadata_index.go b/vectorstores/pgvector/metadata_index.go index 3d2c2056f..0022f7a91 100644 --- a/vectorstores/pgvector/metadata_index.go +++ b/vectorstores/pgvector/metadata_index.go @@ -77,7 +77,8 @@ func (m MetadataIndex) indexName(table string) string { parts = append(parts, "partial") } name := strings.Join(parts, "_") - return fmt.Sprintf("%s_%08x", name[:min(len(name), maxIdentifierLen-9)], m.fingerprint(table)) + prefix := strings.ToValidUTF8(name[:min(len(name), maxIdentifierLen-9)], "") + return fmt.Sprintf("%s_%08x", prefix, m.fingerprint(table)) } func (m MetadataIndex) fingerprint(table string) uint32 { @@ -167,10 +168,11 @@ func (s Store) createMetadataIndexesIfNotExist(ctx context.Context, tx pgx.Tx) e return err } name := index.indexName(s.embeddingTableName) - if declared, ok := statements[name]; ok && declared != statement { + folded := strings.ToLower(name) + if declared, ok := statements[folded]; ok && declared != statement { return fmt.Errorf("%w: two declarations share the index name %s", ErrInvalidMetadataIndex, name) } - statements[name] = statement + statements[folded] = statement if _, err := tx.Exec(ctx, statement); err != nil { return fmt.Errorf("create metadata index %s: %w", name, err) } diff --git a/vectorstores/pgvector/metadata_index_test.go b/vectorstores/pgvector/metadata_index_test.go index df409b1d7..7d82a62a9 100644 --- a/vectorstores/pgvector/metadata_index_test.go +++ b/vectorstores/pgvector/metadata_index_test.go @@ -4,6 +4,7 @@ import ( "errors" "strings" "testing" + "unicode/utf8" ) func TestMetadataIndexDDL(t *testing.T) { @@ -115,6 +116,15 @@ func TestMetadataIndexNameStaysWithinTheIdentifierLimit(t *testing.T) { } } +func TestMetadataIndexNameCutsATableNameOnACharacterBoundary(t *testing.T) { + t.Parallel() + + name := MetadataIndex{Keys: []string{"k"}}.indexName("t" + strings.Repeat("ж", 27)) + if !utf8.ValidString(name) || len(name) > maxIdentifierLen { + t.Errorf("name is %d bytes, valid UTF-8 = %v: %q", len(name), utf8.ValidString(name), name) + } +} + func TestMetadataIndexNameDistinguishesEveryDeclaration(t *testing.T) { t.Parallel() @@ -165,6 +175,10 @@ func TestMetadataIndexesSharingANameMustAgree(t *testing.T) { {Name: "lpe_shared", Keys: []string{"flow_id"}}, {Name: "lpe_shared", Keys: []string{"doc_type"}}, }, true}, + {"names that differ only in case", []MetadataIndex{ + {Name: "Lpe_shared", Keys: []string{"flow_id"}}, + {Name: "lpe_shared", Keys: []string{"doc_type"}}, + }, true}, {"the same declaration twice", []MetadataIndex{ {Name: "lpe_shared", Keys: []string{"flow_id"}}, {Name: "lpe_shared", Keys: []string{"flow_id"}}, From c981c07761d3fd689bfdc9f54ad0d18a30328d4f Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 01:23:30 +0300 Subject: [PATCH 609/618] test(pgvector): the plan test builds its own tables An identical index under another name on the shared table, such as one built under the old derived name, won the plan and failed the test although a metadata index carried the scan. The test now declares its index on tables of its own and drops them afterwards. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/narrowing_test.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/vectorstores/pgvector/narrowing_test.go b/vectorstores/pgvector/narrowing_test.go index 7c8a99486..f65abfcda 100644 --- a/vectorstores/pgvector/narrowing_test.go +++ b/vectorstores/pgvector/narrowing_test.go @@ -213,8 +213,27 @@ func TestSimilaritySearchReadsOnlyTheFilteredRows(t *testing.T) { url := narrowingURL(t) ctx := t.Context() + suffix := strings.ReplaceAll(uuid.NewString(), "-", "")[:12] index := MetadataIndex{Keys: []string{"doc_type", "flow_id"}} - store := newNarrowingStore(t, url, narrowingCollection(), 64, index) + store, err := New(ctx, + WithConnectionURL(url), + WithEmbedder(fixedEmbedder{dims: 64}), + WithCollectionName(narrowingCollection()), + WithCollectionTableName("plan_collection_"+suffix), + WithEmbeddingTableName("plan_embedding_"+suffix), + WithMetadataIndexes(index), + ) + require.NoError(t, err) + t.Cleanup(func() { _ = store.Close() }) + t.Cleanup(func() { + conn, err := pgx.Connect(context.Background(), url) + if err != nil { + return + } + defer conn.Close(context.Background()) + _, _ = conn.Exec(context.Background(), + "DROP TABLE IF EXISTS "+store.embeddingTableName+", "+store.collectionTableName) + }) const flows, perFlow = 200, 25 docs := make([]schema.Document, 0, flows*perFlow) From 74cce2aa448f5237a8b60a340742408efecbfd84 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 01:27:09 +0300 Subject: [PATCH 610/618] fix(openai): the none that function tools force keeps the caller's sampling gpt-5.6 and gpt-6-sol/luna get reasoning_effort none when function tools ride without an effort, yet the door still counted thinking as running and dropped temperature, top_p and the penalties. The vendor accepts all of them at none and refuses them only at an active effort. None on the wire now means no thinking. PAGI-220 Co-Authored-By: Claude Opus 5.5 --- llms/openai/openaillm.go | 3 +++ llms/openai/sampling_matrix_test.go | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index bf80b455f..dfaac4e8f 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -696,6 +696,9 @@ func thinkingRuns(model string, opts llms.CallOptions, wireEffort string) bool { if isThinkingOnTheWire(wireEffort) || reasoning.ThinkingMarkedInName(model) { return true } + if wireEffort == reasoning.OpenAIDisableEffort { + return false + } if reasoning.ClaudeSupportsThinking(model) { return reasoning.ClaudeThinkingDefaultsOn(model) } diff --git a/llms/openai/sampling_matrix_test.go b/llms/openai/sampling_matrix_test.go index b637ee369..c721c711a 100644 --- a/llms/openai/sampling_matrix_test.go +++ b/llms/openai/sampling_matrix_test.go @@ -99,6 +99,7 @@ func TestSamplingMatrix(t *testing.T) { topP := llms.WithTopP(0.9) high := llms.WithReasoning(llms.ReasoningHigh, 0) off := llms.WithReasoningDisabled() + tools := llms.WithTools([]llms.Tool{weatherTool()}) runSamplingCases(t, []samplingCase{{ name: "an opt-in model keeps its temperature until asked to think", @@ -123,6 +124,16 @@ func TestSamplingMatrix(t *testing.T) { model: "gpt-5.5", opts: []llms.CallOption{temp, topP, off}, present: []string{`"temperature":0.3`, `"top_p":0.9`, `"reasoning_effort":"none"`}, + }, { + name: "the none that tools force on 5.6 leaves the sampling alone", + model: "gpt-5.6-sol", + opts: []llms.CallOption{temp, topP, tools}, + present: []string{`"temperature":0.3`, `"top_p":0.9`, `"reasoning_effort":"none"`}, + }, { + name: "the none that tools force on 6-sol leaves the sampling alone", + model: "gpt-6-sol", + opts: []llms.CallOption{temp, topP, tools}, + present: []string{`"temperature":0.3`, `"top_p":0.9`, `"reasoning_effort":"none"`}, }, { name: "omitted effort falls back to the model for an accepting name", model: "gpt-5.4", From 7ab52b882962a5fe31212c01578f8a4958543c8c Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 01:45:55 +0300 Subject: [PATCH 611/618] fix(pgvector): the name guard compares what two declarations define, not their SQL Comparing rendered statements carried the name's own case into the comparison, so two identical declarations whose names differed only in case were refused, though PostgreSQL builds them as one index. The guard now compares the canonical definition that the derived name already hashes: table, keys and exclusions. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/metadata_index.go | 21 +++++++++++++------- vectorstores/pgvector/metadata_index_test.go | 4 ++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/vectorstores/pgvector/metadata_index.go b/vectorstores/pgvector/metadata_index.go index 0022f7a91..a47d583f2 100644 --- a/vectorstores/pgvector/metadata_index.go +++ b/vectorstores/pgvector/metadata_index.go @@ -83,14 +83,20 @@ func (m MetadataIndex) indexName(table string) string { func (m MetadataIndex) fingerprint(table string) uint32 { sum := fnv.New32a() - _, _ = fmt.Fprintf(sum, "%q", table) + _, _ = sum.Write([]byte(m.definition(table))) + return sum.Sum32() +} + +func (m MetadataIndex) definition(table string) string { + var b strings.Builder + _, _ = fmt.Fprintf(&b, "%q", table) for _, key := range m.Keys { - _, _ = fmt.Fprintf(sum, " k%q", key) + _, _ = fmt.Fprintf(&b, " k%q", key) } for _, key := range m.excludedKeys() { - _, _ = fmt.Fprintf(sum, " x%q=%q", key, m.Exclude[key]) + _, _ = fmt.Fprintf(&b, " x%q=%q", key, m.Exclude[key]) } - return sum.Sum32() + return b.String() } func (m MetadataIndex) excludedKeys() []string { @@ -161,7 +167,7 @@ func (s Store) createMetadataIndexesIfNotExist(ctx context.Context, tx pgx.Tx) e return err } - statements := make(map[string]string, len(s.metadataIndexes)) + definitions := make(map[string]string, len(s.metadataIndexes)) for _, index := range s.metadataIndexes { statement, err := index.ddl(s.embeddingTableName) if err != nil { @@ -169,10 +175,11 @@ func (s Store) createMetadataIndexesIfNotExist(ctx context.Context, tx pgx.Tx) e } name := index.indexName(s.embeddingTableName) folded := strings.ToLower(name) - if declared, ok := statements[folded]; ok && declared != statement { + definition := index.definition(s.embeddingTableName) + if declared, ok := definitions[folded]; ok && declared != definition { return fmt.Errorf("%w: two declarations share the index name %s", ErrInvalidMetadataIndex, name) } - statements[folded] = statement + definitions[folded] = definition if _, err := tx.Exec(ctx, statement); err != nil { return fmt.Errorf("create metadata index %s: %w", name, err) } diff --git a/vectorstores/pgvector/metadata_index_test.go b/vectorstores/pgvector/metadata_index_test.go index 7d82a62a9..81e26a2ac 100644 --- a/vectorstores/pgvector/metadata_index_test.go +++ b/vectorstores/pgvector/metadata_index_test.go @@ -179,6 +179,10 @@ func TestMetadataIndexesSharingANameMustAgree(t *testing.T) { {Name: "Lpe_shared", Keys: []string{"flow_id"}}, {Name: "lpe_shared", Keys: []string{"doc_type"}}, }, true}, + {"names that differ only in case over the same keys", []MetadataIndex{ + {Name: "Lpe_shared", Keys: []string{"flow_id"}}, + {Name: "lpe_shared", Keys: []string{"flow_id"}}, + }, false}, {"the same declaration twice", []MetadataIndex{ {Name: "lpe_shared", Keys: []string{"flow_id"}}, {Name: "lpe_shared", Keys: []string{"flow_id"}}, From cbf020bfb848a2d6bbb18f843a32a2c6dd590942 Mon Sep 17 00:00:00 2001 From: Sergey Kozyrenko Date: Wed, 23 Sep 2026 01:56:13 +0300 Subject: [PATCH 612/618] test(pgvector): the name guard refuses exclusions that differ under one name A guard comparing keys alone passed every case before this one. Co-Authored-By: Claude Opus 5.5 --- vectorstores/pgvector/metadata_index_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vectorstores/pgvector/metadata_index_test.go b/vectorstores/pgvector/metadata_index_test.go index 81e26a2ac..3ac8ea7d2 100644 --- a/vectorstores/pgvector/metadata_index_test.go +++ b/vectorstores/pgvector/metadata_index_test.go @@ -179,6 +179,10 @@ func TestMetadataIndexesSharingANameMustAgree(t *testing.T) { {Name: "Lpe_shared", Keys: []string{"flow_id"}}, {Name: "lpe_shared", Keys: []string{"doc_type"}}, }, true}, + {"exclusions that differ under one name", []MetadataIndex{ + {Name: "lpe_shared", Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "memory"}}, + {Name: "lpe_shared", Keys: []string{"doc_type"}, Exclude: map[string]string{"doc_type": "session"}}, + }, true}, {"names that differ only in case over the same keys", []MetadataIndex{ {Name: "Lpe_shared", Keys: []string{"flow_id"}}, {Name: "lpe_shared", Keys: []string{"flow_id"}}, From 6b7f9a06e084329ed777e822f9815ba9e030ccd7 Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Wed, 23 Sep 2026 09:22:42 +0300 Subject: [PATCH 613/618] fix(gemini): update Google AI LLM test to use "gemini-3.8-flash" model and adjust test options for output budget. Enhance llmtest to support call options, allowing tests to specify required parameters for model interactions. --- llms/googleai/llmtest_test.go | 10 ++++-- testing/llmtest/doc.go | 3 ++ testing/llmtest/llmtest.go | 59 ++++++++++++++++++++------------ testing/llmtest/llmtest_test.go | 60 +++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 23 deletions(-) diff --git a/llms/googleai/llmtest_test.go b/llms/googleai/llmtest_test.go index f499e4745..1f77d536d 100644 --- a/llms/googleai/llmtest_test.go +++ b/llms/googleai/llmtest_test.go @@ -5,6 +5,7 @@ import ( "os" "testing" + "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/testing/llmtest" ) @@ -16,11 +17,16 @@ func TestLLM(t *testing.T) { ctx := context.Background() llm, err := New(ctx, WithAPIKey(os.Getenv("GOOGLE_API_KEY")), - WithDefaultModel("gemini-2.5-flash"), + WithDefaultModel("gemini-3.8-flash"), ) if err != nil { t.Fatalf("Failed to create Google AI LLM: %v", err) } - llmtest.TestLLM(t, llm) + // gemini-3.8-flash cannot stop thinking: it refuses the minimal level and + // reasoning off, and its thoughts count against the output budget. At its + // default level it spends up to about 160 tokens on thoughts, so the suite's + // 10- and 50-token answers end on MAX_TOKENS with no text unless the door + // declares room to think first. + llmtest.TestLLM(t, llm, llmtest.WithCallOptions(llms.WithMaxTokens(512))) } diff --git a/testing/llmtest/doc.go b/testing/llmtest/doc.go index 98c896d43..16fb67a9c 100644 --- a/testing/llmtest/doc.go +++ b/testing/llmtest/doc.go @@ -32,6 +32,9 @@ // - Streaming (unless the call site passes WithoutStreaming) // - Tool/Function calling (probed with a test tool; a door that takes the // tools must answer with a call unless the call site passes WithoutToolCalls) +// - A door that needs particular options to answer at all, such as the +// output budget a thinking model spends before its first word, declares +// them with WithCallOptions; every checked request carries them // - Reasoning/Thinking mode (if supported) // - Token counting (if usage information provided) // - Context caching (if implemented) diff --git a/testing/llmtest/llmtest.go b/testing/llmtest/llmtest.go index a0f15a7c8..2439f8fe0 100644 --- a/testing/llmtest/llmtest.go +++ b/testing/llmtest/llmtest.go @@ -48,12 +48,12 @@ func TestLLM(t *testing.T, model llms.Model, opts ...Option) { t.Run("Call", func(t *testing.T) { t.Parallel() - testCall(t, model) + testCall(t, model, declared.CallOptions...) }) t.Run("GenerateContent", func(t *testing.T) { t.Parallel() - testGenerateContent(t, model) + testGenerateContent(t, model, declared.CallOptions...) }) }) @@ -64,27 +64,27 @@ func TestLLM(t *testing.T, model llms.Model, opts ...Option) { if !declared.SkipStreaming { t.Run("Streaming", func(t *testing.T) { t.Parallel() - testStreaming(t, model) + testStreaming(t, model, declared.CallOptions...) }) } if !declared.SkipToolCalls && supportsTools(model) { t.Run("ToolCalls", func(t *testing.T) { t.Parallel() - testToolCalls(t, model) + testToolCalls(t, model, declared.CallOptions...) }) } // Test caching by trying it - if it works, great t.Run("Caching", func(t *testing.T) { t.Parallel() - testCaching(t, model) + testCaching(t, model, declared.CallOptions...) }) // Test token counting - always run but don't fail if not supported t.Run("TokenCounting", func(t *testing.T) { t.Parallel() - testTokenCounting(t, model) + testTokenCounting(t, model, declared.CallOptions...) }) }) } @@ -146,7 +146,8 @@ func TestLLMWithOptions(t *testing.T, model llms.Model, opts TestOptions, expect runTestsWithContext(t, testCtx) } -// Option declares, at the call site, what the door under test cannot do. +// Option declares, at the call site, what the door under test cannot do or +// what it needs to be called with. type Option func(*TestOptions) // WithoutStreaming declares a door that does not deliver a streaming callback, @@ -161,6 +162,16 @@ func WithoutToolCalls() Option { return func(o *TestOptions) { o.SkipToolCalls = true } } +// WithCallOptions declares options the door needs on every request to answer +// at all, such as the output budget a thinking model spends on thoughts before +// its first word. The suite appends them after its own, so they override its +// budgets and other defaults, while the Streaming test still installs its text +// collector last and the tool probe stays a pure capability probe. Every +// answer is held to the same checks as before. +func WithCallOptions(opts ...llms.CallOption) Option { + return func(o *TestOptions) { o.CallOptions = append(o.CallOptions, opts...) } +} + // TestOptions configures test execution. type TestOptions struct { // Timeout for each test operation @@ -214,11 +225,12 @@ func runTestsWithContext(t *testing.T, ctx *testContext) { // Core test implementations -func testCall(t *testing.T, model llms.Model) { +func testCall(t *testing.T, model llms.Model, extra ...llms.CallOption) { t.Helper() ctx := context.Background() - result, err := llms.GenerateFromSinglePrompt(ctx, model, "Reply with 'OK' and nothing else", llms.WithMaxTokens(10)) + opts := append([]llms.CallOption{llms.WithMaxTokens(10)}, extra...) + result, err := llms.GenerateFromSinglePrompt(ctx, model, "Reply with 'OK' and nothing else", opts...) if err != nil { t.Fatalf("Call failed: %v", err) } @@ -253,7 +265,7 @@ func testCallWithContext(t *testing.T, tctx *testContext) { } } -func testGenerateContent(t *testing.T, model llms.Model) { +func testGenerateContent(t *testing.T, model llms.Model, extra ...llms.CallOption) { t.Helper() ctx := context.Background() @@ -266,7 +278,8 @@ func testGenerateContent(t *testing.T, model llms.Model) { }, } - resp, err := model.GenerateContent(ctx, messages, llms.WithMaxTokens(10)) + opts := append([]llms.CallOption{llms.WithMaxTokens(10)}, extra...) + resp, err := model.GenerateContent(ctx, messages, opts...) if err != nil { t.Fatalf("GenerateContent failed: %v", err) } @@ -313,7 +326,7 @@ func testGenerateContentWithContext(t *testing.T, tctx *testContext) { } } -func testStreaming(t *testing.T, model llms.Model) { +func testStreaming(t *testing.T, model llms.Model, extra ...llms.CallOption) { t.Helper() messages := []llms.MessageContent{ @@ -325,7 +338,8 @@ func testStreaming(t *testing.T, model llms.Model) { }, } - assertStreams(t, context.Background(), model, messages, llms.WithMaxTokens(50)) + opts := append([]llms.CallOption{llms.WithMaxTokens(50)}, extra...) + assertStreams(t, context.Background(), model, messages, opts...) } func testStreamingWithContext(t *testing.T, tctx *testContext) { @@ -388,7 +402,7 @@ func assertStreams(t *testing.T, ctx context.Context, model llms.Model, messages } } -func testToolCalls(t testing.TB, model llms.Model) { +func testToolCalls(t testing.TB, model llms.Model, extra ...llms.CallOption) { t.Helper() ctx := context.Background() @@ -422,10 +436,10 @@ func testToolCalls(t testing.TB, model llms.Model) { }, } - resp, err := model.GenerateContent(ctx, messages, + resp, err := model.GenerateContent(ctx, messages, append([]llms.CallOption{ llms.WithTools(tools), llms.WithMaxTokens(100), - ) + }, extra...)...) if err != nil { t.Fatalf("GenerateContent with tools failed: %v", err) } @@ -443,7 +457,7 @@ func testToolCalls(t testing.TB, model llms.Model) { } } -func testCaching(t *testing.T, model llms.Model) { +func testCaching(t *testing.T, model llms.Model, extra ...llms.CallOption) { t.Helper() ctx := context.Background() @@ -465,14 +479,16 @@ func testCaching(t *testing.T, model llms.Model) { }, } + opts := append([]llms.CallOption{llms.WithMaxTokens(10)}, extra...) + // First call (cache miss) - _, err := model.GenerateContent(ctx, messages, llms.WithMaxTokens(10)) + _, err := model.GenerateContent(ctx, messages, opts...) if err != nil { t.Fatalf("First call failed: %v", err) } // Second call (potential cache hit) - resp2, err := model.GenerateContent(ctx, messages, llms.WithMaxTokens(10)) + resp2, err := model.GenerateContent(ctx, messages, opts...) if err != nil { t.Fatalf("Second call failed: %v", err) } @@ -485,7 +501,7 @@ func testCaching(t *testing.T, model llms.Model) { } } -func testTokenCounting(t *testing.T, model llms.Model) { +func testTokenCounting(t *testing.T, model llms.Model, extra ...llms.CallOption) { t.Helper() ctx := context.Background() @@ -498,7 +514,8 @@ func testTokenCounting(t *testing.T, model llms.Model) { }, } - resp, err := model.GenerateContent(ctx, messages, llms.WithMaxTokens(50)) + opts := append([]llms.CallOption{llms.WithMaxTokens(50)}, extra...) + resp, err := model.GenerateContent(ctx, messages, opts...) if err != nil { t.Fatalf("GenerateContent failed: %v", err) } diff --git a/testing/llmtest/llmtest_test.go b/testing/llmtest/llmtest_test.go index 2fdf05ac3..270661968 100644 --- a/testing/llmtest/llmtest_test.go +++ b/testing/llmtest/llmtest_test.go @@ -5,6 +5,7 @@ import ( "errors" "os" "runtime" + "sync" "sync/atomic" "testing" @@ -114,6 +115,65 @@ func TestTheToolProbeHoldsADoorThatDoesNotReportTheToolsDropped(t *testing.T) { } } +// recordingDoor passes every check the suite makes and records the budget +// each request carried. +type recordingDoor struct { + mu sync.Mutex + budgets []int +} + +func (d *recordingDoor) Call(ctx context.Context, prompt string, options ...llms.CallOption) (string, error) { + return llms.GenerateFromSinglePrompt(ctx, d, prompt, options...) +} + +func (d *recordingDoor) GenerateContent(ctx context.Context, messages []llms.MessageContent, options ...llms.CallOption) (*llms.ContentResponse, error) { + var o llms.CallOptions + for _, opt := range options { + opt(&o) + } + d.mu.Lock() + d.budgets = append(d.budgets, *o.MaxTokens) + d.mu.Unlock() + + if len(o.Tools) > 0 { + return &llms.ContentResponse{Choices: []*llms.ContentChoice{{ToolCalls: []llms.ToolCall{{ + ID: "call_1", Type: "function", + FunctionCall: &llms.FunctionCall{Name: "get_weather", Arguments: `{"location":"San Francisco, US"}`}, + }}}}}, nil + } + hello := &MockLLM{GenerateResponse: &llms.ContentResponse{Choices: []*llms.ContentChoice{{Content: "Hello"}}}} + return hello.GenerateContent(ctx, messages, options...) +} + +func TestTheSuiteCallsTheDoorTheWayItDeclares(t *testing.T) { + t.Parallel() + + for name, tc := range map[string]struct { + opts []Option + budgets []int + }{ + // The tool probe, Call, GenerateContent, Streaming, ToolCalls, both + // Caching calls and TokenCounting, each with the suite's own budget. + "nothing declared": {budgets: []int{1, 10, 10, 50, 100, 10, 10, 50}}, + // Every checked request carries the declaration; the tool probe keeps + // its own budget, so a declaration cannot talk it out of ToolCalls. + "options declared": { + opts: []Option{WithCallOptions(llms.WithMaxTokens(512))}, + budgets: []int{1, 512, 512, 512, 512, 512, 512, 512}, + }, + } { + t.Run(name, func(t *testing.T) { + door := &recordingDoor{} + t.Cleanup(func() { + door.mu.Lock() + defer door.mu.Unlock() + assert.ElementsMatch(t, tc.budgets, door.budgets) + }) + TestLLM(t, door, tc.opts...) + }) + } +} + // TestValidateLLM tests the validation function. func TestValidateLLM(t *testing.T) { // Test with nil model From 506e5d877579a10e79284f816c3c5594f0450f6a Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Wed, 23 Sep 2026 11:22:58 +0300 Subject: [PATCH 614/618] fix(tests): update OpenAI LLM tests to use "gpt-4.1-nano" model and implement refreshIndex function for Opensearch tests to ensure document visibility during searches --- vectorstores/chroma/chroma_test.go | 1 + vectorstores/opensearch/opensearch_test.go | 36 +++++++++++++++++----- vectorstores/pgvector/pgvector_test.go | 1 + vectorstores/pinecone/pinecone_test.go | 1 + vectorstores/weaviate/weaviate_test.go | 4 +-- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/vectorstores/chroma/chroma_test.go b/vectorstores/chroma/chroma_test.go index 3f1f53dbe..543b70991 100644 --- a/vectorstores/chroma/chroma_test.go +++ b/vectorstores/chroma/chroma_test.go @@ -70,6 +70,7 @@ func createOpenAILLMAndEmbedder(t *testing.T) (*openai.LLM, *embeddings.Embedder rr := httprr.OpenForTest(t, http.DefaultTransport) llm, err := openai.New( + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), ) require.NoError(t, err) diff --git a/vectorstores/opensearch/opensearch_test.go b/vectorstores/opensearch/opensearch_test.go index 61f9c68ef..f37e8b78b 100644 --- a/vectorstores/opensearch/opensearch_test.go +++ b/vectorstores/opensearch/opensearch_test.go @@ -154,6 +154,7 @@ func createOpenAILLMAndEmbedder(t *testing.T, httpClient *http.Client, recording t.Helper() llmOpts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(httpClient), } // Only add fake token when NOT recording (i.e., during replay) @@ -216,6 +217,21 @@ func setOpensearchClient( return client } +// refreshIndex makes the documents just added visible to search, so what a +// test retrieves does not hang on the refresh interval firing in time under +// load. A partial hit set changes the prompt the chain sends and misses the +// recorded chat completion. +func refreshIndex(t *testing.T, client *opensearchgo.Client, indexName string) { + t.Helper() + res, err := client.Indices.Refresh( + client.Indices.Refresh.WithContext(t.Context()), + client.Indices.Refresh.WithIndex(indexName), + ) + require.NoError(t, err) + defer res.Body.Close() + require.False(t, res.IsError(), "refresh index %s: %s", indexName, res.String()) +} + func TestOpensearchStoreRest(t *testing.T) { httprr.SkipIfNoCredentialsAndRecordingMissing( t, "OPENSEARCH_ENDPOINT", "OPENSEARCH_USER", "OPENSEARCH_PASSWORD", "OPENAI_API_KEY", @@ -232,8 +248,9 @@ func TestOpensearchStoreRest(t *testing.T) { indexName := uuid.New().String() e := createOpenAIEmbedder(t, rr.Client()) + client := setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword) storer, err := opensearch.New( - setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword), + client, opensearch.WithEmbedder(e), ) require.NoError(t, err) @@ -246,7 +263,7 @@ func TestOpensearchStoreRest(t *testing.T) { {PageContent: "potato"}, }, vectorstores.WithNameSpace(indexName)) require.NoError(t, err) - time.Sleep(time.Second) + refreshIndex(t, client, indexName) docs, err := storer.SimilaritySearch(ctx, "japan", 1, vectorstores.WithNameSpace(indexName)) require.NoError(t, err) require.Len(t, docs, 1) @@ -270,8 +287,9 @@ func TestOpensearchStoreRestWithScoreThreshold(t *testing.T) { e := createOpenAIEmbedder(t, rr.Client()) + client := setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword) storer, err := opensearch.New( - setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword), + client, opensearch.WithEmbedder(e), ) require.NoError(t, err) @@ -292,7 +310,7 @@ func TestOpensearchStoreRestWithScoreThreshold(t *testing.T) { {PageContent: "New York"}, }, vectorstores.WithNameSpace(indexName)) require.NoError(t, err) - time.Sleep(time.Second) + refreshIndex(t, client, indexName) // test with a score threshold of 0.72, expected 6 documents docs, err := storer.SimilaritySearch(ctx, "Which of these are cities in Japan", 10, @@ -319,8 +337,9 @@ func TestOpensearchAsRetriever(t *testing.T) { llm, e := createOpenAILLMAndEmbedder(t, rr.Client(), rr.Recording()) + client := setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword) storer, err := opensearch.New( - setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword), + client, opensearch.WithEmbedder(e), ) require.NoError(t, err) @@ -339,7 +358,7 @@ func TestOpensearchAsRetriever(t *testing.T) { ) require.NoError(t, err) - time.Sleep(time.Second) + refreshIndex(t, client, indexName) result, err := chains.Run( ctx, @@ -370,8 +389,9 @@ func TestOpensearchAsRetrieverWithScoreThreshold(t *testing.T) { llm, e := createOpenAILLMAndEmbedder(t, rr.Client(), rr.Recording()) + client := setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword) storer, err := opensearch.New( - setOpensearchClient(t, opensearchEndpoint, opensearchUser, opensearchPassword), + client, opensearch.WithEmbedder(e), ) require.NoError(t, err) @@ -391,7 +411,7 @@ func TestOpensearchAsRetrieverWithScoreThreshold(t *testing.T) { vectorstores.WithNameSpace(indexName), ) require.NoError(t, err) - time.Sleep(time.Second) + refreshIndex(t, client, indexName) result, err := chains.Run( ctx, chains.NewRetrievalQAFromLLM( diff --git a/vectorstores/pgvector/pgvector_test.go b/vectorstores/pgvector/pgvector_test.go index 769c7d259..85b3382dd 100644 --- a/vectorstores/pgvector/pgvector_test.go +++ b/vectorstores/pgvector/pgvector_test.go @@ -55,6 +55,7 @@ func createOpenAILLMAndEmbedder(t *testing.T, rr *httprr.RecordReplay) (llm *ope httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } if !rr.Recording() { diff --git a/vectorstores/pinecone/pinecone_test.go b/vectorstores/pinecone/pinecone_test.go index 31370d376..d462427d6 100644 --- a/vectorstores/pinecone/pinecone_test.go +++ b/vectorstores/pinecone/pinecone_test.go @@ -79,6 +79,7 @@ func createOpenAILLMAndEmbedder(t *testing.T, rr *httprr.RecordReplay) (*openai. httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } embeddingOpts := []openai.Option{ diff --git a/vectorstores/weaviate/weaviate_test.go b/vectorstores/weaviate/weaviate_test.go index 5bcab1c48..17075337f 100644 --- a/vectorstores/weaviate/weaviate_test.go +++ b/vectorstores/weaviate/weaviate_test.go @@ -124,8 +124,8 @@ func createOpenAIClient(t *testing.T) (*embeddings.EmbedderImpl, *openai.LLM) { e, err := embeddings.NewEmbedder(embeddingLLM) require.NoError(t, err) - // Create LLM for chains (with default chat model) - llm, err := openai.New(opts...) + // Create LLM for chains (with the chat model the cassettes record) + llm, err := openai.New(append([]openai.Option{openai.WithModel("gpt-4.1-nano")}, opts...)...) require.NoError(t, err) return e, llm From a41298290ea6b4c7ba9dc037908ac1a5637c0afa Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Wed, 23 Sep 2026 16:52:08 +0300 Subject: [PATCH 615/618] refactor(tests): streamline test setup by removing redundant recording checks and implementing centralized credential validation for OpenAI API across multiple test files --- agents/conversational_test.go | 38 +- agents/executor_test.go | 34 +- agents/openai_functions_agent_test.go | 37 +- chains/api_test.go | 3 +- chains/constitution/constitutional_test.go | 29 +- chains/conversational_retrieval_qa_test.go | 18 +- chains/llm_test.go | 83 +- chains/map_rerank_documents.go | 86 +- chains/map_rerank_documents_test.go | 133 +- chains/question_answering_test.go | 2 - chains/testdata/TestAPI.httprr | 155 + .../TestConversationalRetrievalQA.httprr | 208 + ...estConversationalRetrievalQAFromLLM.httprr | 208 + ...AFromLLMWithConversationTokenBuffer.httprr | 208 + ...tionalRetrievalQAWithReturnMessages.httprr | 208 + .../testdata/TestLLMChainWithGoogleAI.httprr | 57 +- chains/testdata/TestMapRerankQA.httprr | 898 + .../anthropic-extended-capabilities/README.md | 2 +- .../anthropic-interleaved-thinking/README.md | 2 +- internal/imageutil/download_test.go | 40 +- .../TestDownloadImageData_Integration.httprr | Bin 0 -> 2709 bytes ...stDownloadImageData_InvalidMimeType.httprr | 16 + .../TestDownloadImageData_JPEG.httprr | Bin 0 -> 1908 bytes .../TestDownloadImageData_NotFound.httprr | 18 + llms/anthropic/options.go | 2 +- llms/bedrock/bedrockllm_test.go | 12 - llms/count_tokens.go | 29 +- llms/count_tokens_test.go | 42 + llms/googleai/googleai.go | 22 +- llms/googleai/googleai_test.go | 154 +- llms/googleai/googleai_unit_test.go | 80 +- .../internal/palmclient/palmclient.go | 6 +- llms/googleai/palm/palm_llm.go | 2 +- llms/googleai/palm/palm_llm_test.go | 56 +- llms/googleai/shared_test/shared_test.go | 166 +- ...-testCandidateCountSetting-googleai.httprr | 57 + ...gleAIShared-testEmbeddings-googleai.httprr | 9256 +++++++ ...stGenerateFromSinglePrompt-googleai.httprr | 57 + ...hared-testMaxTokensSetting-googleai.httprr | 104 + ...estMultiContentImageBinary-googleai.httprr | 61 + ...-testMultiContentImageLink-googleai.httprr | 61 + ...ed-testMultiContentText-googleai#01.httprr | 75 + ...hared-testMultiContentText-googleai.httprr | 57 + ...ltiContentTextChatSequence-googleai.httprr | 57 + ...iContentTextUsingTextParts-googleai.httprr | 75 + ...tiContentWithSystemMessage-googleai.httprr | 57 + ...stGoogleAIShared-testTools-googleai.httprr | 120 + ...ToolsWithInterfaceRequired-googleai.httprr | 120 + ...AIShared-testWithStreaming-googleai.httprr | 83 + llms/huggingface/example_provider_test.go | 4 +- llms/huggingface/huggingfacellm_test.go | 22 +- .../huggingfaceclient_test.go | 6 +- memory/token_buffer.go | 4 +- memory/token_buffer_test.go | 31 + testing/llmtest/doc.go | 10 +- vectorstores/dolt/dolt_test.go | 454 +- .../dolt/testdata/TestDeduplicater.httprr | 1590 ++ .../dolt/testdata/TestDoltAsRetriever.httprr | 6332 +++++ ...rieverWithMetadataFilterNotSelected.httprr | 9416 ++++++++ ...tDoltAsRetrieverWithMetadataFilters.httprr | 6332 +++++ ...stDoltAsRetrieverWithScoreThreshold.httprr | 9416 ++++++++ .../dolt/testdata/TestDoltStoreRest.httprr | 4721 ++++ ...TestDoltStoreRestWithScoreThreshold.httprr | 18646 ++++++++++++++ .../TestDoltStoreSimilarityScore.httprr | 6263 +++++ ...laritySearchWithDifferentDimensions.httprr | 20160 ++++++++++++++++ ...ritySearchWithInvalidScoreThreshold.httprr | 15468 ++++++++++++ .../dolt/testdata/TestWithAllOptions.httprr | 9441 ++++++++ vectorstores/inmemory/inmemory.go | 6 +- vectorstores/inmemory/inmemory_test.go | 123 +- .../inmemory/testdata/TestDeduplicater.httprr | 3179 +++ .../testdata/TestInMemoryAsRetriever.httprr | 6332 +++++ ...rieverWithMetadataFilterNotSelected.httprr | 9416 ++++++++ ...emoryAsRetrieverWithMetadataFilters.httprr | 6332 +++++ ...MemoryAsRetrieverWithScoreThreshold.httprr | 9416 ++++++++ .../testdata/TestInMemoryStoreRest.httprr | 4721 ++++ ...InMemoryStoreRestWithScoreThreshold.httprr | 18646 ++++++++++++++ ...ritySearchWithInvalidScoreThreshold.httprr | 18646 ++++++++++++++ vectorstores/mongovector/mongovector_test.go | 21 +- vectorstores/redisvector/redis_vector_test.go | 94 +- .../TestRedisVectorAsRetriever.httprr | 18598 +++++++------- 80 files changed, 207055 insertions(+), 10085 deletions(-) create mode 100644 chains/testdata/TestAPI.httprr create mode 100644 chains/testdata/TestConversationalRetrievalQA.httprr create mode 100644 chains/testdata/TestConversationalRetrievalQAFromLLM.httprr create mode 100644 chains/testdata/TestConversationalRetrievalQAFromLLMWithConversationTokenBuffer.httprr create mode 100644 chains/testdata/TestConversationalRetrievalQAWithReturnMessages.httprr create mode 100644 chains/testdata/TestMapRerankQA.httprr create mode 100644 internal/imageutil/testdata/TestDownloadImageData_Integration.httprr create mode 100644 internal/imageutil/testdata/TestDownloadImageData_InvalidMimeType.httprr create mode 100644 internal/imageutil/testdata/TestDownloadImageData_JPEG.httprr create mode 100644 internal/imageutil/testdata/TestDownloadImageData_NotFound.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testCandidateCountSetting-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testEmbeddings-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testGenerateFromSinglePrompt-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMaxTokensSetting-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageBinary-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageLink-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai#01.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextChatSequence-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextUsingTextParts-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentWithSystemMessage-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testTools-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testToolsWithInterfaceRequired-googleai.httprr create mode 100644 llms/googleai/shared_test/testdata/TestGoogleAIShared-testWithStreaming-googleai.httprr create mode 100644 vectorstores/dolt/testdata/TestDeduplicater.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltAsRetriever.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilterNotSelected.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilters.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltAsRetrieverWithScoreThreshold.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltStoreRest.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltStoreRestWithScoreThreshold.httprr create mode 100644 vectorstores/dolt/testdata/TestDoltStoreSimilarityScore.httprr create mode 100644 vectorstores/dolt/testdata/TestSimilaritySearchWithDifferentDimensions.httprr create mode 100644 vectorstores/dolt/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr create mode 100644 vectorstores/dolt/testdata/TestWithAllOptions.httprr create mode 100644 vectorstores/inmemory/testdata/TestDeduplicater.httprr create mode 100644 vectorstores/inmemory/testdata/TestInMemoryAsRetriever.httprr create mode 100644 vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilterNotSelected.httprr create mode 100644 vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilters.httprr create mode 100644 vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithScoreThreshold.httprr create mode 100644 vectorstores/inmemory/testdata/TestInMemoryStoreRest.httprr create mode 100644 vectorstores/inmemory/testdata/TestInMemoryStoreRestWithScoreThreshold.httprr create mode 100644 vectorstores/inmemory/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr diff --git a/agents/conversational_test.go b/agents/conversational_test.go index b2f138e1f..f9110f5b6 100644 --- a/agents/conversational_test.go +++ b/agents/conversational_test.go @@ -2,10 +2,7 @@ package agents import ( "context" - "os" - "path/filepath" "regexp" - "strings" "testing" "github.com/vxcontrol/langchaingo/chains" @@ -18,24 +15,13 @@ import ( "github.com/stretchr/testify/require" ) -// hasExistingRecording checks if a httprr recording exists for this test -func hasExistingRecording(t *testing.T) bool { - testName := strings.ReplaceAll(t.Name(), "/", "_") - testName = strings.ReplaceAll(testName, " ", "_") - recordingPath := filepath.Join("testdata", testName+".httprr") - _, err := os.Stat(recordingPath) - return err == nil -} - func TestConversationalWithMemory(t *testing.T) { - t.Parallel() - - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") rr := httprr.OpenForTest(t, httputil.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } // Configure OpenAI client with httprr opts := []openai.Option{ openai.WithModel("gpt-4o"), @@ -58,22 +44,10 @@ func TestConversationalWithMemory(t *testing.T) { ctx := context.Background() _, err = chains.Run(ctx, executor, "Hi! my name is Bob and the year I was born is 1987") - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) res, err := chains.Run(t.Context(), executor, "What is the year I was born times 34") - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) expectedRe := "67,?558" if !regexp.MustCompile(expectedRe).MatchString(res) { t.Errorf("result does not contain the crrect answer '67558', got: %s", res) diff --git a/agents/executor_test.go b/agents/executor_test.go index 6983407a5..58766a076 100644 --- a/agents/executor_test.go +++ b/agents/executor_test.go @@ -79,15 +79,14 @@ func TestExecutorWithErrorHandler(t *testing.T) { } func TestExecutorWithMRKLAgent(t *testing.T) { - t.Parallel() ctx := t.Context() - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } // Configure OpenAI client with httprr opts := []openai.Option{ @@ -118,13 +117,7 @@ func TestExecutorWithMRKLAgent(t *testing.T) { require.NoError(t, err) result, err := chains.Run(ctx, a, "What is 5 plus 3? Please calculate this.") //nolint:lll - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) t.Logf("MRKL Agent response: %s", result) // Simple calculation: 5 + 3 = 8 @@ -132,15 +125,14 @@ func TestExecutorWithMRKLAgent(t *testing.T) { } func TestExecutorWithOpenAIFunctionAgent(t *testing.T) { - t.Parallel() ctx := t.Context() - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } // Configure OpenAI client with httprr opts := []openai.Option{ @@ -178,13 +170,7 @@ func TestExecutorWithOpenAIFunctionAgent(t *testing.T) { require.NoError(t, err) result, err := chains.Run(ctx, e, "when was the Go programming language tagged version 1.0?") //nolint:lll - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) t.Logf("Result: %s", result) diff --git a/agents/openai_functions_agent_test.go b/agents/openai_functions_agent_test.go index 8ae6ed71f..623a50953 100644 --- a/agents/openai_functions_agent_test.go +++ b/agents/openai_functions_agent_test.go @@ -2,8 +2,6 @@ package agents_test import ( "net/http" - "os" - "path/filepath" "strings" "testing" @@ -18,25 +16,15 @@ import ( "github.com/stretchr/testify/require" ) -// hasExistingRecording checks if a httprr recording exists for this test -func hasExistingRecording(t *testing.T) bool { - testName := strings.ReplaceAll(t.Name(), "/", "_") - testName = strings.ReplaceAll(testName, " ", "_") - recordingPath := filepath.Join("testdata", testName+".httprr") - _, err := os.Stat(recordingPath) - return err == nil -} - func TestOpenAIFunctionsAgentWithHTTPRR(t *testing.T) { - t.Parallel() ctx := t.Context() - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } // Configure OpenAI client with httprr opts := []openai.Option{ @@ -68,10 +56,6 @@ func TestOpenAIFunctionsAgentWithHTTPRR(t *testing.T) { // Run a simple calculation result, err := chains.Run(ctx, executor, "What is 15 multiplied by 4?") if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } t.Fatal(err) } @@ -84,15 +68,14 @@ func TestOpenAIFunctionsAgentWithHTTPRR(t *testing.T) { } func TestOpenAIFunctionsAgentComplexCalculation(t *testing.T) { - t.Parallel() ctx := t.Context() - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } // Configure OpenAI client with httprr opts := []openai.Option{ @@ -128,10 +111,6 @@ func TestOpenAIFunctionsAgentComplexCalculation(t *testing.T) { // Run a more complex calculation result, err := chains.Run(ctx, executor, "If I have 3 groups of 7 items, and I add 9 more items, how many items do I have in total?") if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } t.Fatalf("failed to run agent: %v", err) } t.Logf("Agent response: %s", result) diff --git a/chains/api_test.go b/chains/api_test.go index dae3a05b8..6e667a397 100644 --- a/chains/api_test.go +++ b/chains/api_test.go @@ -44,8 +44,6 @@ freezinglevel_height Instant meters Altitude above sea level of the 0°C level visibility Instant meters Viewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km.` func TestAPI(t *testing.T) { - t.Skip("Temporarily skipping due to httprr format issue") - t.Parallel() ctx := t.Context() httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") @@ -60,6 +58,7 @@ func TestAPI(t *testing.T) { } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } if rr.Replaying() { diff --git a/chains/constitution/constitutional_test.go b/chains/constitution/constitutional_test.go index b1472855d..2c7dcc11a 100644 --- a/chains/constitution/constitutional_test.go +++ b/chains/constitution/constitutional_test.go @@ -3,8 +3,6 @@ package constitution import ( "fmt" "net/http" - "os" - "path/filepath" "strings" "testing" @@ -16,15 +14,6 @@ import ( "github.com/stretchr/testify/require" ) -// hasExistingRecording checks if a httprr recording exists for this test -func hasExistingRecording(t *testing.T) bool { - testName := strings.ReplaceAll(t.Name(), "/", "_") - testName = strings.ReplaceAll(testName, " ", "_") - recordingPath := filepath.Join("testdata", testName+".httprr") - _, err := os.Stat(recordingPath) - return err == nil -} - func TestConstitutionCritiqueParsing(t *testing.T) { textOne := ` This text is bad. @@ -48,17 +37,15 @@ func TestConstitutionCritiqueParsing(t *testing.T) { } func TestConstitutionalChain(t *testing.T) { - t.Parallel() ctx := t.Context() httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), openai.WithHTTPClient(rr.Client()), } if rr.Replaying() { @@ -86,11 +73,5 @@ func TestConstitutionalChain(t *testing.T) { ), }, nil) _, err = c.Call(ctx, map[string]any{"question": "What is the meaning of life?"}) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) } diff --git a/chains/conversational_retrieval_qa_test.go b/chains/conversational_retrieval_qa_test.go index 8534eff01..293f49357 100644 --- a/chains/conversational_retrieval_qa_test.go +++ b/chains/conversational_retrieval_qa_test.go @@ -65,7 +65,13 @@ func createOpenAILLMForConversationalRetrievalQA(t *testing.T) *openai.LLM { httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } opts := []openai.Option{ + // gpt-4.1-nano answers the follow-up with "not mentioned": it does not infer + // from the context that Ketanji Brown Jackson succeeds Justice Stephen Breyer. + openai.WithModel("gpt-4.1-mini"), openai.WithHTTPClient(rr.Client()), } if !rr.Recording() { @@ -77,9 +83,6 @@ func createOpenAILLMForConversationalRetrievalQA(t *testing.T) *openai.LLM { } func TestConversationalRetrievalQA(t *testing.T) { - t.Skip("Test currently fails; see #415") - t.Parallel() - ctx := t.Context() llm := createOpenAILLMForConversationalRetrievalQA(t) @@ -104,9 +107,6 @@ func TestConversationalRetrievalQA(t *testing.T) { } func TestConversationalRetrievalQAWithReturnMessages(t *testing.T) { - t.Skip("Test currently fails; see #415") - t.Parallel() - ctx := t.Context() llm := createOpenAILLMForConversationalRetrievalQA(t) @@ -131,9 +131,6 @@ func TestConversationalRetrievalQAWithReturnMessages(t *testing.T) { } func TestConversationalRetrievalQAFromLLM(t *testing.T) { - t.Skip("Test currently fails; see #415") - t.Parallel() - ctx := t.Context() r := testConversationalRetriever{} @@ -150,9 +147,6 @@ func TestConversationalRetrievalQAFromLLM(t *testing.T) { } func TestConversationalRetrievalQAFromLLMWithConversationTokenBuffer(t *testing.T) { - t.Skip("Test currently fails; see #415") - t.Parallel() - ctx := t.Context() r := testConversationalRetriever{} diff --git a/chains/llm_test.go b/chains/llm_test.go index 31027cc05..795c63a32 100644 --- a/chains/llm_test.go +++ b/chains/llm_test.go @@ -1,10 +1,6 @@ package chains import ( - "fmt" - "net/http" - "os" - "path/filepath" "strings" "testing" @@ -18,39 +14,6 @@ import ( "github.com/stretchr/testify/require" ) -type transportWithAPIKey struct { - Key string - Transport http.RoundTripper -} - -func (t *transportWithAPIKey) RoundTrip(req *http.Request) (*http.Response, error) { - rt := t.Transport - if rt == nil { - rt = http.DefaultTransport - if rt == nil { - return nil, fmt.Errorf("no Transport specified or available") - } - } - - newReq := *req - if t.Key != "" { - args := newReq.URL.Query() - args.Set("key", t.Key) - newReq.URL.RawQuery = args.Encode() - } - - return rt.RoundTrip(&newReq) -} - -// hasExistingRecording checks if a httprr recording exists for this test -func hasExistingRecording(t *testing.T) bool { - testName := strings.ReplaceAll(t.Name(), "/", "_") - testName = strings.ReplaceAll(testName, " ", "_") - recordingPath := filepath.Join("testdata", testName+".httprr") - _, err := os.Stat(recordingPath) - return err == nil -} - func TestLLMChain(t *testing.T) { ctx := t.Context() httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") @@ -113,34 +76,19 @@ func TestLLMChainWithGoogleAI(t *testing.T) { ctx := t.Context() httprr.SkipIfNoCredentialsAndRecordingMissing(t, "GOOGLE_API_KEY") - // Skip if no recording available and no credentials - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - - // Create httprr with API key transport wrapper - // This is necessary because the Google API library doesn't add the API key - // when a custom HTTP client is provided via WithHTTPClient - transport := &transportWithAPIKey{ - Key: os.Getenv("GOOGLE_API_KEY"), - Transport: httputil.DefaultTransport, - } - rr := httprr.OpenForTest(t, transport) + rr := httprr.OpenForTest(t, httputil.DefaultTransport) defer rr.Close() - - // Scrub API key for security in recordings - rr.ScrubReq(func(req *http.Request) error { - q := req.URL.Query() - if q.Get("key") != "" { - q.Set("key", "test-api-key") - req.URL.RawQuery = q.Encode() - } - return nil - }) + if !rr.Recording() { + t.Parallel() + } // Configure client with httprr var opts []googleai.Option - opts = append(opts, googleai.WithRest(), googleai.WithHTTPClient(rr.Client())) + opts = append(opts, + googleai.WithRest(), + googleai.WithHTTPClient(rr.Client()), + googleai.WithDefaultModel("gemini-2.5-flash"), + ) // Avoid issue with different view of request bodies for Google AI SDK rr.ScrubReq(httprr.JsonCompactScrubBody) @@ -148,8 +96,6 @@ func TestLLMChainWithGoogleAI(t *testing.T) { if rr.Replaying() { // Use test credentials during replay opts = append(opts, googleai.WithAPIKey("test-api-key")) - // It needs to be set here because the client goes through WithHTTPClient - transport.Key = "test-api-key" } model, err := googleai.New(ctx, opts...) @@ -163,20 +109,11 @@ func TestLLMChainWithGoogleAI(t *testing.T) { chain := NewLLMChain(model, prompt) - // chains tramples over defaults for options, so setting these options - // explicitly is required until https://github.com/tmc/langchaingo/issues/626 - // is fully resolved. result, err := Predict(ctx, chain, map[string]any{ "country": "France", }, ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.True(t, strings.Contains(result, "Paris")) } diff --git a/chains/map_rerank_documents.go b/chains/map_rerank_documents.go index a7be51c05..79c528c41 100644 --- a/chains/map_rerank_documents.go +++ b/chains/map_rerank_documents.go @@ -4,11 +4,13 @@ import ( "context" "fmt" "maps" + "regexp" "sort" "strconv" + "strings" + "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/memory" - "github.com/vxcontrol/langchaingo/outputparser" "github.com/vxcontrol/langchaingo/schema" ) @@ -16,8 +18,12 @@ const ( _mapRerankDocumentsDefaultDocumentTemplate = "{{.page_content}}" _mapRerankDocumentsDefaultRankKey = "score" _mapRerankDocumentsDefaultAnswerKey = "answer" + _mapRerankAnswerLabel = "Helpful Answer:" ) +// _mapRerankScoreRE matches the "Score:" line that ends an answer. +var _mapRerankScoreRE = regexp.MustCompile(`(?m)^[ \t]*Score:[ \t]*(\d*)`) + type MapRerankDocuments struct { // Chain used to rerank the documents. LLMChain *LLMChain @@ -51,8 +57,7 @@ var _ Chain = MapRerankDocuments{} // NewMapRerankDocuments creates a new map rerank documents chain. func NewMapRerankDocuments(mapRerankLLMChain *LLMChain) *MapRerankDocuments { - mapRerankRE := `\s*(?P.*?)\nScore: (?P.*)` - mapRerankLLMChain.OutputParser = outputparser.NewRegexParser(mapRerankRE) + mapRerankLLMChain.OutputParser = mapRerankOutputParser{} return &MapRerankDocuments{ LLMChain: mapRerankLLMChain, @@ -95,25 +100,34 @@ func (c MapRerankDocuments) Call(ctx context.Context, values map[string]any, opt } outputs[i] = c.parseMapResults(rankedAnswer) - } - - sort.Slice(outputs, func(i, j int) bool { - curr, err := strconv.Atoi(outputs[i][c.RankKey].(string)) - if err != nil { - return false - } - - compare, err := strconv.Atoi(outputs[j][c.RankKey].(string)) - if err != nil { - return true + if _, ok := outputs[i][c.RankKey]; !ok { + return nil, fmt.Errorf("%w: the map result has no %q key to rank by", ErrInvalidOutputValues, c.RankKey) } + } - return curr > compare + // A stable sort keeps the document order among equal scores. + sort.SliceStable(outputs, func(i, j int) bool { + return c.score(outputs[i]) > c.score(outputs[j]) }) return c.formatOutputs(outputs), nil } +// score returns the rank of a map result. A result without an integer score, +// or with an empty answer, ranks as 0, the score the prompt asks for when the +// context does not answer the question. +func (c MapRerankDocuments) score(output map[string]any) int { + if answer, ok := output[c.AnswerKey].(string); ok && strings.TrimSpace(answer) == "" { + return 0 + } + s, _ := output[c.RankKey].(string) + score, err := strconv.Atoi(strings.TrimSpace(s)) + if err != nil { + return 0 + } + return score +} + // getInputVariable returns the input variable name to use for the LLM chain. func (c MapRerankDocuments) getInputVariable(givenInputName string, chainInputVariables []string) string { if len(chainInputVariables) == 1 { @@ -203,3 +217,45 @@ func (c MapRerankDocuments) GetOutputKeys() []string { func (c MapRerankDocuments) GetMemory() schema.Memory { //nolint:ireturn return memory.NewSimple() } + +// mapRerankOutputParser parses the answer and the score of one document. An +// output without a "Score:" line, such as a plain "I don't know.", is kept as +// the answer with an empty score, which ranks as 0, so one such document does +// not fail the whole chain. +type mapRerankOutputParser struct{} + +var _ schema.OutputParser[any] = mapRerankOutputParser{} + +// GetFormatInstructions returns instructions on the expected output format. +func (p mapRerankOutputParser) GetFormatInstructions() string { + return "Your output should be an answer followed by a line \"Score: [score between 0 and 100]\"." +} + +// Parse parses the output of an LLM into the answer and the score. The answer +// may span lines and ends at the first "Score:" line; whatever precedes the +// prompt's "Helpful Answer:" label, such as the question the model repeated, +// is not part of it. +func (p mapRerankOutputParser) Parse(text string) (any, error) { + answer, score := text, "" + if match := _mapRerankScoreRE.FindStringSubmatchIndex(text); match != nil { + answer, score = text[:match[0]], text[match[2]:match[3]] + } + if i := strings.LastIndex(answer, _mapRerankAnswerLabel); i >= 0 { + answer = answer[i+len(_mapRerankAnswerLabel):] + } + + return map[string]string{ + _mapRerankDocumentsDefaultAnswerKey: strings.TrimSpace(answer), + _mapRerankDocumentsDefaultRankKey: score, + }, nil +} + +// ParseWithPrompt does the same as Parse. +func (p mapRerankOutputParser) ParseWithPrompt(text string, _ llms.PromptValue) (any, error) { + return p.Parse(text) +} + +// Type returns the type of the parser. +func (p mapRerankOutputParser) Type() string { + return "map_rerank_parser" +} diff --git a/chains/map_rerank_documents_test.go b/chains/map_rerank_documents_test.go index 1782a00b9..29016a673 100644 --- a/chains/map_rerank_documents_test.go +++ b/chains/map_rerank_documents_test.go @@ -1,6 +1,8 @@ package chains import ( + "fmt" + "slices" "testing" "github.com/vxcontrol/langchaingo/prompts" @@ -57,14 +59,139 @@ func TestMapRerankDocumentsCall(t *testing.T) { require.Error(t, err) - // Test that an error is returned if the score cannot be processed. + // Test that scores that cannot be processed rank as 0 and keep the document order. mapRerankDocumentsChain.ReturnIntermediateSteps = false docs = []schema.Document{ {PageContent: "Test Low\nScore:"}, {PageContent: "Test High\nScore:"}, } - _, err = Run(ctx, mapRerankDocumentsChain, docs) + answer, err = Run(ctx, mapRerankDocumentsChain, docs) - require.Error(t, err) + require.NoError(t, err) + require.Equal(t, "Test Low", answer) +} + +func TestMapRerankOutputParser(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + text string + answer string + score string + }{ + {name: "answer and score", text: "Test High\nScore: 100", answer: "Test High", score: "100"}, + {name: "blank line before score", text: "The lion is Leo.\n\nScore: 100", answer: "The lion is Leo.", score: "100"}, + {name: "multiline answer", text: "Leo is a lion.\nHe is brave.\nScore: 90", answer: "Leo is a lion.\nHe is brave.", score: "90"}, + {name: "helpful answer label", text: "Helpful Answer: Leo\nScore: 100", answer: "Leo", score: "100"}, + {name: "repeated question", text: "Question: Who?\nHelpful Answer: Leo\nScore: 100", answer: "Leo", score: "100"}, + {name: "padded score", text: " Leo \nScore: 85 \n", answer: "Leo", score: "85"}, + {name: "carriage return", text: "Leo\r\nScore: 70", answer: "Leo", score: "70"}, + {name: "further example", text: "Leo\nScore: 100\nQuestion: Why?\nHelpful Answer: No\nScore: 0", answer: "Leo", score: "100"}, + {name: "score is not a number", text: "Leo\nScore: N/A", answer: "Leo", score: ""}, + {name: "no score line", text: "I don't know.", answer: "I don't know.", score: ""}, + {name: "no score line with label", text: "Question: Who?\nHelpful Answer: I don't know.\n", answer: "I don't know.", score: ""}, + {name: "score inside a line", text: "The final Score: 3\nScore: 80", answer: "The final Score: 3", score: "80"}, + {name: "last label wins", text: "Helpful Answer: a\nHelpful Answer: b\nScore: 50", answer: "b", score: "50"}, + {name: "score before the answer", text: "Score: 100\nHelpful Answer: Leo", answer: "", score: "100"}, + } + + parser := mapRerankOutputParser{} + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + parsed, err := parser.ParseWithPrompt(tt.text, nil) + require.NoError(t, err) + require.Equal(t, map[string]string{"answer": tt.answer, "score": tt.score}, parsed) + }) + } +} + +func TestMapRerankDocumentsUnscoredAnswerRanksZero(t *testing.T) { + t.Parallel() + ctx := t.Context() + + mapRerankLLMChain := NewLLMChain( + &testLanguageModel{}, + prompts.NewPromptTemplate("{{.context}}", []string{"context"}), + ) + mapRerankDocumentsChain := NewMapRerankDocuments(mapRerankLLMChain) + mapRerankDocumentsChain.ReturnIntermediateSteps = true + + docs := []schema.Document{ + {PageContent: "I don't know."}, + {PageContent: "Other\nScore: 50"}, + {PageContent: "Leo\nScore: 100 "}, + } + + result, err := Call(ctx, mapRerankDocumentsChain, map[string]any{"input_documents": docs}) + require.NoError(t, err) + require.Equal(t, "Leo", result["text"]) + require.Equal(t, []map[string]any{ + {"answer": "Leo", "score": "100"}, + {"answer": "Other", "score": "50"}, + {"answer": "I don't know.", "score": ""}, + }, result[_intermediateStepsOutputKey]) +} + +func TestMapRerankDocumentsStableRanking(t *testing.T) { + t.Parallel() + ctx := t.Context() + + mapRerankLLMChain := NewLLMChain( + &testLanguageModel{}, + prompts.NewPromptTemplate("{{.context}}", []string{"context"}), + ) + mapRerankDocumentsChain := NewMapRerankDocuments(mapRerankLLMChain) + mapRerankDocumentsChain.ReturnIntermediateSteps = true + + // Enough documents for the sort to leave insertion sort, with repeated scores. + scores := []string{"50", "100", "0", "100", "50", "0"} + docs := make([]schema.Document, 0, 60) + byScore := map[string][]map[string]any{} + for i := range 60 { + score := scores[i%len(scores)] + answer := fmt.Sprintf("answer %02d", i) + docs = append(docs, schema.Document{PageContent: answer + "\nScore: " + score}) + byScore[score] = append(byScore[score], map[string]any{"answer": answer, "score": score}) + } + expected := slices.Concat(byScore["100"], byScore["50"], byScore["0"]) + + result, err := Call(ctx, mapRerankDocumentsChain, map[string]any{"input_documents": docs}) + require.NoError(t, err) + require.Equal(t, "answer 01", result["text"]) + require.Equal(t, expected, result[_intermediateStepsOutputKey]) +} + +func TestMapRerankDocumentsScore(t *testing.T) { + t.Parallel() + + c := MapRerankDocuments{RankKey: "score", AnswerKey: "answer"} + require.Equal(t, 42, c.score(map[string]any{"score": " 42 "})) + require.Equal(t, 42, c.score(map[string]any{"answer": "Leo", "score": "42"})) + require.Equal(t, 0, c.score(map[string]any{"answer": " ", "score": "100"})) + require.Equal(t, 0, c.score(map[string]any{"score": "high"})) + require.Equal(t, 0, c.score(map[string]any{"score": 42})) + require.Equal(t, 0, c.score(map[string]any{})) +} + +func TestMapRerankDocumentsRequiresTheRankKey(t *testing.T) { + t.Parallel() + + mapRerankLLMChain := NewLLMChain( + &testLanguageModel{}, + prompts.NewPromptTemplate("{{.context}}", []string{"context"}), + ) + mapRerankDocumentsChain := NewMapRerankDocuments(mapRerankLLMChain) + mapRerankDocumentsChain.RankKey = "confidence" + + docs := []schema.Document{ + {PageContent: "Low\nScore: 10"}, + {PageContent: "High\nScore: 100"}, + } + + _, err := Call(t.Context(), mapRerankDocumentsChain, map[string]any{"input_documents": docs}) + require.ErrorIs(t, err, ErrInvalidOutputValues) } diff --git a/chains/question_answering_test.go b/chains/question_answering_test.go index 63ae4fa39..09bec7c89 100644 --- a/chains/question_answering_test.go +++ b/chains/question_answering_test.go @@ -83,8 +83,6 @@ func TestMapReduceQA(t *testing.T) { } func TestMapRerankQA(t *testing.T) { - t.Skip("Test currently fails; see #415") - t.Parallel() ctx := t.Context() llm := createOpenAILLMForQA(t) diff --git a/chains/testdata/TestAPI.httprr b/chains/testdata/TestAPI.httprr new file mode 100644 index 000000000..cc8e8089a --- /dev/null +++ b/chains/testdata/TestAPI.httprr @@ -0,0 +1,155 @@ +httprr trace v1 +4702 1927 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4499 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"You are given the API Documentation:\n\nBASE URL: https://api.open-meteo.com/\n\nAPI Documentation\nThe API endpoint /v1/forecast accepts a geographical coordinate, a list of weather variables and responds with a JSON hourly weather forecast for 7 days. Time always starts at 0:00 today and contains 168 hours. All URL parameters are listed below:\n\nParameter\tFormat\tRequired\tDefault\tDescription\nlatitude, longitude\tFloating point\tYes\t\tGeographical WGS84 coordinate of the location\nhourly\tString array\tNo\t\tA list of weather variables which should be returned. Values can be comma separated, or multiple \u0026hourly= parameter in the URL can be used.\ndaily\tString array\tNo\t\tA list of daily weather variable aggregations which should be returned. Values can be comma separated, or multiple \u0026daily= parameter in the URL can be used. If daily weather variables are specified, parameter timezone is required.\ncurrent_weather\tBool\tNo\tfalse\tInclude current weather conditions in the JSON output.\ntemperature_unit\tString\tNo\tcelsius\tIf fahrenheit is set, all temperature values are converted to Fahrenheit.\nwindspeed_unit\tString\tNo\tkmh\tOther wind speed speed units: ms, mph and kn\nprecipitation_unit\tString\tNo\tmm\tOther precipitation amount units: inch\ntimeformat\tString\tNo\tiso8601\tIf format unixtime is selected, all time values are returned in UNIX epoch time in seconds. Please note that all timestamp are in GMT+0! For daily values with unix timestamps, please apply utc_offset_seconds again to get the correct date.\ntimezone\tString\tNo\tGMT\tIf timezone is set, all timestamps are returned as local-time and data is returned starting at 00:00 local-time. Any time zone name from the time zone database is supported. If auto is set as a time zone, the coordinates will be automatically resolved to the local time zone.\npast_days\tInteger (0-2)\tNo\t0\tIf past_days is set, yesterday or the day before yesterday data are also returned.\nstart_date\nend_date\tString (yyyy-mm-dd)\tNo\t\tThe time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-06-30).\nmodels\tString array\tNo\tauto\tManually select one or more weather models. Per default, the best suitable weather models will be combined.\n\nHourly Parameter Definition\nThe parameter \u0026hourly= accepts the following values. Most weather variables are given as an instantaneous value for the indicated hour. Some variables like precipitation are calculated from the preceding hour as an average or sum.\n\nVariable\tValid time\tUnit\tDescription\ntemperature_2m\tInstant\t°C (°F)\tAir temperature at 2 meters above ground\nsnowfall\tPreceding hour sum\tcm (inch)\tSnowfall amount of the preceding hour in centimeters. For the water equivalent in millimeter, divide by 7. E.g. 7 cm snow = 10 mm precipitation water equivalent\nrain\tPreceding hour sum\tmm (inch)\tRain from large scale weather systems of the preceding hour in millimeter\nshowers\tPreceding hour sum\tmm (inch)\tShowers from convective precipitation in millimeters from the preceding hour\nweathercode\tInstant\tWMO code\tWeather condition as a numeric code. Follow WMO weather interpretation codes. See table below for details.\nsnow_depth\tInstant\tmeters\tSnow depth on the ground\nfreezinglevel_height\tInstant\tmeters\tAltitude above sea level of the 0°C level\nvisibility\tInstant\tmeters\tViewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km.\n\nYour task is to construct a full API JSON object based on the provided input. The input could be a question that requires an API call for its answer, or a direct or indirect instruction to consume an API. The input will be unpredictable and could come from a user or an agent.\n\nYour goal is to create an API call that accurately reflects the intent of the input. Be sure to exclude any unnecessary data in the API call to ensure efficiency.\n\nInput: What is the weather like right now in Munich, Germany in degrees Fahrenheit?\n\nRespond with a JSON object.\n\n{\n \"method\": [the HTTP method for the API call, such as GET or POST],\n \"headers\": [object representing the HTTP headers required for the API call, always add a \"Content-Type\" header],\n \"url\": \t [full for the API call],\n \"body\": [object containing the data sent with the request, if needed]\n}"}],"temperature":0}HTTP/2.0 200 OK +Content-Length: 1100 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:05:28 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1081 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149998930 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_af536f68c06d4cdfa17400ab829e1cc3 + +{ + "id": "chatcmpl-ERF4xWQ54eVWmLLRB8Wxo5YgXBTfD", + "object": "chat.completion", + "created": 1790161527, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "{\n \"method\": \"GET\",\n \"headers\": {\n \"Content-Type\": \"application/json\"\n },\n \"url\": \"https://api.open-meteo.com/v1/forecast?latitude=48.1351&longitude=11.5820¤t_weather=true&temperature_unit=fahrenheit&timezone=Europe/Berlin\",\n \"body\": {}\n}", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 962, + "completion_tokens": 79, + "total_tokens": 1041, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_6afed20c8d" +} +253 649 +GET https://api.open-meteo.com/v1/forecast?current_weather=true&latitude=48.1351&longitude=11.5820&temperature_unit=fahrenheit&timezone=Europe%2FBerlin HTTP/1.1 +Host: api.open-meteo.com +User-Agent: langchaingo-httprr +Content-Type: application/json + +HTTP/1.1 200 OK +Transfer-Encoding: chunked +Connection: keep-alive +Content-Type: application/json; charset=utf-8 +Date: Wed, 23 Sep 2026 11:05:29 GMT + +1e2 +{"latitude":48.14,"longitude":11.58,"generationtime_ms":0.11146068572998047,"utc_offset_seconds":7200,"timezone":"Europe/Berlin","timezone_abbreviation":"GMT+2","elevation":521.0,"current_weather_units":{"time":"iso8601","interval":"seconds","temperature":"°F","windspeed":"km/h","winddirection":"°","is_day":"","weathercode":"wmo code"},"current_weather":{"time":"2026-09-23T13:00","interval":900,"temperature":61.6,"windspeed":6.9,"winddirection":84,"is_day":1,"weathercode":0}} +0 + +5528 2058 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 5325 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"You are given the API Documentation:\n\nBASE URL: https://api.open-meteo.com/\n\nAPI Documentation\nThe API endpoint /v1/forecast accepts a geographical coordinate, a list of weather variables and responds with a JSON hourly weather forecast for 7 days. Time always starts at 0:00 today and contains 168 hours. All URL parameters are listed below:\n\nParameter\tFormat\tRequired\tDefault\tDescription\nlatitude, longitude\tFloating point\tYes\t\tGeographical WGS84 coordinate of the location\nhourly\tString array\tNo\t\tA list of weather variables which should be returned. Values can be comma separated, or multiple \u0026hourly= parameter in the URL can be used.\ndaily\tString array\tNo\t\tA list of daily weather variable aggregations which should be returned. Values can be comma separated, or multiple \u0026daily= parameter in the URL can be used. If daily weather variables are specified, parameter timezone is required.\ncurrent_weather\tBool\tNo\tfalse\tInclude current weather conditions in the JSON output.\ntemperature_unit\tString\tNo\tcelsius\tIf fahrenheit is set, all temperature values are converted to Fahrenheit.\nwindspeed_unit\tString\tNo\tkmh\tOther wind speed speed units: ms, mph and kn\nprecipitation_unit\tString\tNo\tmm\tOther precipitation amount units: inch\ntimeformat\tString\tNo\tiso8601\tIf format unixtime is selected, all time values are returned in UNIX epoch time in seconds. Please note that all timestamp are in GMT+0! For daily values with unix timestamps, please apply utc_offset_seconds again to get the correct date.\ntimezone\tString\tNo\tGMT\tIf timezone is set, all timestamps are returned as local-time and data is returned starting at 00:00 local-time. Any time zone name from the time zone database is supported. If auto is set as a time zone, the coordinates will be automatically resolved to the local time zone.\npast_days\tInteger (0-2)\tNo\t0\tIf past_days is set, yesterday or the day before yesterday data are also returned.\nstart_date\nend_date\tString (yyyy-mm-dd)\tNo\t\tThe time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-06-30).\nmodels\tString array\tNo\tauto\tManually select one or more weather models. Per default, the best suitable weather models will be combined.\n\nHourly Parameter Definition\nThe parameter \u0026hourly= accepts the following values. Most weather variables are given as an instantaneous value for the indicated hour. Some variables like precipitation are calculated from the preceding hour as an average or sum.\n\nVariable\tValid time\tUnit\tDescription\ntemperature_2m\tInstant\t°C (°F)\tAir temperature at 2 meters above ground\nsnowfall\tPreceding hour sum\tcm (inch)\tSnowfall amount of the preceding hour in centimeters. For the water equivalent in millimeter, divide by 7. E.g. 7 cm snow = 10 mm precipitation water equivalent\nrain\tPreceding hour sum\tmm (inch)\tRain from large scale weather systems of the preceding hour in millimeter\nshowers\tPreceding hour sum\tmm (inch)\tShowers from convective precipitation in millimeters from the preceding hour\nweathercode\tInstant\tWMO code\tWeather condition as a numeric code. Follow WMO weather interpretation codes. See table below for details.\nsnow_depth\tInstant\tmeters\tSnow depth on the ground\nfreezinglevel_height\tInstant\tmeters\tAltitude above sea level of the 0°C level\nvisibility\tInstant\tmeters\tViewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km.\n\nYour task is to construct a full API JSON object based on the provided input. The input could be a question that requires an API call for its answer, or a direct or indirect instruction to consume an API. The input will be unpredictable and could come from a user or an agent.\n\nYour goal is to create an API call that accurately reflects the intent of the input. Be sure to exclude any unnecessary data in the API call to ensure efficiency.\n\nInput: What is the weather like right now in Munich, Germany in degrees Fahrenheit?\n\nRespond with a JSON object.\n\n{\n \"method\": [the HTTP method for the API call, such as GET or POST],\n \"headers\": [object representing the HTTP headers required for the API call, always add a \"Content-Type\" header],\n \"url\": \t [full for the API call],\n \"body\": [object containing the data sent with the request, if needed]\n}\nHere is the response from the API:\n\n{\"latitude\":48.14,\"longitude\":11.58,\"generationtime_ms\":0.11146068572998047,\"utc_offset_seconds\":7200,\"timezone\":\"Europe/Berlin\",\"timezone_abbreviation\":\"GMT+2\",\"elevation\":521.0,\"current_weather_units\":{\"time\":\"iso8601\",\"interval\":\"seconds\",\"temperature\":\"°F\",\"windspeed\":\"km/h\",\"winddirection\":\"°\",\"is_day\":\"\",\"weathercode\":\"wmo code\"},\"current_weather\":{\"time\":\"2026-09-23T13:00\",\"interval\":900,\"temperature\":61.6,\"windspeed\":6.9,\"winddirection\":84,\"is_day\":1,\"weathercode\":0}}\n\nNow, summarize this response. Your summary should reflect the original input and highlight the key information from the API response that answers or relates to that input. Try to make your summary concise, yet informative.\n\nSummary:"}],"temperature":0}HTTP/2.0 200 OK +Content-Length: 1231 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:05:32 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1328 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149998742 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_d44f4f1fafaf4fd79c5b0144fd33f127 + +{ + "id": "chatcmpl-ERF51eps02jHnu4GKFD9xYaWzuVFe", + "object": "chat.completion", + "created": 1790161531, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "{\n \"method\": \"GET\",\n \"headers\": {\n \"Content-Type\": \"application/json\"\n },\n \"url\": \"https://api.open-meteo.com/v1/forecast?latitude=48.14&longitude=11.58¤t_weather=true&temperature_unit=fahrenheit&timezone=Europe/Berlin\",\n \"body\": null\n}\n\nSummary: The current weather in Munich, Germany, is approximately 62°F with a windspeed of about 7 km/h, based on the latest available data.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 1156, + "completion_tokens": 111, + "total_tokens": 1267, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_6afed20c8d" +} diff --git a/chains/testdata/TestConversationalRetrievalQA.httprr b/chains/testdata/TestConversationalRetrievalQA.httprr new file mode 100644 index 000000000..cb4d81633 --- /dev/null +++ b/chains/testdata/TestConversationalRetrievalQA.httprr @@ -0,0 +1,208 @@ +httprr trace v1 +4468 1896 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4265 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \n\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \n\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \n\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \n\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \n\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAnd for our LGBTQ+ Americans, let's finally get the bipartisan Equality Act to my desk. The onslaught of state laws targeting transgender Americans and their families is wrong. \n\nAs I said last year, especially to our younger transgender Americans, I will always have your back as your President, so you can be yourself and reach your God-given potential. \n\nWhile it often appears that we never agree, that isn't true. I signed 80 bipartisan bills into law last year. From preventing government shutdowns to protecting Asian-Americans from still-too-common hate crimes to reforming military justice. \n\nAnd soon, we'll strengthen the Violence Against Women Act that I first wrote three decades ago. It is important for us to show the nation that we can come together and do big things. \n\nSo tonight I'm offering a Unity Agenda for the Nation. Four big things we can do together. \n\nFirst, beat the opioid epidemic.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight, I'm announcing a crackdown on these companies overcharging American businesses and consumers. \n\nAnd as Wall Street firms take over more nursing homes, quality in those homes has gone down and costs have gone up. \n\nThat ends on my watch. \n\nMedicare is going to set higher standards for nursing homes and make sure your loved ones get the care they deserve and expect. \n\nWe'll also cut costs and keep the economy going strong by giving workers a fair shot, provide more training and apprenticeships, hire them based on their skills not degrees. \n\nLet's pass the Paycheck Fairness Act and paid leave. \n\nRaise the minimum wage to $15 an hour and extend the Child Tax Credit, so no one has to raise a family in poverty. \n\nLet's increase Pell Grants and increase our historic support of HBCUs, and invest in what Jill—our First Lady who teaches full-time—calls America's best-kept secret: community colleges.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What did the president say about Ketanji Brown Jackson\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1070 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:03 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 652 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999005 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_60c2980393df46958fde37bbb0ebb72a + +{ + "id": "chatcmpl-ERFGAW4G7Q1gs8Tr2DhJyf0cJz0vt", + "object": "chat.completion", + "created": 1790162222, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Stephen Breyer's legacy of excellence.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 804, + "completion_tokens": 49, + "total_tokens": 853, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} +832 1737 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 630 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\nHuman: What did the president say about Ketanji Brown Jackson\nAI: The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Stephen Breyer's legacy of excellence.\nFollow Up Input: Did he mention who she succeeded\nStandalone question:"}]}HTTP/2.0 200 OK +Content-Length: 912 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:05 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 488 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999857 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_f0672638e6494302b576109dffbe38c9 + +{ + "id": "chatcmpl-ERFGCiwWsQK0X3eSbthYBIOTLSmlS", + "object": "chat.completion", + "created": 1790162224, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Did the president mention whom Ketanji Brown Jackson is succeeding on the United States Supreme Court?", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 116, + "completion_tokens": 19, + "total_tokens": 135, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_6050bec882" +} +4664 1763 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4461 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \\n\\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \\n\\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \\n\\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \\n\\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \\n\\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eMadam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. \n\nLast year COVID-19 kept us apart. This year we are finally together again. \n\nTonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. \n\nWith a duty to one another to the American people to the Constitution. \n\nAnd with an unwavering resolve that freedom will always triumph over tyranny. \n\nSix days ago, Russia's Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. \n\nHe thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. \n\nHe met the Ukrainian people. \n\nFrom President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAs Ohio Senator Sherrod Brown says, 'It's time to bury the label 'Rust Belt.' \\n\\nIt's time. \\n\\nBut with all the bright spots in our economy, record job growth and higher wages, too many families are struggling to keep up with the bills. \\n\\nInflation is robbing them of the gains they might otherwise feel. \\n\\nI get it. That's why my top priority is getting prices under control. \\n\\nLook, our economy roared back faster than most predicted, but the pandemic meant that businesses had a hard time hiring enough workers to keep up production in their factories. \\n\\nThe pandemic also disrupted global supply chains. \\n\\nWhen factories close, it takes longer to make goods and get them from the warehouse to the store, and prices go up. \\n\\nLook at cars. \\n\\nLast year, there weren't enough semiconductors to make all the cars that people wanted to buy. \\n\\nAnd guess what, prices of automobiles went up. \\n\\nSo—we have a choice. \\n\\nOne way to fight inflation is to drive down wages and make Americans poorer.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: Did the president mention whom Ketanji Brown Jackson is succeeding on the United States Supreme Court?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 938 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:06 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 458 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149998960 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_182d1584c70f4533a15ed4195809a87b + +{ + "id": "chatcmpl-ERFGE036zohAYSu3ITn0goSMM030m", + "object": "chat.completion", + "created": 1790162226, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Yes, the president mentioned that Ketanji Brown Jackson is succeeding Justice Stephen Breyer on the United States Supreme Court.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 883, + "completion_tokens": 24, + "total_tokens": 907, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} diff --git a/chains/testdata/TestConversationalRetrievalQAFromLLM.httprr b/chains/testdata/TestConversationalRetrievalQAFromLLM.httprr new file mode 100644 index 000000000..73213a94a --- /dev/null +++ b/chains/testdata/TestConversationalRetrievalQAFromLLM.httprr @@ -0,0 +1,208 @@ +httprr trace v1 +4468 1888 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4265 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \n\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \n\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \n\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \n\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \n\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAnd for our LGBTQ+ Americans, let's finally get the bipartisan Equality Act to my desk. The onslaught of state laws targeting transgender Americans and their families is wrong. \n\nAs I said last year, especially to our younger transgender Americans, I will always have your back as your President, so you can be yourself and reach your God-given potential. \n\nWhile it often appears that we never agree, that isn't true. I signed 80 bipartisan bills into law last year. From preventing government shutdowns to protecting Asian-Americans from still-too-common hate crimes to reforming military justice. \n\nAnd soon, we'll strengthen the Violence Against Women Act that I first wrote three decades ago. It is important for us to show the nation that we can come together and do big things. \n\nSo tonight I'm offering a Unity Agenda for the Nation. Four big things we can do together. \n\nFirst, beat the opioid epidemic.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight, I'm announcing a crackdown on these companies overcharging American businesses and consumers. \n\nAnd as Wall Street firms take over more nursing homes, quality in those homes has gone down and costs have gone up. \n\nThat ends on my watch. \n\nMedicare is going to set higher standards for nursing homes and make sure your loved ones get the care they deserve and expect. \n\nWe'll also cut costs and keep the economy going strong by giving workers a fair shot, provide more training and apprenticeships, hire them based on their skills not degrees. \n\nLet's pass the Paycheck Fairness Act and paid leave. \n\nRaise the minimum wage to $15 an hour and extend the Child Tax Credit, so no one has to raise a family in poverty. \n\nLet's increase Pell Grants and increase our historic support of HBCUs, and invest in what Jill—our First Lady who teaches full-time—calls America's best-kept secret: community colleges.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What did the president say about Ketanji Brown Jackson\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1062 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:14 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 704 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999005 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_c2ec61af4d4144ad81cc16a3d9ade68f + +{ + "id": "chatcmpl-ERFGLJlI46GmoQk9W3Xb8ttfksDK1", + "object": "chat.completion", + "created": 1790162233, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Breyer's legacy of excellence.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 804, + "completion_tokens": 48, + "total_tokens": 852, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} +824 1698 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 622 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\nHuman: What did the president say about Ketanji Brown Jackson\nAI: The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Breyer's legacy of excellence.\nFollow Up Input: Did he mention who she succeeded\nStandalone question:"}]}HTTP/2.0 200 OK +Content-Length: 873 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:16 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 422 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999860 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_41a44ba0ffb149289062aa0c08970102 + +{ + "id": "chatcmpl-ERFGNyj5bffZuwxCJvj48dFNz6zhk", + "object": "chat.completion", + "created": 1790162235, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Did the president mention whom Ketanji Brown Jackson succeeded?", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 115, + "completion_tokens": 12, + "total_tokens": 127, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} +4625 1785 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4422 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \\n\\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \\n\\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \\n\\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \\n\\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \\n\\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eMadam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. \n\nLast year COVID-19 kept us apart. This year we are finally together again. \n\nTonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. \n\nWith a duty to one another to the American people to the Constitution. \n\nAnd with an unwavering resolve that freedom will always triumph over tyranny. \n\nSix days ago, Russia's Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. \n\nHe thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. \n\nHe met the Ukrainian people. \n\nFrom President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAs Ohio Senator Sherrod Brown says, 'It's time to bury the label 'Rust Belt.' \\n\\nIt's time. \\n\\nBut with all the bright spots in our economy, record job growth and higher wages, too many families are struggling to keep up with the bills. \\n\\nInflation is robbing them of the gains they might otherwise feel. \\n\\nI get it. That's why my top priority is getting prices under control. \\n\\nLook, our economy roared back faster than most predicted, but the pandemic meant that businesses had a hard time hiring enough workers to keep up production in their factories. \\n\\nThe pandemic also disrupted global supply chains. \\n\\nWhen factories close, it takes longer to make goods and get them from the warehouse to the store, and prices go up. \\n\\nLook at cars. \\n\\nLast year, there weren't enough semiconductors to make all the cars that people wanted to buy. \\n\\nAnd guess what, prices of automobiles went up. \\n\\nSo—we have a choice. \\n\\nOne way to fight inflation is to drive down wages and make Americans poorer.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: Did the president mention whom Ketanji Brown Jackson succeeded?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 960 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:18 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 595 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149998972 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_4b13be1bc20c48a7aa59c6d7d60c41ec + +{ + "id": "chatcmpl-ERFGPznmAzlAYWkwvkyg2vQwnq7g2", + "object": "chat.completion", + "created": 1790162237, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Yes, the president mentioned that Ketanji Brown Jackson will continue Justice Stephen Breyer's legacy, implying that she is succeeding Justice Breyer.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 876, + "completion_tokens": 29, + "total_tokens": 905, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} diff --git a/chains/testdata/TestConversationalRetrievalQAFromLLMWithConversationTokenBuffer.httprr b/chains/testdata/TestConversationalRetrievalQAFromLLMWithConversationTokenBuffer.httprr new file mode 100644 index 000000000..333b4449a --- /dev/null +++ b/chains/testdata/TestConversationalRetrievalQAFromLLMWithConversationTokenBuffer.httprr @@ -0,0 +1,208 @@ +httprr trace v1 +4468 1896 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4265 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \n\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \n\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \n\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \n\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \n\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAnd for our LGBTQ+ Americans, let's finally get the bipartisan Equality Act to my desk. The onslaught of state laws targeting transgender Americans and their families is wrong. \n\nAs I said last year, especially to our younger transgender Americans, I will always have your back as your President, so you can be yourself and reach your God-given potential. \n\nWhile it often appears that we never agree, that isn't true. I signed 80 bipartisan bills into law last year. From preventing government shutdowns to protecting Asian-Americans from still-too-common hate crimes to reforming military justice. \n\nAnd soon, we'll strengthen the Violence Against Women Act that I first wrote three decades ago. It is important for us to show the nation that we can come together and do big things. \n\nSo tonight I'm offering a Unity Agenda for the Nation. Four big things we can do together. \n\nFirst, beat the opioid epidemic.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight, I'm announcing a crackdown on these companies overcharging American businesses and consumers. \n\nAnd as Wall Street firms take over more nursing homes, quality in those homes has gone down and costs have gone up. \n\nThat ends on my watch. \n\nMedicare is going to set higher standards for nursing homes and make sure your loved ones get the care they deserve and expect. \n\nWe'll also cut costs and keep the economy going strong by giving workers a fair shot, provide more training and apprenticeships, hire them based on their skills not degrees. \n\nLet's pass the Paycheck Fairness Act and paid leave. \n\nRaise the minimum wage to $15 an hour and extend the Child Tax Credit, so no one has to raise a family in poverty. \n\nLet's increase Pell Grants and increase our historic support of HBCUs, and invest in what Jill—our First Lady who teaches full-time—calls America's best-kept secret: community colleges.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What did the president say about Ketanji Brown Jackson\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1070 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:20 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 777 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999005 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_8987b4ac34044a79be2412a50a29820d + +{ + "id": "chatcmpl-ERFGR7I1y3kdPloh1drNMoLtuGpTi", + "object": "chat.completion", + "created": 1790162239, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Stephen Breyer's legacy of excellence.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 804, + "completion_tokens": 49, + "total_tokens": 853, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} +832 1736 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 630 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\nHuman: What did the president say about Ketanji Brown Jackson\nAI: The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Stephen Breyer's legacy of excellence.\nFollow Up Input: Did he mention who she succeeded\nStandalone question:"}]}HTTP/2.0 200 OK +Content-Length: 911 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:21 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 533 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999857 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_ec70b50ffc6144e08e0135c9b3dd7bf4 + +{ + "id": "chatcmpl-ERFGTVZreaNDjTYJUpn5S7aVMGPnL", + "object": "chat.completion", + "created": 1790162241, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Did the president mention whom Ketanji Brown Jackson will succeed on the United States Supreme Court?", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 116, + "completion_tokens": 19, + "total_tokens": 135, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_6050bec882" +} +4663 1821 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4460 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \\n\\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \\n\\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \\n\\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \\n\\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \\n\\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eMadam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. \n\nLast year COVID-19 kept us apart. This year we are finally together again. \n\nTonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. \n\nWith a duty to one another to the American people to the Constitution. \n\nAnd with an unwavering resolve that freedom will always triumph over tyranny. \n\nSix days ago, Russia's Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. \n\nHe thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. \n\nHe met the Ukrainian people. \n\nFrom President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAs Ohio Senator Sherrod Brown says, 'It's time to bury the label 'Rust Belt.' \\n\\nIt's time. \\n\\nBut with all the bright spots in our economy, record job growth and higher wages, too many families are struggling to keep up with the bills. \\n\\nInflation is robbing them of the gains they might otherwise feel. \\n\\nI get it. That's why my top priority is getting prices under control. \\n\\nLook, our economy roared back faster than most predicted, but the pandemic meant that businesses had a hard time hiring enough workers to keep up production in their factories. \\n\\nThe pandemic also disrupted global supply chains. \\n\\nWhen factories close, it takes longer to make goods and get them from the warehouse to the store, and prices go up. \\n\\nLook at cars. \\n\\nLast year, there weren't enough semiconductors to make all the cars that people wanted to buy. \\n\\nAnd guess what, prices of automobiles went up. \\n\\nSo—we have a choice. \\n\\nOne way to fight inflation is to drive down wages and make Americans poorer.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: Did the president mention whom Ketanji Brown Jackson will succeed on the United States Supreme Court?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 996 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:23 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 531 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149998960 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_df9f452ab2dc47cfa9f6d9dcd72a9e60 + +{ + "id": "chatcmpl-ERFGVsGFLhTUnoGkBwWona1l33FDb", + "object": "chat.completion", + "created": 1790162243, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Yes, the president mentioned that Ketanji Brown Jackson will continue Justice Stephen Breyer's legacy, indicating that she will succeed Justice Breyer on the United States Supreme Court.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 883, + "completion_tokens": 35, + "total_tokens": 918, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} diff --git a/chains/testdata/TestConversationalRetrievalQAWithReturnMessages.httprr b/chains/testdata/TestConversationalRetrievalQAWithReturnMessages.httprr new file mode 100644 index 000000000..6812aa537 --- /dev/null +++ b/chains/testdata/TestConversationalRetrievalQAWithReturnMessages.httprr @@ -0,0 +1,208 @@ +httprr trace v1 +4468 1896 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4265 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \n\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \n\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \n\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \n\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \n\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAnd for our LGBTQ+ Americans, let's finally get the bipartisan Equality Act to my desk. The onslaught of state laws targeting transgender Americans and their families is wrong. \n\nAs I said last year, especially to our younger transgender Americans, I will always have your back as your President, so you can be yourself and reach your God-given potential. \n\nWhile it often appears that we never agree, that isn't true. I signed 80 bipartisan bills into law last year. From preventing government shutdowns to protecting Asian-Americans from still-too-common hate crimes to reforming military justice. \n\nAnd soon, we'll strengthen the Violence Against Women Act that I first wrote three decades ago. It is important for us to show the nation that we can come together and do big things. \n\nSo tonight I'm offering a Unity Agenda for the Nation. Four big things we can do together. \n\nFirst, beat the opioid epidemic.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight, I'm announcing a crackdown on these companies overcharging American businesses and consumers. \n\nAnd as Wall Street firms take over more nursing homes, quality in those homes has gone down and costs have gone up. \n\nThat ends on my watch. \n\nMedicare is going to set higher standards for nursing homes and make sure your loved ones get the care they deserve and expect. \n\nWe'll also cut costs and keep the economy going strong by giving workers a fair shot, provide more training and apprenticeships, hire them based on their skills not degrees. \n\nLet's pass the Paycheck Fairness Act and paid leave. \n\nRaise the minimum wage to $15 an hour and extend the Child Tax Credit, so no one has to raise a family in poverty. \n\nLet's increase Pell Grants and increase our historic support of HBCUs, and invest in what Jill—our First Lady who teaches full-time—calls America's best-kept secret: community colleges.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What did the president say about Ketanji Brown Jackson\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1070 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:08 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 812 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999005 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_0a8ef0c5928f41798dea92cfedf9cba5 + +{ + "id": "chatcmpl-ERFGGpypiCyHD2XZGVy3oOJR9Koib", + "object": "chat.completion", + "created": 1790162228, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Stephen Breyer's legacy of excellence.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 804, + "completion_tokens": 49, + "total_tokens": 853, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} +832 1732 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 630 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\nHuman: What did the president say about Ketanji Brown Jackson\nAI: The president said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to the United States Supreme Court four days ago. He described her as one of the nation's top legal minds who will continue Justice Stephen Breyer's legacy of excellence.\nFollow Up Input: Did he mention who she succeeded\nStandalone question:"}]}HTTP/2.0 200 OK +Content-Length: 907 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:10 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 570 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999857 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_c798e331ad5e4a6c8a96ce91303309d4 + +{ + "id": "chatcmpl-ERFGIPoQCmNdRhec83DMw7HIab0EY", + "object": "chat.completion", + "created": 1790162230, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Did the president mention who Ketanji Brown Jackson succeeded on the United States Supreme Court?", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 116, + "completion_tokens": 18, + "total_tokens": 134, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_6050bec882" +} +4659 1822 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 4456 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eTonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you're at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I'd like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation's top legal minds, who will continue Justice Breyer's legacy of excellence.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eA former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she's been nominated, she's received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \\n\\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \\n\\nWe can do both. At our border, we've installed new technology like cutting-edge scanners to better detect drug smuggling. \\n\\nWe've set up joint patrols with Mexico and Guatemala to catch more human traffickers. \\n\\nWe're putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \\n\\nWe're securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eMadam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. \n\nLast year COVID-19 kept us apart. This year we are finally together again. \n\nTonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. \n\nWith a duty to one another to the American people to the Constitution. \n\nAnd with an unwavering resolve that freedom will always triumph over tyranny. \n\nSix days ago, Russia's Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. \n\nHe thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. \n\nHe met the Ukrainian people. \n\nFrom President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eAs Ohio Senator Sherrod Brown says, 'It's time to bury the label 'Rust Belt.' \\n\\nIt's time. \\n\\nBut with all the bright spots in our economy, record job growth and higher wages, too many families are struggling to keep up with the bills. \\n\\nInflation is robbing them of the gains they might otherwise feel. \\n\\nI get it. That's why my top priority is getting prices under control. \\n\\nLook, our economy roared back faster than most predicted, but the pandemic meant that businesses had a hard time hiring enough workers to keep up production in their factories. \\n\\nThe pandemic also disrupted global supply chains. \\n\\nWhen factories close, it takes longer to make goods and get them from the warehouse to the store, and prices go up. \\n\\nLook at cars. \\n\\nLast year, there weren't enough semiconductors to make all the cars that people wanted to buy. \\n\\nAnd guess what, prices of automobiles went up. \\n\\nSo—we have a choice. \\n\\nOne way to fight inflation is to drive down wages and make Americans poorer.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: Did the president mention who Ketanji Brown Jackson succeeded on the United States Supreme Court?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 997 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:17:12 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 634 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149998962 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_10020c391adf4774a988a32b2b21c51e + +{ + "id": "chatcmpl-ERFGKy5e866ZXjFCgp4QY2VqGSXXk", + "object": "chat.completion", + "created": 1790162232, + "model": "gpt-4.1-mini-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Yes, the president mentioned that Ketanji Brown Jackson will continue Justice Stephen Breyer's legacy, indicating that she is succeeding Justice Breyer on the United States Supreme Court.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 882, + "completion_tokens": 35, + "total_tokens": 917, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_46ce4fdcea" +} diff --git a/chains/testdata/TestLLMChainWithGoogleAI.httprr b/chains/testdata/TestLLMChainWithGoogleAI.httprr index 856aeed02..c89c0f1ca 100644 --- a/chains/testdata/TestLLMChainWithGoogleAI.httprr +++ b/chains/testdata/TestLLMChainWithGoogleAI.httprr @@ -1,25 +1,26 @@ httprr trace v1 -814 1541 -POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=test-api-key HTTP/1.1 +759 1016 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent HTTP/1.1 Host: generativelanguage.googleapis.com User-Agent: langchaingo-httprr -Content-Length: 477 +Content-Length: 439 Content-Type: application/json X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X X-Goog-Api-Key: test-api-key -{"contents":[{"parts":[{"text":"What is the capital of France"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":2048,"temperature":0.5,"topK":3,"topP":0.95},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK -Content-Length: 1162 +{"contents":[{"parts":[{"text":"What is the capital of France"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 605 Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Content-Type: application/json; charset=UTF-8 -Date: Thu, 22 Jan 2026 21:11:14 GMT +Date: Wed, 23 Sep 2026 09:29:43 GMT Server: scaffolding on HTTPServer2 -Server-Timing: gfet4t7; dur=415 +Server-Timing: gfet4t7; dur=465 Vary: Origin Vary: X-Origin Vary: Referer X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard X-Xss-Protection: 0 { @@ -28,50 +29,28 @@ X-Xss-Protection: 0 "content": { "parts": [ { - "text": "The capital of France is **Paris**.\n" + "text": "The capital of France is **Paris**." } ], "role": "model" }, "finishReason": "STOP", - "safetyRatings": [ - { - "category": "HARM_CATEGORY_HATE_SPEECH", - "probability": "NEGLIGIBLE" - }, - { - "category": "HARM_CATEGORY_DANGEROUS_CONTENT", - "probability": "NEGLIGIBLE" - }, - { - "category": "HARM_CATEGORY_HARASSMENT", - "probability": "NEGLIGIBLE" - }, - { - "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", - "probability": "NEGLIGIBLE" - } - ], - "avgLogprobs": -0.0259782075881958 + "index": 0 } ], "usageMetadata": { - "promptTokenCount": 6, - "candidatesTokenCount": 9, - "totalTokenCount": 15, + "promptTokenCount": 7, + "candidatesTokenCount": 8, + "totalTokenCount": 33, "promptTokensDetails": [ { "modality": "TEXT", - "tokenCount": 6 + "tokenCount": 7 } ], - "candidatesTokensDetails": [ - { - "modality": "TEXT", - "tokenCount": 9 - } - ] + "thoughtsTokenCount": 18, + "serviceTier": "standard" }, - "modelVersion": "gemini-2.0-flash", - "responseId": "cZJyaabxNM_QjMcPl_6ZyA8" + "modelVersion": "gemini-2.5-flash", + "responseId": "B5yzarrPJKOrxN8PhPm14AI" } diff --git a/chains/testdata/TestMapRerankQA.httprr b/chains/testdata/TestMapRerankQA.httprr new file mode 100644 index 000000000..21a20806e --- /dev/null +++ b/chains/testdata/TestMapRerankQA.httprr @@ -0,0 +1,898 @@ +httprr trace v1 +1901 1679 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1698 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nOnce upon a time, in a charming little village nestled deep within the enchanted forest, lived a small mouse named Oliver. Oliver was unlike the other mice in the village. While they scurried and chattered happily amongst themselves, Oliver felt a longing for something more, a yearning for adventure and new friendships beyond the familiar mouse tunnels.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 854 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:40:56 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 639 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999600 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_43aca7b35a1848bdbfb1dc3857daa92d + +{ + "id": "chatcmpl-ERFdH0noyQq0chdVIDIx3AYvFNgXt", + "object": "chat.completion", + "created": 1790163655, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I don't know the name of the lion.\nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 362, + "completion_tokens": 13, + "total_tokens": 375, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1881 1736 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1678 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nOne sunny morning, as the golden rays of the sun danced through the treetops, Oliver decided it was time to embark on a grand journey to find new friends who shared his thirst for excitement. With a determined gleam in his eye, he packed a tiny satchel filled with cheese, a sturdy walking stick, and bid farewell to his mouse friends.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 911 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:40:58 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 657 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999605 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_70eea1acacce48c8bda17f4afa866865 + +{ + "id": "chatcmpl-ERFdJ3pgKasGiRMesrtQwfA4bWjwR", + "object": "chat.completion", + "created": 1790163657, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Helpful Answer: The context does not mention a lion, so I do not know the name of any lion.\nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 367, + "completion_tokens": 26, + "total_tokens": 393, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1878 1659 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1675 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nVenturing deeper into the forest, Oliver's heart raced with anticipation. His tiny paws crunched on fallen leaves as he journeyed through the dense undergrowth, marveling at the vibrant flora and listening to the whimsical songs of birds. It was then that he stumbled upon a clearing where a small pond shimmered under the sunlight.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 834 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:00 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 423 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999605 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_3a039dd41b48470f943b59592f5ddeed + +{ + "id": "chatcmpl-ERFdLYkQ0N5CbSHpjbtkhSTXMJOyu", + "object": "chat.completion", + "created": 1790163659, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I don't know. \nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 361, + "completion_tokens": 9, + "total_tokens": 370, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1980 1693 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1777 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nAs Oliver approached the pond, he noticed a majestic lion drinking from the water's edge. The lion, named Leo, had a regal presence and a gentle smile. Oliver's heart fluttered with excitement at the thought of making friends with such a magnificent creature.\n\n\"Hello there, noble lion! My name is Oliver, and I'm on a quest to find new friends. Might you be interested in joining me?\" Oliver squeaked, his voice filled with hope.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 868 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:02 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 841 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999580 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_5e28a5e566744e5087487c1ba82dc42e + +{ + "id": "chatcmpl-ERFdN198uwfynrQotpmYENrKebCSq", + "object": "chat.completion", + "created": 1790163661, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Helpful Answer: The name of the lion is Leo. \nScore: 100", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 387, + "completion_tokens": 16, + "total_tokens": 403, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1816 1677 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1613 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nLeo raised his magnificent head, his golden eyes sparkling with curiosity. \"Greetings, Oliver! I must admit, I've never met a mouse with such courage. I would be honored to accompany you on your noble quest. Together, we shall forge an unbreakable bond of friendship!\"\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 852 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:04 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 752 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999622 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_6c15cc6b52cf4994b7921021597f3816 + +{ + "id": "chatcmpl-ERFdQO87SvZTnXn6FAX8UbBuO57T6", + "object": "chat.completion", + "created": 1790163664, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The name of the lion is Leo. \nScore: 100", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 351, + "completion_tokens": 13, + "total_tokens": 364, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1848 1659 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1645 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nWith Leo by his side, Oliver's adventure took on a new dimension. The unlikely duo traversed verdant meadows, climbed towering trees, and braved treacherous rivers. Along their journey, they encountered a whimsical frog named Freddie, who was a skilled hopper and an expert in finding hidden treasures.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 834 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:06 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 555 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999612 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_f153ad4d61224e5696b902ce070ac09e + +{ + "id": "chatcmpl-ERFdS3srivkMsUfFJVvRFzG5whU20", + "object": "chat.completion", + "created": 1790163666, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I don't know. \nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 357, + "completion_tokens": 9, + "total_tokens": 366, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +2061 1759 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1858 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nFreddie, with his emerald-green skin and mischievous grin, eagerly joined their quest. \"Ribbit! Oliver, my dear fellow, it seems that fate has brought us together. Allow me to lend my amphibious skills to our merry group. Together, we shall make quite the team!\"\n\nWith Oliver, Leo, and Freddie united, their bond grew stronger with each passing day. They shared laughter, sang songs, and told tales around the campfire. Oliver had finally found the true meaning of friendship, and his heart was filled with joy.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 934 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:08 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 718 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999560 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_d180e83734a543d5b04c16df63827e06 + +{ + "id": "chatcmpl-ERFdUErWMfog6TH72CKxskUM85k4b", + "object": "chat.completion", + "created": 1790163668, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Question: What is the name of the lion?\nHelpful Answer: The provided context does not mention the name of a lion.\nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 407, + "completion_tokens": 29, + "total_tokens": 436, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +2025 1657 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1822 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nBut their adventure was far from over. As they ventured deeper into the forest, they stumbled upon a towering volcano, spewing molten lava into the sky. From the fiery depths emerged a fearsome lava monster, its fiery eyes glaring with malevolence.\n\nOliver, Leo, and Freddie stood face to face with the menacing creature, their hearts pounding with a mixture of fear and determination. Oliver's quick wit came to the forefront, and he hatched a plan to defeat the lava monster.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 832 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:10 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 565 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999570 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_dd695ef61f6945d08d3bf811953660be + +{ + "id": "chatcmpl-ERFdW96p7RpstWqj2wbnNxJXDep7b", + "object": "chat.completion", + "created": 1790163670, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I don't know.\nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 394, + "completion_tokens": 8, + "total_tokens": 402, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1901 1961 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1698 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\n\"Listen, my friends! We must work together, combining our unique strengths and abilities,\" Oliver declared with conviction. \"Leo, with your strength and courage, distract the monster while Freddie and I search for its vulnerable spot. Freddie, your agility and quick reflexes will guide us through the treacherous terrain. Together, we shall triumph!\"\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1134 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:13 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1481 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999602 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_4f54c2c0a714485f8dc202def7ef7015 + +{ + "id": "chatcmpl-ERFdYgNbHoMvMtyBPbnrVYzTVhJkJ", + "object": "chat.completion", + "created": 1790163672, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I don't know. The text mentions a character named Leo, who is implied to be a lion because of the context (\"Leo\" and the qualities of strength and courage typically associated with a lion,\" but this is an assumption). However, the context does not explicitly state Leo's species or name the lion specifically. \nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 364, + "completion_tokens": 67, + "total_tokens": 431, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +2035 1731 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1832 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nAnd so, the courageous trio battled the lava monster. Leo roared, drawing the monster's attention, while Freddie and Oliver scurried through the maze of fiery rocks, narrowly dodging molten lava. Finally, they discovered the creature's weak spot—a tiny gem embedded in its chest.\n\nWith their combined efforts, they struck the vulnerable spot, causing the monster to crumble and dissolve into a cascade of ash. The forest rejoiced, as the once-threatening presence was banished forever.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 906 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:15 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 633 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999565 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_a6211e3e8cc847c8900ab7ddcf4a85d4 + +{ + "id": "chatcmpl-ERFdaNVchEyeWKgeSI8hfzy3KvqlY", + "object": "chat.completion", + "created": 1790163674, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Question: What is the name of the lion? \nHelpful Answer: The lion's name is Leo. \nScore: 100", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 392, + "completion_tokens": 26, + "total_tokens": 418, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1808 1774 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1605 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nAs Oliver, Leo, and Freddie emerged victorious, the animals of the enchanted forest gathered to celebrate their bravery. The mouse who had set out on a journey to find new friends had not only discovered the true meaning of friendship but had also become a hero.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 949 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:17 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 854 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999622 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_eccb90afe72d4e61bb431541e8cd521e + +{ + "id": "chatcmpl-ERFdcK6wE9r65W1qVKg0QnsWbTFT8", + "object": "chat.completion", + "created": 1790163676, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The context does not mention any lion's name. \nHelpful Answer: The name of the lion is not provided in the given information. \nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 346, + "completion_tokens": 32, + "total_tokens": 378, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1896 1712 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1693 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nFrom that day forward, Oliver, Leo, and Freddie became inseparable companions, sharing their tales of triumph and inspiring others with their courage and kindness. Their adventures continued, and their friendships blossomed, reminding everyone in the enchanted forest that no matter how small or different you may be, true friendship knows no bounds.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 887 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:19 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 560 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999600 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_1826180cfd2e4b00a571af47e9deed20 + +{ + "id": "chatcmpl-ERFdemKQfYAWirQuqtzVfcJcH9Mvx", + "object": "chat.completion", + "created": 1790163678, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I do not know the name of the lion based on the provided context.\n\nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 358, + "completion_tokens": 19, + "total_tokens": 377, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} +1744 1702 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1541 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\nIn addition to giving an answer, also return a score of how fully it answered the user's question. This should be in the following format:\nQuestion: [question here]\nHelpful Answer: [answer here]\nScore: [score between 0 and 100]\nHow to determine the score:\n- Higher is a better answer\n- Better responds fully to the asked question, with sufficient level of detail\n- If you do not know the answer based on the context, that should be a score of 0\n- Don't be overconfident!\nExample #1\nContext:\n---------\nApples are red\n---------\nQuestion: what color are apples?\nHelpful Answer: red\nScore: 100\nExample #2\nContext:\n---------\nit was night and the witness forgot his glasses. he was not sure if it was a sports car or an suv\n---------\nQuestion: what type was the car?\nHelpful Answer: a sports car or an suv\nScore: 60\nExample #3\nContext:\n---------\nPears are either red or orange\n---------\nQuestion: what color are apples?\nHelpful Answer: This document does not answer the question\nScore: 0\nBegin!\nContext:\n---------\nAnd so, Oliver's story, filled with magic, friendship, and bravery, spread far and wide, becoming a timeless legend, whispered by generations of forest dwellers, enchanting both young and old alike.\n---------\nQuestion: What is the name of the lion?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 876 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 11:41:27 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 7136 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999640 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_037b75f792ef452692c88e97f8efe64f + +{ + "id": "chatcmpl-ERFdg7QAv1ECGNvilMFQHOU2lhDHi", + "object": "chat.completion", + "created": 1790163680, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "I don't know the answer based on the provided context. \nScore: 0", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 336, + "completion_tokens": 16, + "total_tokens": 352, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} diff --git a/examples/anthropic-extended-capabilities/README.md b/examples/anthropic-extended-capabilities/README.md index 4d33670c3..33c484e48 100644 --- a/examples/anthropic-extended-capabilities/README.md +++ b/examples/anthropic-extended-capabilities/README.md @@ -26,7 +26,7 @@ go run . // Enable both capabilities together opts := []llms.CallOption{ // Extended thinking for complex reasoning - llms.WithThinkingMode(llms.ThinkingModeHigh), + llms.WithReasoning(llms.ReasoningHigh, 0), // Extended output for up to 128K tokens anthropic.WithExtendedOutput(), diff --git a/examples/anthropic-interleaved-thinking/README.md b/examples/anthropic-interleaved-thinking/README.md index 84ec5b2f9..d1e3c0fcd 100644 --- a/examples/anthropic-interleaved-thinking/README.md +++ b/examples/anthropic-interleaved-thinking/README.md @@ -32,7 +32,7 @@ go run . // Enable interleaved thinking for tool use opts := []llms.CallOption{ // Thinking mode for reasoning - llms.WithThinkingMode(llms.ThinkingModeMedium), + llms.WithReasoning(llms.ReasoningMedium, 0), // Enable interleaved thinking beta feature anthropic.WithInterleavedThinking(), diff --git a/internal/imageutil/download_test.go b/internal/imageutil/download_test.go index c58b5e41b..719cd3b56 100644 --- a/internal/imageutil/download_test.go +++ b/internal/imageutil/download_test.go @@ -2,7 +2,6 @@ package imageutil import ( "net/http" - "os" "path/filepath" "testing" @@ -12,17 +11,16 @@ import ( "github.com/stretchr/testify/require" ) +// requireHttprrRecording replays the test's recording, or records it when +// -httprecord matches its file. The URLs are public, so a recording run needs +// no credentials; without one and without a recording the test skips. func requireHttprrRecording(t *testing.T) *httprr.RecordReplay { t.Helper() - // Check if we have httprr recording - testName := httprr.CleanFileName(t.Name()) - httprrFile := filepath.Join("testdata", testName+".httprr") - httprrGzFile := httprrFile + ".gz" - if _, err := os.Stat(httprrFile); os.IsNotExist(err) { - if _, err := os.Stat(httprrGzFile); os.IsNotExist(err) { - t.Skip("No httprr recording available for external HTTP calls") - } + recording, err := httprr.Recording(filepath.Join("testdata", httprr.CleanFileName(t.Name())+".httprr")) + require.NoError(t, err) + if !recording { + httprr.SkipIfNoCredentialsAndRecordingMissing(t) } rr := httprr.OpenForTest(t, http.DefaultTransport) @@ -42,7 +40,7 @@ func TestDownloadImageData_Integration(t *testing.T) { }() // Test downloading a PNG image - imageType, data, err := DownloadImageData("https://via.placeholder.com/150/FF0000/FFFFFF?text=Test") + imageType, data, err := DownloadImageData("https://placehold.co/150x150/FF0000/FFFFFF.png?text=Test") require.NoError(t, err) require.Equal(t, "png", imageType) require.NotEmpty(t, data) @@ -61,27 +59,17 @@ func TestDownloadImageData_JPEG(t *testing.T) { }() // Test downloading a JPEG image - imageType, data, err := DownloadImageData("https://via.placeholder.com/150.jpg") + imageType, data, err := DownloadImageData("https://placehold.co/150.jpg") require.NoError(t, err) require.Equal(t, "jpeg", imageType) require.NotEmpty(t, data) } func TestDownloadImageData_InvalidURL_Integration(t *testing.T) { - // Setup HTTP record/replay - rr := requireHttprrRecording(t) - defer rr.Close() - - // Replace httputil.DefaultClient with httprr client - oldClient := httputil.DefaultClient - httputil.DefaultClient = rr.Client() - defer func() { - httputil.DefaultClient = oldClient - }() - - // Test with invalid URL + // A URL without a scheme is rejected by the transport before any + // connection is made, so this needs no recording. _, _, err := DownloadImageData("not-a-valid-url") - require.Error(t, err) + require.ErrorContains(t, err, "unsupported protocol scheme") } func TestDownloadImageData_NotFound(t *testing.T) { @@ -96,8 +84,8 @@ func TestDownloadImageData_NotFound(t *testing.T) { httputil.DefaultClient = oldClient }() - // Test with 404 response - imageType, data, err := DownloadImageData("https://httpbin.org/status/404") + // Test with a 404 response that carries an HTML error page + imageType, data, err := DownloadImageData("https://httpbin.org/image/missing") require.NoError(t, err) // The function doesn't check status codes require.NotEqual(t, "png", imageType) // Likely to be "html" or similar require.NotEmpty(t, data) diff --git a/internal/imageutil/testdata/TestDownloadImageData_Integration.httprr b/internal/imageutil/testdata/TestDownloadImageData_Integration.httprr new file mode 100644 index 0000000000000000000000000000000000000000..0b84c2e13fe7095adb4451aa9ca179a2af1ca23a GIT binary patch literal 2709 zcmd5-X;c$g7N*BhB#?Fo0fltjx-msI5+Dc~2}=-yhLA--ERrGwDydLOkVQxfw7B5b z3N$EqrV$qwMNwRlBPa-sGQ$x8Sz8cv2#OmZLYSgGJ>6%1&aZyw+`4t{{l2@rch7rK zTCEyI30f4CLWDRfj!JVP&=^b#&c{nYh{Bv27MZMuF>e$C%N(T$naZHVV?y@!reF(G zv&&Jfl5f;P@mhBQq|p+51%j<)sv{MT^F=gT7U9nU@VH2n#@AVt=p}2#S-k2vKx*BFo8%PIMzE zL3bCX6NQ511f@~X?_sbObP=#ZO2Po~04RstsWgf!^EX^1@C6#A1+_Y?4qvX|kBS8e zYAl^XiBZVd9^r8uP>UHvkc>p2(FsA28f%iqBv7d=3YA5r5_|$MwwD%^V<0londSs| z%GT2bI)4Et5_KkXT@wXSkX$G7RUk?V5s%|RFpH2xL?JbTYQwb%kwuh70xAe5l871| zwnG|CcqDeZS_PsavM7!e5)o@59IJ=OVp5!3D3oM8j{h4Q5FoRmujwjT-kDF@xtEw1(#G z9gslfCyHF@Dknd=FqSTmDxwoT>AoT^62Hr9*Jd?+SG?aE+Gc(tZ7))a`sos3&xF}C08o^g-yfKQmPQnpl%vgUPL9~B7R~{In^n>}R zi^gBT-^$v4IVOZ}$5E=)eEW#fpV>T_SkZJ(|3aT`-`w9d>QXQ($Cb0f{ z{&XsXj-5Znji69TVVw*L(nW9(B{s<#H-Z|4U<8!maY6-%4VxpC;0elP33zO__iyF- z;BhuM6B83W*O$Y`boQ*wpND-nd=>i~Q)X&kiN?gle95eQWs-MlxrxcVr(6zO5Pxc< zOL5*`zoPzaOmEu_qD;T~IdQ>4yQ4sd`7zT2BuU{?ZpRgl8Pu@dw}aR@=U1}>iyQ8G zHRJ)qL%rjAqp>Mp6FKPEo9p)av*^+!S)Ni+mG3&#gbaMU&gc6B65d&R6V&LJJ~x3t zdN>DU+s!wBw@G}|v?g`KLd$_Y<%9))Y1fDG^x&#nCvtM^0`g>2Uc&EAtwXj`Yri{F0rk_fOAyk;lwRncA0pIG+U>V;2dtZCOr6*Tuqb zrlzdzn##dkJ)Bz}PX(8m*YGnvGv=3w7iLFn*zGHRkXrts`q{PG@C7vv_rTT*s}9)# zfP|>*wmDUY^pJqWs%6Ch<=?ovWbUcwbcA_ySP+4G{t_?qU zFRjQDc>ZE=v9PWtx_1XFQ7}0cU{>FG{obC65e7g1w$$fU`{kEIqcL|9RsmrSt!1`J zpZDU^ZZx0H*-^#cQ~$ar<>wnwd=k`$cJ}}=Qd3t;K&G72%c^3Qd z72l?nx2zDh7Pq|Z|3P2tk>bBQl&%VWS0#8d@!{2YL5Zj7GQ~n+UhT8Xt9J8lUpi=2 z)LK$B*F4qz*~j63C0(4d534hFmh3wMxD|F@TmRE|AN$qg{0XJu#&BEcwPw1jfs|6Q(MUughqzh9wj1#I}nqcavL&n%Pg5t*LV~Cz9LU zhK+_Mz##rEGpxUHBU5>xd+`2#tbEsY9||~K1iB{)uU0jro4vihF_{%->o$7C#`J67 z?%V5T#H&k5xDs#t&CHm#h&SgnLjyTB1`hb5@#XQkHH|-)8~VDWU3XXN!$T_1q$J%w z1zH7_2)-#TwJ1@B+{~%Vte1EVg|uX>&O^Ur zqT*_*L(tkAEvh|tlB`yWPJ5(h1%t}o9ca%_U7@dX6@7~{7@V3A9`t{&*V6E^* z^W(5-{Wj2aG>5!y$EM{BgB%>YK@Od7>=sHE3Tr!@yuTe@VRrZ=ZgQ~GY|kTQ_|BP6rp?Arb%**E zY}q>#UHGHDaBaJFa783PZQcdInx}irRHiz2JuS3qlU}R3_$a2t*>I_^=|jx8{r__> htJ!~<3q3<`(mB*#XyWP9v;1*8@&O-s=IPL%uiuU&Q?pF79&)vO) zvm|F~`XDohOv<6@eJQG`L#M7mLrBSsuYoRwHUFHk34*O=vL^qHIMLGme9@6dh##Rsvl_yc|pG0HF<| z0*s9?;#SL_JU=!`b<30-0alikd;T%)iG@K$HUv@(tHMk`4KJZ&5NTk1I>cx~+)NlW zY6NdfkT^jSMr3IfNO#Co0FVr**=WSf)pcS%UFBWg(8jw>g~6H%jKolb3>t+7K*P#sW3kxhSODNfN7a9>c!2WwDC_SjHr#T_w^K+EQfYk^Y zCfymL=Eah&(CBnDlo(6fJk{<}uUKP^#nw94R5jGmt-;j-U*&TbHr6>J?&a*-u*1T6 zRu@(l31t=DO4eB~G=!E|17(CDms(axYfGFfT=i|P61yYESh~_LM{C?(rru%qM^;5y z!i;llqo=%@XIs5gw8Bx$}#fV=uJd{35*^uMp&NaB0k0)@h%ZUV2`C@BrGzVK>5^gJxhUA(-VlD^7&$F zu-W6s#)lz0q)JRuB_*mn{S?-mY$xGnUj??*CQ!0Q3r3P9I{eJOU;T!fdI6SXT+&!RuH@|hk ziEKKhV{^0bv4@+?SMb}|wMQbEWkY!{xO(uj8%`eV%557PIKAzRHSN^F)EOGz(Af(G zpSz9=y#t3jHn;B@aFyq5=&T%l;;CB>)LCP%_BY06H9zyr(R%H)G~QvD8+3R)ORARafOF zU+)|KmH=?%DrcF-K%!FcURyYBfTfk z>L+*h)g0N;*Rws3ZtCW`rZ+!7`dLmaN4sxeLHb_y%BJtXijS@Pw4)+lb6Zy*p?uMG zMAUx#^6VM2d`)>Hj})gxo6i3b^2h!9C;j#DM~`*i@!`Hh8BiAN40Ro99khxnqOwY>VyqJ@bD( zV42QbINP(X@4ar{=+Uc}wCk;-4?H^8xyN(x{H5VIKmBej>n8ZZ`B@=v(}G;9{PM84 z9)gr96|Oby8OORZlM^iYX_I0(HHlY7=G +404 Not Found +

Not Found

+

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

diff --git a/llms/anthropic/options.go b/llms/anthropic/options.go index 6ec562b8a..99dd17968 100644 --- a/llms/anthropic/options.go +++ b/llms/anthropic/options.go @@ -55,7 +55,7 @@ func WithExtendedOutput() llms.CallOption { // // llm.GenerateContent(ctx, messages, // llms.WithTools(tools), -// llms.WithThinkingMode(llms.ThinkingModeMedium), +// llms.WithReasoning(llms.ReasoningMedium, 0), // anthropic.WithInterleavedThinking(), // ) func WithInterleavedThinking() llms.CallOption { diff --git a/llms/bedrock/bedrockllm_test.go b/llms/bedrock/bedrockllm_test.go index 9033f394f..c72c5a462 100644 --- a/llms/bedrock/bedrockllm_test.go +++ b/llms/bedrock/bedrockllm_test.go @@ -253,10 +253,6 @@ func TestAmazonOutputLegacyAPI(t *testing.T) { resp, err := llm.GenerateContent(ctx, msgs, llms.WithModel(model), llms.WithMaxTokens(512)) if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } t.Fatal(err) } for i, choice := range resp.Choices { @@ -731,10 +727,6 @@ func TestAmazonNova(t *testing.T) { resp, err := llm.GenerateContent(ctx, msgs, llms.WithModel(model), llms.WithMaxTokens(4096)) if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } t.Fatal(err) } for i, choice := range resp.Choices { @@ -799,10 +791,6 @@ func TestAmazonNovaImage(t *testing.T) { resp, err := llm.GenerateContent(ctx, msgs, llms.WithModel(model), llms.WithMaxTokens(4096)) if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } t.Fatal(err) } for i, choice := range resp.Choices { diff --git a/llms/count_tokens.go b/llms/count_tokens.go index 8b85e98bd..3960a7977 100644 --- a/llms/count_tokens.go +++ b/llms/count_tokens.go @@ -2,6 +2,7 @@ package llms import ( "log" + "strings" "github.com/pkoukk/tiktoken-go" ) @@ -75,19 +76,37 @@ func GetModelContextSize(model string) int { return contextSize } -// CountTokens gets the number of tokens the text contains. +// CountTokens gets the number of tokens the text contains. A model tiktoken +// maps to an encoding is counted with that encoding; any other model, the empty +// name included, gets an approximation of one token per four runes. No fallback +// encoding is tried: tiktoken-go has no "gpt2" encoding, and each encoding it +// has is downloaded on first use, which would make the count depend on the +// network. func CountTokens(model, text string) int { e, err := tiktoken.EncodingForModel(model) if err != nil { - e, err = tiktoken.GetEncoding("gpt2") - if err != nil { - log.Printf("[WARN] Failed to calculate number of tokens for model, falling back to approximate count") - return len([]rune(text)) / _tokenApproximation + if tiktokenMapsModel(model) { + log.Printf("[WARN] Failed to load the token encoding for model %s, falling back to approximate count: %v", + model, err) } + return len([]rune(text)) / _tokenApproximation } return len(e.Encode(text, nil, nil)) } +// tiktokenMapsModel reports whether tiktoken names an encoding for the model. +func tiktokenMapsModel(model string) bool { + if _, ok := tiktoken.MODEL_TO_ENCODING[model]; ok { + return true + } + for prefix := range tiktoken.MODEL_PREFIX_TO_ENCODING { + if strings.HasPrefix(model, prefix) { + return true + } + } + return false +} + // CalculateMaxTokens calculates the max number of tokens that could be added to a text. // // Deprecated: it derives the budget from GetModelContextSize, which no longer diff --git a/llms/count_tokens_test.go b/llms/count_tokens_test.go index 7faa5abe6..067d87b5f 100644 --- a/llms/count_tokens_test.go +++ b/llms/count_tokens_test.go @@ -1,8 +1,13 @@ package llms import ( + "bytes" + "errors" + "log" + "sync/atomic" "testing" + "github.com/pkoukk/tiktoken-go" "github.com/stretchr/testify/assert" ) @@ -13,6 +18,43 @@ func TestCountTokens(t *testing.T) { assert.Equal(t, expectedNumTokens, numTokens) } +// failingBpeLoader stands in for the download of an encoding. +type failingBpeLoader struct { + calls atomic.Int32 +} + +func (l *failingBpeLoader) LoadTiktokenBpe(string) (map[string]int, error) { + l.calls.Add(1) + return nil, errors.New("encoding download disabled") +} + +// TestCountTokensApproximation swaps the package-wide tiktoken loader and log +// output, so it does not run in parallel. +func TestCountTokensApproximation(t *testing.T) { + loader := &failingBpeLoader{} + tiktoken.SetBpeLoader(loader) + var logs bytes.Buffer + logWriter := log.Writer() + log.SetOutput(&logs) + t.Cleanup(func() { + tiktoken.SetBpeLoader(tiktoken.NewDefaultBpeLoader()) + log.SetOutput(logWriter) + }) + + text := "naïve café" // 10 runes in 12 bytes + + // A model tiktoken does not map is approximated without a download or a warning. + assert.Equal(t, 2, CountTokens("", text)) + assert.Equal(t, 2, CountTokens("claude-sonnet-4", text)) + assert.Zero(t, loader.calls.Load()) + assert.Empty(t, logs.String()) + + // A mapped model whose encoding cannot be loaded is approximated with a warning. + assert.Equal(t, 2, CountTokens("text-davinci-001", text)) + assert.Equal(t, int32(1), loader.calls.Load()) + assert.Contains(t, logs.String(), "[WARN] Failed to load the token encoding for model text-davinci-001") +} + func TestGetModelContextSize(t *testing.T) { t.Parallel() tests := []struct { diff --git a/llms/googleai/googleai.go b/llms/googleai/googleai.go index 666b6b519..4a403fcc1 100644 --- a/llms/googleai/googleai.go +++ b/llms/googleai/googleai.go @@ -690,9 +690,10 @@ func convertParts(parts []llms.ContentPart) ([]*genai.Part, error) { if err != nil { return nil, err } + // The download names only the image subtype, such as "png". genaiPart = &genai.Part{ InlineData: &genai.Blob{ - MIMEType: typ, + MIMEType: "image/" + typ, Data: data, }, } @@ -809,7 +810,11 @@ func convertTools(tools []llms.Tool) ([]*genai.Tool, error) { if err != nil { return nil, err } - genaiFuncDecl.Parameters = schema + // A schema that declares no properties is a function without + // arguments, which goes out as a declaration without parameters. + if len(schema.Properties) > 0 { + genaiFuncDecl.Parameters = schema + } functionDeclarations = append(functionDeclarations, genaiFuncDecl) } @@ -909,9 +914,6 @@ func convertToSchema(e any, topLevel bool, toolIndex int, propertyPath string) ( } schema.Properties[propName] = recSchema } - } else if schema.Type == genai.TypeObject && propertyPath == "" { - // For top-level object schemas without properties, this is an error - return nil, fmt.Errorf("tool [%d]: expected to find a map of properties", toolIndex) } if items, ok := eMap["items"]; ok { @@ -976,6 +978,11 @@ func convertToSchema(e any, topLevel bool, toolIndex int, propertyPath string) ( schema.Required = requiredSlice } + if topLevel && len(schema.Properties) == 0 && len(schema.Required) > 0 { + // A top-level schema that requires arguments must declare them + return nil, fmt.Errorf("tool [%d]: expected to find a map of properties", toolIndex) + } + return schema, nil } @@ -1186,7 +1193,8 @@ func geminiBudgetInRange(model string, budget int) int32 { return int32(min(max(budget, minimum), maximum)) } -// checkEmptyStream reports an output limit too small to start an answer. +// blockedPromptError reports a prompt that the prompt feedback names as blocked, +// or nil when nothing was blocked. func blockedPromptError(feedback *genai.GenerateContentResponsePromptFeedback) error { if feedback == nil || feedback.BlockReason == "" { return nil @@ -1202,6 +1210,8 @@ func blockedPromptError(feedback *genai.GenerateContentResponsePromptFeedback) e } } +// checkEmptyStream reports a stream that ended without an answer: a blocked +// prompt, or an output limit too small to start an answer. func checkEmptyStream( lastCandidate *genai.Candidate, blockReason *genai.GenerateContentResponsePromptFeedback, diff --git a/llms/googleai/googleai_test.go b/llms/googleai/googleai_test.go index 50b3caf6b..da7fa9a43 100644 --- a/llms/googleai/googleai_test.go +++ b/llms/googleai/googleai_test.go @@ -59,13 +59,7 @@ func newHTTPRRClient(t *testing.T, opts ...Option) *GoogleAI { opts = append(opts, WithAPIKey(cmp.Or(apiKey, "test-api-key"))) llm, err := New(t.Context(), opts...) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) return llm } @@ -82,13 +76,7 @@ func TestGoogleAIGenerateContent(t *testing.T) { } resp, err := llm.GenerateContent(t.Context(), content) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) assert.Contains(t, resp.Choices[0].Content, "Paris") @@ -119,13 +107,7 @@ func TestGoogleAIGenerateContentWithMultipleMessages(t *testing.T) { } resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel("gemini-2.5-flash")) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) assert.Contains(t, resp.Choices[0].Content, "Alice") @@ -150,13 +132,7 @@ func TestGoogleAIGenerateContentWithSystemMessage(t *testing.T) { } resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel("gemini-2.5-flash")) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) } @@ -165,13 +141,7 @@ func TestGoogleAICall(t *testing.T) { llm := newHTTPRRClient(t) output, err := llm.Call(t.Context(), "What is 2 + 2?") - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) assert.NotEmpty(t, output) assert.Contains(t, output, "4") } @@ -182,13 +152,7 @@ func TestGoogleAICreateEmbedding(t *testing.T) { texts := []string{"hello world", "goodbye world", "hello world"} embeddings, err := llm.CreateEmbedding(t.Context(), texts) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) assert.Len(t, embeddings, 3) assert.NotEmpty(t, embeddings[0]) assert.NotEmpty(t, embeddings[1]) @@ -214,13 +178,7 @@ func TestGoogleAIWithOptions(t *testing.T) { } resp, err := llm.GenerateContent(t.Context(), content) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) } @@ -257,13 +215,7 @@ func TestGoogleAIWithStreaming(t *testing.T) { }), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.True(t, streamDone, "Streaming should be done") assert.NotEmpty(t, resp.Choices) @@ -316,13 +268,7 @@ func TestGoogleAIWithTools(t *testing.T) { llms.WithTools(tools), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) @@ -431,13 +377,7 @@ func TestGoogleAIWithJSONMode(t *testing.T) { llms.WithJSONMode(), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) // Response should be valid JSON @@ -467,12 +407,7 @@ func TestGoogleAIStructuredOutput(t *testing.T) { //nolint:funlen // table of ht resp, err := llm.GenerateContent(t.Context(), content, llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "capital", Schema: schema})) - if err != nil { - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording missing. Hint: re-run with HTTPRR_RECORD=. to record") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) require.NotEmpty(t, resp.Choices) @@ -502,12 +437,7 @@ func TestGoogleAIStructuredOutput(t *testing.T) { //nolint:funlen // table of ht resp, err := llm.GenerateContent(t.Context(), content, llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "colors", Schema: schema})) - if err != nil { - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording missing. Hint: re-run with HTTPRR_RECORD=. to record") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) require.NotEmpty(t, resp.Choices) @@ -546,9 +476,7 @@ func TestGoogleAIStructuredOutput(t *testing.T) { //nolint:funlen // table of ht return nil }), ) - if err != nil { - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) require.NotEmpty(t, resp.Choices) // The finish reason must be surfaced on the streamed choice. @@ -586,13 +514,7 @@ func TestGoogleAIErrorHandling(t *testing.T) { WithAPIKey("invalid-key"), WithHTTPClient(rr.Client()), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) content := []llms.MessageContent{ { @@ -616,13 +538,7 @@ func TestGoogleAIMultiModalContent(t *testing.T) { // Read the test image imageData, err := os.ReadFile("shared_test/testdata/parrot-icon.png") - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) content := []llms.MessageContent{ { @@ -640,13 +556,7 @@ func TestGoogleAIMultiModalContent(t *testing.T) { llms.WithModel("gemini-2.5-flash"), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) } @@ -662,13 +572,7 @@ func TestGoogleAIBatchEmbedding(t *testing.T) { embeddings, err := llm.CreateEmbedding(t.Context(), texts) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) assert.Len(t, embeddings, 105) for i, emb := range embeddings { assert.NotEmpty(t, emb, "embedding at index %d should not be empty", i) @@ -690,13 +594,7 @@ func TestGoogleAIWithHarmThreshold(t *testing.T) { } resp, err := llm.GenerateContent(t.Context(), content) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp) assert.NotEmpty(t, resp.Choices) } @@ -739,13 +637,7 @@ func TestGoogleAIToolCallResponse(t *testing.T) { content, llms.WithTools(tools), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp1) // If tool was called, send back response @@ -777,13 +669,7 @@ func TestGoogleAIToolCallResponse(t *testing.T) { content, llms.WithTools(tools), ) - if err != nil { - // Check if this is a recording mismatch error - if strings.Contains(err.Error(), "cached HTTP response not found") { - t.Skip("Recording format has changed or is incompatible. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") - } - require.NoError(t, err) - } + require.NoError(t, err) require.NotNil(t, resp2) assert.Contains(t, resp2.Choices[0].Content, "105") } diff --git a/llms/googleai/googleai_unit_test.go b/llms/googleai/googleai_unit_test.go index 086c8113e..7cb69a6d1 100644 --- a/llms/googleai/googleai_unit_test.go +++ b/llms/googleai/googleai_unit_test.go @@ -362,24 +362,57 @@ func TestConvertTools(t *testing.T) { //nolint:funlen // comprehensive test //no assert.Nil(t, result) }) - t.Run("missing properties in parameters", func(t *testing.T) { - tools := []llms.Tool{ - { - Type: "function", - Function: &llms.FunctionDefinition{ - Name: "test", - Description: "test function", - Parameters: map[string]any{ - "type": "object", - // missing properties + t.Run("parameters without properties", func(t *testing.T) { + for name, params := range map[string]any{ + "no properties": map[string]any{"type": "object"}, + "empty properties": map[string]any{"type": "object", "properties": map[string]any{}}, + "no required properties": map[string]any{"type": "object", "required": []string{}}, + } { + t.Run(name, func(t *testing.T) { + result, err := convertTools([]llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "test", + Description: "test function", + Parameters: params, }, - }, + }}) + require.NoError(t, err) + require.Len(t, result, 1) + require.Len(t, result[0].FunctionDeclarations, 1) + assert.Equal(t, "test", result[0].FunctionDeclarations[0].Name) + assert.Nil(t, result[0].FunctionDeclarations[0].Parameters, + "a function without arguments goes out without parameters") + }) + } + }) + + t.Run("required properties that are never declared", func(t *testing.T) { + for name, params := range map[string]any{ + "no properties": map[string]any{ + "type": "object", + "required": []string{"location"}, }, + "empty properties": map[string]any{ + "type": "object", + "properties": map[string]any{}, + "required": []string{"location"}, + }, + } { + t.Run(name, func(t *testing.T) { + result, err := convertTools([]llms.Tool{{ + Type: "function", + Function: &llms.FunctionDefinition{ + Name: "test", + Description: "test function", + Parameters: params, + }, + }}) + require.Error(t, err) + assert.Contains(t, err.Error(), "expected to find a map of properties") + assert.Nil(t, result) + }) } - result, err := convertTools(tools) - assert.Error(t, err) - assert.Contains(t, err.Error(), "expected to find a map of properties") - assert.Nil(t, result) }) t.Run("valid function tool", func(t *testing.T) { @@ -586,6 +619,23 @@ func TestConvertTools(t *testing.T) { //nolint:funlen // comprehensive test //no }) } +func TestConvertPartsSendsAnImageLinkWithItsImageMIMEType(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "image/png") + _, _ = w.Write([]byte("png-bytes")) + })) + t.Cleanup(srv.Close) + + parts, err := convertParts([]llms.ContentPart{llms.ImageURLPart(srv.URL + "/parrot.png")}) + require.NoError(t, err) + require.Len(t, parts, 1) + require.NotNil(t, parts[0].InlineData) + assert.Equal(t, "image/png", parts[0].InlineData.MIMEType, "Gemini refuses a bare subtype such as png") + assert.Equal(t, []byte("png-bytes"), parts[0].InlineData.Data) +} + func TestFunctionCallIDWrappers(t *testing.T) { t.Run("ensureFunctionCallID", func(t *testing.T) { testCases := []struct { diff --git a/llms/googleai/internal/palmclient/palmclient.go b/llms/googleai/internal/palmclient/palmclient.go index be067a02c..1b3a95e85 100644 --- a/llms/googleai/internal/palmclient/palmclient.go +++ b/llms/googleai/internal/palmclient/palmclient.go @@ -36,6 +36,7 @@ const ( type PaLMClient struct { client *aiplatform.PredictionClient projectID string + location string embeddingModelName string textModelName string chatModelName string @@ -68,6 +69,7 @@ func New(ctx context.Context, projectID, location string, opts ...Option) (*PaLM return &PaLMClient{ client: client, projectID: projectID, + location: location, embeddingModelName: pOpt.EmbeddingModelName, textModelName: pOpt.TextModelName, chatModelName: pOpt.ChatModelName, @@ -297,7 +299,7 @@ func (c *PaLMClient) batchPredict(ctx context.Context, model string, prompts []s instances = append(instances, structpb.NewStructValue(content)) } resp, err := c.client.Predict(ctx, &aiplatformpb.PredictRequest{ - Endpoint: c.projectLocationPublisherModelPath(c.projectID, "us-central1", "google", model), + Endpoint: c.projectLocationPublisherModelPath(c.projectID, c.location, "google", model), Instances: instances, Parameters: structpb.NewStructValue(mergedParams), }) @@ -336,7 +338,7 @@ func (c *PaLMClient) chat(ctx context.Context, r *ChatRequest) ([]*structpb.Valu structpb.NewStructValue(instance), } resp, err := c.client.Predict(ctx, &aiplatformpb.PredictRequest{ - Endpoint: c.projectLocationPublisherModelPath(c.projectID, "us-central1", "google", c.chatModelName), + Endpoint: c.projectLocationPublisherModelPath(c.projectID, c.location, "google", c.chatModelName), Instances: instances, Parameters: structpb.NewStructValue(mergedParams), }) diff --git a/llms/googleai/palm/palm_llm.go b/llms/googleai/palm/palm_llm.go index 0833d0a4d..6648fa316 100644 --- a/llms/googleai/palm/palm_llm.go +++ b/llms/googleai/palm/palm_llm.go @@ -120,5 +120,5 @@ func newClient(opts ...Option) (*palmclient.PaLMClient, error) { palmclient.WithClientOptions(options.clientOptions...), } - return palmclient.New(context.TODO(), options.location, options.projectID, palmOptions...) + return palmclient.New(context.TODO(), options.projectID, options.location, palmOptions...) } diff --git a/llms/googleai/palm/palm_llm_test.go b/llms/googleai/palm/palm_llm_test.go index 0742831ae..cff77c267 100644 --- a/llms/googleai/palm/palm_llm_test.go +++ b/llms/googleai/palm/palm_llm_test.go @@ -1,6 +1,9 @@ package palm import ( + "context" + "errors" + "net" "net/http" "os" "path/filepath" @@ -11,16 +14,23 @@ import ( "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/llms" + "cloud.google.com/go/aiplatform/apiv1/aiplatformpb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "google.golang.org/grpc" ) func newPalmTestLLM(t *testing.T) *LLM { t.Helper() - // Always check for recordings first - prefer recordings over environment variables + // No recording exists or can be made for any test here: this client talks + // gRPC to Vertex AI (palmclient dials a gRPC connection pool and drops any + // HTTP client), and httprr records HTTP only. The text tests would fail live + // as well, since Google has retired text-bison, the PaLM text model they + // call; the embedding tests call text-embedding-005, which is not retired. if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") + t.Skip("this client talks gRPC to Vertex AI, which httprr cannot record, so no recording exists " + + "or can be made (the text tests also call text-bison, a retired PaLM model)") } // Temporarily unset Google API key environment variable to prevent bypass @@ -135,16 +145,54 @@ func TestPaLMWithOptions(t *testing.T) { assert.NotEmpty(t, resp.Choices) } +// TestPaLMRequestTarget pins where a request goes: the regional host of the +// location, and a model path under the project and the location. The request +// stops in an interceptor, so nothing leaves the process. +func TestPaLMRequestTarget(t *testing.T) { + t.Parallel() + + errStopped := errors.New("stopped before sending") + var target, resource string + intercept := func(_ context.Context, _ string, req, _ any, cc *grpc.ClientConn, + _ grpc.UnaryInvoker, _ ...grpc.CallOption, + ) error { + target = cc.Target() + if predict, ok := req.(*aiplatformpb.PredictRequest); ok { + resource = predict.GetEndpoint() + } + return errStopped + } + noDial := func(context.Context, string) (net.Conn, error) { + return nil, errStopped + } + + llm, err := New( + WithProjectID("my-project"), + WithLocation("europe-west4"), + WithAPIKey("test-api-key"), + WithGRPCDialOption(grpc.WithContextDialer(noDial)), + WithGRPCDialOption(grpc.WithChainUnaryInterceptor(intercept)), + ) + require.NoError(t, err) + + _, err = llm.CreateEmbedding(t.Context(), []string{"hello world"}) + require.ErrorIs(t, err, errStopped) + assert.Equal(t, "europe-west4-aiplatform.googleapis.com:443", target) + assert.Equal(t, "projects/my-project/locations/europe-west4/publishers/google/models/text-embedding-005", resource) +} + func TestPaLMErrorHandling(t *testing.T) { t.Parallel() // Test missing project ID - _, err := New(WithLocation("us-central1")) + // Empty values override GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION, so + // the result does not depend on the environment. + _, err := New(WithLocation("us-central1"), WithProjectID("")) assert.Error(t, err) assert.Equal(t, ErrMissingProjectID, err) // Test missing location - _, err = New(WithProjectID("test-project")) + _, err = New(WithProjectID("test-project"), WithLocation("")) assert.Error(t, err) assert.Equal(t, ErrMissingLocation, err) } diff --git a/llms/googleai/shared_test/shared_test.go b/llms/googleai/shared_test/shared_test.go index 291e8ec83..1ba117a06 100644 --- a/llms/googleai/shared_test/shared_test.go +++ b/llms/googleai/shared_test/shared_test.go @@ -8,6 +8,7 @@ import ( "io" "net" "net/http" + "net/http/httptest" "os" "path/filepath" "reflect" @@ -25,6 +26,7 @@ import ( "github.com/vxcontrol/langchaingo/llms/googleai/vertex" "github.com/vxcontrol/langchaingo/llms/streaming" + "cloud.google.com/go/auth/credentials" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -32,36 +34,35 @@ import ( func newGoogleAIClient(t *testing.T, opts ...googleai.Option) *googleai.GoogleAI { t.Helper() - // Always check for recordings first - prefer recordings over environment variables - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") + // A test that brings its own HTTP client answers every request itself + if bringsOwnHTTPClient(opts) { + t.Parallel() + llm, err := googleai.New(t.Context(), append(opts, googleai.WithAPIKey("test-api-key"))...) + require.NoError(t, err) + return llm } - // Temporarily unset Google API key environment variable to prevent bypass - oldKey := os.Getenv("GOOGLE_API_KEY") - os.Unsetenv("GOOGLE_API_KEY") - t.Cleanup(func() { - if oldKey != "" { - os.Setenv("GOOGLE_API_KEY", oldKey) - } - }) + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "GOOGLE_API_KEY") - rr := httprr.OpenForTest(t, httputil.DefaultTransport) + rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } - // Scrub API key for security in recordings - rr.ScrubReq(func(req *http.Request) error { - q := req.URL.Query() - if q.Get("key") != "" { - q.Set("key", "test-api-key") - req.URL.RawQuery = q.Encode() - } - return nil - }) + // Avoid issue with different view of request bodies for Google AI SDK + rr.ScrubReq(httprr.JsonCompactScrubBody) + + apiKey := "test-api-key" + if rr.Recording() { + apiKey = os.Getenv("GOOGLE_API_KEY") + } - // Configure client with httprr and test credentials + // Configure client with httprr, pinned models and the key opts = append(opts, googleai.WithRest(), - googleai.WithAPIKey("test-api-key"), + googleai.WithDefaultModel(testModel), + googleai.WithDefaultEmbeddingModel(testEmbeddingModel), + googleai.WithAPIKey(apiKey), googleai.WithHTTPClient(rr.Client()), ) @@ -74,27 +75,43 @@ func newGoogleAIClient(t *testing.T, opts ...googleai.Option) *googleai.GoogleAI func newVertexClient(t *testing.T, opts ...googleai.Option) *vertex.Vertex { t.Helper() - // Always check for recordings first - prefer recordings over environment variables - if !hasExistingRecording(t) { - t.Skip("No httprr recording available. Hint: Re-run tests with -httprecord=. to record new HTTP interactions") + cloud := []googleai.Option{ + googleai.WithCloudProject("test-project"), + googleai.WithCloudLocation("us-central1"), } - // Temporarily unset Google API key environment variable to prevent bypass - oldKey := os.Getenv("GOOGLE_API_KEY") - os.Unsetenv("GOOGLE_API_KEY") - t.Cleanup(func() { - if oldKey != "" { - os.Setenv("GOOGLE_API_KEY", oldKey) + // A test that brings its own HTTP client answers every request itself + if bringsOwnHTTPClient(opts) { + t.Parallel() + llm, err := vertex.New(t.Context(), append(opts, cloud...)...) + require.NoError(t, err) + return llm + } + + // A recorded cassette replays without credentials, and a replay miss fails. + // This helper cannot record one: genai sends no credentials over a + // caller-supplied HTTP client, so recording needs an ADC-authenticated transport. + if !hasExistingRecording(t) { + if !hasCloudCredentials() { + t.Skip("no Vertex AI cassette and no GCP project credentials " + + "(GOOGLE_CLOUD_PROJECT and application default credentials); this helper " + + "could not record one either, since genai sends no credentials over a caller-supplied HTTP client") } - }) + t.Skip("no Vertex AI cassette, and this helper cannot record one: genai sends no credentials " + + "over a caller-supplied HTTP client, so recording needs an ADC-authenticated transport") + } - rr := httprr.OpenForTest(t, httputil.DefaultTransport) + rr := httprr.OpenForTest(t, http.DefaultTransport) + if !rr.Recording() { + t.Parallel() + } - // Configure client with httprr and test credentials + // Configure client with httprr, pinned models and test credentials + opts = append(opts, cloud...) opts = append(opts, + googleai.WithDefaultModel(testModel), + googleai.WithDefaultEmbeddingModel(testEmbeddingModel), googleai.WithHTTPClient(rr.Client()), - googleai.WithCloudProject("test-project"), - googleai.WithCloudLocation("us-central1"), ) llm, err := vertex.New(t.Context(), opts...) @@ -103,12 +120,40 @@ func newVertexClient(t *testing.T, opts ...googleai.Option) *vertex.Vertex { return llm } +// Models the cassettes are recorded with. +const ( + testModel = "gemini-3.8-flash" + testEmbeddingModel = "gemini-embedding-001" +) + +// bringsOwnHTTPClient reports whether the options carry an HTTP client of the +// test's own, which needs neither a cassette nor credentials. +func bringsOwnHTTPClient(opts []googleai.Option) bool { + resolved := googleai.DefaultOptions() + for _, opt := range opts { + opt(&resolved) + } + return resolved.HTTPClient != nil +} + // hasExistingRecording checks if a httprr recording exists for this test func hasExistingRecording(t *testing.T) bool { - testName := strings.ReplaceAll(t.Name(), "/", "_") - testName = strings.ReplaceAll(testName, " ", "_") - recordingPath := filepath.Join("testdata", testName+".httprr") - _, err := os.Stat(recordingPath) + t.Helper() + path := filepath.Join("testdata", httprr.CleanFileName(t.Name())+".httprr") + _, err := os.Stat(path) + _, errGzip := os.Stat(path + ".gz") + return err == nil || errGzip == nil +} + +// hasCloudCredentials reports whether GOOGLE_CLOUD_PROJECT names a project and +// application default credentials can be found. +func hasCloudCredentials() bool { + if os.Getenv("GOOGLE_CLOUD_PROJECT") == "" { + return false + } + _, err := credentials.DetectDefault(&credentials.DetectOptions{ + Scopes: []string{"https://www.googleapis.com/auth/cloud-platform"}, + }) return err == nil } @@ -160,8 +205,6 @@ func TestGoogleAIShared(t *testing.T) { for idx := range testConfigs { c := testConfigs[idx] t.Run(fmt.Sprintf("%s-googleai", funcName(c.testFunc)), func(t *testing.T) { - t.Parallel() - c.testFunc(t, newGoogleAIClient(t, c.opts...)) }) } @@ -174,8 +217,6 @@ func TestVertexShared(t *testing.T) { for idx := range testConfigs { c := testConfigs[idx] t.Run(fmt.Sprintf("%s-vertex", funcName(c.testFunc)), func(t *testing.T) { - t.Parallel() - c.testFunc(t, newVertexClient(t, c.opts...)) }) } @@ -250,7 +291,7 @@ func testMultiContentTextChatSequence(t *testing.T, llm llms.Model) { }, } - resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel("gemini-1.5-flash")) + resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel(testModel)) require.NoError(t, err) assert.NotEmpty(t, resp.Choices) @@ -272,7 +313,7 @@ func testMultiContentWithSystemMessage(t *testing.T, llm llms.Model) { }, } - resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel("gemini-1.5-flash")) + resp, err := llm.GenerateContent(t.Context(), content, llms.WithModel(testModel)) require.NoError(t, err) assert.NotEmpty(t, resp.Choices) @@ -283,10 +324,18 @@ func testMultiContentWithSystemMessage(t *testing.T, llm llms.Model) { func testMultiContentImageLink(t *testing.T, llm llms.Model) { t.Helper() + // The client downloads the linked image itself and sends it inline, so the + // link is served locally and a replay needs no network. + image, err := os.ReadFile(filepath.Join("testdata", "parrot-icon.png")) + require.NoError(t, err) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "image/png") + _, _ = w.Write(image) + })) + t.Cleanup(srv.Close) + parts := []llms.ContentPart{ - llms.ImageURLPart( - "https://github.com/vxcontrol/langchaingo/blob/main/docs/static/img/parrot-icon.png?raw=true", - ), + llms.ImageURLPart(srv.URL + "/parrot-icon.png"), llms.TextPart("describe this image in detail"), } content := []llms.MessageContent{ @@ -299,7 +348,7 @@ func testMultiContentImageLink(t *testing.T, llm llms.Model) { resp, err := llm.GenerateContent( t.Context(), content, - llms.WithModel("gemini-2.0-flash"), + llms.WithModel(testModel), ) require.NoError(t, err) @@ -330,7 +379,7 @@ func testMultiContentImageBinary(t *testing.T, llm llms.Model) { resp, err := llm.GenerateContent( t.Context(), content, - llms.WithModel("gemini-2.0-flash"), + llms.WithModel(testModel), ) require.NoError(t, err) @@ -490,7 +539,7 @@ func testTools(t *testing.T, llm llms.Model) { assert.NotEmpty(t, resp.Choices) c1 = resp.Choices[0] - checkMatch(t, c1.Content, "(64 and sunny|64 degrees)") + checkMatch(t, c1.Content, "(64(°F)? and sunny|64 degrees)") assert.Contains(t, resp.Choices[0].GenerationInfo, "input_tokens") assert.Contains(t, resp.Choices[0].GenerationInfo, "output_tokens") assert.Contains(t, resp.Choices[0].GenerationInfo, "total_tokens") @@ -576,7 +625,7 @@ func testToolsWithInterfaceRequired(t *testing.T, llm llms.Model) { assert.NotEmpty(t, resp.Choices) c1 = resp.Choices[0] - checkMatch(t, c1.Content, "(64 and sunny|64 degrees)") + checkMatch(t, c1.Content, "(64(°F)? and sunny|64 degrees)") assert.Contains(t, resp.Choices[0].GenerationInfo, "input_tokens") assert.Contains(t, resp.Choices[0].GenerationInfo, "output_tokens") assert.Contains(t, resp.Choices[0].GenerationInfo, "total_tokens") @@ -605,14 +654,15 @@ func testMaxTokensSetting(t *testing.T, llm llms.Model) { assert.NotEmpty(t, resp.Choices) c1 := resp.Choices[0] - // TODO: Google genai models are returning "FinishReasonStop" instead of "MaxTokens". - assert.Regexp(t, "(?i)(MaxTokens|FinishReasonStop)", c1.StopReason) + // TODO: Google genai models may return "STOP" instead of "MAX_TOKENS". + assert.Regexp(t, "^(MAX_TOKENS|STOP)$", c1.StopReason) } // Now, try it again with a much larger MaxTokens setting and expect to - // finish successfully and generate a response. + // finish successfully and generate a response. The model's thoughts count + // against the setting too. { - resp, err := llm.GenerateContent(t.Context(), content, llms.WithMaxTokens(2048)) + resp, err := llm.GenerateContent(t.Context(), content, llms.WithMaxTokens(8192)) require.NoError(t, err) assert.NotEmpty(t, resp.Choices) diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testCandidateCountSetting-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testCandidateCountSetting-googleai.httprr new file mode 100644 index 000000000..be2fb3bae --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testCandidateCountSetting-googleai.httprr @@ -0,0 +1,57 @@ +httprr trace v1 +775 1865 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 455 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Name five countries in Africa"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384,"temperature":1},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 1452 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:09 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=1249 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "Here are five countries in Africa:\n\n1. Nigeria\n2. Kenya\n3. Egypt\n4. South Africa\n5. Ghana", + "thoughtSignature": "EqwECqkEAWkUfROQDyZ0hgRKzp/A307o/CI27aIHz3I2CxuCfAhrOJSp1dVlLuOCdyWDEoprO9RexY8yW6/HWXaArEha63w6WDsY/2jg6tTRSNIpFAPnwfc2fg9+DXHUct/5IHZVsTZ1DaUdMMg8EMww0QVUM4pgO8/p2vR3dd1Xye0s4QhL6hxWjMrbmtFcOPB4UGGCU2YTMpn8m8WFZB9gyKVWY5DP9G5u8sDzzWWIAuBqVqR1SD25i9pl7VjMO8lxUNb2nxuWVh0jUB3qikaYI9RhI+q+0mHairp4QGkPrQwmVOtjJnOW0olHUuR75GEuFLAxuCWBFAtxSe9PQNZcucBMi47n7wp2RCvEXLOGhmD7HO3FXgfMnrUqKkPJHwtpYZ/ovUHh04Lo6hUpSPMrbaDydFsIbipDK8HUkt5WO3g9BSdRu481s28hR313IDN9Axc5cFweAO7UcTJ1tRBkYooTY3c8yuXzccXH9PrPicBADbVef1q7FIX01HKZMQM1kPdgt9DTAn544JzU5Biut9/UJw7PquwGJ9PhZYrgK4b0BjVWeN7kXTq+YEGS52iAh9DsrI3zygJ/5fnYwpbFVfPHnOseQCdEa1P/71hMI9wODQ4bzZn7+PZOjCwlYXY3BcGp+0TMTUG5TV8bu1Q289a6KdROXvpsxz6+ihFQ1ZlGCXKBU7qEmuDmyZy+s+2E3YtECBEJ/jTY5E9Otgb94cWC3SXHBDirdx7Y2w==" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 6, + "candidatesTokenCount": 28, + "totalTokenCount": 151, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 6 + } + ], + "thoughtsTokenCount": 117, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "CLSzarn1CpfynsEPg8aW8A0" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testEmbeddings-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testEmbeddings-googleai.httprr new file mode 100644 index 000000000..f31dd3177 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testEmbeddings-googleai.httprr @@ -0,0 +1,9256 @@ +httprr trace v1 +617 201158 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:batchEmbedContents HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 290 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"requests":[{"content":{"parts":[{"text":"foo"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"parrot"}],"role":"user"},"model":"models/gemini-embedding-001"},{"content":{"parts":[{"text":"foo"}],"role":"user"},"model":"models/gemini-embedding-001"}]}HTTP/2.0 200 OK +Content-Length: 200777 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:06 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=300 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Xss-Protection: 0 + +{ + "embeddings": [ + { + "values": [ + 0.008687293, + -0.0005995523, + 0.017488128, + -0.067767285, + -0.0061500445, + 3.470041e-05, + -0.004729637, + 0.0058073006, + 0.03076559, + -0.0083383275, + 0.0077374442, + -0.044319317, + -0.03668121, + 0.014634102, + 0.104894705, + -0.011687661, + -0.012862615, + 0.011709252, + 0.015287733, + -0.034255635, + 0.0005121346, + -0.012760322, + 0.021096574, + -0.0056318603, + 0.006498022, + -0.0034005821, + 0.02133476, + 0.020159671, + 0.014046812, + 0.025498588, + -0.0007774919, + 0.004046043, + -0.008088746, + -0.024721028, + -0.01891392, + -0.0043858183, + 0.017453099, + -0.019527597, + 0.008012627, + -0.00197809, + -0.00598428, + 0.0032595566, + -0.019494237, + 0.012056208, + 0.00028665893, + -0.007286767, + 0.0059994394, + -0.024076596, + -0.0050734044, + 0.0047454024, + -0.0066968445, + -0.010518766, + -0.011218274, + -0.15235053, + -0.003994987, + 0.011060574, + -0.008045645, + 0.015620118, + 0.016561916, + 0.030029712, + -0.014314311, + 0.020052657, + -0.002120565, + -0.011984409, + -0.009346121, + 0.010684147, + -0.0046938476, + 0.025904069, + -0.017173946, + 0.021311343, + 0.01969403, + -0.0067657465, + -0.03320154, + -0.02235153, + -0.02382749, + 0.0036755153, + 0.00369162, + -0.006402991, + -0.027000522, + 0.03792506, + -0.0113652935, + 0.010817447, + -0.0013063228, + -0.005831651, + 0.018017195, + 0.007974958, + 0.022740874, + 0.00241138, + -0.007421409, + 0.0009808135, + 0.0009278593, + -0.00082564563, + -0.013920607, + -0.005594853, + -0.0008029837, + 0.004135705, + 0.017192911, + -0.012926841, + -0.029362565, + -0.008991143, + -0.010069888, + 0.002832829, + -0.01199004, + -0.0045435852, + -0.003897541, + -0.0075385002, + 0.0030093023, + -0.012940013, + -0.004085419, + -0.018461393, + 0.00833783, + 0.005771225, + -0.011611716, + 0.009975825, + 0.0029588023, + -0.18698391, + -0.013411251, + 0.009762766, + 0.008617569, + 0.016054373, + -0.005534795, + 0.012755129, + -0.0192076, + 0.0073138094, + 0.0009115203, + 0.023063488, + -0.023286233, + 0.011298807, + -0.001075817, + 0.0023190498, + 0.0038535318, + 0.0005834468, + 0.011501422, + 0.006702255, + 0.0062109283, + 0.02183751, + -0.032164596, + 0.019121049, + -0.0055775414, + 0.021821672, + -0.0036035548, + -0.009011843, + -0.022213923, + 0.0058157584, + 0.006074562, + 0.005068639, + -0.018747916, + -0.01970195, + 0.017120222, + -0.013320199, + -0.021279475, + 0.015190147, + 0.0253083, + -0.014097967, + -0.009909757, + -0.053273983, + -0.01906554, + 0.010277074, + -0.0066464352, + 0.013347818, + -0.006589539, + 0.008620761, + -0.002177168, + -0.0003507091, + 0.012762215, + 0.008973848, + -0.017079908, + 0.031663943, + 0.020444658, + 0.004901412, + 0.012096727, + 0.0102592185, + -0.0117244, + -0.0051103467, + 0.016173013, + 0.024313312, + -0.024164645, + -0.004551832, + 0.00061222084, + 0.005129755, + 0.0014223006, + 0.002995904, + 0.010437085, + 0.008957324, + -0.014226335, + -0.00858208, + -0.021446357, + -0.0025424985, + -0.012760826, + -0.0073461533, + 0.014100205, + -0.011371971, + -0.0072267917, + -0.006064865, + 0.020688552, + 0.006472284, + 0.00031394183, + 0.004539531, + 0.0041059568, + -0.006476568, + 0.032754947, + -0.009970065, + -0.01073267, + 0.003956176, + -0.0002989718, + -0.006135503, + 0.027761823, + -0.0027849567, + 0.012315016, + 0.017773582, + 0.012340351, + -0.027640266, + 0.016883355, + -0.024143461, + 0.021447303, + 0.003629593, + -0.014176364, + -0.020846942, + -0.0013734883, + -0.00506708, + -0.024184246, + -0.024940472, + -0.039107937, + 0.0056861923, + -0.005296446, + 0.010592748, + 0.004813534, + 0.00584702, + 0.0037388674, + 0.014751302, + -0.007833008, + 0.013772334, + -0.007289538, + 0.008347103, + -0.009325167, + 0.0030555413, + 0.0022530123, + 0.015573232, + -0.0061403112, + 0.014338322, + -0.020420594, + 0.0067883558, + 0.020518836, + 0.024063326, + 0.017427485, + -0.011109382, + -0.0018570129, + -0.021259252, + 0.006105089, + -0.021553349, + 0.02146669, + 0.0010082407, + -0.034753047, + -0.011069832, + -0.004126004, + -0.0005816653, + -0.0088055935, + 0.012430738, + 0.00035655912, + -0.024972728, + -0.019622268, + -0.0305486, + 0.00025767417, + -0.02089438, + 0.00015059317, + -0.009025982, + 0.0004761942, + 0.016839279, + -0.025694063, + -0.0044296975, + -0.00223397, + 0.009437991, + 0.0053606452, + -0.0048000184, + -0.0029385174, + -0.0032674097, + -0.13097695, + -0.008740567, + -0.013532031, + -0.022778507, + -0.02875414, + -0.004267425, + -0.008642789, + 0.012612438, + 0.021193268, + 0.016677273, + -0.0054723592, + -0.006210531, + 0.008814096, + -0.00092938077, + 0.010654507, + 0.01892029, + -0.0016280303, + -0.001700918, + -0.007964983, + -0.014993818, + 0.0057483455, + -0.0014383545, + -0.0085505415, + -0.005378245, + 0.005691154, + -0.0054322216, + -0.012698173, + -0.0007175664, + -0.0054551894, + 0.006930263, + -0.0051436294, + 0.007788823, + 0.008630878, + -0.01246759, + -0.00041031017, + 0.034430236, + -0.0010709311, + -0.012113111, + 0.009765108, + 0.008934989, + 0.0052047265, + 0.011344533, + -0.0015576839, + 0.0076825265, + -0.026515618, + 0.0009329524, + 0.014590517, + -0.027028766, + -0.01913089, + 0.02159703, + -0.025530176, + -0.014180738, + 0.0015316282, + 0.028312722, + 0.008969981, + 0.01636098, + 0.008516236, + -0.005187639, + -0.0032281978, + 0.0035057622, + 0.026580233, + -0.0011868782, + -0.007449761, + 0.007486185, + 0.0069418196, + -0.005742916, + -0.005400782, + 0.010856775, + 0.009548369, + 0.003226997, + 0.02420754, + -0.0077429977, + 0.0045912904, + -0.029369257, + -0.006270844, + 0.008312032, + 0.013096815, + -0.008833374, + 0.003186229, + 0.005816183, + 0.0021880534, + 0.0003931968, + 0.006865366, + 0.010002729, + -0.010185929, + 0.010563891, + 0.00212922, + 0.017728625, + 0.017483953, + -0.015023876, + 0.02049577, + 0.0007207393, + -0.029220348, + 0.0003938394, + -0.023995753, + -0.023114612, + -0.024813, + -0.0004727605, + -0.02131237, + 0.019992903, + -0.022018455, + -0.011245906, + 0.012603231, + -0.016052695, + 0.0063873124, + -0.0031213756, + -0.0026527708, + 0.010019001, + 0.0045374334, + 0.0061593726, + 0.0070362296, + -0.011049312, + -0.0009436636, + -0.018056205, + -0.0013992052, + 0.0034248752, + 0.005950456, + 0.020585394, + -0.018088175, + -0.008558077, + 0.0013266865, + -0.02649609, + -0.017061364, + 0.029099887, + -0.0071205674, + -0.007876009, + -0.0028450787, + -0.014287453, + -0.028108932, + -0.027767034, + -0.020211775, + 0.0127054285, + -0.005742255, + -0.02261303, + -0.008700159, + -0.014775517, + 0.0037119677, + 0.010950597, + 0.0239616, + 0.014615081, + -0.02370977, + -0.012224933, + 0.031222288, + 0.013874941, + 0.0006624498, + 0.008215657, + 0.016483659, + 0.011281578, + 0.011413039, + -0.023720248, + -0.021328518, + -0.015865006, + 0.00055274164, + 0.01500976, + -0.007229906, + 0.0038163138, + 0.009932837, + -0.021932326, + 0.006949902, + -0.02544569, + 0.006537318, + 0.0019705454, + 0.006958907, + -0.018024437, + 0.00567134, + -0.0050933743, + -0.0016354594, + -0.008876939, + 0.012070871, + 0.0018852351, + -0.0071650385, + 0.012203077, + -0.004173197, + -0.0047833505, + -0.0015536913, + 0.0030763065, + -0.0021329378, + 0.0037008463, + -0.020766912, + 0.026228014, + -0.0028039473, + -0.0081609255, + -0.01870959, + 0.0059181573, + -0.0018067501, + -0.003860282, + -0.00055790343, + -0.0073873242, + -0.00413714, + 0.0072153066, + 0.008891046, + -0.027005166, + 0.013543151, + 0.012353646, + -0.011079663, + 0.015625004, + 0.012731967, + 0.014032128, + -0.0012448762, + -0.016995478, + 0.01681567, + 0.007434244, + -0.017074956, + 0.011768046, + 0.02115411, + 0.003970481, + 0.0041958163, + -0.009169353, + 0.03898993, + -0.005237962, + 0.00011626366, + -0.0035541493, + 0.004878718, + -0.012272032, + 0.0043846844, + -0.008687135, + -0.00405254, + 0.007174887, + -0.0026679677, + 0.0025143574, + -0.028716821, + 0.00890444, + -0.006138646, + 0.010285583, + 0.019889217, + -0.008401767, + -0.012110083, + 0.025436498, + 0.0046592, + -0.009531749, + -0.028525548, + 0.011394783, + 0.024467498, + -0.0038581465, + 0.012530472, + 0.0076566734, + -0.002841675, + 0.0037038752, + 0.014615617, + 0.004762231, + 0.009002116, + -0.01245148, + -0.0073044873, + 0.022037944, + 0.032197755, + -0.0049000815, + -0.024018707, + -0.0037875383, + -0.0020812561, + -0.001972549, + 0.0027452414, + -0.0102813905, + 0.0061977524, + 0.0014802256, + 0.013255166, + 0.012226865, + -0.005501544, + -0.0072147488, + 0.0047980067, + 0.01125825, + -0.013410314, + -0.033505343, + -0.00041833645, + 0.033699498, + -0.0057157897, + 0.00429601, + 0.01877627, + -0.0050414144, + 0.03137162, + -0.12720929, + -0.004552171, + -0.0033405058, + -0.004955866, + 0.011527269, + -0.01758085, + -1.3478935e-06, + -0.014266126, + 0.0029667758, + -0.020139594, + 0.0037180695, + 0.020401116, + 0.0045658993, + 0.02065899, + -0.009741241, + -0.011483437, + -0.0133353695, + 0.009935322, + 0.010573445, + 0.006179922, + 0.01627513, + 0.011737903, + 0.003226013, + 0.022156741, + -0.018620929, + -0.01777529, + 0.008175604, + 0.0016045879, + -0.0029265038, + 0.0021788888, + 0.010028388, + -0.010622037, + 0.0003946121, + 0.011146568, + 0.009001273, + -0.0067314114, + -0.023070794, + -0.008757176, + -0.005538598, + 0.035726305, + -0.030223409, + -0.013083865, + 0.02403896, + 0.0012364216, + -0.022822661, + 0.0031923193, + 0.03859201, + -0.001968577, + -0.006411719, + 0.027751718, + -0.027976727, + -0.0020238843, + -0.015425944, + 0.008480097, + 0.01743972, + -0.03977096, + 0.002610674, + 0.02234449, + -0.020265289, + 0.02029537, + 0.0024829702, + 0.005901852, + -0.0102470815, + 0.018335385, + 0.017356101, + -0.005466808, + -0.0016111028, + 0.007029766, + 0.011143762, + -0.0051274584, + 0.02794184, + 0.0018588494, + 0.006535482, + 0.01384492, + -0.009647197, + 0.017071873, + 0.008974704, + 0.007221637, + -0.013603257, + 0.00540491, + -0.01196659, + -0.009878937, + -0.07751112, + 0.009982854, + 0.013531767, + -0.01750864, + -0.0058993297, + -0.010440269, + -0.007223993, + 0.0004057722, + 0.012643911, + -0.012247717, + -0.008788133, + 0.01751591, + -0.015608312, + 0.01685601, + 0.015184137, + -0.0039273747, + -0.015904171, + 0.013306926, + 0.003270806, + -0.003112624, + 0.015502476, + 0.0128690535, + 0.026035232, + 0.0069733867, + -0.0012709346, + 0.01779661, + 0.014128588, + 0.008355636, + 0.017721467, + -0.032423608, + 0.0040111355, + -0.109767415, + 0.01800147, + 0.011355999, + 0.01732263, + 0.011371235, + 0.0065964838, + 0.012508826, + 0.00875898, + -0.009659394, + -0.011641472, + 0.008994596, + -0.000541746, + -0.019262038, + 0.02257225, + 0.0037666305, + 0.1759314, + -0.011083732, + -0.011096129, + -0.0021755132, + 0.03005365, + -0.009839315, + -0.009082269, + -0.0021492261, + -0.011667841, + -0.0009459134, + 0.011013641, + -0.013615024, + 0.014298762, + -0.016583417, + 0.009037499, + 0.009999642, + -0.0069480594, + -0.015509829, + -0.036029406, + 0.012574708, + 0.012039721, + -0.01139339, + 0.028019309, + -0.011415676, + 0.019461382, + 0.02094867, + 0.0066629616, + -0.014232094, + -0.0019316599, + -0.0026851152, + 0.0018528218, + 0.011884893, + 0.023531225, + 0.026506547, + 0.019548418, + -0.026613288, + -0.058991373, + 0.013974939, + 0.041930024, + 0.015625289, + -0.0026592927, + -0.0022334908, + -0.035503462, + -0.0068886676, + 0.016730804, + -0.013184282, + -0.0054780557, + 0.006730944, + 0.011812617, + -0.0023940308, + 0.0040142424, + 0.017965924, + 0.006230427, + -0.012023672, + 0.01193248, + -0.00480636, + 0.013578558, + -0.01014002, + 0.002607888, + -0.023075152, + -0.020938518, + -0.006875862, + -0.010944789, + 0.0016648102, + -0.02866273, + -0.0062460005, + -0.0041332464, + -0.002419293, + -0.009879285, + -0.0011643772, + -0.011210249, + -0.0059280577, + 0.04624401, + 0.011034667, + -0.033948317, + 0.010635842, + -0.015743993, + -0.004884986, + 0.022342958, + -0.0046785534, + 0.012329268, + -0.0035886692, + 0.008836355, + 0.0012729478, + -0.0025380596, + 0.008947849, + -0.011649148, + -0.008452644, + -0.018643655, + 0.009240796, + -0.006998141, + 0.013581855, + 0.020466326, + 0.015995642, + 0.0047566146, + -0.009059944, + -0.0230155, + -0.00568377, + -0.006553409, + 0.00095187046, + 0.023107348, + -0.0033433698, + 0.004151198, + 0.008758634, + 0.005522271, + 0.00074491353, + 0.010456838, + 0.0018540412, + -0.0056753014, + 0.015488553, + -0.008577112, + 0.0073200883, + 0.029729836, + -0.0003803152, + -0.0075514945, + 0.011939851, + 0.013535546, + 0.01551645, + 0.0005487665, + 0.0015498119, + -0.0013686672, + -0.015682774, + -0.0006655467, + -0.018248186, + 0.007391832, + 0.031391453, + -0.008657709, + 0.007814712, + -0.0041959696, + -8.9730056e-05, + 0.00862867, + -0.013247852, + -0.00359875, + 0.0033425884, + -0.010817053, + -0.0024565854, + -0.0025616894, + 0.0063345213, + -0.018881122, + -0.0028153076, + -0.004178576, + 0.013227916, + -0.0009714555, + -0.003745339, + -0.0040984172, + 0.021268869, + -0.0036756753, + 0.0042561297, + 0.0073148203, + 0.020137565, + -0.020034134, + -0.0027910324, + -0.009887379, + -0.0074726143, + -0.0019888817, + 0.0076818876, + -3.5185767e-05, + -0.01259977, + 0.016189603, + -0.0033148054, + -0.0054394347, + -0.0130495, + 0.007845817, + -0.017973112, + -0.0072650826, + -0.0025931138, + -0.0111553725, + 0.009376972, + -0.0047410955, + 0.009441436, + 0.009923029, + -0.019664193, + 0.0036295184, + 0.012965504, + 0.0053555537, + -0.0067654955, + -0.028558359, + 0.013580956, + -0.0048293252, + 0.0029994557, + -0.0037350308, + 0.013576812, + -0.018575467, + 0.0013208555, + -0.010166264, + -0.005391491, + 0.0026590673, + -0.0019632545, + -0.018207865, + 0.015604931, + 0.01269651, + -0.014232606, + 0.015538605, + 0.011077022, + 0.011468066, + -2.5617703e-05, + -0.0059816977, + -0.0040265643, + -0.0095618, + 0.0059205433, + -0.004717566, + -0.0065576807, + -0.006179225, + -0.00048346032, + -0.0022051877, + 0.0038358844, + 0.0127531765, + -0.0022487887, + -0.0024102605, + 0.0039293002, + 0.006930553, + 0.023766395, + 0.012744543, + -0.008747719, + 0.00082147325, + -0.010755195, + -0.0101795355, + 0.025872659, + -0.010253086, + 0.0015751722, + 0.007285309, + -0.007482195, + 0.001578618, + -0.008217535, + 0.0019503374, + -2.9443578e-05, + 0.0016160882, + 0.013071392, + 0.00736983, + 0.012191658, + 0.00044877562, + 0.007949159, + -0.006756194, + 0.008867985, + 0.002330643, + 0.002464825, + 0.011418792, + 0.007812943, + 0.017862773, + -0.018558832, + 0.010283134, + 0.008645683, + 0.01330512, + -0.027024375, + -0.008063128, + 0.0077728815, + 0.0023448921, + -0.0019505746, + -0.021876818, + 0.0040953932, + -0.0021006765, + -0.0030211697, + 0.006367454, + 0.022272265, + 0.017458457, + -0.0072665988, + 0.012167716, + -0.003225298, + 0.0009803289, + -0.0038456817, + -0.005121437, + -0.011292835, + -0.0024890837, + -0.022529177, + -0.002943297, + 0.0054065115, + 0.016208753, + 0.0078538, + -0.006325404, + 0.0033352273, + 0.0032606563, + 0.0022635972, + 0.0058103786, + 0.0047208755, + -0.0010763096, + 0.0019977016, + 0.011211282, + 0.012099789, + 0.0058530592, + -0.0079528745, + -0.0022821457, + -0.015429311, + 0.002091637, + -0.012202914, + -0.005769598, + -4.9549937e-05, + -0.019219175, + -0.016427452, + -0.0124934, + 0.011391695, + 0.008626614, + 0.0038711757, + 0.008935884, + 0.005755672, + 0.0038448959, + 0.10203414, + -0.00491466, + 0.01911876, + -0.004106837, + -0.0031110372, + 0.00083937496, + -0.014227256, + 0.0070216944, + 0.019370308, + -0.015442503, + -0.012127851, + -0.003917447, + 0.0031005864, + -0.017422454, + 0.006015996, + 0.0040558344, + -6.778924e-05, + -0.010797539, + 0.018605713, + 0.0050685722, + -0.0026278528, + -0.00270912, + -0.013774137, + 0.0020730842, + 0.00738008, + -0.008515877, + -0.007146094, + -0.001406558, + -0.001264173, + 0.007721611, + 0.001030842, + 0.0016861404, + -0.0034692846, + 0.0007273634, + -0.013399225, + -0.020340467, + -0.0062097055, + 0.0073292735, + 0.026675716, + 0.00955875, + 0.015377012, + -0.009985699, + -0.005048428, + 0.00832004, + -0.0025997728, + 0.0018225466, + -0.017975392, + -0.0011290255, + -0.0060312785, + -0.0015739857, + 0.009935285, + 0.0049610613, + 0.0048964336, + -0.010850079, + -0.029929858, + -0.020901177, + 0.013625098, + -0.008362455, + 0.012223114, + -0.00550919, + -0.0056522265, + 0.0044907844, + 0.007421419, + 0.002716557, + 0.0025252753, + -0.017997548, + 0.0006915558, + 0.0025770622, + -0.013855779, + -0.012460083, + -0.0137106925, + 0.027582813, + -0.00047286818, + 0.014739756, + 0.04005512, + 0.016134534, + -0.013676932, + -0.0013754886, + -0.0072753164, + -0.0053872326, + 0.010810851, + -0.0044695656, + -0.0054093376, + -0.011447949, + -0.0034802065, + 0.00886274, + 0.0024936812, + -0.0016941471, + -0.0046303063, + -0.005115387, + 0.011388673, + -0.002602833, + 0.0015605927, + 0.0076540667, + 0.01495087, + 0.014479292, + 0.13426869, + -0.010343856, + -0.013991341, + -0.010159898, + -0.025989842, + -0.005845415, + 0.011808049, + 0.0009514725, + -0.008544427, + 0.008789091, + -0.0019632503, + 0.0074643474, + 0.009040342, + -0.0014615289, + -0.009654081, + -0.0045177573, + -0.004699992, + -0.0039853775, + -0.012154477, + 0.0049168468, + 0.016103074, + -0.0029735023, + -0.0032849067, + -0.011890683, + 0.023391783, + 0.001115073, + -0.007976776, + 0.0028829123, + -0.013872473, + 0.010126067, + 0.0038869805, + -0.005223845, + 0.0144363735, + -0.012691636, + 0.0033915986, + -0.0026844176, + 0.013726618, + 0.0050477516, + 0.008253508, + -0.008230563, + 0.009430952, + 0.009419306, + 0.009602341, + -0.006817221, + -0.011411092, + -5.3084113e-05, + -0.0051366547, + 0.025701798, + 0.0050504627, + 0.001863422, + -0.007653452, + -0.011191641, + 0.0018513721, + -0.005511763, + -0.003843674, + -0.014216934, + 0.007948217, + 0.010417587, + 0.0003743493, + -0.020185111, + 0.020256234, + 0.001604993, + 0.0050220755, + 0.0044933474, + 0.001094293, + -0.0070919646, + -0.004933035, + -0.014843117, + 0.0037880135, + -0.0016433855, + -0.0015997805, + 0.012379244, + -0.005374086, + -0.008613257, + -0.00308308, + 0.012005496, + 0.01219479, + 0.027671035, + 0.01966535, + 0.018461045, + 0.00016139045, + -0.01710834, + -0.0061272453, + -0.0009167629, + -0.0009247159, + -0.0041763783, + -0.0069067464, + 0.0269922, + 0.0013090636, + -0.009669332, + 0.02541561, + 0.0026287434, + 0.00438516, + 0.008517329, + -0.010393998, + -0.0006080028, + 0.0013368356, + -0.0067964206, + 0.006055294, + -0.0018739895, + 0.011661225, + 0.0006691963, + 0.0063973363, + 0.0052031865, + 0.0056542293, + -0.005343611, + -0.002528273, + -0.0099809095, + -0.0089971805, + -0.005067785, + -0.0045591523, + -0.001206469, + 0.004514228, + -0.015323275, + -0.0030214747, + -0.010772925, + 0.013496088, + 0.0002321004, + -0.008330514, + 0.0006543195, + -0.008927259, + -0.007080007, + -0.017847273, + -0.007852169, + 0.004867326, + 0.02114902, + 0.004206768, + 0.02426388, + 0.0031347352, + -0.012892525, + -0.0136010805, + -0.0021259983, + 0.0053054765, + -0.013394673, + -0.003549579, + 0.00056906993, + 0.0029023157, + 0.0055223512, + -0.03244142, + -0.0059293862, + 0.012482649, + -0.0053719017, + -0.0056271334, + 0.004663817, + 0.0038268266, + 0.009113935, + 0.012919591, + 0.010335849, + 0.019291041, + -0.027955465, + 0.0175151, + 0.002201153, + -0.018746039, + -0.0025196732, + -0.0060254936, + -0.0046358444, + -0.0043030255, + -0.0071517783, + 0.001981071, + -0.006623821, + 0.0062295506, + -0.06752047, + -0.0013635798, + -0.0082442155, + 0.010408489, + 0.0027342502, + -0.01580649, + 0.00072810904, + -0.00639373, + 0.0013875354, + 0.023504796, + -0.003944722, + -0.005825697, + 0.0039608637, + 0.00616855, + 0.01160933, + 0.0038453587, + -0.0030675516, + 0.016232373, + 0.0067002834, + -0.010276981, + -0.007333522, + -0.011839703, + -0.0075594834, + 0.011761927, + -0.0044737575, + 0.016663749, + -0.0012487443, + 0.015731106, + -0.018402008, + -0.0183839, + 0.0026329358, + 0.0011446407, + 0.013813632, + 0.0098859025, + 0.006023755, + -0.009067822, + 0.008725908, + -0.0130427135, + -0.018925047, + 0.0014232913, + 0.018175516, + -0.0026799976, + -0.008415098, + -0.006190411, + -0.015069961, + -0.012387894, + 0.014828759, + 0.003389344, + 0.006926882, + -0.007365336, + 0.00039667886, + -3.3663047e-05, + -0.014900065, + -0.003231955, + 0.011181726, + 0.005845175, + 0.018248007, + 0.0013438802, + 0.0020612935, + -0.013579148, + 0.027580371, + 0.017224563, + -0.0069170427, + 0.0012293892, + -0.013908563, + 0.009362261, + -4.4852834e-05, + 0.011255446, + 0.007963492, + 0.00599945, + 0.0085712075, + 0.017237164, + 0.0048445994, + -0.014030399, + -0.00011396099, + -0.0034294438, + 0.014459115, + -0.0043620956, + -0.0030048848, + -0.010300076, + 0.0048096916, + -0.0014136425, + 0.005238761, + 0.0006934089, + 0.011712095, + -0.02344152, + -0.0034592242, + -0.0012979321, + -0.0008097194, + 0.00024911689, + -0.008433209, + 0.01945377, + 0.0038686616, + 0.0073846136, + -0.0018593392, + -0.010089531, + -0.020803986, + 0.0017015274, + 0.01011945, + -0.005920297, + 0.00075382984, + -0.013361308, + -0.010457353, + 0.003709525, + -0.0020410046, + 0.009095445, + 0.0057571135, + 0.0073872292, + 0.0074922987, + 0.0042305817, + 0.0046910136, + 0.011337975, + 0.010771098, + 0.0055035288, + -0.0024431818, + -0.0034784204, + 0.0019023293, + 0.00074378995, + -0.0021880115, + -0.02343962, + -0.0045665954, + 0.004842072, + -0.007769299, + -0.01107295, + 0.01570419, + -0.011471096, + 0.0028621554, + -0.011788264, + 0.0024176063, + -0.0067343414, + 0.0036415146, + 0.009940857, + 0.010515336, + 0.0153192775, + -0.0055591646, + -0.0011023014, + 0.008124838, + 0.021870963, + -0.020843172, + -0.0076007135, + 0.019367531, + -0.016218679, + -0.00038258635, + -0.0008830315, + 0.00040922983, + 0.009032848, + -0.014394465, + 0.015315479, + -0.0048474, + 0.005155119, + -0.011130397, + -0.01709991, + 0.01525269, + 0.025027033, + -0.010582375, + -0.013208439, + -0.0022990992, + 0.013619277, + -0.0012467117, + -0.00423292, + 0.017739438, + 0.012879134, + 0.012289041, + -0.0028026896, + 0.0018197205, + -0.005789294, + -0.0013462343, + -0.0140815005, + 0.007697268, + -0.0073407823, + 0.015746001, + -0.014494718, + 0.002227598, + 0.0058589512, + -0.008022744, + 0.00032994995, + 0.016861351, + 0.007746557, + 0.0012076213, + -0.0014928118, + -0.027859742, + -0.007508688, + -0.0062162927, + 0.008185115, + -0.011211574, + -0.030456275, + -0.006595851, + -0.0043915994, + -0.004560805, + 0.0021029217, + -0.005901756, + -0.010120026, + 0.003870392, + -0.0065757125, + 0.007439931, + -0.007206456, + 0.009306462, + -0.011222527, + 0.0038380732, + 0.0041258056, + 0.0036614554, + 0.008943188, + 0.004447874, + 0.012172903, + -0.0027927645, + -0.10990407, + -0.0107053425, + -0.010982829, + 0.00026859544, + -0.011364037, + 0.002107165, + 0.0027699512, + -0.009688038, + 0.005025573, + -0.0030257965, + -0.029507438, + -0.010607273, + 0.0036587769, + -0.052284706, + 0.005750383, + 0.013304516, + 0.0056821113, + -0.00055684504, + -0.0124841295, + -0.014194956, + -0.009881316, + -0.004730288, + -0.010770149, + -0.003442465, + 0.0002029708, + -0.0048261397, + -0.009385183, + 0.013682417, + 0.0036431835, + -0.0036617871, + 0.0033700669, + -0.012511542, + -0.0040065665, + -0.00039073988, + -0.0001645874, + 0.0023828647, + -0.0035815707, + -0.02277364, + -0.13885239, + 0.0048258253, + -0.016727017, + -0.0035861162, + -0.0004357154, + 0.0076328944, + 0.0015466264, + 0.004704767, + 0.014394146, + 0.003662711, + -0.017604215, + -0.0095090605, + -0.010775129, + -0.020340193, + -0.006387117, + 0.008352139, + -0.008710415, + 0.012402521, + -0.0185954, + -0.00034902617, + -0.0139139695, + -0.00696644, + 0.0021379532, + 0.006596915, + -0.00443882, + 0.0092429025, + 0.008517412, + 0.016136743, + 0.011851472, + 0.0055892696, + 0.006454984, + -0.002844811, + 0.004111174, + -0.015119909, + 0.00046974185, + -0.008508248, + -0.0036962251, + 0.011149122, + -0.011589812, + 0.0005875099, + -0.0041049854, + -0.004684072, + -0.011526992, + 0.0011532112, + 0.0058752815, + 0.012508175, + 0.02132431, + 0.0082033025, + -0.010449682, + 0.013685048, + -0.005249225, + 0.007403782, + -0.00350363, + -0.00760309, + 0.0005340016, + 0.00059681403, + -0.0072446917, + 0.019734096, + 0.0081668, + -0.0026972305, + 0.011692245, + -0.016342698, + -0.0129035795, + -0.008587365, + 0.0061726817, + -0.011630305, + 0.0046947543, + 0.019354332, + -0.004189159, + 0.0331135, + 0.013813115, + 0.012493036, + -0.009233703, + 0.004784202, + 0.0072427946, + -0.0073105106, + -0.009735168, + 0.013644838, + 0.0047425316, + -0.011731725, + 0.020365646, + 0.00358893, + -0.0042011817, + 0.00843774, + 0.0004130545, + -0.004626026, + 0.01563459, + 0.017539307, + 0.0061307596, + -0.036535047, + 0.002856945, + 0.0010879508, + 0.006720774, + 0.011432691, + 0.0011208986, + -0.0014615881, + 0.0025266362, + 0.0029062033, + -0.0012071481, + -0.03364649, + 0.017724605, + 0.007882852, + -0.0008947685, + -0.0055972124, + 0.0043411045, + 0.0059209466, + -0.024726767, + 0.0022163335, + 0.017410137, + -0.012331643, + 0.00093629386, + 0.010155606, + 0.0071074655, + 0.017148903, + 0.0069656046, + -0.008216308, + -0.016422855, + -0.01051236, + 0.002277297, + 0.008514118, + -0.01104895, + 0.006501589, + -0.008281461, + -0.016874673, + -0.009701664, + -0.00534877, + -0.00083992106, + 0.008316926, + -0.011451599, + -0.009497453, + -0.0015088908, + 0.03155688, + 0.001647142, + 0.0062776566, + 0.014497768, + 0.0049836687, + 0.009408785, + -0.008823924, + -0.0006205365, + 0.017113376, + 0.026770512, + -0.02324921, + 0.005502053, + 0.016133603, + -0.01073965, + 0.01119444, + -0.005914867, + 0.0073784553, + 0.029522652, + 0.037033953, + -0.01011684, + -0.018632608, + 0.0071946904, + 0.0072457413, + 0.012746859, + -0.007071921, + 0.0008394189, + -5.1466977e-05, + -0.009039916, + -0.00839706, + -0.013037034, + -0.010557386, + 0.0042593433, + -0.010780316, + -0.020731559, + 0.0055720196, + -0.0074543073, + 0.021371728, + -0.012882052, + 0.020496717, + 0.011643548, + -0.009634179, + -0.00092866144, + 0.00483516, + -0.0083142165, + -0.021085694, + -0.010626112, + 0.006075356, + 0.0050198976, + 0.00070266397, + -0.014482145, + -0.013829435, + 0.024985164, + -0.0059741247, + -0.017689096, + 0.011286558, + 0.011150053, + 0.0019929903, + 0.010271928, + 0.004388811, + 0.0037919895, + 0.01137747, + 0.011752597, + 0.008246966, + -0.016166897, + -0.00929031, + 0.0016504466, + 0.003116734, + 0.016833946, + 0.008572729, + 0.011849296, + 0.004536235, + -0.0149264615, + -0.1220818, + -0.0068386863, + -0.011979482, + -0.0007432419, + 0.004312895, + 0.005471731, + -0.0030712036, + 0.0043197353, + 0.0010173935, + -0.0041594156, + -0.023357423, + -0.011802607, + -0.009341089, + 0.00080977683, + 0.006396491, + 0.007133644, + 0.009445247, + 0.0046809516, + -0.017313533, + -0.014050897, + -0.008909982, + 0.001399032, + 0.0005823391, + -0.0037739954, + -0.008802786, + -0.010101861, + 0.0005422452, + -0.0026704257, + -0.025089346, + -0.0015616232, + -0.00573369, + 0.009899661, + -0.011831669, + -0.0069454764, + -0.0136666875, + -0.004289939, + -0.0090006525, + 0.008795462, + -0.029714026, + -0.0105763795, + 0.0218584, + 0.009998341, + -0.011087116, + -0.0026374902, + -0.0047321855, + 0.014291109, + -0.018461676, + -0.0038414346, + -0.037691638, + -0.020409081, + 0.016592087, + 0.01226431, + -0.005693988, + -0.025787413, + -0.016990053, + -0.02508468, + 0.012653639, + -0.006535383, + -0.003179042, + 0.017017324, + -0.005512723, + -0.031306356, + -0.006355945, + 0.00906425, + 0.017586047, + 0.008144389, + -0.005161437, + 0.16480307, + -0.011086962, + 0.0038255285, + -0.0034155461, + -0.0022244893, + 0.0069111395, + 0.004945085, + -0.0015480005, + -0.019974647, + -0.017162047, + -0.011386591, + -0.0007254434, + -0.018195067, + -0.018254226, + 0.004978872, + 0.018840728, + 0.0018573047, + -0.004953671, + 0.014272468, + -0.0044418764, + -0.0054419185, + 0.005396661, + -0.0010648494, + -0.008385663, + 0.009492778, + -0.0036053853, + -0.007359148, + 0.0106931, + 0.019590788, + -0.011659043, + 0.005892998, + -0.010862912, + -0.022831047, + -0.004673795, + 0.00824299, + -0.0008459908, + -0.0014790132, + 0.012803555, + -0.0010869586, + 0.01929423, + 0.013099115, + 0.0041837185, + 0.0030553467, + -0.014001589, + -0.006455516, + -0.010406346, + -0.0104905525, + 0.0002410486, + -0.008702263, + 0.002118317, + -0.012232092, + 0.006574767, + -0.012062212, + -0.015584312, + -0.0021630656, + -0.011257759, + 0.011374717, + 0.007447821, + 0.0003595476, + 0.01140418, + -0.011829871, + 0.009773827, + 0.012263084, + 0.005297637, + -0.018520074, + 0.016378839, + -0.012936623, + -0.014232741, + 0.0042014606, + -0.14913663, + 0.012867319, + -0.00017956202, + -0.008277805, + -0.0124453865, + -0.020673662, + 0.015406676, + -0.020010436, + 0.00090116076, + -0.016393082, + -0.0041900394, + -0.0045637037, + 0.009775279, + 0.01950372, + -0.0068366355, + -0.012744289, + 0.016504377, + -0.0025944575, + 0.02002585, + 0.0081843035, + -0.0054818345, + 0.0037938312, + -0.021376, + -0.0149891535, + 0.006775467, + -0.002768766, + -0.022120709, + -0.0034067237, + -0.021241143, + 0.011849072, + -0.0086819185, + -0.00019697235, + -0.013666072, + 0.007943947, + 0.007627519, + 0.003599772, + -0.0076106023, + -0.0044981325, + 0.028816868, + -0.008739917, + 0.0072553093, + -0.0105119115, + 0.00381464, + 0.008035421, + 0.007950661, + 0.00068530365, + -0.009898741, + 0.0030974487, + 0.0141418995, + 0.009554195, + 0.006857026, + -0.0071131284, + -0.009802578, + -0.0040713213, + -0.021320116, + 0.019067012, + -0.0031912646, + -0.020890824, + 0.0057409694, + -0.0062651252, + -0.0060876664, + 0.012849065, + 0.0015726165, + -0.0061818906, + -0.010648872, + -0.0035371082, + 0.018041143, + -0.018159835, + 0.013423874, + 0.01530546, + 0.0008696444, + 0.01569375, + -0.0018156114, + -0.007845879, + -0.012982294, + 0.0018712338, + 0.0077399565, + 0.0014243987, + 0.01192824, + 0.014510453, + 0.0034112479, + 0.0016788311, + -0.009293432, + -0.007831967, + 0.024831, + -0.028713739, + -0.0032460599, + -0.022919618, + 0.008364606, + -0.00040217765, + 0.010126134, + 0.004853389, + 0.000106981985, + 0.0019262509, + 0.018024819, + -0.008974372, + -0.00042362008, + -0.009336357, + -0.013317186, + -0.0060473504, + 0.00867207, + -0.017213084, + -0.017611237, + -0.0037938196, + 0.009825168, + 0.004368983, + -0.01300473, + -0.008491524, + 0.032759387, + -0.0075073806, + 0.0042075575, + 0.0016422486, + -0.0041655507, + 0.012251472, + -0.02027894, + 0.0050726263, + -0.003914977, + -0.013095536, + 0.016692141, + -0.013846502, + 0.016801504, + -0.020000007, + 0.015780196, + 0.0029369884, + -0.0020020218, + 0.0158049, + -0.010142994, + -0.004979061, + 0.021189557, + -0.0005056278, + 0.014088399, + 0.0126800705, + -0.01594135, + -0.0011783603, + 0.015942859, + -0.001983587, + -0.0009188087, + 0.0038366695, + 0.027170043, + -0.005473774, + -0.00013074857, + 0.011682235, + 0.0078046597, + 0.0035562874, + 0.0022400073, + 0.012886119, + 0.0033455084, + 0.03412586, + -0.0035939931, + -0.019804811, + -0.001450045, + -0.013857072, + -0.01416591, + 0.019854646, + 0.013035945, + -0.004093718, + 0.0048802774, + 0.0053989785, + -0.023377517, + 0.013081268, + -0.020780435, + 0.013658499, + 0.005340897, + 0.00040710345, + 0.02445704, + -0.0033317, + -0.0125199575, + -0.021833785, + -0.018849034, + -0.029079506, + 0.0004898928, + 0.016391948, + 0.003809064, + -0.0039156214, + -0.010828612, + 0.010330856, + 0.008464947, + -0.0037880877, + -0.0057999217, + -0.07140847, + 0.01006003, + -0.0041445307, + 0.008266761, + -0.005311985, + -0.032335926, + 0.018721372, + 0.021439493, + -0.011798922, + -0.0029923597, + 0.01142312, + 0.011968102, + -0.03294722, + -0.015946968, + 0.009894799, + 0.006825522, + 0.0053546745, + -0.010055941, + 0.0052234195, + -0.010754163, + -0.003336235, + 0.012318369, + -0.017908657, + 0.0074471557, + -0.0114097, + -0.013081481, + 0.005639167, + 0.015740372, + 0.0063889986, + -0.014047661, + 0.009938355, + -0.028224077, + 0.01929915, + -0.01289041, + 0.0049364334, + -0.0015290666, + -0.004122525, + -0.025276305, + 0.012094333, + -0.06281338, + 0.0022735957, + -0.0074202325, + -0.14804429, + -0.011656587, + 0.010275289, + 0.0047942866, + -0.0005372271, + 0.0021211687, + -0.01737935, + 0.013022131, + 0.015445521, + -0.01059692, + -0.008912527, + 0.0017534903, + 0.00090704864, + 0.00051959534, + 0.007003877, + 0.010791395, + -0.0060087964, + -0.008744861, + -0.022330513, + 0.0028605298, + -0.010039402, + 0.0030042864, + 0.014352637, + 0.020213809, + -0.017128328, + 0.0004655207, + 0.019608269, + -0.0030722257, + 0.0057702, + -0.020816311, + 0.0004141264, + 0.015269294, + -0.012568678, + 0.008418415, + -0.00774437, + 0.012524267, + 0.015127165, + -0.00874009, + 0.003379087, + 0.0023810486, + -0.011831773, + 0.039992522, + 0.0051277997, + -0.024159433, + 0.007607922, + -0.12491869, + -0.00013385944, + 0.009971255, + 0.005127408, + -0.0008208937, + -0.010099312, + 0.014101599, + 0.15716882, + -0.011877222, + -0.030268941, + 0.0025665218, + 0.015236212, + -0.011099543, + 0.0019087215, + 0.007858789, + -0.0013265446, + 0.0014010714, + 0.007899191, + 0.032752316, + -0.0015167505, + -0.011594652, + -0.014391309, + 0.0013123996, + 0.00096725096, + 0.003517934, + -0.06024647, + -0.025745634, + -0.0056977593, + 0.010264575, + 0.009080434, + 0.0075298874, + -0.001963013, + -0.0061908956, + -0.0016231594, + -0.0065720626, + -0.008558385, + 0.010461489, + -0.022846729, + -0.0046567367, + 0.013467769, + 0.0049480903, + -0.016364824, + 0.00078728306, + 0.0036025462, + 0.0034704458, + -0.006989038, + -0.006119407, + 0.0027509741, + 0.008926168, + -0.008440965, + 0.014381893, + 0.0019435926, + 0.006236396, + 0.008456362, + -0.015502054, + -0.008109879, + 0.014042967, + -0.00610464, + 0.022108994, + -2.0368116e-05, + -0.011896909, + -0.011214614, + 0.015859647, + 0.014304203, + 0.002503301, + -0.005781656, + -0.018216772, + -0.005107332, + -0.023427503, + 0.012870557, + 0.008733462, + 0.003869639, + 0.007122562, + -0.00028245733, + -0.0012370315, + 0.007976467, + -0.0030053032, + -0.0003862554, + -0.009594697, + 0.004214132, + 0.015323344, + 0.0140319085, + -0.016783018, + 0.0040569003, + 0.0031370998, + 0.01255547, + 0.0081010945, + 0.004597608, + 0.014653819, + -0.010881919, + -0.0027400048, + 0.0029309564, + 0.015940081, + -0.010488371, + 0.010026694, + -0.00024988048, + -0.0018306287, + 0.011608754, + -0.006279168, + 0.005099627, + -0.0020300054, + 0.0025540227, + 0.020975113, + -0.0021214988, + -0.007980166, + -0.0020032811, + 0.001919213, + 0.015866177, + 0.0053089214, + 0.0011500912, + -0.037153643, + -0.007162554, + 0.005038172, + -0.0003459101, + -0.00029811554, + -0.0060949815, + 0.0067296852, + -0.0049952613, + -0.0045913495, + -0.0018282357, + -0.0128674125, + -0.0205871, + 3.29984e-05, + -0.027009554, + -0.008523808, + -0.0036094482, + -0.009514507, + -0.0027317356, + -0.000534841, + -0.00642137, + -0.00949954, + -0.0016902136, + 0.0042186053, + -0.0060009253, + 0.008955231, + 0.0042616385, + 0.0035597195, + 0.024822535, + 0.0038701766, + 0.009247778, + -0.0056363917, + -0.03028555, + -0.012261454, + 0.004808264, + 0.0034534174, + -0.008438677, + 0.022703392, + -0.010286755, + -0.0029985486, + -0.002029844, + 0.012189361, + 0.0022201708, + 0.024444278, + 0.008692711, + 0.00033321802, + -0.006918189, + -0.009906663, + -0.021065399, + 0.0017365889, + 0.0038714383, + -0.01146002, + -0.005695929, + 0.0136236455, + -0.012383124, + 0.0049548266, + -0.0019298265, + -0.009133705, + 0.0037257236, + -0.0034859076, + -0.009674609, + 0.0028380465, + -0.008408325, + -0.014348723, + -0.013032569, + 0.023641769, + -0.013026533, + -0.008958854, + 0.0086282, + 0.0011653292, + -0.00012710429, + 0.023304516, + 0.007536961, + -0.016121544, + 0.013512596, + 0.016179657, + 0.002764801, + 0.0055803484, + -0.008541389, + 0.014519642, + 0.013343512, + 0.025049152, + -0.020564495, + 0.0048943223, + -0.02374938, + 0.013459238, + -0.012726988, + 0.005789575, + 0.013163915, + 0.004431687, + -0.0029504322, + 0.0060082343, + -0.0016516849, + -0.011800513, + -0.029592216, + -0.013557013, + -0.013295235, + -0.030126525, + -0.0056508062, + -0.0023563, + -0.009020173, + -0.002678054, + -0.017446466, + -0.0094066225, + 0.00041972683, + -0.025415294, + 0.007893892, + 0.007615552, + 0.014444293, + -0.0055864854, + 0.007341343, + 0.0074760746, + 0.007633242, + 0.015048061, + 0.015688792, + -0.0055214004, + 0.0023507455, + -0.024353081, + -0.0023434556, + 0.014327491, + 0.0030884864, + -0.013537927, + 0.00884923, + -0.008928762, + -0.0040857736, + 0.009974, + 0.012013531, + -0.008256043, + 0.0064773154, + -0.0023738826, + 0.001223818, + -0.0068574455, + -0.00012896747, + -0.024541218, + 0.009534192, + 0.0042668683, + -0.02659646, + 0.0009719781, + -0.007945843, + 0.008536529, + 0.0022086427, + -0.0073247547, + 0.025194552, + -0.0019298686, + 0.002036343, + -0.017242644, + -0.015562206, + 0.0016967627, + 0.008603264, + 0.0029286486, + -0.003824279, + 0.013932157, + 0.00973954, + -0.012137794, + -0.003032404, + -0.019269783, + -0.009771541, + -0.0007226373, + 0.02475148, + 0.0141635435, + 0.007586969, + -0.016065214, + 0.0049573043, + -0.012032935, + -0.021324394, + 0.009315734, + 0.0064129615, + 0.00014927378, + 0.008744266, + 0.012062963, + -0.006985634, + 0.008508218, + -0.011440213, + 0.00964045, + 0.01133469, + 0.00032885643, + -0.0045522386, + -0.00053115684, + -0.020326342, + 0.021684296, + 0.0116345035, + -0.0022538928, + 0.0088677835, + 0.014596996, + -0.019113265, + 0.014480809, + 0.0007274648, + -0.01183125, + -0.011485111, + 0.007765621, + -0.0020268657, + -0.0075831646, + 0.0022482022, + -0.023872044, + 0.00085110904, + 0.014016346, + -0.0069766473, + 0.012382482, + -0.0087001575, + 0.009347098, + 0.01530687, + -0.021898897, + 0.017915156, + 0.011825634, + 0.0032218006, + -0.014515737, + 0.009235042, + 0.005054707, + -0.00023745962, + -0.004250935, + -0.009820677, + -0.013538797, + -0.0012116351, + -0.0017041988, + -0.01726087, + -0.008089675, + 0.0031626658, + -0.00048189415, + 0.0014024241, + 0.01950393, + 0.015587983, + 0.011090538, + -0.0016524532, + 0.0005236974, + -0.0058108545, + 0.004716844, + -0.02033461, + -0.0009877229, + 0.018212706, + -0.0093770325, + 0.003982428, + -0.00014444556, + 0.0062729325, + 0.014332167, + -0.0040719965, + -0.0061802776, + 0.020435235, + 0.011924934, + 0.00204727, + 0.01323204, + 0.002210462, + -0.009072813, + 0.0107627595, + 0.0007087078, + 0.008023027, + 0.017904492, + 0.0017127544, + 0.02589081, + 0.0038643256, + -0.02423307, + -0.00029195778, + 0.007995035, + -0.00452324, + -0.004220507, + -0.014414159, + -0.0031739096, + -0.010584775, + 0.0058303205, + -0.001338251, + 0.003273328, + -0.008009112, + -0.01257899, + 0.012357312, + -0.002497284, + -0.0009386429, + 0.012057635, + 0.0038349011, + 0.0038896233, + 0.0023437173, + -0.009286228, + -0.012549473, + 0.0029719395, + -0.007542319, + -0.0027664232, + -0.0067998264, + -0.021942759, + 0.002787046, + -0.01490971, + 0.009879314, + -0.0096436925, + -0.00020947852, + -0.020315733, + -0.00096788775, + -0.009413338, + -0.009304855, + -0.012167087, + 0.0020818643, + -0.0065099327, + -0.00909283, + 0.012888071, + 0.023298446, + 0.0064363447, + -0.013862118, + 0.0060772416, + -0.01475394, + 0.0044472455, + 0.017185934, + 0.019436602, + 0.009869137, + 0.018604781, + 0.025304424, + -0.010937892, + -0.002263634, + -0.0007122261, + -0.014629204, + 0.0034150542, + 0.019551098, + -0.008361577, + 0.0070153293, + -0.0011046828, + 0.015581956, + -0.0020440167, + -0.017529536, + 0.007713052, + 0.019167863, + 0.00826607, + -0.0058899964, + 0.020170985, + 0.0047977166, + 0.02247314, + -0.004310414, + -0.0007319175, + -0.016704394, + -0.007411759, + -0.0018499614, + -0.039994832, + 0.013458039, + -0.012305411, + 0.010976608, + -0.007559491, + -0.0075970194, + -0.00020227736, + 0.003145673, + 0.0058201402, + 0.0036488434, + 0.019020593, + -0.015467047, + -0.0036180092, + 0.019398516, + -0.0025742245, + 0.0028556206, + 0.0031409739, + -0.031577792, + -0.0050074644, + 0.007063734, + -0.020470826, + -0.033115704, + 0.009944245, + 0.004177662, + 0.024237374, + -0.0019437312, + -0.00014068873, + -0.002508166, + 0.01317239, + 0.008986462, + -0.010209303, + -0.007866712, + -0.020596353, + 5.369359e-06, + -0.0078058653, + -0.0012830403, + -0.044026587, + -0.005174016, + -0.03564344, + 0.0070926305, + -0.0019275427, + 0.0009810884, + -0.016606791, + 0.0074037476, + 0.0030123368, + -0.06546688, + 0.0034776453, + 0.011120295, + 0.01001797, + 0.019042116, + 0.008829632, + 0.0069338735, + -0.001874668, + -0.011883109, + -0.012681935, + -0.0067498176, + -0.014146643, + 0.014275228, + 0.0014637288, + -0.005445066, + -0.023291945, + -0.0005322656, + 0.0022733167, + 0.014369217, + -0.0020721909, + 0.006157031, + -0.008283586, + -0.0047913403, + 0.02477168, + 0.003429128, + -0.008460797, + -0.020280162, + 0.019304782, + -0.019682132, + 0.003928251, + -0.017428666, + -0.017602952, + -0.0022491468, + -0.0036273727, + -0.016352264, + 0.0048243003, + -0.000685208, + 0.012863391, + -0.014002882, + -0.006907873, + -0.009265254, + 0.006359435, + 0.010224605, + 0.016601833, + 0.016259989, + 0.008347795, + 0.005522605, + -0.011284972, + 0.0020927084, + -0.0020404204, + 0.009591119, + -0.008249789, + -0.020043658, + -0.013941785, + -0.0064011873, + 0.009890922, + 0.007117129, + 0.025140274, + 0.0005499107, + 0.0003483327, + -0.017478283, + 0.018341277, + 0.029016636, + 0.0064986465, + -0.0061193053, + 0.013072971, + 0.014585744, + -0.012353626, + -0.0027855241, + -0.013575549, + 0.015350145, + 0.009848926, + -0.008276763, + -0.0020121688, + 0.010690222, + -0.0008974336, + -0.0116546415, + -0.0031986532, + 0.0072288, + 0.025728708, + -0.0031249374, + -0.012022611, + -0.011825202, + -0.0037892296, + 0.013141322, + -0.0177478, + -0.0074130623, + 0.005900281, + -0.00014823642, + -0.007070036, + 0.0039716936, + -0.005940218, + 0.018813876, + 0.0015189631, + -0.0053166742, + 0.022962367, + 0.020992372, + 0.016011156, + -0.01592979, + 0.022691514, + -0.0010972809, + 0.0020522869, + -0.017457156, + -0.009170573, + 0.01099267, + -0.011785615, + 0.026530871, + -0.00424621, + 0.011758892, + -0.00812807, + -0.005622689, + 0.004409983, + -0.014283218, + -0.005247292, + -0.011156406, + -0.004226873, + 0.0074621635, + -0.019091593, + 0.028141344, + -0.021888386, + 0.013931055, + 0.007820985, + 0.0055479384, + -0.004856852, + -0.00091494055, + 0.010230342, + -0.011932342, + 0.006545128, + -0.016224056, + 0.0007627138, + 0.0006399727, + 0.0071868007, + 0.03527624, + -0.009639844, + -0.018593716, + -0.00810965, + -0.01663213, + -0.015932452, + -0.014552818, + 0.011083051, + 0.009902237, + 0.010028546, + 0.0030299977, + -0.013098521, + -0.0046565356, + -0.0006407657, + -0.015523613, + 0.026782611, + -0.010173317, + -0.01612395, + -0.01702718, + -0.0039600846, + 0.018101834, + 0.032301784, + 0.0037288303, + 0.010824948, + 0.0208349, + 0.011633866, + -0.009939591, + 0.013894606, + 0.019552313, + -0.017619614, + 0.019269021, + -0.009312429, + -0.025078297, + 0.00013920297, + -0.009347357, + 0.004537545, + 0.022204338, + -0.0034044806, + -0.010558622, + -0.009329347, + -0.0019748297, + 0.00063408585, + -0.012375084, + -0.0018504508, + 0.004881047, + -0.0067747557, + -0.00084659655, + 0.015039512, + 0.0010219413, + 0.0017379763, + 0.015433696, + 0.00058014237, + -0.012020118, + 0.010022584, + 0.015457851, + 0.002211423, + 0.0016565683, + -0.025139315, + -0.021459, + 0.014618809, + -0.012526605, + -0.00740274, + 0.0126809515, + -0.0019000167, + 0.00063539343, + -0.00874152, + 0.015430644, + -0.017658077, + 0.0075533343, + -0.006519918, + 0.024877325, + 0.009812779, + -0.006363789, + -0.012374389, + 0.02541616, + 0.18462649, + 0.11526792, + 0.0052508377, + -0.00044761703, + -0.009050153, + 0.010650732, + 0.006017416, + 0.00018005799, + 0.00072948664, + 0.009898978, + 0.0014497037, + -0.018939748, + 0.010775164, + -0.006832922, + -0.013447669, + -0.0062945806, + 0.012257294, + 0.009475258, + 0.007595337, + 0.02188573, + 0.0018472828, + 0.009045042, + 0.012031416, + -0.00010125814, + -0.009343504, + -0.0020236033, + 0.014092441, + 0.0013784328, + 0.0042546424, + -0.005959832, + 0.007853338, + -0.0016118246, + -0.0025447453, + -0.004571399, + -0.028379625, + -0.036430914, + -0.0010068644, + -0.0051855748, + 0.007776854, + -0.038226184, + 0.0037884333, + 0.010283509, + 0.0072484445, + 0.023919944, + 0.014086368, + -0.00018560025, + 0.0049170493, + 0.027068036, + -0.00013420933, + 0.01723212, + -0.013389953, + -0.0051003727, + -0.00021509852, + 0.003870666, + -0.013807452, + 0.0013561611, + 0.013875184, + 0.006023632, + 0.016822927, + -0.015518509, + 0.0020085021, + -0.008048276, + 0.0019628382, + -0.0040684436, + 0.008659485, + 0.0039245924, + 0.00551558, + -0.015371306, + -0.00023036181, + 0.005161187, + -0.013345614, + 0.025713902, + -0.009256881, + 0.008888726, + -0.013973488, + 0.0042819027, + 0.007903922, + 0.004387427, + -0.010834162, + -0.010718152, + -0.0060921633, + 0.003031888, + 0.0014104783, + 0.017205963, + -0.009245757, + 0.009622233, + 0.0075305286, + 0.026649052, + 0.13736066, + 0.008154462, + -0.015039281, + -0.026480269, + 0.008656098, + -0.020609986, + -0.015150655, + 0.04014752, + -0.007889611, + -0.0011135179, + -0.0036446534, + 0.006699304, + 0.015556202, + -0.0056945905, + -0.0024478137, + 0.0092476895, + 0.009735379, + 0.091599174, + 0.0056021, + 0.019278813, + -0.016272712, + -0.0046410807, + 0.0021075646, + 0.016959798, + 0.0029414953, + 0.011044458, + -0.025402395, + -0.008037845, + -0.023347871, + -0.002494339, + -0.10772318, + -0.0024528082, + -0.0043749413, + 0.0057320497, + 0.0024924239, + 0.012760386, + -0.015916904, + 0.00067064655, + 0.0026036748, + 0.016109236, + -0.004944883, + 0.009831449, + -0.004012239, + 0.0056276266, + -0.018037086, + 0.007668524, + -0.002150356, + -0.009240703, + -0.0008202475, + -0.005584652, + 0.005159349, + 0.0045460872, + -0.014059115, + 0.0019225504, + -0.02081118, + 0.024462216, + 0.004441734, + -0.010375391, + 0.035441678, + -0.017530851, + -0.003076986, + -0.0053605125, + -0.022472676, + -0.015271784, + -0.0030105538, + 0.008215176, + -0.0025740666, + 0.004725247, + 0.0098277535, + -0.0061249463, + -0.015420087, + -0.029296102, + 0.008803563, + -0.010486231, + 0.017584939, + -0.0052096215, + 0.0015289391, + 0.0026822183, + -0.028251667, + -0.008381831, + 0.04681397, + 0.007581115, + 0.002155509, + 0.0025120515, + -0.005222936, + -0.0050298213, + -0.018340815, + -0.00022215371, + 0.0017728354, + -0.0126045495, + 0.0075326613, + 0.037906498, + -0.016870866, + -0.0037684212, + 0.0011321992, + 0.0030101482, + 0.013378535, + -0.00073598267, + 0.0023051137, + 0.0004901167, + -0.003971311, + 0.014696972, + 0.007278988, + -0.027982445, + -0.016460788, + -0.00805061, + 0.013027491, + -0.0026496765, + -0.020936437, + -0.013776074, + 0.0026636526, + -0.019884296, + 0.013538218, + 0.13639618, + 0.0024809542, + -0.007800207, + 0.023744622, + -0.019822184, + -0.00086897163, + 0.029729152, + 0.009492779, + -0.018486612, + -0.019375246, + 0.00038948472, + -0.004129453, + 0.0067316787, + 0.004018186, + 0.015620979, + -0.021984767, + 0.023398893, + -0.0041534244, + 0.010622007, + -0.0062215254, + -0.0059538176, + 0.0053777047, + -0.020272952, + -0.013718726, + -0.021421202, + 0.0023063675, + 0.009612504, + 0.0043075345, + 0.0007069897, + -0.021300059, + 0.005849679, + 0.015077473, + 0.025122648, + -0.0032336756, + 0.009730938, + 0.0044975094, + -0.008755698, + 0.0002829777, + -0.010012715, + -0.00068603334, + -0.0074916887, + -0.00019677772, + 0.004458541, + -0.00085575925, + -0.021948466, + 0.18724197, + 0.014525507, + 0.00787517, + -0.015456176, + 0.0012082667, + 0.0047056684, + 0.009015966, + 0.007880215, + -0.0012981875, + -0.00782629, + -0.003325395, + -0.020542271, + 0.0057972404, + 0.005876524, + -0.00036326455, + 0.0063252975, + 0.021228516, + 0.007923697, + -0.0024084728, + 0.016469555, + 0.009583652, + 0.008255333, + -0.018780245, + -0.024231758, + -0.0091475155, + 0.010054853, + -0.008968434, + -0.003836989, + -0.022054574, + 0.014087555, + 0.0146886315, + 0.015563549, + 0.012121979, + 0.0020204158, + 0.0052181636, + -0.008518424, + -0.009113635, + 0.019491484, + 0.014242927, + -0.014301521, + 0.012048937, + 0.028247222, + 0.020285107, + -0.005643046, + -0.013249632, + -0.0009739255, + -0.014178617, + -0.010769364, + -0.0102847265, + -0.004491722, + 0.0133311935, + -0.004458599, + 0.011353515, + -0.019393787, + 0.0060032266, + -0.005040102, + -0.00056236185, + -0.00016347737, + -0.0054768613, + 0.0037522588, + -0.014941016, + 0.0060006403, + 0.0023957035, + -0.0047713965, + -0.0129385395, + -0.01941618, + -0.0048729368 + ] + }, + { + "values": [ + -0.011356372, + -0.0015643187, + 0.006940412, + -0.0695513, + -0.014277231, + -0.00608562, + -0.015253285, + 0.012397456, + -0.0020564406, + -0.019248847, + -0.0030593956, + -0.041422624, + -0.015534083, + -0.016901894, + 0.1339463, + -0.00835415, + -0.004246982, + 0.011757021, + -0.018239528, + -0.022059442, + -0.0056854556, + -0.0003631829, + 0.017896356, + 0.010943699, + -0.0039658127, + 0.027455948, + 0.024907239, + 0.017921174, + 0.045243092, + 0.031953923, + 0.010292475, + -0.0048823417, + -0.019748168, + 0.00962713, + -0.003926852, + 0.0026752716, + 0.020253617, + 0.0020435834, + -0.023919143, + 0.027034534, + -0.01121405, + 0.018636145, + 0.007251016, + 0.009069435, + -0.019695725, + 0.019772954, + -0.0074826246, + -0.01359191, + -0.029641947, + -0.00061863655, + -0.0012538084, + 0.0038108139, + -0.006884625, + -0.15040329, + 0.0011209773, + 0.00096220634, + -0.010824517, + 0.0053731203, + 0.010495687, + -0.03381177, + 0.0028314698, + -0.013522796, + 0.0020264755, + -0.007822112, + -0.0007320529, + -0.020087475, + 0.014569199, + 0.008258561, + 0.0063004615, + 0.008418023, + -0.015069067, + 0.010568622, + 0.00435969, + -0.021043504, + -0.019954255, + -0.022011595, + 0.021862756, + -0.032629866, + 0.009926206, + 0.048089348, + -0.0030809112, + -0.030644828, + 0.0011040508, + -0.022084821, + 0.034900762, + -0.014519243, + -0.022227632, + -0.005200174, + -0.019871647, + -0.016274001, + 0.0003527937, + -0.015329886, + 0.005245006, + 0.024773927, + 0.0024494678, + 0.006610645, + 0.027522156, + 5.930727e-05, + 0.0034106625, + 0.0040127966, + -0.019215174, + 0.008872746, + 0.0039984155, + -0.009922538, + -0.014564514, + -0.010792994, + 0.009118895, + -0.006617433, + -0.010620741, + 0.029610517, + -0.006490515, + -0.024592197, + 0.00016154787, + 0.0374456, + 0.0044641867, + -0.19257408, + 0.0044518868, + 0.016376976, + -0.021648701, + -0.006250822, + 0.0006244062, + 0.009241207, + 0.023044363, + -0.030791013, + -0.007211988, + 0.004745758, + -0.0093838805, + -0.025301026, + -0.0016691567, + 0.012205531, + 0.012647684, + -0.0010167366, + 0.012520264, + 0.019575004, + -0.021644857, + 0.034284946, + -0.0036405958, + 0.003536381, + -0.01221147, + 0.009759821, + 0.0075744367, + 0.009010747, + -0.00085691776, + 0.00092941226, + -0.0053795045, + -0.010510325, + -0.0041344967, + 0.020551285, + 0.003460281, + -0.017402556, + -0.016465869, + 0.0045980625, + 0.0038928867, + -0.036814794, + -0.004741056, + -0.07454537, + -0.0027222333, + 0.007792188, + -0.01524714, + 0.0058292695, + 0.003339585, + -0.0005464279, + -0.008375368, + 0.0021887554, + -0.0048998403, + -0.004632414, + 0.009825378, + 0.013426055, + 0.03206924, + 0.006843452, + -0.004680772, + 0.010776324, + -0.017129472, + -0.006650697, + -0.012053894, + -0.0037889888, + 0.007563951, + -0.0034586242, + -0.011546459, + 1.633877e-05, + -0.0019739259, + -0.018699413, + 0.022239283, + 0.013666541, + 0.016143514, + -0.015301619, + -0.023823874, + 0.031074166, + 0.0142057715, + -0.010149656, + -0.029914085, + -0.014722282, + 0.00953395, + -0.0031934795, + 0.021776384, + 0.00575583, + -0.011929125, + 0.012976054, + 0.0052890982, + 0.019452218, + 0.012004151, + -0.022617422, + -0.011497034, + 0.03584464, + 0.011971721, + -0.023311151, + 0.019762157, + -0.025777176, + 0.014609336, + 0.03711982, + 0.019867003, + -0.015308836, + 0.0079223635, + 0.011510751, + 0.023890875, + -0.0063841688, + 0.016726092, + -0.0031567654, + -0.012494147, + -0.003146224, + 0.0063380734, + 0.012161903, + -0.026212512, + -0.020376306, + -0.03560666, + -0.00083222665, + -0.0133408485, + -0.004425185, + 0.02108371, + 0.0077521657, + -0.0036927753, + 0.015750706, + 0.0014796691, + 0.008500428, + -0.0014056762, + 0.00336078, + 0.0017881293, + -0.015989428, + 0.034008704, + 0.018444784, + -0.014575025, + -0.023295037, + 0.010438134, + 0.028411075, + -0.0032395176, + -0.002999312, + 0.014894236, + -0.0018881249, + 0.0076644085, + 0.0001475084, + 0.0055446946, + 0.021953138, + 0.022924652, + -0.022466915, + -0.021613471, + -0.013855027, + -0.015609339, + 0.0068970816, + -0.0028976088, + -0.0063227084, + -0.004972264, + 0.011186241, + -0.013560266, + 0.019904397, + 0.0061026393, + -0.015844816, + 0.0102151595, + 0.016454188, + -0.030912794, + 0.010924869, + 0.016724518, + -0.009218195, + 0.008908378, + -0.008730701, + -0.006750726, + 0.0021124415, + -0.106467456, + 0.0020638192, + -0.005006098, + 0.0060224296, + 0.0056839506, + 0.0060745967, + 0.007621489, + 0.0072338884, + -0.002422019, + 0.013428669, + -0.0045873807, + 0.0043138424, + -0.017422881, + 0.01770088, + 0.011015609, + -0.000713468, + -0.014139174, + 0.0034440353, + 3.2150154e-05, + -0.049930714, + 0.02398744, + 0.00089083525, + -0.04630847, + 0.013554219, + 0.003895039, + 0.0016131033, + 0.007969721, + 0.03641974, + 0.0063746814, + -0.00759486, + 0.019922761, + -0.008358785, + 0.015578898, + 0.009683492, + 0.004518802, + -0.0169103, + 0.0044145444, + -0.006072572, + -0.0068779043, + -0.009900337, + -0.001055172, + -0.0063989325, + -0.012396371, + -0.006946078, + -0.016529784, + 0.0012409643, + 0.0056966455, + -0.022325704, + -0.014233502, + -0.014261781, + -0.008899122, + 0.0004212796, + -0.010937541, + -0.036249578, + 0.011125472, + -0.0026569073, + 0.048461277, + -0.013283592, + -0.024057794, + -0.0019321869, + 0.01201224, + 0.003911592, + 0.002456632, + -0.005347178, + 0.009491515, + -0.00897072, + 0.024522187, + 0.007720112, + -0.015002548, + -0.011283099, + -0.0050593847, + 0.0074890237, + -0.025346108, + 0.0037559886, + 0.002654471, + 0.0053346343, + 0.013926957, + 0.021774583, + -0.021284038, + 0.008051565, + 0.0174297, + 0.0015265369, + -0.015859796, + 0.016570542, + 0.015472477, + 0.013415663, + 0.0098487735, + -0.0122314105, + 0.0037345926, + 0.0076007335, + 0.03144872, + -0.0031300795, + 0.00463994, + 0.0117840925, + 0.005391251, + -0.0188709, + -0.004905558, + -0.003845376, + -0.01849524, + -0.015301668, + -0.016042594, + 0.006571145, + -0.0012803586, + 0.0047535175, + -0.025967386, + 0.007754579, + 0.0011995498, + 0.00020090271, + -0.0051516267, + -0.0047526616, + 0.02321675, + -0.004826954, + -0.0110527575, + 0.0013740935, + -0.00026974297, + 0.00024765776, + 0.01556319, + 0.027702842, + 0.02151037, + -0.016465958, + 0.0039781206, + 0.021894017, + 0.028636051, + -0.005563864, + 0.042026572, + -0.004045257, + -0.009650651, + 0.026554042, + -0.003220114, + 0.0022823836, + -0.03380792, + -0.018554622, + -0.023319522, + -0.022678532, + -0.005341519, + -0.01259934, + 0.035029422, + 0.01018737, + -0.0102407, + 0.008759709, + -0.023773616, + -0.009158278, + 0.019353177, + -0.01673253, + 0.0012347763, + 0.009630206, + 0.03201469, + 0.027485743, + -0.015405836, + -0.04631233, + 0.0062647667, + -0.009584867, + 0.031741206, + -0.00137693, + 0.021454006, + 0.013577893, + -0.0048466753, + 0.0069301357, + -0.005214651, + 0.0033585718, + -0.008341199, + 0.0060810004, + 0.0068276282, + 0.0065130005, + 0.008643305, + -0.0075367317, + -0.014641127, + 0.004067271, + 0.016193237, + 0.015292569, + 0.04051047, + 0.018874682, + 0.0038180475, + -0.020189617, + 0.011913462, + 0.0074097975, + -0.0043461625, + -0.00265419, + 0.0061055706, + 0.01133151, + 0.0013163623, + 0.001788866, + -0.007851912, + -0.00067473593, + -0.004289242, + -0.006348917, + 0.0071399515, + 0.01256274, + -0.0031403757, + 0.028730799, + 0.018974662, + 0.034301158, + 0.0053011645, + 0.0065644016, + 0.007436966, + 0.021405585, + -0.02164511, + -0.009620632, + 0.01676397, + -0.008920807, + -0.022074211, + 0.023301424, + -0.0032079106, + -0.0046090926, + -0.007064362, + 0.004536588, + 0.008722175, + 0.012887329, + 0.013396753, + 0.011746982, + -0.004835822, + -0.0026557052, + -0.02656728, + -0.0089153, + 0.02483804, + -0.01308985, + -0.004843113, + -0.00030795936, + -0.008598704, + 0.019603508, + 0.006118413, + -0.0037323073, + 0.02637432, + 0.009111949, + 0.006054353, + 0.0021408899, + -0.0071085487, + 0.017556095, + -0.005639557, + -0.037044205, + -0.0033567362, + 0.014252128, + -0.00039132568, + -0.01097906, + -0.0051748925, + 0.019075343, + 0.010544442, + 0.002551943, + 0.028937051, + 0.009977698, + 0.0065072626, + 7.385149e-05, + -0.007359984, + 0.007840405, + -0.0049444376, + -0.004852513, + 0.0007490805, + -0.023566239, + 0.011576171, + -0.010046397, + -0.011901409, + 0.005284072, + -0.013865245, + 0.031651136, + 0.013167191, + 0.037778236, + -0.016764404, + 0.026208172, + -0.007882218, + 0.017568093, + 0.010317533, + 0.017425437, + -0.002219533, + -0.0066865403, + 0.015200744, + 0.00047581297, + -0.0019332154, + -0.013776021, + 0.012714228, + -0.11892912, + 0.0041166907, + 0.002595623, + -0.0077322614, + -0.016093776, + -0.001642697, + -0.004954328, + 0.00084406044, + 0.004102406, + -0.010345683, + 0.01127017, + 0.0019149025, + -0.008549419, + -0.013363107, + -0.017550968, + -0.013187732, + 0.004123459, + -0.0041775503, + 0.016753728, + 0.003047445, + 0.004422253, + 0.024276758, + -0.014925454, + 0.031443365, + -0.012367492, + 0.01588069, + -0.0118648885, + 0.0006690838, + -0.004195132, + 0.023163866, + -0.032142922, + 0.012601654, + -0.003190937, + 0.0064007174, + -0.004301935, + -0.0031436787, + 0.0072370786, + 0.010492898, + 0.008509595, + -0.009273948, + -0.01048006, + 0.0005803389, + 0.0018534982, + -0.014552013, + -0.02806164, + 0.0004898866, + 0.009415889, + 0.0030072709, + 0.004941071, + 0.011133256, + -0.012912959, + 0.018219193, + 0.0046548015, + 0.0041264603, + 0.025492085, + -0.01736405, + 0.0047011897, + -0.006157784, + -0.041120082, + -0.0014350628, + -0.031127343, + -0.016746916, + 0.017445453, + -0.0052278214, + -0.000933122, + 0.008946297, + 0.008582351, + 0.014472826, + -0.0067351796, + -0.0008413602, + 0.0013419894, + -0.01283518, + 0.006898187, + 0.02043981, + -0.009029089, + 0.042770922, + 0.008724175, + 0.019683521, + -0.010175809, + 0.0025740822, + -0.014724838, + -0.012344782, + -0.06510453, + -0.012094456, + -0.018677339, + 0.019583933, + 0.006222171, + -0.0110567035, + 0.008144406, + -0.0064377766, + 0.01550932, + -0.0039772796, + 0.0033254914, + -0.0001436172, + 0.0285124, + -0.01995804, + -0.026183423, + 0.0042490596, + -0.010264241, + 0.009604565, + 0.01789298, + -0.0023681058, + -0.017027423, + -0.0053194496, + 0.023963483, + -0.026104815, + -0.010716933, + 0.0576653, + 0.00016998083, + -0.012690323, + 0.02107066, + -0.001930552, + -0.007828616, + -0.123642996, + 0.005778421, + 0.0033005832, + 0.01895601, + 0.02482674, + -0.030660117, + -0.021415126, + 0.0045565595, + -0.013043139, + 0.015605994, + 0.025615556, + -0.005619454, + -0.006808907, + 0.032819822, + -0.0016608462, + 0.1435261, + -0.015998596, + -0.013841714, + -0.0033281425, + -0.01534829, + 0.021911478, + -0.008518105, + 0.0037053246, + 0.022139728, + -0.01738206, + 0.0020401499, + -0.008615859, + -0.003597944, + 0.004162845, + -0.0028069245, + 0.025553549, + 0.015760368, + -0.022565369, + 0.018463278, + -0.007114361, + -0.0049034785, + -0.015232511, + -0.008038109, + -0.015196731, + 0.015569298, + 0.0114023555, + 0.0089955395, + 0.019144816, + -0.01616706, + 0.01188703, + -0.0003877326, + 0.0015636977, + -0.00848106, + -0.012874251, + -0.013807914, + -0.021204738, + -0.056561194, + 0.016762927, + 0.0052135885, + 0.016360197, + -0.004957109, + 0.0020465148, + 0.004266214, + -0.008714705, + 0.013819767, + -0.018437468, + 0.021831883, + 0.021854142, + -0.006207223, + -0.0075777997, + -0.004821457, + 0.029921867, + -0.01167932, + -0.011503468, + 0.0074332305, + -0.017403072, + 0.024281798, + 0.019173196, + -0.0059823673, + -0.013850229, + -0.024292627, + 0.0038239607, + 0.012407975, + 0.0033054827, + -0.025209635, + 0.0112229325, + -0.0053873905, + 0.004018981, + 0.0058250343, + -0.0058148494, + -0.024777751, + 0.009614165, + 0.033469845, + 0.009288712, + -0.018214568, + -0.013590706, + -0.010404369, + 0.010083641, + 0.008714085, + -0.0057286303, + -0.009627107, + 0.0041128453, + 0.015697256, + -0.0023713703, + -0.012743614, + 0.0014320165, + -0.017676286, + 0.014639154, + -0.0055330656, + 0.0046021948, + 0.010500406, + 0.014912364, + 0.014059079, + -0.011089829, + 0.0066507356, + -0.017289298, + -0.016567344, + -0.006567532, + -0.0025998591, + -0.006673591, + 0.013566785, + -0.0050410694, + -0.012857208, + 0.0031609214, + -0.0035217663, + -0.0053695217, + -0.00043204305, + -0.015910141, + 0.0059679984, + 0.010319783, + -0.006147567, + 0.017751645, + -0.007025656, + 0.01065498, + -0.006706778, + 0.01188064, + -0.005971546, + 0.016687432, + 0.007160189, + 0.015896833, + 0.009330132, + 0.016767507, + -0.010778362, + 0.0021337431, + 0.0068628658, + 0.015386222, + -0.0023464065, + 0.00011200165, + 0.001561151, + 0.0060842354, + 0.026389211, + 0.0031668348, + -0.004196732, + 0.01113189, + -0.0026966743, + -0.008025475, + -0.005868233, + 0.00044564568, + -0.0006434469, + -0.0008434213, + -0.014440215, + 0.020417403, + -0.005999354, + -0.010992055, + -0.0019912333, + 0.016951494, + -0.0063942918, + 0.0028636267, + 0.00018819951, + -0.0033800784, + -0.010059666, + -0.015698621, + -0.011071578, + -0.0104190465, + -0.014773434, + 0.017283667, + -0.0018774546, + -0.011928117, + 0.01006757, + 0.0034079389, + 0.0129263215, + -0.011793134, + -0.004564047, + -0.016569082, + 0.0029433877, + 0.0035817628, + 0.008942418, + -0.013224822, + 0.016400209, + 0.0039348295, + 0.017882299, + -0.014454026, + 0.016200565, + -0.0030958862, + -0.008608655, + -0.0075227264, + -0.01817981, + 0.018628841, + -0.016012974, + 0.0016343109, + -0.0014446508, + -0.007721128, + -5.2712567e-05, + -0.011465926, + 0.014293765, + 0.0027937996, + -0.014860384, + 0.010652724, + 0.00029150042, + -0.0020524675, + -0.003402988, + 0.0023475902, + -0.0035119506, + -0.010836365, + 0.0035472193, + 0.0016351377, + 0.004794468, + 0.011058052, + 0.010078212, + -0.0056504025, + -0.007514011, + 0.00019303964, + -0.0050007557, + -0.0057003996, + -0.004617908, + 0.015033327, + 0.009599419, + -0.009672616, + -0.014831479, + 0.0012446705, + 0.003027903, + 0.014438214, + 0.016069923, + 0.011828358, + 0.009265109, + 0.0059748064, + -0.0037470036, + 0.01736266, + -0.0034300634, + -0.0038624704, + 0.007469776, + 0.0026284698, + -0.010469661, + 0.011114164, + 0.0064538405, + 0.015512753, + -0.00095553626, + -0.0016856679, + -0.012497209, + -0.00090615405, + -0.002584962, + -0.012830038, + -0.0009892315, + -0.0054095765, + 0.01586925, + -0.0022410052, + 0.019982502, + 0.012175264, + -0.007365256, + -0.010359555, + -0.00049507717, + 0.0032378915, + -0.008724198, + 0.0046281097, + 0.007507714, + 0.008505038, + -0.008114849, + 0.00957432, + -0.007182417, + 0.009187998, + -0.0037966056, + -0.004423096, + -0.0070843096, + -0.023341706, + -0.013627857, + 0.005849084, + -0.008854424, + 0.008704619, + 0.015977703, + -0.0019682853, + 0.0030169643, + -0.0039936206, + 0.01268272, + 0.016087491, + -0.008827313, + -0.0027979272, + -0.008544625, + 0.0019520052, + -0.016682945, + 0.0048607867, + 0.008609042, + -0.004250315, + 0.0050311494, + 0.008817815, + 0.006093435, + 0.016372237, + 0.008161327, + -0.016976174, + 0.031415496, + -0.008080273, + -0.009593946, + -0.0024438566, + -0.013279224, + -0.01383943, + -0.0037277883, + -0.0051965625, + -0.00426908, + 0.009550029, + -0.014751446, + 0.022707487, + -0.0025195747, + 0.005491575, + -0.006499165, + 0.0150219165, + 0.012983108, + 0.101422116, + 0.02038069, + 0.002826284, + -0.0003142321, + 0.011135647, + 0.00496135, + 0.006396164, + 0.0024146824, + -0.010991748, + 0.0010179372, + -0.012686354, + -0.0045452313, + 0.003702823, + 0.0011676879, + 0.0060163736, + 0.0015398063, + -0.016070701, + -0.012163638, + -0.0009453638, + 0.008947219, + -0.021217266, + -0.0021715339, + 0.002422699, + -0.008896377, + 0.007559455, + -0.007397124, + 0.019267088, + 0.014789302, + -0.01538658, + -0.012409573, + 0.0073800753, + -0.001090143, + -0.0028410985, + 0.010382503, + -0.018319145, + 0.009088035, + -0.0042900136, + -0.0065580998, + -0.009691377, + 0.024114624, + 0.0018690065, + 0.014733644, + 0.013133902, + 0.0029589047, + -0.0049598413, + 0.016138937, + 0.0009210172, + 0.007663455, + -0.008443463, + -0.0034278536, + 0.0031944357, + -0.0073026135, + 0.0022137435, + -0.0067562754, + 0.014946001, + 0.0054829568, + -0.008352979, + 0.00059035956, + -0.009516653, + 0.009845465, + -0.011419963, + 0.03018058, + -0.009561157, + -0.00459755, + 0.0013397059, + -0.01072514, + -0.007903853, + 0.0026604026, + -0.0017963775, + -0.0030158476, + -0.0066208052, + 0.0023093177, + -0.0185054, + -0.007723769, + 0.06239071, + 0.0069241957, + 0.005030298, + -0.013303888, + -0.007328129, + -0.0037552929, + 0.0031871465, + 0.003826503, + 0.0066169268, + 0.010971261, + -0.007986408, + 0.015998749, + -0.008548901, + 0.0031258992, + -0.0042794193, + -0.0019940056, + 0.0057638674, + -0.008503342, + 0.012823108, + -0.001903884, + 0.00034405768, + -0.004424884, + 0.11750921, + 0.0069723376, + 0.012793923, + -0.0069096168, + 0.007368744, + -0.027595932, + 0.006801584, + -0.0018406522, + 0.0016094847, + 0.011161496, + 0.01523338, + 0.011080063, + -0.014898947, + -0.0127334455, + 0.011383597, + 0.016769666, + 0.019806406, + -0.0014382122, + -0.015582845, + 0.007862962, + -0.009499614, + -0.0062086238, + -0.004500516, + 0.003010534, + -0.007996973, + -0.007037702, + -0.011286064, + 0.010797696, + 0.009182343, + 0.0020672695, + -0.005928618, + -0.009528972, + -0.013006359, + -0.0043447143, + 0.016318537, + 0.003623171, + -0.003995226, + 0.0039176038, + 0.0025533456, + -0.011525062, + -0.01224477, + 0.00142075, + 0.0020915242, + 0.0061842175, + 0.006424448, + 0.018236239, + -0.0021679313, + 0.008749408, + 0.0047451463, + 0.00271675, + 0.014176586, + 0.0049292925, + 0.01895302, + -0.004364841, + -0.0015634445, + -0.005750165, + 0.014271159, + 0.0016055123, + 0.0013352999, + -0.010665248, + 0.009994458, + 0.004729093, + 0.0006639535, + 0.020387083, + -0.00027111755, + -0.002806072, + 0.012676165, + -0.0031055438, + 0.007773977, + 0.0044085016, + 0.0028795197, + 0.0015085295, + -0.005239737, + -0.0022851236, + 0.004544948, + 0.020543668, + -0.0004973897, + 0.006019356, + -0.0038709063, + -0.004925055, + 0.012280787, + -0.010409976, + 0.009849787, + 0.013980366, + -0.0049269916, + 0.00400925, + 0.007173347, + -0.008958894, + 2.8883871e-05, + -0.019485958, + -0.0041456134, + -0.00048042022, + -0.001442682, + -0.0073780315, + 0.008048321, + -0.013271332, + -0.0016764315, + -0.0030400304, + -0.016377347, + 0.0036891636, + 0.007309121, + 0.0009698794, + -0.00448744, + -0.01500505, + -0.00061686366, + 6.002056e-06, + -0.0048288424, + -0.009375897, + -0.0041622045, + 0.0025992966, + -0.01105402, + 0.007205045, + 0.009092777, + -0.008146023, + -0.029087698, + -0.022737654, + 0.0022613893, + 0.021596579, + 0.0007797678, + 0.0050032292, + 0.010670004, + 0.00892099, + 0.0045023463, + 0.0011227612, + -0.0059353723, + -0.025667088, + 0.007103246, + 0.008512785, + 0.008217834, + -0.005319804, + -0.022391751, + -0.003277246, + -0.0025659092, + -0.005787079, + 0.010438904, + -0.00087002455, + -0.006162343, + 0.008339329, + -0.004284775, + 0.0067608813, + -0.020251418, + 0.0013222358, + -0.00505756, + 0.0037129729, + 0.0117488885, + 0.008731698, + 0.016172303, + -0.00716583, + -0.0020553025, + -0.0046092253, + 0.011091136, + 0.010303905, + -0.014495731, + 0.012488779, + 0.009689488, + 0.005056248, + 0.012507027, + -0.00088312686, + 0.0047165067, + 3.3191678e-05, + 0.0298629, + -0.06558381, + -0.0018125258, + 0.010104355, + 0.008963818, + 0.014032566, + -0.0032648174, + 0.0051790085, + -0.005541017, + -0.005762411, + 0.0024045748, + 0.0035688002, + -0.013214886, + 0.0016156122, + -0.0039454494, + 0.0023993868, + 0.009144789, + -0.0044937106, + 0.008398206, + 0.008979539, + -0.022342881, + 0.0030292172, + 0.011465082, + -0.008539744, + -0.0067452495, + 0.0077833263, + 0.010819522, + -0.004244747, + 0.010267711, + -0.011449204, + 0.008702605, + 0.0014913284, + -0.0063862307, + 0.013581738, + 0.018514685, + -0.003477285, + -0.015383574, + 0.0077143414, + 0.0032435372, + -0.004404081, + 0.0025476022, + 0.015726482, + 0.0024092093, + -0.006251181, + 0.027659176, + 0.0018072281, + -0.0033422469, + 0.004122295, + 0.016544381, + 0.007432651, + -0.013423289, + 0.0027689121, + 0.01296443, + -0.0134475995, + 0.0031655214, + 0.00866742, + -0.0013830819, + 0.008612049, + -0.012117343, + -0.024765717, + -0.012244111, + 0.019135742, + 0.011098829, + 0.014013707, + 0.0074221804, + 0.010410473, + 0.0015747657, + -0.018223036, + -0.0039315424, + -0.014243723, + -0.009527003, + -0.0020352174, + -0.019936567, + -0.0037249534, + 0.012978739, + 0.00732354, + 0.006170066, + 0.02974821, + 0.004617653, + -0.0002349683, + 6.738755e-05, + -0.02236942, + 0.0053236284, + 0.01343414, + -0.0027949768, + 0.009585667, + 0.0040096436, + 0.005843248, + -0.015360071, + -0.012621519, + -0.010112942, + -0.007588127, + -0.0031147958, + -0.007303658, + 0.008348092, + -0.0046157716, + -0.009501203, + -0.006967342, + 0.019172251, + -0.005668679, + 0.0023192724, + -0.0056481464, + -0.025993198, + -0.013320168, + 0.004450028, + 0.00475665, + 0.025500374, + 0.009263475, + 0.0031119252, + 0.00857418, + 0.010782877, + -0.0012519512, + 0.0034667403, + -0.013315879, + 0.010426233, + 0.012024252, + 0.00633146, + 0.0027315153, + -0.0012317816, + 0.0037813396, + 0.0020300706, + -0.004488639, + 0.005781353, + 0.00708327, + -0.015691075, + -0.013856165, + -0.018574748, + 0.00556679, + 0.008587578, + 0.014013439, + -0.0064394497, + -0.0069337166, + 0.0007481732, + 0.0014673558, + 0.007848778, + -0.011635988, + 0.00883303, + 0.0060741715, + 0.010876757, + -0.019779956, + -0.003048116, + 0.005029053, + -0.0155362245, + 0.005436467, + -0.024668055, + -0.0014858446, + 0.0068347994, + -0.0075917025, + 0.005230983, + 0.01175935, + 0.005370316, + 0.007493626, + 0.0060610245, + 0.011141101, + -0.0017210112, + 0.0014999828, + 0.010699347, + 0.0017060483, + 0.0070972005, + -0.005693356, + -0.009742784, + 0.013947373, + 0.0116701685, + -0.00015574858, + 0.0013148187, + -0.0033268016, + -0.0018691265, + -0.011922007, + -0.012391552, + -0.013871254, + 0.0047475845, + -0.0067688115, + -0.004048173, + -0.0068092453, + 0.0059560766, + -0.0038216945, + 0.011658695, + -0.0061573777, + 0.0071037463, + 0.0049682274, + -0.0057519074, + -0.00493626, + 0.011038375, + 0.010261606, + 0.019157924, + 0.0032675012, + -0.005557396, + -0.0054859286, + -0.014682089, + -0.003713763, + 0.00302398, + -0.0034698087, + -0.00822479, + 0.0020835116, + -0.0026370136, + 0.011285221, + 0.0053296546, + 0.0027037263, + 0.0045874836, + 0.0032065706, + 0.019461848, + 0.0020178189, + 0.0042810133, + 0.013442214, + 0.013535111, + -0.026208503, + -0.0919708, + -0.006538505, + 0.012847424, + -0.0005733249, + -0.0024579482, + 0.0061556185, + -0.0059364843, + 0.009700727, + 0.0004962812, + 0.014255914, + 0.0050525377, + -0.002681042, + 0.006825144, + -0.036580157, + -0.012293352, + -0.0057225176, + -0.0040311213, + -0.0028888013, + -0.015968222, + -0.00043379856, + -0.014924266, + -0.005469992, + 0.005463158, + -0.007690889, + -0.010301344, + 0.0012545448, + -0.0048141894, + -0.0026093668, + 0.0009664697, + -0.021017153, + -0.007925938, + -0.00020614885, + 0.0069329143, + 0.009888484, + 0.022398837, + -0.015073376, + 0.020943824, + -0.0062514576, + -0.13811105, + -0.0043073324, + 0.009111375, + -0.011348116, + -0.005092325, + 8.13779e-05, + 0.0015907319, + 0.001812919, + -0.007400993, + 0.012676703, + -0.0052678483, + -0.01518028, + 0.0102824895, + 0.007768079, + -0.00019173081, + -0.008511988, + -0.017056452, + 0.018049896, + -0.018593492, + -0.0030755706, + -0.009841463, + 0.0036202897, + 2.8828123e-05, + 0.013948069, + 0.0029975616, + 0.011887778, + 0.001753242, + 0.013511007, + 0.011357323, + 0.007255591, + 0.0014352648, + -0.009609023, + 0.0066721607, + 0.0013452513, + -0.0013015171, + -0.016554173, + -0.000477319, + -0.00034014444, + 0.01021168, + 0.011834265, + 0.0013470801, + 0.008501089, + -0.002579616, + 0.0047647394, + 0.0003267029, + -0.002388494, + 0.0035989964, + -0.01012316, + -0.016738508, + -0.008221473, + -0.0019173862, + 0.0117944665, + -0.0021851654, + 0.012718421, + 0.01550017, + -0.0054182652, + 0.010975581, + 0.0037538796, + -0.009143739, + -0.01159798, + 0.007560022, + -0.0071972385, + 0.0055627683, + -0.01590772, + 0.008642704, + -0.002983823, + 0.004148672, + 0.014813948, + -0.018692393, + 0.0123193, + -0.012060761, + -0.005202946, + 0.0046789576, + -0.015709158, + -0.004611517, + -0.01111119, + -0.0019373174, + 0.0022099286, + -0.005834075, + -0.0073443805, + 0.016649898, + 0.0014263153, + -0.014470213, + -0.012046723, + 0.022456057, + -0.029066911, + -0.01443697, + 0.008737267, + -0.012662963, + -0.038223583, + -0.0118777305, + 0.020807466, + -0.02465047, + 0.024556803, + -0.005455939, + 0.012242296, + -0.02030365, + 0.026100913, + -0.015607705, + -0.006151712, + 0.02329279, + 0.022945115, + 0.005141159, + -0.014298363, + 0.032825664, + 0.0014995893, + -0.012085412, + -0.010903989, + 0.022049004, + -0.014125388, + -0.004207174, + 0.008693698, + 0.0037424471, + 0.00955282, + 0.0007954848, + 0.013096172, + -0.0049168803, + -0.0073077213, + -0.0065913415, + -0.008788376, + 0.025259383, + 0.012288681, + -0.012697742, + -0.010153135, + 0.0051828865, + 0.011520341, + -0.008073258, + -0.027368898, + -0.02378585, + 0.010149418, + -0.004705681, + 0.011219155, + 0.008814759, + -0.0023328357, + 0.0040222257, + 0.0070547345, + 0.012182371, + 0.0100328, + 0.0037624887, + -0.010053402, + 0.010422803, + -0.016011938, + -0.016688444, + 0.009760229, + -0.02187911, + -0.009949731, + 0.0003484824, + 0.0014590569, + 0.010483433, + -0.008910884, + 0.021269126, + -0.011330267, + -0.012289649, + -0.013649704, + 0.013825796, + -0.016098844, + 0.004146004, + 0.0065595834, + -0.009615857, + -0.0074197906, + -0.021701392, + -0.008045632, + -0.004130744, + 0.011271183, + -0.0089777345, + 0.027135903, + 0.013405503, + 0.00424445, + -0.007570184, + -0.015081019, + 0.006653264, + -0.009814373, + 0.013958528, + -0.0030711882, + -0.0070629083, + -0.0061539495, + 0.004914486, + -0.003511932, + 0.02149164, + 0.007990055, + -0.0010673914, + -0.010245537, + -0.008209581, + -0.006225728, + -0.013468233, + 0.003507063, + 0.006560747, + 0.01096477, + 0.03005956, + 0.009400259, + 0.012705503, + -0.0075436383, + -0.018008245, + 0.0019007132, + -0.030497842, + -0.005695619, + -0.0024457094, + 0.011371064, + 0.0046140198, + -0.03092403, + 0.0051771416, + 0.013330721, + -4.2826417e-05, + -0.12767436, + -0.0032723742, + -0.021861019, + -0.019750813, + -0.0020859148, + -0.0042517367, + 0.009677187, + -0.0056178104, + 0.010718959, + -0.0014920499, + -0.018460212, + -0.0013402299, + -0.008936666, + -0.003913393, + 0.0035308506, + 0.0039008076, + 0.008709347, + 0.004725216, + -0.021353658, + 0.009539658, + -0.019402673, + -0.012154475, + 0.0006329489, + 0.0037233098, + -0.0057586357, + -0.0009718514, + -0.0064921477, + 0.0035169094, + -0.01710177, + 0.012007454, + 0.005937916, + 0.0060299896, + -0.010373607, + -0.011888095, + -0.008351969, + -0.0030292056, + -0.0062756645, + -0.006430903, + 0.0039852047, + 0.009727105, + -0.019441903, + 0.010542806, + 0.013263166, + -0.004613792, + 0.025622334, + -0.013460396, + -0.02506914, + -0.025325324, + -0.007034412, + -0.008356502, + 0.011449218, + -0.025615036, + 0.011996695, + 0.019703504, + 0.012023787, + -0.014153357, + 0.005525593, + -0.006397523, + -0.012253444, + -0.013162658, + 0.0065461085, + -0.02738513, + -0.0076763504, + -0.011579679, + 0.006411238, + 0.00011579628, + 0.0043122414, + 0.16395473, + -0.012265059, + 0.0016417082, + 0.008685639, + -0.013789797, + 0.015318556, + 0.0101906555, + -0.0008726056, + -0.007200783, + -0.0029029858, + 0.0030573728, + 0.0011798473, + -0.0015085634, + -0.018768575, + 0.0017158478, + 0.014483149, + 0.0023082357, + -0.0076453467, + 0.018360868, + 0.0059894472, + 0.0066145454, + -0.005560423, + 0.019414745, + -0.010527103, + -0.0034324022, + 0.0043502846, + 0.004304309, + 0.012072933, + -0.008210283, + 0.0011498021, + 0.00847198, + -0.016396917, + -0.008098033, + -0.016095903, + 0.022808658, + 0.01449796, + -0.0153048495, + -0.024876492, + -0.0032803118, + 0.0020287593, + 0.00016879253, + -0.013876028, + -0.011154178, + -0.0051625916, + -0.021490192, + 0.005521968, + -0.0019219039, + -0.011812127, + 0.013305557, + 0.017729038, + -0.011591239, + 0.0061398805, + -0.005529866, + 0.0025249117, + 0.0045012203, + -0.016464416, + 0.0036085546, + 0.013348382, + -0.004769047, + -0.022728713, + -0.02021818, + 0.007765984, + -0.0075477664, + 0.0027208538, + 0.0040181307, + 0.017053291, + -0.017308367, + 0.0068646804, + 0.020120237, + -0.14609282, + 0.023575893, + -0.008173443, + -0.03219079, + -0.014556689, + 0.01621594, + 0.026092706, + 0.018891007, + -0.020376937, + 0.006439364, + -0.019361129, + 0.006944445, + 0.007685236, + 0.0052998047, + 0.0073420913, + 0.0032972558, + -0.019276947, + -0.0012951191, + 0.013305504, + 0.0024119585, + 0.0064360457, + 0.0109632565, + -0.005494658, + -0.007735993, + -0.003655456, + 0.00197781, + -0.026399082, + 0.0024187418, + -0.0074294135, + 0.0066785756, + -0.007056343, + 0.018833369, + 0.0016874367, + 0.002808692, + -0.0064166323, + 0.0002382836, + 0.0062249997, + -0.0075885216, + 0.01361679, + 0.0021009075, + -0.010718724, + -0.0045941477, + 0.006507263, + 0.028173307, + 0.001555771, + 0.006289748, + -0.013007942, + 0.008906672, + -0.019428035, + -0.0012262487, + 0.020655168, + -0.0057269833, + 0.010925094, + 0.0048505496, + -0.007932454, + 0.0046049724, + -0.004174678, + -0.024394818, + 0.004355319, + -0.004325747, + 0.02929942, + 0.03104016, + 0.0034029712, + 0.013061722, + -0.00028777335, + -0.021436924, + -0.0041704415, + -0.0105479825, + -0.01456486, + -0.0022237422, + 0.020174883, + -0.015554892, + 0.023269113, + 0.010604964, + 0.017374242, + 0.0009866995, + 0.00016653465, + -0.0011878184, + -0.0038126633, + 0.005345001, + 0.0016850592, + 0.0034345202, + 0.013271997, + 0.0013812752, + 0.02384595, + -0.034226775, + -0.005102307, + 0.003280196, + 0.010590988, + 0.0034874405, + 0.0030542486, + 0.020432966, + 0.018153964, + 0.00043373692, + -0.012946221, + -0.0029034063, + 0.0064025563, + 0.0056380923, + -0.0010775285, + -0.0051854765, + -0.005901813, + 0.00285813, + -0.0003738676, + 0.0005040641, + -0.0060641863, + -0.0061041894, + -0.004998575, + -0.011385906, + 0.0066778646, + -0.007506221, + 0.00027887645, + -0.00081552344, + 0.0006417145, + 0.0025586097, + -0.0025067194, + -0.0010522841, + 0.00948913, + 0.0009914908, + -0.025042191, + 0.00036177752, + 0.014268307, + -0.0009416385, + 0.022621734, + 0.0032021273, + 0.019750593, + -0.0038210007, + -0.0021938002, + 0.007304814, + -0.0015886652, + -0.0033389635, + -0.013533195, + 0.0154762175, + 0.023479138, + -0.0005463595, + -0.015056414, + -0.007905567, + 0.005804407, + 0.0027477315, + 0.0005209196, + -0.0031243192, + -0.002801726, + 0.001609389, + -0.016349733, + -0.007432889, + -0.008704614, + 0.0165091, + 0.007891008, + 0.032172948, + -0.018189268, + -0.022262748, + -0.011460947, + 0.013766013, + -0.003842907, + 0.004107959, + 0.009732589, + 0.0023269227, + -0.010880488, + 0.014125349, + 0.012088474, + -0.008894531, + -0.0071711177, + -0.01147621, + -6.830457e-06, + 0.0017904766, + 0.019848404, + -0.027736459, + -0.018101789, + 0.007562114, + -0.036879543, + -0.004275707, + -0.030746635, + 0.0075112786, + 0.006354375, + -0.011267438, + -0.016878592, + -0.026407989, + 0.0030534596, + 0.010057407, + 0.013045193, + -0.06608935, + 0.021950578, + 0.006742583, + 0.013598356, + -0.0033353881, + -0.0016799681, + 0.0028966677, + -0.0053826617, + -0.008237901, + -0.012169313, + 0.015502456, + 0.0010409239, + 0.002514572, + -0.03729489, + 0.013733669, + -0.014704507, + -0.00024449878, + 0.0016951663, + -0.025569605, + 0.009703081, + 0.0047599985, + 0.0037252244, + 0.013027276, + -0.000101702266, + 0.0076822005, + 0.001598326, + 0.015451042, + -0.008425146, + 0.010774381, + 0.0063350787, + 0.0036379236, + 0.006841654, + -0.0068488996, + -0.008352663, + 0.023199009, + -0.01503764, + -0.008638873, + 0.0067640203, + -0.004301552, + -0.09070569, + 0.005556958, + -0.014968662, + -0.11609382, + 0.0037963977, + 0.007321697, + 0.0016991039, + 0.012293771, + -0.013908481, + -0.032468308, + -0.00163809, + -0.0014135248, + 0.001268276, + -0.03641577, + -0.0129291145, + 0.007165365, + 0.00798795, + 0.008586053, + 0.013211236, + -0.015198531, + -0.010581446, + 0.008554716, + -0.016915502, + 0.0067772493, + -0.003629585, + -0.0004276997, + -0.0016309044, + -0.0028640104, + -0.010906592, + 0.002061815, + -0.0029706352, + 0.0041646976, + -0.0067357356, + 0.0036250434, + -0.013152665, + -0.0027372383, + 0.0078195715, + -0.012634958, + 0.0018124796, + 0.0024241675, + 0.012973193, + -0.01055834, + 0.00999343, + 0.016101407, + 0.008624181, + -0.0021043187, + -0.024917414, + 0.013248023, + -0.13193415, + -0.0050658635, + -0.00096883834, + -0.0022757337, + 0.0025982684, + 0.006587389, + 0.007727736, + 0.13633472, + -0.016904911, + -0.0060479073, + -0.0035111227, + -0.013581815, + 0.025965028, + 0.0021828446, + 0.0051499647, + -0.01597053, + -0.00012184, + 0.0066055143, + -0.0010619104, + 0.0029336778, + -0.034267187, + 0.0001446692, + 0.0010343201, + 0.008806524, + -0.003936286, + -0.057651717, + -0.0210148, + 0.0076803523, + 0.0072149867, + 0.007817021, + 0.020953702, + -0.0046199914, + 0.025745831, + -0.0037166933, + 0.0022606486, + 0.011903871, + 0.00764051, + -0.015948584, + -0.0052281185, + 0.01527515, + 0.0027027621, + 0.0064621386, + -0.028658753, + -0.008317713, + 0.011794476, + 0.007407979, + 0.0050561354, + -0.00480712, + 0.011068088, + -0.018701548, + -0.005694988, + -0.0062845605, + -0.011770742, + 0.012894761, + -0.003338168, + 0.017391823, + -0.010566756, + -0.019573955, + 0.0025518697, + -0.008194574, + -0.004358947, + -0.024430271, + 0.015682437, + 0.0033750457, + -0.0013428546, + 0.0026441067, + -0.0064418023, + 0.0012995155, + -0.009085858, + 0.00623006, + -0.004268671, + -0.008501764, + -0.009132051, + -0.0004247613, + -0.0007065355, + 0.010996784, + -0.006897666, + 0.016715206, + -0.007478832, + -0.009493207, + -0.019607155, + 0.015953027, + 0.0007468567, + 0.010617383, + -0.0047031087, + 0.024317281, + 0.016396288, + 0.0025953448, + 0.010081882, + 0.00088506006, + 0.00013557027, + -0.004131907, + 0.013685929, + 0.009633753, + 0.01500652, + -0.00524857, + -0.012946939, + 0.0014492463, + -0.0098173525, + -0.004784412, + 0.011927192, + -0.001477274, + -0.010040116, + -0.00025273854, + 0.007816421, + -0.02564008, + 0.008404923, + -0.013013989, + -0.009849701, + 0.0004801758, + 0.0030241502, + -0.015659286, + -0.01702993, + 0.012290889, + -0.007661914, + -0.028841836, + -0.0063579185, + -0.013024367, + 0.004544356, + 0.0063637714, + 0.00024194228, + 0.00055086514, + 0.0013617799, + -0.0130782565, + -0.0021114594, + -0.007370695, + -0.012256818, + -0.0030069086, + -0.0029390445, + 0.0034205578, + -0.004932014, + 0.0041746125, + 0.007831495, + 0.004745753, + 0.018727621, + 0.016691415, + 0.0082338825, + 0.00013736554, + 0.018877927, + -0.01932592, + -0.004881514, + 0.00596026, + -0.00948239, + -0.014454469, + 0.013364165, + 0.0031295847, + -0.00043968504, + -0.013691322, + -0.018957086, + -0.0018903649, + -0.010407005, + 0.0223039, + -0.008343137, + 0.0056352937, + -0.004204668, + 0.020694612, + -0.011903192, + 0.0055518267, + -0.012247888, + -0.0005543354, + 0.0012276962, + -0.03129326, + -0.013204311, + -0.0069654626, + 0.004110629, + 0.0018988556, + -0.010701709, + -0.00041397233, + 0.026626261, + -0.0024816662, + 0.017397085, + 0.011855655, + -0.025952961, + -0.00013907171, + 0.02148711, + 0.0047636386, + -0.01109743, + -0.013004783, + -0.0047308733, + -0.01492947, + -0.0030125661, + 0.012484072, + -0.0020693406, + -0.00874911, + -0.0045083226, + 0.0045682974, + 0.0013591321, + -0.012567444, + 0.0065643713, + 0.01151584, + 0.0043932823, + 0.007458598, + 0.0067669987, + 0.0021815358, + -0.015761897, + -0.0103775095, + -0.0006737975, + -0.034082398, + -0.015312308, + -0.0038634683, + -0.011659322, + -0.027276315, + 0.006560757, + 0.008514117, + 0.00080510945, + 0.0012126995, + -0.04659045, + -0.026385019, + -0.022362081, + 0.0030430174, + -0.01635798, + -0.008818578, + 0.009137726, + 0.015177128, + 0.014224717, + 0.0013936254, + 0.0147021925, + 0.005987445, + 0.013388185, + 0.01475495, + -0.005052887, + 0.009664066, + -0.0009181277, + 0.014781508, + -0.013526577, + -0.02943875, + 0.0028912998, + 0.015512078, + 0.01548547, + 0.00594984, + -0.003448391, + -0.012041029, + 0.00039174542, + 0.022618217, + 0.0031694295, + 0.0015042577, + 0.0139108375, + -0.00048904185, + -0.00709545, + 0.0050505823, + -0.005196223, + 0.0066084266, + 0.0056443107, + 0.0017777929, + -0.019806687, + -0.0066625653, + 0.0116061885, + -0.020602392, + 0.018083133, + 0.010631884, + 0.0020227178, + 0.00939747, + -0.011887385, + -0.015424872, + -0.013555754, + 0.006626821, + 0.006567099, + -0.0141840875, + -0.00072945835, + 0.008733422, + 0.017314384, + -0.017567988, + 0.005735904, + 0.0108691985, + -0.018090913, + -0.009033469, + -0.004354809, + 0.007349515, + -0.0034965998, + 0.0005995342, + 0.0041737896, + 0.016415117, + -0.023841372, + 0.02863038, + 0.0080764545, + 0.008713121, + -0.0055172527, + 0.00048344725, + -0.029084193, + 0.014295165, + 0.020282298, + 0.0018069778, + 0.00018922177, + 0.0043608737, + 0.009413494, + 0.0013398686, + 0.011900919, + -0.01334492, + 0.018225837, + 0.0065759355, + 0.014756475, + -0.015627258, + 0.005121912, + -0.00342673, + 0.007027138, + -0.008003567, + 0.005619166, + 0.01893856, + -0.006311037, + 0.011387209, + 0.013106465, + -0.015328255, + -0.027328271, + 0.00035129557, + 0.002703918, + 0.009508407, + 0.014759672, + -0.0148826, + -0.007999322, + -0.0064245365, + -0.009316741, + 0.0011463893, + -0.0052270587, + 0.006592267, + -0.019526634, + -0.0045114057, + -0.00199906, + 0.011120322, + 0.012702381, + -0.022901004, + -0.004832471, + 0.014614916, + -0.01254844, + 0.013893862, + 0.016458672, + 0.00391298, + -0.013711348, + -0.011291388, + -0.01797027, + 0.015478405, + -0.0019884123, + -0.027668148, + -0.0094685815, + -0.010987685, + 0.010816063, + -0.002257569, + -0.017419973, + 0.019132651, + -0.007949089, + -0.013637888, + -0.006601949, + 0.005721453, + -0.02379573, + -0.015107774, + 0.000827648, + 0.008267713, + -0.0023008035, + -0.00071427936, + -0.007620678, + -0.026668917, + -0.0025679728, + 0.00539084, + -0.00041505502, + 0.018125841, + -0.0023185415, + -0.001959203, + 0.01780675, + 0.013198909, + 0.013630213, + 0.0055280663, + -0.0036300211, + -0.0002464843, + -0.0056492793, + 0.012754539, + 0.021615349, + 0.009253455, + 0.02405524, + -0.017177217, + 0.010642492, + -0.015308109, + -0.009542661, + -0.000833572, + -0.014174831, + 0.005018272, + 0.003296041, + 0.013095051, + -0.023409612, + 0.00047311152, + 0.007688722, + -0.004337025, + 0.0013835045, + 0.020916976, + 0.005102789, + -0.0073390603, + -0.008935875, + 0.006792171, + -0.015721763, + 0.017373592, + -0.013285138, + 0.009878286, + 0.020951292, + 0.0106042065, + -0.0005776757, + -0.0019197308, + -0.0017159879, + -0.00599174, + 0.005471518, + 0.0064551365, + 0.0058827815, + 0.010008715, + 0.011489872, + -0.02066383, + 0.008540665, + -0.011731031, + -0.011898704, + -0.017767532, + 0.013667615, + -0.005760106, + 0.001253201, + 0.0005746465, + -0.0019817818, + 0.019706743, + 0.008433081, + 0.011804394, + -0.020133814, + 0.03641091, + -0.027303554, + 0.008452041, + 0.006401888, + -0.013735632, + 0.0026148157, + -0.009370535, + -0.0016878417, + 0.011272632, + 0.0030301472, + -0.00019941978, + -0.0045899153, + -0.005140114, + -0.0027080108, + -0.018940354, + 0.014875347, + -0.011097544, + 0.0034353477, + -0.0017932055, + -0.01183471, + -0.00072506396, + 0.003592544, + 0.0064291414, + -0.009708136, + 0.010044723, + -5.9229726e-05, + 0.0098290965, + 0.011223268, + 0.04678059, + -0.009277873, + -0.007071474, + 0.0060843625, + 0.013216747, + -0.012417011, + -0.0012162297, + 0.019898131, + -0.005373584, + -8.119103e-05, + 0.0043114247, + -0.0011471859, + -0.0028094694, + -0.030325877, + -0.0095623145, + 0.020488054, + 0.0063392892, + 0.00089007284, + -0.0038787527, + 0.015095955, + 0.012168425, + -0.036774307, + 0.0060712514, + 0.0066923467, + -0.0027519076, + 0.016343368, + 0.017046658, + -0.06018278, + 0.024136102, + -0.03271132, + -0.00089195115, + -0.007233744, + 0.014371361, + -0.015391557, + -0.0054119444, + -0.011534075, + -0.043763895, + -0.021084132, + 0.009892426, + -0.013187215, + -0.0017100254, + 0.0071345046, + 0.010185501, + -0.02593305, + 0.0036059956, + 0.014470709, + 0.0064841826, + 0.009312727, + -0.0003301155, + -0.00880405, + -0.001076309, + -0.0026867774, + 0.0014996664, + 0.0036342733, + 0.00056516204, + 0.007059131, + 0.006389875, + 0.004219338, + 0.0034318217, + -0.0034686918, + -0.010111063, + -0.009282044, + -0.030581577, + -0.004520889, + -0.000624491, + -0.022399958, + -0.023003975, + -0.012433072, + 0.017189395, + 0.013585114, + -0.0304631, + 0.0127828345, + -0.01274186, + -0.00017142596, + -0.0055936165, + 0.00057422294, + -0.016564945, + -0.013161659, + -0.012631962, + 0.0040874495, + 0.017586509, + 0.007860702, + -0.00781338, + -0.00402812, + -0.008823843, + -0.0011639427, + 0.0056213923, + 0.008984777, + -0.002634518, + 0.0076444205, + 0.0023419673, + -0.014419151, + -0.012223469, + 0.011954017, + 0.010746471, + 0.005880748, + -0.032038283, + -0.0148736285, + 0.035811022, + 0.012919037, + -0.0056549083, + 0.044470593, + -0.012538599, + -0.010340406, + -0.0022268326, + -0.012842829, + -0.0073204134, + -0.013681175, + -0.0015957396, + -0.008422009, + -0.024932502, + -0.0067749713, + 0.0011482356, + 0.0026804348, + -0.0036993918, + 0.02683617, + -0.012643262, + 0.009728097, + -0.017715624, + -0.01133747, + -0.00040934965, + -0.004586846, + 0.0005262303, + 0.0106172925, + 0.00092386676, + 0.0014580763, + 0.009832976, + -0.011659725, + -0.016588185, + 0.009424925, + -0.0084941145, + -0.008104089, + -0.0063538845, + 0.009804624, + -0.0036226192, + 0.017879888, + -0.015317865, + 0.0017703674, + -8.2676976e-05, + -0.0065688845, + 0.0028925277, + 0.0044032903, + -0.01343475, + -0.0050930446, + 0.0143930055, + -0.013336081, + 0.022012878, + -0.021042533, + 0.0054460294, + 0.008044309, + 0.008024621, + -0.035568677, + 0.012095182, + -0.0055649155, + -0.01558033, + -0.019907005, + 0.005652151, + 0.013198951, + 0.015089448, + 0.01184796, + 0.020870993, + 0.029595464, + 0.014271772, + 0.024094582, + -0.012662305, + -0.0074478276, + -0.0046362802, + -0.0017899332, + 0.014738007, + -0.020890582, + -0.004126307, + 0.0068059443, + 0.030005638, + -0.0072821975, + 0.008292348, + -0.014774941, + -0.0077116718, + -0.006816467, + 0.011596315, + -0.019413143, + 0.0030342953, + -0.0051642265, + -0.012659202, + 0.010063811, + -0.0029870872, + -0.004115996, + 0.014208923, + 0.01614997, + 0.0024534538, + -0.0022047404, + 0.014448579, + 0.0041148434, + 0.0031741038, + -0.011937213, + -0.009172848, + 0.012240861, + 0.03382827, + -0.0065687965, + 0.0026374268, + -0.00091634615, + 0.010849941, + -0.0056812977, + -0.011476668, + -0.0036018866, + -0.0080860555, + -0.0052597323, + -0.005817349, + 0.002384036, + -0.009850449, + -0.008503926, + -0.0026998343, + 0.0048841136, + -0.008389405, + 0.0065132943, + 0.01478617, + 0.018512676, + -0.005188306, + 0.010863864, + 0.004264593, + -0.0017736802, + 0.0036980829, + 0.006296403, + 0.0070669623, + 0.0010103788, + 0.0016335504, + -0.0043813237, + -0.02034541, + -0.01101814, + -0.02072721, + 0.013691136, + -0.0034674832, + 0.018606551, + 0.0019160492, + -0.010437091, + 0.021514481, + 0.0005177568, + -0.022549631, + -0.013479157, + 0.01631972, + 0.012263093, + -0.015381631, + -0.0018759436, + -0.0016669458, + 0.18101704, + 0.1093008, + -0.0108710285, + 0.020550566, + -0.0004615204, + 0.010845453, + -0.00071631087, + -0.011157918, + 0.013139791, + 0.010722269, + 0.01015012, + 0.011528534, + -0.013488796, + -0.0075844373, + 0.021426443, + 0.0016685755, + 0.009023883, + -0.016932875, + -0.004079776, + 0.018773092, + -0.009591782, + 0.020822706, + -0.0047686836, + -0.004376192, + -0.025941959, + -0.00968559, + 0.015453033, + -0.009474105, + 0.01777086, + 0.021874133, + -0.005394251, + 0.004637134, + -0.0031034655, + 0.0015372632, + -0.0035739064, + -0.014553905, + 0.008955991, + -0.027084304, + -0.014861365, + -0.018063093, + 0.002232104, + 0.001896838, + 0.017228644, + 0.0001912109, + 0.018728163, + 0.025772624, + -0.030454125, + 0.033822414, + -0.025602056, + 0.015668472, + 0.000357564, + -0.012912496, + 0.008604631, + -0.005770236, + -0.007211313, + -0.005036539, + 0.024395732, + 0.008251911, + -0.0029073078, + -0.00014043183, + 0.0068095187, + 0.0044959737, + -0.0028950186, + -0.00364373, + 0.01573795, + 0.0097384015, + 0.007902207, + 0.0027443352, + -0.01181232, + 0.007336599, + 0.0034208647, + 0.0037929153, + -0.0032592227, + -0.0075592967, + 0.0049634785, + 0.0052989223, + -0.0139496215, + -0.010396584, + -0.0041128877, + 0.012444102, + -0.0034853267, + 0.016723676, + -0.009892386, + 0.006908736, + -0.016373554, + -0.0035066758, + 0.0043744002, + 0.030439014, + 0.13673645, + -0.01449067, + -0.035831142, + -0.0071469275, + 0.003983547, + 0.008935565, + -0.0006057833, + 0.014232494, + -0.012279081, + -0.0034864042, + 0.009764002, + -0.00064953486, + 0.016928414, + 0.0037047043, + -0.0039219093, + -0.011147312, + -0.0007565764, + 0.06043088, + 0.014730864, + -0.0028320819, + 0.004314209, + -0.009144806, + -0.0195842, + 0.008564337, + 0.009610337, + -0.017522126, + -0.0066808276, + 0.0034532864, + -0.018006934, + -0.0074848556, + -0.10377555, + 0.014674993, + 0.00041515182, + -0.008717269, + -0.014613276, + 0.01603586, + -0.018056076, + -0.027579546, + 0.019698506, + -0.007743826, + 0.0025641185, + -0.0013436062, + 0.0063156, + 0.0101120565, + 0.0021566958, + -0.0006276306, + 0.026810342, + 0.012392, + -0.007230213, + 0.008414363, + 0.0016233688, + -0.009935457, + -0.0093064355, + 0.021927334, + -0.011682089, + 0.0053977408, + 0.012596382, + 0.0026636086, + 0.0048024086, + -0.0014210219, + 0.007881013, + -0.013922297, + -0.02060677, + -0.012090255, + -0.00072851434, + 0.024995003, + -0.0066314936, + -0.003192162, + 0.02593965, + -0.0015279023, + 0.015211616, + -0.0053264247, + 0.010392814, + -0.0043614563, + -0.0007705568, + -0.008130015, + 0.0110822255, + -0.009494609, + -0.027477294, + -0.00826606, + 0.059790347, + -0.010160074, + -0.002246985, + -0.009049423, + 0.006488232, + -0.0026865096, + -0.004623906, + -0.010079339, + -0.0032320565, + -0.0011942488, + 0.011252065, + 0.012684605, + -0.0047359727, + -0.005250555, + -0.017765958, + 0.022906708, + -0.007161605, + 0.01880367, + -0.03132898, + -0.017381331, + -0.005894936, + -0.013972651, + -0.0173399, + -0.011528493, + 0.010805341, + -0.00658849, + -0.015628157, + 0.002882566, + -0.00046419512, + -0.017889768, + -0.00928033, + -0.024536757, + 0.006910042, + 0.13299006, + 0.030297102, + 0.011923801, + 0.0022693628, + 0.019716391, + -0.00535604, + 0.0042631677, + -0.017034076, + 0.013830708, + -0.015626715, + 0.0044133235, + 0.0020316439, + -0.009778423, + 0.00599759, + 0.018428536, + -0.0034956133, + 0.022540363, + -0.0033667875, + -0.009051445, + -0.0071026543, + -0.007170854, + 0.0039230124, + 0.00046874772, + -0.0076848995, + -0.005771461, + 0.0030157624, + -0.00945153, + 0.019307122, + 0.010124799, + 0.0021277536, + 0.0056111943, + -0.027327025, + 0.03531855, + -0.003972401, + 0.007367267, + -0.0008687196, + 0.025464954, + -0.017492313, + 0.0011724007, + 0.011119176, + 0.0055753444, + 0.009724549, + -0.00079452706, + 0.009783027, + -0.043451395, + 0.19215001, + 0.012108807, + 0.01110689, + -0.009120394, + -0.011989611, + -0.012789174, + 0.011857606, + -0.003341848, + -0.017249674, + -0.0018639601, + 0.01596994, + 0.009982599, + 0.006601805, + -0.006021664, + -0.024381177, + -4.928325e-05, + 0.0022097847, + 0.0010614523, + 0.0040461323, + 0.01299665, + 0.014698813, + 0.0024938239, + 1.9120657e-07, + 0.015450025, + -0.0111248735, + 0.026375296, + -0.013739944, + 0.0030186323, + -0.012089039, + 0.0021721548, + 0.020440822, + 0.0072343224, + -0.0036756573, + 0.0052002096, + -0.00048423497, + -0.02623082, + 0.00081887055, + 0.012408545, + 0.0014850002, + -0.026908068, + -0.008914438, + 0.0077669616, + 0.013510153, + -0.0017403773, + -0.016019326, + -0.0037498416, + 0.0030504556, + 0.003478261, + 0.0019438358, + 0.022127846, + 0.005626139, + -0.012650384, + 0.02039129, + 0.018482514, + -0.01410989, + -0.020026313, + -0.0018702564, + -0.008208375, + -0.0037110934, + 0.015758459, + -0.009571421, + -0.0011474643, + -0.01657879, + 0.0024380854, + 0.030233009, + 0.0043924265, + 0.007002326 + ] + }, + { + "values": [ + 0.008687293, + -0.0005995523, + 0.017488128, + -0.067767285, + -0.0061500445, + 3.470041e-05, + -0.004729637, + 0.0058073006, + 0.03076559, + -0.0083383275, + 0.0077374442, + -0.044319317, + -0.03668121, + 0.014634102, + 0.104894705, + -0.011687661, + -0.012862615, + 0.011709252, + 0.015287733, + -0.034255635, + 0.0005121346, + -0.012760322, + 0.021096574, + -0.0056318603, + 0.006498022, + -0.0034005821, + 0.02133476, + 0.020159671, + 0.014046812, + 0.025498588, + -0.0007774919, + 0.004046043, + -0.008088746, + -0.024721028, + -0.01891392, + -0.0043858183, + 0.017453099, + -0.019527597, + 0.008012627, + -0.00197809, + -0.00598428, + 0.0032595566, + -0.019494237, + 0.012056208, + 0.00028665893, + -0.007286767, + 0.0059994394, + -0.024076596, + -0.0050734044, + 0.0047454024, + -0.0066968445, + -0.010518766, + -0.011218274, + -0.15235053, + -0.003994987, + 0.011060574, + -0.008045645, + 0.015620118, + 0.016561916, + 0.030029712, + -0.014314311, + 0.020052657, + -0.002120565, + -0.011984409, + -0.009346121, + 0.010684147, + -0.0046938476, + 0.025904069, + -0.017173946, + 0.021311343, + 0.01969403, + -0.0067657465, + -0.03320154, + -0.02235153, + -0.02382749, + 0.0036755153, + 0.00369162, + -0.006402991, + -0.027000522, + 0.03792506, + -0.0113652935, + 0.010817447, + -0.0013063228, + -0.005831651, + 0.018017195, + 0.007974958, + 0.022740874, + 0.00241138, + -0.007421409, + 0.0009808135, + 0.0009278593, + -0.00082564563, + -0.013920607, + -0.005594853, + -0.0008029837, + 0.004135705, + 0.017192911, + -0.012926841, + -0.029362565, + -0.008991143, + -0.010069888, + 0.002832829, + -0.01199004, + -0.0045435852, + -0.003897541, + -0.0075385002, + 0.0030093023, + -0.012940013, + -0.004085419, + -0.018461393, + 0.00833783, + 0.005771225, + -0.011611716, + 0.009975825, + 0.0029588023, + -0.18698391, + -0.013411251, + 0.009762766, + 0.008617569, + 0.016054373, + -0.005534795, + 0.012755129, + -0.0192076, + 0.0073138094, + 0.0009115203, + 0.023063488, + -0.023286233, + 0.011298807, + -0.001075817, + 0.0023190498, + 0.0038535318, + 0.0005834468, + 0.011501422, + 0.006702255, + 0.0062109283, + 0.02183751, + -0.032164596, + 0.019121049, + -0.0055775414, + 0.021821672, + -0.0036035548, + -0.009011843, + -0.022213923, + 0.0058157584, + 0.006074562, + 0.005068639, + -0.018747916, + -0.01970195, + 0.017120222, + -0.013320199, + -0.021279475, + 0.015190147, + 0.0253083, + -0.014097967, + -0.009909757, + -0.053273983, + -0.01906554, + 0.010277074, + -0.0066464352, + 0.013347818, + -0.006589539, + 0.008620761, + -0.002177168, + -0.0003507091, + 0.012762215, + 0.008973848, + -0.017079908, + 0.031663943, + 0.020444658, + 0.004901412, + 0.012096727, + 0.0102592185, + -0.0117244, + -0.0051103467, + 0.016173013, + 0.024313312, + -0.024164645, + -0.004551832, + 0.00061222084, + 0.005129755, + 0.0014223006, + 0.002995904, + 0.010437085, + 0.008957324, + -0.014226335, + -0.00858208, + -0.021446357, + -0.0025424985, + -0.012760826, + -0.0073461533, + 0.014100205, + -0.011371971, + -0.0072267917, + -0.006064865, + 0.020688552, + 0.006472284, + 0.00031394183, + 0.004539531, + 0.0041059568, + -0.006476568, + 0.032754947, + -0.009970065, + -0.01073267, + 0.003956176, + -0.0002989718, + -0.006135503, + 0.027761823, + -0.0027849567, + 0.012315016, + 0.017773582, + 0.012340351, + -0.027640266, + 0.016883355, + -0.024143461, + 0.021447303, + 0.003629593, + -0.014176364, + -0.020846942, + -0.0013734883, + -0.00506708, + -0.024184246, + -0.024940472, + -0.039107937, + 0.0056861923, + -0.005296446, + 0.010592748, + 0.004813534, + 0.00584702, + 0.0037388674, + 0.014751302, + -0.007833008, + 0.013772334, + -0.007289538, + 0.008347103, + -0.009325167, + 0.0030555413, + 0.0022530123, + 0.015573232, + -0.0061403112, + 0.014338322, + -0.020420594, + 0.0067883558, + 0.020518836, + 0.024063326, + 0.017427485, + -0.011109382, + -0.0018570129, + -0.021259252, + 0.006105089, + -0.021553349, + 0.02146669, + 0.0010082407, + -0.034753047, + -0.011069832, + -0.004126004, + -0.0005816653, + -0.0088055935, + 0.012430738, + 0.00035655912, + -0.024972728, + -0.019622268, + -0.0305486, + 0.00025767417, + -0.02089438, + 0.00015059317, + -0.009025982, + 0.0004761942, + 0.016839279, + -0.025694063, + -0.0044296975, + -0.00223397, + 0.009437991, + 0.0053606452, + -0.0048000184, + -0.0029385174, + -0.0032674097, + -0.13097695, + -0.008740567, + -0.013532031, + -0.022778507, + -0.02875414, + -0.004267425, + -0.008642789, + 0.012612438, + 0.021193268, + 0.016677273, + -0.0054723592, + -0.006210531, + 0.008814096, + -0.00092938077, + 0.010654507, + 0.01892029, + -0.0016280303, + -0.001700918, + -0.007964983, + -0.014993818, + 0.0057483455, + -0.0014383545, + -0.0085505415, + -0.005378245, + 0.005691154, + -0.0054322216, + -0.012698173, + -0.0007175664, + -0.0054551894, + 0.006930263, + -0.0051436294, + 0.007788823, + 0.008630878, + -0.01246759, + -0.00041031017, + 0.034430236, + -0.0010709311, + -0.012113111, + 0.009765108, + 0.008934989, + 0.0052047265, + 0.011344533, + -0.0015576839, + 0.0076825265, + -0.026515618, + 0.0009329524, + 0.014590517, + -0.027028766, + -0.01913089, + 0.02159703, + -0.025530176, + -0.014180738, + 0.0015316282, + 0.028312722, + 0.008969981, + 0.01636098, + 0.008516236, + -0.005187639, + -0.0032281978, + 0.0035057622, + 0.026580233, + -0.0011868782, + -0.007449761, + 0.007486185, + 0.0069418196, + -0.005742916, + -0.005400782, + 0.010856775, + 0.009548369, + 0.003226997, + 0.02420754, + -0.0077429977, + 0.0045912904, + -0.029369257, + -0.006270844, + 0.008312032, + 0.013096815, + -0.008833374, + 0.003186229, + 0.005816183, + 0.0021880534, + 0.0003931968, + 0.006865366, + 0.010002729, + -0.010185929, + 0.010563891, + 0.00212922, + 0.017728625, + 0.017483953, + -0.015023876, + 0.02049577, + 0.0007207393, + -0.029220348, + 0.0003938394, + -0.023995753, + -0.023114612, + -0.024813, + -0.0004727605, + -0.02131237, + 0.019992903, + -0.022018455, + -0.011245906, + 0.012603231, + -0.016052695, + 0.0063873124, + -0.0031213756, + -0.0026527708, + 0.010019001, + 0.0045374334, + 0.0061593726, + 0.0070362296, + -0.011049312, + -0.0009436636, + -0.018056205, + -0.0013992052, + 0.0034248752, + 0.005950456, + 0.020585394, + -0.018088175, + -0.008558077, + 0.0013266865, + -0.02649609, + -0.017061364, + 0.029099887, + -0.0071205674, + -0.007876009, + -0.0028450787, + -0.014287453, + -0.028108932, + -0.027767034, + -0.020211775, + 0.0127054285, + -0.005742255, + -0.02261303, + -0.008700159, + -0.014775517, + 0.0037119677, + 0.010950597, + 0.0239616, + 0.014615081, + -0.02370977, + -0.012224933, + 0.031222288, + 0.013874941, + 0.0006624498, + 0.008215657, + 0.016483659, + 0.011281578, + 0.011413039, + -0.023720248, + -0.021328518, + -0.015865006, + 0.00055274164, + 0.01500976, + -0.007229906, + 0.0038163138, + 0.009932837, + -0.021932326, + 0.006949902, + -0.02544569, + 0.006537318, + 0.0019705454, + 0.006958907, + -0.018024437, + 0.00567134, + -0.0050933743, + -0.0016354594, + -0.008876939, + 0.012070871, + 0.0018852351, + -0.0071650385, + 0.012203077, + -0.004173197, + -0.0047833505, + -0.0015536913, + 0.0030763065, + -0.0021329378, + 0.0037008463, + -0.020766912, + 0.026228014, + -0.0028039473, + -0.0081609255, + -0.01870959, + 0.0059181573, + -0.0018067501, + -0.003860282, + -0.00055790343, + -0.0073873242, + -0.00413714, + 0.0072153066, + 0.008891046, + -0.027005166, + 0.013543151, + 0.012353646, + -0.011079663, + 0.015625004, + 0.012731967, + 0.014032128, + -0.0012448762, + -0.016995478, + 0.01681567, + 0.007434244, + -0.017074956, + 0.011768046, + 0.02115411, + 0.003970481, + 0.0041958163, + -0.009169353, + 0.03898993, + -0.005237962, + 0.00011626366, + -0.0035541493, + 0.004878718, + -0.012272032, + 0.0043846844, + -0.008687135, + -0.00405254, + 0.007174887, + -0.0026679677, + 0.0025143574, + -0.028716821, + 0.00890444, + -0.006138646, + 0.010285583, + 0.019889217, + -0.008401767, + -0.012110083, + 0.025436498, + 0.0046592, + -0.009531749, + -0.028525548, + 0.011394783, + 0.024467498, + -0.0038581465, + 0.012530472, + 0.0076566734, + -0.002841675, + 0.0037038752, + 0.014615617, + 0.004762231, + 0.009002116, + -0.01245148, + -0.0073044873, + 0.022037944, + 0.032197755, + -0.0049000815, + -0.024018707, + -0.0037875383, + -0.0020812561, + -0.001972549, + 0.0027452414, + -0.0102813905, + 0.0061977524, + 0.0014802256, + 0.013255166, + 0.012226865, + -0.005501544, + -0.0072147488, + 0.0047980067, + 0.01125825, + -0.013410314, + -0.033505343, + -0.00041833645, + 0.033699498, + -0.0057157897, + 0.00429601, + 0.01877627, + -0.0050414144, + 0.03137162, + -0.12720929, + -0.004552171, + -0.0033405058, + -0.004955866, + 0.011527269, + -0.01758085, + -1.3478935e-06, + -0.014266126, + 0.0029667758, + -0.020139594, + 0.0037180695, + 0.020401116, + 0.0045658993, + 0.02065899, + -0.009741241, + -0.011483437, + -0.0133353695, + 0.009935322, + 0.010573445, + 0.006179922, + 0.01627513, + 0.011737903, + 0.003226013, + 0.022156741, + -0.018620929, + -0.01777529, + 0.008175604, + 0.0016045879, + -0.0029265038, + 0.0021788888, + 0.010028388, + -0.010622037, + 0.0003946121, + 0.011146568, + 0.009001273, + -0.0067314114, + -0.023070794, + -0.008757176, + -0.005538598, + 0.035726305, + -0.030223409, + -0.013083865, + 0.02403896, + 0.0012364216, + -0.022822661, + 0.0031923193, + 0.03859201, + -0.001968577, + -0.006411719, + 0.027751718, + -0.027976727, + -0.0020238843, + -0.015425944, + 0.008480097, + 0.01743972, + -0.03977096, + 0.002610674, + 0.02234449, + -0.020265289, + 0.02029537, + 0.0024829702, + 0.005901852, + -0.0102470815, + 0.018335385, + 0.017356101, + -0.005466808, + -0.0016111028, + 0.007029766, + 0.011143762, + -0.0051274584, + 0.02794184, + 0.0018588494, + 0.006535482, + 0.01384492, + -0.009647197, + 0.017071873, + 0.008974704, + 0.007221637, + -0.013603257, + 0.00540491, + -0.01196659, + -0.009878937, + -0.07751112, + 0.009982854, + 0.013531767, + -0.01750864, + -0.0058993297, + -0.010440269, + -0.007223993, + 0.0004057722, + 0.012643911, + -0.012247717, + -0.008788133, + 0.01751591, + -0.015608312, + 0.01685601, + 0.015184137, + -0.0039273747, + -0.015904171, + 0.013306926, + 0.003270806, + -0.003112624, + 0.015502476, + 0.0128690535, + 0.026035232, + 0.0069733867, + -0.0012709346, + 0.01779661, + 0.014128588, + 0.008355636, + 0.017721467, + -0.032423608, + 0.0040111355, + -0.109767415, + 0.01800147, + 0.011355999, + 0.01732263, + 0.011371235, + 0.0065964838, + 0.012508826, + 0.00875898, + -0.009659394, + -0.011641472, + 0.008994596, + -0.000541746, + -0.019262038, + 0.02257225, + 0.0037666305, + 0.1759314, + -0.011083732, + -0.011096129, + -0.0021755132, + 0.03005365, + -0.009839315, + -0.009082269, + -0.0021492261, + -0.011667841, + -0.0009459134, + 0.011013641, + -0.013615024, + 0.014298762, + -0.016583417, + 0.009037499, + 0.009999642, + -0.0069480594, + -0.015509829, + -0.036029406, + 0.012574708, + 0.012039721, + -0.01139339, + 0.028019309, + -0.011415676, + 0.019461382, + 0.02094867, + 0.0066629616, + -0.014232094, + -0.0019316599, + -0.0026851152, + 0.0018528218, + 0.011884893, + 0.023531225, + 0.026506547, + 0.019548418, + -0.026613288, + -0.058991373, + 0.013974939, + 0.041930024, + 0.015625289, + -0.0026592927, + -0.0022334908, + -0.035503462, + -0.0068886676, + 0.016730804, + -0.013184282, + -0.0054780557, + 0.006730944, + 0.011812617, + -0.0023940308, + 0.0040142424, + 0.017965924, + 0.006230427, + -0.012023672, + 0.01193248, + -0.00480636, + 0.013578558, + -0.01014002, + 0.002607888, + -0.023075152, + -0.020938518, + -0.006875862, + -0.010944789, + 0.0016648102, + -0.02866273, + -0.0062460005, + -0.0041332464, + -0.002419293, + -0.009879285, + -0.0011643772, + -0.011210249, + -0.0059280577, + 0.04624401, + 0.011034667, + -0.033948317, + 0.010635842, + -0.015743993, + -0.004884986, + 0.022342958, + -0.0046785534, + 0.012329268, + -0.0035886692, + 0.008836355, + 0.0012729478, + -0.0025380596, + 0.008947849, + -0.011649148, + -0.008452644, + -0.018643655, + 0.009240796, + -0.006998141, + 0.013581855, + 0.020466326, + 0.015995642, + 0.0047566146, + -0.009059944, + -0.0230155, + -0.00568377, + -0.006553409, + 0.00095187046, + 0.023107348, + -0.0033433698, + 0.004151198, + 0.008758634, + 0.005522271, + 0.00074491353, + 0.010456838, + 0.0018540412, + -0.0056753014, + 0.015488553, + -0.008577112, + 0.0073200883, + 0.029729836, + -0.0003803152, + -0.0075514945, + 0.011939851, + 0.013535546, + 0.01551645, + 0.0005487665, + 0.0015498119, + -0.0013686672, + -0.015682774, + -0.0006655467, + -0.018248186, + 0.007391832, + 0.031391453, + -0.008657709, + 0.007814712, + -0.0041959696, + -8.9730056e-05, + 0.00862867, + -0.013247852, + -0.00359875, + 0.0033425884, + -0.010817053, + -0.0024565854, + -0.0025616894, + 0.0063345213, + -0.018881122, + -0.0028153076, + -0.004178576, + 0.013227916, + -0.0009714555, + -0.003745339, + -0.0040984172, + 0.021268869, + -0.0036756753, + 0.0042561297, + 0.0073148203, + 0.020137565, + -0.020034134, + -0.0027910324, + -0.009887379, + -0.0074726143, + -0.0019888817, + 0.0076818876, + -3.5185767e-05, + -0.01259977, + 0.016189603, + -0.0033148054, + -0.0054394347, + -0.0130495, + 0.007845817, + -0.017973112, + -0.0072650826, + -0.0025931138, + -0.0111553725, + 0.009376972, + -0.0047410955, + 0.009441436, + 0.009923029, + -0.019664193, + 0.0036295184, + 0.012965504, + 0.0053555537, + -0.0067654955, + -0.028558359, + 0.013580956, + -0.0048293252, + 0.0029994557, + -0.0037350308, + 0.013576812, + -0.018575467, + 0.0013208555, + -0.010166264, + -0.005391491, + 0.0026590673, + -0.0019632545, + -0.018207865, + 0.015604931, + 0.01269651, + -0.014232606, + 0.015538605, + 0.011077022, + 0.011468066, + -2.5617703e-05, + -0.0059816977, + -0.0040265643, + -0.0095618, + 0.0059205433, + -0.004717566, + -0.0065576807, + -0.006179225, + -0.00048346032, + -0.0022051877, + 0.0038358844, + 0.0127531765, + -0.0022487887, + -0.0024102605, + 0.0039293002, + 0.006930553, + 0.023766395, + 0.012744543, + -0.008747719, + 0.00082147325, + -0.010755195, + -0.0101795355, + 0.025872659, + -0.010253086, + 0.0015751722, + 0.007285309, + -0.007482195, + 0.001578618, + -0.008217535, + 0.0019503374, + -2.9443578e-05, + 0.0016160882, + 0.013071392, + 0.00736983, + 0.012191658, + 0.00044877562, + 0.007949159, + -0.006756194, + 0.008867985, + 0.002330643, + 0.002464825, + 0.011418792, + 0.007812943, + 0.017862773, + -0.018558832, + 0.010283134, + 0.008645683, + 0.01330512, + -0.027024375, + -0.008063128, + 0.0077728815, + 0.0023448921, + -0.0019505746, + -0.021876818, + 0.0040953932, + -0.0021006765, + -0.0030211697, + 0.006367454, + 0.022272265, + 0.017458457, + -0.0072665988, + 0.012167716, + -0.003225298, + 0.0009803289, + -0.0038456817, + -0.005121437, + -0.011292835, + -0.0024890837, + -0.022529177, + -0.002943297, + 0.0054065115, + 0.016208753, + 0.0078538, + -0.006325404, + 0.0033352273, + 0.0032606563, + 0.0022635972, + 0.0058103786, + 0.0047208755, + -0.0010763096, + 0.0019977016, + 0.011211282, + 0.012099789, + 0.0058530592, + -0.0079528745, + -0.0022821457, + -0.015429311, + 0.002091637, + -0.012202914, + -0.005769598, + -4.9549937e-05, + -0.019219175, + -0.016427452, + -0.0124934, + 0.011391695, + 0.008626614, + 0.0038711757, + 0.008935884, + 0.005755672, + 0.0038448959, + 0.10203414, + -0.00491466, + 0.01911876, + -0.004106837, + -0.0031110372, + 0.00083937496, + -0.014227256, + 0.0070216944, + 0.019370308, + -0.015442503, + -0.012127851, + -0.003917447, + 0.0031005864, + -0.017422454, + 0.006015996, + 0.0040558344, + -6.778924e-05, + -0.010797539, + 0.018605713, + 0.0050685722, + -0.0026278528, + -0.00270912, + -0.013774137, + 0.0020730842, + 0.00738008, + -0.008515877, + -0.007146094, + -0.001406558, + -0.001264173, + 0.007721611, + 0.001030842, + 0.0016861404, + -0.0034692846, + 0.0007273634, + -0.013399225, + -0.020340467, + -0.0062097055, + 0.0073292735, + 0.026675716, + 0.00955875, + 0.015377012, + -0.009985699, + -0.005048428, + 0.00832004, + -0.0025997728, + 0.0018225466, + -0.017975392, + -0.0011290255, + -0.0060312785, + -0.0015739857, + 0.009935285, + 0.0049610613, + 0.0048964336, + -0.010850079, + -0.029929858, + -0.020901177, + 0.013625098, + -0.008362455, + 0.012223114, + -0.00550919, + -0.0056522265, + 0.0044907844, + 0.007421419, + 0.002716557, + 0.0025252753, + -0.017997548, + 0.0006915558, + 0.0025770622, + -0.013855779, + -0.012460083, + -0.0137106925, + 0.027582813, + -0.00047286818, + 0.014739756, + 0.04005512, + 0.016134534, + -0.013676932, + -0.0013754886, + -0.0072753164, + -0.0053872326, + 0.010810851, + -0.0044695656, + -0.0054093376, + -0.011447949, + -0.0034802065, + 0.00886274, + 0.0024936812, + -0.0016941471, + -0.0046303063, + -0.005115387, + 0.011388673, + -0.002602833, + 0.0015605927, + 0.0076540667, + 0.01495087, + 0.014479292, + 0.13426869, + -0.010343856, + -0.013991341, + -0.010159898, + -0.025989842, + -0.005845415, + 0.011808049, + 0.0009514725, + -0.008544427, + 0.008789091, + -0.0019632503, + 0.0074643474, + 0.009040342, + -0.0014615289, + -0.009654081, + -0.0045177573, + -0.004699992, + -0.0039853775, + -0.012154477, + 0.0049168468, + 0.016103074, + -0.0029735023, + -0.0032849067, + -0.011890683, + 0.023391783, + 0.001115073, + -0.007976776, + 0.0028829123, + -0.013872473, + 0.010126067, + 0.0038869805, + -0.005223845, + 0.0144363735, + -0.012691636, + 0.0033915986, + -0.0026844176, + 0.013726618, + 0.0050477516, + 0.008253508, + -0.008230563, + 0.009430952, + 0.009419306, + 0.009602341, + -0.006817221, + -0.011411092, + -5.3084113e-05, + -0.0051366547, + 0.025701798, + 0.0050504627, + 0.001863422, + -0.007653452, + -0.011191641, + 0.0018513721, + -0.005511763, + -0.003843674, + -0.014216934, + 0.007948217, + 0.010417587, + 0.0003743493, + -0.020185111, + 0.020256234, + 0.001604993, + 0.0050220755, + 0.0044933474, + 0.001094293, + -0.0070919646, + -0.004933035, + -0.014843117, + 0.0037880135, + -0.0016433855, + -0.0015997805, + 0.012379244, + -0.005374086, + -0.008613257, + -0.00308308, + 0.012005496, + 0.01219479, + 0.027671035, + 0.01966535, + 0.018461045, + 0.00016139045, + -0.01710834, + -0.0061272453, + -0.0009167629, + -0.0009247159, + -0.0041763783, + -0.0069067464, + 0.0269922, + 0.0013090636, + -0.009669332, + 0.02541561, + 0.0026287434, + 0.00438516, + 0.008517329, + -0.010393998, + -0.0006080028, + 0.0013368356, + -0.0067964206, + 0.006055294, + -0.0018739895, + 0.011661225, + 0.0006691963, + 0.0063973363, + 0.0052031865, + 0.0056542293, + -0.005343611, + -0.002528273, + -0.0099809095, + -0.0089971805, + -0.005067785, + -0.0045591523, + -0.001206469, + 0.004514228, + -0.015323275, + -0.0030214747, + -0.010772925, + 0.013496088, + 0.0002321004, + -0.008330514, + 0.0006543195, + -0.008927259, + -0.007080007, + -0.017847273, + -0.007852169, + 0.004867326, + 0.02114902, + 0.004206768, + 0.02426388, + 0.0031347352, + -0.012892525, + -0.0136010805, + -0.0021259983, + 0.0053054765, + -0.013394673, + -0.003549579, + 0.00056906993, + 0.0029023157, + 0.0055223512, + -0.03244142, + -0.0059293862, + 0.012482649, + -0.0053719017, + -0.0056271334, + 0.004663817, + 0.0038268266, + 0.009113935, + 0.012919591, + 0.010335849, + 0.019291041, + -0.027955465, + 0.0175151, + 0.002201153, + -0.018746039, + -0.0025196732, + -0.0060254936, + -0.0046358444, + -0.0043030255, + -0.0071517783, + 0.001981071, + -0.006623821, + 0.0062295506, + -0.06752047, + -0.0013635798, + -0.0082442155, + 0.010408489, + 0.0027342502, + -0.01580649, + 0.00072810904, + -0.00639373, + 0.0013875354, + 0.023504796, + -0.003944722, + -0.005825697, + 0.0039608637, + 0.00616855, + 0.01160933, + 0.0038453587, + -0.0030675516, + 0.016232373, + 0.0067002834, + -0.010276981, + -0.007333522, + -0.011839703, + -0.0075594834, + 0.011761927, + -0.0044737575, + 0.016663749, + -0.0012487443, + 0.015731106, + -0.018402008, + -0.0183839, + 0.0026329358, + 0.0011446407, + 0.013813632, + 0.0098859025, + 0.006023755, + -0.009067822, + 0.008725908, + -0.0130427135, + -0.018925047, + 0.0014232913, + 0.018175516, + -0.0026799976, + -0.008415098, + -0.006190411, + -0.015069961, + -0.012387894, + 0.014828759, + 0.003389344, + 0.006926882, + -0.007365336, + 0.00039667886, + -3.3663047e-05, + -0.014900065, + -0.003231955, + 0.011181726, + 0.005845175, + 0.018248007, + 0.0013438802, + 0.0020612935, + -0.013579148, + 0.027580371, + 0.017224563, + -0.0069170427, + 0.0012293892, + -0.013908563, + 0.009362261, + -4.4852834e-05, + 0.011255446, + 0.007963492, + 0.00599945, + 0.0085712075, + 0.017237164, + 0.0048445994, + -0.014030399, + -0.00011396099, + -0.0034294438, + 0.014459115, + -0.0043620956, + -0.0030048848, + -0.010300076, + 0.0048096916, + -0.0014136425, + 0.005238761, + 0.0006934089, + 0.011712095, + -0.02344152, + -0.0034592242, + -0.0012979321, + -0.0008097194, + 0.00024911689, + -0.008433209, + 0.01945377, + 0.0038686616, + 0.0073846136, + -0.0018593392, + -0.010089531, + -0.020803986, + 0.0017015274, + 0.01011945, + -0.005920297, + 0.00075382984, + -0.013361308, + -0.010457353, + 0.003709525, + -0.0020410046, + 0.009095445, + 0.0057571135, + 0.0073872292, + 0.0074922987, + 0.0042305817, + 0.0046910136, + 0.011337975, + 0.010771098, + 0.0055035288, + -0.0024431818, + -0.0034784204, + 0.0019023293, + 0.00074378995, + -0.0021880115, + -0.02343962, + -0.0045665954, + 0.004842072, + -0.007769299, + -0.01107295, + 0.01570419, + -0.011471096, + 0.0028621554, + -0.011788264, + 0.0024176063, + -0.0067343414, + 0.0036415146, + 0.009940857, + 0.010515336, + 0.0153192775, + -0.0055591646, + -0.0011023014, + 0.008124838, + 0.021870963, + -0.020843172, + -0.0076007135, + 0.019367531, + -0.016218679, + -0.00038258635, + -0.0008830315, + 0.00040922983, + 0.009032848, + -0.014394465, + 0.015315479, + -0.0048474, + 0.005155119, + -0.011130397, + -0.01709991, + 0.01525269, + 0.025027033, + -0.010582375, + -0.013208439, + -0.0022990992, + 0.013619277, + -0.0012467117, + -0.00423292, + 0.017739438, + 0.012879134, + 0.012289041, + -0.0028026896, + 0.0018197205, + -0.005789294, + -0.0013462343, + -0.0140815005, + 0.007697268, + -0.0073407823, + 0.015746001, + -0.014494718, + 0.002227598, + 0.0058589512, + -0.008022744, + 0.00032994995, + 0.016861351, + 0.007746557, + 0.0012076213, + -0.0014928118, + -0.027859742, + -0.007508688, + -0.0062162927, + 0.008185115, + -0.011211574, + -0.030456275, + -0.006595851, + -0.0043915994, + -0.004560805, + 0.0021029217, + -0.005901756, + -0.010120026, + 0.003870392, + -0.0065757125, + 0.007439931, + -0.007206456, + 0.009306462, + -0.011222527, + 0.0038380732, + 0.0041258056, + 0.0036614554, + 0.008943188, + 0.004447874, + 0.012172903, + -0.0027927645, + -0.10990407, + -0.0107053425, + -0.010982829, + 0.00026859544, + -0.011364037, + 0.002107165, + 0.0027699512, + -0.009688038, + 0.005025573, + -0.0030257965, + -0.029507438, + -0.010607273, + 0.0036587769, + -0.052284706, + 0.005750383, + 0.013304516, + 0.0056821113, + -0.00055684504, + -0.0124841295, + -0.014194956, + -0.009881316, + -0.004730288, + -0.010770149, + -0.003442465, + 0.0002029708, + -0.0048261397, + -0.009385183, + 0.013682417, + 0.0036431835, + -0.0036617871, + 0.0033700669, + -0.012511542, + -0.0040065665, + -0.00039073988, + -0.0001645874, + 0.0023828647, + -0.0035815707, + -0.02277364, + -0.13885239, + 0.0048258253, + -0.016727017, + -0.0035861162, + -0.0004357154, + 0.0076328944, + 0.0015466264, + 0.004704767, + 0.014394146, + 0.003662711, + -0.017604215, + -0.0095090605, + -0.010775129, + -0.020340193, + -0.006387117, + 0.008352139, + -0.008710415, + 0.012402521, + -0.0185954, + -0.00034902617, + -0.0139139695, + -0.00696644, + 0.0021379532, + 0.006596915, + -0.00443882, + 0.0092429025, + 0.008517412, + 0.016136743, + 0.011851472, + 0.0055892696, + 0.006454984, + -0.002844811, + 0.004111174, + -0.015119909, + 0.00046974185, + -0.008508248, + -0.0036962251, + 0.011149122, + -0.011589812, + 0.0005875099, + -0.0041049854, + -0.004684072, + -0.011526992, + 0.0011532112, + 0.0058752815, + 0.012508175, + 0.02132431, + 0.0082033025, + -0.010449682, + 0.013685048, + -0.005249225, + 0.007403782, + -0.00350363, + -0.00760309, + 0.0005340016, + 0.00059681403, + -0.0072446917, + 0.019734096, + 0.0081668, + -0.0026972305, + 0.011692245, + -0.016342698, + -0.0129035795, + -0.008587365, + 0.0061726817, + -0.011630305, + 0.0046947543, + 0.019354332, + -0.004189159, + 0.0331135, + 0.013813115, + 0.012493036, + -0.009233703, + 0.004784202, + 0.0072427946, + -0.0073105106, + -0.009735168, + 0.013644838, + 0.0047425316, + -0.011731725, + 0.020365646, + 0.00358893, + -0.0042011817, + 0.00843774, + 0.0004130545, + -0.004626026, + 0.01563459, + 0.017539307, + 0.0061307596, + -0.036535047, + 0.002856945, + 0.0010879508, + 0.006720774, + 0.011432691, + 0.0011208986, + -0.0014615881, + 0.0025266362, + 0.0029062033, + -0.0012071481, + -0.03364649, + 0.017724605, + 0.007882852, + -0.0008947685, + -0.0055972124, + 0.0043411045, + 0.0059209466, + -0.024726767, + 0.0022163335, + 0.017410137, + -0.012331643, + 0.00093629386, + 0.010155606, + 0.0071074655, + 0.017148903, + 0.0069656046, + -0.008216308, + -0.016422855, + -0.01051236, + 0.002277297, + 0.008514118, + -0.01104895, + 0.006501589, + -0.008281461, + -0.016874673, + -0.009701664, + -0.00534877, + -0.00083992106, + 0.008316926, + -0.011451599, + -0.009497453, + -0.0015088908, + 0.03155688, + 0.001647142, + 0.0062776566, + 0.014497768, + 0.0049836687, + 0.009408785, + -0.008823924, + -0.0006205365, + 0.017113376, + 0.026770512, + -0.02324921, + 0.005502053, + 0.016133603, + -0.01073965, + 0.01119444, + -0.005914867, + 0.0073784553, + 0.029522652, + 0.037033953, + -0.01011684, + -0.018632608, + 0.0071946904, + 0.0072457413, + 0.012746859, + -0.007071921, + 0.0008394189, + -5.1466977e-05, + -0.009039916, + -0.00839706, + -0.013037034, + -0.010557386, + 0.0042593433, + -0.010780316, + -0.020731559, + 0.0055720196, + -0.0074543073, + 0.021371728, + -0.012882052, + 0.020496717, + 0.011643548, + -0.009634179, + -0.00092866144, + 0.00483516, + -0.0083142165, + -0.021085694, + -0.010626112, + 0.006075356, + 0.0050198976, + 0.00070266397, + -0.014482145, + -0.013829435, + 0.024985164, + -0.0059741247, + -0.017689096, + 0.011286558, + 0.011150053, + 0.0019929903, + 0.010271928, + 0.004388811, + 0.0037919895, + 0.01137747, + 0.011752597, + 0.008246966, + -0.016166897, + -0.00929031, + 0.0016504466, + 0.003116734, + 0.016833946, + 0.008572729, + 0.011849296, + 0.004536235, + -0.0149264615, + -0.1220818, + -0.0068386863, + -0.011979482, + -0.0007432419, + 0.004312895, + 0.005471731, + -0.0030712036, + 0.0043197353, + 0.0010173935, + -0.0041594156, + -0.023357423, + -0.011802607, + -0.009341089, + 0.00080977683, + 0.006396491, + 0.007133644, + 0.009445247, + 0.0046809516, + -0.017313533, + -0.014050897, + -0.008909982, + 0.001399032, + 0.0005823391, + -0.0037739954, + -0.008802786, + -0.010101861, + 0.0005422452, + -0.0026704257, + -0.025089346, + -0.0015616232, + -0.00573369, + 0.009899661, + -0.011831669, + -0.0069454764, + -0.0136666875, + -0.004289939, + -0.0090006525, + 0.008795462, + -0.029714026, + -0.0105763795, + 0.0218584, + 0.009998341, + -0.011087116, + -0.0026374902, + -0.0047321855, + 0.014291109, + -0.018461676, + -0.0038414346, + -0.037691638, + -0.020409081, + 0.016592087, + 0.01226431, + -0.005693988, + -0.025787413, + -0.016990053, + -0.02508468, + 0.012653639, + -0.006535383, + -0.003179042, + 0.017017324, + -0.005512723, + -0.031306356, + -0.006355945, + 0.00906425, + 0.017586047, + 0.008144389, + -0.005161437, + 0.16480307, + -0.011086962, + 0.0038255285, + -0.0034155461, + -0.0022244893, + 0.0069111395, + 0.004945085, + -0.0015480005, + -0.019974647, + -0.017162047, + -0.011386591, + -0.0007254434, + -0.018195067, + -0.018254226, + 0.004978872, + 0.018840728, + 0.0018573047, + -0.004953671, + 0.014272468, + -0.0044418764, + -0.0054419185, + 0.005396661, + -0.0010648494, + -0.008385663, + 0.009492778, + -0.0036053853, + -0.007359148, + 0.0106931, + 0.019590788, + -0.011659043, + 0.005892998, + -0.010862912, + -0.022831047, + -0.004673795, + 0.00824299, + -0.0008459908, + -0.0014790132, + 0.012803555, + -0.0010869586, + 0.01929423, + 0.013099115, + 0.0041837185, + 0.0030553467, + -0.014001589, + -0.006455516, + -0.010406346, + -0.0104905525, + 0.0002410486, + -0.008702263, + 0.002118317, + -0.012232092, + 0.006574767, + -0.012062212, + -0.015584312, + -0.0021630656, + -0.011257759, + 0.011374717, + 0.007447821, + 0.0003595476, + 0.01140418, + -0.011829871, + 0.009773827, + 0.012263084, + 0.005297637, + -0.018520074, + 0.016378839, + -0.012936623, + -0.014232741, + 0.0042014606, + -0.14913663, + 0.012867319, + -0.00017956202, + -0.008277805, + -0.0124453865, + -0.020673662, + 0.015406676, + -0.020010436, + 0.00090116076, + -0.016393082, + -0.0041900394, + -0.0045637037, + 0.009775279, + 0.01950372, + -0.0068366355, + -0.012744289, + 0.016504377, + -0.0025944575, + 0.02002585, + 0.0081843035, + -0.0054818345, + 0.0037938312, + -0.021376, + -0.0149891535, + 0.006775467, + -0.002768766, + -0.022120709, + -0.0034067237, + -0.021241143, + 0.011849072, + -0.0086819185, + -0.00019697235, + -0.013666072, + 0.007943947, + 0.007627519, + 0.003599772, + -0.0076106023, + -0.0044981325, + 0.028816868, + -0.008739917, + 0.0072553093, + -0.0105119115, + 0.00381464, + 0.008035421, + 0.007950661, + 0.00068530365, + -0.009898741, + 0.0030974487, + 0.0141418995, + 0.009554195, + 0.006857026, + -0.0071131284, + -0.009802578, + -0.0040713213, + -0.021320116, + 0.019067012, + -0.0031912646, + -0.020890824, + 0.0057409694, + -0.0062651252, + -0.0060876664, + 0.012849065, + 0.0015726165, + -0.0061818906, + -0.010648872, + -0.0035371082, + 0.018041143, + -0.018159835, + 0.013423874, + 0.01530546, + 0.0008696444, + 0.01569375, + -0.0018156114, + -0.007845879, + -0.012982294, + 0.0018712338, + 0.0077399565, + 0.0014243987, + 0.01192824, + 0.014510453, + 0.0034112479, + 0.0016788311, + -0.009293432, + -0.007831967, + 0.024831, + -0.028713739, + -0.0032460599, + -0.022919618, + 0.008364606, + -0.00040217765, + 0.010126134, + 0.004853389, + 0.000106981985, + 0.0019262509, + 0.018024819, + -0.008974372, + -0.00042362008, + -0.009336357, + -0.013317186, + -0.0060473504, + 0.00867207, + -0.017213084, + -0.017611237, + -0.0037938196, + 0.009825168, + 0.004368983, + -0.01300473, + -0.008491524, + 0.032759387, + -0.0075073806, + 0.0042075575, + 0.0016422486, + -0.0041655507, + 0.012251472, + -0.02027894, + 0.0050726263, + -0.003914977, + -0.013095536, + 0.016692141, + -0.013846502, + 0.016801504, + -0.020000007, + 0.015780196, + 0.0029369884, + -0.0020020218, + 0.0158049, + -0.010142994, + -0.004979061, + 0.021189557, + -0.0005056278, + 0.014088399, + 0.0126800705, + -0.01594135, + -0.0011783603, + 0.015942859, + -0.001983587, + -0.0009188087, + 0.0038366695, + 0.027170043, + -0.005473774, + -0.00013074857, + 0.011682235, + 0.0078046597, + 0.0035562874, + 0.0022400073, + 0.012886119, + 0.0033455084, + 0.03412586, + -0.0035939931, + -0.019804811, + -0.001450045, + -0.013857072, + -0.01416591, + 0.019854646, + 0.013035945, + -0.004093718, + 0.0048802774, + 0.0053989785, + -0.023377517, + 0.013081268, + -0.020780435, + 0.013658499, + 0.005340897, + 0.00040710345, + 0.02445704, + -0.0033317, + -0.0125199575, + -0.021833785, + -0.018849034, + -0.029079506, + 0.0004898928, + 0.016391948, + 0.003809064, + -0.0039156214, + -0.010828612, + 0.010330856, + 0.008464947, + -0.0037880877, + -0.0057999217, + -0.07140847, + 0.01006003, + -0.0041445307, + 0.008266761, + -0.005311985, + -0.032335926, + 0.018721372, + 0.021439493, + -0.011798922, + -0.0029923597, + 0.01142312, + 0.011968102, + -0.03294722, + -0.015946968, + 0.009894799, + 0.006825522, + 0.0053546745, + -0.010055941, + 0.0052234195, + -0.010754163, + -0.003336235, + 0.012318369, + -0.017908657, + 0.0074471557, + -0.0114097, + -0.013081481, + 0.005639167, + 0.015740372, + 0.0063889986, + -0.014047661, + 0.009938355, + -0.028224077, + 0.01929915, + -0.01289041, + 0.0049364334, + -0.0015290666, + -0.004122525, + -0.025276305, + 0.012094333, + -0.06281338, + 0.0022735957, + -0.0074202325, + -0.14804429, + -0.011656587, + 0.010275289, + 0.0047942866, + -0.0005372271, + 0.0021211687, + -0.01737935, + 0.013022131, + 0.015445521, + -0.01059692, + -0.008912527, + 0.0017534903, + 0.00090704864, + 0.00051959534, + 0.007003877, + 0.010791395, + -0.0060087964, + -0.008744861, + -0.022330513, + 0.0028605298, + -0.010039402, + 0.0030042864, + 0.014352637, + 0.020213809, + -0.017128328, + 0.0004655207, + 0.019608269, + -0.0030722257, + 0.0057702, + -0.020816311, + 0.0004141264, + 0.015269294, + -0.012568678, + 0.008418415, + -0.00774437, + 0.012524267, + 0.015127165, + -0.00874009, + 0.003379087, + 0.0023810486, + -0.011831773, + 0.039992522, + 0.0051277997, + -0.024159433, + 0.007607922, + -0.12491869, + -0.00013385944, + 0.009971255, + 0.005127408, + -0.0008208937, + -0.010099312, + 0.014101599, + 0.15716882, + -0.011877222, + -0.030268941, + 0.0025665218, + 0.015236212, + -0.011099543, + 0.0019087215, + 0.007858789, + -0.0013265446, + 0.0014010714, + 0.007899191, + 0.032752316, + -0.0015167505, + -0.011594652, + -0.014391309, + 0.0013123996, + 0.00096725096, + 0.003517934, + -0.06024647, + -0.025745634, + -0.0056977593, + 0.010264575, + 0.009080434, + 0.0075298874, + -0.001963013, + -0.0061908956, + -0.0016231594, + -0.0065720626, + -0.008558385, + 0.010461489, + -0.022846729, + -0.0046567367, + 0.013467769, + 0.0049480903, + -0.016364824, + 0.00078728306, + 0.0036025462, + 0.0034704458, + -0.006989038, + -0.006119407, + 0.0027509741, + 0.008926168, + -0.008440965, + 0.014381893, + 0.0019435926, + 0.006236396, + 0.008456362, + -0.015502054, + -0.008109879, + 0.014042967, + -0.00610464, + 0.022108994, + -2.0368116e-05, + -0.011896909, + -0.011214614, + 0.015859647, + 0.014304203, + 0.002503301, + -0.005781656, + -0.018216772, + -0.005107332, + -0.023427503, + 0.012870557, + 0.008733462, + 0.003869639, + 0.007122562, + -0.00028245733, + -0.0012370315, + 0.007976467, + -0.0030053032, + -0.0003862554, + -0.009594697, + 0.004214132, + 0.015323344, + 0.0140319085, + -0.016783018, + 0.0040569003, + 0.0031370998, + 0.01255547, + 0.0081010945, + 0.004597608, + 0.014653819, + -0.010881919, + -0.0027400048, + 0.0029309564, + 0.015940081, + -0.010488371, + 0.010026694, + -0.00024988048, + -0.0018306287, + 0.011608754, + -0.006279168, + 0.005099627, + -0.0020300054, + 0.0025540227, + 0.020975113, + -0.0021214988, + -0.007980166, + -0.0020032811, + 0.001919213, + 0.015866177, + 0.0053089214, + 0.0011500912, + -0.037153643, + -0.007162554, + 0.005038172, + -0.0003459101, + -0.00029811554, + -0.0060949815, + 0.0067296852, + -0.0049952613, + -0.0045913495, + -0.0018282357, + -0.0128674125, + -0.0205871, + 3.29984e-05, + -0.027009554, + -0.008523808, + -0.0036094482, + -0.009514507, + -0.0027317356, + -0.000534841, + -0.00642137, + -0.00949954, + -0.0016902136, + 0.0042186053, + -0.0060009253, + 0.008955231, + 0.0042616385, + 0.0035597195, + 0.024822535, + 0.0038701766, + 0.009247778, + -0.0056363917, + -0.03028555, + -0.012261454, + 0.004808264, + 0.0034534174, + -0.008438677, + 0.022703392, + -0.010286755, + -0.0029985486, + -0.002029844, + 0.012189361, + 0.0022201708, + 0.024444278, + 0.008692711, + 0.00033321802, + -0.006918189, + -0.009906663, + -0.021065399, + 0.0017365889, + 0.0038714383, + -0.01146002, + -0.005695929, + 0.0136236455, + -0.012383124, + 0.0049548266, + -0.0019298265, + -0.009133705, + 0.0037257236, + -0.0034859076, + -0.009674609, + 0.0028380465, + -0.008408325, + -0.014348723, + -0.013032569, + 0.023641769, + -0.013026533, + -0.008958854, + 0.0086282, + 0.0011653292, + -0.00012710429, + 0.023304516, + 0.007536961, + -0.016121544, + 0.013512596, + 0.016179657, + 0.002764801, + 0.0055803484, + -0.008541389, + 0.014519642, + 0.013343512, + 0.025049152, + -0.020564495, + 0.0048943223, + -0.02374938, + 0.013459238, + -0.012726988, + 0.005789575, + 0.013163915, + 0.004431687, + -0.0029504322, + 0.0060082343, + -0.0016516849, + -0.011800513, + -0.029592216, + -0.013557013, + -0.013295235, + -0.030126525, + -0.0056508062, + -0.0023563, + -0.009020173, + -0.002678054, + -0.017446466, + -0.0094066225, + 0.00041972683, + -0.025415294, + 0.007893892, + 0.007615552, + 0.014444293, + -0.0055864854, + 0.007341343, + 0.0074760746, + 0.007633242, + 0.015048061, + 0.015688792, + -0.0055214004, + 0.0023507455, + -0.024353081, + -0.0023434556, + 0.014327491, + 0.0030884864, + -0.013537927, + 0.00884923, + -0.008928762, + -0.0040857736, + 0.009974, + 0.012013531, + -0.008256043, + 0.0064773154, + -0.0023738826, + 0.001223818, + -0.0068574455, + -0.00012896747, + -0.024541218, + 0.009534192, + 0.0042668683, + -0.02659646, + 0.0009719781, + -0.007945843, + 0.008536529, + 0.0022086427, + -0.0073247547, + 0.025194552, + -0.0019298686, + 0.002036343, + -0.017242644, + -0.015562206, + 0.0016967627, + 0.008603264, + 0.0029286486, + -0.003824279, + 0.013932157, + 0.00973954, + -0.012137794, + -0.003032404, + -0.019269783, + -0.009771541, + -0.0007226373, + 0.02475148, + 0.0141635435, + 0.007586969, + -0.016065214, + 0.0049573043, + -0.012032935, + -0.021324394, + 0.009315734, + 0.0064129615, + 0.00014927378, + 0.008744266, + 0.012062963, + -0.006985634, + 0.008508218, + -0.011440213, + 0.00964045, + 0.01133469, + 0.00032885643, + -0.0045522386, + -0.00053115684, + -0.020326342, + 0.021684296, + 0.0116345035, + -0.0022538928, + 0.0088677835, + 0.014596996, + -0.019113265, + 0.014480809, + 0.0007274648, + -0.01183125, + -0.011485111, + 0.007765621, + -0.0020268657, + -0.0075831646, + 0.0022482022, + -0.023872044, + 0.00085110904, + 0.014016346, + -0.0069766473, + 0.012382482, + -0.0087001575, + 0.009347098, + 0.01530687, + -0.021898897, + 0.017915156, + 0.011825634, + 0.0032218006, + -0.014515737, + 0.009235042, + 0.005054707, + -0.00023745962, + -0.004250935, + -0.009820677, + -0.013538797, + -0.0012116351, + -0.0017041988, + -0.01726087, + -0.008089675, + 0.0031626658, + -0.00048189415, + 0.0014024241, + 0.01950393, + 0.015587983, + 0.011090538, + -0.0016524532, + 0.0005236974, + -0.0058108545, + 0.004716844, + -0.02033461, + -0.0009877229, + 0.018212706, + -0.0093770325, + 0.003982428, + -0.00014444556, + 0.0062729325, + 0.014332167, + -0.0040719965, + -0.0061802776, + 0.020435235, + 0.011924934, + 0.00204727, + 0.01323204, + 0.002210462, + -0.009072813, + 0.0107627595, + 0.0007087078, + 0.008023027, + 0.017904492, + 0.0017127544, + 0.02589081, + 0.0038643256, + -0.02423307, + -0.00029195778, + 0.007995035, + -0.00452324, + -0.004220507, + -0.014414159, + -0.0031739096, + -0.010584775, + 0.0058303205, + -0.001338251, + 0.003273328, + -0.008009112, + -0.01257899, + 0.012357312, + -0.002497284, + -0.0009386429, + 0.012057635, + 0.0038349011, + 0.0038896233, + 0.0023437173, + -0.009286228, + -0.012549473, + 0.0029719395, + -0.007542319, + -0.0027664232, + -0.0067998264, + -0.021942759, + 0.002787046, + -0.01490971, + 0.009879314, + -0.0096436925, + -0.00020947852, + -0.020315733, + -0.00096788775, + -0.009413338, + -0.009304855, + -0.012167087, + 0.0020818643, + -0.0065099327, + -0.00909283, + 0.012888071, + 0.023298446, + 0.0064363447, + -0.013862118, + 0.0060772416, + -0.01475394, + 0.0044472455, + 0.017185934, + 0.019436602, + 0.009869137, + 0.018604781, + 0.025304424, + -0.010937892, + -0.002263634, + -0.0007122261, + -0.014629204, + 0.0034150542, + 0.019551098, + -0.008361577, + 0.0070153293, + -0.0011046828, + 0.015581956, + -0.0020440167, + -0.017529536, + 0.007713052, + 0.019167863, + 0.00826607, + -0.0058899964, + 0.020170985, + 0.0047977166, + 0.02247314, + -0.004310414, + -0.0007319175, + -0.016704394, + -0.007411759, + -0.0018499614, + -0.039994832, + 0.013458039, + -0.012305411, + 0.010976608, + -0.007559491, + -0.0075970194, + -0.00020227736, + 0.003145673, + 0.0058201402, + 0.0036488434, + 0.019020593, + -0.015467047, + -0.0036180092, + 0.019398516, + -0.0025742245, + 0.0028556206, + 0.0031409739, + -0.031577792, + -0.0050074644, + 0.007063734, + -0.020470826, + -0.033115704, + 0.009944245, + 0.004177662, + 0.024237374, + -0.0019437312, + -0.00014068873, + -0.002508166, + 0.01317239, + 0.008986462, + -0.010209303, + -0.007866712, + -0.020596353, + 5.369359e-06, + -0.0078058653, + -0.0012830403, + -0.044026587, + -0.005174016, + -0.03564344, + 0.0070926305, + -0.0019275427, + 0.0009810884, + -0.016606791, + 0.0074037476, + 0.0030123368, + -0.06546688, + 0.0034776453, + 0.011120295, + 0.01001797, + 0.019042116, + 0.008829632, + 0.0069338735, + -0.001874668, + -0.011883109, + -0.012681935, + -0.0067498176, + -0.014146643, + 0.014275228, + 0.0014637288, + -0.005445066, + -0.023291945, + -0.0005322656, + 0.0022733167, + 0.014369217, + -0.0020721909, + 0.006157031, + -0.008283586, + -0.0047913403, + 0.02477168, + 0.003429128, + -0.008460797, + -0.020280162, + 0.019304782, + -0.019682132, + 0.003928251, + -0.017428666, + -0.017602952, + -0.0022491468, + -0.0036273727, + -0.016352264, + 0.0048243003, + -0.000685208, + 0.012863391, + -0.014002882, + -0.006907873, + -0.009265254, + 0.006359435, + 0.010224605, + 0.016601833, + 0.016259989, + 0.008347795, + 0.005522605, + -0.011284972, + 0.0020927084, + -0.0020404204, + 0.009591119, + -0.008249789, + -0.020043658, + -0.013941785, + -0.0064011873, + 0.009890922, + 0.007117129, + 0.025140274, + 0.0005499107, + 0.0003483327, + -0.017478283, + 0.018341277, + 0.029016636, + 0.0064986465, + -0.0061193053, + 0.013072971, + 0.014585744, + -0.012353626, + -0.0027855241, + -0.013575549, + 0.015350145, + 0.009848926, + -0.008276763, + -0.0020121688, + 0.010690222, + -0.0008974336, + -0.0116546415, + -0.0031986532, + 0.0072288, + 0.025728708, + -0.0031249374, + -0.012022611, + -0.011825202, + -0.0037892296, + 0.013141322, + -0.0177478, + -0.0074130623, + 0.005900281, + -0.00014823642, + -0.007070036, + 0.0039716936, + -0.005940218, + 0.018813876, + 0.0015189631, + -0.0053166742, + 0.022962367, + 0.020992372, + 0.016011156, + -0.01592979, + 0.022691514, + -0.0010972809, + 0.0020522869, + -0.017457156, + -0.009170573, + 0.01099267, + -0.011785615, + 0.026530871, + -0.00424621, + 0.011758892, + -0.00812807, + -0.005622689, + 0.004409983, + -0.014283218, + -0.005247292, + -0.011156406, + -0.004226873, + 0.0074621635, + -0.019091593, + 0.028141344, + -0.021888386, + 0.013931055, + 0.007820985, + 0.0055479384, + -0.004856852, + -0.00091494055, + 0.010230342, + -0.011932342, + 0.006545128, + -0.016224056, + 0.0007627138, + 0.0006399727, + 0.0071868007, + 0.03527624, + -0.009639844, + -0.018593716, + -0.00810965, + -0.01663213, + -0.015932452, + -0.014552818, + 0.011083051, + 0.009902237, + 0.010028546, + 0.0030299977, + -0.013098521, + -0.0046565356, + -0.0006407657, + -0.015523613, + 0.026782611, + -0.010173317, + -0.01612395, + -0.01702718, + -0.0039600846, + 0.018101834, + 0.032301784, + 0.0037288303, + 0.010824948, + 0.0208349, + 0.011633866, + -0.009939591, + 0.013894606, + 0.019552313, + -0.017619614, + 0.019269021, + -0.009312429, + -0.025078297, + 0.00013920297, + -0.009347357, + 0.004537545, + 0.022204338, + -0.0034044806, + -0.010558622, + -0.009329347, + -0.0019748297, + 0.00063408585, + -0.012375084, + -0.0018504508, + 0.004881047, + -0.0067747557, + -0.00084659655, + 0.015039512, + 0.0010219413, + 0.0017379763, + 0.015433696, + 0.00058014237, + -0.012020118, + 0.010022584, + 0.015457851, + 0.002211423, + 0.0016565683, + -0.025139315, + -0.021459, + 0.014618809, + -0.012526605, + -0.00740274, + 0.0126809515, + -0.0019000167, + 0.00063539343, + -0.00874152, + 0.015430644, + -0.017658077, + 0.0075533343, + -0.006519918, + 0.024877325, + 0.009812779, + -0.006363789, + -0.012374389, + 0.02541616, + 0.18462649, + 0.11526792, + 0.0052508377, + -0.00044761703, + -0.009050153, + 0.010650732, + 0.006017416, + 0.00018005799, + 0.00072948664, + 0.009898978, + 0.0014497037, + -0.018939748, + 0.010775164, + -0.006832922, + -0.013447669, + -0.0062945806, + 0.012257294, + 0.009475258, + 0.007595337, + 0.02188573, + 0.0018472828, + 0.009045042, + 0.012031416, + -0.00010125814, + -0.009343504, + -0.0020236033, + 0.014092441, + 0.0013784328, + 0.0042546424, + -0.005959832, + 0.007853338, + -0.0016118246, + -0.0025447453, + -0.004571399, + -0.028379625, + -0.036430914, + -0.0010068644, + -0.0051855748, + 0.007776854, + -0.038226184, + 0.0037884333, + 0.010283509, + 0.0072484445, + 0.023919944, + 0.014086368, + -0.00018560025, + 0.0049170493, + 0.027068036, + -0.00013420933, + 0.01723212, + -0.013389953, + -0.0051003727, + -0.00021509852, + 0.003870666, + -0.013807452, + 0.0013561611, + 0.013875184, + 0.006023632, + 0.016822927, + -0.015518509, + 0.0020085021, + -0.008048276, + 0.0019628382, + -0.0040684436, + 0.008659485, + 0.0039245924, + 0.00551558, + -0.015371306, + -0.00023036181, + 0.005161187, + -0.013345614, + 0.025713902, + -0.009256881, + 0.008888726, + -0.013973488, + 0.0042819027, + 0.007903922, + 0.004387427, + -0.010834162, + -0.010718152, + -0.0060921633, + 0.003031888, + 0.0014104783, + 0.017205963, + -0.009245757, + 0.009622233, + 0.0075305286, + 0.026649052, + 0.13736066, + 0.008154462, + -0.015039281, + -0.026480269, + 0.008656098, + -0.020609986, + -0.015150655, + 0.04014752, + -0.007889611, + -0.0011135179, + -0.0036446534, + 0.006699304, + 0.015556202, + -0.0056945905, + -0.0024478137, + 0.0092476895, + 0.009735379, + 0.091599174, + 0.0056021, + 0.019278813, + -0.016272712, + -0.0046410807, + 0.0021075646, + 0.016959798, + 0.0029414953, + 0.011044458, + -0.025402395, + -0.008037845, + -0.023347871, + -0.002494339, + -0.10772318, + -0.0024528082, + -0.0043749413, + 0.0057320497, + 0.0024924239, + 0.012760386, + -0.015916904, + 0.00067064655, + 0.0026036748, + 0.016109236, + -0.004944883, + 0.009831449, + -0.004012239, + 0.0056276266, + -0.018037086, + 0.007668524, + -0.002150356, + -0.009240703, + -0.0008202475, + -0.005584652, + 0.005159349, + 0.0045460872, + -0.014059115, + 0.0019225504, + -0.02081118, + 0.024462216, + 0.004441734, + -0.010375391, + 0.035441678, + -0.017530851, + -0.003076986, + -0.0053605125, + -0.022472676, + -0.015271784, + -0.0030105538, + 0.008215176, + -0.0025740666, + 0.004725247, + 0.0098277535, + -0.0061249463, + -0.015420087, + -0.029296102, + 0.008803563, + -0.010486231, + 0.017584939, + -0.0052096215, + 0.0015289391, + 0.0026822183, + -0.028251667, + -0.008381831, + 0.04681397, + 0.007581115, + 0.002155509, + 0.0025120515, + -0.005222936, + -0.0050298213, + -0.018340815, + -0.00022215371, + 0.0017728354, + -0.0126045495, + 0.0075326613, + 0.037906498, + -0.016870866, + -0.0037684212, + 0.0011321992, + 0.0030101482, + 0.013378535, + -0.00073598267, + 0.0023051137, + 0.0004901167, + -0.003971311, + 0.014696972, + 0.007278988, + -0.027982445, + -0.016460788, + -0.00805061, + 0.013027491, + -0.0026496765, + -0.020936437, + -0.013776074, + 0.0026636526, + -0.019884296, + 0.013538218, + 0.13639618, + 0.0024809542, + -0.007800207, + 0.023744622, + -0.019822184, + -0.00086897163, + 0.029729152, + 0.009492779, + -0.018486612, + -0.019375246, + 0.00038948472, + -0.004129453, + 0.0067316787, + 0.004018186, + 0.015620979, + -0.021984767, + 0.023398893, + -0.0041534244, + 0.010622007, + -0.0062215254, + -0.0059538176, + 0.0053777047, + -0.020272952, + -0.013718726, + -0.021421202, + 0.0023063675, + 0.009612504, + 0.0043075345, + 0.0007069897, + -0.021300059, + 0.005849679, + 0.015077473, + 0.025122648, + -0.0032336756, + 0.009730938, + 0.0044975094, + -0.008755698, + 0.0002829777, + -0.010012715, + -0.00068603334, + -0.0074916887, + -0.00019677772, + 0.004458541, + -0.00085575925, + -0.021948466, + 0.18724197, + 0.014525507, + 0.00787517, + -0.015456176, + 0.0012082667, + 0.0047056684, + 0.009015966, + 0.007880215, + -0.0012981875, + -0.00782629, + -0.003325395, + -0.020542271, + 0.0057972404, + 0.005876524, + -0.00036326455, + 0.0063252975, + 0.021228516, + 0.007923697, + -0.0024084728, + 0.016469555, + 0.009583652, + 0.008255333, + -0.018780245, + -0.024231758, + -0.0091475155, + 0.010054853, + -0.008968434, + -0.003836989, + -0.022054574, + 0.014087555, + 0.0146886315, + 0.015563549, + 0.012121979, + 0.0020204158, + 0.0052181636, + -0.008518424, + -0.009113635, + 0.019491484, + 0.014242927, + -0.014301521, + 0.012048937, + 0.028247222, + 0.020285107, + -0.005643046, + -0.013249632, + -0.0009739255, + -0.014178617, + -0.010769364, + -0.0102847265, + -0.004491722, + 0.0133311935, + -0.004458599, + 0.011353515, + -0.019393787, + 0.0060032266, + -0.005040102, + -0.00056236185, + -0.00016347737, + -0.0054768613, + 0.0037522588, + -0.014941016, + 0.0060006403, + 0.0023957035, + -0.0047713965, + -0.0129385395, + -0.01941618, + -0.0048729368 + ] + } + ] +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testGenerateFromSinglePrompt-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testGenerateFromSinglePrompt-googleai.httprr new file mode 100644 index 000000000..f72f9cf07 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testGenerateFromSinglePrompt-googleai.httprr @@ -0,0 +1,57 @@ +httprr trace v1 +770 2544 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 450 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"name all the planets in the solar system"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 2131 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:11:43 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=1694 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "There are **eight** officially recognized planets in our solar system. In order of their distance from the Sun, they are:\n\n1. **Mercury**\n2. **Venus**\n3. **Earth**\n4. **Mars**\n5. **Jupiter**\n6. **Saturn**\n7. **Uranus**\n8. **Neptune**\n\n*(Note: **Pluto** was classified as the ninth planet until 2006, when the International Astronomical Union reclassified it as a \"dwarf planet.\")*", + "thoughtSignature": "EskGCsYGAWkUfRN5P0rJAqhg+HP6e5hLO5EkQjUYWuQpaYpT9h51BIolwFGpCe6DQlOkXInrQHCs8kaHAEuU1VqNxbcUj3aIL6fguY0SxlClQhWMPWmzOLn3J/hi2rRsVk5o+B7J1h42tGOdAQ+C09eQTBEBn+rCOoW8abFS0a1qVz0ZKrhHnXQYBCoEvgf27FEkkG9mrxJz5Hz6vjsjrPoi09LK/mcdWFdsKLcdH0DtoepsIH8I9y+6HUnV6zEUE/K4Gq8bkxejg/lSLrhA/FqeKcOJn1B8R/NxhgS1kh18l4+9ygh0YEAxdngOAuoBwrw0lOpKeLujOqhp1YFNyK6FepOgihotmPs0zLu50/wnZbPvR6l3MN/8jfqfCWJilvTkt6z1BauksmRIMEyBgO3WTLScR0rGJAFtoW4ukfeoj57wHtAmr1OxJPcA/4gbJF33Um+uwFED3EYgkImxO1//1VLjOn0f2DiyIFCVnTe4z4sf4TQPkFTRyIQnI7vYD1ALIW5XdjorCqOu92vTV+4rIgK+9IkOkbXGwfHq89AT4oWnafnoXiV91wxavamrsSVSQnCzxPRAzm+ETPztg8pDpe+26lAIDiZJSk+hcGvQMdAEwCgVCI5EEsMCZCpKimMg8yqKaozZIcYeHvvSDmtFWgbVRPklw3I6e4UoebFqBb1PGYL/4oT8TD45bdjfFqkBcBurM9uXTkZG21FRVDmsORnc+CViZd3ZPFkwSf7L9svQIoXmXUlFPUE7mw6353c2tQjxE5SZZkeblNm6s+7xv+wg3/rYu4kk4qIYtc3bOwhEXO9A530QYuAoiAqbUmoZWk8skKH0Cx4AvVMZxFPiRLzOD7kTDNp4fkuv9YOuOzACbel4LAJHm828Jsgm9RDLqackSGjLv8sMEN52BY0a6ezMfOvTGJrLWHxSmWjV5hDyRRUJiJ3BTzte1CToOpbruwOJrZKnTM3vfP29Cg4atW0eDHKpbNieLzTaTQkcYvAj+FcNrclqJ7vk28fvFatMT6zhtzP796Cbdsiu2edVP8Cy5dSrAr8VQjIXpIysLhLsVOgQyQ0j3ZAqCxr32YOSAridOBTA/1ODU1AAopR53u+DPcI0gdzFyQ==" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 9, + "candidatesTokenCount": 115, + "totalTokenCount": 311, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 9 + } + ], + "thoughtsTokenCount": 187, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "7bOzasDOPLiUxN8PqZqo2Qo" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMaxTokensSetting-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMaxTokensSetting-googleai.httprr new file mode 100644 index 000000000..24aac9ab3 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMaxTokensSetting-googleai.httprr @@ -0,0 +1,104 @@ +httprr trace v1 +792 850 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 472 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"I'm a pomeranian"},{"text":"Describe my taxonomy, health and care"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":24},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 439 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:11 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=767 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": {}, + "finishReason": "MAX_TOKENS", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 14, + "totalTokenCount": 35, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 14 + } + ], + "thoughtsTokenCount": 21, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "CrSzauu5IPjwnsEP-8Hj8Ao" +} +794 10157 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 474 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"I'm a pomeranian"},{"text":"Describe my taxonomy, health and care"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":8192},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 9744 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:20 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=8203 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "Hello, little puffball! Despite weighing in at a mere 3 to 7 pounds, you carry the heart and lineage of an Arctic sled dog. \n\nHere is a comprehensive breakdown of your taxonomy, health profile, and care requirements.\n\n---\n\n### 1. Taxonomy & Heritage\n\nScientifically, you belong to the domestic dog subspecies, but your specific lineage places you in the ancient **Spitz** family.\n\n* **Domain:** Eukaryota (Organisms with complex cells)\n* **Kingdom:** Animalia (Animals)\n* **Phylum:** Chordata (Vertebrates)\n* **Class:** Mammalia (Mammals)\n* **Order:** Carnivora (Carnivores)\n* **Family:** Canidae (Canines)\n* **Genus:** *Canis*\n* **Species:** *Canis lupus* (Wolf)\n* **Subspecies:** *Canis lupus familiaris* (Domestic Dog)\n* **Breed Group:** Toy Group (AKC), Spitz / Primitive types (FCI)\n\n**Origins:** You are named after the **Pomerania** region (now part of north-west Poland and north-east Germany). Your ancestors were much larger (around 30 lbs) working dogs used for herding and pulling sleds. You were bred down to companion size in the 19th century, popularized largely by Britain's Queen Victoria, who had her own prized kennel of small Pomeranians.\n\n---\n\n### 2. Health\n\nPomeranians are generally hardy and have a long lifespan, typically living **12 to 16 years**. However, because of your miniature size and Spitz genetics, you are prone to specific health conditions:\n\n* **Tracheal Collapse:** The cartilage rings in your windpipe can weaken and flatten, leading to a dry, harsh cough (often sounding like a goose honk). *Always walk on a harness, never a neck collar.*\n* **Luxating Patella:** A common issue in toy breeds where the kneecap slips out of its groove. It can range from mild to severe enough to require surgery.\n* **Dental Disease:** Because your jaw is so small, your 42 adult teeth are crowded together. This leads to rapid plaque buildup, gingivitis, and early tooth loss if not maintained.\n* **Alopecia X (\"Black Skin Disease\"):** A cosmetic, genetic condition common to Pomeranians that causes gradual hair loss and hyperpigmentation (darkening) of the skin.\n* **Hypoglycemia:** More common as a puppy, rapid drops in blood sugar can occur if you skip meals or over-exert yourself.\n* **Eye and Heart Issues:** Prone to dry eye, cataracts, and degenerative mitral valve disease (common in aging toy breeds).\n\n---\n\n### 3. Daily Care & Living Requirements\n\n#### Grooming (High Maintenance)\nYou have a famous **double coat** consisting of a dense, woolly undercoat and a long, straight outer coat.\n* **Brushing:** Requires thorough brushing 2–3 times a week (daily during seasonal sheds) using a slicker brush and metal comb to prevent painful matting down at the skin level.\n* **Never Shave:** Do not shave your double coat in the summer. The coat insulates you from heat just as it does from cold; shaving it can permanently ruin the texture and lead to Alopecia X.\n* **Teeth:** Daily tooth brushing with dog-safe enzymatic toothpaste is essential.\n\n#### Diet and Nutrition\n* **Metabolism:** You have a fast metabolism, but a tiny stomach. Feed high-quality food formulated for \"toy breeds\" (smaller kibble size is easier to chew).\n* **Weight Management:** Keep a strict eye on portions. Just one extra pound on a 5-pound dog is a 20% weight increase, putting immense stress on tiny knees and airways.\n\n#### Exercise and Training\n* **Physical Activity:** Moderate. Two 15- to 20-minute walks per day plus some indoor play are usually enough to burn your energy.\n* **Mental Stimulation:** Poms are exceptionally intelligent and curious. Puzzle toys, trick training, and agility courses keep you from getting bored.\n* **Vocalization:** You are a natural watchdog with a loud voice. Early training is needed to prevent alert-barking from turning into nuisance barking.\n* **Safety:** Your bones are delicate. Discourage jumping off high beds or couches (use pet stairs), and always supervise interactions with large dogs or predatory birds outside.", + "thoughtSignature": "EsYdCsMdAWkUfRPfYX5mGi+Z7YhZxdPv842om4Txd5M+8Gi02+LxomxWXt/cGnoGgje9Qpb319/Ram8fHPQ81EKdd8tKBSfoD16ZQ8NU/g7AhG0WwwG4fAovaTruT2J64zklFrhRSuIpmTm1cj/R8jn0KqollvZ1QGqZY4e9Dw8LqJZ0JZwQXVM+sWkwbH81Y840SIq4ZWGkvsTSJCQRXp1g5ViB9O0UnKBhAC/7oS1DGomHPnJ3Ph6uC/cDLz/bh/WA5glFlwPpsFExRoNbBvT6IbTzmDKNLHsB6FIT7+OAZCdhMHtv/39rEkyx2vvzquAbzKt8EgENcni49cFi+H4syPo7UZIKj4gzadzsDHt+ohyP+svOS84FPtEmQ/KTNUiStkEJVeLjwRGJoOYU9VViMqPs0GcO6sP5oC341eUW93T/a/IneGs724cwUBkYJ6wUXGzMekSfqVAaMcuNmXdGy24g1hR4chBTznT+VlZ1wkC28IDs4xu6v98nTkPGuURdBa981PL5gpm4kDKVlfCRsZmQ5ywLlombZNeNiuwlrPmDn207aDZNB45X0MyD7cV4/kRL9wiBc4/Rok1zBqua5F1aYeXRUSVs/yVT04At4Rli4j8Jatr9jFVDYuRTPRY2c7Zc55XKaReaJzHF+Jt29LFqCn+8UB0/b4LmsSm/DYgNKlLLiU6yBK2Wh4aF8hNqHprjOUwTODgOO/UGeK3g+O3oUxR8um2j6UF/QGS6KeE5USUOrppVwbS5LYSJopym8fnIZfySb2f6OeEOo+MHGzWM0IjPr0IVo4TB6rBQUE41N6vdhvXITg6KDxlytZXTjyxBGnVRa5XYO9Yh3U58LFQqrhjXUZtzi4n943lHVzQGqVLWNgIeE1PciyRV44QsGuaZvpC2NPt6ZOkiiEjC51NhpZSRo4rVeIz1VgfapcWShNPa9Jm0rh2mJn/RmeBHL3xPI+NizGlPnxTGyvyVBADrqt2A4j9JsRjGdG3AHhVysDcGRn4GirE6tVYkNdDXz9kkoZxQFP0ZfhLfei4P94WYXOoWi0nfWAjl+mVKz5rgeGjOv+1HvAExtB6BeIsAamTjKqM2+ALCKfmbkX5TjKgedzPlFghrP22wblHyUg0vj+iSS7bdgWOFU7R4N6e31Jsql3FTeiXxRsT+gMCiWhSvqjkiRIeZHvgUU/D/kuy8GV/T4YKz2qdNlop++nTUj/3j82DfloWeQjkXuhcYbUqKiGLsVQu4FiNnwh+ck1Z51uTZu3SVKL7Fd67aJld7Z5r+3rRYRUgE3+eKZx2huByjaLaICLLd5x4uziGYKBPb98/2HXfSmxlcEFkaqqqg836Bq7bWYMBRXSzncRu3l8OWCkqOTCAdKx5ZZAib/5X0FG+08vVQG0QTqCLdl/CdkLVq4g3NP1s2fa4Rr4LlvaqFlfsSWnUi24941m5XFRTTgh5i8wjkBYL+OrgOVQ2Hs9KPd4B92+tFHR9JSJf83ww9a/e4sey38EyOHw/NNjrU/cr4CB2ltXoaDsnMa9RBekaqAjxmq9jS0vBNBgBO24v82LiWTCuzDGtZ891vImjQYMro34TwptxqKVsUz4SJ2JsJgbkmf67uQGn5UYEPO142crKclp/FvMVJYPfl7dbvE6IWlN/5be+/X1SFaB6QFI4d7aY6M+geuwXHvEZtDFRL3M+n4zCFrIfXkCzTZC1anrefdG14xPcr8CoQYVSfSSYvXm4oVsqwQGX+5hNmwOLsMfdScVu6n5oumaC/BFhkgWRD8dg6zikotfiwGAjAqPSUXjSa4WWlObUsdf4QCtGnP7VSDaWThlOuSxRZaFlZEftvrQsLIuYYk8+6lQo9rDvQF7P+95+pCv9YagTr+a4fhq93txz3bvyrsekI4NAJbQ8rlFIz+v7xsIXORDAdp76HxkJn92c/u+61x38Yk9fnqrIihlCID5WU/9xWYQ4EJLpaEq61CxEZdXuzWmqfkv2sQG9R8pQtgb6sea5VN10NA4WnfhCAAxsGfPqvkhU+ryeG3OPl4oQz0PCa7kKWdcBFxO3Acr95Urq3FZgjN6296pAWVyyr6FgBqOtLKQQUIo+EgVl9Tn/uzBWzmlGhP9bsFqRFgPPGpZlZmW5Du/H5ZD8+JT9wb6w9T0a0idZS0xIY8DUIz30iVUuCDWXOuwZg730AUsvB1P5V8ltWgVGdrrmn0S3+EVtaD0ngVOUoRmGjJEaaRPE4R9KFCage+xxlkQSTfufxsbYrH4YNVb2lakPZJ/fPVRuTwd8pt+oyX7ZSiLalR1pOnOQ9YVV6Juflu22FzDCoqtoGnkKug6fd5+GMeK0+auG+Z5iRJzVMxdvErr2bUBLdpMzoGNFBHsoClIEhi+UDJ71Mxr7iva8Fj436XnEAgllT5pP1eXOffTv/eM+HV2cHgR9HPWMgzxHBxlknmkc0U+e6lcoDskwfDiEiAhwKc5zWXv6K0e6YK8GRs/5dsKVgDlDpCbTX1GcEsH957sLGNh5a+QqWaCPJFuuNMDyDA/2vdNAaLB/HSAkFHxa9jnSMcGvksILvcxO1FRBw9/HBubwndE/h0aXc7FqGzqoLm9VcTvncnhf/t2WmjCxpJCEUmaWu2kFVff0hZAAD2jG9HVLg6UdhJeyhEUZVt+EwGYhe2cj/reJDPeMDhd7V2F83V5DT0B/s4ax7TD+Ez0Bx31DkYtSCXaYKtVYPED8HkVeLti4rVkJE9uuNnSPUlsTE77p4c4bJYEIkQH9/bhCsZY6jv7mLAmRXDNHKWkFFW+yFl1dOVQEMgtDdGRMcSZqsDXTd9lH1ennFeXLAD5RIw7MvPOf+9CjcZtvRTIm4rcLmGhz3088qMFJsdHrLHuI2UnqDmULLumSQwiEn1vIA1vAufrXntwov3o0r+ue1gEjqTk2WtGbcpoC1wThwlDIcu/Hoa2R4PrNZDVYpZBHt2EqQQ/6gjnSU9kvQWk+zsb5bYNGnv2BhCtgMeTSNYErQBqhWb0kVCbrLL0UvzHIo+R0PEYeKKQmJXoZ0NkQXFMnnWsp2ipwRJAsOj6G8KwaSHz7fadI70pycGB8RAT8ld9jbRI8n2fiRB9tUZo6+ijv0nT7ONuwfYgdPIHoEaRay/z4b+fYqdba6fQ/EVm/UMf7PfoUyb3RKQIxOAGwm4ZN/AMlwIkDo7Ghc8zZgOq8M8NGmmMm7itkmObagoTy5hq7DMQjoS0KGYxW43IT8nOb1bhDVSQ9v6CBdU/1AbtXeBUgJ2LS3oM6uzKjvSCDRDlzNdgx3W7OAg/wvBmn8QCUlzt+QLv2dPWXA2InV7SgnTKQU2sVSkd0bSI26B0bXFN9kMP0N0Zvtr535AWdcabt5IYXQrQ9wJRNEPBqm8xLQqrOoUzOHRRzmEqen7pogM2apf8/rRGo/uHVD7Z149Kd9xWvyyQYkLTJ/HUz/5TSD6CSHqO4d3MWGDpigR1yHVTmv862PbVPHbIVbd/J3JxsbmMBoN1mfD1ogwkX4Hb+8cM3DwcLqpqb7UEmgQ0oTPyKndWSbi6/N7OWU/X0L7qp7GfpBN9381frOOjWPhPlHfO6C+oUb3ZFmUqIe7Ip2l1FUcXKlyXS/wsa8dzuR/+eSnPMZCunTqdv9n0uYVKBQ4+SIjzcZEm9zrgH4WNKmUtHqsTohBcDqyizaR9lzPoCSt0nrCXEgBYTPUipU903phI5WIe7oObioZVY0/0bF2guoFyXqlFfAvUjMJSTB9Q5OuyVkAS04na1XO+NPwSKLySdZ5JrsVb5vhLQDKu30LZ2Hs6lS+PlcnymKH9zoFHzMntXqj1a6qV6b1thhHSJ9uglSkiSIwxRVwjT7yfXLl7O0WMPUYJBlljwij6QGgUyRnZyKxav6COnrkQnyP2ddaG9hqJmdeDfaoWUVlnUoX/lqWGnlZwYNSummO1FzyhGVCxocx3tmgp3aJHYtwzwJrgJI0FGvlGLhZn4m55y3JlfeUefo1V9L+qVIBAXgxa+pFeIfYN6WDy2c7Hgc5KIU+0yaIRzg6SP33+ADPf8S5/3qIk3VdbckTGGgsclYSSvVC2RnYdUm2duPChG2hTZ+TZWR51wIDNiuQFjZYiieFp+V3dNKyG1oAmTENes1U99HPfTB/gGSRe3buDUVS4uK8CkqCl5J7b2F5CYIYsRFy1N+y5jwH7xYh/80yWzU2+ijyI9v8OSAzvTlsisnlJVpgkjsVNHtrDrIb3y7KZ78YjpXaZjZBX6Jv4Q6QYBLX40YD27d1tozVCYaGUFwMRp6ygVmPGZaa3nmP6uoDYJdiPMMDEOWNgN+sSTqwwtF0qAhvrge/25u5RtkZUoLQ3kH9kowjbLnb2JpAwJ82GmLrudJDf++NzwmpB/NlCof8nUe46OKSxuVfN+q+cYDIGQouBvEhAcQnvEzq4zCcuoJrBLNlF2WeFj47q7EZnM+lxA3ErVKU3PHITm75bjBFPkAuGHmzpmull6efeY19W7bhhs8SnzpOj98kA7GBRjx3wlOuZs9NHeePsYi+FJ4WjgI8NK2HH6ubEXoSGT7w8MBt7xFd0ItDQ+Fz9U2zo4ev7ajbttWY+p6m477ezWLKLZN9z0sz6BUJJTZk8vPBMCxphNjx2uUhB1HoUpX/V7lTAUVZrZPAnfskQXch4XktP2baS6HFT03v2FaokzOQ+UtAY7M53p3kogprEuC52RsDyGIzjFQN37EDFmsMc8HcQfoyje8QluTgLA/8gD4x1KkhByGnOdBONfux+VJ3Xvz0w8brb9a+LkYV1D3GD+etokDIpVxlAPg+be3ysi1O9rc4nYR7k41WqTSyqfMI2P43rxwe3EQ82toNzXK2HTt24tcUdlJg5XBefAzLbyVS4BzQC+9uK50XpC5+m6NgDV4G/rgv13phwVUzSzmcnE/fAec6J4HpaU9SPnCvY4cCNdqwiuL0hEGQx4lq5jNY1MxXI1GdOeu52Ht+dtId2BKPqYxRfh/5/wxXcvI5ZXBYT0ssySGbHkVyEcbGKBNuhODecp2TVvfD3ZiAKF27E4=" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 14, + "candidatesTokenCount": 973, + "totalTokenCount": 1901, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 14 + } + ], + "thoughtsTokenCount": 914, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "DLSzao2WE-jinsEP6I73iAw" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageBinary-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageBinary-googleai.httprr new file mode 100644 index 000000000..5acb6e5c1 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageBinary-googleai.httprr @@ -0,0 +1,61 @@ +httprr trace v1 +47850 3714 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 47528 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"what does this image show? please use detail"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 3301 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:05 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=3534 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "The image displays a digital illustration of a brightly colored parrot in profile, facing left against a solid black background. The artwork has a smooth, softly shaded 3D style characteristic of the standard Apple emoji design for a parrot (🦜).\n\nKey details include:\n\n* **Head & Face:** The parrot has a rounded head featuring a sunny yellow face and cheeks, topped with a soft reddish-orange patch on the forehead. Its eye is round, glossy, and black with a subtle white reflection. The beak is large, curved downward, and dark slate gray.\n* **Body Plumage:** The neck, chest, underbelly, and legs are covered in smooth, vibrant green feathers.\n* **Wings:** The folded wing displays a multi-colored gradient, starting as bright lime green near the shoulder and blending seamlessly into warm golden yellow, orange, and a touch of vivid red toward the flight feather tips.\n* **Tail & Feet:** A short green tail extends behind the wingtips. It stands firmly on two dark gray, clawed feet (zygodactyl arrangement typical of parrots).", + "thoughtSignature": "EpYJCpMJAWkUfRNDreL+Cv/EYm8eSx/rNQPe6opZLQptujdlLUsN71eLGfkz+kGT5f+4ALccv1eKky9NRT3kI35ros4A2i4pmD4zfFsbnUCUKn4EU7j19hxIuQgl9+kXvByGBOdyxTdBWxH9U3Hm35t9HelZxwZmj0YFOLG9f4c+1jg77Anksi5yEBGbC8T6F/bAb/y9HG4BzGxzBgpxCJWU595d0pL618VqfyIY8/YuFtCNRj0yTloy3VoUQQmMwMkdaiCRJL4GiHLjwmvXwhXm+SK46l0W2FhjCtpBMpDYCYoNZoXx0Ni/XA4EnP7PuA/0j1aOAggceY5S4XxhIDRbz8LFpv8tI7L2WuCIlAyeumqozjrjhSM72YGZ3cro++r0hn3ZCRqLXolbcutKNlXV7UiV+eSL8xlT/kLDhF5CLJcEfbjS1fQCJrs2ncu5UgrMcHOe3E9Y+lP7fLXZ1IlSKwnJuzJn+hdO5b1vP3mTEPGZkt8d2ewEGqOfxBde49TFyrFy2sQIfFxr07QVd/t5Nbvmg9tmU+z2NAFqycfL5BfoWwYPYqi3kulTMeBgmdQVRv8idqxks+9y2gN5OaeEjQ8apx9/0WtsQ434j5I5TZhAi6EgWdwC8a5bd3UF20+TTrgnEZFMmTqSzmjKiCYYs6UlksZGpgKedQYwPcsyL1TRO5G0guK3bidaYWor12yMCuZQIikOU4unV4LgY4G/EhIoZv/9ODv5DP5YfQ4e+orZbWeK7cX+Pt5qAjj8ZD3sdQcbxwgxnMmCyn1J69DDV4nQ+lpW2fzss5VYMRO8dLKohf2bOd5Dhvp+kJpIdUuOIokqW2BX3c8QyWgLkBOjlFjjsq/w/VlAXB+vNmVcR0sWbiWnG6LgCv6rLNLZFGhedbtydmEAgK8YNhF8k10wxQ1vEl1ZBq2B+MfBS8CqVJOCuxAPqZ6KXl/KS5zcS0qKLIagXdnj/b72N7wNHJAPM5XERfbwOUAak3X6VkPy3Qs6uTVlktoBbn/iQN7wJubDNmjKeBYeQOKfIFyfdkjqMZcGmK1ApVvA+HeDXdRiKCxNUkZt3op4Xd+NQ0/P7UG46MQPUdFnDBRZtTOicupKo1IR9NlCaNDL2AATE74O2XHZES3Zap7Ah79bXBhjUhY2XYHVEJSxO4y+/ASp4mfsLdaT/uyLKrKGmQX1mnMHdvuGTDYs7f2Q6wpwsgQvtCy+3jBu0WLin1VdJpMF9MjaTAATFhxCKG1Z+oWsq3oHjCzjYgT+FEJ5TE8a4Y37up12JJ5Vo2iopalLj2JXpbxfH90huyz5fnB70KED1fYVZQPCPCgMCiHv/9AhvmSwuhg3pGxNHHRrZmRpotnRUdA3cWM2M2oBGbW2A1SgqbahrmcLPol3o5M3plaJx6huAjFBpBAJ6vFwoDAaggOZiqSoU64Kxh56v5OfJSew7NisDZF0/nnzJsTMtFbikpGA/JZ7BypGqFtikxl01OSON96toxw3EK7iwCNuckmKC0uWKI51zqvRw4ad3ij9WFDhwFEGrii6cHdXD2w0kTES3JN011Ek/vwdVQ==" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 1099, + "candidatesTokenCount": 221, + "totalTokenCount": 1582, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 10 + }, + { + "modality": "IMAGE", + "tokenCount": 1089 + } + ], + "thoughtsTokenCount": 262, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "ArSzatnNE8Gd3boPu4POmA0" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageLink-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageLink-googleai.httprr new file mode 100644 index 000000000..36e517f3e --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentImageLink-googleai.httprr @@ -0,0 +1,61 @@ +httprr trace v1 +47835 7475 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 47513 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"inlineData":{"data":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nOy9d1RT67f3+wBCCjVAeqWH3nvvYO9d7CgKiGDF3rsiqCAivSQhIfTee0dQBKT3DvZdzvnjjpWoe//OPfe+5z3n3pe9t8vxHWusLAhDJt/PmnM+ZQUgkEhYcAQQP6sNwJL/D2DBEUDAAMAmgCOAgDMAbAI4Agi4BIJNAEcAAfcAsAngCCDgJhg2ARwBBDwKBJsAjgACHgaFTQBHAAHPA8AmgCOAgCfCYBPAEUDAM8GwCeAIIOClELAJ4Agg4LVAsAngCCDgxXCwCeAIIODVoLAJ4Agg4OXQsAngCCDg/QCwCeAIIOANMbAJ4Agg4B1hsAngCCDgLZGwCeAIIOA9wbAJEPCGbHhTPGwCxM+NAfxUiKX/G8BCwADAJoAjgIAzAGwCOAIIuASCTQBHAAH3ALAJ4Agg4CYYNgEcAQQ8CgSbAI4AAh4GhU0ARwABzwPAJoAjgIAnwmATwBFAwDPBsAngCCDgpRCwCeAIIOC1QLAJ4Agg4MVwsAngCCDg1aCwCeAIIODl0LAJ4Agg4P0AsAngCCD+2RtioH+oP4T415d/6Pu/Jf8Pw0L8ZYLwTwBAAoEURyDFJZDiEggJJBKFQklKoSSlIaEkUeJI4Zeg75FAICWW+n8LC/FXCsLfFQBxBFJMHCGOQGAwaAZNSldL1soE42qHXeOB37wav3M9wWsjYdcG4tY1hLWeeDdHRRszjK6mDJ0qJS+PRiCRYssQEC2Ipf9FYCGWNAh/JwCE5Y04AjohkaR1teRc7RW9NhFPHabeOqUcfouZ9EyXG2fAj9fJjNfMSdTOTdHLSdbPSNJnv9SJesi8c07llA9t92aih6OioY6cMkMaI49GSkJpQVhHLfkvCAvxfzwI4O9S4kOljgRSVg6lqSbrZqt4fD/18SVVXoRWWaJeC9uoO9N8qM5+tMtltNtpuMN2qN1yrMt2st9pZtB5Zthlesh5rNuup86spdCghKvDe6n59IbyxUC61yaCk7WCuoosBoOGMPjeQsBC/DRB+BsAIIFAikkg5OXRJppyOzwJD0+qpD9itrH1e/OMBwrMhnIsx/JspqodZt64zHW5zryyn3nlsDDg8nHG/eO8x8c5jw+zbu9nXBfGnab6bUe7LIfazfqbTLtqjNtL9Eu5Wqxw9eun6FvX4DTUpaVloFZhyX9fWIj/g0H4GwAgLYnSpsnscyBEH1apvqnb98JoKMZ4LNl0gmcxlWk9W2a3+MrxfbfTQrvjYpPD+xb7T11OX6fcfvno+fWDx9cP7l8X3b4uuH6ed/k47/ph1uX9lPP8qNNkr93IG6u+JpOuGsO2Yr28JOb1M/SVbopUihQShYJ7A8RPo780ABJIpIIM2pkpf8uDVrab+XqfTs8BvYEThiPXjMcfmU1GmM2yrBdL7T6+cvjU5vSp2elLt/Mvky6/LLj89tHtty/uv336ro8ev3yC9PWjx5eP7p8W3RdnXGdGHMa6rQfazbsajFvL9csytKPDVA/uJmpry6Ell/53h4WAAUCgEDbKmJerlFrWM/uWa/VZafZbaQ1v0hs7Yjhx1mTqpulchNX7TNvPjQ5f25y/dLr8OuX2+1f33766//7lm/7ti/vvn91+++z++2f33z67//rJ/VeIBPcvH10/LTi/n3ScHbId6bbsbTN5VaVflafDS1QP9KOoqUmjvzfHsBD/6CD8RTOABBIphUZpYmUeWlNfLWf22DJ79TX69JgDNlrDa3VHd+iP+xhOnjCevW/xIcPuS7vz126nr0POX2dcvs67fl1w/bro8vW9y68fXH775PbrJ7ffPrn+/snl908uv310FeqXj85fPzh/WXT+MOswO2oz2mvV/cqsucawvFCHnah2/BjFyAQjJYNa8jjAQvyEACCRyGUIBF1WKkiNUGOr2m+n2WvK7DPVHLDVGnLQHl6uPbpFb8zbaDLIeOaRxftc209vHT722M+9tZ3ptJ3tsp1/Z78wZL845vBx0vHzrLOQh18EPPwCyfWXD26Co+vXD86fFxzfz9jPjNkM9Vq8eWXcUK1XUqjFSlE/eZpqbCqHloL7AeSS++GnAwBqfNHI1USFTCPlTntmn7N2v7v2oKf2oIf2kKcu5P59+uOHjSaCjKfDzEf45s1phvxnzKcX6Y/PUmNuKhfFaXeXGo+2WE50Ws/1270fsf8w5fh52unLrPOXBZcvi65fFt2F+rzg/mne9f2s4/yU3fiwZW+P2atWw8oq3excZnS8StAZkqGpHJQH4LFR5NJb4mcBQHD7R9KlJG+pk9ttNd55aPWt0xncqje0VXdok+7wNv0xb4PRgwYj+/THTht2hxsmXVPxWi5rpCyOlwZYKaCkCFZZoELPUBu5ev2VJoMNZuMdljPvbOcH7RdH7T5MOH6ccvo44/xx2uXTtNvHabcP027vp10XphymR61GBs26uoyaWg2KK5j8XNVYlsrxYIqBmZykNAoB9wPIpffGTwEAAolEo5B2ijKpxvS3rsye1Vp9W3QGduoOeukN7tYfPqA/6m0wvF9/6LRBz0OD2HOMFVZoeTSQlhAz1tNZvXy5vqY6QU7cVg/x+AyliafbVWTUV2Uy3GI+/tpyusd6rt92YdhuccT+/ZgjpHFngZwWxmynRyzHhsz6+ozbOw2rG7RyS9VZmSqPoxn7/Uma+rJISWiabMkjAwvxjwdAAomUQ6PWUxQqbZTfeaj3rtHo36rVt1u7b59en7fewBGDAR+9vgC97lCD4scaOz2kMWgRAABBQfpUoH8mnxfge5hMwC0DYK2dFOeBcnu67ptc/e5S4/4605FWi4k3VtM9NrO9NvMDdguD9ouDDu8H7T4M2b0fsp4ZtBgfNBvsN+nqNmx8pVtcy+QVqUTzlO9EMjYfINDVZZY8MrAQPwkAMmhJZzoh2kGX52lYuFK3ZQOze4d6zx6t7v3aXd46nce0X1/TrQ/XjjhDNlASl1omghIDZEUpn4N742Oijx3xVqURAQDa9GU3/QiNbK32dJ2OLP2uAsPeSpOhBtPxdsvpbpu5ftv5fvv5fvuFAbv3A3YfBm3mBywn+0xGeo3fvTNo7dSpbGZmVaolZCs/YSsFh5BX7sQqEiXhJIBYanv88wFAoFDyigpm+jqHVjgFrnW/ttYxdr150Radtp3M13uY7d5azac1mx5oFYdqXDuAV8Uvw0ojcTISeFkJU33N9as9bMz0CRi0KAAqBLHgfbhGlvbrdJ3XGXpvc/V7y4wGa03G28xnu60XBh0WBh0hDTkuDjm+H3ZYHLKZHjAf7TPue2fQ/lan5pVmfr06u1glgq90O57md5NkaIeRkoUHRpFL75B/MAAoNBpPIOgbGbiuXLF265ZtXjv27t11dP/OK7tXcPaa1PqpN55Rr7ypUfNEo+CR6rldOGU8QpmiqKlMYhDliBgkAYPASi9TkBRFigANyrJrAeSuAoOhMoOBcqORWuOJVovpTqu5Ptv3ow4fp10gTbl8mHRZnHR7P+X2cdpxYdx6bNikv8/gdZdOfYdGUbMqr1IlOk/lAYd+KZqyOYCgrCeDRMMTZMgl98k/FgBFPE7fyNBjxfJN27Zs2blt8/at23fvOhjgdzTw6J2ANdkXdavvq5SHqddEMsufa9w+glcjiCuTcMa6qvoaNBUShqSAJiugqFhJtJiYERMZHaI61WEx/9pyrtt6ccDm45jDp2mnLwsuX9+7/fLB7csHt8+Lbh/n3d/PenyY9fg077owazc+ado/bNDRy6x/o17SqppeqxxXrPw4nXYzher3gOK0HYfBo+EtNYil9sk/DQAJJDTxS6SQjC1M3VZ4rNmwduPWzavWrbGysbGwsty51+vc9Ss3bpxkPXSui2e+4ut05hv0V5mUcbS3rsTQsJIadKqpnrqZnpqxtoo+k6FMxFMVUH4H8J1NFl9nnb7MOf+y6PbbR4/fPnv89kWgzx6/fnL79aPrLx9cvrx3/Tzv/HHWGcoAU7ZjY2Z9IwYdA5p1XWol7SoZDYyECsazXMYdLj04hnbwNsV8JRZDgLbUwEL8I4LwlwAAiUbhiHgDMyNnT9cVa1eu2bB27ab17is8jExN9A0NNu/YevHG9dt3L3AjV3TkGY40m46+tpwbsJ7qtYqPUHe2kibKSqlRSHoayvpMNSaDroSXX+kkn8nR+bzg9PtHwVIIaF2Qx+9fPKHlQB/dBdZ3hvTe5euC8+dZ+49Tdh/GbeZGLEeHjHr7Ddr7NGq6VYs6GBmNtMRKangB5V469UIiPSCCuukMQc1UBhoVXeqgwUL8MwBAolA4Al7PyMDZ02X5mhWr161avX716vVrVqxd6eTu4rFqxSFfn+Arl69dP5GTvGKo1Wxu2Gpu1G5x0u7zrN14vzUrTmPbWnkjprQaVUaDhtFnynhtxmVw9BZmnf79d8/fv3pC1v/q8ftnSL9+dP36weXre+cvC45fFpy+zDl9mXH8NO3wcdxucdh6ZtB8tN+4b0D/dR+ztlu5sIOS1kxKqCFFFFMfZtMucWgnYugHHpHsvbAYIpwEkEvunH8IALJyctoGug6ujp5rlq9av3rtxnWrN6xZuW7Vmo1r123ZsGOv15Hj/v4nT1684F3Ed514Z744abcwaf9+yv7jrP3XRbv5MZumKqOY58wrwfSrwfSocI3GGrOPCy7//m8e//ar57/9slxw74cWRQvc7/zlvcvnRedPs06fZhw/Tdl/mLD7MGb/fsR2YcBypt9sYsh8aNj47YBOwzvVwtfk1GZcXA0+opT0MI9yhUc9mUA7EknbdJGsbCaHloGnh5FLbp6/PQAoKUklFWUbR1v3VZ6rN6xau3nd+m2bNmzdtGbTujWb127YtmnnPq8DRw4f8j964+r26gK78T6LmXH7+UmHDzMOH2fsP83Z/7Lo+NsH54/zjjOTDrNTTu8/uv72q9u//+r++1d34Y3/10/uv3x0/QqtAHX9+sFNAIDLxzmX99Mui2MOCwM2C702873Wsz1mU92m4/2mQ0Mmbwd0G96pF74hs5sUXlYrPCnF38snXkknn04h+8fQ9oZQ7PbgscrS8HppxFLb9+8NABKNUsThDEwNXVe4ea5dsXbTug3bN23etXXb7u3bdu/Yunv79j079x0+ePi4v2+gb8jtDfWFZkNdJpPDdnPjDu+nHT/OOH6cdfw05/TLotNvn1z+7avrv//q/u+/e/7brx6/fRW0vJ89foPc7/b1g+vX9y6CE7cv790+L7h9mHFZnHKZH3KY7bGa7TSffW02/cZkvNNouMegt0/3Va9mTZdK3mtKSpPci2rZ0FJFCIBM8hk2+Vgc+dBz6obLZG0XeUkMPC2AXHIH/10BkEAi0NJSapoaNk527qs8V6xdtXbL+k27tmzbu3PXgd37Dx/09vU5fMz3aFCA/+mT/kH+j26sqeIZvKs3GOmymRqwmRt1WBRg8H7G8cOs46d5p88Lzl8+QC7/FRrtcf/ti/uvn6Flz1/fu3xZcP485yQoe1w+TDm/n3CaH3aYG7Cb7baa7jSffmM23WE22WE80qnf36X7ukuj5i29sAPPa5WNrRd/VoF4WCx3O0/hcibhbCopIIl8JJq6O5TqGUQk68igpGAGkEtu4r8lAAg0SgGnaGRu7Oju7LF6+cp1q9Zv2bB59/adB3bv9dnv7efjE+h39ESA38njx06dOBp07Pr59YWxhp2Fev3NlmOdllO9NrODtvOjdgvjDh+mHD7OOH2adf60AA1rfv3g9stHt18+QTXPl0WXL/POX+adIetPOC6O2M/12872WE+9sZxqt5hoM51oM5nqMJ16Yzbxxni406C7S6e5S6XkNT6jTTKxaVlkjWhYuci9YuSNPNkLmdjTXHxgCvloHG1fBG3rPbLZZkUsQ0pCAl4nh1xyH//dAEBA1T9NiW5lb+Oy3NV9tceK9avWb92wZfe2XQd2HzjifSjgyJEgv6NB/n4njx07FXQkMCDo+DZOiEVrmnZ3mfFAvdlIu+X4W+upd7Yz/XZzw/YLYw4LE47vp5w+QFO8zp9mXT7NuXyadfk47fRh0unDtNPHGaf3447zQ7bTXZYTr8zGmozHGozHGozGGg3GWwzHXhmPvDEc6NJ7+06rvkspr0OW3bIsuh48qQIPS0VvFy67moc6nyF3mosLTCH7JVC8o2i7n9LXXSHruCmi5eARIeSS+/hvBoAEAiEJ1T/qNk52Lp4QAMvXr1y7df1mr627DnjtP3LA+9hhn0DfI4F+vieOHTsT5Hc66LD//qfXHKvi9Tpz9d6WGPfVmg02WYy8shx/Yz3ZbTvdazszYDc7ZD8/4rAwar8war846rA46jA/bDs3AGl+yHZ+yG6233ay03KsxXS0zmis3mis0XCs2WC01WD4lcHAG7133bqv32nXditlt0snNYlF1ICQCnCvGNzIF7ucI34uXe40V/E4i+CbSD4cQ9sfSdv5mOp4hIRXgxeKIpfcx38/AKRlZXQMdOxdHZy/A7Bmy/rNu7btPOC1x2ffft8Dh475+AQePXrCPyA4KPD8yb2+h0/6unEf6LVztV+lG3QWGHWVGvdWGw80mA01W460WY2+th7vtJ7ssprssZ7ssZrqsZrutprqspp4YzHebj7xymyiA9oVMN5uMdpkPFJrMNZgPP7KZKLDZKLTeLjT8F2nVkcXs6FbrbSLmt4uE98o+rQaPCgDtwrBtXyRi9kSZ9JlT3Dlj7Pxvskkn3jqwWjangjqpjtU/ZUKMnh4SBS55Fb+mwEgIyerb2Lo4Obk7OkCAbBu5ZpN6zbu3LJ9/86dB3fvObxv/1Fvb//DPseP+p0KOHrSb8OOrWtW2t4+rlsXp9nC0mlN02/P1H2Tr/+22LC7zLin0qyv1qy/3myw0Xyo2XyoxWyoxWy4WaBGk+F646Eaw6Faw+EG45Em05F6IwiARqOJ16YTXWZjfaZDvUZvurXqOxnFr3EZ7TIpLcte1oOwKnC3BFwvBJfzwMVs0TPpqBNc2eNsRf8U4tFE8uE48v4o6u5nNI8TJBVLDALeMYNcejf/nQCQlZMzNjcRAODqvspz+dqVqzet2bhj09Y927fvgwaC9hzat9dn/wG/Q4ePH9mxb6edi6OxidGBLUY5oTpN8RoNiVrNbM1Wnk5bhl5Htt7rXCMoJxQbd5ea9JQb91YY91Wa9FUZ91caDVQaDlQaDFToDZTrDVXqD9cajdQZjtQZjDQZjnYYjXabDA+Y9PYbtr7TLHlDSG8VT2oGL+rB0xrwqALcLgZXC8AVCABwJl3iBE8qMBXjz8L6JkMMHIql7I+kbH9EsfbCy+Ak4W2TiKV2898HAAmELEbOxNLM0d3ZydPFfaW759oVqzauWb9t42avrVt379i2Z+f2fTt3HPDy8t6zxWubs7uzuZW5nbPzls0rnl2wLH/GrI3WqI1l1idoNqZoN7O1W3g6bem67Zl6Hdm6r/MEmSHfoKfQ4F2RQW+Jfl+p/kC53mCl3nCV/mi94Wij4UiL4VCbQd9rne63Op09Oq3dGhWd1KxXqKQm8KIOPKkBDyvB3TJwsxhcLQSX88GFbHA2Q+wUHxHElQlgK/il4H0TSUfiKYdiKHufU9ZfI6tZyUnCuwWQS2/ovxUAVmYObk6O7s6uK9zcV3uuWLdq1aa167dt2LRj06adWzbt2rp1z451WzfauzhYWFq4erju2u+17+ih4KB17FuG1eHKlRHqVS/Ua6LV6yAStBqStZvZmi1czVa+1qsM7deZOp3Zej35+v3FegNlekMV+sPV+iN1huNtJuOvTYc7jfve6He+1mp9o1b3hlb2mpDTLsNpFXnZAJ7VgodV4F45uFUKrheBK/ngYh44nwOCM8EpvlgQV+o4W+FYCtY/hXBUwIB3NHXfc7KDN47IlIHnhhFLbei/EwCmVlAGcHR3dlnu6iZoA1ZuWL1m85p1W9at27Zh7ZZ1K9etsndxsLKx8lzh6bXPy//UscALZwLPHH14YXlRiEbVM5XyZ+oVERpVkerVUczaGM26eGZjkmYTS6s1VbsjXQBAof5AhcFwreFInfFIg9Fws+HIa5PhLrP+HpOeHoNXXVp1bxgl7fJZbUhOi2h8M4ish27/D6rA3XJwq0wAQAG4lAcu5oJzWeBMBjjJQwWlygVwFALYin7JBN8ksk8c2fslZdNtisl6RWkFNPx8acRSe/pvA4Cxpam9m6OjO9QHuy53dVvl4bl2xYr1q1ZuXLN83Uond2dLa0srWyuP1Z479u44HOATcDbw1OWzgRfOnj27P+WmSXkovTxUpTxMpfypckW4akWkWnWURm0Msz6B2Zyi2Z6m3Zml212o21+pP9xoPNJqOtRq0t9q8K5dv6fT6G23YXu3bkMXs/w1I6sVzWoCLxtAeC0IqwEh1eB+BVT/3CoFN4rBtcJvDJzPBmehJCB6gocK5MgFsOWFzcCRROLhWMr+F5SVwUSGqRxSGp4bRi65rf8eTbCRmam9s6ODm6OTh7PzcleoEFqz3GPtCpflbjaOthbWFlY2Vq4r3Dfs2ux1aM9Bf++jJ/yOB58Iungm4Oyxu+eX8+9olT1mlD5WLg1TqXiqWhHxDYC6BGZTimYrT7s9S+dNgW5XmV5vg1Ffm2nvK5OuNv32Vs3WV1pNb7RrXmuUddDz2vCpzRKxAveH1oCH1YL6pwLKALcFAAiTwOV8QRL4xoBYEBcdmCoXwFYUMIA/kkjxjqHsCiXbHcDj1aWR6KX/u8JC/C2GQW2d7R1doSTg6OHs4unqttLdycPFwtrS2MzYysbK2cNl1aa1m7y2bt+/c8+hPQf9vH2CjvqfPe57KjAg0Ov+OfvMBypFj+klYaplz9QqnqtVv2TWxGrWJDLrWcxGrlZzpk5Lvm5biU5Hjf6bJsOOVoPWVt26JtWKJkZxC6OwlZ7Vgkttlo5vEHleC0IE7n9QBR5UCgCoAHfKwK0SQRL4cyEEdcPgVJpYEA99nPODAeLheMrBaPLWeyTTDQoyWDT8/AjE3wTCpZwI0zbQsXaysXOxt3d1dHBzcvJwcXBzsrC1NDYxNrc0d3BxcFvpsQLqCqDOeIvXtp0Hdu312XfA3/tQgM/+o96Hj2y8c9448YFyephS7jO1whfqJTEaZQnM8mRmOYdZwdOoSmdW52hVFWhWl2nVVGnW1mlVNmgU1tGzawlpdZjUemRivVhsncjzGqjyge79QgCqwP1KCAAhA9/ygGA4CMIgF5zLgfLAmQyREzxkEFf2OEf+GBtiwCeeeDCGuOEqHlooKoeG1ggt9V8XFuIvC4CUtLS6loalnZWtk52ts72di4ODm7O1g62xuampuamVnbWDq5PLcje3lR6ea1asXAetFd24c/O2PTt2Hty1+9Ce3Yf2bd+384CPy/mLWo/v018+VmFFqHNfaqTHq2ckaWSw1LNS1XJ46nmZzNxc9dxCtexildxyRnYVnVdJZFdhkqqlYqtFn1eBZ9UgtBqEVH0DAGJAoPsCDIS10K3Sb/3Aj574fPa3nvgUX+IETzIwVeYYS8E3Ce+TQNz3nLDyNJ5hLIeQgv2H/OsTuHRrgaSkGMpKptbmNo62Ng62tk52lvbWxuYmRqZGplamFvYQGPbODo6uTs4eLm4r3D3WLF+5YfXazes2bN+4ccemTbu2bNy1fe2O9RsOW+0OZhy7Tr18X+nuE+XQSOVn0cqRCapRyarRbJU4nmpcunJcNiM2lxyTj48uUnxRLPmiVPxFhUREJQithMb7H1RCdf/D/8BAFcTAvcpvulsBbgva4pslf3QFF3J+dAWIIK50AEfBLwV3JAF34AXRM4hA1ZOBd40hltrff1EAoAeASkqSoMdAmFg72Ng42Ng42hqaGatoqDG1tYzNTcxtLCztraztbe2cHBzcnVwEk2UeazyXr1u5asPqlRtXr9qyZt3WDeu2bvTc5ezmr7I2mLz7CtX/DuNsqNKlcKWbUSp3Y1UeJCqFsBihXHoonxKaQQjNUXicJxlSIBpSBB6XiYRVgJBKaMDnQeW3yudhDaRHAgnPhVQIc4IQA6g5LoMwuFb8DQPhFMFpwTxxAEfBPwV3NJG4N5zocBCLU5GBP3QMsdQW/4sCgECi5BTktQ31LGwtLe2tLe2tNXW15RTk5RUU6coMbT1tI3NjC1tLG0dbOxd7qEMQThes9HBf7em+2tNj7fIV61at3rDWY6urzSGm7XGS+xnSukvUXbdoBx/Q/cMYJyMYwS/pF+OpV5LJ1zjE6zzc9XTMzSzEzRxwMx/cKgJ3S6G1bvfLIWdDAFQLrF8LQupASC2kx3XgcS0k4ctHteBh7bc+AWoPyqEWWdgbXBJMFQdDU8XoQGiqWN43CXcgkmS7S1GeIikBP1UXufRG/+sBgIB2hKkw1UwszSxsLc2sLVSZ6lIyMhIopKSsFI5IUNZQ1TXSM7E0sYLKIYgBaMrM09VluZsr1Bu4u6/09FyzwnmbveUhVUt/ol0QwfUMefUl8qYb1F33aAdDqUfDaceiqEGx5DNJ+GAW9hwXczEddSkLXMkF1wrAzUJwpxTy8R8ACL0u9H0dpNDvR+HJYwEbj2q+NQlCDKBsUPRtnDQ4U+R0+rITXFQgG+Ofgt1xH2e0CoMhoWEGEEtt9L/onmAimaRvZGBua2FiYcJQUUJLSn77EgolJSujiMfRlekaOpr6xgamVmYWdlZWjlCxZOtoa+1oZ+NkZ7/a1maPoakPxcyXaBVAtD9JdD5LXHGRvO4GZct9itdj2v5wyqEXZN844rEk+SCW7Cku6lyGyIVsaIHDtULIu7fLwN0/ASC85QsdD6kehAn0pB48afh2Hlr/nYRaqEy6X/kHBpeEFVHGt67AL0lh1yO82Xp5BaoUPDmAWGqv/+UAQKCQ0nKy6ppqJlamBqZGFDoVifrTNCr0sdUolKSktKwMBitPJJPoynQlNRVVdRVlNWW6KoPGpGnY0/wL7QoAACAASURBVA29qMY+BDNfgsUxonUg0eEUwfUccfkVytpb5M0PKDvDyHsiSN4viT4JCn4psoEc1Gm+WHAmNJJztQAa2LlVCt3IoQagWlD21IKwWhBWJzB9A3jaCOmJUA1/SIiBkASoYRC0y7fLwI0SQUUkWDt0JkP8ZJrsMZb8roeKFpswijTo4dLwYiHEUjv+rwSA4FnQOBJOz1hPz9iAQCb9379BAoGQgHZQIhAQDGiUpCRKUkpwgkai0TJEKZq9vMFegokP0cyPYBlAtDtBdDxDcr1IXnGNvO4Oacsj8o4npH2RxIMxuCOJ8v4smSAu8kw6ZNArBeBG0XcABA1AiPDeXw/ChEZv/AOAp01/0veLwoQgbBUe1X6ri34MGV0vFrlSIH0+W/5UGvbQc6zTAUWGgaykLPxoUeSSm/6vBAASqviVNVS09LTxJOL/7nslUEg5mpT6KqzhQbypL8HCn2R9nORwiuRyjuh5hbT6JnnjfcrWULJXBGlfFN47XvFostxxDvpUmtj5bGibi7AKEmYAqP4RlD0/bvNPG8GzJhDRAiLbQFQ7iOn8Q9GvwcsO8OIViHwFwlsgKn4w86wZuhLeinraggmtx9+vIt0sIV7MIfrFEtefJaiZYaQw8PYx5JK77i8EAAKFxCgqEClkjIL8f+PtKBkUTlNGawve5AjRXNAJ2J0gOp0luV8irbhOWX+PuuUxeecz4u4XBO9Y7NEkTABb6iRX/FwWtMj5WiE0kvMDgB9F/5MGEN4E+Tv+LWD3A94IyBgHmVPflDUFsiZB+jhIGwXcEcAeAEm9IO4tiO2Ejkk9osl9Min9xJReemKPUuxb5chXKqH1jFultOAMyrbrBF0nBUlZeK0EcumN91cBQPCxAGhpqLD5771dSh7NsFMw2k+08CVZ+hNtggRV0AWS5zXKmtuUTQ/JO54Sd78geguqoGMs6RNcieBMaNBGCMA9QQn0o/551gzd3RO7QeogyJwAubMgbw7kz4P8hT9UMA9dyZsHuXPQN2RPg4wJEf6YaNqoRNqoTNoYlj9G5o0wOMMqrEHV5F6N2C7m81fqIfXKl7Lp++5TjD2xijQpFDxVjFx67/0lABDW+v/99yIRGJqU1kacqQ/R3E84HERwCia6XyKvvklef5+yNYzsFUE8EIU7HK/olyIblIo8mwHN4wr74G89QC3k/ohmkNAF0kage3zeLChYgJS/APKEEpgegkHAQ97iNxgK5kUL5sXz56TzZvA5M9jMKYWMSVzaGIU3SuOM0NkDqin96om9GnHdGs871O9XKR2NpLkeJFC15JCScDmEhAH4H4cAgUTJomjWGMM9eKgV9idYBxEdzpDcLpBXXievv0vaEkLe8Yy49wXuUBzWN1kuMBV1Jl3kDwDKoRLocS1U7id2g7QR0ewpkDsDAZA3J5DA9392P2T6H0jMgXxIogVzqMI5xfw5XM4MJnNKLn1Cnj+hyB3Dpw7TOIOMlAGl5H7V+B6NF2/U71epnEymrw4gaJjLoeD9A0g4A/zPQ4BCYpSlNTdgTY8SzX0JlscJ9qdIrufIy6+S194hbn5E3v6EtDcS7x0LAXCcgz7NFz0vAODmdwCeNYL4N8u4g1LpY+jMSZHsaYiBnDmQOy/09zfrF37XH8lhHvqeXAgVkYI5VMGcZO4sOnsGlTW9LHNKij8uzxvHpo4SOCMU9hA1ZUApqU81pkv9WYvK5Uz6zutEfRd5BbIUPFOG+MlLoP+50Bg0zQpjtJ9g6kswDyDYnCA6niW5Xyatukna+IC8LZTkFUE4GIMT9sEQANnfMsCdMvCoGkS1oZO78ZxBhbQRyYxxsaxJkDMtAECYBL4DULAAihZA8YJo0aJY8eKyosVlhQtihXMieXMgZ/6bcmdBzqxo9izInhHLmEKlT0imTUjzxhW4ozj2CIklwCCxV+VFh/KdMvqRcLLTbhxZXQYNpwIkDMD/LAnIK0lrb8aaHMGb++OtgwgOp4luFwjLrxHX36NsfUzcFU448BIv7INP86GRUGgqQJABwupEo1+RErsorD5s6rBs+qhExjg02pMzA3JmIUNDza7gTp8/DwFQsiBeuihZ9l6u9INC2XtM2aJsyQK6YEE0Zx5kzX3DJmcWCBgQyZwSTZ8US58U408geWPy3DHF1FE8e5jCGqQl9CqFtdBPp1JX+OFVjDFoaTQ8U4aAM8B/OwSSGEkVNwWjg3hzf4J1IN7+FMEFmhUmrbtD3vSItOMpfn8U3idB4RhLGpoKyAKXC6BFnffKwZM62ag2SvxbYvI7fOqgfNqwTPooOmN8GTTiOQ2yZiAr5wjzgCAVFC+IlS7KVCziyz/gKj7gyj8QK96TyhcVixfE84RJQIBBzhz0xqwZSJnTIGNKhD8hkTaOThuX4Y4pcEYI7GFSUj8lvJUSzCNtOE/UsMbIKAoYgNfPIf8PkfDPKYGgFUSSSIqZnP4unJk/wfI43u4E0fkcyfMyee1t8saHxB1PCXtf4A/HKxxjyZxMWxYsAOB6MbhfLh5WQ4lqocd1kpLfkTgDRN4glj+KSR+XypxEZU2JZk2DbEE/IGyL8+dA4ZxI8QK6fJFU+Z5S8Z5aAR0pldAJXshA7vw3AKA8MPNnBkD6pEj6JFKQDeS4owrcMSx7mBDZTr2YTdl4kaTtpCClAD9tFwkD8N8CAI1UUJFmrlU0P0qwOIa3CSQ6nSF5CAZDNz4gbQ8j7YkkHorD+qfInuSJB2eBSwXQVMC9UtnH1fTnTcqxHfSkLhqrl546QOYOE3ij2PQx2cwJyawpRPa0eO4MIndWIm9uWf6caP7csvx5saIFmbJFgtD6ldCRUvmBUvFBsXhh2Z8ZyJ6D6iJIf2QDkYxJkD4pyp9Apo1LQglhFB/TRbpeSNn7iGK6DotlSKPgz+FDwhngfzcEKKSkPFrJXt7Em2Duh7c6TnA4BbUBK6+T190lbw0lej0neMdAA0FBXIkzGSIXoSVxIrcLMQ/K6M/qGC9blRI66ck9Suw+BmeAmjpEThshZoziMiew2ZMKOVPyOdOyOTPovFnJvDmJvDnxvDmxgnlE8YJs2QK2YpFWsUguf48rf48tWUALC6EfyhZgkP0nBrJmoGwgSAii/HEUf1w6bUI27h3ubjnZO4JiswOPV4E+lBt+3CLi/2cM/lElEFQ6o5FkI1n93ThzX7zVMWiBtEvw98WhIUSvcPzBl9ijifLHoWWhohdyweV80Rt52LtFjCfVSlHNyvEdjKQu5ZReBruPzhmg8YbI/FFS5jgla4KcPUnMnlbImZbLmcHkzUoJABDPmxPNmxPJn19WNC9bsiBfvCBdvIAqmBfN/X8A4BsDQgymvzMg6A34E1K8cZmkfoXQBsKxWLLbURJVWw4phYL7AQQMwH89BBISSEWmjNZmnOlRguUxou0JktNZosdl8ppbpE0PCTueEQ68xB1JUDjOkYQAyAGXcsWuZONv5iuHVCpFNqrFvlJN7FRh9aix3qmx+5Q5g1TeMDV9lJY5Ts+epGVPkrKnsNnTmNwZ+dwZ2dxZdO4sImdWDGqRhSNFP3rfP7v/XwGA2uLvDGROC9YXTQsbg2XpEwj+JCp1VOb5K+w5Ps3Dj0TVkkPLouDPpkfAGeC/CgACWh+qsRprDC2QhnYI2J8muF0krrxOXH+PtC2MsC8SfzgOG8CSOsmDlsRdyBa7lIG/lq18v1TpWa1aTCsz/jUzsYuZ3MNkvdNg9amwB2jcIRp/RClrTDlznJE5QcmcVMyaVMyeEmYD2ZwZqZwZkZwftY3A3P/i+P9UPxj4gYGwHJoQE5AgldKveC2fuv4cVc1CAdpcv+TZFfnP1D+rBBIsi5AhoJXdFIy8caZH8VaBRLtTRGgw9Cph7R3S1hDinnC8dwzUBwelIs5mgnNZohfSsZczlG8XKIdWqUc1ase+0ol/o534VjulR4f1jpncq5zST08dVEkfVc8cVc8cV8kcp2ZM4L5hMC2fNS2TNS2eNS2aPQ1VNZmC47eRH8EQEHT+/a4vtL5waOjH6JCwHBKOEWVMCicNUBlT6KQ+hZtF9A3nqcqmGLQcnAeQMAD/6xBIQFPCKKq1nMF+rOkRnEUA3uYE0VkwJbz6FnnTQ/Kup4QDUYJ10RzJ0+miwZkgOE3uAk/pRrbSgxK1iDqtmBbduHbd+Nd6SW/1WN06yT0aie+Uk/uUuEOq6SPM7FHNrDGNjDF6+hghYwKbOYnLnJTLnJTInJLInBIR1jNCBn6Y+18Y+POVP33DHwBAeUCMP4HmT6D4EyjWIOZWMXXzFbKKuTwaAw+PIuEM8L8OAVIKSTSS1duFM/XBW/gTbAIJTmcIbhdJK2+QN9ynbH9C3PsCf0QwHXYyTexsBjjLkwvmKF1JV75ToPqkWjOqUTe2VS+2XT/xjWFKt2FKj05Ct1p8j3JKnxpvUCNzRCtzVDtjVDV9lJ4xRkkfJ6dPKGZMyGdMSmVMIjOmJDKmRP/A4Pvd/Y87/Y+XP47CdDH9RyEkmC9D8Cek+BPojEl0Yq/8zWLK6pNkmp4cvIIaAZdA/5UQYJmy2ptxJj54c1+CNbQwDu9yDr/8KnHtXfKWx0SvCPyhWAXfJExQKvI0X+QMT+oUi3YuVflapuqDEmZ4rW50s35Mq0Fcu1FSpwmr2zihSzv2rVpCj1ryO3VOvwZ3kMkbUksbVkkfUeKP0vmjFP4oMX0cmjhLH5dOH0ekjy/LmBSBBBla5FtmEG6mmRbspxGmCOH59y9BErxL0AmI8yck+eOS/HEJ/rgUZ1jhbhltfTCFoi2LhOcHkP9fYvCP6wEEkleS1liraHyYYOqLtwgg2J4gOAUT3C8RVt8ibnpI3PmUcOAl1idBIYAjdZIvejoNcSqFeCZF5WKayq189dAK3ch6g6hmw5hW48QO05RO04RO/ejXzJi36vFdmknvNFJ6mZwB9dRBdd6QatqwctoII22Ewhsl8EYVeWOyvDFk2hiSPy6RPi6RPiGWPi6eMS6WMQkyJkHmD/3heKEEtAisnz4hxp9Yxh9fJrA+Km0MlTYmyx+XT+7DXcujuBwk4FVl4EEhBAzA/3sIZAiSKq7yRofwJkdwZv7QlLDDaYLrecIKaGEcadtj4t5I/KFYrF+ybGAqEnrUcwomKF45mK12JUPtQZHWsyrD53VGL5uN41rNkjosEjtMo9v1otq1Yt7oxL/VSuzRSunVZPUy2f3qqQPq3EFV7iCDO0RNHSaljuC4w/LcEWneqGzaqFTaKIo/iuaPIfhjIuljIunjIhASE2IZE2KZ48sgMMahzZbpE6Lp42LpkOnF+WMS/DGJtDGEwPoI3hiaN4rhjsjzRuVYg4p3SilrT5AwZCnxpb7FIP4p+mdmALQCmmqLMTiANz6MM/UlWEGDoUTnc3jPK0RoRuwR0SsC5x39fYswTzSIJXU8ln4qUe0CT+N2rmZomV54teGLeuPoZrP4NovEdrPYNqMXbTpR7VqxrzXj32ol9WinQBgwWb0a7D7BjMEAgzNA4wxSUwdJqUPY1GEcbxjDG5FKG5FOG5Xij0ryRyQFMKD4o8j0UVTGKBp6OYrijyEFpkdAGkWmjaG/aVQybVSKNyrHG5XnDitwh7HcUSxrgHAzl2KyHCut8O0BSrAQMAD/MQQoqA8mGMrpeOENvfEmPtDjUmxPkpzOQhMCq2+QN94nC1eGHknA+qfIBHGXBbHFj8UQjseoBrM0rmZo3ivQelJu+LzGJLLB7GWLeVyreUyLSWSzXmSLzss27Zh27fg3OolvdZK7tZN6oKIo+Z0aq1eZ1ctg9TFYfRROP5kzQEodwHEHsdwhed4QhjcsxxuWSxuR449K80cl04VIQCdCCV9K8b9f549Kpo3IpY3Ipw0r8CD3K0IADBF4QwRWH/F4JNXYXRHaSgYvGkXCAPxnIZBAILBMGc3NWIODBGMfaErYJojscJrkcg56XtB6wbqgPc+Jh+NxfsnyxzmSxznifrHyfi+UTiWoXeJp3sjSfFik96zCKLzaNKLONKrBNKrRJKJBP6JR70WLTlSbTvQr7dgOnYROnYS3OgldWoldmsnd6sk9KknvlFnv6Kx3NFYvhdNH4vQTOP3EVAgGfOoAnjuE5Q3JpQ3L8EfkeUPyacOYtGHptGFZgcvlecPyaZAwwnPekCJvSBF6y6Bi6iAeSizQzyFxhwgvX1H9wyiqRjLwoBACBuA/DYE4AoFRktZYpWhwAGfsQ7T0J1sHke1OkpzPEj2vktbcpWwOIe98Rj4Yi/NNUgzgyAamivslII88pwS+VDvHYl7ha97K0XpYrP+k3ORZlVl4jUl4jeGTaoNntfrPG3SfN+lCqaBVJ7ZdN65DL+61TvxrrcROZtJb9eRu1ZRuJVY3ndVDT3lHZfWSWL0kdi+Z3Uvk9BE5/QRuP447gOUO4LgDOB50VOQOYnmDwitYKGMM4r5pAM8VYjOAT+0npPYTU/tJnD4Ku4/C7qXGtNF2XyAytAUL5uBCCAn3AP8xAyBlKVAfbLgfZ3qYYOFPtA4i254gO54he16lrL5D2fSIuvMpef9Lsk8iIYCtEJgq5ZeEOByJ83uueipB4yJX62qG9u0cvQeFRmGlJqHlRiEV+iGV+mFVeuG1+s/r9SMb9SKbdKNadaPb9GLbdWPbteM6NONfM5M61ZI6VZPeqqR0KaV0M1IgDGjsd2T2OyLnHYXzjpLaR0ztI3L78dx+PA86Erj9BOEJdIS8Dl0XKhUSIbWPkNpL5PYRuH0UTh+V3Utlv6OweughxTSvYAKNKYOShjfQIOEm+F9DgEBK4tAUG4z+XrzxIZy5H8EykGgVSLY7RXa9RFl5k7bxIWX7E8qeF2TvOJI/CxfIkfNPWXbohfShJ4zAlxrnUjQvcTWvCxi4l29wr1D/bpHuvRKdh+U6YVX6z2oMIur0Iup0Ihq0XjTqRrfoRrdqR7dpxrzSiO9Qje9QT3itmvRGOalTKalTOfktI6WbxuqhsCHROD0UTg859R2J+00E7juc4ITI7SVyeol/+hIptZfIeUeC1ENOhd5FTn1HZb+jsnpo7B4a6x39aQVtSwBekSy1TAKaAIRTAQIeBfoBAFoOTTDC6HrhjQ4RzP2IloFky0CS3Smyy0WK503a2gf0LWE0r0jqwViybwoxgKN4jI089HLZvhD80XDVkwnq59jMK2maNzN1bucY3MnVv52rdztf+26RzsMyvaeVBhHVBs+r9cNrNCNqdZ7X675o1H7Zohndyoxt04hrU49/pZbYoZLQoZTUoZz0Wjn5jUrKW3rKWxqri8buonG6KZxuSmo3lQOJktpN5HSTUrsJnG6S4CX01W96RxYAA8HD6oaOgpdUdg9UYkFV1lvGw1z6Gm88Bgc9eRcGAAED8CMESEmkooa05ja84SGCqR/RPIBoAbXCJKfzVPdr9NV3aRtCaDsiaPuiyUcSSf4s4jGWtE8s8HqM3hdC849SP5WoeZ6tdZWvfTNL/1aWwe0cvZs52jfztO8WaT8q0Qkr139arve0QudZpfazaq2IWq3IBq2oRq3oJs2YZvW4VtX4NuWENqXEV8pJ7UpJ7YyUDiVWByPlDYP1hs7upLI7KamdNE4nLfUtORU6J3M6CamdpNS3ZI5Q0BUKu4vGeksXHMmsTjLrLRV6+ZbOgliisjpp7Lc0dicjtIDushUrpygJb6hHwAD8OQSydGmN9TgDIQDHCGZQJ0ByOgcBsOoObf0j+vZw2p4oyqF4sl8K0Z8l7xMv4RUmtus+9tBTlYBojdNJmhdTta7zdW9l6t3O1ruRrXMjW/NWnta9Ap0HRTohJTqhZdpPyrWeVmiGV2mF12hG1jFfNjCjGzRimlTjmlXiW5QTWpUS2xhJrxjJrxjJ7YyUdgarg87uoHFeU9mvqZw31NTv4rwhCUTmvKEIBJ2w39DYbyBaWJ1U9hsqS6DvJzT2G5rwe5JfMS68pJi7yUvKwkkA+b/LwD9zIky4M0aGIKm6UtHIm2DmSzTzJ5n6Ei0DiA7BVLcr9JV3GOseMbY9Y+yKpB2IIx9JJvml4I8mSu0LB9vvIPbcIx99rhoUp3EuSfOygIGbWbo3MnWuZTBvZDPv5Gjfy9N+UKgdUqIVWsp8UsZ8Uq7xrFI9opr5olbjZZ1adL1KTKNqfLNyQotSYgs9qZWW3EpNbqOmtFHZrwRqp3PaKexXFE4HWSAqp53EaSdyOkiClyThCbuDIhCN3UFld1BY7WSBKCzoInSFDf0QKruDHt+odDKUomUih5aCH6yChAH43gcroJVd5A0PEkwOk0x8iNBnCPiT7c6QXS7Tlt9mrHnA2BTG2PGcvj+WeiiBciSZ6JuM8Y4S335PZOs1zIFHdP8o1RNxasHJzIsc7Wt8net8nSs85tV05s1MzTvZWnfztB8UaD0q0gwpZj4uZT4tV4+oUIusUn1RrfayVjWmXiW+gZ7YSE9qpiY3U1nNJFYLmd1C5rRQOK1kTis5tZWQ2ob/LpJAxO/Hb1c4r4icNjL7FZXTRua0kVltJFYbKQUShdVG4rQRWW0UdisNUhv9ZRn9yFUS00gWagbgfgD502cAaEGELIpqg9HfTzA4QDA8QDA6TDD3I9ucpDhdpHncpK+6x1gfwtjyhLb7Be1ADM0nkeyXTPCJk/V6LLrhMmLnLYLPE0bAS9VTcRrnkrUup+pc5WlfSdW8wtW4zte8nal5J0vrXq7WgzzNh4XMx0XMJyXq4WVqkRVqUZWqUdVKMTVK8XX0hHpaYhM1uZnCaiKxmkjsJjKnhchpwaa2YLmtWG6bQK14XiuO24rnthIEwnKhl4LzNiK3jShABRK7jchuI7DaCGyIJQoHYoDAaaGwm6nsZmpKAz2ykLbjGB5PlVry9Iv4++gfWwIJ+mAU0UhWxwuntxentw8vaAZIVoEU+2C6+03GyjtKa+4x1j2kbQmleUVQvOMpvslk3ySFA88lNlwHGy9Ke90m+zxlBEQpn4xVO5fEvMTWvMjSuMhSv5qqcSNN7Xa66r0s9Qc5Go/y1EPy1Z8UqjwrVn5eqvyiXOllpVJMNSO+hpRYS0mqJ6U0kFgNRFYjjt2I4zQpcJvkeM2yvGYZXrMsv1kurUWe3yLPa1HgtSiktWDSWjC8VnleK4bXiklrxfJaFLmtuNSWb+K04NktOHYznt1M4jQTOc341GY8p5nAbiKyG8msBkoYn7x8u4IiSRL6eFY4DyB/bgAQSGiDvOZmrO4enO4+nIE3wdSXZBFAtjlFcblK97yptOoOY809xoYHtG2h1P0x1CNJFN8UwqFoyU13wapzousvyO+9R4HyQJTyqTjVc4nqwQnq5xJVL7FUrqYq3+Qx7qQr389UeZSlEpKtEprLeJJPDy+iR5bSosqUYyqV4qvICdWkpBpcSi2WXYdl18tzGjCcBgVuo0xao2RaAzqtEZnWiOQ3Sac3S6U3SaYLTtKaJfnfJJ3eLMNvkuE1K3KbMNwmTGqTArdRIbURw25UYEM4EVIbFXmN8rxGeeh6gwKnXpFVg7sVS3BYhZGUgTbHLXn8EX95/XMBQCElxJFyVEmV5Qq6giRgeABncpRkcYxsFUR2OEd3uUxffoO25h5j/UPG5hC613OadwLNL4XiE6+wI0R01QWw4hRiy0X8vjvUI2G0gBf0E9FKJ6OVTsfQzycoXUlWus5h3OYq3U1jPOQrPcpgPM6iheVQn+ZRIwppUSX02HJ6XAU1oYqYVIVLqVbk1Mqn1smm1slyG5C8+mVp9ai0ehS/XpzfIJ7eiExvRGU0iWY2LctsRGQ0IjKbJITKaJRMb5ROb5DhN6D4EDAyvEY0rxHJbZDlNiikNuBSGyAA0hox0Jca5Lj1GE6tbEqFzMUwRQsHOSlZeCs98icGQDAQJI2XpNljtHfh9Pbg9PdhjQ6TzP0pVscpdqcojueo7lepq27T1z2gb3xI3RpG2fuS6pNE8YnHej1BrLsG3E+AVadktl8m7rtN8gkhH3tGCYignnhBDo6mXoynXk2m3mTRb7Np97iUhzxKSDrlcSYpLIcQkYePKiTFlFASyvAJFYTkCmxKtSynRppbg+TViqfVifLrAL9OjF8nmlELMmpBej3IqBfLagCQ6gUSnjeCrIZlmfUSGfXiGfUiGfUi/HrAh44iafViafVoXoMMr16KVy+dVi+VVo9Iq0fw6lHcGhS7EhWXJ+l7HqOsIQUlAbgQQv6sAEDzwRg00URObzdefx9efy8OGhL1I1keh1phh2Ca62Xa8pv0Nffp6+7TNz+i7nhG3feScjCasDscveWe6Ipg4B4otv4MZscV4t4b+MP38b6PCQFPSSeek85GUS/Ekq4mkG4nk++kkO9xiI/ScCF8fFgGLjwLF5mLiy7AxhXLJ5YpJJfLsipQqVUSvGpRvsDxGbUgsxZk1kDKrgFZtSC7DuTU/6Hchj+UI0RCoMy6b0qvB+n1Iun1gF8nmlYvmlaHEBIFHasluJUIVql4BFdy0x4ZBTy8jx75EwMAbZBHKTJldHcRDQ6S9PcSDA7iTXyJ5sfIVieodmdozhfpntcYK+8woInhB7StodRdEeS9L4h7n2N2hCDWXQduJ4HncYlNZxW9LhH238Aduos9+gh/PIxwKpx4Lgp/ORZ7I4FwJxl7jyX/MFXuMVc+jCcfkS7/Iks2OlcmtkAqsVgyuXQZu0yEVwH4VSCjGjJ9VjXI/lfl1IK8uj9UIFC+QMIrubXflFMHKbtOgEQdpIw6kFErAhFVCzJqQEa1SFqlSGq5CLtE5OYzSVs3GSn4mULInxgABAopQ5HS2IjXP0TU20/Q34sz9CGYHiNYBpJsBFWQ62W6503Gylu0NXdoGx/StoVRvSLIe17gdj2T2nIfLD8HnPzAigDktmCF3Zex+68rHr6j4P8QeyJM8Uy4/PkohSsx8jfi5W4nyt5Pln3EkgnjSD7lSj3nI6KyELF5hosxvAAAIABJREFUqMQC0ZQiwC4FvHLArwAZVSCrCmRXgRyBcqtATjXIrQZ51SC/RuD7WkiFdQLVfn9ZAx3zf+g7GLkC5dQKckgtyKmBWMqqBhmVIK0cpJWC5FyR09eQ2gaCj5+BCyHkTwmABAIpiUUreyjoexP0DxB090CfKGzsS7A4TrI5SXU4S3W+SPW4Sl9xnbbqNnX9ffqWUNrOcOqeSKLXc8z2UMT66yKuQcD5KFgTiNp1XnHvZQXv65ijd+WPh2BOhckEh8tcfCF9PVr2VpzMvUTZR8lSYaxlT9hiz7hikRliMTmiiXkiKQWAUwx4ZSC9HGRWQL7PqxSoCuQLVQkKqkBRNSiq+abiWkjQSQ0oroaORTUQBpBqBRKc/0BCCENeLcitgaDKrgCZ5SC9BPAKwUsW8DqIJNMkUfC2AeRPCQA0HSaDoljI6e7H6+7D6ezGGuzHGfvgLQLI1ieo9mepTucprhep7pepy69R1t6hbQ6h73hK3R1J3v1ccddT2a33xVadBw5HgYO3yIbjkruCZfddkjt0XdbvrtTxh9InQ6XOPpW6/Fzq+kvknVjEgwSxx0kgNAU8ZYHnXPAyA8TngJQ8wCkAacUgoxRklYPcCpBfAQoqBL6vhE4KKkBRJSiuACWVoKQKUlkVKBWovBo6llVDV6BjNSir+aYSIR5CZmoFqoEoKqyCfn5uOcguARmFgJ8HQiPBpm0SWLgZQP6sACDQSBxTRnMLVtcLkrAVNvcjWwVRbc9QHM5RnS7QXC5Q3S9TVt2ibnxI3/aE7vWcujuSsCdccXsINBzkFASsDgKXQyKbApF7zskcuCR1+Lqk322ZwIfoU6HI88+QlyMkbkYtux8LHieCsCTwJBlEsMHLNJCQCZJzACcX8ApARhHIKgF5ZSC/HBSUC6xfDgrKQGEZKC4HJQKVVoCyClBeCSoqBKoEFVWg8oeqQZVAFdWgogaU1/wLFaUCWkqqoJ9WWAbySkBOAcjMBZx0cPeRiLUdEoWGR0WRPyUAEkgZoiTDVV5ri6LOTqzuHqz+foLRYZJZAMX6FNU2mOpwju50lupynrL8Gm3dXfrWUPquCPqeKOq+F4RdT2Q33RNZfgHY+wPL/cDZG2wNEt8bjDpwEXn42rJjt8WC7i07/UjsXKjYlXDRO1HgcRx4kgCeJoJnieAFG8SlgeQMwM4CvFyQngeyCiFf5peCwlJQVAKKhMcSUFIKSktBeRmoKIVUWQaqy0BNOaiuADUV0LG6UqAqUCvQtytVoKoSVFaAysrvhFSC8gpQVgb9tJJiUFgAcvJAdjbgpYHTwaJMbRQafqgW8ucDQEICekoKyVJWfaOC9nZFwcoIguEBoskRaFmE3RmoELI/TXE6S/a4TF11i7YxhLEjgr47ir43iuQVrrAtBA0NB50BNj7Aah/w9AHbTyzbd0784EXRo1dBwE2RE3fB6QfgQii4EQ4eRYOncSA8HlJEIohOBYlpgJUBUrMAPwe6H+cWgPwiUPhdxQKVFEF+LS8GlcWgqhhUF4OaUlBbBurKQUM5qC8HdWUCVYC6SlBfAeoFX6orB7XlECc1ZQIkKkBVOQRPVSmoLAXlRaCkEBTkgdxMkJUOXjwHXl6iJDIC7oYRPxsA0Mdoy6AUtKVV12G0tivq7MTp7SEY7IeWx5n6kqyDyDanoK2SDmcorucpy69S1z9kbA9X2h2ltDeaujsSv+uJ/JZ7y1ZfAc5BwNIbWOwByw+DnSfE9p9dduiCiO8VEHgDnLwNgh+Ay6HgTgQIjQbhseBZDHgSC6KSQSIXsNJAajrgZ4CMLJCdA3JzQX4eKMwHhXmgKA8U54GSPFCaD8oKQEU+qCoENcWgtgTUlYKGMtBYBprKoaNQTQL9+aSxDPo2ISG1pRA5NSXQT6guAhUFoCwPFGeD/AzAZ4Gnj4CrsxgGgxSHhoeX+o+C/KvoJwAA+uwwlAxFiuGBYW5V0N4OdQIG+7EG+/BGB4imRyEGbE+S7E6SnM6Q3S9Cz4zY+oyxK0p5TzR99wvirnDFHY9RG/4v9t7Dq80rz/9/g21Qoaj3ghBCIIFEk4TovRcB6nQwHdvY2AbTTDEYML25lyROHMeOK7bBuOBeYjt1JpPJzH6/3z2/9mf8ziMns7O7szuT2dnNTAznfZ7zgJEMl8/rftq9zx1zy+5D0g4YamCsQkEzKtrd67rcmnqxfQC7DqBjFN0TGJjB2BJmjmH2GGaP48gZvHcO5y7gwiVcuoQrl3D1Cq5fJWbl1eu4fR1r1wkDvbOMu8u4fxMPbuLRTTxZxbM1vFjDyzv47C5e3SP0+h5e3/13ukPo1V3i217exfO7eHYHz27/oCcrxLut38Dda1i5iCtn0dcBTciWjWOXPN81AFzPTKeIYn0DzYxgByuknKmtYWpruGE1vMh6XkybMG63MH63wHWekjB3SGyek5Yek1WelFUcFZYfYVcsMR0zpKJhZO1DQit01YitQkETKvegvgstvdi+H+1D6BxBzzgGJzEyh4klzBzGwgkcfw8ffYwLFwldvIBLF3DlU1y/jBuXsXqF0O0ruHMVd6/i/jWsX8f6Mh7ewLObeLmK12t4fdt1XcMblz7/UV+s4cs1fHn7B33u+tdXa/hsFS9WXLqF5zfx9AaeXMeja7h3Cbc/wbkjqLK7MZmeG07A850CwJNEInuR2SpveT49yM5QOZnEAulqtraKE1HLM2wTxe4SxbUL49v5KR2izD6xaUxqX5JVnPQvOyIpXxJUHuZULPhaJzYXDiGzk2DAUIO4KuQ3onwXGjvR0o0dfdgz4GJgDAMTGJ3F5AJmD2PpOE6fwYcf4sOP8NGHuHAOl8/j2idYvoCVT7F6CWuXcOcS7l/G+hU8uEpo/RoeL+PFDbxewRe38cUqoT/Y+pe38dVtfH0bX68S+pVL3/z4lc9v4bMbeHkDL5dduo4X1/DsCp5cxoOLWPkA80OIj97ks7F5kvSOAeBJInnzKOJk30CLKxCqYGsq2aFlbG0lJ6qJT7QFdgli23iJu4WpXaKsAXHRlNR5xN+5IHXO8yuWOJWH2aVzFOu4W8EAMjoQ1wxdFQzlyK5D5U40dqC1C2092N2HzkH0jGDoEMamMTWHuUUsHcWx4zhxEqdP46P38emHuHoO1z/GzY9x6xPcvoC1C7h3EeuX8MClh5fx6AqeXsWrZXy58oOhf+MSYeur+GoFv1rBty795hZ+s/KDvl3FN7fwxXW8uoZXV/Hqyg/67DJeXsLzi3j0Ma4fR2cTAuVbNtbJeb5bAHiSyN5kjsZHUcAIsjJVDpbayVI7iMJoeB1Xv50fs5Mfs4Mbv5Of1CHM6BHnDYtLJqWWabF9Vli6KCg/zKtYojtmPUvGkNePtN0/MlBBMFDRhuZObNuHnV3Y04d9/egbxvA4Dk1hZg4LCzh8GMeOEKWY907gk/dw5QNcO4vlD3HzI9w+h1XX9d55rH+CB5/g4UU8voSnl/D8Ml5fw9c3XIbusvXvbhHXr67ji6v49TK+v4nf/ZG+d33DN8v4/Ao+v4w3l1z6FJ9fwutLeHURLz/Bww9wdhzOPDcu23Njw8C7BIBrXZA3jyJNoiuL2UEWVpCNqbKziJSgkhPZSBylYWjmGrdxEnYJUjpFGb3C3CGRaVRkmRLZ54RlS9zyI6yyRR/79Kbig8jpJYpCMY2IrIa+Apm1qG5D815s70DbPuzuxr796B/CwVFMTGBmGgvzOLKAows4togPjuHSaVw9g+vv4eb7uPU+cXP9DO6cxf2PsP4RHpzH4wt4egHPL+DFRcJ8v7mG39zEb28Q+v4mvr6KF+fx5iK+u47/tUzon5Z/vLmB31zHV5fwxQV8cdGlCz/qPD4/j5cfYfUo5vbBGO5O9fL8+f8oP7feJQBIJJI3iR3qLcuhB1mYQWZGsJXojqlLWWHVrIg6bmQ9x9DMiWvjJ+3hpnXxs/YL8oeFJYdE1mmBc55fvsStWGKWzVNtE+6mA8juQfIulx+ohr4SufWo3I7mdmzbg7YO7OlCdx8G3zJwCDNTWJzFkTkcnsXxeXx8DJdP4OopXD+N5dO4eBwXjmHlDO5+gHtn8fAcnnyMp+fx/Dxh6K8+wZsL+Poyvr2G75fxu2X86jJensPTDwmD/v4y/s91l67hn6/hn5fxu2v45iK+PI+vP/lR5/9Fn3+EB8dxeQJtTgTLN20m0qOf/+/yM+rdAsCDTPLikAXR3oEl9CAzPdjCCLbR1Q6GtoyprWKF17L1DVxjKy9+JzdlLy+jh587yDcdFJRMCG0zwrIFIhmoWGKUzZKtE26mA8jqRuoeggF9LdEfyKpFRSta2rFjD3Z1YO8+9PZhaBCjw5gaw/wkDk9jaQqLkzg1h/NLuHQM147j6nGcW8KHC7h6DGuncfc9rL+Px2cJ+37xETFhv/4Yr8/hzXl8dQG/voxvL+GrT/DqIzz7AM/fw+cf4vuL+L+u4v9+q+v4X1cIK3/9AX79Mb79mLj++pzr6rr55kN8dhJ3F3CmD/Z0dx8fzw0ASO+USBQS3Z8qy/FVmmlKi8sJ2OkhDqamjBVWxYrcytY3cmK28RJ28VM7+Jl9/LwhYdGoyDwhsM8KnAuciiVW+SKjdJZsO+RuGkJOD5EPJG6Dfit0lUithaMZzTvRthu79qBzH/b3YKgfYwcwfRAL41g8hLkxLI7j5BTOLeDiEj5ewHuzOD1D3Nw8hjsncf8UHp7C4zN4+j5efIBXH+L1R3jzEWHWX5zDl+fwxYeE3b85i8/ew2dn8PlZ/PZj/PNF/L+X8P9dxf/+FA+P4dYsXp/Gd+fw3Uf4zVt9iN+cJfT1aTxewo0JjDcjLHDTO94Ue7c8wNueAJlOFhi8AwoYyhJmkJnpYoAZWsrSVrDCa1hRRCDEi9nBTdzNS9vHy9rPyz8gKBoTWacE9jlu6QKnfIlevuDjnPGwjKNwiIiF0vYgvgX6OkRVIaUGtiY0bsfONuzeg65O7O/GUC9G+zF1ALMjmHFpfhQnJnBmGqemcHKS4OH9GVxdwOph3DmG+8fw4ASenMLzM3j5Pl6dJcz9zft48wG+dOkr1/WL9/H5GcLQvziDb8/if3+M/+dT/P48Vmfx/hBuTeOL0/j+rEvv47fv4bv3iOtvzuCzw1ibwMV+VGZCxCG6Au+s3jkA3orKpQr0tIBCFwMWZpCVGWxnhjiZmgpmRC07qp5taGHFtXGS93DTu3jZ+/n5B/jF43zLFM8xyy1fYJUv0soWfBwzHpZDMA275exHWgcSd8DQgIhqIhzK3YqaZrTtwO527NuD3g4M7MPBHoz3Ezo0gMkhzAxj4SCOjOH4OE4ewqkJfDSFqzO4NY+1Rdw7jIfH8fQUXpzGq9M/GPrLk3hzGt+8j2/eI/Qr1/WbU/jiBN4cxxcniU9fn8DKDM4O4b39uHaQsPXvTuN3p/H7My6dxu9O4cvDWD+EtRGcaIMlwc3H+93Nht9RADwoJJqM6pdOCyxmKM1MpZWhsjLVNsIPhFWyI2pZ+gZ2TCs3YRc3dS8vs5uf2883jfDM43z7FL90jlu+yCpfpJfOeztmKJbxzQQDfQQDCW2IbkBEDfSulKC6CW3bsXcnutrRtxeDnRjpwsEujPVgog9TA5gdwuERHB/FqXFCZ8ZxfgLXp7EyhzsLuH8Yj47h+TF8dhyfnyIs+9FhPDmCr07j1+/hV2fw7Vudwq9O4qsTeHMMr47i2RLuzWJ5HOcG8EEvlg/i5QK+PY7vT+L3J/FPLn21iAdjuD2Mm/0YLINctHmL5zu6WPodBYAofvhQ2CpvWSZN+WNCrLIx1Q5maDmRDEQRyQA7djsnsZ2T1sHL7OXnDfJNI3zzOM82xSud45TNM8oWGWXzNOeMr3XCq2jEI7ffPX0fkncitgVRWxFeieQa2OrR3Izd29G5Ez270b8bg7sx3IGD+3CoG9N9WBjE0WGcHCWs//QY3h/FhXFcn8StKazNYn0ejxfwfBGvDuP1UeLT29PEp9+cxHdn8N0pfHcC350k9O0JfHUUXxzBmyU8n8f6FG6O4sIAzvXh2gE8ncLn8/hyHr9awK8X8GoK6yO4M4S7gzi/ByVxbjRf4oiBd1DvLgCeJDKFSeZqvQPyfZUltCAzLdjKCLExQ50MbTkrvJodVceMbmLF7eAktnPTOnlZBAO8whFOyTjPPsVxzrJLF9hli+zyeXbpLMM64Vs0Qsrtd8voJMqjsa2IrENYFYwVKKpBYwN2t6JzB3p2om8XBnZjaA+Bwfg+zPRisR/Hh3HqIE4fxKkRfDCMiyO4PoZbh3BnEuvTeDSD53PERH5/GjfGsTqBFwv4zUliUv/tMXx/nLh+dxS/PopvjuKrI3iziGezuD+BmyO4OIDzvbg5hMejeD5G6NkYHh7EvSHcG8CdfqzuR58NWn93D9K76ATeZQCIqiiVSeFH+QTk/+AH1FZ6qJ2hcTLCKliRNUxdPTO6hRO3g5PUzk3fx8/s5eUOcAtHeCXjPNskr3SWV77Ar1wSVi4KS+e4tklG8UFqXv/mzC4ktxMMRNVDU43ISmRUonIr2prQ2Yp929Hbhv07MdSOkT0Y68BsF4704fgATg7h1BBODuC9fnwyhOsHcesg7ozh/jgeTeLptMumR3F1hLg+m8GvDuO3R/H9EXx/GL9dwndL+M0SfrWIrxfwepaY9dcPYXUYV/twuQ839+PhEB4fwIMh3B8krP/eftzpxVoPPtqGuhQ3hq/HO1gSfacBIKqiZJIXnyow+AQWupyAmaG2MUKJzgAjvJIZRSQDLGMzN24HL3kPP20fL6OXlzfALRzmmcf49klu6ZygcklSeVhasSgpm+PbJ9nFIz55A5szupC0GzHbEFkPbTXCKpBYAUsNtjWgoxndrejZhv4dGNqJg7swsQdzXTjSg+N9ONmPE/043kvU6T8dxPIgVoaJbPX+KB4dwt1x3BjB1SFcHsTyEBHHfzWH75fw+0X8fgHfL+C3C/h2Dr+aw5cz+GwKzybw4CBWD+Daflzuwq0e3O/HwwGs78e9XkJ3u7DWidW9mC6FTu7uRX3n1ke86wC8LYx6cSiCaF9FAS3ITA+y0FU2eoiDrnExoKtl6us5xmZufBsvaTcvtZOX1cPL6+eaDvDMo3z7pLBsXlp52L/qiKLysKxsXmif5JSM+uYNemZ2uyfvdovZhqgGaGsQWoHwMmRXoqYWuxvR3YTeFvS3YnAbRtow2Y65vVjqxNEunOjFsW4c6cJ7PbjUixv9uDmA1UHcHSam8+VhXBvCtQF82odPe7DSjxfj+G4Gv5/FP83hd3PE/bcz+GYKXxzCZ2N4ehDrw1gbwHIXrnTgeifudGO9G+tduL8P9zpwZy/u7MGlVjSnQMDc8q6tlN4AwMUAsUyIKjT4KAppgQQDNJXNV+2kacpp4VX0qFqWoZ4d08yJJ2IhdloHJ7OHk7ufW3iAax7lO6al5Yvy6iOK6iOKiiVZ6RzBQPGob/4gKbN7U1K7i4FGggFVJUJLEVcKZzXa6tDdiN5G9DVhqAWj2zGxE3PtWNiDIx042onDnTjcgfc6cakH13txsw+r/VgewNUDBADXB3B1Pz7txvm9uLQPDwfx5Ri+n8I/TeP30/jtFL49hG/G8PkIXg7j6RAeDBDRzo1OXN2D5d2E0a934EEH7u3G3d1Yayc070S80o38jkVBGwD8UT7AoQiifAPyiCZxkNVXZaeFljI0FfTwqrexEMfYzI7fzkncxUndy83s5hIMDPEtYyLHtF/lkrLqiLLycEDFoqx0TmSf5JeMMfIHqen7PBJdfkDfgPBaqCsQXIqIUmRXoKEWnfXobcD+Rgw04WArpnZgtg2LO3G4HUfasdRO3JzZi086cG0frnXhQjcu9hHWf2MAN/bjeg8udeLCbkLL+/CoD18cwG/G8NtxfD+Ob0fx9QjeDOHlAJ70Yb0Ha/twcy+u7cL1nVjdiXvtuN+Ou+1Ya8OdNlxsQGsyOO9YOWgDgD8aDmKlEIUf9WNdyEpXO+ghpXRtBSOimqnbyjI0sGJauPHbOUlEf4Cb2cXL7eMVHRBaxmWls8rKxeDqw6rqw8rKRXnZnNQ+KSgZZeUO+KZ1kZJcDOgaEF5NMKB0IsSOpDJUVGFPLXrqsL8eQ40Ya8ZkK+a2Y2EHlnYQ1/kdOLwLJ9vxYTvO7cH7e3G2E1d6iIz25n7c6MFyJ67txaV2XNiFT3fiejtud+BJD74+gN8exK9H8OUgXvfjeS8ed+N+J9Y6cHM3ru3Ete24tYOw+zttWNuOtVbcbsGcBbFyd18vz3fnvL0NAP7dk+QYZG6ot3+mb7CFprLS1HZ6iJOuKaeHVzOjaliGepaxmUX4gZ2clN3sjE5ubq+gcFBsGZc7poPK59UVi6rKJWXloqJsTuacEplH2fkDvpndLga2E/lAeA3U5VA44G9DmAMFZWiuwv4aDG7F0FYcrMdkE2abMNeE6UZMNmK2BQutOLwDR3fi+E6c2oVze3GlCys9WOnGyj6s7MXNdsKmL27HRy043YhTdbi0Ha/78NshfNOPN734rAfP9uHRXtzfi9U9uLETV1pxtRnXm3GzGWvNuNOE+824VI3dyRCxtmzyJL8jmcAGAH8qFqKTOWov/3QfZYlPsJWmstNDHXRtOSOMqAsRtdGYJlZ8KyuxjZXSzknv4Gb18AuHJOYxuX0qqGxOVTEfXLEYXLmgKJ/zc0wJzAcJBjL2kZJ2b4ppddPVEXWhPzAQYkW6E/Xl6KzCYBUO1ODgVkzWYboeh7ZipAYTWzHbgPkWLG7Dke041oZTO3FuNzH3r3ZjtQsre7CyEzd3EoHN5R34qBEnanGkhshrP+vCr/bjq1683ocXe/FkDx7swZ12rO7AjRZcb8TVelyrx40GrNbjTj1u1eCkGZlB7j7Ud2VxxAYAf3pcKL5khsLLL9Un2OyrstHUNrrGydSUMcKqmBG1LF0dI7qRGdvCStjBSmlnp+/lZPUI8gelJaMB9kll6YyqfF5dtRhUvRBYMetvnxKbx3j5A4ysbu/k3R4xrZsi69zfMqB0QmaFwgKjDVYHdpWhrxzDlRirxkQNRqsxWIHhKkzWYLYO841YasaRFhxtwcltOL/LxcA+3N6D1TbCpm/txI02XN2GC004XYNjVbjQiGd78KtufNmJV7vxfDce78b9nbjTittNWGnEcj2u1uJyDa7UYrkGKzW4VYmD6QgXuFMo7wQDGwD8h0NDopJoMookwSfQ9AMDoQ56aBldW8mIqGHq6pgGggF2/DZWUhsrbS8nq0uQ1y8pGg6wjCsdU8Hlc0GVC4QfKJv3d85ILeN80wFOVo9P0h5KzHYPXYO7tgYhFQhyQG6FnxnBZqRbUW1HpxNDZRgpx2A59pcSOlCGQ1WYqcH8VszXYakBRxpxqgXnduDmLmJGX2vD7W24vR0rO3BjB6634FIDPqjG8TKcr8WD7fiyndCrXXi+Cw934H4L7jRgtQE3a3G9GpercKmS0JVK3KjARSvaouHP8ngXSqIbAPxno+NB8fTmUfg6b0UeTW1lqO00tYMeWsoMK2dGVjOittL1DQxjEyO2mZG4g5nczk7rFGb1SgqH5ObRQPtkUNlccPl8UOWisnIxoHTOzz4pKhrmZfcxU/Z6x7d5Gpo2hdcS/YHgUshtkFggKYG2BPkWNNnR7UC/E/0O9NnRa8OgE+MVmK7CTBXmarC4FYfrcKyOCHhubMe9HbjbgjstRC672opbLbjVjCt1+LAMJ2x434k7dfh8B77YgVc78LQVD5twvw53t2K1Bjcrcb0SV8txuRyXSgldsePDIjhC3GjvQF9sA4A/N0ZkkhebzAnxkmfQgkp8VDbfUAdNU8oIq2BGVDEia+j6OkZ0PSumiRG3jZG0k526l5fVJc7v9y8eVtoOBZXOEn6gaklZtRhQMedvmxAXjfBy9jPTOr0TdpKimz0itrppqtxUpVDa4WeF1ILAEsSbYTNjpxX7zdhvQa8ZPSUYsGHMiakyzFRgrgILVYSO1OBsPW62EADca8LdZtxx6XYDbtTicgU+tuOMBR85CFt/2Yw3LcT1aQMe1WG9FneqsFKBm2VYLsU1B2H6l2z41IpPLTiUCoN4k+8vPRnYAODPj5GHazMxK5AiTfZRFvu6YiGmxskMK2dEVDIiq+m6WoahnhnTyIxrYRCZ8W5u5j5x7v6A4uFA+4SyYjaoeiGoZklRsxRYNkswUDzCz+1npu3zTdzlFd3iEVW3WVPppi5DkBMKO8GApBjBRcgpQksRukrQX4KeYnQXY8CKUQcmS4mVCzPlmK3AfAWWqvDRVtyqx4N6rDfgfhPuNxJT/ko1litw1YmLNpy14KyViO9f1ONNA17W4elWPKrGvQqslWLViZt2LFtxzYKrZly24LIZ5wqwLQpB7M3Er/9zm+kGAD//SJG9Sb5iqiSJHljMVNsYGjtDSzDADK9kRFbRdbVs/VZWdD09tomZsI2dvIuf0SHO7fMvHg6wHyIYqFkKqjkS9LY8apuUFB8U5PWzM7roSe3eMa2kqPrNYTVuIZUILkOgncgKpGbIi2AwwVqEHSZ0m9BTRFz7inHQikM2TDkw7cRcKebLsFSBsxW4VY31Ojysx3o9EeHcqcJqOW6WYtmJS3Z8bCZ0w4nn1XhdgxdVeFqBh6VYd+CODbetuGXGjWIsF+FaEa4U4VIhTmXCEeTG8/H4BQdCGx7gLx4sT6I0xA2ny/O4QWaWykIPsTM0pSxtGUNbTg+vYkTV0HS1NH2dr7GBEd/MSdrBS+0Q5fTJiocVtonA8rnA6sNKok22EFA6LbOOS4sOCHL7OBmdrKR2WkwrSd/orq1FqIsB5Y8MiIugKkRyAarzsbcAPfnoysP+QgyXYNyCSQumrZi2YcaGBRvOOLFchUe1eFiLB7W4V467pVhzYsWBGzZcMeO8CZ+YCEN/5sRn5XhRhidOPLJpfIJTAAAgAElEQVTivhl3S7BahFuFuFmI5UJcK8C1fFzJw2gsogXuGwD8/KT+PYh4tFYoXZ4nDCgUKArZSjNDRSwdpWuILQS0iApaJLFwiGaoo8c0MuJaWIlt3LS94pw+/5JhhWNCUT4XSCQDC8qy2QD7pJ95VGwaFOT0cNM72Um7fGK3k6Iat4TXuodWQlWOYCcUNvibIS2GtBBhecjNRUMe9uQSDPQWYLgI40WYKMFkCaZKMF2COStOOrBcjodVeFqFh2VYt+OeDWs2rLhm92tFuFSAi3mElT+x4JUdL614UoJHRVg34U4BbudjJQ+3snEjC8vZWM7Bx2loVEHo+4vdN7zhAX7KeHmRWME0eb4goFgsyxfK8jmKIlawlR7ytlNWyogoZ0RVMw1bGcZ6RmwjM76Vk9TGz+iQ5u8PKDkY4JhSVMwHVs0Hls8pHFN+1nFJ8bA4v1+Q3cNN28tIavc2biPrXAwQKUE5VE4obQiwQFriLi5wC8hFdA5MOWjIwa5s9OViOB/jhThUiAkTJk2YKsaMmehkXXXiURmeumb3B2bcK8GdYqyaiAl+uQCX83ApB7fy8NiEz4rx0oSnhXiUj/t5uJuLtRzczsRKGm6l4WYarqVi3oAkgfsvdZHcBgA/ZbyoJFYgLbBQoLSKAopEfrl8SQ5PlssOKGSrrMQugrAyRmQVS1/Diq5jxBAMsIlYqI2f0SnNH5CbRxXOSUX5bEDZbIBz2t867lc8IikcEuf1C7K6OekdzMRd3rHbSYYGj4itm7U1bqFVbqoyN6WDcAXyEjdpASR5kOfB4PIGNdloz8ZgLkZzMZaH8XwcysdUAaYLcNSET81Yt+KpGY+LXBN8Ie7lYy0fK/m4kYfrubiWSUzz69l4losXeXiWg0dZeJCJ9XTcTcPtZKwm4VYCbiTgajzalFDQNv8it8tsAPBTxotCYgX4BhUJQpyiYIswwCSQ5fIlmTxRBleWx1KWMEMddGIbTTXLUMuKrmUS5dFGZnwLO6VdmN3jZxoKsI8rnFOK0hmFY0puPSQzj0qLhqWFg6LcXl5WFyd1LzOJYICib/SM3Lo5rHZTaJWbutxd6YDS4hZQ5OZXCGEhJIUINCG6AHn5qMtFVw5Gs3EoBxM5mMzBVA6mcrGYhwsmPDTh+dsJPo+w9fs5uJuD1RysZGM5g5jdl5OwloynGXiZgefpeJKKhym4n4w7CViLx2ocVmKxGotFLXIFbhTyL7AtsAHATxkvMoku8w428bVlohCHMNgiCCwiGBBn8vjpbFEmS57PUFnp4RUMXQ1LV8PU1bD0Wxkx9cyEFk56hyh3v6xkRO5iINAxJbcd8reMyYpH/EwHJPn94rw+QeY+dupeRsIu39jtXoZmUlT9lvCtmzRVW9Rlm5U294ASBBQjoATyEsjMCLC4BVnc9cXILURTLvqycCgDkxmYysBkJiaysJCLj3MJo3+Zg+dZeJyOR+l4kI676bibitupuJmM6zG4ZsTtODxMwIskvEjE0zg8isW6EXeNuGvAWhRWo3AlAvsCIPL+BZaDNgD4CYPlQfakib2D8vjh1RJtpZjwAzZhYDHfP58vyeLx07iCNI5fDktZzNKUsojaaA1TX8M01DKNDazknfysbmnhoNwyqrBPBjqmAuwTcuu4zDzqVzwiNQ2KC/rFOb38DIIBZkK7b1wb1dhK1jV6RtRu0VR4Btu3BJrdFWa3QLOb0opgG4Id7krH5kD7plCbe4IZtkJsz0V/Jg6lYTod0y4Y5jNxPhPrmXiZjuepeJaCxynEHL+ejHuJrjk+BjcNWNZhRY/1GDyNxfNoPDPgsR4PdLgfibvhWHPpaDDi2e6/vChoA4CfAoAnyZvrrczm62olUbVSbaWIcAU2gdLMlxfw/HK4wgyuMJ0rTuf65XICS1gaJzuyknAF+lpmXDMvbY8of7+s+IDcPqH4EQB/y7if+aBf0QFJ4ZCkcNDlB7rYqR3M5D30hJ3eMduIcCi8xiPESQq0eCrM7oFWBNmhciCkzC2kzD20fJOqbHNw6RaNY1Osxc1UjKY89GRiPBUzyZhOwXwqPkjFWgpeJuFVAp4n4mkinsTjkREPDLgbjTU9ViJwIwy3IrAWifUoPI7A0zA81uKhBuuhuO/S1WBU8928yb+0xvAGAD8NAC8mVZnB1ddJDPXiyBphRJUwrFSotgkDS3gBJq5fHleSzRWlcfmpHEE6xz+PE2Rmap3MqAqWsZ6TvJOX2ys1Dcqsh+SOKTkBwITcNuFvGfMvGfErGpYWDUsKBoQ5fdzMLnZaJyt5Nz2uzTu6hRq5laQpJwdZCQCUFqjsUJcipJxYR6SphKbSTVO5ObjSM7DMQ+0kMCguREsWBlIxlYTZRCwk4cMkIs55GYvX0XhhxLMYPDXgsQ4PInEvHHe0uK3Figa3QnFLgzuhWA/BIxWhh8F4qMR6IG4r0MmHiPJLq4duAPDTAKAyKPIkdnS92NgkNtSL9LXiiCqhtlwQ4hCorHxlMV9eyJXlcaU5XFEGV5jGEaazpZmcgHyO2sqOruNmdEry+/3MY3LbJOEB7JP+BAmTAZYxf/OorOSgX9GwuHBQmNvLJxjoYCe1M+K2++oaKWFVXiEOqtKyJdDiFuwC4Afrr0JYDcJq3LQ1bpoq99DKLcHlW9Slm6LsblnFqM5FRwZGkjEXj1NxRLj/WIfXUXilw4soPI/Ak1DCyh+ocT8E99S4E4QVJVaCsKLAmj/uyHBHjjU5ViS4IcQRLkpobj6/rMOGNwD4KePlSaLSKP5xTGOdKKZFEt0oNtSLdbWiyGqBtkKgcfLVVl6Qma8s5ilMXHkeV5bDFWcQiYEglSNO56jMvOQ2cd5+aclBf+uE3HpIbp8IcE7LnTOEH7AdklnGZCWjUtOwJK9fkN3Nzehkp+xmxu+gG5q8Imp8Qkp9lBZSoHlTkNUVApUTbeMfAKj9UTWbtFWbNZWbVOWbgkvdI23umcWozEVnGkaTcCQWV3R4Fo43YXitxUstnqvxNBCPA/EwCA8UuK/AXRlh+qv+WJHilhA3hbghwXU+rjJw0QfDLITwPH5JPYENAH4aABQaRRbLMtaL41olMc2St37AUCeMrBGEVwo0ZfxQJy/ETpCgLOEqTDx5PkeWy5FmcwUpHHESR1/Fz+mRFI/4WcZllnG5bSKgdCawbFbhnA4g6kITMvO4rGhUmj8oyukRZHbyUvewE9pYxmbfqK2+mjLfIDNVWbIl0Ew0yFTOHxjQuhgIdwEQXusWVuMWVu0WVukeWrEpuNxDWeoRat+UXOJuK8COdIwm4JweD7T4QoUvg/FKiRcBeOaPp/544odHEjwQYF2Au0LcEeE2B6s03GLgBhM3fLAMnKeiUe0mEVNIJCIb+NnNdwOA/3kAyH5GhrFOHLdNGtcijWsWxzSKjY2i6DqBrpYfWS2IqBKEVQg1RGLAU5l5ymJuYBFPXsgTp3G44XR1LjujU1x4QFp80I/wA+MBzhll6Wygc1bhnJHbp/ytBAN+BQfEOX3CrH2C1D28hDa2sYlYdB1WSQuyUhVFWxQlboEWtyA7sVxCVUbssg+tJqSpdnmDamLLpaYamiq30MpNqgqPoAqPoDJPtcMjxuxuKsCODEzHYzkMnynxlQxvJPhMghd+eC7BUz4esQmtc3CPhbs+WKPiNgkrW3BrC2664xZwVAlzCoXFo/4ySqIbHuCnjRfZmywKp+trXQBsk8RtF8e2iGIIDETR9QJDndBQJ9TVCiNrhNpyIZEY2LjBFo6yhCtJY9MDfPz09MRt4vxBP9MBP9OQn3nU3zGjcBIAEAw4CAZk1gmZaUSau1+c1SVM7+Am7WLHNDMMdayIaobaRpWbPPxNmxQl7oFW90AbsaEsuAzBFVBVIKQSoVVEUPQDD1XQVGwOqfBQV3ioCFdACnSQlPYtEZZN6SY0ZWIuFvdV+EKALxl4zcZnXLxg4pkvnnrhsQ8eUrDujvvuuOeOu8CaO1bdsQrcoGMh2S0pjUHjEU+P+NkteAOA/9HxIlFI7EDfyAphbKv0LQPxrdKYH8IhibFRYmwQRzeIjPVifY04okKkLRMQQZGN75fM9hV5cRQ++nJ+Xr8sf0BW0C8tPihzTCuI6d/FgGNG4ZgJsEz5F41K8wbEWd3CjE5Bym5ufCs7uoEVVcNU27zlpi2yQnf/4k0Ky2aFZXOgbZPSQWwkUJYhuJxYRRdSQSj07bV8S2i5Z0i5R0iZp9pJVjkpwQ5yoJ2ksHuoLJvjTe7bMnBCj2c8fOWJL8h4RcZLL7wg4/lmPAEeb8IjNzwE1oF7cGHghtvANTEGKn1iMji+XOrPbsEbAPxPDxlN7KW18aKbxcZWcWyrOK5VHNcijm0mGPhR4phGSXS9WL9VFFktiqgUassE0jimF4vqzaGqMtmZXX7ZvZLsHnHhkJ9tUuFyAgrnXKBzRmGfCrBO+heNSVxpgCijk5+6R5CwnR/dyNHVsELtNHmhpyTf3a/Q3a/IXVa8OcC8KcDiFmiBwkosGQp6C4OTiI5ccg92bAl2blY7PdUOT5XDQ+XYQvTU7O5+NjeRDXIzkoswlIprKnxOxtfAF8BrN7wAngPPgKcgSHgEPPgRg7ckXEpBZx8/LJvvw6Z6bCF65D+7Kf912giBfvKQ+fC81CaeoV4U3SyKbRHHt4riW4SxLRIXDIRDiHWJ8AmNEn29SFcrDisVCMJpJG8y2YssDGPENQrTOkQZXaK8/VLzQaIkaptR2mcC7dMB1skA66S8hMiDxTl9oswuYdpeYUKbyNjE09Vy1cVMWaqPJJkqSSdLsj2luVv8CjbLTG6yIsiKIC+Gwkw8Y0JhRaAVgTYE2tyUVnelzT3ItjnItllJXDcFWYlestL1NAo/M7Gqwmh3qzK7zSXilh9eeRIMvAFeAS9BkPDMxcC/YOCG+8AaHe9t82oZD4gq4lNplA0A3hV5uApB/imsiCqeoVFkbBTHNItiCRKEsS0igoHtkrjtkvjt0tjtkthtUmOzRN8gUhfzmf7ExipPEsmXR1XnsZPaBOkdoqxucf6gf8lYgGUy0DoRaB4lOmLFI7LCA9L8QUnOfklmtzi9U5S0UxjTTACgzGRxFD6+AirD34sd5M0N9eJHUkVGqiieLErylKZtkmS5SfMgLYCfiUDC37V8KLDELbBkc4B5i8L8dj2FixMzsflYUQxZMcQ2t8DqzalNns2Vm+dTcZNHAPA18DnwmRuBwVtvQARFbzFwI0hYVbsdOy7bfiokJJ3jw6J6/GPmAxse4K85cV6ko2ucHN1Wvq5OaGgUGhuFMU3CmGZhzA8MiON2SOJ2SGN3SI2tEkODKCCV48P1Ih66STxthSyOoBtr+CntoowuSU6vX8EB/5LxgJKxgKID/oUD0vz9krx+Sd6AX26fLKtbmrFPlLJLGNfM1deyFWksutibRCXaEYToFG82xYdH9RVSfcUkmsyTofRka7ZwI7fwDZsF8ZuEKZvEae6STPjluEvz3GX5brJCN5kJ/ibIXfI3QVYIeSECrNA2kNP3MCr30rrKPI9FYZVJOIG33uAzN7xw+yMG3AgM7pNxsc1n+oqmeiZYl8f3Zf1D5gMbAPz0UaOQ2ApvVTE7ooobUc2L2irQ1fMNDfzoRr6RwEAU2ypyMSAmGGiVRJQLBRo6yYt4LYlM2uJBoou81NmcxO2SjE5Z5j6/nD6/gmF5IWH9/vn7/XJ7JDndkpw+ac4PAIiTCQA4ulp2QBKTLvIm+ZDJNDLxhmRCW8ikLZ4kwr14kshUAgwvFsWbS/YRkn2lJJq/J0PpwdJ4ciI8ePotgjgPUfIWcbqbJIvYXSDNh59LsnwE29zidvgUjkrKJkUNvfQe5+aTOtzg4JkbwcDnwCs3PHcjsoLHP2KwFocP3pMffKRvPaI2mARMYr3oP9jBwxsA/HVL4iiyFFoocbQwJ6KaG1HLjazj6up5+ga+oZFwBS4GRLGtEmODSJHK8uH9q9mR4ksWamjRtcKUPdL0TmlmlzS71y93P6H8/X45rlk/Y584q9svq1ua3ilKaOPHEiEQx89I92ZTyd4EAGQfMtmbTKJSSFSKJ/nH043+pPFRifaFF5PkzSH7CEm+fiS6wpMZupmj28SPdxckQ5gBURaBgaZ8c+ZeZsW0pPFkYN2CrKGX2VXruZDm9mkA7lKIQOj129zADc/c8QRuD31xuZ85/5nx0HrUjhPqtGoJx8/7Hysf2ADgp48akQiTOaHeyiJGqJMdVs7VVnHCa9gRtZzIOm5UvSC6UWgkwiGBsUkYbhdwlTQS9V8dv+VBIpyA1sxNbBOndUjSOyUZXeKsbkk2MetLs7ul6XtFqbtFaXslGZ3StD3ixB2C2BaefitPrKNRGRQCAJ9/DQCFTCIT7oVE+dM/8B9uPFzyJJPINLIPl0zzI9GDtjAj3XnxbsI0+BcismZzfi+r6UjA7vOqpnPBVYdltSPsPS2eh/LdzyqwQiaioJcuDD5zI5BYcVCOP9fNvzJOPojcfTY0uVzElHhv/sfJBzYA+KsGjkyisigcjbfcyA/JloTa2ZpKmraKGV7DiajlRdXx9A08fRMvqpovi2F6sSj/9mnjRCZN9YtlGhsEyXtEKXuF6Z2izH3ijG5xZg+R+KbtESXtJJS8S5zUJkncJoxrFugq+AINjez7FgDiSvIirJ9EIbtEWD8BwJ+agH/A44//ifyjvIjfhe5PYuvdecnwy0NUDSm3i92wKOv7VN17Sb3rXHDjyYCts5KmHkZHLWkqw/09Da5JcY+OR2TcKPY4vh5+5E3M4hPd1IOofee1edtkfho61fcf48i9DQD+yoHzIBMPD+UJeMpIf1UOT1XmHVrhq6lgaStZ4dWsSMIb8ELMHJbsT4cEHmQyS+GjtXLidvASdwmSd4tS94pTO8RpnaK0TnFKuyipTZSwXRS/TRjfKkxo5cc1CcIsXJa/NzHZe5P/xfp/AOAH6//THsAFwH/2u5BIZB8yLcCToXdjx8M/f5O+lpLXxW48TDAwfCu070rw3vNBLe8Fbj0ia5gR7zrIG+rwXagjvVfuceoA6/CDqOOvjSdeGZae6abXo7ovhtn7FAFRTLLPz2/fGwD89w4fny/QhIZoYpXBhZxgh4+63FddQQ+tZGirWJoylthIp9CIhyz/ide6VlZLYuj6rey47dz4nQQGie3CxN3CpHZxQpsgfpsgoVUY2yKMayamf2M9X5nO8eF4eVJ+DH5+mP7/IgD+PAyexMEIdPUWRgw4iVAUbIqu987qYFVNSbo/UR28FTpyK6T/qrrromrPedXei+ru65rBm5qxFe3Mvchjzw2nXhvPvDGeeBV9+Jlh5pF+ZDWycjgwNJnjyyZqXz+7lf8n2vAA/6XhE0nERp0hJjpaG68IzuEqLT5Ku3ewwyfYSvdLpfmK/7PKoAeVRJNQVEV04uCZbZzYHfy4Nn7cDn7sdn5MCy+mkRvXzItt4sc2CY2N/IhSrlBLI3uTPShEHfY/AuC/lIBSSF5CT1bUZna8GzcJaqtn/DZa+m6m/aCw81zQwRXt6IrmwHLo/svqnk9Vg8vaifsRSy8NJz+POfMm5vSbmDNvjKffRB//zLD0TD//xHDgZmT9bHBEJteb+XfdJtsA4L8yfOQAuTw1JTkzLT0uNiYsOiQgWigy+opivfhh3j5CCtnrz8TBJB8SV+OtMtN1jSxDK8u4jR3TyjY2c6IbuIZ6bnQDN6aRZ2wU6Ov4AUksX56XJ4VE8iLayWSvPwHAf93OKL4kuj+Zqd/EToA4wz2sjJS43Te9nVE8wGs5FjB4NeTgimb4hmboWuj+S6ruT4IHL4fMrUedfmN873PjGULRJ98Yjr7UH36mn30UNbIS2bQQHGMWcP18/m4Z2ADgrx87MtUrVBNamJ9XVFCYmZZh1BukfhJvpheVSaHSyH/Jn9yDRPSV+eHewRZaeC1d18DUNTJ0DfSoWtexfHUEBvo6fngplxfsS/Iie1JJZCr5rf5NAvC3MQgyUTBlqD1Z8eAkQ5LlFl5JStlJT91Fz9zLqp3167moGrutHb8dNnwjZN/HQc2HZbtOKw6thB1+pjv1efSZL4ynXkcffakn9EK/8FQ3diei7aQ63iFiCLy2uKpPP7vFbwDgsjxP4hE3Hp5Ete7tzdv7nyQunx8fF2ezlFhKivJzsmOijQKukORJ8fBwlRr/sjchGke+ZKacIo5gaDNleocsspqjrfLVVvmE19Aja+kaG1MaS/diuQ5soZD/FQDE9P+Xhv5/+c9DZVPYkZs5SWAnQ5LjpqslZ3Yw0vcyUnbSTf2cbScC9l9Wj65qh2+Etr+vaFqSbT8u7z4fPLainb4Xfmgl7OBNzdS98KPP9SdeRR95YZh5pNt7NjSmWOBF/3usC72jHoBEJvvS6QKhUCKVCoRCBpNJplB+0stpdHq4VpuXk223WmwWc2FebrTewOXyyH/oSf3FIp4/TiUx2PRIXXhaQVySNTzK7K8tFqgLuAHJTIHGx4dPIYIfEpmw+LcTP/XfJQB/q8mVTPKkkmkSEid6EzcV/DTIC93jmr1zetmZHazkNkbuPo5zVNS45L/ztGLvh8qOj4L2nA3c93HQ/kshg1dCBz5V914MHryqnroTvvhEt/REP7euG7oaltcsZQi9/w730LxjAJDJRNRBpfrJZEaDITsrMy83NyszMyE+PkyrVQYF+QcEiCUSNofjS6dTvb3fUuHxRyKOCvD2FovFOp2uMD/PbrWUOeyldltRYX5iQpzMz4/q5fWH/45Gp4vFYolEQqPT/+wPxuPxUhISzSZTYUFeUkpsZHSoUi3n8Dhk6o91pB8m+3/DwN8YAJLrfUhUMl1O4SS4c9PASYOswD26jmrazy8a4GXsZSTvoifvoKXtotmG+TtPK4aWQ4ZvakZuacdXtZO3tROr2kMrmrGbmkO3tGM3w/o+DnV2+gdHMyk+Gx7gZ7V+OoMh8fNTKJXqkJCE+Pii/HyH3Wa32UqKinJzctJSUlJTUtJSU5KTEmNjYsIjIoKDg2QymUgkFgqFfIGALxAIRCKp1C9ErU5KTDAVFjjttjKno7KstLLMabdZCgvy4mJj5HI5k8VislkikVAbqomLiYmNMQYoFF4+Pv+x9RMuRaFQ5OVm2y3mEpMpPSnFEB6lDlRJBGIfX5+3E+fbRu8P+lMF0L9hIORJIlEYFGYIiZvkzssAPx3+Be4Jrb7mYYFtVFiwn5PZwUjdRc/Yw7CNCHafVQ5dDx1fC5u6F77wMGrpkW7pceTCg4jZu+GTq2GDn2oq+gNCkjhUHwoxg/ydpQG/fA/gQSIxWKyw8HCrzdbS0rJ161anw2EqLCwqKLCWlBSbTBlp6fGxcakpKcWmQrvV7LBa7FaLubiosCA/NzszKyM9MyPDdU3PzsrIy80xmQqtFrPdZnXarU67zUFcrWVOe3mp02m3FeTlJicmJickZGdmFBUWFBFvkp0QFy/1k1Ko1H9ZtPNHeYgHicxis6P1uhKTyW6zlBSZ0lKSYwyGCK0mVKWWSiTevv8qeCAM/Udbd339v2fdAZk4LpYZTOInbRJkgJ8BedGWuBaaY1xcNetXNimxHRSa+nl5vWzriLD5mHzgimp8VTt9P2L+YdThJ/rjzw3HnhuOPjMsPYocuxW27YjKWCKg87z+ilzrv1W/fAB8aDS9Xl9VWdnT3T3Q37+ttaWs1Jmbm5OTnVVUWJCXmxMfG2vQGzLS06zm4rcBvc1itlstDpul1G4tddjKHPYyh91pt9mtFktJUbEp31SQbyrIMxXkF+Tn5WZnZWdlmvLzLMVFdqvZZjZbioqtJcVvQSo2FeRkZ2ekpYeHh7PY7LfZ9hYPwvTJFIq3jw+TxRSLhFqtJiUpsbgw32GzlpgKU5KSYqOj9VFRuohIrTpEIhH50H08KeS3K3lc8iRRyV6+Xt50Hy8fqgfpr0niPf+cPEgkKpPMVHnykzYLMyHIgrx4c+ouZtkhcc2irGpWQmAwKi7o55mHBU1HZT2fBI2taKbvRsw90B15EnXshf7ES+Px54bFx7qJ+1Eth1XRRTwa32vLfxOxf5V+4QBQvKiBSmVlRUVTY0NZWanZbM7Py8lIT09OTs7MzMzPyc5MT8tITS0sICzPYbNaS4ptVsL6XQBYnTarw2qxmouJadnlENJTU1OSEpPi45Pi4xLj4xLi4uJijEaDIdpgiI+NSUlKSk9Nzc3KNBeZiJfbbTZzCRHU5+YkJycHBwczGEwWi8UXCKRSqTJIqdGERht0SYnxaSnJyYkJpvzcUoedACAhId5ojDNGxxqjY6MNkeFhikA5l8f1pft6+3p70bxobLrUT6JSKUM16iCVgsvneNN8PL1IW1xo/G3HkEqj0OVkjsGDn+7Oz0KAeVN8q7dtTLR1yX/rorxq1t9+SFR0QFA0yK+Yku75UDmyrJm+F7HwMPLwU92xF/rjL6OPPjcsPNaP3YnadkIdXyrkKXwJD/b30SH+JQOwxcODxWYnJCaWl5dnZKSFR4RrtNqoqMjo6OjExMTMjIzsrMzCgryGurqdbW11tbWWkuKC3FxzscnmMvqSoiJXGJSTlZGelpqSlJAQFxNj1OsNOr0+MkoXFamLitJHRkZFRISHhemidAnxcZnp6TlZWYV5uXarucxhL3c6yp2OUofNaikpLMhPTU7WRUVF63WJcbGpSYkZ6alZGenZGWlpqclxsTHxsTElpsJyp6MoPz8lMSEhNuatCMD0OkOkLjxUGxQU6B/gFxAk04SpE2PjM1PScjIys9LTY2OM2rBQuULG4XGo3l5/23K7h6tI5cWjsLVkbuwWfpq7X757dCOl5AC/Zl5Wu+BfOStzTkhKDggKB/jOcdH2kwEDV9RTd8LmH0YsPo468kx/5Lnh8FP91P2owZsRLSdUmS1+QhWN8na13M+dEvxiASC5ABBLJBkZGQmJiX5+fv6SLNQAAAlFSURBVAwWi8FiSaXS8LCwlOTk1JSU3Jyc2prqjo69DfUNJlNhenpqSnJyfh7BgKkgLy87KzM9PSU5OSE+Pi4mJlqvi3TZulajUatUQUHBSqUyUKEICAiIiIiwWCxbt25tamis37rVaScs/q0DcdqsZXabw2Y1FxcVFxQU5uXm5WRlZaQR75sUnxAfGx9jjInW66MiUxITSu22MoctPycrJTE+Ic5l/Uaj0aA36KOMBoNRb4iO1Bkj9fHRsalJydmZGfm5OUX5eYV5uSWmIpvZWmwqTkpJCgiS+zB8txA7U/7GQ0rxIfsKqWwNhW3wFKZuCiujFvRyq2b9th72r1mQlU9LrUR+zC0a5NfOyfo+VU3d084/jFx6EnX4mf7IM/38Y/2he1EDN8J3faTJ2Snzi6JTfEhbfm47+cUC8FYcDicwMJAnEFC8vEhkMolMpnp7iyUSXVRUclKSxWKpKC8vKChISEyMIT6M8fFx6WmpWenpaSkpyYkJ8TEx0TrC7rUaTZAy0F8mEwmFPB6PyWT60mg+vr4sDickNKS4uLizs7N9166ammqHzZ6bm1OQl+fKB0qKC/ILcrOzMtLSUpJTkpISE+LiYo16nS4iPEwTGhKiVoWqVGEaTawxurggv7q8zGYpzkxPTYqPjzNGGw06wsOEhYdrteFhYeFabYQmNEKr1UVExkQbkhMTMtNTc1xpek52VmFBQXFRsaXYUpBbEKYN+/OF179KJAqZ5EMiM0jeAgoriOKf5B1bw7EOiSsnpNVzfpVzUseEuGhIUNDHK58U7fpAMXIjdOZ++PyjyMWnusUnUTMPIsfWwvqXtW1nQ6wH5JpMNk34L1Xjn0W/aADIROeIQiE2TP2hivK2DyAUChITExwOe3ZOTnhERGRkZIzRGEOULGMS4mLjYmNjog36qChNaKhCoRCJRCwWy8vbm/RjDedt9Ybq7R0UHGyz2Rrq650OR15ubmpyakJCYlx8fFZGhtlUWJibm56SHB8XG23Q6aIiI11Wr1IFBcjlUolELBKJRSI/qTQ0JCQvO6umoryi1GEqyE1NSiReQGCnDQsN0YQQkKhVKnVwsDpYqQoOUqtUmlB1ZEQ4kXjEGGNdP7kxOkYfaYiJjs3KyMpIzghSKCle/w2bdMmEayWycNeKbpIXiS72DkpkxpdzTV1ix6i0bFJqHxMW9fNyOjn5PdzKCb/tRwJ7zqnHb2mm74XNPIiYuh8+vqYduBHWdU1TM69UpbBJlJ+zP/CLBuA/Fp3JjIuLKy4uNhqNUj8/P5ksPDzcQMT3Or3LVrUaTaBCwePxfGg0qpcXmUJ0Yv/4HUhkskAoTEtNrayoMBUWxhImaIyJjol2fSTGx6clJSXFxxujDVERhCmHhKgDAxUSqZTH5/P4PCIJVgZqtZpovT4jLa3MYasqc5aYCtNTU4wGfWSYVhOiClEFq4ODgpWBgQEBcplMKpFIRCKJRBIglwcFBqmDVVq1mnAL2rAwjVYRqOCL+Hwx31/hH6oKlcvl3jTvv+1SZNIfNyJ+XHtHopK9mRSmxEus9Q1KYkaaOLGlnIRKTnQZJ9LMCs1iquIYuhxuTp24djhg7ylV78chfZ+E7PsotO1MiKUvQK5j/qGk+7PoXQTAg0RisdmxcXEZ6elyuZxMoVC8vDhcrkKhUKvVKrU6IDBQKBT6+viQyOT/aJkQxcsrJDS0pKQkv6AgTKv1l8v95fLAIKVKpQoJUYeHaSPCwiLCtWEaTYharVAoeHy+L41GplJ9aLSQkJD0jPT8vLyiwsLyUkd1JTH3lxQVpCQm6HSRoaEhquAgRYDcTyoRCAQcDodGp3l7e1O9vChUKoVKpdFoAoHAXy5TKhTBAcogeaBYJPZl+L61SzKV7O3r40P3pXj9hMUdnj8dgB9aWhSyB4m82dXTIHmRvegUXzaVIfCiC7182FSKL9mD7EnyIvkyKQJ/nyAdIzyFo///2zuXniaiKABv6Jw771eftEVai7SAkSKElkQsBSQaIRWEEh/RFZuy4P+vzHR4VIUFiozQLzkhrMrkm+/03jvnnOFdrrWbX9zMluY9K7jji7xtjGMCRC/n8f3Zen22Xnd9P/Zb6brjulERN512PS8qWp2Xma4P07abzWan06k3GkEY2o5jOY7reX4QZLKZJ1NTM7Xa7Eyt9rRaKpX8IIg/UBl6pVrp949OB4N+/2hvb/fbl0/fv34+6O11O+svm4vzc/WZWrU4ORmGoeM4hmVFrRD6VcdefLWmbfqhn8lm8/l8JpMxbfuqNBbtT/7Vf7NTv+TAeVk6KsxpehQppVIplUoNax2XTYGiUppMTERXrtu65RlOaJiOPixfJGzCGDfDeZ7tur+XZkd/uTGGh+lqrTZdqdiue6nmuaC6bjtOEATpdOj50Q4q/iuaiOO67Vb77OzsdDDY2dnZ3t46Pvp4fHiw82ZzZXnpWXTeKAZBaNqWNlx8brqAeLA9OuFYZjQUf5/ojGEdOt4CxWP4Fz+jMEbmj+O4bij5srkjcRPGNAH+PnTDcH3fGGl9uyZGDt9xAgRh2O12T05Oer3e62G7xOH+h733b9farbl6PZfLWY49mpP/aehKS3TjfodBAvw5u1t1HyhdT2lavlDY2to82N/f6KxvDMvGW92NV2vtFwsLpWLRMB/JS/fl4QQJcH+sU5pWmJxstVqrq6vPF+ZXlpaWl5pRWa3RmCqXXc97AN/96rEFCXB/rDWRMJ2uVKuFQnTGLZeL09PRM9hSsej8fBohhAR4lBIYpmldzNnE3aCO646W2Ai5XwisAAk7x6ZfEuVPAvClq8Z52SEBkr8HhJAASAABVgAkgIBiC4QEEFCcAZAAAopDMBJAQPEUCAkgoHgMigQQUNQBkAACikIYEkBAUQlGAggoWiGQAAKKXiAkgICiGQ4JIKDoBkUCCCjaoZEAAop5ACSAgGIgBgkgoJgIQwIIKEYikQACiplgJIAAQ/FIoMY9DXgrRPL3gBASAAkgIKwASAABYQuEBBAQzgBIAAHhEIwEEBCeAiEBBITHoEgAAaEOgAQQEAphSAABoRKMBBAQWiGQAAJCLxASQEBohkMCCAjdoEgAAaEdGgkgIMwDIAEEhIEYJICAMBGGBBAQRiKRAALCTDASCOPIDMUjgYx3GvBWiOTvASHJQfgBd3SmfOFyFx0AAAAASUVORK5CYII=","mimeType":"image/png"}},{"text":"describe this image in detail"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 7061 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:00 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=10131 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "This image features a detailed digital illustration of a colorful parrot, depicted in the distinct 3D rendered style of the standard Apple parrot emoji (🦜), set against a solid black background.\n\nHere are the specific details of the image:\n\n* **Pose & Orientation:** The parrot is shown in full body, standing in profile and facing toward the left.\n* **Head and Face:**\n * It has a curved, hook-shaped beak rendered in dark charcoal gray.\n * Directly above the base of the beak is a small, vibrant patch of reddish-orange feathers on its forehead.\n * The face, cheeks, and crown are a bright sunny yellow that blends smoothly into green down the back of the head and nape.\n * Its eye is round, black, and glossy, with a tiny white reflection dot giving it a lively expression.\n* **Body and Wings:**\n * The bird's chest, neck, and underbelly are a bright, vivid lime green.\n * The folded wing features a striking gradient of colors: starting with lime green at the shoulder, transitioning to bright golden-yellow in the middle, and ending in fiery orange and red at the primary feather tips.\n* **Tail and Feet:**\n * A short set of bright green tail feathers extends just beneath the tips of the folded wings.\n * Its legs emerge from green-feathered thighs into dark slate-gray, textured feet with curved claws, resting flat as if perched on an unseen surface.\n* **Lighting and Style:** The artwork utilizes smooth gradients, subtle highlights, and soft shading to give the bird a sleek, rounded, three-dimensional appearance with high contrast against the dark backdrop.", + "thoughtSignature": "EtwbCtkbAWkUfRP86C5UIJx/RtSYEJ8r46hlmdfIJFhWw+o9/tNybxDuHtcYtsDp7cOCJjd3Rvaltl77X0SqhCQOI9rWkQaT/3W+OwVVtbjTjn6YKodqEUXWwkvsoKqwyoMXwu3ArVOIdV+/xRS/kvuHgbu8VfauTF4uZEzF7Dw0RnT6z2WW+0RXujguJxuTSuNkJAZ6jfYToVEZgEmwqgWoyZsL1ridO6PZtfPjThVTEQw0anjXTDWgK3miDWBCGJNO/PZgg4/hq7FpFTQ1BRpylTV6a/TP5F15DhFNA14gQm6+ULR5VkGk48l25OO59dnipAALp5sGePNQmSUVb33fZNbpgYWcBYdP2k7PPi6tIAJJ1mDhm22dAmR7LkI0nfI0fe6oxPoZEGklZMducEtqIY22htlgVfBpwrLuVU9r3dwOkE3yhCE5Mc0mor9a1Ro7VGg3Jm7tx/oXFd73lGM1plFqpTblcJHLlJFzgvee17qmkZ7IBoCyXqWHxCdmG52yjo1PbakHM1jHd2wkRgjaa5nZBg910otkMBmfRwpEhe/tVMM7EnZf5kgIcEfMN5eObGX1l8VKYf6d/NzTWT6/xeAfUfKNBMNsgoxB8RysU0Zfa57SZnPfAEX3D/POKMHWaUAUczJxUGAaMoNbGADKOkwJoqaX+rg5Il7w0HYHgk2sJuBh0fNZ2rAWh6rA2wfFj9gdZHKPI4AZLw6EMflELcQqfTa8tk9jORHuYZ94NwaVbML9TCwru4qw8R1eeUqCy97mmJ0KaEd15/P4xM6Awa7EyZMcHy1g+1m6ORqP80K847lwmnFI/pJL0xxAe8tsXr9js9ns9u1fUE+JtO2oSxvX1yROvm85PPDAccE6zUxXAFBBPnmU35Hkiexp3+Sy6F2e2p1t7u+6BG+i8x4Q6HoeNrTHChHLcP/qLYJnyOL0NDDbLRaz4lWSQXhklCLkt0DQPI8xMwng/VTAz3OMY1Y8p4V4B2kRsy57Z9E/nHlvLff6all8UQ7bL5g7tl3T6Uv/xgiJ4shlvvgBJCZXgDU5Pmp7T6YlD5iDPJeTjuKM9iYPhKX8r/7S8hhb4SKVwqM/Ay5p0otewg2GsEcZUaqYunB3Lp3xuJD1GlUOI1siw9KdGR+vWHaLO5DQkWZz2pF98oJBL5/grPnnre6fWVpPo0aW1krGCZ0PyKhBOt/O7bwvVn0MQFzdEaJbWguWofsCER7PcZDP0ybBNmFJw+AWeukcZ/n9vBxghuHFzWyb+nYNs74baa/djWbPJ6ndxhpCdA7kCJz9zNzugUNxpUdBtO19rBiJqfy+rdPZNAHpYzpQLRRU2R7Pd92ZLiMAu/WxveeME1AY1CJkI5EeQS3ickQxi11jVZMQxpMMOKsxNdKb2O/ftIgPon3fqx+UnBiN0IcQYn/kjmPHlWneQXdofwxGGug+EP2yZbzBvXzOR1ymXTN15x3W2D0ObyM7oz8PjtjTY/UqDuA4S82eTRTAReh+oJPR8Tz+a1nLHaI9AeqtWFP1NZqEw5+qI+q+Tt9GdEsMau/quMIZrT24H3Xy8QTx7Zv6MmDfNzJZZrbSLTNeOtIqhGpOm9L862ffrEiNJZDYFswP39utY88IziysNkkCjounHX2+VSfDX+/wuuLiklO2yLbXgTud8hzG1JihXqYVC3VxugO8aqdmSCwno0MWVRS0njAnz4fLxHEVSrfXeZIOVm5yphb0KyMElS4q60jwKNZwABq0xq+FPp07OpdRGnYrYobmSbQiUltojdiuY2wnQ2I3xdpk15J2E7Atc5Oa+R0RpTXxVBJE+gm+R6Ue8vhXZ131tbpb/+hCaGJXT++oa5QGRL4hzcL28MR9m0s+pXw6EwqZ2jIJwaS6BqbhZUh6RbAc0k71R14N58Mw39RDQDrhkPYY2ZZMZ0F34gJu8N4ODxzTSi1MQIwYl9k8tgZG1O3HjJml7V/ZozeHniRfuJC9Ci2+4yJRaQKCwJwqfeE9AMK6t5OgZPlPKjQJ+3enGP6N76FzIhQ8e2HtBwKkG9aEuC2dEcscw9HwiAtlyAlW+3Fd0tidpND35ljGfS6bJTlbnYOlaHeZg548HzHUiZk+/BFimpNOBCuw3KE4mONoX0P40m+8Y6SBdTH9O2HA4rIN9DW0W5E72QBCOu0RCDeJxg8ZQHj49NNpAVzVFkafcQpSUDcC2P9A8LdmQeaqD6K9Oh0h3CHZeXshZc3zzUFGa6BaT+Suqh5vTdVaQsNaK87YiyvP+TEZvPSWS3EWTxl6pLgG4ZhqU+UX4dow+Yj2cNWydv6AmQCfEw293ZPlxOV7ysJTEAKxe6gklYOMfQjf3gJOaKFTPtLXOoBSL+4e+r6+iklAnOvTjnmv+Bp8yxnpi7LkWvvSoudquDAf1rbR0pkir724k5jOzra0PpB9t7Rn9qVwz9zIIsgrUh/OEqu3Ap+W1WYgv/6P6FdqTsd/WV4xyHpS9QQEmE/RP4S/Tn4OkFpDunBsymQ/VmJH68R1KZwNrlqoGybfRcDMaUGkvwLVnK85o1KDgyEOxoybWlW+tHEr/MaLhPsNtTWXC3+ADjXqoBTlygKLWPplx2+e6bk0/FQJCoR+OmIjU8VX4KKcGYDg6/U5np5MhydaVAb4nTHBYu4Vj1rLx+U9t72hWIuQb0YyPQiNizjBfsOBe4Ab5YeYjt9HAacfdJFglTC0njplTLUksx0uyMuHnUmADVPDg7mr/ufo/ofGj//XjsTRh24g0xCJFbYjRBH+s1tIu4VWIOAdWQcz2h8PW9JS8CFqQEdU4eh3V3WlCjLJeU46qaRpObjZZ+mX3HCGljACIvtsddxY6idOQCNXKBLSrNklyLZF5cb747G8+PHslN/49e2yZG42KPMKi1w+jdUddTJhwuKkGSGk+qXIazW9vx3jGmllXV7HW9JasJJ6lzv7RgKyLenAAUTLOhOwGUql8q1xJ6F41tH5JsiNmKc7mamZ/6YqZLj/hBR4yiDDQVKhkbkVs6ULJNOJOr/XEDH/dYfmJbYNyQrOlt4CIQMOh9la1+y1Gui1KzIEwi8TlBRiMK8KgHrBdgUexvda/Gy09urLRpOVu1K9N8SyYhdjSH6qKUOA+0wv+CSYApk6bqybFnkCzL2x1g63zaHRywBYAqJbVwylrYiPRJAHlAE4J3oLD+Gr5CjRMHIufzwRbQ7m2jpFnK8DgapFbmGz9fuzN8NJP/wv4SE9d8HTZHdv7zq3ev/qLJeN2w9yy5jair18JMFJs5brkV+GZFShde4JBrpGaGmmDCrFK299x4HwEUSny+dgO5JCauUxFEEdLHj0O0Jh6QOECxpJCfuAzEVNtgbVoCawtYC6UiTLrOHbK7zs0pneZBQNEvOODwnfsbGsGguKYEokPQEiY+rVqOFiMHAHkaoNkOmQEj9jD/ItXZgge7Un+FR5iyPyDFUZVnV34QIpk5JT3nQKHwBuCQ6s0GpjevfaxUs2LN3n9zsDq90FS2O/UZL7SSFXwCSHdoxK7rjoOPmtbSKXv6hQ0FELxK2Vm1XzxI34IwdKfrkT43jVm8Gx3G5mA03Rr7G0+CLVXxT1jh0Pc+7x825X1O8rasqknlJrXmCN1VzxTuzU5ognhGIqnwXwvT0GSq/7m/8dMKfn4CZtPIJu0V90/LpxL5bjUl4Pi6DLtWHTG/ivkXRE6GjcC6wHb/sFmWj7zRZ15ANXrudXXiya3HSbe0Lvg87fwz/2bStY/TDegvyjQ6jxsdcjNKlcCjdYie7UX1VNLCYMvHZXTRJ/nbyWZ26qid+g5X4e5KvZhic30QKHd7WzZlTWRlhGjiUL9Ca+BaJ+F8clbs1LTiXMk3MNvQ5JXAXDdHuTrVyG7XZyHtEkPJg7nSp+TSs3pRS2v8A0meFcFbsapDT9VKwxKeIDV9wo/AMkKptexiQFOfMVwkunxux5nsHgusayactpbS+mAcdIbj5P66Z2UHLc7jzDPscac2WdmcvY81DoYPmgRj7SG2vB3pJWgYcdxVmQa1JPGYMI7E6L2KD3KnJq6o8vdr/sSFIwb3gYG+FUiz6mg9sA3j7QsO2iLK5vnyJJm+smw6F6bW3Rgn2EeUNdTHyw1Cn8gFyTE7rRS8tzz+CS7EVZCYOuv1r0eay8/sppYpVH2QCvKoMdWD3l8HDeaQofV9d76M8dC16v88SLKvk43RrrkIv3QJzJpaeSeH1v6CmE+t5i9S6i6ehhDDqxUZMKznu4PSFqn6s6o746FGpT+G5o8XersIgSHfA1FIevl6tEEFoyK/RvnCTpAsUF9ocdw4+mtTbw8FpmRbxgtaBCjdw549rcIT5Gjoh3AM8aNeLaRzt6hKryHvo1S3YrWEo4rxCe/U8BXmu368Ro4IsypZUxqubMNrvWtR+fVKnqWsW2rZtp+obOy5XxmZntCxE18GnFIHzcYg7p8dcjyuASsxabqyV0nNSCEYmhPE5nZzY/2uS8DsILjp5wqyWvOOSojrKrpvOO8FNch0RikjmLtyQiBeFpn02wrgIq0QugTggzPE5AlLcRwDJTjBi/DkBPBiZEh1CGNtghIDQQ8xGziYAOUHs2O0FZ7NahENjB9xjIJvcHv7JECAAbMq1UoTsBfkajzQef0MgznfzgfNH2fMEiJoHrXQjTlAMRx7xPPzovLrRriMp2c5+3E7Cc+QOdndC/J/LhzeoUVoTWbmXLKNTT89Wuo0hW9y45MqBj4ux50lw=" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 1095, + "candidatesTokenCount": 364, + "totalTokenCount": 2324, + "promptTokensDetails": [ + { + "modality": "IMAGE", + "tokenCount": 1089 + }, + { + "modality": "TEXT", + "tokenCount": 6 + } + ], + "thoughtsTokenCount": 865, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "9rOzav-TOq6WvdIPhJrUwQo" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai#01.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai#01.httprr new file mode 100644 index 000000000..5921287f7 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai#01.httprr @@ -0,0 +1,75 @@ +httprr trace v1 +831 3508 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 511 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"I'm a pomeranian"},{"text":"What kind of mammal am I?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_MEDIUM_AND_ABOVE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_MEDIUM_AND_ABOVE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_MEDIUM_AND_ABOVE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_MEDIUM_AND_ABOVE"}]}HTTP/2.0 200 OK +Content-Length: 3095 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:31 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=2477 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "As a Pomeranian, you are a **domestic dog** (*Canis lupus familiaris*). \n\nHere is how you fit into the mammal family tree:\n\n* **Specific breed type:** You are a **toy dog** belonging to the **Spitz** family (known for thick fur, pointed ears, and curled tails).\n* **Family:** You belong to the **Canidae** family, making you a **canid** (related to wolves, foxes, and jackals).\n* **Order:** You are in the order **Carnivora**.\n* **Subclass:** You are a **placental mammal** (Eutherian), meaning your young develop inside the mother before birth and drink milk after they are born.", + "thoughtSignature": "EqAICp0IAWkUfRMfOVk0uFa7+TG7uLL34mKeZFbqrN7B0705Weoc2eiOA4DCb8s1SNT833DMz/UnWk3AhnxrgjL7kEJ9ZkC7L6mGo4d6b5nWO6pB4Cc9nphYXxYXMEOFp/c4t1q72aHS/v5D2WYPi025OCwvL0P0ECAUjDZrhj9ZZT9l9xnqUbkp5i7J6zr3eD+XTeFNsQwtLQWk5N1PeCsXMDR0Uvm177T+HcvznxxRkxdnUCq00/8N8oC4hA8jzKS8Y+LcHvFmK3NWnO6/YWLEtK8J8rqBJwTtIp+O9ihPdjQ1tmm2f8apjcsOAE3EBlK/b5YNy9CvscHbSngyo4aJ8mEGgPJUm3IqGhZ7IWqonXRX0ucIWnG6zKDBYxu1nh2aUC+Wk87/u/RsyNseaHwLI4wTe766NldC/7vpf8eTRsfue3nholV3Mx2VFxrckTYuWunFKkMHyVGYCzbfkeiY9N1lbFiIDm0EjIeUoL2psArRAnsZNqUHIw//nErNf+b/B9Ly/jvpHavpgexxnR4yAY0W5+knlDrp/5DbCB6malC9357RyGK+tax1um8Na1zttXuFOxG7MthzUolI4nRqb5BcAe7QvD4ytuqnjRf5Lpp4DG6Lsl9g+BZXTpBMbnwU7XNwMk/pg3Q95cpA2QOtMDPupNto+lesl8pzUQ4UEw6OfwAYgNy72EpLG4wX0i5Nk7EpgVl9w5W2XYe5dvBoTSv9krTiB0/upJ4CFZwKRUZ5HNWcyWSTzB9m86fe2p2h/c6iRyPcph9gm+9snifzOcAb8KUp23PEP6jfi3fFmALQ8Hq0JiFeEjbTG7f7N9SfoDrbsVIYO9/I6kVkZdii/bj0NVhows7XBG7lwkBvgQ5suTEddhyzX9d1pCFi6LA/+I73WKWAWiRhNLDMHwLjYvDFq0mRqRK8+3BZqtqC21uFG2EZv+e6VdqxqY36d4Hh0XU8pb5z21pLSDEGaU+Ye55HSArvIwwAXTh9GPkA/Hry7Oj8/0AFoVyDu7gvyYGjvWFLl3nSbPYy9qDYZ31xvoMsSfnoIAI/nE0GOqXTA66YHPGU4QXlwxSyWer9E4qwVJ6MlKOkUF8ba2xWTGli71KglYXJzTm3hMBqlXCXBowkvCXOKunhzq3TTHB6pbie64lVlPUhSlMVFNLSRB63nKUeCCWUNW7ZuYivNwKxZdxdzRuq1rU67LDF6QHjUMSlruME7q5Gx+4+npSoKY/aVZJAUEYW3PGh4ShMWBk9nqWLq3gi1wUm+L7zIpJuxT36oIj9bhEwP1HID+ECcVfnYOa4lAqjgsCgOZj4e7XjIQelJU2IBYhIKOkj3+Kr7O0jqcGRr2a+nGzgshkav+Gd1t8/XdsLXek4fAd3FTauzNa+Nf4iv1+FRUhjieU29YPL" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "usageMetadata": { + "promptTokenCount": 14, + "candidatesTokenCount": 152, + "totalTokenCount": 426, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 14 + } + ], + "thoughtsTokenCount": 260, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "HbSzavyoJurl7M8P89WUuQ8" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai.httprr new file mode 100644 index 000000000..2eb644ce9 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentText-googleai.httprr @@ -0,0 +1,57 @@ +httprr trace v1 +783 3188 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 463 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"I'm a pomeranian"},{"text":"What kind of mammal am I?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 2775 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:11:40 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=2619 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "You are a **canine**—specifically, a **domestic dog** (*Canis lupus familiaris*)! \n\nMore broadly, here is what kind of mammal you are:\n\n* **Placental mammal:** Like humans, whales, and bears, dogs give birth to live, developed young nourished via a placenta.\n* **Carnivoran (Order *Carnivora*):** You belong to the group of mammals historically adapted for predation and eating meat, though domestic dogs are technically omnivorous.\n* **Canid (Family *Canidae*):** You are part of the dog family, which includes wolves, jackals, foxes, and dingoes.\n* **Spitz type:** Within the dog world, Pomeranians descend from Arctic sled-dog breeds (the Spitz family), which is why you have that thick double coat and pointed ears, just shrunk down into a tiny \"toy\" size!", + "thoughtSignature": "EpEICo4IAWkUfRPQlTmWAu9b89RjIXpZ+0eAaizOcou5at1BJgti6jG+A/SbTf3Cd7e7eCKVI+s/mzuiI+JCNy2zneXOO0/VgC9At5x9zQv1+nSI0VSVhcPQ6FEli8Zf9z+p+Creb4QO/QPOUkdC67k4cFMOr68pTRBfuwhxKa5Od1Ef4vRmPc6QKzdSseLkrU7EJWn4NZm+p2vAUsZjpQMh/FbSaPmG1HlEqB4gWcxtXZxvvNWfShLwP7U/5vCkYFOkXdSBr8AOuNToIXjvAKHKU01bIYbVWyma16TLUQGF0hysu+A4dr+uF4v4Pu3XuB+D3fTdVplZQ79DuiVlqtYD+Z/TfRM3/3ojkw4dJ2W371o6awXrbtdH34NW/u8Lb3YL4GcdEQxNS6f9Hp9iFSMHSNEFGav6PdNAayhQRd+e7KMmrxC7Fwb8wCXZuSxSpjQ3Sgbwyqa+LirgjGTGVcNydBI0hF1pLBZ3Ykifg77dm+ZGmr7tYu4THc+vBsIykA1M8aT3IpOO9q9od9lGg2VzJMiQQjtLuGIM19l/Ji6iVqPwt9wa1OzhY58bRwn39qJ5qCYXQfTW1/W20W6GzKtnQ47ojSxeTJj6J0orO44olOJbiH33x8jWQ/czaLSk3IAna9al63fUzoQ22VhrNwACVGVKeOFs+x7Y+gOoHqfeBoioifJy4xdLpnNR80+Af57g8EU9xxZ9Hkr/FzA4M6gNkjNn3dv4P5cOW8q+LT9quiOnFyh06bkJMacouN3TiuEt7+gNnMtdOHya5rvjlhkwYAT/75XRmREsHRAKGmwb2+bWcC2794pxUPSXhHlT3UtimyqzwnirXl1GCUhFVZHWFetzzcc3Fg9z//hDm2J9dVH3AD2asiBfmujkMohc7/uNc510Mysl6D7U1NUKE5rWyw6Wd+jXVxE2NzObwl5E0o5w9JuMqhw7aoCCYZG/u7tEWDJ0jMdNt19EgrSD9iLjGYKWKm7w1EW4HPW4FMSXu0EZzLDvWHjr4FmH1YMkGPuDIzVyASOx3LaCzz/udgCjP5MQnZQD4tcIs/RDGOTNFDKjP8qoSJCM37RfloCRawGmMyTHHCZbjrY36tmr8DKf/IuMYSanChQ2hemm/XvLFWmv7bT9gbxaEeDZQtKODebaMRWteznC2IW4slXcR8cq8gdrdpBeohiEr2jLV6Xp682G1/nDKyoeN59/d1eh9lbz33qxjaqiolIzTByImUya1q9iifr8otnVqDKj5VGdUqpdn7jLxbcNb7d1LHeChM/eSnbr179h6HJ1Pab2hEbRbl18vtKW3CMfeRb0/gqMJHjxx0DiIxhg9aIaHab9+T0laUlF9DHy0h/ENsPsKz5V3qCeIvbWzrdRy0lZ7054TDB/" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 14, + "candidatesTokenCount": 189, + "totalTokenCount": 474, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 14 + } + ], + "thoughtsTokenCount": 271, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "6rOzav6UFeH7vdIPo-P18As" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextChatSequence-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextChatSequence-googleai.httprr new file mode 100644 index 000000000..e47bf3c4b --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextChatSequence-googleai.httprr @@ -0,0 +1,57 @@ +httprr trace v1 +868 2156 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 548 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Name some countries"}],"role":"user"},{"parts":[{"text":"Spain and Lesotho"}],"role":"model"},{"parts":[{"text":"Which if these is larger?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 1743 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:11:46 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=1503 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "**Spain** is much larger. \n\n* **Spain:** ~505,990 km² (195,360 sq mi)\n* **Lesotho:** ~30,355 km² (11,720 sq mi)\n\nSpain is roughly 16 to 17 times the size of Lesotho.", + "thoughtSignature": "EswFCskFAWkUfRNDtDXXyEfmfsf2JZtFLYI8gQqBu1BIjietQrLw90upiK/KUxVxUANeNgcrQfKFTZM+Ov5mvySKuKPjFyeXBeb48xh5ZWYMo5QB0KdxokYrBe/5MgKMjj9wWoT2ru8looVXAdFl/dHwDdIYV68cQemSG54fmtAmDSSZNl0Wia/SVExAkhFc30NXdnGKbyeHF9hTW44uqSIu27NdcVsfEZnFv3NY6iwUgZjQNEpaeWxBEEoP1Nsk9lnhrYHKHLK+bF7igN8NCBPT8/7K/0RFGOrQKOuKixAHae+EUylGu5hOiq4YZktdw+OZKQIvTE0wIfpPOSmZQCkAZAzwq2vqVP9AJ8GAyoFi6aeoJ7/n0q3KoliNSg7mR+lqmS5p3BjvlD1wUvEqSitSvy55gMskdridTi3QRI3ax/gD51IR3+4WwuuSsQ22oXg4XE3RAH9PbCqQPc7VxvzF+yNccQzkUmp/6aSpeUACFjnuNMW1JmikrhX0D0h+crFGhCVlM2yuD2XitOdfKt/kGXU9e5xMYkcVsSnDNKltn5g/k6fozu3vmPm8Igl6lKxyITM8q8FaKatTxtY59tAJYwkQ30PdYctxwluP2AIJcFkRdK6wYgoLeTxG7O2j+fPUgx3BN2SgsGEWDl+GWmju6fp1Sc4JZwvlEQjwmxVgY25dY/zbah3fkBuDYSYQzpyW6A3tPdjfkag+TSnGFXCVQv+hIPSbNL3cUNZHmQ2x29KGD/NInOr5m/0u+qKZyTLB/exSNI3yOIxj9CVOpeGswDwdMIfdtmLlpEt5F2W+djenq3bb8wChvxR0mCFYY27WORQP9CMWUj0Y4ulJB+SBMIjCFnI4yPFCION5l1XoPigXLF1uPDh78Y2AIwfusDh7TUFGxfFoY+MRKx3pW7nqFIkD2i+fI1lk0ToWcDq7kQviXZ2iwehE2+XaoZI=" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 15, + "candidatesTokenCount": 76, + "totalTokenCount": 276, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 15 + } + ], + "thoughtsTokenCount": 185, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "8LOzavy-LZr6vdIPn7WfsQo" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextUsingTextParts-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextUsingTextParts-googleai.httprr new file mode 100644 index 000000000..150546da3 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentTextUsingTextParts-googleai.httprr @@ -0,0 +1,75 @@ +httprr trace v1 +831 3731 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 511 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"I'm a pomeranian"},{"text":"What kind of mammal am I?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_MEDIUM_AND_ABOVE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_MEDIUM_AND_ABOVE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_MEDIUM_AND_ABOVE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_MEDIUM_AND_ABOVE"}]}HTTP/2.0 200 OK +Content-Length: 3318 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:36 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=3043 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "As a Pomeranian, you are a **domestic dog** (*Canis lupus familiaris*)! \n\nHere is how you fit into the mammal world:\n\n* **General Type:** You are a **placental mammal** (like humans, whales, and cats), meaning you give birth to relatively mature young.\n* **Order (Carnivora):** You are a **carnivoran**, adapted mainly for a meat-based (or omnivorous) diet, with sharp teeth and keen senses.\n* **Family (Canidae):** You are a **canid** (canine), making you closely related to wolves, coyotes, jackals, and foxes.\n* **Specific Breed Type:** Within dogs, you are a **Spitz-type toy dog**—descended from much larger Arctic sled-pulling dogs, but bred down to a compact, fluffy companion size.", + "thoughtSignature": "EvMICvAIAWkUfRNCPghLlGgABx1Rj3/qiYBHJO06XfbEd6g6nO/Csvm0S9CY/oug/vQMTJbmrhTYlkAas3V8NU7bjkeVJUL9EFfm7n6KSbe+/8OJ9bBHMgsYDTzSDMzt61oXU81ss3dQNqXXlEmCcxdL+MfOIlkut776TphtqUrmBDp4MDbMnbq+hUU4+LjSfCaX0zFwGYWSObMhkrVCTozXSowikjX83tjqO9/5RtiJ3FRi4e8/N9/Z0qwnQGjgnp8tT09h8S4W5gFLwyihxNwPLAWqxA0R51wyc3iKdGqIm8WoUG5h0M8e5cwk6QBdRW/YaP654CTi2MR6SB7moUOY6EsIRwKinNNvLT/UiH3heAzQ60TFPyikEwDZXfnw4FEVA9wAOFeEsU+HXBbIM6NEn/Qg3SHAXq+UARnzKHgbumv1+or3dUZyhsQU+Nt03taMhqiDQTyPor2beKCfy2zYWRRmJI2+2WX10iPsdDtlK3s+Q/wlyVJCAhy4mwyZUoP79szb4O05cP0BuOceiWBjTX2spBw+uNLSli5sgIR0LJWnHv13z63CWe6SxpkvMmwVmwpjTncWRFps27Geczhjx/89oA07jWgto1YIyfaToOIObGQh8cWyZ/vz2Hs8zSwQRq4KcsdWRRiLNPF5NacwK1+3bzZGomdFqcU+IzIMqaj4CnV6ARu0Xqh85yaKb2TNa2sWVta8Ll391ehVX/RoqIiqkaSgvusIt8iD2Y8IJd6k/yt5QII4nGKb0my38sF4RLkymEN8QGDJoCBo9zgyHkexF4W5HdcNMkcUbJIiw388+dGafji5SxxqCfpSkV/yh7H2lPHBu8xDwBofnMXqmQt288oo51h25I0I9jCBV2EQifDrYvFLyroz8zhVZGX/c3yu43WZjCEKljowRPeZwvNVbgnpmmroBg3qf0KPWNAt66miFf3NqVP2QtpmdjXL6OX/ScsNbPsc9TG2gnPm+PZHsX7jItDNtgsvmr3gzXnFERK44M2R2O21JAfWuug5cao1BJLNevFmV62pE5K6NfeMZ7/bUlg1pQtBvO9svmIHDIxKtVfLhTtvQ7xuToRRydYIAbZHSC/QftkdSReoZXu3iJ78v8pKKgxaF7dtVpfGw3H0tOFVIMZaKm3VNVNdDgIa4O0SBMSxVKbXxeHsng4DPJ6nv2PMdd9SMupl6vPHxJRmFKR876ZQ5GIdP+GXWwhSsmtVSNul8DxVtQo5xULS15i43/JyH8opMbsfL+TgJSDMzWoAIPpHITC5iOQo6tXc91UID8reBYIuAotpf13koZo7zE7yZBJh3jvz0VcdV8uCIx4jD3gVXwnz6X8mophLblZFQ8itK5bR3AFJ5jSoSfuO2YqvzFP8DnXrK8hvOR8hXndTQBcdU89wmBytfZiJC881B5ONWqZlUx+2isWuvj3opB+5+QhLkBOakd1Clsv7ld1Nq3nNnwZDqe6bmQwOTVmd+Q1XaHQFNJaqoXj5y4+QGs7LB1tlEEjj3lmUKOg=" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "usageMetadata": { + "promptTokenCount": 14, + "candidatesTokenCount": 184, + "totalTokenCount": 500, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 14 + } + ], + "thoughtsTokenCount": 302, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "IbSzav3aCeSE7M8P8sS34As" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentWithSystemMessage-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentWithSystemMessage-googleai.httprr new file mode 100644 index 000000000..1710dc016 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testMultiContentWithSystemMessage-googleai.httprr @@ -0,0 +1,57 @@ +httprr trace v1 +863 3717 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 543 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"Name the 5 most common fruits"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"systemInstruction":{"parts":[{"text":"You are a Spanish teacher; answer in Spanish"}],"role":"system"}}HTTP/2.0 200 OK +Content-Length: 3304 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:11:49 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=2444 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "¡Hola! Con mucho gusto te ayudo a aprender este vocabulario. \n\nAquí tienes las **5 frutas más comunes** en español, incluyendo sus artículos para que sepas si son masculinas o femeninas:\n\n1. **La manzana** (*Apple*)\n2. **El plátano** o **la banana** (*Banana*)\n3. **La naranja** (*Orange*)\n4. **La fresa** (*Strawberry* — en algunos países de Sudamérica también le dicen *frutilla*)\n5. **La uva** (*Grape*)\n\n**Un pequeño consejo de gramática:** \nRecuerda que para decir qué fruta te gusta, usamos el verbo *gustar*. Por ejemplo: \n*«A mí me gusta **la naranja**»* o *«Me gustan **las manzanas**»*.\n\n¿Y a ti? ¿Cuál es tu fruta favorita?", + "thoughtSignature": "EucLCuQLAWkUfROnudv6rKTNl49jHfuXjBAD4jU9yWohx9+urxIa9K15sFDTXL6OuHRpqxqwZ6o2N5Oh4FUZv+t/v2WSJmFEv2NKua4pZfVfoSTkMxF/SR/bgmZyYQ8X/hPl/gm3GmCpRL5bollHhLQ3DBOsKC5XCsN3WAAtyfzqz7yvafN5CgO8WmUtcVZGrvPeAWMBS5EP4HRT2mh9msvkNT4NsBmLkMrign3VPnDSNvwZAQXgIIP/qMR4x5XePkwLk4ycgjMOrwkJ8WpHlagcjMOYZpzMmqFoA4Yyr88qc5AOGtWT4i7EYwmJ2Fy8P6aybxufQeP611mlIle8iwA72BIiqNsk+vaisvdsu0xn0DE0HA2rIQAIysVtkNJyBskYxHZfM1lij/4gooR0y8luhkVTK2okw4DHEz9MZXlfntMs/ZQnW+q5VAyfZ1WfqWNFZXebpPMDqpnL4hrcklhAcvXhv6IYdtaVRjcp6bNfkLqdQI7/bL7s86TimOUx1OpjmS3dV97ggLgjhv/Q6OCRfzoIfRBEPCJAL/ZvTTvce+GIbng/x8xwYgLZbl4/uLi1wxnDm/+0VHlcyLVoq0Pb3nhKZNfKiE2yDPKt3RhQkTQMlq1U3dnvWePqYQ8z5TUPnfT+mN1Z5+EHII9LlXkq1rIyAumpIs0dttsW4VWldxlnI+pHwSSP/VI9FrmLv+hCjbVRRLDwlglYU0CO+DzkwXsVHsoV7g+PL0NVC8znfjDVG6PorTI8KJRR/+F72OU3Pbh6xA4F0hhRRxyTWh2IpUurmU20JyUWRi5LqMpAYUyKU6VRJofzSoVugY9iUfyLsd2vLW502lAlQzI1peutB1bk1K0NGjyY0QCbvJ+vfyMvA4O6+WYAsargd2WCqMdjc5h+gAe0X1SMjHKu2LKps59K7yhhzNhI3CqbsDg9qI0vVmJxpH2Gd+r4Kc6O2VBmT23yFnSDir4OR3NrFyuCKyWdaDVrZ5hHrF2kKclkti17PGBewxKiEgj3VDuNR3ByyPjxEtiSJzWcpdOnO02Pa/7JhCKnVZKfl2OfwMICBN+HQseaLbi+mgariQjC9UoCK5jJp4KMV/VkSVaXRsiHYJF5CwOJ5xUi7BhTQTZT2hpAwR44XKBOnm5Zg6ONen+hMgTu9lj51plff7iWkv8gUsHmqwtye1HQYh3BsNQHwzZq1f+NZJ4FmTK+dNmgthgA4j7JPnmHkww6LKfCD2owxorbnU04nG/wQvbVZAU0vQQVQ88g4lnWJ7CLrXhX51ooRnbILiFUno6AjGIprQK53MhMGvEXS9/Fj4H2Az8NXE+7wuAo87BWg6+MqmVOsl5/Mp6GeJQUNdU8mJU3cOZG0EhA0f0uXN29IYriYPl6R2wo57eWccO28g+lHesYZ0unXClqpLC0LmSCc8D+ZYc9179Ej+O6enF3xaN6VP5u9KWarfDuSzYU9FnKR7tTHcLTgaNVjma/bZIR3HMvfJaZf5EIY90bv8GXexhg1P/9Pqx1z7X03oKcNW+FIT0qSq15g/AoLX17dpg3m6zs2nQXPJ7F5YYPV+X6/LPae1Nc3ktuA907yDnSwDMVSZl7GzkF+n2/HgACJhpDyUysI6RmwV+YzJQSyEju9DTDmsmMBfTQmjZr4cGWfP4LF3bgjOuZGL6yC+M/xICLUrocLM4ZHArE9cdbUXsMEXXFVEV7XS8sgPMhUdq2ZACifYWfPq6Fwx7dkccRUwwO8sAcW7ruexmr1ZJB+xJHgEP2PO2LvCsy+rsUZPmICra1eD8CS9LnaikfYjAkv65BM7Obtj8SjhlrrddZd7hRrPC0lvV4ff5VEtQWNM4fLdFDYq44bmMy5wcHE9LOcXkbqeLO21+HK+m9ZEbxgJpLFUAq617PTRgr2xBy4TvagrO/mqjmJIRNLNor+bMof4zJWvOu/SzvD0XwJUnNQ3c1FUTWKjLH9VYAC+9TYneahEM3jeiZIRUx7a27bB9XlRG5AUoNx4zMjtSfxkcMFCk=" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 18, + "candidatesTokenCount": 189, + "totalTokenCount": 576, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 18 + } + ], + "thoughtsTokenCount": 369, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "87OzaqTDFpuIxN8PruCg4Ak" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testTools-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testTools-googleai.httprr new file mode 100644 index 000000000..d53717cf8 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testTools-googleai.httprr @@ -0,0 +1,120 @@ +httprr trace v1 +1050 1655 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 730 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"What is the weather like in Chicago?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current weather in a given location","name":"getCurrentWeather","parameters":{"properties":{"location":{"description":"The city and state, e.g. San Francisco, CA","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +Content-Length: 1242 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:22 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=1149 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "functionCall": { + "name": "getCurrentWeather", + "args": { + "location": "Chicago, IL" + }, + "id": "call_65668" + }, + "thoughtSignature": "EqICCp8CAWkUfROxCWBuKh914YeoFCvSE9K971SUwJgLiy03D5uOcFjzqJduds4t2edzpCv76o1Q4dUgPYcKEmzsbpKq6vVwNoeEn0TIAsiNqkbuiOIF9yuw5AJG3rz1xDzOsNNPQck/7JNnLErTQX7kZkAcKEG5CVzCJnmvpjZdlbuT8HhHWr0hjhf/+tohAGnPzAxku4IRjc9GDnmLo3cj2qvnvKrmcC63yklC8ntWzzJQ76WfOCSGwXqFsAoNHtcswMGBMSUhDIz93K/DW5oGRTrpLxJA48P23ZQDgWsZcgMELtmG7Z0r0kwgQChP46gTMnWVzrGK82VrouHDyPTzpkcQiCJqOXty15WqrWJWwmLiMuN9ZSW3kqw5WLuigLtgY0I=" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "finishMessage": "Model generated function call(s)." + } + ], + "usageMetadata": { + "promptTokenCount": 71, + "candidatesTokenCount": 17, + "totalTokenCount": 132, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 71 + } + ], + "thoughtsTokenCount": 44, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "FbSzav-VJ8nknsEPu9nSwAM" +} +1705 1325 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 1384 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"What is the weather like in Chicago?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Chicago, IL"},"id":"call_65668","name":"getCurrentWeather"},"thoughtSignature":"EqICCp8CAWkUfROxCWBuKh914YeoFCvSE9K971SUwJgLiy03D5uOcFjzqJduds4t2edzpCv76o1Q4dUgPYcKEmzsbpKq6vVwNoeEn0TIAsiNqkbuiOIF9yuw5AJG3rz1xDzOsNNPQck/7JNnLErTQX7kZkAcKEG5CVzCJnmvpjZdlbuT8HhHWr0hjhf/+tohAGnPzAxku4IRjc9GDnmLo3cj2qvnvKrmcC63yklC8ntWzzJQ76WfOCSGwXqFsAoNHtcswMGBMSUhDIz93K/DW5oGRTrpLxJA48P23ZQDgWsZcgMELtmG7Z0r0kwgQChP46gTMnWVzrGK82VrouHDyPTzpkcQiCJqOXty15WqrWJWwmLiMuN9ZSW3kqw5WLuigLtgY0I="}],"role":"model"},{"parts":[{"functionResponse":{"name":"getCurrentWeather","response":{"response":"64 and sunny"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current weather in a given location","name":"getCurrentWeather","parameters":{"properties":{"location":{"description":"The city and state, e.g. San Francisco, CA","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +Content-Length: 914 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:24 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=959 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "The current weather in Chicago is 64°F and sunny.", + "thoughtSignature": "EroBCrcBAWkUfRMl1Xlq9A5IA9xPoK1vYKzENI139THxSJwBlKG89+hajzFmvguXoHtgcotGaZ7lxdSz7pvCghkp3lvObx5Ig472z2l7c42+Gt9eKbcmxYa0M44G0DNJJain+IpQjjqy3a8TcwfpBnqzidxAADdtcBZkMVSYBzlzjfgypIV8CqwhCt8UVZJCVoheMPMvR3gRxgu3SfGIV96CAXzHFK2cEQ1FfmAH1F5dfiqlgMMJmhiY6PS/" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 148, + "candidatesTokenCount": 14, + "totalTokenCount": 182, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 148 + } + ], + "thoughtsTokenCount": 20, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "F7SzavH4NIWunsEPgqyEmQw" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testToolsWithInterfaceRequired-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testToolsWithInterfaceRequired-googleai.httprr new file mode 100644 index 000000000..61e680660 --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testToolsWithInterfaceRequired-googleai.httprr @@ -0,0 +1,120 @@ +httprr trace v1 +1050 1658 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 730 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"What is the weather like in Chicago?"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current weather in a given location","name":"getCurrentWeather","parameters":{"properties":{"location":{"description":"The city and state, e.g. San Francisco, CA","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +Content-Length: 1246 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:26 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=722 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "functionCall": { + "name": "getCurrentWeather", + "args": { + "location": "Chicago, IL" + }, + "id": "call_32837" + }, + "thoughtSignature": "EqYCCqMCAWkUfRM+MM4f3KZ/SubTg+xfJQ+8BWPwSSup3HrdtjoBBX30u9VoP7aJCjjGcU9yi8M4wDthubrcH9a1ArUNGgnArhClS0ZPc21hSOV/Ov5KE4GngWHVC8JwAS8rrCZ4nMMF96CJpXsrFqdP1IuTY7xEnmMmIjGFEQAVFFOowKHBfkV09q6WgabVW8mTy0eBUBlY9JwcQbBUDT0pvcf5jKOsO1lEVUCtAOTbugCMxh4AqTOqqDlqvx6Xi4Dv+6dlUa+DLvao1Tz6rhfZ+17wjZBWJwnTQmAWswzCtbOeQTTIJOKOMpLeLX+q/PlPRv69eC3brZW8j6imF89t/F/IwkmTFGIqK8T8f4QhIX4xOUOLnXOSe28PxqoZbB/xwwHPWtv7" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "finishMessage": "Model generated function call(s)." + } + ], + "usageMetadata": { + "promptTokenCount": 71, + "candidatesTokenCount": 17, + "totalTokenCount": 135, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 71 + } + ], + "thoughtsTokenCount": 47, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "GbSzat_cN5CM7M8Phc2V8As" +} +1709 1341 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 1388 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"What is the weather like in Chicago?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Chicago, IL"},"id":"call_32837","name":"getCurrentWeather"},"thoughtSignature":"EqYCCqMCAWkUfRM+MM4f3KZ/SubTg+xfJQ+8BWPwSSup3HrdtjoBBX30u9VoP7aJCjjGcU9yi8M4wDthubrcH9a1ArUNGgnArhClS0ZPc21hSOV/Ov5KE4GngWHVC8JwAS8rrCZ4nMMF96CJpXsrFqdP1IuTY7xEnmMmIjGFEQAVFFOowKHBfkV09q6WgabVW8mTy0eBUBlY9JwcQbBUDT0pvcf5jKOsO1lEVUCtAOTbugCMxh4AqTOqqDlqvx6Xi4Dv+6dlUa+DLvao1Tz6rhfZ+17wjZBWJwnTQmAWswzCtbOeQTTIJOKOMpLeLX+q/PlPRv69eC3brZW8j6imF89t/F/IwkmTFGIqK8T8f4QhIX4xOUOLnXOSe28PxqoZbB/xwwHPWtv7"}],"role":"model"},{"parts":[{"functionResponse":{"name":"getCurrentWeather","response":{"response":"64 and sunny"}}}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}],"tools":[{"functionDeclarations":[{"description":"Get the current weather in a given location","name":"getCurrentWeather","parameters":{"properties":{"location":{"description":"The city and state, e.g. San Francisco, CA","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]}HTTP/2.0 200 OK +Content-Length: 930 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 11:12:28 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=891 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Gemini-Service-Tier: standard +X-Xss-Protection: 0 + +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "The current weather in Chicago is 64°F and sunny.", + "thoughtSignature": "EsQBCsEBAWkUfROSJ567taFaJJC2gn87GQbUB/wFkhoRNn/r5b+60GROp0RKptnJSlI8Bp8UayBi4juvoAYv1A9A090GVQTwJkl1HHTh1E9IUA14sdMlwCBQJCPfmiU4XiR6NnDBkw9xoPm9zxbS5g7PcmBCYcLLCEjunIseZwYYmJqxnwSNZYd4ajricBmB6PY8PDmm3rkhsqMX7XoUudzMecpbbqsw+q/vEZDCvgwKptbgX+bGGfIFokQxovfNpNnjajh6Ow==" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0 + } + ], + "usageMetadata": { + "promptTokenCount": 151, + "candidatesTokenCount": 14, + "totalTokenCount": 188, + "promptTokensDetails": [ + { + "modality": "TEXT", + "tokenCount": 151 + } + ], + "thoughtsTokenCount": 23, + "serviceTier": "standard" + }, + "modelVersion": "gemini-3.8-flash", + "responseId": "G7SzavjSJ82X3boPieeYmA8" +} diff --git a/llms/googleai/shared_test/testdata/TestGoogleAIShared-testWithStreaming-googleai.httprr b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testWithStreaming-googleai.httprr new file mode 100644 index 000000000..fc71af47f --- /dev/null +++ b/llms/googleai/shared_test/testdata/TestGoogleAIShared-testWithStreaming-googleai.httprr @@ -0,0 +1,83 @@ +httprr trace v1 +802 19003 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:streamGenerateContent?alt=sse HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 468 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"contents":[{"parts":[{"text":"I'm a pomeranian"},{"text":"Tell me more about my taxonomy"}],"role":"user"}],"generationConfig":{"candidateCount":1,"maxOutputTokens":16384},"safetySettings":[{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"}]}HTTP/2.0 200 OK +Content-Length: 18603 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Disposition: attachment +Content-Type: text/event-stream +Date: Wed, 23 Sep 2026 11:12:41 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=4568 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Xss-Protection: 0 + +data: {"candidates": [{"content": {"parts": [{"text": "As a Pomeranian, underneath all that luxurious fluff beats the heart of an ancient Arctic sled dog"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 19,"totalTokenCount": 832,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "—and scientifically speaking, a wolf! \n\nHere is your complete biological breakdown, from the broadest domain of life down to your"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 45,"totalTokenCount": 858,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " specific breed:\n\n---\n\n### **The Scientific Ladder (Linnaean Taxonomy)**\n\n* **Domain: Eukaryota** "}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 72,"totalTokenCount": 885,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "\n You are an organism made of complex, membrane-bound cells with a nucleus (unlike bacteria).\n* **Kingdom: Animalia** "}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 102,"totalTokenCount": 915,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "\n You are an animal: multicellular, capable of movement, and requiring food to generate energy.\n* **Phylum:"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 128,"totalTokenCount": 941,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " Chordata** \n You are a vertebrate! You have a spinal cord, a backbone, and a bilateral body"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 152,"totalTokenCount": 965,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " plan.\n* **Class: Mammalia** \n You are a mammal. You are warm-blooded, nurse"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 177,"totalTokenCount": 990,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " your young, have three middle-ear bones, and possess that famous, magnificent double coat of fur.\n* **Order: Carnivora** "}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 208,"totalTokenCount": 1021,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "\n Your ancestors were specialized meat-eaters with sharp carnassial teeth designed for shearing flesh (even if your favorite"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 233,"totalTokenCount": 1046,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " treats nowadays are peanut butter and kibble).\n* **Suborder: Caniformia** \n This separates the \""}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 259,"totalTokenCount": 1072,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "dog-like\" carnivores (like you, bears, seals, and raccoons) from the \"cat-like\" fel"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 285,"totalTokenCount": 1098,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "iforms (cats, hyenas, mongooses).\n* **Family: Canidae** \n The dog"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 309,"totalTokenCount": 1122,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " family! This includes wild canines like coyotes, foxes, jackals, and dingoes. Canids are known for non-ret"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 338,"totalTokenCount": 1151,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "ractile claws, bushier tails, and social intelligence.\n* **Genus: *Canis*** \n The true"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 364,"totalTokenCount": 1177,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " dogs, wolves, and jackals. Members of this genus share similar skeletal structures and vocal communication styles.\n* **Species: *"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 391,"totalTokenCount": 1204,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "Canis lupus*** \n **Surprise: Biologically, you are a Gray Wolf!** Despite your portable"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 415,"totalTokenCount": 1228,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " size, your core genome is that of *Canis lupus*.\n* **Subspecies: *Canis lupus familiaris*** \n This"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 445,"totalTokenCount": 1258,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " is the domestic dog—thousands of years of co-evolution and friendship alongside humans.\n\n---\n\n### **Your Breed Sub"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 470,"totalTokenCount": 1283,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "-Classification: The Spitz Family**\n\nFormal Linnaean taxonomy stops at the subspecies (*Canis lupus familiaris*"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 494,"totalTokenCount": 1307,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "), but cynologists (dog scientists) classify you further by dog type and ancestral lineage:\n\n* **Type: Spitz**"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 519,"totalTokenCount": 1332,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " \n You belong to the ancient **Spitz group** (alongside breeds like Samoyeds, Huskies, and Chow"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 545,"totalTokenCount": 1358,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " Chows). Hallmarks of Spitz dogs include:\n * Pricked, triangular ears.\n * A dense,"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 570,"totalTokenCount": 1383,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " weather-resistant double coat.\n * An almond-shaped eye set.\n * A plush tail that curls gracefully up"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 596,"totalTokenCount": 1409,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " over your back.\n* **German Name: *Zwergspitz* (\"Dwarf Spitz\")** \n In"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 623,"totalTokenCount": 1436,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " the international kennel registry (FCI), you are classified as the smallest variety of the **German Spitz**.\n* **Geographic"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 649,"totalTokenCount": 1462,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": " Origin: Pomerania** \n Your breed was refined in the historical region of Pomerania (now part of north-west Poland and north"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 678,"totalTokenCount": 1491,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "-east Germany). \n\n### The Bottom Line\nBiologically speaking, you are an Arctic draft-animal miniaturized into a "}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 705,"totalTokenCount": 1518,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "5-pound lap companion, carrying 99.9% of the genetic code of an apex predator."}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 727,"totalTokenCount": 1540,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + +data: {"candidates": [{"content": {"parts": [{"text": "","thoughtSignature": "EsYbCsMbAWkUfRNA4M+e3tzZOlgLmDSmn18z44ECSJbEV7gCT+8qYp5nJaxsPvkrfHubhYvv6thK+mrdRU8/aHZSxHf6AGOGW5dZd6JNn0vZz07ibywt9I9SaLLCfwExGBcYbK3zUgFV2LhLDn32qGbaNWVo1ydvdbxYtMi3R25F+Sx2ijZXDDRtpdZ46eVgYThlYwhIOhMOmj/GtNNqaDX28hAih+bZPjkCGJo3cKsNHm3v+Vn3X29AgqFpP/zgVx90Y4oxaVFXixNctVWs99QclpL1f9p0bGVYTIQiSQsVBz3UCWpZKXUVRSKs28F0y4avVASTkQmT66e1XiQSu60m2m1Q4F8Bjz0EyHdKlxT0pSAO1iEj/qjOme0o22JVgjV3VszvBZLm0TmYTKxE0HIXnTKnsHQ/nOuF1gLBp/bI7aLtPojf3uc0g0NFIaCuwhBy2PlhQ/VEQAUgVCK+2auCMW7sd2PKG4FqY1iNiOoXtkQTuhtTJJcuQQDkXN6HKE9o292BrAK4k+MP/OidB0cQa/SaDf37QlFPekoSgTwPE5RAdOVZzjikppqmH6TL0CZm57cPCndq9lUa/RlftxjfJxuXIZPAV6k9sKuXumLUNxjXiCs/PViverMHm4NI0MkKkK0SOLS60hEBFDwkvLKB6chGqB4yv5l7glhUZELjTYKs1E3E/py5F24wzgixCzdEMjJUhQ7QmF+nxeBMNSa6icySM3Zp/e3MwDEDRcw74bZ0+96rDNzBhnWH8uPrDT6KAfCv9Yw67Tskd94MoAbRKizlP8eh3lopuswTWavUIOFDyzQYhyHMmjinbIfWGa+GVzBwRJPbR115asukao6vhT0Uh8vJAfhZHfZdASHNSUuQVE44RJGXpIZVxCEiuq1jQbUuZk46fTt1UyRsBtxQCiTy3k14c7As7Yo1hMV3XFuWrL6gkDtqKOvJiaNJC/BWctOfMcLZrsetAWDMiAan5J0fD/xBVX2LCOQJhXD/R21wWrtMBgS/1cbVy1S1MdTehjQ6wF5QYQ8wFA/tSzA7AbDKhZ2etM3hyI8G5gpsoG8878ED8VommhFKqlK6fZGJBXOTOhbF78xTpGqYmWu363ienpMK1xg6tiFCDlue9DcyAsQtY9kcEhUKtCv+IF7IZSDHWF1Zy1rPH/N+zWxmEPj0Eh5+6lanarZgwOHhcVarzTZ8bvisB3eaB+SM1ZlNgIEUJ6ZQI4tx2bk3qQV8uLSNPqD8EnjZrCRc+FcMAdwFIVGjx+uAN+ZASb5YPZzo3qjwifhwENqM2WNM65nbbqmFCZMrEFwYKxtKA18rdCTxdypLSLPdI57PSDTcSmoH/kY95OcZ0zkRBgzTa8Ioor3lGue2qxuGY7PkPQs8R9Caiaa7KqFWseNU0B58mDmxke05BG9E6AXOEGZw4Ib3UWVqiC8/SO9estKXoyLKRedekwk0sdotcmx+HjZu0FGunf9s2n4B5EZa/LNtKZFK014KWQZhp955f9r10mZ1zU4F6ERNbbKeEmZH7HzDTbM76YfBu6yKob+PCgY80ZcdMVC5KpNbtOZduvZkO8DswuI03h0+HTnb+blRkW/bxACM+lzpl2xKXEku6pvkqSjZiKK23xXKmGOX1CCI93O980AI0+Na72vzP1BgJuoFQALetJMm8Q1TJ63+R39QcDgSpaPfvIUAHsqPhLzVUSYvXsKrWIx7D7m7Lqbj9SVzm27gjzBrPnkE9HsAC9AUdOi6jUJAgxmKYAC4Aqg3abb2JGfi74Cr0tBW0eoajmqbfLmhH7aGaxuAbQv8wSRYSGMy7DcDB1yxU/aLuyUkXGxYmG0dbBzd8K9WBydCMNRWMl395RTaaskB1wnqqClSypwKnLlpagjUiF+3ALYsiliKjPnGhsE6/b0oZWH/cXGS5+J3HiEElw/O48ZwAInQBYnoVV7OdMigB7AoB3RWdHPhjuXWuLrCE4W96E5IFWFpZ8qeYwiku0wJtGIxnJuqqQoSC/+IQY5SC8Qgfww5N6dXgdtWBAuudYjov3xxFqDzxfEbw3/GUe3b/+UYkRMWUZmUcXGXazADh6QSWaSVSH0yTWn1pGVKpbfFkwSUd6F7Aj896QbXNUfKrVQRj4aMfmxnY01r7BbBbZKdnQMbP4+KkSOLnr/9h91uLK3y/qdGEeGWQJ2Ba53CabCJJfM5W7wPL7klLo69OesoH+vbrzkrHzJQYZvISLZaJQkbW+GS65Znsmxn/zViWRk2EuPy4qAHcEhQwZ5gaQJ7m3A97iOjH5pWCr+NjihkgxxPsOqICqA5TiCZeZVugyKEWhYYRzdJyEfUR3txJOnrH2LtfoWn+dus3z+dKqiSBMa4GsTIm+e8ZF0JO9O/zt4NVFLiTy/6wmVM4rme50GKRlmrBjQdK/OzaMDOi++t0h95lZDd7TUEbAuq2U4IG9vYylTZO8rQifsUMatUHmWqqPoRK9Sa3Dj6BTtjq7B12TVAVf3hAuEvVOmVM3B7rEUMnXIb8/zHj5Twi+zx9p6XN/1iRg4LG6/prQcJQYrzAhoutqRiIM+hNr81X2kG+oEmevZdr9MIGjm03VkJ413QqkIEqhhn96UsLIx3HukgdIbn7FMLA8vTgT08avHO24+H9o2YZsQXgktE0qAQ3TQEMq/2VdhicqcEYNni7a2sl4gDcwdkIOh2LwB5JJ0/QXwRcs3PeXCcAJfs8elRiwjE94NxYAJvYofsUh/nPRRLUGWILTzsORcWe3tiR1nXKhSdcNQ6aPJfCDDy99ODHQ5JWCP1qqV0lkRW5yQ4pSZp2h1xhxeEDLoXIOeXJbkjMVrcnnrrfnFm6joIMhw7Sp9Uqnrsm4XPmCWtDMy5kci12B/XcPAbZMqET3SQiQDwz8yQo4llQ6yFiqJq/iu70AWaZ6q5tU7UtIcQkXbfCqLxXGKQyzv9WQtEmwx8yYW6EfwWx/rpdetVPp2cWRTtTAcr2g0CFm89Vc6YoSMMBpAouvi4cJQo34rCHO8w6GltAUIasuYACwaGNs4U1pHJQ7wzTucFCjSEUWu/17qyeLGL2tfBuEddmyIa9klkP6STGqVezuxd/dDzGaVD8ovzUuTtY07wuS4RJau8rudrQ+bJ6WiVxZvDqx6pzXKCASkQwrQC3HbmQKLDyd6F/HeDr6MICSUE7oidFjJhPSzB9twN9nEI+J4+83t+2iUBSllFkJbmbJCkNjkmQNlPkxdZ0JNbXNbzIxFkTUhJ4bP+CmwFMAxoaqvvEZuprKSV9/2SpcCG88tYk46i0I09xIuRGcMeOg+m1MZk4FTzw/na50cg7EGkUgs4LPEJA4OhXm5zh3VQXjikp6ijSBKLbqjkJ7UIcMobJwoF5hKPVCiAghCqzhHXeMzij3Q2zPNyy8JNeYcl7RvWNeK+wYXXwQF/rHKEp3FDiN1lLUVQIShHlSwsrl0xRJLqGarkg4AL+RCaf282bsYUt+fooy1GGdgAHmWDIoe62qO93Xw+YG2tDWBQuCvnBhkkEuEuFAwH7xYxrLN4YsterytWz/OlTHXz24HswZcwhm+beABpgsOybPM8gQkphqk7PWb6WUSb/DdQSq2WnZSd0CYWWESSDPjsQWzZodFYMZ3Coq/1T0K4OW8Z+FvXXk8oagwfk6qa9fROMjQmPYOzKS2KhK29/EbcBBGFY0L5YSrNSLZ0M7PVWO9c69TOqTfgOIx9EG9mRiektiXSPUTdsQ3mRN7UUuKoZCs2XVif6daqPTe2wzR4ceKSX+tLWLnTi6Gm7BQI7+CWn1vj5zBpSeNjuN6nH8DI01O+mFgFf9JL0rKdpY72ftsxcA50G/4NdQc6sEsrwQwIRkJ+WzkVhjMfi975tB483R9Z4xno6+DwzbDCVlnTDCi5yxCYcu+TwUzX9z2vDtIrijkbOMGlRGvaCm4eFLVv24am8PEz2dce1G6qz3TJigzIYlGLPz3hJbd8OMFcPyawCw6aUnKqfLmSzVEETka60VxBPsbJOuTVawmuJ67r1hBpCXItYJoc1k5ex3zh1LySIUulUeqvD3bKHP9T/6sA3aB8F3vR0TioVi4KBdAFSpcGc4VnRxbpkDDFj1g3OKCb8343pSsLy+S4dUgG8qpKr8G5Af50re/8sirpWx3J7NfJB/FO6hTmyHXs93Mn8dSCPw8DylMKGhIu+ZtF775Bc5gqNPPZQf48dLhY3kzoVzy6Mm96EmheOk3RatXDW/hbz9G74LRMqqxWX94PwYBJbXmlaa7EDdn84UwJVYGusaR8fUO1M5fkg2zXbvonoTg/Z+fjnrMSd4P5wE3LVeqM6gbrbVA1l/lF4tn2YWe8SRSDdAfvJetwPqXIqjRH7I5N5seXE37CNwEB2C+YLk4rEDZmg3x7KbhozPWkWxjZMapCnsvNsWNdLrSXioM4Dl+8f3ZKo5hm/vPZ2ks6rbMRCAD2hHB3HlgNCD5/o2uF88aRYP90D9FQ+lCt4QPmLqkgPPO+nNhkt2CVcKHBh0OccfeXc+d5IyP1X7k0UKUfGthV0VPLDBxOkC+sBE15ISE9e/BFhq1r/jQHdDelm3yka1MBZkmN/uz/e5SzAbdViTmdz/gJJE++h4fUwQoEI+MSstEokJp44wCnplQ7MXJWFwJ1SFL4/fkecuQm9hfXdNhy3im+coVL4iPnOYdDTPxJDBhAUnk5M/wCXsNKzS3zxA=="}],"role": "model"},"finishReason": "STOP","index": 0}],"usageMetadata": {"promptTokenCount": 13,"candidatesTokenCount": 727,"totalTokenCount": 1540,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 13}],"thoughtsTokenCount": 800,"serviceTier": "standard"},"modelVersion": "gemini-3.8-flash","responseId": "JbSzapmPEZvonsEPp4G08Qo"} + diff --git a/llms/huggingface/example_provider_test.go b/llms/huggingface/example_provider_test.go index bf12d4a86..1fa516150 100644 --- a/llms/huggingface/example_provider_test.go +++ b/llms/huggingface/example_provider_test.go @@ -25,7 +25,7 @@ func ExampleNew_withInferenceProvider() { // Use the LLM result, err := llm.Call(ctx, "What is the capital of France?", llms.WithTemperature(0.5), - llms.WithMaxLength(50), + llms.WithMaxTokens(50), ) if err != nil { log.Fatal(err) @@ -49,7 +49,7 @@ func ExampleNew_standardInference() { // Use the LLM result, err := llm.Call(ctx, "Hello, how are you?", llms.WithTemperature(0.5), - llms.WithMaxLength(50), + llms.WithMaxTokens(50), ) if err != nil { log.Fatal(err) diff --git a/llms/huggingface/huggingfacellm_test.go b/llms/huggingface/huggingfacellm_test.go index 92b334e31..ab9a887db 100644 --- a/llms/huggingface/huggingfacellm_test.go +++ b/llms/huggingface/huggingfacellm_test.go @@ -45,14 +45,13 @@ func TestHuggingFaceLLMWithProvider(t *testing.T) { // Test the LLM call result, err := llm.Call(ctx, "What is 2+2?", llms.WithTemperature(0.5), - llms.WithMaxLength(50), + llms.WithMaxTokens(50), ) - // Skip test if provider is not available or recording is missing - if err != nil && (strings.Contains(err.Error(), "404") || - strings.Contains(err.Error(), "403") || - strings.Contains(err.Error(), "cached HTTP response not found")) { - t.Skip("Provider not available or recording missing, skipping test") + // Skip test if the provider is not available live; a replay miss fails + if err != nil && rr.Recording() && (strings.Contains(err.Error(), "404") || + strings.Contains(err.Error(), "403")) { + t.Skip("Provider not available, skipping test") } if err != nil { @@ -106,14 +105,13 @@ func TestHuggingFaceLLMGenerateContent(t *testing.T) { resp, err := llm.GenerateContent(ctx, messages, llms.WithTemperature(0.5), - llms.WithMaxLength(30), + llms.WithMaxTokens(30), ) - // Skip test if model is not available or rate limited - if err != nil && (strings.Contains(err.Error(), "404") || - strings.Contains(err.Error(), "402") || - strings.Contains(err.Error(), "cached HTTP response not found")) { - t.Skip("Model not available, rate limited, or recording missing, skipping test") + // Skip test if the model is not available or rate limited live; a replay miss fails + if err != nil && rr.Recording() && (strings.Contains(err.Error(), "404") || + strings.Contains(err.Error(), "402")) { + t.Skip("Model not available or rate limited, skipping test") } if err != nil { diff --git a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go index 2f2c0d6fb..fbd27f237 100644 --- a/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go +++ b/llms/huggingface/internal/huggingfaceclient/huggingfaceclient_test.go @@ -94,9 +94,9 @@ func TestClient_RunInferenceWithProvider(t *testing.T) { resp, err := client.RunInference(ctx, req) - // Skip test if provider is not available (404/403 error) or recording is missing - if err != nil && (strings.Contains(err.Error(), "404") || strings.Contains(err.Error(), "403") || strings.Contains(err.Error(), "cached HTTP response not found")) { //nolint:lll - t.Skip("Provider not available or recording missing, skipping test") + // Skip test if the provider is not available live (404/403 error); a replay miss fails + if err != nil && rr.Recording() && (strings.Contains(err.Error(), "404") || strings.Contains(err.Error(), "403")) { + t.Skip("Provider not available, skipping test") } require.NoError(t, err) diff --git a/memory/token_buffer.go b/memory/token_buffer.go index f066b5cbe..944ec3f99 100644 --- a/memory/token_buffer.go +++ b/memory/token_buffer.go @@ -7,7 +7,9 @@ import ( "github.com/vxcontrol/langchaingo/schema" ) -// ConversationTokenBuffer for storing conversation memory. +// ConversationTokenBuffer for storing conversation memory. It drops the oldest +// messages until the buffer fits MaxTokenLimit tokens, as llms.CountTokens +// counts them for no particular model: one token per four runes. type ConversationTokenBuffer struct { ConversationBuffer LLM llms.Model diff --git a/memory/token_buffer_test.go b/memory/token_buffer_test.go index 09abe29d6..25c2b1df5 100644 --- a/memory/token_buffer_test.go +++ b/memory/token_buffer_test.go @@ -1,6 +1,8 @@ package memory import ( + "bytes" + "log" "net/http" "testing" @@ -108,3 +110,32 @@ func TestTokenBufferMemoryWithPreLoadedHistory(t *testing.T) { expected := map[string]any{"history": "Human: bar\nAI: foo"} assert.Equal(t, expected, result) } + +// TestTokenBufferMemoryPrunesOldestMessages swaps the package-wide log output, +// so it does not run in parallel. +func TestTokenBufferMemoryPrunesOldestMessages(t *testing.T) { + ctx := t.Context() + var logs bytes.Buffer + logWriter := log.Writer() + log.SetOutput(&logs) + t.Cleanup(func() { log.SetOutput(logWriter) }) + + // The buffer is counted for no particular model: one token per four runes. + m := NewConversationTokenBuffer(nil, 10) + + require.NoError(t, m.SaveContext(ctx, map[string]any{"input": "one"}, map[string]any{"output": "two"})) + require.NoError(t, m.SaveContext(ctx, map[string]any{"input": "three"}, map[string]any{"output": "four"})) + + // 40 runes are 10 tokens, which the limit still holds. + result, err := m.LoadMemoryVariables(ctx, map[string]any{}) + require.NoError(t, err) + assert.Equal(t, map[string]any{"history": "Human: one\nAI: two\nHuman: three\nAI: four"}, result) + + // 60 runes are 15 tokens: the two oldest messages go, leaving 41 runes. + require.NoError(t, m.SaveContext(ctx, map[string]any{"input": "five"}, map[string]any{"output": "six"})) + + result, err = m.LoadMemoryVariables(ctx, map[string]any{}) + require.NoError(t, err) + assert.Equal(t, map[string]any{"history": "Human: three\nAI: four\nHuman: five\nAI: six"}, result) + assert.Empty(t, logs.String()) +} diff --git a/testing/llmtest/doc.go b/testing/llmtest/doc.go index 16fb67a9c..e3d98bf49 100644 --- a/testing/llmtest/doc.go +++ b/testing/llmtest/doc.go @@ -35,20 +35,20 @@ // - A door that needs particular options to answer at all, such as the // output budget a thinking model spends before its first word, declares // them with WithCallOptions; every checked request carries them -// - Reasoning/Thinking mode (if supported) // - Token counting (if usage information provided) // - Context caching (if implemented) // // # Mock Implementation // -// A MockLLM is provided for testing without making actual API calls: +// A MockLLM is provided for testing without making actual API calls. It +// answers in prose and never calls a tool, so it declares WithoutToolCalls: // // mock := &llmtest.MockLLM{ -// CallFunc: func(ctx context.Context, prompt string, options ...llms.CallOption) (string, error) { -// return "mocked response", nil +// GenerateResponse: &llms.ContentResponse{ +// Choices: []*llms.ContentChoice{{Content: "Hello"}}, // }, // } -// llmtest.TestLLM(t, mock) +// llmtest.TestLLM(t, mock, llmtest.WithoutToolCalls()) // // # Parallel Testing // diff --git a/vectorstores/dolt/dolt_test.go b/vectorstores/dolt/dolt_test.go index dcd1b32c6..725da1c9c 100644 --- a/vectorstores/dolt/dolt_test.go +++ b/vectorstores/dolt/dolt_test.go @@ -6,8 +6,8 @@ import ( "database/sql" "errors" "fmt" - "io" "net" + "net/http" "os" "os/exec" "path/filepath" @@ -20,13 +20,14 @@ import ( "github.com/vxcontrol/langchaingo/chains" "github.com/vxcontrol/langchaingo/embeddings" + "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/llms/googleai" "github.com/vxcontrol/langchaingo/llms/openai" "github.com/vxcontrol/langchaingo/schema" "github.com/vxcontrol/langchaingo/vectorstores" "github.com/vxcontrol/langchaingo/vectorstores/dolt" - _ "github.com/go-sql-driver/mysql" + "github.com/go-sql-driver/mysql" "github.com/google/uuid" "github.com/stretchr/testify/require" ) @@ -39,29 +40,25 @@ var ( ) type testDoltServer struct { - t *testing.T - Cmd *exec.Cmd - db *sql.DB - Stdout io.ReadCloser - Stderr io.ReadCloser - Name string - StderrString string - StderrCaptured chan (bool) - WaitError error - Waited chan (bool) - CmdDir string - Host string - Port string - Password string + t *testing.T + Cmd *exec.Cmd + db *sql.DB + Name string + OutputString string + WaitError error + Waited chan (bool) + CmdDir string + Host string + Port string + Password string } func newTestDoltServer(t *testing.T) *testDoltServer { t.Helper() return &testDoltServer{ - t: t, - Waited: make(chan bool), - StderrCaptured: make(chan bool), - Name: "vectorstore_dolt_test", + t: t, + Waited: make(chan bool), + Name: "vectorstore_dolt_test", } } @@ -75,36 +72,65 @@ func mustGetDoltExec(t *testing.T) string { doltExecOnce.Do(func() { arg := os.Getenv("DOLT_BIN") - if arg != "" { - if filepath.IsAbs(arg) { - doltExec = arg - return - } - wd, _ := os.Getwd() - doltExec = filepath.Join(wd, arg) - return + if arg == "" { + arg = doltCommand + } + // LookPath checks that DOLT_BIN names an executable, so a wrong one + // skips the tests too. A name without a separator is searched in PATH, + // a relative path is taken from the package directory and made + // absolute, since the dolt commands run in a temporary directory. + de, err := exec.LookPath(arg) + if err == nil { + de, err = filepath.Abs(de) } - de, err := exec.LookPath(doltCommand) if err != nil { - t.Skip("Dolt binary not available") + return } doltExec = de }) + // Skip outside the Once: a skip inside it ends only the first caller, and + // every later test would run an empty command ("exec: no command"). + if doltExec == "" { + t.Skip("Dolt binary not available") + } return doltExec } +// skipIfNoDolt skips a test that starts a server of its own when the dolt +// binary is missing. Tests call it before httprr.OpenForTest, which empties +// the cassette in record mode, so a skipped recording keeps the cassette. +func skipIfNoDolt(t *testing.T) { + t.Helper() + if os.Getenv("DOLT_CONNECTION_STRING") == "" { + mustGetDoltExec(t) + } +} + +// parallelIfOwnServer runs the test in parallel only when it replays and starts +// a server of its own. Tests on the DOLT_CONNECTION_STRING server share its +// tables, and their schema changes fail when they run at once. +func parallelIfOwnServer(t *testing.T, rr *httprr.RecordReplay) { + t.Helper() + if !rr.Recording() && os.Getenv("DOLT_CONNECTION_STRING") == "" { + t.Parallel() + } +} + func (di *testDoltServer) ConnectionString() string { return fmt.Sprintf("%s:%s@(%s:%s)/%s?parseTime=true&multiStatements=true", "root", di.Password, di.Host, di.Port, di.Name) } //nolint:funlen func (di *testDoltServer) Start() error { + // Look the binary up first: a skip after MkdirTemp leaves the directory behind. + doltBin := mustGetDoltExec(di.t) + tmpDir, err := os.MkdirTemp("", "dolt-vectorstore-tests*") require.NoError(di.t, err) di.CmdDir = tmpDir - doltInit := exec.Command(mustGetDoltExec(di.t), "init") //nolint:gosec + doltInit := exec.Command(doltBin, "init") //nolint:gosec doltInit.Env = os.Environ() doltInit.Dir = tmpDir doltInit.Stdout = os.Stdout @@ -112,7 +138,7 @@ func (di *testDoltServer) Start() error { err = doltInit.Run() require.NoError(di.t, err) - createDB := exec.Command(mustGetDoltExec(di.t), "sql", "-q", fmt.Sprintf("CREATE DATABASE %s;", di.Name)) //nolint:gosec + createDB := exec.Command(doltBin, "sql", "-q", fmt.Sprintf("CREATE DATABASE %s;", di.Name)) //nolint:gosec createDB.Env = os.Environ() createDB.Dir = tmpDir createDB.Stdout = os.Stdout @@ -128,7 +154,7 @@ func (di *testDoltServer) Start() error { di.Password = "" di.Cmd = exec.Command( //nolint:gosec - mustGetDoltExec(di.t), + doltBin, "sql-server", "--host", di.Host, "--port", di.Port, @@ -137,60 +163,50 @@ func (di *testDoltServer) Start() error { di.Cmd.Env = di.Cmd.Environ() di.Cmd.Dir = di.CmdDir - di.Stdout, err = di.Cmd.StdoutPipe() - require.NoError(di.t, err) - di.Stderr, err = di.Cmd.StderrPipe() - require.NoError(di.t, err) + // exec copies the output into the buffer itself and Wait returns only after + // that copy is done, so the buffer is complete once Waited is closed. A + // pipe read by a goroutine of our own races with Wait closing the pipe. + // Dolt reports a port in use on stdout and logs to stderr. + var output bytes.Buffer + di.Cmd.Stdout = &output + di.Cmd.Stderr = &output err = di.Cmd.Start() require.NoError(di.t, err) go func() { di.WaitError = di.Cmd.Wait() + di.OutputString = output.String() close(di.Waited) }() - go func() { - var buffer bytes.Buffer - _, err := buffer.ReadFrom(di.Stderr) - if err != nil { - panic(err) - } - di.StderrString = buffer.String() - close(di.StderrCaptured) - }() - - dbChan := make(chan *sql.DB) - go func() { - for i := 0; i < 50; i++ { - db, err := sql.Open("mysql", di.ConnectionString()) + for i := 0; i < 50; i++ { + db, err := sql.Open("mysql", di.ConnectionString()) + if err == nil { + err = db.Ping() if err == nil { - err = db.Ping() - if err == nil { - dbChan <- db - return - } - } - select { - case <-di.Waited: - close(dbChan) - return - default: - time.Sleep(100 * time.Millisecond) + di.db = db + return nil } + db.Close() } - err = di.Shutdown() - if err != nil { - panic(err) + select { + case <-di.Waited: + os.RemoveAll(di.CmdDir) + return errors.Join(fmt.Errorf("dolt sql-server exited: %s", di.ErrorMessage()), di.WaitError) + case <-time.After(100 * time.Millisecond): } - close(dbChan) - }() - di.db = <-dbChan - - return nil + } + shutdownErr := di.Shutdown() + return errors.Join(fmt.Errorf("dolt sql-server is not accepting connections: %s", di.ErrorMessage()), shutdownErr) } func (di *testDoltServer) IsRunning() bool { - return di.Cmd.Process != nil && di.Cmd.ProcessState == nil && di.db != nil && di.db.Ping() == nil + select { + case <-di.Waited: + return false + default: + } + return di.db != nil && di.db.Ping() == nil } func (di *testDoltServer) Shutdown() error { @@ -213,7 +229,6 @@ func (di *testDoltServer) Shutdown() error { } } <-di.Waited - <-di.StderrCaptured if killed && di.WaitError != nil { return nil } @@ -221,7 +236,7 @@ func (di *testDoltServer) Shutdown() error { } func (di *testDoltServer) ErrorMessage() string { - return di.StderrString + return di.OutputString } func (di *testDoltServer) DB() (*sql.DB, error) { @@ -248,17 +263,58 @@ func getFreePort() (string, error) { return fmt.Sprintf("%d", addr.Port), nil } -func preCheckEnvSetting(t *testing.T) string { +func createOpenAILLM(t *testing.T, rr *httprr.RecordReplay) *openai.LLM { + t.Helper() + + opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), + openai.WithEmbeddingModel("text-embedding-ada-002"), + openai.WithHTTPClient(rr.Client()), + } + if !rr.Recording() { + opts = append(opts, openai.WithToken("test-api-key")) + } + + llm, err := openai.New(opts...) + require.NoError(t, err) + + return llm +} + +func createGoogleAIEmbedder(t *testing.T, rr *httprr.RecordReplay) *embeddings.EmbedderImpl { t.Helper() - if openaiKey := os.Getenv("OPENAI_API_KEY"); openaiKey == "" { - t.Skip("OPENAI_API_KEY not set") + apiKey := os.Getenv("GOOGLE_API_KEY") + if !rr.Recording() { + apiKey = "test-api-key" } + llm, err := googleai.New( + context.Background(), + googleai.WithDefaultEmbeddingModel("gemini-embedding-001"), + googleai.WithHTTPClient(rr.Client()), + googleai.WithAPIKey(apiKey), + ) + require.NoError(t, err) + e, err := embeddings.NewEmbedder(llm) + require.NoError(t, err) + + return e +} + +func preCheckEnvSetting(t *testing.T) string { + t.Helper() + doltURL := os.Getenv("DOLT_CONNECTION_STRING") if doltURL == "" { di := newTestDoltServer(t) err := di.Start() + // The free port can be taken before dolt binds it; start on a new one then. + for attempt := 1; attempt < 3 && err != nil && strings.Contains(err.Error(), "already in use"); attempt++ { + t.Logf("dolt sql-server port %s is taken, starting on a new one", di.Port) + di = newTestDoltServer(t) + err = di.Start() + } if err != nil && strings.Contains(err.Error(), "Cannot connect to the Docker daemon") { t.Skip("Docker not available") } @@ -291,14 +347,18 @@ func cleanupTestArtifacts(ctx context.Context, t *testing.T, s dolt.Store, doltU } func TestDoltStoreRest(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -332,14 +392,18 @@ func TestDoltStoreRest(t *testing.T) { } func TestDoltStoreRestWithScoreThreshold(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -392,14 +456,18 @@ func TestDoltStoreRestWithScoreThreshold(t *testing.T) { } func TestDoltStoreSimilarityScore(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -438,14 +506,18 @@ func TestDoltStoreSimilarityScore(t *testing.T) { } func TestSimilaritySearchWithInvalidScoreThreshold(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -494,57 +566,64 @@ func TestSimilaritySearchWithInvalidScoreThreshold(t *testing.T) { require.Error(t, err) } -// note, we can also use same llm to show this test, but need imply -// openai embedding [dimensions](https://platform.openai.com/docs/api-reference/embeddings/create#embeddings-create-dimensions) args. +// Mixing embedders of different sizes in one collection is expected to fail +// on insert. Dolt's vector index, which spans the whole embedding table, is a +// proximity map: a key also sits on an inner level when its hash starts with +// 8 zero bits (1 key in 256; the key holds the random row uuid), and every key +// is filed under the closest key of the level above, by a distance that +// vectors of different lengths do not have. While the index is a single +// non-empty leaf, every edit reaches the root level, so Dolt rebuilds the whole index on each +// flush (ApplyMutationsWithSerializer calls rebuildNode), but +// ProximityMapBuilder.Flush builds a single level without taking a distance, +// and rows of both sizes coexist. What the first inner key changes is that the +// rebuild then files every row under the closest inner key by distance, so the +// 3072-dim Beijing row is compared with a 1536-dim inner key (or the 1536-dim +// rows with Beijing's) and the insert fails; once the index has inner keys, a +// new row is also compared with them on its way down. With the 11 documents +// alone an inner key comes in about 4% of runs. Adding rows of the OpenAI size +// until the index grows an inner level makes it certain: 8192 rows all stay on +// the leaf level with probability (255/256)^8192, about 1e-14. Verified with +// Dolt 1.81.1. The search compares only vectors of the query's size, so it +// still works on the collection. func TestSimilaritySearchWithDifferentDimensions(t *testing.T) { - t.Parallel() - ctx := context.Background() - doltURL := preCheckEnvSetting(t) - genaiKey := os.Getenv("GOOGLE_API_KEY") - if genaiKey == "" { - t.Skip("GOOGLE_API_KEY not set") - } - databaseName := makeNewDatabaseName() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY", "GOOGLE_API_KEY") + skipIfNoDolt(t) - // use Google embedding (now default model is gemini-embedding-001, with dimensions:3072) to add some data to collection - googleLLM, err := googleai.New(ctx, googleai.WithAPIKey(genaiKey)) - require.NoError(t, err) - e, err := embeddings.NewEmbedder(googleLLM) - require.NoError(t, err) + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() - db, err := sql.Open("mysql", doltURL) - require.NoError(t, err) + // Avoid issue with different view of request bodies for Google AI SDK + rr.ScrubReq(httprr.JsonCompactScrubBody) - store, err := dolt.New( - ctx, - dolt.WithDB(db), - dolt.WithEmbedder(e), - dolt.WithPreDeleteDatabase(true), - dolt.WithDatabaseName(databaseName), - ) - require.NoError(t, err) + parallelIfOwnServer(t, rr) - defer cleanupTestArtifacts(ctx, t, store, doltURL) + doltURL := preCheckEnvSetting(t) + ctx := context.Background() - _, err = store.AddDocuments(ctx, []schema.Document{ - {PageContent: "Beijing"}, - }) + // text-embedding-ada-002 embeds into 1536 dimensions. + e, err := embeddings.NewEmbedder(createOpenAILLM(t, rr)) require.NoError(t, err) - // use openai embedding (now default model is text-embedding-ada-002, with dimensions:1536) to add some data to same collection (same table) - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) + // Zero vectors of the OpenAI size, so the filler rows need no provider. + filler, err := embeddings.NewEmbedder(embeddings.EmbedderClientFunc( + func(_ context.Context, texts []string) ([][]float32, error) { + vectors := make([][]float32, len(texts)) + for i := range vectors { + vectors[i] = make([]float32, 1536) + } + return vectors, nil + })) require.NoError(t, err) - e, err = embeddings.NewEmbedder(llm) + + db, err := sql.Open("mysql", doltURL) require.NoError(t, err) - store, err = dolt.New( + store, err := dolt.New( ctx, dolt.WithDB(db), dolt.WithEmbedder(e), - dolt.WithPreDeleteDatabase(false), - dolt.WithDatabaseName(databaseName), + dolt.WithPreDeleteDatabase(true), + dolt.WithDatabaseName(makeNewDatabaseName()), ) require.NoError(t, err) @@ -564,6 +643,27 @@ func TestSimilaritySearchWithDifferentDimensions(t *testing.T) { }) require.NoError(t, err) + // gemini-embedding-001 embeds into 3072 dimensions. + _, err = store.AddDocuments(ctx, []schema.Document{ + {PageContent: "Beijing"}, + }, vectorstores.WithEmbedder(createGoogleAIEmbedder(t, rr))) + + fillerDocs := make([]schema.Document, 64) + for i := range fillerDocs { + fillerDocs[i] = schema.Document{PageContent: fmt.Sprintf("filler %d", i)} + } + for added := 0; err == nil && added < 8192; added += len(fillerDocs) { + _, err = store.AddDocuments(ctx, fillerDocs, vectorstores.WithEmbedder(filler)) + } + + // Which insert fails depends on the index, and so does the order of the + // sizes in the message. + var mysqlErr *mysql.MySQLError + require.ErrorAs(t, err, &mysqlErr) + require.Regexp(t, + `^attempting to find distance between vectors of different lengths: (1536 vs 3072|3072 vs 1536)$`, + mysqlErr.Message) + docs, err := store.SimilaritySearch( ctx, "Which of these are cities in Japan", @@ -574,14 +674,18 @@ func TestSimilaritySearchWithDifferentDimensions(t *testing.T) { } func TestDoltAsRetriever(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -622,14 +726,18 @@ func TestDoltAsRetriever(t *testing.T) { } func TestDoltAsRetrieverWithScoreThreshold(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -665,7 +773,7 @@ func TestDoltAsRetrieverWithScoreThreshold(t *testing.T) { llm, vectorstores.ToRetriever(store, 5, vectorstores.WithScoreThreshold(0.7)), ), - "What colors is each piece of furniture next to the desk?", + "What colors are all of the pieces of furniture next to the desk and the desk itself?", ) require.NoError(t, err) @@ -675,14 +783,18 @@ func TestDoltAsRetrieverWithScoreThreshold(t *testing.T) { } func TestDoltAsRetrieverWithMetadataFilterNotSelected(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -756,14 +868,18 @@ func TestDoltAsRetrieverWithMetadataFilterNotSelected(t *testing.T) { } func TestDoltAsRetrieverWithMetadataFilters(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -827,14 +943,18 @@ func TestDoltAsRetrieverWithMetadataFilters(t *testing.T) { } func TestDeduplicater(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -874,14 +994,18 @@ func TestDeduplicater(t *testing.T) { } func TestWithAllOptions(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + skipIfNoDolt(t) + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + parallelIfOwnServer(t, rr) + doltURL := preCheckEnvSetting(t) ctx := context.Background() - llm, err := openai.New( - openai.WithEmbeddingModel("text-embedding-ada-002"), - ) - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) require.NoError(t, err) diff --git a/vectorstores/dolt/testdata/TestDeduplicater.httprr b/vectorstores/dolt/testdata/TestDeduplicater.httprr new file mode 100644 index 000000000..86175aedd --- /dev/null +++ b/vectorstores/dolt/testdata/TestDeduplicater.httprr @@ -0,0 +1,1590 @@ +httprr trace v1 +248 34503 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 53 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["potato"]}HTTP/2.0 200 OK +Content-Length: 33548 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:09 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 83 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999999 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_6180db60b6d14a928fe7ce252e9617fb + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} diff --git a/vectorstores/dolt/testdata/TestDoltAsRetriever.httprr b/vectorstores/dolt/testdata/TestDoltAsRetriever.httprr new file mode 100644 index 000000000..93a8c064b --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltAsRetriever.httprr @@ -0,0 +1,6332 @@ +httprr trace v1 +340 101308 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 144 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["The color of the house is blue.","The color of the car is red.","The color of the desk is orange."]}HTTP/2.0 200 OK +Content-Length: 100351 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:47 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 149 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-qpwjk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999978 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_5a2edbff562045db88bcb7a9b06e27a0 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0045962376, + 0.00861834, + -0.008126223, + -0.0057255807, + -0.016656235, + 0.023255637, + -0.0021608942, + 0.0004629361, + 0.03417052, + -0.009558408, + -0.021224082, + 0.019343946, + 0.008006349, + -0.017110497, + -0.008088369, + -0.009735065, + 0.019672023, + -0.024353435, + 0.018031636, + -0.0012744544, + -0.03485191, + 0.028063232, + -0.0003330064, + -0.0025457542, + -0.0055268416, + -0.005293402, + 0.01669409, + -0.013539501, + 0.017047405, + 0.007836002, + -0.0042019137, + -0.01500323, + -0.011741384, + -0.009659355, + -0.010170398, + -0.0058580735, + -0.0010071029, + 0.0023943337, + -0.007186156, + 0.000008675122, + 0.01755214, + -0.0024795078, + 0.0055457694, + -0.030965455, + -0.0057445085, + 0.005832837, + 0.0017397564, + 0.0144227855, + -0.022713048, + 0.008290263, + 0.0053501846, + 0.026296662, + -0.0006660128, + -0.03437241, + 0.0062997164, + -0.011110466, + 0.0062050787, + 0.015596293, + 0.0025773, + -0.004785513, + 0.010145161, + -0.02176667, + -0.011899114, + -0.012328138, + -0.029602673, + -0.010511094, + -0.017905453, + -0.010498475, + 0.005618325, + 0.022511154, + 0.019268235, + 0.024782458, + 0.0139180515, + -0.001563888, + 0.012782399, + 0.013451172, + -0.023444913, + -0.012290282, + 0.0012602587, + 0.010908572, + 0.006561547, + -0.004507909, + -0.033287235, + 0.007507924, + 0.029224122, + 0.017791888, + -0.015911752, + 0.014902283, + -0.039899256, + 0.0029921287, + 0.024429144, + 0.041716296, + 0.016845511, + -0.008959035, + -0.009053674, + -0.014183037, + 0.011993751, + 0.029880276, + 0.006914861, + -0.026220951, + -0.00060213235, + 0.011318669, + -0.048025478, + 0.00761518, + -0.03015788, + 0.0017019013, + -0.0023186237, + -0.004255542, + 0.027432315, + -0.029577436, + -0.025337666, + 0.027508024, + 0.024782458, + -0.031520665, + -0.00094085647, + -0.00008300515, + 0.0006277634, + -0.011854949, + -0.0102397995, + 0.01654267, + 0.009911722, + 0.021817144, + 0.014637298, + 0.017640468, + -0.004946397, + 0.005485832, + -0.021968564, + -0.044113785, + -0.005362803, + -0.0021640488, + 0.009413296, + 0.021526922, + 0.015836041, + 0.0018312394, + -0.025640508, + -0.0038643728, + -0.026094768, + 0.028416546, + -0.024656275, + -0.00353945, + 0.009779229, + 0.019558458, + -0.023369202, + -0.0035993871, + 0.019836063, + 0.02861844, + 0.003400648, + -0.0028706768, + -0.0105174035, + -0.030258827, + 0.017779268, + -0.031596374, + 0.0141451815, + 0.020580545, + 0.020984333, + 0.0360128, + -0.008977963, + 0.012662524, + -0.03333771, + 0.013526882, + -0.025716217, + -0.0013304483, + 0.036441825, + -0.006362808, + 0.034321938, + 0.018839212, + 0.017564757, + 0.0049053873, + -0.028366074, + 0.0011963783, + -0.012403848, + 0.035810906, + -0.039571177, + 0.021640487, + 0.007886475, + 0.01523036, + -0.0057034986, + 0.0015607334, + -0.01669409, + -0.0049716337, + -0.041665826, + -0.0055299965, + 0.0111987945, + 0.006681422, + -0.0016798192, + 0.012946437, + 0.016138883, + -0.008353354, + 0.017817125, + 0.0018959086, + 0.021514304, + 0.004731885, + -0.0024479618, + -0.00040891374, + -0.6856312, + -0.017981162, + 0.010132543, + -0.02200642, + 0.02161525, + 0.021526922, + 0.026725687, + 0.0070284265, + -0.01577295, + -0.017211443, + -0.005914856, + -0.0013501645, + -0.010088379, + -0.0015402286, + 0.0032902374, + -0.0035236771, + 0.007829692, + 0.01008207, + 0.0049905614, + 0.005022107, + -0.0075647067, + -0.009324968, + -0.015066322, + 0.001839126, + 0.01577295, + 0.009823393, + 0.014788718, + 0.0016861283, + -0.028896045, + 0.014902283, + -0.015735095, + 0.03470049, + -0.0020094737, + 0.008719287, + 0.03263108, + 0.0047129574, + -0.02114837, + 0.036896084, + 0.021791907, + 0.013829722, + -0.0024952807, + -0.0036151602, + 0.019343946, + -0.00020209092, + -0.010126234, + 0.006255552, + 0.009501625, + -0.010933809, + 0.010334437, + 0.0074069775, + 0.00669404, + -0.009451152, + -0.00892749, + 0.021034807, + 0.021299792, + 0.00046254176, + 0.036492296, + 0.020795057, + -0.010151471, + -0.0066435663, + -0.00815146, + 0.0025268267, + -0.012485867, + -0.021400739, + -0.015129413, + 0.002026824, + -0.027785629, + -0.01608841, + -0.0141451815, + -0.005340721, + -0.00081625016, + 0.017097877, + -0.02294018, + 0.023053743, + 0.0026277734, + -0.0019590005, + 0.03480144, + -0.008877017, + -0.010801316, + 0.013135713, + 0.015343926, + -0.018019019, + -0.012126244, + -0.018813975, + 0.009028437, + -0.015697239, + -0.01885183, + -0.019911772, + 0.004432199, + -0.027104238, + 0.020214614, + -0.0074069775, + -0.014864428, + -0.025135772, + -0.013299751, + 0.009817084, + -0.0067508225, + 0.02015152, + 0.016138883, + -0.021905473, + -0.017577376, + -0.008971654, + 0.0007425116, + 0.010397528, + 0.03210111, + 0.012302901, + -0.004485827, + 0.023508005, + 0.0039022279, + -0.026246188, + 0.02215784, + -0.0056877257, + -0.015066322, + 0.0061956146, + -0.004763431, + -0.02360895, + 0.014940138, + 0.0076404167, + 0.02977933, + -0.013690921, + 0.02016414, + 0.0032586914, + -0.00073304784, + -0.003369102, + 0.0151041765, + 0.0052965567, + -0.010700369, + -0.0050725807, + -0.0048202137, + 0.00042547533, + 0.0031608993, + 0.011671983, + 0.022069512, + 0.009552099, + 0.013186187, + 0.003378566, + 0.00619246, + -0.008612031, + 0.031192586, + -0.007192465, + -0.014637298, + 0.014536351, + -0.01138807, + 0.0065110736, + -0.00946377, + -0.031949688, + -0.037981264, + -0.018978013, + -0.025097918, + 0.01692122, + -0.005851764, + -0.00074448326, + 0.0019858144, + 0.015608911, + -0.01162151, + 0.011224031, + 0.0012571041, + -0.0008667236, + -0.008397519, + 0.013514264, + 0.023419676, + 0.015899133, + -0.0026987516, + 0.006580475, + -0.01530607, + -0.013842341, + -0.018372333, + 0.013413317, + -0.01261205, + -0.022031657, + 0.007810765, + -0.004078885, + -0.013211423, + -0.016214592, + -0.01838495, + 0.006977953, + -0.03333771, + -0.033135813, + -0.004583619, + -0.012996911, + 0.01806949, + 0.015470109, + -0.004763431, + -0.0027397615, + 0.016530052, + 0.0074889967, + 0.037829842, + 0.032429185, + 0.0043060156, + 0.0071483008, + -0.0014771367, + 0.0144480225, + 0.0012768203, + 0.022183077, + 0.011640437, + -0.009375442, + -0.00077997235, + 0.009154621, + -0.004138822, + 0.014889665, + 0.02476984, + 0.0024905489, + 0.013678302, + -0.020366034, + -0.0027413387, + -0.042902425, + 0.020138903, + 0.002561527, + -0.001892754, + 0.005946402, + -0.019356564, + -0.02208213, + -0.01660576, + -0.013375462, + 0.009665663, + -0.012018988, + -0.005662489, + 0.006422745, + 0.009552099, + -0.006971644, + 0.006031576, + 0.00011908577, + 0.029022228, + -0.00438488, + -0.014460641, + -0.012239809, + 0.0004830466, + 0.011160939, + -0.014864428, + -0.010132543, + -0.021198845, + 0.0073123397, + -0.008107296, + 0.009507935, + -0.0028690996, + 0.0105174035, + 0.018296622, + -0.020252468, + 0.0013951174, + -0.0013170413, + 0.019179907, + 0.026296662, + 0.0017381791, + -0.0076845814, + 0.021817144, + -0.0049116965, + 0.010858099, + -0.00034877934, + -0.020504834, + 0.014864428, + -0.007753982, + -0.0049337787, + -0.014889665, + -0.0005788673, + 0.013375462, + -0.01953322, + 0.02685187, + -0.0056025516, + 0.026145242, + 0.017741414, + 0.03321152, + 0.0060662767, + -0.0007535527, + -0.007817074, + 0.00984232, + -0.0016048977, + -0.020631019, + -0.008283953, + -0.005794982, + -0.025968585, + -0.006100977, + -0.009482698, + 0.029224122, + -0.0015694086, + 0.0007488208, + -0.007331267, + 0.0021593168, + -0.0016656235, + 0.012170408, + -0.009880176, + -0.0078486195, + -0.023381822, + 0.0052460833, + 0.012599433, + -0.000050769184, + -0.009438533, + -0.0303093, + 0.02100957, + -0.015507964, + 0.012971674, + 0.026372373, + 0.0016672008, + 0.0063501894, + -0.008567867, + -0.00488646, + -0.02839131, + 0.0025362903, + -0.0027902348, + 0.015722476, + -0.017060023, + 0.008826543, + -0.0193818, + -0.007974803, + -0.0010165666, + 0.008069442, + 0.022296643, + 0.00885178, + 0.0149275195, + -0.012403848, + -0.022801377, + -0.029501725, + -0.0076277987, + 0.008006349, + 0.009104147, + -0.015293452, + -0.0052681654, + -0.025489086, + -0.02476984, + 0.024429144, + 0.013287133, + -0.00066522416, + -0.0055489237, + -0.01276978, + -0.0008895944, + 0.085602954, + -0.018612081, + 0.0021041115, + -0.001769725, + 0.023331348, + -0.017425954, + -0.016201975, + 0.0061829966, + -0.008347045, + 0.026448082, + 0.011413307, + -0.002197172, + 0.0069211703, + 0.012492176, + 0.00043217881, + -0.0014211428, + 0.024164159, + -0.0116152, + 0.012340756, + -0.019507984, + -0.026725687, + 0.0029495417, + 0.014725626, + 0.007829692, + -0.0040410296, + 0.008990581, + 0.012795017, + 0.0006581263, + 0.021413356, + -0.009627809, + -0.004861223, + 0.013981143, + -0.002235027, + -0.019457512, + -0.00091246516, + -0.020138903, + -0.03439765, + -0.007400668, + 0.01238492, + -0.026220951, + 0.029426016, + 0.012151481, + 0.008984272, + -0.009571026, + 0.002984242, + 0.012006369, + -0.0014637298, + 0.0412368, + -0.013022147, + -0.010183017, + 0.030889746, + -0.017123114, + 0.0014353384, + 0.00438488, + 0.013148331, + 0.015810804, + 0.005933784, + 0.005523687, + 0.01755214, + -0.029804567, + -0.0149275195, + -0.025842402, + -0.015899133, + 0.002908532, + -0.002946387, + -0.03886455, + -0.015091559, + -0.00082413666, + -0.022220932, + -0.015318689, + 0.025993822, + -0.011299741, + -0.018359713, + 0.01515465, + 0.024403907, + 0.022952797, + 0.002925882, + -0.018965395, + -0.019634169, + 0.02016414, + -0.012996911, + -0.0021246164, + 0.015041085, + 0.008839161, + -0.0041230493, + -0.0027350294, + 0.023318728, + -0.027255658, + -0.00792433, + 0.022914942, + 0.004823368, + 0.0019558459, + 0.030359775, + 0.009451152, + -0.008984272, + 0.0043817256, + -0.001984237, + 0.009116765, + -0.01669409, + 0.0024448072, + 0.010933809, + -0.031066403, + -0.013577355, + -0.004548919, + -0.0061041317, + 0.0025063218, + 0.010302891, + -0.0005694035, + -0.04138822, + 0.005302866, + 0.016807655, + -0.017135734, + 0.000028194148, + -0.030208353, + 0.003277619, + 0.023861319, + -0.019331327, + 0.017577376, + 0.0023659426, + -0.03538188, + 0.027205184, + -0.036366113, + 0.025123155, + 0.010763461, + -0.007356504, + 0.004744503, + 0.008895944, + -0.0059211655, + -0.016164118, + 0.0039274646, + 0.0022097903, + 0.00082255935, + -0.022145221, + -0.012946437, + -0.01969726, + -0.013047384, + 0.019444892, + 0.0047728946, + 0.00004029496, + -0.011255577, + -0.0111987945, + 0.011911732, + 0.0030883437, + -0.0017634158, + -0.024731986, + -0.016416486, + 0.00276973, + -0.0144480225, + -0.013552119, + 0.022750903, + 0.016731946, + -0.0076593445, + -0.001903795, + 0.022107366, + 0.006839151, + -0.009873867, + -0.017981162, + -0.004100967, + 0.02161525, + 0.029602673, + 0.006681422, + -0.00030402362, + 0.02176667, + -0.009552099, + -0.016290303, + -0.011968515, + 0.0075836345, + -0.0053911945, + -0.021425975, + 0.01962155, + 0.01631554, + 0.027861338, + 0.015457491, + 0.022271406, + 0.0056372522, + 0.015962224, + 0.0049653244, + -0.0027239884, + -0.015205123, + -0.037527002, + -0.01808211, + 0.0024243025, + -0.019672023, + 0.00423346, + 0.021943329, + -0.0035552229, + 0.010883335, + 0.01953322, + 0.0077792187, + 0.001205842, + 0.02439129, + -0.013665684, + 0.042347215, + -0.0028596357, + -0.0072807935, + -0.0058044456, + -0.008914871, + -0.011495326, + 0.008952727, + 0.0023359738, + 0.018498516, + 0.020366034, + -0.021943329, + -0.008208243, + 0.0033943388, + 0.019583695, + -0.0014006379, + -0.0057413536, + 0.005302866, + -0.012037915, + -0.018675173, + -0.018801356, + -0.012719307, + -0.043381922, + 0.003608851, + 0.010788698, + -0.028643677, + 0.022435443, + -0.005239774, + -0.020580545, + -0.008895944, + -0.0040284116, + 0.011829712, + -0.0040599573, + 0.023735136, + 0.0051829913, + -0.02801276, + -0.0150284665, + 0.011047374, + -0.0146499155, + -0.01515465, + 0.010832862, + 0.0036624789, + -0.012700379, + -0.0034038026, + 0.0110978475, + 0.006801296, + 0.012479558, + -0.011690911, + -0.009173548, + 0.0035205225, + 0.017716177, + -0.017955925, + 0.0074637597, + -0.008580484, + 0.025728837, + -0.0068265325, + -0.021741435, + 0.0051672184, + -0.011123084, + -0.015255597, + -0.009564717, + -0.025817165, + 0.012252428, + 0.004848605, + -0.008119915, + 0.0035899235, + 0.0107950065, + -0.012933819, + -0.0073817405, + -0.009104147, + 0.047066484, + 0.0040820395, + 0.012334446, + 0.015533201, + 0.026347136, + 0.0041640587, + -0.011608891, + 0.010353364, + 0.026220951, + -0.0010496898, + 0.0015701972, + -0.0071735377, + 0.05130625, + 0.021590013, + -0.009741374, + -0.005186146, + -0.014952756, + -0.02215784, + -0.013766631, + 0.0145994425, + -0.00087382144, + -0.015419636, + -0.0034101119, + -0.027861338, + -0.010277654, + -0.027810866, + -0.01300953, + 0.010776079, + -0.0031198894, + -0.016353395, + -0.013678302, + -0.021993801, + 0.027987523, + 0.02099695, + 0.00009715151, + -0.005785518, + 0.010050524, + -0.025211483, + 0.018183056, + -0.023104217, + 0.022485917, + -0.013375462, + 0.008447992, + 0.011791857, + -0.018473279, + 0.010599422, + -0.00042271506, + -0.0283156, + -0.04555228, + 0.009804466, + -0.009198785, + 0.012391229, + -0.0063217985, + -0.018612081, + 0.010750842, + 0.009110456, + -0.015444873, + -0.021791907, + 0.010536331, + -0.0060284217, + -0.0019022177, + 0.021943329, + -0.0140947085, + -0.0032050635, + 0.019041106, + -0.016820274, + -0.00033596382, + -0.0263219, + -0.012795017, + 0.016037935, + 0.025640508, + 0.000056092555, + -0.021918092, + 0.000246058, + -0.015356544, + -0.017905453, + 0.0051262085, + -0.005555233, + 0.0014960644, + 0.03591185, + 0.025186246, + -0.003962165, + 0.0054448224, + -0.02677616, + -0.009501625, + -0.021451212, + -0.021261936, + -0.016227212, + -0.027659444, + 0.00777291, + 0.016832892, + -0.0067318953, + -0.019861298, + 0.00078825315, + 0.0122335, + -0.0035741504, + -0.018498516, + 0.011413307, + 0.015659384, + 0.016668854, + -0.0054826774, + -0.0046277833, + 0.02161525, + -0.0016009544, + 0.005952711, + -0.0057508177, + 0.003839136, + 0.0020394425, + -0.01261836, + 0.021123135, + 0.012056843, + 0.0065741655, + -0.019369183, + 0.009135692, + 0.008416446, + 0.0052366196, + 0.012403848, + -0.008485847, + 0.010990592, + -0.008365973, + 0.012933819, + 0.008372282, + 0.0073438855, + 0.007671963, + -0.008290263, + -0.01823353, + -0.0128518, + 0.0014605751, + -0.011356524, + -0.00039294362, + 0.020731965, + 0.00021451213, + -0.022675192, + -0.0139937615, + -0.01323666, + -0.025198866, + -0.016176738, + 0.0065741655, + 0.001552847, + -0.0047918223, + 0.011571036, + 0.0023817155, + 0.011854949, + -0.0071987743, + 0.002176667, + -0.0137161575, + 0.00022614466, + -0.027533261, + -0.01769094, + 0.002523672, + -0.02670045, + -0.022637337, + -0.024782458, + 0.00004091109, + -0.0012839182, + -0.004324943, + -0.028567966, + 0.027205184, + 0.010372292, + -0.0108707175, + 0.0072303205, + -0.043104317, + -0.015091559, + 0.009571026, + -0.005063117, + -0.008719287, + -0.016290303, + 0.010687751, + 0.0033943388, + -0.0044353534, + -0.0057665906, + 0.010151471, + 0.015836041, + 0.0056246337, + 0.04063112, + 0.22591911, + -0.0003475964, + -0.00011977584, + 0.039217863, + 0.016984312, + 0.021564778, + 0.0144732585, + 0.017034786, + 0.00296216, + 0.015205123, + -0.0037634259, + -0.0050315713, + -0.013438554, + 0.014372312, + 0.00046372472, + -0.035129514, + -0.030334538, + -0.00861834, + -0.0063186437, + 0.007501615, + -0.019608932, + -0.026044294, + -0.0071419915, + -0.008990581, + 0.0029590053, + 0.006555238, + -0.01815782, + 0.014283983, + 0.024214633, + -0.0010796584, + -0.0018848676, + -0.035482828, + 0.010731915, + -0.003416421, + -0.007015808, + -0.0043407157, + 0.005501605, + -0.020883385, + 0.025602652, + 0.02685187, + 0.00040043576, + -0.0035615321, + -0.024467, + 0.0043407157, + -0.013653065, + 0.017148351, + -0.0059211655, + -0.00569088, + 0.008119915, + 0.008397519, + -0.024000121, + -0.021400739, + 0.009375442, + 0.047344085, + -0.0052271555, + 0.010927499, + 0.015760332, + -0.0021514304, + 0.017160969, + -0.0044195806, + -0.027937049, + 0.037880316, + -0.020921241, + 0.028138943, + -0.0010110461, + -0.002069411, + -0.015268216, + 0.0010930655, + 0.00853632, + -0.015596293, + 0.01538178, + 0.010012669, + -0.0012878614, + -0.007009499, + -0.0059747933, + -0.014990612, + 0.031142112, + 0.00626817, + 0.030914983, + 0.013690921, + -0.02393703, + 0.03000646, + -0.022183077, + -0.0011695642, + 0.0112745045, + -0.04010115, + 0.012119935, + -0.024517473, + 0.013539501, + 0.0020993797, + 0.011123084, + 0.0071672285, + 0.00037657918, + -0.0039747832, + 0.01984868, + 0.018208293, + 0.0139180515, + 0.027028527, + -0.028643677, + 0.0072240112, + -0.037350345, + -0.029224122, + 0.017905453, + 0.0051293634, + -0.012530032, + 0.008719287, + 0.017148351, + 0.0015694086, + 0.021325028, + -0.008977963, + 0.025754072, + -0.012637287, + 0.0030015924, + 0.000056536166, + 0.016719326, + 0.0001789244, + -0.0056057065, + -0.025060063, + -0.003940083, + 0.0076277987, + -0.020908622, + 0.0043438706, + -0.01515465, + 0.010788698, + 0.014940138, + -0.023280874, + -0.018637318, + 0.0103092, + 0.0010347056, + -0.048429266, + 0.0006498455, + 0.005318639, + 0.039646886, + -0.0034511215, + -0.0142966015, + 0.03437241, + 0.01577295, + -0.0335396, + -0.0112492675, + 0.002411684, + -0.00091246516, + -0.025640508, + -0.0041262037, + -0.016984312, + -0.0012665679, + -0.010094688, + 0.0064732186, + 0.00037993092, + -0.029526962, + -0.017981162, + -0.019949628, + 0.0011963783, + -0.017943308, + -0.011583654, + 0.020366034, + -0.02099695, + -0.019823443, + -0.012586814, + 0.008813924, + 0.029754093, + -0.010176707, + 0.019672023, + 0.022321878, + 0.0039116917, + -0.019571077, + 0.013564737, + -0.16050553, + 0.027280895, + 0.011123084, + 0.005318639, + -0.012479558, + -0.022826614, + 0.006091513, + 0.006485837, + -0.013678302, + 0.024050593, + 0.025261957, + 0.0083849, + -0.016984312, + 0.000029845378, + -0.024277724, + -0.0014053698, + 0.0008194047, + -0.0069211703, + 0.018119965, + 0.013337607, + 0.013148331, + -0.014940138, + 0.015558437, + 0.0014755594, + -0.0068265325, + -0.01007576, + -0.011766621, + 0.030284064, + -0.001716097, + -0.0315459, + -0.0073880497, + 0.0019053724, + 0.0069653345, + 0.0048139044, + 0.014586824, + 0.001315464, + -0.0017350245, + 0.0075647067, + -0.0075647067, + 0.0049337787, + 0.0108959535, + 0.0024369208, + 0.017564757, + 0.013072621, + -0.02730613, + 0.014586824, + 0.02977933, + 0.028870808, + -0.009501625, + -0.012391229, + -0.019104198, + -0.021905473, + -0.006031576, + -0.013653065, + 0.03533141, + 0.02307898, + 0.0048517594, + 0.012176718, + -0.00013919629, + -0.0055836244, + -0.03061214, + -0.009981123, + 0.004608856, + 0.0053281025, + 0.019596312, + -0.009110456, + 0.008574176, + 0.0052839383, + -0.02376037, + 0.012662524, + -0.013337607, + -0.03147019, + -0.013123094, + -0.0034416576, + -0.003501595, + 0.008340736, + -0.017804505, + -0.00015043451, + -0.0049653244, + -0.021211464, + 0.0020189376, + 0.037754133, + -0.031899214, + -0.024681512, + -0.017022168, + 0.020075811, + -0.0057508177, + 0.006504765, + -0.008668813, + -0.009501625, + 0.008725596, + -0.043432396, + -0.0038265176, + -0.024530092, + 0.02116099, + 0.020340797, + 0.017589994, + -0.001494487, + -0.0027192566, + -0.009217712, + 0.005041035, + -0.007671963, + -0.012479558, + 0.0028517493, + 0.036189456, + 0.0139180515, + 0.0036214693, + 0.02715471, + 0.0315459, + 0.022359734, + -0.00892749, + 0.015987461, + 0.012946437, + 0.013123094, + 0.0027933894, + -0.009343895, + 0.018170439, + -0.015444873, + -0.0029369232, + 0.005362803, + 0.048429266, + 0.0051293634, + -0.018448042, + 0.012454322, + 0.00031723347, + 0.0013541077, + -0.094839595, + -0.010649896, + 0.023848701, + 0.01253634, + 0.0032003315, + 0.0055646966, + -0.0070725908, + 0.03447336, + 0.019924391, + 0.018965395, + -0.0041356673, + -0.013539501, + 0.0060820496, + -0.026574265, + 0.010712988, + 0.0063186437, + 0.01115463, + -0.020302942, + -0.032656316, + 0.016706709, + -0.0027192566, + -0.006416436, + -0.013627829, + -0.008826543, + 0.0021482757, + -0.016492197, + -0.04209485, + 0.026498556, + 0.004918006, + 0.013362844, + 0.028694151, + 0.0020410197, + -0.008088369, + -0.0077035087, + -0.0021088433, + -0.0151041765, + 0.0100631425, + -0.008119915, + 0.01947013, + -0.019419655, + -0.0011601005, + -0.02339444, + 0.0017949617, + -0.041943427, + 0.011564727, + 0.00072042947, + -0.01731239, + 0.015583674, + -0.009911722, + -0.000672322, + -0.005375421, + 0.0108454805, + -0.0056593344, + 0.00010163695, + 0.025653126, + -0.01885183, + 0.014258747, + 0.019495366, + -0.046057016, + 0.007993731, + 0.0044385083, + 0.0057034986, + -0.00003728824, + 0.029097939, + -0.005457441, + -0.005653025, + -0.024668893, + -0.005533151, + 0.0073880497, + -0.03384244, + -0.018044256, + 0.033135813, + 0.0011246114, + 0.023684662, + -0.017791888, + -0.006201924, + -0.04461852, + 0.00077129726, + 0.020933859, + -0.02276352, + -0.01130605, + -0.013766631, + 0.007892784, + -0.026372373, + 0.0033375563, + 0.019747734, + 0.007507924, + 0.009817084, + 0.009552099, + 0.00031683914, + 0.018031636, + 0.023899173, + -0.0145742055, + -0.024517473, + -0.007394359, + 0.012012679, + -0.025817165, + 0.004918006, + 0.008132533, + -0.018183056, + -0.022713048, + -0.023142071, + -0.043028608, + 0.01916729, + -0.010914882, + -0.02292756, + 0.008403827, + -0.0144732585, + -0.0050063343, + -0.0140694715, + -0.021842381, + 0.023747753, + 0.0058233733, + 0.026599502, + -0.0030331383, + -0.013564737, + -0.0107445335, + 0.009741374, + -0.0136404475, + -0.0018028482, + 0.009028437, + -0.00016206707, + -0.010731915, + 0.002053638, + 0.011779239, + -0.0017208288, + -0.031066403, + 0.0036403968, + -0.006230315, + 0.010933809, + -0.03793079, + -0.024101067, + 0.006107286, + -0.025325049, + 0.0063501894, + 0.05070057, + -0.021602632, + -0.024214633, + -0.009280804, + 0.007861238, + 0.020782439, + -0.02617048, + -0.034448124, + -0.044139024, + 0.0016577371, + -0.02876986, + 0.0068454603, + 0.012359683, + 0.0009960618, + -0.0006502399, + 0.0073249578, + 0.0064511364, + 0.008365973, + 0.021665724, + -0.0065678563, + -0.008763451, + 0.0039810925, + -0.034220994, + -0.0022287178, + -0.0009810774, + 0.018599462, + -0.005116745, + 0.022410206, + -0.018763501, + 0.0056246337, + 0.0034668944, + 0.026372373, + -0.0043123243, + 0.017943308, + 0.019192526, + -0.0027097927, + -0.04146393, + 0.004533146, + -0.009047364, + 0.038687892, + -0.00041443427, + 0.024744604, + 0.00400002, + 0.014725626, + -0.011091539, + -0.013665684, + 0.030485958, + -0.0018343941, + 0.02407583, + -0.020605782, + 0.024113687, + 0.021287173, + 0.010176707, + -0.023142071, + 0.0015047394, + 0.0017854979, + 0.017438574, + -0.031949688, + 0.0024668893, + 0.013564737, + 0.010555258, + -0.009716137, + 0.004924315, + 0.008656195, + -0.0105931135, + 0.0030788798, + 0.06647352, + -0.011665674, + 0.0014881778, + -0.029552199, + -0.035028566, + -0.02685187, + 0.009451152, + -0.0068517695, + -0.0145742055, + 0.0058454555, + 0.0077981465, + 0.007041045, + -0.0017870752, + -0.0038896094, + 0.021968564, + -0.0077666007, + 0.017968545, + -0.01870041, + -0.011634128, + -0.004290242, + 0.032959156, + -0.010271345, + 0.008277644, + 0.0015938566, + -0.0071356827, + 0.002107266, + 0.0074448325, + 0.01776665, + -0.01130605, + 0.0016261912, + 0.011318669, + 0.011690911, + -0.0019274545, + -0.008492156, + 0.0016766646, + -0.020681491, + -0.0071735377, + 0.00977292, + 0.018776119, + 0.013602592, + 0.0424734, + 0.0062429337, + -0.041337747, + 0.015369163, + -0.00036534097, + 0.016630998, + 0.007930639, + 0.031646848, + 0.015167269, + -0.011287123, + -0.00024802962, + -0.0009692478, + 0.026902344, + 0.0014361271, + -0.03131877, + -0.021325028, + -0.021375502, + 0.026448082, + -0.031268295, + -0.0062366244, + -0.0066120205, + 0.017034786, + 0.022599483, + -0.0034290394, + -0.015457491, + -0.018107347, + 0.012984293, + -0.01770356, + -0.0056120157, + -0.006763441, + 0.006388045, + -0.0030709933, + -0.024668893, + 0.00043967098, + 0.004362798, + 0.0038801457, + -0.009457461, + -0.0043344065, + 0.001630923, + 0.011148321, + 0.002599382, + 0.033438653, + -0.008403827, + -0.006580475, + 0.0074195955, + 0.01123665, + -0.019142052, + -0.013135713, + -0.02147645 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.00089398306, + -0.00462804, + 0.0042670527, + -0.0047607105, + -0.017598893, + 0.003273567, + -0.024374345, + -0.025522098, + 0.0054086363, + -0.024312638, + -0.018931769, + 0.029347945, + -0.00042616535, + -0.018746648, + -0.011675002, + -0.019425428, + 0.024892684, + -0.012687, + 0.013587926, + -0.008262594, + -0.0074048643, + 0.017352065, + -0.029372627, + 0.011428174, + -0.007238255, + -0.007355498, + 0.02142474, + -0.012582098, + 0.03068082, + -0.008873495, + 0.008237911, + -0.024053467, + -0.0022800812, + -0.018117234, + -0.01122454, + -0.00754062, + 0.004739113, + -0.0063033905, + 0.00008147279, + -0.012150148, + 0.02151113, + -0.0002720902, + 0.001740143, + -0.01875899, + 0.0031362686, + -0.0052574533, + 0.007546791, + 0.010224883, + -0.0011215283, + 0.020894058, + -0.0047175153, + -0.0028323606, + -0.008151521, + -0.032852914, + 0.011496051, + -0.0066952314, + -0.007694888, + 0.033124425, + -0.022732932, + -0.013921144, + 0.0149825085, + 0.0007686403, + -0.00968186, + -0.0025608488, + -0.012384635, + -0.0065162806, + 0.017870406, + 0.0114405155, + -0.005812818, + 0.024756929, + 0.00745423, + -0.00065023964, + 0.013180658, + -0.0019345208, + -0.0083798375, + -0.023029128, + -0.029965017, + 0.003248884, + 0.016586896, + -0.003949261, + 0.010718541, + -0.0034093228, + -0.03127321, + 0.02655878, + 0.024682881, + 0.0031779208, + -0.044676013, + 0.0041528945, + 0.0017771674, + -0.0043842965, + 0.01165649, + 0.03314911, + 0.021992447, + -0.01636475, + -0.0024096663, + 0.0055845017, + 0.020474449, + 0.026237901, + -0.0015565641, + -0.023868345, + 0.01336578, + 0.0058745258, + -0.029718189, + 0.012322928, + -0.03616042, + -0.023596834, + 0.009064788, + 0.006744597, + 0.010132322, + -0.024300296, + -0.021807324, + 0.031075746, + 0.035987638, + -0.03675281, + 0.016846066, + 0.0029403481, + 0.012421659, + -0.009848469, + -0.02673156, + -0.0016167287, + 0.016154945, + 0.032877598, + -0.0011654948, + -0.014143291, + 0.024868002, + 0.0033445302, + -0.011347954, + -0.032359257, + 0.0068001337, + -0.0042824796, + -0.0018357892, + 0.0005187262, + -0.011415832, + 0.016006848, + -0.008972227, + 0.015044216, + -0.02853341, + 0.03872744, + -0.02133835, + -0.033469986, + 0.012150148, + 0.020338694, + -0.02132601, + 0.0056184405, + -0.00847857, + 0.020104205, + 0.012477196, + 0.011767563, + 0.0057233428, + -0.023436395, + 0.028434679, + -0.028829604, + 0.03956666, + 0.009496738, + 0.017512504, + 0.017450796, + 0.0057480256, + -0.01508124, + -0.02981692, + 0.013847096, + -0.00797257, + 0.011162832, + 0.024386685, + -0.0065779877, + 0.014686313, + 0.02365854, + 0.0115947835, + 0.0005488084, + -0.0043380163, + -0.0047144303, + -0.010132322, + 0.050698638, + -0.018536843, + -0.0021767216, + -0.0032612255, + 0.023510443, + 0.015007191, + 0.011551588, + -0.024374345, + -0.010471712, + -0.0039184075, + 0.0011222997, + 0.03386491, + 0.0052481974, + 0.017672943, + 0.013723682, + 0.012847439, + -0.01756187, + -0.0005977885, + -0.012020563, + 0.015179971, + 0.034852225, + 0.01062598, + -0.004362699, + -0.68993586, + -0.02211586, + 0.007546791, + -0.001740143, + 0.013415146, + 0.03386491, + 0.029347945, + 0.0034648594, + -0.016636262, + 0.0011747509, + -0.00736784, + 0.000043002205, + 0.0029372629, + -0.014291388, + 0.007787449, + -0.029347945, + -0.014994849, + 0.009817616, + -0.017500162, + 0.032532036, + -0.0117613925, + -0.019770987, + -0.021498788, + -0.0033291036, + 0.026015757, + 0.025299953, + 0.006991426, + 0.0030745612, + -0.0033167622, + 0.0023587577, + -0.012822757, + -0.0028863542, + -0.0040911874, + -0.008083643, + 0.036283836, + -0.013205341, + -0.01122454, + 0.031075746, + 0.012032905, + 0.031421307, + 0.013995193, + 0.014427143, + -0.00021192567, + -0.026805608, + -0.0029681164, + -0.011113467, + -0.0043318453, + -0.015636604, + 0.016673286, + 0.0029804579, + 0.008614325, + 0.0013591012, + 0.009885494, + 0.02571956, + 0.0050846734, + -0.006068903, + 0.025423367, + 0.015883433, + -0.026435364, + 0.00608433, + -0.0023834407, + 0.011434345, + -0.0010189401, + -0.021548154, + 0.0048039057, + 0.0053839535, + -0.0068803527, + 0.010897492, + 0.009299275, + 0.0042115166, + -0.016006848, + 0.003940005, + -0.010070615, + 0.0067816214, + 0.000030082261, + -0.005371612, + 0.041442554, + 0.012051417, + -0.00924991, + 0.019561183, + 0.018438112, + 0.007392523, + -0.020412741, + -0.008336643, + 0.020671912, + -0.025546782, + -0.033198476, + -0.013958169, + 0.017500162, + -0.010564273, + 0.016241336, + 0.029273896, + -0.021005131, + -0.0051309536, + -0.011094955, + 0.0064484025, + -0.0091511775, + 0.012421659, + 0.0077689365, + -0.0028863542, + 0.0046372963, + -0.030039065, + -0.010317444, + 0.009928688, + 0.019598207, + 0.01884538, + -0.021412399, + 0.002713574, + -0.003427835, + -0.023485761, + 0.028928336, + 0.011045589, + -0.013526218, + 0.03403769, + -0.012921488, + -0.025324635, + 0.015871093, + 0.014710996, + 0.022918055, + -0.04507094, + 0.016031532, + 0.006929719, + 0.00012987437, + 0.0114405155, + -0.0063620126, + -0.022560153, + 0.0029881713, + 0.008077472, + -0.015463824, + -0.029520726, + 0.02742268, + 0.0027922508, + 0.019178597, + 0.007016109, + 0.008645179, + -0.008435374, + 0.016648604, + 0.00063095614, + 0.011687344, + -0.017278016, + -0.017919771, + 0.014945484, + -0.018129576, + 0.008330472, + 0.0024852576, + -0.0066705486, + -0.03401301, + 0.0024405199, + -0.00062671374, + 0.0061151837, + -0.019252647, + -0.008805618, + -0.020585522, + -0.0044922843, + -0.011002394, + 0.0048902957, + -0.0226342, + -0.009712714, + -0.0039369194, + 0.006090501, + 0.021622203, + 0.014661631, + -0.011804587, + 0.0000605984, + -0.0112862475, + -0.011064101, + -0.0070901574, + 0.034062374, + -0.029545408, + -0.014587582, + 0.007923204, + -0.0140692415, + -0.013575585, + -0.008342814, + -0.019203281, + 0.00086235814, + -0.016253676, + -0.024473077, + -0.008540276, + -0.0028385313, + 0.009700372, + -0.005896123, + 0.0033815545, + -0.010348298, + 0.032186475, + 0.002978915, + 0.02571956, + 0.027644826, + -0.013118951, + 0.033815548, + -0.023238933, + -0.013069585, + -0.006615012, + 0.019647572, + -0.0031239272, + 0.00030390796, + -0.008885837, + -0.00033244755, + -0.009527592, + 0.014686313, + 0.01875899, + 0.012551244, + 0.022239275, + -0.020462109, + 0.027274583, + -0.005704831, + 0.008645179, + -0.019166257, + 0.017105237, + 0.034383252, + 0.0016367835, + -0.009033934, + -0.0048810397, + 0.004985942, + 0.007978741, + -0.0023464162, + 0.006892694, + 0.015278703, + 0.0030637626, + -0.019351378, + -0.02621322, + 0.031248527, + 0.03512374, + -0.040010948, + -0.019474793, + -0.010440858, + 0.017364407, + 0.013081927, + 0.0011678088, + -0.017055871, + -0.034210473, + 0.010082956, + 0.0016738079, + 0.0014192656, + -0.0034586887, + -0.00031875627, + 0.013674316, + -0.015315727, + 0.01901816, + -0.0056523797, + 0.015488507, + 0.02870619, + 0.020980448, + -0.018820696, + 0.017290358, + -0.011773734, + 0.022128202, + 0.011002394, + -0.009237568, + 0.022955079, + -0.013242366, + 0.0046403813, + -0.017031187, + -0.005220429, + -0.000036108355, + -0.022239275, + 0.04635445, + -0.0031779208, + 0.012174831, + 0.012785732, + 0.011884807, + 0.0042115166, + -0.00123183, + -0.008151521, + 0.000019440178, + 0.011162832, + -0.019203281, + -0.0034586887, + -0.00033726843, + -0.012748708, + -0.00030545064, + -0.016130263, + -0.0017864235, + -0.030088432, + 0.009077129, + 0.0024220077, + 0.010730882, + -0.003292079, + -0.000076218035, + 0.025065465, + 0.02168391, + -0.0152910445, + 0.017389089, + 0.02981692, + -0.019931426, + -0.027447363, + -0.037394565, + 0.0059855985, + -0.005621526, + 0.004430577, + 0.035025008, + 0.023029128, + 0.0181666, + 0.012896805, + 0.0008515594, + -0.003616042, + 0.019067526, + 0.005991769, + 0.018907087, + -0.014809729, + -0.005828245, + -0.015562556, + -0.032680135, + -0.0056431238, + 0.030433992, + 0.026830291, + 0.029347945, + 0.009811445, + 0.0042886506, + -0.0020286243, + -0.022498446, + -0.020474449, + -0.009749738, + -0.007386352, + -0.011347954, + -0.0018990391, + 0.008768593, + -0.009367153, + 0.024682881, + 0.016673286, + -0.0021921482, + -0.009811445, + 0.0037425417, + -0.004985942, + 0.07557898, + -0.0059269764, + 0.004695918, + 0.0019545755, + 0.007256767, + -0.013032561, + -0.024374345, + -0.02210352, + 0.0014084668, + -0.0022847091, + 0.0007239026, + -0.021943081, + -0.000053849173, + -0.010348298, + 0.0033105914, + -0.0017077468, + 0.0032828231, + -0.014032218, + 0.016006848, + -0.017722309, + -0.015871093, + -0.0027475131, + 0.001075248, + -0.017537186, + -0.0079170335, + -0.0056091845, + 0.017598893, + 0.005741855, + 0.020165913, + -0.020116547, + 0.0181666, + 0.012582098, + -0.015735336, + -0.016920114, + 0.006584158, + -0.013513877, + -0.0025253673, + -0.0037302002, + 0.011212198, + -0.005158722, + 0.015611921, + 0.008015766, + 0.0018728136, + -0.0065162806, + 0.0041004433, + -0.0054456606, + 0.00009458557, + 0.0037147736, + -0.013526218, + -0.02125196, + 0.02544805, + -0.0022245445, + -0.012687, + 0.0042207725, + -0.0026318121, + 0.014636948, + -0.028113801, + 0.0029079518, + -0.02107918, + -0.006584158, + -0.0011770648, + -0.0140692415, + -0.0008330472, + -0.00090709585, + -0.031766865, + -0.010212542, + 0.003119299, + -0.016303042, + -0.0071580354, + 0.00762701, + 0.0003278195, + -0.019573525, + -0.017080553, + 0.025670195, + 0.03435857, + 0.014254363, + 0.0018234478, + -0.017450796, + -0.001894411, + 0.023214249, + -0.003986285, + -0.007083987, + 0.0116071245, + -0.003350701, + -0.0062262565, + 0.006522451, + 0.013180658, + -0.020585522, + -0.012909146, + 0.014994849, + 0.02425093, + -0.0010073701, + 0.01833938, + -0.0068433285, + -0.016130263, + -0.0021042156, + 0.0016228994, + 0.00805279, + -0.01695714, + -0.0067260847, + 0.017981479, + -0.020634888, + -0.016611578, + -0.030656137, + 0.02347342, + -0.009120325, + 0.020499133, + -0.006121354, + -0.01669797, + 0.006436061, + -0.009502909, + -0.0065779877, + 0.0041775773, + -0.018154258, + 0.0032334574, + 0.012699342, + -0.01620431, + 0.024300296, + -0.0026626657, + -0.043096308, + 0.009428861, + -0.032063063, + 0.032186475, + 0.027521411, + 0.010150835, + 0.011422003, + -0.019511817, + -0.0061336956, + -0.015031874, + 0.011946514, + 0.009052446, + 0.018104892, + -0.010983882, + -0.010558102, + -0.009897835, + -0.015179971, + 0.01585875, + 0.020165913, + 0.006349671, + -0.010595126, + -0.023818979, + 0.024954392, + 0.02707712, + -0.011335613, + -0.02038806, + -0.014155632, + 0.01482207, + 0.02262186, + -0.027768241, + 0.017068211, + -0.0026333549, + -0.0028431593, + -0.02836063, + 0.0028693848, + 0.02312786, + 0.0020656486, + -0.025818292, + -0.0054610875, + 0.015229337, + 0.024781613, + 0.028409995, + -0.005297563, + 0.017327381, + -0.0096139815, + -0.008453887, + 0.009965713, + 0.0054641725, + 0.01568597, + -0.018438112, + 0.02406581, + 0.027052436, + -0.0038998951, + 0.003214945, + 0.013871779, + -0.0049304054, + 0.021980105, + 0.00013459883, + -0.0038998951, + -0.0005333816, + -0.036826856, + -0.0030622198, + 0.029027067, + -0.012736366, + 0.004146724, + -0.0006857213, + -0.003099244, + -0.0060966713, + -0.0044151503, + 0.005192661, + 0.020807669, + 0.015537873, + -0.019425428, + 0.011730539, + 0.0018758989, + -0.002883269, + -0.012970854, + -0.032013696, + -0.0009680317, + 0.015155288, + -0.0026009586, + 0.03616042, + 0.023152541, + 0.0073740105, + -0.017376747, + -0.0041004433, + 0.02947136, + 0.01490846, + -0.02947136, + 0.022350349, + -0.0045046257, + -0.019758645, + -0.016611578, + -0.020104205, + -0.039640706, + 0.002232258, + 0.005424063, + -0.039023634, + 0.017450796, + -0.01585875, + -0.016241336, + -0.001154696, + 0.01473568, + 0.015389776, + -0.029249214, + 0.022041813, + 0.00642989, + -0.026978388, + -0.021646887, + 0.01800616, + -0.009589299, + -0.0064052073, + 0.016784359, + 0.021042155, + -0.014957826, + -0.0016275274, + -0.007009938, + 0.0102187125, + 0.015722996, + -0.030063748, + -0.0012248879, + 0.012008221, + 0.015500849, + -0.021992447, + 0.0052667097, + 0.0010305103, + 0.006152208, + -0.014538216, + -0.015389776, + 0.0074048643, + -0.013057244, + -0.02742268, + 0.019499475, + -0.02665751, + -0.0020671913, + 0.00874391, + -0.026435364, + 0.008768593, + -0.019511817, + -0.007738083, + -0.004695918, + -0.018672599, + 0.033889595, + 0.014933143, + 0.030113114, + 0.007324645, + -0.011181345, + -0.0059424033, + -0.009996567, + 0.011662661, + 0.028558092, + -0.0115701, + -0.009996567, + -0.015871093, + 0.035000324, + 0.0076516927, + 0.0058004768, + 0.0023541297, + -0.009552275, + -0.026978388, + -0.0007929375, + 0.020128889, + -0.011434345, + -0.024127515, + 0.018462794, + -0.030532723, + -0.0009965713, + -0.029940333, + 0.003582103, + 0.015895775, + -0.0019283501, + -0.019339036, + 0.003788822, + -0.01208844, + 0.0052142586, + 0.0060874154, + -0.009620152, + 0.018277673, + 0.010261907, + -0.024090491, + 0.012316757, + -0.009262251, + 0.036925588, + 0.00950908, + 0.011366466, + 0.020881716, + -0.01824065, + 0.025250586, + -0.00079910824, + -0.01851216, + -0.009157348, + 0.022214592, + -0.007694888, + 0.009453543, + -0.01671031, + 0.0050599906, + 0.01748782, + 0.024756929, + -0.005766538, + 0.00086081546, + 0.012699342, + -0.01669797, + -0.0066890605, + 0.021906056, + -0.013242366, + -0.0043441867, + -0.0088303005, + -0.012736366, + 0.002724373, + 0.0010567359, + -0.018129576, + -0.020857034, + 0.010878979, + -0.0035018837, + -0.02099279, + -0.007164206, + -0.020104205, + -0.01208227, + 0.012612952, + 0.008811789, + 0.0071271816, + 0.006460744, + 0.025818292, + 0.0006012595, + 0.01620431, + -0.029101117, + 0.0069790846, + 0.0077689365, + 0.00668289, + -0.014254363, + -0.016340068, + 0.0008322759, + 0.010274249, + 0.025768926, + -0.03307506, + -0.017709967, + 0.0046897475, + -0.022523127, + 0.0034000669, + -0.0014570613, + 0.011977368, + 0.020215278, + -0.010033591, + -0.011773734, + 0.0033105914, + 0.004720601, + 0.0074665714, + -0.0019345208, + 0.010996223, + -0.0018990391, + -0.002030167, + 0.011675002, + 0.010866638, + -0.017426113, + -0.018919427, + 0.0076516927, + 0.014427143, + 0.033124425, + 0.019005818, + -0.022436738, + 0.033445302, + -0.014883777, + 0.004038736, + 0.017919771, + 0.02870619, + 0.0020224536, + -0.008552618, + -0.02579361, + -0.0069544017, + 0.013982852, + -0.0060781594, + -0.014488851, + 0.0028693848, + 0.0134521695, + -0.013378121, + -0.016858408, + -0.0030884454, + -0.024645856, + -0.017290358, + -0.002540794, + 0.009101812, + -0.025744244, + 0.013686657, + 0.010311273, + -0.0028092202, + -0.00552588, + -0.008669862, + 0.0013459884, + 0.005707916, + -0.0100644445, + -0.0028308178, + -0.0017771674, + -0.008034278, + 0.0014439485, + -0.023954736, + 0.003341445, + 0.017092895, + -0.0143654365, + -0.03751798, + 0.031001698, + -0.00951525, + -0.018549185, + 0.013094268, + -0.020375717, + -0.021622203, + 0.013822413, + -0.0063805245, + -0.0028431593, + -0.010342127, + 0.008435374, + 0.0015149118, + -0.005004454, + -0.02373259, + -0.001538052, + 0.028212532, + -0.006744597, + 0.03147067, + 0.22056621, + 0.002096502, + 0.0037672247, + 0.027101804, + -0.017635917, + 0.033445302, + 0.0062108296, + -0.010249566, + -0.010582785, + 0.012045246, + 0.009194373, + 0.01191566, + -0.028089117, + 0.0032427134, + 0.013217682, + -0.007941716, + -0.012847439, + -0.015957482, + -0.022066494, + -0.028508727, + -0.016451139, + 0.0014177229, + -0.0116071245, + 0.0025917024, + 0.012069928, + -0.000014125164, + 0.0037086029, + 0.025571464, + 0.012921488, + -0.0021366118, + -0.01627836, + -0.00951525, + 0.015821727, + -0.0067137433, + -0.011082613, + -0.003915322, + 0.00057966204, + 0.014957826, + 0.013513877, + 0.023325322, + 0.020597864, + 0.009274593, + 0.015303385, + -0.026805608, + -0.016080897, + 0.006127525, + -0.016870748, + -0.01740143, + 0.0030406222, + 0.0022091179, + -0.02014123, + -0.024287954, + 0.017413773, + 0.04823035, + -0.004223858, + 0.005390124, + 0.027101804, + 0.005760367, + 0.0074912542, + -0.004257797, + -0.022325665, + 0.008731569, + -0.005982513, + 0.011650319, + -0.0016738079, + 0.015266362, + -0.02184435, + 0.01422968, + 0.011958855, + -0.016056214, + 0.02270825, + -0.008935203, + 0.015204654, + -0.0021288984, + 0.0034741154, + -0.0031686649, + 0.0106815165, + -0.004334931, + 0.032063063, + 0.014316071, + -0.0026379828, + 0.008355155, + 0.003230372, + -0.0032365427, + -0.0062509393, + -0.021646887, + 0.0039523463, + 0.011545417, + 0.028311264, + 0.0016861493, + 0.010638322, + -0.005967086, + -0.010576614, + -0.027620142, + 0.008262594, + 0.025966391, + 0.0055752457, + 0.023596834, + 0.009632494, + 0.0021474105, + -0.028138483, + -0.020536156, + 0.010514907, + -0.0007084758, + -0.0067199143, + 0.014044559, + 0.0041960897, + 0.004763796, + 0.020696595, + -0.024399027, + 0.020351036, + -0.024584148, + 0.022300983, + -0.0072135716, + 0.026410682, + -0.0057788794, + 0.005056905, + -0.02433732, + -0.0034864568, + 0.0039523463, + -0.0045601623, + -0.001086818, + 0.00711484, + -0.008645179, + -0.015969824, + -0.021523472, + -0.031914964, + 0.010298932, + -0.0122118555, + -0.020684253, + 0.003264311, + -0.015661288, + 0.04475006, + -0.0021304411, + -0.008441545, + 0.016191969, + -0.0053345873, + -0.01182927, + 0.006007196, + -0.004140553, + 0.01646348, + 0.0009742024, + 0.005680148, + -0.009546104, + -0.013550902, + -0.009194373, + -0.0054209777, + -0.015994506, + -0.043392505, + -0.008170034, + -0.01988206, + -0.010786419, + -0.019598207, + -0.009725055, + 0.012002051, + -0.014994849, + -0.0363332, + 0.0019345208, + 0.0028909824, + 0.030878283, + -0.009737397, + 0.020276986, + 0.013230024, + -0.009996567, + -0.008725398, + -0.018462794, + -0.15560088, + 0.019388402, + 0.0050846734, + -0.007904693, + -0.009836128, + -0.011724368, + 0.018796014, + 0.015019532, + -0.019339036, + 0.03016248, + 0.027546095, + -0.016722651, + -0.03727115, + -0.012489538, + 0.012810415, + -0.00027131886, + -0.0021258132, + 0.023522785, + 0.0035759322, + 0.008355155, + 0.0049211495, + -0.028780239, + 0.020116547, + 0.0011153576, + -0.011366466, + 0.0029372629, + -0.0031810063, + 0.027792923, + -0.015105923, + -0.0181666, + -0.007670205, + -0.014513534, + 0.011428174, + 0.029841602, + -0.0037980783, + -0.00024200793, + -0.023251273, + 0.0045138816, + -0.017981479, + 0.019770987, + -0.015611921, + 0.009021593, + -0.000009364549, + 0.0047853934, + -0.010039762, + 0.031643454, + 0.015797043, + 0.012822757, + -0.0021798068, + -0.013007878, + 0.0061645494, + -0.015624263, + -0.0114528565, + -0.017179284, + 0.046329767, + 0.03240862, + 0.0058251596, + 0.021449422, + 0.011699685, + 0.019203281, + -0.016241336, + -0.0036407248, + 0.018388746, + 0.0021690081, + 0.015611921, + -0.024028784, + 0.018203624, + 0.006676719, + -0.029101117, + 0.015241679, + -0.0034926275, + -0.009033934, + -0.012921488, + -0.021967763, + 0.0016290701, + 0.0055752457, + -0.020659572, + 0.015130606, + -0.006608841, + -0.026879657, + -0.0013668145, + 0.045712695, + -0.0009680317, + -0.018438112, + -0.0076455222, + 0.012748708, + 0.017981479, + -0.008410691, + -0.013155975, + -0.005735684, + 0.00014520476, + -0.043738063, + 0.023325322, + -0.037246466, + 0.016549872, + 0.010872809, + -0.016944798, + -0.0011894063, + -0.0029125798, + -0.0042732237, + -0.0017092895, + -0.0031285551, + -0.024275612, + -0.0019036671, + 0.010126152, + 0.021474106, + 0.017956795, + 0.01954884, + 0.04114636, + 0.025090149, + -0.008935203, + 0.015229337, + 0.013353438, + 0.028039752, + -0.0030344515, + 0.0047761374, + 0.023461077, + -0.0091511775, + -0.0076455222, + 0.01464929, + 0.03914705, + -0.01996845, + 0.010440858, + 0.014513534, + 0.009990396, + -0.020770645, + -0.09379494, + -0.027373314, + 0.0034556033, + 0.0012865951, + 0.007448059, + 0.0217703, + -0.0054364046, + 0.0115947835, + -0.004732942, + 0.014994849, + -0.00685567, + -0.020869376, + -0.017919771, + -0.012785732, + 0.025040783, + 0.0033599571, + 0.024004102, + -0.011724368, + -0.03830783, + 0.010089127, + -0.020178255, + -0.00951525, + -0.021153228, + 0.006152208, + -0.0014161803, + -0.010601297, + -0.04050461, + 0.016636262, + 0.010891321, + 0.0065101096, + -0.0041436385, + 0.010039762, + 0.01594514, + -0.022584835, + -0.014081583, + -0.013834755, + -0.0140569005, + -0.013513877, + 0.011175174, + -0.03418579, + -0.0018033929, + 0.00008282263, + 0.004393553, + -0.027348632, + -0.018055527, + 0.00847857, + -0.0024405199, + 0.020795327, + 0.0017200882, + -0.00968186, + -0.019215623, + 0.017253334, + -0.0030822747, + 0.0034432618, + 0.030656137, + -0.024522442, + 0.02082001, + 0.005535136, + -0.031569403, + 0.011070272, + -0.0015071984, + 0.00924991, + 0.018487478, + 0.02312786, + -0.017500162, + -0.006590329, + -0.016599238, + 0.0123661235, + 0.019647572, + -0.029890968, + -0.009286934, + 0.010095298, + -0.020289328, + 0.004779223, + -0.010514907, + 0.00056539226, + -0.03050804, + -0.015525532, + 0.020894058, + -0.008151521, + -0.009219056, + -0.007898522, + 0.0029295494, + -0.035469297, + -0.018055527, + 0.0250161, + 0.0053438437, + -0.027546095, + -0.0046156985, + -0.005896123, + 0.0012326014, + 0.031692818, + 0.02347342, + -0.033198476, + -0.026706876, + 0.023559809, + 0.000008370244, + 0.017092895, + -0.015463824, + -0.011835441, + -0.00745423, + -0.018610891, + -0.032951646, + 0.0167967, + -0.009743567, + -0.029150482, + 0.0025809037, + -0.008774764, + 0.009398007, + -0.018833037, + -0.008620496, + 0.022288641, + -0.021461764, + 0.0019391488, + 0.0022384287, + -0.009638665, + -0.0344573, + 0.020931082, + -0.00084307464, + 0.007293791, + -0.00736784, + -0.0066890605, + -0.005655465, + 0.012785732, + -0.00823174, + -0.008768593, + -0.010582785, + 0.004507711, + 0.006254025, + 0.02880492, + -0.019215623, + -0.018018503, + 0.027447363, + -0.012909146, + 0.011175174, + 0.02579361, + -0.02056084, + -0.024756929, + 0.0017000334, + 0.01054576, + 0.008281106, + -0.02406581, + -0.00720123, + -0.0317175, + 0.009206714, + -0.009953371, + -0.010101469, + 0.001460918, + -0.023707906, + -0.0044213207, + 0.0022785384, + 0.017524846, + 0.0137483645, + 0.023868345, + -0.028730873, + -0.007318474, + -0.0062509393, + -0.03102638, + 0.0008723856, + 0.0013297902, + -0.006701402, + -0.015821727, + 0.02665751, + -0.0067569385, + 0.001011998, + -0.014846752, + 0.020696595, + -0.0037949928, + -0.009089471, + -0.0039585168, + -0.004276309, + -0.02511483, + -0.017759332, + 0.008348985, + 0.019055184, + 0.0051463805, + 0.021918397, + -0.015537873, + -0.0072197425, + -0.021634545, + -0.009410348, + 0.007269108, + 0.002695062, + -0.006349671, + -0.035000324, + -0.00094334886, + 0.03699964, + 0.019561183, + -0.013847096, + 0.0007624696, + -0.0021875203, + -0.00075398484, + -0.039048318, + 0.007170377, + -0.0018280759, + -0.0008176204, + -0.013958169, + -0.0046588937, + -0.006272537, + -0.008367497, + 0.004810076, + 0.060522422, + 0.009058617, + 0.0031424393, + -0.025398685, + -0.03418579, + -0.0041498095, + 0.015179971, + -0.001009684, + -0.0023063067, + -0.0126746595, + -0.023448735, + 0.019993134, + -0.022905713, + -0.006374354, + 0.020523814, + 0.003119299, + 0.00066836615, + -0.01721631, + -0.01285978, + -0.024300296, + 0.03857934, + -0.008207058, + 0.02700307, + -0.00968186, + 0.016117921, + 0.02887897, + 0.002729001, + 0.0126746595, + -0.010638322, + 0.010144664, + 0.0044953697, + 0.026929023, + 0.0006228571, + 0.0015642776, + -0.0017231735, + -0.036456615, + 0.000027286153, + 0.011644149, + 0.015871093, + -0.0060565616, + 0.044700697, + -0.0012611409, + -0.04072675, + 0.02766951, + -0.0075961566, + -0.0006085873, + 0.024090491, + -0.0053932094, + -0.013575585, + -0.008095984, + 0.0005711773, + 0.01173671, + 0.018055527, + 0.00565855, + -0.025262928, + -0.0045601623, + -0.020782985, + 0.0075035957, + -0.033692133, + -0.0209064, + 0.014081583, + 0.013180658, + 0.015216996, + 0.0062355124, + 0.0067877923, + -0.017500162, + 0.017858064, + -0.0023541297, + 0.006368183, + -0.0011153576, + 0.0039369194, + 0.014587582, + -0.042355824, + -0.013020219, + 0.0028724703, + 0.0005954745, + -0.018018503, + -0.021227278, + 0.008632838, + 0.02031401, + 0.0004061105, + 0.041417874, + -0.016253676, + -0.03203838, + 0.014303729, + -0.0027274583, + -0.018314697, + -0.019092208, + -0.01714226 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.013982197, + -0.018476475, + -0.005729884, + -0.023803027, + 0.0031706425, + 0.009507126, + -0.044174526, + -0.0043758387, + 0.01791309, + -0.02065319, + 0.010851568, + 0.010934795, + -0.016222933, + 0.019359965, + -0.024520062, + -0.0053873714, + 0.03178005, + -0.0010819557, + 0.010729928, + -0.022381758, + -0.045480553, + 0.0045486954, + -0.020665996, + 0.017695418, + -0.016619865, + 0.0010731529, + 0.015685158, + -0.015185793, + 0.026453499, + 0.010755536, + 0.02481456, + -0.012765798, + 0.017285684, + -0.037337076, + -0.040947862, + 0.017093621, + -0.0021639115, + 0.010064109, + -0.0013468429, + -0.020627582, + 0.008495593, + 0.0055666305, + -0.003665205, + -0.0038092525, + -0.007996229, + 0.013559658, + 0.013918176, + 0.010256172, + -0.008854112, + 0.010320193, + -0.0048271874, + 0.030858146, + -0.0041229557, + -0.0043150187, + 0.01831002, + -0.025621224, + -0.00086028286, + 0.01782346, + -0.020947687, + -0.016709493, + 0.012714581, + -0.0020694805, + 0.005134488, + -0.0097312, + -0.0075928965, + 0.010204955, + -0.0059027406, + -0.004638325, + -0.0038860778, + 0.0057522915, + 0.02932164, + 0.029372858, + 0.00069662905, + 0.0151473805, + 0.0032106556, + 0.013726113, + -0.0042541986, + -0.0020390705, + -0.0048303884, + -0.017503355, + 0.0042894105, + -0.012977066, + -0.026171805, + -0.0008050647, + 0.027196143, + 0.011869502, + -0.002901754, + 0.0011355734, + -0.031088622, + -0.012035958, + -0.005256128, + 0.029424075, + 0.032471478, + -0.0012075971, + -0.013598071, + 0.016427802, + 0.022368954, + 0.020000177, + 0.005729884, + -0.029065557, + 0.0048976103, + 0.014545582, + -0.03836141, + 0.0026472704, + -0.036824908, + -0.015531506, + 0.015557115, + -0.012573734, + 0.027477834, + -0.03211296, + -0.020269064, + 0.0089885555, + 0.011082044, + -0.020461127, + -0.0070487177, + -0.020025784, + 0.017157642, + -0.0084315725, + -0.017861873, + -0.015697962, + 0.014558387, + 0.037337076, + 0.016824732, + -0.023226837, + 0.027247358, + 0.0114149535, + -0.01256093, + -0.013329183, + 0.0060243807, + -0.0002958973, + 0.011037229, + 0.007829774, + 0.01009612, + 0.017554572, + -0.0070295115, + 0.010179347, + -0.009058978, + 0.03157518, + 0.007855383, + -0.029961852, + 0.01523701, + 0.02834852, + -0.0064757294, + -0.0077337427, + -0.004628722, + 0.030550845, + 0.02025626, + -0.016466213, + 0.0021383031, + 0.00906538, + 0.0049616313, + -0.024507258, + 0.019897742, + 0.013546854, + 0.022983557, + 0.0033098883, + -0.011645429, + -0.0093662795, + -0.020115415, + -0.016094891, + -0.0067926333, + 0.0061332164, + 0.028655821, + 0.002460009, + 0.030730104, + 0.019718483, + 0.009711993, + 0.019001449, + 0.0012700176, + 0.0035115546, + -0.001566115, + 0.035877395, + -0.010569875, + 0.014929709, + 0.0047215526, + 0.010544267, + 0.012048761, + 0.003950099, + -0.014251086, + 0.0031978514, + -0.019001449, + -0.0023671784, + 0.013406008, + 0.005432186, + 0.0010955603, + -0.009756808, + 0.010441833, + -0.020858059, + 0.012208814, + -0.013149924, + 0.014609603, + 0.018348433, + 0.0051024775, + -0.01654304, + -0.6912225, + -0.040282045, + 0.0114789745, + -0.0017381716, + 0.0023895856, + 0.03779803, + 0.005845122, + 0.012580137, + 0.0074264416, + -0.026069371, + 0.0063572903, + 0.008860514, + 0.013092305, + -0.0029545715, + 0.007080728, + -0.030192327, + -0.0099872835, + 0.015749179, + -0.0035819777, + 0.014327911, + -0.009071783, + -0.004180575, + -0.028655821, + -0.0047919755, + 0.020153826, + 0.018258803, + 0.010998816, + -0.0097376015, + -0.0056914715, + 0.020691603, + -0.0045358916, + -0.0046095154, + -0.017951502, + -0.020128218, + 0.038335804, + 0.0019030257, + -0.015172989, + 0.008194694, + -0.008041044, + 0.025185881, + -0.0027897172, + 0.015774786, + -0.0015805197, + -0.014686429, + -0.010627494, + -0.005720281, + 0.0057010744, + -0.0014436747, + 0.033214122, + -0.00071423483, + 0.020819645, + 0.003068209, + 0.023700593, + -0.005480202, + 0.0148400795, + -0.0010651503, + 0.030192327, + 0.0151473805, + 0.0063092746, + -0.007195966, + -0.019564833, + 0.012733787, + -0.029577725, + -0.009654375, + -0.012516115, + 0.00413576, + -0.032164175, + -0.017631397, + -0.0015269021, + -0.0019542426, + 0.006078799, + 0.007458452, + -0.011178075, + 0.029859418, + 0.01651743, + 0.0022791494, + 0.026120588, + -0.01788748, + 0.021395834, + 0.012554528, + 0.0018069941, + 0.003918088, + -0.017324096, + -0.009142206, + 0.027759528, + -0.021254988, + -0.029526507, + -0.02131901, + 0.019475203, + -0.011395747, + 0.033956766, + 0.019641658, + 0.00074744574, + -0.0029673756, + -0.006274063, + 0.014635212, + -0.014443149, + 0.0005897939, + 0.0031306294, + -0.0058003073, + 0.014468757, + -0.035288405, + -0.0016821531, + -0.0015725171, + 0.039846703, + 0.0045230873, + -0.026146198, + 0.033470206, + 0.019808114, + -0.017503355, + 0.019180706, + -0.011747863, + -0.0246353, + 0.0062484546, + 0.0101729445, + -0.024750538, + 0.046223197, + 0.009084587, + 0.011594213, + -0.003205854, + 0.009379084, + 0.0065525547, + -0.00052177155, + -0.014622408, + 0.0006009976, + -0.004820785, + 0.00044174524, + -0.016107697, + -0.027913177, + -0.0037356282, + 0.015531506, + -0.009475116, + 0.009968078, + 0.0053809695, + 0.0030345977, + -0.003841263, + 0.005976365, + -0.017938698, + 0.02578768, + -0.029961852, + -0.025736462, + -0.01073633, + -0.013879764, + -0.013585267, + -0.00032290618, + -0.009103794, + -0.03093497, + -0.0077721556, + -0.019231923, + 0.021447051, + -0.033700682, + -0.021639114, + -0.017144836, + 0.0021879193, + -0.006405306, + -0.0040877443, + -0.022817103, + 0.003543565, + -0.0017749836, + 0.02530112, + 0.008457181, + 0.003469941, + -0.01548029, + -0.00013364395, + -0.00906538, + -0.040077176, + -0.009411095, + 0.037337076, + -0.014481561, + -0.022343347, + -0.006213243, + -0.002821728, + 0.0007470456, + -0.023700593, + -0.024891384, + -0.011773471, + -0.025749266, + -0.023303661, + 0.00018245999, + -0.016248543, + 0.014929709, + 0.010268976, + 0.005598641, + -0.01921912, + 0.035288405, + -0.0067862314, + 0.019795308, + 0.03567253, + -0.0020822845, + 0.01937277, + -0.008405964, + -0.0072791935, + -0.007925806, + -0.011382943, + 0.016094891, + -0.0023031572, + -0.0036524008, + 0.006181232, + 0.0006033984, + -0.00037952478, + 0.013559658, + -0.0044174525, + 0.019078273, + -0.02040991, + 0.01970568, + -0.013265162, + 0.01256093, + -0.002040671, + 0.015505899, + 0.03613348, + 0.002983381, + -0.02259943, + 0.0027513045, + 0.0018566104, + 0.017785048, + -0.00103394, + -0.012330454, + 0.0147120375, + -0.010864372, + -0.014699233, + -0.005419382, + 0.0085532125, + 0.043841615, + -0.012746591, + -0.014558387, + -0.013341987, + 0.03925771, + 0.011357334, + 0.0023879851, + -0.008137075, + -0.028758256, + -0.0025624426, + -0.01243929, + 0.00018986243, + -0.016824732, + -0.0049168165, + 0.00927665, + -0.03129349, + 0.014430345, + 0.011440562, + 0.010640299, + 0.0422795, + 0.032036133, + -0.017925894, + 0.022548214, + -0.020448323, + 0.026299847, + 0.015621136, + -0.0206788, + 0.01426389, + -0.018911818, + -0.010185749, + -0.017644202, + 0.015672352, + 0.022676256, + 0.0028569393, + 0.039488185, + 0.003354703, + 0.0270681, + 0.01749055, + -0.016389389, + -0.011101251, + 0.01475045, + -0.017349705, + 0.003841263, + -0.0040557333, + -0.008700461, + 0.021639114, + -0.007311204, + -0.013393204, + -0.004823986, + 0.00094911206, + 0.016978383, + -0.003908485, + 0.0018149968, + -0.022215305, + -0.011626223, + 0.0031338304, + 0.022164088, + 0.010845166, + 0.00095231313, + -0.021088533, + 0.009199825, + 0.012087175, + 0.0089885555, + -0.021178164, + -0.025646832, + 0.021459855, + -0.0062452536, + 0.011216488, + 0.023162816, + 0.023777418, + 0.01402061, + 0.003482745, + -0.0008050647, + -0.02536514, + 0.0047759702, + -0.010134532, + 0.0033995179, + -0.002375181, + -0.00939829, + -0.015685158, + -0.026555931, + 0.0016949573, + 0.0011403749, + 0.027733918, + -0.009468714, + 0.006837448, + -0.02609498, + -0.011421355, + 0.008745275, + -0.0058131116, + 0.0014132647, + 0.0032490683, + -0.019027056, + -0.0012388073, + -0.029065557, + -0.010550669, + 0.024788952, + 0.022061653, + 0.016875949, + -0.01928314, + -0.01158781, + -0.0032490683, + 0.0684257, + 0.0055826358, + -0.009161413, + 0.010717124, + 0.010192151, + -0.016005263, + -0.016261347, + 0.0043182196, + -0.00802824, + -0.0028265293, + 0.0020038588, + 0.0015381058, + 0.007375225, + 0.0064149094, + -0.00031870478, + -0.014724841, + 0.008706863, + 0.00018716154, + 0.030345978, + -0.02162631, + -0.0047855736, + 0.010134532, + -0.009455909, + -0.0024664109, + -0.0061204126, + 0.0077145365, + 0.022189695, + 0.016402192, + 0.015493094, + -0.022176892, + 0.008642842, + 0.020537952, + 0.00650774, + -0.0121639995, + -0.009558342, + -0.01289384, + -0.0032202587, + 0.0047951764, + 0.00696549, + -0.02122938, + 0.015992459, + 0.0040877443, + 0.0065173428, + -0.021050122, + -0.0066197766, + 0.007291998, + -0.011549397, + 0.013457225, + -0.020064197, + 0.0030586056, + 0.022727473, + -0.010192151, + -0.01265056, + -0.007074326, + 0.011703048, + 0.0149041, + -0.012624951, + -0.008758079, + -0.008444376, + -0.018476475, + 0.004571103, + -0.017311292, + -0.008258715, + -0.0031050208, + -0.0093662795, + -0.013482833, + -0.004468669, + 0.004145363, + -0.011363736, + 0.0134700285, + 0.0013700505, + -0.01766981, + -0.013802938, + -0.0013628481, + 0.030909363, + 0.02627424, + 0.006779829, + -0.022868318, + 0.010499452, + 0.046760976, + -0.0020294674, + -0.0076377112, + -0.0142126735, + -0.0020134621, + 0.005483403, + 0.0008874918, + 0.033290945, + -0.013598071, + 0.003409121, + 0.002317562, + 0.031370316, + 0.0057522915, + 0.0072279763, + -0.0017877878, + -0.007381627, + -0.012087175, + 0.022164088, + 0.004820785, + -0.014302302, + -0.01548029, + 0.0033258935, + -0.023495726, + -0.0058131116, + 0.0009211029, + 0.007624907, + 0.01256093, + 0.025006622, + 0.0056914715, + -0.021254988, + 0.014635212, + 0.026812015, + -0.004551897, + 0.0024584082, + -0.008457181, + 0.0029177594, + 0.010550669, + -0.0016565446, + 0.013457225, + 0.0022599432, + -0.029654551, + 0.005044859, + -0.04437939, + 0.02366218, + 0.0010467442, + -0.0033418988, + -0.001234806, + 0.01161982, + -0.021088533, + -0.0038092525, + -0.00027769132, + -0.013943785, + 0.019628854, + -0.028630214, + -0.02658154, + -0.031703223, + -0.018937428, + 0.009948871, + 0.0069270777, + -0.0023975882, + -0.015006534, + -0.025083447, + 0.017785048, + 0.018258803, + -0.00016935568, + -0.031037405, + -0.022240913, + -0.0065813637, + 0.009539137, + 0.0028297305, + 0.012554528, + -0.0041709715, + 0.013572463, + -0.012945056, + 0.02186959, + 0.0034635388, + -0.012381671, + -0.026043763, + -0.017695418, + 0.018975839, + 0.010576277, + 0.033751898, + -0.006017979, + 0.0011875905, + 0.008886122, + -0.006779829, + -0.008169086, + -0.007925806, + -0.0134700285, + -0.019411182, + 0.013495637, + 0.014724841, + 0.0051568956, + 0.017208857, + -0.011818286, + 0.009654375, + 0.0051985094, + -0.0055346196, + -0.0143407155, + -0.028425347, + -0.022855515, + 0.0014692831, + 0.0015725171, + -0.019846525, + -0.012817014, + 0.010000088, + -0.0077145365, + 0.023623768, + 0.012938654, + 0.0025352335, + -0.0076953303, + 0.028220478, + 0.0068694586, + 0.03014111, + -0.009379084, + 0.0013644486, + 0.00019456397, + -0.025698049, + -0.0009363079, + 0.009097391, + 0.0130346855, + 0.013508442, + 0.0062068407, + 0.0019030257, + -0.020781232, + 0.016235739, + 0.017785048, + 0.021754352, + 0.0147760585, + -0.0026392678, + -0.023879852, + -0.023777418, + -0.03516036, + -0.024584083, + -0.032317825, + 0.003297084, + 0.011639027, + -0.0343665, + 0.021293402, + -0.0013892568, + -0.034929886, + 0.014814471, + 0.010140934, + 0.024007894, + -0.011735058, + 0.005621048, + 0.005496207, + -0.011062837, + -0.013329183, + -0.0008022638, + -0.016645472, + -0.004206183, + 0.033956766, + 0.01021776, + -0.003540364, + 0.017592985, + 0.005685069, + 0.00022887526, + 0.025915721, + -0.017708223, + -0.018079545, + 0.0075352774, + 0.015493094, + -0.021754352, + 0.019987373, + -0.014135848, + 0.013713309, + -0.024763342, + -0.029270424, + -0.004990441, + -0.00024067913, + -0.018604517, + 0.003260272, + -0.038207762, + 0.0041293576, + 0.006363692, + -0.007311204, + -0.0075288755, + -0.0048431926, + -0.01766981, + -0.018706951, + -0.006280465, + 0.0054065776, + -0.012016751, + 0.022663452, + 0.0018117958, + 0.0024744135, + -0.031728834, + -0.0028761458, + 0.004574304, + 0.027426617, + -0.0016309363, + -0.006219645, + -0.010749134, + 0.018002719, + 0.0298082, + -0.0058003073, + -0.0054513924, + -0.001447676, + -0.0054673976, + 0.0058195135, + 0.017746635, + -0.012644158, + -0.008930936, + 0.0139053725, + -0.018899014, + 0.005185705, + -0.015697962, + -0.019091077, + -0.006040386, + -0.01450717, + -0.014251086, + -0.0012083973, + 0.011536594, + 0.0027865162, + 0.0067350143, + -0.02503223, + 0.031242272, + 0.011318922, + -0.021843983, + 0.015377856, + -0.0051024775, + 0.009961676, + 0.0026728788, + 0.015224205, + 0.0059443545, + -0.019718483, + 0.03449454, + -0.009980882, + -0.028066829, + -0.015493094, + 0.006411708, + -0.008930936, + -0.0005221717, + 0.0000951813, + 0.002773712, + -0.013239553, + 0.02624863, + -0.0014812871, + -0.0015861215, + -0.0040013157, + -0.0234189, + -0.015313835, + 0.0026312652, + -0.02019224, + -0.0025112256, + 0.014878492, + -0.0018838194, + 0.008783688, + -0.040128395, + -0.0059443545, + -0.03129349, + 0.01037141, + -0.009660777, + -0.012176803, + -0.027247358, + 0.0011203684, + -0.008527604, + -0.004218987, + -0.009270248, + 0.0013148324, + -0.0058835344, + 0.012304846, + -0.007291998, + 0.014443149, + 0.0025832495, + -0.0008882921, + -0.012266433, + -0.0014036616, + -0.015249814, + 0.0041901777, + 0.0045839073, + -0.017132033, + 0.014161456, + -0.031395923, + -0.030345978, + 0.007266389, + -0.010198553, + -0.0011355734, + 0.011325324, + 0.014545582, + 0.03288121, + -0.0029545715, + -0.0016469415, + 0.022420172, + -0.0016901557, + -0.00083867577, + -0.038668714, + -0.018489279, + 0.0032426661, + -0.017785048, + 0.0041293576, + -0.0034763431, + -0.009942469, + -0.022522606, + 0.008277922, + 0.0034219252, + 0.007516071, + -0.0081818905, + 0.0069718924, + 0.011703048, + -0.001241208, + 0.023098795, + 0.032343436, + 0.013700505, + 0.005662662, + -0.010992414, + -0.010441833, + 0.010742732, + 0.036824908, + -0.0007582493, + -0.00068542536, + -0.0034219252, + -0.011805481, + 0.00988485, + -0.010723526, + 0.014238281, + 0.0054481914, + 0.011094848, + 0.005185705, + -0.0090525765, + -0.0049616313, + 0.017388117, + 0.0014820873, + -0.007202368, + -0.018758168, + 0.013764526, + -0.014443149, + -0.008476387, + 0.009142206, + -0.024366412, + -0.0065429513, + -0.021908004, + 0.00915501, + -0.042049024, + -0.0112292925, + -0.023610963, + -0.004641526, + -0.033828724, + 0.024609692, + 0.01718325, + -0.0170296, + -0.006178031, + -0.023982285, + -0.003902083, + -0.0021078931, + -0.013828547, + -0.02326525, + -0.038694322, + -0.03259952, + -0.0058419206, + 0.010544267, + -0.017119229, + -0.0060819997, + -0.0040589347, + 0.008521202, + 0.024379216, + 0.23068064, + 0.010909187, + -0.0053201495, + 0.03257391, + 0.0033611052, + 0.04962912, + 0.022970753, + -0.008540408, + 0.013201141, + 0.020909276, + 0.0037964482, + 0.0025256304, + 0.009379084, + 0.0043150187, + 0.0061428198, + -0.0041773734, + -0.028092436, + -0.0008682855, + -0.015800396, + 0.010019294, + 0.014635212, + -0.017797852, + 0.011280509, + 0.00383166, + 0.034725018, + -0.001922232, + -0.018169174, + -0.0018197984, + 0.023073187, + 0.0054705986, + -0.0062356503, + -0.011472573, + 0.0033354966, + -0.009097391, + -0.0070359134, + -0.005502609, + -0.01928314, + 0.008201096, + 0.020934884, + 0.026069371, + 0.012138391, + 0.012932252, + -0.032138567, + -0.021818373, + -0.0041261567, + 0.02348292, + -0.009404692, + -0.0061908355, + 0.019193511, + 0.0066261785, + -0.017759439, + -0.001922232, + 0.023777418, + 0.02350853, + 0.0011091647, + 0.023226837, + 0.022061653, + -0.011690244, + 0.029526507, + -0.014891297, + -0.014071827, + 0.023457313, + -0.018668538, + 0.0031882483, + 0.0077081346, + -0.0071575535, + -0.019808114, + 0.009475116, + 0.013457225, + -0.010569875, + 0.017746635, + 0.010992414, + 0.019628854, + 0.0056402544, + -0.006286867, + -0.003236264, + 0.024840167, + 0.008162684, + 0.026940057, + -0.017900286, + -0.0037420304, + -0.014404736, + -0.014404736, + 0.022868318, + -0.018719755, + -0.022804298, + 0.0076313093, + 0.0020566762, + 0.03569814, + -0.008674853, + -0.009263846, + -0.009583951, + 0.00976321, + -0.010032099, + 0.006238851, + 0.024776146, + -0.0134700285, + 0.022151284, + -0.02368779, + 0.0031738435, + -0.036517605, + -0.01700399, + 0.017900286, + -0.010787547, + -0.013649288, + 0.011114054, + 0.00480478, + 0.015531506, + 0.038873583, + -0.008828503, + 0.013457225, + -0.005112081, + 0.012003947, + -0.0023223637, + 0.01833563, + -0.00136845, + 0.0033835126, + -0.012618549, + -0.018450867, + -0.0139053725, + -0.00018806184, + -0.022036046, + -0.01441754, + 0.009628766, + -0.015710765, + -0.0037388294, + -0.0040877443, + 0.020077001, + 0.00031870478, + -0.040282045, + 0.03047402, + -0.0020022583, + 0.030909363, + -0.0023719799, + -0.009289455, + -0.00086748524, + -0.009526332, + -0.005243324, + 0.011504583, + -0.01012813, + -0.008636439, + -0.008918133, + 0.012445692, + -0.013738917, + 0.0056466567, + 0.0077977637, + 0.005105679, + -0.012887438, + -0.013585267, + -0.017119229, + 0.0010091318, + -0.02147266, + -0.00059219473, + 0.003473142, + 0.016146109, + -0.013111511, + -0.026376672, + -0.007618505, + -0.016389389, + 0.019539224, + -0.006824644, + 0.025864504, + -0.006472528, + -0.014225477, + -0.008905328, + 0.0014468757, + -0.16409875, + 0.024071915, + 0.004164569, + -0.004033326, + -0.013828547, + -0.0011675839, + 0.02578768, + 0.018233195, + -0.0010171344, + 0.028322913, + 0.015160184, + -0.008649244, + -0.0520107, + -0.024123132, + 0.008924535, + 0.019001449, + -0.0042285905, + -0.015224205, + 0.026402282, + 0.009961676, + -0.0029785794, + -0.029142382, + 0.012215217, + -0.0026408683, + 0.00465433, + 0.00016485421, + -0.00918702, + 0.030243544, + -0.0017877878, + -0.007080728, + -0.00465433, + -0.0052721333, + 0.0028057224, + 0.036287133, + 0.0072855954, + 0.005067266, + 0.00013964591, + 0.005172901, + 0.0010923592, + 0.003972506, + -0.008137075, + 0.024929797, + -0.006152423, + 0.009628766, + -0.019987373, + 0.022970753, + 0.03505793, + 0.021101339, + -0.0015829204, + -0.0073048016, + 0.008681254, + -0.03157518, + -0.023828635, + -0.008649244, + 0.01784907, + 0.0052049113, + 0.018566104, + 0.009808025, + -0.003850866, + 0.022586627, + 0.0036299936, + -0.0267608, + -0.0009651173, + 0.0026200614, + -0.0011043631, + -0.012810612, + 0.0030714099, + 0.008258715, + -0.031856876, + 0.014788862, + -0.013041088, + -0.0066005704, + 0.02323964, + -0.017349705, + 0.012477702, + 0.009910459, + -0.014571191, + 0.012035958, + -0.005377768, + -0.010838764, + 0.013329183, + 0.02618461, + 0.0016773515, + -0.014519975, + -0.016799124, + 0.014865688, + -0.013687701, + 0.005672265, + -0.006261259, + -0.028246088, + 0.00814988, + -0.039949134, + 0.0040013157, + -0.03877115, + 0.016094891, + 0.0133804, + -0.010448235, + -0.011158869, + -0.0011883908, + -0.021088533, + 0.011575006, + -0.010883578, + -0.012112782, + 0.01809235, + 0.024097523, + 0.024660908, + -0.00043574328, + 0.010397019, + 0.027042491, + 0.008233107, + -0.014699233, + 0.031523965, + 0.0142126735, + 0.03323973, + 0.014545582, + -0.00028869492, + 0.0083035305, + -0.034801845, + -0.0027080905, + 0.006779829, + 0.036773693, + 0.012170401, + -0.009692787, + 0.009219031, + -0.0030522035, + -0.024673713, + -0.095365755, + -0.022919536, + 0.012432888, + 0.01475045, + -0.0013924579, + 0.0151473805, + 0.010185749, + 0.03743951, + 0.00018466072, + 0.02934725, + -0.008322736, + -0.017349705, + -0.015019339, + 0.002871344, + 0.008476387, + -0.013201141, + 0.007996229, + -0.025454769, + -0.024981014, + 0.0053297523, + -0.004010919, + -0.012420083, + 0.0022039246, + -0.004270204, + -0.01629976, + -0.020269064, + -0.03920649, + 0.019936156, + 0.00498724, + -0.00471515, + 0.0152114015, + -0.0072407806, + 0.0048559965, + -0.010768341, + -0.017196054, + 0.013790134, + -0.014827276, + -0.00037292263, + 0.006101206, + -0.03144714, + 0.010268976, + 0.012003947, + 0.006510941, + -0.028578997, + -0.013508442, + 0.0040269243, + -0.013713309, + -0.011971937, + -0.009353476, + -0.01937277, + 0.010883578, + 0.037004165, + -0.0033835126, + -0.011178075, + 0.037516337, + -0.020333085, + 0.021280598, + 0.0206788, + -0.009455909, + 0.004817584, + 0.011088446, + 0.012368867, + 0.008508397, + 0.02551879, + -0.0053809695, + -0.015390661, + -0.027324185, + 0.003533962, + 0.012176803, + -0.041895375, + -0.0005985968, + 0.02092208, + -0.018745363, + 0.013226749, + -0.009603158, + -0.001101162, + -0.020755624, + -0.011523789, + 0.009558342, + -0.00032050538, + -0.026018154, + -0.020614779, + -0.006277264, + -0.02366218, + 0.0070423153, + 0.022253716, + -0.013341987, + -0.004388643, + 0.028604604, + -0.014494366, + 0.0005645856, + 0.04312458, + 0.013802938, + -0.012260031, + -0.0075352774, + 0.011901514, + 0.0122280205, + 0.018284412, + 0.00903337, + -0.019398378, + -0.021664724, + -0.0026504714, + -0.049321815, + 0.010115326, + -0.002378382, + -0.023252446, + -0.0032698752, + 0.009878448, + -0.01578759, + -0.004033326, + -0.005256128, + -0.00535216, + -0.0019750495, + -0.002357575, + -0.0050224513, + 0.00065141416, + -0.01402061, + 0.0027016883, + 0.018002719, + -0.0050288537, + 0.02722175, + 0.00053697656, + -0.0019126289, + 0.014571191, + 0.011101251, + 0.0007462454, + -0.016350977, + 0.01742653, + -0.03096058, + -0.01523701, + -0.016607061, + -0.014468757, + -0.0065493532, + -0.018194782, + 0.015006534, + 0.039283317, + -0.019257532, + -0.01903986, + -0.006155624, + 0.030243544, + 0.008822101, + -0.020179436, + -0.013687701, + -0.043508705, + 0.016632669, + -0.013303574, + -0.016325368, + 0.0188606, + -0.0016453409, + -0.012727384, + 0.005854725, + -0.0013548455, + 0.021050122, + 0.027119316, + -0.0002262744, + -0.009122999, + 0.00036051855, + -0.017144836, + 0.030089894, + 0.008834905, + 0.011120456, + -0.03190809, + 0.016607061, + -0.012490507, + -0.00034311283, + 0.011939926, + 0.008495593, + 0.008521202, + -0.017068012, + -0.014699233, + 0.0075736903, + 0.007618505, + -0.008265117, + -0.00918702, + 0.040256437, + 0.008591625, + 0.02323964, + 0.0109476, + -0.011991142, + 0.0037964482, + -0.0013764526, + 0.008124271, + 0.013239553, + -0.0077721556, + -0.019731287, + 0.02691445, + 0.020422716, + 0.031984918, + -0.038310196, + -0.0009251042, + 0.005364964, + -0.005006446, + -0.031370316, + -0.004567902, + -0.007701732, + -0.002986582, + -0.00413576, + 0.0041901777, + -0.0036620041, + 0.0020870862, + 0.015979653, + 0.035390835, + 0.013802938, + -0.0062100417, + -0.0079066, + -0.026530324, + -0.0088669155, + 0.0077209384, + -0.007804166, + -0.0036363956, + -0.012234422, + 0.0076313093, + 0.007080728, + -0.021575093, + -0.0007982625, + 0.022010436, + -0.0017189652, + -0.005726683, + -0.033316553, + -0.028809473, + -0.018783776, + 0.0065557556, + 0.0013556457, + 0.011722255, + -0.011658234, + -0.010397019, + 0.022253716, + 0.027016884, + 0.040154003, + -0.031523965, + -0.0037388294, + 0.018719755, + 0.011542995, + -0.0032506688, + 0.008469985, + -0.01937277, + -0.024443237, + -0.0075096693, + -0.019103881, + 0.02609498, + 0.016235739, + 0.054084983, + -0.004427056, + -0.03577496, + 0.017055208, + 0.001292425, + 0.007842579, + 0.013802938, + 0.0011843895, + -0.014481561, + -0.013713309, + 0.002469612, + 0.0009987283, + 0.021203771, + 0.0033451, + -0.016837535, + -0.0022279324, + -0.01912949, + 0.020000177, + -0.031088622, + -0.013028284, + 0.022304934, + 0.0052049113, + 0.012356062, + 0.0034571367, + -0.016184522, + -0.007151151, + -0.006818242, + 0.012388073, + -0.005006446, + -0.020909276, + 0.017260075, + -0.022420172, + -0.023201229, + -0.00021547085, + 0.01466082, + -0.018630126, + -0.015685158, + -0.025505986, + -0.006213243, + 0.014583996, + -0.00046975445, + 0.020819645, + -0.015838807, + -0.027452227, + -0.011542995, + -0.010064109, + -0.020025784, + 0.005979566, + -0.023841439 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 24, + "total_tokens": 24 + } +} +265 34463 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 70 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What color is the desk?"]}HTTP/2.0 200 OK +Content-Length: 33508 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:48 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 84 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-59scv +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999995 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_e087ef0f59a84d74aadea6a5c5772442 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.014726514, + -0.0071365014, + 0.0019683642, + -0.024905318, + -0.01816564, + 0.0029745921, + -0.042025365, + -0.011350376, + 0.015494963, + -0.006342857, + 0.004730373, + 0.008112811, + -0.022121266, + 0.0067837704, + -0.014965867, + 0.00699163, + 0.021466194, + 0.010367768, + 0.007438842, + -0.021466194, + -0.044368505, + 0.01642718, + -0.010682707, + 0.009750489, + -0.022373216, + 0.013617931, + 0.023859724, + -0.005798014, + 0.0071365014, + 0.012849482, + 0.025043892, + -0.0020077315, + 0.0032375655, + -0.03648245, + -0.03144344, + 0.019450588, + 0.0027116186, + 0.00944185, + 0.019211235, + -0.021113463, + 0.0053161583, + 0.004629593, + 0.0036186408, + 0.003999716, + -0.002582494, + 0.012792793, + 0.015557951, + 0.012824287, + -0.0026029649, + 0.011312583, + 0.012427464, + 0.044368505, + -0.006308214, + -0.013454163, + 0.004210725, + -0.02459038, + 0.01408404, + 0.025522599, + -0.02571156, + -0.005259469, + 0.008534827, + 0.0007751418, + 0.0073569585, + 0.0065507162, + -0.012049539, + 0.004163484, + -0.010298482, + 0.00995205, + -0.012326684, + 0.013554944, + 0.025698964, + 0.035348672, + 0.022335423, + 0.019715136, + 0.023444006, + 0.0040028654, + 0.0074514397, + 0.011696808, + -0.017346801, + -0.009334771, + 0.0002572652, + 0.005684636, + -0.032174096, + -0.002036076, + 0.014978465, + 0.0061507444, + 0.006588509, + 0.012389672, + -0.031821363, + -0.010386664, + -0.014335991, + 0.029931733, + 0.029528612, + -0.0051964815, + -0.012836885, + 0.009252886, + 0.02540922, + 0.017535763, + 0.0073947506, + -0.029024713, + 0.005429536, + 0.020735536, + -0.023733748, + -0.0016660235, + -0.022310227, + -0.005873599, + 0.004465825, + 0.0014250957, + 0.020634755, + -0.02642962, + -0.035499845, + 0.018304212, + 0.02995693, + -0.01659095, + -0.0008865513, + -0.012950262, + 0.014613137, + -0.018593956, + -0.012055838, + -0.006966435, + 0.012257398, + 0.041974973, + 0.032728385, + -0.029553808, + 0.0382713, + 0.0067837704, + -0.016150035, + -0.0058798976, + -0.003628089, + 0.0044374806, + 0.010575628, + 0.01652796, + 0.0071616964, + 0.014663527, + -0.020433195, + 0.0098638665, + -0.0066326, + 0.034063723, + 0.005520868, + -0.020193843, + -0.0020502482, + 0.029478222, + -0.0032690594, + 0.001273138, + 0.0027368136, + 0.028243665, + 0.018329408, + -0.0145627465, + -0.017926287, + 0.009007235, + 0.0014652504, + -0.006213732, + 0.017573556, + 0.02678235, + 0.00095741235, + 0.024325833, + -0.025686366, + -0.0111425165, + -0.018694736, + -0.0014250957, + -0.019778123, + -0.0035556532, + 0.029075103, + -0.006027919, + 0.03345904, + 0.024628174, + 0.021718144, + 0.013328188, + -0.002443921, + 0.011306284, + -0.025169868, + 0.02673196, + -0.011444857, + 0.013995857, + 0.009126911, + 0.0138320895, + 0.021503985, + -0.0012581784, + -0.021831522, + 0.01336598, + -0.0148902815, + 0.014940672, + 0.0052783657, + 0.011986551, + 0.0068341605, + -0.012893573, + 0.016036658, + -0.02326764, + 0.018253822, + -0.008446645, + 0.015091842, + 0.01704446, + 0.0013188041, + -0.015482366, + -0.67280895, + -0.04918076, + 0.018493176, + -0.0070231236, + -0.0016408284, + 0.03393775, + 0.010374067, + 0.02592572, + -0.003026557, + -0.029100297, + 0.017271215, + 0.0066703926, + 0.01587289, + -0.007256178, + -0.0006956199, + -0.033811774, + 0.0033257483, + 0.019639552, + -0.00403121, + 0.0025935168, + -0.0019242729, + 0.015469768, + -0.008629309, + -0.0031052914, + 0.021781132, + 0.017397191, + 0.01791369, + -0.015948474, + -0.013895077, + -0.008245084, + -0.012301489, + 0.01331559, + -0.02469116, + -0.0074451407, + 0.040538855, + 0.00018354997, + -0.021151256, + 0.025182465, + -0.006506625, + 0.032476436, + -0.0037540642, + 0.011016541, + 0.0010204001, + -0.018518372, + -0.010437055, + -0.004714626, + 0.0130888345, + 0.0066011064, + 0.044116553, + -0.011955057, + 0.018845906, + -0.016288608, + 0.016805107, + 0.015318598, + 0.012515647, + 0.005164988, + 0.04414175, + 0.01985371, + 0.0035462051, + -0.003184026, + -0.008509632, + 0.018556163, + -0.02356998, + -0.015066647, + -0.017825507, + 0.0037981556, + -0.03408892, + -0.02587533, + -0.027991714, + -0.013529749, + 0.00612555, + 0.0043146545, + -0.014411576, + 0.020634755, + 0.030914342, + 0.01117401, + 0.020760732, + -0.018430188, + 0.007791573, + -0.010890566, + -0.010210299, + -0.0053571, + -0.018367201, + -0.026555596, + 0.029402638, + -0.021315023, + -0.013970662, + -0.018039664, + 0.01525561, + 0.006216882, + 0.022814129, + 0.030939536, + -0.0054169386, + -0.0012644771, + -0.0125534395, + 0.030284464, + 0.004342999, + 0.0009959923, + -0.009712697, + 0.00015924066, + 0.005098851, + -0.014827294, + 0.015583146, + 0.012767598, + 0.032224484, + -0.010840176, + -0.029830953, + 0.041849, + 0.013857285, + -0.012257398, + 0.02005527, + -0.025043892, + -0.032552022, + 0.002138431, + 0.01577211, + -0.03025927, + 0.054068603, + 0.005375996, + 0.010525238, + 0.003398184, + 0.01505405, + -0.001191254, + -0.0041004964, + -0.009422953, + 0.012597531, + -0.008150603, + -0.00883087, + -0.013844687, + -0.01612484, + 0.009712697, + 0.00653182, + 0.000116330324, + 0.01657835, + 0.0023084977, + -0.008389955, + -0.0077537806, + 0.016263412, + -0.019626953, + 0.006878252, + -0.011690509, + -0.01229519, + -0.006563314, + -0.012755, + -0.0089883385, + -0.008799376, + -0.01403365, + -0.035701405, + -0.007123904, + -0.020861512, + 0.010204, + -0.018770322, + -0.028520811, + -0.019425394, + 0.005010668, + 0.014487161, + -0.021100866, + -0.016817704, + -0.015293403, + -0.0055271666, + 0.010518938, + 0.0003253706, + 0.002409278, + -0.016956277, + 0.0045036175, + -0.0036627322, + -0.02786574, + -0.02015605, + 0.044746432, + -0.0056909346, + -0.015331196, + -0.011759795, + 0.0026360333, + -0.011281089, + -0.013605334, + -0.018102651, + -0.016049255, + -0.007224684, + -0.033232287, + -0.010109519, + -0.0134793585, + 0.0043304013, + 0.016490169, + -0.008673401, + 0.0056909346, + 0.037817787, + -0.0020045822, + 0.008515931, + 0.045250334, + -0.0074577383, + 0.013126628, + 0.007205788, + -0.011016541, + -0.005259469, + -0.0009432401, + 0.006802667, + 0.00050350756, + 0.0007310505, + -0.0036784792, + 0.0010093772, + -0.0052752164, + 0.020571768, + -0.009618215, + 0.0118605755, + -0.008648206, + 0.007527025, + -0.0122133065, + 0.01495327, + -0.0034013335, + 0.0022565327, + 0.036608424, + 0.0002501791, + -0.017838104, + 0.013378578, + -0.005470478, + 0.029150687, + -0.0031934741, + -0.02224724, + 0.010348872, + -0.023645567, + -0.015406781, + 0.007577415, + 0.013945467, + 0.030763172, + -0.014197418, + -0.01878292, + -0.01209363, + 0.037540644, + 0.015696524, + -0.0037414667, + -0.024678564, + -0.024514796, + -0.008024627, + -0.0021762236, + 0.0039209817, + -0.022751141, + 0.0039115334, + 0.004868946, + -0.018077457, + 0.005539764, + 0.0045477087, + 0.0035021137, + 0.036306083, + 0.023305433, + -0.020219037, + 0.019009674, + -0.006689289, + 0.018556163, + 0.026253255, + -0.025056489, + 0.016666533, + -0.024099078, + -0.0018786069, + -0.012389672, + 0.017901093, + 0.024628174, + -0.010065427, + 0.037061937, + -0.010033933, + 0.009347368, + 0.011350376, + -0.0032627606, + -0.009788282, + 0.0036816285, + -0.009926855, + 0.012786495, + -0.012578635, + -0.010859072, + 0.0018439636, + -0.0065129236, + -0.030939536, + -0.014361186, + -0.0016345297, + 0.012584934, + -0.0019683642, + 0.0025069087, + -0.008560022, + 0.008547425, + -0.0066451975, + 0.012339282, + 0.0055523617, + -0.005259469, + -0.021869315, + 0.02418726, + 0.0012148744, + -0.0004987835, + -0.01806486, + -0.009347368, + 0.014814696, + -0.012162916, + -0.0008715917, + 0.0084529435, + 0.024955709, + 0.004069003, + -0.00821359, + 0.0012298339, + -0.02367076, + 0.011986551, + 0.008207291, + 0.01321481, + -0.0009448148, + -0.009870166, + -0.010632317, + -0.03000732, + -0.009410356, + 0.006853057, + 0.024162065, + -0.0006842034, + -0.0014471414, + -0.014373783, + -0.0321489, + -0.0068089655, + 0.0020439494, + -0.0040564053, + 0.0077033904, + -0.013302993, + 0.0056122, + -0.03464321, + -0.015784707, + 0.027437422, + 0.018770322, + -0.0072183856, + -0.023771541, + 0.0005767307, + -0.007130203, + 0.06540638, + 0.026152475, + -0.009907958, + 0.017208228, + 0.012925067, + -0.006333409, + -0.018304212, + -0.00032340226, + -0.0043398496, + -0.009139509, + 0.012282593, + -0.0004940594, + -0.007130203, + 0.0025887927, + -0.012717208, + 0.00035666762, + 0.013328188, + 0.00038205952, + 0.017749922, + -0.031166293, + -0.011041736, + 0.011602326, + -0.009725294, + 0.00837106, + -0.010386664, + 0.020609561, + 0.005199631, + -0.0075396225, + 0.02259997, + -0.021541778, + -0.0031367852, + 0.024010895, + 0.0020266278, + -0.0058389558, + -0.008667101, + -0.017472776, + -0.017434983, + 0.008018329, + 0.00836476, + -0.006960136, + 0.023179457, + 0.0056247977, + 0.0036406866, + -0.021881912, + -0.0051964815, + 0.009460746, + -0.006081458, + 0.016464973, + -0.012629025, + -0.014147027, + 0.020773329, + -0.0039871186, + -0.019009674, + 0.0008629309, + 0.010078025, + 0.00035095934, + -0.021970095, + -0.02525805, + 0.001359746, + -0.022562178, + -0.0029919136, + 0.008018329, + 0.008679699, + 0.006588509, + -0.016162632, + -0.027739763, + -0.00089442474, + -0.00077553553, + 0.0016691729, + 0.0016644488, + -0.017901093, + -0.016767314, + -0.019223833, + -0.0020785925, + 0.033131506, + 0.029175883, + 0.024678564, + -0.035071526, + 0.0045729037, + 0.031141097, + 0.016301205, + -0.020067867, + 0.0050799544, + -0.005470478, + 0.005281515, + -0.0010440204, + 0.034315675, + -0.0109472545, + -0.00040705773, + 0.0152808055, + 0.03378658, + 0.008786778, + 0.020508781, + -0.015898084, + -0.007199489, + -0.006802667, + 0.02306608, + 0.019110454, + -0.02577455, + -0.019601759, + 0.010008738, + -0.025220258, + 0.0028958574, + -0.008245084, + -0.012440062, + 0.0063145123, + 0.014928075, + -0.00046886437, + -0.01652796, + 0.014235211, + 0.024766747, + -0.014839891, + -0.002393531, + -0.018644346, + 0.01296286, + 0.015797304, + 0.008037225, + 0.016502766, + -0.01714524, + -0.017397191, + 0.023947908, + -0.039077543, + 0.023532188, + 0.013907675, + -0.011048035, + -0.004765016, + 0.020269427, + -0.01898448, + -0.0037320186, + 0.009479642, + -0.001765229, + 0.028999517, + -0.028697176, + -0.0117346, + -0.020130854, + -0.017472776, + 0.024527393, + 0.02122684, + -0.013580139, + 0.0044532274, + -0.013920272, + 0.012792793, + -0.002102213, + -0.001168421, + -0.045930598, + -0.02566117, + -0.0098764645, + 0.019450588, + -0.022751141, + 0.023292836, + -0.006871953, + 0.015507561, + 0.001719563, + 0.011041736, + -0.0016140587, + -0.019916696, + -0.013277798, + -0.008112811, + 0.026656376, + 0.013907675, + 0.014638332, + 0.010701602, + -0.000071353206, + 0.0011731451, + 0.0003409207, + -0.016338998, + -0.0019825364, + -0.012440062, + -0.0013219535, + 0.008963143, + 0.016150035, + 0.006934941, + 0.0209245, + 0.013592736, + -0.0006782983, + 0.030989926, + -0.01672952, + -0.009561527, + -0.036633622, + -0.02612728, + 0.0079049505, + -0.014487161, + -0.020811122, + -0.0046768333, + -0.0041918284, + -0.009070222, + 0.016250815, + 0.002127408, + 0.0016053979, + -0.0037225704, + 0.032375656, + 0.0036910765, + 0.04169783, + -0.01652796, + 0.005139793, + 0.004853199, + -0.034517236, + -0.0049413815, + 0.010619719, + 0.0077789756, + 0.00826398, + 0.012515647, + 0.011671613, + -0.00806242, + 0.0003052933, + -0.0004527238, + 0.013769101, + 0.012383373, + -0.018379798, + -0.019097857, + -0.024829734, + -0.023393616, + -0.02826886, + -0.037112325, + 0.01873253, + -0.0030202582, + -0.041723024, + 0.018203432, + 0.0049476805, + -0.028394835, + -0.00068695913, + 0.0039934176, + 0.026958717, + 0.0035493544, + 0.005520868, + 0.01689329, + -0.01153304, + -0.001339275, + -0.00648143, + -0.01577211, + 0.0038265001, + 0.035399064, + 0.027286252, + -0.015129635, + 0.024703758, + 0.009618215, + -0.0044280323, + 0.010758292, + -0.0122133065, + -0.018304212, + -0.019677343, + 0.002184097, + -0.014928075, + 0.017737323, + -0.014701319, + 0.013378578, + -0.021970095, + -0.012307788, + 0.0009944176, + -0.0016817704, + -0.014348588, + 0.003480068, + -0.024225052, + 0.0234692, + 0.02786574, + 0.0027746062, + -0.016162632, + -0.0049193357, + -0.00959302, + -0.0004641403, + 0.011148815, + 0.016540559, + -0.008975741, + 0.017220825, + -0.005514569, + 0.008295475, + -0.031166293, + 0.00347062, + -0.0046673855, + 0.024199858, + -0.01280539, + -0.00026356397, + -0.012465257, + 0.01158343, + 0.029150687, + -0.012326684, + -0.0073317634, + 0.00131408, + -0.010115817, + 0.00617279, + 0.009196198, + -0.016666533, + -0.020886706, + 0.017271215, + -0.018329408, + 0.0017337352, + -0.027588593, + -0.009416655, + 0.019425394, + -0.020445794, + -0.016364193, + -0.0015140658, + 0.019488381, + 0.020030074, + 0.0042012767, + -0.008465541, + 0.027160278, + -0.00011416513, + -0.027689373, + 0.023242446, + -0.00053145835, + 0.010065427, + -0.011822783, + 0.015734317, + 0.005095701, + -0.033131506, + 0.028394835, + 0.0068089655, + -0.018430188, + -0.031720582, + 0.0055712583, + -0.019815916, + -0.0027541353, + -0.011822783, + -0.0012266845, + 0.0043807914, + 0.0168303, + 0.006878252, + -0.0019683642, + -0.0058767484, + -0.017749922, + 0.0025541494, + 0.00806242, + -0.010235494, + -0.0047114766, + 0.008673401, + -0.004979174, + 0.013403773, + -0.02597611, + -0.006903447, + -0.020647354, + 0.012755, + -0.01602406, + -0.0069223433, + -0.024779344, + -0.0044122855, + -0.011640118, + -0.00069837563, + -0.015646134, + -0.0027399631, + 0.0057161297, + 0.030334854, + -0.0030564761, + 0.009712697, + -0.008667101, + -0.0028690877, + -0.012351879, + -0.021781132, + -0.028445225, + -0.015935877, + 0.007413647, + 0.00095741235, + 0.0036910765, + -0.035600625, + -0.031141097, + 0.01000244, + 0.0063145123, + -0.026958717, + 0.015079245, + 0.0063963966, + 0.03504633, + -0.010361469, + -0.014273003, + 0.019778123, + -0.0024927366, + -0.016288608, + -0.023242446, + -0.009958348, + -0.002045524, + -0.026757156, + 0.0070546176, + -0.015016257, + -0.006383799, + -0.021768535, + 0.024174662, + -0.00398082, + 0.0034674704, + -0.010147312, + 0.009315874, + 0.008081316, + -0.0011196056, + 0.0123959705, + 0.047467496, + 0.022335423, + -0.0019179741, + -0.024955709, + -0.003867442, + -0.00010904738, + 0.03892637, + -0.005117747, + 0.0058515533, + 0.005577557, + -0.013605334, + -0.0056972336, + -0.027588593, + 0.007999432, + -0.0036721805, + 0.018505773, + 0.009479642, + -0.007256178, + -0.00030667114, + 0.02005527, + -0.0065759113, + -0.017951483, + -0.020659951, + -0.0010503192, + -0.027311448, + -0.0069538374, + 0.010367768, + -0.035247892, + 0.002853341, + -0.013542346, + 0.00087789044, + -0.02520766, + -0.03240085, + -0.01801447, + -0.001571542, + -0.03005771, + 0.02791613, + 0.0076341038, + -0.018417591, + -0.0067837704, + -0.017170435, + -0.015482366, + 0.00045036175, + -0.018342005, + -0.011249595, + -0.03383697, + -0.03000732, + 0.0011707831, + -0.0062515247, + -0.020672549, + 0.0014077742, + 0.0055901543, + 0.02663118, + 0.02087411, + 0.2332055, + 0.017346801, + 0.0050610583, + 0.0525569, + -0.0013219535, + 0.031216683, + 0.031367853, + 0.0025415518, + 0.0070294226, + 0.02781535, + 0.007432543, + -0.0074451407, + -0.006821563, + 0.009939452, + 0.010279586, + -0.013920272, + -0.033307873, + -0.022070875, + -0.0062011345, + 0.004793361, + 0.025031295, + -0.0026360333, + 0.011079528, + 0.0003480068, + 0.017246021, + 0.016666533, + -0.0029430983, + -0.0018959284, + 0.005382295, + 0.0003334409, + -0.008238785, + -0.017208228, + -0.002275429, + 0.003924131, + -0.00048776067, + -0.0025447013, + -0.012880975, + -0.002036076, + 0.019047467, + 0.0331567, + 0.015230415, + -0.016515363, + -0.03464321, + -0.0055712583, + -0.013139225, + -0.0025935168, + -0.012666818, + -0.001359746, + 0.006897148, + 0.008755284, + -0.01781291, + -0.002867513, + 0.0280673, + 0.023960505, + -0.01316442, + 0.0098764645, + 0.022184253, + -0.023632968, + 0.008629309, + -0.019047467, + -0.021718144, + 0.029075103, + -0.01500366, + 0.0077789756, + 0.0069538374, + -0.012685714, + -0.018959284, + -0.0014770605, + 0.02428804, + -0.018669542, + 0.0017699532, + 0.013580139, + 0.014713917, + -0.0043335506, + 0.004843751, + -0.009265484, + 0.022373216, + 0.0036658817, + 0.023305433, + 0.0032533125, + -0.009284381, + -0.01408404, + -0.021718144, + 0.021466194, + -0.0074640373, + -0.014386381, + 0.007035721, + -0.0027998013, + 0.035071526, + -0.003306852, + -0.0038170519, + 0.010953553, + 0.00067554263, + 0.002092765, + 0.016490169, + 0.021516584, + 0.0017101149, + 0.029327054, + -0.00847184, + 0.00073734927, + -0.03224968, + -0.002454944, + 0.008408852, + -0.005234274, + -0.019563965, + 0.017787714, + -0.00045744787, + -0.0047083274, + 0.031115903, + -0.008994637, + -0.0014148602, + -0.015910681, + 0.019312015, + -0.007980536, + -0.00070703647, + 0.0023210952, + -0.0011164562, + -0.018228628, + -0.026555596, + -0.020811122, + 0.0016439778, + -0.031241877, + -0.012099929, + 0.00842145, + -0.011287388, + -0.013240005, + 0.017346801, + 0.015117037, + -0.00043540218, + -0.036910765, + 0.008604114, + 0.007016825, + 0.031241877, + -0.010015037, + -0.017409788, + 0.009725294, + 0.005520868, + 0.0039146827, + 0.0060688606, + -0.005986977, + -0.01572172, + -0.020911902, + 0.012578635, + -0.018140445, + 0.017346801, + -0.007596311, + -0.0030690734, + -0.012698311, + -0.012326684, + -0.021390608, + -0.0023415661, + -0.013038445, + -0.0050799544, + 0.008711193, + 0.010991346, + -0.008660803, + -0.004276862, + -0.010997645, + -0.013252603, + 0.019563965, + 0.003842247, + 0.038649227, + 0.013038445, + -0.0077033904, + -0.010430756, + 0.013491956, + -0.1592328, + 0.028697176, + 0.008434047, + -0.0030926939, + -0.0134793585, + 0.009347368, + 0.013605334, + 0.02642962, + -0.008837168, + 0.032350462, + 0.004818556, + -0.009844971, + -0.032677997, + -0.014096637, + -0.0033635409, + 0.0145501485, + 0.001466825, + -0.017901093, + 0.013328188, + 0.0065759113, + 0.0076530003, + -0.02137801, + 0.0031383599, + 0.002872237, + 0.0076530003, + -0.004862647, + -0.025069088, + 0.032224484, + 0.00449102, + -0.0141848205, + -0.005398042, + -0.010241793, + -0.0057791173, + 0.021264633, + 0.0012723507, + 0.008049822, + 0.00836476, + 0.0008582068, + -0.008018329, + 0.009844971, + -0.0030706483, + 0.026706766, + -0.0039934176, + -0.0032170946, + -0.0145501485, + 0.007287672, + 0.017674336, + 0.022763738, + 0.007230983, + -0.018102651, + 0.019123053, + -0.0362305, + -0.018770322, + -0.00801203, + 0.023506993, + 0.0156209385, + 0.016981471, + 0.0034769187, + -0.0027210668, + 0.0010109519, + -0.008226188, + -0.031015122, + -0.0029509717, + 0.0022329125, + 0.0034611716, + -0.0031115902, + 0.0064940276, + -0.00267855, + -0.014159625, + 0.010682707, + -0.008427748, + -0.011942459, + 0.003892637, + -0.026958717, + 0.006827862, + 0.019979684, + -0.015646134, + -0.0035115618, + -0.005375996, + -0.0038453965, + 0.009511136, + 0.038649227, + -0.003810753, + -0.0008645056, + -0.007955341, + -0.0002421088, + -0.013542346, + -0.00852223, + -0.009611917, + -0.013958065, + 0.007344361, + -0.034265283, + 0.012282593, + -0.024716357, + 0.02995693, + 0.009215094, + -0.012874677, + -0.00006579258, + 0.0010204001, + -0.015847694, + -0.010928358, + -0.016616143, + -0.029553808, + 0.0199041, + 0.020395404, + 0.031065512, + -0.010871669, + 0.0122448, + 0.037011545, + 0.008106511, + -0.025648573, + 0.038548447, + 0.016061852, + 0.024766747, + 0.02587533, + 0.01388248, + -0.006525521, + -0.03628089, + -0.0027761809, + -0.006153894, + 0.051498707, + 0.0014660377, + -0.020370208, + 0.022310227, + -0.0033698396, + -0.0075144274, + -0.091004565, + -0.0043807914, + 0.008282877, + 0.015066647, + 0.005675188, + 0.02535883, + 0.014046247, + 0.02990654, + 0.009366265, + 0.030863952, + -0.008465541, + -0.004097347, + -0.004506767, + 0.00026139876, + 0.0014148602, + -0.009933153, + -0.002760434, + -0.02811769, + -0.031720582, + 0.012446361, + -0.003530458, + -0.015835097, + 0.006408994, + -0.0113251805, + 0.0013644701, + -0.02316686, + -0.03403853, + 0.014298198, + 0.014701319, + 0.0149028795, + 0.013000652, + -0.0152682075, + -0.009970946, + -0.00893165, + -0.036406863, + -0.0017069655, + -0.0073506595, + -0.007476635, + 0.009555227, + -0.034013335, + 0.0052941125, + 0.0152808055, + 0.003480068, + -0.043663044, + -0.0010770889, + 0.023506993, + -0.019400198, + 0.00076490635, + -0.00091489573, + -0.012414867, + 0.009189899, + 0.017409788, + 0.00028009823, + -0.016213022, + 0.03383697, + -0.011312583, + 0.019979684, + 0.024628174, + -0.019790722, + 0.0028942828, + 0.0034737692, + 0.034819577, + 0.0028753865, + 0.035499845, + 0.0007987622, + -0.013743906, + -0.027487813, + 0.0059460346, + 0.025736757, + -0.041874193, + -0.005627947, + 0.017737323, + -0.028873542, + -0.00052988366, + -0.012540842, + 0.00081883953, + -0.027538203, + 0.0042422186, + 0.009630812, + -0.0022029933, + -0.020760732, + -0.027613789, + -0.012269995, + -0.020697745, + 0.00076254434, + 0.028445225, + -0.02771457, + -0.009265484, + 0.020382805, + -0.022310227, + -0.014260406, + 0.044620454, + 0.011375571, + -0.020458391, + 0.0030533266, + 0.020937096, + 0.0009463895, + 0.00786086, + 0.010235494, + -0.015331196, + -0.014310796, + -0.003240715, + -0.055882648, + 0.010493743, + -0.012679415, + -0.03892637, + 0.0028643636, + 0.013504554, + -0.0072435807, + -0.017258618, + -0.014096637, + -0.007760079, + 0.00093457935, + 0.011470052, + -0.01010322, + -0.0056877853, + -0.009164704, + 0.0109472545, + 0.020370208, + 0.0039052346, + 0.023381017, + -0.0029525463, + -0.014877684, + 0.011388169, + -0.0030486025, + 0.007067215, + -0.02786574, + 0.016981471, + -0.03388736, + -0.027588593, + -0.019375004, + -0.021466194, + 0.015646134, + -0.01393287, + 0.01577211, + 0.036961157, + -0.021264633, + -0.020420598, + -0.009372563, + 0.037717007, + 0.01515483, + -0.027790153, + -0.004122542, + -0.029982124, + 0.017598752, + -0.015381586, + 0.0015573698, + 0.022562178, + -0.0138320895, + -0.0029871897, + 0.015217817, + -0.0074640373, + 0.022184253, + 0.028747566, + 0.00898204, + -0.0044815717, + -0.009706398, + -0.019072663, + 0.0209245, + -0.0039430275, + 0.010468548, + -0.036961157, + 0.006062562, + 0.0047083274, + 0.0042422186, + 0.023305433, + 0.007199489, + 0.0023714853, + -0.0018282167, + -0.010159909, + -0.0015400482, + -0.010657512, + -0.001678621, + -0.0000913321, + 0.04179861, + -0.007873457, + 0.028394835, + 0.0011172435, + 0.0021951199, + -0.003204497, + -0.0053445026, + 0.028571201, + -0.00075742655, + -0.012377074, + -0.03134266, + 0.0079175485, + 0.037893374, + 0.012925067, + -0.02612728, + 0.0004409136, + 0.004903589, + 0.00083616114, + -0.024149468, + -0.0032060717, + -0.016855497, + -0.0062231803, + 0.003933579, + -0.008018329, + -0.0077537806, + -0.01316442, + 0.014474563, + 0.047366716, + 0.011929862, + -0.0039682225, + -0.003703674, + -0.040992368, + -0.01204324, + 0.008673401, + -0.007363257, + -0.01776252, + -0.00444063, + 0.010751992, + 0.0039871186, + -0.0008456093, + -0.021503985, + 0.018719932, + 0.002780905, + -0.0031304865, + -0.0469384, + -0.027084691, + -0.023028286, + 0.022612568, + 0.0064215916, + 0.000785771, + 0.0042926087, + 0.009164704, + 0.021000085, + 0.02127723, + 0.042226925, + -0.030612001, + -0.0038642928, + 0.031594608, + 0.0131014325, + 0.0014691871, + 0.0037918568, + -0.008874961, + -0.010015037, + -0.009063924, + -0.008679699, + 0.028042104, + -0.0011077954, + 0.06092166, + -0.00021376436, + -0.015646134, + 0.021844119, + 0.0013479359, + 0.006802667, + 0.032627605, + -0.01565873, + -0.012975457, + -0.018140445, + -0.0055492125, + 0.0007235707, + 0.021390608, + 0.005990126, + -0.017636543, + -0.0016723223, + -0.022587374, + 0.03204812, + -0.035852574, + -0.009555227, + 0.01076459, + -0.0109598525, + 0.0022833026, + 0.010997645, + -0.021806326, + -0.0046106963, + -0.004821705, + 0.0018770321, + -0.0022896014, + -0.01005283, + 0.028596396, + -0.018820712, + -0.020659951, + -0.00760261, + 0.008849766, + -0.03388736, + -0.021894509, + -0.020067867, + 0.00003907203, + 0.012610129, + 0.0071868915, + 0.01672952, + -0.019992283, + -0.022751141, + -0.01153304, + -0.0073947506, + -0.014373783, + -0.006169641, + -0.020496184 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 6, + "total_tokens": 6 + } +} +610 1665 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 408 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the desk?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 839 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:51 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1550 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999925 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_f0d64514cfd142808121768c0af21580 + +{ + "id": "chatcmpl-EREMoi3S0onz2dcAdb2E6vYfoxoKg", + "object": "chat.completion", + "created": 1790158790, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The color of the desk is orange.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 72, + "completion_tokens": 8, + "total_tokens": 80, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} diff --git a/vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilterNotSelected.httprr new file mode 100644 index 000000000..220ea47aa --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilterNotSelected.httprr @@ -0,0 +1,9416 @@ +httprr trace v1 +554 167935 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 358 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["in kitchen, The color of the lamp beside the desk is black.","in bedroom, The color of the lamp beside the desk is blue.","in office, The color of the lamp beside the desk is orange.","in sitting room, The color of the lamp beside the desk is purple.","in patio, The color of the lamp beside the desk is yellow."]}HTTP/2.0 200 OK +Content-Length: 166978 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:58 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 124 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-hks7j +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999926 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_bf45f37c1a704c7883a6070d7aae084e + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.014623884, + -0.017596005, + 0.0050598374, + -0.017043663, + -0.0015764731, + 0.0011359154, + -0.009448975, + -0.02576276, + 0.010014467, + -0.02173856, + 0.0249474, + 0.008127302, + -0.018963706, + -0.008798002, + -0.025618099, + 0.0063650715, + 0.032035775, + 0.02388217, + 0.028353501, + -0.020594425, + -0.02402683, + 0.02538138, + 0.004826408, + 0.008357444, + -0.020305105, + -0.008811153, + 0.0032515784, + -0.017254079, + -0.0040505, + 0.023579698, + 0.0067168605, + -0.013558655, + 0.005138743, + -0.03156234, + -0.03766439, + 0.009659391, + 0.006871384, + -0.010777224, + 0.015886378, + -0.015189376, + -0.0040340615, + -0.000052963496, + -0.001834561, + -0.009133352, + -0.018148344, + 0.02590742, + 0.010487902, + 0.010889007, + -0.02240926, + 0.017122569, + 0.014742242, + 0.01739874, + -0.014715941, + -0.021199372, + 0.008449501, + -0.029116258, + 0.011158602, + 0.01753025, + -0.004047212, + 0.0002204843, + -0.011507102, + -0.000060669143, + -0.00082686753, + -0.013611259, + 0.009429249, + -0.0066083646, + -0.015347187, + 0.0012592059, + -0.005003946, + 0.011138875, + 0.027301423, + 0.04700158, + 0.00438585, + 0.018463967, + 0.029589692, + 0.012920832, + 0.004757365, + 0.018437667, + -6.5819086e-7, + 0.0018657945, + 0.0015805827, + -0.019463442, + -0.03140453, + -0.002475671, + 0.009600212, + -0.0059672548, + -0.016346661, + 0.0059047877, + -0.030326147, + -0.0014663336, + -0.008594162, + 0.030405054, + 0.03156234, + -0.0040603634, + -0.007851132, + 0.020423463, + 0.0068779597, + 0.037453976, + 0.014268807, + -0.03198317, + 0.010954762, + 0.009205682, + -0.034534458, + -0.0035967915, + -0.04155708, + -0.029089956, + -0.0006139861, + -0.0062631518, + 0.026959497, + -0.02035771, + -0.031009998, + 0.02050237, + 0.039374016, + -0.028721727, + -0.018108891, + -0.030457657, + -0.0009896108, + -0.040794324, + -0.025210418, + -0.0075223576, + 0.0021781302, + 0.044765916, + 0.012861653, + -0.016767493, + 0.037322465, + 0.0069174124, + -0.010159127, + -0.025026305, + -0.012039717, + 0.0005691906, + -0.0005696016, + 0.013861127, + 0.009021568, + 0.018569175, + 0.0067168605, + -0.012440822, + -0.014992111, + 0.012638086, + -0.010849554, + -0.02211994, + 0.0077130464, + 0.02685429, + -0.011658339, + 0.006897686, + -0.008515256, + 0.028853238, + 0.012631511, + 0.011901632, + -0.017438192, + -0.009685692, + 0.0011309838, + -0.027248818, + 0.011040243, + -0.0056516314, + 0.025000002, + 0.012421096, + 0.005191347, + 0.0015945557, + -0.033798005, + 0.016149396, + -0.019910576, + -0.006683983, + 0.017069966, + -0.0020482643, + 0.039216205, + 0.0337717, + 0.0042773546, + -0.0016529132, + -0.017043663, + 0.006042873, + 0.0052012103, + 0.021685958, + -0.018450817, + 0.031009998, + -0.016688587, + 0.0057502636, + 0.012019991, + 0.0035211735, + -0.016754342, + 0.014176751, + -0.022843244, + -0.008528407, + 0.019134669, + 0.013216729, + 0.009061022, + -0.0182141, + 0.030405054, + 0.0066149402, + 0.0036921361, + -0.0050729886, + 0.029747505, + 0.02538138, + -0.020554973, + -0.022803789, + -0.68385065, + -0.0296686, + 0.019936878, + -0.00556615, + 0.012532879, + 0.024855342, + 0.018056288, + 0.017609155, + 0.008732247, + -0.02496055, + 0.010731195, + 0.003217057, + 0.014084694, + -0.0087519735, + -0.0051847715, + -0.028169388, + -0.002307996, + 0.013413994, + -0.006424251, + -0.018937403, + -0.008581011, + 0.007943189, + -0.012802473, + 0.0030345875, + 0.017727513, + 0.0023885458, + 0.026735932, + 0.0023786826, + -0.01795108, + -0.014807997, + -0.024473963, + 0.014018939, + -0.009172805, + -0.019055761, + 0.04613362, + -0.013861127, + -0.021672806, + 0.025552344, + 0.014900054, + 0.03182536, + -0.011434772, + -0.009711995, + 0.013190428, + -0.019647555, + -0.00425434, + 0.008219359, + 0.021554448, + -0.0019315494, + 0.03290374, + -0.006371647, + 0.018385062, + -0.029379277, + -0.0045436616, + 0.011855603, + 0.0147027895, + 0.008101, + 0.027985273, + -0.0069831675, + 0.003422541, + 0.016991058, + 0.0053951875, + -0.0007426191, + -0.005523409, + -0.025184115, + -0.031115206, + -0.0021189507, + -0.04481852, + -0.018990006, + -0.011776698, + -0.0012378355, + 0.0008696082, + -0.005796292, + -0.006923988, + 0.012315888, + 0.02793267, + -0.008587587, + 0.032219887, + -0.01783272, + 0.002015387, + -0.0090478705, + 0.0058488958, + -0.011369018, + -0.033955816, + -0.01984482, + 0.024907947, + -0.017990533, + -0.013558655, + -0.02146239, + 0.0042905053, + -0.008705945, + 0.024184642, + -0.005155182, + -0.017267229, + -0.00869937, + -0.0121120475, + 0.040531304, + -0.0036756974, + 0.005710811, + 0.0080418205, + -0.018135194, + -0.009711995, + -0.01781957, + 0.0059836935, + 0.0033567862, + 0.031956866, + 0.00046727055, + -0.02510521, + 0.040110473, + 0.01241452, + -0.015557603, + 0.019660708, + -0.011947661, + -0.018108891, + 0.011408471, + 0.017030513, + -0.028511312, + 0.048211474, + 0.008784851, + 0.0175434, + -0.00869937, + -0.0006953578, + 0.009475277, + -0.0024329303, + -0.013861127, + 0.010566808, + 0.0037809052, + 0.006194109, + -0.01564966, + -0.036743823, + -0.0075618103, + 0.008640191, + 0.012920832, + 0.017372437, + 0.008416624, + 0.0044055763, + 0.00448777, + 0.013078644, + -0.019450292, + 0.022764336, + -0.015005262, + -0.005092715, + -0.008600737, + -0.020857446, + 0.016833248, + -0.001898672, + -0.03345608, + -0.022777488, + -0.0032762366, + -0.018306157, + 0.015478697, + -0.0189111, + -0.006424251, + -0.041899003, + 0.010297213, + 0.023290375, + -0.011086271, + -0.01288138, + -0.0042642034, + -0.014018939, + 0.025315626, + 0.0044943457, + 0.00445818, + -0.0038696742, + -0.0063486327, + -0.008410049, + -0.0148343, + -0.009231984, + 0.02592057, + -0.0011055038, + -0.031378224, + -0.0033156895, + -0.0020466205, + 0.0008141275, + -0.004504209, + -0.010514204, + -0.010468176, + -0.018937403, + -0.011579433, + 0.0061152033, + 0.002783075, + 0.02306681, + 0.0042773546, + -0.008166756, + -0.011829302, + 0.04308259, + -0.0029277357, + 0.006963441, + 0.008120727, + -0.0012674251, + 0.0013298923, + -0.013275909, + -0.011572857, + 0.005924514, + -0.0195555, + 0.007048922, + 0.0028291035, + 0.012453973, + 0.016701737, + -0.010132826, + -0.012644662, + 0.02198843, + -0.00951473, + 0.006552473, + -0.016386114, + 0.021962127, + -0.030694375, + 0.016951606, + -0.021212522, + 0.019318782, + 0.036875334, + 0.0058160187, + -0.025447136, + -0.013249607, + -0.01688585, + 0.018240402, + 0.011237508, + -0.026959497, + 0.0053655975, + 0.004244477, + -0.014229354, + 0.015071017, + 0.0076735937, + 0.024118887, + 0.003721726, + -0.015202527, + 0.0046784594, + 0.025736457, + 0.016333511, + -0.0050236722, + -0.019779066, + -0.017254079, + 0.0059014997, + -0.011724094, + 0.012066019, + -0.020028934, + -0.009554183, + 0.00843635, + -0.028932145, + 0.015399791, + 0.013887429, + -0.01159916, + 0.034297742, + 0.024750134, + 0.006230274, + 0.012874804, + -0.00032980178, + 0.01984482, + 0.004165571, + -0.022448713, + 0.003682273, + -0.010093373, + 0.010803525, + -0.0040702266, + 0.01889795, + 0.047027886, + -0.0050072335, + 0.040426094, + -0.0026351265, + 0.028432406, + 0.034350347, + -0.02361915, + -0.005168333, + 0.00012585893, + -0.0076998957, + 0.003938717, + -0.0132890595, + -0.0028110207, + -0.008725672, + -0.0034324042, + -0.0051091537, + -0.018319307, + -0.01025776, + 0.023395583, + -0.012927408, + 0.012467124, + -0.0087717, + -0.0086336145, + -0.0017836009, + 0.018937403, + 0.013532353, + -0.017556552, + -0.021962127, + 0.023566546, + -0.0011096135, + 0.0006949468, + -0.019910576, + -0.022238297, + 0.017240928, + -0.006693846, + 0.013177277, + 0.021238824, + 0.013611259, + 0.03579695, + -0.009823778, + 0.008127302, + -0.023908472, + 0.0052932673, + -0.0060724625, + 0.017556552, + 0.007180432, + -0.010474751, + -0.016228303, + -0.030115731, + -0.014860601, + 0.02982641, + 0.006148081, + -0.010067071, + 0.008410049, + -0.0112243565, + -0.032509208, + -0.01079695, + 0.01269069, + -0.00022027882, + -0.007903736, + -0.004438454, + -0.008054972, + -0.021659655, + -0.0026877304, + 0.025815362, + 0.017122569, + 0.0042937933, + -0.012848502, + -0.015833773, + 0.007325093, + 0.07390848, + 0.021357182, + 0.0035211735, + 0.0119936885, + 0.0023260787, + 0.0031397953, + -0.0310363, + 0.003346923, + -0.015820622, + -0.006437402, + 0.020344557, + -0.017425042, + -0.0013964691, + -0.00045083184, + -0.001360304, + -0.018437667, + 0.009251711, + -0.009823778, + 0.025697004, + -0.013690164, + 0.008955814, + -0.008968964, + -0.006937139, + 0.012421096, + 0.004066939, + -0.0016701737, + 0.016136246, + 0.00039021406, + 0.024250397, + -0.017477645, + 0.0007319339, + 0.014466072, + -0.0060987645, + -0.01200684, + -0.017609155, + 0.004461468, + 0.0034784328, + 0.0048921625, + 0.011625461, + -0.01295371, + 0.03390321, + 0.008087849, + 0.011027092, + -0.016543927, + -0.011152026, + 0.005779853, + -0.020015784, + 0.020568125, + -0.019792216, + -0.012066019, + 0.025578646, + 0.022106789, + -0.009488428, + 0.002423067, + 0.026814837, + 0.006092189, + -0.003115137, + -0.0069831675, + -0.0008412514, + -0.007219885, + 0.014952658, + -0.008061548, + 0.013295636, + -0.0070883753, + -0.018740138, + 0.00051370997, + -0.01443977, + -0.007298791, + -0.023158867, + 0.0005811087, + 0.0029096531, + -0.021225672, + -0.020804841, + -0.00013695507, + 0.018371912, + 0.011835877, + 0.018398214, + -0.028169388, + -0.015702264, + 0.041793797, + -0.012322463, + -0.004859285, + -0.015031564, + -0.011178329, + -0.0070554977, + 0.0085744355, + 0.025539193, + -0.026367703, + -0.011007366, + -0.014781696, + 0.022567073, + 0.002215939, + 0.007390848, + -0.00351131, + -0.010034193, + -0.020988956, + 0.013203578, + -0.00022007334, + -0.0038762498, + -0.0106391385, + -0.000099608355, + -0.018385062, + -0.0042872177, + -0.012164651, + 0.016162548, + 0.0023819702, + 0.009402947, + 0.008824304, + -0.008166756, + 0.013216729, + 0.020462917, + -0.011625461, + -0.01207917, + -0.0044351663, + 0.00072659133, + 0.017714363, + -0.009343768, + 0.018187799, + 0.008962389, + -0.020620728, + -0.0040702266, + -0.02809048, + 0.013065493, + 0.0031776042, + 0.0057601267, + 0.008114152, + 0.028169388, + -0.010027618, + -0.019594952, + 0.008488954, + -0.008265387, + 0.01929248, + -0.0069700163, + -0.016793795, + -0.03182536, + -0.021409787, + 0.036270387, + -0.001117011, + -0.008890059, + -0.0027682802, + 0.007311942, + 0.00039288535, + 0.0081601795, + 0.0064702793, + -0.032535512, + -0.02402683, + 0.0004220641, + -0.014873752, + -0.0027370467, + 0.023790114, + -0.0025660838, + 0.00032774694, + -0.008311416, + 0.016162548, + -0.004310232, + -0.013690164, + -0.0350868, + -0.0195818, + 0.025000002, + 0.022580223, + 0.023540244, + 0.0011326277, + 0.012033142, + 0.00073933136, + -0.0054708053, + -0.00081083976, + -0.019542348, + 0.0042148875, + -0.038663864, + 0.010415572, + 0.024513416, + -0.0053557344, + 0.014860601, + 0.0004820654, + 0.009100474, + 0.018884799, + 0.0039288537, + 0.0027929381, + -0.022567073, + -0.028642822, + 0.012322463, + -0.0036329567, + -0.01849027, + -0.001077558, + 0.013519201, + -0.012381642, + 0.02618359, + 0.0077130464, + -0.0027584168, + 0.014781696, + 0.025591796, + -0.0087717, + 0.032325096, + -0.007772226, + -0.004500921, + -0.0076078386, + -0.024263548, + -0.006578775, + 0.0033189773, + 0.005359022, + 0.016517624, + 0.004323383, + 0.0019331933, + -0.040031567, + 0.019792216, + 0.019358234, + 0.022475015, + -0.0016225015, + -0.009402947, + -0.024697531, + -0.025710154, + -0.029458184, + -0.03548133, + -0.035954766, + 0.019739613, + -0.0006304248, + -0.037874807, + 0.022987904, + -0.010645714, + -0.019963179, + 0.009567334, + 0.008798002, + 0.034876384, + 0.0023260787, + 0.018266704, + 0.0017474358, + 0.007594688, + -0.005336008, + 0.011441348, + 0.000022063841, + -0.009067597, + 0.017359287, + 0.012105472, + -0.009764599, + 0.020633878, + 0.009435824, + 0.027880065, + 0.018924253, + -0.010790375, + 0.004218175, + -0.0050433986, + 0.010159127, + -0.031220414, + 0.008705945, + -0.027564442, + 0.014110995, + -0.024881644, + -0.007127828, + 0.0011260522, + -0.01120463, + -0.015597056, + 0.007114677, + -0.03061547, + 0.011447923, + 0.017582852, + -0.001834561, + 0.006424251, + -0.0115202535, + -0.01578117, + 0.008982115, + -0.005529985, + 0.032193586, + -0.0006143971, + 0.006450553, + -0.00482312, + 0.0020120991, + -0.013012889, + -0.011730669, + -0.011250659, + 0.024631776, + -0.0009937205, + -0.011395319, + -0.010145977, + 0.012269859, + 0.045896903, + -0.016136246, + -0.0022603238, + -0.013078644, + -0.0011112574, + -0.003243359, + -0.0010594754, + 0.0074697537, + -0.0050960025, + 0.018542875, + -0.016846398, + -0.00830484, + -0.026551818, + -0.0011252302, + 0.008462653, + -0.008114152, + -0.006595214, + -0.029089956, + 0.0049020257, + -0.011546556, + 0.000026430376, + -0.019384537, + 0.020278802, + 0.01086928, + -0.012723568, + 0.018529722, + -0.012315888, + 0.011322989, + 0.0041754344, + 0.017582852, + -0.004859285, + -0.011789849, + 0.03387691, + -0.018950554, + -0.035297215, + -0.031799056, + -0.003912415, + -0.003218701, + 0.005986981, + 0.00024596433, + 0.011947661, + -0.0111323, + 0.01984482, + -0.019042611, + 0.0008424843, + -0.0024164915, + -0.041872703, + 0.021146767, + 0.02714361, + -0.0195555, + 0.00009390618, + 0.006923988, + -0.010632562, + -0.0006953578, + -0.026670177, + -0.0045962655, + 0.00064193195, + 0.02146239, + 0.011579433, + -0.006693846, + 0.0029178725, + -0.0006731655, + -0.018043136, + 0.0029688324, + 0.0018394926, + 0.010455024, + 0.0037776174, + -0.00078248297, + -0.022724884, + 0.016412416, + -0.011145451, + 0.010606261, + -0.006552473, + -0.024079435, + -0.006486718, + -0.01659653, + -0.002063059, + -0.0027337589, + 0.0011326277, + -0.032088377, + -0.013926882, + -0.0026088245, + -0.0002461698, + -0.010994215, + 0.0034948715, + 0.014992111, + 0.013453447, + -0.015478697, + -0.016412416, + 0.01660968, + -0.01120463, + -0.0075289328, + -0.003886113, + -0.012677539, + -0.0076801693, + -0.009192531, + 0.015347187, + 0.0029556814, + -0.0042905053, + -0.019818518, + 0.022001581, + -0.01033009, + 0.0037907683, + -0.005299843, + -0.024210945, + -0.0023523807, + 0.016228303, + 0.0222646, + 0.034297742, + 0.024237245, + -0.0028817074, + -0.013295636, + -0.016254604, + 0.014781696, + 0.030852186, + -0.0115202535, + 0.00795634, + -0.00030678758, + -0.011802999, + 0.0010808457, + -0.016149396, + 0.0014441414, + 0.021633353, + 0.015163073, + 0.02415834, + -0.008850606, + 0.017990533, + 0.024487115, + 0.008061548, + -0.019200424, + -0.009902684, + -0.022777488, + -0.045686487, + -0.0018362048, + 0.006706997, + -0.02173856, + 0.0032055501, + -0.034429252, + -0.004800106, + -0.0148343, + 0.002783075, + -0.00702262, + -0.0074039986, + -0.015478697, + 0.015991585, + 0.0175434, + -0.0059047877, + 0.010994215, + -0.020028934, + -0.007140979, + -0.008982115, + -0.010270911, + -0.014518676, + -0.024539718, + -0.003563914, + -0.0076472918, + -0.004066939, + -0.03361389, + -0.0056088907, + -0.004951342, + 0.010783799, + 0.013210154, + 0.21378224, + 0.008002368, + -0.0118161505, + 0.031956866, + -0.016162548, + 0.028695427, + 0.014860601, + -0.001768806, + 0.033245664, + 0.031088904, + -0.021554448, + -0.0005354913, + -0.0009304315, + -0.007870859, + 0.008883484, + -0.0027814312, + -0.036480803, + -0.015320885, + -0.0038400847, + -0.012026566, + 0.011152026, + -0.00096248696, + -0.000949336, + -0.00088111527, + 0.028537614, + 0.016031038, + -0.003269661, + -0.0005301487, + 0.014466072, + 0.012835351, + -0.0020548399, + -0.015965283, + 0.0031217125, + -0.008344294, + 0.003655971, + -0.0051091537, + 0.008541558, + -0.0135849565, + 0.014650186, + 0.024907947, + 0.006720148, + -0.00644069, + -0.0061349296, + -0.004116255, + -0.009330616, + 0.0016027751, + -0.016767493, + 0.0033650056, + 0.022567073, + 0.010573383, + -0.010021043, + -0.010455024, + 0.04642294, + 0.012092321, + -0.00485271, + 0.021935826, + 0.032219887, + -0.0125263035, + 0.021291427, + 0.00351131, + -0.017477645, + 0.032851133, + -0.027406631, + 0.001334002, + 0.0030855474, + 0.004556813, + -0.0091662295, + 0.0026334827, + 0.024579171, + -0.022764336, + 0.0072790645, + -0.008896634, + -0.0069305636, + 0.004911889, + -0.007884009, + -0.024184642, + 0.024789587, + -0.002168267, + 0.024934247, + 0.015807472, + -0.021436088, + -0.0022044322, + -0.013249607, + 0.015991585, + -0.004500921, + -0.008068123, + 0.00251348, + 0.013953184, + 0.021935826, + -0.0076078386, + 0.005441216, + -0.0003026779, + -0.00080097653, + 0.012677539, + 0.029484484, + 0.014755393, + -0.00543464, + 0.0015238692, + -0.018740138, + -0.0013874278, + -0.037322465, + -0.048606, + 0.007877434, + -0.0034587062, + -0.010954762, + 0.004129406, + -0.002912941, + -0.004553525, + 0.033140454, + 0.0012115336, + 0.009527881, + -0.010875856, + 0.0006078216, + 0.0018756577, + 0.00053672417, + -0.0057009473, + -0.0027238957, + -0.008107576, + -0.01228301, + -0.0105207795, + 0.001859219, + -0.0168727, + 0.00135866, + 0.001513184, + -0.0012887955, + -0.01564966, + -0.0145844305, + -0.002345805, + 0.0026827988, + -0.04210942, + 0.035849556, + -0.012901106, + 0.01713572, + 0.005691084, + 0.0050697005, + 0.010862705, + -0.0024329303, + -0.0046094167, + -0.0058488958, + -0.005503683, + -0.0028488298, + -0.008120727, + 0.0202262, + -0.0082785385, + 0.004451605, + -0.0043661236, + 0.018569175, + -0.013861127, + -0.029615995, + -0.023605999, + -0.015504999, + 0.0031792482, + -0.01847712, + -0.010941611, + 0.015320885, + -0.010895583, + -0.030063128, + -0.0020794978, + -0.0012024923, + 0.019950029, + -0.025210418, + 0.0077130464, + 0.02306681, + -0.011684641, + 0.011493952, + 0.0106391385, + -0.16927934, + 0.026880592, + 0.017714363, + -0.022198845, + 0.004826408, + 0.011684641, + 0.012763021, + 0.025000002, + -0.016280906, + 0.034981593, + -0.013847976, + 0.01295371, + -0.039926358, + -0.014321411, + 0.0024082721, + 0.002140321, + 0.0063420576, + -0.0000573814, + 0.023264075, + 0.011027092, + 0.013190428, + -0.0098698065, + 0.019739613, + 0.009422673, + 0.012098896, + -0.0020811418, + -0.014531827, + 0.017924778, + 0.00034459663, + -0.0068122046, + 0.0044713314, + -0.0029211603, + 0.0025397819, + 0.023763811, + 0.017385589, + -0.0059080753, + -0.007101526, + 0.003731589, + 0.001076736, + -0.004011047, + 0.0011630394, + 0.034218837, + 0.008909785, + -0.000055069704, + -0.00256444, + 0.016820097, + 0.019792216, + 0.016767493, + 0.0008005656, + -0.0051157293, + 0.01971331, + -0.03227249, + -0.006799054, + -0.0096330885, + 0.01688585, + 0.014768545, + 0.0104616005, + 0.002385258, + -0.010428723, + 0.014255656, + -0.0009945425, + -0.041977912, + -0.006522883, + 0.01133614, + -0.013558655, + 0.002400053, + 0.005503683, + 0.017096266, + 0.0044811945, + 0.00197429, + -0.015426093, + -0.0041359817, + -0.0031907551, + -0.020002631, + -0.009218833, + 0.000653439, + -0.004888875, + -0.010303789, + -0.006210548, + -0.023540244, + 0.005977118, + 0.021896373, + -0.024855342, + -0.004530511, + -0.00748948, + 0.009159653, + 0.0026647162, + 0.0045206477, + -0.015136772, + -0.009153078, + 0.030457657, + -0.034297742, + -0.004576539, + -0.026735932, + 0.0053392956, + 0.018029986, + 0.0019677146, + -0.00762099, + 0.0037546032, + 0.015097319, + -0.0016915441, + 0.001949632, + -0.022330355, + 0.01983167, + 0.032745928, + 0.01443977, + -0.019200424, + 0.0075618103, + 0.03387691, + -0.0063321944, + -0.017293531, + 0.026380856, + -0.0007298791, + 0.010474751, + 0.010231459, + 0.011079696, + 0.014650186, + -0.0175434, + 0.015728565, + 0.013742768, + 0.024066284, + -0.0057502636, + 0.005181484, + 0.010810101, + 0.009422673, + -0.030405054, + -0.10352447, + -0.007667018, + 0.015675962, + 0.02859022, + 0.0063387696, + 0.019226724, + 0.009324041, + 0.009902684, + -0.0063289064, + 0.033087853, + -0.00681878, + -0.02227775, + -0.01875329, + 0.0033699372, + 0.006190821, + 0.00044918797, + 0.014676488, + -0.026670177, + -0.034455553, + 0.01443977, + -0.023158867, + 0.003872962, + 0.0016208576, + -0.011454498, + -0.0070357714, + 0.013650712, + -0.01593898, + 0.0100473445, + 0.009672542, + -0.0014794846, + 0.018845346, + -0.008173331, + -0.0046225674, + -0.013808523, + -0.022054184, + -0.008475803, + 0.009304315, + 0.0048198323, + 0.031799056, + -0.03358759, + -0.0010183785, + 0.0068779597, + 0.026262496, + -0.020042086, + 0.0044811945, + 0.012368492, + -0.011355867, + 0.0137033155, + 0.0048165442, + -0.027196215, + 0.009317465, + 0.014281958, + -0.039505526, + -0.008377171, + 0.05063125, + -0.027169913, + 0.023908472, + 0.007463178, + -0.027511839, + 0.0152945835, + -0.0015189375, + 0.009389795, + 0.0035704896, + 0.033982117, + -0.02887954, + -0.01221068, + -0.05628617, + -0.017648607, + 0.023566546, + -0.023435036, + 0.0067037093, + 0.0072396114, + -0.029247768, + 0.006897686, + -0.027643349, + 0.01073777, + -0.020410312, + -0.007029196, + 0.011802999, + -0.01146765, + -0.024197793, + -0.034902688, + 0.00028788304, + -0.00610534, + -0.0042674914, + 0.015728565, + -0.012914257, + -0.011789849, + 0.019055761, + -0.01685955, + 0.009297739, + 0.028853238, + 0.009264861, + -0.014597582, + -0.009856655, + 0.025210418, + 0.0074697537, + -0.003629669, + 0.0054839565, + -0.02901105, + -0.026249345, + -0.00032260985, + -0.03603367, + 0.015702264, + -0.0027534852, + -0.021028409, + -0.017477645, + 0.012322463, + -0.012434246, + 0.008107576, + -0.014281958, + 0.005322857, + -0.011447923, + 0.0005063125, + -0.029300371, + -0.018884799, + -0.005720674, + -0.005753551, + -0.00036596696, + -0.00027925274, + 0.014926356, + 0.0019841532, + -0.001038927, + 0.0065853503, + -0.005845608, + 0.008179906, + -0.034744874, + 0.0041688588, + -0.025578646, + -0.011270385, + -0.020975804, + -0.0071607055, + 0.034508158, + -0.025578646, + 0.0042214626, + 0.03537612, + -0.021870071, + -0.032824833, + 0.0047047613, + 0.02522357, + 0.016044188, + -0.01592583, + -0.030168336, + -0.02619674, + 0.013966335, + 0.0013307142, + -0.017346136, + 0.021962127, + -0.0056614946, + 0.008758549, + -0.004165571, + 0.0088703325, + 0.024934247, + 0.018424515, + 0.016044188, + -0.00448777, + -0.0050729886, + -0.0038630988, + 0.031536035, + 0.010967913, + 0.007233036, + -0.016767493, + 0.0017868887, + -0.011112574, + 0.02307996, + 0.015544452, + -0.010244609, + 0.013690164, + 0.0037940561, + -0.0076998957, + 0.0028702002, + -0.03669122, + -0.011487376, + -0.005217649, + 0.037453976, + 0.017043663, + 0.013275909, + -0.0066774073, + -0.004510784, + -0.0126972655, + -0.0084560765, + 0.025749609, + 0.009876382, + -0.00010058441, + -0.003524461, + 0.008798002, + 0.031483434, + 0.023921622, + -0.04497633, + -0.0074829045, + 0.024921097, + 0.004800106, + -0.016478172, + 0.015583904, + 0.015873225, + 0.0073842723, + 0.019200424, + 0.0012427671, + -0.0054971073, + -0.0056746453, + -0.0049184645, + 0.01174382, + 0.020002631, + -0.014807997, + -0.012809049, + -0.029642297, + -0.01288138, + 0.015097319, + -0.0061710947, + -0.009587061, + -0.013795372, + 0.017503947, + 0.016964758, + -0.01607049, + 0.018700685, + 0.01551815, + -0.011888481, + -0.0019792216, + -0.044292483, + -0.013006314, + -0.022606526, + 0.0009764599, + 0.008863756, + 0.0047310633, + 0.014531827, + -0.0009863231, + 0.01956865, + 0.015281432, + 0.028984748, + -0.0364282, + 0.02350079, + -0.0008424843, + 0.01563651, + 0.0152945835, + -0.017753815, + -0.005737113, + -0.026775384, + -0.01159916, + -0.0025825226, + 0.018832196, + -0.0010693386, + 0.050131515, + -0.007976066, + -0.028800635, + 0.033508684, + -0.012289586, + 0.0003076095, + 0.012828776, + -0.018319307, + -0.025670702, + -0.012243558, + 0.0045173597, + 0.00830484, + 0.018819045, + -0.024210945, + -0.020896899, + -0.0028175963, + -0.02589427, + 0.021896373, + -0.028432406, + -0.0010528999, + 0.012296162, + 0.013611259, + 0.013124673, + 0.015399791, + -0.02861652, + -0.025144663, + 0.015702264, + 0.017056813, + 0.009764599, + -0.0089886915, + 0.017201474, + -0.009297739, + -0.028695427, + -0.016543927, + 0.010810101, + -0.028485011, + -0.00985008, + 0.0025611522, + 0.017280381, + 0.016320359, + 0.005513546, + 0.02144924, + -0.024368756, + -0.023540244, + -0.00022870366, + -0.019516047, + -0.0025562206, + 0.0040241983, + -0.00533272 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.017523589, + 0.00006212279, + -0.00040200076, + -0.02405605, + -0.0050159977, + 0.018119805, + -0.017679123, + -0.013687063, + 0.0186901, + -0.009098786, + -0.00013609296, + 0.022552546, + -0.006143625, + 0.012384459, + -0.016642224, + -0.008534973, + 0.027711118, + 0.013213978, + 0.027918497, + -0.02352464, + -0.029784916, + 0.021036083, + -0.007368461, + 0.0015593985, + -0.019182626, + -0.016020086, + 0.008035965, + -0.017873542, + -0.0028417506, + 0.018677138, + 0.0047308505, + -0.016694069, + 0.008735872, + -0.03600631, + -0.025170716, + 0.0021823477, + 0.0042383233, + -0.010057918, + 0.018080922, + -0.0109328, + 0.011917855, + 0.011483653, + -0.0006026974, + -0.012015064, + -0.008217422, + 0.012306691, + 0.028125877, + 0.0096626, + -0.009474662, + 0.019273356, + 0.0072453297, + 0.033647362, + -0.013933326, + -0.019247433, + -0.001123577, + -0.028203646, + 0.0036712694, + 0.01186601, + -0.0022098904, + -0.008709949, + -0.021087928, + -0.01817165, + 0.0004909067, + -0.007031469, + -0.0041767578, + 0.0003876219, + -0.016499652, + -0.0052914238, + 0.009636678, + 0.017886503, + 0.02784073, + 0.024937414, + 0.013220458, + 0.02195633, + 0.021723028, + 0.016110813, + -0.0038008818, + 0.000109765446, + 0.00061930396, + -0.0013325769, + -0.0013293365, + -0.020336175, + -0.043186832, + -0.016046008, + 0.0104597155, + 0.0045429124, + -0.025157755, + 0.011042971, + -0.0340362, + -0.020219525, + 0.00037830602, + 0.033362217, + 0.017199557, + -0.011885451, + -0.00018783663, + 0.018223494, + 0.020323215, + 0.02846287, + 0.0071351593, + -0.02877394, + 0.0092543205, + 0.014516582, + -0.04212401, + -0.002499898, + -0.041190803, + -0.017458782, + -0.0018421153, + -0.011567901, + 0.028955396, + -0.019921416, + -0.03958361, + 0.022669198, + 0.03927254, + -0.03004414, + -0.009280244, + -0.011898412, + -0.009882941, + -0.022928422, + -0.02006399, + 0.0071157175, + 0.007971159, + 0.037354276, + 0.008463685, + -0.0052330983, + 0.018223494, + 0.00756288, + -0.017510626, + -0.032014247, + 0.00036190194, + -0.00008986793, + 0.012572397, + 0.013298226, + 0.017497666, + 0.017186597, + -0.016564457, + -0.0134408, + -0.0032516494, + 0.014127745, + -0.006629671, + -0.021437882, + 0.0008570616, + 0.032999303, + -0.018949324, + -0.010861514, + -0.0016549876, + 0.037146896, + 0.0151646435, + -0.004578556, + -0.015618287, + -0.0035902618, + 0.0027461615, + -0.028385103, + 0.013803714, + 0.005223377, + 0.0090275, + 0.02405605, + -0.009312646, + 0.016460767, + -0.026959367, + 0.014555465, + -0.022280362, + 0.0011462591, + 0.030432977, + -0.009183034, + 0.039635453, + 0.0222674, + 0.004756773, + 0.019273356, + -0.018003155, + 0.0051618116, + -0.009144151, + 0.039039236, + -0.03730243, + 0.03214386, + -0.0048896256, + 0.0212305, + 0.0032305876, + 0.0001013609, + -0.016538534, + 0.009934786, + -0.03297338, + -0.010887437, + 0.019053014, + 0.0012418482, + 0.0033277967, + -0.008223902, + 0.011632707, + -0.011386444, + 0.011140181, + -0.0034962927, + 0.024561537, + 0.01712179, + -0.019830687, + -0.026907522, + -0.6847679, + -0.036706213, + 0.016214503, + -0.0060658576, + 0.0059070825, + 0.019947339, + 0.015216488, + 0.023174686, + 0.00283689, + -0.017692083, + 0.0030815334, + -0.000043946682, + 0.012889947, + -0.0058455165, + 0.0039142924, + -0.012015064, + -0.0053724316, + 0.012617761, + 0.0014476078, + -0.018016115, + 0.0078091435, + 0.0052168965, + -0.001502693, + 0.0027785646, + 0.023978282, + 0.0007080074, + 0.02552067, + 0.008554414, + -0.017990192, + 0.0055733304, + -0.0073555, + 0.017199557, + 0.0068240897, + -0.0033018743, + 0.044871792, + -0.013855559, + -0.025624359, + 0.01815869, + 0.027607428, + 0.012481668, + -0.005385393, + -0.017303247, + -0.0023249213, + -0.018249417, + -0.0045655947, + 0.010368987, + 0.014529543, + -0.011742878, + 0.033906586, + 0.009908863, + 0.026298344, + -0.036809903, + -0.0017805495, + 0.0009915344, + 0.015683092, + 0.010116243, + 0.03800234, + 0.0016436465, + -0.005421036, + -0.002363805, + -0.017342132, + -0.01554052, + -0.011315157, + -0.025753971, + -0.020984238, + 0.011535498, + -0.040050212, + -0.031599488, + -0.010621731, + -0.0094357785, + -0.006461175, + 0.011943777, + -0.0134408, + 0.02395236, + 0.017497666, + -0.00059095124, + 0.02763335, + -0.010245855, + -0.001565069, + -0.0036291454, + 0.02500222, + -0.014685078, + -0.027788885, + -0.023602407, + 0.04214993, + -0.015060954, + -0.012481668, + -0.011179064, + 0.015294256, + -0.011658629, + 0.032299396, + -0.0029713628, + -0.015566442, + -0.015190566, + -0.0059524467, + 0.03572116, + -0.0005998621, + -0.0016671387, + 0.012157638, + -0.009882941, + -0.0016314953, + -0.00367775, + -0.0025274407, + 0.003264611, + 0.03258454, + -0.0071027563, + -0.022643276, + 0.03025152, + 0.009202476, + -0.017355092, + 0.021062005, + -0.020413943, + -0.0176532, + 0.0026505722, + -0.00054153654, + -0.027918497, + 0.03362144, + 0.012468707, + 0.013570412, + -0.009105267, + 0.0052330983, + 0.0040179826, + -0.007731376, + -0.008735872, + 0.012857544, + 0.008943251, + -0.010122724, + -0.014736922, + -0.01731621, + -0.00050913345, + -0.0070055467, + -0.0005022478, + 0.025248483, + 0.0061533456, + -0.0036647888, + 0.00079266046, + 0.013609296, + -0.010414352, + 0.04106119, + -0.015773822, + -0.023265414, + -0.005097005, + -0.023226531, + 0.024652267, + -0.005223377, + -0.027140824, + -0.024989258, + -0.007206446, + -0.037017282, + 0.01806796, + -0.014905419, + -0.019299278, + -0.025339212, + 0.032429006, + 0.019986223, + -0.0047535324, + -0.021165695, + 0.008152616, + -0.021334192, + 0.01786058, + 0.003392603, + 0.0041346336, + -0.0018972006, + 0.006986105, + 0.0000714893, + -0.028748017, + -0.012215963, + 0.03541009, + -0.009805174, + -0.032429006, + 0.015696054, + 0.0045234705, + -0.0032224867, + 0.00703795, + -0.024069011, + -0.0096626, + -0.021139773, + -0.03266231, + 0.017082905, + -0.0099801505, + 0.012902908, + 0.021710066, + 0.0022196113, + -0.021800796, + 0.03245493, + 0.004977114, + 0.017743928, + 0.018482719, + 0.008573856, + -0.012520552, + -0.005515005, + 0.004086029, + -0.014335125, + -0.009967189, + 0.017808735, + 0.0011179064, + 0.010142165, + 0.01879379, + 0.014244396, + -0.0029567815, + 0.022034097, + -0.009241359, + 0.0071157175, + -0.010738382, + 0.005725625, + -0.048682395, + 0.019701075, + -0.008684027, + -0.0024545337, + 0.021813756, + -0.0052168965, + -0.023693135, + -0.01261128, + -0.016538534, + 0.020543555, + 0.002593867, + -0.017069945, + 0.015501636, + 0.00019077316, + -0.016201543, + 0.007919314, + 0.008210941, + 0.026596451, + 0.006594028, + -0.012319652, + 0.0066879964, + 0.038106028, + 0.006662074, + -0.011736398, + -0.012805699, + -0.02102312, + -0.0013350071, + -0.016707031, + 0.020699091, + -0.034399115, + -0.008625701, + 0.009831096, + -0.038935546, + 0.016992178, + 0.014399931, + -0.004792416, + 0.043186832, + 0.020452827, + -0.006166307, + 0.004546153, + 0.019947339, + 0.010057918, + 0.008658105, + -0.016525574, + 0.004497548, + -0.028644327, + 0.0012734412, + -0.006321842, + 0.017912425, + 0.030614434, + -0.0052492996, + 0.03416581, + 0.009526507, + 0.03318076, + 0.018210534, + -0.011114258, + -0.0064773764, + 0.0019312239, + -0.00058325555, + -0.0009615615, + -0.0055733304, + -0.008852523, + -0.011684553, + -0.013959249, + -0.014762846, + -0.011315157, + 0.011088336, + 0.028099954, + -0.015605326, + 0.014192551, + -0.013946287, + -0.010031995, + -0.014879497, + 0.020621324, + 0.014011093, + -0.013907404, + -0.039557684, + 0.02426343, + -0.011937296, + -0.007860988, + -0.018314224, + -0.025261445, + 0.020660207, + -0.0017578673, + 0.013518567, + 0.016940333, + 0.0072842133, + 0.023757942, + -0.019130781, + 0.0059070825, + -0.043446057, + 0.0040244632, + -0.002930859, + 0.024613382, + 0.0031641612, + -0.0010952243, + -0.009338569, + -0.035487857, + -0.012060428, + 0.0140759, + -0.0017287045, + -0.004977114, + 0.010524522, + -0.01112722, + -0.037250586, + -0.005061362, + 0.0023152004, + 0.0015310458, + -0.019078936, + -0.012326133, + 0.0069925855, + -0.028203646, + -0.014788768, + 0.02511887, + 0.009753329, + -0.003875409, + -0.016642224, + -0.01312325, + 0.012416862, + 0.08118917, + 0.0067592836, + -0.0043096105, + 0.00504192, + -0.0024853165, + -0.015579403, + -0.02279881, + 0.004662804, + -0.0097403675, + 0.009396895, + 0.016512612, + -0.01712179, + 0.013998132, + 0.004047145, + -0.013738908, + -0.0035578588, + 0.0058746794, + -0.0019782083, + 0.02121754, + -0.022461819, + -0.0007683581, + 0.0065713455, + -0.007303655, + 0.015851589, + 0.009202476, + -0.016421882, + 0.02090647, + 0.0032905333, + 0.027374126, + -0.0045072692, + -0.003593502, + 0.011891932, + -0.014723961, + -0.015851589, + -0.01134108, + -0.006752803, + -0.015151682, + 0.0039142924, + 0.006837051, + -0.014153668, + 0.031884637, + 0.020400982, + 0.012481668, + -0.016888488, + -0.0075369575, + 0.01292235, + -0.0085932985, + 0.022708083, + -0.0067592836, + -0.0048248195, + 0.022980267, + 0.0105828475, + -0.0034282464, + 0.0027364404, + 0.013324148, + 0.008023004, + -0.000054528315, + 0.00012606825, + 0.0016752395, + -0.010466197, + 0.013790753, + -0.013142691, + 0.011263312, + -0.0033990836, + -0.027918497, + -0.0193252, + -0.004273967, + 0.0022860377, + -0.024548577, + -0.004630401, + -0.0015221349, + -0.017614316, + -0.020945353, + -0.0027753243, + 0.02531329, + 0.016240425, + 0.0096172355, + -0.009759809, + -0.015320178, + 0.034943487, + -0.013226939, + -0.00053465087, + -0.0042804475, + 0.0012726311, + -0.007660089, + 0.0025825258, + 0.033310372, + -0.028385103, + -0.015514597, + 0.0010903638, + 0.039039236, + -0.005839036, + 0.013687063, + -0.014477698, + 0.0053141057, + -0.0044424627, + 0.0077961823, + 0.0049933153, + -0.009085825, + -0.011574382, + 0.0126890475, + -0.024885569, + -0.014309202, + -0.013635218, + 0.003998541, + 0.0186901, + 0.009779251, + 0.005485842, + -0.030821813, + -0.001733565, + 0.012377978, + -0.002331402, + -0.009798693, + -0.004277207, + 0.015397945, + 0.018236456, + -0.014412892, + 0.02615577, + 0.0064028497, + -0.020025106, + 0.017666161, + -0.038365252, + 0.023576485, + 0.006733361, + -0.009468181, + -0.00388513, + 0.027374126, + -0.001806472, + -0.012643684, + 0.013712985, + 0.0023913477, + 0.010556925, + -0.013725947, + -0.02708898, + -0.04023167, + -0.025792856, + 0.036602523, + 0.0032484091, + -0.01522945, + -0.0061630667, + 0.0041540754, + 0.014775807, + 0.0030993551, + -0.000056654768, + -0.011703994, + -0.021645261, + 0.011276273, + -0.012436304, + -0.010323623, + 0.023278376, + -0.0047114086, + -0.0024205104, + -0.012682567, + 0.012585358, + 0.004873424, + -0.020323215, + -0.020232486, + -0.023615368, + 0.022721043, + 0.0016250147, + 0.019610347, + -0.0034800912, + 0.0031430991, + -0.00483454, + -0.004380897, + -0.0019036812, + -0.0045072692, + 0.0069601825, + -0.041424103, + 0.014555465, + 0.02373202, + 0.0072647715, + 0.015099837, + -0.0053400286, + 0.010349546, + 0.029758994, + 0.0010020654, + -0.0056510977, + -0.022656238, + -0.021204578, + -0.0041443547, + -0.010485638, + -0.01335007, + -0.017471744, + 0.0020089913, + -0.0057807104, + 0.03543601, + 0.008794197, + 0.0051942146, + -0.0010449995, + 0.029136853, + -0.011457731, + 0.03727651, + -0.0072194072, + 0.00043622652, + -0.0073295776, + -0.014879497, + -0.0061922297, + 0.0042966492, + 0.011269793, + 0.01796427, + 0.011276273, + -0.0078674685, + -0.026505724, + 0.006383408, + 0.017899465, + 0.027063057, + 0.000034985205, + -0.01303252, + -0.014335125, + -0.0042998893, + -0.017277325, + -0.028099954, + -0.053452127, + 0.012047467, + -0.0004054436, + -0.030951427, + 0.027114902, + -0.014555465, + -0.012915869, + -0.00924784, + 0.003023208, + 0.023161724, + -0.0034930524, + 0.019908456, + 0.0060658576, + -0.0075693605, + -0.010518041, + 0.0017627279, + -0.011885451, + -0.0010684917, + 0.025974313, + 0.018236456, + -0.008347034, + 0.025468824, + 0.016797759, + 0.01659038, + 0.02931831, + -0.0052687414, + -0.017588394, + 0.0068111285, + 0.014970225, + -0.026350189, + 0.0062635164, + -0.02447081, + 0.02111385, + -0.017471744, + -0.02111385, + 0.0063412837, + -0.0010490499, + -0.013246381, + -0.003813843, + -0.042797994, + 0.009306166, + 0.009390414, + 0.005417796, + 0.008126694, + -0.0007420306, + -0.028877629, + -0.0039240136, + -0.0050905244, + 0.030173752, + -0.001858317, + 0.008599779, + 0.006419051, + 0.012481668, + -0.018858595, + -0.0053303074, + 0.0030539907, + 0.025637321, + -0.010122724, + 0.004423021, + -0.008003562, + 0.024872608, + 0.04728258, + -0.016007124, + -0.0051488504, + -0.0034282464, + -0.008742352, + -0.0097403675, + 0.007737857, + 0.009921825, + -0.011354041, + 0.006383408, + -0.026090965, + -0.006986105, + -0.0363433, + 0.008431283, + -0.0046206797, + -0.018988207, + -0.0013366273, + -0.0151646435, + 0.009358011, + 0.0066879964, + 0.012766816, + 0.0025015182, + 0.026116887, + 0.009358011, + -0.0135963345, + 0.027244514, + -0.02215075, + 0.02141196, + -0.0038948508, + 0.017160675, + 0.009753329, + -0.022513663, + 0.023045074, + -0.02102312, + -0.028177723, + -0.022384051, + -0.008586817, + -0.017730968, + 0.0069277794, + -0.005644617, + 0.0009356391, + -0.013259342, + 0.0015626388, + -0.02342095, + -0.012164118, + -0.008781236, + -0.026726063, + 0.011263312, + 0.028177723, + -0.018106844, + 0.0036226648, + 0.0061501055, + -0.0010296081, + -0.001040139, + -0.030536667, + -0.0023881074, + -0.012643684, + 0.0155275585, + 0.009396895, + -0.011639188, + 0.0027137583, + -0.013674102, + -0.01889748, + 0.007835066, + -0.0040536257, + 0.014490659, + 0.005631656, + -0.0009842437, + -0.026220577, + 0.01786058, + -0.015203527, + 0.013110288, + -0.014516582, + -0.03204017, + -0.018638255, + 0.0005557129, + 0.014399931, + -0.00924784, + -0.011639188, + -0.040179826, + -0.014361047, + -0.0054048346, + -0.008664585, + 0.00084491045, + 0.010965204, + 0.0134148775, + 0.021645261, + -0.011042971, + -0.011282754, + 0.016642224, + 0.0040082615, + -0.00703795, + -0.02288954, + -0.0019976501, + 0.0032386882, + -0.007187004, + 0.01228725, + 0.012714971, + -0.011405886, + -0.020543555, + 0.012896428, + -0.01292235, + -0.0031544403, + -0.008742352, + -0.007692492, + -0.00054680207, + 0.019467773, + 0.019934379, + 0.026103925, + 0.014218474, + -0.006901857, + -0.016525574, + -0.00011492969, + 0.002068937, + 0.033362217, + -0.026570529, + 0.008074849, + 0.009422817, + -0.011950257, + -0.016227465, + -0.030614434, + 0.013648179, + 0.0116651105, + 0.0084701665, + 0.011775281, + -0.0058260746, + 0.0076536085, + 0.035876695, + -0.0075175157, + -0.0052817026, + -0.00231196, + -0.008580337, + -0.03520271, + -0.010258816, + 0.0009680422, + -0.021152733, + 0.000008442523, + -0.018482719, + -0.003224107, + -0.021100888, + 0.009461701, + -0.025092948, + -0.0063121207, + -0.02225444, + 0.024522655, + 0.019078936, + -0.017730968, + 0.008437763, + -0.031703178, + -0.0027348204, + -0.0051391292, + -0.0069277794, + 0.00096075144, + -0.020802781, + -0.007193485, + -0.0068305703, + -0.0030961148, + -0.021826718, + -0.0019360844, + 0.015994163, + 0.028748017, + 0.01953258, + 0.20841664, + -0.0045105093, + -0.012099312, + 0.0422277, + -0.006338043, + 0.020128796, + 0.018949324, + -0.002362185, + 0.031780947, + 0.024626344, + -0.013933326, + 0.012008583, + -0.0058779195, + -0.0064968183, + 0.000976953, + -0.017912425, + -0.033258528, + -0.009461701, + -0.010414352, + -0.009688523, + -0.006921299, + -0.014516582, + -0.0005455869, + -0.008910848, + 0.015605326, + -0.00086192205, + -0.009818135, + 0.0023994483, + 0.025728049, + 0.018754905, + -0.016940333, + -0.016681109, + -0.010064398, + -0.02216371, + -0.0014354567, + 0.0029778434, + -0.0055182455, + -0.011807684, + 0.021619339, + 0.031806868, + 0.008787717, + -0.010330103, + -0.022954345, + -0.0015326659, + -0.012883467, + 0.02469115, + -0.015683092, + -0.011904893, + 0.01554052, + 0.0132334195, + -0.020660207, + -0.0023670453, + 0.023356143, + 0.022734005, + -0.0015918015, + 0.023615368, + 0.02142492, + -0.0035157346, + 0.0071675624, + 0.00020656966, + -0.018210534, + 0.023589445, + -0.03289561, + 0.0055538886, + 0.0031220373, + -0.0020106114, + -0.003350479, + -0.003235448, + 0.025248483, + -0.030173752, + 0.0065843067, + 0.0043225717, + -0.012274289, + 0.004179998, + -0.01428328, + -0.021969292, + 0.024146779, + -0.0069083376, + 0.019999184, + 0.008956213, + -0.019726997, + 0.0024221307, + -0.014244396, + 0.0057807104, + -0.00095346075, + -0.021710066, + 0.0023589446, + 0.0014532784, + 0.02185264, + -0.0028709134, + 0.0005103486, + -0.008029484, + 0.008800678, + 0.017355092, + 0.028099954, + 0.022604391, + 0.0020964795, + 0.0006699338, + -0.02911093, + -0.0026003476, + -0.03248085, + -0.043575667, + 0.019156704, + -0.003382882, + -0.007854507, + 0.014594349, + -0.0076341666, + 0.008347034, + 0.039428074, + 0.0034055642, + 0.012215963, + -0.013272303, + 0.006739842, + -0.0005609784, + 0.004014742, + -0.01009032, + 0.011697514, + -0.014011093, + -0.008035965, + -0.0026489522, + 0.00031593008, + -0.007608244, + 0.0058163535, + 0.0061987103, + 0.020128796, + -0.017912425, + -0.009811654, + 0.008282228, + 0.002080278, + -0.04274615, + 0.027659273, + -0.0027186188, + 0.030873658, + -0.010524522, + -0.002122402, + 0.029292388, + 0.009695003, + -0.011470692, + -0.0045720753, + 0.0021823477, + 0.005599253, + -0.012034506, + 0.0096172355, + 0.007511035, + 0.004873424, + 0.0009202476, + 0.009513546, + -0.0034476882, + -0.021697106, + -0.022202594, + -0.018288301, + 0.018262379, + -0.00787395, + -0.0050808038, + 0.01691441, + -0.013492645, + -0.01565717, + -0.016564457, + 0.00651302, + 0.026220577, + -0.011334599, + 0.010174569, + 0.009403375, + -0.0045882766, + 0.003235448, + 0.0039272537, + -0.16611117, + 0.017536549, + 0.021360114, + -0.007990601, + -0.0037781997, + 0.012040987, + 0.00041759474, + 0.028618405, + -0.01815869, + 0.026531646, + -0.0043614553, + 0.017069945, + -0.034502804, + -0.0075888024, + -0.002595487, + 0.008917329, + -0.0023103398, + -0.0108226305, + 0.02132123, + 0.01889748, + 0.0038365251, + -0.018832672, + -0.0003612944, + 0.0066361516, + 0.010077359, + -0.0036842306, + -0.0023702856, + 0.02225444, + -0.004818339, + -0.02698529, + 0.005388633, + 0.007394384, + 0.015255372, + 0.020608362, + 0.032195706, + 0.016149698, + -0.014322164, + 0.006966663, + 0.0003718254, + -0.008327593, + 0.0010595808, + 0.020310253, + 0.0036518276, + 0.015372023, + -0.01354449, + 0.014892458, + 0.020025106, + 0.0126307225, + -0.0058033923, + -0.014011093, + 0.008522011, + -0.03297338, + -0.0041637965, + -0.0053918734, + 0.014309202, + 0.030329287, + 0.019726997, + 0.007945237, + -0.008599779, + 0.009234879, + -0.016655186, + -0.0363433, + -0.0043128505, + 0.006564865, + 0.009053422, + -0.004821579, + 0.01627931, + 0.014088862, + -0.021295307, + -0.0023459834, + -0.018741945, + -0.021541571, + -0.0096172355, + -0.022111865, + -0.003425006, + 0.01417959, + -0.009306166, + -0.006772245, + -0.005835796, + -0.020323215, + 0.0017319449, + 0.034839798, + -0.0072194072, + 0.0025663243, + -0.016058968, + 0.007835066, + -0.0047211293, + 0.013790753, + -0.02090647, + -0.0036064633, + 0.03823564, + -0.034217656, + 0.0022552547, + -0.023070997, + 0.010887437, + 0.016551496, + -0.001848596, + -0.007530477, + 0.005482602, + 0.020102873, + 0.014736922, + -0.0056024934, + -0.014490659, + 0.014723961, + 0.03004414, + 0.019195586, + -0.0025128592, + 0.012844583, + 0.024496732, + -0.0014062938, + -0.019351123, + 0.02269512, + -0.009118228, + 0.01954554, + 0.011321638, + -0.0017400456, + 0.015475714, + -0.025922468, + 0.0087747555, + 0.009792212, + 0.04282392, + -0.001953906, + -0.0029276188, + 0.01008384, + -0.01944185, + -0.025365135, + -0.1075264, + -0.0002774514, + 0.0193252, + 0.03235124, + 0.0013819915, + 0.015890473, + -0.0040277033, + 0.022215554, + 0.0030944946, + 0.028203646, + -0.021256423, + -0.012591839, + -0.012572397, + -0.013816675, + 0.0035319363, + -0.010174569, + 0.0040568663, + -0.02784073, + -0.044845868, + 0.024496732, + -0.0055733304, + 0.00064968184, + 0.004497548, + -0.010064398, + -0.0047535324, + -0.0092543205, + -0.029862683, + 0.022824733, + 0.003499533, + -0.0034379673, + 0.026570529, + -0.012429823, + 0.0020284331, + -0.0013220458, + -0.021463804, + -0.0170181, + 0.0076406472, + -0.001973348, + 0.0043614553, + -0.03413989, + -0.003907812, + 0.0066555934, + 0.013298226, + -0.02541698, + 0.002112681, + 0.0055927723, + -0.015553481, + 0.015372023, + -0.010796708, + -0.009163592, + 0.008658105, + 0.018366069, + -0.031340264, + -0.0075693605, + 0.03802826, + -0.012261327, + 0.018534565, + 0.021710066, + -0.028125877, + 0.012844583, + 0.0033099751, + 0.013803714, + -0.009656119, + 0.024535615, + -0.02763335, + -0.009040461, + -0.039246615, + -0.012546474, + 0.028748017, + -0.020841664, + -0.014218474, + 0.017069945, + -0.013725947, + 0.016784798, + -0.026194654, + 0.0048896256, + -0.018923402, + -0.0058649583, + 0.011827126, + -0.01713475, + -0.031210652, + -0.021917446, + -0.005064602, + -0.002742921, + -0.004883145, + 0.02763335, + -0.011094816, + -0.008859003, + 0.021684144, + -0.006146865, + -0.0026084483, + 0.032117937, + -0.0017141232, + -0.02300619, + -0.0039531766, + 0.006176028, + -0.0055085244, + 0.00063712563, + 0.00808781, + -0.02269512, + -0.010790227, + -0.017264364, + -0.042175855, + 0.011652149, + 0.00409575, + -0.017730968, + -0.0009121468, + 0.0035578588, + -0.0027753243, + 0.0027218591, + -0.020932393, + 0.0060852994, + 0.0046206797, + 0.00058690086, + -0.010738382, + -0.02121754, + -0.01576086, + -0.0067592836, + 0.0038948508, + 0.006901857, + 0.012442784, + -0.0062959194, + 0.0024010686, + 0.00096885226, + 0.011166103, + 0.01713475, + -0.037769035, + 0.00346713, + -0.0023168207, + -0.01629227, + -0.02522256, + -0.015346101, + 0.025792856, + -0.030407054, + -0.00178541, + 0.038702246, + -0.022837695, + -0.025883583, + -0.014996148, + 0.02606504, + 0.011211467, + -0.015294256, + -0.027607428, + -0.033102993, + 0.0132334195, + -0.027244514, + -0.00777026, + 0.02877394, + -0.014153668, + -0.0017141232, + -0.00043420133, + 0.008223902, + 0.019454813, + 0.020452827, + 0.008029484, + -0.005576571, + -0.01460731, + -0.0140759, + 0.029188698, + 0.016577419, + 0.02364129, + -0.012066909, + 0.0042836876, + -0.0032516494, + 0.0064125704, + 0.012844583, + 0.005113207, + 0.014231435, + 0.011107777, + 0.0016541774, + -0.0028741537, + -0.013453761, + -0.014011093, + -0.011516056, + 0.036084075, + 0.018055, + 0.0073879035, + -0.0039434554, + 0.0027024173, + -0.009591313, + -0.029396078, + 0.031858712, + 0.020193603, + -0.0043322924, + -0.009520026, + 0.012339095, + 0.023939399, + 0.030847736, + -0.037120976, + 0.008100771, + 0.0060528964, + 0.008483128, + -0.015838629, + 0.005644617, + 0.019921416, + 0.019726997, + 0.01386852, + 0.0044716257, + -0.014062938, + -0.006111222, + 0.00021284776, + 0.031029195, + -0.0039434554, + -0.009111747, + 0.00065575744, + -0.04399043, + -0.023058034, + 0.009947747, + -0.014153668, + -0.013401916, + 0.0018566968, + 0.020400982, + 0.011250351, + 0.00043582148, + -0.0063704466, + 0.016383, + -0.006253795, + -0.0024496731, + -0.013103807, + -0.014062938, + -0.020154718, + 0.010978165, + 0.00703795, + 0.009578352, + 0.01849568, + -0.013427839, + 0.013959249, + 0.008560895, + 0.02867025, + -0.015942318, + 0.015035031, + 0.011438289, + 0.011645668, + 0.0040406645, + -0.0031884636, + 0.0021191617, + 0.00041030406, + -0.03035521, + -0.00987646, + 0.016953293, + 0.0057321056, + 0.0519227, + -0.007154601, + -0.044249654, + 0.026622374, + -0.008969174, + 0.006334803, + 0.017095868, + 0.012902908, + -0.00609178, + -0.005495563, + 0.011606785, + 0.0068759345, + 0.03569524, + -0.009176553, + -0.029033164, + -0.0072129266, + -0.024107896, + 0.022980267, + -0.025753971, + -0.003005386, + 0.009021019, + -0.014127745, + 0.010181049, + 0.008722911, + -0.020012146, + -0.005560369, + 0.011179064, + 0.008165577, + -0.003528696, + -0.0011827126, + 0.021995215, + -0.019208549, + -0.024963336, + -0.001501883, + 0.0043744165, + -0.01870306, + -0.018741945, + -0.00986998, + 0.011593823, + 0.011580862, + 0.012838102, + 0.020828703, + -0.022734005, + -0.008671066, + 0.006250555, + -0.011114258, + 0.0048280596, + 0.011062413, + -0.018366069 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.016153779, + -0.015616193, + -0.008981606, + -0.01708472, + 0.0021126443, + 0.014409905, + -0.021975433, + -0.0053955195, + 0.0075065247, + -0.018435238, + 0.023837313, + 0.0075327484, + -0.01509172, + 0.016783146, + -0.026525239, + -0.007637643, + 0.03511349, + -0.005415187, + 0.02217211, + -0.015353957, + -0.03875858, + 0.010004329, + -0.01960219, + 0.010850042, + -0.0075327484, + -0.015694864, + 0.008286679, + -0.024256893, + 0.016822482, + -0.0005588919, + 0.012803705, + -0.021372288, + 0.012646363, + -0.03340895, + -0.029370507, + 0.0135969715, + 0.007886767, + -0.004871046, + 0.012253009, + -0.027429955, + 0.017700976, + 0.0026518684, + -0.005215232, + -0.017910764, + -0.0037335947, + 0.022788366, + 0.025371397, + 0.00534635, + -0.011990772, + 0.020008657, + 0.00051709794, + 0.023640636, + -0.011813762, + -0.022631025, + 0.009958438, + -0.03304182, + -0.0017979601, + 0.013570747, + -0.025476292, + -0.02223767, + -0.005359462, + -0.0122989, + -0.0019290785, + -0.007781873, + 0.004313793, + -0.0018684362, + -0.0038974925, + 0.010895934, + -0.0038089876, + -0.0028846033, + 0.030655466, + 0.025135385, + -0.001303808, + 0.019562855, + 0.0118006505, + 0.0113024, + -0.0063297376, + 0.0026944818, + 0.0058609894, + -0.009348737, + -0.00017905848, + -0.023588188, + -0.02517472, + -0.0048612123, + 0.014986826, + 0.0101223355, + -0.004176119, + 0.0034975817, + -0.025830312, + -0.015026161, + -0.0028682137, + 0.02795443, + 0.030288335, + 0.0030566962, + -0.004385908, + 0.015485075, + 0.0151441675, + 0.026656358, + 0.020978933, + -0.022539241, + 0.01380676, + 0.019536631, + -0.035637964, + -0.0039991094, + -0.029318059, + -0.024322452, + 0.010279678, + 0.0008330112, + 0.037709635, + -0.02774464, + -0.027639745, + 0.021359177, + 0.021359177, + -0.020716697, + -0.018697474, + -0.023994654, + -0.0035696966, + -0.021765644, + -0.029921204, + -0.008339126, + -0.00088422926, + 0.040332, + 0.015065497, + -0.01401655, + 0.029370507, + 0.011027052, + -0.007834321, + -0.020978933, + -0.010909045, + 0.0049497173, + 0.012292344, + 0.018238561, + 0.022867037, + 0.016835595, + -0.0058675455, + -0.007237732, + -0.004654701, + 0.026931707, + -0.0075130807, + -0.030943926, + 0.0189466, + 0.028846033, + -0.0030058878, + -0.0044449116, + -0.008227675, + 0.0359002, + 0.028347785, + -0.0035238052, + -0.0015299871, + 0.0017405959, + 0.0071918406, + -0.03367119, + 0.018776145, + -0.00021327217, + 0.011426963, + -0.0030566962, + -0.0000097442435, + 0.0013783815, + -0.03359252, + -0.0033189328, + -0.014567247, + 0.004539972, + 0.027272614, + 0.010705812, + 0.020402012, + 0.021057604, + 0.00024297867, + 0.0151441675, + -0.00815556, + 0.010738592, + 0.0012194006, + 0.030734139, + -0.0169536, + 0.026931707, + -0.007145949, + 0.0134068495, + 0.004330183, + 0.0017110943, + -0.013701866, + 0.008863599, + -0.014331234, + -0.0058839354, + 0.016324233, + -0.00081703113, + 0.011453186, + -0.009558527, + 0.008981606, + -0.008837376, + 0.01408211, + -0.008752149, + 0.021936098, + 0.02246057, + -0.0018553245, + -0.018356567, + -0.69775933, + -0.03325161, + 0.0027141494, + -0.000667884, + 0.007991662, + 0.021608302, + 0.0042088986, + 0.008850488, + -0.0031075045, + -0.015668642, + -0.0011112279, + 0.009912546, + 0.004487525, + -0.010017441, + 0.008745593, + -0.032936927, + -0.011767871, + 0.02761352, + -0.0061527276, + -0.009237287, + -0.0015480159, + -0.0005322585, + -0.02695793, + -0.00213559, + 0.031337284, + 0.013977215, + 0.02474203, + -0.0036155882, + -0.00033496637, + 0.016337344, + -0.0065067476, + -0.0032714026, + -0.0075065247, + -0.01608822, + 0.040961366, + 0.0091651715, + -0.019038383, + 0.008430909, + 0.0034844698, + 0.015839094, + -0.009702757, + -0.0044481894, + -0.0049136598, + -0.02244746, + -0.006942716, + -0.0015578497, + 0.009853543, + -0.00850958, + 0.037735857, + -0.00013111833, + 0.023365287, + -0.014934379, + 0.0012964326, + -0.0038745468, + 0.024191333, + -0.0023076828, + 0.016652029, + -0.0015119583, + 0.006129782, + -0.0023896317, + -0.012200561, + 0.0026420346, + -0.018999048, + -0.017176501, + -0.012233341, + 0.007585196, + -0.03805054, + -0.018723698, + -0.0053004585, + -0.0030353894, + 0.00883082, + 0.013282287, + -0.015131056, + 0.02811177, + 0.014252563, + 0.0016799537, + 0.01652091, + -0.019038383, + 0.026774364, + 0.013131501, + 0.01694049, + -0.006303514, + -0.021188723, + -0.004199065, + 0.020179112, + -0.0113024, + -0.03275336, + -0.02881981, + 0.01644224, + -0.010791039, + 0.04413443, + 0.0019176056, + -0.004628477, + -0.009289734, + -0.002758402, + 0.025751641, + -0.009866655, + -0.00023293991, + 0.013059386, + -0.012089111, + 0.008430909, + -0.026905483, + -0.008699701, + 0.0051562283, + 0.03382853, + 0.010941825, + -0.029108271, + 0.036031317, + 0.011276177, + -0.018972823, + 0.01873681, + -0.019051494, + -0.02295882, + -0.0009342181, + 0.015537523, + -0.022985045, + 0.04568163, + 0.017714087, + 0.0072573996, + -0.0055102482, + -0.0036549235, + -0.0011267982, + -0.0064215204, + -0.024873149, + 0.007932659, + -0.012987271, + -0.0020356122, + -0.0258172, + -0.019077718, + -0.004802209, + 0.0063362936, + -0.0028796864, + 0.009184839, + 0.006480524, + -0.003220594, + -0.003622144, + 0.007926104, + -0.017425627, + 0.031337284, + -0.030209664, + -0.025843425, + -0.012954491, + -0.021136276, + -0.004975941, + -0.00757864, + -0.018081218, + -0.031153716, + -0.0062248427, + -0.029082047, + 0.017989436, + -0.03432678, + -0.019969322, + -0.03217644, + 0.019274395, + -0.00030382577, + -0.006536249, + -0.024178222, + 0.0030353894, + -0.009466744, + 0.0314684, + 0.0026469515, + 0.00944052, + -0.009899435, + -0.004884158, + -0.0017094553, + -0.03784075, + -0.000945691, + 0.032858256, + -0.0035729746, + -0.03482503, + -0.001888104, + -0.0027125105, + 0.010037108, + -0.0065559167, + -0.024584688, + -0.015668642, + -0.016756924, + -0.023470182, + 0.016861819, + -0.010384572, + 0.012515245, + 0.0151441675, + -0.0009383156, + -0.024873149, + 0.035716634, + -0.0064838016, + 0.016324233, + 0.01401655, + -0.0016602859, + 0.008273567, + -0.017032271, + -0.0033697411, + 0.0022339285, + -0.012613583, + 0.02010044, + 0.007657311, + -0.0031910925, + 0.011735091, + 0.0077687614, + -0.0018667973, + 0.015681753, + -0.0010636975, + 0.017399402, + -0.018487684, + 0.028793586, + -0.028950928, + 0.017333845, + -0.006542805, + 0.01147941, + 0.03920438, + 0.00026776822, + -0.01945796, + -0.0090471655, + -0.01147941, + 0.013288843, + 0.015327733, + -0.012259564, + 0.029868757, + 0.0046153655, + -0.01165642, + 0.002519111, + 0.00043596845, + 0.03975508, + 0.0050218324, + -0.013282287, + -0.006001942, + 0.036267333, + 0.014855707, + -0.011446631, + -0.0025928651, + -0.018461462, + -0.0035860864, + -0.020651137, + 0.0052906247, + -0.012279232, + -0.010535358, + 0.0042679016, + -0.039781302, + 0.01709783, + 0.020493796, + 0.006228121, + 0.036346003, + 0.037788305, + -0.012220229, + 0.009368405, + -0.0041269497, + 0.026210556, + 0.008529248, + -0.015825983, + 0.00022003296, + -0.022867037, + -0.0015742395, + -0.0030206386, + 0.01701916, + 0.03312049, + 0.009656865, + 0.037211385, + 0.011715423, + 0.03060302, + 0.025436956, + -0.026984153, + -0.0058577117, + 0.0135183, + -0.012325124, + 0.00022720349, + -0.0037467065, + -0.0043564066, + 0.005765929, + -0.004975941, + -0.004802209, + 0.0008735759, + 0.0048415447, + 0.02488626, + -0.015458852, + 0.01680937, + -0.011853098, + -0.020992046, + -0.004556362, + 0.017582968, + 0.008214564, + -0.006772262, + -0.040515564, + 0.0141870035, + -0.0026977598, + 0.0012898766, + -0.020742921, + -0.02782331, + 0.018527022, + -0.004798931, + 0.011813762, + 0.0102993455, + 0.018579468, + 0.02023156, + 0.0022585134, + 0.014724589, + -0.029685192, + 0.0020601968, + -0.0055758073, + 0.006231399, + 0.0069951634, + -0.0058675455, + -0.0157342, + -0.02573853, + 0.0036516457, + 0.013065942, + 0.01538018, + -0.018540133, + 0.005451245, + -0.017386291, + -0.01966775, + -0.007447521, + -0.00062158285, + -0.0013701866, + -0.005192286, + -0.011086055, + 0.0011694117, + -0.021634525, + -0.009368405, + 0.02774464, + 0.0078408765, + 0.026144996, + -0.021936098, + -0.009506079, + -0.0013398655, + 0.08349615, + 0.012167782, + -0.0063526835, + 0.009020941, + -0.0045137485, + -0.013754313, + -0.0155112995, + 0.01054847, + -0.012725035, + -0.007794985, + 0.0069754953, + -0.009833875, + 0.013819872, + 0.008135892, + -0.0004156861, + -0.0110794995, + 0.01140074, + 0.009250399, + 0.03812921, + -0.012489022, + -0.00082727475, + 0.0019241616, + -0.016652029, + 0.003930272, + 0.0013857569, + -0.011499078, + 0.027797086, + 0.015563746, + 0.018225448, + -0.004871046, + 0.0038188214, + 0.019497296, + -0.001970053, + -0.011558081, + -0.0151441675, + -0.013439629, + -0.010286233, + 0.0033156548, + 0.012305455, + -0.021726308, + 0.029527849, + 0.018553244, + 0.014265675, + -0.020323342, + -0.002442079, + 0.010535358, + -0.0060773348, + 0.010482911, + -0.007342627, + 0.0026174497, + 0.023811089, + 0.005415187, + 0.0012267759, + -0.011571193, + 0.009243842, + 0.01987754, + -0.0024617468, + -0.001981526, + 0.0021536187, + -0.010319013, + 0.0059724404, + -0.01674381, + 0.0024174943, + -0.015340845, + -0.023325952, + -0.0045366944, + 0.00041671045, + -0.001494749, + -0.0036418117, + 0.0026272836, + -0.002351935, + -0.020047994, + -0.022040993, + 0.0075917514, + 0.028059324, + 0.016035773, + 0.009427409, + -0.0055102482, + 0.007073834, + 0.03854879, + -0.010279678, + 0.0005187369, + -0.018540133, + -0.0066411435, + -0.012226785, + 0.010423908, + 0.021555854, + -0.024191333, + -0.0038712688, + -0.009919102, + 0.023876648, + 0.0005437313, + 0.00040953993, + -0.017386291, + -0.0010825457, + -0.0147901485, + 0.018343454, + 0.0015988242, + -0.015603082, + -0.006480524, + 0.0036155882, + -0.02194921, + -0.014436129, + -0.0067525944, + 0.010509134, + 0.023627523, + 0.021005157, + 0.01701916, + -0.018291008, + -0.00021655012, + 0.0280331, + -0.011131947, + 0.0017455128, + -0.008358794, + 0.003553307, + 0.014606583, + -0.017294507, + 0.02631545, + 0.013282287, + -0.024322452, + 0.004825155, + -0.03081281, + 0.019654639, + -0.0025076382, + -0.0049103815, + 0.0016176725, + 0.014475464, + -0.01509172, + -0.0011612168, + 0.0014644279, + 0.00095552485, + 0.016979825, + -0.008883268, + -0.01981198, + -0.042797025, + -0.025017379, + 0.006205175, + -0.007709758, + -0.018028772, + -0.0055102482, + -0.008070334, + 0.020821592, + 0.022355676, + -0.0020749476, + -0.026158107, + -0.01694049, + 0.0057233153, + 0.0072967354, + -0.0009669977, + 0.011558081, + -0.0033599073, + -0.00025568076, + -0.025358286, + 0.02152963, + 0.007349183, + -0.0059658843, + -0.02517472, + -0.021280507, + 0.012600472, + 0.01083693, + 0.030209664, + -0.004726816, + -0.0023863537, + 0.0031271724, + -0.010246898, + 0.0024240501, + -0.017438738, + -0.006539527, + -0.03503482, + 0.0058577117, + 0.013885432, + 0.0019503853, + 0.02181809, + -0.002196232, + 0.00865381, + 0.012534913, + -0.0019110497, + -0.007001719, + -0.023221057, + -0.030786585, + 0.001334129, + -0.0037991537, + -0.023181722, + -0.011131947, + 0.008942271, + -0.011826874, + 0.03262224, + 0.016271785, + 0.0043400167, + -0.0059167147, + 0.023352176, + 0.0022716252, + 0.028059324, + -0.008142449, + -0.005431577, + -0.016638916, + -0.022119664, + -0.0060150535, + 0.014488576, + 0.00929629, + 0.021568965, + 0.005431577, + -0.00045768495, + -0.022919485, + 0.023207946, + 0.018985935, + 0.028426455, + 0.003471358, + -0.007185285, + -0.01952352, + -0.012200561, + -0.026577687, + -0.026525239, + -0.03553307, + 0.010305901, + 0.0018241839, + -0.025895871, + 0.026053213, + -0.0011522024, + -0.019575967, + 0.012856153, + -0.00054004363, + 0.01616689, + -0.004874324, + 0.01151219, + -0.0011661337, + 0.0005957689, + -0.012253009, + -0.0034779138, + -0.014357458, + -0.010686144, + 0.02645968, + 0.010994272, + -0.0019995547, + 0.01687493, + 0.02045446, + 0.013583859, + 0.033146717, + -0.011984216, + -0.013649419, + 0.017530521, + 0.012200561, + -0.022853926, + 0.008083445, + -0.03411699, + 0.016927376, + -0.010502579, + -0.020651137, + -0.0024928874, + -0.012397239, + -0.01902527, + -0.003930272, + -0.042036537, + 0.009630642, + 0.011649864, + -0.0059724404, + 0.0019389124, + -0.01104672, + -0.017110942, + -0.012541469, + -0.0035762526, + 0.016363569, + -0.004231844, + 0.014173892, + -0.009217619, + -0.000510542, + -0.02782331, + -0.002591226, + -0.00002306095, + 0.02517472, + -0.0025076382, + -0.006287124, + -0.014436129, + 0.021306729, + 0.03747362, + -0.010201006, + -0.0076638665, + 0.006392019, + -0.007309847, + -0.0009768317, + 0.025397621, + 0.004871046, + -0.016350456, + 0.0070935017, + -0.01937929, + 0.009027497, + -0.020939598, + -0.0049136598, + -0.012115334, + -0.0050710016, + -0.000452768, + -0.008673478, + 0.0076769786, + -0.0034910257, + 0.008489912, + -0.018120553, + 0.03288448, + 0.0101813385, + -0.008424353, + 0.020978933, + -0.011984216, + 0.01544574, + 0.00093995454, + 0.013793649, + 0.004097448, + -0.018802369, + 0.03524461, + -0.013039718, + -0.029029598, + -0.009519191, + 0.0076966463, + -0.0056282547, + -0.0038417673, + -0.0020913375, + 0.011145058, + 0.0014095221, + 0.020611802, + -0.01652091, + -0.015891543, + 0.003845045, + -0.028767362, + -0.0017373179, + 0.010345236, + -0.016861819, + -0.005739705, + 0.008817708, + 0.0020192224, + 0.011610528, + -0.045366943, + -0.014816372, + -0.015616193, + 0.017936988, + -0.006244511, + -0.01387232, + -0.017556746, + 0.0046415892, + -0.000989124, + 0.009191396, + -0.009381517, + 0.010909045, + -0.008286679, + -0.0064543, + -0.01422634, + 0.021647638, + -0.01859258, + 0.006772262, + -0.021228058, + -0.009964993, + -0.010771371, + 0.010856598, + -0.0057134815, + -0.01658647, + 0.0027207055, + -0.039650183, + -0.021214947, + -0.01265292, + -0.021123163, + -0.002052002, + 0.0089160465, + 0.015957102, + 0.0314684, + -0.007939215, + 0.0011284371, + 0.021398513, + 0.008306347, + 0.0102993455, + -0.036949147, + -0.013282287, + -0.000113601745, + -0.018186113, + 0.016429128, + 0.011787538, + 0.0015094999, + -0.009079944, + 0.002910827, + -0.009984661, + 0.008470245, + -0.0147901485, + -0.014593471, + 0.0024978044, + 0.018225448, + 0.018212337, + 0.031704415, + 0.013354402, + -0.013623195, + -0.012790593, + -0.006188785, + 0.021700084, + 0.025292726, + -0.010305901, + 0.0034057987, + -0.0008752149, + -0.013164281, + 0.011767871, + -0.007388518, + 0.010397684, + 0.004199065, + 0.006451022, + 0.007834321, + -0.010941825, + 0.00086128357, + 0.015209727, + -0.0070935017, + -0.0062609003, + -0.00000721535, + 0.0002074333, + -0.03288448, + -0.0057888743, + 0.01416078, + -0.007853989, + -0.0061035585, + -0.026197443, + 0.0023388234, + -0.04083025, + 0.0055430275, + -0.021306729, + -0.002192954, + -0.024374899, + 0.016035773, + 0.015655529, + -0.031520847, + -0.006451022, + -0.026669469, + -0.002045446, + 0.0030058878, + -0.010817262, + -0.016153779, + -0.020847816, + -0.017045384, + 0.002286376, + 0.011289288, + -0.025279615, + -0.012836485, + -0.0028944372, + 0.01644224, + 0.02874114, + 0.21398512, + 0.01408211, + -0.017320732, + 0.03503482, + -0.009152059, + 0.03917816, + 0.023719307, + -0.007493413, + 0.022001656, + 0.024309339, + -0.011944881, + 0.0053102924, + 0.0023125997, + -0.0033189328, + -0.00028456777, + -0.004330183, + -0.032360006, + 0.0010284594, + -0.011630196, + -0.0061789514, + 0.0024928874, + -0.007152505, + 0.013623195, + -0.006244511, + 0.022683471, + 0.010207563, + -0.009152059, + 0.0021011713, + 0.03262224, + 0.018710587, + -0.011957992, + -0.006677201, + 0.0072967354, + -0.008142449, + -0.0036319778, + -0.0020175835, + -0.011145058, + 0.0014586914, + 0.007939215, + 0.026538352, + 0.011885877, + 0.008811153, + -0.024125773, + -0.018330343, + -0.00039233064, + 0.028583797, + -0.007657311, + -0.0089160465, + 0.022355676, + 0.010863154, + -0.026617022, + -0.008522692, + 0.033225387, + 0.017674752, + -0.001057961, + 0.032648467, + 0.019995546, + -0.00801133, + 0.016901154, + -0.006700147, + -0.008614475, + 0.020205336, + -0.019156389, + -0.0072246203, + 0.010607474, + -0.0027272613, + -0.007650755, + 0.015642418, + 0.009643754, + -0.014960602, + 0.023207946, + 0.01276437, + 0.010876266, + 0.0044645793, + -0.017609192, + -0.018002547, + 0.023719307, + 0.012613583, + 0.014895042, + -0.010522246, + -0.012384127, + -0.0036778692, + 0.0014324678, + 0.023561966, + -0.010142003, + -0.02252613, + -0.008548915, + 0.013465853, + 0.036922924, + 0.0043498506, + -0.0018667973, + -0.009846987, + 0.0146721415, + 0.0069230483, + 0.0009784705, + 0.024204444, + -0.014580359, + 0.018041883, + -0.035506845, + 0.0062740124, + -0.036660686, + -0.024440458, + 0.022198334, + -0.009669977, + -0.007408186, + 0.008857043, + -0.0030517792, + 0.018081218, + 0.037945647, + -0.0035991983, + 0.015498187, + -0.011669531, + 0.008017886, + -0.0011972743, + 0.015760424, + -0.013623195, + 0.011453186, + -0.01558997, + -0.018238561, + -0.0104173515, + 0.0043826303, + -0.01766164, + -0.012357903, + 0.00740163, + -0.0010931991, + -0.0038024317, + -0.015563746, + 0.01679626, + 0.00008609763, + -0.030550571, + 0.032727137, + -0.000109709166, + 0.025895871, + 0.0047464836, + -0.005457801, + 0.0040515563, + -0.01722895, + -0.00037286777, + 0.0039171604, + -0.008450577, + -0.0015439184, + -0.01645535, + 0.0038089876, + -0.0066444217, + -0.0030501403, + 0.0067394823, + 0.018382791, + -0.013321623, + -0.014514799, + -0.026787477, + -0.008765261, + -0.006080613, + -0.0072246203, + -0.013341291, + 0.02331284, + -0.02066425, + -0.01981198, + -0.0031058656, + 0.0027338173, + 0.02294571, + -0.017818982, + 0.008771816, + 0.00028907496, + -0.013741202, + -0.0050742794, + 0.0058708233, + -0.16971958, + 0.013688754, + 0.018173002, + -0.017753422, + -0.0055364715, + 0.004726816, + 0.013819872, + 0.02524028, + -0.0084440205, + 0.031232387, + -0.0028616576, + 0.013380626, + -0.059003253, + -0.00955197, + 0.005274235, + 0.015078609, + -0.014750813, + -0.0072705117, + 0.024348674, + 0.008293235, + -0.0040450008, + -0.024060214, + 0.012738146, + -0.006523137, + -0.00075966684, + 0.004952995, + -0.012790593, + 0.029632743, + -0.0025650025, + -0.0069623836, + -0.0029583573, + 0.00772287, + 0.00048554759, + 0.025279615, + 0.022054104, + -0.0006715717, + -0.000104228835, + 0.00613306, + 0.0019864428, + -0.0045596403, + 0.0005298, + 0.018081218, + -0.0009112724, + 0.0029468846, + -0.017543633, + 0.02031023, + 0.032936927, + 0.010325569, + -0.007906436, + -0.005913437, + 0.020913374, + -0.041276053, + -0.010909045, + -0.004972663, + 0.0139509905, + 0.009525747, + 0.014895042, + 0.016245563, + -0.008280123, + 0.015550635, + 0.001181704, + -0.040568013, + -0.0026993987, + 0.0071918406, + -0.005113615, + -0.011603973, + 0.012161226, + 0.0032074822, + -0.023194833, + 0.0129348235, + -0.019287508, + -0.0138329845, + 0.012849597, + -0.020205336, + 0.0077556497, + 0.0049136598, + -0.004441634, + 0.013544524, + -0.004012221, + -0.019864427, + 0.0033336836, + 0.029868757, + 0.0016996214, + -0.0023486572, + -0.013714978, + 0.022277005, + -0.00740163, + 0.016193114, + -0.0122136725, + -0.027875759, + 0.027193943, + -0.04418688, + 0.004408854, + -0.030078545, + 0.0018717143, + 0.017268285, + -0.00045317775, + -0.011984216, + -0.0017569857, + -0.0045301383, + 0.00441541, + -0.0023027658, + -0.008896379, + 0.021398513, + 0.029763862, + 0.024007767, + 0.000045456065, + 0.0069492715, + 0.022919485, + 0.004887436, + -0.020257782, + 0.020769143, + 0.006074057, + 0.020874038, + -0.00045399723, + 0.0012382488, + 0.004562918, + -0.022840815, + 0.008214564, + 0.01766164, + 0.0280331, + 0.0013882153, + -0.005120171, + -0.0032566516, + -0.005674146, + -0.018238561, + -0.09676533, + -0.023404622, + 0.012528357, + 0.018330343, + 0.0030435843, + 0.011649864, + 0.0040318887, + 0.027141495, + -0.014711477, + 0.037001595, + -0.0071328375, + -0.013354402, + -0.014763924, + 0.0032337059, + 0.009433964, + -0.0083850175, + 0.0030337505, + -0.02230323, + -0.030340783, + 0.009866655, + -0.016625805, + -0.0046973145, + 0.0007965439, + -0.010135448, + -0.02495182, + -0.015747312, + -0.029134493, + 0.014108333, + 0.0056315325, + -0.01151219, + 0.025646746, + -0.014816372, + 0.011361403, + 0.00050890306, + -0.005831488, + 0.006831265, + -0.0124496855, + 0.0025502515, + 0.010423908, + -0.037001595, + -0.002196232, + 0.0006191244, + 0.008457133, + -0.0056512, + -0.00035156103, + -0.0077032023, + -0.01530151, + 0.00033496637, + -0.0054774685, + -0.027508626, + 0.0009293012, + 0.030130994, + -0.024401123, + -0.0031271724, + 0.03697537, + -0.020834703, + 0.015799759, + 0.022919485, + -0.018028772, + 0.011630196, + 0.014829484, + 0.008817708, + -0.0011358126, + 0.03524461, + -0.004628477, + -0.016061995, + -0.032648467, + -0.014606583, + 0.014842596, + -0.0304719, + -0.013144613, + 0.0077490937, + -0.021293618, + 0.012947936, + -0.019995546, + -0.00047981116, + -0.006805042, + -0.016507799, + 0.003690981, + -0.004090892, + -0.028216666, + -0.020638026, + 0.00029665523, + -0.002751846, + 0.003138645, + 0.02109694, + -0.0075327484, + -0.015498187, + 0.03841767, + -0.015367069, + 0.013714978, + 0.028137995, + 0.0067394823, + -0.008693146, + -0.012318567, + 0.018395903, + 0.011879321, + 0.012489022, + 0.009309402, + -0.017740311, + -0.020113552, + -0.009506079, + -0.047779523, + 0.019012159, + 0.0016766757, + -0.022342565, + -0.0028567407, + 0.013478965, + -0.013321623, + 0.008627586, + 0.0028551018, + -0.00173404, + -0.015891543, + -0.0014808177, + -0.01279715, + -0.0035762526, + -0.019326843, + -0.00068878103, + 0.009007829, + -0.0042810137, + 0.033566292, + 0.004572752, + 0.007309847, + 0.0036778692, + 0.007939215, + 0.00009946555, + -0.02424378, + 0.006519859, + -0.01966775, + -0.011033608, + -0.026197443, + -0.011630196, + 0.006398575, + -0.020493796, + 0.0020044716, + 0.047386166, + -0.01437057, + -0.027508626, + 0.004595698, + 0.032438677, + 0.004015499, + -0.013623195, + -0.032779586, + -0.0314684, + 0.027429955, + -0.012495577, + -0.016783146, + 0.013269176, + -0.011636753, + -0.0054053534, + 0.003304182, + -0.0020913375, + 0.01322984, + 0.016625805, + 0.0013218367, + -0.0075917514, + -0.0026617022, + -0.012233341, + 0.038942147, + 0.008339126, + 0.0068968246, + -0.020729808, + 0.014134556, + -0.0036516457, + 0.0034844698, + 0.02617122, + 0.00940774, + 0.0072246203, + -0.0068247095, + -0.015550635, + 0.0047530397, + -0.0017160112, + -0.01844835, + -0.0057757627, + 0.031048821, + 0.018356567, + 0.019287508, + 0.0027223444, + -0.012397239, + 0.0018815481, + -0.0098273195, + 0.017438738, + 0.018068107, + -0.008666922, + -0.001494749, + 0.016638916, + 0.024912484, + 0.046756797, + -0.03739495, + -0.006690313, + 0.004425244, + 0.0006056028, + -0.017530521, + 0.0013013495, + -0.0014488576, + -0.0016766757, + -0.0017209281, + 0.000055417982, + -0.010201006, + 0.008712813, + 0.010135448, + 0.032071546, + 0.02194921, + -0.008358794, + -0.0035631408, + -0.028846033, + -0.01680937, + 0.011289288, + -0.008607918, + -0.015563746, + -0.015485075, + 0.007886767, + 0.0025699195, + -0.012849597, + 0.015576858, + 0.016927376, + -0.0031681468, + -0.007244288, + -0.014829484, + -0.019890651, + -0.020428237, + 0.0020126665, + 0.0036418117, + 0.005733149, + 0.0061265044, + -0.018487684, + 0.03154707, + 0.013701866, + 0.029213166, + -0.031625744, + 0.009034053, + 0.010895934, + 0.004189231, + -0.0020683918, + -0.015563746, + -0.020428237, + -0.017963212, + -0.016258674, + -0.019929986, + 0.024178222, + 0.0032419008, + 0.04625855, + -0.013203616, + -0.03283203, + 0.03254357, + -0.01005022, + 0.008037554, + 0.0043793526, + 0.0032107602, + -0.016717589, + -0.00631007, + 0.010496023, + 0.0045137485, + 0.02503049, + -0.00944052, + -0.031651966, + -0.009742092, + -0.024846924, + 0.010732036, + -0.026499016, + -0.014921267, + 0.026407233, + 0.005425021, + 0.007001719, + 0.0037860419, + -0.026289226, + -0.010135448, + 0.012325124, + 0.0027911814, + -0.01244313, + -0.013557636, + 0.01258736, + -0.014645918, + -0.02167386, + -0.007041055, + 0.022827702, + -0.024545353, + -0.01679626, + -0.020061105, + 0.01380676, + 0.0113155125, + -0.002673175, + 0.027351284, + -0.022709696, + -0.031153716, + -0.008037554, + -0.009230731, + -0.012725035, + 0.014475464, + -0.014632806 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + 0.01728662, + -0.011963684, + -0.0016601873, + -0.017338298, + -0.0012378731, + 0.020774951, + -0.016756909, + -0.03098155, + 0.008049001, + -0.004266746, + 0.008197579, + 0.010213058, + -0.0022593404, + 0.006853925, + -0.018966187, + -0.0122027, + 0.027441539, + -0.001191039, + 0.029689575, + -0.02687307, + -0.015619972, + 0.01928918, + -0.0042925854, + 0.008914624, + -0.025477737, + -0.0063177557, + 0.011091601, + -0.024792992, + 0.00406326, + 0.018992025, + 0.0015810538, + -0.01472851, + 0.028294243, + -0.039327703, + -0.032247685, + 0.004925653, + 0.014121282, + -0.0054456727, + 0.019095384, + -0.019547574, + 0.003456032, + 0.019780131, + -0.0031217334, + -0.017570853, + -0.014806028, + 0.004664028, + 0.015051504, + 0.006437263, + -0.012254379, + 0.025296861, + 0.011950765, + 0.020284, + -0.01872071, + -0.022519115, + 0.0016553424, + -0.023035906, + 0.004244136, + 0.01768713, + -0.023190944, + 0.0024951259, + -0.014818948, + 0.00024224522, + -0.0037887152, + -0.0018087643, + -0.0034915612, + -0.005410143, + -0.015348657, + 0.0024014576, + 0.016563114, + -0.0008922699, + 0.031679217, + 0.045244947, + 0.0038662339, + 0.009812547, + 0.01927626, + 0.010723389, + 0.00455744, + 0.0003447957, + -0.0071316995, + -0.00863685, + -0.0031136586, + -0.028552637, + -0.021059185, + -0.013100622, + 0.02027108, + 0.012015363, + -0.021989407, + -0.00095686864, + -0.023436418, + -0.020477796, + 0.0067634867, + 0.03844916, + 0.010613571, + -0.0044314726, + 0.013488214, + 0.021937728, + 0.00812652, + 0.02692475, + 0.021433858, + -0.02341058, + -0.00016735107, + 0.015025664, + -0.033177905, + 0.001092526, + -0.043306988, + -0.03237688, + -0.0018216841, + -0.011266018, + 0.0314725, + -0.020632833, + -0.023927368, + 0.020051444, + 0.032816153, + -0.027751613, + 0.0010343872, + -0.02485759, + 0.008979223, + -0.021188382, + -0.025968688, + 0.0011789268, + -0.0004124225, + 0.039792817, + 0.011427515, + -0.009508933, + 0.031782575, + -0.005384304, + -0.013158761, + -0.020852469, + -0.012105801, + 0.0040761796, + 0.007700168, + 0.016136762, + 0.007667869, + 0.006660129, + -0.01271949, + -0.010846126, + -0.020439038, + 0.015930045, + 0.0011813493, + -0.016524354, + 0.0011651996, + 0.019172901, + -0.019818889, + -0.014896466, + -0.0050160913, + 0.02999965, + 0.023668973, + -0.0060658203, + -0.009308676, + 0.0020703892, + 0.008565791, + -0.024650874, + 0.016679391, + -0.007913344, + 0.0052324967, + 0.011065762, + -0.024030726, + 0.017583773, + -0.017338298, + 0.017906766, + -0.019004945, + 0.015981724, + 0.02233824, + -0.007822906, + 0.02635628, + 0.02638212, + 0.012590292, + 0.0128293075, + -0.026562996, + 0.01523238, + -0.008539951, + 0.02684723, + -0.026265843, + 0.017506255, + -0.016408077, + 0.015116102, + 0.015077343, + -0.010490833, + -0.014444276, + -0.00455744, + -0.017041145, + 0.0072738165, + 0.017880928, + 0.012590292, + 0.014405516, + 0.0055005816, + 0.020568235, + -0.01625304, + 0.010561892, + -0.014392597, + 0.022428678, + 0.016356397, + -0.015258219, + -0.0406972, + -0.6904312, + -0.04258348, + 0.027519058, + 0.007661409, + 0.003904993, + 0.029121106, + 0.011601931, + 0.019495895, + -0.0054585924, + -0.013914566, + 0.00863039, + 0.017932607, + 0.004806145, + 0.006350055, + 0.006944363, + -0.018643193, + -0.0132169, + -0.008055462, + 0.008029622, + -0.009592911, + -0.0030151457, + 0.014250479, + -0.008197579, + 0.00090034475, + 0.016059244, + 0.01578793, + 0.021847289, + 0.015284059, + -0.011950765, + 0.0023303991, + -0.020193562, + 0.017971367, + 0.0011651996, + -0.0054036835, + 0.042480122, + 0.0024095324, + -0.018656112, + 0.020671593, + 0.02837176, + 0.016123842, + -0.008081301, + 0.004618809, + 0.004318425, + -0.020568235, + -0.0046963273, + 0.008132979, + 0.0033559038, + -0.016110923, + 0.03457324, + 0.0037273464, + 0.01781633, + -0.03346214, + 0.00606905, + -0.0037887152, + 0.027544897, + 0.005387534, + 0.028681835, + 0.0058041955, + -0.0042958152, + 0.014263399, + -0.004169848, + -0.0017619303, + 0.001522915, + -0.022751672, + -0.009424955, + -0.0042247567, + -0.02994797, + -0.028345922, + -0.027648255, + -0.016808588, + 0.0048545944, + 0.017493336, + -0.016576033, + 0.005742827, + 0.0071769184, + -0.0006576958, + 0.02692475, + -0.0069185235, + 0.004479922, + 0.0050516203, + 0.0074999123, + -0.014586393, + -0.03707967, + -0.0029521617, + 0.032118488, + -0.0030652096, + -0.037338063, + -0.015632892, + 0.018113483, + 0.001501113, + 0.025219344, + -0.0095347725, + -0.025671534, + -0.0056071696, + -0.00812652, + 0.038940113, + -0.010729848, + -0.0021479076, + -0.004780306, + -0.010600651, + 0.0037693358, + -0.018023044, + -0.010820286, + -0.0010707239, + 0.040748876, + -0.009347436, + -0.022118604, + 0.016175522, + 0.013371936, + -0.023501016, + 0.032428563, + -0.02074911, + -0.009928824, + 0.008262177, + 0.014612232, + -0.028500957, + 0.055968337, + 0.011459814, + -0.0036788974, + -0.01066525, + -0.0022060466, + 0.014625152, + -0.00022003941, + -0.0020639293, + -0.0048836637, + -0.002690537, + -0.0014841558, + -0.0054973518, + -0.015271139, + 0.008966303, + 0.0015947811, + 0.0068087056, + 0.026485479, + 0.0009940129, + 0.0009932055, + -0.009379735, + 0.023010066, + -0.007719548, + 0.024973867, + -0.00455744, + -0.01826852, + 0.000482068, + -0.03547762, + 0.0074869925, + 0.004102019, + -0.036795434, + -0.037183028, + -0.0047932253, + -0.02896607, + 0.011266018, + -0.032790314, + -0.014392597, + -0.02592993, + 0.022984227, + -0.0011700444, + -0.0019460367, + -0.020374438, + -0.0039663617, + -0.019689692, + 0.004728627, + -0.009244078, + -0.010458534, + -0.0047480064, + 0.0010440769, + 0.002176977, + -0.036201127, + -0.0075968103, + 0.020516556, + -0.0115114935, + -0.02540022, + 0.0024967408, + 0.004470232, + 0.010309957, + -0.0032590057, + -0.01422464, + -0.012461094, + -0.02081371, + -0.033152066, + 0.0005135599, + -0.0075838906, + 0.010813827, + 0.011052842, + 0.007461153, + -0.006043211, + 0.031214105, + -0.012816387, + 0.004964412, + 0.013720769, + -0.0026582377, + -0.01470267, + 0.00657615, + 0.00711232, + 0.0006415461, + -0.013423615, + -0.0039372924, + 0.0007162384, + 0.012738869, + 0.0065600006, + 0.006853925, + -0.00021761697, + 0.018178081, + -0.016433917, + 0.017803408, + -0.015464935, + 0.012351276, + -0.04514159, + 0.0021204532, + -0.009418494, + 0.0005579715, + 0.026136644, + -0.004815835, + -0.009005062, + -0.009276377, + -0.01768713, + 0.008824186, + 0.022958387, + -0.016808588, + 0.011433975, + -0.0058268053, + -0.0027825902, + 0.009528312, + -0.0074805324, + 0.033772215, + 0.010962404, + -0.017700052, + 0.0025645695, + 0.022880869, + 0.011098062, + -0.0030522898, + -0.010477914, + -0.028190885, + -0.004266746, + -0.011524413, + 0.0144313555, + -0.036821276, + 0.00019480553, + 0.012112262, + -0.044418085, + 0.018035965, + 0.015852528, + -0.0038920734, + 0.035580978, + 0.020141883, + -0.011020543, + 0.015012744, + -0.0081136, + 0.013068322, + 0.003707967, + -0.028604316, + 0.0038210147, + -0.017209101, + -0.008397834, + 0.003297765, + 0.013320258, + 0.02795833, + -0.012112262, + 0.037673976, + 0.0067311875, + 0.02687307, + 0.026097886, + -0.033281263, + -0.009877145, + 0.008714369, + -0.004018041, + -0.0015931661, + 0.0027260662, + -0.011246638, + -0.016640631, + -0.0072738165, + -0.014134201, + -0.011214339, + -0.005222807, + 0.01877239, + -0.024676714, + 0.013036023, + -0.01627888, + -0.00761619, + -0.000735618, + 0.011001163, + 0.015917126, + -0.004447622, + -0.038785074, + 0.022389919, + -0.0024531367, + -0.003995431, + -0.026214164, + -0.035606816, + 0.0013581882, + -0.003000611, + 0.0016618023, + 0.017790489, + 0.0028778734, + 0.035736017, + -0.005313245, + -0.0016618023, + -0.027157305, + 0.01321044, + 0.007461153, + 0.017015304, + 0.007906884, + -0.013759529, + -0.026265843, + -0.03041308, + -0.004618809, + 0.008837106, + 0.01270011, + -0.020710351, + 0.00810068, + -0.010910725, + -0.02790665, + -0.023681894, + 0.010607111, + 0.0026614675, + -0.012254379, + -0.010949484, + 0.00080869533, + -0.024159923, + -0.010846126, + 0.032351043, + 0.0064598727, + 0.004147238, + -0.016989466, + -0.010542512, + -0.0022221962, + 0.07948227, + 0.0039760517, + 0.0009770558, + 0.012267298, + 0.0023449338, + -0.01719618, + -0.017868008, + 0.0017441657, + 0.004163388, + 0.012125181, + 0.0065664607, + -0.008262177, + 0.013397776, + 0.00070654857, + 0.0057557467, + 0.00354647, + 0.0069895824, + 0.0031717974, + 0.019185822, + -0.013966245, + 0.011214339, + -0.0035819993, + -0.005733137, + 0.006737647, + 0.0009294142, + -0.007351335, + 0.029689575, + 0.004114939, + 0.022699993, + -0.00053576566, + -0.0102647375, + 0.0223124, + 0.003401123, + -0.02536146, + -0.014340918, + 0.0025064305, + -0.014172961, + 0.023229701, + 0.0091278, + -0.0043378044, + 0.025503578, + 0.025115985, + 0.014250479, + -0.01067171, + 0.0014324768, + 0.01319752, + -0.018901588, + 0.012977884, + -0.00013919007, + -0.0054585924, + 0.027829131, + 0.002587179, + 0.0012830922, + -0.0032234765, + 0.019172901, + 0.016756909, + -0.0045509804, + -0.007222138, + -0.008527032, + -0.02435372, + 0.005629779, + -0.0052454164, + 0.00456067, + -0.004760926, + -0.036226965, + -0.012790548, + 0.0011014083, + -0.0038210147, + -0.0039663617, + 0.00303937, + -0.008352615, + -0.022557875, + -0.02027108, + -0.0028116596, + 0.03196345, + 0.01877239, + 0.028216723, + -0.015813768, + -0.0074740727, + 0.04374626, + -0.0046575684, + -0.009089041, + -0.018681953, + 0.0030103007, + -0.007848745, + 0.012480474, + 0.03744142, + -0.019612173, + -0.019922247, + -0.0029020978, + 0.0324544, + -0.012790548, + 0.014457195, + -0.016330559, + 0.00759035, + -0.007965023, + 0.011033462, + -0.001449434, + -0.011756969, + -0.0072867363, + 0.023255542, + -0.020400278, + -0.015955886, + -0.011194959, + 0.016085083, + 0.010891345, + 0.013837047, + 0.007047721, + -0.022583716, + 0.0061271894, + 0.006456643, + -0.008701448, + -0.016808588, + -0.00008412975, + 0.009941744, + 0.016459756, + -0.018707791, + 0.021640573, + 0.013223359, + -0.022687074, + 0.005681458, + -0.041291505, + 0.016472675, + -0.006033521, + -0.01418588, + -0.000864008, + 0.019780131, + 0.005519961, + 0.005071, + 0.007809986, + 0.008455973, + 0.030619796, + -0.020852469, + -0.017868008, + -0.03403061, + -0.011498573, + 0.028500957, + 0.006195018, + -0.008036082, + -0.0074676126, + -0.00910842, + -0.001468006, + 0.0063758944, + 0.0010796062, + -0.017454576, + -0.018333118, + 0.007254437, + -0.00037709507, + -0.0076291095, + 0.016291799, + -0.0015317973, + -0.024185764, + -0.008475353, + 0.021666413, + 0.0038759236, + -0.007041261, + -0.01520654, + -0.02481883, + 0.02587825, + 0.0052970955, + 0.020981666, + -0.006233777, + 0.0026372431, + 0.000120113255, + -0.004005121, + 0.004147238, + 0.005936623, + -0.0019347318, + -0.041549902, + 0.021886049, + 0.011375836, + 0.010309957, + 0.022441598, + -0.004980562, + 0.0031734125, + 0.027648255, + -0.0067311875, + 0.0021592125, + -0.033332944, + -0.02687307, + -0.007945644, + 0.005946313, + -0.015154861, + -0.010787987, + -0.0016892568, + -0.0018426786, + 0.030258043, + 0.011905545, + -0.00092456926, + -0.000011405713, + 0.028035847, + -0.016847348, + 0.041859973, + -0.006744107, + 0.0044863815, + 0.0063145254, + -0.008998603, + -0.008371995, + 0.017519174, + -0.002225426, + 0.019211661, + 0.014625152, + -0.018423557, + -0.014250479, + 0.012357736, + 0.018449396, + 0.02030984, + -0.012997264, + -0.015581213, + -0.02233824, + -0.022557875, + -0.016911946, + -0.02837176, + -0.04821649, + 0.017790489, + -0.002797125, + -0.024108244, + 0.025128905, + -0.0040341904, + -0.013010183, + 0.0052647963, + 0.003191177, + 0.026692193, + 0.0015035353, + 0.013591572, + 0.006737647, + -0.013488214, + -0.0031168885, + 0.007060641, + -0.015038583, + -0.013042483, + 0.022002326, + 0.0222478, + -0.01984473, + 0.029973809, + 0.012125181, + 0.005723447, + 0.018371878, + -0.021963567, + -0.0152453, + 0.0030232205, + 0.02635628, + -0.021007506, + 0.010871965, + -0.02994797, + 0.014483035, + -0.020064365, + -0.0051032994, + 0.0009988578, + -0.0041375486, + -0.013656171, + -0.0029570067, + -0.024767151, + 0.008746668, + 0.010258278, + -0.0029150175, + 0.013068322, + -0.006046441, + -0.02999965, + -0.0076937084, + -0.007700168, + 0.035270903, + -0.0036207587, + 0.0128293075, + -0.0074417735, + -0.0002967504, + -0.009489553, + -0.004005121, + -0.019353779, + 0.026666354, + -0.0062014777, + 0.00023517974, + -0.008152359, + 0.036278646, + 0.037312225, + -0.02328138, + -0.00042271792, + 0.0068216254, + -0.006802246, + -0.015413256, + 0.008843565, + -0.0029069427, + -0.014302158, + 0.013242739, + -0.021110864, + 0.0026420879, + -0.0133460965, + 0.005978612, + 0.0064727925, + -0.013158761, + -0.00069564756, + -0.013462375, + 0.0013129691, + 0.006140109, + -0.010833207, + -0.008333236, + 0.023888608, + 0.01821684, + -0.0053100153, + 0.020542394, + -0.019392537, + 0.01418588, + -0.011240179, + 0.011459814, + 0.0011353226, + -0.025736133, + 0.017661292, + -0.013307338, + -0.030128846, + -0.015309898, + -0.000022180579, + -0.0055231913, + 0.0006153029, + -0.009089041, + 0.010245358, + -0.0050160913, + 0.008481813, + -0.023565616, + 0.008107141, + -0.0062047075, + -0.029818771, + 0.011085141, + 0.023733573, + -0.021420937, + 0.0111239, + 0.0040729498, + 0.0015834763, + 0.006327445, + -0.031679217, + -0.0037757957, + -0.01625304, + 0.0037241166, + 0.00070614484, + -0.0033785135, + -0.0034463422, + 0.0052841757, + -0.016149681, + 0.0044024033, + -0.008449513, + 0.003604609, + -0.005549031, + 0.0048481342, + -0.02332014, + 0.0014841558, + -0.018862829, + 0.025710294, + -0.013048943, + -0.026162485, + -0.019534655, + 0.008488272, + -0.011815107, + -0.003197637, + -0.0021559824, + -0.029276144, + -0.019147063, + -0.014612232, + -0.023229701, + 0.0034915612, + 0.022557875, + 0.003002226, + 0.013359017, + -0.018617352, + -0.012357736, + 0.011194959, + 0.0057557467, + -0.0101936795, + -0.018152243, + -0.010142, + -0.0029553918, + -0.009089041, + 0.025232263, + 0.015439096, + -0.01064587, + -0.012667811, + 0.016588952, + 0.0074869925, + 0.004244136, + -0.0038953032, + -0.00456713, + 0.0010771838, + 0.007764767, + 0.02337182, + 0.042661, + 0.009256997, + -0.00609812, + -0.016098002, + -0.016020484, + 0.0072156778, + 0.02992213, + -0.030593958, + 0.001087681, + -0.0028617235, + -0.018785309, + 0.00012788529, + -0.012357736, + 0.0053423145, + 0.010794447, + 0.015129021, + 0.01873363, + -0.011304777, + 0.004273206, + 0.023785252, + -0.00047197446, + -0.006530931, + -0.0120282825, + -0.0052647963, + -0.016433917, + -0.013475294, + 0.012732409, + -0.017570853, + -0.0038953032, + -0.02842344, + 0.006802246, + -0.016588952, + 0.0047383164, + -0.018565673, + -0.0032832304, + -0.022157364, + 0.01012908, + 0.014650991, + -0.013255659, + 0.015271139, + -0.032118488, + 0.0016924867, + -0.0058074254, + -0.007493452, + 0.0014825407, + -0.028087527, + -0.023074666, + 0.0034140428, + 0.00072552444, + -0.02444416, + -0.0048449044, + 0.008494733, + 0.023798171, + 0.020968746, + 0.21209054, + 0.013888726, + -0.011808647, + 0.034289002, + 0.0033785135, + 0.035245065, + 0.021459697, + -0.013927486, + 0.032428563, + 0.020400278, + -0.021188382, + -0.00095283124, + -0.009521852, + -0.005429523, + -0.0020009456, + -0.012357736, + -0.03092987, + -0.007990862, + -0.028165044, + -0.017803408, + -0.0006706155, + -0.0107104685, + -0.0017457806, + 0.0006193403, + 0.02585241, + 0.0015600593, + -0.007719548, + 0.0016682621, + 0.0244054, + 0.018346038, + -0.012079962, + -0.0150902625, + -0.0019524965, + -0.018035965, + 0.00072835066, + -0.004670488, + 0.005687918, + 0.0018378338, + 0.019392537, + 0.027519058, + 0.0036078389, + 0.008798347, + -0.033281263, + -0.010736308, + -0.01719618, + 0.015038583, + -0.023113424, + -0.0073900945, + 0.015258219, + 0.017635452, + -0.007054181, + 0.0050451607, + 0.035606816, + 0.02488343, + -0.008455973, + 0.020632833, + 0.031808414, + -0.00031249636, + 0.003342984, + -0.0014857707, + -0.027312342, + 0.027053947, + -0.024741312, + -0.008404294, + 0.007002502, + -0.0065826103, + -0.012816387, + -0.000052486466, + 0.0023998427, + -0.028345922, + 0.006027061, + -0.0037499561, + -0.006359745, + 0.007235057, + -0.021472616, + -0.019508816, + 0.008843565, + 0.0028568788, + 0.02187313, + -0.00037366326, + -0.0072738165, + -0.0019169672, + -0.0093926545, + 0.0054069133, + -0.0015188776, + -0.016304718, + -0.00071018224, + 0.006750567, + 0.018630274, + -0.00761619, + 0.0075451313, + -0.0032832304, + 0.0018362188, + 0.0031265784, + 0.016576033, + 0.022131523, + -0.0021527526, + 0.010368096, + -0.030852351, + 0.015271139, + -0.027234823, + -0.04919839, + 0.02025816, + 0.00095525366, + -0.019831808, + 0.018475236, + 0.0054908916, + -0.008979223, + 0.02282919, + 0.0032250914, + -0.0029343972, + -0.019780131, + 0.005888174, + 0.00045743975, + 0.01267427, + -0.018333118, + 0.009244078, + -0.023565616, + -0.00610135, + 0.006543851, + -0.0021511377, + -0.0056846878, + -0.0033332943, + -0.0052454164, + 0.01472851, + -0.015529534, + -0.020245241, + 0.013449455, + -0.008740208, + -0.03950858, + 0.029043587, + 0.010290577, + 0.03092987, + -0.0025661844, + -0.0011595471, + 0.02432788, + -0.004153698, + 0.0039857416, + 0.010187219, + -0.010361636, + -0.0024111476, + -0.015839608, + 0.008934004, + 0.018501075, + 0.0031394982, + 0.0055135014, + 0.0049967114, + -0.010206599, + -0.0068280855, + -0.015361577, + -0.018501075, + 0.005277716, + -0.01369493, + -0.024095325, + 0.028681835, + -0.009483093, + -0.013397776, + -0.0069249836, + -0.0018136093, + 0.033255424, + -0.020542394, + 0.007990862, + 0.026136644, + -0.008184658, + 0.002335244, + 0.005032241, + -0.16557945, + 0.016007565, + 0.019948088, + -0.024495836, + -0.0151807, + 0.00203163, + 0.01979305, + 0.02236408, + -0.021214223, + 0.023449337, + -0.0030862042, + 0.01676983, + -0.05379782, + -0.016369317, + 0.00042796656, + 0.020774951, + -0.0014203645, + 0.01062649, + 0.02285503, + 0.012396496, + 0.015917126, + -0.016265959, + 0.0062047075, + 0.0013331563, + 0.013165221, + 0.0004485574, + -0.009560612, + 0.017855087, + -0.00759035, + -0.018669032, + 0.011382296, + 0.016640631, + 0.023152184, + 0.0009819006, + 0.023268461, + 0.0067634867, + -0.005258336, + 0.012041203, + 0.014844787, + -0.002590409, + 0.0045832796, + 0.017635452, + 0.015955886, + 0.007977943, + -0.0087337475, + 0.018333118, + 0.025128905, + 0.026278762, + 0.0019088924, + -0.0024240671, + 0.013068322, + -0.031343304, + -0.013242739, + -0.010930104, + 0.019185822, + 0.023255542, + 0.018927427, + 0.010936565, + -0.017015304, + 0.020193562, + 0.008132979, + -0.055554904, + 0.0027115315, + 0.021588894, + 0.0017393207, + -0.0031685675, + 0.0057525164, + 0.006036751, + -0.024689633, + 0.0048868936, + -0.013074783, + -0.009030902, + -0.01673107, + -0.019948088, + 0.0041343183, + 0.0098900655, + -0.006191788, + -0.0029683115, + -0.011001163, + -0.012564452, + 0.0054489025, + 0.027777452, + -0.008081301, + -0.0028601086, + -0.01370785, + 0.007829365, + 0.001876593, + 0.01118204, + -0.020284, + -0.006660129, + 0.020503636, + -0.03950858, + -0.005536111, + -0.02943118, + 0.015852528, + 0.012409415, + -0.0071639987, + 0.0012507929, + 0.0016408076, + 0.0121704005, + 0.0021527526, + -0.0023239392, + -0.00914072, + 0.0067247273, + 0.02328138, + 0.01418588, + 0.0066278293, + 0.012318977, + 0.038862593, + 0.002936012, + -0.007512832, + 0.02793249, + 0.0026808472, + 0.025749052, + 0.0005240572, + -0.0040018912, + 0.016718151, + -0.01768713, + 0.011718209, + 0.005368154, + 0.040903915, + -0.013849967, + -0.0102647375, + -0.0045735897, + -0.0041763075, + -0.012131641, + -0.10527009, + -0.0109236445, + 0.015839608, + 0.025025547, + 0.01723494, + 0.01373369, + 0.008339696, + 0.023707733, + -0.012209159, + 0.0223124, + -0.018165162, + -0.016343478, + -0.0034075829, + -0.009618751, + 0.000864008, + -0.0037757957, + 0.0086626895, + -0.01821684, + -0.018475236, + 0.01768713, + -0.018010125, + 0.0018152242, + 0.01164069, + -0.0118861655, + -0.022544956, + -0.0063306754, + -0.02793249, + 0.017622532, + 0.0053067855, + -0.006243467, + 0.028630156, + -0.014663911, + 0.0012984345, + 0.0005038701, + -0.015529534, + -0.0036918172, + -0.0037111968, + -0.0037790255, + 0.010878426, + -0.03643368, + -0.004341034, + 0.0029505468, + 0.010632951, + 0.0005151748, + 0.004202147, + 0.00029069427, + -0.026769713, + 0.012570912, + 0.004153698, + -0.01926334, + 0.0021947417, + 0.01979305, + -0.020684512, + -0.013281498, + 0.036717918, + -0.016408077, + 0.019004945, + 0.010497293, + -0.021123784, + 0.01523238, + -0.008772507, + 0.016343478, + -0.0020284, + 0.02444416, + -0.014767269, + -0.021989407, + -0.022997146, + -0.018488156, + 0.02692475, + -0.032299362, + -0.005797736, + 0.0014785033, + -0.034805793, + 0.024198683, + -0.025594015, + 0.006046441, + -0.028785193, + -0.017338298, + 0.011828027, + -0.007254437, + -0.024482917, + -0.011737589, + 0.003456032, + 0.0041892272, + 0.0003774988, + 0.027260663, + -0.0037919453, + -0.0071962983, + 0.024263281, + 0.002073619, + 0.012422335, + 0.027570738, + 0.002543575, + -0.026795551, + -0.021072105, + 0.011608391, + 0.0013048943, + -0.0021446778, + 0.01418588, + -0.013462375, + -0.02333306, + -0.013359017, + -0.038733397, + 0.010917185, + 0.006240237, + -0.011834486, + -0.015826687, + 0.002747061, + -0.0103551755, + 0.0012330282, + -0.017622532, + -0.012402955, + -0.013307338, + -0.00044532746, + -0.0131846005, + -0.0116536105, + -0.014483035, + -0.005917243, + 0.00404711, + 0.010103241, + 0.0007424816, + -0.00033752836, + -0.0023626985, + -0.0021139933, + 0.0022221962, + 0.02285503, + -0.034728274, + 0.006027061, + -0.010032183, + -0.02481883, + -0.025658615, + -0.010322876, + 0.01731246, + -0.025632774, + 0.009030902, + 0.040309604, + -0.012499854, + -0.028475119, + -0.008417214, + 0.039327703, + 0.012913286, + -0.025167665, + -0.03338462, + -0.031524178, + 0.017170342, + -0.023707733, + 0.0064760223, + 0.032738633, + -0.011924925, + 0.0013856427, + 0.015826687, + 0.0078035262, + 0.0060852002, + 0.02328138, + 0.0076807886, + -0.0014130971, + -0.009256997, + -0.006547081, + 0.035193387, + 0.017880928, + 0.0051129893, + -0.02138218, + 0.0049837916, + -0.0193021, + 0.0105489725, + 0.011317697, + 0.0037661057, + 0.0025080456, + 0.008055462, + -0.01067171, + -0.0101226205, + -0.017622532, + -0.004008351, + -0.0070864805, + 0.038707558, + 0.016756909, + 0.020594073, + 0.0034624918, + 0.00086562295, + -0.0046898676, + -0.008333236, + 0.020981666, + 0.011201419, + -0.0056103994, + -0.008914624, + 0.0092505375, + 0.042273406, + 0.03953442, + -0.030232204, + 0.00084624335, + 0.008772507, + 0.0069895824, + -0.01421172, + 0.004903043, + -0.002175362, + 0.010038642, + 0.01521946, + 0.010245358, + 0.0061659487, + -0.0030619795, + 0.009069662, + 0.017596694, + 0.01821684, + -0.0050451607, + 0.008042541, + -0.021550136, + -0.014250479, + -0.0063435948, + -0.017325379, + -0.021601815, + -0.012215619, + 0.002338474, + 0.001776465, + -0.0022706452, + -0.002076849, + 0.01670523, + 0.0046607982, + 0.004092329, + -0.022079844, + -0.018552754, + -0.021989407, + 0.0018588284, + -0.0037919453, + 0.008443054, + 0.02076203, + -0.0018055345, + 0.016679391, + 0.027699934, + 0.031808414, + -0.01877239, + 0.015348657, + 0.013294418, + 0.023100505, + -0.0005870409, + -0.0021398328, + -0.00710586, + -0.002290025, + -0.019056624, + -0.01772589, + 0.024637954, + 0.007719548, + 0.050464526, + -0.020942908, + -0.025594015, + 0.017325379, + -0.016085083, + 0.003456032, + 0.021227142, + 0.005765436, + -0.017622532, + -0.009224698, + 0.009747948, + 0.01826852, + 0.03144666, + -0.018436477, + -0.027674094, + -0.0032832304, + -0.030645637, + 0.011756969, + -0.023113424, + 0.0044960715, + 0.028888552, + -0.0015705565, + 0.009076121, + -0.00005440424, + -0.024211602, + -0.0058009657, + 0.02738986, + 0.016072163, + -0.0066116797, + -0.010012803, + 0.01317814, + -0.020929987, + -0.032661118, + -0.015800849, + 0.014909386, + -0.03400477, + -0.0050354707, + -0.032790314, + -0.0031782573, + 0.009793167, + 0.011873246, + 0.0406972, + -0.019056624, + -0.012267298, + 0.019043704, + -0.008824186, + -0.004273206, + 0.018152243, + -0.0034721815 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.015786206, + -0.008772285, + -0.0019130354, + -0.027326286, + 0.0032285526, + 0.031754762, + -0.018117666, + -0.011820117, + 0.00031097, + -0.0066492227, + 0.0054737236, + 0.009019759, + -0.0147572365, + 0.020331904, + -0.007919152, + 0.0017176616, + 0.02683134, + 0.0026717372, + 0.034620244, + -0.012881648, + -0.029540524, + 0.013806418, + -0.00920862, + 0.0016753306, + -0.017231973, + -0.012399726, + 0.0116182305, + -0.01852144, + 0.006004489, + 0.018781938, + 0.016606776, + -0.021868844, + 0.0017241741, + -0.032379955, + -0.018560514, + -0.000048207476, + 0.01862564, + 0.0029403763, + 0.020357953, + -0.013780368, + 0.0070790453, + -0.0007969624, + 0.0010672295, + -0.023861658, + -0.010218051, + 0.019706707, + 0.025606997, + 0.004321018, + -0.015017735, + 0.017935317, + 0.0043828865, + 0.0124909, + -0.018534465, + -0.018964287, + 0.0054737236, + -0.02659689, + 0.013324495, + 0.024044007, + -0.015082859, + -0.015603857, + -0.008186163, + 0.0003317285, + -0.0016720744, + 0.0073916432, + 0.008492249, + -0.0062194006, + 0.0060272827, + 0.0036111597, + 0.00060565886, + 0.006632942, + 0.031259812, + 0.03183291, + 0.007847516, + 0.014132041, + 0.023457885, + 0.011305632, + -0.0065938667, + 0.007626092, + -0.012998872, + -0.0021360873, + 0.005271837, + -0.020019306, + -0.018729838, + -0.0013871542, + 0.014666063, + 0.003163428, + -0.0112405075, + 0.008114526, + -0.016658876, + -0.021478096, + -0.00011905593, + 0.037355475, + 0.020344928, + -0.0018251173, + 0.0033083302, + 0.02169952, + 0.011885242, + 0.017739944, + 0.028107783, + -0.02190792, + -0.001680215, + 0.012367164, + -0.029566573, + 0.0015149612, + -0.033135403, + -0.020970125, + 0.011520544, + -0.00057106145, + 0.029722873, + -0.019928131, + -0.03316145, + 0.03342195, + 0.034411844, + -0.027743084, + -0.01841724, + -0.025593972, + 0.006707835, + -0.01918571, + -0.03006152, + 0.00197816, + 0.0063496497, + 0.042956192, + 0.019915106, + -0.013298445, + 0.030895116, + -0.0053858054, + -0.010595774, + -0.021347847, + -0.016502576, + 0.011305632, + -0.01132517, + 0.023106212, + 0.019094536, + 0.023119237, + -0.018534465, + 0.0027270932, + -0.008153602, + 0.0047378154, + -0.012855598, + -0.025685146, + 0.0055518732, + 0.010289689, + -0.017127773, + -0.012933748, + -0.0022891301, + 0.027586786, + 0.012705811, + 0.012868623, + -0.017427346, + -0.013754318, + 0.007736804, + -0.024578027, + 0.010576237, + -0.005929596, + -0.0034483483, + 0.01659375, + -0.020384002, + 0.009221645, + -0.03503704, + -0.0079386905, + -0.010550187, + -0.006385468, + 0.012419263, + 0.0063887243, + 0.023301587, + 0.023119237, + 0.0001985283, + 0.010185489, + -0.011676842, + -0.0040312135, + -0.010081289, + 0.031937107, + -0.018716814, + 0.02516415, + -0.014483714, + 0.02244194, + 0.0104525, + -0.0029208388, + -0.018768912, + -0.003503704, + -0.02265034, + -0.018104643, + 0.01936806, + -0.005574667, + 0.021504147, + -0.015382433, + 0.02341881, + -0.0067599346, + 0.008681111, + 0.003288793, + 0.015525707, + 0.02601077, + -0.02003233, + -0.02598472, + -0.6910503, + -0.034542095, + 0.010856273, + -0.0044187047, + 0.0027222086, + 0.01995418, + 0.0053727804, + 0.019394109, + -0.0011046762, + -0.024994826, + -0.010439475, + 0.000051768977, + 0.018873112, + 0.001510891, + 0.008290363, + -0.015382433, + -0.007827979, + 0.006935771, + 0.009488656, + -0.0009166289, + 0.0023363454, + 0.01762272, + -0.01598158, + 0.012113177, + 0.015564782, + 0.010315739, + 0.017987417, + -0.0021018968, + -0.011839654, + 0.020996174, + -0.013005385, + 0.020683577, + -0.005463955, + -0.018755889, + 0.046212424, + 0.0058807526, + -0.010107339, + 0.012881648, + 0.009664493, + 0.028159881, + -0.014223215, + -0.011377269, + 0.0056267665, + -0.031051414, + -0.01127307, + 0.0009565177, + 0.023991907, + -0.025398599, + 0.018586565, + 0.000116512, + 0.038189072, + -0.020918025, + 0.0018300016, + 0.00095000525, + 0.017687844, + 0.00907837, + 0.022337742, + -0.0062649874, + -0.007919152, + 0.0081015015, + -0.009846841, + -0.0033441489, + -0.017583644, + -0.017023573, + -0.015200084, + -0.003306702, + -0.034385793, + -0.013871542, + -0.0118070915, + -0.0007444557, + -0.005222994, + 0.007951715, + -0.02696159, + 0.016398378, + 0.015121935, + -0.0072939564, + 0.016815174, + -0.009762179, + -0.010589262, + 0.0112665575, + 0.010485062, + -0.025620023, + -0.037381526, + -0.010100828, + 0.03206736, + -0.01757062, + -0.031937107, + -0.008225238, + 0.029097676, + 0.0020888718, + 0.038032774, + 0.0047247903, + -0.029201876, + -0.006411518, + -0.008257801, + 0.026414542, + -0.013532894, + 0.007951715, + 0.019055462, + -0.022064218, + -0.0007212551, + -0.017713895, + 0.0013049344, + -0.0073525687, + 0.039647862, + 0.010061752, + -0.014483714, + 0.03042622, + 0.0033799673, + -0.016893324, + 0.028550629, + -0.012399726, + -0.013317983, + 0.003927014, + 0.014119016, + -0.034047145, + 0.052829083, + 0.017258022, + 0.008121039, + 0.0019048948, + 0.0025089257, + -0.0010688577, + 0.00045017386, + -0.006948796, + 0.013350545, + 0.011813604, + -0.008596448, + -0.021334823, + -0.017323146, + 0.0057244534, + -0.0018951262, + -0.010419938, + 0.016658876, + 0.004477317, + -0.000027550763, + -0.010289689, + 0.0151870595, + -0.010973497, + 0.024200305, + -0.016229052, + -0.026154043, + -0.012100153, + -0.027196037, + 0.010582749, + -0.008524812, + -0.02598472, + -0.030790916, + -0.010081289, + -0.0332917, + 0.027795184, + -0.02701369, + -0.013428695, + -0.027873334, + 0.022858739, + 0.009351894, + -0.0020823595, + -0.023718383, + 0.0011567759, + -0.017739944, + 0.01497866, + 0.007346056, + 0.010406913, + -0.0040865694, + -0.008309901, + -0.006385468, + -0.027560735, + -0.0073395437, + 0.032848854, + -0.0020302597, + -0.02521625, + 0.004027957, + 0.0013293561, + -0.0026440592, + -0.013506845, + -0.02421333, + -0.008570399, + -0.010934422, + -0.027248137, + 0.004871321, + -0.0051057693, + -0.000388509, + 0.01521311, + 0.0061086887, + -0.0093193315, + 0.039205015, + -0.0035330101, + 0.0124909, + 0.028837178, + -0.009169545, + 0.017805068, + -0.014666063, + 0.0019162917, + -0.0072158067, + -0.003813046, + 0.0039009643, + 0.00009580441, + 0.0006793311, + 0.009202108, + 0.003959576, + 0.004311249, + 0.019967206, + -0.010126877, + 0.028915327, + -0.01572108, + 0.010152927, + -0.03464629, + 0.014613963, + -0.01336357, + 0.015343359, + 0.038840316, + 0.008459687, + -0.016268129, + -0.018664714, + -0.013663143, + 0.017375246, + 0.01764877, + -0.02003233, + 0.021269698, + -0.005180663, + -0.017661795, + 0.010699973, + 0.016619802, + 0.019797882, + -0.0064180302, + -0.005268581, + 0.00022651153, + 0.032223657, + 0.0168803, + -0.01944621, + -0.010986522, + -0.015343359, + -0.0042721746, + -0.008583424, + 0.022207493, + -0.030504368, + -0.012849086, + 0.0011917804, + -0.046342675, + 0.017505495, + 0.02418728, + 0.008394563, + 0.021439021, + 0.022936888, + -0.012647199, + 0.010784635, + 0.010869297, + 0.020918025, + -0.0011510774, + -0.014340439, + 0.00913047, + -0.013024922, + 0.005271837, + -0.010797661, + 0.015317309, + 0.04522253, + -0.0019455977, + 0.04011676, + 0.013506845, + 0.04553513, + 0.022142367, + -0.014184141, + -0.01664585, + 0.019823931, + 0.0031162126, + 0.0062975497, + -0.015108909, + 0.0052913744, + -0.016176954, + 0.0051774066, + -0.0059035458, + 0.003503704, + 0.0030413193, + 0.018899161, + -0.023861658, + 0.00044447547, + -0.0104004005, + -0.012139227, + -0.0028899047, + 0.007873566, + 0.015382433, + -0.013545919, + -0.037381526, + 0.015994605, + -0.0035981347, + -0.0004108956, + -0.013207271, + -0.030582517, + 0.0144316135, + -0.0018251173, + 0.0066882977, + 0.013962717, + 0.007137657, + 0.02244194, + -0.0044414983, + 0.01654165, + -0.03550594, + -0.0005755387, + 0.0058970335, + 0.016958449, + -0.0010688577, + -0.006369187, + -0.016763074, + -0.029774971, + -0.011833142, + 0.020449128, + 0.012106665, + -0.012849086, + 0.0076781916, + -0.017140798, + -0.018091617, + -0.012302039, + 0.011481469, + -0.012315064, + -0.0076456293, + -0.018104643, + -0.012360651, + -0.011318658, + -0.012692787, + 0.031155614, + -0.0035232415, + 0.004334043, + -0.012790473, + -0.012061078, + 0.00059955346, + 0.07632604, + 0.008433637, + 0.0028475737, + 0.0137282675, + 0.007613067, + -0.00788659, + -0.01852144, + 0.0030006163, + -0.0020318879, + 0.012152253, + 0.002653828, + -0.0057732966, + 0.018873112, + 0.0022581958, + -0.003249718, + -0.0017404553, + 0.023718383, + 0.015121935, + 0.0337606, + -0.015916456, + 0.0040605194, + 0.008368513, + -0.010485062, + 0.0061054323, + 0.006085895, + 0.0006838084, + 0.029097676, + 0.0031406344, + 0.028993476, + -0.0025366035, + -0.00006807557, + 0.01497866, + -0.0057570157, + -0.012406238, + -0.015747132, + 0.0017176616, + -0.012341114, + 0.00545093, + 0.016320227, + -0.0018381422, + 0.031937107, + 0.013077022, + 0.008720186, + -0.015265209, + 0.004021445, + 0.017036598, + -0.002020491, + 0.012660224, + -0.013845492, + -0.0063398806, + 0.018690763, + 0.005125307, + 0.0040312135, + -0.018104643, + 0.0137282675, + 0.0012023632, + -0.0073655937, + 0.0030836503, + -0.016515601, + -0.011533569, + 0.009723105, + -0.012308551, + 0.0060370513, + -0.016789125, + -0.0072809313, + -0.008576911, + 0.000034495693, + -0.011631255, + -0.023080163, + -0.0037935085, + -0.010517624, + -0.007528405, + -0.026349418, + -0.001989557, + 0.02082685, + 0.014053891, + 0.01659375, + -0.01251695, + -0.0015727594, + 0.038110923, + -0.0075349174, + 0.008987197, + -0.0105567, + -0.012002465, + -0.002245171, + 0.010309226, + 0.03537569, + -0.017583644, + -0.005603973, + 0.004601054, + 0.02667504, + -0.00875926, + 0.0017616207, + -0.025502797, + -0.008114526, + -0.011077696, + 0.01759667, + 0.010361326, + -0.016398378, + -0.0044577797, + 0.007841003, + -0.028211981, + -0.0070920703, + -0.0068445965, + 0.008655061, + 0.011155846, + 0.02677924, + 0.014744212, + -0.016281152, + 0.011579156, + 0.01759667, + -0.012725349, + 0.00052466016, + 0.002429148, + -0.0067729596, + 0.014053891, + -0.011605206, + 0.010634849, + 0.013050972, + -0.02862878, + 0.0002965205, + -0.043555338, + 0.031077465, + 0.004982033, + -0.0011657305, + 0.0023656515, + 0.018039517, + -0.013233321, + 0.0030266664, + 0.0023412297, + 0.0033929923, + 0.020279804, + 0.0004192397, + -0.019394109, + -0.04501413, + -0.021465072, + 0.03704288, + -0.0028785078, + -0.013897592, + -0.0045131356, + 0.0014734443, + 0.01119492, + 0.00920862, + 0.005512798, + -0.027404437, + -0.019420158, + 0.0016688182, + 0.0018055799, + 0.00025663167, + 0.015682006, + -0.015343359, + 0.0024340323, + -0.01497866, + 0.018378165, + -0.0060565886, + -0.005568154, + -0.008446662, + -0.026271269, + 0.017726919, + 0.006567817, + 0.016281152, + -0.00968403, + 0.0023102956, + 0.010810685, + -0.0041191317, + -0.0020839875, + -0.018964287, + -0.00029713105, + -0.036443733, + 0.016528627, + 0.025255324, + -0.0016452104, + 0.024955751, + -0.005268581, + 0.00302341, + 0.007398156, + -0.000059884114, + -0.0019537383, + -0.026180094, + -0.01949831, + -0.007046483, + 0.015082859, + -0.020605426, + -0.00649618, + 0.009482143, + -0.0035330101, + 0.022116318, + 0.0148093365, + -0.0053499867, + -0.007945202, + 0.028368281, + -0.0119699035, + 0.024578027, + -0.004181, + 0.0128360605, + -0.013252858, + -0.018951261, + -0.0054900046, + 0.0016142763, + 0.0035330101, + 0.016841223, + 0.0028312926, + -0.01209364, + -0.0332917, + 0.009690542, + 0.021191549, + 0.022663364, + -0.0011966648, + -0.00463036, + -0.0250339, + -0.0040019075, + -0.025672121, + -0.026531767, + -0.03899662, + 0.0070855576, + -0.0005352429, + -0.03537569, + 0.024434755, + -0.003985626, + -0.023093186, + 0.004548954, + 0.0025480003, + 0.030165719, + -0.0070139207, + 0.019758807, + 0.012881648, + -0.0067143473, + -0.02593262, + 0.011312145, + -0.007385131, + -0.0063887243, + 0.016229052, + 0.011416344, + -0.013897592, + 0.011930829, + 0.009423532, + 0.029019527, + 0.032510206, + 0.0037967649, + 0.0034222982, + 0.013480795, + 0.019576458, + -0.02857668, + -0.002968054, + -0.011520544, + 0.019250834, + -0.010654386, + -0.026180094, + 0.012230402, + -0.004392655, + -0.016476527, + 0.0053011435, + -0.044388935, + 0.011168871, + 0.010621824, + -0.004614079, + 0.00025317192, + -0.013376595, + -0.017831119, + -0.0022435428, + -0.0028622267, + 0.029175825, + -0.0039628325, + 0.016385352, + 0.0058677276, + -0.0010558327, + -0.008713673, + -0.004138669, + 0.011071184, + 0.025828421, + -0.0010558327, + -0.009306307, + -0.009084883, + 0.042904094, + 0.04024701, + -0.020813826, + -0.0068445965, + -0.008713673, + -0.0012308551, + -0.0070529953, + 0.016567701, + 0.00517415, + -0.0067143473, + 0.024122156, + -0.011683355, + -0.001299236, + -0.027743084, + 0.0057570157, + -0.0064766426, + -0.005236019, + -0.0037707149, + -0.006577586, + 0.00751538, + -0.0014302992, + 0.004324274, + -0.005838421, + 0.021217598, + 0.0018853574, + -0.0061933505, + 0.022168418, + -0.0132398335, + 0.013376595, + 0.0009662864, + 0.01862564, + -0.0030396911, + -0.007958228, + 0.03000942, + -0.0151349595, + -0.020553328, + -0.015642932, + 0.015460582, + 0.00028471666, + 0.0013602903, + -0.012894673, + 0.000988266, + -0.009417019, + 0.01129912, + -0.019355034, + -0.012262965, + 0.0013627325, + -0.025046926, + 0.016502576, + 0.02842038, + -0.028081732, + 0.014861437, + 0.012881648, + -0.015629906, + 0.0002995732, + -0.029227925, + -0.0034939353, + -0.019055462, + 0.011175383, + 0.015408483, + -0.013650118, + -0.00788659, + -0.0075218924, + 0.0011225855, + 0.009729617, + -0.005395574, + 0.018065566, + 0.012308551, + -0.0019472259, + -0.02011048, + 0.012575562, + -0.015304283, + 0.005340218, + -0.008720186, + -0.007814953, + -0.015916456, + -0.0059263394, + 0.00019791776, + -0.01344172, + -0.000109694265, + -0.04339904, + -0.019068487, + -0.0035460352, + -0.027404437, + -0.010380863, + 0.010895347, + -0.0023509983, + 0.009970578, + -0.014679087, + -0.007984277, + 0.012959798, + 0.013545919, + 0.006343137, + -0.027352337, + -0.024916677, + -0.009110933, + -0.020566352, + 0.002740118, + 0.0020400283, + -0.006203119, + -0.019328985, + 0.0041614627, + -0.019302934, + 0.00960588, + -0.006170557, + -0.017075673, + -0.0021442277, + -0.0031959903, + 0.009781716, + 0.021608345, + 0.008752747, + -0.002852458, + -0.022741513, + -0.008518299, + 0.0043828865, + 0.027717035, + -0.020514252, + -0.0015849702, + 0.011123284, + -0.02167347, + -0.0047085094, + -0.011357732, + -0.012054565, + -0.010719511, + 0.019693682, + 0.017844144, + -0.010472038, + 0.0029436324, + 0.030478317, + 0.0018283734, + -0.0137282675, + 0.0015426392, + -0.004897371, + -0.021425998, + -0.0035818536, + 0.0140799405, + -0.001088395, + 0.009430043, + -0.02690949, + 0.013285421, + -0.028107783, + 0.003643722, + -0.013949691, + -0.012627662, + -0.01654165, + 0.032041308, + 0.029227925, + -0.015121935, + 0.0019390853, + -0.041106656, + 0.006512461, + -0.00400842, + -0.012660224, + -0.0026033563, + -0.035558037, + -0.024486853, + -0.0020221192, + 0.00066956243, + -0.02521625, + 0.004588029, + 0.014275314, + 0.016229052, + 0.024955751, + 0.21569271, + 0.0076586544, + -0.0075609675, + 0.026271269, + -0.0011274698, + 0.039543662, + 0.0210092, + -0.005916571, + 0.02990522, + 0.019042436, + -0.019355034, + 0.009221645, + 0.006059845, + -0.0006663062, + -0.0019423416, + -0.0015939248, + -0.0330833, + -0.01172243, + -0.023770483, + -0.017948342, + 0.00110142, + -0.017492471, + 0.011546593, + 0.0067013223, + 0.02857668, + 0.015095885, + -0.0059100585, + 0.0066459663, + 0.0333959, + 0.022741513, + -0.015616882, + -0.009879404, + -0.0038163022, + -0.012744887, + 0.00878531, + -0.0034678855, + -0.0075544547, + -0.012770936, + 0.026635965, + 0.02857668, + 0.021347847, + -0.0071962695, + -0.015278234, + -0.013702218, + -0.0031406344, + 0.0057277097, + -0.020344928, + -0.0062715, + 0.013109584, + 0.007626092, + -0.024760377, + -0.009592855, + 0.032379955, + 0.0168282, + -0.0045229043, + 0.027091838, + 0.023874681, + -0.012210865, + 0.00920862, + 0.0007672493, + -0.021660445, + 0.027169988, + -0.022259591, + 0.010126877, + -0.0069748457, + -0.012100153, + -0.009338869, + -0.0040507508, + 0.013663143, + -0.022311691, + 0.022481015, + 0.006554792, + 0.0032562306, + 0.014613963, + -0.016867274, + -0.015525707, + 0.018300015, + -0.00020025818, + 0.0069813584, + 0.00020554956, + -0.011702892, + 0.010491575, + -0.01600763, + 0.008941609, + -0.0025724221, + -0.030504368, + 0.0057960902, + -0.0006740397, + 0.011006059, + 0.0037316403, + 0.0041419254, + -0.0049071396, + 0.008322925, + 0.0060631013, + 0.023926781, + 0.019928131, + -0.016658876, + 0.0035102165, + -0.023145286, + 0.014184141, + -0.035167288, + -0.048817407, + 0.01841724, + -0.0002714882, + -0.00838805, + 0.011051646, + -0.00020412495, + 0.021829769, + 0.034698393, + 0.003686053, + 0.0079386905, + -0.012087128, + 0.0091825705, + 0.0025887033, + 0.01902941, + -0.0155126825, + 0.007997302, + -0.010765098, + -0.009723105, + -0.007730291, + -0.0067859846, + -0.020514252, + -0.011683355, + 0.018951261, + 0.0012984219, + -0.00878531, + -0.021973044, + 0.01595553, + -0.0038456083, + -0.03816302, + 0.032197606, + -0.0047019967, + 0.028368281, + 0.0009573318, + -0.0060761264, + 0.012243426, + -0.00093046785, + 0.00500157, + 0.0059393644, + 0.0023119238, + 0.0022614521, + -0.01936806, + 0.014874461, + -0.0014115759, + 0.0041028503, + 0.0007607369, + 0.0063366247, + -0.022806639, + -0.0155126825, + -0.039309215, + -0.0049494705, + -0.0031162126, + -0.01497866, + -0.00968403, + 0.01503076, + -0.020253753, + -0.009351894, + 0.0025382317, + 0.005320681, + 0.0209571, + -0.025515823, + -0.006812034, + -0.0000794215, + 0.0044805733, + -0.0027466305, + 0.004558723, + -0.167761, + 0.010745561, + 0.014861437, + -0.017661795, + -0.009377944, + 0.021256672, + 0.022832688, + 0.02198607, + -0.012035028, + 0.02672714, + 0.010791148, + 0.025672121, + -0.04694182, + -0.013689193, + 0.0013073765, + 0.021126423, + -0.0054900046, + -0.013194246, + 0.021269698, + 0.02013653, + 0.009351894, + -0.015330333, + 0.023913758, + -0.0026180095, + 0.012178302, + 0.0018625639, + -0.01047855, + 0.0148093365, + -0.011715918, + -0.010647874, + 0.0075935298, + 0.009495168, + 0.014014816, + 0.011377269, + 0.026101943, + 0.007997302, + -0.0039335266, + 0.0010712999, + -0.013962717, + 0.001510891, + 0.0042591495, + 0.008153602, + 0.0060012327, + 0.010804173, + -0.0209571, + 0.01857354, + 0.003332752, + 0.013936667, + -0.016255103, + -0.014379514, + 0.014561863, + -0.042487297, + -0.003205759, + -0.0066296854, + 0.0040247007, + 0.02664899, + 0.012979335, + 0.0049657514, + -0.013637094, + 0.0206445, + -0.000818942, + -0.04009071, + -0.008088477, + 0.013871542, + -0.0105632115, + -0.014119016, + 0.0061673005, + 0.009853354, + -0.018182792, + -0.004194025, + -0.0140799405, + -0.031077465, + 0.018821012, + -0.013233321, + 0.00666876, + 0.01815674, + -0.0074372306, + -0.0060826386, + -0.011084209, + -0.024044007, + 0.004747584, + 0.03699078, + -0.006890184, + 0.011461931, + -0.018638663, + 0.010784635, + 0.008238263, + 0.014040866, + -0.024135182, + -0.018977312, + 0.024499878, + -0.041523453, + 0.0047703777, + -0.032588355, + -0.008140576, + 0.010178977, + -0.0031731967, + -0.0007359081, + -0.00046401285, + 0.0017453396, + 0.0060631013, + 0.0007932992, + -0.013506845, + 0.0123215765, + 0.028680878, + 0.014679087, + -0.0103743505, + 0.016606776, + 0.013272395, + -0.005662585, + -0.010869297, + 0.027560735, + -0.008576911, + 0.010302713, + 0.0069748457, + -0.009351894, + 0.010485062, + -0.024317529, + 0.016333252, + -0.0076521416, + 0.030921165, + -0.0037511776, + -0.008498762, + 0.012543, + 0.005506286, + -0.01849539, + -0.10456408, + -0.0022386585, + 0.021347847, + 0.011976416, + 0.0003828106, + 0.013532894, + 0.003936783, + 0.03508914, + -0.014887486, + 0.03206736, + -0.016932398, + -0.021230623, + -0.019693682, + -0.010647874, + 0.018547488, + -0.012770936, + 0.015734106, + -0.03167661, + -0.048061963, + 0.004109363, + 0.0072092945, + -0.0028736235, + 0.0017013805, + -0.011429369, + -0.02349696, + -0.011865704, + -0.02265034, + 0.016606776, + 0.00011630848, + -0.001086767, + 0.019680656, + -0.010511112, + 0.01577318, + -0.010296201, + -0.009306307, + -0.009560293, + 0.0050960006, + 0.00072573236, + 0.010159439, + -0.023119237, + -0.013155172, + 0.00220284, + 0.024408704, + -0.021712545, + 0.003617672, + -0.005564898, + -0.0046271035, + 0.0067338846, + -0.0061542755, + -0.039517615, + 0.0044121924, + 0.013611044, + -0.010817198, + -0.009762179, + 0.03678238, + -0.023679309, + 0.008863459, + 0.015551757, + -0.025072975, + 0.009475631, + 0.004581516, + 0.0030999314, + 0.019511333, + 0.0144316135, + -0.016111828, + -0.018117666, + -0.02601077, + -0.025398599, + 0.02077475, + -0.024030982, + -0.01572108, + 0.017140798, + -0.022467991, + 0.016619802, + -0.021960018, + -0.006825059, + -0.016333252, + -0.011279583, + 0.008681111, + -0.024030982, + -0.034489993, + -0.018026492, + 0.0007232902, + -0.0023786763, + 0.003936783, + 0.029201876, + -0.005366268, + -0.010328763, + 0.037199177, + -0.015968554, + 0.0035558038, + 0.031129563, + 0.011188408, + -0.019146636, + -0.017687844, + 0.016971475, + 0.0040019075, + -0.0027710523, + 0.010960472, + -0.0100226775, + -0.029722873, + -0.01585133, + -0.040820107, + 0.017726919, + -0.0052523, + -0.001171429, + 0.0033571736, + -0.004972264, + -0.010993035, + 0.007723779, + -0.014275314, + 0.0020025817, + -0.0074372306, + -0.0014522788, + -0.016567701, + -0.01913361, + -0.010172464, + 0.007443743, + 0.009924991, + 0.0039205016, + 0.013624068, + 0.0034874228, + 0.0005747247, + -0.0006386282, + 0.011253533, + 0.009306307, + -0.03383875, + 0.010517624, + -0.024812477, + -0.022129342, + -0.016203003, + -0.011064671, + 0.02172557, + -0.02701369, + 0.004434986, + 0.037589926, + -0.020384002, + -0.025007851, + -0.0013822699, + 0.018951261, + 0.011468444, + -0.027508635, + -0.041601602, + -0.027586786, + 0.029332126, + -0.013988767, + -0.016476527, + 0.020462153, + -0.007945202, + 0.0109409345, + 0.008420612, + 0.00020961984, + 0.012393214, + 0.020566352, + 0.022168418, + -0.0041842563, + -0.0025170662, + -0.017388271, + 0.021504147, + 0.0028703671, + 0.0062356815, + -0.015200084, + -0.0027368618, + -0.0008323739, + 0.010641362, + 0.023002012, + 0.013454745, + 0.016333252, + -0.007163707, + -0.0025024132, + 0.003630697, + -0.013663143, + -0.012236915, + 0.0053011435, + 0.029931271, + 0.016216028, + 0.026635965, + -0.009110933, + -0.007710754, + -0.008589936, + -0.0072092945, + 0.014796312, + 0.025698172, + 0.009371432, + -0.0067729596, + 0.0058221403, + 0.032353908, + 0.027899383, + -0.044310786, + -0.01775297, + 0.009117446, + 0.008824385, + -0.016476527, + 0.0037218714, + -0.010185489, + 0.015343359, + 0.01214574, + -0.007932178, + -0.002386817, + -0.007150682, + -0.011741967, + 0.033448, + -0.0010403657, + -0.0121587645, + 0.00011590146, + -0.021256672, + -0.0151870595, + -0.0063626743, + -0.022975963, + -0.0066361977, + -0.0011893382, + 0.009547268, + 0.0047768904, + -0.010016165, + 0.009202108, + 0.010634849, + 0.0021800464, + 0.0062780124, + -0.008316413, + -0.020266779, + -0.02257219, + 0.010107339, + 0.0055583855, + -0.0057960902, + 0.0109148845, + -0.007919152, + 0.032979105, + 0.010680436, + 0.017687844, + -0.010068265, + 0.01246485, + -0.00019221936, + 0.017883219, + -0.0057374784, + -0.016163928, + -0.01132517, + -0.00711812, + -0.030582517, + -0.010459012, + 0.027117888, + -0.0075218924, + 0.059133146, + -0.008954634, + -0.02423938, + 0.028368281, + -0.0112926075, + 0.012757911, + 0.015747132, + 0.0022614521, + -0.020553328, + -0.022025144, + 0.013975741, + 0.022103293, + 0.03209341, + -0.014913536, + -0.026219169, + -0.018586565, + -0.027508635, + 0.01590343, + -0.023796532, + -0.008238263, + 0.029123725, + 0.019889057, + 0.0046401285, + 0.004317762, + -0.024030982, + -0.012810011, + 0.021504147, + 0.002300527, + -0.0022956426, + -0.013988767, + 0.012100153, + -0.004705253, + -0.021295749, + -0.01301841, + 0.0123215765, + -0.037355475, + -0.012901185, + -0.028550629, + 0.0070725325, + 0.014092966, + 0.015760155, + 0.025046926, + -0.018977312, + -0.028732978, + 0.008094989, + 0.003953064, + -0.009136983, + 0.00928677, + -0.019641582 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 71, + "total_tokens": 71 + } +} +278 34443 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 83 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What color is the lamp in each room?"]}HTTP/2.0 200 OK +Content-Length: 33488 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:59 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 92 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-59scv +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999991 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_0119caf0d99e4b009204c0744bf6f60d + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.02230405, + 0.008771547, + 0.014554557, + -0.011423711, + -0.008448112, + 0.015473112, + 0.0068826885, + -0.008881515, + 0.004744786, + -0.005595419, + -0.016676288, + 0.01731022, + -0.017698342, + 0.024891527, + -0.0063878335, + -0.0012743324, + 0.031618968, + 0.021294935, + 0.013648941, + -0.0046218806, + -0.020337569, + 0.025512522, + -0.01429581, + -0.001887241, + -0.01562836, + -0.008959139, + 0.017374907, + -0.008868577, + -0.011934738, + 0.006138789, + 0.0034187038, + -0.016792726, + -0.012723918, + -0.0168186, + -0.016844476, + 0.0169221, + 0.010860935, + 0.0039006216, + 0.011591896, + -0.014606307, + 0.015718922, + -0.0003416278, + -0.00038286572, + 0.00014958851, + -0.0055177948, + 0.007827118, + -0.0011853878, + 0.0067468463, + -0.039355524, + 0.01296326, + -0.008124677, + 0.0066562844, + -0.012885635, + -0.052706905, + -0.026172329, + 0.00087650784, + 0.008674516, + 0.01811234, + -0.011714802, + -0.0054789823, + -0.0041917125, + -0.0013471051, + -0.014502808, + 0.0060676336, + -0.0006072485, + -0.001574318, + -0.0084093, + 0.010860935, + 0.017038535, + -0.0021136452, + 0.021424308, + 0.028125875, + 0.017581906, + -0.00033576557, + 0.029419612, + -0.008752141, + -0.020712754, + -0.0023740102, + 0.007109093, + 0.00022701068, + 0.0044892724, + 0.0069279694, + -0.03260221, + 0.008758609, + 0.018733334, + 0.013441943, + 0.0025923285, + 0.018371087, + -0.034594566, + -0.0030613088, + -0.013196132, + 0.051439043, + 0.030040607, + -0.021760682, + -0.012445764, + 0.0054854513, + -0.0074325274, + 0.02478803, + 0.0125169195, + -0.013791252, + 0.016119981, + -0.015291989, + -0.031308472, + 0.005977072, + -0.017129097, + -0.023222605, + 0.0037486071, + 0.008480456, + 0.032679833, + -0.040105894, + -0.03487919, + 0.049187936, + 0.039459024, + -0.038449906, + -0.021980617, + -0.0070767496, + 0.0012702894, + -0.024141159, + -0.037337292, + 0.0070055937, + -0.0022672766, + 0.040468138, + 0.017982965, + -0.027530754, + 0.04486685, + -0.002137903, + -0.026482826, + -0.024503406, + -0.024956215, + 0.005016471, + 0.010802716, + 0.014929742, + 0.013467818, + 0.021243185, + -0.008920327, + 0.0013099102, + -0.006513973, + 0.024425782, + -0.03793241, + 0.00328933, + 0.013545441, + 0.006119383, + -0.0047900667, + -0.008059991, + -0.0056406995, + 0.030972099, + 0.0048094727, + -0.0027427257, + -0.020402256, + -0.0018662177, + 0.005673043, + -0.012717449, + 0.023817725, + 0.012827417, + 0.0014692018, + 0.016999723, + -0.0019567795, + 0.017827716, + -0.044219982, + 0.0069538443, + -0.04931731, + 0.0048968, + 0.030402854, + -0.005876807, + 0.012342265, + 0.028772743, + 0.020686878, + 0.0049744244, + -0.010395189, + 0.0075101517, + -0.032576334, + 0.027039135, + -0.020466942, + 0.03330083, + 0.00044795693, + 0.034930937, + 0.007859461, + -0.016158793, + 0.003978246, + 0.01157249, + -0.0095930705, + -0.0068438766, + -0.008538674, + -0.009146731, + 0.0009783898, + -0.017129097, + 0.0017497813, + -0.001466776, + 0.024011785, + -0.004550725, + 0.01143018, + 0.027763627, + -0.015059115, + -0.0069991252, + -0.66901803, + -0.032653958, + 0.004961487, + -0.0085904235, + 0.0080988025, + 0.013390193, + 0.0239471, + 0.028255248, + -0.003522203, + -0.016003545, + 0.009386073, + 0.007063812, + 0.0042078844, + -0.023934161, + 0.0125233885, + -0.021825368, + -0.0053981235, + 0.010893278, + -0.00018577276, + 0.0017788904, + -0.008765078, + 0.019108517, + -0.0018112338, + -0.00398148, + 0.021411372, + 0.022834484, + 0.009638351, + -0.016495166, + -0.015020303, + 0.012102923, + -0.015304926, + 0.011792426, + 0.013099102, + -0.023106169, + 0.025447836, + -0.003709795, + -0.024555156, + 0.028824493, + 0.0054886853, + 0.029962983, + -0.028384622, + -0.0021750978, + 0.017323159, + -0.02305442, + -0.010666873, + 0.010847997, + 0.017568968, + -0.00046129862, + 0.046833333, + -0.014024125, + 0.012769199, + -0.030014733, + -0.015718922, + 0.01844871, + 0.018254649, + 0.015990607, + 0.046212338, + 0.009858287, + -0.008467519, + 0.0031146754, + -0.009987661, + -0.018086463, + 0.0013495309, + 0.002897974, + 0.007445465, + 0.00079120195, + -0.0252279, + -0.023507228, + -0.020104695, + -0.022329926, + -0.0035933587, + 0.016158793, + -0.03904503, + 0.02423172, + 0.0061064456, + -0.010796247, + 0.029911233, + -0.007102624, + -0.0024710405, + -0.017206721, + 0.002055427, + -0.015123802, + -0.02853987, + -0.015123802, + 0.01741372, + -0.010472813, + -0.014670994, + -0.020893876, + 0.015757734, + 0.026987385, + 0.009612476, + 0.015046178, + -0.01839696, + 0.0003299033, + -0.017103223, + 0.03216234, + -0.01646929, + 0.0032181744, + -0.011320212, + -0.025033839, + 0.000618973, + -0.03270571, + -0.0037453729, + 0.013312569, + 0.02913499, + -0.0064428174, + -0.0077494932, + 0.031877715, + 0.015641298, + -0.014399309, + 0.0004980893, + -0.013176726, + -0.021631308, + 0.0009832412, + 0.014502808, + -0.022498112, + 0.04877394, + 0.013234944, + 0.024218785, + -0.015874172, + 0.007607182, + -0.0003988353, + 0.014231123, + -0.0182029, + 0.020570442, + 0.008965608, + -0.013648941, + -0.009146731, + -0.009599539, + 0.024218785, + -0.011967081, + 0.011346086, + 0.010207596, + -0.0065269107, + -0.030583978, + 0.0065269107, + 0.01662454, + -0.026094705, + 0.013881814, + -0.013312569, + -0.01687035, + 0.0033507827, + -0.026651012, + 0.007833586, + -0.023481352, + -0.027065009, + -0.028358746, + -0.007128499, + -0.027686004, + -0.012329328, + -0.018332275, + -0.025991205, + -0.042977992, + 0.007671869, + 0.013299632, + 0.0028947399, + -0.015990607, + -0.0078077116, + -0.028332872, + 0.006614238, + 0.024956215, + 0.011967081, + -0.015421363, + 0.003324908, + -0.010304627, + -0.024205847, + -0.009981193, + 0.02903149, + 0.00025308758, + -0.042822745, + -0.0026004142, + 0.0050229398, + -0.002137903, + 0.013868877, + -0.011837707, + -0.00040328252, + -0.0031454016, + -0.037984163, + -0.006850345, + -0.010298158, + 0.012568669, + 0.029393738, + -0.015304926, + 0.0046024746, + 0.03423232, + 0.012549263, + 0.022679236, + 0.023274355, + 0.0025680708, + 0.010511625, + -0.015123802, + -0.004977659, + 0.013545441, + -0.0077883056, + 0.008726266, + -0.0033281422, + 0.022265239, + -0.012872698, + -0.00095332356, + -0.011087338, + 0.029600736, + -0.0019017955, + -0.005094095, + -0.011514273, + 0.029755985, + -0.033870075, + 0.009159668, + -0.005210532, + 0.013907689, + 0.025253775, + -0.007704213, + -0.025745396, + 0.0020344038, + -0.022627486, + 0.01641754, + 0.010110566, + -0.01687035, + 0.028358746, + -0.0054886853, + -0.00026905717, + 0.01063453, + 0.011954144, + 0.03635405, + 0.0006104828, + -0.015887108, + 0.0037874193, + 0.006649816, + 0.020906813, + 0.009787131, + -0.011281399, + -0.02804825, + -0.0077624307, + 0.000054630127, + 0.006513973, + -0.015279051, + 0.0025179384, + 0.008959139, + -0.016404605, + -0.0049841274, + 0.0050714547, + 0.020402256, + 0.030972099, + 0.022950921, + 0.0077818367, + 0.03244696, + -0.0034963281, + 0.00796296, + 0.026288766, + -0.02449047, + 0.013726565, + -0.008881515, + -0.012374609, + -0.024115285, + 0.0058250576, + 0.018086463, + 0.0038359344, + 0.032628085, + -0.0063781305, + 0.0040396983, + 0.010906215, + -0.0004334024, + -0.0010632913, + 0.016728038, + -0.005912385, + -0.0072578727, + 0.008913858, + -0.023287293, + -0.014554557, + 0.0029189973, + -0.0059447284, + -0.012853292, + -0.008467519, + 0.014774493, + 0.0008178853, + 0.017129097, + 0.0022624251, + -0.0077430247, + -0.017090285, + 0.018358149, + 0.0336372, + -0.0033895948, + -0.02240755, + 0.014308748, + -0.0011603216, + -0.014515745, + -0.018422836, + -0.018177025, + 0.018513398, + -0.017646592, + 0.0072449353, + 0.016326979, + -0.0062519913, + 0.024154097, + -0.0005373058, + 0.0018079996, + -0.022886233, + -0.001822554, + -0.0007689658, + 0.023222605, + 0.005980306, + -0.011139088, + 0.00031231655, + -0.027220257, + -0.013855939, + 0.016378729, + 0.011857113, + -0.016947974, + -0.008364019, + -0.006420177, + -0.0251244, + -0.023093231, + -0.009871225, + 0.004013824, + 0.011223181, + 0.013390193, + 0.008053522, + -0.019328453, + -0.018358149, + 0.023584852, + 0.004159369, + -0.021113811, + -0.029238489, + -0.011449586, + -0.0014821391, + 0.05852873, + 0.009916506, + -0.006306975, + 0.017077347, + -0.002411205, + -0.0194837, + -0.017737154, + 0.012820948, + -0.00930198, + 0.010097628, + 0.013196132, + -0.007859461, + -0.007587776, + -0.009890631, + -0.014748619, + -0.0019406077, + 0.0066821594, + -0.009877693, + 0.019328453, + -0.007594245, + -0.010472813, + 0.0090820445, + -0.0051523135, + 0.02606883, + -0.023390792, + -0.011113213, + 0.022394612, + -0.014567495, + 0.015123802, + -0.01236814, + -0.012161141, + 0.016262293, + -0.0058638696, + -0.0024500173, + -0.025706584, + -0.01697385, + -0.016107043, + 0.008027648, + 0.029238489, + -0.0019001784, + 0.027479006, + 0.0066950964, + 0.0009306831, + -0.025603084, + 0.000605227, + 0.0065754256, + -0.009974724, + 0.02137256, + 0.0066821594, + -0.013687753, + 0.00008136402, + -0.0019858885, + -0.003997652, + -0.0042984462, + 0.0040526357, + 0.00009975937, + -0.013273757, + -0.024645718, + 0.009366667, + -0.01741372, + -0.0038909183, + 0.0034639847, + 0.030816851, + -0.0052364063, + -0.03565543, + -0.024063535, + -0.0013940032, + -0.011798895, + -0.0080858655, + -0.007794774, + -0.0052816872, + -0.015343738, + -0.042072374, + 0.012064111, + 0.04719558, + 0.024645718, + 0.030532228, + -0.0120511735, + 0.0045442563, + 0.01953545, + 0.0043987106, + -0.010375783, + 0.0060223527, + -0.006119383, + -0.0105310315, + -0.0052267034, + 0.021036187, + -0.012070579, + -0.01434756, + 0.027789501, + 0.026198205, + -0.0054304674, + 0.02903149, + -0.027737753, + -0.007937086, + -0.009263167, + -0.0014675845, + 0.02542196, + -0.028074125, + -0.012665699, + 0.017012661, + -0.019781262, + 0.012588075, + -0.035396684, + -0.019781262, + 0.01018819, + -0.0041787755, + -0.009418416, + -0.03169659, + 0.011171431, + 0.0006618281, + -0.020790378, + -0.004023527, + -0.014852118, + 0.028876243, + 0.01627523, + -0.026159393, + 0.012199954, + -0.0047674263, + -0.032032963, + 0.009780663, + -0.03542256, + 0.026935635, + 0.0014683931, + -0.03679392, + 0.005372249, + 0.011928269, + -0.009237292, + 0.01890152, + 0.008629235, + 0.004744786, + 0.01800884, + -0.027789501, + -0.014037062, + -0.026935635, + -0.007212592, + 0.012555731, + 0.009334323, + -0.015097928, + 0.014127624, + -0.009935912, + 0.019600138, + -0.0029545752, + -0.015072053, + -0.011727739, + -0.02631464, + 0.011585428, + -0.0010333736, + 0.0063781305, + 0.028229373, + 0.01608117, + 0.0050358768, + -0.03596593, + 0.017750092, + -0.013073227, + -0.019224953, + -0.006164664, + -0.016145855, + 0.011449586, + 0.013894751, + 0.016042357, + 0.0036192334, + 0.0073225596, + 0.005543669, + -0.0065366137, + 0.0056665745, + 0.009017357, + -0.0019470764, + -0.027116759, + -0.005669809, + 0.011902394, + 0.012083517, + 0.015563673, + 0.008933264, + 0.01152721, + 0.029212615, + -0.005317265, + 0.00062705885, + -0.03482744, + -0.026780386, + 0.001640622, + -0.016999723, + -0.011734208, + 0.0043696016, + 0.0014303896, + 0.013713628, + 0.0067468463, + -0.003897387, + -0.015473112, + -0.00925023, + 0.029652486, + -0.014632182, + 0.044763353, + -0.025344336, + 0.014321685, + -0.009127324, + -0.038812153, + -0.023106169, + -0.0061873044, + -0.020130571, + 0.0059447284, + 0.008376957, + 0.0032197917, + -0.02433522, + 0.021980617, + -0.0027799206, + 0.018979143, + -0.0007612842, + -0.0071996544, + -0.018177025, + -0.03358545, + -0.024050599, + -0.022575736, + -0.02869512, + 0.016585726, + -0.014412247, + -0.03167072, + 0.020454004, + 0.0022769796, + -0.007102624, + -0.010479282, + -0.009269636, + 0.025163213, + 0.013933564, + 0.026237017, + 0.013881814, + -0.0050358768, + -0.011714802, + -0.022523986, + -0.025913581, + -0.017918278, + 0.021424308, + 0.022420488, + 0.0047415514, + 0.010472813, + 0.0135066295, + -0.0030499885, + 0.012866229, + -0.016003545, + -0.0012161141, + 0.013933564, + 0.0068180016, + -0.005026174, + 0.00945076, + -0.017504282, + 0.023339042, + -0.007950023, + -0.008635704, + 0.010291689, + -0.0005227512, + -0.021825368, + -0.0012581607, + -0.01844871, + 0.035629556, + 0.01687035, + -0.011928269, + 0.015744798, + -0.016702164, + -0.009554259, + 0.0026699528, + 0.0068891575, + 0.035344936, + 0.0009694953, + 0.0055080913, + 0.0076848064, + 0.0074389963, + -0.015563673, + -0.00885564, + 0.009431354, + 0.029445488, + -0.015550736, + -0.0043598986, + -0.0110355895, + 0.020764502, + 0.03032523, + -0.01454162, + 0.002259191, + 0.0120252995, + -0.01137843, + 0.015162615, + 0.020001197, + -0.0037033265, + -0.01741372, + 0.0044601634, + -0.03037698, + 0.00420465, + -0.026379328, + -0.011714802, + -0.00026663142, + -0.03423232, + 0.0016737741, + 0.010265815, + 0.024891527, + 0.009515447, + 0.0052331723, + 0.0021136452, + 0.028902117, + -0.014114686, + -0.0052752187, + 0.0033895948, + 0.01068628, + 0.016753914, + -0.016495166, + 0.00413026, + -0.0009694953, + -0.041037384, + 0.017517218, + 0.010311096, + -0.033119705, + -0.0031890653, + 0.022730986, + -0.0038941528, + 0.004773895, + -0.016016481, + -0.0038197627, + 0.002102325, + 0.0012056025, + -0.012866229, + 0.0041884785, + -0.0056924494, + -0.017995901, + 0.015175552, + 0.009683632, + -0.0060126497, + 0.00791768, + 0.0048903315, + -0.010252877, + 0.012284047, + -0.01513674, + 0.0017708045, + 0.0016066615, + 0.018021777, + -0.0014675845, + -0.015990607, + 0.011100276, + -0.004366367, + -0.008364019, + -0.0014643503, + 0.009192012, + 0.008124677, + 0.0036774515, + 0.0144898705, + -0.0039847144, + 0.019651888, + -0.03260221, + -0.0073743095, + -0.014231123, + -0.034542818, + -0.02641814, + -0.020337569, + -0.02547371, + 0.007633057, + -0.010666873, + -0.028125875, + 0.0021815666, + -0.005795948, + 0.008668047, + -0.018384025, + 0.0053690146, + -0.0022478707, + 0.008900921, + -0.0019729512, + -0.004476335, + 0.026094705, + 0.0038068255, + -0.0029092943, + -0.0078077116, + 0.0048968, + 0.006239054, + -0.017271409, + 0.0033863604, + -0.0015597634, + -0.008739203, + -0.018733334, + 0.018319337, + 0.012109392, + 0.011009715, + -0.008972077, + -0.020686878, + 0.00727081, + 0.004579834, + 0.022562798, + 0.02696151, + 0.032886833, + -0.012723918, + -0.027686004, + -0.02286036, + -0.020466942, + 0.014140561, + -0.021657182, + -0.007801243, + 0.030635728, + 0.009166137, + -0.008829765, + -0.031386096, + -0.002327112, + -0.004269337, + 0.0055274977, + 0.014231123, + -0.00022559565, + -0.011274931, + 0.004026761, + 0.016728038, + -0.007044406, + 0.0021055595, + -0.005391655, + -0.011785957, + 0.00027896237, + 0.008913858, + 0.001550869, + -0.0038003568, + -0.014722744, + -0.013338444, + -0.016508102, + -0.0012403717, + -0.007341966, + -0.02156662, + -0.021087937, + 0.024904465, + 0.00939901, + -0.015990607, + 0.0026521639, + -0.040778637, + -0.020285819, + -0.0004916206, + -0.0066110035, + 0.005158782, + -0.030040607, + -0.0050358768, + 0.0011554701, + -0.001466776, + -0.018293463, + -0.022562798, + 0.003690389, + 0.023623664, + 0.012698043, + 0.2370129, + 0.008454581, + 0.0027119992, + 0.04199475, + -0.008875046, + 0.014205248, + 0.027039135, + 0.0049291435, + 0.016443416, + 0.023015607, + -0.02750488, + 0.0011109979, + 0.009386073, + 0.010938559, + -0.011850644, + -0.014554557, + -0.01811234, + -0.015304926, + 0.01310557, + 0.0023109403, + 0.008021179, + 0.000092381015, + 0.0040041204, + -0.021256123, + 0.015304926, + 0.021993553, + -0.0022915343, + -0.001701266, + 0.019328453, + 0.020259945, + 0.005411061, + -0.020945625, + -0.008286395, + -0.00024257596, + -0.004456929, + -0.0085710175, + -0.0023869474, + -0.0026521639, + 0.0222523, + 0.024813903, + -0.0040688077, + -0.0144769335, + -0.020997375, + 0.014127624, + -0.006552785, + -0.0051070326, + -0.019858886, + -0.012782136, + 0.01687035, + 0.0072449353, + -0.017944153, + -0.0072772787, + 0.02324848, + 0.023274355, + -0.00004644319, + 0.0061711324, + 0.02859162, + -0.018138213, + 0.00640724, + 0.00865511, + -0.006119383, + 0.035267312, + -0.020945625, + 0.023636602, + 0.010996777, + -0.008344613, + -0.002513087, + -0.00048515192, + 0.024425782, + -0.012070579, + 0.006300506, + -0.0031421673, + -0.0031648078, + 0.015964733, + 0.01760778, + 0.007937086, + 0.026832135, + 0.010957965, + 0.0095736645, + 0.002344901, + -0.010977371, + -0.0075554326, + -0.004421351, + 0.028384622, + 0.00058056513, + -0.017180847, + -0.0062455223, + 0.008150552, + 0.029419612, + 0.009631883, + 0.00390709, + 0.0017643358, + 0.0052008284, + 0.017193785, + 0.015317864, + 0.022278177, + 0.008422238, + 0.00885564, + -0.018992081, + -0.0023060888, + -0.029109115, + -0.0115207415, + 0.01879802, + 0.002307706, + -0.02696151, + 0.011003246, + 0.004211119, + -0.021760682, + 0.029238489, + 0.0044860383, + 0.004026761, + -0.009192012, + 0.008784484, + 0.0013325507, + 0.0059447284, + -0.0029303175, + 0.005158782, + -0.031618968, + -0.017245533, + -0.0063231466, + -0.008525737, + -0.020738628, + -0.010841528, + -0.0013163789, + -0.008234645, + -0.025486648, + -0.01562836, + 0.013674815, + 0.0073290286, + -0.03780304, + 0.0065107387, + -0.012892104, + 0.024451656, + -0.0026861245, + -0.0017109691, + -0.0021314342, + 0.013687753, + -0.0080858655, + 0.016857412, + -0.012601012, + 0.008519268, + -0.008131146, + 0.016546914, + -0.0010738029, + 0.0052267034, + -0.011876519, + 0.0044439915, + -0.008480456, + -0.014451059, + -0.027530754, + -0.01795709, + -0.006219648, + 0.0018662177, + -0.021152625, + 0.026094705, + -0.012070579, + -0.00045765997, + 0.0020667473, + 0.028436372, + 0.01370069, + -0.009463697, + 0.0063393186, + 0.013817127, + -0.0021087937, + -0.007503683, + 0.0025858597, + -0.16487403, + 0.0057571363, + 0.044219982, + -0.03314558, + -0.022045303, + 0.00796296, + 0.0095801335, + 0.023558978, + -0.014735681, + 0.039640147, + 0.00035961886, + 0.011132619, + -0.04572072, + -0.0026020315, + -0.010847997, + 0.0036095304, + -0.005391655, + 0.019250829, + -0.011578959, + 0.006921501, + 0.011443117, + -0.018616896, + 0.007037937, + 0.014127624, + -0.0037712476, + -0.019431952, + -0.02305442, + 0.021644244, + 0.01038872, + -0.02300267, + -0.009489572, + -0.0003606296, + 0.00051547395, + 0.006400771, + 0.009813006, + 0.0034445787, + 0.003968543, + 0.0026295234, + -0.013868877, + 0.00059754547, + -0.0077688997, + 0.010802716, + 0.017827716, + 0.03348195, + -0.0062778657, + 0.020492818, + 0.011986487, + 0.0009039998, + -0.01221936, + -0.008933264, + 0.009360198, + -0.025137339, + -0.0054045925, + -0.002624672, + 0.005540435, + 0.02067394, + 0.017103223, + 0.01953545, + 0.0009573665, + -0.000321211, + -0.008247583, + -0.03834641, + -0.011766551, + -0.0025454303, + 0.012406952, + 0.009664226, + 0.015887108, + -0.0031551046, + -0.017387845, + 0.008985014, + -0.00221391, + -0.02088094, + -0.0061226175, + -0.019781262, + 0.004903269, + 0.011093807, + 0.0030790975, + -0.026094705, + -0.011934738, + -0.01009116, + -0.002120114, + 0.050171178, + -0.017646592, + 0.0125233885, + -0.013674815, + 0.01592592, + 0.00041803924, + 0.004560428, + -0.027427256, + 0.0015678493, + 0.029109115, + -0.010052348, + 0.00846105, + -0.02853987, + 0.010744498, + 0.0043501956, + 0.0054498734, + -0.00571509, + 0.0004378496, + 0.0018079996, + -0.013674815, + 0.010097628, + -0.018862708, + 0.021605432, + 0.032860957, + -0.00930198, + -0.016339917, + 0.018319337, + 0.03749254, + -0.005210532, + -0.022174677, + 0.010699217, + 0.009819475, + 0.020014133, + 0.016184669, + -0.005857401, + 0.014877993, + -0.0061452575, + 0.024050599, + 0.029471362, + 0.04230525, + -0.020518692, + -0.015473112, + 0.016314043, + 0.0071802484, + -0.016158793, + -0.08569723, + 0.003531906, + -0.0037033265, + 0.021346685, + 0.0077106813, + 0.028798617, + 0.021631308, + 0.035267312, + 0.00687622, + 0.01518849, + -0.012232297, + -0.011669521, + -0.01608117, + 0.009754788, + 0.0008522502, + -0.011391367, + 0.01083506, + -0.032576334, + -0.04574659, + 0.016145855, + 0.000981624, + -0.0030241136, + 0.012801542, + -0.0077300873, + 0.006365193, + -0.037673663, + -0.038605157, + 0.0110355895, + 0.0035157343, + 0.0034154695, + 0.02349429, + -0.027039135, + -0.016986785, + -0.013312569, + -0.021708932, + -0.0149814915, + -0.021281999, + -0.019263767, + 0.011941206, + -0.03961427, + -0.008991483, + 0.018306399, + 0.0168186, + -0.015563673, + 0.015162615, + -0.0058379946, + -0.016197605, + 0.012549263, + -0.009386073, + -0.022627486, + 0.012665699, + 0.0045054443, + -0.008680985, + -0.023416666, + 0.026599264, + -0.011734208, + 0.008564549, + 0.030144107, + -0.013687753, + 0.00895267, + -0.0022656594, + 0.028617496, + -0.0004867691, + 0.020945625, + 0.0050100023, + -0.026482826, + -0.025680708, + -0.0009444291, + 0.009800069, + -0.037259668, + -0.036198802, + -0.003531906, + -0.0029384035, + -0.013894751, + -0.028902117, + -0.008182895, + -0.013648941, + 0.016896224, + -0.0016333448, + -0.0054983883, + -0.017530156, + -0.022562798, + 0.0057991827, + 0.006064399, + -0.001644665, + 0.03555193, + -0.031748343, + -0.018772146, + 0.0024144393, + -0.0015686579, + -0.0060417587, + 0.019134391, + 0.013124976, + -0.016249355, + -0.025098527, + 0.018371087, + -0.0025001497, + 0.014670994, + 0.02734963, + -0.01890152, + -0.022433424, + 0.00079686206, + -0.05387127, + 0.019315515, + -0.005165251, + -0.013959438, + -0.013429006, + -0.0043437267, + 0.005805651, + -0.0063037407, + -0.0067597837, + 0.007193186, + -0.008351082, + 0.017866528, + -0.010343439, + 0.002391799, + -0.0044957413, + 0.0054789823, + 0.009036764, + 0.017504282, + -0.0047577233, + -0.00801471, + -0.015537799, + -0.0018338743, + 0.017672468, + 0.017737154, + -0.029367864, + 0.004773895, + -0.008842702, + 0.001822554, + -0.022394612, + -0.01370069, + 0.03819116, + -0.036923297, + 0.0043404927, + 0.04947256, + -0.010653936, + -0.039950643, + -0.029859483, + 0.030092357, + 0.03423232, + -0.040287014, + -0.00791768, + -0.025848895, + 0.011456054, + -0.024593968, + 0.007982367, + 0.031644844, + -0.015641298, + 0.006921501, + 0.010673342, + 0.0007115562, + 0.022523986, + 0.016883288, + 0.0011045292, + 0.0010754201, + -0.010265815, + -0.025797145, + 0.02354604, + -0.016055295, + 0.029290238, + -0.025745396, + 0.011798895, + 0.0055727786, + 0.013312569, + 0.008079397, + 0.020686878, + -0.011158494, + 0.024865653, + 0.0037680133, + -0.0049905963, + -0.014774493, + 0.005753902, + 0.010446938, + 0.026780386, + 0.016805662, + 0.020363443, + 0.002352987, + 0.023468416, + 0.0075101517, + -0.016404605, + 0.018138213, + 0.019845948, + -0.0027152337, + -0.023313167, + 0.014037062, + 0.035836555, + 0.0002749194, + -0.036172926, + 0.017750092, + 0.010304627, + 0.0036030617, + -0.017504282, + 0.0056762774, + 0.008215239, + 0.004615412, + 0.008351082, + 0.0041076196, + -0.00472538, + 0.01454162, + -0.0036483426, + 0.021100875, + -0.015343738, + -0.022769798, + 0.0066821594, + -0.02552546, + -0.012969729, + 0.005346374, + -0.0050035333, + -0.017970027, + -0.0076395255, + 0.003402532, + 0.0042919773, + 0.0011012949, + 0.004139963, + 0.007658932, + 0.004589537, + -0.006219648, + -0.028953867, + -0.023804788, + -0.022472236, + 0.015615423, + 0.0015557205, + 0.008972077, + -0.005905916, + 0.001896944, + 0.0063748965, + 0.01058278, + 0.018189963, + -0.011197306, + 0.030532228, + 0.02582302, + 0.010479282, + 0.0062455223, + -0.0009436205, + -0.0067015653, + 0.001402089, + -0.022718048, + 0.0034898594, + 0.011747145, + -0.01276273, + 0.06810239, + 0.0030338168, + -0.022601612, + 0.03487919, + -0.013726565, + 0.033430204, + 0.008441644, + 0.009528384, + -0.022032365, + -0.009780663, + -0.0017999136, + 0.019548388, + 0.011404305, + -0.028850367, + -0.02908324, + -0.019224953, + -0.024852715, + 0.0059382594, + -0.0004519999, + -0.015253177, + 0.018707458, + -0.01725847, + 0.007924148, + 0.015059115, + -0.022187615, + -0.024115285, + 0.0144898705, + -0.0020360209, + 0.0006181644, + 0.0032214087, + 0.021683056, + -0.0045539592, + -0.03293858, + -0.0051070326, + 0.014231123, + -0.015822422, + -0.011675989, + -0.019199079, + -0.008887983, + -0.0038100597, + 0.010828591, + 0.027479006, + -0.010155847, + -0.008499862, + 0.013196132, + -0.014049999, + -0.0034995626, + 0.008661579, + -0.0046024746 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 9, + "total_tokens": 9 + } +} +1799 1827 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1596 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein bedroom, The color of the lamp beside the desk is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ebedroom\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein sitting room, The color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein patio, The color of the lamp beside the desk is yellow.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003epatio\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein kitchen, The color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein office, The color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1000 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:02 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1129 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999735 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_cea6241cc66e4f6e94e0ae31ebdcc36e + +{ + "id": "chatcmpl-EREMzLEFYtHzIQGFbRCaaclRaEqVy", + "object": "chat.completion", + "created": 1790158801, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "In the bedroom, the lamp is blue. \nIn the sitting room, the lamp is purple. \nIn the patio, the lamp is yellow. \nIn the kitchen, the lamp is black. \nIn the office, the lamp is orange.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 268, + "completion_tokens": 50, + "total_tokens": 318, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_b95af6e96a" +} diff --git a/vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilters.httprr b/vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilters.httprr new file mode 100644 index 000000000..9c48b24f3 --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltAsRetrieverWithMetadataFilters.httprr @@ -0,0 +1,6332 @@ +httprr trace v1 +431 101196 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 235 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["In office, the color of the lamp beside the desk is orange.","in sitting room, the color of the lamp beside the desk is purple.","in patio, the color of the lamp beside the desk is yellow."]}HTTP/2.0 200 OK +Content-Length: 100239 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:04 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 152 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-66lnk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999955 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_6dcfca190ec646908a7169046e86ba11 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.018600795, + -0.0136345, + -0.00045825803, + -0.017818702, + 0.00089533435, + 0.0105452305, + -0.02540501, + -0.0028562713, + 0.011835685, + -0.018978808, + 0.019878216, + 0.0072408845, + -0.011359911, + 0.019187367, + -0.026851885, + -0.006765111, + 0.038192242, + -0.010219358, + 0.023019625, + -0.016502177, + -0.039730363, + 0.0068107327, + -0.018014226, + 0.017453725, + -0.013360768, + -0.011470708, + 0.006882425, + -0.022889277, + 0.018509552, + 0.003705169, + 0.017193027, + -0.018092435, + 0.018248854, + -0.029328514, + -0.034229636, + 0.018092435, + 0.007188745, + 0.00054624357, + 0.009326467, + -0.030188818, + 0.014781571, + 0.0057744584, + -0.0067716283, + -0.015811328, + -0.0063284417, + 0.019174332, + 0.023319427, + 0.01031712, + -0.013080518, + 0.01741462, + -0.0012757904, + 0.019721797, + -0.012239766, + -0.020960111, + 0.006941082, + -0.033212915, + -0.0015161212, + 0.016697701, + -0.024062417, + -0.02178131, + -0.0026216432, + -0.014403559, + 0.00541274, + -0.007293024, + 0.0038843988, + 0.001654617, + -0.0057809763, + 0.013595396, + 0.00086274714, + -0.0017857807, + 0.028520351, + 0.025053069, + 0.000023702125, + 0.015003164, + 0.009567613, + 0.013895199, + -0.012989273, + -0.0009124427, + 0.005862444, + -0.010134631, + 0.00019521793, + -0.019369854, + -0.026030686, + -0.0032636118, + 0.0186399, + 0.0078013847, + -0.0044774865, + 0.003372779, + -0.027190791, + -0.014364455, + -0.006145953, + 0.026982233, + 0.031987634, + -0.0009148867, + -0.0051259724, + 0.010356224, + 0.014103756, + 0.026108894, + 0.021624891, + -0.026278349, + 0.013302111, + 0.014833711, + -0.03986071, + -0.00078820385, + -0.028259654, + -0.025222523, + 0.007847007, + -0.0023169527, + 0.03508994, + -0.029641353, + -0.02606979, + 0.02045175, + 0.025418045, + -0.022680718, + -0.014468734, + -0.02052996, + 0.00076702214, + -0.021038322, + -0.029041747, + -0.0026493424, + 0.0058885138, + 0.04351048, + 0.014103756, + -0.010792893, + 0.030527724, + 0.013777885, + -0.004754478, + -0.022941416, + -0.009645822, + 0.0062795607, + 0.0072278497, + 0.015537595, + 0.014077687, + 0.019669658, + -0.004422088, + -0.003920245, + -0.0057744584, + 0.029511003, + -0.0034379535, + -0.023971172, + 0.02185952, + 0.025574464, + -0.013080518, + -0.006654314, + -0.008948456, + 0.035037797, + 0.01925254, + -0.008029495, + -0.004294998, + -0.0006468567, + 0.0067781457, + -0.032561168, + 0.018092435, + -0.00018696928, + 0.015524561, + -0.0029963965, + -0.0076645184, + 0.005960206, + -0.034333915, + -0.007618896, + -0.0130088255, + 0.005181371, + 0.029693492, + 0.007879594, + 0.021285985, + 0.018496517, + -0.0027780621, + 0.01274161, + -0.008192432, + 0.0044774865, + -0.0009531767, + 0.03146624, + -0.0136345, + 0.027008303, + -0.0075928266, + 0.014195001, + -0.0027682858, + -0.00464694, + -0.013504151, + 0.00638384, + -0.019226471, + -0.009756619, + 0.014364455, + -0.0036530294, + 0.005865703, + -0.009717515, + 0.008739897, + -0.011731406, + 0.015003164, + -0.009287363, + 0.018092435, + 0.021820415, + -0.0043699485, + -0.017362481, + -0.6924136, + -0.03360396, + 0.0027275519, + -0.0012432032, + 0.0038224831, + 0.020490855, + 0.006002569, + 0.013960373, + 0.0024114556, + -0.018626865, + 0.005605005, + 0.008915869, + 0.005807046, + -0.006361029, + 0.009157014, + -0.03219619, + -0.01371271, + 0.026486907, + -0.0028872292, + -0.0072017796, + 0.00065133744, + -0.0020171502, + -0.027998956, + -0.0044057947, + 0.03318684, + 0.0134259425, + 0.018574726, + -0.0046795276, + -0.00079838734, + 0.021038322, + -0.0018151092, + -0.007032326, + -0.009157014, + -0.012239766, + 0.041477036, + 0.009456816, + -0.016997503, + 0.008518304, + -0.0027976143, + 0.015420281, + -0.011307771, + 0.0010835257, + -0.001082711, + -0.025144313, + -0.011379464, + -0.0017368998, + 0.010323637, + -0.011372946, + 0.03993892, + 0.005226993, + 0.018913632, + -0.015224758, + 0.0032782762, + -0.0015234534, + 0.023840824, + -0.0005853483, + 0.022276636, + 0.0010118338, + 0.003858329, + -0.0057288366, + -0.012963204, + 0.0020774365, + -0.020881902, + -0.008238054, + -0.006598916, + 0.008114222, + -0.03725373, + -0.020673344, + 0.000015809903, + 0.0019829334, + 0.005559383, + 0.014416594, + -0.0136084305, + 0.030944841, + 0.008127257, + -0.004461193, + 0.018248854, + -0.019539308, + 0.02285017, + 0.0097305495, + 0.012552604, + -0.0055267955, + -0.023371568, + -0.003033872, + 0.01823582, + -0.015172618, + -0.034438193, + -0.027477559, + 0.022094147, + -0.010199806, + 0.042128783, + 0.004451417, + -0.0052791326, + -0.0068042153, + -0.005305202, + 0.024075452, + -0.013041412, + -0.000100664016, + 0.010864586, + -0.005605005, + 0.010147666, + -0.031049121, + -0.011359911, + 0.0008806701, + 0.031831216, + 0.011920412, + -0.028390002, + 0.03581989, + 0.011118766, + -0.022120217, + 0.021989869, + -0.019109156, + -0.01813154, + 0.0021556458, + 0.015563665, + -0.02295445, + 0.04601318, + 0.017062677, + 0.006647797, + -0.0058233393, + 0.0006892201, + 0.007827454, + -0.004154873, + -0.021768276, + 0.007860042, + -0.014051617, + -0.005402964, + -0.022915347, + -0.023971172, + -0.0030534242, + 0.00957413, + -0.0051976647, + 0.006572846, + 0.0052921674, + -0.001591072, + -0.0014762019, + 0.0065044127, + -0.021794345, + 0.030240957, + -0.024127591, + -0.026956163, + -0.0105452305, + -0.022967486, + -0.0077948673, + -0.0074168555, + -0.016671631, + -0.03235261, + -0.004933708, + -0.026148, + 0.018418306, + -0.03219619, + -0.018405272, + -0.02982384, + 0.011913895, + -0.0018982067, + -0.0019796747, + -0.026148, + 0.0051259724, + -0.011333842, + 0.031023052, + 0.007755763, + 0.004650199, + -0.0073321285, + -0.00029858056, + -0.006501154, + -0.030162748, + -0.0018574726, + 0.029093886, + -0.0056799557, + -0.029719561, + -0.00784049, + -0.0038127068, + 0.0032685, + -0.008544374, + -0.026747605, + -0.017010538, + -0.016580386, + -0.022745892, + 0.016306654, + -0.017127853, + 0.016045956, + 0.015902571, + 0.0013393355, + -0.024427393, + 0.0375405, + -0.0023283581, + 0.022824101, + 0.016319688, + 0.005842892, + 0.009860898, + -0.017140888, + -0.00076335605, + 0.0011038927, + -0.015446351, + 0.015107444, + 0.0072278497, + -0.0043471376, + 0.008544374, + 0.007573274, + -0.0025972028, + 0.0106951315, + 0.00015641874, + 0.02185952, + -0.020399611, + 0.024883615, + -0.027581839, + 0.023123905, + -0.0052009234, + 0.007827454, + 0.04126848, + 0.002620014, + -0.020360507, + -0.009737067, + -0.0102128405, + 0.009176566, + 0.0062111276, + -0.011001452, + 0.023840824, + 0.0051846295, + -0.008016461, + 0.00000814681, + 0.0024782594, + 0.041503105, + 0.0031658502, + -0.0037605674, + -0.0069671515, + 0.03587203, + 0.01605899, + -0.0100629395, + -0.007833972, + -0.022302706, + -0.0054485863, + -0.02009981, + 0.0066510555, + -0.013751814, + -0.008068601, + 0.003250577, + -0.03759264, + 0.01871811, + 0.020399611, + 0.008498752, + 0.033890728, + 0.034281775, + -0.014051617, + 0.015511526, + -0.009515474, + 0.026956163, + 0.014129827, + -0.01823582, + 0.0037475324, + -0.019669658, + -0.001427321, + -0.0059667234, + 0.013399872, + 0.028129304, + 0.0107277185, + 0.038218312, + 0.009241741, + 0.024114557, + 0.022055043, + -0.024753267, + -0.007527652, + 0.013777885, + -0.012363599, + -0.0013515557, + -0.0023022883, + -0.005605005, + 0.006253491, + -0.00109819, + -0.010382294, + -0.003411884, + 0.010356224, + 0.021768276, + -0.014768536, + 0.01690626, + -0.014481769, + -0.019513238, + 0.000036940688, + 0.019656623, + 0.012148523, + 0.00018014632, + -0.03592417, + 0.014312315, + -0.00076620746, + 0.0008586737, + -0.022302706, + -0.027607908, + 0.021259915, + -0.0045948005, + 0.012911064, + 0.009528508, + 0.01626755, + 0.017088749, + 0.007873077, + 0.011425085, + -0.03123161, + -0.0016896483, + -0.004011489, + 0.008739897, + 0.00906577, + -0.004259152, + -0.013895199, + -0.02867677, + 0.0011087807, + 0.008016461, + 0.017844772, + -0.01869204, + 0.005217217, + -0.01427321, + -0.020542994, + -0.004845722, + 0.002818796, + 0.0035976311, + -0.00531172, + -0.007983874, + -0.00084075076, + -0.021390263, + -0.0037116865, + 0.024075452, + 0.0106625445, + 0.025027, + -0.018392237, + -0.01491192, + -0.0040277825, + 0.08154631, + 0.013621465, + -0.0043503963, + 0.007860042, + -0.0023837565, + -0.012826337, + -0.019747866, + 0.012982756, + -0.011992103, + -0.0058722203, + 0.006934564, + -0.012585191, + 0.011933447, + 0.006276302, + 0.0001156847, + -0.009847864, + 0.017688353, + 0.0054811733, + 0.03725373, + -0.014872815, + 0.00043626165, + 0.0076449662, + -0.018535621, + 0.0063805813, + -0.0029295927, + -0.004500298, + 0.023358533, + 0.01728427, + 0.015915608, + -0.011933447, + 0.008616066, + 0.01989125, + 0.00085215626, + -0.013308628, + -0.013491116, + -0.016306654, + -0.006347994, + 0.0057614236, + 0.006784663, + -0.02127295, + 0.029980259, + 0.013882164, + 0.013569326, + -0.017427655, + -0.0050086584, + 0.015107444, + -0.007514617, + 0.014586048, + -0.0077818325, + 0.0036367357, + 0.016280584, + -0.00038717713, + -0.00093525375, + -0.0071235704, + 0.009658857, + 0.020125879, + -0.003457506, + -0.006005828, + -0.00136622, + -0.010975382, + 0.003467282, + -0.011959516, + -0.004109251, + -0.016280584, + -0.019826075, + -0.0043210676, + 0.007058396, + -0.00057801616, + -0.003398849, + 0.00372798, + 0.0022159321, + -0.019226471, + -0.025040034, + 0.009632788, + 0.030788423, + 0.017375516, + 0.010955829, + -0.010095526, + -0.00012668289, + 0.041555244, + -0.0074364077, + 0.0028595303, + -0.019826075, + -0.002574392, + -0.013249971, + 0.0050575393, + 0.025105208, + -0.020386577, + -0.0040668873, + -0.005960206, + 0.023958137, + -0.0011804727, + 0.003975643, + -0.01218111, + -0.010134631, + -0.009808758, + 0.019382888, + 0.004226565, + -0.01940896, + -0.004435123, + 0.0015772224, + -0.022563403, + -0.018444376, + -0.008368403, + 0.009678409, + 0.025235558, + 0.024531674, + 0.010949312, + -0.020347472, + 0.0060449326, + 0.026799744, + -0.009411194, + 0.0034607647, + -0.009046217, + 0.0022680718, + 0.012096383, + -0.008674723, + 0.022837136, + 0.008225019, + -0.033291124, + 0.0042037535, + -0.032587238, + 0.023788683, + -0.0066608316, + -0.0040766634, + 0.0010232393, + 0.01618934, + -0.012878477, + -0.0024554485, + 0.0013735521, + -0.00219638, + 0.017479794, + -0.01432535, + -0.021559717, + -0.043745108, + -0.026460838, + 0.012858924, + -0.0029198166, + -0.018705076, + -0.0062143863, + -0.009639305, + 0.030423446, + 0.020008564, + -0.0042428584, + -0.027894676, + -0.020217123, + 0.004506815, + 0.010121596, + -0.0017222356, + 0.011229563, + 0.002382127, + 0.006064485, + -0.028937468, + 0.022015939, + 0.008114222, + -0.00011497185, + -0.025131278, + -0.024270976, + 0.011372946, + 0.010708166, + 0.0297717, + -0.0037931546, + 0.0006941082, + 0.005666921, + -0.01149026, + -0.0010411623, + -0.016137201, + -0.015850432, + -0.03211798, + 0.010577817, + 0.012956686, + 0.0019845627, + 0.020790659, + -0.0012749757, + 0.012598227, + 0.007221332, + -0.0067716283, + -0.009157014, + -0.02298052, + -0.026930094, + -0.0018623606, + 0.0008945197, + -0.023019625, + -0.003750791, + 0.008746414, + -0.010089009, + 0.028155373, + 0.011431603, + -0.005474656, + -0.007586309, + 0.024192765, + 0.0020872126, + 0.033995006, + -0.007938251, + -0.0046208706, + -0.014729432, + -0.023775648, + -0.005865703, + 0.0109949345, + 0.008355368, + 0.020230157, + 0.00151938, + 0.0005727207, + -0.028807119, + 0.018392237, + 0.016319688, + 0.029719561, + 0.0062600086, + -0.004510074, + -0.018353133, + -0.017232131, + -0.031309817, + -0.029849911, + -0.02745149, + 0.007853525, + 0.005415999, + -0.028520351, + 0.025900338, + -0.00036232936, + -0.024557743, + 0.015615805, + 0.0037801196, + 0.0205821, + -0.0059308773, + 0.013113105, + 0.005155301, + -0.006172023, + -0.013452012, + -0.004904379, + -0.014625153, + -0.011750958, + 0.029667422, + 0.006686901, + -0.0023886445, + 0.015081374, + 0.021572752, + 0.010251945, + 0.035585266, + -0.0109819, + -0.014051617, + 0.014038582, + 0.010395329, + -0.020230157, + 0.011718371, + -0.02497486, + 0.01637183, + -0.014559978, + -0.019448064, + -0.0015503379, + -0.0074885474, + -0.014520873, + -0.0053019435, + -0.039365385, + 0.010897173, + 0.009782689, + -0.0024635952, + 0.00090511056, + -0.009085322, + -0.014794606, + -0.017662283, + -0.0060449326, + 0.014116792, + 0.00076620746, + 0.014794606, + -0.0042656693, + 0.0029051523, + -0.025313767, + -0.007077948, + 0.0034607647, + 0.026799744, + -0.0014004366, + -0.003682358, + -0.0152899325, + 0.019356819, + 0.03868757, + -0.010362742, + -0.0046436815, + 0.00896149, + -0.009189601, + -0.00016344537, + 0.024270976, + 0.004787065, + -0.015928643, + 0.0077036233, + -0.022602508, + 0.009521991, + -0.024023311, + -0.008994077, + -0.008446612, + -0.008185915, + -0.00060571526, + -0.00681725, + 0.015120478, + -0.0016815015, + 0.0038550703, + -0.019539308, + 0.035011727, + 0.007573274, + -0.010356224, + 0.020907972, + -0.0042298236, + 0.016658597, + 0.0028383485, + 0.015524561, + 0.0031691089, + -0.01693233, + 0.0361588, + -0.009873933, + -0.03490745, + -0.009548061, + 0.006217645, + -0.005086868, + -0.0055365716, + -0.0007658001, + 0.007573274, + -0.0053866706, + 0.02242002, + -0.017675318, + -0.0123766335, + 0.00151938, + -0.024635952, + -0.0028904881, + 0.007892629, + -0.021716136, + -0.010721201, + 0.00962627, + -0.0033157514, + 0.006100331, + -0.045100737, + -0.012304941, + -0.021325089, + 0.017988155, + 0.00017016649, + -0.013517186, + -0.018483482, + -0.00018157202, + -0.0029491452, + 0.0027405866, + -0.007905664, + 0.013569326, + -0.0034607647, + -0.0051227137, + -0.010519161, + 0.02548322, + -0.017179992, + 0.0041320617, + -0.01991732, + -0.0077622803, + -0.015211723, + 0.010532196, + -0.006654314, + -0.015759189, + 0.006647797, + -0.042650178, + -0.020086775, + -0.01059737, + -0.015446351, + -0.0025597275, + 0.006641279, + 0.011907377, + 0.030449515, + -0.006706454, + 0.00067129714, + 0.022068078, + 0.006442497, + 0.0087138275, + -0.03595024, + -0.011757475, + -0.0012888253, + -0.013347733, + 0.017127853, + 0.01064951, + 0.005187888, + -0.011066626, + 0.0016179564, + -0.008433578, + 0.0066738664, + -0.017584074, + -0.014442664, + -0.0007706882, + 0.014221071, + 0.02382779, + 0.031205539, + 0.011503295, + -0.011666231, + -0.013947338, + -0.0071822274, + 0.020151949, + 0.027738256, + -0.008277158, + 0.0058494094, + 0.0004831058, + -0.0072017796, + 0.013191314, + -0.009391642, + 0.010688614, + 0.0033434506, + 0.011092696, + 0.0047609955, + -0.011301254, + -0.00035947797, + 0.0072604367, + -0.0040734047, + -0.0105713, + -0.0010753789, + 0.0005083609, + -0.033160772, + -0.001958493, + 0.011985586, + -0.00970448, + -0.0008317893, + -0.024088487, + 0.00018564542, + -0.040564593, + 0.0011193716, + -0.024701126, + -0.0065044127, + -0.02862463, + 0.02124688, + 0.015420281, + -0.028337862, + -0.003529198, + -0.029093886, + -0.0015039011, + 0.0038615877, + -0.011548917, + -0.011835685, + -0.022380915, + -0.020542994, + -0.00219638, + 0.006797698, + -0.020973146, + -0.011379464, + -0.0025906854, + 0.01059737, + 0.027477559, + 0.23754793, + 0.009437264, + -0.017584074, + 0.033291124, + -0.008211984, + 0.0372798, + 0.028233584, + -0.008870246, + 0.024127591, + 0.029458864, + -0.012089865, + 0.0018916891, + 0.0061524706, + 0.0009963549, + 0.002106765, + -0.0028350898, + -0.029276375, + 0.0025515808, + -0.008492234, + -0.003741015, + 0.011412051, + -0.007221332, + 0.01866597, + -0.0020513667, + 0.022680718, + 0.010447469, + -0.014846746, + 0.0021214292, + 0.030058468, + 0.016958399, + -0.006481602, + -0.005914584, + 0.0045556957, + -0.0065044127, + -0.0015299708, + -0.0037344976, + -0.013569326, + 0.00592436, + 0.010154183, + 0.025444116, + 0.011079661, + 0.009600201, + -0.02862463, + -0.012930616, + 0.00012709023, + 0.027894676, + -0.010069457, + -0.011496778, + 0.02438829, + 0.012122452, + -0.022289671, + -0.006031898, + 0.03248296, + 0.019865181, + -0.0037475324, + 0.029302444, + 0.020425681, + -0.009541543, + 0.022237532, + -0.012624296, + -0.009821794, + 0.017610144, + -0.015980782, + -0.0021931212, + 0.009450299, + -0.0036562881, + -0.010375776, + 0.015928643, + 0.010297568, + -0.013790919, + 0.018379202, + 0.014168931, + 0.0155767, + 0.0064001335, + -0.011666231, + -0.010629958, + 0.023593161, + 0.0084140245, + 0.021429367, + -0.007847007, + -0.0136345, + -0.006419686, + -0.0031658502, + 0.027295072, + -0.008114222, + -0.021742206, + -0.0024929238, + 0.0122267315, + 0.036810543, + 0.000016815524, + -0.0016586904, + -0.012669918, + 0.011816133, + 0.0055887112, + 0.0040049716, + 0.025183417, + -0.017936016, + 0.018652935, + -0.030632004, + 0.0059406534, + -0.035011727, + -0.021742206, + 0.018952738, + -0.015329037, + -0.0074755126, + 0.00995866, + 0.0012464619, + 0.015876502, + 0.040147476, + -0.0043112915, + 0.008329298, + -0.0136345, + 0.007462478, + -0.0044579343, + 0.018300993, + -0.013386837, + 0.013452012, + -0.014012513, + -0.017271236, + -0.008211984, + -0.0019226471, + -0.017753527, + -0.0077622803, + 0.007338646, + -0.0006884054, + -0.007221332, + -0.0125135, + 0.018092435, + 0.003506387, + -0.035376705, + 0.03597631, + -0.0046045766, + 0.024961825, + 0.0012089865, + -0.008909351, + 0.00043666898, + -0.014077687, + -0.003972384, + 0.009508956, + -0.012168075, + 0.004070146, + -0.013302111, + 0.008694275, + -0.008915869, + 0.00008885114, + 0.0057223192, + 0.012168075, + -0.017310342, + -0.015537595, + -0.024192765, + -0.011451156, + -0.013093553, + -0.005298685, + -0.008609548, + 0.01879632, + -0.012858924, + -0.021820415, + -0.0010338301, + 0.0043699485, + 0.024427393, + -0.014364455, + 0.005520278, + -0.0022745891, + -0.0091309445, + 0.0006403392, + 0.0061133658, + -0.1682023, + 0.011803098, + 0.01754497, + -0.016736805, + -0.012448325, + 0.00026782637, + 0.013093553, + 0.01994339, + -0.008550892, + 0.037696917, + 0.001764599, + 0.013347733, + -0.059126284, + -0.009391642, + 0.0007886112, + 0.01496406, + -0.01064951, + -0.0057288366, + 0.0225243, + 0.005767941, + -0.007090983, + -0.024010276, + 0.012285389, + -0.0013694786, + -0.0004884012, + 0.0016831309, + -0.018848458, + 0.034438193, + 0.0012440179, + -0.011672749, + -0.0019796747, + 0.005155301, + -0.00071203115, + 0.026526012, + 0.022889277, + -0.0048098764, + 0.0012977867, + 0.0054225163, + 0.0008049048, + -0.009026665, + 0.00032322467, + 0.016137201, + 0.0029198166, + 0.013210867, + -0.020647274, + 0.020725483, + 0.034125354, + 0.009750102, + -0.01085155, + -0.0047609955, + 0.0217031, + -0.037801195, + -0.012298424, + -0.0044774865, + 0.01243529, + 0.01218111, + 0.018444376, + 0.014586048, + -0.0073581985, + 0.01677591, + 0.0048587574, + -0.042415548, + -0.0068954597, + 0.0058233393, + -0.0027047407, + -0.0077622803, + 0.014455699, + 0.007019291, + -0.027216861, + 0.010766824, + -0.015342072, + -0.011933447, + 0.015785258, + -0.016450038, + 0.0068693897, + 0.0042070122, + -0.008159844, + 0.009952143, + -0.0072278497, + -0.01608506, + 0.0058722203, + 0.03008454, + 0.00045703602, + -0.0057646823, + -0.018757215, + 0.02492272, + -0.0065467763, + 0.023149975, + -0.017988155, + -0.029015677, + 0.020125879, + -0.040121406, + 0.004676269, + -0.03863543, + 0.0010598999, + 0.01368664, + 0.00063463644, + -0.009306915, + 0.000065734566, + -0.0002128354, + 0.005002141, + 0.0013637759, + -0.012826337, + 0.020386577, + 0.029432794, + 0.01744069, + -0.005911325, + 0.006856355, + 0.024127591, + 0.0015975893, + -0.021312054, + 0.023527985, + 0.005852668, + 0.018535621, + 0.0040636286, + -0.005275874, + 0.008355368, + -0.023228183, + 0.0047479607, + 0.018287959, + 0.03735801, + -0.00015203984, + -0.0073321285, + -0.00034847978, + -0.009554578, + -0.023567092, + -0.09750102, + -0.023567092, + 0.012546087, + 0.018300993, + 0.0045817657, + 0.013882164, + 0.003920245, + 0.026134966, + -0.0069671515, + 0.031961564, + -0.0027487336, + -0.01688019, + -0.019852147, + 0.0037670848, + 0.007944768, + -0.014729432, + 0.0052595804, + -0.02316301, + -0.031726934, + 0.0065337415, + -0.010558265, + -0.0023560573, + 0.00022953637, + -0.005969982, + -0.024010276, + -0.018157609, + -0.034307845, + 0.016032921, + 0.004943484, + -0.012194145, + 0.02433615, + -0.016423969, + 0.011711854, + -0.0012994162, + -0.0061655054, + 0.008472682, + -0.013843059, + 0.0024196024, + 0.009619753, + -0.034490332, + -0.001899836, + -0.0013580732, + 0.010453986, + -0.015250827, + -0.002660748, + -0.0034477299, + -0.01568098, + 0.0002340171, + -0.0029051523, + -0.026656361, + -0.0019112416, + 0.03318684, + -0.021989869, + -0.005047763, + 0.036419496, + -0.018965773, + 0.016228445, + 0.022771962, + -0.018092435, + 0.010036869, + 0.014924956, + 0.009900003, + -0.0039593494, + 0.02617407, + -0.005086868, + -0.018809354, + -0.03508994, + -0.00957413, + 0.0136345, + -0.036862683, + -0.01488585, + 0.007293024, + -0.012630814, + 0.01504227, + -0.014416594, + 0.0003702725, + -0.008114222, + -0.014924956, + 0.0027161464, + -0.0035585265, + -0.02609586, + -0.01685412, + -0.00034461005, + -0.008818107, + 0.0022729598, + 0.025352871, + -0.01570705, + -0.0107277185, + 0.038322594, + -0.010401847, + 0.009430747, + 0.03008454, + 0.0066510555, + -0.008479199, + -0.013986442, + 0.021911658, + 0.010173736, + 0.013341215, + 0.015016199, + -0.019734832, + -0.0205821, + -0.0049467427, + -0.044162225, + 0.018926669, + -0.0005022508, + -0.01978697, + -0.006266526, + 0.012611262, + -0.0088637285, + 0.007162675, + 0.003943056, + 0.000608974, + -0.014690327, + -0.007104018, + -0.009482887, + -0.002696594, + -0.016658597, + 0.002773174, + 0.011021004, + -0.007873077, + 0.029093886, + -0.003998454, + -0.00045214794, + 0.0032668707, + 0.0029882498, + -0.0006277117, + -0.024909684, + 0.0070649134, + -0.019695727, + -0.016254514, + -0.027946815, + -0.0073907855, + 0.0050445045, + -0.023189079, + 0.008009943, + 0.04353655, + -0.015172618, + -0.02492272, + -0.0026281609, + 0.025470186, + 0.0072734714, + -0.013960373, + -0.030684143, + -0.035793822, + 0.024909684, + -0.022250567, + -0.019291645, + 0.0148076415, + -0.009222188, + -0.010740754, + 0.0042070122, + 0.004285222, + 0.010486573, + 0.01866597, + 0.00045622134, + -0.005145525, + -0.0019193883, + -0.011307771, + 0.03738408, + 0.007573274, + 0.010603887, + -0.020412646, + 0.0134259425, + -0.008883282, + 0.0038420353, + 0.021416333, + 0.009521991, + 0.007697106, + -0.006960634, + -0.01248743, + 0.00063382176, + -0.002691706, + -0.015329037, + -0.0025369164, + 0.037905477, + 0.017036607, + 0.020907972, + 0.005249804, + -0.007130088, + 0.0020057445, + -0.009300398, + 0.013282558, + 0.016541282, + -0.0065663285, + -0.0039951955, + 0.014898885, + 0.02316301, + 0.044162225, + -0.042780526, + -0.0064881193, + 0.0028513833, + -0.00039512027, + -0.018379202, + 0.0005385041, + -0.003143039, + -0.0026770416, + 0.000023651206, + 0.0002839163, + -0.011229563, + 0.005650627, + 0.007032326, + 0.03232654, + 0.017036607, + -0.010949312, + -0.004705597, + -0.029015677, + -0.014651222, + 0.013452012, + -0.010480056, + -0.0121029, + -0.009919555, + 0.009554578, + 0.0047121146, + -0.014155896, + 0.018014226, + 0.017610144, + -0.0051357485, + -0.009554578, + -0.022015939, + -0.020217123, + -0.01813154, + 0.0057646823, + 0.0026037204, + 0.007208297, + -0.0050770915, + -0.017531935, + 0.02755577, + 0.014403559, + 0.031961564, + -0.033004355, + 0.009802241, + 0.013882164, + 0.0043862425, + 0.0011112249, + -0.007586309, + -0.01797512, + -0.017818702, + -0.013673605, + -0.019904286, + 0.024153661, + 0.0042884806, + 0.045387506, + -0.012878477, + -0.039417524, + 0.031779073, + -0.011809615, + 0.007990391, + 0.003552009, + 0.0067911805, + -0.01555063, + -0.0071822274, + 0.0036008898, + 0.006569587, + 0.019682692, + -0.004317809, + -0.026552081, + -0.007019291, + -0.020686379, + 0.008114222, + -0.026877955, + -0.01177051, + 0.03347361, + 0.002183345, + 0.009900003, + 0.0056604035, + -0.025887303, + -0.012272354, + 0.011966034, + 0.009020148, + -0.0086812405, + -0.008368403, + 0.018261889, + -0.015133513, + -0.026526012, + -0.0036986514, + 0.021390263, + -0.024909684, + -0.014221071, + -0.024766302, + 0.008029495, + 0.0121029, + -0.0019112416, + 0.027086513, + -0.017805668, + -0.028337862, + -0.012637331, + -0.007058396, + -0.014768536, + 0.015237792, + -0.011034039 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.014309701, + -0.0125518, + -0.0020060176, + -0.017319538, + -0.0016354639, + 0.019719623, + -0.018097945, + -0.031162195, + 0.0066683465, + -0.007608921, + 0.00588021, + 0.008140831, + -0.004706114, + 0.008413274, + -0.02128941, + -0.012765862, + 0.028152358, + -0.0009243574, + 0.02838588, + -0.026478784, + -0.015658937, + 0.019693676, + -0.0028963198, + 0.007972177, + -0.025998767, + -0.0053061354, + 0.0092306, + -0.02182132, + 0.0010500376, + 0.018110918, + -0.0002689961, + -0.012311791, + 0.030591363, + -0.038245693, + -0.03258927, + 0.007141877, + 0.0117344735, + -0.005727772, + 0.022301337, + -0.016216796, + 0.00146762, + 0.015594071, + -0.0042293402, + -0.016333558, + -0.01834444, + 0.0019346637, + 0.01717683, + 0.0044952957, + -0.011351757, + 0.022768382, + 0.0112609435, + 0.019719623, + -0.018227678, + -0.020446137, + -0.0021795374, + -0.01913582, + 0.005633715, + 0.017241698, + -0.025064679, + 0.0032303857, + -0.013829684, + -0.00025318473, + -0.006078055, + 0.0022476478, + -0.00416123, + -0.005085587, + -0.016074087, + 0.0019557455, + 0.017682794, + 0.0015981653, + 0.033808775, + 0.04587407, + 0.004968826, + 0.009503042, + 0.023339212, + 0.009055459, + 0.0055591175, + -0.0017497923, + -0.005588308, + -0.00847814, + -0.0017643874, + -0.028697241, + -0.0226127, + -0.012915056, + 0.020238562, + 0.010735519, + -0.025752272, + 0.000900843, + -0.022755409, + -0.017449273, + 0.006230493, + 0.040632803, + 0.014309701, + -0.0075375666, + 0.010119281, + 0.023585709, + 0.009490069, + 0.023300292, + 0.024571689, + -0.022080788, + 0.00010571324, + 0.014711877, + -0.03261522, + -0.0006535369, + -0.041540943, + -0.03271901, + -0.00315741, + -0.011786367, + 0.030772991, + -0.02140617, + -0.026167423, + 0.019836385, + 0.03129193, + -0.027918836, + 0.002667663, + -0.026673386, + 0.009048972, + -0.018603908, + -0.025544697, + 0.0017481706, + -0.0003504855, + 0.038219746, + 0.01344048, + -0.0096522365, + 0.03271901, + -0.007232691, + -0.016385451, + -0.018590935, + -0.014011311, + 0.0053937063, + 0.00709647, + 0.015321629, + 0.0074013458, + 0.0086857155, + -0.01551623, + -0.010696598, + -0.018577961, + 0.012817755, + -0.0011781502, + -0.016489238, + 0.0017530356, + 0.020095853, + -0.021795373, + -0.0157757, + -0.004738548, + 0.03201844, + 0.02480521, + -0.0017497923, + -0.01211719, + 0.000021689964, + 0.005718042, + -0.024506822, + 0.016281663, + -0.007874876, + 0.003467151, + 0.014906479, + -0.02672528, + 0.019356368, + -0.01868175, + 0.017695768, + -0.019927198, + 0.012979924, + 0.023014877, + -0.0081927255, + 0.027737208, + 0.026621493, + 0.011961509, + 0.014659983, + -0.025038732, + 0.01506216, + -0.0067980806, + 0.028567508, + -0.02389707, + 0.01642437, + -0.014491329, + 0.014128072, + 0.014102126, + -0.008082451, + -0.013829684, + -0.0066488865, + -0.021574825, + 0.012772349, + 0.018564988, + 0.012558287, + 0.012623154, + 0.00672024, + 0.019992067, + -0.01600922, + 0.010009007, + -0.013258852, + 0.025168467, + 0.014244833, + -0.015308655, + -0.040373337, + -0.68707323, + -0.042942077, + 0.028982658, + 0.0096327765, + 0.0022200793, + 0.030980567, + 0.01567191, + 0.017773608, + -0.0054683033, + -0.016489238, + 0.009165733, + 0.01608706, + 0.00336985, + 0.0067591607, + 0.009263034, + -0.018552015, + -0.013349666, + -0.008121371, + 0.0072132307, + -0.007226204, + -0.0015551908, + 0.012675048, + -0.008568955, + 0.000035854322, + 0.019096898, + 0.018980138, + 0.019083925, + 0.014179966, + -0.012493419, + 0.0044466453, + -0.019304473, + 0.020433163, + -0.0033568768, + -0.005662905, + 0.033393625, + 0.005118021, + -0.018980138, + 0.019615836, + 0.02763342, + 0.016541133, + -0.008199212, + 0.0019476372, + 0.0027357736, + -0.01834444, + -0.006104002, + 0.009451149, + 0.0051147775, + -0.0124544995, + 0.032978475, + 0.0032044388, + 0.018292546, + -0.03461313, + 0.0038855444, + -0.0025541454, + 0.028230198, + 0.0042877207, + 0.027425844, + 0.005319109, + -0.004002305, + 0.015282708, + -0.0013759951, + -0.0025249552, + 0.004433672, + -0.022794329, + -0.007336478, + -0.0003298091, + -0.03181087, + -0.03344552, + -0.026024714, + -0.019395288, + 0.0041158227, + 0.02144509, + -0.01672276, + 0.006791594, + 0.0072975582, + -0.0017497923, + 0.024558716, + -0.00751162, + 0.004073659, + 0.00917222, + 0.0060715685, + -0.013265339, + -0.03951709, + -0.0024811698, + 0.03378283, + -0.0030276757, + -0.03733755, + -0.016748706, + 0.019654756, + 0.0019330421, + 0.02314461, + -0.009918192, + -0.024480876, + -0.0037266198, + -0.0073753987, + 0.040373337, + -0.011565818, + -0.0052542416, + -0.0061007584, + -0.009016538, + 0.0043947515, + -0.015464337, + -0.009490069, + -0.0015316764, + 0.044109683, + -0.00503045, + -0.01875959, + 0.01423186, + 0.014102126, + -0.023287319, + 0.035417482, + -0.021756453, + -0.0065418556, + 0.0067397, + 0.016138956, + -0.029008605, + 0.05827668, + 0.01004144, + -0.0030049724, + -0.011202563, + -0.00031257875, + 0.013920497, + 0.0006924572, + -0.0017773608, + -0.0036876993, + 0.0020725066, + -0.0012122055, + -0.0046542203, + -0.015191894, + 0.007323505, + 0.00042650173, + 0.0030698394, + 0.028645348, + -0.0016078954, + 0.0024633312, + -0.009885759, + 0.026102554, + -0.006584019, + 0.021834293, + -0.004530973, + -0.022755409, + 0.0012892353, + -0.038583, + 0.0065515856, + 0.00502072, + -0.03809001, + -0.03725971, + -0.0032206557, + -0.025376042, + 0.008062991, + -0.030747045, + -0.012162597, + -0.024052752, + 0.023378134, + -0.00007059374, + -0.0050369366, + -0.018201731, + -0.0027811804, + -0.01626869, + 0.0054747905, + -0.010287935, + -0.012169084, + -0.0071678236, + 0.00230765, + 0.004459619, + -0.037155923, + -0.012785322, + 0.020186668, + -0.008815451, + -0.02476629, + 0.003603372, + 0.0022330529, + 0.0060294047, + -0.0024357627, + -0.014141046, + -0.0071743103, + -0.020030987, + -0.03284874, + -0.0006843488, + -0.0068110544, + 0.009334387, + 0.009970086, + 0.005208835, + -0.00542614, + 0.028852923, + -0.01221449, + 0.004044469, + 0.014621063, + -0.0009657102, + -0.012409092, + 0.0063699572, + 0.009918192, + 0.0013549133, + -0.011935562, + -0.005325596, + -0.0039958186, + 0.013842657, + 0.007368912, + 0.007595947, + -0.0011505816, + 0.016787628, + -0.018370386, + 0.020225588, + -0.017643875, + 0.008860857, + -0.047093574, + -0.00054123555, + -0.010177661, + -0.001103553, + 0.02257378, + -0.00964575, + -0.01043713, + -0.006194816, + -0.018071998, + 0.009885759, + 0.023884097, + -0.0148416115, + 0.009457636, + -0.008199212, + -0.0025444152, + 0.0084392205, + -0.010716058, + 0.031992495, + 0.013764816, + -0.016450318, + 0.0035287747, + 0.022898115, + 0.012519366, + -0.00044312395, + -0.011559332, + -0.028982658, + -0.00008447937, + -0.0100868475, + 0.015243788, + -0.035054225, + -0.0010711193, + 0.012389632, + -0.043928057, + 0.017150883, + 0.015347576, + -0.0022735947, + 0.038894363, + 0.020718578, + -0.009756024, + 0.018655801, + -0.0093473615, + 0.011423111, + 0.0065515856, + -0.029761063, + 0.006084542, + -0.018033076, + -0.0073299916, + 0.0037136462, + 0.012785322, + 0.0269588, + -0.011663119, + 0.041229583, + 0.0046380037, + 0.028022623, + 0.023767335, + -0.033056315, + -0.008860857, + 0.005643445, + -0.0065775323, + -0.0026238775, + 0.0061883293, + -0.007394859, + -0.014348621, + -0.0074208057, + -0.011805828, + -0.010651192, + -0.0014043745, + 0.016606, + -0.024325194, + 0.0131745245, + -0.017306564, + -0.005705069, + -0.002773072, + 0.0125518, + 0.013829684, + -0.00336012, + -0.038531106, + 0.02045911, + -0.0013500482, + -0.005208835, + -0.025350096, + -0.03552127, + 0.0014335647, + -0.005338569, + -0.0014984319, + 0.021458065, + 0.0040250085, + 0.03619589, + -0.0035287747, + -0.0027244217, + -0.027840994, + 0.01296695, + 0.008860857, + 0.02049803, + 0.0072651245, + -0.014309701, + -0.026855014, + -0.03287469, + -0.0056402017, + 0.0057569626, + 0.011059855, + -0.02042019, + 0.009029512, + -0.011578793, + -0.025129547, + -0.026621493, + 0.009516016, + 0.001295722, + -0.0071353903, + -0.012597207, + -0.002636851, + -0.025389016, + -0.009392768, + 0.03386067, + 0.007336478, + 0.0019395287, + -0.018448226, + -0.012039349, + -0.0016735733, + 0.07078307, + 0.005760206, + 0.0015965436, + 0.012934516, + 0.003021189, + -0.01792929, + -0.020523977, + 0.0029692953, + 0.003249846, + 0.011727987, + 0.004453132, + -0.009853325, + 0.0117539335, + 0.0013184255, + 0.004946123, + 0.0045374595, + 0.0058023697, + 0.005263972, + 0.016969256, + -0.013959418, + 0.009379795, + -0.0020741282, + -0.006934302, + 0.009003565, + 0.0032611976, + -0.006214276, + 0.029034551, + 0.0024730614, + 0.022288363, + -0.0019314204, + -0.011520412, + 0.02057587, + 0.004401238, + -0.026699333, + -0.016177876, + 0.0060391347, + -0.012415579, + 0.021691587, + 0.008011097, + -0.0048163882, + 0.023040824, + 0.024960892, + 0.013492374, + -0.01332372, + 0.00033143075, + 0.014517276, + -0.021938082, + 0.014335647, + -0.0016622216, + -0.005945077, + 0.030487576, + 0.0021114268, + 0.0011700419, + -0.0046931407, + 0.020549923, + 0.015710833, + -0.006133192, + -0.008620849, + -0.0072456645, + -0.023352185, + 0.0037201329, + -0.0037979735, + 0.007576487, + -0.007070523, + -0.03834948, + -0.013725896, + 0.0029238884, + -0.0037785135, + -0.0017546574, + 0.007641354, + -0.011598253, + -0.021535905, + -0.021354277, + -0.004676924, + 0.03046163, + 0.019810438, + 0.02480521, + -0.015010267, + -0.0062986035, + 0.044524834, + -0.0063537406, + -0.00847814, + -0.018175784, + 0.0060164314, + -0.009970086, + 0.010884713, + 0.036221836, + -0.018110918, + -0.020965073, + -0.0019606105, + 0.033341732, + -0.0127204545, + 0.013265339, + -0.015827592, + 0.009490069, + -0.009541962, + 0.011170129, + 0.0007719195, + -0.0091397865, + -0.010151714, + 0.021185622, + -0.01785145, + -0.016411398, + -0.011812314, + 0.01650221, + 0.014270781, + 0.016411398, + 0.0056564184, + -0.024117619, + 0.007706221, + 0.0063959043, + -0.008530035, + -0.013712922, + -0.00009562842, + 0.010158201, + 0.016761681, + -0.02186024, + 0.024117619, + 0.009950626, + -0.022132684, + 0.004758008, + -0.038868416, + 0.014958372, + -0.006791594, + -0.012979924, + 0.000024882645, + 0.022379179, + 0.00588994, + 0.0064088777, + 0.0057731792, + 0.0053872196, + 0.030176213, + -0.01958989, + -0.01642437, + -0.034665022, + -0.012363685, + 0.029397808, + 0.00456665, + -0.007894336, + -0.009126813, + -0.013570215, + -0.0035839118, + 0.00375581, + -0.0018438497, + -0.013829684, + -0.019265553, + 0.0077775754, + -0.0014505924, + -0.00585102, + 0.018564988, + -0.0050823437, + -0.025583617, + -0.006888895, + 0.018616881, + 0.0057018255, + -0.008821937, + -0.016100034, + -0.024156539, + 0.023455974, + 0.007271611, + 0.018590935, + -0.003979602, + 0.005208835, + 0.0042650173, + -0.0019525022, + 0.0065159085, + 0.0034963412, + 0.0019411505, + -0.04322749, + 0.026258236, + 0.011358243, + 0.011170129, + 0.023079744, + -0.0062077893, + 0.0023871122, + 0.028852923, + -0.009159246, + 0.002789289, + -0.03362715, + -0.027866943, + -0.006999169, + 0.00915276, + -0.017241698, + -0.011500952, + -0.0029141582, + 0.002374139, + 0.030150266, + 0.012953976, + 0.000075104035, + -0.0013224797, + 0.02747774, + -0.02049803, + 0.041722573, + -0.009600343, + 0.008951671, + 0.0046996274, + -0.013661029, + -0.0066229394, + 0.016748706, + -0.0055688475, + 0.017656848, + 0.012999384, + -0.01883743, + -0.015490283, + 0.0129280295, + 0.015425417, + 0.016826548, + -0.012506393, + -0.016125983, + -0.022249443, + -0.022495938, + -0.01569786, + -0.029864851, + -0.047482777, + 0.015581097, + -0.0017595224, + -0.027088536, + 0.024013832, + -0.005147211, + -0.014179966, + 0.0042228536, + 0.005101804, + 0.024000857, + 0.0016403289, + 0.011676093, + 0.006817541, + -0.016125983, + -0.005163428, + -0.0007394859, + -0.017462246, + -0.010904173, + 0.022846222, + 0.024130592, + -0.022145657, + 0.028022623, + 0.013414534, + 0.0063407673, + 0.01626869, + -0.019810438, + -0.015386496, + 0.0026141475, + 0.027088536, + -0.01868175, + 0.01085228, + -0.031058408, + 0.014556196, + -0.019784492, + -0.0059807543, + 0.003924465, + -0.0057115555, + -0.014076179, + -0.0018357413, + -0.027789101, + 0.008925725, + 0.0093473615, + -0.0052769454, + 0.013764816, + -0.0037914868, + -0.029553488, + -0.0066326694, + -0.0064413114, + 0.034431502, + -0.0020627764, + 0.009055459, + -0.006022918, + 0.0024600879, + -0.013583188, + -0.0003585939, + -0.01955097, + 0.027866943, + -0.009444662, + 0.0011351757, + -0.008160291, + 0.03544343, + 0.036818612, + -0.0226127, + 0.0009843595, + 0.0029595653, + -0.006175356, + -0.014971346, + 0.007855416, + 0.0028152359, + -0.012409092, + 0.015049187, + -0.020939127, + 0.0036649958, + -0.0108912, + 0.0032903878, + 0.0069861957, + -0.0108912, + -0.0009592235, + -0.01219503, + 0.0023773822, + 0.00802407, + -0.013635082, + -0.008562468, + 0.02000504, + 0.017215751, + -0.0071029565, + 0.019537997, + -0.02049803, + 0.01563299, + -0.0103333425, + 0.010754979, + -0.0010573351, + -0.028411826, + 0.016528158, + -0.01373887, + -0.03160329, + -0.012902083, + -0.001088147, + -0.0039860886, + 0.00271307, + -0.013388586, + 0.01456917, + -0.004002305, + 0.008860857, + -0.025869032, + 0.005552631, + -0.008315973, + -0.02664744, + 0.011916102, + 0.020653712, + -0.019654756, + 0.011974482, + 0.0033503901, + 0.0036649958, + 0.0058315597, + -0.03718187, + -0.006882408, + -0.01830552, + 0.0018276329, + -0.0015405955, + -0.0008821937, + -0.002870373, + 0.0011043638, + -0.01464701, + 0.0031347065, + -0.008588415, + 0.0032563326, + -0.005056397, + 0.008977618, + -0.026400944, + 0.004508269, + -0.021925109, + 0.027088536, + -0.011896641, + -0.028982658, + -0.013907524, + 0.0070380894, + -0.012519366, + -0.004336371, + 0.00058218295, + -0.030331895, + -0.020926153, + -0.015957328, + -0.022418099, + 0.0027552336, + 0.019486101, + 0.003943925, + 0.015386496, + -0.018746616, + -0.01262964, + 0.009872786, + 0.005578578, + -0.0083808405, + -0.019330421, + -0.009295467, + 0.0013070737, + -0.006058595, + 0.023417054, + 0.015425417, + -0.013239392, + -0.0122274645, + 0.01668384, + 0.011669606, + 0.006065082, + -0.0019168253, + -0.0022946766, + 0.0002608877, + 0.009528989, + 0.026336076, + 0.043668587, + 0.007608921, + -0.00546506, + -0.018175784, + -0.015204867, + 0.0032141688, + 0.032329805, + -0.03129193, + 0.0034930978, + -0.0032839011, + -0.02008288, + -0.002338462, + -0.009853325, + 0.006856461, + 0.010184147, + 0.015165947, + 0.021496985, + -0.009691157, + 0.0062888735, + 0.026595546, + -0.0031006513, + -0.010385236, + -0.015049187, + -0.0063764444, + -0.01842228, + -0.014711877, + 0.012837215, + -0.016580053, + -0.0034476907, + -0.028619401, + 0.00921114, + -0.01569786, + 0.0046736808, + -0.01962881, + -0.0031444367, + -0.020588843, + 0.010625245, + 0.012636127, + -0.014711877, + 0.014348621, + -0.030643258, + 0.00012912623, + -0.0073559387, + -0.0047450345, + 0.0046801674, + -0.026932854, + -0.022288363, + 0.0053872196, + 0.0024357627, + -0.027218271, + -0.0058737234, + 0.0072197174, + 0.02601174, + 0.022742435, + 0.212453, + 0.016917361, + -0.013427507, + 0.035339642, + 0.00050231523, + 0.03284874, + 0.022262417, + -0.013946445, + 0.035469376, + 0.025959847, + -0.019239606, + 0.000052299165, + -0.008335433, + -0.004965583, + -0.0008075964, + -0.0071548503, + -0.029060498, + -0.0071289036, + -0.030020533, + -0.014828638, + 0.0027163133, + -0.010249015, + -0.0013508591, + 0.003911491, + 0.02646581, + 0.0051991045, + -0.005390463, + -0.0021000751, + 0.024208432, + 0.017111963, + -0.012071783, + -0.016631946, + -0.002207106, + -0.01796821, + 0.0013249122, + -0.0058996705, + 0.00336985, + -0.00021304816, + 0.024247354, + 0.025025759, + 0.00056758785, + 0.010618758, + -0.037700806, + -0.009042486, + -0.020692632, + 0.014089152, + -0.021068862, + -0.008997078, + 0.0124350395, + 0.01709899, + -0.0098598115, + 0.0068110544, + 0.03827164, + 0.024870079, + -0.00792677, + 0.02000504, + 0.029008605, + -0.00083678664, + 0.0033471466, + -0.001624923, + -0.028645348, + 0.026024714, + -0.02352084, + -0.009788458, + 0.0057666926, + -0.012078269, + -0.013414534, + 0.00016845197, + 0.0042131236, + -0.03139572, + 0.0084392205, + -0.0037460797, + -0.0057212855, + 0.0072651245, + -0.022067815, + -0.017695768, + 0.011170129, + 0.0024422496, + 0.020861287, + 0.0024925214, + -0.0063310373, + -0.0031557884, + -0.010242528, + 0.0058866967, + 0.00031521398, + -0.016216796, + -0.0014659984, + 0.0042942073, + 0.014102126, + -0.008445707, + 0.008523548, + -0.0043104244, + 0.0032628193, + 0.0054228967, + 0.013764816, + 0.024104645, + -0.0036228322, + 0.015204867, + -0.033237945, + 0.017189804, + -0.025453882, + -0.05692744, + 0.018357413, + 0.00081732654, + -0.016411398, + 0.01502324, + 0.0063083335, + -0.010754979, + 0.023780309, + 0.002636851, + -0.0014773501, + -0.020601818, + 0.0066034794, + 0.00042893426, + 0.012785322, + -0.017293591, + 0.008607876, + -0.024104645, + -0.00336985, + 0.007628381, + -0.00036203998, + -0.006447798, + -0.0017530356, + -0.0057893964, + 0.01377779, + -0.013161551, + -0.022846222, + 0.01622977, + -0.012506393, + -0.041722573, + 0.03144761, + 0.011572305, + 0.028619401, + -0.002662798, + -0.0022135926, + 0.021951055, + -0.003989332, + 0.0032579543, + 0.01174096, + -0.009483582, + -0.0021941324, + -0.02016072, + 0.01041767, + 0.018071998, + 0.004297451, + 0.005491007, + 0.00423907, + -0.009224113, + -0.0096133165, + -0.0136091355, + -0.015996248, + 0.00066772656, + -0.013699949, + -0.021834293, + 0.02872319, + -0.010657678, + -0.015620017, + -0.006752674, + -0.001300587, + 0.03635157, + -0.020212615, + 0.0100609, + 0.026297156, + -0.006934302, + 0.0010208474, + 0.0040866327, + -0.16647513, + 0.014504302, + 0.01921366, + -0.021717533, + -0.014179966, + 0.0033244432, + 0.018590935, + 0.02581714, + -0.023650575, + 0.021263463, + -0.0023676523, + 0.020368295, + -0.052412685, + -0.019771518, + -0.0018616882, + 0.024883052, + -0.0021552122, + 0.011442571, + 0.02302785, + 0.010994988, + 0.018033076, + -0.01551623, + 0.0077970354, + 0.003739593, + 0.014919452, + 0.0010338208, + -0.009665211, + 0.019096898, + -0.008367866, + -0.017747661, + 0.01567191, + 0.01547731, + 0.02555767, + -0.0017384405, + 0.023417054, + 0.0059094005, + -0.0058996705, + 0.013310746, + 0.012519366, + -0.003061731, + 0.0056239846, + 0.01796821, + 0.011513925, + 0.0093862815, + -0.008568955, + 0.01796821, + 0.024818184, + 0.026180396, + 0.00052704586, + 0.0020400728, + 0.013200472, + -0.030487576, + -0.015334602, + -0.011377704, + 0.021717533, + 0.020342348, + 0.022132684, + 0.013803736, + -0.017124936, + 0.018474175, + 0.0075635137, + -0.055059265, + 0.0035709385, + 0.021484012, + 0.0014238347, + -0.0027698288, + 0.004543946, + 0.008465167, + -0.023961937, + 0.0047547645, + -0.011020934, + -0.011442571, + -0.018642828, + -0.017384404, + 0.007388372, + 0.010638218, + -0.009794945, + -0.004281234, + -0.012688021, + -0.011273917, + 0.006194816, + 0.031110302, + -0.005805613, + 0.0030941647, + -0.018201731, + 0.0068434877, + 0.0031201115, + 0.011196076, + -0.021055888, + -0.007719195, + 0.021042915, + -0.041307423, + -0.0072132307, + -0.029605383, + 0.017734688, + 0.009820892, + -0.0064640148, + 0.0029157798, + -0.0015746509, + 0.012298818, + 0.0031898438, + -0.0017692525, + -0.011799341, + 0.009412228, + 0.018993111, + 0.013388586, + 0.00834192, + 0.012337739, + 0.038660843, + 0.0032790361, + -0.008828424, + 0.028437773, + 0.0030584878, + 0.024857104, + -0.00037927032, + -0.0056402017, + 0.015269735, + -0.015710833, + 0.012272871, + 0.007738655, + 0.041385263, + -0.013155065, + -0.008309486, + -0.002145482, + -0.0031849786, + -0.012876136, + -0.10233447, + -0.01261018, + 0.021224542, + 0.025414962, + 0.013583188, + 0.015386496, + 0.011818801, + 0.02423438, + -0.01381671, + 0.019304473, + -0.013427507, + -0.016670866, + -0.0018097945, + -0.008140831, + -0.0009900354, + -0.0071678236, + 0.008886804, + -0.01642437, + -0.01656708, + 0.016541133, + -0.015723806, + -0.000007582619, + 0.01290857, + -0.010197122, + -0.024831157, + -0.0065775323, + -0.025155494, + 0.018785536, + 0.0047353045, + -0.0065515856, + 0.030850833, + -0.015594071, + 0.00030892997, + 0.0005631282, + -0.01569786, + -0.0072002574, + -0.003999062, + -0.0029547003, + 0.008121371, + -0.035054225, + -0.0034444474, + 0.0047871983, + 0.005915887, + -0.0020157478, + 0.004514756, + -0.0024081941, + -0.026297156, + 0.012863163, + 0.0046023265, + -0.019693676, + 0.0010735518, + 0.01702115, + -0.016255716, + -0.012830729, + 0.038531106, + -0.017566033, + 0.020666685, + 0.010748493, + -0.02397491, + 0.016035168, + -0.008744096, + 0.017449273, + -0.0018503364, + 0.023170559, + -0.015645964, + -0.02087426, + -0.023092717, + -0.021925109, + 0.026673386, + -0.03391256, + -0.002596309, + 0.0001393631, + -0.037285656, + 0.02355976, + -0.024947919, + 0.0044628624, + -0.028282093, + -0.01883743, + 0.012409092, + -0.008821937, + -0.025285227, + -0.016606, + 0.003512558, + 0.0023660306, + 0.0018000643, + 0.028411826, + -0.0030244323, + -0.005779666, + 0.0269588, + 0.004521243, + 0.0105409175, + 0.027399898, + 0.005400193, + -0.02913834, + -0.020018013, + 0.012428552, + -0.0010540917, + -0.0020887232, + 0.015230815, + -0.015321629, + -0.023014877, + -0.014322674, + -0.033237945, + 0.010489023, + 0.0035903987, + -0.009976572, + -0.01619085, + 0.0077256816, + -0.0112804035, + -0.0006721862, + -0.01796821, + -0.01126743, + -0.010897687, + 0.0014197804, + -0.016437344, + -0.00998306, + -0.015581097, + -0.0073299916, + 0.0048520654, + 0.011585279, + 0.0002750774, + -0.00025034678, + -0.0015178921, + -0.0034736376, + 0.0005071803, + 0.022833249, + -0.035261802, + 0.0055688475, + -0.0093668215, + -0.025752272, + -0.025116574, + -0.007829469, + 0.018629855, + -0.022405125, + 0.011098775, + 0.037233762, + -0.0108263325, + -0.028697241, + -0.008568955, + 0.03676672, + 0.011572305, + -0.023884097, + -0.03204439, + -0.029994586, + 0.015334602, + -0.02480521, + 0.006528882, + 0.03349741, + -0.01709899, + 0.0023287318, + 0.015334602, + 0.0068759215, + 0.006327794, + 0.023923017, + 0.009438175, + -0.0011392299, + -0.012675048, + -0.0070056557, + 0.034742862, + 0.022807302, + 0.0054683033, + -0.021561852, + 0.0023822472, + -0.018409306, + 0.0069861957, + 0.008050017, + 0.005695339, + 0.0027455036, + 0.008257592, + -0.010099821, + -0.009775485, + -0.019434208, + -0.0070121423, + -0.008393814, + 0.03733755, + 0.01800713, + 0.022846222, + 0.0032076822, + 0.0020076393, + -0.0045374595, + -0.0076024337, + 0.023378134, + 0.013933471, + -0.007829469, + -0.009704131, + 0.007051063, + 0.039283566, + 0.03785649, + -0.028230198, + 0.0020887232, + 0.008166779, + 0.012448013, + -0.010904173, + 0.0051439675, + -0.0013395073, + 0.009055459, + 0.013051277, + 0.011176616, + 0.0074986466, + -0.006120219, + 0.010184147, + 0.019576916, + 0.016100034, + -0.005186131, + 0.00871815, + -0.020848313, + -0.012402605, + -0.0067656473, + -0.018292546, + -0.017332511, + -0.009496556, + 0.0013459941, + 0.0033276866, + -0.0038271637, + -0.0034444474, + 0.015723806, + 0.004722331, + 0.0050596404, + -0.019732596, + -0.019032031, + -0.021834293, + 0.0027925323, + -0.0034801243, + 0.0044661057, + 0.020173695, + 0.0006162382, + 0.01751414, + 0.025168467, + 0.03251143, + -0.017280618, + 0.017916316, + 0.011877181, + 0.026206343, + -0.002080615, + -0.0014797826, + -0.0061137322, + -0.0034541774, + -0.016618973, + -0.018071998, + 0.024364114, + 0.009198166, + 0.047690354, + -0.022664594, + -0.024883052, + 0.015191894, + -0.016022194, + 0.004012035, + 0.022586754, + 0.006139679, + -0.017617928, + -0.009814405, + 0.011475005, + 0.017916316, + 0.03279685, + -0.018448226, + -0.024169512, + -0.0022427829, + -0.033601202, + 0.014815665, + -0.022171604, + 0.00078367663, + 0.027659368, + -0.0024730614, + 0.009237087, + -0.0008311108, + -0.022794329, + -0.008893291, + 0.02559659, + 0.015321629, + -0.0065386123, + -0.010767953, + 0.012097729, + -0.019343395, + -0.031914655, + -0.01883743, + 0.012545314, + -0.03292658, + -0.0042585307, + -0.031655185, + -0.0032352507, + 0.011935562, + 0.012143137, + 0.039283566, + -0.018785536, + -0.0134794, + 0.02219755, + -0.010164687, + -0.004968826, + 0.01755306, + -0.0054747905 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.014424977, + -0.008803002, + -0.0020790275, + -0.028590279, + 0.0013365176, + 0.030901391, + -0.019891147, + -0.011133589, + -0.002213734, + -0.007063175, + 0.0026779042, + 0.0068814023, + -0.015970046, + 0.02278653, + -0.011217983, + 0.002093634, + 0.02595457, + 0.0029603012, + 0.03388766, + -0.012126848, + -0.028564312, + 0.014996263, + -0.0065178564, + 0.0009299631, + -0.01859277, + -0.011140081, + 0.010244201, + -0.017969549, + 0.0022461936, + 0.021085655, + 0.014801507, + -0.01807342, + 0.004550814, + -0.03173235, + -0.01825519, + 0.0014103629, + 0.017450197, + 0.002220226, + 0.023604508, + -0.01175681, + 0.0047488166, + -0.003031712, + 0.0005169166, + -0.022929352, + -0.012730594, + 0.016710121, + 0.028434472, + 0.0028759066, + -0.01175681, + 0.01498328, + 0.0054337108, + 0.012393015, + -0.016969798, + -0.015970046, + 0.0038821495, + -0.021566054, + 0.014386025, + 0.023825232, + -0.017865678, + -0.015684403, + -0.0049305893, + 0.0021114869, + -0.0017804005, + 0.013555064, + 0.010062427, + -0.0075760344, + 0.0056674187, + 0.0032151078, + 0.00063011894, + 0.00807591, + 0.03334234, + 0.034978297, + 0.006641202, + 0.0135940155, + 0.02749964, + 0.010101379, + -0.0058816513, + 0.006193262, + -0.014100382, + -0.00093077455, + 0.0072124884, + -0.019566553, + -0.018761558, + -0.00091454486, + 0.01498328, + 0.0016797762, + -0.012464426, + 0.00979626, + -0.013581031, + -0.018346077, + 0.00022701324, + 0.038198274, + 0.023150075, + -0.0035413252, + -0.00074291555, + 0.02478603, + 0.012438459, + 0.013957561, + 0.030174298, + -0.021007752, + 0.000053558084, + 0.011620481, + -0.027837219, + 0.0016124229, + -0.031498645, + -0.022397017, + 0.008932839, + -0.0013697885, + 0.028720116, + -0.020916866, + -0.034043465, + 0.034432977, + 0.033524115, + -0.0282527, + -0.017606003, + -0.029447207, + 0.006261427, + -0.01698278, + -0.029758818, + 0.0028337094, + 0.0039470685, + 0.04014584, + 0.020501385, + -0.010004001, + 0.032563314, + -0.007647445, + -0.01234108, + -0.019371796, + -0.018956315, + 0.012367048, + -0.014528847, + 0.02357854, + 0.018190272, + 0.025318366, + -0.021916617, + 0.0018274667, + -0.0064983806, + -0.0006078031, + -0.015528598, + -0.026240215, + 0.0045735356, + 0.009101628, + -0.018878413, + -0.014178285, + -0.0008650442, + 0.028720116, + 0.01663222, + 0.01615182, + -0.019047203, + -0.014775539, + 0.0060471944, + -0.023903135, + 0.010685649, + -0.0089652985, + -0.0062776566, + 0.020488402, + -0.020436466, + 0.011049194, + -0.035212006, + -0.010653189, + -0.010133838, + -0.008264175, + 0.0131460745, + 0.005777781, + 0.023877166, + 0.02474708, + -0.00008064143, + 0.012315113, + -0.010906373, + -0.0047585545, + -0.006946321, + 0.031888157, + -0.017164554, + 0.024292648, + -0.013308372, + 0.02124146, + 0.009770293, + -0.0007161365, + -0.01825519, + -0.0054629245, + -0.024448453, + -0.015749322, + 0.019475667, + -0.0056284675, + 0.019099137, + -0.01433409, + 0.022539837, + -0.0060991296, + 0.0077383313, + 0.0041126115, + 0.017229473, + 0.022384033, + -0.02086493, + -0.02457829, + -0.6892828, + -0.034796525, + 0.012633216, + -0.0039048712, + 0.0015012493, + 0.020774044, + 0.007069667, + 0.016073916, + -0.00097053737, + -0.025305383, + -0.010971292, + 0.00041142345, + 0.01663222, + 0.0022072422, + 0.009965049, + -0.016281657, + -0.007881153, + 0.006407494, + 0.00862772, + 0.0007490017, + 0.0022380787, + 0.017774792, + -0.017008748, + 0.012406, + 0.016138835, + 0.012633216, + 0.015074166, + -0.0045735356, + -0.012678659, + 0.022254195, + -0.011380281, + 0.024734097, + -0.008582277, + -0.019384779, + 0.043158077, + 0.008342077, + -0.010880406, + 0.011659432, + 0.009367796, + 0.030953325, + -0.015671419, + -0.014476912, + 0.0032459444, + -0.027863186, + -0.011691892, + 0.0027233474, + 0.025941588, + -0.02305919, + 0.01615182, + 0.00082406413, + 0.038795527, + -0.021656942, + 0.001230213, + 0.0025805258, + 0.016658187, + 0.0076344614, + 0.020838963, + -0.008101877, + -0.006829467, + 0.010153314, + -0.0065632993, + -0.0059790295, + -0.012607248, + -0.015139084, + -0.014230221, + 0.0006171352, + -0.033627983, + -0.020709125, + -0.009504125, + -0.0031177297, + -0.007413737, + 0.010400006, + -0.027421739, + 0.015892144, + 0.016203754, + -0.008809493, + 0.014178285, + -0.011523102, + -0.013081156, + 0.01615182, + 0.008621228, + -0.02395507, + -0.040950835, + -0.009783276, + 0.032900892, + -0.017346326, + -0.030979292, + -0.007868169, + 0.030511877, + 0.0026681663, + 0.039262943, + 0.0061965077, + -0.027317869, + -0.0068619265, + -0.008958806, + 0.025928603, + -0.015918111, + 0.0029083663, + 0.01646343, + -0.02069614, + -0.001459052, + -0.01481449, + 0.0022608002, + -0.006835959, + 0.04227518, + 0.014048447, + -0.012698134, + 0.029057695, + 0.003202124, + -0.017774792, + 0.031135099, + -0.010302627, + -0.010523352, + 0.0040736604, + 0.016645202, + -0.03388766, + 0.05406445, + 0.016788024, + 0.0066866456, + 0.0005347693, + 0.0025058691, + -0.0021244707, + 0.00013369233, + -0.008147321, + 0.012185276, + 0.01667117, + -0.00687491, + -0.0228904, + -0.017138587, + 0.005644697, + -0.004609241, + -0.01577529, + 0.018644705, + 0.0017706626, + 0.00035887974, + -0.011841205, + 0.0180085, + -0.008958806, + 0.021085655, + -0.016242705, + -0.030148331, + -0.01261374, + -0.03194009, + 0.010250692, + -0.0069138617, + -0.02814883, + -0.03058978, + -0.0075046234, + -0.030252201, + 0.02495482, + -0.027811252, + -0.011425724, + -0.025474172, + 0.022630725, + 0.0081667965, + -0.0020595517, + -0.021423234, + 0.0020822734, + -0.016619235, + 0.016476413, + 0.0047682924, + 0.008322601, + -0.005200003, + -0.009322353, + -0.004265171, + -0.029083662, + -0.010705125, + 0.032771055, + 0.0019475666, + -0.0272919, + 0.00384969, + -0.0008999381, + -0.005183773, + -0.012620232, + -0.023942085, + -0.0038626739, + -0.009030217, + -0.027188031, + 0.0048169815, + -0.005430465, + -0.002166668, + 0.015385777, + 0.003570539, + -0.009646947, + 0.03503023, + -0.003388766, + 0.013736837, + 0.028382538, + -0.008186271, + 0.019657439, + -0.015749322, + 0.0026389528, + -0.0074851476, + -0.0035835225, + 0.0027233474, + -0.0034764064, + 0.0017300884, + 0.008848445, + 0.0069073695, + 0.0031940092, + 0.01773584, + -0.012938335, + 0.032615248, + -0.016865928, + 0.0065795295, + -0.035861194, + 0.011211492, + -0.0134771615, + 0.013223978, + 0.036614254, + 0.003153435, + -0.017385278, + -0.017411245, + -0.015100134, + 0.019164056, + 0.018566802, + -0.020566303, + 0.02224121, + -0.008608244, + -0.017190522, + 0.011016735, + 0.014347075, + 0.018475916, + -0.0019021234, + -0.0031761567, + 0.0004211613, + 0.03186219, + 0.017995516, + -0.016749073, + -0.012925351, + -0.016995765, + 0.00008611896, + -0.0063945106, + 0.023539588, + -0.030745585, + -0.012074913, + 0.0022413246, + -0.045910638, + 0.016762057, + 0.024032973, + 0.0076149856, + 0.02351362, + 0.020877915, + -0.010607746, + 0.013879659, + 0.011159557, + 0.017476164, + -0.0007396696, + -0.0153078735, + 0.01089339, + -0.014217236, + 0.0079071205, + -0.009582028, + 0.014879409, + 0.043911137, + -0.0025010002, + 0.042742595, + 0.011386773, + 0.04887094, + 0.020319613, + -0.012789021, + -0.016307624, + 0.017567052, + -0.00070152973, + 0.005901127, + -0.013684901, + 0.009926098, + -0.01433409, + 0.006355559, + -0.0013973791, + 0.004086644, + 0.00721898, + 0.019332845, + -0.025591025, + -0.00025987843, + -0.011062179, + -0.011821729, + -0.0040833983, + 0.010159806, + 0.011964551, + -0.012431967, + -0.038042467, + 0.014217236, + -0.0025285906, + -0.0005712862, + -0.0130292205, + -0.031680416, + 0.012626723, + -0.0049370816, + 0.004495633, + 0.017112618, + 0.0075176074, + 0.024007006, + -0.004213236, + 0.013866674, + -0.03503023, + -0.00074494426, + 0.0068619265, + 0.020332595, + -0.0021488152, + -0.004664422, + -0.016554317, + -0.03323847, + -0.012568297, + 0.019631471, + 0.011328346, + -0.013009745, + 0.008634212, + -0.01825519, + -0.015593517, + -0.014853441, + 0.010692141, + -0.014100382, + -0.002973285, + -0.01842398, + -0.01577529, + -0.012412491, + -0.012055437, + 0.030901391, + -0.002976531, + 0.003791263, + -0.013516112, + -0.014009496, + 0.001605931, + 0.069333375, + 0.009283401, + 0.00419376, + 0.01471062, + 0.006375035, + -0.007433213, + -0.0209688, + 0.003437455, + 0.0004002655, + 0.012594264, + 0.0014858311, + -0.007167045, + 0.014918361, + 0.001751187, + -0.0031290904, + 0.00015783405, + 0.024123859, + 0.015346825, + 0.031368807, + -0.016112868, + 0.0015028722, + 0.008205747, + -0.010406498, + 0.008329093, + 0.006887894, + 0.0045767818, + 0.02996656, + 0.0018485653, + 0.030563813, + -0.0027412002, + -0.0021196017, + 0.014775539, + -0.003677655, + -0.012892891, + -0.018852444, + 0.005832962, + -0.011334837, + 0.0037101144, + 0.016099885, + -0.0020011247, + 0.031187033, + 0.012827972, + 0.007894137, + -0.016710121, + 0.0013381406, + 0.01660625, + -0.0046968814, + 0.014827474, + -0.013879659, + -0.007420229, + 0.020955818, + 0.004904622, + 0.0027071177, + -0.01996905, + 0.0143211065, + -0.00039985977, + -0.012237211, + 0.002744446, + -0.015242955, + -0.013632966, + 0.006482151, + -0.010510368, + 0.010698632, + -0.018060435, + -0.00849139, + -0.008458931, + 0.0019605504, + -0.009763801, + -0.02017679, + 0.0010192265, + -0.013905626, + -0.006537332, + -0.028382538, + -0.0041158576, + 0.018462932, + 0.013568047, + 0.012107372, + -0.010425974, + -0.0025496893, + 0.03791263, + -0.007920104, + 0.011185524, + -0.012003503, + -0.010419481, + -0.0033498146, + 0.010387022, + 0.034458946, + -0.016320609, + -0.005245446, + 0.0060277185, + 0.025889652, + -0.008121353, + -0.00017203506, + -0.026486907, + -0.0066866456, + -0.011607497, + 0.017891645, + 0.013055189, + -0.014996263, + -0.009536585, + 0.004245695, + -0.025188528, + -0.007777283, + -0.008147321, + 0.010497384, + 0.012146324, + 0.029836722, + 0.017060684, + -0.016956814, + 0.0112439515, + 0.01780076, + -0.013152567, + 0.004258679, + 0.0017917613, + -0.006952813, + 0.013619983, + -0.015814241, + 0.01354208, + 0.010231216, + -0.025889652, + -0.0005595197, + -0.04344372, + 0.030174298, + 0.0034017498, + 0.00040635167, + 0.0030787783, + 0.021202508, + -0.014035463, + 0.0037425738, + 0.00076360843, + 0.0018469424, + 0.021228475, + 0.0003767324, + -0.019215992, + -0.046144344, + -0.020631222, + 0.037237473, + -0.00433009, + -0.015424727, + -0.0042878925, + -0.0011912616, + 0.008906871, + 0.008919856, + 0.0023159813, + -0.022202259, + -0.020215742, + 0.00091454486, + -0.0005136707, + 0.0023987528, + 0.015515614, + -0.019566553, + 0.0003276375, + -0.014009496, + 0.015957063, + -0.0052097407, + -0.00537853, + -0.008471915, + -0.028434472, + 0.01460675, + 0.008809493, + 0.012821481, + -0.009945573, + 0.0033433228, + 0.014879409, + -0.0018323356, + -0.0011855812, + -0.021189526, + 0.0034601768, + -0.03791263, + 0.019839212, + 0.02522748, + -0.0014833966, + 0.025720863, + -0.00769938, + 0.003340077, + 0.008062926, + -0.0038302145, + -0.00169276, + -0.02739577, + -0.020423481, + -0.007167045, + 0.017008748, + -0.02305919, + -0.006680154, + 0.010523352, + 0.00035218496, + 0.02034558, + 0.014541831, + -0.004080152, + -0.010198757, + 0.026694646, + -0.013529096, + 0.022007503, + -0.007063175, + 0.016554317, + -0.012074913, + -0.02343572, + -0.0059303404, + 0.0006666358, + -0.000043718814, + 0.015762307, + 0.002106618, + -0.011419232, + -0.03303073, + 0.009296385, + 0.018242208, + 0.017489148, + 0.000029162782, + -0.006478905, + -0.024591275, + -0.0019199761, + -0.023747329, + -0.027421739, + -0.036276676, + 0.0061088675, + -0.0008252814, + -0.0389773, + 0.025045708, + -0.0036614253, + -0.021656942, + 0.0045930115, + 0.0043528113, + 0.029265435, + -0.007121602, + 0.01780076, + 0.011562054, + -0.008290142, + -0.027473673, + 0.0030203513, + -0.011205, + -0.0039568064, + 0.014191269, + 0.012711118, + -0.017580034, + 0.01189314, + 0.012457934, + 0.029784786, + 0.028590279, + 0.0029521864, + 0.0051642978, + 0.012698134, + 0.02055332, + -0.026642712, + -0.004596257, + -0.012295637, + 0.019267926, + -0.010205249, + -0.028330602, + 0.014632718, + -0.0065632993, + -0.016177787, + 0.0055732867, + -0.04448242, + 0.012646199, + 0.008854936, + -0.005329841, + -0.0022429475, + -0.011140081, + -0.0194497, + -0.0008691016, + -0.0021098638, + 0.027551576, + -0.0015402007, + 0.013568047, + 0.0060471944, + 0.0010646698, + -0.009504125, + -0.0014209122, + 0.010555811, + 0.02698029, + -0.0049305893, + -0.0072124884, + -0.0052876435, + 0.042560823, + 0.038925365, + -0.021877665, + -0.0039957576, + -0.013555064, + -0.0013292142, + -0.0065178564, + 0.016281657, + 0.008218731, + -0.0050474433, + 0.027317869, + -0.012769545, + 0.00046295283, + -0.024396518, + 0.0037588037, + -0.0053623, + -0.0027769054, + -0.0038659198, + -0.0033222241, + 0.0072709154, + -0.0002022629, + 0.00096161105, + -0.0055505647, + 0.018307127, + 0.0008918232, + -0.0074461964, + 0.022903383, + -0.013308372, + 0.013853691, + 0.00023756256, + 0.018657688, + -0.0055148597, + -0.008127845, + 0.029343337, + -0.014996263, + -0.020877915, + -0.012548821, + 0.014191269, + 0.001983272, + 0.0032232227, + -0.015268923, + 0.0037295902, + -0.009607996, + 0.013529096, + -0.022942334, + -0.014373042, + 0.00004305948, + -0.02330588, + 0.01625569, + 0.026616745, + -0.02649989, + 0.016294641, + 0.0114322165, + -0.013022729, + -0.0010297758, + -0.034926362, + -0.00443396, + -0.021592023, + 0.009835212, + 0.015515614, + -0.012172291, + -0.006404248, + -0.009114612, + 0.0031940092, + 0.008205747, + -0.004833211, + 0.01996905, + 0.013736837, + -0.003388766, + -0.023812247, + 0.015814241, + -0.01735931, + 0.007452688, + -0.008257682, + -0.010088395, + -0.010698632, + -0.00769938, + -0.0007173537, + -0.014191269, + 0.0024766556, + -0.041989535, + -0.019683408, + -0.0059335865, + -0.027110128, + -0.01299027, + 0.010783027, + -0.0016164803, + 0.013658934, + -0.01529489, + -0.0066087428, + 0.010393514, + 0.015165052, + 0.006303624, + -0.028460441, + -0.022046454, + -0.006303624, + -0.0170477, + 0.002171537, + 0.0012496886, + -0.009062677, + -0.019904131, + 0.006894386, + -0.015242955, + 0.011471167, + -0.0037295902, + -0.015216988, + -0.0035478172, + -0.00077212905, + 0.013529096, + 0.02241, + 0.0070242235, + -0.002510738, + -0.027889155, + -0.005732338, + 0.0023240962, + 0.030330105, + -0.020228725, + -0.0010354563, + 0.010601254, + -0.023747329, + -0.008368045, + -0.009614487, + -0.011399757, + -0.011828221, + 0.018268175, + 0.021747828, + -0.008134336, + 0.0030154823, + 0.031394776, + 0.0005708805, + -0.016865928, + -0.0013852068, + -0.00687491, + -0.021838713, + -0.004547568, + 0.014450944, + 0.0005436957, + 0.009413239, + -0.024967805, + 0.016060933, + -0.027188031, + 0.0040022493, + -0.01343821, + -0.012763053, + -0.011503627, + 0.031109132, + 0.027239965, + -0.015061182, + 0.0031096148, + -0.03991213, + 0.0047520627, + -0.0048559327, + -0.011620481, + -0.0016278411, + -0.034978297, + -0.020254694, + -0.0007765922, + 0.0019362058, + -0.02962898, + 0.0038951333, + 0.011776286, + 0.015697388, + 0.026902387, + 0.2141804, + 0.009367796, + -0.010335087, + 0.02708416, + -0.0032345837, + 0.038795527, + 0.02113759, + -0.0070891427, + 0.03269315, + 0.023760313, + -0.01763197, + 0.0077513154, + 0.0051091164, + -0.000626873, + 0.0002450688, + 0.0016862681, + -0.031472676, + -0.011750319, + -0.025292398, + -0.014749572, + 0.0038853954, + -0.01715157, + 0.009069169, + 0.009121104, + 0.030667683, + 0.0175281, + -0.0051578055, + 0.0017414491, + 0.031680416, + 0.02024171, + -0.017203506, + -0.0107246, + -0.0051123626, + -0.011639956, + 0.009121104, + -0.0037652955, + -0.009049693, + -0.01615182, + 0.02942124, + 0.027110128, + 0.01832011, + -0.0061575565, + -0.01832011, + -0.011678908, + -0.0071605532, + 0.0068034995, + -0.017657937, + -0.007569542, + 0.009835212, + 0.0059790295, + -0.026590776, + -0.007881153, + 0.03503023, + 0.016281657, + -0.004372287, + 0.02739577, + 0.020527352, + -0.01412635, + 0.00934832, + 0.00010559463, + -0.024513371, + 0.025188528, + -0.02024171, + 0.010049444, + -0.008932839, + -0.01625569, + -0.0100689195, + -0.005021476, + 0.01529489, + -0.024760064, + 0.022630725, + 0.0045702895, + 0.004787768, + 0.0145807825, + -0.016047949, + -0.014424977, + 0.020371547, + -0.00063214765, + 0.0066736615, + 0.0029927606, + -0.011639956, + 0.0093872715, + -0.015905127, + 0.009575536, + -0.0010979407, + -0.033160567, + 0.0077707907, + -0.0029635471, + 0.009095136, + 0.004508617, + 0.005884897, + -0.007004748, + 0.008887396, + 0.009309368, + 0.022332098, + 0.023461686, + -0.01687891, + 0.007257932, + -0.024084907, + 0.014411993, + -0.032433476, + -0.05520702, + 0.018242208, + 0.0012294014, + -0.0036841468, + 0.007660429, + -0.00035380793, + 0.019995017, + 0.034770556, + 0.0024182287, + 0.011217983, + -0.0120878965, + 0.00934832, + 0.0037880172, + 0.01715157, + -0.013970545, + 0.007420229, + -0.0123475725, + -0.0080239745, + -0.0073877694, + -0.006420478, + -0.022864433, + -0.008647196, + 0.018501883, + 0.0014054939, + -0.006719105, + -0.02389015, + 0.018112369, + -0.008783526, + -0.039678425, + 0.03326444, + -0.0053395787, + 0.026434971, + 0.00065446354, + -0.0072059967, + 0.010094887, + -0.0009397009, + 0.0023143583, + 0.0069073695, + 0.0041840225, + 0.0006378281, + -0.023669427, + 0.016580284, + 0.00079403917, + 0.006241951, + 0.0005335521, + 0.0027217243, + -0.021566054, + -0.015242955, + -0.039029237, + -0.002796381, + -0.008530342, + -0.016385527, + -0.0065632993, + 0.017073667, + -0.020137839, + -0.010536335, + 0.0028369555, + 0.005479154, + 0.020709125, + -0.02468216, + -0.0042327116, + 0.00075427635, + 0.0061023757, + -0.0045118625, + 0.0031972553, + -0.16691944, + 0.008257682, + 0.0155675495, + -0.015905127, + -0.007861678, + 0.02161799, + 0.022864433, + 0.02505869, + -0.0137108695, + 0.02516256, + 0.013295388, + 0.028538343, + -0.046404023, + -0.016788024, + 0.00005026142, + 0.027162062, + -0.0059887674, + -0.011620481, + 0.01959252, + 0.020202758, + 0.012289145, + -0.011568545, + 0.026357068, + -0.0020514368, + 0.013451193, + 0.0024263435, + -0.011613989, + 0.015035215, + -0.010990768, + -0.008335585, + 0.009471666, + 0.010023477, + 0.016515365, + 0.009750817, + 0.026616745, + 0.006063424, + -0.004586519, + 0.0012407623, + -0.016346576, + 0.00034893904, + 0.00807591, + 0.0069593047, + 0.0019102383, + 0.011451691, + -0.021384282, + 0.01687891, + 0.0016611121, + 0.0124189835, + -0.019215992, + -0.008335585, + 0.014788522, + -0.041833732, + -0.0032459444, + -0.006034211, + 0.0057583055, + 0.024071924, + 0.014554814, + 0.0057388297, + -0.013866674, + 0.018540835, + -0.0016797762, + -0.0408989, + -0.0063847727, + 0.015723355, + -0.013684901, + -0.014658685, + 0.0051805275, + 0.012328097, + -0.016398512, + -0.0027558068, + -0.014165301, + -0.031836223, + 0.018865429, + -0.01343821, + 0.011938583, + 0.01769689, + -0.00866018, + -0.007952563, + -0.011802254, + -0.021955568, + 0.006647694, + 0.0360949, + -0.005839454, + 0.018891396, + -0.021955568, + 0.01134133, + 0.009134088, + 0.013801755, + -0.025487155, + -0.019436715, + 0.025279416, + -0.04214534, + 0.0024620488, + -0.032121867, + -0.0070242235, + 0.006822975, + -0.0010906373, + 0.0011182278, + -0.0021828976, + 0.0019134842, + 0.0064107403, + 0.0012391392, + -0.015411744, + 0.013133091, + 0.02749964, + 0.013152567, + -0.006238705, + 0.01715157, + 0.011860681, + -0.003930839, + -0.011295887, + 0.029395273, + -0.00721898, + 0.008777034, + 0.0073228506, + -0.010731092, + 0.010458433, + -0.022825481, + 0.017476164, + -0.005174035, + 0.031290904, + -0.0037652955, + -0.008238207, + 0.013736837, + 0.0057842727, + -0.019735342, + -0.10335087, + -0.0049273437, + 0.026201263, + 0.010237709, + -0.0030544337, + 0.013775788, + 0.007965548, + 0.035861194, + -0.016891895, + 0.030901391, + -0.013321356, + -0.019683408, + -0.017294392, + -0.01062073, + 0.016891895, + -0.015152069, + 0.016242705, + -0.030200267, + -0.04739079, + 0.002871038, + 0.0112439515, + -0.0045767818, + 0.0028272176, + -0.009711865, + -0.022981286, + -0.013347323, + -0.019021234, + 0.018346077, + -0.0005051501, + -0.0016667924, + 0.020890899, + -0.009828719, + 0.014373042, + -0.0077318395, + -0.009088645, + -0.013282404, + 0.0055732867, + -0.00064229127, + 0.008692639, + -0.021436216, + -0.013275913, + 0.0054044975, + 0.022422984, + -0.023500638, + 0.0052843974, + -0.01062073, + -0.003794509, + 0.008127845, + -0.0035770307, + -0.03835408, + 0.003327093, + 0.011393265, + -0.007777283, + -0.0093872715, + 0.03973036, + -0.026798517, + 0.008809493, + 0.013723853, + -0.02553909, + 0.010925849, + 0.0029992526, + 0.0031842715, + 0.019657439, + 0.013308372, + -0.017398262, + -0.017164554, + -0.024123859, + -0.029187532, + 0.023240961, + -0.023656443, + -0.014944328, + 0.015931096, + -0.024889901, + 0.0156065, + -0.021812746, + -0.008809493, + -0.013736837, + -0.011808746, + 0.009465174, + -0.023929102, + -0.03588716, + -0.019761309, + 0.0032637971, + -0.003262174, + 0.0051805275, + 0.02814883, + -0.004670914, + -0.012354065, + 0.03908117, + -0.013957561, + 0.002213734, + 0.03069365, + 0.013159059, + -0.02107267, + -0.017372295, + 0.01694383, + 0.002687642, + -0.0017674167, + 0.012665675, + -0.011821729, + -0.03058978, + -0.016099885, + -0.03248541, + 0.019527601, + -0.0069398293, + 0.00013602535, + 0.0060601784, + 0.0015913242, + -0.010880406, + 0.0034861444, + -0.014087399, + 0.002341949, + -0.0057972567, + -0.0010622353, + -0.02203347, + -0.01732036, + -0.010906373, + 0.0069657965, + 0.010958308, + 0.0042781546, + 0.013879659, + 0.0044631734, + 0.001253746, + -0.0014136088, + 0.0107246, + 0.008270666, + -0.03482249, + 0.010607746, + -0.026279166, + -0.022526855, + -0.014230221, + -0.008640704, + 0.019293893, + -0.022942334, + 0.0060991296, + 0.033524115, + -0.017748823, + -0.02395507, + 0.001635956, + 0.016762057, + 0.009439207, + -0.025850702, + -0.04048342, + -0.025889652, + 0.026201263, + -0.016073916, + -0.016697139, + 0.023734346, + -0.012256686, + 0.012827972, + 0.00903671, + -0.0026438218, + 0.013840707, + 0.02076106, + 0.024409503, + -0.004911114, + -0.0066671697, + -0.018449947, + 0.022098389, + 0.0069073695, + 0.00501823, + -0.015359809, + -0.0035413252, + -0.00097540626, + 0.005917357, + 0.019917116, + 0.015113117, + 0.01625569, + -0.007465672, + -0.0014858311, + 0.00396979, + -0.012568297, + -0.013775788, + 0.003794509, + 0.028408505, + 0.017852694, + 0.027577544, + -0.009640455, + -0.0037036226, + -0.0069982563, + -0.008056434, + 0.01615182, + 0.026746582, + 0.009062677, + -0.009160055, + 0.0056966324, + 0.028953824, + 0.0238512, + -0.041600022, + -0.016125852, + 0.0068684183, + 0.012146324, + -0.016917862, + 0.004310614, + -0.009770293, + 0.01571037, + 0.010166298, + -0.006991764, + -0.0025837717, + -0.010679157, + -0.011763303, + 0.034381043, + -0.0026097393, + -0.014450944, + 0.00042075553, + -0.020293644, + -0.011419232, + -0.008601753, + -0.023864184, + -0.002218603, + -0.0008991266, + 0.009380779, + 0.0051058703, + -0.011107622, + 0.010107871, + 0.011217983, + 0.0033189782, + 0.008192764, + -0.0071475697, + -0.01917704, + -0.021085655, + 0.010296135, + 0.0053460705, + -0.0075435746, + 0.009224974, + -0.005544073, + 0.03326444, + 0.007926596, + 0.017670922, + -0.0052876435, + 0.015113117, + -0.0040119872, + 0.02076106, + -0.0066931373, + -0.015697388, + -0.010224725, + -0.007627969, + -0.028330602, + -0.008861428, + 0.02931737, + -0.006310116, + 0.05406445, + -0.010464924, + -0.02340975, + 0.025616992, + -0.010912865, + 0.014100382, + 0.014762555, + 0.0016505627, + -0.018891396, + -0.023799265, + 0.013386275, + 0.020787029, + 0.032459445, + -0.01471062, + -0.02299427, + -0.01821624, + -0.030252201, + 0.018034467, + -0.022020487, + -0.010432465, + 0.02942124, + 0.022332098, + 0.005245446, + 0.0052422, + -0.023994021, + -0.01498328, + 0.022864433, + 0.0029116122, + -0.0024880164, + -0.015697388, + 0.010581778, + -0.00515456, + -0.019709375, + -0.015814241, + 0.010049444, + -0.03635458, + -0.011380281, + -0.028486408, + 0.00804345, + 0.019644456, + 0.017216489, + 0.022539837, + -0.017411245, + -0.030979292, + 0.011406248, + 0.0023435717, + -0.008731591, + 0.009335336, + -0.022968303 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 43, + "total_tokens": 43 + } +} +278 34443 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 83 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What color is the lamp in each room?"]}HTTP/2.0 200 OK +Content-Length: 33488 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:05 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 70 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-qpwjk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999991 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_85f14641d8424a6caa87286d180fdb7c + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.02230405, + 0.008771547, + 0.014554557, + -0.011423711, + -0.008448112, + 0.015473112, + 0.0068826885, + -0.008881515, + 0.004744786, + -0.005595419, + -0.016676288, + 0.01731022, + -0.017698342, + 0.024891527, + -0.0063878335, + -0.0012743324, + 0.031618968, + 0.021294935, + 0.013648941, + -0.0046218806, + -0.020337569, + 0.025512522, + -0.01429581, + -0.001887241, + -0.01562836, + -0.008959139, + 0.017374907, + -0.008868577, + -0.011934738, + 0.006138789, + 0.0034187038, + -0.016792726, + -0.012723918, + -0.0168186, + -0.016844476, + 0.0169221, + 0.010860935, + 0.0039006216, + 0.011591896, + -0.014606307, + 0.015718922, + -0.0003416278, + -0.00038286572, + 0.00014958851, + -0.0055177948, + 0.007827118, + -0.0011853878, + 0.0067468463, + -0.039355524, + 0.01296326, + -0.008124677, + 0.0066562844, + -0.012885635, + -0.052706905, + -0.026172329, + 0.00087650784, + 0.008674516, + 0.01811234, + -0.011714802, + -0.0054789823, + -0.0041917125, + -0.0013471051, + -0.014502808, + 0.0060676336, + -0.0006072485, + -0.001574318, + -0.0084093, + 0.010860935, + 0.017038535, + -0.0021136452, + 0.021424308, + 0.028125875, + 0.017581906, + -0.00033576557, + 0.029419612, + -0.008752141, + -0.020712754, + -0.0023740102, + 0.007109093, + 0.00022701068, + 0.0044892724, + 0.0069279694, + -0.03260221, + 0.008758609, + 0.018733334, + 0.013441943, + 0.0025923285, + 0.018371087, + -0.034594566, + -0.0030613088, + -0.013196132, + 0.051439043, + 0.030040607, + -0.021760682, + -0.012445764, + 0.0054854513, + -0.0074325274, + 0.02478803, + 0.0125169195, + -0.013791252, + 0.016119981, + -0.015291989, + -0.031308472, + 0.005977072, + -0.017129097, + -0.023222605, + 0.0037486071, + 0.008480456, + 0.032679833, + -0.040105894, + -0.03487919, + 0.049187936, + 0.039459024, + -0.038449906, + -0.021980617, + -0.0070767496, + 0.0012702894, + -0.024141159, + -0.037337292, + 0.0070055937, + -0.0022672766, + 0.040468138, + 0.017982965, + -0.027530754, + 0.04486685, + -0.002137903, + -0.026482826, + -0.024503406, + -0.024956215, + 0.005016471, + 0.010802716, + 0.014929742, + 0.013467818, + 0.021243185, + -0.008920327, + 0.0013099102, + -0.006513973, + 0.024425782, + -0.03793241, + 0.00328933, + 0.013545441, + 0.006119383, + -0.0047900667, + -0.008059991, + -0.0056406995, + 0.030972099, + 0.0048094727, + -0.0027427257, + -0.020402256, + -0.0018662177, + 0.005673043, + -0.012717449, + 0.023817725, + 0.012827417, + 0.0014692018, + 0.016999723, + -0.0019567795, + 0.017827716, + -0.044219982, + 0.0069538443, + -0.04931731, + 0.0048968, + 0.030402854, + -0.005876807, + 0.012342265, + 0.028772743, + 0.020686878, + 0.0049744244, + -0.010395189, + 0.0075101517, + -0.032576334, + 0.027039135, + -0.020466942, + 0.03330083, + 0.00044795693, + 0.034930937, + 0.007859461, + -0.016158793, + 0.003978246, + 0.01157249, + -0.0095930705, + -0.0068438766, + -0.008538674, + -0.009146731, + 0.0009783898, + -0.017129097, + 0.0017497813, + -0.001466776, + 0.024011785, + -0.004550725, + 0.01143018, + 0.027763627, + -0.015059115, + -0.0069991252, + -0.66901803, + -0.032653958, + 0.004961487, + -0.0085904235, + 0.0080988025, + 0.013390193, + 0.0239471, + 0.028255248, + -0.003522203, + -0.016003545, + 0.009386073, + 0.007063812, + 0.0042078844, + -0.023934161, + 0.0125233885, + -0.021825368, + -0.0053981235, + 0.010893278, + -0.00018577276, + 0.0017788904, + -0.008765078, + 0.019108517, + -0.0018112338, + -0.00398148, + 0.021411372, + 0.022834484, + 0.009638351, + -0.016495166, + -0.015020303, + 0.012102923, + -0.015304926, + 0.011792426, + 0.013099102, + -0.023106169, + 0.025447836, + -0.003709795, + -0.024555156, + 0.028824493, + 0.0054886853, + 0.029962983, + -0.028384622, + -0.0021750978, + 0.017323159, + -0.02305442, + -0.010666873, + 0.010847997, + 0.017568968, + -0.00046129862, + 0.046833333, + -0.014024125, + 0.012769199, + -0.030014733, + -0.015718922, + 0.01844871, + 0.018254649, + 0.015990607, + 0.046212338, + 0.009858287, + -0.008467519, + 0.0031146754, + -0.009987661, + -0.018086463, + 0.0013495309, + 0.002897974, + 0.007445465, + 0.00079120195, + -0.0252279, + -0.023507228, + -0.020104695, + -0.022329926, + -0.0035933587, + 0.016158793, + -0.03904503, + 0.02423172, + 0.0061064456, + -0.010796247, + 0.029911233, + -0.007102624, + -0.0024710405, + -0.017206721, + 0.002055427, + -0.015123802, + -0.02853987, + -0.015123802, + 0.01741372, + -0.010472813, + -0.014670994, + -0.020893876, + 0.015757734, + 0.026987385, + 0.009612476, + 0.015046178, + -0.01839696, + 0.0003299033, + -0.017103223, + 0.03216234, + -0.01646929, + 0.0032181744, + -0.011320212, + -0.025033839, + 0.000618973, + -0.03270571, + -0.0037453729, + 0.013312569, + 0.02913499, + -0.0064428174, + -0.0077494932, + 0.031877715, + 0.015641298, + -0.014399309, + 0.0004980893, + -0.013176726, + -0.021631308, + 0.0009832412, + 0.014502808, + -0.022498112, + 0.04877394, + 0.013234944, + 0.024218785, + -0.015874172, + 0.007607182, + -0.0003988353, + 0.014231123, + -0.0182029, + 0.020570442, + 0.008965608, + -0.013648941, + -0.009146731, + -0.009599539, + 0.024218785, + -0.011967081, + 0.011346086, + 0.010207596, + -0.0065269107, + -0.030583978, + 0.0065269107, + 0.01662454, + -0.026094705, + 0.013881814, + -0.013312569, + -0.01687035, + 0.0033507827, + -0.026651012, + 0.007833586, + -0.023481352, + -0.027065009, + -0.028358746, + -0.007128499, + -0.027686004, + -0.012329328, + -0.018332275, + -0.025991205, + -0.042977992, + 0.007671869, + 0.013299632, + 0.0028947399, + -0.015990607, + -0.0078077116, + -0.028332872, + 0.006614238, + 0.024956215, + 0.011967081, + -0.015421363, + 0.003324908, + -0.010304627, + -0.024205847, + -0.009981193, + 0.02903149, + 0.00025308758, + -0.042822745, + -0.0026004142, + 0.0050229398, + -0.002137903, + 0.013868877, + -0.011837707, + -0.00040328252, + -0.0031454016, + -0.037984163, + -0.006850345, + -0.010298158, + 0.012568669, + 0.029393738, + -0.015304926, + 0.0046024746, + 0.03423232, + 0.012549263, + 0.022679236, + 0.023274355, + 0.0025680708, + 0.010511625, + -0.015123802, + -0.004977659, + 0.013545441, + -0.0077883056, + 0.008726266, + -0.0033281422, + 0.022265239, + -0.012872698, + -0.00095332356, + -0.011087338, + 0.029600736, + -0.0019017955, + -0.005094095, + -0.011514273, + 0.029755985, + -0.033870075, + 0.009159668, + -0.005210532, + 0.013907689, + 0.025253775, + -0.007704213, + -0.025745396, + 0.0020344038, + -0.022627486, + 0.01641754, + 0.010110566, + -0.01687035, + 0.028358746, + -0.0054886853, + -0.00026905717, + 0.01063453, + 0.011954144, + 0.03635405, + 0.0006104828, + -0.015887108, + 0.0037874193, + 0.006649816, + 0.020906813, + 0.009787131, + -0.011281399, + -0.02804825, + -0.0077624307, + 0.000054630127, + 0.006513973, + -0.015279051, + 0.0025179384, + 0.008959139, + -0.016404605, + -0.0049841274, + 0.0050714547, + 0.020402256, + 0.030972099, + 0.022950921, + 0.0077818367, + 0.03244696, + -0.0034963281, + 0.00796296, + 0.026288766, + -0.02449047, + 0.013726565, + -0.008881515, + -0.012374609, + -0.024115285, + 0.0058250576, + 0.018086463, + 0.0038359344, + 0.032628085, + -0.0063781305, + 0.0040396983, + 0.010906215, + -0.0004334024, + -0.0010632913, + 0.016728038, + -0.005912385, + -0.0072578727, + 0.008913858, + -0.023287293, + -0.014554557, + 0.0029189973, + -0.0059447284, + -0.012853292, + -0.008467519, + 0.014774493, + 0.0008178853, + 0.017129097, + 0.0022624251, + -0.0077430247, + -0.017090285, + 0.018358149, + 0.0336372, + -0.0033895948, + -0.02240755, + 0.014308748, + -0.0011603216, + -0.014515745, + -0.018422836, + -0.018177025, + 0.018513398, + -0.017646592, + 0.0072449353, + 0.016326979, + -0.0062519913, + 0.024154097, + -0.0005373058, + 0.0018079996, + -0.022886233, + -0.001822554, + -0.0007689658, + 0.023222605, + 0.005980306, + -0.011139088, + 0.00031231655, + -0.027220257, + -0.013855939, + 0.016378729, + 0.011857113, + -0.016947974, + -0.008364019, + -0.006420177, + -0.0251244, + -0.023093231, + -0.009871225, + 0.004013824, + 0.011223181, + 0.013390193, + 0.008053522, + -0.019328453, + -0.018358149, + 0.023584852, + 0.004159369, + -0.021113811, + -0.029238489, + -0.011449586, + -0.0014821391, + 0.05852873, + 0.009916506, + -0.006306975, + 0.017077347, + -0.002411205, + -0.0194837, + -0.017737154, + 0.012820948, + -0.00930198, + 0.010097628, + 0.013196132, + -0.007859461, + -0.007587776, + -0.009890631, + -0.014748619, + -0.0019406077, + 0.0066821594, + -0.009877693, + 0.019328453, + -0.007594245, + -0.010472813, + 0.0090820445, + -0.0051523135, + 0.02606883, + -0.023390792, + -0.011113213, + 0.022394612, + -0.014567495, + 0.015123802, + -0.01236814, + -0.012161141, + 0.016262293, + -0.0058638696, + -0.0024500173, + -0.025706584, + -0.01697385, + -0.016107043, + 0.008027648, + 0.029238489, + -0.0019001784, + 0.027479006, + 0.0066950964, + 0.0009306831, + -0.025603084, + 0.000605227, + 0.0065754256, + -0.009974724, + 0.02137256, + 0.0066821594, + -0.013687753, + 0.00008136402, + -0.0019858885, + -0.003997652, + -0.0042984462, + 0.0040526357, + 0.00009975937, + -0.013273757, + -0.024645718, + 0.009366667, + -0.01741372, + -0.0038909183, + 0.0034639847, + 0.030816851, + -0.0052364063, + -0.03565543, + -0.024063535, + -0.0013940032, + -0.011798895, + -0.0080858655, + -0.007794774, + -0.0052816872, + -0.015343738, + -0.042072374, + 0.012064111, + 0.04719558, + 0.024645718, + 0.030532228, + -0.0120511735, + 0.0045442563, + 0.01953545, + 0.0043987106, + -0.010375783, + 0.0060223527, + -0.006119383, + -0.0105310315, + -0.0052267034, + 0.021036187, + -0.012070579, + -0.01434756, + 0.027789501, + 0.026198205, + -0.0054304674, + 0.02903149, + -0.027737753, + -0.007937086, + -0.009263167, + -0.0014675845, + 0.02542196, + -0.028074125, + -0.012665699, + 0.017012661, + -0.019781262, + 0.012588075, + -0.035396684, + -0.019781262, + 0.01018819, + -0.0041787755, + -0.009418416, + -0.03169659, + 0.011171431, + 0.0006618281, + -0.020790378, + -0.004023527, + -0.014852118, + 0.028876243, + 0.01627523, + -0.026159393, + 0.012199954, + -0.0047674263, + -0.032032963, + 0.009780663, + -0.03542256, + 0.026935635, + 0.0014683931, + -0.03679392, + 0.005372249, + 0.011928269, + -0.009237292, + 0.01890152, + 0.008629235, + 0.004744786, + 0.01800884, + -0.027789501, + -0.014037062, + -0.026935635, + -0.007212592, + 0.012555731, + 0.009334323, + -0.015097928, + 0.014127624, + -0.009935912, + 0.019600138, + -0.0029545752, + -0.015072053, + -0.011727739, + -0.02631464, + 0.011585428, + -0.0010333736, + 0.0063781305, + 0.028229373, + 0.01608117, + 0.0050358768, + -0.03596593, + 0.017750092, + -0.013073227, + -0.019224953, + -0.006164664, + -0.016145855, + 0.011449586, + 0.013894751, + 0.016042357, + 0.0036192334, + 0.0073225596, + 0.005543669, + -0.0065366137, + 0.0056665745, + 0.009017357, + -0.0019470764, + -0.027116759, + -0.005669809, + 0.011902394, + 0.012083517, + 0.015563673, + 0.008933264, + 0.01152721, + 0.029212615, + -0.005317265, + 0.00062705885, + -0.03482744, + -0.026780386, + 0.001640622, + -0.016999723, + -0.011734208, + 0.0043696016, + 0.0014303896, + 0.013713628, + 0.0067468463, + -0.003897387, + -0.015473112, + -0.00925023, + 0.029652486, + -0.014632182, + 0.044763353, + -0.025344336, + 0.014321685, + -0.009127324, + -0.038812153, + -0.023106169, + -0.0061873044, + -0.020130571, + 0.0059447284, + 0.008376957, + 0.0032197917, + -0.02433522, + 0.021980617, + -0.0027799206, + 0.018979143, + -0.0007612842, + -0.0071996544, + -0.018177025, + -0.03358545, + -0.024050599, + -0.022575736, + -0.02869512, + 0.016585726, + -0.014412247, + -0.03167072, + 0.020454004, + 0.0022769796, + -0.007102624, + -0.010479282, + -0.009269636, + 0.025163213, + 0.013933564, + 0.026237017, + 0.013881814, + -0.0050358768, + -0.011714802, + -0.022523986, + -0.025913581, + -0.017918278, + 0.021424308, + 0.022420488, + 0.0047415514, + 0.010472813, + 0.0135066295, + -0.0030499885, + 0.012866229, + -0.016003545, + -0.0012161141, + 0.013933564, + 0.0068180016, + -0.005026174, + 0.00945076, + -0.017504282, + 0.023339042, + -0.007950023, + -0.008635704, + 0.010291689, + -0.0005227512, + -0.021825368, + -0.0012581607, + -0.01844871, + 0.035629556, + 0.01687035, + -0.011928269, + 0.015744798, + -0.016702164, + -0.009554259, + 0.0026699528, + 0.0068891575, + 0.035344936, + 0.0009694953, + 0.0055080913, + 0.0076848064, + 0.0074389963, + -0.015563673, + -0.00885564, + 0.009431354, + 0.029445488, + -0.015550736, + -0.0043598986, + -0.0110355895, + 0.020764502, + 0.03032523, + -0.01454162, + 0.002259191, + 0.0120252995, + -0.01137843, + 0.015162615, + 0.020001197, + -0.0037033265, + -0.01741372, + 0.0044601634, + -0.03037698, + 0.00420465, + -0.026379328, + -0.011714802, + -0.00026663142, + -0.03423232, + 0.0016737741, + 0.010265815, + 0.024891527, + 0.009515447, + 0.0052331723, + 0.0021136452, + 0.028902117, + -0.014114686, + -0.0052752187, + 0.0033895948, + 0.01068628, + 0.016753914, + -0.016495166, + 0.00413026, + -0.0009694953, + -0.041037384, + 0.017517218, + 0.010311096, + -0.033119705, + -0.0031890653, + 0.022730986, + -0.0038941528, + 0.004773895, + -0.016016481, + -0.0038197627, + 0.002102325, + 0.0012056025, + -0.012866229, + 0.0041884785, + -0.0056924494, + -0.017995901, + 0.015175552, + 0.009683632, + -0.0060126497, + 0.00791768, + 0.0048903315, + -0.010252877, + 0.012284047, + -0.01513674, + 0.0017708045, + 0.0016066615, + 0.018021777, + -0.0014675845, + -0.015990607, + 0.011100276, + -0.004366367, + -0.008364019, + -0.0014643503, + 0.009192012, + 0.008124677, + 0.0036774515, + 0.0144898705, + -0.0039847144, + 0.019651888, + -0.03260221, + -0.0073743095, + -0.014231123, + -0.034542818, + -0.02641814, + -0.020337569, + -0.02547371, + 0.007633057, + -0.010666873, + -0.028125875, + 0.0021815666, + -0.005795948, + 0.008668047, + -0.018384025, + 0.0053690146, + -0.0022478707, + 0.008900921, + -0.0019729512, + -0.004476335, + 0.026094705, + 0.0038068255, + -0.0029092943, + -0.0078077116, + 0.0048968, + 0.006239054, + -0.017271409, + 0.0033863604, + -0.0015597634, + -0.008739203, + -0.018733334, + 0.018319337, + 0.012109392, + 0.011009715, + -0.008972077, + -0.020686878, + 0.00727081, + 0.004579834, + 0.022562798, + 0.02696151, + 0.032886833, + -0.012723918, + -0.027686004, + -0.02286036, + -0.020466942, + 0.014140561, + -0.021657182, + -0.007801243, + 0.030635728, + 0.009166137, + -0.008829765, + -0.031386096, + -0.002327112, + -0.004269337, + 0.0055274977, + 0.014231123, + -0.00022559565, + -0.011274931, + 0.004026761, + 0.016728038, + -0.007044406, + 0.0021055595, + -0.005391655, + -0.011785957, + 0.00027896237, + 0.008913858, + 0.001550869, + -0.0038003568, + -0.014722744, + -0.013338444, + -0.016508102, + -0.0012403717, + -0.007341966, + -0.02156662, + -0.021087937, + 0.024904465, + 0.00939901, + -0.015990607, + 0.0026521639, + -0.040778637, + -0.020285819, + -0.0004916206, + -0.0066110035, + 0.005158782, + -0.030040607, + -0.0050358768, + 0.0011554701, + -0.001466776, + -0.018293463, + -0.022562798, + 0.003690389, + 0.023623664, + 0.012698043, + 0.2370129, + 0.008454581, + 0.0027119992, + 0.04199475, + -0.008875046, + 0.014205248, + 0.027039135, + 0.0049291435, + 0.016443416, + 0.023015607, + -0.02750488, + 0.0011109979, + 0.009386073, + 0.010938559, + -0.011850644, + -0.014554557, + -0.01811234, + -0.015304926, + 0.01310557, + 0.0023109403, + 0.008021179, + 0.000092381015, + 0.0040041204, + -0.021256123, + 0.015304926, + 0.021993553, + -0.0022915343, + -0.001701266, + 0.019328453, + 0.020259945, + 0.005411061, + -0.020945625, + -0.008286395, + -0.00024257596, + -0.004456929, + -0.0085710175, + -0.0023869474, + -0.0026521639, + 0.0222523, + 0.024813903, + -0.0040688077, + -0.0144769335, + -0.020997375, + 0.014127624, + -0.006552785, + -0.0051070326, + -0.019858886, + -0.012782136, + 0.01687035, + 0.0072449353, + -0.017944153, + -0.0072772787, + 0.02324848, + 0.023274355, + -0.00004644319, + 0.0061711324, + 0.02859162, + -0.018138213, + 0.00640724, + 0.00865511, + -0.006119383, + 0.035267312, + -0.020945625, + 0.023636602, + 0.010996777, + -0.008344613, + -0.002513087, + -0.00048515192, + 0.024425782, + -0.012070579, + 0.006300506, + -0.0031421673, + -0.0031648078, + 0.015964733, + 0.01760778, + 0.007937086, + 0.026832135, + 0.010957965, + 0.0095736645, + 0.002344901, + -0.010977371, + -0.0075554326, + -0.004421351, + 0.028384622, + 0.00058056513, + -0.017180847, + -0.0062455223, + 0.008150552, + 0.029419612, + 0.009631883, + 0.00390709, + 0.0017643358, + 0.0052008284, + 0.017193785, + 0.015317864, + 0.022278177, + 0.008422238, + 0.00885564, + -0.018992081, + -0.0023060888, + -0.029109115, + -0.0115207415, + 0.01879802, + 0.002307706, + -0.02696151, + 0.011003246, + 0.004211119, + -0.021760682, + 0.029238489, + 0.0044860383, + 0.004026761, + -0.009192012, + 0.008784484, + 0.0013325507, + 0.0059447284, + -0.0029303175, + 0.005158782, + -0.031618968, + -0.017245533, + -0.0063231466, + -0.008525737, + -0.020738628, + -0.010841528, + -0.0013163789, + -0.008234645, + -0.025486648, + -0.01562836, + 0.013674815, + 0.0073290286, + -0.03780304, + 0.0065107387, + -0.012892104, + 0.024451656, + -0.0026861245, + -0.0017109691, + -0.0021314342, + 0.013687753, + -0.0080858655, + 0.016857412, + -0.012601012, + 0.008519268, + -0.008131146, + 0.016546914, + -0.0010738029, + 0.0052267034, + -0.011876519, + 0.0044439915, + -0.008480456, + -0.014451059, + -0.027530754, + -0.01795709, + -0.006219648, + 0.0018662177, + -0.021152625, + 0.026094705, + -0.012070579, + -0.00045765997, + 0.0020667473, + 0.028436372, + 0.01370069, + -0.009463697, + 0.0063393186, + 0.013817127, + -0.0021087937, + -0.007503683, + 0.0025858597, + -0.16487403, + 0.0057571363, + 0.044219982, + -0.03314558, + -0.022045303, + 0.00796296, + 0.0095801335, + 0.023558978, + -0.014735681, + 0.039640147, + 0.00035961886, + 0.011132619, + -0.04572072, + -0.0026020315, + -0.010847997, + 0.0036095304, + -0.005391655, + 0.019250829, + -0.011578959, + 0.006921501, + 0.011443117, + -0.018616896, + 0.007037937, + 0.014127624, + -0.0037712476, + -0.019431952, + -0.02305442, + 0.021644244, + 0.01038872, + -0.02300267, + -0.009489572, + -0.0003606296, + 0.00051547395, + 0.006400771, + 0.009813006, + 0.0034445787, + 0.003968543, + 0.0026295234, + -0.013868877, + 0.00059754547, + -0.0077688997, + 0.010802716, + 0.017827716, + 0.03348195, + -0.0062778657, + 0.020492818, + 0.011986487, + 0.0009039998, + -0.01221936, + -0.008933264, + 0.009360198, + -0.025137339, + -0.0054045925, + -0.002624672, + 0.005540435, + 0.02067394, + 0.017103223, + 0.01953545, + 0.0009573665, + -0.000321211, + -0.008247583, + -0.03834641, + -0.011766551, + -0.0025454303, + 0.012406952, + 0.009664226, + 0.015887108, + -0.0031551046, + -0.017387845, + 0.008985014, + -0.00221391, + -0.02088094, + -0.0061226175, + -0.019781262, + 0.004903269, + 0.011093807, + 0.0030790975, + -0.026094705, + -0.011934738, + -0.01009116, + -0.002120114, + 0.050171178, + -0.017646592, + 0.0125233885, + -0.013674815, + 0.01592592, + 0.00041803924, + 0.004560428, + -0.027427256, + 0.0015678493, + 0.029109115, + -0.010052348, + 0.00846105, + -0.02853987, + 0.010744498, + 0.0043501956, + 0.0054498734, + -0.00571509, + 0.0004378496, + 0.0018079996, + -0.013674815, + 0.010097628, + -0.018862708, + 0.021605432, + 0.032860957, + -0.00930198, + -0.016339917, + 0.018319337, + 0.03749254, + -0.005210532, + -0.022174677, + 0.010699217, + 0.009819475, + 0.020014133, + 0.016184669, + -0.005857401, + 0.014877993, + -0.0061452575, + 0.024050599, + 0.029471362, + 0.04230525, + -0.020518692, + -0.015473112, + 0.016314043, + 0.0071802484, + -0.016158793, + -0.08569723, + 0.003531906, + -0.0037033265, + 0.021346685, + 0.0077106813, + 0.028798617, + 0.021631308, + 0.035267312, + 0.00687622, + 0.01518849, + -0.012232297, + -0.011669521, + -0.01608117, + 0.009754788, + 0.0008522502, + -0.011391367, + 0.01083506, + -0.032576334, + -0.04574659, + 0.016145855, + 0.000981624, + -0.0030241136, + 0.012801542, + -0.0077300873, + 0.006365193, + -0.037673663, + -0.038605157, + 0.0110355895, + 0.0035157343, + 0.0034154695, + 0.02349429, + -0.027039135, + -0.016986785, + -0.013312569, + -0.021708932, + -0.0149814915, + -0.021281999, + -0.019263767, + 0.011941206, + -0.03961427, + -0.008991483, + 0.018306399, + 0.0168186, + -0.015563673, + 0.015162615, + -0.0058379946, + -0.016197605, + 0.012549263, + -0.009386073, + -0.022627486, + 0.012665699, + 0.0045054443, + -0.008680985, + -0.023416666, + 0.026599264, + -0.011734208, + 0.008564549, + 0.030144107, + -0.013687753, + 0.00895267, + -0.0022656594, + 0.028617496, + -0.0004867691, + 0.020945625, + 0.0050100023, + -0.026482826, + -0.025680708, + -0.0009444291, + 0.009800069, + -0.037259668, + -0.036198802, + -0.003531906, + -0.0029384035, + -0.013894751, + -0.028902117, + -0.008182895, + -0.013648941, + 0.016896224, + -0.0016333448, + -0.0054983883, + -0.017530156, + -0.022562798, + 0.0057991827, + 0.006064399, + -0.001644665, + 0.03555193, + -0.031748343, + -0.018772146, + 0.0024144393, + -0.0015686579, + -0.0060417587, + 0.019134391, + 0.013124976, + -0.016249355, + -0.025098527, + 0.018371087, + -0.0025001497, + 0.014670994, + 0.02734963, + -0.01890152, + -0.022433424, + 0.00079686206, + -0.05387127, + 0.019315515, + -0.005165251, + -0.013959438, + -0.013429006, + -0.0043437267, + 0.005805651, + -0.0063037407, + -0.0067597837, + 0.007193186, + -0.008351082, + 0.017866528, + -0.010343439, + 0.002391799, + -0.0044957413, + 0.0054789823, + 0.009036764, + 0.017504282, + -0.0047577233, + -0.00801471, + -0.015537799, + -0.0018338743, + 0.017672468, + 0.017737154, + -0.029367864, + 0.004773895, + -0.008842702, + 0.001822554, + -0.022394612, + -0.01370069, + 0.03819116, + -0.036923297, + 0.0043404927, + 0.04947256, + -0.010653936, + -0.039950643, + -0.029859483, + 0.030092357, + 0.03423232, + -0.040287014, + -0.00791768, + -0.025848895, + 0.011456054, + -0.024593968, + 0.007982367, + 0.031644844, + -0.015641298, + 0.006921501, + 0.010673342, + 0.0007115562, + 0.022523986, + 0.016883288, + 0.0011045292, + 0.0010754201, + -0.010265815, + -0.025797145, + 0.02354604, + -0.016055295, + 0.029290238, + -0.025745396, + 0.011798895, + 0.0055727786, + 0.013312569, + 0.008079397, + 0.020686878, + -0.011158494, + 0.024865653, + 0.0037680133, + -0.0049905963, + -0.014774493, + 0.005753902, + 0.010446938, + 0.026780386, + 0.016805662, + 0.020363443, + 0.002352987, + 0.023468416, + 0.0075101517, + -0.016404605, + 0.018138213, + 0.019845948, + -0.0027152337, + -0.023313167, + 0.014037062, + 0.035836555, + 0.0002749194, + -0.036172926, + 0.017750092, + 0.010304627, + 0.0036030617, + -0.017504282, + 0.0056762774, + 0.008215239, + 0.004615412, + 0.008351082, + 0.0041076196, + -0.00472538, + 0.01454162, + -0.0036483426, + 0.021100875, + -0.015343738, + -0.022769798, + 0.0066821594, + -0.02552546, + -0.012969729, + 0.005346374, + -0.0050035333, + -0.017970027, + -0.0076395255, + 0.003402532, + 0.0042919773, + 0.0011012949, + 0.004139963, + 0.007658932, + 0.004589537, + -0.006219648, + -0.028953867, + -0.023804788, + -0.022472236, + 0.015615423, + 0.0015557205, + 0.008972077, + -0.005905916, + 0.001896944, + 0.0063748965, + 0.01058278, + 0.018189963, + -0.011197306, + 0.030532228, + 0.02582302, + 0.010479282, + 0.0062455223, + -0.0009436205, + -0.0067015653, + 0.001402089, + -0.022718048, + 0.0034898594, + 0.011747145, + -0.01276273, + 0.06810239, + 0.0030338168, + -0.022601612, + 0.03487919, + -0.013726565, + 0.033430204, + 0.008441644, + 0.009528384, + -0.022032365, + -0.009780663, + -0.0017999136, + 0.019548388, + 0.011404305, + -0.028850367, + -0.02908324, + -0.019224953, + -0.024852715, + 0.0059382594, + -0.0004519999, + -0.015253177, + 0.018707458, + -0.01725847, + 0.007924148, + 0.015059115, + -0.022187615, + -0.024115285, + 0.0144898705, + -0.0020360209, + 0.0006181644, + 0.0032214087, + 0.021683056, + -0.0045539592, + -0.03293858, + -0.0051070326, + 0.014231123, + -0.015822422, + -0.011675989, + -0.019199079, + -0.008887983, + -0.0038100597, + 0.010828591, + 0.027479006, + -0.010155847, + -0.008499862, + 0.013196132, + -0.014049999, + -0.0034995626, + 0.008661579, + -0.0046024746 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 9, + "total_tokens": 9 + } +} +823 1755 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 621 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003ein sitting room, the color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003ckv key=\"square_feet\"\u003e400\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 930 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:07 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 512 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999887 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_279715e3786a4b0886008f730b3540e3 + +{ + "id": "chatcmpl-EREN4hkkIWxccR7iFsY4pnbKn3bmV", + "object": "chat.completion", + "created": 1790158806, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The lamp beside the desk in the sitting room is purple. There is no information provided about lamps in any other rooms.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 113, + "completion_tokens": 24, + "total_tokens": 137, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_b95af6e96a" +} diff --git a/vectorstores/dolt/testdata/TestDoltAsRetrieverWithScoreThreshold.httprr b/vectorstores/dolt/testdata/TestDoltAsRetrieverWithScoreThreshold.httprr new file mode 100644 index 000000000..a4fcc4ae3 --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltAsRetrieverWithScoreThreshold.httprr @@ -0,0 +1,9416 @@ +httprr trace v1 +441 168112 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 245 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["The color of the house is blue.","The color of the car is red.","The color of the desk is orange.","The color of the lamp beside the desk is black.","The color of the chair beside the desk is beige."]}HTTP/2.0 200 OK +Content-Length: 167155 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:21:15 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 163 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-9qscs +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999954 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_53fbbfac246b4955aa754489bc792868 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0045962376, + 0.00861834, + -0.008126223, + -0.0057255807, + -0.016656235, + 0.023255637, + -0.0021608942, + 0.0004629361, + 0.03417052, + -0.009558408, + -0.021224082, + 0.019343946, + 0.008006349, + -0.017110497, + -0.008088369, + -0.009735065, + 0.019672023, + -0.024353435, + 0.018031636, + -0.0012744544, + -0.03485191, + 0.028063232, + -0.0003330064, + -0.0025457542, + -0.0055268416, + -0.005293402, + 0.01669409, + -0.013539501, + 0.017047405, + 0.007836002, + -0.0042019137, + -0.01500323, + -0.011741384, + -0.009659355, + -0.010170398, + -0.0058580735, + -0.0010071029, + 0.0023943337, + -0.007186156, + 0.000008675122, + 0.01755214, + -0.0024795078, + 0.0055457694, + -0.030965455, + -0.0057445085, + 0.005832837, + 0.0017397564, + 0.0144227855, + -0.022713048, + 0.008290263, + 0.0053501846, + 0.026296662, + -0.0006660128, + -0.03437241, + 0.0062997164, + -0.011110466, + 0.0062050787, + 0.015596293, + 0.0025773, + -0.004785513, + 0.010145161, + -0.02176667, + -0.011899114, + -0.012328138, + -0.029602673, + -0.010511094, + -0.017905453, + -0.010498475, + 0.005618325, + 0.022511154, + 0.019268235, + 0.024782458, + 0.0139180515, + -0.001563888, + 0.012782399, + 0.013451172, + -0.023444913, + -0.012290282, + 0.0012602587, + 0.010908572, + 0.006561547, + -0.004507909, + -0.033287235, + 0.007507924, + 0.029224122, + 0.017791888, + -0.015911752, + 0.014902283, + -0.039899256, + 0.0029921287, + 0.024429144, + 0.041716296, + 0.016845511, + -0.008959035, + -0.009053674, + -0.014183037, + 0.011993751, + 0.029880276, + 0.006914861, + -0.026220951, + -0.00060213235, + 0.011318669, + -0.048025478, + 0.00761518, + -0.03015788, + 0.0017019013, + -0.0023186237, + -0.004255542, + 0.027432315, + -0.029577436, + -0.025337666, + 0.027508024, + 0.024782458, + -0.031520665, + -0.00094085647, + -0.00008300515, + 0.0006277634, + -0.011854949, + -0.0102397995, + 0.01654267, + 0.009911722, + 0.021817144, + 0.014637298, + 0.017640468, + -0.004946397, + 0.005485832, + -0.021968564, + -0.044113785, + -0.005362803, + -0.0021640488, + 0.009413296, + 0.021526922, + 0.015836041, + 0.0018312394, + -0.025640508, + -0.0038643728, + -0.026094768, + 0.028416546, + -0.024656275, + -0.00353945, + 0.009779229, + 0.019558458, + -0.023369202, + -0.0035993871, + 0.019836063, + 0.02861844, + 0.003400648, + -0.0028706768, + -0.0105174035, + -0.030258827, + 0.017779268, + -0.031596374, + 0.0141451815, + 0.020580545, + 0.020984333, + 0.0360128, + -0.008977963, + 0.012662524, + -0.03333771, + 0.013526882, + -0.025716217, + -0.0013304483, + 0.036441825, + -0.006362808, + 0.034321938, + 0.018839212, + 0.017564757, + 0.0049053873, + -0.028366074, + 0.0011963783, + -0.012403848, + 0.035810906, + -0.039571177, + 0.021640487, + 0.007886475, + 0.01523036, + -0.0057034986, + 0.0015607334, + -0.01669409, + -0.0049716337, + -0.041665826, + -0.0055299965, + 0.0111987945, + 0.006681422, + -0.0016798192, + 0.012946437, + 0.016138883, + -0.008353354, + 0.017817125, + 0.0018959086, + 0.021514304, + 0.004731885, + -0.0024479618, + -0.00040891374, + -0.6856312, + -0.017981162, + 0.010132543, + -0.02200642, + 0.02161525, + 0.021526922, + 0.026725687, + 0.0070284265, + -0.01577295, + -0.017211443, + -0.005914856, + -0.0013501645, + -0.010088379, + -0.0015402286, + 0.0032902374, + -0.0035236771, + 0.007829692, + 0.01008207, + 0.0049905614, + 0.005022107, + -0.0075647067, + -0.009324968, + -0.015066322, + 0.001839126, + 0.01577295, + 0.009823393, + 0.014788718, + 0.0016861283, + -0.028896045, + 0.014902283, + -0.015735095, + 0.03470049, + -0.0020094737, + 0.008719287, + 0.03263108, + 0.0047129574, + -0.02114837, + 0.036896084, + 0.021791907, + 0.013829722, + -0.0024952807, + -0.0036151602, + 0.019343946, + -0.00020209092, + -0.010126234, + 0.006255552, + 0.009501625, + -0.010933809, + 0.010334437, + 0.0074069775, + 0.00669404, + -0.009451152, + -0.00892749, + 0.021034807, + 0.021299792, + 0.00046254176, + 0.036492296, + 0.020795057, + -0.010151471, + -0.0066435663, + -0.00815146, + 0.0025268267, + -0.012485867, + -0.021400739, + -0.015129413, + 0.002026824, + -0.027785629, + -0.01608841, + -0.0141451815, + -0.005340721, + -0.00081625016, + 0.017097877, + -0.02294018, + 0.023053743, + 0.0026277734, + -0.0019590005, + 0.03480144, + -0.008877017, + -0.010801316, + 0.013135713, + 0.015343926, + -0.018019019, + -0.012126244, + -0.018813975, + 0.009028437, + -0.015697239, + -0.01885183, + -0.019911772, + 0.004432199, + -0.027104238, + 0.020214614, + -0.0074069775, + -0.014864428, + -0.025135772, + -0.013299751, + 0.009817084, + -0.0067508225, + 0.02015152, + 0.016138883, + -0.021905473, + -0.017577376, + -0.008971654, + 0.0007425116, + 0.010397528, + 0.03210111, + 0.012302901, + -0.004485827, + 0.023508005, + 0.0039022279, + -0.026246188, + 0.02215784, + -0.0056877257, + -0.015066322, + 0.0061956146, + -0.004763431, + -0.02360895, + 0.014940138, + 0.0076404167, + 0.02977933, + -0.013690921, + 0.02016414, + 0.0032586914, + -0.00073304784, + -0.003369102, + 0.0151041765, + 0.0052965567, + -0.010700369, + -0.0050725807, + -0.0048202137, + 0.00042547533, + 0.0031608993, + 0.011671983, + 0.022069512, + 0.009552099, + 0.013186187, + 0.003378566, + 0.00619246, + -0.008612031, + 0.031192586, + -0.007192465, + -0.014637298, + 0.014536351, + -0.01138807, + 0.0065110736, + -0.00946377, + -0.031949688, + -0.037981264, + -0.018978013, + -0.025097918, + 0.01692122, + -0.005851764, + -0.00074448326, + 0.0019858144, + 0.015608911, + -0.01162151, + 0.011224031, + 0.0012571041, + -0.0008667236, + -0.008397519, + 0.013514264, + 0.023419676, + 0.015899133, + -0.0026987516, + 0.006580475, + -0.01530607, + -0.013842341, + -0.018372333, + 0.013413317, + -0.01261205, + -0.022031657, + 0.007810765, + -0.004078885, + -0.013211423, + -0.016214592, + -0.01838495, + 0.006977953, + -0.03333771, + -0.033135813, + -0.004583619, + -0.012996911, + 0.01806949, + 0.015470109, + -0.004763431, + -0.0027397615, + 0.016530052, + 0.0074889967, + 0.037829842, + 0.032429185, + 0.0043060156, + 0.0071483008, + -0.0014771367, + 0.0144480225, + 0.0012768203, + 0.022183077, + 0.011640437, + -0.009375442, + -0.00077997235, + 0.009154621, + -0.004138822, + 0.014889665, + 0.02476984, + 0.0024905489, + 0.013678302, + -0.020366034, + -0.0027413387, + -0.042902425, + 0.020138903, + 0.002561527, + -0.001892754, + 0.005946402, + -0.019356564, + -0.02208213, + -0.01660576, + -0.013375462, + 0.009665663, + -0.012018988, + -0.005662489, + 0.006422745, + 0.009552099, + -0.006971644, + 0.006031576, + 0.00011908577, + 0.029022228, + -0.00438488, + -0.014460641, + -0.012239809, + 0.0004830466, + 0.011160939, + -0.014864428, + -0.010132543, + -0.021198845, + 0.0073123397, + -0.008107296, + 0.009507935, + -0.0028690996, + 0.0105174035, + 0.018296622, + -0.020252468, + 0.0013951174, + -0.0013170413, + 0.019179907, + 0.026296662, + 0.0017381791, + -0.0076845814, + 0.021817144, + -0.0049116965, + 0.010858099, + -0.00034877934, + -0.020504834, + 0.014864428, + -0.007753982, + -0.0049337787, + -0.014889665, + -0.0005788673, + 0.013375462, + -0.01953322, + 0.02685187, + -0.0056025516, + 0.026145242, + 0.017741414, + 0.03321152, + 0.0060662767, + -0.0007535527, + -0.007817074, + 0.00984232, + -0.0016048977, + -0.020631019, + -0.008283953, + -0.005794982, + -0.025968585, + -0.006100977, + -0.009482698, + 0.029224122, + -0.0015694086, + 0.0007488208, + -0.007331267, + 0.0021593168, + -0.0016656235, + 0.012170408, + -0.009880176, + -0.0078486195, + -0.023381822, + 0.0052460833, + 0.012599433, + -0.000050769184, + -0.009438533, + -0.0303093, + 0.02100957, + -0.015507964, + 0.012971674, + 0.026372373, + 0.0016672008, + 0.0063501894, + -0.008567867, + -0.00488646, + -0.02839131, + 0.0025362903, + -0.0027902348, + 0.015722476, + -0.017060023, + 0.008826543, + -0.0193818, + -0.007974803, + -0.0010165666, + 0.008069442, + 0.022296643, + 0.00885178, + 0.0149275195, + -0.012403848, + -0.022801377, + -0.029501725, + -0.0076277987, + 0.008006349, + 0.009104147, + -0.015293452, + -0.0052681654, + -0.025489086, + -0.02476984, + 0.024429144, + 0.013287133, + -0.00066522416, + -0.0055489237, + -0.01276978, + -0.0008895944, + 0.085602954, + -0.018612081, + 0.0021041115, + -0.001769725, + 0.023331348, + -0.017425954, + -0.016201975, + 0.0061829966, + -0.008347045, + 0.026448082, + 0.011413307, + -0.002197172, + 0.0069211703, + 0.012492176, + 0.00043217881, + -0.0014211428, + 0.024164159, + -0.0116152, + 0.012340756, + -0.019507984, + -0.026725687, + 0.0029495417, + 0.014725626, + 0.007829692, + -0.0040410296, + 0.008990581, + 0.012795017, + 0.0006581263, + 0.021413356, + -0.009627809, + -0.004861223, + 0.013981143, + -0.002235027, + -0.019457512, + -0.00091246516, + -0.020138903, + -0.03439765, + -0.007400668, + 0.01238492, + -0.026220951, + 0.029426016, + 0.012151481, + 0.008984272, + -0.009571026, + 0.002984242, + 0.012006369, + -0.0014637298, + 0.0412368, + -0.013022147, + -0.010183017, + 0.030889746, + -0.017123114, + 0.0014353384, + 0.00438488, + 0.013148331, + 0.015810804, + 0.005933784, + 0.005523687, + 0.01755214, + -0.029804567, + -0.0149275195, + -0.025842402, + -0.015899133, + 0.002908532, + -0.002946387, + -0.03886455, + -0.015091559, + -0.00082413666, + -0.022220932, + -0.015318689, + 0.025993822, + -0.011299741, + -0.018359713, + 0.01515465, + 0.024403907, + 0.022952797, + 0.002925882, + -0.018965395, + -0.019634169, + 0.02016414, + -0.012996911, + -0.0021246164, + 0.015041085, + 0.008839161, + -0.0041230493, + -0.0027350294, + 0.023318728, + -0.027255658, + -0.00792433, + 0.022914942, + 0.004823368, + 0.0019558459, + 0.030359775, + 0.009451152, + -0.008984272, + 0.0043817256, + -0.001984237, + 0.009116765, + -0.01669409, + 0.0024448072, + 0.010933809, + -0.031066403, + -0.013577355, + -0.004548919, + -0.0061041317, + 0.0025063218, + 0.010302891, + -0.0005694035, + -0.04138822, + 0.005302866, + 0.016807655, + -0.017135734, + 0.000028194148, + -0.030208353, + 0.003277619, + 0.023861319, + -0.019331327, + 0.017577376, + 0.0023659426, + -0.03538188, + 0.027205184, + -0.036366113, + 0.025123155, + 0.010763461, + -0.007356504, + 0.004744503, + 0.008895944, + -0.0059211655, + -0.016164118, + 0.0039274646, + 0.0022097903, + 0.00082255935, + -0.022145221, + -0.012946437, + -0.01969726, + -0.013047384, + 0.019444892, + 0.0047728946, + 0.00004029496, + -0.011255577, + -0.0111987945, + 0.011911732, + 0.0030883437, + -0.0017634158, + -0.024731986, + -0.016416486, + 0.00276973, + -0.0144480225, + -0.013552119, + 0.022750903, + 0.016731946, + -0.0076593445, + -0.001903795, + 0.022107366, + 0.006839151, + -0.009873867, + -0.017981162, + -0.004100967, + 0.02161525, + 0.029602673, + 0.006681422, + -0.00030402362, + 0.02176667, + -0.009552099, + -0.016290303, + -0.011968515, + 0.0075836345, + -0.0053911945, + -0.021425975, + 0.01962155, + 0.01631554, + 0.027861338, + 0.015457491, + 0.022271406, + 0.0056372522, + 0.015962224, + 0.0049653244, + -0.0027239884, + -0.015205123, + -0.037527002, + -0.01808211, + 0.0024243025, + -0.019672023, + 0.00423346, + 0.021943329, + -0.0035552229, + 0.010883335, + 0.01953322, + 0.0077792187, + 0.001205842, + 0.02439129, + -0.013665684, + 0.042347215, + -0.0028596357, + -0.0072807935, + -0.0058044456, + -0.008914871, + -0.011495326, + 0.008952727, + 0.0023359738, + 0.018498516, + 0.020366034, + -0.021943329, + -0.008208243, + 0.0033943388, + 0.019583695, + -0.0014006379, + -0.0057413536, + 0.005302866, + -0.012037915, + -0.018675173, + -0.018801356, + -0.012719307, + -0.043381922, + 0.003608851, + 0.010788698, + -0.028643677, + 0.022435443, + -0.005239774, + -0.020580545, + -0.008895944, + -0.0040284116, + 0.011829712, + -0.0040599573, + 0.023735136, + 0.0051829913, + -0.02801276, + -0.0150284665, + 0.011047374, + -0.0146499155, + -0.01515465, + 0.010832862, + 0.0036624789, + -0.012700379, + -0.0034038026, + 0.0110978475, + 0.006801296, + 0.012479558, + -0.011690911, + -0.009173548, + 0.0035205225, + 0.017716177, + -0.017955925, + 0.0074637597, + -0.008580484, + 0.025728837, + -0.0068265325, + -0.021741435, + 0.0051672184, + -0.011123084, + -0.015255597, + -0.009564717, + -0.025817165, + 0.012252428, + 0.004848605, + -0.008119915, + 0.0035899235, + 0.0107950065, + -0.012933819, + -0.0073817405, + -0.009104147, + 0.047066484, + 0.0040820395, + 0.012334446, + 0.015533201, + 0.026347136, + 0.0041640587, + -0.011608891, + 0.010353364, + 0.026220951, + -0.0010496898, + 0.0015701972, + -0.0071735377, + 0.05130625, + 0.021590013, + -0.009741374, + -0.005186146, + -0.014952756, + -0.02215784, + -0.013766631, + 0.0145994425, + -0.00087382144, + -0.015419636, + -0.0034101119, + -0.027861338, + -0.010277654, + -0.027810866, + -0.01300953, + 0.010776079, + -0.0031198894, + -0.016353395, + -0.013678302, + -0.021993801, + 0.027987523, + 0.02099695, + 0.00009715151, + -0.005785518, + 0.010050524, + -0.025211483, + 0.018183056, + -0.023104217, + 0.022485917, + -0.013375462, + 0.008447992, + 0.011791857, + -0.018473279, + 0.010599422, + -0.00042271506, + -0.0283156, + -0.04555228, + 0.009804466, + -0.009198785, + 0.012391229, + -0.0063217985, + -0.018612081, + 0.010750842, + 0.009110456, + -0.015444873, + -0.021791907, + 0.010536331, + -0.0060284217, + -0.0019022177, + 0.021943329, + -0.0140947085, + -0.0032050635, + 0.019041106, + -0.016820274, + -0.00033596382, + -0.0263219, + -0.012795017, + 0.016037935, + 0.025640508, + 0.000056092555, + -0.021918092, + 0.000246058, + -0.015356544, + -0.017905453, + 0.0051262085, + -0.005555233, + 0.0014960644, + 0.03591185, + 0.025186246, + -0.003962165, + 0.0054448224, + -0.02677616, + -0.009501625, + -0.021451212, + -0.021261936, + -0.016227212, + -0.027659444, + 0.00777291, + 0.016832892, + -0.0067318953, + -0.019861298, + 0.00078825315, + 0.0122335, + -0.0035741504, + -0.018498516, + 0.011413307, + 0.015659384, + 0.016668854, + -0.0054826774, + -0.0046277833, + 0.02161525, + -0.0016009544, + 0.005952711, + -0.0057508177, + 0.003839136, + 0.0020394425, + -0.01261836, + 0.021123135, + 0.012056843, + 0.0065741655, + -0.019369183, + 0.009135692, + 0.008416446, + 0.0052366196, + 0.012403848, + -0.008485847, + 0.010990592, + -0.008365973, + 0.012933819, + 0.008372282, + 0.0073438855, + 0.007671963, + -0.008290263, + -0.01823353, + -0.0128518, + 0.0014605751, + -0.011356524, + -0.00039294362, + 0.020731965, + 0.00021451213, + -0.022675192, + -0.0139937615, + -0.01323666, + -0.025198866, + -0.016176738, + 0.0065741655, + 0.001552847, + -0.0047918223, + 0.011571036, + 0.0023817155, + 0.011854949, + -0.0071987743, + 0.002176667, + -0.0137161575, + 0.00022614466, + -0.027533261, + -0.01769094, + 0.002523672, + -0.02670045, + -0.022637337, + -0.024782458, + 0.00004091109, + -0.0012839182, + -0.004324943, + -0.028567966, + 0.027205184, + 0.010372292, + -0.0108707175, + 0.0072303205, + -0.043104317, + -0.015091559, + 0.009571026, + -0.005063117, + -0.008719287, + -0.016290303, + 0.010687751, + 0.0033943388, + -0.0044353534, + -0.0057665906, + 0.010151471, + 0.015836041, + 0.0056246337, + 0.04063112, + 0.22591911, + -0.0003475964, + -0.00011977584, + 0.039217863, + 0.016984312, + 0.021564778, + 0.0144732585, + 0.017034786, + 0.00296216, + 0.015205123, + -0.0037634259, + -0.0050315713, + -0.013438554, + 0.014372312, + 0.00046372472, + -0.035129514, + -0.030334538, + -0.00861834, + -0.0063186437, + 0.007501615, + -0.019608932, + -0.026044294, + -0.0071419915, + -0.008990581, + 0.0029590053, + 0.006555238, + -0.01815782, + 0.014283983, + 0.024214633, + -0.0010796584, + -0.0018848676, + -0.035482828, + 0.010731915, + -0.003416421, + -0.007015808, + -0.0043407157, + 0.005501605, + -0.020883385, + 0.025602652, + 0.02685187, + 0.00040043576, + -0.0035615321, + -0.024467, + 0.0043407157, + -0.013653065, + 0.017148351, + -0.0059211655, + -0.00569088, + 0.008119915, + 0.008397519, + -0.024000121, + -0.021400739, + 0.009375442, + 0.047344085, + -0.0052271555, + 0.010927499, + 0.015760332, + -0.0021514304, + 0.017160969, + -0.0044195806, + -0.027937049, + 0.037880316, + -0.020921241, + 0.028138943, + -0.0010110461, + -0.002069411, + -0.015268216, + 0.0010930655, + 0.00853632, + -0.015596293, + 0.01538178, + 0.010012669, + -0.0012878614, + -0.007009499, + -0.0059747933, + -0.014990612, + 0.031142112, + 0.00626817, + 0.030914983, + 0.013690921, + -0.02393703, + 0.03000646, + -0.022183077, + -0.0011695642, + 0.0112745045, + -0.04010115, + 0.012119935, + -0.024517473, + 0.013539501, + 0.0020993797, + 0.011123084, + 0.0071672285, + 0.00037657918, + -0.0039747832, + 0.01984868, + 0.018208293, + 0.0139180515, + 0.027028527, + -0.028643677, + 0.0072240112, + -0.037350345, + -0.029224122, + 0.017905453, + 0.0051293634, + -0.012530032, + 0.008719287, + 0.017148351, + 0.0015694086, + 0.021325028, + -0.008977963, + 0.025754072, + -0.012637287, + 0.0030015924, + 0.000056536166, + 0.016719326, + 0.0001789244, + -0.0056057065, + -0.025060063, + -0.003940083, + 0.0076277987, + -0.020908622, + 0.0043438706, + -0.01515465, + 0.010788698, + 0.014940138, + -0.023280874, + -0.018637318, + 0.0103092, + 0.0010347056, + -0.048429266, + 0.0006498455, + 0.005318639, + 0.039646886, + -0.0034511215, + -0.0142966015, + 0.03437241, + 0.01577295, + -0.0335396, + -0.0112492675, + 0.002411684, + -0.00091246516, + -0.025640508, + -0.0041262037, + -0.016984312, + -0.0012665679, + -0.010094688, + 0.0064732186, + 0.00037993092, + -0.029526962, + -0.017981162, + -0.019949628, + 0.0011963783, + -0.017943308, + -0.011583654, + 0.020366034, + -0.02099695, + -0.019823443, + -0.012586814, + 0.008813924, + 0.029754093, + -0.010176707, + 0.019672023, + 0.022321878, + 0.0039116917, + -0.019571077, + 0.013564737, + -0.16050553, + 0.027280895, + 0.011123084, + 0.005318639, + -0.012479558, + -0.022826614, + 0.006091513, + 0.006485837, + -0.013678302, + 0.024050593, + 0.025261957, + 0.0083849, + -0.016984312, + 0.000029845378, + -0.024277724, + -0.0014053698, + 0.0008194047, + -0.0069211703, + 0.018119965, + 0.013337607, + 0.013148331, + -0.014940138, + 0.015558437, + 0.0014755594, + -0.0068265325, + -0.01007576, + -0.011766621, + 0.030284064, + -0.001716097, + -0.0315459, + -0.0073880497, + 0.0019053724, + 0.0069653345, + 0.0048139044, + 0.014586824, + 0.001315464, + -0.0017350245, + 0.0075647067, + -0.0075647067, + 0.0049337787, + 0.0108959535, + 0.0024369208, + 0.017564757, + 0.013072621, + -0.02730613, + 0.014586824, + 0.02977933, + 0.028870808, + -0.009501625, + -0.012391229, + -0.019104198, + -0.021905473, + -0.006031576, + -0.013653065, + 0.03533141, + 0.02307898, + 0.0048517594, + 0.012176718, + -0.00013919629, + -0.0055836244, + -0.03061214, + -0.009981123, + 0.004608856, + 0.0053281025, + 0.019596312, + -0.009110456, + 0.008574176, + 0.0052839383, + -0.02376037, + 0.012662524, + -0.013337607, + -0.03147019, + -0.013123094, + -0.0034416576, + -0.003501595, + 0.008340736, + -0.017804505, + -0.00015043451, + -0.0049653244, + -0.021211464, + 0.0020189376, + 0.037754133, + -0.031899214, + -0.024681512, + -0.017022168, + 0.020075811, + -0.0057508177, + 0.006504765, + -0.008668813, + -0.009501625, + 0.008725596, + -0.043432396, + -0.0038265176, + -0.024530092, + 0.02116099, + 0.020340797, + 0.017589994, + -0.001494487, + -0.0027192566, + -0.009217712, + 0.005041035, + -0.007671963, + -0.012479558, + 0.0028517493, + 0.036189456, + 0.0139180515, + 0.0036214693, + 0.02715471, + 0.0315459, + 0.022359734, + -0.00892749, + 0.015987461, + 0.012946437, + 0.013123094, + 0.0027933894, + -0.009343895, + 0.018170439, + -0.015444873, + -0.0029369232, + 0.005362803, + 0.048429266, + 0.0051293634, + -0.018448042, + 0.012454322, + 0.00031723347, + 0.0013541077, + -0.094839595, + -0.010649896, + 0.023848701, + 0.01253634, + 0.0032003315, + 0.0055646966, + -0.0070725908, + 0.03447336, + 0.019924391, + 0.018965395, + -0.0041356673, + -0.013539501, + 0.0060820496, + -0.026574265, + 0.010712988, + 0.0063186437, + 0.01115463, + -0.020302942, + -0.032656316, + 0.016706709, + -0.0027192566, + -0.006416436, + -0.013627829, + -0.008826543, + 0.0021482757, + -0.016492197, + -0.04209485, + 0.026498556, + 0.004918006, + 0.013362844, + 0.028694151, + 0.0020410197, + -0.008088369, + -0.0077035087, + -0.0021088433, + -0.0151041765, + 0.0100631425, + -0.008119915, + 0.01947013, + -0.019419655, + -0.0011601005, + -0.02339444, + 0.0017949617, + -0.041943427, + 0.011564727, + 0.00072042947, + -0.01731239, + 0.015583674, + -0.009911722, + -0.000672322, + -0.005375421, + 0.0108454805, + -0.0056593344, + 0.00010163695, + 0.025653126, + -0.01885183, + 0.014258747, + 0.019495366, + -0.046057016, + 0.007993731, + 0.0044385083, + 0.0057034986, + -0.00003728824, + 0.029097939, + -0.005457441, + -0.005653025, + -0.024668893, + -0.005533151, + 0.0073880497, + -0.03384244, + -0.018044256, + 0.033135813, + 0.0011246114, + 0.023684662, + -0.017791888, + -0.006201924, + -0.04461852, + 0.00077129726, + 0.020933859, + -0.02276352, + -0.01130605, + -0.013766631, + 0.007892784, + -0.026372373, + 0.0033375563, + 0.019747734, + 0.007507924, + 0.009817084, + 0.009552099, + 0.00031683914, + 0.018031636, + 0.023899173, + -0.0145742055, + -0.024517473, + -0.007394359, + 0.012012679, + -0.025817165, + 0.004918006, + 0.008132533, + -0.018183056, + -0.022713048, + -0.023142071, + -0.043028608, + 0.01916729, + -0.010914882, + -0.02292756, + 0.008403827, + -0.0144732585, + -0.0050063343, + -0.0140694715, + -0.021842381, + 0.023747753, + 0.0058233733, + 0.026599502, + -0.0030331383, + -0.013564737, + -0.0107445335, + 0.009741374, + -0.0136404475, + -0.0018028482, + 0.009028437, + -0.00016206707, + -0.010731915, + 0.002053638, + 0.011779239, + -0.0017208288, + -0.031066403, + 0.0036403968, + -0.006230315, + 0.010933809, + -0.03793079, + -0.024101067, + 0.006107286, + -0.025325049, + 0.0063501894, + 0.05070057, + -0.021602632, + -0.024214633, + -0.009280804, + 0.007861238, + 0.020782439, + -0.02617048, + -0.034448124, + -0.044139024, + 0.0016577371, + -0.02876986, + 0.0068454603, + 0.012359683, + 0.0009960618, + -0.0006502399, + 0.0073249578, + 0.0064511364, + 0.008365973, + 0.021665724, + -0.0065678563, + -0.008763451, + 0.0039810925, + -0.034220994, + -0.0022287178, + -0.0009810774, + 0.018599462, + -0.005116745, + 0.022410206, + -0.018763501, + 0.0056246337, + 0.0034668944, + 0.026372373, + -0.0043123243, + 0.017943308, + 0.019192526, + -0.0027097927, + -0.04146393, + 0.004533146, + -0.009047364, + 0.038687892, + -0.00041443427, + 0.024744604, + 0.00400002, + 0.014725626, + -0.011091539, + -0.013665684, + 0.030485958, + -0.0018343941, + 0.02407583, + -0.020605782, + 0.024113687, + 0.021287173, + 0.010176707, + -0.023142071, + 0.0015047394, + 0.0017854979, + 0.017438574, + -0.031949688, + 0.0024668893, + 0.013564737, + 0.010555258, + -0.009716137, + 0.004924315, + 0.008656195, + -0.0105931135, + 0.0030788798, + 0.06647352, + -0.011665674, + 0.0014881778, + -0.029552199, + -0.035028566, + -0.02685187, + 0.009451152, + -0.0068517695, + -0.0145742055, + 0.0058454555, + 0.0077981465, + 0.007041045, + -0.0017870752, + -0.0038896094, + 0.021968564, + -0.0077666007, + 0.017968545, + -0.01870041, + -0.011634128, + -0.004290242, + 0.032959156, + -0.010271345, + 0.008277644, + 0.0015938566, + -0.0071356827, + 0.002107266, + 0.0074448325, + 0.01776665, + -0.01130605, + 0.0016261912, + 0.011318669, + 0.011690911, + -0.0019274545, + -0.008492156, + 0.0016766646, + -0.020681491, + -0.0071735377, + 0.00977292, + 0.018776119, + 0.013602592, + 0.0424734, + 0.0062429337, + -0.041337747, + 0.015369163, + -0.00036534097, + 0.016630998, + 0.007930639, + 0.031646848, + 0.015167269, + -0.011287123, + -0.00024802962, + -0.0009692478, + 0.026902344, + 0.0014361271, + -0.03131877, + -0.021325028, + -0.021375502, + 0.026448082, + -0.031268295, + -0.0062366244, + -0.0066120205, + 0.017034786, + 0.022599483, + -0.0034290394, + -0.015457491, + -0.018107347, + 0.012984293, + -0.01770356, + -0.0056120157, + -0.006763441, + 0.006388045, + -0.0030709933, + -0.024668893, + 0.00043967098, + 0.004362798, + 0.0038801457, + -0.009457461, + -0.0043344065, + 0.001630923, + 0.011148321, + 0.002599382, + 0.033438653, + -0.008403827, + -0.006580475, + 0.0074195955, + 0.01123665, + -0.019142052, + -0.013135713, + -0.02147645 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.00089398306, + -0.00462804, + 0.0042670527, + -0.0047607105, + -0.017598893, + 0.003273567, + -0.024374345, + -0.025522098, + 0.0054086363, + -0.024312638, + -0.018931769, + 0.029347945, + -0.00042616535, + -0.018746648, + -0.011675002, + -0.019425428, + 0.024892684, + -0.012687, + 0.013587926, + -0.008262594, + -0.0074048643, + 0.017352065, + -0.029372627, + 0.011428174, + -0.007238255, + -0.007355498, + 0.02142474, + -0.012582098, + 0.03068082, + -0.008873495, + 0.008237911, + -0.024053467, + -0.0022800812, + -0.018117234, + -0.01122454, + -0.00754062, + 0.004739113, + -0.0063033905, + 0.00008147279, + -0.012150148, + 0.02151113, + -0.0002720902, + 0.001740143, + -0.01875899, + 0.0031362686, + -0.0052574533, + 0.007546791, + 0.010224883, + -0.0011215283, + 0.020894058, + -0.0047175153, + -0.0028323606, + -0.008151521, + -0.032852914, + 0.011496051, + -0.0066952314, + -0.007694888, + 0.033124425, + -0.022732932, + -0.013921144, + 0.0149825085, + 0.0007686403, + -0.00968186, + -0.0025608488, + -0.012384635, + -0.0065162806, + 0.017870406, + 0.0114405155, + -0.005812818, + 0.024756929, + 0.00745423, + -0.00065023964, + 0.013180658, + -0.0019345208, + -0.0083798375, + -0.023029128, + -0.029965017, + 0.003248884, + 0.016586896, + -0.003949261, + 0.010718541, + -0.0034093228, + -0.03127321, + 0.02655878, + 0.024682881, + 0.0031779208, + -0.044676013, + 0.0041528945, + 0.0017771674, + -0.0043842965, + 0.01165649, + 0.03314911, + 0.021992447, + -0.01636475, + -0.0024096663, + 0.0055845017, + 0.020474449, + 0.026237901, + -0.0015565641, + -0.023868345, + 0.01336578, + 0.0058745258, + -0.029718189, + 0.012322928, + -0.03616042, + -0.023596834, + 0.009064788, + 0.006744597, + 0.010132322, + -0.024300296, + -0.021807324, + 0.031075746, + 0.035987638, + -0.03675281, + 0.016846066, + 0.0029403481, + 0.012421659, + -0.009848469, + -0.02673156, + -0.0016167287, + 0.016154945, + 0.032877598, + -0.0011654948, + -0.014143291, + 0.024868002, + 0.0033445302, + -0.011347954, + -0.032359257, + 0.0068001337, + -0.0042824796, + -0.0018357892, + 0.0005187262, + -0.011415832, + 0.016006848, + -0.008972227, + 0.015044216, + -0.02853341, + 0.03872744, + -0.02133835, + -0.033469986, + 0.012150148, + 0.020338694, + -0.02132601, + 0.0056184405, + -0.00847857, + 0.020104205, + 0.012477196, + 0.011767563, + 0.0057233428, + -0.023436395, + 0.028434679, + -0.028829604, + 0.03956666, + 0.009496738, + 0.017512504, + 0.017450796, + 0.0057480256, + -0.01508124, + -0.02981692, + 0.013847096, + -0.00797257, + 0.011162832, + 0.024386685, + -0.0065779877, + 0.014686313, + 0.02365854, + 0.0115947835, + 0.0005488084, + -0.0043380163, + -0.0047144303, + -0.010132322, + 0.050698638, + -0.018536843, + -0.0021767216, + -0.0032612255, + 0.023510443, + 0.015007191, + 0.011551588, + -0.024374345, + -0.010471712, + -0.0039184075, + 0.0011222997, + 0.03386491, + 0.0052481974, + 0.017672943, + 0.013723682, + 0.012847439, + -0.01756187, + -0.0005977885, + -0.012020563, + 0.015179971, + 0.034852225, + 0.01062598, + -0.004362699, + -0.68993586, + -0.02211586, + 0.007546791, + -0.001740143, + 0.013415146, + 0.03386491, + 0.029347945, + 0.0034648594, + -0.016636262, + 0.0011747509, + -0.00736784, + 0.000043002205, + 0.0029372629, + -0.014291388, + 0.007787449, + -0.029347945, + -0.014994849, + 0.009817616, + -0.017500162, + 0.032532036, + -0.0117613925, + -0.019770987, + -0.021498788, + -0.0033291036, + 0.026015757, + 0.025299953, + 0.006991426, + 0.0030745612, + -0.0033167622, + 0.0023587577, + -0.012822757, + -0.0028863542, + -0.0040911874, + -0.008083643, + 0.036283836, + -0.013205341, + -0.01122454, + 0.031075746, + 0.012032905, + 0.031421307, + 0.013995193, + 0.014427143, + -0.00021192567, + -0.026805608, + -0.0029681164, + -0.011113467, + -0.0043318453, + -0.015636604, + 0.016673286, + 0.0029804579, + 0.008614325, + 0.0013591012, + 0.009885494, + 0.02571956, + 0.0050846734, + -0.006068903, + 0.025423367, + 0.015883433, + -0.026435364, + 0.00608433, + -0.0023834407, + 0.011434345, + -0.0010189401, + -0.021548154, + 0.0048039057, + 0.0053839535, + -0.0068803527, + 0.010897492, + 0.009299275, + 0.0042115166, + -0.016006848, + 0.003940005, + -0.010070615, + 0.0067816214, + 0.000030082261, + -0.005371612, + 0.041442554, + 0.012051417, + -0.00924991, + 0.019561183, + 0.018438112, + 0.007392523, + -0.020412741, + -0.008336643, + 0.020671912, + -0.025546782, + -0.033198476, + -0.013958169, + 0.017500162, + -0.010564273, + 0.016241336, + 0.029273896, + -0.021005131, + -0.0051309536, + -0.011094955, + 0.0064484025, + -0.0091511775, + 0.012421659, + 0.0077689365, + -0.0028863542, + 0.0046372963, + -0.030039065, + -0.010317444, + 0.009928688, + 0.019598207, + 0.01884538, + -0.021412399, + 0.002713574, + -0.003427835, + -0.023485761, + 0.028928336, + 0.011045589, + -0.013526218, + 0.03403769, + -0.012921488, + -0.025324635, + 0.015871093, + 0.014710996, + 0.022918055, + -0.04507094, + 0.016031532, + 0.006929719, + 0.00012987437, + 0.0114405155, + -0.0063620126, + -0.022560153, + 0.0029881713, + 0.008077472, + -0.015463824, + -0.029520726, + 0.02742268, + 0.0027922508, + 0.019178597, + 0.007016109, + 0.008645179, + -0.008435374, + 0.016648604, + 0.00063095614, + 0.011687344, + -0.017278016, + -0.017919771, + 0.014945484, + -0.018129576, + 0.008330472, + 0.0024852576, + -0.0066705486, + -0.03401301, + 0.0024405199, + -0.00062671374, + 0.0061151837, + -0.019252647, + -0.008805618, + -0.020585522, + -0.0044922843, + -0.011002394, + 0.0048902957, + -0.0226342, + -0.009712714, + -0.0039369194, + 0.006090501, + 0.021622203, + 0.014661631, + -0.011804587, + 0.0000605984, + -0.0112862475, + -0.011064101, + -0.0070901574, + 0.034062374, + -0.029545408, + -0.014587582, + 0.007923204, + -0.0140692415, + -0.013575585, + -0.008342814, + -0.019203281, + 0.00086235814, + -0.016253676, + -0.024473077, + -0.008540276, + -0.0028385313, + 0.009700372, + -0.005896123, + 0.0033815545, + -0.010348298, + 0.032186475, + 0.002978915, + 0.02571956, + 0.027644826, + -0.013118951, + 0.033815548, + -0.023238933, + -0.013069585, + -0.006615012, + 0.019647572, + -0.0031239272, + 0.00030390796, + -0.008885837, + -0.00033244755, + -0.009527592, + 0.014686313, + 0.01875899, + 0.012551244, + 0.022239275, + -0.020462109, + 0.027274583, + -0.005704831, + 0.008645179, + -0.019166257, + 0.017105237, + 0.034383252, + 0.0016367835, + -0.009033934, + -0.0048810397, + 0.004985942, + 0.007978741, + -0.0023464162, + 0.006892694, + 0.015278703, + 0.0030637626, + -0.019351378, + -0.02621322, + 0.031248527, + 0.03512374, + -0.040010948, + -0.019474793, + -0.010440858, + 0.017364407, + 0.013081927, + 0.0011678088, + -0.017055871, + -0.034210473, + 0.010082956, + 0.0016738079, + 0.0014192656, + -0.0034586887, + -0.00031875627, + 0.013674316, + -0.015315727, + 0.01901816, + -0.0056523797, + 0.015488507, + 0.02870619, + 0.020980448, + -0.018820696, + 0.017290358, + -0.011773734, + 0.022128202, + 0.011002394, + -0.009237568, + 0.022955079, + -0.013242366, + 0.0046403813, + -0.017031187, + -0.005220429, + -0.000036108355, + -0.022239275, + 0.04635445, + -0.0031779208, + 0.012174831, + 0.012785732, + 0.011884807, + 0.0042115166, + -0.00123183, + -0.008151521, + 0.000019440178, + 0.011162832, + -0.019203281, + -0.0034586887, + -0.00033726843, + -0.012748708, + -0.00030545064, + -0.016130263, + -0.0017864235, + -0.030088432, + 0.009077129, + 0.0024220077, + 0.010730882, + -0.003292079, + -0.000076218035, + 0.025065465, + 0.02168391, + -0.0152910445, + 0.017389089, + 0.02981692, + -0.019931426, + -0.027447363, + -0.037394565, + 0.0059855985, + -0.005621526, + 0.004430577, + 0.035025008, + 0.023029128, + 0.0181666, + 0.012896805, + 0.0008515594, + -0.003616042, + 0.019067526, + 0.005991769, + 0.018907087, + -0.014809729, + -0.005828245, + -0.015562556, + -0.032680135, + -0.0056431238, + 0.030433992, + 0.026830291, + 0.029347945, + 0.009811445, + 0.0042886506, + -0.0020286243, + -0.022498446, + -0.020474449, + -0.009749738, + -0.007386352, + -0.011347954, + -0.0018990391, + 0.008768593, + -0.009367153, + 0.024682881, + 0.016673286, + -0.0021921482, + -0.009811445, + 0.0037425417, + -0.004985942, + 0.07557898, + -0.0059269764, + 0.004695918, + 0.0019545755, + 0.007256767, + -0.013032561, + -0.024374345, + -0.02210352, + 0.0014084668, + -0.0022847091, + 0.0007239026, + -0.021943081, + -0.000053849173, + -0.010348298, + 0.0033105914, + -0.0017077468, + 0.0032828231, + -0.014032218, + 0.016006848, + -0.017722309, + -0.015871093, + -0.0027475131, + 0.001075248, + -0.017537186, + -0.0079170335, + -0.0056091845, + 0.017598893, + 0.005741855, + 0.020165913, + -0.020116547, + 0.0181666, + 0.012582098, + -0.015735336, + -0.016920114, + 0.006584158, + -0.013513877, + -0.0025253673, + -0.0037302002, + 0.011212198, + -0.005158722, + 0.015611921, + 0.008015766, + 0.0018728136, + -0.0065162806, + 0.0041004433, + -0.0054456606, + 0.00009458557, + 0.0037147736, + -0.013526218, + -0.02125196, + 0.02544805, + -0.0022245445, + -0.012687, + 0.0042207725, + -0.0026318121, + 0.014636948, + -0.028113801, + 0.0029079518, + -0.02107918, + -0.006584158, + -0.0011770648, + -0.0140692415, + -0.0008330472, + -0.00090709585, + -0.031766865, + -0.010212542, + 0.003119299, + -0.016303042, + -0.0071580354, + 0.00762701, + 0.0003278195, + -0.019573525, + -0.017080553, + 0.025670195, + 0.03435857, + 0.014254363, + 0.0018234478, + -0.017450796, + -0.001894411, + 0.023214249, + -0.003986285, + -0.007083987, + 0.0116071245, + -0.003350701, + -0.0062262565, + 0.006522451, + 0.013180658, + -0.020585522, + -0.012909146, + 0.014994849, + 0.02425093, + -0.0010073701, + 0.01833938, + -0.0068433285, + -0.016130263, + -0.0021042156, + 0.0016228994, + 0.00805279, + -0.01695714, + -0.0067260847, + 0.017981479, + -0.020634888, + -0.016611578, + -0.030656137, + 0.02347342, + -0.009120325, + 0.020499133, + -0.006121354, + -0.01669797, + 0.006436061, + -0.009502909, + -0.0065779877, + 0.0041775773, + -0.018154258, + 0.0032334574, + 0.012699342, + -0.01620431, + 0.024300296, + -0.0026626657, + -0.043096308, + 0.009428861, + -0.032063063, + 0.032186475, + 0.027521411, + 0.010150835, + 0.011422003, + -0.019511817, + -0.0061336956, + -0.015031874, + 0.011946514, + 0.009052446, + 0.018104892, + -0.010983882, + -0.010558102, + -0.009897835, + -0.015179971, + 0.01585875, + 0.020165913, + 0.006349671, + -0.010595126, + -0.023818979, + 0.024954392, + 0.02707712, + -0.011335613, + -0.02038806, + -0.014155632, + 0.01482207, + 0.02262186, + -0.027768241, + 0.017068211, + -0.0026333549, + -0.0028431593, + -0.02836063, + 0.0028693848, + 0.02312786, + 0.0020656486, + -0.025818292, + -0.0054610875, + 0.015229337, + 0.024781613, + 0.028409995, + -0.005297563, + 0.017327381, + -0.0096139815, + -0.008453887, + 0.009965713, + 0.0054641725, + 0.01568597, + -0.018438112, + 0.02406581, + 0.027052436, + -0.0038998951, + 0.003214945, + 0.013871779, + -0.0049304054, + 0.021980105, + 0.00013459883, + -0.0038998951, + -0.0005333816, + -0.036826856, + -0.0030622198, + 0.029027067, + -0.012736366, + 0.004146724, + -0.0006857213, + -0.003099244, + -0.0060966713, + -0.0044151503, + 0.005192661, + 0.020807669, + 0.015537873, + -0.019425428, + 0.011730539, + 0.0018758989, + -0.002883269, + -0.012970854, + -0.032013696, + -0.0009680317, + 0.015155288, + -0.0026009586, + 0.03616042, + 0.023152541, + 0.0073740105, + -0.017376747, + -0.0041004433, + 0.02947136, + 0.01490846, + -0.02947136, + 0.022350349, + -0.0045046257, + -0.019758645, + -0.016611578, + -0.020104205, + -0.039640706, + 0.002232258, + 0.005424063, + -0.039023634, + 0.017450796, + -0.01585875, + -0.016241336, + -0.001154696, + 0.01473568, + 0.015389776, + -0.029249214, + 0.022041813, + 0.00642989, + -0.026978388, + -0.021646887, + 0.01800616, + -0.009589299, + -0.0064052073, + 0.016784359, + 0.021042155, + -0.014957826, + -0.0016275274, + -0.007009938, + 0.0102187125, + 0.015722996, + -0.030063748, + -0.0012248879, + 0.012008221, + 0.015500849, + -0.021992447, + 0.0052667097, + 0.0010305103, + 0.006152208, + -0.014538216, + -0.015389776, + 0.0074048643, + -0.013057244, + -0.02742268, + 0.019499475, + -0.02665751, + -0.0020671913, + 0.00874391, + -0.026435364, + 0.008768593, + -0.019511817, + -0.007738083, + -0.004695918, + -0.018672599, + 0.033889595, + 0.014933143, + 0.030113114, + 0.007324645, + -0.011181345, + -0.0059424033, + -0.009996567, + 0.011662661, + 0.028558092, + -0.0115701, + -0.009996567, + -0.015871093, + 0.035000324, + 0.0076516927, + 0.0058004768, + 0.0023541297, + -0.009552275, + -0.026978388, + -0.0007929375, + 0.020128889, + -0.011434345, + -0.024127515, + 0.018462794, + -0.030532723, + -0.0009965713, + -0.029940333, + 0.003582103, + 0.015895775, + -0.0019283501, + -0.019339036, + 0.003788822, + -0.01208844, + 0.0052142586, + 0.0060874154, + -0.009620152, + 0.018277673, + 0.010261907, + -0.024090491, + 0.012316757, + -0.009262251, + 0.036925588, + 0.00950908, + 0.011366466, + 0.020881716, + -0.01824065, + 0.025250586, + -0.00079910824, + -0.01851216, + -0.009157348, + 0.022214592, + -0.007694888, + 0.009453543, + -0.01671031, + 0.0050599906, + 0.01748782, + 0.024756929, + -0.005766538, + 0.00086081546, + 0.012699342, + -0.01669797, + -0.0066890605, + 0.021906056, + -0.013242366, + -0.0043441867, + -0.0088303005, + -0.012736366, + 0.002724373, + 0.0010567359, + -0.018129576, + -0.020857034, + 0.010878979, + -0.0035018837, + -0.02099279, + -0.007164206, + -0.020104205, + -0.01208227, + 0.012612952, + 0.008811789, + 0.0071271816, + 0.006460744, + 0.025818292, + 0.0006012595, + 0.01620431, + -0.029101117, + 0.0069790846, + 0.0077689365, + 0.00668289, + -0.014254363, + -0.016340068, + 0.0008322759, + 0.010274249, + 0.025768926, + -0.03307506, + -0.017709967, + 0.0046897475, + -0.022523127, + 0.0034000669, + -0.0014570613, + 0.011977368, + 0.020215278, + -0.010033591, + -0.011773734, + 0.0033105914, + 0.004720601, + 0.0074665714, + -0.0019345208, + 0.010996223, + -0.0018990391, + -0.002030167, + 0.011675002, + 0.010866638, + -0.017426113, + -0.018919427, + 0.0076516927, + 0.014427143, + 0.033124425, + 0.019005818, + -0.022436738, + 0.033445302, + -0.014883777, + 0.004038736, + 0.017919771, + 0.02870619, + 0.0020224536, + -0.008552618, + -0.02579361, + -0.0069544017, + 0.013982852, + -0.0060781594, + -0.014488851, + 0.0028693848, + 0.0134521695, + -0.013378121, + -0.016858408, + -0.0030884454, + -0.024645856, + -0.017290358, + -0.002540794, + 0.009101812, + -0.025744244, + 0.013686657, + 0.010311273, + -0.0028092202, + -0.00552588, + -0.008669862, + 0.0013459884, + 0.005707916, + -0.0100644445, + -0.0028308178, + -0.0017771674, + -0.008034278, + 0.0014439485, + -0.023954736, + 0.003341445, + 0.017092895, + -0.0143654365, + -0.03751798, + 0.031001698, + -0.00951525, + -0.018549185, + 0.013094268, + -0.020375717, + -0.021622203, + 0.013822413, + -0.0063805245, + -0.0028431593, + -0.010342127, + 0.008435374, + 0.0015149118, + -0.005004454, + -0.02373259, + -0.001538052, + 0.028212532, + -0.006744597, + 0.03147067, + 0.22056621, + 0.002096502, + 0.0037672247, + 0.027101804, + -0.017635917, + 0.033445302, + 0.0062108296, + -0.010249566, + -0.010582785, + 0.012045246, + 0.009194373, + 0.01191566, + -0.028089117, + 0.0032427134, + 0.013217682, + -0.007941716, + -0.012847439, + -0.015957482, + -0.022066494, + -0.028508727, + -0.016451139, + 0.0014177229, + -0.0116071245, + 0.0025917024, + 0.012069928, + -0.000014125164, + 0.0037086029, + 0.025571464, + 0.012921488, + -0.0021366118, + -0.01627836, + -0.00951525, + 0.015821727, + -0.0067137433, + -0.011082613, + -0.003915322, + 0.00057966204, + 0.014957826, + 0.013513877, + 0.023325322, + 0.020597864, + 0.009274593, + 0.015303385, + -0.026805608, + -0.016080897, + 0.006127525, + -0.016870748, + -0.01740143, + 0.0030406222, + 0.0022091179, + -0.02014123, + -0.024287954, + 0.017413773, + 0.04823035, + -0.004223858, + 0.005390124, + 0.027101804, + 0.005760367, + 0.0074912542, + -0.004257797, + -0.022325665, + 0.008731569, + -0.005982513, + 0.011650319, + -0.0016738079, + 0.015266362, + -0.02184435, + 0.01422968, + 0.011958855, + -0.016056214, + 0.02270825, + -0.008935203, + 0.015204654, + -0.0021288984, + 0.0034741154, + -0.0031686649, + 0.0106815165, + -0.004334931, + 0.032063063, + 0.014316071, + -0.0026379828, + 0.008355155, + 0.003230372, + -0.0032365427, + -0.0062509393, + -0.021646887, + 0.0039523463, + 0.011545417, + 0.028311264, + 0.0016861493, + 0.010638322, + -0.005967086, + -0.010576614, + -0.027620142, + 0.008262594, + 0.025966391, + 0.0055752457, + 0.023596834, + 0.009632494, + 0.0021474105, + -0.028138483, + -0.020536156, + 0.010514907, + -0.0007084758, + -0.0067199143, + 0.014044559, + 0.0041960897, + 0.004763796, + 0.020696595, + -0.024399027, + 0.020351036, + -0.024584148, + 0.022300983, + -0.0072135716, + 0.026410682, + -0.0057788794, + 0.005056905, + -0.02433732, + -0.0034864568, + 0.0039523463, + -0.0045601623, + -0.001086818, + 0.00711484, + -0.008645179, + -0.015969824, + -0.021523472, + -0.031914964, + 0.010298932, + -0.0122118555, + -0.020684253, + 0.003264311, + -0.015661288, + 0.04475006, + -0.0021304411, + -0.008441545, + 0.016191969, + -0.0053345873, + -0.01182927, + 0.006007196, + -0.004140553, + 0.01646348, + 0.0009742024, + 0.005680148, + -0.009546104, + -0.013550902, + -0.009194373, + -0.0054209777, + -0.015994506, + -0.043392505, + -0.008170034, + -0.01988206, + -0.010786419, + -0.019598207, + -0.009725055, + 0.012002051, + -0.014994849, + -0.0363332, + 0.0019345208, + 0.0028909824, + 0.030878283, + -0.009737397, + 0.020276986, + 0.013230024, + -0.009996567, + -0.008725398, + -0.018462794, + -0.15560088, + 0.019388402, + 0.0050846734, + -0.007904693, + -0.009836128, + -0.011724368, + 0.018796014, + 0.015019532, + -0.019339036, + 0.03016248, + 0.027546095, + -0.016722651, + -0.03727115, + -0.012489538, + 0.012810415, + -0.00027131886, + -0.0021258132, + 0.023522785, + 0.0035759322, + 0.008355155, + 0.0049211495, + -0.028780239, + 0.020116547, + 0.0011153576, + -0.011366466, + 0.0029372629, + -0.0031810063, + 0.027792923, + -0.015105923, + -0.0181666, + -0.007670205, + -0.014513534, + 0.011428174, + 0.029841602, + -0.0037980783, + -0.00024200793, + -0.023251273, + 0.0045138816, + -0.017981479, + 0.019770987, + -0.015611921, + 0.009021593, + -0.000009364549, + 0.0047853934, + -0.010039762, + 0.031643454, + 0.015797043, + 0.012822757, + -0.0021798068, + -0.013007878, + 0.0061645494, + -0.015624263, + -0.0114528565, + -0.017179284, + 0.046329767, + 0.03240862, + 0.0058251596, + 0.021449422, + 0.011699685, + 0.019203281, + -0.016241336, + -0.0036407248, + 0.018388746, + 0.0021690081, + 0.015611921, + -0.024028784, + 0.018203624, + 0.006676719, + -0.029101117, + 0.015241679, + -0.0034926275, + -0.009033934, + -0.012921488, + -0.021967763, + 0.0016290701, + 0.0055752457, + -0.020659572, + 0.015130606, + -0.006608841, + -0.026879657, + -0.0013668145, + 0.045712695, + -0.0009680317, + -0.018438112, + -0.0076455222, + 0.012748708, + 0.017981479, + -0.008410691, + -0.013155975, + -0.005735684, + 0.00014520476, + -0.043738063, + 0.023325322, + -0.037246466, + 0.016549872, + 0.010872809, + -0.016944798, + -0.0011894063, + -0.0029125798, + -0.0042732237, + -0.0017092895, + -0.0031285551, + -0.024275612, + -0.0019036671, + 0.010126152, + 0.021474106, + 0.017956795, + 0.01954884, + 0.04114636, + 0.025090149, + -0.008935203, + 0.015229337, + 0.013353438, + 0.028039752, + -0.0030344515, + 0.0047761374, + 0.023461077, + -0.0091511775, + -0.0076455222, + 0.01464929, + 0.03914705, + -0.01996845, + 0.010440858, + 0.014513534, + 0.009990396, + -0.020770645, + -0.09379494, + -0.027373314, + 0.0034556033, + 0.0012865951, + 0.007448059, + 0.0217703, + -0.0054364046, + 0.0115947835, + -0.004732942, + 0.014994849, + -0.00685567, + -0.020869376, + -0.017919771, + -0.012785732, + 0.025040783, + 0.0033599571, + 0.024004102, + -0.011724368, + -0.03830783, + 0.010089127, + -0.020178255, + -0.00951525, + -0.021153228, + 0.006152208, + -0.0014161803, + -0.010601297, + -0.04050461, + 0.016636262, + 0.010891321, + 0.0065101096, + -0.0041436385, + 0.010039762, + 0.01594514, + -0.022584835, + -0.014081583, + -0.013834755, + -0.0140569005, + -0.013513877, + 0.011175174, + -0.03418579, + -0.0018033929, + 0.00008282263, + 0.004393553, + -0.027348632, + -0.018055527, + 0.00847857, + -0.0024405199, + 0.020795327, + 0.0017200882, + -0.00968186, + -0.019215623, + 0.017253334, + -0.0030822747, + 0.0034432618, + 0.030656137, + -0.024522442, + 0.02082001, + 0.005535136, + -0.031569403, + 0.011070272, + -0.0015071984, + 0.00924991, + 0.018487478, + 0.02312786, + -0.017500162, + -0.006590329, + -0.016599238, + 0.0123661235, + 0.019647572, + -0.029890968, + -0.009286934, + 0.010095298, + -0.020289328, + 0.004779223, + -0.010514907, + 0.00056539226, + -0.03050804, + -0.015525532, + 0.020894058, + -0.008151521, + -0.009219056, + -0.007898522, + 0.0029295494, + -0.035469297, + -0.018055527, + 0.0250161, + 0.0053438437, + -0.027546095, + -0.0046156985, + -0.005896123, + 0.0012326014, + 0.031692818, + 0.02347342, + -0.033198476, + -0.026706876, + 0.023559809, + 0.000008370244, + 0.017092895, + -0.015463824, + -0.011835441, + -0.00745423, + -0.018610891, + -0.032951646, + 0.0167967, + -0.009743567, + -0.029150482, + 0.0025809037, + -0.008774764, + 0.009398007, + -0.018833037, + -0.008620496, + 0.022288641, + -0.021461764, + 0.0019391488, + 0.0022384287, + -0.009638665, + -0.0344573, + 0.020931082, + -0.00084307464, + 0.007293791, + -0.00736784, + -0.0066890605, + -0.005655465, + 0.012785732, + -0.00823174, + -0.008768593, + -0.010582785, + 0.004507711, + 0.006254025, + 0.02880492, + -0.019215623, + -0.018018503, + 0.027447363, + -0.012909146, + 0.011175174, + 0.02579361, + -0.02056084, + -0.024756929, + 0.0017000334, + 0.01054576, + 0.008281106, + -0.02406581, + -0.00720123, + -0.0317175, + 0.009206714, + -0.009953371, + -0.010101469, + 0.001460918, + -0.023707906, + -0.0044213207, + 0.0022785384, + 0.017524846, + 0.0137483645, + 0.023868345, + -0.028730873, + -0.007318474, + -0.0062509393, + -0.03102638, + 0.0008723856, + 0.0013297902, + -0.006701402, + -0.015821727, + 0.02665751, + -0.0067569385, + 0.001011998, + -0.014846752, + 0.020696595, + -0.0037949928, + -0.009089471, + -0.0039585168, + -0.004276309, + -0.02511483, + -0.017759332, + 0.008348985, + 0.019055184, + 0.0051463805, + 0.021918397, + -0.015537873, + -0.0072197425, + -0.021634545, + -0.009410348, + 0.007269108, + 0.002695062, + -0.006349671, + -0.035000324, + -0.00094334886, + 0.03699964, + 0.019561183, + -0.013847096, + 0.0007624696, + -0.0021875203, + -0.00075398484, + -0.039048318, + 0.007170377, + -0.0018280759, + -0.0008176204, + -0.013958169, + -0.0046588937, + -0.006272537, + -0.008367497, + 0.004810076, + 0.060522422, + 0.009058617, + 0.0031424393, + -0.025398685, + -0.03418579, + -0.0041498095, + 0.015179971, + -0.001009684, + -0.0023063067, + -0.0126746595, + -0.023448735, + 0.019993134, + -0.022905713, + -0.006374354, + 0.020523814, + 0.003119299, + 0.00066836615, + -0.01721631, + -0.01285978, + -0.024300296, + 0.03857934, + -0.008207058, + 0.02700307, + -0.00968186, + 0.016117921, + 0.02887897, + 0.002729001, + 0.0126746595, + -0.010638322, + 0.010144664, + 0.0044953697, + 0.026929023, + 0.0006228571, + 0.0015642776, + -0.0017231735, + -0.036456615, + 0.000027286153, + 0.011644149, + 0.015871093, + -0.0060565616, + 0.044700697, + -0.0012611409, + -0.04072675, + 0.02766951, + -0.0075961566, + -0.0006085873, + 0.024090491, + -0.0053932094, + -0.013575585, + -0.008095984, + 0.0005711773, + 0.01173671, + 0.018055527, + 0.00565855, + -0.025262928, + -0.0045601623, + -0.020782985, + 0.0075035957, + -0.033692133, + -0.0209064, + 0.014081583, + 0.013180658, + 0.015216996, + 0.0062355124, + 0.0067877923, + -0.017500162, + 0.017858064, + -0.0023541297, + 0.006368183, + -0.0011153576, + 0.0039369194, + 0.014587582, + -0.042355824, + -0.013020219, + 0.0028724703, + 0.0005954745, + -0.018018503, + -0.021227278, + 0.008632838, + 0.02031401, + 0.0004061105, + 0.041417874, + -0.016253676, + -0.03203838, + 0.014303729, + -0.0027274583, + -0.018314697, + -0.019092208, + -0.01714226 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.013982197, + -0.018476475, + -0.005729884, + -0.023803027, + 0.0031706425, + 0.009507126, + -0.044174526, + -0.0043758387, + 0.01791309, + -0.02065319, + 0.010851568, + 0.010934795, + -0.016222933, + 0.019359965, + -0.024520062, + -0.0053873714, + 0.03178005, + -0.0010819557, + 0.010729928, + -0.022381758, + -0.045480553, + 0.0045486954, + -0.020665996, + 0.017695418, + -0.016619865, + 0.0010731529, + 0.015685158, + -0.015185793, + 0.026453499, + 0.010755536, + 0.02481456, + -0.012765798, + 0.017285684, + -0.037337076, + -0.040947862, + 0.017093621, + -0.0021639115, + 0.010064109, + -0.0013468429, + -0.020627582, + 0.008495593, + 0.0055666305, + -0.003665205, + -0.0038092525, + -0.007996229, + 0.013559658, + 0.013918176, + 0.010256172, + -0.008854112, + 0.010320193, + -0.0048271874, + 0.030858146, + -0.0041229557, + -0.0043150187, + 0.01831002, + -0.025621224, + -0.00086028286, + 0.01782346, + -0.020947687, + -0.016709493, + 0.012714581, + -0.0020694805, + 0.005134488, + -0.0097312, + -0.0075928965, + 0.010204955, + -0.0059027406, + -0.004638325, + -0.0038860778, + 0.0057522915, + 0.02932164, + 0.029372858, + 0.00069662905, + 0.0151473805, + 0.0032106556, + 0.013726113, + -0.0042541986, + -0.0020390705, + -0.0048303884, + -0.017503355, + 0.0042894105, + -0.012977066, + -0.026171805, + -0.0008050647, + 0.027196143, + 0.011869502, + -0.002901754, + 0.0011355734, + -0.031088622, + -0.012035958, + -0.005256128, + 0.029424075, + 0.032471478, + -0.0012075971, + -0.013598071, + 0.016427802, + 0.022368954, + 0.020000177, + 0.005729884, + -0.029065557, + 0.0048976103, + 0.014545582, + -0.03836141, + 0.0026472704, + -0.036824908, + -0.015531506, + 0.015557115, + -0.012573734, + 0.027477834, + -0.03211296, + -0.020269064, + 0.0089885555, + 0.011082044, + -0.020461127, + -0.0070487177, + -0.020025784, + 0.017157642, + -0.0084315725, + -0.017861873, + -0.015697962, + 0.014558387, + 0.037337076, + 0.016824732, + -0.023226837, + 0.027247358, + 0.0114149535, + -0.01256093, + -0.013329183, + 0.0060243807, + -0.0002958973, + 0.011037229, + 0.007829774, + 0.01009612, + 0.017554572, + -0.0070295115, + 0.010179347, + -0.009058978, + 0.03157518, + 0.007855383, + -0.029961852, + 0.01523701, + 0.02834852, + -0.0064757294, + -0.0077337427, + -0.004628722, + 0.030550845, + 0.02025626, + -0.016466213, + 0.0021383031, + 0.00906538, + 0.0049616313, + -0.024507258, + 0.019897742, + 0.013546854, + 0.022983557, + 0.0033098883, + -0.011645429, + -0.0093662795, + -0.020115415, + -0.016094891, + -0.0067926333, + 0.0061332164, + 0.028655821, + 0.002460009, + 0.030730104, + 0.019718483, + 0.009711993, + 0.019001449, + 0.0012700176, + 0.0035115546, + -0.001566115, + 0.035877395, + -0.010569875, + 0.014929709, + 0.0047215526, + 0.010544267, + 0.012048761, + 0.003950099, + -0.014251086, + 0.0031978514, + -0.019001449, + -0.0023671784, + 0.013406008, + 0.005432186, + 0.0010955603, + -0.009756808, + 0.010441833, + -0.020858059, + 0.012208814, + -0.013149924, + 0.014609603, + 0.018348433, + 0.0051024775, + -0.01654304, + -0.6912225, + -0.040282045, + 0.0114789745, + -0.0017381716, + 0.0023895856, + 0.03779803, + 0.005845122, + 0.012580137, + 0.0074264416, + -0.026069371, + 0.0063572903, + 0.008860514, + 0.013092305, + -0.0029545715, + 0.007080728, + -0.030192327, + -0.0099872835, + 0.015749179, + -0.0035819777, + 0.014327911, + -0.009071783, + -0.004180575, + -0.028655821, + -0.0047919755, + 0.020153826, + 0.018258803, + 0.010998816, + -0.0097376015, + -0.0056914715, + 0.020691603, + -0.0045358916, + -0.0046095154, + -0.017951502, + -0.020128218, + 0.038335804, + 0.0019030257, + -0.015172989, + 0.008194694, + -0.008041044, + 0.025185881, + -0.0027897172, + 0.015774786, + -0.0015805197, + -0.014686429, + -0.010627494, + -0.005720281, + 0.0057010744, + -0.0014436747, + 0.033214122, + -0.00071423483, + 0.020819645, + 0.003068209, + 0.023700593, + -0.005480202, + 0.0148400795, + -0.0010651503, + 0.030192327, + 0.0151473805, + 0.0063092746, + -0.007195966, + -0.019564833, + 0.012733787, + -0.029577725, + -0.009654375, + -0.012516115, + 0.00413576, + -0.032164175, + -0.017631397, + -0.0015269021, + -0.0019542426, + 0.006078799, + 0.007458452, + -0.011178075, + 0.029859418, + 0.01651743, + 0.0022791494, + 0.026120588, + -0.01788748, + 0.021395834, + 0.012554528, + 0.0018069941, + 0.003918088, + -0.017324096, + -0.009142206, + 0.027759528, + -0.021254988, + -0.029526507, + -0.02131901, + 0.019475203, + -0.011395747, + 0.033956766, + 0.019641658, + 0.00074744574, + -0.0029673756, + -0.006274063, + 0.014635212, + -0.014443149, + 0.0005897939, + 0.0031306294, + -0.0058003073, + 0.014468757, + -0.035288405, + -0.0016821531, + -0.0015725171, + 0.039846703, + 0.0045230873, + -0.026146198, + 0.033470206, + 0.019808114, + -0.017503355, + 0.019180706, + -0.011747863, + -0.0246353, + 0.0062484546, + 0.0101729445, + -0.024750538, + 0.046223197, + 0.009084587, + 0.011594213, + -0.003205854, + 0.009379084, + 0.0065525547, + -0.00052177155, + -0.014622408, + 0.0006009976, + -0.004820785, + 0.00044174524, + -0.016107697, + -0.027913177, + -0.0037356282, + 0.015531506, + -0.009475116, + 0.009968078, + 0.0053809695, + 0.0030345977, + -0.003841263, + 0.005976365, + -0.017938698, + 0.02578768, + -0.029961852, + -0.025736462, + -0.01073633, + -0.013879764, + -0.013585267, + -0.00032290618, + -0.009103794, + -0.03093497, + -0.0077721556, + -0.019231923, + 0.021447051, + -0.033700682, + -0.021639114, + -0.017144836, + 0.0021879193, + -0.006405306, + -0.0040877443, + -0.022817103, + 0.003543565, + -0.0017749836, + 0.02530112, + 0.008457181, + 0.003469941, + -0.01548029, + -0.00013364395, + -0.00906538, + -0.040077176, + -0.009411095, + 0.037337076, + -0.014481561, + -0.022343347, + -0.006213243, + -0.002821728, + 0.0007470456, + -0.023700593, + -0.024891384, + -0.011773471, + -0.025749266, + -0.023303661, + 0.00018245999, + -0.016248543, + 0.014929709, + 0.010268976, + 0.005598641, + -0.01921912, + 0.035288405, + -0.0067862314, + 0.019795308, + 0.03567253, + -0.0020822845, + 0.01937277, + -0.008405964, + -0.0072791935, + -0.007925806, + -0.011382943, + 0.016094891, + -0.0023031572, + -0.0036524008, + 0.006181232, + 0.0006033984, + -0.00037952478, + 0.013559658, + -0.0044174525, + 0.019078273, + -0.02040991, + 0.01970568, + -0.013265162, + 0.01256093, + -0.002040671, + 0.015505899, + 0.03613348, + 0.002983381, + -0.02259943, + 0.0027513045, + 0.0018566104, + 0.017785048, + -0.00103394, + -0.012330454, + 0.0147120375, + -0.010864372, + -0.014699233, + -0.005419382, + 0.0085532125, + 0.043841615, + -0.012746591, + -0.014558387, + -0.013341987, + 0.03925771, + 0.011357334, + 0.0023879851, + -0.008137075, + -0.028758256, + -0.0025624426, + -0.01243929, + 0.00018986243, + -0.016824732, + -0.0049168165, + 0.00927665, + -0.03129349, + 0.014430345, + 0.011440562, + 0.010640299, + 0.0422795, + 0.032036133, + -0.017925894, + 0.022548214, + -0.020448323, + 0.026299847, + 0.015621136, + -0.0206788, + 0.01426389, + -0.018911818, + -0.010185749, + -0.017644202, + 0.015672352, + 0.022676256, + 0.0028569393, + 0.039488185, + 0.003354703, + 0.0270681, + 0.01749055, + -0.016389389, + -0.011101251, + 0.01475045, + -0.017349705, + 0.003841263, + -0.0040557333, + -0.008700461, + 0.021639114, + -0.007311204, + -0.013393204, + -0.004823986, + 0.00094911206, + 0.016978383, + -0.003908485, + 0.0018149968, + -0.022215305, + -0.011626223, + 0.0031338304, + 0.022164088, + 0.010845166, + 0.00095231313, + -0.021088533, + 0.009199825, + 0.012087175, + 0.0089885555, + -0.021178164, + -0.025646832, + 0.021459855, + -0.0062452536, + 0.011216488, + 0.023162816, + 0.023777418, + 0.01402061, + 0.003482745, + -0.0008050647, + -0.02536514, + 0.0047759702, + -0.010134532, + 0.0033995179, + -0.002375181, + -0.00939829, + -0.015685158, + -0.026555931, + 0.0016949573, + 0.0011403749, + 0.027733918, + -0.009468714, + 0.006837448, + -0.02609498, + -0.011421355, + 0.008745275, + -0.0058131116, + 0.0014132647, + 0.0032490683, + -0.019027056, + -0.0012388073, + -0.029065557, + -0.010550669, + 0.024788952, + 0.022061653, + 0.016875949, + -0.01928314, + -0.01158781, + -0.0032490683, + 0.0684257, + 0.0055826358, + -0.009161413, + 0.010717124, + 0.010192151, + -0.016005263, + -0.016261347, + 0.0043182196, + -0.00802824, + -0.0028265293, + 0.0020038588, + 0.0015381058, + 0.007375225, + 0.0064149094, + -0.00031870478, + -0.014724841, + 0.008706863, + 0.00018716154, + 0.030345978, + -0.02162631, + -0.0047855736, + 0.010134532, + -0.009455909, + -0.0024664109, + -0.0061204126, + 0.0077145365, + 0.022189695, + 0.016402192, + 0.015493094, + -0.022176892, + 0.008642842, + 0.020537952, + 0.00650774, + -0.0121639995, + -0.009558342, + -0.01289384, + -0.0032202587, + 0.0047951764, + 0.00696549, + -0.02122938, + 0.015992459, + 0.0040877443, + 0.0065173428, + -0.021050122, + -0.0066197766, + 0.007291998, + -0.011549397, + 0.013457225, + -0.020064197, + 0.0030586056, + 0.022727473, + -0.010192151, + -0.01265056, + -0.007074326, + 0.011703048, + 0.0149041, + -0.012624951, + -0.008758079, + -0.008444376, + -0.018476475, + 0.004571103, + -0.017311292, + -0.008258715, + -0.0031050208, + -0.0093662795, + -0.013482833, + -0.004468669, + 0.004145363, + -0.011363736, + 0.0134700285, + 0.0013700505, + -0.01766981, + -0.013802938, + -0.0013628481, + 0.030909363, + 0.02627424, + 0.006779829, + -0.022868318, + 0.010499452, + 0.046760976, + -0.0020294674, + -0.0076377112, + -0.0142126735, + -0.0020134621, + 0.005483403, + 0.0008874918, + 0.033290945, + -0.013598071, + 0.003409121, + 0.002317562, + 0.031370316, + 0.0057522915, + 0.0072279763, + -0.0017877878, + -0.007381627, + -0.012087175, + 0.022164088, + 0.004820785, + -0.014302302, + -0.01548029, + 0.0033258935, + -0.023495726, + -0.0058131116, + 0.0009211029, + 0.007624907, + 0.01256093, + 0.025006622, + 0.0056914715, + -0.021254988, + 0.014635212, + 0.026812015, + -0.004551897, + 0.0024584082, + -0.008457181, + 0.0029177594, + 0.010550669, + -0.0016565446, + 0.013457225, + 0.0022599432, + -0.029654551, + 0.005044859, + -0.04437939, + 0.02366218, + 0.0010467442, + -0.0033418988, + -0.001234806, + 0.01161982, + -0.021088533, + -0.0038092525, + -0.00027769132, + -0.013943785, + 0.019628854, + -0.028630214, + -0.02658154, + -0.031703223, + -0.018937428, + 0.009948871, + 0.0069270777, + -0.0023975882, + -0.015006534, + -0.025083447, + 0.017785048, + 0.018258803, + -0.00016935568, + -0.031037405, + -0.022240913, + -0.0065813637, + 0.009539137, + 0.0028297305, + 0.012554528, + -0.0041709715, + 0.013572463, + -0.012945056, + 0.02186959, + 0.0034635388, + -0.012381671, + -0.026043763, + -0.017695418, + 0.018975839, + 0.010576277, + 0.033751898, + -0.006017979, + 0.0011875905, + 0.008886122, + -0.006779829, + -0.008169086, + -0.007925806, + -0.0134700285, + -0.019411182, + 0.013495637, + 0.014724841, + 0.0051568956, + 0.017208857, + -0.011818286, + 0.009654375, + 0.0051985094, + -0.0055346196, + -0.0143407155, + -0.028425347, + -0.022855515, + 0.0014692831, + 0.0015725171, + -0.019846525, + -0.012817014, + 0.010000088, + -0.0077145365, + 0.023623768, + 0.012938654, + 0.0025352335, + -0.0076953303, + 0.028220478, + 0.0068694586, + 0.03014111, + -0.009379084, + 0.0013644486, + 0.00019456397, + -0.025698049, + -0.0009363079, + 0.009097391, + 0.0130346855, + 0.013508442, + 0.0062068407, + 0.0019030257, + -0.020781232, + 0.016235739, + 0.017785048, + 0.021754352, + 0.0147760585, + -0.0026392678, + -0.023879852, + -0.023777418, + -0.03516036, + -0.024584083, + -0.032317825, + 0.003297084, + 0.011639027, + -0.0343665, + 0.021293402, + -0.0013892568, + -0.034929886, + 0.014814471, + 0.010140934, + 0.024007894, + -0.011735058, + 0.005621048, + 0.005496207, + -0.011062837, + -0.013329183, + -0.0008022638, + -0.016645472, + -0.004206183, + 0.033956766, + 0.01021776, + -0.003540364, + 0.017592985, + 0.005685069, + 0.00022887526, + 0.025915721, + -0.017708223, + -0.018079545, + 0.0075352774, + 0.015493094, + -0.021754352, + 0.019987373, + -0.014135848, + 0.013713309, + -0.024763342, + -0.029270424, + -0.004990441, + -0.00024067913, + -0.018604517, + 0.003260272, + -0.038207762, + 0.0041293576, + 0.006363692, + -0.007311204, + -0.0075288755, + -0.0048431926, + -0.01766981, + -0.018706951, + -0.006280465, + 0.0054065776, + -0.012016751, + 0.022663452, + 0.0018117958, + 0.0024744135, + -0.031728834, + -0.0028761458, + 0.004574304, + 0.027426617, + -0.0016309363, + -0.006219645, + -0.010749134, + 0.018002719, + 0.0298082, + -0.0058003073, + -0.0054513924, + -0.001447676, + -0.0054673976, + 0.0058195135, + 0.017746635, + -0.012644158, + -0.008930936, + 0.0139053725, + -0.018899014, + 0.005185705, + -0.015697962, + -0.019091077, + -0.006040386, + -0.01450717, + -0.014251086, + -0.0012083973, + 0.011536594, + 0.0027865162, + 0.0067350143, + -0.02503223, + 0.031242272, + 0.011318922, + -0.021843983, + 0.015377856, + -0.0051024775, + 0.009961676, + 0.0026728788, + 0.015224205, + 0.0059443545, + -0.019718483, + 0.03449454, + -0.009980882, + -0.028066829, + -0.015493094, + 0.006411708, + -0.008930936, + -0.0005221717, + 0.0000951813, + 0.002773712, + -0.013239553, + 0.02624863, + -0.0014812871, + -0.0015861215, + -0.0040013157, + -0.0234189, + -0.015313835, + 0.0026312652, + -0.02019224, + -0.0025112256, + 0.014878492, + -0.0018838194, + 0.008783688, + -0.040128395, + -0.0059443545, + -0.03129349, + 0.01037141, + -0.009660777, + -0.012176803, + -0.027247358, + 0.0011203684, + -0.008527604, + -0.004218987, + -0.009270248, + 0.0013148324, + -0.0058835344, + 0.012304846, + -0.007291998, + 0.014443149, + 0.0025832495, + -0.0008882921, + -0.012266433, + -0.0014036616, + -0.015249814, + 0.0041901777, + 0.0045839073, + -0.017132033, + 0.014161456, + -0.031395923, + -0.030345978, + 0.007266389, + -0.010198553, + -0.0011355734, + 0.011325324, + 0.014545582, + 0.03288121, + -0.0029545715, + -0.0016469415, + 0.022420172, + -0.0016901557, + -0.00083867577, + -0.038668714, + -0.018489279, + 0.0032426661, + -0.017785048, + 0.0041293576, + -0.0034763431, + -0.009942469, + -0.022522606, + 0.008277922, + 0.0034219252, + 0.007516071, + -0.0081818905, + 0.0069718924, + 0.011703048, + -0.001241208, + 0.023098795, + 0.032343436, + 0.013700505, + 0.005662662, + -0.010992414, + -0.010441833, + 0.010742732, + 0.036824908, + -0.0007582493, + -0.00068542536, + -0.0034219252, + -0.011805481, + 0.00988485, + -0.010723526, + 0.014238281, + 0.0054481914, + 0.011094848, + 0.005185705, + -0.0090525765, + -0.0049616313, + 0.017388117, + 0.0014820873, + -0.007202368, + -0.018758168, + 0.013764526, + -0.014443149, + -0.008476387, + 0.009142206, + -0.024366412, + -0.0065429513, + -0.021908004, + 0.00915501, + -0.042049024, + -0.0112292925, + -0.023610963, + -0.004641526, + -0.033828724, + 0.024609692, + 0.01718325, + -0.0170296, + -0.006178031, + -0.023982285, + -0.003902083, + -0.0021078931, + -0.013828547, + -0.02326525, + -0.038694322, + -0.03259952, + -0.0058419206, + 0.010544267, + -0.017119229, + -0.0060819997, + -0.0040589347, + 0.008521202, + 0.024379216, + 0.23068064, + 0.010909187, + -0.0053201495, + 0.03257391, + 0.0033611052, + 0.04962912, + 0.022970753, + -0.008540408, + 0.013201141, + 0.020909276, + 0.0037964482, + 0.0025256304, + 0.009379084, + 0.0043150187, + 0.0061428198, + -0.0041773734, + -0.028092436, + -0.0008682855, + -0.015800396, + 0.010019294, + 0.014635212, + -0.017797852, + 0.011280509, + 0.00383166, + 0.034725018, + -0.001922232, + -0.018169174, + -0.0018197984, + 0.023073187, + 0.0054705986, + -0.0062356503, + -0.011472573, + 0.0033354966, + -0.009097391, + -0.0070359134, + -0.005502609, + -0.01928314, + 0.008201096, + 0.020934884, + 0.026069371, + 0.012138391, + 0.012932252, + -0.032138567, + -0.021818373, + -0.0041261567, + 0.02348292, + -0.009404692, + -0.0061908355, + 0.019193511, + 0.0066261785, + -0.017759439, + -0.001922232, + 0.023777418, + 0.02350853, + 0.0011091647, + 0.023226837, + 0.022061653, + -0.011690244, + 0.029526507, + -0.014891297, + -0.014071827, + 0.023457313, + -0.018668538, + 0.0031882483, + 0.0077081346, + -0.0071575535, + -0.019808114, + 0.009475116, + 0.013457225, + -0.010569875, + 0.017746635, + 0.010992414, + 0.019628854, + 0.0056402544, + -0.006286867, + -0.003236264, + 0.024840167, + 0.008162684, + 0.026940057, + -0.017900286, + -0.0037420304, + -0.014404736, + -0.014404736, + 0.022868318, + -0.018719755, + -0.022804298, + 0.0076313093, + 0.0020566762, + 0.03569814, + -0.008674853, + -0.009263846, + -0.009583951, + 0.00976321, + -0.010032099, + 0.006238851, + 0.024776146, + -0.0134700285, + 0.022151284, + -0.02368779, + 0.0031738435, + -0.036517605, + -0.01700399, + 0.017900286, + -0.010787547, + -0.013649288, + 0.011114054, + 0.00480478, + 0.015531506, + 0.038873583, + -0.008828503, + 0.013457225, + -0.005112081, + 0.012003947, + -0.0023223637, + 0.01833563, + -0.00136845, + 0.0033835126, + -0.012618549, + -0.018450867, + -0.0139053725, + -0.00018806184, + -0.022036046, + -0.01441754, + 0.009628766, + -0.015710765, + -0.0037388294, + -0.0040877443, + 0.020077001, + 0.00031870478, + -0.040282045, + 0.03047402, + -0.0020022583, + 0.030909363, + -0.0023719799, + -0.009289455, + -0.00086748524, + -0.009526332, + -0.005243324, + 0.011504583, + -0.01012813, + -0.008636439, + -0.008918133, + 0.012445692, + -0.013738917, + 0.0056466567, + 0.0077977637, + 0.005105679, + -0.012887438, + -0.013585267, + -0.017119229, + 0.0010091318, + -0.02147266, + -0.00059219473, + 0.003473142, + 0.016146109, + -0.013111511, + -0.026376672, + -0.007618505, + -0.016389389, + 0.019539224, + -0.006824644, + 0.025864504, + -0.006472528, + -0.014225477, + -0.008905328, + 0.0014468757, + -0.16409875, + 0.024071915, + 0.004164569, + -0.004033326, + -0.013828547, + -0.0011675839, + 0.02578768, + 0.018233195, + -0.0010171344, + 0.028322913, + 0.015160184, + -0.008649244, + -0.0520107, + -0.024123132, + 0.008924535, + 0.019001449, + -0.0042285905, + -0.015224205, + 0.026402282, + 0.009961676, + -0.0029785794, + -0.029142382, + 0.012215217, + -0.0026408683, + 0.00465433, + 0.00016485421, + -0.00918702, + 0.030243544, + -0.0017877878, + -0.007080728, + -0.00465433, + -0.0052721333, + 0.0028057224, + 0.036287133, + 0.0072855954, + 0.005067266, + 0.00013964591, + 0.005172901, + 0.0010923592, + 0.003972506, + -0.008137075, + 0.024929797, + -0.006152423, + 0.009628766, + -0.019987373, + 0.022970753, + 0.03505793, + 0.021101339, + -0.0015829204, + -0.0073048016, + 0.008681254, + -0.03157518, + -0.023828635, + -0.008649244, + 0.01784907, + 0.0052049113, + 0.018566104, + 0.009808025, + -0.003850866, + 0.022586627, + 0.0036299936, + -0.0267608, + -0.0009651173, + 0.0026200614, + -0.0011043631, + -0.012810612, + 0.0030714099, + 0.008258715, + -0.031856876, + 0.014788862, + -0.013041088, + -0.0066005704, + 0.02323964, + -0.017349705, + 0.012477702, + 0.009910459, + -0.014571191, + 0.012035958, + -0.005377768, + -0.010838764, + 0.013329183, + 0.02618461, + 0.0016773515, + -0.014519975, + -0.016799124, + 0.014865688, + -0.013687701, + 0.005672265, + -0.006261259, + -0.028246088, + 0.00814988, + -0.039949134, + 0.0040013157, + -0.03877115, + 0.016094891, + 0.0133804, + -0.010448235, + -0.011158869, + -0.0011883908, + -0.021088533, + 0.011575006, + -0.010883578, + -0.012112782, + 0.01809235, + 0.024097523, + 0.024660908, + -0.00043574328, + 0.010397019, + 0.027042491, + 0.008233107, + -0.014699233, + 0.031523965, + 0.0142126735, + 0.03323973, + 0.014545582, + -0.00028869492, + 0.0083035305, + -0.034801845, + -0.0027080905, + 0.006779829, + 0.036773693, + 0.012170401, + -0.009692787, + 0.009219031, + -0.0030522035, + -0.024673713, + -0.095365755, + -0.022919536, + 0.012432888, + 0.01475045, + -0.0013924579, + 0.0151473805, + 0.010185749, + 0.03743951, + 0.00018466072, + 0.02934725, + -0.008322736, + -0.017349705, + -0.015019339, + 0.002871344, + 0.008476387, + -0.013201141, + 0.007996229, + -0.025454769, + -0.024981014, + 0.0053297523, + -0.004010919, + -0.012420083, + 0.0022039246, + -0.004270204, + -0.01629976, + -0.020269064, + -0.03920649, + 0.019936156, + 0.00498724, + -0.00471515, + 0.0152114015, + -0.0072407806, + 0.0048559965, + -0.010768341, + -0.017196054, + 0.013790134, + -0.014827276, + -0.00037292263, + 0.006101206, + -0.03144714, + 0.010268976, + 0.012003947, + 0.006510941, + -0.028578997, + -0.013508442, + 0.0040269243, + -0.013713309, + -0.011971937, + -0.009353476, + -0.01937277, + 0.010883578, + 0.037004165, + -0.0033835126, + -0.011178075, + 0.037516337, + -0.020333085, + 0.021280598, + 0.0206788, + -0.009455909, + 0.004817584, + 0.011088446, + 0.012368867, + 0.008508397, + 0.02551879, + -0.0053809695, + -0.015390661, + -0.027324185, + 0.003533962, + 0.012176803, + -0.041895375, + -0.0005985968, + 0.02092208, + -0.018745363, + 0.013226749, + -0.009603158, + -0.001101162, + -0.020755624, + -0.011523789, + 0.009558342, + -0.00032050538, + -0.026018154, + -0.020614779, + -0.006277264, + -0.02366218, + 0.0070423153, + 0.022253716, + -0.013341987, + -0.004388643, + 0.028604604, + -0.014494366, + 0.0005645856, + 0.04312458, + 0.013802938, + -0.012260031, + -0.0075352774, + 0.011901514, + 0.0122280205, + 0.018284412, + 0.00903337, + -0.019398378, + -0.021664724, + -0.0026504714, + -0.049321815, + 0.010115326, + -0.002378382, + -0.023252446, + -0.0032698752, + 0.009878448, + -0.01578759, + -0.004033326, + -0.005256128, + -0.00535216, + -0.0019750495, + -0.002357575, + -0.0050224513, + 0.00065141416, + -0.01402061, + 0.0027016883, + 0.018002719, + -0.0050288537, + 0.02722175, + 0.00053697656, + -0.0019126289, + 0.014571191, + 0.011101251, + 0.0007462454, + -0.016350977, + 0.01742653, + -0.03096058, + -0.01523701, + -0.016607061, + -0.014468757, + -0.0065493532, + -0.018194782, + 0.015006534, + 0.039283317, + -0.019257532, + -0.01903986, + -0.006155624, + 0.030243544, + 0.008822101, + -0.020179436, + -0.013687701, + -0.043508705, + 0.016632669, + -0.013303574, + -0.016325368, + 0.0188606, + -0.0016453409, + -0.012727384, + 0.005854725, + -0.0013548455, + 0.021050122, + 0.027119316, + -0.0002262744, + -0.009122999, + 0.00036051855, + -0.017144836, + 0.030089894, + 0.008834905, + 0.011120456, + -0.03190809, + 0.016607061, + -0.012490507, + -0.00034311283, + 0.011939926, + 0.008495593, + 0.008521202, + -0.017068012, + -0.014699233, + 0.0075736903, + 0.007618505, + -0.008265117, + -0.00918702, + 0.040256437, + 0.008591625, + 0.02323964, + 0.0109476, + -0.011991142, + 0.0037964482, + -0.0013764526, + 0.008124271, + 0.013239553, + -0.0077721556, + -0.019731287, + 0.02691445, + 0.020422716, + 0.031984918, + -0.038310196, + -0.0009251042, + 0.005364964, + -0.005006446, + -0.031370316, + -0.004567902, + -0.007701732, + -0.002986582, + -0.00413576, + 0.0041901777, + -0.0036620041, + 0.0020870862, + 0.015979653, + 0.035390835, + 0.013802938, + -0.0062100417, + -0.0079066, + -0.026530324, + -0.0088669155, + 0.0077209384, + -0.007804166, + -0.0036363956, + -0.012234422, + 0.0076313093, + 0.007080728, + -0.021575093, + -0.0007982625, + 0.022010436, + -0.0017189652, + -0.005726683, + -0.033316553, + -0.028809473, + -0.018783776, + 0.0065557556, + 0.0013556457, + 0.011722255, + -0.011658234, + -0.010397019, + 0.022253716, + 0.027016884, + 0.040154003, + -0.031523965, + -0.0037388294, + 0.018719755, + 0.011542995, + -0.0032506688, + 0.008469985, + -0.01937277, + -0.024443237, + -0.0075096693, + -0.019103881, + 0.02609498, + 0.016235739, + 0.054084983, + -0.004427056, + -0.03577496, + 0.017055208, + 0.001292425, + 0.007842579, + 0.013802938, + 0.0011843895, + -0.014481561, + -0.013713309, + 0.002469612, + 0.0009987283, + 0.021203771, + 0.0033451, + -0.016837535, + -0.0022279324, + -0.01912949, + 0.020000177, + -0.031088622, + -0.013028284, + 0.022304934, + 0.0052049113, + 0.012356062, + 0.0034571367, + -0.016184522, + -0.007151151, + -0.006818242, + 0.012388073, + -0.005006446, + -0.020909276, + 0.017260075, + -0.022420172, + -0.023201229, + -0.00021547085, + 0.01466082, + -0.018630126, + -0.015685158, + -0.025505986, + -0.006213243, + 0.014583996, + -0.00046975445, + 0.020819645, + -0.015838807, + -0.027452227, + -0.011542995, + -0.010064109, + -0.020025784, + 0.005979566, + -0.023841439 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + 0.01577385, + -0.0072296807, + 0.0065341513, + -0.021912377, + -0.006553294, + 0.0037105556, + -0.01824968, + -0.033232283, + 0.011862292, + -0.017496722, + 0.019436548, + 0.009731036, + -0.0045847534, + -0.0013471901, + -0.016896907, + -0.00010548602, + 0.03307914, + 0.011607052, + 0.026468417, + -0.016514046, + -0.022308, + 0.018185869, + -0.008920648, + 0.011626194, + -0.020878654, + -0.010196849, + 0.008014545, + -0.016654428, + 0.0024199968, + 0.015505847, + 0.010509518, + -0.018236918, + 0.012238772, + -0.025102882, + -0.035759162, + 0.015595181, + 0.0045209434, + -0.0034936012, + 0.017062813, + -0.018619778, + -0.0006265351, + 0.009845894, + 0.0032798375, + -0.007835876, + -0.008984458, + 0.012130294, + 0.019538643, + 0.0072871097, + -0.017586054, + 0.011638957, + 0.003598888, + 0.019181307, + -0.018096536, + -0.018734636, + 0.011192286, + -0.035248682, + 0.0039466526, + 0.017675389, + 0.0057237633, + -0.008180451, + -0.0126024885, + -0.016922431, + 0.0041348925, + -0.014050977, + 0.004409276, + -0.000938008, + -0.009539605, + 0.004303989, + 0.00019840944, + 0.0054972377, + 0.021325326, + 0.038005278, + 0.006368245, + 0.019359974, + 0.025077358, + 0.009265222, + -0.013770213, + 0.023418296, + -0.004466705, + -0.0031474316, + 0.0009906513, + -0.008735598, + -0.03073093, + -0.0048080888, + 0.0144338375, + -0.0017388244, + -0.009628939, + 0.00431037, + -0.034993444, + -0.0030772407, + -0.011262477, + 0.03073093, + 0.026596038, + -0.012111152, + 0.00066123187, + 0.014803936, + 0.011313525, + 0.029709969, + 0.015735563, + -0.035350777, + 0.014931556, + 0.004524134, + -0.042446457, + 0.0029831207, + -0.024745544, + -0.02059789, + 0.0024790212, + 0.003978558, + 0.026162129, + -0.020559605, + -0.022256952, + 0.023903253, + 0.046683446, + -0.023035435, + -0.0019318499, + -0.021044562, + 0.012870491, + -0.028306147, + -0.017981678, + -0.006052385, + 0.0065245796, + 0.051175676, + 0.01799444, + -0.015225083, + 0.037060887, + -0.0001232332, + -0.008914267, + -0.028969772, + -0.0042178454, + 0.015684515, + -0.0063395305, + 0.01730529, + 0.0020706367, + 0.01350221, + 0.007274348, + -0.0010265445, + -0.0144338375, + 0.02731071, + -0.005950289, + -0.019411024, + 0.010815807, + 0.032313418, + -0.016067376, + 0.0039307005, + -0.006546913, + 0.034993444, + 0.015978042, + -0.003972177, + -0.020380937, + -0.005615286, + 0.0032479325, + -0.011256096, + 0.003187313, + -0.0035765544, + 0.015416513, + 0.0052515687, + -0.0071722516, + 0.005302617, + -0.027234137, + 0.001990874, + -0.019436548, + -0.006451198, + 0.030143877, + -0.011875054, + 0.04354399, + 0.027872238, + 0.0016104067, + -0.002837953, + -0.016258806, + -0.002268448, + 0.0006664164, + 0.025166692, + -0.012985349, + 0.032313418, + -0.017586054, + 0.0121941045, + 0.0077848285, + -0.0018106108, + -0.016360901, + 0.004367799, + -0.02491145, + -0.003314933, + 0.016207758, + 0.004587944, + 0.006033242, + -0.00506971, + 0.02547298, + -0.008646265, + 0.014880508, + -0.004852756, + 0.023801155, + 0.025945174, + -0.02160609, + -0.033538572, + -0.68118525, + -0.043952376, + 0.020074647, + -0.0036339834, + 0.0017978487, + 0.02464345, + 0.0067192004, + 0.015442037, + 0.0057173823, + -0.01629709, + 0.011811243, + 0.005442999, + 0.011077428, + -0.013566021, + -0.0060491944, + -0.02243562, + -0.0033851243, + 0.022205904, + -0.002155185, + -0.015480323, + 0.0005595345, + 0.0069297734, + -0.017649865, + -0.011696386, + 0.021963425, + 0.009029125, + 0.017445672, + -0.00071148225, + -0.017394625, + -0.0018536826, + -0.016845858, + 0.015122986, + -0.020827606, + -0.013023635, + 0.04696421, + -0.011415621, + -0.007070156, + 0.024758307, + 0.008799409, + 0.026417369, + -0.009635321, + -0.0017547769, + 0.01204096, + -0.030935122, + -0.013808499, + 0.010694568, + 0.015071939, + -0.006680914, + 0.0321858, + 0.0014157859, + 0.019500358, + -0.03187951, + 0.0051048053, + 0.00994799, + 0.007893305, + 0.0015099058, + 0.04234436, + 0.00076292915, + 0.0009435914, + 0.007210538, + 0.007133966, + 0.0022174, + -0.004664516, + -0.016194995, + -0.016628904, + -0.0009108887, + -0.038209468, + -0.015850421, + -0.018415585, + -0.00071227987, + -0.0053377124, + 0.0041859406, + -0.015850421, + 0.02382668, + 0.02027884, + -0.005152663, + 0.030756453, + -0.009029125, + 0.00024207945, + -0.0021583757, + 0.011141238, + -0.014446599, + -0.03111379, + -0.017318053, + 0.029633395, + -0.021695424, + -0.016246043, + -0.025421932, + 0.016105661, + -0.0045751818, + 0.025000785, + -0.0013774999, + -0.016105661, + -0.0081357835, + -0.013795737, + 0.03614202, + 0.002204638, + 0.0030086448, + 0.0034457438, + 0.0059470986, + -0.0026305702, + -0.015978042, + -0.0045177527, + -0.0000015173586, + 0.026264224, + -0.012213247, + -0.027361758, + 0.028408242, + 0.0111795245, + -0.015926993, + 0.025077358, + -0.0111795245, + -0.009916085, + 0.017662628, + 0.011989912, + -0.027846714, + 0.04821489, + 0.0024247826, + 0.018709112, + -0.008678169, + 0.0065915803, + 0.024822118, + -0.009156745, + -0.008295309, + -0.0017834915, + -0.013195923, + -0.008907885, + -0.012442963, + -0.044207618, + 0.0014556672, + 0.0031649794, + 0.009750179, + 0.01679481, + 0.006757486, + 0.008646265, + 0.0035574113, + 0.010949808, + -0.021618852, + 0.024439257, + -0.005797145, + -0.011332668, + -0.0010289374, + -0.026008984, + 0.013578783, + 0.0033978862, + -0.034253243, + -0.03461058, + -0.006119386, + -0.012328105, + 0.015352703, + -0.023813918, + -0.012315343, + -0.039255954, + 0.009903323, + 0.015620705, + -0.016526807, + -0.02211657, + -0.005430237, + -0.013285256, + 0.029837588, + 0.016628904, + 0.0011182715, + 0.001812206, + -0.0007577446, + -0.0104329465, + -0.0216699, + -0.008295309, + 0.0413234, + -0.0007465778, + -0.026442893, + -0.021133894, + 0.0010066038, + -0.0039275098, + -0.008212356, + -0.015161272, + -0.019972552, + -0.0062629585, + -0.015071939, + 0.0034010767, + -0.009437509, + 0.01850492, + 0.017164908, + 0.009986276, + -0.017407387, + 0.04739812, + 0.006999965, + 0.016501283, + 0.0028507148, + 0.0015226678, + -0.0018473015, + -0.012525917, + -0.010254278, + 0.002959192, + -0.0092779845, + 0.009928847, + 0.012149437, + 0.010656281, + 0.011211429, + 0.0023817108, + -0.0021950663, + 0.00944389, + -0.011351812, + 0.017535007, + -0.014280694, + 0.00602048, + -0.026876802, + 0.017905105, + -0.010694568, + 0.0005623262, + 0.026442893, + 0.004367799, + -0.023979824, + -0.0032096466, + -0.007574255, + 0.016143948, + -0.00589286, + -0.024311636, + 0.002935263, + 0.0020339459, + -0.0123344865, + 0.0011836768, + 0.014791174, + 0.023520391, + -0.014076501, + -0.0037616035, + 0.0016383235, + 0.032338943, + 0.01761158, + -0.0070254887, + -0.018173108, + -0.023035435, + -0.005101615, + -0.012034579, + 0.010700949, + -0.032543134, + -0.006077909, + 0.0056408104, + -0.0320837, + 0.022308, + 0.011938864, + -0.011319906, + 0.03517211, + 0.025613362, + 0.0048878514, + 0.0039370814, + -0.0013487854, + 0.016335377, + 0.011709148, + -0.017854057, + 0.006617104, + -0.012525917, + 0.009424747, + -0.0034010767, + 0.015658991, + 0.039255954, + -0.0083655, + 0.036780123, + 0.0015936565, + 0.017101098, + 0.023405533, + -0.026085556, + -0.0063714352, + 0.0058450024, + -0.0057684304, + 0.013049159, + -0.0009427938, + -0.0054717134, + -0.0018058249, + 0.0050984244, + -0.009386461, + -0.017420148, + -0.0018329442, + 0.02876558, + -0.007299872, + 0.02674918, + -0.010471232, + -0.0052707116, + -0.004361418, + 0.0308075, + 0.011422003, + -0.008097498, + -0.026111081, + 0.014816698, + -0.0011900578, + -0.0047729933, + -0.030118352, + -0.023048198, + 0.0177392, + -0.0006349102, + 0.009979894, + 0.008378262, + 0.009533225, + 0.029199488, + -0.0060842903, + 0.0076189223, + -0.02579203, + 0.0057716207, + 0.007880543, + 0.01660338, + 0.002325877, + -0.004568801, + -0.018275203, + -0.032134753, + -0.015875945, + 0.011824006, + 0.009845894, + -0.006744724, + 0.008422929, + -0.01013942, + -0.028740056, + -0.011492194, + -0.0005914396, + 0.00079363777, + -0.013770213, + -0.005430237, + -0.002332258, + -0.029250536, + 0.004530515, + 0.034431912, + 0.020802082, + 0.005232426, + -0.010113896, + -0.012034579, + -0.00880579, + 0.077235706, + 0.0249625, + 0.008052831, + 0.010094753, + -0.002775738, + -0.011562385, + -0.028586911, + 0.011983531, + -0.01324697, + -0.0065915803, + 0.01660338, + -0.026060032, + 0.001767539, + 0.004485848, + 0.005165425, + -0.006680914, + 0.0071148225, + -0.0013128922, + 0.033793814, + -0.020138457, + 0.0061321477, + 0.0017563722, + -0.0140254535, + 0.0123344865, + 0.0037296985, + -0.006483103, + 0.007529588, + -0.010228754, + 0.015710039, + -0.011568765, + 0.00899722, + 0.009737416, + -0.007567874, + -0.006572437, + -0.017573293, + 0.0024471162, + -0.0017946583, + 0.0056248577, + 0.010145801, + -0.014650792, + 0.03606545, + 0.004460324, + 0.012787538, + -0.0068851067, + -0.02142742, + 0.007076537, + -0.014012692, + 0.020546842, + -0.011989912, + -0.018173108, + 0.026315272, + 0.007357301, + -0.015263368, + 0.0059215743, + 0.010720092, + 0.0035893165, + -0.010956189, + -0.01807101, + -0.007861401, + 0.00093880564, + 0.000978687, + -0.007331777, + 0.0024423304, + -0.005494047, + -0.015033652, + -0.008659027, + 0.0038636997, + -0.0031043598, + -0.017981678, + -0.0034616962, + 0.014625268, + -0.012659918, + -0.021874093, + 0.0079954015, + 0.027285187, + 0.008544168, + 0.017624341, + -0.024311636, + -0.01781577, + 0.041655213, + -0.0004343073, + -0.0077401614, + -0.0038668902, + -0.0029879066, + -0.0070382506, + 0.0010345208, + 0.025957936, + -0.023494868, + -0.014408314, + -0.010560567, + 0.03236447, + -0.0018935638, + 0.013068303, + -0.005293045, + -0.013770213, + -0.010343612, + 0.029607872, + 0.0084612155, + -0.009679987, + 0.005293045, + 0.003605269, + -0.024783831, + -0.00066163065, + -0.015442037, + 0.015799373, + 0.01425517, + 0.02851034, + 0.0034553153, + -0.017968915, + 0.013195923, + 0.0070127267, + -0.009450272, + -0.012557821, + -0.0038987952, + 0.004734707, + 0.0068276776, + -0.006065147, + 0.014357266, + -0.008722836, + -0.027157566, + -0.0015202749, + -0.040838443, + 0.027157566, + 0.0017005383, + 0.010675425, + 0.0017101099, + 0.027616998, + -0.005755668, + -0.013259732, + 0.013323543, + -0.009131221, + 0.020648938, + -0.010649901, + -0.017330814, + -0.033946957, + -0.025485741, + 0.033538572, + 0.0022923767, + -0.01604185, + -0.0048814705, + 0.011626194, + 0.012762014, + 0.009839512, + 0.0026911898, + -0.03529973, + -0.023035435, + -0.0055801906, + 0.0040072724, + -0.007070156, + 0.016935192, + -0.00957151, + 0.0055546667, + -0.009456652, + 0.011071047, + -0.001292154, + -0.012666299, + -0.031905036, + -0.025562314, + 0.03047569, + 0.016743762, + 0.017356338, + -0.0026401416, + 0.0038828426, + 0.0016718238, + -0.005666334, + 0.0028826199, + -0.00893341, + 0.0018361347, + -0.030118352, + 0.014497648, + 0.0138850715, + -0.0028491195, + 0.023941537, + -0.005545095, + 0.012436583, + 0.013400114, + -0.0042306078, + -0.00003614242, + -0.026442893, + -0.027412806, + 0.007638065, + -0.0001354967, + -0.0076827323, + -0.0018808017, + -0.0001483584, + -0.018594254, + 0.01754777, + 0.0029225012, + -0.008008163, + 0.0037616035, + 0.03338543, + -0.0009826751, + 0.034304295, + -0.0045528486, + -0.002211019, + -0.0052770926, + -0.026902325, + -0.0035223158, + 0.013463925, + 0.0068787253, + 0.007236062, + 0.005570619, + 0.011906959, + -0.024860403, + 0.01577385, + 0.01286411, + 0.03149665, + 0.008537787, + -0.009207793, + -0.01976836, + -0.031011693, + -0.036014404, + -0.03662698, + -0.03226237, + 0.013336305, + 0.0022317572, + -0.031598747, + 0.021542279, + -0.008225118, + -0.020457508, + 0.008040069, + 0.011530479, + 0.029122915, + 0.0008414953, + 0.008907885, + 0.02160609, + -0.008595216, + -0.008659027, + 0.008320833, + -0.011402859, + -0.0067766295, + 0.019270642, + 0.019500358, + -0.020227792, + 0.024809355, + 0.012723728, + 0.011760196, + 0.022091046, + -0.009373699, + -0.0033532192, + -0.005289855, + 0.010777521, + -0.020776559, + 0.011868672, + -0.026136605, + 0.005848193, + -0.037290603, + 0.0022923767, + -0.0024168063, + -0.010420185, + -0.014663554, + -0.0056535723, + -0.03338543, + 0.015327179, + 0.021631613, + 0.008391025, + 0.006250196, + -0.0068978686, + -0.008384643, + -0.0032176226, + -0.010483994, + 0.032721803, + 0.00030868122, + 0.0015354297, + 0.006476722, + -0.00128338, + -0.010196849, + -0.008257023, + -0.003212837, + 0.025370883, + -0.0034489343, + -0.0022174, + -0.024132969, + 0.008148545, + 0.038617853, + -0.01653957, + -0.0007577446, + -0.002136042, + -0.0054334276, + 0.0027214994, + 0.006680914, + 0.0018345395, + -0.015199559, + 0.018607017, + -0.024069158, + -0.012245152, + -0.028050907, + -0.0036084594, + 0.008193213, + -0.015607943, + -0.005248378, + -0.028050907, + 0.014982604, + 0.00004454242, + -0.0038381757, + -0.017394625, + 0.031037217, + 0.005107996, + -0.018594254, + 0.01939826, + 0.00013669314, + 0.015901469, + 0.002268448, + 0.014318979, + 0.004240179, + -0.02515393, + 0.030654358, + 0.0021583757, + -0.03529973, + -0.027080994, + -0.008907885, + -0.0111795245, + 0.0012618441, + -0.005031424, + 0.009335414, + -0.0021902807, + 0.013157636, + -0.020636177, + 0.0005794752, + -0.005924765, + -0.026340798, + 0.018147584, + 0.020623414, + -0.020891417, + -0.017522246, + 0.0090099815, + -0.011173143, + 0.0013695236, + -0.027361758, + -0.008499501, + -0.012647156, + 0.01863254, + 0.013221446, + -0.01933445, + -0.0039434624, + -0.012321725, + -0.012423821, + 0.0033276952, + -0.0021934712, + 0.014370028, + -0.0026991658, + -0.0012474868, + -0.024579639, + 0.0142934555, + -0.021465708, + 0.013936119, + 0.0016135972, + -0.019755598, + -0.017968915, + -0.002136042, + 0.0042050835, + -0.004594325, + -0.004811279, + -0.030424641, + -0.018351777, + 0.0027023565, + -0.003225599, + -0.0027932858, + 0.0017850867, + 0.0081357835, + 0.018262442, + -0.0056535723, + -0.015480323, + 0.020546842, + 0.0007437861, + -0.0015936565, + -0.018045487, + -0.017841296, + -0.008403786, + -0.009297127, + 0.013936119, + 0.0038892238, + 0.004556039, + -0.008327214, + 0.026442893, + -0.016922431, + 0.004916566, + -0.004125321, + -0.022997148, + -0.00071307755, + 0.02142742, + 0.0200236, + 0.031343505, + 0.010069229, + -0.008129403, + -0.02313753, + -0.005545095, + 0.009469414, + 0.037111938, + -0.012513154, + 0.0149698425, + 0.009431128, + -0.01033085, + 0.0013926547, + -0.03098617, + 0.0075423503, + 0.011683623, + 0.021312563, + 0.005596143, + -0.0074849213, + 0.011989912, + 0.028586911, + -0.0028507148, + -0.022780195, + -0.0014907627, + -0.005360046, + -0.03504449, + 0.0014046192, + 0.009533225, + -0.028740056, + 0.0076061604, + -0.023673536, + -0.004169988, + -0.02344382, + -0.007523207, + -0.024796592, + -0.00880579, + -0.03392143, + 0.028791104, + 0.024554115, + -0.009552367, + 0.0088696, + -0.028535863, + -0.0027470235, + -0.007006346, + -0.009156745, + -0.00969275, + -0.026570512, + -0.006623485, + -0.007861401, + 0.0006995179, + -0.031649794, + -0.005564238, + 0.006540532, + 0.0069170115, + 0.020368174, + 0.23420848, + 0.008754741, + -0.013591545, + 0.032134753, + -0.01812206, + 0.025077358, + 0.02376287, + -0.015875945, + 0.028484816, + 0.036652505, + -0.021657137, + 0.0006440829, + 0.00089174573, + -0.0018345395, + 0.011989912, + -0.013030016, + -0.03376829, + -0.002338639, + -0.0014357265, + -0.0090801725, + 0.01685862, + 0.002649713, + 0.009169507, + 0.00033121413, + 0.028995296, + 0.015697276, + -0.0069042495, + 0.0036116499, + 0.004476276, + 0.01178572, + -0.0012068079, + -0.018721875, + 0.004364609, + -0.0060619568, + 0.002522093, + -0.0029065486, + -0.0067383433, + 0.003219218, + 0.009386461, + 0.038617853, + 0.006058766, + 0.0062629585, + -0.024873165, + -0.008550549, + 0.004785755, + 0.00849312, + -0.015735563, + -0.0067383433, + 0.021950664, + 0.015046414, + -0.010152182, + -0.0061449097, + 0.044513904, + 0.023214104, + -0.011007237, + 0.021823043, + 0.033615146, + -0.011268858, + 0.025715457, + -0.010349994, + -0.0151102245, + 0.023673536, + -0.019883217, + 0.004594325, + 0.019155784, + -0.0015721206, + -0.015799373, + 0.0051399013, + 0.021912377, + -0.022780195, + 0.011332668, + 0.0024550925, + 0.0077146376, + 0.0018042297, + -0.0057173823, + -0.019653501, + 0.022716384, + -0.006128957, + 0.027897762, + 0.006508627, + -0.016360901, + -0.008129403, + -0.007644446, + 0.01799444, + -0.006700057, + -0.008914267, + -0.0018329442, + 0.015684515, + 0.022831243, + -0.0068659633, + 0.0041029872, + -0.0029575967, + 0.0016925621, + 0.010273421, + 0.030373594, + 0.022550479, + -0.005360046, + 0.007363682, + -0.026111081, + -0.000995437, + -0.034942392, + -0.035657067, + 0.004214655, + -0.017190432, + -0.00912484, + 0.007248824, + -0.0009746988, + 0.0015107034, + 0.033666193, + -0.0004159619, + 0.0040710825, + -0.011996293, + 0.0083335955, + -0.008308071, + 0.009003601, + -0.0061576716, + 0.013961643, + -0.013234208, + -0.017101098, + -0.018747399, + -0.0034648867, + -0.020687224, + 0.0017866819, + -0.006700057, + -0.000046710964, + -0.019857693, + -0.0027342616, + -0.0025045453, + 0.007261586, + -0.042778272, + 0.036473837, + -0.0046868497, + 0.02136361, + -0.00008260413, + -0.005417475, + 0.011906959, + 0.00017288541, + -0.0077210185, + -0.00047059925, + -0.008129403, + 0.001628752, + 0.0017404197, + 0.00988418, + -0.0052579497, + 0.0014756079, + -0.0066745332, + 0.005886479, + -0.02782119, + -0.02718309, + -0.024298875, + -0.025396409, + -0.010401041, + -0.009405605, + -0.0070573934, + 0.009354556, + 0.0030836216, + -0.021478469, + -0.008952552, + 0.00095156766, + 0.03111379, + -0.0113773355, + -0.0014588577, + 0.026468417, + -0.014803936, + 0.013310781, + 0.0030469308, + -0.16253701, + 0.024069158, + 0.014140312, + -0.014918794, + -0.0050473763, + -0.0026832134, + 0.016182235, + 0.020444747, + -0.020189505, + 0.028714532, + -0.0036403644, + 0.024630686, + -0.042446457, + -0.009137602, + -0.012557821, + 0.0009013172, + 0.00013061124, + -0.0009866632, + 0.017407387, + 0.0033564097, + 0.007491302, + -0.02091694, + 0.022767432, + 0.021057323, + 0.0151102245, + -0.0032559088, + -0.026315272, + 0.03256866, + 0.0074721593, + -0.007191395, + -0.0070191077, + -0.0034712679, + -0.00025763316, + 0.02491145, + 0.016488522, + -0.0026018557, + 0.0023242817, + 0.010547805, + -0.00024566878, + -0.010381898, + 0.002238138, + 0.028612435, + 0.009609796, + 0.012181343, + 0.001036116, + 0.02743833, + 0.029097391, + 0.02117218, + 0.0035510303, + -0.009597034, + 0.023265151, + -0.03338543, + -0.013425639, + -0.0078550195, + 0.022154856, + 0.020317126, + 0.016399188, + 0.009297127, + -0.00817407, + 0.009214174, + 0.00066721404, + -0.03864338, + -0.023456581, + 0.006377816, + 0.0010608424, + -0.0069808215, + 0.01083495, + 0.011906959, + -0.004473086, + 0.006052385, + -0.020508556, + -0.006259768, + -0.0058450024, + -0.02136361, + -0.006559675, + 0.0008973291, + -0.01159429, + -0.0026066413, + -0.0035382684, + -0.013183161, + 0.010318088, + 0.02249943, + -0.015008128, + -0.008786647, + -0.008844076, + 0.008927029, + 0.004903804, + 0.00823788, + -0.024235064, + -0.0005890467, + 0.023290675, + -0.036218595, + 0.0037296985, + -0.03946015, + 0.008971696, + 0.017343577, + 0.0015737158, + -0.011077428, + 0.007848638, + 0.012200485, + 0.00022393346, + 0.0013184756, + -0.023839442, + 0.00957151, + 0.030322544, + 0.018466635, + -0.012238772, + 0.0062151006, + 0.030450165, + -0.0040742727, + -0.01685862, + 0.022359049, + -0.0046964213, + 0.0067638676, + 0.022984387, + 0.010190468, + 0.013731927, + -0.02851034, + -0.0014429052, + 0.009597034, + 0.048878513, + -0.0061672432, + -0.0062852916, + 0.019500358, + -0.0023099245, + -0.030960646, + -0.099952094, + -0.013668117, + 0.01780301, + 0.020751035, + 0.013706403, + 0.02700442, + 0.004986757, + 0.0173691, + 0.0023418295, + 0.02414573, + 0.0021870902, + -0.022805719, + -0.019500358, + 0.0103627555, + 0.005315379, + -0.013463925, + 0.018594254, + -0.023022672, + -0.05063967, + 0.0037775561, + -0.003924319, + 0.0068532014, + -0.0034234102, + -0.016743762, + -0.005296236, + 0.0034457438, + -0.024184017, + 0.0058577643, + 0.01786682, + -0.0040327962, + 0.010662663, + -0.014791174, + 0.0041923216, + -0.0066681523, + -0.008665407, + -0.00039263134, + -0.0047602314, + 0.0012658322, + 0.027514901, + -0.030935122, + -0.0045975153, + 0.0022237808, + 0.015263368, + -0.032823898, + -0.004138083, + 0.010273421, + -0.00010468839, + 0.012296201, + 0.0042497506, + -0.019245116, + 0.006077909, + 0.020636177, + -0.034636106, + -0.009711892, + 0.04410552, + -0.029480252, + 0.011613432, + 0.01703729, + -0.027080994, + 0.021810282, + 0.0048176604, + 0.01703729, + 0.0013152851, + 0.029250536, + -0.02598346, + -0.016386425, + -0.049006134, + -0.008595216, + 0.023022672, + -0.031471126, + 0.0034776488, + 0.017535007, + -0.016156709, + -0.0040774634, + -0.019819407, + 0.019181307, + -0.025192216, + -0.013010873, + 0.00842931, + -0.012219628, + -0.026417369, + -0.020380937, + 0.0081357835, + -0.005666334, + -0.0074147303, + 0.029556824, + -0.021950664, + -0.008442072, + 0.025549551, + -0.002971954, + 0.0133490665, + 0.038617853, + 0.013285256, + -0.019525882, + -0.008614359, + 0.020967988, + 0.007331777, + 0.0028570958, + 0.019206831, + -0.018134821, + -0.019755598, + -0.0079252105, + -0.035886783, + 0.014778412, + -0.014791174, + -0.02445202, + -0.0118559105, + 0.013157636, + -0.011709148, + 0.0034680772, + -0.011543241, + -0.004476276, + -0.011224192, + -0.007344539, + -0.012634394, + -0.015978042, + -0.005369617, + 0.0027103326, + 0.016756523, + -0.001984493, + 0.011875054, + -0.009226936, + -0.007248824, + -0.0014915604, + 0.0003704972, + 0.008033688, + -0.033232283, + 0.0067192004, + -0.016462998, + -0.01906645, + -0.029454729, + -0.0020052313, + 0.024184017, + -0.02649394, + 0.011485812, + 0.026978897, + -0.018709112, + -0.03193056, + -0.012162199, + 0.021376373, + 0.008435691, + -0.020074647, + -0.02389049, + -0.022984387, + 0.017152147, + -0.0109817125, + -0.01976836, + 0.030781977, + -0.01260887, + -0.0076508275, + 0.002065851, + 0.012787538, + 0.01850492, + 0.017700912, + 0.0027645712, + -0.0052834735, + -0.01159429, + -0.008563311, + 0.029148439, + 0.012149437, + 0.0067766295, + -0.013821261, + 0.0063522924, + -0.0046868497, + 0.013476687, + 0.011664481, + -0.0032463372, + 0.018658064, + -0.005666334, + -0.0031266934, + -0.0043199416, + -0.023877729, + -0.01425517, + -0.0040264153, + 0.050792817, + 0.01634814, + 0.012564203, + -0.005950289, + -0.009654463, + -0.018262442, + -0.012015436, + 0.01703729, + 0.0048240414, + -0.0037233175, + -0.01236001, + -0.0010496756, + 0.027642522, + 0.023596963, + -0.053243123, + -0.008231499, + 0.018262442, + -0.0013639402, + -0.024809355, + 0.012755632, + -0.0038605093, + 0.008505883, + 0.0132086845, + 0.00033719634, + -0.001473215, + -0.006103433, + -0.0029496204, + 0.022333525, + 0.0062246723, + -0.017586054, + -0.007382825, + -0.03440639, + -0.010113896, + 0.024247827, + -0.0069425358, + -0.018339014, + -0.0144338375, + 0.018275203, + 0.009112078, + -0.014523172, + 0.0035382684, + 0.014114787, + -0.0070382506, + -0.0020291603, + -0.039434623, + -0.01013942, + -0.013527735, + 0.01362983, + 0.011492194, + 0.005190949, + 0.009099316, + -0.0032622898, + 0.021376373, + 0.010656281, + 0.02649394, + -0.038388137, + 0.018466635, + 0.007465778, + 0.0027613807, + 0.012876872, + -0.015352703, + 0.00228121, + -0.024120206, + -0.011996293, + -0.016360901, + 0.017956154, + 0.0031346697, + 0.0512012, + -0.008856838, + -0.031726368, + 0.033308856, + -0.024158493, + 0.0015027272, + 0.0121941045, + 0.0007314229, + -0.022831243, + -0.0118559105, + -0.0111795245, + 0.013706403, + 0.020176744, + -0.016590618, + -0.0045751818, + -0.00020319519, + -0.029812064, + 0.027463853, + -0.02807643, + -0.0013352257, + 0.028714532, + 0.002611427, + 0.011236954, + 0.015442037, + -0.018709112, + -0.019053686, + 0.014459361, + 0.026111081, + 0.0031665748, + -0.0010576519, + 0.019998075, + -0.008754741, + -0.022027235, + -0.011504956, + 0.0010209611, + -0.0361165, + -0.01596528, + -0.014459361, + -0.00003359999, + 0.014625268, + 0.0084612155, + 0.029888637, + -0.020036362, + -0.020100173, + 0.005685477, + -0.012781157, + -0.0077848285, + 0.007185014, + -0.006240625 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.006868671, + -0.005114832, + -0.0014453228, + -0.01894146, + -0.0009566394, + 0.019796059, + -0.027321622, + -0.020331776, + 0.010363594, + -0.009776855, + 0.0014493087, + 0.009668436, + -0.0074171443, + 0.008392916, + -0.017372573, + -0.0047576865, + 0.030357357, + 0.021938931, + 0.024796093, + -0.0060714716, + -0.031377774, + 0.013520503, + 0.0034949228, + 0.0038935225, + -0.020752698, + 0.00006497176, + 0.013941425, + -0.015790928, + 0.016785832, + 0.0129784085, + 0.022079239, + -0.011664623, + 0.007468165, + -0.036071684, + -0.02051035, + 0.0104528805, + 0.0019148733, + -0.005797235, + 0.018660847, + -0.012672284, + 0.0058355005, + 0.0063201976, + 0.0041007944, + 0.000064324035, + -0.008590622, + 0.016058788, + 0.017806249, + 0.0016836853, + -0.012933765, + 0.008826593, + 0.009190116, + 0.03048491, + -0.032959417, + -0.0052934047, + -0.00075255637, + -0.02719407, + -0.01589297, + 0.022653222, + -0.022091992, + -0.02061239, + -0.002448997, + -0.010025581, + -0.00020358483, + -0.01690063, + 0.0022034594, + -0.0035013002, + -0.021364948, + 0.0033131612, + -0.0030453021, + 0.005006413, + 0.024821604, + 0.03446453, + 0.002297529, + 0.006431806, + 0.040714573, + 0.0072768372, + 0.0016597694, + 0.023941496, + -0.01212381, + -0.0018431253, + -0.002724828, + -0.018469518, + -0.011651868, + -0.011824063, + 0.02658182, + 0.0041805143, + -0.0021014179, + 0.01029344, + -0.0021540332, + -0.018852174, + -0.004215591, + 0.026785905, + 0.027449174, + 0.0045791143, + -0.0018510973, + 0.021722093, + 0.022512915, + 0.015714398, + 0.03178594, + -0.032398187, + 0.005338048, + 0.03127573, + -0.034260448, + 0.006505148, + -0.033010438, + -0.021033311, + 0.0036894393, + -0.010446503, + 0.021862399, + -0.017181244, + -0.015561335, + 0.021109844, + 0.0373472, + -0.013762852, + -0.012506466, + -0.02318894, + 0.03530637, + -0.007927352, + -0.010395481, + -0.011951615, + -0.00053930545, + 0.046046246, + 0.022640467, + -0.040791105, + 0.026760394, + 0.0011989881, + -0.009477108, + -0.026811413, + 0.0031696653, + 0.007104642, + 0.005067, + 0.016288381, + 0.00695158, + 0.02024249, + -0.011135283, + -0.004014697, + -0.03199002, + 0.018686356, + 0.004945826, + -0.018635336, + 0.012825346, + 0.031377774, + -0.017308796, + -0.009668436, + -0.008494958, + 0.031913493, + 0.022423629, + -0.010350838, + -0.012908255, + -0.002881079, + 0.0034853562, + -0.008909502, + 0.0031537213, + 0.0024904513, + 0.00944522, + 0.0039541097, + -0.0018654469, + 0.004454751, + -0.032755334, + -0.0014859799, + -0.018188905, + 0.014081732, + 0.03308697, + -0.0028842678, + 0.038010474, + 0.018507784, + 0.0028954286, + -0.003252574, + -0.002217809, + -0.0074745426, + -0.006125681, + 0.041275803, + -0.013584279, + 0.012225851, + 0.00880746, + 0.008794705, + 0.0025701711, + 0.002401165, + -0.017347062, + -0.008877614, + -0.026556311, + -0.0025127728, + 0.011384009, + -0.0018813908, + 0.007391634, + -0.00504149, + 0.014617451, + -0.0060140733, + 0.005382691, + -0.015790928, + 0.030357357, + 0.010287062, + 0.0035618874, + -0.028418569, + -0.6865355, + -0.036811486, + 0.018852174, + 0.0051275874, + 0.018456763, + 0.031505324, + 0.010554922, + 0.023571596, + 0.0046779667, + -0.010344461, + 0.010242419, + 0.011039619, + 0.016301136, + -0.009355933, + -0.009037054, + -0.015306231, + -0.008839348, + 0.001682091, + 0.011773042, + 0.007053621, + 0.0009598282, + 0.0090944525, + -0.019515444, + 0.0056409836, + 0.020739943, + -0.002053586, + 0.0067921397, + 0.004330388, + -0.010650585, + 0.0031919868, + -0.02051035, + 0.010414614, + -0.028801223, + -0.009387822, + 0.046684004, + 0.0048565394, + -0.00541139, + 0.017155733, + 0.008105924, + 0.012640395, + -0.0029018063, + 0.0041422485, + 0.013482238, + -0.027576726, + -0.012270495, + 0.019681262, + 0.005035112, + 0.010274308, + 0.021160863, + 0.00012944527, + 0.023507819, + -0.00565055, + 0.024005271, + 0.006868671, + 0.023507819, + 0.00048669032, + 0.031403285, + -0.0006281932, + -0.003759593, + 0.0052360063, + -0.00068718597, + 0.006881426, + -0.026887946, + -0.0226022, + -0.022653222, + 0.01321438, + -0.02719407, + -0.029719599, + -0.008507714, + 0.0037978585, + -0.0015370006, + 0.0143368365, + -0.008654398, + 0.015943991, + 0.022768019, + -0.0027391776, + 0.02053586, + 0.007008978, + 0.0022879627, + 0.0080804145, + -0.0011128905, + -0.02215577, + -0.0060045067, + -0.00022819836, + 0.031709407, + -0.03324003, + -0.03053593, + -0.028622651, + 0.015905725, + -0.017347062, + 0.0351278, + 0.023035876, + -0.016798588, + -0.006747497, + -0.0072066835, + 0.014681227, + 0.0089669, + 0.007863576, + 0.005302971, + -0.010414614, + 0.010057469, + -0.005574019, + -0.0011304289, + 0.010338083, + 0.01798482, + -0.00018833838, + -0.022079239, + 0.026352227, + 0.014017956, + 0.0038425017, + 0.026683861, + -0.010287062, + -0.011664623, + 0.018775644, + 0.008775572, + -0.025676202, + 0.038316596, + 0.0013560364, + 0.011581714, + -0.00926027, + 0.014413367, + 0.023074143, + -0.0057111373, + -0.00073222775, + 0.0015314203, + -0.0012555892, + -0.011639113, + -0.009253892, + -0.037500266, + -0.0027487439, + 0.003443902, + 0.0011862329, + 0.016071543, + 0.005586774, + 0.0073661236, + -0.004292122, + 0.005685627, + -0.014974596, + 0.022487404, + -0.016479708, + -0.01491082, + -0.006170324, + -0.01321438, + 0.0050191684, + -0.0012173237, + -0.01913279, + -0.04326561, + -0.0072704596, + -0.012538354, + 0.018711867, + -0.016326645, + -0.009847009, + -0.02918388, + 0.0143368365, + 0.016632771, + 0.00010742264, + -0.022729753, + -0.010338083, + 0.0010435341, + 0.015191434, + 0.014579184, + -0.007659493, + -0.012047279, + -0.0031186445, + -0.00894139, + -0.033571664, + -0.006919692, + 0.02650529, + -0.009011543, + -0.016097052, + 0.0017187622, + -0.012659528, + -0.01658175, + -0.013341931, + -0.018061353, + -0.016913384, + -0.024579255, + -0.025421098, + -0.00076571014, + -0.01825268, + 0.002225781, + 0.025561405, + 0.010070224, + -0.020841984, + 0.047525845, + -0.019668506, + 0.012659528, + 0.025969572, + -0.012544732, + 0.015331741, + -0.0019356004, + -0.011613603, + -0.018137883, + -0.0020312644, + 0.020778209, + 0.008450315, + 0.0028061422, + 0.008603377, + 0.012308761, + -0.012034524, + 0.015242455, + -0.0031409662, + 0.015408272, + -0.026148144, + 0.0006250044, + -0.036301278, + 0.021084333, + -0.002337389, + 0.01422204, + 0.019655751, + 0.010880179, + -0.014783268, + -0.0039285994, + -0.012940142, + 0.008871236, + -0.018214414, + -0.013992446, + 0.008112302, + 0.006505148, + -0.009107207, + 0.004091228, + 0.018341966, + 0.018609826, + -0.008233476, + -0.019872589, + 0.0027870096, + 0.029770618, + 0.016658282, + -0.004008319, + -0.005991752, + -0.021428723, + 0.005178608, + -0.01886493, + 0.003852068, + -0.036148217, + -0.0004815085, + 0.0030453021, + -0.026760394, + 0.010261552, + 0.0079082195, + -0.0099362945, + 0.035408415, + 0.018150639, + -0.018775644, + 0.020829229, + -0.0082972525, + 0.027245091, + 0.021709338, + -0.013724587, + 0.012972031, + -0.005618662, + -0.0009725834, + -0.016122563, + 0.01825268, + 0.027653256, + -0.02016596, + 0.044056434, + 0.0021205507, + 0.031454302, + 0.008125057, + -0.0075383186, + -0.012359781, + 0.0031792317, + -0.021237396, + 0.023788434, + -0.0066837207, + -0.012372537, + 0.0015808466, + -0.008973278, + -0.01599501, + -0.008086792, + 0.0059758076, + 0.0020886627, + 0.0063106315, + 0.0035714537, + -0.01159447, + 0.000062032086, + -0.0031776372, + 0.031887982, + 0.013035807, + 0.005845067, + -0.032704312, + 0.012965653, + 0.0068304054, + -0.0063393307, + -0.006983468, + -0.007952862, + 0.0073342356, + -0.0038775785, + -0.0063393307, + 0.0039572986, + 0.020178715, + 0.0063425195, + -0.009183738, + 0.011371254, + -0.017385326, + -0.0029512327, + 0.005746214, + 0.0022991234, + 0.0066709653, + 0.0028874567, + -0.030025722, + -0.026084369, + -0.008705419, + -0.0023517385, + 0.010121245, + -0.0073788785, + 0.010599565, + -0.026887946, + -0.026275696, + 0.018469518, + 0.001002877, + 0.0066837207, + -0.0077168914, + -0.0037245161, + -0.0076658707, + -0.032576762, + -0.000911199, + 0.036122706, + 0.0103891045, + 0.0098725185, + -0.021186374, + -0.02218128, + -0.00062380865, + 0.073980115, + 0.0265308, + 0.0063265753, + 0.010867423, + 0.02016596, + -0.008692663, + -0.021709338, + 0.0028460023, + -0.007391634, + -0.010701606, + 0.005589963, + 0.00090242986, + -0.00088249985, + 0.006779385, + 0.0130421845, + -0.012697794, + 0.0089669, + -0.004690722, + 0.02520426, + -0.026964476, + -0.008730929, + 0.029719599, + -0.014375102, + 0.0041326825, + 0.0029097782, + 0.0053890687, + 0.017602166, + 0.0043814084, + 0.024183845, + -0.020497594, + 0.006773007, + 0.019808814, + -0.0031409662, + -0.014668471, + -0.011466918, + 0.0075829616, + -0.02650529, + -0.005765347, + 0.008705419, + -0.027423663, + 0.02989817, + 0.01047839, + 0.00912634, + -0.009802366, + -0.011313856, + 0.011945237, + -0.010376349, + 0.033316564, + -0.01783176, + -0.017780738, + 0.02549763, + -0.0032430077, + -0.010140378, + -0.012799836, + 0.013826628, + 0.0068559158, + -0.025790999, + 0.0077998, + -0.010325328, + -0.0053986353, + -0.0016900629, + -0.0037149498, + -0.009898029, + -0.008673531, + -0.010159511, + -0.008960523, + 0.0009263458, + -0.0037882922, + -0.016568994, + 0.01591848, + 0.0080804145, + -0.012168453, + -0.016913384, + -0.00061902544, + 0.02321445, + 0.011001353, + 0.010261552, + -0.006728364, + -0.0083610285, + 0.04510236, + 0.007315103, + -0.014745003, + -0.003101106, + 0.011020486, + -0.00013691901, + 0.000087542474, + 0.02119913, + -0.017066447, + -0.01822717, + 0.00038923268, + 0.041581925, + -0.006431806, + 0.027245091, + -0.009847009, + -0.009776855, + -0.002804548, + 0.014285815, + 0.0038967112, + -0.022423629, + -0.010280685, + 0.010586809, + -0.018877685, + -0.002181138, + -0.025765488, + 0.006811273, + 0.004327199, + 0.012825346, + -0.012327894, + -0.02783183, + 0.007844443, + 0.021862399, + -0.011817685, + -0.0023740602, + -0.0119643705, + -0.008048526, + 0.010682474, + 0.0061224923, + 0.01228325, + -0.0036894393, + -0.024745073, + 0.017066447, + -0.050076883, + 0.028188976, + -0.00046994913, + -0.0072768372, + -0.014081732, + 0.01146054, + -0.013877649, + -0.003268518, + 0.026683861, + -0.008494958, + 0.0179338, + -0.02287006, + -0.013915915, + -0.05505141, + -0.02852061, + 0.025637936, + 0.017002672, + -0.015982255, + -0.010695228, + -0.0026482968, + 0.015178679, + 0.002504801, + -0.0012810996, + -0.041479886, + -0.019961877, + -0.0008179267, + 0.02650529, + -0.014655716, + 0.02650529, + -0.007219439, + 0.021033311, + 0.0038169913, + 0.023099653, + 0.0008434371, + -0.0031298052, + -0.015637865, + -0.009719457, + 0.023520574, + 0.024132824, + 0.0008243043, + -0.0006098576, + 0.0008769195, + -0.0020631524, + -0.011390387, + -0.0009446814, + -0.009030676, + -0.0026036536, + -0.019196564, + 0.011065129, + 0.034668613, + 0.012111055, + 0.019426158, + -0.0066900984, + 0.015765417, + 0.008973278, + 0.0018431253, + -0.015765417, + -0.035025757, + -0.045536038, + 0.0023724658, + -0.0010762194, + -0.013992446, + -0.0011407925, + -0.001626287, + 0.002793387, + 0.018239925, + 0.007391634, + 0.007920975, + 0.006297876, + 0.033673707, + -0.0014827912, + 0.041250292, + -0.010019204, + -0.0022050538, + -0.002672213, + -0.022372607, + -0.0006509134, + 0.013163358, + -0.0052360063, + 0.014234794, + 0.0041263048, + 0.0106697185, + -0.020076673, + 0.019489935, + 0.009241137, + 0.024069048, + 0.0011790581, + -0.0008099547, + -0.009783233, + -0.025012933, + -0.032806356, + -0.038648233, + -0.028826734, + 0.009100829, + 0.00036073278, + -0.030561442, + 0.020076673, + 0.007659493, + -0.032194104, + 0.005009602, + 0.014668471, + 0.02326547, + -0.009406954, + 0.022653222, + 0.007901842, + -0.013201624, + -0.0022927457, + -0.0034375244, + -0.016517974, + 0.012869989, + 0.033648197, + 0.01783176, + -0.009623793, + 0.0075128083, + 0.010912067, + 0.0060108844, + 0.0118559515, + -0.013188869, + -0.011345743, + 0.009961805, + 0.008144191, + -0.020893006, + 0.012487333, + -0.010988598, + 0.019489935, + -0.021148108, + -0.0098725185, + -0.0003443902, + -0.022742508, + -0.0024745073, + 0.0042347237, + -0.037933942, + 0.010216909, + 0.018354721, + 0.011256457, + -0.0071939286, + 0.008431182, + -0.002705695, + -0.0028141143, + -0.013992446, + 0.004805519, + -0.015446538, + 0.0023118786, + -0.00040497736, + 0.007755157, + -0.019081768, + -0.004263423, + -0.00060826325, + 0.025995081, + -0.0069388244, + -0.0070344885, + -0.01724502, + 0.01010849, + 0.042653363, + -0.03196451, + -0.00028141143, + 0.0033354827, + -0.0013042184, + -0.009770477, + 0.0028619464, + -0.0014341619, + -0.0109503325, + 0.026479779, + -0.01228325, + -0.011753909, + -0.016275626, + -0.016543485, + 0.0035714537, + -0.0073023476, + -0.0038138025, + -0.01702818, + 0.011045996, + 0.013775608, + 0.003000659, + -0.0023246338, + 0.015510314, + 0.0034949228, + -0.027474685, + 0.03303595, + -0.015523069, + 0.005586774, + 0.00025012135, + 0.010912067, + -0.0024474026, + 0.0011288346, + 0.029949192, + -0.0010969465, + -0.02056137, + -0.008418427, + 0.004703477, + -0.0074745426, + -0.004942637, + -0.015370007, + -0.005417768, + -0.00397962, + 0.015535824, + -0.009566395, + -0.008341895, + -0.016211849, + -0.014885309, + -0.008329141, + 0.014961841, + -0.0148342885, + -0.0067857625, + 0.01894146, + -0.0031537213, + -0.00018235939, + -0.021415967, + -0.014107242, + -0.011020486, + 0.007901842, + 0.0026865625, + -0.019222075, + 0.0017745661, + -0.017997576, + 0.0008031785, + -0.0034534682, + 0.0012611697, + 0.008265365, + 0.007072754, + 0.014362346, + -0.022347096, + 0.023507819, + -0.007838066, + 0.0021349003, + -0.009457975, + -0.0022895571, + -0.02650529, + 0.0021380892, + -0.008552357, + 0.0052551394, + 0.0060682828, + -0.027551215, + -0.026058858, + 0.012844479, + -0.0121365655, + 0.0087500615, + 0.0067347414, + -0.0048087076, + 0.01424755, + 0.0014230012, + -0.017359817, + 0.030178785, + -0.0095919045, + 0.0055357534, + -0.023584351, + 0.002146061, + -0.010918445, + -0.01955371, + -0.009477108, + 0.020000141, + -0.0004902777, + -0.018010331, + 0.019273095, + -0.0042442903, + -0.0014859799, + -0.012697794, + 0.0035140554, + -0.0016932518, + 0.016109807, + 0.0032908395, + 0.027092028, + -0.0048597283, + 0.010912067, + -0.0077168914, + 0.00039501235, + 0.007952862, + 0.0226022, + -0.008520468, + -0.0067921397, + 0.012040902, + -0.010318951, + -0.01109064, + -0.028239995, + 0.023622615, + -0.012315138, + 0.013380197, + 0.019617485, + -0.016734812, + -0.00037986558, + 0.03125022, + -0.0078061777, + -0.016033277, + -0.018010331, + 0.0029671765, + -0.020038407, + -0.006919692, + 0.005035112, + -0.016364912, + 0.0038743897, + -0.025561405, + -0.0073788785, + -0.030995118, + -0.015102148, + -0.019349627, + 0.004897994, + -0.026352227, + 0.02397976, + 0.028342037, + -0.025140485, + 0.00045320793, + -0.028316528, + -0.0022736131, + -0.011932482, + -0.0072768372, + -0.0070344885, + -0.04186254, + -0.026734883, + -0.010159511, + -0.007882709, + -0.020255245, + 0.00096939463, + -0.0025558216, + 0.00058992766, + 0.021148108, + 0.22857304, + -0.0031298052, + -0.016862364, + 0.034770653, + -0.0035618874, + 0.02387772, + 0.03456657, + -0.0063106315, + 0.013533259, + 0.042296216, + -0.008310008, + 0.0077615343, + 0.00030014562, + 0.00043806114, + 0.022130258, + -0.02589304, + -0.015421027, + -0.020114938, + -0.013316421, + -0.010248797, + 0.020433819, + -0.015586845, + 0.00928578, + 0.008067659, + 0.03997477, + 0.002058369, + -0.017308796, + 0.0074043893, + 0.01913279, + 0.0038425017, + -0.004591869, + -0.0027343943, + 0.0013329176, + -0.012015391, + -0.014489898, + 0.01294652, + 0.00636803, + 0.012557487, + 0.026709372, + 0.037576795, + 0.0048852386, + 0.016734812, + -0.022716997, + -0.00530616, + -0.008246232, + 0.016824098, + -0.020459328, + 0.010216909, + 0.022806283, + 0.00472261, + -0.0154592935, + 0.0052487617, + 0.019107278, + 0.01727053, + -0.002700912, + 0.02164556, + 0.033393092, + -0.0027184503, + 0.021007802, + -0.019668506, + -0.008501336, + 0.017500123, + -0.019107278, + 0.00880746, + 0.0015808466, + -0.016364912, + -0.007059999, + -0.005338048, + 0.016824098, + -0.008998788, + 0.015012861, + 0.010548544, + 0.019451668, + 0.0159695, + -0.007755157, + -0.01395418, + 0.031097159, + 0.002433053, + 0.02323996, + -0.0010124433, + -0.008386539, + -0.0020950404, + -0.022780774, + 0.0016549862, + -0.0049490146, + -0.024643032, + 0.015025617, + 0.0038456905, + 0.022283321, + -0.015165923, + 0.0015593222, + -0.0029735542, + 0.011205437, + -0.012863612, + 0.020178715, + 0.025446609, + -0.009234759, + 0.021632805, + -0.026071614, + 0.012340648, + -0.03165839, + -0.026632842, + 0.0072768372, + -0.016466953, + -0.007787045, + 0.008839348, + 0.002525528, + 0.011224569, + 0.020905761, + 0.008271743, + -0.015714398, + -0.0018463141, + 0.010312573, + -0.017500123, + 0.020038407, + -0.005905654, + 0.00472261, + -0.019694017, + -0.004869295, + -0.021071577, + -0.01292101, + -0.027602237, + -0.0075128083, + 0.008086792, + -0.008673531, + -0.0028109255, + 0.006205401, + 0.00880746, + 0.0014652527, + -0.050102394, + 0.017155733, + 0.0059120315, + 0.023686392, + -0.011109772, + -0.011741155, + 0.004343143, + -0.010994975, + 0.008935012, + -0.003284462, + 0.007155663, + -0.012595752, + -0.017500123, + 0.017729716, + -0.016811343, + 0.0027072895, + -0.003164882, + 0.00008684492, + -0.020446572, + -0.032041043, + -0.031046137, + -0.008418427, + -0.023673637, + 0.0009072131, + -0.015943991, + 0.02982164, + 0.0024840736, + -0.018239925, + -0.016568994, + -0.007563829, + 0.029438984, + -0.005309349, + 0.017117469, + 0.023992516, + -0.022678731, + -0.0077487794, + -0.008227099, + -0.16255218, + 0.030459398, + 0.007767912, + -0.0041454374, + -0.0028794846, + 0.0018766077, + 0.021071577, + 0.020995047, + -0.00963017, + 0.026275696, + 0.003284462, + 0.002740772, + -0.037933942, + -0.012710549, + -0.00421878, + 0.02156903, + -0.010625076, + -0.003048491, + 0.015676131, + 0.006932447, + 0.012563865, + -0.027984891, + 0.012640395, + 0.013482238, + 0.009802366, + 0.007251327, + -0.016250115, + 0.03584209, + -0.002053586, + -0.009247514, + -0.004971336, + 0.0017028182, + 0.017372573, + 0.021964442, + 0.011607225, + 0.011575337, + -0.003128211, + 0.0033673707, + -0.0032605461, + -0.0003272504, + 0.0027870096, + 0.022768019, + -0.008762817, + 0.008635265, + -0.0052519506, + 0.013762852, + 0.03566352, + 0.013456728, + 0.006380785, + -0.006428617, + 0.0036894393, + -0.042780913, + -0.01862258, + -0.013864894, + 0.020867495, + 0.022780774, + 0.03058695, + 0.0097640995, + -0.0179338, + 0.015701642, + 0.010790893, + -0.03655638, + -0.010019204, + 0.020688921, + -0.006030017, + -0.017997576, + 0.014796023, + 0.000645333, + 0.001262764, + 0.0020806908, + -0.019745037, + -0.009968183, + 0.004014697, + -0.032729823, + 0.010880179, + 0.012149321, + 0.004330388, + -0.0084694475, + -0.009075319, + -0.011970748, + -0.0042761783, + 0.026173655, + -0.0117475325, + -0.0012492116, + -0.007927352, + 0.018239925, + -0.005175419, + -0.007283215, + -0.026084369, + -0.020357287, + 0.02562518, + -0.050051376, + -0.0028460023, + -0.038061492, + 0.0119643705, + 0.018316457, + 0.00245378, + -0.004595058, + 0.0060045067, + -0.0042857444, + 0.016517974, + -0.005449656, + -0.01658175, + 0.011881461, + 0.015727151, + 0.017372573, + -0.009394199, + 0.0012763165, + 0.029745108, + 0.009273025, + -0.0057749134, + 0.027984891, + 0.006202212, + 0.025739977, + 0.011511561, + 0.005762158, + -0.00026506884, + -0.028367547, + -0.00096620584, + -0.0070982645, + 0.042245198, + -0.0016868742, + -0.005513432, + 0.013494994, + -0.004196458, + -0.0017586221, + -0.10663341, + 0.00070592016, + 0.017194, + 0.015370007, + -0.0019005237, + 0.006836783, + -0.007723269, + 0.016441442, + 0.0120983, + 0.030306337, + -0.003332294, + -0.017755227, + -0.014796023, + -0.0019722716, + 0.0008960523, + -0.0106697185, + 0.005551697, + -0.032296147, + -0.03043389, + 0.003199959, + -0.012225851, + -0.005717515, + 0.004735365, + -0.02443895, + -0.006779385, + 0.0072768372, + -0.033495136, + 0.016377667, + 0.0090944525, + -0.0028300583, + 0.010765382, + -0.009528128, + 0.022449138, + -0.008628887, + -0.015344496, + -0.007812555, + -0.01491082, + -0.016122563, + 0.007965618, + -0.024451703, + -0.0039987527, + 0.0029464494, + 0.0012356592, + -0.024056293, + -0.016887875, + 0.010459257, + 0.0016964406, + 0.0064158617, + -0.0017044125, + -0.021594541, + 0.0057749134, + 0.024145579, + -0.011148038, + -0.0063552745, + 0.03994926, + -0.0060746605, + 0.00878195, + 0.01660726, + -0.016492464, + -0.00078045833, + -0.0065944344, + 0.023176184, + -0.0136353, + 0.034158405, + -0.017066447, + -0.012716927, + -0.037321694, + 0.009706701, + 0.018495029, + -0.02181138, + 0.0059471084, + 0.022704242, + -0.017870024, + 0.020076673, + -0.0082526095, + 0.0049362592, + -0.019489935, + -0.02454099, + 0.015395517, + -0.02788285, + -0.032219615, + -0.03114818, + 0.00947073, + -0.022283321, + -0.0071429075, + 0.02589304, + -0.003982809, + -0.01191335, + 0.02780632, + -0.0026706185, + 0.0074298996, + 0.04247479, + 0.007487298, + -0.03632679, + -0.016390422, + 0.02591855, + -0.0011256457, + -0.0131506035, + -0.008067659, + -0.014451633, + -0.021798624, + -0.0057430253, + -0.036939036, + 0.023762923, + -0.028979797, + -0.026199166, + 0.007085509, + 0.0124618225, + 0.0014955463, + -0.009725834, + -0.019528199, + -0.0066582104, + -0.026811413, + 0.0081888335, + -0.010459257, + -0.017921045, + -0.017347062, + -0.0006728364, + 0.021926176, + -0.0026275697, + 0.018354721, + -0.00033781328, + 0.0056728716, + 0.006457316, + 0.015676131, + 0.002165194, + -0.03372473, + 0.012493711, + -0.032194104, + -0.011103394, + -0.023609862, + 0.0006425428, + 0.014171018, + -0.012729682, + 0.02146699, + 0.029566536, + -0.020918515, + -0.022359852, + -0.0108865565, + 0.026734883, + 0.011358499, + -0.01724502, + -0.022487404, + -0.026007837, + 0.0145536745, + -0.016645527, + -0.016824098, + 0.02051035, + 0.0005568439, + -0.0059439195, + 0.007213061, + -0.0018845797, + 0.00843756, + 0.023418533, + 0.027678767, + -0.014464388, + -0.003947732, + -0.0018399365, + 0.022933835, + 0.021097088, + -0.007876331, + -0.009623793, + 0.0063552745, + -0.006537036, + 0.011371254, + 0.020995047, + -0.0029719598, + 0.007219439, + -0.009853386, + 0.0061129257, + 0.010574054, + -0.03127573, + -0.010803648, + -0.008718174, + 0.03336758, + 0.0012308761, + 0.02984715, + 0.0012165265, + -0.004499394, + -0.007965618, + -0.009783233, + 0.019489935, + 0.009668436, + -0.000117586926, + -0.019936366, + 0.0003408028, + 0.02589304, + 0.025752733, + -0.03584209, + -0.01947718, + 0.016097052, + -0.0044483733, + -0.02321445, + 0.013750098, + -0.011007731, + 0.014349591, + 0.0028874567, + 0.0015210566, + 0.008105924, + -0.0057430253, + -0.0037053833, + 0.03966865, + 0.0006297876, + -0.0041613816, + -0.0120983, + -0.020382797, + -0.019591976, + 0.00040597384, + -0.01894146, + -0.009560017, + -0.010325328, + 0.0001715972, + -0.010867423, + 0.0041103605, + -0.009636547, + 0.02454099, + -0.0113393655, + 0.007187551, + -0.043546226, + -0.016492464, + -0.02294659, + 0.014681227, + 0.0017793493, + 0.005414579, + 0.00811868, + -0.0044451845, + 0.025038442, + 0.017474614, + 0.03181145, + -0.011715644, + -0.0052934047, + 0.0245665, + 0.006336142, + -0.015216945, + 0.0150511265, + -0.020357287, + -0.021607297, + -0.0080804145, + -0.015676131, + 0.028852245, + -0.00020318622, + 0.04770442, + -0.0029209391, + -0.018418498, + 0.02928592, + -0.005290216, + -0.00029655822, + 0.007391634, + 0.012908255, + -0.0126340175, + -0.011766665, + -0.012997541, + -0.0012452257, + 0.025688957, + -0.0016996294, + -0.009802366, + -0.00012725298, + -0.03265329, + 0.033316564, + -0.039719667, + -0.011766665, + 0.0096556805, + 0.0049362592, + 0.024655787, + 0.008979656, + -0.016454197, + -0.00039182356, + 0.010408237, + 0.015688887, + -0.019158298, + -0.008246232, + 0.014005201, + -0.0113011, + -0.03721965, + -0.0096556805, + 0.0077742897, + -0.02783183, + -0.015012861, + -0.026377738, + -0.0013456728, + 0.014171018, + 0.012187586, + 0.010580432, + -0.029081838, + -0.032882884, + -0.0073852562, + -0.004355898, + -0.023762923, + -0.0035140554, + -0.022053728 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 46, + "total_tokens": 46 + } +} +327 34444 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 131 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What colors are all of the pieces of furniture next to the desk and the desk itself?"]}HTTP/2.0 200 OK +Content-Length: 33489 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:21:16 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 92 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-ft5fh +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999979 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_a838924c5ea54e388a8418a22227a237 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.010940914, + 0.00037101895, + 0.0019054401, + -0.018620905, + -0.012196111, + 0.010196854, + -0.024728665, + -0.0048946193, + 0.019022051, + 0.0058942474, + 0.0070329825, + -0.0033191538, + -0.022502957, + 0.0068453504, + -0.005832782, + 0.0009373536, + 0.010552709, + 0.016097572, + 0.026281487, + -0.020885436, + -0.032816272, + 0.009122821, + -0.003642658, + -0.0032479828, + -0.021040717, + 0.008708735, + 0.030823486, + -0.004545235, + 0.009433384, + 0.01748217, + 0.03421381, + -0.010170974, + 0.0015277489, + -0.039596923, + -0.012558435, + 0.02888246, + 0.00837229, + 0.0072982563, + 0.01519176, + -0.007815863, + -0.0021076303, + 0.009562786, + 0.00030207212, + 0.00009371514, + -0.0046228757, + 0.0040761535, + 0.011186778, + 0.016226973, + -0.015748188, + 0.0040082177, + 0.021959469, + 0.036517162, + -0.02049723, + -0.017805675, + 0.009291043, + -0.018426802, + 0.0032415127, + 0.041434426, + -0.035973676, + -0.011549102, + 0.009724538, + 0.002754639, + -0.0017954487, + -0.001341734, + -0.004102034, + -0.015049418, + -0.01288841, + 0.0018569145, + -0.0029940319, + 0.0110250255, + 0.034343213, + 0.055849776, + 0.015101179, + 0.01589053, + 0.033152718, + -0.0014484903, + 0.0087928455, + 0.0023809914, + -0.0065024355, + -0.0027853716, + 0.00987335, + 0.0012762243, + -0.027873127, + -0.0019572007, + 0.023175845, + 0.00016347074, + 0.02357699, + 0.027588444, + -0.007912914, + -0.0021302756, + -0.015372923, + 0.028494256, + 0.009769829, + -0.011251478, + -0.0077058715, + 0.01586465, + 0.019229094, + 0.022671178, + 0.004791098, + -0.02968475, + 0.015579965, + 0.017715093, + -0.03856171, + 0.0033417991, + -0.019034991, + -0.027484922, + -0.000926031, + -0.020717213, + 0.020354887, + -0.014907076, + -0.034472615, + 0.028261332, + 0.023318186, + -0.016201094, + -0.002047782, + -0.01818094, + 0.035559587, + -0.018698547, + -0.009815119, + -0.016421076, + 0.0045064143, + 0.043634254, + 0.026126204, + -0.026993196, + 0.028753059, + 0.002591269, + -0.008864017, + -0.0067030084, + -0.026372068, + -0.016472837, + 0.007692931, + 0.022671178, + 0.009316923, + 0.027536683, + -0.006596252, + 0.0040308633, + -0.016252855, + 0.021687726, + 0.00646685, + -0.008171718, + 0.011736735, + 0.015424684, + -0.009252222, + -0.0074858884, + 0.00986688, + 0.034162052, + 0.012364333, + -0.011283829, + -0.021739487, + -0.0035132563, + 0.01445417, + 0.00044684028, + 0.015411743, + 0.0130372215, + 0.0069488715, + 0.017145727, + -0.03623248, + -0.018336222, + -0.030849367, + -0.012726658, + -0.023357008, + -0.010119214, + 0.025957981, + -0.0077705723, + 0.028649537, + 0.020238427, + 0.027226118, + 0.012364333, + -0.0064215595, + -0.003500316, + -0.012435504, + 0.019940803, + -0.020303128, + 0.0072335554, + 0.004037333, + 0.0078029227, + 0.017249247, + -0.0077899825, + -0.008876957, + -0.0038917563, + 0.0061336407, + -0.020290187, + 0.01749511, + -0.009232812, + -0.0095174955, + -0.023939315, + 0.0104103675, + -0.01666694, + 0.0027061133, + -0.006631837, + 0.030487042, + 0.005842487, + -0.0058133714, + -0.011245009, + -0.65384096, + -0.046429332, + 0.023887554, + -0.02202417, + 0.012344923, + 0.03035764, + 0.02357699, + 0.030849367, + 0.00004443129, + -0.02348641, + 0.012830179, + 0.0069553414, + 0.027743725, + -0.017702153, + -0.0037300042, + -0.024625145, + 0.022425316, + 0.014285948, + -0.011490871, + 0.0017356004, + -0.0060527646, + 0.020885436, + 0.00063164206, + -0.006389209, + 0.02820957, + 0.009045179, + 0.017702153, + -0.008488752, + -0.009679248, + 0.015308222, + -0.024366342, + 0.015321162, + -0.020354887, + -0.005528688, + 0.037552375, + -0.00085647753, + -0.0212607, + 0.015359983, + 0.0062953928, + 0.024819247, + -0.0097439485, + 0.008482282, + 0.008495222, + -0.01589053, + 0.0074729486, + 0.00025597276, + 0.018944409, + 0.0017792735, + 0.0377853, + -0.014492991, + 0.00914223, + -0.017081026, + -0.0031638716, + 0.014156546, + 0.03284215, + 0.0013207061, + 0.04461771, + 0.019306734, + 0.005751906, + 0.006282453, + 0.003338564, + -0.001672517, + -0.035326667, + -0.008132897, + -0.031366974, + 0.0043737777, + -0.038173504, + -0.03470554, + -0.023046443, + -0.02346053, + 0.010462128, + 0.011122077, + -0.01900911, + 0.020393709, + 0.028468376, + 0.0073306067, + 0.02952947, + 0.0032091623, + 0.011458521, + -0.012260811, + -0.0056645595, + -0.0049916706, + -0.03108229, + -0.0145447515, + 0.029348306, + -0.016615178, + -0.019280855, + -0.01667988, + 0.016511658, + 0.005020786, + 0.013496598, + 0.018646786, + 0.00041812926, + -0.006165991, + -0.00142908, + 0.026941435, + -0.004781393, + 0.0017339828, + -0.00045411912, + -0.001118516, + 0.006123936, + -0.012435504, + -0.0060074744, + 0.0031800468, + 0.024081657, + -0.015722306, + -0.027484922, + 0.03411029, + 0.01977258, + -0.00685829, + 0.008728145, + -0.04182263, + -0.015994051, + 0.0071947346, + 0.009362213, + -0.032221023, + 0.045989364, + 0.0014808407, + 0.0024553973, + -0.0042023202, + 0.017663334, + 0.0045064143, + -0.007945265, + -0.009232812, + 0.024482803, + 0.0016102424, + 0.0017792735, + -0.02509099, + -0.018439744, + 0.017986838, + 0.019086752, + 0.0007299065, + 0.008119957, + -0.00094058865, + -0.009426914, + -0.013276615, + 0.009595136, + -0.011070316, + 0.023887554, + -0.023952255, + -0.021674786, + -0.009051649, + 0.0006474129, + 0.0032318076, + -0.004878444, + -0.016563417, + -0.030150598, + -0.0001479021, + -0.028546017, + -0.0063374485, + -0.03403265, + -0.014648273, + -0.04016629, + 0.0066835983, + 0.025686238, + 0.001750158, + -0.03328212, + 0.00026648663, + -0.0035035512, + 0.016485777, + 0.0033029786, + -0.012551965, + 0.0028533076, + 0.005839252, + -0.008139367, + -0.021571264, + -0.020587811, + 0.023796974, + -0.0003390729, + -0.02505217, + -0.0032512178, + -0.008779906, + -0.0055675083, + -0.0077770427, + -0.024599263, + -0.004923735, + -0.0044158334, + -0.014790615, + -0.00012242615, + -0.0073370766, + -0.00047595563, + 0.008074666, + -0.0029244786, + 0.010772692, + 0.032945674, + 0.000028913193, + 0.016861042, + 0.018413862, + -0.017042205, + 0.006243632, + 0.002578329, + -0.0057195555, + -0.014609452, + -0.017728034, + 0.0074664783, + 0.0052569443, + -0.005463987, + -0.0063180383, + 0.01062388, + -0.0060333544, + 0.025401555, + -0.0032835682, + 0.018802067, + -0.028261332, + 0.013406017, + -0.02511687, + 0.011542632, + -0.008954598, + -0.008391701, + 0.028623657, + 0.017792735, + -0.042935487, + 0.0024246646, + -0.019345555, + 0.017960956, + -0.01291429, + -0.020950137, + 0.016861042, + -0.019707879, + 0.0038141152, + 0.005011081, + 0.0037720597, + 0.02958123, + -0.006227457, + -0.015023538, + -0.01065623, + 0.023227606, + 0.024547504, + 0.0013902596, + -0.013418957, + -0.018879708, + -0.012299632, + -0.0061142305, + 0.013444837, + -0.017676273, + 0.00681947, + 0.0050434317, + -0.017844494, + -0.0035164913, + 0.009756888, + -0.006696538, + 0.03266099, + 0.0021852714, + -0.005451047, + 0.029814152, + -0.0038335256, + 0.007660581, + 0.028313093, + -0.027510803, + 0.01138088, + 0.0070847436, + -0.00042823877, + -0.01749511, + 0.02197241, + 0.018672666, + -0.0107468115, + 0.045212954, + -0.012351393, + 0.01290135, + 0.012610196, + -0.0020332243, + -0.017236307, + 0.012707247, + -0.021623025, + 0.014324768, + -0.009808649, + -0.025621537, + -0.00493991, + 0.012331982, + -0.012293162, + 0.000027598957, + 0.010843863, + 0.012991931, + 0.0070265126, + 0.009316923, + -0.00681947, + 0.0012835031, + -0.018620905, + 0.025699178, + 0.0076864613, + -0.006140111, + -0.020898376, + 0.021726547, + 0.00683241, + -0.0080681965, + -0.008268769, + -0.021687726, + 0.01440241, + -0.012759008, + 0.009718068, + 0.016511658, + 0.027459042, + 0.020419588, + -0.0082364185, + -0.00569691, + -0.030538803, + 0.007938795, + 0.0078029227, + 0.021765366, + 0.0044352436, + -0.009899231, + -0.0009575726, + -0.041356783, + -0.013690701, + 0.017042205, + 0.010953855, + 0.004710222, + -0.015631726, + -0.026203845, + -0.04927617, + -0.012564906, + 0.00022584641, + -0.01220258, + -0.0042929016, + -0.00569691, + -0.008398171, + -0.044255383, + -0.009957462, + 0.04557528, + 0.0258674, + -0.017365709, + -0.028390734, + -0.008689324, + 0.0007481036, + 0.07049805, + 0.02743316, + -0.013393076, + 0.01587759, + -0.00081765704, + -0.010455658, + -0.0034841408, + -0.0019620534, + 0.008022905, + -0.008935188, + 0.003068438, + 0.002510393, + 0.0032593054, + -0.0079582045, + 0.0036361879, + -0.0070071025, + -0.005628974, + -0.019358495, + 0.011743205, + -0.03113405, + -0.02127364, + 0.017637452, + -0.005758376, + 0.020846615, + -0.0070912135, + 0.028002528, + 0.014117726, + 0.00058109453, + 0.01667988, + -0.026061503, + 0.0099121705, + 0.023072325, + -0.012739598, + 0.0050369613, + -0.027717846, + -0.030487042, + -0.010889154, + 0.021713607, + 0.0070847436, + -0.003581192, + 0.022412375, + 0.0019749936, + -0.0024780426, + -0.02274882, + -0.0035456067, + 0.025401555, + -0.016175212, + 0.011704384, + -0.0076799914, + -0.015554085, + 0.007505299, + -0.007117094, + -0.0017275128, + -0.0069359313, + 0.0052342988, + -0.011173837, + -0.033825606, + -0.014040085, + -0.003869111, + -0.022127692, + 0.0061271708, + 0.014040085, + 0.009750418, + 0.00084596366, + -0.018310342, + -0.032790393, + -0.013975384, + 0.0027837541, + -0.008482282, + -0.02192065, + -0.020794854, + -0.0036232478, + -0.0073241363, + -0.004244376, + 0.03364444, + 0.02655323, + 0.025336854, + -0.023589931, + 0.005011081, + 0.033592682, + 0.0008322147, + -0.010229205, + 0.006690068, + 0.0056225043, + 0.010138623, + -0.0012592403, + 0.035896033, + -0.009996282, + -0.0048428588, + 0.006224222, + 0.030668205, + -0.0019539658, + 0.021480683, + -0.015735248, + -0.007867624, + -0.0036620682, + 0.01290782, + 0.016589299, + -0.025453316, + -0.024443982, + 0.013574239, + -0.023991076, + 0.0052342988, + -0.017158667, + -0.009938051, + 0.0038270555, + 0.008508163, + -0.0028436026, + -0.011982598, + 0.013794222, + 0.011866136, + -0.0057195555, + -0.016654, + -0.005848957, + 0.008844607, + 0.008113487, + 0.009614547, + 0.024172239, + -0.021403043, + -0.0019086752, + 0.033049196, + -0.046843417, + 0.030823486, + -0.0040632137, + -0.030927008, + -0.0005730069, + 0.008993419, + -0.0039014614, + 0.004930205, + 0.0082881795, + -0.018413862, + 0.03656892, + -0.0041376194, + -0.011924367, + -0.032428067, + -0.010073923, + 0.015450563, + 0.014764735, + -0.018620905, + 0.0010384487, + -0.011898487, + 0.01366482, + -0.008139367, + -0.018659726, + -0.03871699, + -0.029891795, + -0.0028565426, + 0.017158667, + -0.004260551, + 0.026035624, + -0.0045937607, + 0.0068906406, + -0.011963188, + 0.0023098204, + -0.022412375, + -0.012060239, + -0.01441535, + -0.012681367, + 0.021519504, + 0.010520359, + 0.008935188, + 0.0019151452, + 0.0070200423, + 0.009724538, + 0.0039273417, + 0.0085146325, + -0.016239913, + -0.0073758974, + 0.0008872104, + 0.016188154, + 0.010403897, + 0.008669915, + 0.010733872, + 0.012713717, + 0.008728145, + 0.036931247, + -0.017922137, + -0.0110250255, + -0.019552598, + -0.032324545, + 0.013781281, + -0.014285948, + -0.017378649, + -0.0008221052, + -0.0053604655, + -0.000670867, + 0.005454282, + 0.0033547392, + 0.0011872606, + -0.016343435, + 0.036206596, + 0.0006227457, + 0.033722084, + -0.019707879, + 0.01441535, + 0.0075829397, + -0.019863162, + -0.014764735, + -0.0065380214, + -0.004344662, + 0.0041635, + 0.018931469, + 0.008967538, + -0.020303128, + 0.0007489124, + -0.008087606, + 0.013354256, + 0.0043964228, + -0.016356375, + -0.021830067, + -0.030927008, + -0.017210428, + -0.017365709, + -0.032143384, + 0.012571376, + -0.004402893, + -0.045471758, + 0.010552709, + 0.007136504, + -0.035430185, + -0.009996282, + -0.010830923, + 0.026165025, + 0.012978991, + 0.0032835682, + 0.017106906, + -0.010319786, + 0.0036103076, + -0.023978136, + -0.027795486, + 0.00456788, + 0.026734393, + 0.03737121, + -0.028494256, + 0.027303759, + 0.010073923, + -0.015411743, + 0.0009624252, + -0.025530957, + -0.00835288, + -0.007822333, + 0.017042205, + -0.025919162, + 0.011225598, + -0.011613803, + 0.0046714013, + -0.011050906, + -0.019086752, + 0.02120894, + -0.003788235, + -0.002358346, + 0.020160785, + -0.0438413, + 0.03258335, + 0.021687726, + 0.00911635, + -0.019565538, + 0.0020639573, + -0.003642658, + 0.0013465865, + -0.0009041944, + 0.017275129, + -0.00454847, + 0.009659837, + 0.0063406834, + 0.011911427, + -0.022334734, + -0.013354256, + 0.0005232681, + 0.026385007, + -0.018517384, + 0.0066447775, + -0.009672778, + 0.017986838, + 0.048189197, + -0.014182427, + -0.0044417134, + -0.0016708996, + -0.02355111, + 0.0037526495, + 0.003720299, + -0.016175212, + -0.00014274626, + 0.02129952, + -0.017689213, + -0.008909307, + -0.013858923, + -0.011989068, + 0.004474064, + -0.019358495, + -0.02199829, + -0.010086863, + 0.0142083075, + 0.009633957, + 0.004855799, + -0.021040717, + 0.00906459, + -0.008443461, + -0.02494865, + 0.035093743, + -0.0069359313, + 0.007667051, + -0.014868256, + 0.021428922, + -0.0076799914, + -0.023085264, + 0.04404834, + 0.0065768417, + -0.029011862, + -0.013910683, + 0.016796341, + -0.012972521, + 0.0029180085, + -0.013231324, + -0.0015689956, + -0.006677128, + 0.012325512, + -0.001672517, + 0.0044546537, + 0.0034776707, + -0.012733128, + 0.0047619827, + 0.0027869893, + -0.0049043247, + 0.02114424, + -0.0004650374, + 0.007751162, + 0.018245641, + -0.024379281, + -0.014855316, + -0.012810769, + 0.007518239, + -0.0084564015, + -0.006922991, + -0.010805042, + -0.0054995725, + -0.0052116537, + -0.007738222, + -0.004655226, + -0.004014688, + 0.007447068, + 0.02503923, + -0.00015700066, + 0.027148478, + -0.011037965, + 0.005017551, + -0.018491503, + -0.04026981, + -0.03721593, + -0.007207675, + 0.007000632, + 0.0034582606, + 0.009808649, + -0.044565946, + -0.03405853, + 0.020380769, + -0.002689938, + -0.02048429, + 0.025207452, + 0.007964675, + 0.030202357, + -0.0056580896, + -0.024676906, + 0.03263511, + 0.008081136, + -0.006961812, + -0.019966682, + -0.011102666, + 0.0030797606, + -0.024806308, + 0.00606247, + 0.0038497008, + -0.0074988287, + -0.030098837, + 0.042210836, + 0.0031881344, + -0.013910683, + -0.019177333, + 0.0018763248, + 0.0010344048, + 0.0024634849, + 0.014078906, + 0.039648682, + 0.01744335, + -0.012448444, + -0.02052311, + -0.00058271206, + 0.0056030937, + 0.033980887, + -0.016369315, + -0.0035973673, + 0.009336333, + -0.012241402, + -0.011665564, + -0.014842375, + 0.00986688, + 0.013975384, + 0.025065111, + 0.011710854, + -0.014298889, + 0.008281709, + 0.018491503, + -0.007712342, + -0.027096717, + -0.012480794, + -0.017766854, + -0.032764513, + -0.02582858, + 0.014518871, + -0.021066597, + 0.0048202137, + -0.009756888, + -0.006288923, + -0.013380136, + -0.031004649, + -0.02743316, + -0.010242145, + -0.009401034, + 0.01891853, + 0.019190272, + -0.0030393226, + 0.008249358, + -0.032039862, + -0.020096084, + -0.018789127, + -0.015411743, + -0.01371658, + -0.04459183, + -0.014687094, + 0.0060980553, + -0.012196111, + -0.01515294, + 0.0024133418, + 0.007343547, + 0.025142752, + 0.022826461, + 0.23830618, + 0.0027449336, + -0.0038464656, + 0.029814152, + 0.0019572007, + 0.032945674, + 0.028338974, + 0.004490239, + 0.029193025, + 0.04707634, + -0.0068647605, + 0.003869111, + 0.0036264828, + 0.006974752, + 0.01965612, + -0.011982598, + -0.047024578, + -0.015748188, + -0.008113487, + 0.018543264, + 0.014078906, + 0.00759588, + 0.0093492735, + -0.0057486705, + 0.026294427, + 0.010973264, + -0.0060948203, + 0.00028124652, + 0.0006882553, + 0.0050466666, + 0.0014218013, + -0.017948017, + 0.0050434317, + 0.004389953, + -0.000111103494, + -0.0033806195, + -0.011814375, + -0.004639051, + 0.03273863, + 0.023732273, + 0.0105268285, + -0.0125907855, + -0.041434426, + -0.0070718033, + -0.0036717735, + 0.008210538, + -0.01890559, + 0.0015277489, + 0.02045841, + 0.0027724316, + -0.020005504, + -0.006327743, + 0.017003383, + 0.027950767, + -0.0020186666, + 0.019099692, + 0.016472837, + -0.021079538, + 0.018491503, + -0.0033320938, + -0.018387983, + 0.038354665, + -0.01444123, + 0.010824453, + 0.0060074744, + -0.011296769, + 0.0018569145, + -0.002000874, + 0.032479826, + -0.016861042, + 0.021027777, + 0.017016325, + 0.00170325, + 0.0070718033, + 0.016576359, + -0.006159521, + 0.020393709, + -0.0101321535, + 0.018620905, + -0.0005256944, + -0.0002980283, + -0.025414495, + -0.026294427, + 0.025634477, + -0.005528688, + -0.019345555, + 0.008721675, + -0.004389953, + 0.022955863, + -0.007925854, + -0.002916391, + 0.017365709, + -0.0039952775, + 0.014273008, + 0.015722306, + 0.016628118, + 0.0019636708, + 0.01586465, + -0.020212546, + 0.0048105083, + -0.02808017, + 0.005389581, + -0.008327, + 0.0052828244, + -0.021674786, + 0.017184546, + -0.013218384, + -0.0066383076, + 0.013302496, + 0.00023393401, + -0.003108876, + -0.013470718, + 0.011199717, + -0.021066597, + 0.019280855, + 0.007880564, + 0.0038529357, + -0.012597256, + -0.0227747, + -0.009511026, + -0.00913576, + -0.02743316, + -0.0156058455, + 0.009316923, + 0.0007266714, + -0.018064478, + 0.005897483, + 0.015062358, + 0.008948128, + -0.034317333, + 0.015463504, + -0.020665452, + 0.023253486, + -0.016058752, + -0.007997026, + 0.010067453, + -0.0034388504, + -0.011212658, + 0.008449932, + -0.000091642694, + -0.0069424016, + -0.0095174955, + 0.011329119, + -0.018167999, + 0.0075635295, + -0.0077641024, + -0.019565538, + -0.023369947, + -0.014091846, + -0.023149965, + -0.0051307776, + -0.0024101068, + -0.0048913844, + -0.005302235, + 0.0061271708, + -0.005444577, + 0.00906459, + -0.02278764, + 0.0003433189, + 0.021403043, + -0.0025217158, + 0.004344662, + 0.013250735, + -0.0039014614, + -0.022813521, + 0.01603287, + -0.16356376, + 0.022554718, + 0.018387983, + -0.0018536794, + -0.0009373536, + 0.010817982, + 0.014661213, + 0.038949914, + -0.019707879, + 0.025246272, + 0.010999145, + -0.011367939, + -0.027769607, + -0.01890559, + 0.004477299, + 0.013897743, + -0.006897111, + 0.0027805192, + 0.012416094, + 0.017236307, + 0.009672778, + -0.024832187, + 0.004085859, + 0.013263674, + 0.008475812, + -0.010921504, + -0.026993196, + 0.026708512, + 0.016162273, + 0.0020186666, + -0.008941658, + -0.00571632, + 0.010824453, + 0.0035326665, + 0.0049916706, + 0.013457777, + 0.0036038375, + 0.003788235, + -0.012616666, + -0.005687205, + -0.00841111, + 0.024146358, + -0.00571632, + 0.01821976, + -0.014234188, + -0.00050062285, + 0.029943554, + 0.016925743, + 0.0009737478, + -0.020406649, + 0.010313316, + -0.03046116, + -0.0061045256, + -0.002875953, + 0.011012085, + 0.014932957, + 0.03335976, + 0.008385231, + 0.004771688, + 0.012733128, + 0.017986838, + -0.035714872, + 0.007647641, + 0.004609936, + 0.0142083075, + -0.013153683, + 0.007673521, + 0.0047425725, + -0.012759008, + -0.004859034, + -0.014570632, + -0.011691444, + 0.021079538, + -0.01371658, + 0.006813, + 0.030150598, + -0.012319042, + -0.014182427, + 0.0046681664, + 0.012959581, + -0.0058295466, + 0.0394934, + -0.0154376235, + -0.003196222, + 0.0085146325, + 0.0020623396, + -0.01906087, + -0.0030182947, + -0.032298665, + -0.0079582045, + 0.01215082, + -0.03346328, + 0.0030328524, + -0.029814152, + 0.02193359, + 0.011102666, + -0.008553453, + -0.005020786, + 0.007162384, + -0.0154893845, + 0.006690068, + -0.016265795, + -0.013845982, + 0.017262187, + 0.028571896, + 0.0064053843, + -0.01811624, + 0.016912803, + 0.03423969, + 0.0052342988, + -0.016912803, + 0.024780426, + 0.01220258, + 0.030176478, + 0.024081657, + 0.011697914, + 0.0049754954, + -0.02952947, + 0.00042015116, + 0.017210428, + 0.038949914, + -0.008145837, + -0.030512922, + 0.022929981, + -0.007130034, + -0.009769829, + -0.10212383, + 0.009841, + 0.012500205, + 0.014273008, + 0.0032560704, + 0.019410256, + 0.009433384, + 0.021726547, + 0.00757, + 0.03568899, + -0.0010578589, + -0.013418957, + -0.0050499015, + 0.009038709, + -0.011290299, + -0.014803555, + -0.008974008, + -0.027226118, + -0.021778308, + 0.012836649, + 0.0009915406, + -0.022981742, + 0.004102034, + -0.0073758974, + 0.012765478, + -0.011704384, + -0.02808017, + 0.008003496, + 0.01666694, + 0.011581453, + 0.019474957, + -0.014130666, + -0.01603287, + -0.0035294315, + -0.01366482, + -0.008993419, + -0.01752099, + -0.032013983, + 0.012778418, + -0.045627043, + 0.009316923, + 0.005451047, + 0.002000874, + -0.047412783, + 0.0005968654, + -0.003568252, + -0.02268412, + 0.0038205853, + -0.0015350278, + -0.009310452, + 0.012002008, + 0.013535419, + -0.006677128, + -0.01140029, + 0.045989364, + -0.004205555, + 0.011633214, + 0.030719966, + -0.00837229, + -0.0033288589, + -0.0020380768, + 0.017999778, + 0.0067288885, + 0.028649537, + 0.0013740844, + -0.01827152, + -0.028364854, + 0.0013069572, + 0.019306734, + -0.036775965, + -0.0042087906, + 0.0068712304, + -0.023512289, + 0.0109150335, + -0.02122188, + 0.00030106117, + -0.0228394, + -0.0062759826, + 0.023434648, + -0.007447068, + -0.02968475, + -0.029296545, + -0.004412598, + -0.006146581, + 0.011335589, + 0.027691964, + -0.023253486, + 0.0020041089, + 0.0052828244, + -0.008605214, + 0.0011541015, + 0.052821778, + 0.015204701, + -0.030538803, + 0.0015131911, + 0.011329119, + -0.0003821394, + 0.00026385815, + 0.010293906, + -0.0089610685, + -0.024055777, + -0.0014412114, + -0.051165435, + 0.017909195, + -0.003632953, + -0.022205332, + 0.0068259398, + 0.008831667, + 0.012875469, + -0.020096084, + -0.006324508, + 0.013833042, + -0.019462017, + 0.0062533375, + -0.015722306, + -0.0019410256, + 0.0011904957, + 0.019358495, + 0.029348306, + 0.006651248, + 0.009174581, + -0.012021419, + -0.007453538, + 0.008132897, + 0.0125325555, + 0.013004871, + -0.019850222, + 0.01436359, + -0.017896255, + -0.014803555, + -0.02494865, + -0.012196111, + 0.031651657, + -0.0071688546, + 0.011574983, + 0.047179863, + -0.022218272, + -0.019992564, + -0.020587811, + 0.035404306, + 0.021610085, + -0.029917674, + -0.017805675, + -0.029374188, + -0.00052933383, + -0.022502957, + 0.004037333, + 0.03423969, + 0.010462128, + -0.010151564, + 0.016809281, + -0.008838137, + 0.016226973, + 0.028934222, + 0.017624512, + -0.012377273, + -0.015851708, + -0.0061174654, + 0.022929981, + -0.009562786, + 0.008217008, + -0.025660358, + 0.0019992564, + 0.005059607, + 0.022619419, + 0.009653367, + 0.010798573, + 0.0060462947, + 0.015579965, + 0.0045387647, + 0.0041343844, + 0.00032754807, + -0.023227606, + 0.009569256, + 0.022606477, + -0.0020170491, + 0.018866768, + -0.014014205, + -0.0069359313, + 0.005975124, + -0.014583572, + 0.019940803, + 0.007304726, + -0.008799316, + -0.021648906, + 0.010073923, + 0.043323692, + -0.0100803925, + -0.032039862, + 0.015476444, + -0.005693675, + -0.0059298333, + -0.03038352, + 0.0051728333, + -0.021131298, + -0.0024084894, + -0.0005022404, + -0.010319786, + -0.017663334, + -0.0011775555, + 0.010824453, + 0.03719005, + 0.0006716757, + -0.009970401, + 0.0009041944, + -0.036646564, + -0.017236307, + 0.020743093, + -0.01441535, + -0.018090358, + -0.02127364, + 0.01673164, + 0.0017081025, + 0.004037333, + -0.0069294614, + 0.010397427, + -0.0035035512, + 0.013406017, + -0.028157812, + -0.020846615, + -0.022619419, + 0.016058752, + 0.013897743, + 0.010274495, + 0.001939408, + 0.011555572, + 0.028701298, + 0.024883948, + 0.029141264, + -0.019254973, + 0.009808649, + 0.021648906, + 0.010093333, + -0.010966795, + 0.008449932, + -0.0061692265, + -0.01827152, + -0.022347674, + -0.0022386494, + 0.021532444, + -0.0040114527, + 0.059680067, + 0.00533135, + -0.009989812, + 0.028390734, + -0.0008010774, + 0.0020801325, + 0.024016956, + -0.0064377347, + -0.0046843416, + -0.020872494, + -0.004250846, + 0.010753281, + 0.026242666, + -0.004736102, + -0.014945897, + 0.0066447775, + -0.036284238, + 0.021687726, + -0.033670325, + -0.0037364743, + 0.006586547, + -0.017948017, + 0.01590347, + 0.0029066857, + -0.026837913, + -0.010287436, + 0.009569256, + -0.0020801325, + -0.0066835983, + -0.024793366, + 0.023214666, + -0.016899863, + -0.038820513, + -0.0100803925, + -0.0028516902, + -0.023033503, + -0.025543896, + -0.019138511, + -0.00007218189, + 0.0039920425, + 0.00161833, + 0.00091389957, + -0.032298665, + 0.0037300042, + -0.0062371623, + -0.0058004316, + -0.01604581, + 0.0069359313, + -0.03030588 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 18, + "total_tokens": 18 + } +} +954 1730 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 752 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors are all of the pieces of furniture next to the desk and the desk itself?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 904 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:21:19 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1237 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999862 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_9926a98b9a3d49bf8f5604c3dd741331 + +{ + "id": "chatcmpl-EREOFm054yeUZZqb0tRxk6Xd650Qu", + "object": "chat.completion", + "created": 1790158879, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The desk is orange, the chair beside the desk is beige, and the lamp beside the desk is black.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 126, + "completion_tokens": 22, + "total_tokens": 148, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_109d5ede69" +} diff --git a/vectorstores/dolt/testdata/TestDoltStoreRest.httprr b/vectorstores/dolt/testdata/TestDoltStoreRest.httprr new file mode 100644 index 000000000..3eeedeb17 --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltStoreRest.httprr @@ -0,0 +1,4721 @@ +httprr trace v1 +256 67811 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 61 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["tokyo","potato"]}HTTP/2.0 200 OK +Content-Length: 66856 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:27 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 83 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-xzdkj +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999998 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_3d26589cc30c4fde99c41f2578488263 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.008533556, + 0.0014080032, + -0.010539479, + -0.014651955, + -0.010988966, + 0.012142874, + -0.036978744, + 0.00235981, + -0.014812965, + -0.038239993, + 0.0062223845, + -0.015269161, + 0.011740348, + -0.02619104, + -0.015228909, + -0.01734888, + 0.022621974, + -0.01937493, + 0.017093947, + -0.01806001, + -0.009070258, + 0.015618018, + -0.004125894, + -0.027371783, + -0.012498439, + -0.014504362, + 0.007305851, + -0.0207301, + 0.01004303, + -0.020864276, + 0.01631573, + -0.013820067, + -0.010646819, + -0.017254958, + 0.0031111923, + -0.004622343, + -0.010606566, + -0.008741528, + 0.0027019572, + -0.0042097536, + 0.005702455, + -0.016235225, + -0.0030893888, + -0.012578945, + -0.023977146, + 0.0073729386, + -0.01140491, + 0.012968053, + -0.0033761887, + 0.014168924, + 0.010807829, + 0.018999238, + -0.0352613, + -0.0080706505, + -0.02373563, + -0.0012956313, + -0.030779839, + -0.0047934167, + 0.0034449536, + 0.0035858378, + -0.002752273, + -0.006460546, + -0.01745622, + 0.011847689, + 0.018100264, + -0.018140515, + -0.011136559, + 0.02836468, + -0.017697737, + -0.0014717365, + 0.022943996, + 0.020649595, + -0.0025107574, + 0.00168474, + 0.036549382, + -0.01200199, + 0.0014599962, + -0.00029015433, + 0.008305457, + 0.0134510845, + 0.021763252, + -0.042372596, + 0.004920883, + -0.0032285957, + 0.009157471, + 0.010982257, + -0.010707198, + 0.032604624, + 0.0072387634, + -0.004162792, + 0.010136953, + 0.008540265, + 0.010901752, + 0.011069471, + -0.02836468, + -0.0015295997, + -0.007654707, + 0.048866685, + -0.02313184, + -0.013196152, + -0.006688644, + 0.0035221046, + 0.0070643355, + -0.00834571, + -0.032336272, + 0.00905684, + 0.015336249, + -0.0129278, + 0.0025057257, + -0.0144238565, + -0.00014235172, + 0.031504385, + -0.0054039145, + -0.05342865, + -0.02346728, + -0.018905316, + -0.0015648208, + -0.018650383, + -0.008828742, + -0.012800334, + 0.009479493, + 0.010660237, + 0.026445974, + 0.0047397465, + 0.025775095, + -0.0072119283, + -0.0086408965, + -0.0103717595, + 0.0003601771, + -0.010519352, + 0.03469776, + 0.01069378, + 0.0101101175, + 0.015953457, + -0.028820878, + 0.015483842, + -0.01615472, + 0.009613669, + -0.019254172, + -0.009076967, + 0.0037502027, + 0.010982257, + -0.008842159, + 0.010579731, + 0.0066651637, + 0.021427812, + 0.029116064, + 0.005746062, + 0.0036428624, + -0.004830315, + -0.0010306349, + -0.011740348, + 0.021146044, + -0.000048035847, + 0.0046693045, + 0.006950286, + 0.029760106, + 0.008969626, + 0.00024507978, + 0.0132632395, + -0.000092088354, + 0.0027002802, + 0.03475143, + -0.019683532, + 0.0006000157, + 0.023037918, + 0.0075540757, + 0.020985033, + 0.0032185325, + -0.0101101175, + -0.013444376, + 0.01418234, + -0.038535178, + 0.01042543, + 0.002062947, + 0.023588037, + 0.01718787, + 0.015779028, + -0.024191827, + -0.009123928, + -0.0011388138, + 0.0026583504, + 0.03359752, + 0.020864276, + -0.011331113, + 0.0046625957, + 0.029116064, + 0.018194186, + -0.0019438663, + -0.008251788, + 0.022353623, + 0.031584892, + 0.0312092, + 0.005907072, + -0.67409724, + -0.028337847, + 0.014370186, + -0.00327388, + 0.026123952, + 0.01129086, + 0.014799547, + 0.0065444056, + -0.013303492, + 0.013706018, + -0.03378537, + 0.014276263, + -0.014115253, + -0.014262846, + -0.010707198, + -0.00095683837, + 0.012773499, + -0.009217851, + 0.0007991823, + 0.01025771, + -0.0012327366, + 0.016932936, + -0.0148398, + 0.0017694383, + 0.013323618, + -0.01718787, + 0.00943924, + -0.01140491, + -0.009727717, + 0.023936894, + -0.034295235, + 0.04086983, + 0.0069435774, + -0.015872952, + 0.035824835, + -0.012116039, + -0.024849286, + 0.026553314, + 0.025077384, + 0.040011108, + -0.004266778, + 0.0004216043, + -0.0020277258, + 0.0064202934, + 0.0042131077, + 0.004595508, + 0.03268513, + -0.03104819, + 0.0066752266, + -0.014101836, + 0.015779028, + -0.037032414, + -0.021964515, + -0.01877114, + -0.0018616838, + 0.0050550587, + 0.010921879, + -0.022621974, + -0.0007715086, + -0.00048345077, + -0.011720222, + -0.0025476555, + -0.021011868, + -0.020220235, + -0.008245079, + 0.008587226, + -0.011988573, + -0.018261272, + 0.0036529256, + -0.021722998, + 0.010083282, + 0.015000811, + -0.010318089, + -0.0022273117, + 0.013873737, + 0.015524095, + 0.031799573, + -0.03126287, + -0.001854975, + -0.008218244, + 0.0069368687, + 0.011592755, + -0.017805077, + 0.0018868417, + 0.02341361, + -0.02946492, + -0.035798, + -0.010660237, + 0.020891111, + -0.018382031, + 0.0048739216, + -0.003475143, + -0.001501926, + 0.001458319, + 0.00017883067, + 0.005222778, + -0.0006138525, + -0.012592362, + 0.0035321678, + -0.0051255007, + -0.016409652, + -0.008976335, + 0.013390706, + 0.0005387981, + -0.0105126435, + -0.002769045, + -0.016396236, + 0.017308628, + 0.028901383, + -0.0122435065, + 0.01391399, + -0.010687072, + -0.014638538, + -0.00867444, + 0.021561988, + -0.024151573, + 0.021374144, + 0.009533163, + 0.026754577, + 0.010391885, + 0.0063263704, + -0.003683115, + 0.018194186, + 0.014772712, + 0.01233072, + 0.023574619, + 0.014973976, + -0.0062123216, + -0.0068831984, + 0.0053066374, + -0.01074745, + 0.012498439, + 0.016409652, + -0.016181555, + 0.016033962, + -0.009975942, + -0.000742577, + -0.005424041, + 0.01227705, + -0.042855624, + -0.040950336, + -0.013732853, + -0.0014901856, + 0.0012042243, + 0.013565134, + -0.028176837, + -0.017885583, + 0.0066047846, + -0.01679876, + 0.007715086, + -0.006889907, + -0.004135957, + -0.025989776, + 0.013303492, + -0.008305457, + -0.015067899, + -0.0033543853, + -0.0015681752, + -0.013981078, + 0.009123928, + 0.006661809, + 0.0064639, + -0.036737226, + 0.0028461958, + 0.0015623049, + -0.025721425, + 0.010264419, + 0.015966874, + -0.00055724726, + -0.017992923, + -0.017214704, + -0.019267589, + -0.017979505, + 0.0027355012, + 0.020394662, + 0.006956995, + 0.0052999286, + -0.013008306, + -0.0012218348, + 0.006393458, + 0.006074792, + -0.022474382, + -0.0044378517, + 0.004830315, + 0.025949525, + -0.029062394, + 0.007943184, + 0.019764038, + -0.0070710443, + 0.0040554516, + -0.01293451, + 0.019790873, + 0.003022301, + 0.0042365887, + 0.018543042, + -0.010338215, + 0.013350453, + 0.009419113, + -0.020394662, + 0.018046593, + 0.033758532, + -0.026043447, + 0.0045217113, + -0.01004303, + 0.012679576, + -0.02384297, + -0.0043674097, + -0.020287322, + 0.025493328, + 0.010049738, + 0.0030960976, + -0.017120782, + -0.0055582165, + 0.012954636, + -0.0036696976, + 0.04282879, + 0.006990539, + 0.019401764, + -0.026123952, + -0.0081847, + 0.017590396, + -0.033463348, + -0.009855184, + -0.017550144, + -0.012800334, + 0.010143661, + 0.001518698, + 0.03236311, + 0.01806001, + -0.006651746, + -0.02941125, + -0.021360725, + -0.004068869, + 0.023990564, + -0.0112237735, + -0.035610154, + 0.00096606294, + -0.027197355, + 0.034724597, + 0.008573809, + 0.020824024, + 0.01795267, + 0.035180792, + -0.024621187, + 0.007319269, + 0.006722188, + 0.03612002, + 0.013498046, + -0.0084262155, + 0.022554886, + -0.011586047, + -0.003938048, + -0.00496449, + 0.0010440524, + 0.011344531, + -0.029169735, + 0.01681218, + -0.0015061189, + 0.016543828, + 0.02700951, + 0.0045082937, + 0.0021702873, + 0.011867815, + 0.0019992136, + 0.0035053326, + -0.0006184648, + 0.026620401, + 0.015014228, + -0.0021652556, + 0.008298749, + -0.01729521, + 0.009144054, + -0.007218637, + -0.005313346, + 0.017483056, + -0.017415969, + -0.022554886, + -0.013873737, + 0.014933723, + 0.013229695, + -0.0137127265, + -0.051335514, + -0.0033543853, + 0.008318875, + -0.0014591576, + -0.030189468, + -0.0013761366, + -0.022138942, + -0.015457007, + 0.02078377, + 0.010613275, + 0.023668543, + 0.013940825, + -0.02085086, + -0.017845329, + -0.006651746, + 0.019240754, + -0.0155375125, + -0.0032537538, + -0.008446342, + 0.0064538373, + -0.012397808, + -0.009405696, + 0.0112707345, + 0.013498046, + 0.0134510845, + 0.009211142, + -0.0055414443, + -0.00785597, + 0.00012274954, + 0.002577845, + -0.013571843, + -0.017375715, + 0.01309552, + 0.010344924, + -0.0066148476, + -0.010217457, + 0.0024151574, + 0.02407107, + -0.007319269, + -0.017590396, + -0.0019891504, + -0.02204502, + -0.004588799, + 0.06606797, + 0.00845976, + 0.013524882, + -0.0010541156, + 0.006265992, + 0.0022558242, + -0.020287322, + 0.00009701511, + 0.012847295, + 0.007507114, + 0.0054609394, + -0.0066819354, + 0.0010390208, + 0.0070643355, + 0.00046835604, + -0.002802589, + -0.011559212, + -0.019388346, + 0.022782985, + -0.023386775, + 0.00089226646, + 0.0036864693, + 0.008285332, + 0.02252805, + 0.0006360753, + -0.0050550587, + 0.019093161, + 0.021400979, + 0.015483842, + -0.02400398, + -0.0009954139, + 0.012921092, + -0.015631435, + 0.012592362, + -0.010734033, + 0.002760659, + 0.004102413, + 0.0155375125, + 0.005021515, + -0.009975942, + 0.012216671, + 0.01932126, + 0.0026801538, + -0.0056991004, + 0.021977931, + -0.025198141, + -0.015148404, + 0.018247856, + -0.016731674, + -0.029947951, + 0.03389271, + 0.0076681245, + -0.04014528, + -0.020864276, + -0.014075001, + 0.013115646, + -0.020917946, + -0.018690635, + -0.000033255586, + 0.02280982, + 0.007996854, + -0.050181605, + 0.006658455, + -0.009727717, + -0.028176837, + -0.030457819, + -0.01167997, + -0.0046022166, + -0.028337847, + -0.002445347, + -0.007647998, + -0.021790087, + -0.024862703, + 0.024044234, + 0.019442016, + -0.024232078, + 0.004457978, + -0.00992898, + 0.00055389287, + 0.03617369, + -0.030350478, + -0.013430959, + -0.021105792, + -0.008204826, + -0.02476878, + 0.0201934, + 0.02941125, + -0.03410739, + -0.009606959, + -0.0005840823, + 0.011378075, + -0.0016713225, + 0.011284152, + 0.020649595, + 0.0148263825, + -0.011451871, + 0.0111768115, + 0.029706435, + -0.0045116483, + -0.01663775, + 0.0151349865, + -0.00943924, + 0.0016193294, + 0.012062369, + 0.00774863, + 0.02117288, + 0.01626206, + 0.019240754, + -0.011304278, + 0.00041321834, + 0.041943233, + -0.014558032, + 0.0118879415, + 0.017724572, + -0.0072320546, + 0.021454647, + 0.007339395, + 0.029438084, + 0.01893215, + -0.01462512, + 0.0055246726, + -0.023266016, + 0.016355982, + 0.017147617, + 0.011384783, + -0.003934694, + 0.019079743, + -0.007715086, + -0.008157865, + 0.00466595, + -0.0055615706, + 0.011995282, + -0.015054481, + -0.018019758, + -0.023588037, + 0.0018214312, + -0.027854815, + 0.013397414, + 0.0056957463, + -0.03628103, + -0.010063156, + -0.004987971, + 0.008741528, + -0.002576168, + -0.026553314, + -0.023990564, + -0.00035933853, + 0.012485022, + 0.0029669537, + 0.019442016, + -0.0009232945, + 0.013061976, + -0.015255744, + -0.00216861, + -0.018261272, + -0.032497283, + -0.022957413, + -0.023655124, + 0.008097486, + 0.015872952, + 0.024030816, + 0.011035928, + -0.0023279435, + -0.010948714, + -0.0067725037, + 0.013209569, + -0.004920883, + 0.025453076, + -0.017845329, + 0.023400191, + 0.014987393, + 0.01271312, + -0.022460964, + 0.0015857856, + -0.02798899, + 0.02199135, + -0.0037300764, + 0.0035724202, + -0.012565527, + -0.029706435, + -0.0009107156, + -0.014142089, + -0.0051422725, + -0.0002387903, + -0.0015388242, + 0.0019522522, + 0.0049745534, + -0.006732251, + 0.03142388, + -0.0039850096, + 0.010385177, + -0.012404516, + 0.0031413818, + -0.004300322, + 0.0005509578, + 0.004327157, + -0.011814144, + -0.0040889955, + -0.0030105608, + 0.02668749, + 0.02264881, + -0.009452658, + -0.0010356664, + 0.0003169894, + 0.011908067, + 0.035744328, + -0.00009811577, + -0.014772712, + -0.0043774727, + -0.014034748, + -0.025385987, + -0.018341778, + 0.00033921222, + -0.019723786, + -0.022514634, + 0.012907675, + -0.017067112, + 0.022501215, + -0.02951859, + -0.02635205, + 0.021951096, + 0.0090434225, + 0.022729315, + 0.016355982, + 0.010251001, + -0.00025430432, + -0.001171519, + -0.009835058, + -0.005182525, + -0.013981078, + -0.001215126, + 0.016396236, + 0.030484654, + -0.020609343, + -0.028928218, + -0.010009485, + 0.0024705047, + 0.0022776276, + -0.008419507, + 0.014222593, + 0.0005153174, + 0.009566707, + -0.024057651, + -0.0011497155, + -0.025882436, + 0.038481507, + -0.014772712, + 0.0047062025, + -0.002480568, + -0.030618828, + -0.0054106233, + 0.018153934, + -0.010029612, + 0.009311774, + 0.013833485, + -0.016959772, + 0.0020478521, + -0.018462537, + -0.018194186, + 0.02046175, + 0.0029568905, + 0.026647236, + 0.009513036, + -0.008285332, + 0.013779814, + 0.010599857, + -0.013632222, + 0.0006297858, + 0.004833669, + 0.024419924, + -0.007943184, + -0.009526454, + -0.018797975, + -0.0017006734, + 0.00094090507, + 0.0022776276, + 0.009298356, + -0.013176025, + -0.02003239, + -0.005746062, + 0.009700882, + 0.006269346, + -0.004572027, + -0.007044209, + -0.025278646, + -0.030350478, + -0.009117219, + 0.0016620979, + 0.012169709, + -0.01663775, + -0.009224559, + -0.0037233676, + -0.02946492, + 0.01745622, + -0.011693387, + -0.0042097536, + 0.009935689, + 0.027251026, + -0.016906101, + 0.009620377, + -0.007547367, + 0.019455435, + -0.025090802, + -0.006044602, + -0.0030742942, + -0.01674509, + 0.013887155, + -0.01358526, + -0.0122904675, + -0.021253385, + 0.012357555, + 0.0021971224, + 0.0062794094, + 0.021843757, + 0.042962965, + -0.020354409, + -0.0024654733, + -0.025761679, + -0.025520163, + 0.009452658, + -0.009996068, + 0.02008606, + 0.024916373, + -0.001707382, + 0.0012134488, + 0.013061976, + -0.012082496, + -0.00878849, + -0.010391885, + -0.03115553, + -0.008647605, + 0.0130015975, + -0.014142089, + -0.007815718, + -0.017469639, + 0.0012578944, + -0.0071716756, + 0.0097545525, + 0.008151156, + 0.0011295893, + 0.0004297806, + 0.025171306, + 0.011492124, + 0.012022117, + -0.013310201, + -0.024352837, + 0.011310987, + -0.007654707, + -0.026902169, + -0.03459042, + -0.0025979714, + 0.01544359, + 0.0014096803, + -0.02085086, + -0.022675645, + 0.010727324, + -0.02836468, + -0.0049376553, + -0.010821247, + 0.026110535, + 0.017670901, + -0.010848082, + 0.0077888826, + 0.006651746, + 0.019737203, + 0.008037107, + 0.004048743, + 0.01042543, + 0.034134224, + -0.031128695, + 0.03252412, + 0.0111768115, + -0.019160248, + -0.008748237, + 0.008828742, + -0.002343038, + 0.005712518, + 0.013591969, + -0.008251788, + -0.008567099, + -0.011357948, + 0.0051020198, + -0.025560416, + 0.018757721, + 0.006198904, + -0.046854053, + 0.026365468, + 0.013155899, + -0.010861499, + 0.00041133148, + 0.0111768115, + -0.0046894304, + -0.0024252206, + 0.0062928265, + -0.030243138, + -0.0018063365, + 0.0004939332, + -0.023708794, + 0.029760106, + -0.011753766, + 0.0111768115, + 0.02307817, + 0.021481482, + -0.0052730935, + -0.02471511, + -0.003683115, + -0.011384783, + -0.008694567, + 0.025520163, + -0.0027623363, + -0.027452288, + -0.004042034, + 0.02199135, + -0.042426266, + 0.011304278, + 0.009828349, + -0.0056018233, + -0.018086845, + 0.0098015135, + 0.025493328, + -0.02984061, + -0.0151349865, + 0.009117219, + -0.015738776, + -0.009311774, + -0.010244292, + 0.028472021, + -0.026392303, + 0.018408867, + 0.0017207996, + -0.002237375, + -0.03874986, + -0.01467879, + 0.0053871428, + -0.0077687562, + -0.008466468, + 0.21124576, + -0.019656697, + -0.00076354196, + 0.04103084, + -0.009996068, + 0.03775696, + 0.027251026, + 0.0010784349, + -0.011344531, + 0.0022055083, + -0.038320497, + 0.0075339493, + 0.01544359, + -0.0013962629, + -0.00020388373, + -0.01871747, + -0.024191827, + -0.02782798, + -0.041379698, + 0.0017358944, + 0.009197724, + 0.0018683926, + 0.0033208414, + -0.014544615, + 0.018784557, + 0.011250608, + -0.005222778, + -0.008868994, + 0.017563561, + 0.018891897, + 0.0015430172, + 0.0030172695, + -0.0014792839, + 0.014866635, + -0.0057661883, + -0.0026633819, + -0.005642076, + -0.008137738, + 0.031772736, + 0.023762465, + -0.0022541468, + 0.0028965117, + -0.005947325, + -0.009009879, + -0.007446735, + 0.023091588, + -0.007929767, + 0.0031279642, + -0.011921485, + 0.030296808, + -0.037354436, + -0.015121569, + 0.040574644, + 0.02471511, + 0.011592755, + -0.013732853, + 0.03322183, + 0.00682282, + -0.009915562, + -0.008104195, + -0.020126311, + 0.02291716, + -0.010358342, + 0.02352095, + 0.005216069, + -0.0038810237, + -0.01478613, + 0.0061888406, + -0.0007912156, + -0.010324798, + 0.017254958, + -0.011431745, + -0.009070258, + -0.021092374, + -0.033517018, + -0.023547783, + 0.032711964, + 0.005598469, + 0.011398201, + 0.0348051, + -0.005088602, + 0.009486201, + 0.02580193, + 0.004535129, + 0.00022180872, + -0.01937493, + 0.017415969, + 0.010130243, + 0.015309414, + -0.00709117, + -0.008761655, + -0.024205243, + -0.008976335, + -0.017872164, + -0.009781388, + 0.01200199, + -0.005940616, + 0.016074214, + -0.010848082, + -0.014061583, + -0.009499619, + -0.028015826, + 0.011438454, + -0.0069368687, + 0.0058299215, + 0.007829135, + -0.00030021748, + -0.0067792125, + -0.00050525425, + -0.030967684, + 0.0037233676, + -0.037569113, + 0.0070643355, + 0.01615472, + 0.0077016684, + -0.0020881048, + -0.016248642, + -0.025949525, + 0.018140515, + -0.019401764, + 0.02307817, + -0.017872164, + -0.009519746, + -0.006363269, + -0.004726329, + -0.008889121, + -0.0062794094, + -0.014303098, + 0.0056823287, + -0.041621212, + 0.003022301, + -0.0030742942, + 0.022514634, + -0.0012444769, + -0.0064639, + 0.018556459, + 0.0053670164, + -0.010707198, + -0.017268375, + 0.026164206, + 0.008969626, + -0.008385963, + 0.019683532, + 0.0026617048, + -0.0051758164, + -0.020904528, + 0.0063431426, + 0.021105792, + -0.016074214, + 0.010861499, + -0.021548571, + -0.021065539, + -0.0011471998, + -0.014061583, + 0.030162632, + -0.007882806, + -0.022943996, + -0.01985796, + 0.0033225187, + 0.0111768115, + -0.030243138, + -0.009204433, + 0.049725406, + -0.02193768, + -0.027532794, + -0.011539085, + -0.17464271, + 0.028981889, + 0.019133413, + -0.022165777, + 0.026767993, + 0.010807829, + -0.0056991004, + -0.018247856, + -0.0051925885, + 0.016758509, + 0.05173804, + 0.013075394, + -0.008600644, + -0.011243899, + 0.0037032412, + -0.007876096, + -0.0034784975, + 0.0049477182, + 0.028981889, + 0.013692601, + 0.0470419, + -0.03137021, + 0.0148263825, + -0.00062517356, + -0.0007048402, + 0.024084486, + -0.00038973763, + -0.00087381736, + 0.016275477, + -0.010633402, + -0.023333104, + -0.013216278, + 0.03501978, + 0.022353623, + 0.009989359, + 0.013659056, + -0.008627479, + -0.018207602, + -0.019348094, + 0.03595901, + 0.005779606, + 0.010666945, + -0.003039073, + -0.012672868, + 0.0124313515, + 0.03088718, + 0.008278623, + -0.003917922, + -0.025761679, + -0.008775072, + 0.021454647, + -0.016610915, + -0.0030172695, + 0.01936151, + 0.00867444, + -0.0107742855, + 0.008627479, + 0.0098954365, + 0.0017845329, + -0.013752979, + -0.03469776, + -0.012283759, + 0.021602241, + 0.0018415574, + -0.015067899, + 0.0014172278, + -0.01222338, + -0.010546187, + -0.019281005, + 0.017805077, + 0.0009258103, + -0.016194971, + 0.021199714, + -0.043177646, + 0.019240754, + 0.005024869, + -0.009647212, + 0.024191827, + 0.019670116, + -0.0005023192, + -0.022474382, + 0.052999288, + -0.0148263825, + -0.0047665816, + 0.0010633401, + 0.009955815, + 0.0043841815, + -0.011438454, + -0.029277075, + -0.021696163, + 0.02199135, + -0.025520163, + -0.014638538, + -0.0109151695, + -0.0012620875, + 0.010687072, + -0.007876096, + 0.023695378, + -0.021951096, + 0.004692785, + 0.011834271, + -0.009700882, + -0.010163788, + 0.043231316, + 0.026003195, + 0.023910059, + 0.018301526, + 0.026016612, + 0.01930784, + 0.008057233, + -0.020837441, + 0.002262533, + 0.015175239, + 0.02629838, + -0.024876121, + 0.0036965325, + 0.013122355, + -0.01320286, + 0.009519746, + 0.007574202, + 0.037086084, + -0.015819281, + 0.0041393116, + 0.023883224, + -0.008936082, + -0.026445974, + -0.07358179, + 0.0043674097, + 0.006765795, + 0.022393877, + -0.0055951145, + 0.039501242, + 0.0112707345, + 0.011310987, + -0.0024067715, + 0.018449118, + -0.0077352123, + -0.018019758, + 0.00911051, + -0.01985796, + 0.024809033, + -0.0033208414, + -0.0022876908, + -0.002638224, + -0.0043170936, + 0.023091588, + -0.014973976, + -0.016839014, + 0.004830315, + -0.010479099, + -0.01473246, + 0.0066752266, + -0.010713906, + 0.017831912, + 0.015725357, + 0.0072991424, + 0.0033493536, + 0.004387536, + 0.00965392, + -0.026982674, + -0.013310201, + 0.013954243, + -0.010700489, + 0.008278623, + 0.03365119, + -0.051469687, + -0.0030189466, + 0.012760081, + -0.0061687143, + -0.0034717887, + -0.009828349, + -0.013383997, + -0.028579362, + 0.00679263, + -0.00336948, + -0.015966874, + -0.018838227, + -0.0043170936, + 0.0026650592, + -0.008271914, + 0.017415969, + -0.005625304, + 0.004927592, + 0.0253189, + -0.03464409, + 0.01681218, + 0.0035824834, + -0.0038072274, + -0.014920305, + 0.02925024, + 0.008667732, + 0.011411618, + -0.018435702, + -0.033114493, + 0.031853244, + -0.018757721, + -0.015577765, + 0.021239968, + -0.020810606, + 0.00534689, + -0.027693804, + -0.010633402, + -0.00274221, + -0.017120782, + 0.018972402, + -0.024057651, + -0.014236011, + -0.028391516, + 0.0015069576, + 0.007050918, + 0.0030357186, + 0.0041762097, + 0.010942005, + -0.0034248272, + 0.018314943, + -0.016476741, + 0.005407269, + 0.008164573, + 0.0094929105, + -0.029438084, + -0.006276055, + 0.022380458, + 0.002037789, + -0.015000811, + 0.002542624, + 0.0071783843, + -0.013457794, + -0.022340206, + -0.07546025, + 0.028659867, + 0.0013124032, + -0.008292041, + 0.020502003, + 0.005128855, + 0.018704053, + 0.0069704126, + 0.0116732605, + -0.022541469, + -0.045082938, + 0.009459366, + -0.013457794, + -0.0042466517, + -0.032953482, + -0.024809033, + 0.024996879, + 0.020743519, + 0.008681149, + 0.015913203, + 0.011357948, + 0.0013442698, + 0.024272332, + 0.010391885, + -0.03410739, + 0.0077620475, + -0.0030055293, + 0.026593566, + -0.024970043, + -0.015779028, + 0.0258556, + -0.027479123, + -0.007963311, + 0.009157471, + 0.0001614298, + -0.0061620055, + 0.0016956418, + 0.0126929935, + 0.009432531, + 0.031450715, + -0.020555673, + -0.0069435774, + 0.012283759, + -0.011257317, + 0.00649409, + 0.0001541969, + 0.0020797187, + 0.0052294866, + 0.017120782, + 0.016329147, + -0.010526061, + 0.03349018, + -0.008258496, + -0.0069033247, + -0.0057628336, + -0.026284963, + 0.017000025, + 0.0105126435, + -0.008493303, + -0.0113176955, + 0.023252599, + 0.004424434, + 0.016825596, + 0.010948714, + 0.012404516, + -0.007822426, + -0.02286349, + -0.0028428414, + 0.012491731, + -0.035529647, + -0.02930391, + 0.007970019, + 0.009808223, + 0.014397021, + 0.008714693, + 0.0009325191, + 0.0090903845, + -0.0067456686, + -0.03357069, + 0.023923475, + 0.005085248, + -0.000054613585, + -0.053348143, + 0.0060546654, + 0.01255211, + -0.01816735, + -0.0072052195, + -0.012458187, + -0.01953594, + 0.026835082, + -0.005447522, + -0.0075674932, + 0.0049846163, + 0.0030524905, + 0.0028327783, + 0.018757721, + -0.008325584, + -0.022031602, + 0.026794828, + 0.028418351, + 0.01871747, + -0.0074936966, + -0.011633008, + -0.0070106653, + -0.012833878, + -0.009747843, + -0.019884795, + -0.022018185, + 0.009975942, + 0.01462512, + 0.02286349, + 0.015792446, + -0.0005379595, + 0.018596712, + -0.01031138, + 0.006520925, + -0.017831912, + -0.036254197, + -0.01936151, + 0.018891897, + 0.03378537, + 0.021213133, + 0.026942423, + -0.005997641, + 0.016047379, + -0.0019203855, + 0.008942791, + -0.02613737, + 0.0029417959, + -0.0035153958, + 0.01626206, + 0.00976797, + -0.017899, + -0.0025308838, + -0.00878849, + 0.0038273535, + 0.0076681245, + 0.02836468, + -0.003978301, + 0.05291878, + -0.01135124, + 0.0014675435, + -0.0017375716, + 0.0059607425, + 0.02122655, + -0.004655887, + 0.016718255, + -0.025412822, + -0.014705625, + 0.0030575222, + -0.011163394, + 0.00698383, + -0.014598285, + -0.02471511, + -0.0051355637, + -0.020354409, + 0.019442016, + -0.010398595, + 0.015685106, + 0.037783794, + -0.003874315, + 0.02658015, + 0.018395448, + -0.013571843, + 0.0013308524, + 0.021535153, + 0.011612882, + 0.009305065, + -0.02389664, + 0.016825596, + -0.00226421, + -0.018650383, + -0.0112707345, + 0.0061519425, + -0.015054481, + -0.02613737, + 0.009996068, + 0.0024587645, + 0.014665373, + 0.0005983385, + 0.019227337, + -0.020985033, + -0.024299167, + 0.01734888, + -0.005806441, + -0.003579129, + -0.0024621189, + -0.01948227 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 4, + "total_tokens": 4 + } +} +247 34475 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 52 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["japan"]}HTTP/2.0 200 OK +Content-Length: 33520 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:30 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 90 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-wftmv +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999999 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_28943efa2b9f4d58b3a294053b6896a4 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0025093954, + -0.014704405, + -0.0073522027, + -0.02217393, + -0.008075691, + 0.017116033, + -0.024598593, + 0.0051230774, + 0.014808692, + -0.039342105, + -0.0152910175, + 0.011536702, + 0.005507634, + -0.023177689, + 0.0012546977, + -0.0012180345, + 0.019983914, + -0.018875869, + 0.02467681, + -0.017037818, + -0.009405345, + 0.026501823, + 0.0047776285, + -0.0016522902, + 0.008303817, + 0.0038748977, + 0.0046766005, + -0.019006226, + 0.008773107, + -0.005448973, + 0.00782801, + -0.007977922, + -0.0087079285, + -0.027140578, + 0.0075477404, + -0.009196771, + -0.011621434, + -0.01291198, + -0.0018624929, + -0.012527424, + 0.019579802, + -0.009066413, + -0.012436173, + -0.00083307043, + -0.010213565, + 0.022108752, + -0.014743513, + 0.005768351, + -0.008492837, + 0.026058605, + 0.02089642, + 0.03381492, + -0.030243104, + -0.014274224, + -0.026827719, + -0.005315356, + -0.03334563, + -0.0094379345, + -0.0065146512, + 0.00045136528, + 0.0052729896, + 0.021678569, + -0.03459707, + 0.012768586, + 0.012827247, + -0.012468763, + -0.00036948404, + 0.012560013, + -0.016672814, + -0.008544981, + 0.030634178, + 0.027922727, + 0.006045362, + 0.003698914, + 0.024624664, + -0.006325632, + -0.0067069298, + -0.008584088, + 0.0030406052, + 0.013765827, + 0.019162657, + -0.031259898, + 0.0016294776, + -0.0118625965, + 0.007899707, + 0.0049307994, + -0.034232065, + 0.03449278, + 0.006967646, + -0.0044680275, + 0.011100002, + 0.01160188, + 0.011504112, + 0.02024463, + -0.028887378, + -0.014443689, + -0.0041095424, + 0.043617856, + -0.006182238, + -0.025719674, + -0.017142104, + 0.0192148, + -0.008773107, + -0.012879391, + -0.024116268, + 0.010037581, + 0.0064788028, + -0.010115797, + 0.016359955, + -0.0086362315, + -0.009118557, + 0.0281313, + 0.006100764, + -0.053290434, + -0.010721963, + -0.018980155, + 0.011256431, + 0.0030520116, + -0.008942573, + -0.01930605, + 0.017572286, + 0.023490548, + 0.016425135, + 0.000037987196, + 0.026749505, + 0.003094378, + -0.008193013, + -0.017702645, + 0.000025320554, + -0.0077497954, + 0.022916973, + 0.0109175, + 0.0000014878531, + 0.016751029, + -0.017441928, + 0.0029949797, + -0.0130293025, + -0.00095080014, + -0.018380508, + -0.016894424, + 0.0015748901, + 0.0033925723, + -0.0026055346, + 0.007065415, + 0.011113037, + 0.018302292, + 0.014795656, + -0.00048925064, + -0.005377276, + 0.001883676, + -0.0040965066, + -0.020049091, + 0.028835235, + 0.00043425578, + 0.023894658, + 0.011269467, + 0.0125926025, + 0.01319225, + 0.011784382, + 0.0039596306, + -0.0012579567, + -0.006032326, + 0.01753318, + -0.012116795, + -0.009333648, + 0.024533415, + 0.013896185, + 0.00623764, + 0.00089621264, + -0.0038879334, + -0.02420752, + 0.01800247, + -0.03746495, + 0.01565602, + -0.0050839703, + 0.0017158398, + 0.0050285677, + 0.015760306, + -0.024194483, + -0.0127751045, + -0.011425897, + 0.021639463, + 0.01977534, + 0.006693894, + -0.005813976, + -0.002207942, + 0.011947329, + 0.008740517, + 0.0064788028, + -0.016829245, + 0.014482797, + 0.038820673, + 0.022890901, + 0.016021024, + -0.6841199, + -0.04638145, + 0.011191252, + 0.007638991, + 0.03477957, + 0.021078922, + 0.017076924, + 0.008883912, + -0.01001151, + 0.019136585, + -0.024155376, + 0.012735996, + -0.008747036, + -0.011184734, + 0.0005059528, + -0.0062930426, + 0.011210806, + -0.030373462, + -0.0038716388, + -0.0065113925, + -0.015369233, + 0.008003994, + -0.015173695, + 0.0005088044, + -0.0022600854, + -0.0021036556, + 0.00041205416, + 0.001955373, + -0.0053674993, + 0.034883857, + -0.04270535, + 0.033554204, + 0.01827622, + -0.0109696435, + 0.03384099, + -0.025067883, + -0.02199143, + 0.03728245, + 0.020453202, + 0.029956317, + -0.0021199503, + -0.010278745, + -0.0013483927, + -0.009183736, + -0.004164945, + -0.0027081918, + 0.024807166, + -0.018419614, + 0.0036174401, + -0.015864594, + 0.012234118, + -0.01565602, + -0.01755925, + -0.012762069, + 0.00075567025, + 0.019345157, + -0.0024458459, + -0.02495056, + 0.003200294, + -0.003995479, + -0.019123549, + 0.0070849685, + -0.016920496, + -0.005282766, + -0.0075216684, + -0.003175852, + -0.034075636, + 0.0024491048, + 0.013179215, + -0.018315328, + -0.0013964623, + 0.009744276, + -0.0033632417, + -0.0030520116, + 0.010682855, + 0.022186967, + 0.013987436, + -0.026149856, + -0.019801412, + -0.019996949, + 0.008512391, + 0.0064136237, + -0.009359719, + 0.0025631683, + 0.018758547, + 0.002545244, + -0.021261424, + 0.0027407813, + 0.013739755, + -0.019201763, + 0.006980682, + 0.0020107753, + 0.006377775, + -0.0051882565, + -0.01035696, + 0.01793729, + -0.0003220255, + -0.026723431, + 0.009568293, + -0.0011919629, + -0.017911218, + -0.0056836177, + 0.001955373, + -0.0027163392, + -0.0020841018, + -0.0026674548, + -0.014730478, + 0.008303817, + 0.034883857, + -0.030712394, + 0.022486791, + -0.011621434, + -0.022369469, + 0.0036826194, + 0.028704876, + -0.026540931, + 0.012898944, + -0.0028825458, + 0.016320847, + -0.00063997734, + 0.011875632, + 0.0023937025, + 0.018719438, + 0.0024458459, + 0.00901427, + 0.021469997, + 0.004132355, + -0.02595432, + -0.007762831, + 0.004494099, + -0.011882151, + 0.014000472, + 0.021417852, + -0.019671053, + 0.025120026, + -0.007801939, + 0.0061137998, + 0.0053414274, + 0.01493905, + -0.046511807, + -0.03003453, + -0.01619049, + 0.0016042207, + -0.0010070171, + 0.0077563133, + -0.015864594, + -0.0023822961, + 0.002483324, + -0.0003623551, + 0.010122315, + 0.024559487, + -0.005093747, + -0.021039814, + 0.021548212, + -0.00034157923, + -0.015369233, + -0.008883912, + -0.007912743, + 0.012312332, + -0.012416619, + 0.026905933, + -0.0012408472, + -0.02940881, + -0.0028890637, + 0.014039579, + -0.01254046, + 0.004634234, + 0.030686323, + -0.019540695, + -0.026254144, + -0.0030552705, + -0.001484454, + -0.009581328, + 0.016555492, + 0.008388551, + 0.0100441, + 0.0013451338, + -0.011934293, + 0.0042529367, + -0.0031514096, + 0.0043702587, + -0.022447683, + -0.00667434, + -0.004226865, + 0.032015976, + -0.01840658, + 0.0151997665, + 0.014352438, + 0.0028108489, + 0.00033180238, + -0.031025253, + 0.024572521, + 0.011465005, + 0.0118625965, + 0.0082712285, + -0.013479038, + 0.015369233, + 0.016751029, + -0.0077823848, + 0.022421611, + 0.024259662, + -0.011627952, + 0.007938814, + -0.016086202, + 0.014978158, + -0.021065885, + -0.013439931, + -0.025628423, + 0.025432887, + 0.013700647, + 0.011412861, + -0.024220554, + -0.0029314302, + -0.008649267, + -0.0011691501, + 0.028652733, + 0.010389549, + 0.0063484446, + -0.006045362, + 0.0018869351, + 0.003241031, + -0.020596597, + 0.0032068118, + -0.01603406, + 0.0030291989, + 0.015551734, + -0.019605875, + 0.014052615, + 0.01849783, + -0.017324606, + -0.025524138, + -0.020414095, + -0.011660541, + 0.020974636, + 0.015017265, + -0.0011194511, + 0.016451206, + -0.024898417, + 0.035692077, + 0.022695364, + -0.0006326447, + 0.0111521445, + 0.008101762, + 0.011869115, + 0.013557253, + -0.009340165, + 0.050605055, + -0.00006920187, + -0.02313858, + 0.019253908, + -0.006693894, + -0.0071175583, + -0.006602643, + 0.010207048, + 0.009900706, + -0.029904172, + 0.015147624, + 0.0011830007, + 0.038221028, + 0.03796031, + 0.007990958, + -0.003946595, + 0.009385791, + -0.0017875369, + 0.0027733708, + -0.0049307994, + 0.021065885, + 0.014248152, + -0.0020726954, + 0.00001147636, + -0.015030301, + 0.0014518645, + 0.000006034159, + -0.023699122, + 0.02685379, + -0.014821728, + -0.0035196715, + 0.0008807326, + 0.021235352, + 0.01771568, + -0.0077823848, + -0.05034434, + 0.018654259, + 0.001085232, + -0.007502115, + -0.021626426, + -0.00355552, + -0.012853319, + -0.021900179, + 0.027088435, + 0.02747951, + 0.028470233, + -0.0023154877, + -0.023047332, + -0.014091722, + 0.0065570176, + 0.024989668, + -0.019436408, + -0.011908222, + 0.0027489287, + 0.014404582, + -0.021183208, + 0.006902467, + 0.010780623, + 0.017846039, + -0.006961128, + 0.0072283624, + -0.010415621, + 0.0035848506, + 0.0033893134, + -0.011223841, + -0.009301058, + -0.003848826, + 0.008427658, + 0.0046114214, + -0.004481063, + -0.019449444, + 0.01254046, + 0.013948328, + -0.00661242, + -0.013009749, + -0.012879391, + -0.010715445, + 0.0023839257, + 0.06450124, + -0.010982679, + 0.0016384397, + 0.0041258372, + 0.0022503086, + -0.010154904, + -0.02098767, + -0.015642984, + -0.0008636231, + 0.0041844985, + -0.0038390493, + 0.008968645, + 0.011047858, + 0.014052615, + -0.0012832136, + 0.0020678071, + -0.009431416, + -0.018354435, + 0.006902467, + -0.015903702, + 0.012846801, + -0.007606401, + 0.01469137, + 0.013042338, + 0.0036923962, + 0.004142132, + 0.0134138595, + 0.027427366, + 0.018302292, + -0.017833002, + 0.0059769237, + -0.0020238112, + -0.025067883, + 0.012455727, + -0.014991194, + 0.009718204, + 0.020388024, + 0.032693837, + 0.0020759543, + -0.006322373, + 0.0149260145, + 0.015108516, + 0.009033823, + -0.004601645, + 0.008962126, + -0.031859547, + -0.031233827, + 0.018145863, + -0.02651486, + -0.012077688, + 0.04364393, + 0.0017679832, + -0.02891345, + -0.024285734, + -0.0070849685, + 0.031129539, + -0.021978393, + -0.00019716678, + 0.0013980918, + -0.004132355, + -0.0012326998, + -0.04544287, + 0.0045462423, + -0.00973124, + -0.020596597, + -0.041844983, + -0.015512627, + -0.029643456, + -0.02732308, + -0.013622433, + -0.019045334, + -0.03000846, + -0.01937123, + 0.008003994, + 0.025185205, + -0.01755925, + 0.008303817, + -0.00589545, + -0.0012791399, + 0.021013742, + -0.022017501, + -0.016633706, + -0.030217033, + -0.008127834, + -0.0043246336, + 0.022069644, + 0.025902176, + -0.028548447, + -0.0074630072, + 0.0019407078, + 0.025237348, + -0.0033990901, + 0.015577805, + 0.017415857, + 0.005963888, + 0.0006827511, + 0.02152214, + 0.03206812, + -0.0046928953, + -0.010220083, + 0.02380341, + -0.01637299, + 0.0038748977, + 0.007925779, + 0.0011520407, + 0.020661775, + 0.0048884326, + 0.01191474, + -0.005533706, + -0.0075086327, + 0.02548503, + -0.014899943, + 0.007489079, + 0.017428892, + -0.0049829422, + 0.02049231, + -0.0085254265, + 0.008095245, + 0.008023548, + 0.0009874634, + 0.021821965, + -0.019970877, + 0.013387788, + 0.021065885, + 0.0015431152, + 0.021039814, + 0.0071175583, + -0.0025810925, + -0.0054848217, + -0.0073587205, + -0.019879626, + 0.018967118, + -0.01469137, + -0.011373754, + -0.022538934, + 0.006746037, + -0.009046859, + 0.008740517, + -0.010233119, + -0.027010221, + -0.0075086327, + -0.011249913, + 0.006635233, + 0.0038586028, + -0.023972875, + -0.019736232, + 0.00017058593, + 0.010832767, + 0.00268212, + 0.01699871, + -0.004793923, + 0.0009565033, + -0.01203858, + -0.0009842045, + -0.026019499, + -0.044895366, + -0.041375693, + -0.023646979, + 0.019879626, + 0.021795891, + 0.030686323, + 0.015421376, + 0.004934058, + -0.0016604377, + -0.017598357, + 0.018132826, + 0.0021199503, + 0.02906988, + -0.0064983563, + 0.0020564008, + 0.026215035, + 0.018354435, + -0.020309808, + -0.009529185, + -0.010383031, + 0.027297009, + -0.00421057, + 0.010024546, + -0.010220083, + -0.0255111, + 0.00866882, + -0.01977534, + -0.0029737966, + -0.0006033141, + 0.008473284, + -0.0075998832, + 0.009053377, + -0.0023562245, + 0.011119555, + -0.002264974, + 0.0042627132, + -0.023034295, + 0.0009100632, + -0.01874551, + -0.001924413, + -0.012064652, + -0.0008945832, + -0.006739519, + 0.014248152, + 0.014143866, + 0.023281975, + 0.010083207, + 0.00097198336, + -0.01406565, + 0.00302594, + 0.028548447, + -0.016490312, + -0.026827719, + 0.00031428548, + -0.01578638, + -0.02017945, + -0.018419614, + -0.0022226074, + -0.022213038, + -0.020596597, + 0.017363712, + -0.0065830895, + 0.030164888, + -0.00044403263, + -0.019671053, + -0.002872769, + 0.012221082, + 0.03939425, + 0.0039661485, + 0.019019263, + 0.0006118688, + -0.0033697595, + -0.026905933, + -0.01699871, + -0.014417618, + 0.00066197524, + 0.010304816, + 0.020453202, + -0.022695364, + -0.043748215, + -0.0058596013, + 0.008968645, + -0.00627023, + -0.009379273, + 0.02192625, + 0.010780623, + 0.009952849, + -0.020726955, + -0.010845803, + -0.00988767, + 0.03000846, + -0.0034544924, + -0.00010561052, + -0.0100441, + -0.018823724, + -0.021013742, + 0.021887142, + -0.011627952, + 0.014847799, + 0.0034773052, + -0.017194247, + 0.0036435118, + -0.009379273, + -0.013309573, + 0.009548739, + -0.0070132716, + 0.009868116, + 0.0077302414, + -0.010532943, + 0.003852085, + 0.011386789, + -0.014326367, + -0.0016302923, + -0.019814447, + 0.022447683, + -0.012885909, + -0.023125546, + -0.018888904, + 0.01619049, + 0.024572521, + -0.006733001, + -0.00027538172, + 0.010402584, + -0.022578042, + -0.0009662802, + 0.020270701, + 0.008812215, + -0.024976632, + -0.007058897, + -0.0165946, + -0.021561246, + -0.021821965, + -0.0005246918, + -0.0050578984, + -0.0025419851, + -0.0067525553, + -0.0033795366, + -0.024585558, + 0.010487318, + -0.011856079, + -0.013479038, + 0.0013019526, + 0.02293001, + -0.019345157, + 0.00842114, + -0.0014665298, + 0.020361952, + -0.023646979, + 0.0022405316, + 0.00024381059, + -0.016777102, + 0.020401059, + -0.01603406, + -0.002385555, + -0.03081668, + 0.00014868983, + 0.019253908, + 0.017363712, + 0.028235588, + 0.02239554, + -0.024168411, + 0.0036141812, + -0.042679276, + -0.025054848, + 0.013909221, + 0.009164182, + 0.017963361, + -0.004705931, + -0.00552067, + 0.002941207, + 0.010839284, + -0.013179215, + -0.0152910175, + -0.012501352, + -0.030451678, + -0.017846039, + 0.01406565, + -0.011158663, + 0.0018282739, + -0.017102996, + 0.0046733418, + -0.0024474752, + 0.018941047, + 0.0018820466, + 0.0068568415, + 0.004780887, + 0.032667767, + 0.00645599, + 0.0007678913, + -0.0021557987, + -0.019658018, + 0.01908444, + -0.019188728, + -0.01771568, + -0.025915211, + -0.017663537, + 0.037908167, + 0.010910982, + -0.015043337, + -0.024689844, + 0.008590606, + -0.025654495, + -0.02058356, + -0.009620436, + 0.031624902, + 0.016816208, + 0.0005605403, + 0.011627952, + -0.0022014242, + 0.0071827373, + 0.0030650473, + -0.0010583457, + -0.00007072951, + 0.021730714, + -0.028000943, + 0.021939287, + 0.0002782333, + -0.034388494, + -0.010982679, + 0.023295011, + 0.0004073694, + 0.001618886, + 0.007847564, + -0.003421903, + -0.017324606, + -0.000569095, + 0.0009622065, + -0.019384265, + 0.0054880804, + 0.008206049, + -0.044738937, + 0.013544218, + -0.0026299767, + -0.011556255, + -0.017819967, + 0.009483559, + -0.0063386676, + 0.0012579567, + -0.00047865903, + -0.008994716, + 0.0024882122, + -0.00073489436, + -0.03256348, + 0.019970877, + -0.008395068, + 0.0047352617, + 0.038664244, + 0.0077367597, + -0.0008571052, + -0.021391781, + -0.006605902, + -0.020388024, + -0.013290019, + 0.0235818, + -0.0100766895, + -0.018914975, + -0.016855316, + 0.0069350568, + -0.031624902, + 0.0130293025, + 0.0024588816, + 0.0134138595, + -0.028027015, + 0.021339638, + 0.018576045, + -0.039263893, + 0.0015919995, + 0.023555728, + -0.023125546, + 0.0056836177, + -0.013335644, + 0.010689373, + -0.029200237, + 0.022630185, + 0.0071827373, + -0.0064853206, + -0.025328599, + 0.007697652, + -0.006416883, + -0.027583797, + -0.004230124, + 0.18563008, + -0.017767824, + 0.015877629, + 0.038247097, + -0.00052917283, + 0.03587458, + 0.02860059, + -0.0005393571, + -0.0031025254, + 0.008166942, + -0.040776048, + 0.020766063, + 0.014274224, + -0.0005866119, + -0.001288102, + -0.043331068, + -0.029956317, + -0.011465005, + -0.036656726, + 0.009431416, + 0.009314094, + -0.0054750447, + -0.013922256, + -0.00910552, + 0.013557253, + -0.0019977395, + -0.006462508, + 0.009222843, + 0.023881624, + 0.016737994, + 0.0025941283, + 0.008153906, + 0.004748298, + -0.0010208677, + -0.019488553, + -0.014417618, + -0.0043148566, + -0.0037477985, + 0.012468763, + 0.019006226, + 0.0023122288, + 0.008225603, + 0.0069220206, + -0.0042333826, + -0.013557253, + 0.019188728, + 0.003786906, + -0.0077432776, + -0.008968645, + 0.026032533, + -0.03066025, + -0.017089961, + 0.03496207, + 0.03285027, + 0.014547976, + -0.008219085, + 0.02826166, + 0.0053186147, + -0.0005430234, + -0.010734999, + -0.017102996, + 0.01619049, + -0.012677335, + 0.025185205, + -0.011673577, + 0.0043539642, + -0.035222787, + -0.0038129776, + -0.0016262187, + -0.016555492, + 0.014508869, + -0.018198006, + -0.01818497, + -0.013896185, + -0.030399533, + -0.02747951, + 0.037099946, + 0.015499591, + 0.00826471, + 0.038507815, + 0.0039074873, + 0.0065928665, + -0.0036206993, + 0.011908222, + 0.00110723, + -0.021131065, + 0.008336407, + -0.008916501, + 0.01437851, + 0.0008265525, + -0.0017370231, + -0.01883676, + -0.003770611, + -0.020674812, + -0.0057716095, + 0.008492837, + 0.0000075172384, + 0.016724957, + -0.014182973, + 0.002862992, + -0.010995715, + -0.010734999, + 0.0026348652, + 0.007899707, + 0.010669819, + 0.01469137, + -0.018237114, + 0.004376777, + -0.002167205, + -0.010891428, + -0.011921258, + -0.028079158, + -0.000112433954, + 0.005892191, + -0.017259426, + 0.004494099, + -0.0050024963, + -0.015538698, + 0.018615153, + -0.026619146, + 0.015369233, + -0.021874107, + -0.011556255, + -0.011621434, + -0.021874107, + -0.013726719, + 0.0004872138, + -0.01930605, + 0.0010477541, + -0.0331892, + 0.0016359955, + -0.012403583, + 0.026958076, + -0.026723431, + 0.00095161493, + 0.01774175, + 0.017324606, + 0.0038586028, + -0.0072544343, + 0.033137057, + 0.0047352617, + -0.011249913, + 0.025850032, + 0.006746037, + -0.000620831, + -0.005892191, + 0.0043050796, + 0.025250385, + -0.009985439, + 0.0099658845, + -0.00941838, + -0.016777102, + 0.0014388287, + -0.005735761, + 0.04082819, + -0.010220083, + -0.0333717, + -0.015825486, + 0.013283501, + 0.021483032, + -0.03558779, + -0.0043050796, + 0.061685503, + -0.010311334, + -0.027114507, + 0.004503876, + -0.16800566, + 0.0165946, + 0.02064874, + -0.022408575, + 0.021848036, + 0.022486791, + -0.01780693, + -0.0060160314, + 0.004376777, + 0.016021024, + 0.047919676, + 0.03384099, + -0.0165946, + -0.013622433, + 0.01493905, + -0.008655785, + -0.01927998, + 0.0030080157, + 0.01968409, + 0.014052615, + 0.036917444, + -0.012664299, + 0.0035066358, + 0.00017160436, + -0.016490312, + 0.023242868, + 0.0023464477, + 0.01381797, + -0.0085254265, + 0.015695129, + -0.021065885, + -0.0100766895, + 0.02875702, + 0.018719438, + 0.0030585295, + 0.0019635204, + -0.021913214, + -0.020322844, + -0.0151997665, + 0.01646424, + 0.0065081334, + 0.011334646, + 0.00227638, + -0.014287259, + 0.0017582063, + 0.024051089, + 0.014717441, + -0.024663772, + -0.014143866, + -0.011686613, + 0.014613155, + -0.012520906, + -0.011438932, + 0.028704876, + 0.014313331, + -0.0050187907, + 0.008603642, + 0.008290782, + 0.004787405, + 0.024363948, + -0.039316036, + -0.02255197, + 0.017037818, + -0.0062148273, + -0.02622807, + -0.00458535, + -0.0074434537, + 0.0033958312, + -0.010187494, + -0.0026967854, + 0.004138873, + -0.020192485, + 0.0047189672, + -0.034883857, + 0.011373754, + 0.005667323, + 0.0068177343, + 0.02398591, + -0.01325743, + -0.014600119, + -0.036448155, + 0.02860059, + -0.009359719, + -0.0040867296, + -0.013778863, + 0.032302763, + 0.015916737, + 0.005533706, + -0.038455673, + -0.01755925, + 0.027349152, + -0.01827622, + 0.005025309, + -0.009744276, + 0.0024230331, + 0.022617148, + -0.010369996, + 0.028704876, + -0.02938274, + 0.013231358, + 0.008303817, + -0.007573812, + -0.013583325, + 0.02685379, + 0.019723197, + 0.0009499854, + 0.023373226, + 0.024898417, + 0.03782995, + 0.012612157, + -0.018224077, + 0.008199532, + 0.028339874, + 0.010363477, + -0.008355961, + 0.008975162, + 0.014000472, + -0.0047352617, + 0.025693603, + 0.013987436, + 0.019983914, + -0.007104522, + 0.0057487967, + 0.010930535, + -0.007176219, + -0.016177453, + -0.08222996, + 0.0022454201, + -0.0041128015, + 0.020036057, + 0.005009014, + 0.045234296, + 0.01297716, + 0.0062017916, + -0.010207048, + 0.024246626, + -0.0002056197, + -0.019592838, + -0.017389785, + -0.024624664, + 0.0153822685, + 0.0021085439, + -0.018628187, + -0.013374752, + -0.010559015, + 0.010461246, + -0.018980155, + -0.008734, + 0.0034642692, + -0.0076455087, + -0.018054612, + 0.006967646, + -0.010389549, + 0.012879391, + 0.0076194373, + -0.0019570026, + -0.0033665006, + -0.0016213302, + -0.0050350856, + -0.032433122, + -0.013426895, + -0.005292543, + -0.02264322, + 0.0077563133, + 0.036630657, + -0.045651443, + 0.00988767, + -0.00011620212, + -0.0008090356, + -0.020374987, + 0.0062083094, + -0.014587083, + -0.019423373, + 0.013400824, + 0.008303817, + -0.023321083, + -0.035379216, + -0.0057781273, + -0.0025501323, + 0.0017859074, + 0.027714154, + -0.009522667, + 0.017285498, + 0.0073522027, + -0.034988143, + 0.02217393, + 0.009464006, + -0.005729243, + -0.009196771, + 0.027297009, + 0.015343161, + 0.009548739, + -0.016216561, + -0.041740697, + 0.02940881, + -0.015225839, + -0.017911218, + 0.028313803, + -0.02423359, + -0.0068503236, + -0.025563244, + -0.009274987, + -0.016021024, + -0.003135115, + 0.015017265, + -0.023868587, + -0.011510629, + -0.021874107, + 0.010780623, + -0.0065342053, + 0.0018804171, + 0.021600354, + 0.008414622, + -0.0066580456, + 0.0119538475, + -0.009705168, + 0.026553966, + 0.024064125, + 0.023099475, + -0.015095481, + 0.0010941942, + 0.048310753, + -0.0067786267, + -0.009457488, + -0.000286177, + -0.0026593073, + 0.0049307994, + -0.019762304, + -0.06820341, + 0.019175692, + -0.0050383448, + -0.011465005, + 0.028053086, + 0.0034088672, + 0.012768586, + -0.005807458, + 0.014912979, + -0.01690746, + -0.048258606, + 0.015017265, + -0.0078084567, + -0.014600119, + -0.03863817, + -0.025198242, + 0.024168411, + 0.016307812, + 0.00085140206, + -0.005282766, + 0.01995784, + 0.011549737, + 0.024168411, + 0.030399533, + -0.038455673, + 0.00552067, + -0.0038423082, + 0.021417852, + -0.026671289, + -0.011393307, + 0.003500118, + -0.024624664, + -0.0027798887, + 0.01800247, + 0.0021590579, + -0.005729243, + 0.010956607, + -0.0007507818, + 0.021887142, + 0.047293957, + -0.018015504, + -0.009718204, + 0.022069644, + -0.0038455671, + -0.0054750447, + 0.012625192, + -0.0032638435, + -0.0014184603, + -0.0040541403, + 0.01493905, + 0.011575809, + 0.019501587, + -0.0017142104, + -0.008382033, + -0.0048558433, + -0.039811395, + 0.012058134, + 0.008499355, + -0.010050618, + -0.0014828246, + 0.023047332, + -0.0030357167, + 0.029591313, + 0.0014673446, + 0.0013394306, + 0.00056257716, + -0.017116033, + -0.0051133004, + 0.0025615387, + -0.026188964, + -0.025719674, + 0.011940812, + -0.0028809165, + 0.021222316, + 0.008219085, + -0.014965122, + -0.00057276135, + -0.010669819, + -0.016021024, + 0.025367707, + -0.005312097, + -0.0044354377, + -0.044530362, + 0.017194247, + 0.01665978, + -0.017507108, + -0.016777102, + -0.00029615755, + -0.00558259, + 0.020844277, + 0.00012546977, + -0.0015357826, + 0.025993425, + 0.00421057, + 0.00033689447, + 0.009959367, + -0.008688374, + -0.028027015, + 0.037882093, + 0.0016115534, + 0.023373226, + -0.0038846745, + -0.0022812686, + -0.0151997665, + -0.02488538, + -0.009118557, + -0.018954083, + -0.011614916, + -0.00008422362, + 0.016607635, + 0.03034739, + 0.025185205, + -0.010891428, + 0.025367707, + -0.011308574, + -0.0107871415, + -0.015212802, + -0.022604113, + -0.018445686, + 0.02158732, + 0.024116268, + 0.014495833, + 0.016555492, + -0.020205522, + 0.019423373, + -0.0072479164, + 0.00997892, + -0.028704876, + 0.009529185, + -0.012931534, + 0.014339402, + 0.017324606, + -0.006693894, + -0.018875869, + -0.03736066, + 0.013791898, + 0.011693131, + 0.018797653, + -0.01643817, + 0.041688554, + -0.0020629186, + -0.006843806, + 0.003019422, + 0.0024230331, + 0.028027015, + -0.009027306, + 0.016151382, + -0.0038032006, + -0.015017265, + -0.007632473, + 0.0007255249, + -0.013452967, + 0.00648858, + -0.031833474, + -0.0048330305, + -0.024038054, + 0.030634178, + 0.00049454643, + -0.0013418748, + 0.037126016, + -0.0116083985, + 0.03642208, + 0.008179978, + -0.020518381, + -0.012181974, + 0.026723431, + 0.00048151062, + 0.010141868, + -0.007990958, + 0.01175831, + 0.001750059, + -0.022812687, + -0.0014608266, + 0.009040342, + -0.0059736646, + -0.014196008, + 0.0030210514, + 0.008883912, + 0.03081668, + 0.00083673676, + 0.027427366, + -0.0183414, + -0.017050853, + 0.004295303, + 0.00973124, + 0.008193013, + 0.0003967778, + -0.020283736 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} diff --git a/vectorstores/dolt/testdata/TestDoltStoreRestWithScoreThreshold.httprr b/vectorstores/dolt/testdata/TestDoltStoreRestWithScoreThreshold.httprr new file mode 100644 index 000000000..fb740ff3d --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltStoreRestWithScoreThreshold.httprr @@ -0,0 +1,18646 @@ +httprr trace v1 +333 334599 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 137 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Tokyo","Yokohama","Osaka","Nagoya","Sapporo","Fukuoka","Dublin","Paris","London","New York"]}HTTP/2.0 200 OK +Content-Length: 333642 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:32 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 154 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-rnb7h +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999985 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_5d2d9e7b35a4434c9dee3237c2d64041 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.001070031, + 0.008037085, + -0.008887224, + -0.008638722, + -0.010875242, + 0.014713947, + -0.029375577, + 0.013065985, + -0.011051809, + -0.035548896, + 0.001566218, + -0.02474559, + 0.016296513, + -0.027125979, + -0.007997848, + -0.021070372, + 0.021711247, + -0.01803603, + 0.0024016432, + -0.02207746, + -0.011306851, + 0.012686692, + -0.0024065478, + -0.019016959, + -0.008344443, + -0.011803855, + 0.0013651273, + -0.015302505, + 0.008965698, + -0.020010969, + 0.019043118, + -0.019095434, + -0.010522107, + -0.022875283, + 0.008828368, + -0.004652877, + -0.015328663, + -0.0060261786, + -0.0023493269, + -0.0118496325, + 0.009122647, + -0.008207113, + 0.0015155366, + -0.017251285, + -0.018323768, + 0.01607417, + -0.016649649, + 0.016571173, + -0.00018801155, + 0.012255083, + 0.015119398, + 0.020311786, + -0.032331448, + -0.0067684157, + -0.026602816, + -0.016388068, + -0.028486202, + -0.0007291578, + 0.000018967197, + 0.0041558724, + -0.0033645893, + -0.0059934813, + -0.015982617, + 0.0117123015, + 0.014269259, + -0.011346088, + -0.011241456, + 0.028616993, + -0.015302505, + 0.0038223565, + 0.013242552, + 0.017395156, + -0.0010079053, + -0.0024752128, + 0.031625178, + -0.008010927, + -0.0015245284, + 0.004652877, + 0.011856171, + 0.009848535, + 0.01523711, + -0.035601214, + 0.004365138, + 0.0026583197, + 0.013190236, + 0.007605476, + -0.008743354, + 0.0360459, + -0.002671399, + -0.00082071126, + 0.009534637, + 0.003756961, + 0.00992047, + 0.01062674, + -0.024850221, + -0.016113406, + -0.006454518, + 0.043344017, + -0.01857227, + -0.013196776, + -0.0015964633, + 0.009815837, + -0.0037242635, + -0.011529195, + -0.025883468, + 0.011568432, + 0.014321575, + -0.016440384, + 0.008906842, + -0.008710656, + -0.0019765736, + 0.027989198, + -0.013085604, + -0.059065055, + -0.017722132, + -0.012961352, + 0.005476858, + -0.01662349, + -0.010234368, + -0.014753184, + 0.018807694, + 0.019265462, + 0.011856171, + 0.002682843, + 0.02725677, + 0.00033167689, + -0.006483946, + -0.019330857, + 0.00050926604, + -0.009613113, + 0.026995188, + 0.011744999, + -0.0058986577, + 0.015629482, + -0.021004977, + 0.013903045, + -0.016440384, + 0.01131993, + -0.01103873, + -0.006441439, + 0.0063368063, + 0.0090637915, + -0.01286326, + 0.013347185, + 0.0097242845, + 0.02502025, + 0.023136863, + -0.0030392476, + 0.015851825, + -0.005967323, + 0.003730803, + -0.0050256304, + 0.016976625, + 0.0071804062, + 0.009580415, + 0.0035738542, + 0.03225297, + 0.018611507, + 0.0059280857, + 0.010548265, + 0.006931904, + 0.004237617, + 0.031389754, + -0.021345032, + 0.0030081847, + 0.0127063105, + 0.012032739, + 0.014413129, + -0.00033699026, + -0.011588051, + -0.018336847, + 0.019448569, + -0.04049278, + 0.018624587, + 0.005208737, + 0.017578263, + 0.011006032, + 0.009292675, + -0.019854018, + -0.007971689, + -0.0023803897, + 0.00003410264, + 0.02683824, + 0.009927009, + -0.007919373, + 0.005771137, + 0.027779931, + 0.01551177, + -0.0011803856, + -0.014504682, + 0.025870388, + 0.035548896, + 0.031180488, + 0.0071346294, + -0.67843723, + -0.03280229, + 0.0011599495, + 0.004224538, + 0.020468736, + 0.005329719, + 0.018245295, + 0.015498691, + -0.012830562, + 0.013562989, + -0.027230611, + 0.017996792, + -0.01789216, + -0.012601678, + -0.008749894, + 0.0048032864, + 0.015263268, + -0.0027139059, + -0.004208189, + 0.0105548045, + 0.0047771283, + 0.017813684, + -0.008409838, + -0.0052348953, + 0.013236013, + -0.010567884, + 0.007697029, + -0.004306282, + -0.009416926, + 0.02362079, + -0.029794108, + 0.049700443, + 0.0050485185, + -0.01508016, + 0.039917305, + -0.015694877, + -0.02305839, + 0.017565183, + 0.02054721, + 0.031258963, + 0.0014574982, + 0.003841975, + 0.0028806638, + -0.0026027337, + 0.005336258, + 0.002027255, + 0.022208251, + -0.023280734, + 0.008991856, + -0.008220192, + 0.021828959, + -0.036229007, + -0.016675808, + -0.01634883, + -0.0004142385, + 0.0098354565, + 0.0035967426, + -0.0034332543, + -0.0009694856, + -0.009534637, + -0.015851825, + -0.0092011215, + -0.027779931, + -0.021279637, + -0.012366255, + 0.012405492, + -0.010437093, + -0.023306891, + -0.0006384218, + -0.01968399, + 0.004554784, + 0.021397348, + -0.0070365365, + -0.009586954, + 0.017656736, + 0.006235444, + 0.0259881, + -0.031991392, + -0.0034169054, + -0.007618555, + 0.004201649, + 0.012183148, + -0.01969707, + -0.0053035603, + 0.015681798, + -0.040178884, + -0.035967425, + 0.002808729, + 0.026602816, + -0.012882878, + 0.0046430677, + 0.0036719472, + 0.0063923923, + 0.00908995, + -0.011810395, + 0.011882329, + -0.0016970086, + -0.008050164, + 0.006748797, + -0.0071346294, + -0.014216943, + -0.015446375, + 0.009750443, + 0.0036261706, + -0.015302505, + -0.004280124, + -0.014910133, + 0.017238207, + 0.021894353, + -0.014923212, + 0.006107923, + -0.010240907, + -0.017722132, + 0.00039257627, + 0.018493796, + -0.023019154, + 0.017839843, + -0.00011781375, + 0.022391358, + 0.0090637915, + 0.007363513, + 0.0019733037, + 0.016374988, + 0.022574464, + 0.017251285, + 0.015106319, + 0.006078495, + 0.0010798402, + -0.00642509, + 0.0061733183, + -0.001871941, + 0.014426208, + 0.010574424, + -0.006467597, + 0.023176102, + -0.009488861, + -0.009181503, + -0.0059346254, + 0.018493796, + -0.036385957, + -0.033587035, + -0.012425111, + -0.0015277981, + -0.003521538, + 0.012085055, + -0.026419709, + -0.016937388, + 0.0007418282, + -0.019827861, + 0.00503217, + -0.008213652, + 0.0026615895, + -0.029794108, + 0.01914775, + -0.0060065603, + -0.013484515, + -0.00008174415, + -0.0026632245, + -0.021057293, + 0.0029525987, + 0.019043118, + 0.0080697825, + -0.03832166, + -0.0014574982, + 0.0060686856, + -0.012071976, + 0.012804404, + 0.017447472, + -0.0054833977, + -0.008867606, + -0.02151506, + -0.019265462, + -0.02388237, + 0.003953147, + 0.018925406, + 0.0033090033, + 0.010541726, + -0.013628385, + -0.0012694866, + 0.002153141, + 0.011091046, + -0.020730317, + -0.013602227, + 0.011758079, + 0.02027255, + -0.01971015, + 0.011267614, + 0.017944476, + -0.00084196473, + 0.0032043706, + -0.0073308153, + 0.015877984, + 0.008030545, + -0.000106778294, + 0.0120981345, + -0.012909036, + 0.009730823, + -0.003897561, + -0.021828959, + 0.015825668, + 0.032933082, + -0.01523711, + 0.0024572292, + -0.00950194, + 0.016322672, + -0.012124293, + -0.00656569, + -0.018951563, + 0.031206647, + 0.014596236, + 0.014648552, + -0.015210952, + -0.0068861274, + 0.01857227, + -0.006931904, + 0.03288077, + 0.006833811, + 0.023019154, + -0.019396253, + -0.0068665086, + 0.021201164, + -0.034214832, + -0.016257277, + -0.018415323, + -0.012765166, + 0.016741201, + -0.0011983692, + 0.033456247, + 0.0073308153, + -0.0059738625, + -0.034450255, + -0.013406041, + 0.001732976, + 0.021188084, + -0.01522403, + -0.029009365, + 0.00009017401, + -0.024640957, + 0.030081848, + 0.012562441, + 0.023267655, + 0.010253986, + 0.028957048, + -0.019670913, + -0.000803545, + 0.001984748, + 0.035862792, + 0.014269259, + -0.009632731, + 0.01886001, + -0.016688885, + -0.009096489, + -0.005699202, + -0.004064319, + 0.0011893774, + -0.03382246, + 0.021619692, + -0.00048596898, + 0.014831658, + 0.038504764, + -0.0002630118, + 0.0009237089, + 0.0055128257, + 0.005270863, + -0.0011632192, + -0.0044926587, + 0.02725677, + 0.012941734, + -0.007906294, + -0.008298666, + -0.015315584, + 0.006369504, + -0.012967892, + -0.0045318957, + 0.019893257, + -0.016701965, + -0.025831152, + -0.0170551, + 0.01285672, + 0.01647962, + -0.007389671, + -0.04444266, + -0.005100835, + 0.0046365284, + 0.0043945657, + -0.024654036, + -0.01076407, + -0.013039826, + -0.01131339, + 0.019801702, + 0.009966247, + 0.023816975, + 0.001081475, + -0.01789216, + -0.017866002, + -0.009789679, + 0.02207746, + -0.013334106, + -0.011908487, + -0.01048941, + 0.015197872, + -0.008148257, + -0.00030837982, + 0.005431081, + 0.026210444, + 0.011267614, + 0.005355877, + -0.011143362, + -0.0051891184, + -0.0034365242, + 0.017565183, + -0.011091046, + -0.006304109, + 0.010528646, + 0.012549362, + -0.009874693, + -0.0146093145, + 0.008056703, + 0.02417011, + -0.0012057262, + -0.017709052, + 0.006680132, + -0.026668211, + -0.0089526195, + 0.08569403, + 0.0059607835, + 0.01145726, + -0.005633807, + 0.0029362498, + 0.0073308153, + -0.016008774, + 0.0008820194, + 0.0099727865, + 0.008056703, + 0.0038452449, + -0.009233819, + -0.0020174456, + 0.011130284, + -0.0024294362, + -0.00656569, + -0.01676736, + -0.027361402, + 0.02418319, + -0.01969707, + 0.00038338007, + 0.00628776, + 0.0027972849, + 0.012130832, + -0.000813763, + -0.0035476962, + 0.024797905, + 0.018101424, + 0.01913467, + -0.025778836, + 0.0021040945, + 0.019644754, + -0.018402243, + 0.017133573, + -0.008226731, + -0.00004115307, + 0.009966247, + 0.0212404, + 0.0062092855, + -0.01160113, + 0.007513922, + 0.015394058, + 0.00824635, + 0.00038481058, + 0.014138469, + -0.019592438, + -0.018101424, + 0.02024639, + -0.019500885, + -0.018506875, + 0.032776136, + 0.006944983, + -0.041042104, + -0.017656736, + -0.017473629, + 0.008900303, + -0.009547717, + -0.013615306, + -0.0027694919, + 0.010038181, + 0.0066016577, + -0.042114586, + 0.005257784, + -0.011921567, + -0.024614798, + -0.037903126, + -0.002767857, + -0.016741201, + -0.03633364, + -0.0063923923, + -0.005558602, + -0.029401736, + -0.022796808, + 0.024300901, + 0.01607417, + -0.03047422, + 0.008095941, + -0.01621804, + -0.0010790228, + 0.036935277, + -0.026027337, + -0.011398404, + -0.012117753, + -0.008710656, + -0.031886756, + 0.025268752, + 0.031651337, + -0.03280229, + -0.0027760314, + -0.00006381153, + 0.0148055, + -0.00684689, + 0.0153679, + 0.0212404, + 0.0027466035, + -0.011359167, + 0.010155893, + 0.032357603, + -0.016034933, + -0.01313138, + 0.023660026, + -0.014033835, + 0.008462154, + 0.015812589, + 0.015119398, + 0.011346088, + 0.012922116, + 0.018820774, + -0.010777148, + 0.0012743913, + 0.02934942, + -0.018402243, + 0.0084294565, + 0.013484515, + -0.013824571, + 0.021920511, + 0.010280144, + 0.021397348, + 0.011928107, + -0.019762466, + 0.0070299967, + -0.023293814, + 0.015681798, + 0.02989874, + 0.0058855787, + -0.014334654, + 0.0138376495, + -0.009070331, + -0.0061242715, + 0.00097193796, + -0.009259977, + 0.013772255, + -0.02178972, + -0.008050164, + -0.022836046, + 0.001999462, + -0.033482403, + 0.0128436405, + 0.0031079126, + -0.031075856, + -0.007415829, + 0.007481225, + 0.01160113, + -0.0012327018, + -0.03675217, + -0.021985907, + 0.0017297062, + 0.010665976, + -0.0066310856, + 0.017826764, + 0.005404923, + 0.020442577, + -0.01061366, + 0.0062975693, + -0.030918907, + -0.02628892, + -0.025124881, + -0.028172305, + 0.0058299927, + 0.008847987, + 0.031520545, + 0.011189139, + 0.005404923, + -0.011640367, + -0.007997848, + 0.002779301, + 0.004253966, + 0.020939581, + -0.013445278, + 0.02516412, + 0.012366255, + 0.01816682, + -0.02751835, + 0.007487764, + -0.02780609, + 0.023568474, + -0.0027482384, + -0.011195679, + -0.009652349, + -0.02516412, + -0.00907687, + -0.019213146, + 0.005195658, + 0.0005362416, + -0.0025929245, + -0.0032763055, + -0.00060163694, + -0.0124578085, + 0.023555394, + 0.007991308, + 0.007605476, + -0.009338452, + 0.0002950964, + -0.0023918338, + -0.006346616, + 0.005257784, + -0.012680152, + -0.005404923, + -0.0026926524, + 0.025961943, + 0.018820774, + -0.014334654, + -0.0045482446, + 0.002601099, + 0.012130832, + 0.03944646, + 0.0059084673, + -0.015302505, + 0.007278499, + -0.012215846, + -0.026053496, + -0.011751539, + 0.007383132, + -0.01940933, + -0.02359463, + 0.010090498, + -0.006676862, + 0.028303094, + -0.0248633, + -0.015642561, + 0.019893257, + 0.011862711, + 0.032043707, + 0.015681798, + 0.010665976, + 0.008913382, + -0.0071346294, + -0.004737891, + 0.004201649, + -0.015982617, + -0.0070692343, + 0.023110706, + 0.020913424, + -0.011496497, + -0.037301492, + -0.016322672, + 0.004247426, + -0.0016087248, + -0.0010675786, + 0.023856213, + 0.0015899237, + 0.00489157, + -0.026184287, + -0.0014599506, + -0.022875283, + 0.036569063, + -0.015276347, + -0.002754778, + -0.0008574961, + -0.019108513, + -0.0015980981, + 0.014269259, + -0.003802738, + 0.003662138, + 0.015027844, + -0.012621297, + 0.0031226266, + -0.018258374, + -0.00531337, + 0.013942283, + 0.00043201784, + 0.024810985, + 0.009325373, + -0.0010871972, + 0.012804404, + 0.005467049, + -0.011267614, + 0.0054016532, + -0.00014376752, + 0.023686185, + -0.004260505, + -0.011594591, + -0.021358112, + -0.0018523225, + 0.003202736, + 0.009214201, + 0.005215277, + -0.007291578, + -0.01774829, + -0.0049209977, + 0.008409838, + 0.007468146, + -0.0029248057, + -0.011758079, + -0.025216436, + -0.024797905, + -0.022260567, + -0.0061831274, + 0.025948863, + -0.018768458, + 0.0013634925, + 0.0025880197, + -0.018977722, + 0.023960846, + -0.013347185, + -0.0044795796, + 0.017852923, + 0.027884565, + -0.024379376, + 0.011431102, + 0.0070496155, + 0.021763563, + -0.020507973, + -0.0012531378, + 0.00030286208, + -0.011404944, + 0.012928654, + -0.0138376495, + -0.0099727865, + -0.030500377, + 0.006451248, + 0.012124293, + 0.0069384435, + 0.025595728, + 0.033717826, + -0.026158128, + -0.0028888383, + -0.020298708, + -0.015564086, + 0.0181799, + -0.0051466115, + 0.014504682, + 0.020442577, + -0.012464348, + -0.0010021833, + 0.013536831, + -0.013458357, + -0.0059411647, + -0.0073308153, + -0.027701458, + -0.0069580623, + 0.0068534296, + -0.0110779675, + -0.012078515, + -0.02054721, + 0.0036261706, + -0.010947176, + 0.008900303, + 0.010430554, + 0.0046201795, + 0.0011158077, + 0.015446375, + 0.01453084, + 0.012281241, + -0.0113264695, + -0.029113997, + 0.006160239, + -0.0033367963, + -0.029584844, + -0.03897561, + -0.005100835, + 0.020926502, + 0.0034201753, + -0.014897054, + -0.020141758, + 0.011208758, + -0.021449665, + -0.007389671, + -0.013536831, + 0.018846931, + 0.012202767, + -0.012340097, + 0.007808201, + 0.0061275414, + 0.014779342, + 0.00823981, + -0.0034790311, + 0.018336847, + 0.038766347, + -0.036569063, + 0.032226812, + 0.006408741, + -0.016610412, + -0.010502488, + 0.005493207, + 0.005646886, + -0.002699192, + 0.0068534296, + -0.01702894, + -0.010136275, + -0.012111213, + 0.0022724874, + -0.026642054, + 0.017996792, + 0.007605476, + -0.03591511, + 0.026158128, + 0.017695975, + -0.01494937, + 0.005656695, + 0.0059346254, + -0.00475097, + -0.0011787507, + 0.004162412, + -0.025791915, + -0.0034005567, + -0.000193938, + -0.031991392, + 0.01984094, + -0.012261623, + 0.014713947, + 0.0045318957, + 0.00922074, + -0.01075753, + -0.019854018, + 0.0005378765, + -0.015642561, + -0.014413129, + 0.026040416, + -0.0013667622, + -0.025621887, + -0.0122354645, + 0.017983712, + -0.045619775, + 0.009214201, + 0.008834908, + -0.007808201, + -0.024928696, + 0.008167876, + 0.023581553, + -0.026380472, + -0.016937388, + 0.009998945, + -0.022862203, + -0.0003002054, + -0.011888869, + 0.027570667, + -0.031102015, + 0.015616402, + -0.0011501402, + -0.0022463293, + -0.031625178, + -0.0061177323, + 0.011391865, + -0.008043624, + -0.008468694, + 0.23981772, + -0.023542315, + -0.0048000165, + 0.038949452, + -0.0032223545, + 0.039629564, + 0.030134164, + -0.0012049088, + -0.014687789, + 0.00032452427, + -0.03131128, + 0.001627526, + 0.020834949, + -0.0019160829, + -0.0029591382, + -0.025098724, + -0.021292716, + -0.03301156, + -0.038190868, + -0.0060294485, + 0.020141758, + -0.00258475, + -0.002694287, + -0.01341912, + 0.014269259, + 0.012693232, + -0.011287232, + -0.0056665046, + 0.020442577, + 0.019867098, + 0.0048588724, + 0.008017466, + -0.00517277, + 0.02122732, + 0.00013763671, + -0.009600033, + -0.015040924, + -0.0046626865, + 0.02725677, + 0.023673106, + -0.004567863, + 0.0020861106, + -0.010796768, + -0.010247447, + 0.00038848908, + 0.021894353, + -0.007873597, + 0.008364062, + -0.011980423, + 0.034162514, + -0.032933082, + -0.01048941, + 0.030788116, + 0.01662349, + 0.0094234655, + -0.013602227, + 0.036412116, + 0.015250188, + -0.009573875, + -0.017172812, + -0.020861108, + 0.010417474, + -0.010012023, + 0.027230611, + 0.0048163654, + 0.0001181203, + -0.023411525, + 0.012869799, + 0.0062092855, + -0.00083624263, + 0.014923212, + -0.011470339, + -0.0033940172, + -0.01734284, + -0.02893089, + -0.016597332, + 0.032226812, + -0.0033874775, + 0.02177664, + 0.037118383, + -0.008403298, + 0.006833811, + 0.022718335, + 0.0007839264, + 0.009279596, + -0.016793517, + 0.023503078, + 0.0156033235, + 0.0077885827, + -0.008468694, + -0.01369378, + -0.018140662, + -0.014596236, + -0.020390261, + -0.0070757736, + 0.014700868, + 0.0005292934, + 0.008978778, + -7.4080634e-7, + -0.016793517, + -0.008187494, + -0.001349596, + 0.015904142, + -0.009586954, + 0.004257235, + 0.0059869415, + -0.000112091664, + -0.0023264384, + -0.006052337, + -0.03060501, + -0.006232174, + -0.03479031, + 0.008972238, + 0.016989704, + 0.0020713967, + -0.0068926667, + -0.008861066, + -0.023660026, + 0.017368997, + -0.02263986, + 0.014910133, + -0.02024639, + -0.015001686, + 0.00115341, + -0.0036850262, + -0.011025651, + -0.0018212596, + -0.01607417, + 0.0069711413, + -0.035732005, + 0.010541726, + 0.0032730359, + 0.014230021, + 0.0020223502, + -0.0090637915, + 0.021266557, + 0.011542274, + -0.008004387, + -0.014779342, + 0.014975528, + 0.018807694, + -0.012745548, + 0.018075267, + -0.0004217998, + -0.0018572271, + -0.011548813, + 0.0101951305, + 0.012085055, + -0.013458357, + 0.008677959, + -0.0100578, + -0.024000082, + -0.0058365325, + -0.01675428, + 0.031128172, + -0.0050550583, + -0.0127063105, + -0.020298708, + -0.00038276697, + 0.01704202, + -0.029506369, + -0.016231118, + 0.046927683, + -0.017277444, + -0.030029532, + -0.0043520587, + -0.16908614, + 0.027884565, + 0.020848028, + -0.021148847, + 0.019357014, + 0.012948274, + -0.0101951305, + -0.019644754, + -0.0063793133, + 0.023372287, + 0.053101, + 0.018611507, + -0.007952071, + -0.014190785, + 0.0032615915, + -0.019082354, + 0.00040769894, + -0.006382583, + 0.025674203, + 0.01229432, + 0.044364184, + -0.02976795, + 0.002838157, + 0.0011722111, + -0.0028659499, + 0.026053496, + -0.014556998, + 0.009881233, + 0.023136863, + -0.015917221, + -0.02390853, + -0.017447472, + 0.037223015, + 0.0265505, + 0.009979326, + 0.008887224, + 0.00011883556, + -0.01760442, + -0.019880177, + 0.027989198, + 0.006464327, + 0.013916125, + -0.0006760241, + -0.0034496032, + 0.008128638, + 0.027282927, + 0.0042703142, + -0.0068272715, + -0.016244197, + -0.011287232, + 0.031651337, + -0.015694877, + -0.007154248, + 0.018650746, + 0.0056959325, + -0.0024425152, + 0.0062289042, + 0.0106202, + 0.004165682, + -0.012653994, + -0.032906923, + 0.0010160798, + 0.019016959, + -0.0011010937, + -0.012183148, + -0.0034430637, + -0.007873597, + -0.0070757736, + -0.017172812, + 0.020586446, + 0.0003275897, + -0.011915027, + 0.017578263, + -0.03295924, + 0.015446375, + 0.00017779352, + -0.0087041175, + 0.025556492, + 0.011686143, + 0.0088414475, + -0.022208251, + 0.042951647, + -0.014190785, + -0.013680701, + -0.0022872014, + 0.010999493, + -0.0076774107, + -0.0022103619, + -0.03175597, + -0.01956628, + 0.007363513, + -0.018467639, + -0.007814741, + -0.011673065, + 0.000020998028, + 0.008854526, + -0.007952071, + 0.02934942, + -0.021972828, + 0.003253417, + 0.006735718, + -0.008697578, + -0.010077419, + 0.033796303, + 0.024784826, + 0.025922704, + 0.019827861, + 0.019278541, + 0.01104527, + 0.011012572, + -0.029297104, + -0.005084486, + 0.012915576, + 0.028747782, + -0.032906923, + 0.002151506, + 0.01940933, + -0.0082921265, + 0.018323768, + 0.01257552, + 0.044808872, + -0.0100839585, + 0.002180934, + 0.025648044, + -0.016374988, + -0.023660026, + -0.07219643, + -0.000642509, + 0.0045318957, + 0.018546114, + -0.004384756, + 0.042402327, + 0.0056501557, + 0.01691123, + 0.00377331, + 0.013432199, + -0.0024212617, + -0.017238207, + 0.0048523326, + -0.016322672, + 0.028041514, + -0.00335478, + 0.0059313555, + -0.002205457, + -0.0023362478, + 0.023960846, + -0.018389164, + -0.016414225, + 0.0028446964, + -0.008965698, + -0.014844738, + 0.008847987, + -0.026785923, + 0.011398404, + 0.01508016, + 0.007853978, + -0.003701375, + -0.0012931925, + 0.0024555943, + -0.029140154, + -0.02109653, + 0.024536325, + -0.019618597, + 0.013183696, + 0.033299297, + -0.045096613, + -0.010783688, + 0.0100839585, + 0.003004915, + -0.011071428, + -0.013615306, + -0.0029575033, + -0.028538518, + 0.005421272, + 0.0048163654, + -0.018768458, + -0.0122354645, + -0.0019226224, + -0.00081049325, + 0.0025455127, + 0.014779342, + -0.0028005545, + 0.0037536914, + 0.01565564, + -0.030003373, + 0.0070823133, + 0.010594042, + -0.0046201795, + -0.018768458, + 0.026458947, + 0.01551177, + 0.008762973, + -0.019200066, + -0.026668211, + 0.025765756, + -0.022992995, + -0.021384269, + 0.013098682, + -0.016871992, + 0.00684689, + -0.018506875, + -0.014046915, + -0.0028561407, + -0.003212545, + 0.014897054, + -0.02362079, + -0.011346088, + -0.030526536, + -0.0023934687, + 0.007376592, + -0.0024931966, + 0.014910133, + 0.012058897, + -0.0058071045, + 0.013301408, + -0.01916083, + 0.014883975, + 0.009403847, + 0.0030997382, + -0.0159303, + -0.007572778, + 0.026432788, + 0.0051662303, + -0.009698126, + 0.005143342, + 0.018977722, + -0.015524849, + -0.024078557, + -0.09129187, + 0.027910722, + 0.007520462, + -0.008409838, + 0.016545016, + -0.006807653, + 0.022312883, + 0.0057907556, + 0.01732976, + -0.018088346, + -0.04852333, + 0.00049904804, + -0.00922728, + -0.011411483, + -0.033796303, + -0.025543412, + 0.014203863, + 0.016466541, + 0.0056926627, + 0.011588051, + 0.0013250727, + 0.0027318895, + 0.016453462, + 0.010587502, + -0.027466035, + 0.011431102, + -0.006189667, + 0.023764659, + -0.031808283, + -0.013013668, + 0.022129776, + -0.031494386, + -0.0011166251, + 0.01857227, + -0.0063368063, + -0.0127063105, + 0.005473588, + 0.01354991, + 0.0070169177, + 0.0405451, + -0.019749386, + -0.005002742, + 0.009070331, + -0.010796768, + 0.0069515225, + -0.0056795836, + 0.017525947, + 0.000104734696, + 0.016832756, + 0.022129776, + -0.009815837, + 0.038949452, + -0.0104436325, + -0.003032708, + -0.0049733142, + -0.016139565, + 0.0040904772, + 0.0019651293, + -0.0077493456, + -0.008782592, + 0.023450762, + 0.0040479703, + 0.011803855, + 0.01047633, + 0.021959748, + -0.0068141925, + -0.02025947, + 0.007167327, + 0.008115559, + -0.03452873, + -0.026079653, + 0.010234368, + 0.016701965, + 0.014687789, + 0.00076512527, + -0.0061536995, + 0.014386971, + -0.008220192, + -0.034345623, + 0.01914775, + 0.004708463, + 0.0035411566, + -0.05367648, + 0.004093747, + 0.014713947, + -0.01789216, + -0.0079324525, + -0.010744452, + -0.01732976, + 0.0265505, + -0.00036396584, + -0.005503016, + 0.00740275, + 0.004404375, + 0.004021812, + 0.012902496, + -0.006245253, + -0.026066575, + 0.030866591, + 0.02403932, + 0.0088414475, + -0.016191881, + -0.012183148, + -0.0079324525, + -0.020730317, + -0.0019749387, + -0.019030038, + -0.02151506, + 0.018363006, + 0.025281832, + 0.015459454, + 0.02097882, + -0.0052054673, + 0.011097586, + -0.0037536914, + -0.002738429, + -0.013746097, + -0.028538518, + -0.011012572, + 0.013562989, + 0.024130873, + 0.029218629, + 0.01620496, + -0.013876887, + 0.010672516, + -0.005198928, + 0.009998945, + -0.027753774, + 0.0010896495, + -0.0051368023, + 0.011496497, + 0.009279596, + -0.010999493, + 0.0015384249, + -0.0023362478, + 0.012497046, + 0.0037406124, + 0.019030038, + -0.0026109081, + 0.024300901, + 0.0005570864, + 0.0034921102, + -0.0027155406, + 0.004355328, + 0.025674203, + -0.006820732, + 0.0254257, + -0.029846424, + -0.022718335, + -0.00642836, + -0.0077885827, + -0.002543878, + -0.00188502, + -0.023777738, + -0.007598936, + -0.020782633, + 0.019631675, + -0.004361868, + 0.014570077, + 0.03983883, + -0.0085929455, + 0.026485104, + 0.023843134, + -0.014831658, + 0.00089101127, + 0.014844738, + 0.015106319, + 0.007716648, + -0.01634883, + 0.01872922, + -0.0015220761, + -0.022535227, + -0.01341912, + 0.0077755037, + -0.013641464, + -0.021410428, + 0.0014215307, + 0.0059444346, + 0.008468694, + 0.002136792, + 0.014190785, + -0.021292716, + -0.026890555, + 0.009796219, + -0.004149333, + -0.011476879, + -0.0071869455, + -0.017643657 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.0026680413, + -0.0026349186, + 0.008843787, + -0.0049684197, + -0.033255287, + 0.01970144, + -0.02827362, + 0.0020668625, + -0.012116319, + -0.035746124, + 0.00008668857, + -0.0036931918, + 0.016720388, + -0.018151293, + -0.036779553, + -0.024100147, + 0.012487294, + -0.023715923, + 0.009870593, + -0.023212455, + 0.0044020195, + 0.0038091217, + -0.010128952, + -0.015819447, + -0.011096137, + 0.008585429, + 0.0054586367, + -0.017488837, + 0.006253584, + -0.018800499, + 0.020045916, + 0.0018300345, + -0.00961886, + 0.0020685187, + 0.003918427, + -0.00977785, + -0.0061608404, + -0.0112153785, + -0.0011576418, + 0.00024324554, + 0.001564224, + 0.0026713535, + -0.0020635503, + -0.01999292, + -0.0040476057, + 0.013348487, + 0.003825683, + -0.0020536133, + -0.01968819, + 0.028538601, + 0.0107715335, + 0.020655377, + -0.008201204, + -0.005057851, + -0.021092597, + 0.014905258, + -0.020483138, + 0.005163844, + -0.012467421, + -0.006396012, + 0.007333387, + 0.0032874376, + -0.023980904, + 0.011573105, + 0.0063893874, + -0.017038366, + -0.016786633, + 0.011261751, + -0.021145593, + -0.0028286867, + 0.019012485, + 0.0014847293, + -0.020112162, + -0.014229554, + 0.036938544, + 0.013474354, + -0.014706521, + -0.0053957035, + -0.0013091785, + 0.0020171783, + 0.022364512, + -0.023119712, + 0.0028253745, + -0.004888925, + 0.03428872, + 0.0007568559, + -0.010976895, + 0.018230787, + 0.0062204613, + -0.019197972, + 0.024762603, + 0.019423207, + 0.009532741, + -0.004322525, + -0.016495153, + -0.026643978, + -0.0054188897, + 0.01938346, + 0.012898017, + -0.029678026, + -0.018959489, + 0.02571654, + 0.001242933, + -0.01968819, + -0.019303966, + -0.00054611213, + -0.002073487, + -0.020098913, + -0.0015857539, + 0.0011071295, + 0.007823604, + 0.020509636, + -0.0027690658, + -0.05079712, + -0.015845945, + -0.010890775, + 0.005670623, + -0.0001018526, + -0.026723472, + -0.022470506, + 0.011374368, + 0.023543684, + 0.004216532, + -0.0033785251, + 0.028035134, + 0.0016669048, + -0.005034665, + -0.011619477, + -0.0076447413, + -0.001836659, + 0.006134342, + 0.01217594, + 0.027293185, + 0.0031350728, + -0.024020651, + 0.012003701, + -0.013938073, + 0.0210396, + -0.026259754, + -0.01909198, + 0.007260517, + 0.01926422, + -0.00810846, + -0.00009802278, + 0.016362661, + 0.024325382, + 0.03439471, + 0.023517186, + 0.0013373329, + 0.000698477, + -0.007638117, + -0.0040608547, + 0.014335547, + -0.002936336, + -0.0014648556, + 0.0055944403, + 0.015103995, + 0.004206595, + -0.012527042, + 0.025358813, + -0.004832616, + 0.005283086, + 0.030790951, + -0.027902644, + 0.016349413, + 0.01457403, + 0.016813131, + 0.005978665, + -0.0018234099, + -0.022814982, + -0.018866746, + 0.017793566, + -0.027160693, + 0.010619168, + -0.010692039, + 0.01233493, + 0.027213689, + 0.007836854, + -0.026948707, + -0.01909198, + -0.009645359, + 0.0157797, + 0.02045664, + 0.011705596, + 0.01923772, + 0.0017356345, + 0.020006169, + 0.016932374, + 0.021596063, + -0.009711604, + 0.015090746, + 0.046583902, + 0.005081037, + -0.0046703145, + -0.67114735, + -0.04674289, + -0.011785091, + 0.018204289, + 0.023331698, + 0.024444625, + 0.023291951, + -0.006409261, + -0.020072415, + 0.012228937, + -0.02314621, + 0.024550617, + -0.028247122, + -0.0026581045, + 0.0068895416, + -0.016627643, + 0.0049087983, + -0.025001086, + 0.02253675, + 0.01759483, + -0.0065285033, + 0.010764909, + -0.007187647, + 0.0074791275, + 0.039296884, + -0.011314747, + -0.007532124, + -0.008459562, + -0.008664924, + 0.036011104, + -0.040038835, + 0.04030382, + 0.0029048692, + -0.002283817, + 0.056017272, + -0.0071942713, + -0.005922356, + 0.028538601, + 0.023358196, + 0.048544772, + 0.0044682655, + -0.015753202, + 0.0071942713, + 0.0063893874, + 0.0056805597, + -0.0021413888, + 0.030737955, + -0.04239718, + 0.0058263, + -0.022059783, + 0.013328614, + -0.0066113104, + -0.021079348, + -0.00080488395, + 0.00025173326, + 0.013885076, + 0.009420123, + -0.006574875, + -0.011751968, + -0.006184026, + -0.020032667, + -0.0040177954, + -0.030631963, + -0.024736105, + -0.011314747, + 0.020628877, + -0.019515952, + -0.006442384, + -0.00007613068, + -0.0038389321, + -0.0058428613, + 0.022351263, + 0.0051174723, + -0.0035607007, + 0.034050234, + 0.027452175, + 0.0285651, + -0.017011868, + -0.0056772474, + -0.003221192, + 0.010705288, + 0.019356962, + 0.0058196755, + -0.010665541, + 0.019462956, + -0.022642743, + -0.0330698, + -0.0065814997, + 0.006005163, + -0.017846562, + 0.020642126, + 0.0068630436, + -0.0076646153, + 0.0013820487, + -0.0013174593, + 0.03094994, + -0.0033851499, + 0.0034878305, + 0.03847544, + -0.0048690513, + -0.019476205, + -0.006313205, + -0.0025073958, + -0.012427674, + -0.004892237, + -0.023676176, + -0.0035010795, + 0.005919044, + 0.015925441, + -0.014004318, + 0.021543067, + 0.0009845751, + -0.02074812, + -0.009327379, + 0.0072075203, + -0.027929142, + 0.019052232, + -0.0060217245, + 0.03895241, + -0.017846562, + 0.0018499081, + -0.0044583282, + 0.03243384, + 0.011539983, + 0.007863352, + 0.024245888, + 0.007724236, + -0.012990761, + -0.007287015, + -0.0064854436, + -0.01849577, + 0.01850902, + 0.003128448, + -0.011944081, + 0.01909198, + 0.011639351, + -0.010115702, + 0.0068895416, + 0.0023301886, + -0.028671093, + -0.026524736, + -0.020549383, + -0.0056639984, + 0.010393933, + 0.0025587361, + -0.012984136, + -0.0021182029, + -0.010506551, + -0.012566789, + 0.028618095, + -0.0010731786, + -0.016296417, + -0.03145341, + 0.021715306, + -0.02510708, + -0.028220622, + -0.0107715335, + -0.014295799, + -0.005875984, + 0.018389776, + 0.008313822, + 0.006690805, + -0.018654758, + 0.018588513, + 0.016468655, + -0.024378378, + 0.003766062, + -0.0077308607, + -0.0026796341, + -0.02525282, + -0.01864151, + -0.00969173, + -0.012209062, + -0.0038157462, + 0.022642743, + -0.0051174723, + 0.011169007, + 0.0025421747, + 0.0051505947, + 0.0003231543, + 0.008221078, + -0.030843949, + -0.011937456, + 0.015117245, + 0.031479906, + -0.010095828, + 0.012646284, + 0.026378995, + -0.021278085, + 0.0107847825, + -0.012725779, + 0.022073032, + 0.0032857815, + 0.0023401256, + 0.016468655, + -0.03198337, + 0.0032973744, + 0.013911574, + 0.002522301, + 0.018866746, + 0.024921592, + -0.0016834661, + 0.0042695287, + -0.013818831, + 0.022218771, + -0.012189189, + -0.004368897, + -0.012944389, + 0.02660423, + 0.012507168, + 0.009519491, + -0.012884768, + -0.02674997, + 0.0050975983, + 0.00072000676, + 0.026167009, + -0.012401175, + 0.016945623, + -0.001420968, + 0.0029711148, + 0.021649059, + -0.00916839, + 0.012056698, + -0.033599764, + -0.008936531, + 0.004491451, + 0.027584665, + 0.03656757, + 0.016667392, + -0.010307814, + -0.03622309, + -0.009433373, + -0.005498384, + 0.0051108473, + -0.00234675, + -0.015686957, + 0.0079494715, + -0.02058913, + 0.041708227, + 0.024431374, + 0.033043303, + 0.0039846725, + 0.033043303, + -0.018893244, + -0.0012893048, + 0.016587896, + 0.0360376, + 0.009651983, + -0.005452012, + 0.0044583282, + -0.025067333, + 0.001219747, + -0.016402408, + 0.0009696699, + -0.00857218, + -0.030287486, + 0.0003328841, + 0.0038588059, + 0.019476205, + 0.022642743, + 0.012520417, + 0.011891084, + 0.000675291, + 0.0030506095, + 0.015488219, + -0.007684489, + 0.014534283, + 0.001232168, + 0.011526734, + -0.0042629037, + -0.01142074, + 0.003941613, + -0.0026200132, + -0.014097062, + -0.0057699913, + -0.0008044699, + 0.013222621, + -0.012997385, + 0.0055480683, + 0.0066113104, + -0.021728555, + -0.037786487, + 0.004984981, + -0.005044602, + -0.0042099073, + -0.01623017, + -0.025809282, + 0.014865511, + -0.01503775, + 0.03428872, + 0.01697212, + 0.017409341, + 0.0009547646, + -0.02224527, + -0.011983828, + 0.0074195066, + 0.027425675, + -0.005498384, + -0.01457403, + -0.009307506, + 0.010254818, + -0.019436456, + 0.0064821313, + 0.010148825, + 0.018310282, + -0.003138385, + 0.005495072, + -0.0072472678, + -0.00424303, + -0.0048624263, + 0.014680023, + -0.003138385, + 0.00909552, + 0.002237445, + 0.0062038996, + -0.002726006, + -0.015647208, + -0.015289483, + 0.027293185, + -0.010599295, + -0.019621944, + -0.0051207845, + -0.020615628, + -0.0069491626, + 0.086331256, + -0.011765217, + 0.017846562, + 0.005991914, + 0.0093605025, + -0.0071015274, + -0.01742259, + -0.0047001247, + 0.0070087835, + 0.0079627205, + 0.0017372906, + -0.016481904, + 0.018601762, + 0.012725779, + 0.015859194, + -0.01986043, + -0.031347416, + -0.023821915, + 0.030711457, + -0.025491305, + -0.018760752, + 0.0019045608, + 0.0047796196, + 0.0050412896, + 0.005591128, + 0.005746805, + 0.0065947487, + 0.020469889, + 0.03712403, + -0.014415041, + 0.0054321387, + 0.010817905, + -0.010407182, + -0.00043887706, + -0.0044351425, + -0.008989527, + 0.017515335, + 0.003660069, + -0.006849794, + -0.017064866, + 0.016071182, + 0.0088504115, + 0.007379759, + -0.029121563, + 0.010075955, + -0.0056639984, + 0.0073863836, + 0.010281316, + -0.014746269, + -0.0180188, + 0.030658461, + -0.001954245, + -0.028061634, + -0.025411809, + -0.01746234, + 0.01670714, + -0.014600528, + 0.008565555, + 0.0053923912, + 0.011222003, + 0.011758593, + -0.021172091, + 0.0116724735, + -0.023093214, + -0.026034517, + -0.023093214, + -0.0022655993, + -0.021013102, + -0.036620565, + -0.0058362368, + 0.008631801, + 0.001326568, + -0.013116627, + 0.009837471, + 0.012606536, + -0.008201204, + 0.016998619, + -0.016998619, + 0.008671548, + 0.029810516, + -0.010195197, + -0.010148825, + -0.017170858, + -0.018005552, + -0.0058561102, + 0.008002467, + 0.020801116, + -0.037389014, + 0.00015919644, + -0.0018581889, + 0.041072268, + -0.005018104, + 0.0041635353, + -0.0003494455, + 0.003424897, + -0.027531669, + 0.012162691, + 0.014216304, + -0.011937456, + -0.009506242, + 0.017382843, + -0.013792332, + 0.016919125, + 0.012864894, + 0.006571563, + 0.012096445, + 0.018985987, + 0.01835003, + 0.01307688, + 0.013050382, + 0.024259137, + -0.032062866, + -0.017926058, + 0.02451087, + -0.031903878, + 0.02930705, + 0.007929597, + 0.023424441, + -0.008115085, + -0.0108974, + 0.0046636895, + -0.031055935, + 0.020827614, + 0.029837016, + 0.003941613, + 0.017528584, + -0.008042215, + -0.015978437, + 0.0018697819, + 0.002027115, + -0.016773384, + 0.0072340188, + -0.0016876064, + -0.0089034075, + -0.035004172, + -0.000004062718, + -0.0069822855, + 0.008585429, + 0.0079494715, + -0.031850882, + -0.012407799, + -0.00698891, + 0.008505934, + -0.010486677, + -0.022920975, + -0.023490688, + -0.009744727, + 0.02343769, + -0.0011692347, + 0.013646592, + 0.013911574, + 0.020072415, + -0.009088895, + -0.004415269, + -0.017833313, + -0.030049002, + -0.024457874, + -0.014256052, + 0.010042832, + 0.028432608, + 0.018972738, + -0.009685106, + 0.016680641, + -0.0021463572, + -0.0009199857, + 0.0027193816, + -0.0058693597, + 0.024643362, + -0.0059057944, + 0.007412882, + 0.019356962, + 0.0300755, + -0.022682492, + 0.0061608404, + -0.027041452, + 0.01015545, + 0.0006504489, + 0.0066874926, + 0.0018118169, + -0.034209225, + -0.0045113247, + -0.0057534296, + -0.013739336, + -0.0035607007, + -0.003660069, + -0.007406257, + -0.0040939776, + -0.01939671, + 0.016415657, + -0.0022407572, + 0.00096470147, + -0.014401792, + 0.004166848, + -0.00033681744, + 0.010102453, + -0.013633343, + -0.008598678, + -0.0034911428, + 0.009042524, + 0.019423207, + 0.03145341, + -0.010480053, + 0.009724853, + -0.00043887706, + 0.0203109, + 0.015554465, + 0.011467112, + -0.01179834, + 0.018469272, + -0.029731022, + -0.01518349, + -0.017369594, + 0.0054884474, + -0.020337397, + -0.027478673, + 0.02615376, + -0.009512867, + 0.015660457, + -0.026617479, + -0.011149134, + 0.018774, + -0.0064688823, + 0.024471123, + -0.0063761384, + 0.028777085, + 0.016468655, + -0.011175632, + 0.006386075, + -0.007273766, + -0.027584665, + -0.014865511, + 0.020403642, + -0.004382146, + -0.0050081667, + -0.033043303, + 0.0015203364, + 0.021927292, + -0.002500771, + -0.020814365, + 0.027902644, + 0.00037387357, + -0.004832616, + -0.003481206, + 0.009320755, + -0.008704671, + 0.00835357, + -0.007452629, + -0.00894978, + -0.008254201, + -0.012507168, + -0.009665232, + 0.016905876, + -0.020403642, + 0.0093605025, + 0.016243419, + -0.021437073, + -0.0026316063, + -0.008989527, + -0.013275617, + 0.015382227, + -0.004408644, + 0.03818396, + 0.0028568413, + 0.0049352967, + 0.014666774, + 0.015249736, + -0.0066113104, + -0.002866778, + 0.003931676, + 0.021423824, + -0.013951322, + -0.013924824, + 0.017356345, + -0.014083813, + 0.00034385602, + -0.0045179497, + 0.006323142, + -0.0145077845, + -0.036620565, + -0.006551689, + 0.0135405995, + 0.014812514, + 0.003448083, + -0.014309048, + -0.016852878, + -0.029890012, + -0.018813748, + 0.00023827712, + 0.0032973744, + -0.022497004, + -0.013487603, + 0.002191073, + -0.012407799, + 0.013898325, + -0.015236487, + -0.013964571, + 0.012732403, + 0.0076182433, + -0.01759483, + 0.01894624, + 0.0066510574, + 0.01788631, + -0.022497004, + -0.0078037307, + -0.0038323076, + -0.007154524, + 0.016495153, + 0.00008156489, + -0.024444625, + -0.009029275, + 0.011334621, + 0.02194054, + -0.002485866, + 0.013229245, + 0.03296381, + -0.0247891, + -0.0029893324, + -0.019277468, + -0.022033283, + 0.0026481675, + 0.008512558, + 0.018204289, + 0.001989024, + -0.020337397, + 0.0026912272, + 0.023782168, + -0.035984606, + 0.0012172628, + -0.013169624, + -0.027425675, + 0.005296335, + 0.0136068445, + -0.020695124, + -0.013182873, + -0.02163581, + -0.010029583, + -0.0130835045, + 0.009552615, + 0.0048061176, + -0.0020105538, + 0.005968728, + 0.010837779, + -0.014057315, + 0.028697591, + -0.0070286575, + -0.014017567, + 0.008399941, + -0.008187955, + -0.027041452, + -0.008247577, + -0.0010913962, + 0.04088678, + -0.0012214031, + -0.025173325, + -0.025968272, + 0.0070750294, + -0.0391114, + -0.010652292, + -0.013355112, + 0.017753819, + 0.00326922, + -0.0021463572, + 0.0041039144, + 0.018734254, + 0.0021331082, + 0.02538531, + 0.0032377534, + 0.001243761, + 0.026484989, + -0.01862826, + 0.026935458, + 0.010890775, + -0.023119712, + 0.0069822855, + 0.0165349, + 0.004905486, + 0.00336362, + 0.016110929, + -0.0030506095, + -0.008426439, + 0.01015545, + -0.009857344, + -0.012434298, + -0.0010922243, + 0.01224881, + -0.047140364, + 0.016574647, + 0.0038521811, + -0.013129877, + 0.01774057, + -0.007154524, + 0.005316209, + -0.0037726865, + 0.006882917, + -0.010996768, + -0.0088636605, + -0.0121428175, + -0.011334621, + 0.01697212, + 0.0015948627, + -0.021331081, + 0.021238336, + 0.01637591, + -0.0038223707, + -0.016905876, + 0.0069822855, + -0.0031317605, + 0.008075338, + 0.0016768415, + -0.018323531, + -0.010321063, + -0.014004318, + 0.004971732, + -0.032142363, + -0.0030737955, + 0.009380376, + -0.016309666, + -0.019515952, + 0.018548766, + 0.025981521, + -0.013885076, + -0.0038687426, + 0.0026117326, + -0.007684489, + 0.016998619, + -0.024219388, + 0.006256896, + -0.029439542, + 0.0029810518, + 0.0026730096, + -0.00819458, + -0.027266687, + 0.010427057, + 0.0020238028, + -0.020178407, + -0.008711295, + 0.23572832, + -0.0058594225, + -0.0018267222, + 0.022351263, + -0.001126175, + 0.023623178, + 0.025663543, + -0.008234328, + -0.008081962, + 0.008022341, + 0.00052292616, + -0.005339395, + 0.010062706, + -0.0154352235, + -0.0070617804, + -0.03216886, + -0.016733637, + -0.02178155, + -0.036620565, + 0.016004935, + 0.020946857, + -0.014945006, + -0.011937456, + -0.006382763, + 0.022894477, + 0.002653136, + -0.011447239, + 0.013494227, + 0.01605793, + 0.023490688, + -0.005852798, + 0.0043258374, + -0.0037230023, + 0.009757976, + 0.000064278924, + 0.008181331, + -0.00014149645, + 0.0024924905, + 0.027452175, + 0.03219536, + -0.007929597, + -0.015196739, + -0.0165349, + -0.004312588, + -0.010115702, + 0.016124178, + 0.0040177954, + -0.006299956, + -0.015395476, + 0.01922447, + -0.03407673, + -0.026855964, + 0.03023449, + 0.022126028, + 0.017170858, + -0.006445696, + 0.023252204, + -0.0023070027, + -0.00518703, + -0.016428906, + -0.011513484, + 0.02255, + -0.01788631, + 0.025133578, + -0.02044339, + 0.017091364, + -0.009281008, + -0.0157797, + 0.011838088, + -0.0041072266, + 0.015209988, + -0.0021331082, + -0.0002641543, + -0.01367309, + -0.026869213, + -0.025001086, + 0.032831315, + 0.008969653, + 0.015991686, + 0.026617479, + -0.030446475, + 0.016919125, + 0.01862826, + -0.008525807, + -0.003742876, + -0.03110893, + 0.0054884474, + 0.0054553244, + 0.009479744, + -0.0013795645, + 0.0008218594, + -0.02706795, + -0.016587896, + -0.028300118, + 0.006111156, + 0.0015799574, + -0.007856728, + 0.006170777, + -0.010572797, + 0.016322915, + -0.004888925, + 0.006929289, + 0.010612544, + -0.000272642, + 0.003471269, + -0.008963029, + -0.0144812865, + 0.0068299207, + -0.016733637, + -0.020204905, + -0.006326454, + -0.01894624, + 0.014083813, + -0.00036186655, + -0.0012487294, + 0.01789956, + 0.008307197, + 0.006326454, + 0.014242803, + -0.026683725, + 0.009486369, + -0.028141128, + -0.011910957, + 0.0108974, + -0.0032129113, + -0.0054453877, + -0.019330464, + -0.0012594943, + -0.0006641121, + -0.0315859, + 0.013964571, + 0.0011270031, + 0.02194054, + -0.004193346, + 0.0074923765, + 0.0029247429, + -0.009221386, + -0.010837779, + -0.020814365, + 0.0058826087, + 0.023861663, + -0.0103144385, + 0.015011251, + 0.0130967535, + -0.021410575, + -0.026710223, + 0.021529818, + 0.0068166717, + -0.024444625, + -0.002995957, + -0.017674325, + -0.024550617, + -0.016640892, + -0.014110311, + 0.021728555, + -0.0032410657, + -0.015156992, + -0.0024428063, + -0.0064125736, + 0.022523502, + -0.039482374, + -0.013414732, + 0.028538601, + -0.027478673, + -0.020536134, + -0.012262059, + -0.17170858, + 0.018204289, + 0.033546768, + -0.020496387, + 0.025146827, + 0.0210661, + 0.010380684, + -0.011301498, + -0.022046532, + -0.00048400686, + 0.035110164, + -0.0033470585, + -0.03667356, + -0.017475588, + -0.006634496, + -0.008088587, + -0.02162256, + 0.0055050086, + 0.015050999, + 0.00061028753, + 0.026087515, + -0.026670476, + 0.01609768, + -0.0046206303, + -0.021331081, + 0.023106463, + -0.015408725, + 0.003706441, + 0.0016627643, + -0.003411648, + -0.005587816, + -0.017912809, + 0.014521034, + 0.020827614, + -0.0021297957, + 0.014229554, + -0.008134959, + -0.008081962, + -0.018363278, + 0.0072936397, + -0.01593869, + 0.004859114, + 0.015488219, + -0.01262641, + -0.0017240415, + 0.0144680375, + 0.008671548, + -0.0055348193, + -0.0010516488, + -0.042768154, + 0.008896783, + -0.017541833, + 0.0036865673, + 0.022430757, + 0.0015004626, + 0.017237103, + -0.0053658932, + 0.016905876, + 0.023689425, + -0.0017372906, + -0.03142691, + -0.005011479, + 0.015806198, + -0.0093340045, + -0.0130437575, + -0.007412882, + -0.013368361, + -0.0027972201, + -0.02959853, + 0.007333387, + 0.007903099, + -0.016561398, + 0.009857344, + -0.040674794, + 0.014640276, + -0.0103011895, + 0.006492068, + 0.022470506, + 0.012401175, + -0.018151293, + -0.03216886, + 0.029360047, + -0.01970144, + -0.005061163, + -0.0056308755, + 0.045311987, + 0.010009709, + -0.00073035766, + -0.031347416, + -0.0028121255, + 0.015329231, + -0.014269301, + -0.009393625, + -0.013321989, + -0.005554693, + 0.012845021, + -0.011539983, + 0.031320915, + -0.0016486872, + 0.01233493, + -0.0008334524, + -0.008062089, + -0.01819104, + 0.013633343, + 0.024736105, + 0.018972738, + 0.019873679, + 0.014547532, + 0.024563866, + -0.0035441392, + -0.023623178, + -0.011374368, + 0.0144812865, + 0.015315982, + -0.00095145236, + 0.011977203, + 0.0233052, + -0.009439997, + 0.024524119, + 0.007903099, + 0.048465274, + -0.012527042, + -0.004772995, + 0.016760135, + -0.0017025118, + -0.028194124, + -0.05591128, + 0.010440306, + 0.012765526, + -0.013845329, + 0.0011990452, + 0.03852844, + 0.02195379, + 0.035136662, + -0.0041734725, + 0.013335238, + -0.0077639837, + -0.0037329393, + 0.0030953253, + -0.011380993, + 0.036726557, + -0.01608443, + 0.0054288264, + 0.0030853886, + -0.024391627, + 0.004951858, + -0.005389079, + -0.02239101, + -0.01669389, + -0.008433064, + -0.020006169, + 0.015739953, + -0.03094994, + 0.026710223, + 0.01730335, + 0.0052897106, + 0.0103144385, + 0.00045999285, + -0.0017356345, + -0.020377144, + 0.00003317455, + 0.014322298, + -0.02391466, + -0.0026034517, + 0.03410323, + -0.023397943, + -0.0036302586, + -0.009400249, + 0.01323587, + -0.011851337, + -0.009274383, + -0.009890467, + -0.01608443, + 0.009413498, + 0.022814982, + -0.017714072, + -0.024285635, + 0.008274075, + -0.0053460193, + -0.008929906, + 0.030737955, + -0.025650294, + -0.0004691016, + 0.009016025, + -0.052122034, + 0.02150332, + -0.008843787, + 0.002003929, + -0.007823604, + 0.025425058, + 0.032672327, + -0.0042595915, + -0.017078115, + -0.043086134, + 0.01997967, + -0.0039681112, + -0.009453246, + 0.031294417, + -0.006150903, + 0.0054321387, + -0.010208446, + -0.017555082, + -0.037177026, + -0.013169624, + 0.0023898098, + -0.016163925, + -0.004739872, + -0.02358343, + -0.0135538485, + 0.013315364, + -0.016269919, + 0.028750587, + -0.0063463277, + -0.006710679, + 0.016508402, + -0.01143399, + 0.0063562645, + 0.028856581, + 0.030472973, + -0.01059267, + -0.010195197, + 0.016839629, + 0.021158842, + 0.010566172, + -0.00064258225, + 0.017621327, + -0.007406257, + -0.027293185, + -0.08818613, + 0.026034517, + 0.017117862, + -0.01850902, + 0.012440923, + -0.009989835, + 0.023941157, + -0.0027773464, + 0.026405493, + -0.005173781, + -0.042900644, + 0.020986604, + -0.022510253, + -0.015064248, + -0.031506404, + -0.016654141, + 0.031506404, + 0.016627643, + 0.008346945, + 0.016150676, + 0.017992303, + -0.012434298, + 0.028538601, + 0.0028634658, + -0.018548766, + 0.011440614, + -0.04642491, + 0.039906345, + -0.0036799428, + -0.002321908, + 0.012560165, + -0.031029437, + 0.0036136971, + 0.013752585, + -0.0037826234, + 0.01081128, + -0.010393933, + -0.012646284, + 0.001006105, + 0.044861514, + -0.032990307, + 0.0028982447, + 0.0064721946, + -0.00492536, + -0.0026829466, + -0.0062668333, + 0.019515952, + 0.00480943, + 0.0070087835, + 0.0145077845, + -0.017661076, + 0.01983393, + -0.0046239425, + -0.015302732, + -0.0032394095, + -0.043987073, + 0.028247122, + -0.004915423, + 0.00058130507, + -0.0029181184, + 0.014521034, + 0.016269919, + 0.020231403, + 0.0050247284, + 0.0016735293, + -0.008724544, + -0.009188264, + -0.0046206303, + 0.016163925, + -0.026392244, + -0.037309516, + 0.012401175, + -0.004537823, + 0.037230022, + -0.0021397327, + -0.023543684, + -0.0052599, + 0.0043755216, + -0.021755053, + 0.014587279, + -0.00061898225, + 0.009002776, + -0.04014483, + 0.012189189, + 0.009797723, + -0.013726087, + -0.00473656, + -0.005352644, + -0.0077109872, + 0.020072415, + -0.02538531, + 0.012712529, + 0.01805855, + 0.0011245189, + 0.00097546633, + 0.01833678, + -0.0023335011, + -0.027982138, + 0.022377761, + 0.023106463, + 0.02314621, + -0.011520108, + 0.002545487, + -0.014640276, + -0.0075387484, + 0.012613161, + -0.022920975, + 0.009877218, + 0.009651983, + 0.009088895, + 0.02255, + 0.0034282093, + 0.0011924207, + 0.020655377, + 0.026061017, + -0.008512558, + -0.017647825, + -0.024881845, + -0.017064866, + 0.008797415, + 0.020377144, + 0.0144415395, + 0.013739336, + 0.0011468768, + 0.017184107, + -0.016481904, + 0.005425514, + -0.018866746, + -0.0009936839, + -0.008009092, + 0.0039482373, + 0.001657796, + -0.009380376, + -0.0073068887, + -0.025226321, + 0.0070551555, + 0.012315055, + 0.006303268, + 0.008333696, + 0.049366217, + 0.0051572192, + 0.009969962, + 0.019025734, + 0.008068713, + 0.0105198, + 0.008028965, + -0.00046123494, + -0.034050234, + -0.02420614, + 0.009022649, + -0.014534283, + 0.0055845035, + -0.010102453, + -0.018615011, + -0.026551234, + -0.0011063014, + 0.009221386, + -0.00037242443, + 0.008101836, + 0.037044536, + -0.0073400117, + 0.023225704, + 0.014256052, + -0.0008479436, + 0.007896475, + 0.0300755, + -0.0018300345, + -0.0004927016, + -0.019476205, + 0.0144547885, + 0.007393008, + -0.028512103, + -0.02225852, + -0.018707756, + -0.0028319992, + -0.016998619, + 0.01789956, + 0.004938609, + 0.0031582587, + 0.0019857117, + 0.018668009, + -0.022165775, + -0.02538531, + 0.031188425, + -0.020072415, + -0.000031751304, + 0.0067636753, + -0.017700823 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + -0.0044841906, + 0.00023355159, + -0.00082493754, + 0.010029372, + -0.015641283, + 0.02653146, + -0.026091048, + -0.0066962577, + -0.008347801, + -0.021913812, + 0.017136013, + -0.013826254, + 0.012485, + -0.010282942, + -0.008074212, + -0.017709883, + 0.03384496, + -0.008374493, + 0.026838413, + -0.0343521, + 0.0005384198, + -0.005495135, + -0.010082755, + -0.006906454, + -0.009889241, + 0.006275865, + -0.0017316182, + -0.020539194, + 0.0030695351, + -0.032296848, + 0.02372884, + 0.010356344, + 0.0012778608, + -0.019031117, + -0.019645024, + -0.009628998, + -0.009955971, + -0.008194324, + -0.011243841, + -0.017136013, + 0.016748985, + -0.009228624, + -0.015441096, + -0.004170564, + -0.014333394, + 0.01742962, + 0.0025173523, + 0.016655564, + -0.028106265, + 0.012311505, + 0.0062091355, + 0.024329402, + -0.027705891, + -0.0017182723, + -0.014159899, + 0.0021203146, + -0.0042840033, + 0.002655815, + 0.0074269404, + -0.0026708292, + 0.024436168, + 0.011877766, + -0.018951043, + -0.003623386, + 0.014053132, + 0.000584296, + -0.0009575615, + 0.030054752, + -0.012992141, + -0.009115185, + 0.01901777, + 0.02137998, + -0.012731898, + 0.008234361, + 0.015040722, + -0.019458184, + -0.049539626, + 0.0010468116, + 0.00804752, + 0.001294543, + -0.003364811, + -0.019538257, + 0.012311505, + -0.0006247505, + 0.008094231, + 0.010643279, + -0.005154817, + 0.04406785, + -0.021019643, + -0.01533433, + 0.018283753, + 0.0029227312, + 0.005051387, + -0.009268661, + -0.03878291, + 0.004617648, + -0.016108386, + 0.027652508, + -0.007306828, + -0.032697223, + -0.010923541, + 0.008287745, + -0.016775677, + -0.014546927, + -0.02984122, + 0.010342998, + 0.012411598, + 0.007453632, + 0.015894853, + -0.0026674927, + 0.0011010289, + 0.012131336, + -0.009115185, + -0.05519825, + -0.015347675, + -0.037234794, + 0.0069932016, + 0.00059430534, + -0.019524911, + -0.019645024, + 0.012698533, + 0.018884314, + 0.016882444, + -0.026704956, + 0.0056219203, + -0.014573619, + -0.017202742, + -0.0058688177, + -0.0016457045, + -0.002824306, + 0.02853333, + 0.038996443, + 0.00025794937, + -0.013973057, + -0.021046335, + 0.008594698, + -0.035419766, + 0.006225818, + -0.011010289, + -0.029654378, + 0.0069798557, + 0.0028109602, + -0.0038435918, + 0.0027308853, + -0.009989335, + 0.0036734329, + 0.032136697, + 0.00459763, + 0.009849204, + 0.015027376, + 0.017976798, + 0.0032113343, + 0.0075470526, + -0.0009950965, + 0.0076938565, + 0.00986255, + 0.022287494, + 0.023328466, + -0.003823573, + -0.024382785, + -0.01211799, + -0.010509822, + 0.021460054, + -0.014400124, + -0.0030361705, + 0.016375303, + 0.005671967, + 0.054130584, + 0.0027909414, + -0.0036801056, + -0.0069398186, + 0.018043527, + -0.023995757, + 0.004791144, + 0.025637291, + 0.009362082, + 0.006886435, + 0.009302026, + -0.023982411, + 0.014533581, + -0.019564949, + 0.0028209696, + 0.010129466, + 0.012431617, + -0.008995072, + 0.019378109, + 0.018016836, + -0.0007114982, + 0.0057420325, + 0.000746948, + 0.013285749, + 0.029067162, + 0.0017449639, + 0.001951824, + -0.6700662, + -0.04406785, + -0.027999498, + 0.0029260677, + 0.04081147, + 0.030214902, + 0.018497285, + 0.027225442, + -0.00887496, + -0.010710008, + -0.046656933, + 0.0064393505, + -0.017202742, + 0.007867352, + 0.01377287, + -0.025357028, + 0.010296288, + -0.012171374, + 0.008868287, + 0.0120979715, + 0.011851074, + 0.007827315, + -0.0036200495, + -0.0065928274, + 0.018790893, + -0.0070065474, + -0.005805425, + -0.026718302, + -0.012284813, + 0.044841904, + -0.032136697, + 0.033417895, + -0.0017699874, + -0.008534642, + 0.044735137, + -0.024836542, + -0.025637291, + 0.03445887, + -0.011704271, + 0.049165946, + 0.003446554, + -0.006559463, + -0.010449765, + -0.017376238, + -0.00474777, + 0.010463111, + 0.022541065, + -0.023061551, + -0.014266665, + -0.010663298, + 0.008914998, + -0.013892983, + -0.0017533051, + -0.011670906, + 0.007894044, + 0.010349671, + 0.014653694, + -0.0001789172, + 0.015307638, + -0.019044463, + -0.008307763, + 0.0056519485, + -0.03795547, + -0.028239723, + -0.002780932, + -0.0026441375, + -0.037848704, + -0.0026825068, + 0.015214218, + -0.018924352, + -0.007860679, + 0.014159899, + -0.000095297386, + 0.020539194, + 0.0252903, + 0.031949855, + 0.01616177, + -0.0070198933, + -0.019364763, + -0.0009900919, + 0.008307763, + -0.017603116, + -0.0030661987, + -0.008768193, + 0.02172697, + -0.03331113, + -0.02853333, + 0.00665622, + 0.008200997, + -0.024676394, + 0.01809691, + 0.010423074, + -0.0063359207, + 0.0023521981, + -0.002750904, + 0.005331649, + -0.011090363, + 0.023501962, + 0.014720422, + -0.032110006, + 0.00526492, + 0.0029010442, + 0.007867352, + -0.0027559088, + -0.02039239, + -0.001042641, + -0.01839052, + 0.02503673, + 0.010556531, + -0.016188461, + 0.008074212, + -0.025570562, + -0.012224757, + -0.020045398, + 0.009468849, + -0.018857623, + 0.011036981, + 0.01717605, + 0.022767942, + -0.0057687243, + 0.010950233, + 0.006212472, + 0.027132021, + -0.0018750855, + 0.008728156, + 0.011750981, + -0.006182444, + -0.010423074, + -0.010289615, + 0.010903522, + -0.0013429216, + -0.00019737193, + 0.004237293, + -0.007780604, + 0.0038169, + -0.030294977, + -0.004974649, + 0.0071199867, + 0.02952092, + -0.02554387, + -0.043881007, + -0.025276953, + -0.0075337067, + 0.0035599933, + -0.021620203, + -0.009415465, + 0.012872029, + 0.015240909, + -0.012565075, + 0.019938633, + 0.0068130335, + -0.021873774, + -0.03961035, + 0.019524911, + 0.0120045515, + -0.008788212, + -0.029600995, + -0.007046585, + -0.02137998, + 0.008608044, + -0.0043073585, + -0.0043073585, + -0.033551354, + -0.009135203, + 0.005611911, + -0.015494479, + -0.004220611, + 0.011777673, + -0.0011744308, + -0.02653146, + -0.015187526, + -0.013706141, + -0.013826254, + 0.012992141, + 0.009555596, + -0.0010735032, + 0.012458309, + -0.0045309006, + 0.0138529455, + 0.010850139, + 0.005184845, + -0.031042341, + -0.021620203, + -0.0060890233, + 0.027225442, + 0.009201933, + -0.0022821326, + 0.02439613, + -0.014253319, + 0.011203803, + -0.031949855, + 0.015761396, + -0.0017266135, + -0.009021764, + 0.0138529455, + -0.01730951, + -0.0013103912, + 0.0044041155, + 0.015214218, + 0.008834923, + 0.026424693, + -0.0035966944, + 0.007059931, + -0.015240909, + 0.018337136, + -0.01975179, + -0.00028776893, + -0.0042339563, + 0.024169253, + 0.029627686, + 0.002655815, + -0.025677329, + 0.0011719285, + -0.005855472, + 0.011003616, + 0.012077954, + 0.025410412, + 0.019925287, + -0.004340723, + -0.014733768, + 0.023074897, + -0.011410663, + 0.006662893, + -0.023301775, + 0.0069198, + 0.021500092, + 0.023288429, + 0.022541065, + 0.026731648, + 0.0040537883, + -0.014013095, + -0.007473651, + -0.012204738, + -0.0050180224, + 0.0084812585, + -0.013919674, + 0.0036300588, + -0.0036367318, + 0.030561892, + -0.016415339, + 0.010783411, + -0.0015197535, + 0.016535452, + -0.011497411, + 0.005695322, + -0.016121732, + 0.04745768, + 0.0112571865, + -0.0069464915, + 0.020419082, + -0.025490487, + -0.003860274, + -0.01800349, + 0.028159648, + 0.002388899, + -0.031789705, + -0.00402376, + 0.009422138, + 0.007974118, + 0.0256106, + 0.014800497, + -0.0078339875, + 0.0018350482, + 0.024062486, + -0.016455377, + -0.00021686933, + 0.018110257, + 0.026051011, + -0.007914063, + -0.034832552, + -0.02531699, + -0.020218894, + 0.003519956, + 0.009535577, + 0.0043073585, + -0.009689054, + -0.015894853, + -0.011417336, + 0.014119862, + 0.0057553784, + -0.002882694, + -0.040250946, + 0.030001368, + 0.01492061, + -0.01016283, + -0.0077405665, + -0.009388774, + 0.008868287, + -0.01673564, + 0.01965837, + 0.026357964, + 0.020699343, + -0.004304022, + -0.018857623, + -0.0133991875, + 0.0074002487, + 0.02589086, + -0.041345302, + 0.013946366, + -0.019898595, + 0.0014004754, + -0.025930898, + -0.00903511, + -0.009188587, + 0.020218894, + 0.0027342218, + 0.00001191869, + -0.01673564, + -0.013459244, + -0.008427876, + 0.022180727, + -0.02885363, + -0.0024656374, + 0.009462176, + -0.0058621448, + 0.0050847516, + -0.006205799, + -0.016108386, + 0.016708948, + -0.0024089178, + -0.015828125, + 0.009095166, + -0.022848018, + -0.005925537, + 0.10890177, + -0.0012027906, + -0.003973713, + 0.021073025, + 0.0057854066, + 0.023328466, + -0.0040904894, + -0.0011410663, + 0.006352603, + 0.008307763, + -0.022287494, + 0.003483255, + -0.0039837225, + 0.0037368254, + 0.009849204, + -0.0012711879, + -0.013479263, + -0.052876078, + 0.030108135, + -0.009555596, + -0.012304832, + 0.017296163, + 0.0029911285, + 0.02045912, + 0.007960772, + -0.012985468, + 0.01689579, + 0.008794885, + 0.031896472, + -0.009849204, + -0.000403085, + 0.002167025, + 0.014119862, + 0.013292422, + -0.01730951, + -0.008274399, + 0.036914498, + -0.0035366383, + 0.008454567, + -0.003947022, + 0.01988525, + 0.00045792793, + -0.0020435764, + -0.003947022, + -0.002173698, + -0.0062825377, + -0.015000684, + 0.024489552, + -0.036700964, + -0.019858558, + 0.01418659, + 0.00031904815, + -0.03750171, + -0.009395447, + -0.026918488, + 0.024916617, + -0.0057120044, + -0.007974118, + 0.002056922, + 0.023635421, + 0.009642344, + -0.013879637, + -0.013372497, + -0.020525848, + -0.0013304099, + -0.043747548, + 0.0009709073, + -0.013205674, + -0.018884314, + -0.01476046, + 0.0102429055, + -0.011203803, + -0.025076767, + 0.02007209, + 0.015454442, + -0.009261988, + 0.016642218, + -0.02360873, + -0.007900717, + 0.020552538, + -0.013639413, + -0.0133991875, + -0.017349547, + -0.015908198, + -0.011784346, + 0.009689054, + 0.0130255055, + 0.0038736197, + -0.017669845, + 0.017189397, + 0.038596068, + -0.011951168, + 0.006522762, + -0.0035166196, + -0.011710944, + -0.009075147, + 0.008241034, + 0.017829996, + -0.018857623, + -0.0023488617, + 0.021927157, + -0.021940503, + -0.0069398186, + 0.021126408, + -0.0017850014, + -0.0021853754, + 0.010129466, + -0.003298082, + -0.010102774, + -0.001996866, + 0.02888032, + -0.0093153715, + 0.014360086, + 0.001457195, + 0.003616713, + 0.0082076695, + 0.00006532146, + 0.023114935, + 0.00850795, + 0.010189522, + -0.0147871515, + -0.0016231835, + 0.015427751, + 0.015027376, + 0.024195943, + -0.018817585, + 0.002757577, + -0.010896849, + 0.009101839, + 0.0016657233, + 0.008234361, + 0.018377174, + -0.019858558, + -0.016708948, + -0.0015189194, + 0.0044841906, + -0.0138396, + 0.023755532, + 0.003653414, + -0.029814528, + -0.008434549, + 0.005485126, + 0.018764202, + -0.015921544, + -0.039556965, + -0.028132956, + 0.0036033674, + 0.035286307, + 0.0026674927, + 0.008174306, + 0.009322044, + 0.028773556, + -0.007607109, + -0.010022699, + -0.011070345, + -0.006032304, + -0.015227563, + -0.013419206, + 0.012331524, + 0.005501808, + 0.020565884, + 0.00030507674, + 0.010816774, + 0.0043006856, + -0.0049946676, + 0.005395042, + -0.001981852, + 0.006886435, + 0.010409728, + 0.029067162, + 0.008174306, + 0.022073962, + -0.005131462, + -0.0011961177, + -0.030108135, + 0.0061323973, + -0.0135193, + -0.015521171, + -0.021099716, + -0.030268285, + -0.0015614592, + -0.00871481, + -0.010563204, + 0.009382101, + 0.0015005689, + 0.02595759, + 0.025223572, + -0.00041726494, + 0.013692795, + -0.008267726, + 0.009769129, + -0.011504084, + -0.023341812, + 0.008654755, + 0.00018559009, + -0.005014686, + -0.020886185, + 0.008788212, + 0.0062892106, + 0.008788212, + 0.010036045, + 0.0009784143, + -0.009949298, + 0.014680386, + -0.0007957436, + 0.041211843, + -0.00928868, + -0.008354474, + 0.015667975, + -0.0346724, + -0.016014965, + -0.007653819, + 0.0065861545, + -0.04409454, + -0.020832801, + 0.013145617, + -0.010249578, + 0.02255441, + -0.017736575, + -0.019645024, + 0.01959164, + 0.016535452, + 0.025717366, + -0.015828125, + 0.023061551, + 0.0083878385, + -0.010796756, + 0.011370625, + 0.015948236, + -0.01689579, + -0.023208354, + 0.018937698, + 0.018363828, + -0.020485811, + -0.020218894, + 0.002595759, + 0.009622325, + -0.03451225, + 0.006365949, + 0.027252134, + 0.029787837, + 0.0010835126, + 0.00572535, + 0.009582288, + -0.0054817894, + 0.023929028, + -0.015788088, + -0.020525848, + -0.01666891, + -0.004577611, + -0.015107451, + 0.006833052, + -0.002046913, + 0.0031095725, + 0.020552538, + -0.009322044, + -0.011010289, + -0.019898595, + 0.010016026, + 0.0069998745, + -0.02917393, + 0.023101589, + 0.0022737915, + 0.007053258, + 0.0107033355, + 0.0034699093, + -0.008628063, + 0.0013821248, + 0.014400124, + 0.024703085, + -0.0071333325, + 0.0059989393, + 0.002167025, + -0.011644214, + 0.0122781405, + 0.009248642, + -0.0009875896, + -0.00830109, + -0.0054250695, + -0.008781539, + 0.0106165875, + 0.0048678825, + 0.011070345, + -0.012138009, + -0.03002806, + -0.014707076, + -0.007994137, + -0.015467788, + 0.00079032185, + -0.011944495, + -0.0170159, + -0.020605922, + -0.0046710316, + 0.022207418, + 0.014013095, + -0.021446709, + 0.009141876, + 0.0044474895, + -0.0107033355, + 0.006646211, + -0.01717605, + 0.010509822, + 0.0018584033, + 0.0006201629, + -0.0147871515, + -0.025757402, + 0.027999498, + -0.023982411, + -0.0018250388, + -0.029387463, + -0.01377287, + 0.023501962, + -0.002078609, + 0.019217959, + 0.025850823, + -0.017189397, + 0.008527969, + -0.03333782, + -0.014627002, + 0.0028142966, + 0.010563204, + -0.0020902867, + 0.026291234, + -0.007366884, + 0.01517418, + 0.018977735, + 0.015454442, + 0.0035633298, + -0.010716681, + -0.013906329, + -0.009789147, + -0.00836782, + 0.00007934498, + -0.0073001552, + -0.017149359, + 0.0040137507, + -0.00944883, + -0.0053516678, + 0.01924465, + -0.0072134077, + 0.0067262854, + 0.013652759, + 0.022701213, + -0.0010526504, + -0.006803024, + -0.020685997, + -0.0127452435, + -0.006752977, + -0.02379557, + -0.006065668, + -0.0152676, + 0.02519688, + 0.027412282, + -0.040678013, + -0.02338185, + 0.026891796, + -0.031576175, + 0.003166292, + -0.02214069, + 0.015361021, + 0.014453506, + -0.00045167207, + -0.00036429876, + 0.010603242, + -0.010262924, + 0.009048455, + -0.029307388, + -0.003750171, + 0.022260802, + -0.017616462, + 0.008588025, + 0.00816096, + -0.014293357, + 0.0039236667, + 0.007580417, + -0.0014705409, + 0.01492061, + -0.006676239, + 0.00314961, + 0.0003401095, + 0.00036617552, + 0.01492061, + -0.0083878385, + 0.023942374, + 0.0071533513, + -0.0349927, + 0.012291486, + 0.010783411, + -0.016588835, + 0.008354474, + 0.013425879, + 0.0014421811, + -0.02080611, + 0.00541506, + -0.02089953, + 0.014573619, + -0.0012745244, + -0.0081075765, + 0.016415339, + -0.012972122, + -0.00024001596, + 0.031389333, + 0.000569282, + -0.0065394444, + -0.022474336, + 0.010543185, + -0.012391579, + 0.0085746795, + 0.013279076, + 0.0031712968, + -0.009201933, + -0.022113997, + 0.008354474, + -0.027492357, + -0.020178856, + 0.0065561268, + -0.0019801839, + -0.021793699, + 0.02519688, + 0.0011026971, + -0.0019234641, + -0.0062224814, + -0.011003616, + 0.00190845, + -0.006722949, + -0.025770748, + -0.003373152, + -0.03878291, + -0.018030182, + 0.0060756775, + -0.01393302, + -0.00020310647, + 0.0008024165, + 0.024556281, + -0.020525848, + 0.009155222, + 0.25111467, + -0.007520361, + -0.0110770175, + 0.028293107, + -0.0070799496, + 0.029414153, + 0.03387165, + -0.013158963, + -0.0097024, + 0.019831866, + -0.015107451, + -0.0027275488, + 0.01409317, + -0.0038402553, + 0.0082944175, + -0.011097036, + -0.019364763, + -0.04062463, + -0.0030862174, + -0.009375428, + 0.034378793, + -0.008914998, + -0.0014580291, + -0.0066495473, + 0.0050680693, + 0.013973057, + -0.0041238535, + 0.008434549, + 0.020152165, + 0.023261737, + 0.010683317, + 0.019578295, + 0.0003943268, + 0.03331113, + 0.0043507325, + 0.0070132203, + -0.0011886107, + -0.007787277, + 0.024943309, + 0.008321109, + 0.0021136417, + -0.012144682, + -0.0077472394, + -0.0011585826, + 0.0095022125, + 0.028613405, + -0.011270532, + -0.0061857803, + -0.003194652, + 0.02262114, + -0.029707761, + -0.004017087, + 0.01682906, + 0.023021514, + 0.011250514, + 0.0014229964, + 0.009048455, + -0.020619268, + -0.01915123, + -0.010509822, + 0.0008983395, + 0.024316056, + 0.003623386, + 0.024075832, + 0.0000784066, + -0.010823447, + -0.028266415, + 0.024502898, + -0.004871219, + 0.004140536, + -0.0005375857, + -0.003446554, + -0.0011844402, + -0.029787837, + -0.029013779, + -0.0026925162, + 0.03864945, + 0.00074152625, + 0.018150294, + 0.015881507, + -0.016175115, + 0.009835858, + -0.0013862954, + 0.0008512121, + -0.006893108, + -0.040384404, + 0.0027108665, + 0.0037835357, + 0.016281882, + -0.004387433, + 0.0052315556, + -0.021433363, + -0.0017166041, + -0.0077072023, + 0.0048478637, + -0.019351417, + -0.00092920166, + 0.006395977, + 0.000065217195, + 0.0056686304, + -0.0197251, + 0.004771125, + 0.0048512, + -0.022354223, + -0.01285201, + 0.0060890233, + 0.010556531, + 0.013679449, + 0.013138944, + -0.011710944, + -0.016014965, + -0.01682906, + 0.0060022757, + -0.010496476, + 0.00040663, + -0.0013270734, + -0.025930898, + -0.016975863, + 0.03267053, + -0.033898342, + 0.012158028, + -0.025010038, + -0.0071533513, + 0.0053516678, + -0.018457249, + 0.002078609, + -0.016081695, + 0.00060598296, + 0.009268661, + -0.031816397, + 0.030401744, + -0.016175115, + 0.014400124, + 0.0045142183, + -0.015881507, + 0.007320174, + 0.003947022, + -0.0033247736, + -0.0014446834, + -0.02137998, + 0.009969316, + -0.0074002487, + 0.008094231, + 0.00402376, + -0.0145068895, + -0.019231305, + 0.0069264728, + 0.017963452, + -0.013205674, + 0.0132990945, + -0.022380915, + -0.013158963, + 0.0022654503, + -0.016748985, + 0.015761396, + 0.00092836755, + 0.00026274554, + -0.008374493, + 0.011270532, + 0.027332207, + -0.015601246, + 0.0141332075, + 0.011744308, + -0.00578207, + -0.02188712, + -0.015734704, + -0.17306839, + 0.032910753, + 0.010896849, + -0.01632192, + 0.015187526, + 0.013499281, + 0.011824383, + -0.021633549, + 0.012358215, + 0.009328717, + 0.025263608, + 0.031202491, + -0.018777547, + -0.014733768, + 0.01151743, + -0.012358215, + -0.0040137507, + 0.0055451817, + 0.030161519, + 0.010489803, + 0.02166024, + -0.02057923, + 0.0009500545, + 0.0071600243, + -0.029814528, + 0.033925034, + 0.011183784, + 0.025877515, + -0.016855752, + -0.009015091, + -0.02751905, + -0.026344618, + 0.0120912995, + 0.032056622, + -0.0010001012, + 0.008601371, + 0.00053299806, + -0.024102524, + -0.012658495, + 0.022567756, + 0.003750171, + 0.020138819, + 0.00028568364, + -0.008654755, + 0.014653694, + 0.017629808, + 0.0013787885, + 0.0023021514, + -0.011791019, + -0.017789958, + 0.0256106, + -0.013919674, + 0.020298969, + 0.0006706267, + 0.0032380258, + 0.020032052, + 0.0141332075, + -0.0009216946, + 0.015948236, + -0.0214734, + -0.019551603, + -0.008601371, + 0.018403865, + -0.016415339, + -0.020672651, + 0.0063792947, + -0.016522106, + -0.0026257872, + -0.043267097, + 0.026998563, + -0.010029372, + -0.013225692, + 0.0026357963, + -0.012978795, + 0.0013103912, + -0.019338071, + -0.00022375076, + 0.030161519, + 0.0041805734, + -0.017629808, + -0.018684126, + 0.025490487, + -0.018363828, + -0.018564014, + 0.0025006703, + -0.008120922, + 0.0034231988, + 0.022954784, + -0.007053258, + -0.021913812, + 0.027572433, + -0.025410412, + 0.007954099, + -0.010756719, + 0.026264545, + 0.006576145, + -0.0031846426, + 0.021967195, + -0.004017087, + -0.010583223, + -0.00066520495, + -0.011550794, + -0.014280011, + 0.012838664, + 0.026704956, + -0.0019551604, + 0.008227688, + 0.0010217882, + 0.012298159, + -0.005361677, + -0.028426563, + 0.00093587453, + 0.015227563, + 0.021046335, + -0.026224507, + -0.00464434, + 0.016188461, + 0.0017583098, + 0.019578295, + -0.023341812, + 0.05207533, + -0.008314436, + 0.016628873, + 0.009775802, + 0.00029152242, + -0.01616177, + -0.06897112, + -0.021713624, + 0.002854334, + 0.005641939, + -0.011684252, + 0.029013779, + 0.007954099, + 0.01867078, + 0.008441222, + 0.02681172, + -0.0026891797, + -0.024489552, + -0.0020902867, + -0.0011427345, + 0.026838413, + -0.001641534, + 0.011010289, + -0.02853333, + 0.0060990327, + 0.026931833, + -0.000014557875, + -0.0046543493, + 0.008868287, + -0.011604177, + -0.015054068, + -0.0009208605, + -0.02554387, + 0.022420952, + 0.022848018, + 0.0031112407, + 0.001441347, + -0.0032430305, + 0.0025540534, + -0.028319798, + 0.0074002487, + 0.019271342, + -0.038729526, + -0.0016440363, + 0.020258931, + -0.024449514, + -0.0020102118, + -0.011584158, + 0.017216088, + -0.02137998, + -0.010196195, + 0.005962238, + -0.01800349, + -0.009622325, + 0.01593489, + -0.025637291, + -0.026357964, + -0.023195008, + 0.00068063603, + 0.01022956, + 0.008521296, + -0.017456312, + -0.018483939, + 0.0012545056, + -0.009635671, + -0.003166292, + 0.014560273, + 0.010850139, + -0.013879637, + 0.011303897, + 0.022594448, + 0.0028960395, + -0.021206483, + -0.02710533, + 0.009528904, + -0.0049713124, + 0.0068597435, + 0.010963579, + -0.007473651, + 0.0005559362, + -0.009008418, + -0.03680773, + -0.01800349, + -0.01119713, + 0.012725225, + -0.016775677, + 0.0028293105, + -0.03477917, + -0.0007181711, + -0.0019551604, + 0.025156843, + 0.015294292, + -0.0060623316, + 0.010302961, + -0.0016673915, + -0.034058493, + -0.006065668, + 0.036220513, + 0.008541315, + -0.03186978, + -0.014693731, + 0.032296848, + 0.0152676, + -0.014933956, + 0.005805425, + 0.014480198, + 0.00052590814, + -0.01816364, + -0.08295752, + 0.012698533, + 0.010356344, + -0.0037001243, + 0.014693731, + -0.0086681, + 0.015601246, + -0.018817585, + -0.0021837072, + -0.0061757714, + -0.017950106, + -0.00036054527, + -0.0054050507, + 0.0076938565, + -0.028960396, + -0.018523976, + 0.025050076, + -0.0014563609, + 0.015120797, + 0.012618458, + 0.0058821635, + 0.00526492, + 0.033097595, + -0.001323737, + -0.009755783, + 0.008354474, + -0.014266665, + 0.031202491, + -0.021193137, + -0.007867352, + -0.00056761375, + -0.029067162, + -0.013639413, + 0.016348612, + -0.0053082937, + -0.01896439, + -0.01068999, + 0.0024222636, + 0.0003165458, + 0.02602432, + -0.017029246, + -0.009615652, + 0.029654378, + -0.01476046, + -0.010082755, + 0.0061390703, + -0.0007736396, + -0.004941284, + 0.01616177, + 0.016762331, + -0.00049963355, + 0.01717605, + 0.015347675, + -0.0141332075, + 0.017042592, + -0.054504268, + 0.009055128, + 0.010649952, + -0.018203678, + 0.013178982, + 0.019645024, + 0.010790084, + 0.0025173523, + 0.011984533, + -0.0012294822, + -0.0143200485, + -0.0038502647, + -0.0014229964, + 0.007053258, + -0.02968107, + -0.04118515, + 0.014360086, + 0.015067413, + 0.020152165, + 0.020138819, + 0.0033531333, + 0.009842531, + -0.024409477, + -0.030081443, + 0.03248369, + -0.0012670173, + 0.0070866225, + -0.026785031, + 0.019137884, + 0.004814499, + -0.007046585, + -0.014907264, + -0.006913127, + -0.0058855, + 0.032777295, + -0.0077005294, + 0.0027792638, + 0.01581478, + 0.0042339563, + 0.023008168, + -0.002046913, + -0.008721483, + -0.027625816, + 0.025917552, + 0.01823037, + 0.016642218, + -0.0007899048, + -0.002382226, + -0.024649702, + -0.0068664164, + 0.00015358102, + -0.03931674, + -0.0052849385, + 0.01533433, + 0.0031079042, + 0.013352478, + 0.019965325, + -0.0037835357, + 0.03400511, + 0.008868287, + -0.0012895383, + -0.011343934, + -0.037741937, + -0.020685997, + 0.028907012, + 0.023275083, + 0.007653819, + 0.021913812, + -0.006676239, + -0.006906454, + 0.0069264728, + 0.008120922, + -0.017002555, + -0.00598893, + -0.007813969, + 0.013332459, + -0.0058888365, + -0.02738559, + 0.004200592, + -0.00804752, + -0.023848953, + 0.00183338, + 0.005975584, + -0.012444963, + 0.03632728, + 0.016989209, + 0.023421887, + -0.0036467412, + 0.0042172745, + 0.02039239, + 0.008060866, + 0.013652759, + -0.016855752, + -0.015921544, + 0.00862139, + -0.002714203, + -0.000095245254, + -0.01119713, + -0.020312315, + -0.011630869, + 0.006072341, + 0.024129216, + -0.012885374, + -0.0032380258, + 0.042679884, + 0.025076767, + 0.014773806, + 0.0105164945, + -0.006786342, + -0.008694792, + 0.023208354, + 0.0077605853, + 0.0095022125, + -0.008881633, + 0.022594448, + 0.012938757, + -0.017296163, + -0.008834923, + 0.014533581, + -0.010676644, + 0.0013871295, + -0.009942625, + 0.012771935, + 0.012605113, + -0.014853881, + 0.0077472394, + -0.016108386, + -0.040838163, + 0.0040270966, + 0.0019551604, + -0.0047677886, + 0.0013337464, + -0.013759525 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + -0.0010213737, + 0.008644082, + 0.0023587057, + 0.009380755, + -0.0029162795, + 0.0086643575, + -0.018856129, + 0.0043659713, + -0.0068497085, + -0.04287573, + -0.0075086593, + -0.010408043, + 0.021775788, + -0.019937484, + -0.0062008956, + -0.013003294, + 0.023168033, + -0.006413787, + 0.010455352, + -0.025371293, + -0.013476388, + 0.023438372, + -0.016044606, + -0.009150967, + 0.0061704824, + 0.005903523, + 0.007907409, + -0.021383796, + 0.013523697, + -0.0016980654, + 0.0190724, + -0.0030886205, + 0.0021998817, + -0.004203768, + 0.0023468784, + -0.013625074, + -0.015490412, + -0.005937315, + -0.0011193715, + -0.011164991, + 0.02591197, + -0.02397905, + -0.010833826, + -0.008637324, + -0.0030210358, + 0.0026172171, + -0.016977275, + 0.017409816, + -0.024695447, + 0.010536454, + 0.0074951425, + 0.0034941286, + -0.03752302, + -0.012422066, + -0.019829348, + -0.00043676607, + -0.028196333, + 0.0045011407, + -0.006494889, + -0.014706429, + 0.011678635, + 0.000102855454, + -0.0281693, + 0.016409563, + -0.0037779843, + 0.00011837881, + -0.008157472, + 0.011901665, + -0.04260539, + -0.021140492, + 0.022843625, + 0.01858579, + -0.011219059, + -0.021478415, + 0.018639859, + -0.006626679, + -0.024560276, + 0.007522176, + 0.00737349, + 0.0059001436, + 0.016842104, + -0.018639859, + 0.01726113, + 0.004882994, + 0.024695447, + 0.0069071557, + -0.010921686, + 0.022613838, + 0.008191264, + -0.026425615, + 0.03173777, + 0.0031545155, + 0.011746219, + -0.0048221676, + -0.03033201, + -0.011556982, + -0.015517445, + 0.019194052, + -0.0077722394, + -0.010556729, + -0.01770719, + 0.011151474, + -0.004264594, + -0.015612064, + -0.016788037, + 0.00671116, + 0.008704908, + 0.0002832221, + 0.010293148, + 0.005704148, + 0.0093537215, + 0.024763031, + -0.016450115, + -0.052526824, + -0.02185689, + -0.016869139, + 0.03522514, + 0.0117259445, + -0.013260117, + -0.03381938, + 0.0075356932, + 0.036144294, + -0.007893892, + -0.0050046463, + 0.031818874, + 0.012307173, + -0.0087387, + -0.01046211, + -0.004720791, + -0.012090902, + 0.005271606, + 0.014760497, + 0.010867618, + 0.020762017, + -0.009664611, + 0.024735996, + -0.022938244, + 0.022897694, + -0.034278955, + -0.018707443, + 0.02203261, + 0.019045366, + -0.025155023, + 0.011935457, + 0.010313424, + 0.02662837, + 0.024465658, + 0.022438118, + 0.00737349, + 0.0055216695, + 0.018072147, + -0.016612317, + 0.020032102, + -0.014314438, + 0.0032085832, + 0.016990792, + 0.026141759, + 0.018964265, + -0.005197263, + 0.003558334, + 0.003761088, + 0.009286136, + 0.015598547, + -0.008927938, + -0.011219059, + 0.019613078, + 0.006728056, + 0.013834586, + 0.0060150377, + -0.021613585, + -0.013226325, + 0.020964772, + -0.0014032272, + 0.009772747, + 0.008252091, + 0.010313424, + 0.03222438, + 0.01761257, + -0.021208076, + 0.0067922617, + -0.0031359298, + -0.0132466, + 0.006227929, + 0.008434569, + -0.013239841, + -0.002096815, + 0.009941708, + 0.008015544, + 0.006643575, + 0.002061333, + 0.008488637, + 0.0397398, + 0.018031595, + 0.0026510095, + -0.67217034, + -0.051850975, + 0.0032254795, + 0.0016161189, + 0.020910705, + 0.0067719864, + 0.0150713865, + 0.006079243, + -0.0040415647, + -0.001850131, + -0.0314404, + 0.0071504605, + -0.007988511, + -0.0019126468, + -0.0027067668, + -0.0028317985, + -0.0006935879, + -0.012030075, + 0.014976768, + 0.012178762, + -0.006379995, + 0.0045856214, + -0.005704148, + 0.0048593394, + 0.021154009, + -0.015341725, + -0.0040753568, + -0.019275155, + -0.008718425, + 0.032602854, + -0.031007856, + 0.0381448, + 0.009475374, + 0.005268227, + 0.047011912, + -0.009948467, + -0.022776041, + 0.026236378, + 0.011279885, + 0.03425192, + -0.022654388, + -0.016585283, + 0.0058021457, + -0.025046887, + -0.011928698, + 0.012070626, + 0.017855875, + -0.04498437, + -0.0045450707, + -0.018991299, + 0.020248374, + -0.013219566, + -0.011894906, + -0.01942384, + 0.004626172, + 0.0143279545, + 0.02207316, + -0.014963251, + 0.006809158, + -0.00710991, + -0.021559516, + -0.0066570924, + -0.029548027, + -0.02287066, + -0.014638844, + -0.0017403058, + -0.029277688, + -0.0031883079, + 0.006278618, + -0.008427811, + 0.010259356, + 0.023789812, + -0.013571006, + 0.010293148, + 0.019923966, + 0.017274648, + 0.008988764, + 0.0015966883, + -0.007974993, + -0.01695024, + -0.007332939, + -0.003612402, + -0.0157202, + 0.0077114133, + 0.028764045, + -0.035684716, + -0.020910705, + 0.005548703, + 0.023032863, + -0.027790826, + 0.005656839, + 0.012253105, + -0.005224297, + 0.018004563, + -0.008157472, + 0.0095835095, + 0.0065861284, + -0.00096223707, + 0.014652361, + -0.011847597, + -0.017761257, + -0.011104165, + 0.0052918815, + -0.015544479, + -0.024965785, + -0.0029754161, + -0.0053662243, + 0.0087387, + 0.025939004, + -0.012895159, + 0.007718172, + -0.011577258, + -0.030223874, + -0.008725184, + 0.0097254375, + -0.027980063, + 0.017936977, + 0.0012925572, + 0.016531216, + 0.003686745, + 0.0035110246, + -0.0069747404, + 0.031467434, + 0.0033268565, + 0.00020835093, + 0.014598293, + -0.0020495057, + -0.014963251, + -0.010773, + 0.00238405, + 0.00037657344, + 0.002578356, + -0.006565853, + -0.008535947, + 0.026587818, + -0.017639605, + -0.018788544, + -0.0031646532, + 0.030602349, + -0.042443186, + -0.041037425, + -0.0081507135, + 0.004230802, + 0.0074072825, + 0.0111244405, + -0.023816846, + -0.022127228, + 0.02697981, + -0.0029720368, + 0.032467686, + 0.002101884, + -0.0038523274, + -0.037712257, + 0.022329982, + -0.0035346793, + -0.0032660302, + -0.022248881, + -0.011164991, + 0.0025749768, + 0.012624821, + 0.012205795, + 0.010326941, + -0.040577848, + 0.0012410239, + 0.008840078, + -0.015206556, + 0.014152234, + 0.014963251, + 0.002318155, + -0.018423587, + -0.003717158, + -0.005788629, + -0.009651094, + 0.015422827, + 0.015084904, + -0.01125961, + 0.009995776, + -0.0045247953, + -0.0035786096, + 0.006839571, + 0.0065489565, + -0.023965532, + -0.012983019, + 0.006545577, + 0.026371546, + -0.007055842, + 0.0077114133, + 0.014179269, + -0.0062448257, + 0.002874039, + -0.027358284, + 0.02437104, + -0.0007628622, + 0.0025935625, + 0.015949987, + -0.023384303, + 0.005359466, + 0.0055824956, + -0.0035313002, + 0.023478922, + 0.021924473, + -0.010739207, + 0.010489144, + -0.009319929, + 0.0051905042, + -0.02193799, + -0.0058021457, + -0.007359973, + 0.02176227, + 0.0281693, + 0.020342993, + -0.025966039, + -0.010658106, + 0.0064475797, + 0.022478668, + 0.03738785, + 0.015652616, + 0.009394272, + -0.005592633, + -0.002441497, + 0.0030869308, + -0.030304976, + 0.015220073, + -0.018558756, + -0.003541438, + 0.0019278533, + 0.006177241, + 0.038334038, + 0.015449861, + -0.0040145307, + -0.022059644, + -0.011333953, + -0.0077992734, + 0.008988764, + 0.012895159, + -0.019910451, + 0.0059542116, + -0.013787277, + 0.035792854, + 0.007927684, + 0.0147875305, + -0.0036968826, + 0.03676607, + -0.010705415, + -0.0039706007, + -0.009401031, + 0.040172342, + 0.015179521, + -0.0058798683, + 0.018328968, + -0.025438879, + -0.015990539, + -0.017964011, + 0.0067652278, + 0.014341472, + -0.035522513, + 0.009319929, + 0.0031714116, + 0.019369774, + 0.04211878, + 0.02397905, + -0.0010357354, + 0.0062718596, + 0.009968742, + 0.008137197, + -0.00023802483, + 0.032467686, + 0.0049776128, + -0.008143956, + -0.0061130356, + -0.02022134, + -0.0086643575, + -0.01593647, + -0.014706429, + -0.004095632, + -0.012604545, + -0.0014632086, + -0.018639859, + 0.026141759, + 0.0043423166, + -0.008731943, + -0.037279718, + 0.027561037, + -0.009529442, + -0.0007624398, + -0.013064121, + -0.009745712, + -0.009455099, + -0.026141759, + 0.021356763, + 0.009211794, + 0.016260877, + -0.008285883, + 0.00073878514, + -0.009042832, + 0.007130185, + 0.019315705, + -0.037144545, + -0.016923208, + -0.019234603, + 0.016801555, + -0.022708457, + 0.0029382445, + -0.0014311059, + 0.012435583, + -0.006596266, + 0.01774774, + -0.025709217, + -0.012834333, + 0.000044669257, + 0.022911211, + -0.012124694, + -0.0027135254, + 0.009482132, + 0.011252851, + 0.0013778829, + -0.00489989, + 0.0038219143, + 0.012401791, + -0.013908929, + -0.0052479515, + -0.021505449, + -0.024046633, + -0.00043148603, + 0.084778234, + -0.0034180959, + 0.00657937, + 0.002101884, + 0.011043339, + 0.008995523, + -0.004305145, + 0.0067517105, + 0.0062448257, + 0.016409563, + -0.011502914, + -0.018991299, + 0.012023317, + 0.001227507, + 0.0063833743, + -0.012124694, + -0.013537214, + -0.019194052, + 0.026033623, + -0.0063056517, + 0.00865084, + 0.012340965, + -0.001894061, + 0.018518206, + -0.0064002704, + -0.004115908, + 0.013097913, + 0.010049844, + 0.0013128327, + -0.025411844, + 0.012793782, + 0.0005677114, + -0.015409309, + -0.0016718763, + -0.020113204, + -0.0016271014, + 0.018085664, + 0.020586297, + -0.008157472, + -0.012199037, + 0.010212047, + 0.0063124103, + 0.0051195403, + -0.005082369, + -0.0018687168, + -0.0077384473, + 0.0021255387, + 0.012489651, + -0.027304215, + 0.004798513, + 0.03541438, + -0.0046025175, + -0.037279718, + -0.014909183, + -0.00094618567, + 0.01333446, + -0.012003041, + -0.0038557067, + 0.0017943736, + 0.014841598, + -0.00017962744, + -0.021559516, + 0.01457126, + -0.009421306, + -0.03400862, + -0.044524796, + -0.0015468446, + -0.014855116, + -0.03827997, + -0.021248627, + 0.016004056, + -0.013179015, + -0.029602095, + 0.009752471, + 0.017369267, + -0.004538312, + 0.026168793, + -0.010056602, + -0.0101850135, + 0.02662837, + -0.01607164, + -0.03417082, + -0.02392498, + -0.027817858, + 0.00040402974, + 0.009968742, + 0.020559262, + -0.017098928, + 0.002115401, + -0.016720453, + 0.040415645, + -0.011827321, + 0.014733463, + 0.0009689955, + -0.014368505, + -0.020829601, + 0.013239841, + 0.020599814, + -0.02949396, + -0.004896511, + 0.013354735, + -0.021708203, + 0.0019041987, + -0.013800794, + -0.0059069023, + 0.007846583, + 0.01690969, + 0.000936048, + -0.0072923885, + 0.00485596, + 0.029034384, + -0.036495734, + 0.00984709, + 0.013030329, + -0.020424094, + 0.03354904, + 0.013990032, + 0.0348737, + 0.007691138, + -0.00083382614, + 0.008421052, + -0.011002788, + 0.022154262, + 0.015963504, + 0.00047478246, + 0.006802399, + -0.0013381769, + -0.00034827236, + 0.006423925, + -0.0026594577, + -0.011131199, + 0.013388528, + -0.019491425, + -0.022235364, + -0.022194812, + -0.0075694853, + -0.0083805015, + 0.010563487, + 0.0037847427, + -0.03611726, + -0.01461181, + -0.016004056, + 0.011543466, + -0.008576497, + -0.020464644, + -0.016896173, + 0.006140069, + 0.015868885, + -0.0076505872, + 0.01377376, + 0.02012672, + 0.024398074, + -0.01426037, + -0.0075289346, + -0.024492692, + -0.030304976, + -0.021018839, + -0.030791586, + 0.002321534, + 0.017869392, + 0.034900736, + 0.0057751117, + -0.0041902508, + -0.01642308, + -0.0014648982, + 0.011151474, + -0.014733463, + 0.02397905, + -0.006298893, + 0.0135304555, + 0.027871927, + 0.018991299, + -0.015517445, + -0.004967475, + -0.037063446, + 0.028250402, + 0.0006534595, + -0.011408296, + -0.0067483317, + -0.03346794, + -0.0020106446, + -0.0037374336, + -0.015125454, + 0.008583256, + -0.0038962576, + -0.00024013685, + 0.021600068, + -0.004291628, + 0.015747232, + -0.013935964, + 0.020059137, + -0.009198276, + -0.0097254375, + -0.010252598, + 0.0026391821, + 0.0025935625, + -0.026817605, + 0.0026459408, + 0.01337501, + -0.001041649, + 0.024425108, + -0.0143279545, + -0.005612909, + -0.01037425, + 0.006386753, + 0.028412605, + -0.009421306, + -0.013706176, + 0.00036094448, + -0.027817858, + -0.037333783, + -0.006292135, + 0.0106107965, + -0.01284785, + -0.014017065, + 0.0043997634, + -0.0048863734, + 0.018315451, + -0.011604291, + -0.0026915604, + 0.026344514, + -0.004176734, + 0.021748753, + -0.016801555, + 0.015963504, + 0.0100092925, + -0.014733463, + -0.0010450283, + -0.00079707697, + -0.016152741, + -0.018883163, + 0.009637577, + 0.019491425, + -0.011469122, + -0.02675002, + -0.0045856214, + 0.009002281, + -0.014422573, + -0.0040246686, + 0.04322717, + 0.019085918, + -0.0059846244, + -0.015287657, + 0.0037982597, + -0.010725691, + 0.020897187, + -0.0024347384, + -0.009914674, + -0.0074951425, + -0.013949481, + 0.0018822337, + -0.0016144293, + -0.009157726, + 0.013746726, + 0.018612824, + -0.015017319, + 0.005646701, + -0.014165752, + 0.018815579, + 0.0039266706, + -0.012949227, + 0.016058123, + 0.010401284, + 0.0079209255, + 0.020194305, + 0.018247867, + -0.0013145222, + 0.016531216, + 0.008306159, + 0.029710231, + -0.013537214, + -0.019045366, + -0.001580637, + 0.0036326773, + 0.015436344, + -0.005822421, + 0.004578863, + 0.0014370196, + -0.03757709, + -0.0011261299, + 0.015476895, + 0.0034518882, + 0.004420039, + 0.0047444454, + -0.024479175, + -0.022965278, + 0.0041091493, + 0.00016452649, + -0.01006336, + -0.0015400861, + -0.0075019007, + -0.007434316, + -0.004825547, + 0.019045366, + -0.01205035, + -0.014706429, + 0.021546, + 0.016693419, + -0.008495396, + 0.000274774, + 0.009630819, + 0.0057818703, + -0.0016085156, + 0.0047714794, + -0.014138717, + -0.006238067, + 0.014246853, + -0.009542959, + 0.00042916278, + -0.020464644, + 0.005400017, + 0.043416407, + 0.025817353, + 0.013456112, + 0.025749767, + -0.030169807, + -0.0017960632, + -0.030791586, + -0.026087692, + 0.018288417, + 0.024884684, + 0.02666892, + 0.004626172, + -0.016301427, + 0.021126974, + 0.02339782, + -0.019477908, + -0.006940948, + -0.022221847, + -0.04182141, + -0.01108389, + 0.0039942553, + -0.01841007, + -0.024384556, + -0.018802062, + -0.0140981665, + -0.005136437, + 0.007630312, + 0.00067120045, + 0.0045315535, + 0.0056872517, + 0.022681423, + -0.00035650926, + 0.010577004, + -0.031197093, + -0.0070085325, + 0.0064171664, + -0.019545494, + -0.036090225, + -0.019207569, + -0.016517699, + 0.014679395, + -0.0015721889, + -0.020694433, + -0.016450115, + 0.013618316, + -0.034143787, + -0.0062177917, + -0.027142012, + 0.01258427, + 0.019761764, + 0.0005677114, + 0.010955479, + -0.0077722394, + -0.008704908, + 0.011685393, + -0.01443609, + 0.0073802485, + 0.012151727, + -0.023641124, + 0.0256957, + 0.019180536, + -0.021464897, + -0.008258849, + 0.012523443, + 0.005704148, + -0.0072721126, + -0.007420799, + -0.01103658, + 0.00084692065, + 0.009820056, + -0.013091154, + -0.008745459, + 0.022667905, + 0.017950494, + -0.045633186, + 0.0010264425, + -0.0039773593, + -0.006940948, + -0.0042882487, + -0.01258427, + 0.009907916, + 0.005815663, + 0.010806792, + -0.02710146, + -0.0134425955, + -0.0033674072, + -0.010766242, + 0.013037087, + 0.0039874967, + 0.004220664, + 0.009617302, + 0.0071369433, + -0.0021508827, + -0.0138143115, + -0.002586804, + -0.030899722, + -0.01108389, + 0.012077385, + -0.00856298, + -0.012509926, + -0.014246853, + 0.010340458, + -0.037982598, + -0.015355242, + 0.0033606489, + -0.0014370196, + -0.035117008, + 0.020802569, + 0.013037087, + -0.023330236, + -0.0050012674, + 0.0038388106, + -0.009455099, + -0.0063056517, + -0.021478415, + 0.008968488, + -0.03133226, + -0.010441835, + -0.0039976346, + 0.0031156542, + -0.024087185, + -0.00856298, + -0.0029720368, + -0.011185266, + -0.013449354, + 0.21756864, + -0.00763707, + -0.0062887557, + 0.021708203, + -0.014909183, + 0.035171073, + 0.028601842, + -0.00057911634, + -0.0031122752, + 0.0024431867, + -0.015341725, + -0.011320436, + 0.007359973, + -0.0031511362, + 0.0016693419, + -0.03576582, + -0.022911211, + -0.027898962, + -0.028574808, + -0.02057278, + 0.032062177, + -0.009441582, + 0.014517192, + -0.007745206, + 0.026506716, + 0.0058697304, + -0.018018078, + 0.015963504, + 0.02039706, + 0.025601082, + 0.017517952, + 0.014517192, + -0.0041699754, + 0.015625581, + -0.0023722227, + 0.012854609, + 0.0024617724, + -0.0026037002, + 0.024776548, + 0.014814565, + 0.009178001, + -0.019045366, + -0.021140492, + -0.0015882403, + -0.017842358, + 0.018747993, + -0.009279378, + 0.0015890851, + -0.0298454, + 0.025790319, + -0.038712513, + -0.0055655995, + 0.020315958, + 0.031467434, + 0.014287404, + -0.00543043, + 0.020099688, + -0.009015798, + -0.0016668075, + -0.002608769, + -0.014354989, + 0.026479682, + -0.012550477, + 0.037766326, + -0.007170736, + -0.00026062346, + -0.014409056, + -0.0023384304, + 0.011685393, + -0.002529357, + 0.027479935, + 0.0027287318, + -0.00018659711, + -0.034143787, + -0.021532483, + -0.021518966, + 0.04206471, + 0.024289938, + 0.016747486, + 0.01682859, + 0.003832052, + 0.004737687, + 0.006940948, + 0.015368759, + -0.013577765, + -0.014314438, + -0.008225057, + 0.00068767427, + 0.01002281, + -0.015571513, + 0.011759737, + -0.005285123, + -0.0027912478, + -0.015787784, + 0.00012355327, + 0.010347216, + 0.0007434316, + 0.007954719, + -0.006467855, + 0.015044352, + -0.025574047, + 0.0073261806, + 0.005893385, + -0.0051330575, + -0.006961223, + 0.004071978, + -0.0019836107, + 0.0030092085, + -0.006900397, + 0.0013770381, + -0.0077384473, + -0.010928445, + -0.00042219312, + -0.0039976346, + 0.00008706809, + -0.005974487, + -0.005589254, + -0.020478161, + 0.024492692, + -0.033873446, + 0.020586297, + -0.014706429, + -0.014652361, + 0.014409056, + -0.014503675, + -0.015463377, + -0.006481372, + -0.019045366, + -0.018612824, + -0.036847174, + 0.026722988, + -0.025628116, + 0.020613331, + -0.0030058292, + 0.0028571428, + 0.0086643575, + -0.012604545, + 0.006025175, + -0.005014784, + -0.0082926415, + 0.010745966, + -0.012719439, + 0.02631748, + 0.005427051, + -0.001880544, + 0.003448509, + 0.018139731, + 0.015260624, + -0.010712174, + 0.015449861, + -0.0066030244, + -0.025925487, + -0.0037272957, + 0.015882403, + 0.023289684, + 0.00018469628, + -0.013483146, + -0.021708203, + 0.010299907, + 0.019139985, + -0.033062432, + -0.013800794, + 0.04790403, + 0.0032085832, + -0.019450875, + -0.014300921, + -0.1757202, + 0.015030836, + 0.024722481, + -0.026966292, + 0.025925487, + 0.028764045, + 0.00441328, + -0.017112443, + -0.0037779843, + 0.008394019, + 0.03452226, + 0.017896427, + -0.01695024, + -0.008914421, + -0.0024448761, + -0.0035448172, + -0.000100849036, + 0.017017825, + 0.017044859, + 0.0065185437, + 0.025803836, + -0.015706683, + 0.008218299, + -0.0038962576, + -0.02635803, + 0.03262989, + -0.010293148, + 0.0052378136, + 0.0043456955, + -0.0033217876, + -0.0095362, + 0.0011050097, + 0.013767002, + 0.02887218, + 0.01673397, + 0.019748246, + -0.00251584, + -0.011861114, + -0.014354989, + 0.018139731, + -0.009022556, + 0.0003429923, + 0.009860607, + -0.0033302356, + -0.011793529, + 0.018639859, + 0.0145577425, + -0.0044605895, + 0.0056061503, + -0.009637577, + 0.03284616, + -0.025668666, + 0.016666384, + 0.01854524, + 0.016166259, + 0.018626342, + 0.023168033, + 0.004582242, + 0.005143195, + -0.019329222, + -0.019045366, + 0.0078601, + 0.0034603362, + -0.005345949, + -0.017342232, + -0.02715553, + -0.009326687, + 0.021532483, + -0.016490664, + 0.008164231, + 0.0027354904, + -0.008860353, + 0.014354989, + -0.028115232, + 0.022830108, + -0.008975247, + 0.0056230463, + 0.02914252, + 0.012158486, + -0.0022133987, + -0.029061418, + 0.03395455, + -0.014449608, + -0.009117175, + 0.009428064, + 0.01337501, + 0.012753231, + 0.004132804, + -0.035468448, + -0.016544733, + 0.022329982, + -0.019194052, + 0.014530709, + -0.02697981, + -0.0038388106, + 0.01068514, + -0.017909944, + 0.03235955, + -0.014909183, + -0.0005427896, + -0.0040314267, + -0.015963504, + -0.021789305, + 0.020937737, + 0.010806792, + 0.016409563, + 0.0035617133, + 0.019937484, + 0.018247867, + -0.008576497, + -0.0068497085, + 0.0029281068, + 0.009651094, + 0.008319676, + -0.023843879, + 0.015612064, + 0.02573625, + -0.009373996, + 0.016842104, + -0.0056940103, + 0.032305483, + -0.0004671792, + 0.006927431, + 0.011185266, + -0.0074410746, + -0.028358538, + -0.07585706, + 0.0118678715, + -0.0029855538, + 0.008542705, + -0.010941962, + 0.04387598, + 0.016517699, + 0.03711751, + -0.0091239335, + 0.022897694, + -0.0053628455, + -0.009245586, + 0.00033665626, + -0.0074681086, + 0.03290023, + -0.010408043, + -0.0016921518, + -0.007346456, + -0.0029179691, + 0.022681423, + -0.0060217963, + -0.027033877, + -0.0016262566, + 0.0027321111, + -0.018396553, + 0.010421559, + -0.023735743, + 0.02962913, + 0.023127481, + 0.011665118, + -0.0046329307, + -0.007846583, + 0.020288924, + -0.025817353, + -0.039820902, + 0.0140981665, + -0.024830615, + 0.0025682184, + 0.026898708, + -0.029926501, + -0.0070220493, + 0.00010385866, + 0.00242798, + -0.007968235, + -0.015774267, + -0.005558841, + -0.014125201, + 0.01527414, + 0.0140981665, + -0.009009039, + -0.016679902, + -0.012104418, + 0.014882149, + -0.021600068, + 0.028493706, + 0.0030210358, + 0.010299907, + 0.016436597, + -0.046768606, + 0.002816592, + 0.00927262, + 0.012597786, + -0.015747232, + 0.013523697, + 0.031115992, + 0.0241007, + -0.022492185, + -0.029791333, + 0.023262652, + -0.008880628, + 0.00037087098, + 0.016341979, + -0.006106277, + -0.0062346878, + -0.01757202, + -0.021072907, + -0.016896173, + -0.011671877, + 0.016382528, + -0.018004563, + 0.0012942469, + -0.034900736, + 0.005568979, + 0.0059001436, + -0.0054676016, + 0.026939258, + 0.015368759, + -0.008238574, + 0.015517445, + -0.016666384, + -0.003585368, + 0.009907916, + 0.022478668, + -0.030413112, + -0.022140745, + 0.0314404, + 0.019613078, + 0.00095463375, + 0.010036327, + 0.0097795045, + -0.005041818, + -0.027520487, + -0.095267385, + 0.01872096, + 0.012530202, + -0.0006243136, + 0.0061434484, + -0.017544987, + 0.04038861, + -0.008556222, + 0.0122733805, + -0.011300161, + -0.057906564, + 0.006538819, + -0.013652108, + -0.014273887, + -0.024654895, + -0.027953029, + 0.03903692, + 0.012003041, + 0.006089381, + 0.0076573454, + 0.016869139, + 0.011009546, + 0.007312664, + -0.0008621272, + -0.026777055, + 0.010225564, + -0.0082994, + 0.024560276, + -0.009549717, + 0.0006733125, + -0.009029315, + -0.046173863, + 0.017680155, + 0.026303962, + -0.007332939, + -0.019491425, + -0.006873363, + 0.013449354, + 0.010779758, + 0.03682014, + -0.04509251, + 0.012111177, + 0.022248881, + -0.0052209175, + -0.004122666, + -0.01099603, + 0.019018332, + 0.008116921, + 0.026020106, + 0.009211794, + 0.0027963165, + 0.02406015, + 0.0051905042, + -0.0050350595, + -0.0035110246, + -0.03773929, + 0.023614092, + -0.009063107, + -0.004686998, + 0.007988511, + 0.014030582, + 0.004247698, + 0.01143533, + 0.012016558, + 0.025155023, + -0.011225818, + -0.014814565, + 0.0043152827, + 0.020545747, + -0.016815072, + -0.018856129, + 0.01218552, + -0.003818535, + 0.0134425955, + 0.009029315, + -0.0029940018, + 0.010766242, + -0.0063495818, + -0.028115232, + 0.021478415, + -0.00014330067, + -0.0018129593, + -0.031494465, + 0.01823435, + 0.026858157, + -0.012908677, + -0.024019599, + -0.02962913, + 0.000034927558, + 0.02269494, + -0.015220073, + 0.0045011407, + 0.010543212, + 0.010455352, + -0.005058714, + 0.013429078, + -0.010786517, + -0.019085918, + 0.03184591, + 0.02485765, + 0.0052918815, + -0.001196249, + -0.005663597, + -0.03208921, + -0.009279378, + 0.014463124, + -0.033630144, + -0.018707443, + 0.026479682, + 0.015787784, + 0.009259103, + 0.020153755, + 0.00041374503, + 0.019951, + 0.0064205457, + 0.010103911, + -0.007576244, + -0.03249472, + -0.02357354, + 0.018612824, + 0.0134425955, + 0.024438625, + 0.0031207232, + -0.014706429, + 0.0024178424, + -0.011678635, + 0.014368505, + -0.024006082, + 0.006450959, + -0.013949481, + 0.004071978, + 0.010097153, + -0.000086487285, + 0.0026374925, + -0.0042443187, + -0.0023519474, + 0.0017293233, + 0.010441835, + -0.024127735, + 0.034414124, + 0.005200642, + 0.014030582, + 0.0091239335, + -0.01509842, + 0.0265743, + -0.0047782375, + 0.008535947, + 0.004997888, + -0.04025344, + -0.0056433217, + -0.0014277266, + 0.0011117682, + -0.02843964, + -0.028277434, + -0.0074816253, + -0.011266368, + 0.019356256, + -0.005288502, + -0.013050604, + 0.038712513, + -0.00058840925, + 0.008319676, + 0.021424348, + -0.02339782, + 0.0021069527, + 0.020640366, + 0.005751457, + 0.008657599, + -0.038712513, + 0.00944834, + 0.018802062, + -0.018666891, + -0.013821069, + -0.008867112, + -0.0101512205, + -0.016652867, + -0.004247698, + -0.0066030244, + 0.01319929, + -0.009772747, + 0.020451128, + -0.024654895, + -0.0011007857, + 0.039793868, + -0.0051330575, + -0.0133006675, + 0.010570246, + -0.022586804 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.019221356, + 0.0036138783, + -0.007965014, + -0.0067472225, + -0.024066191, + 0.013718256, + -0.00505548, + -0.01043351, + 0.0065530343, + -0.04420912, + 0.015508738, + 0.0044893716, + 0.012171331, + -0.031412434, + -0.014574001, + -0.018997546, + 0.02109083, + -0.020788029, + -0.0024273545, + -0.024145182, + 0.0010812012, + -0.012987581, + -0.014258034, + -0.014073719, + -0.020603715, + 0.013757751, + 0.0028387704, + -0.028753042, + 0.009880567, + -0.0032534779, + 0.02904268, + -0.0067735533, + -0.009307876, + -0.030490864, + -0.008037423, + -0.019642645, + -0.035230376, + -0.00874835, + -0.020630045, + -0.028489737, + 0.009742331, + -0.017575692, + -0.0019023876, + 0.0013996373, + -0.007563472, + 0.008491627, + -0.006510247, + -0.010644155, + -0.004374175, + 0.00862328, + 0.011348499, + 0.012809849, + -0.034809086, + -0.009900315, + 0.0029523212, + 0.010736313, + -0.019274017, + -0.006329224, + -0.0033538633, + -0.011809285, + 0.0025985036, + 0.0050521884, + -0.032544654, + 0.013810413, + -0.009413199, + -0.0071750954, + -0.029569292, + -0.005197007, + -0.020235086, + -0.004663812, + 0.026054153, + 0.030543525, + -0.0048382524, + -0.030227557, + 0.010525667, + 0.0027087631, + -0.01702275, + 0.005789446, + -0.0062436494, + -0.0027169914, + 0.029937921, + -0.025567036, + 0.018233957, + 0.002512929, + 0.035572674, + 0.016956922, + -0.011282673, + 0.012842762, + -0.0035348863, + -0.015324424, + 0.018984381, + 0.012934919, + 0.0049139527, + 0.015495572, + -0.023486918, + -0.030675178, + 0.0009191034, + 0.04434077, + -0.0020291037, + -0.036020294, + -0.006832797, + 0.012625535, + 0.0066682305, + -0.0084258, + -0.008807594, + 0.02128831, + 0.01811547, + 0.0011494963, + 0.015008456, + -0.0037027441, + 0.0133759575, + 0.031149128, + -0.0011708899, + -0.04426178, + -0.018444603, + -0.019432, + 0.03243933, + -0.009465859, + -0.014429183, + -0.026804576, + 0.016127508, + 0.027673487, + 0.01209234, + -0.0064641684, + 0.023895042, + -0.005187133, + -0.014442348, + -0.0035381778, + 0.021696435, + -0.01092721, + 0.028805703, + -0.000857391, + 0.0066254437, + -0.0017197189, + -0.021577947, + 0.018273454, + -0.017615188, + -0.0025902751, + -0.0048119216, + -0.013744586, + 0.014416017, + 0.015087448, + -0.013836743, + 0.025145747, + -0.0012210828, + 0.018839562, + 0.019589985, + -0.00042129, + 0.01957682, + -0.0073989057, + 0.013468115, + -0.030464534, + 0.009860819, + 0.005628171, + 0.0079321, + -0.00002769344, + 0.021617442, + 0.028042115, + -0.002312158, + 0.014284364, + -0.004792174, + 0.003060935, + 0.0158642, + -0.024158347, + -0.0265676, + 0.009274962, + 0.018984381, + 0.00787944, + 0.0052200463, + -0.0061909882, + -0.013468115, + 0.01179612, + -0.025619699, + 0.014968961, + -0.0010984808, + 0.020156093, + -0.00038343974, + 0.0022232921, + -0.016180169, + -0.019050207, + -0.0072475043, + -0.018997546, + 0.01516644, + 0.020932848, + 0.0061547835, + -0.028621389, + 0.0019451749, + 0.009090648, + 0.008978743, + -0.014218537, + 0.013784082, + 0.04183936, + 0.014942629, + 0.014600332, + -0.6736427, + -0.040312186, + 0.000431164, + -0.013277218, + 0.028753042, + 0.015126944, + 0.022446858, + -0.0015321132, + -0.009228884, + 0.01224374, + -0.016193334, + 0.014310694, + 0.0010392369, + -0.0006257637, + 0.0054274, + -0.024053026, + 0.0031086593, + -0.0096830875, + 0.016469806, + -0.0012836179, + -0.0061909882, + 0.013290383, + -0.017430874, + 0.008307312, + 0.026620261, + -0.024105687, + 0.002277599, + -0.02446115, + -0.01273744, + 0.04162872, + -0.012941502, + 0.048658993, + 0.03451945, + -0.004943575, + 0.042787265, + -0.014863637, + -0.0048777484, + 0.03754747, + 0.022762826, + 0.05397778, + -0.005786155, + -0.012691361, + 0.006177823, + -0.009005073, + -0.0030197934, + -0.01288884, + 0.032228686, + -0.032886952, + 0.014679323, + -0.015535069, + 0.0120660085, + -0.02446115, + -0.0158642, + 0.010861383, + -0.0043215137, + 0.0062173186, + 0.019945448, + -0.011223429, + -0.0026445822, + 0.0011503191, + 0.0012432992, + 0.014955794, + -0.002351654, + -0.0156008955, + -0.0024849528, + 0.0016341445, + -0.038548034, + -0.01729922, + 0.0031432183, + -0.015679887, + 0.016588293, + 0.028147439, + -0.007517393, + 0.0014317278, + 0.011032532, + 0.027726147, + 0.009623843, + -0.008320478, + -0.008537705, + -0.02218355, + -0.003992381, + 0.018181296, + -0.0136919245, + -0.017259724, + 0.00014378989, + -0.038416382, + -0.032965943, + 0.025619699, + 0.009900315, + -0.0071750954, + 0.018971216, + 0.014613497, + 0.0022035441, + 0.022565346, + -0.0030428327, + 0.0129809985, + -0.003179423, + 0.004854709, + 0.0069578676, + -0.03157042, + -0.010229448, + -0.0031942339, + -0.005940847, + -0.011453822, + 0.0127440225, + -0.014613497, + -0.030490864, + -0.0042392304, + 0.038442712, + -0.014889969, + 0.028963687, + -0.010604659, + -0.023855546, + -0.0016423727, + 0.013639264, + -0.02047206, + 0.02572502, + -0.010630989, + 0.03451945, + -0.019668976, + 0.013277218, + 0.0069578676, + 0.0246323, + 0.0053319517, + -0.0029572584, + 0.014982126, + 0.0022232921, + -0.00054841756, + -0.0065267035, + -0.012987581, + 0.00051015586, + 0.018233957, + -0.016733112, + -0.012711109, + 0.012474134, + -0.0064115073, + 0.0027350937, + 0.0014638181, + 0.023565909, + -0.013106069, + -0.048237704, + -0.020985508, + -0.006230484, + 0.0039594676, + -0.0100451335, + -0.021920245, + -0.0016917427, + 0.0023993782, + -0.010703399, + 0.008438965, + -0.004344553, + -0.0032370212, + -0.013560272, + 0.013955231, + -0.016680451, + -0.0035546343, + 0.011677632, + -0.009847654, + -0.020564217, + 0.00579932, + 0.009873984, + 0.014468678, + -0.030701509, + -0.00308562, + 0.003531595, + -0.010005637, + 0.005644628, + 0.003531595, + 0.02215722, + -0.015653556, + -0.023631737, + -0.027647156, + -0.017154401, + 0.02954296, + -0.0027844636, + -0.008735185, + 0.005206881, + -0.0034460204, + 0.016746277, + -0.0069578676, + -0.0033193044, + -0.0032567692, + -0.03615195, + 0.009873984, + 0.027594496, + -0.012869093, + 0.013836743, + 0.014982126, + -0.004713182, + 0.0073594097, + -0.017694179, + 0.0340455, + 0.01095354, + 0.0028683925, + 0.010933792, + -0.013744586, + 0.017351883, + 0.011901442, + -0.0020373322, + 0.01980063, + 0.022065064, + -0.0078070303, + 0.006520121, + -0.033360902, + 0.026027823, + -0.022012403, + 0.0010589848, + -0.008195407, + 0.009821323, + -0.009834488, + 0.0116249705, + -0.012632118, + -0.01452134, + -0.0033176588, + -0.005197007, + 0.02091968, + 0.0053286604, + 0.009992472, + 0.0051015588, + 0.009511938, + 0.01918186, + -0.029569292, + 0.018892223, + -0.022828652, + -0.004433419, + -0.0027449676, + 0.014402851, + 0.029727275, + 0.0025688815, + 0.0005064531, + -0.036494248, + -0.01578521, + -0.006990781, + -0.002958904, + 0.0004784768, + -0.011434074, + 0.0011700671, + -0.023500083, + 0.01727289, + 0.004453167, + 0.02322361, + -0.0053681564, + 0.019458331, + -0.0119936, + 0.009103813, + -0.01107861, + 0.035651665, + -0.00025980923, + -0.017825833, + 0.028674051, + -0.01937934, + -0.018892223, + -0.008188824, + 0.008616697, + 0.0037850274, + -0.01105228, + 0.004301766, + 0.0143238595, + -0.0011338625, + 0.036072955, + 0.016311822, + 0.0018233957, + 0.0014885032, + -0.0079781795, + 0.0073396615, + -0.007293583, + 0.017786337, + -0.009228884, + 0.003521721, + -0.005177259, + -0.012829597, + 0.0031958795, + -0.007984762, + -0.0055590533, + 0.0055623446, + -0.009228884, + -0.01606168, + -0.0040285857, + 0.013389123, + -0.000023720704, + 0.0019534032, + -0.04347186, + 0.012039678, + -0.009097231, + -0.008702272, + -0.014495009, + -0.022736495, + -0.0049304096, + -0.018523594, + 0.030569855, + 0.010170204, + 0.009841071, + -0.007451567, + -0.0072540874, + -0.012072591, + -0.010163621, + 0.018826397, + -0.028937357, + -0.019023877, + 0.0033867767, + 0.008346808, + -0.007945266, + 0.015324424, + -0.02044573, + 0.03625727, + -0.009037987, + -0.0035447604, + -0.018944884, + -0.0015938256, + -0.003943011, + 0.01030844, + -0.0061514922, + -0.01338254, + 0.016509302, + -0.004170113, + -0.0028058572, + -0.025145747, + 0.0059210993, + 0.013310131, + 0.0017081993, + -0.0181418, + -0.01606168, + -0.023855546, + -0.021275144, + 0.075937524, + -0.008853673, + 0.018523594, + 0.011822451, + 0.014797811, + 0.0104400925, + -0.0120660085, + -0.0158642, + -0.003531595, + -0.011124689, + 0.0035941303, + 0.0005315495, + 0.0029572584, + 0.00066978525, + 0.0017213646, + -0.0223547, + -0.0074054883, + -0.016272327, + 0.007234339, + -0.015113778, + 0.013547107, + 0.006753805, + -0.008629862, + 0.038100414, + 0.008234903, + 0.017430874, + 0.008511375, + 0.035704326, + 0.02577768, + -0.0127769355, + -0.0035447604, + 0.03675755, + -0.020063937, + 0.008991908, + -0.0012013348, + -0.0007475429, + 0.032623645, + 0.013955231, + -0.018813232, + 0.0032386668, + 0.005424109, + 0.017983817, + 0.02039307, + -0.009314459, + 0.014863637, + -0.014863637, + 0.00021023359, + 0.010512502, + -0.0061416184, + -0.000029621953, + 0.036915537, + 0.022762826, + -0.026909899, + -0.0143238595, + -0.016088013, + 0.034782756, + 0.009360537, + -0.0057137455, + 0.01105228, + 0.0040252944, + -0.0022446858, + -0.02292081, + 0.0073659923, + -0.0129020065, + -0.028884696, + -0.033913843, + -0.0063983416, + -0.019708473, + -0.026778245, + 0.000012953176, + 0.0053615733, + -0.017615188, + -0.02215722, + 0.009933229, + 0.022473188, + -0.0034558945, + 0.020287747, + -0.032807957, + -0.0036731223, + 0.021893915, + 0.009426364, + -0.03117546, + -0.011894859, + -0.0052233376, + -0.0068525453, + 0.018918553, + 0.025409052, + -0.02091968, + -0.018497264, + -0.0029128254, + 0.0265676, + 0.0075766374, + 0.008169076, + -0.0016563609, + -0.023355264, + 0.0060428786, + 0.018273454, + 0.026449112, + -0.013422036, + -0.016733112, + 0.025330061, + 0.00009375143, + 0.007392323, + -0.0031168878, + 0.01682527, + -0.0012646929, + 0.015614061, + 0.0040779556, + -0.008307312, + 0.00032584148, + 0.04834303, + -0.021670105, + 0.010920627, + -0.00078292465, + -0.022565346, + 0.020748531, + 0.016193334, + 0.03375586, + -0.0074384017, + -0.010473006, + 0.003551343, + -0.022710163, + 0.025119416, + 0.023210445, + 0.006971033, + -0.03154409, + 0.008195407, + -0.009827905, + -0.007155347, + -0.016640956, + -0.019524159, + 0.015311258, + -0.00916964, + -0.020458896, + -0.046947505, + -0.0056117144, + -0.02342109, + 0.0168516, + -0.01273744, + -0.02064321, + -0.0018579547, + -0.00014049857, + 0.004779008, + 0.006088957, + -0.010301857, + -0.016719947, + 0.0117500415, + 0.0037586966, + -0.00025919208, + 0.0028058572, + 0.014639827, + 0.020063937, + -0.0021130326, + 0.008906334, + -0.0034756425, + -0.035388358, + -0.020880185, + -0.011256342, + 0.009577765, + 0.00864961, + 0.020735366, + 0.02544855, + 0.018049642, + -0.010986453, + -0.01244122, + 0.0024635592, + -0.021235649, + -0.00031411613, + -0.016311822, + 0.00914331, + 0.01625916, + 0.027857801, + -0.022762826, + -0.007997927, + -0.008366556, + 0.024987763, + -0.011190516, + -0.014481843, + -0.011651302, + -0.03907465, + -0.0026248342, + -0.0064049247, + 0.0016004083, + -0.0037652794, + 0.006289728, + -0.002081765, + 0.022091394, + -0.014402851, + -0.009742331, + -0.013448367, + 0.019142365, + 0.003380194, + 0.019484662, + 0.008491627, + -0.0032633517, + -0.010038551, + -0.023763388, + 0.004351136, + -0.0047987564, + 0.0002133192, + 0.008109832, + -0.021051334, + 0.00520359, + -0.0019484663, + 0.0052990383, + 0.03446679, + 0.008188824, + -0.013797248, + 0.008873421, + -0.012566291, + -0.031149128, + -0.017088575, + -0.015324424, + -0.025659194, + 0.007813613, + 0.03117546, + -0.0018694743, + 0.040233195, + -0.023263106, + -0.016088013, + 0.014942629, + -0.008208572, + 0.022460023, + 0.006911789, + 0.04581529, + 0.010604659, + -0.0048876223, + -0.021340972, + -0.011987017, + -0.015442912, + -0.0077280384, + -0.006148201, + 0.0102097, + 0.0019369465, + -0.03615195, + 0.008465296, + 0.02485611, + -0.010288692, + -0.008807594, + 0.024553308, + 0.0030494155, + -0.0042820177, + -0.018707909, + -0.016561963, + -0.0036764136, + 0.022446858, + -0.02668609, + -0.01296125, + -0.0052002985, + -0.0128230145, + -0.008445548, + 0.010492754, + -0.025066756, + 0.0035645084, + 0.023236776, + -0.02698889, + 0.008866838, + -0.019142365, + -0.014192207, + 0.0008812531, + -0.001876057, + 0.029148001, + 0.0027729438, + 0.00617124, + -0.013428618, + 0.014810977, + -0.002777881, + 0.0064246724, + -0.020630045, + 0.025830343, + -0.012276654, + -0.020287747, + -0.006898624, + -0.008175659, + 0.009966142, + 0.0054043606, + -0.0045157024, + -0.006421381, + -0.021788592, + -0.0028700382, + 0.036915537, + 0.0102097, + -0.018220792, + -0.01679894, + -0.005325369, + -0.019366175, + -0.010946957, + -0.0041371994, + -0.019313512, + -0.023486918, + -0.018457768, + -0.010881131, + 0.00308562, + 0.014508175, + -0.0045025367, + -0.005980343, + 0.02109083, + 0.011493318, + -0.027568163, + 0.018879058, + 0.02059055, + 0.023881877, + -0.004897496, + 0.020261416, + -0.005851981, + -0.01477148, + 0.011605223, + 0.0025639446, + -0.00039681073, + -0.027647156, + 0.020090267, + 0.019247686, + 0.0168516, + 0.023355264, + 0.029305985, + -0.026370121, + 0.0015855973, + -0.031149128, + -0.02213089, + 0.00021599341, + 0.010525667, + 0.004867874, + 0.02448748, + -0.030569855, + 0.014824142, + 0.028331753, + -0.020340407, + 0.007675377, + -0.027594496, + -0.01283618, + 0.007102686, + -0.0035184298, + -0.007971597, + -0.023131454, + -0.016469806, + 0.005516266, + -0.0032057536, + 0.004963323, + 0.00080267264, + 0.0005689883, + 0.0024668504, + 0.03035921, + -0.0150479525, + 0.0008861901, + -0.010551997, + -0.019129198, + -0.01117735, + 0.0018612461, + -0.03199171, + -0.023802884, + -0.01169738, + 0.01679894, + 0.008544288, + -0.028911026, + -0.04170771, + -0.00034332665, + -0.022249378, + -0.0010556935, + -0.021512121, + 0.0074054883, + 0.02213089, + -0.008735185, + 0.010940375, + 0.018576255, + 0.006230484, + 0.0126189515, + -0.015350754, + -0.024303166, + 0.007971597, + -0.016575128, + 0.04299791, + 0.000023245004, + -0.022960305, + -0.022051899, + 0.030464534, + 0.013402288, + 0.0052792905, + 0.0038278145, + -0.03199171, + 0.006760388, + -0.010328188, + -0.0028338335, + -0.005578801, + 0.0009520167, + 0.006760388, + -0.038916662, + 0.008261234, + 0.0013222911, + -0.012803267, + -0.005697289, + 0.009873984, + 0.0014193852, + 0.012079174, + 0.025790848, + -0.016548797, + -0.026383286, + 0.0045157024, + -0.019221356, + 0.005489935, + 0.0000777062, + -0.0070961034, + 0.009617261, + -0.01276377, + -0.018036477, + -0.023078792, + 0.014731985, + -0.025685525, + -0.013797248, + 0.011302421, + 0.0033571546, + -0.014258034, + -0.01918186, + 0.003913389, + -0.022723328, + 0.008307312, + 0.0013247596, + -0.03401917, + -0.0030905572, + 0.017417708, + 0.010802139, + -0.013520776, + -0.02342109, + 0.004973197, + 0.0084521305, + 0.011565727, + -0.007168513, + 0.019919118, + -0.024842944, + 0.0022578512, + -0.008656193, + -0.017773172, + -0.046921175, + -0.016351318, + 0.0039561763, + 0.00021002788, + 0.0056413366, + 0.23507982, + 0.0023549453, + -0.0056512104, + 0.03420348, + 0.009439529, + 0.035309367, + 0.012507047, + -0.006059335, + -0.011256342, + 0.01982696, + -0.0229998, + -0.0013823578, + -0.003281454, + -0.0046572294, + 0.012467551, + -0.024948267, + -0.023039296, + -0.022644337, + -0.03243933, + -0.013560272, + 0.017338717, + -0.005226629, + 0.001489326, + -0.010604659, + -0.003130053, + 0.020801194, + -0.026054153, + -0.0023944413, + 0.023328934, + 0.028805703, + 0.0076687946, + 0.011940938, + -0.0018447894, + 0.0073462445, + 0.009854237, + -0.002988526, + 0.02361857, + -0.0013510901, + 0.00052249833, + 0.005358282, + -0.023763388, + -0.0008664421, + 0.011835616, + -0.006352263, + 0.0051838416, + 0.0012745669, + 0.008801011, + 0.0067373486, + -0.0062864367, + 0.024290001, + -0.017365048, + 0.005888186, + 0.03249199, + 0.027752478, + 0.00022319319, + -0.00453545, + 0.029648283, + -0.019432, + -0.0073594097, + 0.00091334357, + -0.014705654, + 0.030885823, + -0.021841254, + 0.017259724, + -0.021393633, + -0.0061284527, + -0.030069573, + -0.000862328, + -0.0015066054, + -0.025935665, + 0.007997927, + -0.030517194, + -0.02109083, + -0.005907934, + -0.032281347, + -0.023434255, + 0.017509865, + 0.010802139, + 0.012842762, + 0.02909534, + -0.015074283, + 0.006421381, + -0.00007791191, + 0.009709418, + -0.00083147176, + -0.019537324, + 0.007675377, + 0.0021821505, + 0.0040680817, + -0.0112760905, + 0.0030773918, + -0.02059055, + -0.0009799929, + -0.030464534, + -0.0019846708, + -0.0014531213, + -0.011190516, + 0.014705654, + 0.0034756425, + 0.0046901423, + -0.010380849, + -0.001915553, + 0.020735366, + 0.010894296, + -0.0070171114, + -0.0100451335, + 0.026580766, + -0.00047971107, + -0.0022216465, + -0.022288874, + -0.009505356, + -0.031860057, + 0.007622716, + -0.010644155, + -0.0027416763, + 0.0155219035, + -0.010881131, + -0.014982126, + 0.009702835, + -0.01053225, + 0.030464534, + -0.02693623, + -0.015693052, + -0.00041018176, + -0.017549362, + -0.013250887, + 0.017259724, + -0.019695308, + -0.0037652794, + -0.042050008, + 0.017391378, + 0.010466424, + 0.022499518, + -0.009340789, + 0.013244304, + 0.016509302, + 0.000004605931, + -0.011842199, + -0.0069183717, + 0.00055623444, + 0.009149892, + -0.00929471, + 0.01937934, + 0.016298657, + -0.011769789, + -0.013211391, + 0.01603535, + 0.0007997927, + -0.013171895, + 0.020998674, + -0.0025392596, + -0.035520013, + -0.015943194, + -0.009538269, + 0.039522268, + -0.0030823287, + -0.023328934, + 0.00369287, + 0.014810977, + 0.013626099, + -0.03209703, + -0.0029967541, + 0.016601458, + -0.032176025, + -0.03828473, + -0.008583784, + -0.17030647, + -0.007965014, + 0.009380285, + -0.031149128, + 0.013955231, + 0.0028042116, + 0.005878312, + 0.0029556127, + -0.010380849, + -0.0013659012, + 0.032413, + 0.017207064, + -0.010973288, + -0.035441022, + 0.0050719366, + -0.020169258, + -0.019432, + 0.006599113, + 0.024803448, + 0.0019747969, + 0.021577947, + -0.011124689, + 0.0027153457, + -0.0005368979, + -0.0026561017, + 0.03157042, + -0.009755497, + -0.008017675, + -0.0067735533, + -0.015666721, + -0.017259724, + 0.0035381778, + 0.015153275, + 0.024092522, + -0.004301766, + -0.0013823578, + -0.024579639, + -0.00919597, + -0.004522285, + 0.013560272, + -0.010848218, + 0.00803084, + 0.0009824614, + -0.01157231, + -0.0059869257, + 0.010802139, + 0.011282673, + -0.008866838, + -0.006056044, + -0.006572782, + 0.017970651, + -0.011842199, + 0.0012564645, + 0.019010711, + 0.022446858, + 0.00192049, + 0.0036237522, + 0.018102305, + 0.0132969655, + 0.0091301445, + -0.01876057, + -0.009505356, + 0.013981562, + -0.0026890151, + -0.020182423, + -0.011756624, + 0.008366556, + 0.022315204, + -0.02317095, + 0.01980063, + 0.0051476373, + 0.003712618, + -0.01747037, + -0.009452694, + 0.01960315, + -0.00079362147, + -0.009176223, + 0.03580965, + 0.0105980765, + -0.013211391, + -0.020774864, + 0.044525087, + -0.021275144, + 0.005977052, + 0.0022051898, + 0.026093649, + 0.0030066282, + -0.0076095504, + -0.01606168, + -0.021591112, + 0.01231615, + -0.008419218, + -0.0066089868, + -0.006984198, + 0.0009939811, + 0.0013988145, + -0.021670105, + 0.03831106, + -0.0012054489, + -0.000015813803, + -0.00014574412, + -0.014429183, + -0.007221174, + 0.022065064, + 0.01253996, + 0.018800067, + 0.016772607, + 0.016970087, + 0.0046802685, + 0.00016559495, + -0.027410181, + -0.009643591, + 0.011223429, + 0.006500373, + -0.012230575, + 0.0136919245, + 0.019037042, + -0.015298093, + 0.021591112, + 0.006483916, + 0.02128831, + -0.0132969655, + 0.013125816, + -0.0001234248, + -0.014363356, + -0.013448367, + -0.058822617, + -0.009472442, + 0.009419781, + 0.01727289, + -0.010782391, + 0.04839569, + 0.02091968, + 0.028358083, + -0.0082151545, + -0.003041187, + 0.0043708836, + -0.029990582, + 0.0022627881, + -0.00020848507, + 0.045393996, + 0.0010836698, + 0.011710545, + -0.00028531702, + 0.004094412, + 0.01957682, + -0.009841071, + -0.0037455314, + -0.014350191, + -0.013705091, + -0.0076292986, + 0.0022315204, + -0.0174967, + 0.008564035, + 0.015772045, + 0.01851043, + 0.02698889, + -0.0068130493, + 0.0005599372, + -0.013033659, + -0.004252396, + 0.005878312, + -0.022367865, + 0.005684124, + 0.0379161, + -0.029964251, + -0.0014539441, + 0.0057664067, + 0.0010647447, + -0.013705091, + -0.016601458, + -0.0008664421, + -0.021472625, + 0.019010711, + 0.03754747, + -0.020656375, + -0.019682143, + -0.003771862, + 0.00010809956, + -0.0084258, + 0.028647719, + -0.0015600895, + 0.020208754, + 0.00874835, + -0.025040423, + 0.007602968, + 0.01918186, + 0.006780136, + -0.0116710495, + 0.003972633, + 0.021419963, + 0.0015806603, + -0.015930029, + -0.026383286, + 0.020300912, + -0.0024997636, + -0.01305999, + -0.00023512426, + -0.010492754, + 0.0063983416, + -0.0106770685, + -0.034756426, + -0.020774864, + -0.006158075, + -0.0008236549, + -0.021999236, + 0.010670486, + -0.041102104, + -0.004637481, + 0.0011009492, + 0.0013025431, + 0.020551052, + 0.012263489, + -0.013277218, + 0.016088013, + -0.01288884, + 0.020169258, + 0.0053944867, + 0.03425614, + -0.03167574, + -0.009222302, + 0.029305985, + 0.005486644, + 0.02213089, + 0.0052134637, + 0.02086702, + -0.01519277, + -0.031781062, + -0.09600146, + 0.007221174, + 0.016522467, + -0.0017065536, + 0.007129017, + -0.017378213, + 0.020959178, + -0.0049995272, + 0.010512502, + -0.02059055, + -0.037758116, + 0.009261797, + -0.004005546, + -0.01980063, + -0.03151776, + -0.0017888368, + 0.028121108, + 0.01600902, + 0.017773172, + 0.02294714, + 0.015574564, + 0.0032732259, + 0.008392886, + -0.00049411063, + -0.03633626, + 0.011565727, + 0.0028535814, + 0.03170207, + -0.01224374, + 0.013053407, + 0.0015288219, + -0.026778245, + 0.015877366, + 0.03154409, + -0.014982126, + -0.010196535, + 0.004933701, + 0.014587166, + 0.018721074, + 0.03580965, + -0.034861747, + 0.0108350525, + 0.02002444, + -0.0059968, + -0.015679887, + 0.005233212, + 0.015574564, + 0.018233957, + 0.035362028, + -0.007793865, + 0.013402288, + 0.030622516, + -0.004170113, + -0.006559617, + -0.0077280384, + -0.03654691, + 0.010762643, + -0.0021969615, + -0.0050686453, + -0.010453258, + 0.02361857, + 0.01045984, + 0.01732555, + 0.007352827, + 0.014982126, + -0.007352827, + -0.017694179, + 0.007155347, + 0.01876057, + -0.0053418255, + -0.03459844, + 0.006161366, + 0.014337026, + 0.02901635, + 0.019853292, + -0.013448367, + -0.01598269, + -0.0099200625, + -0.019432, + 0.019339845, + 0.0040483335, + -0.019168695, + -0.0340455, + 0.021314641, + 0.028963687, + -0.010315022, + -0.012553126, + -0.015205936, + -0.009235467, + 0.034756426, + -0.005726911, + -0.009933229, + 0.012164748, + -0.00612187, + 0.019932283, + 0.03246566, + 0.006589239, + -0.01789166, + 0.035888642, + -0.0072870003, + 0.0023138036, + 0.016167004, + 0.013112651, + -0.0021574656, + -0.02339476, + 0.013560272, + -0.014113215, + -0.0217096, + 0.00916964, + 0.0014917945, + 0.006602404, + 0.008346808, + 0.009064318, + 0.028121108, + 0.0064345463, + 0.0040252944, + -0.016127508, + -0.02954296, + -0.01603535, + -0.0060922485, + 0.013836743, + 0.013586602, + 0.013652429, + -0.005506392, + 0.014995291, + -0.00966334, + 0.008208572, + -0.030648848, + 0.007826778, + 0.001890868, + 0.0050324406, + 0.0070566074, + -0.000534018, + -0.007115851, + -0.019129198, + 0.0075108106, + 0.012052843, + 0.011677632, + -0.0062568146, + 0.03617828, + 0.018194461, + -0.00322221, + 0.0031168878, + -0.0024717874, + 0.019260852, + 0.0057400763, + 0.012204245, + -0.0030839744, + -0.032202356, + 0.027410181, + -0.0021969615, + 0.013270635, + -0.014402851, + -0.01224374, + -0.026409617, + -0.0015329361, + 0.016693616, + -0.0034163985, + 0.0076095504, + 0.025514375, + -0.006266689, + 0.02002444, + 0.0073594097, + -0.011164185, + -0.009926646, + 0.026554435, + 0.0021327806, + 0.009518521, + -0.0156008955, + 0.013547107, + 0.0011050634, + -0.0252774, + -0.024763953, + 0.009623843, + 0.00852454, + -0.0008680878, + 0.006342389, + 0.007945266, + 0.008616697, + -0.0037586966, + 0.020801194, + -0.016601458, + -0.014271199, + 0.019168695, + -0.01851043, + 0.004301766, + 0.0047822995, + -0.003248541 + ] + }, + { + "object": "embedding", + "index": 5, + "embedding": [ + 0.0021845475, + 0.008128393, + 0.0016116065, + -0.0032902234, + -0.03658782, + 0.004707499, + -0.017878445, + -0.0045868796, + 0.010058301, + -0.03318368, + -0.004885077, + 0.0063559613, + 0.019768145, + -0.014166054, + -0.02752798, + -0.01904443, + 0.02173826, + -0.025544465, + -0.0021460163, + -0.026670244, + -0.00603431, + 0.033022854, + -0.012115528, + -0.020331034, + 0.0038229583, + 0.005575287, + -0.002809422, + -0.015680496, + -0.0014516185, + -0.011733566, + 0.01049387, + 0.0016526504, + 0.009689742, + -0.021537228, + 0.0055250293, + -0.02439188, + -0.014233065, + -0.009863969, + -0.016993904, + -0.020331034, + 0.019392885, + -0.018722778, + -0.008249013, + -0.00634926, + -0.007458287, + 0.01150573, + 0.0060008047, + 0.005149769, + -0.011840784, + 0.013227904, + 0.023560949, + 0.014005228, + -0.017865043, + -0.0012363467, + -0.000084129795, + -0.009046439, + -0.023467133, + -0.013817598, + -0.01125109, + -0.0092072645, + 0.0038665151, + 0.005173223, + -0.018092878, + -0.0010579309, + -0.0025363537, + -0.009488709, + -0.006342559, + 0.008007774, + -0.03224553, + -0.011780474, + 0.010949542, + 0.021698052, + -0.008604169, + -0.0045734774, + 0.038732164, + 0.003682236, + -0.031655837, + -0.00010491357, + 0.011793876, + -0.00007125118, + 0.021255782, + -0.018856801, + 0.0066709113, + 0.015613484, + 0.0046203854, + 0.015626887, + -0.016136168, + 0.025785703, + -0.008222208, + -0.00311097, + 0.010916037, + 0.008966027, + -0.00591034, + 0.004627086, + -0.030127993, + -0.025343433, + 0.0064765806, + 0.018883605, + -0.0061549293, + -0.043128062, + -0.0096562365, + 0.02161764, + -0.011874289, + -0.018012466, + -0.030020777, + 0.014045435, + 0.010835624, + -0.01521142, + 0.0017339009, + 0.011137172, + 0.0020287477, + 0.03181666, + -0.006838438, + -0.039080616, + -0.032272335, + -0.018374324, + 0.014460901, + -0.011512431, + -0.019567113, + -0.026817666, + 0.017784629, + 0.017302154, + -0.00015025047, + 0.001991892, + 0.018709376, + -0.003588421, + -0.017597, + -0.0056523494, + 0.0057461644, + 0.002444214, + 0.020974336, + 0.02299806, + 0.017865043, + 0.0012505865, + -0.014809356, + 0.015546474, + -0.021322792, + 0.010574282, + -0.0115928445, + -0.012209343, + 0.021135163, + 0.017985662, + -0.013790794, + 0.0056422977, + 0.0020320984, + 0.017717618, + 0.027259937, + 0.02180527, + 0.018803192, + -0.0025631578, + 0.008456745, + -0.005022449, + 0.006278899, + 0.008470148, + 0.016417611, + 0.0046203854, + 0.0141124455, + 0.01740937, + 0.0044160024, + 0.0034778533, + 0.009783557, + -0.003551565, + 0.009763453, + 0.008510354, + 0.0048281183, + 0.013650072, + 0.022555789, + 0.018937213, + 0.017114524, + 0.00068392756, + -0.014702139, + 0.03004758, + -0.0020220468, + 0.02445889, + 0.017422773, + 0.010373251, + 0.013710381, + 0.00414796, + -0.023668166, + -0.0054144613, + -0.033290897, + -0.0002041731, + 0.007310863, + 0.007994372, + 0.0028931852, + -0.007310863, + 0.0182269, + 0.00855056, + 0.006406219, + -0.013026873, + 0.0058734845, + 0.038303293, + 0.03229914, + 0.025115596, + -0.6776118, + -0.042752802, + -0.007404678, + -0.0079005575, + 0.019218657, + 0.028224891, + 0.010225827, + 0.012276353, + 0.004741004, + -0.005776319, + -0.018977419, + 0.032593984, + 0.0061448775, + 0.0013418884, + 0.008872212, + -0.015801115, + -0.013274812, + -0.015787711, + 0.006881995, + 0.006272198, + -0.0101990225, + 0.024445489, + -0.0063593118, + 0.0055149775, + 0.02238156, + -0.030127993, + 0.013650072, + -0.013965022, + -0.013375328, + 0.016055755, + -0.030181602, + 0.036346585, + 0.0028747574, + -0.016953697, + 0.051705427, + -0.008148496, + -0.010708304, + 0.024043426, + 0.008899016, + 0.045808487, + 0.00094987615, + -0.028064065, + 0.023614557, + -0.018561954, + -0.024525901, + 0.007518596, + 0.020156806, + -0.01941969, + 0.010400055, + -0.013670175, + -0.0028077466, + -0.029216649, + -0.02708571, + -0.011425318, + 0.010507272, + -0.0069356035, + 0.0069356035, + -0.007257255, + -0.0017523288, + 0.003129398, + -0.005990753, + 0.020625882, + -0.039482683, + -0.012678417, + -0.0042216717, + -0.0014733969, + -0.04393219, + 0.0018210147, + 0.018025868, + 0.008188703, + -0.0077062263, + 0.007679422, + -0.009642834, + 0.008919119, + 0.038169272, + 0.022220735, + 0.01754339, + -0.026201168, + -0.016833078, + -0.011948001, + 0.010916037, + -0.003608524, + -0.013180997, + -0.0049755415, + 0.005129666, + -0.015305235, + -0.023172287, + 0.0044294046, + 0.009750051, + -0.022033105, + 0.017717618, + 0.009863969, + 0.012953161, + 0.018066075, + -0.016296992, + 0.01584132, + -0.019727938, + 0.0044160024, + 0.02218053, + -0.027032102, + -0.00004824244, + -0.013100584, + -0.0007304162, + -0.0108289225, + -0.012805738, + -0.0069222013, + -0.024793945, + 0.00204215, + 0.0119413, + -0.02439188, + 0.0043020844, + -0.012336663, + -0.02376198, + -0.0043858476, + 0.019821754, + -0.03211151, + 0.0099711865, + -0.0062185894, + 0.00798097, + -0.00011171934, + 0.0141124455, + -0.01011861, + 0.038624946, + -0.008537158, + -0.00072622806, + 0.030690882, + 0.01062119, + -0.003323729, + -0.009629432, + 0.0056221946, + -0.007217048, + 0.018883605, + 0.012497488, + -0.0067144684, + 0.0038162572, + -0.0101521155, + 0.0037123905, + -0.00008203571, + 0.01539905, + -0.041519806, + -0.0439858, + -0.0067647262, + 0.019513505, + -0.000016072088, + -0.0036286274, + -0.023426928, + -0.017020708, + 0.0007655968, + -0.011432019, + 0.037499167, + -0.0029266907, + -0.011170677, + -0.03280842, + 0.01998258, + 0.0015110904, + -0.013469143, + 0.0014717217, + -0.012939759, + -0.0008837031, + -0.012329962, + 0.0088923145, + 0.0014859614, + -0.029136235, + 0.019768145, + 0.00710313, + -0.00066549965, + 0.013643371, + 0.0067044166, + 0.010440261, + -0.026335191, + -0.018709376, + -0.011988208, + 0.004657241, + 0.01766401, + 0.013221203, + 0.004784561, + 0.0005616331, + -0.0073510697, + -0.0053206463, + -0.025450649, + 0.010567581, + -0.03776721, + -0.02502178, + 0.0024676677, + 0.014621726, + -0.008852108, + 0.004013939, + 0.017141327, + -0.016859882, + 0.0012489113, + -0.017422773, + 0.012236147, + 0.01326141, + 0.005866783, + 0.021644443, + -0.008429941, + 0.00035390005, + 0.010279436, + 0.006895397, + 0.019245462, + 0.014715541, + -0.010373251, + 0.014099043, + -0.018334117, + 0.029297061, + -0.04141259, + -0.006868593, + -0.0132145025, + 0.02520941, + 0.019299071, + 0.0025028482, + -0.010949542, + -0.013938217, + -0.0076191123, + 0.01609596, + 0.015787711, + 0.01614957, + 0.010822222, + -0.004486364, + -0.0038899689, + 0.019634124, + -0.020880522, + 0.013382029, + 0.003796154, + -0.0065469416, + 0.004117805, + 0.0009054816, + 0.023239298, + 0.02224754, + 0.0017925352, + -0.005776319, + -0.010259332, + -0.01017892, + 0.017865043, + 0.005769618, + -0.014594922, + 0.012651613, + -0.010574282, + 0.038356904, + 0.0021644444, + 0.019701134, + 0.0047477055, + 0.027849631, + -0.010534076, + -0.011083564, + -0.0082155075, + 0.033961, + -0.008376333, + 0.0031578774, + 0.0065770964, + -0.018159889, + -0.0060376604, + -0.008751593, + 0.0012732026, + 0.009756752, + -0.017516587, + -0.0041446094, + 0.007585607, + 0.004298734, + 0.045594055, + 0.0017439525, + -0.00090799446, + 0.0010947867, + -0.011867588, + 0.005990753, + 0.008832005, + 0.011318101, + 0.0036889368, + -0.013790794, + -0.0055551836, + -0.026817666, + -0.0124036735, + -0.007404678, + -0.0033170278, + 0.014715541, + -0.018937213, + 0.0024592914, + -0.0026502716, + 0.02275682, + 0.01143872, + -0.014889769, + -0.03640019, + 0.01766401, + -0.005762917, + 0.0034678017, + -0.022783626, + -0.028439324, + 0.003665483, + -0.02841252, + 0.018468138, + 0.011204183, + 0.009482008, + 0.002784293, + -0.010922737, + -0.016176375, + 0.0056925556, + 0.018829996, + -0.03607854, + -0.019513505, + -0.0049688406, + -0.008074785, + -0.006248744, + -0.002023722, + 0.0007999398, + 0.019660927, + 0.003601823, + -0.006587148, + -0.0037291434, + 0.013040274, + -0.00077941775, + 0.019526906, + -0.020786706, + -0.0026201168, + 0.02067949, + 0.003953629, + 0.007954165, + -0.02110836, + -0.0017690815, + 0.031629033, + -0.00032311704, + -0.010815521, + 0.005096161, + -0.024365077, + -0.005119615, + 0.087596335, + 0.0031059443, + 0.013368627, + -0.0042317235, + 0.02570529, + 0.016873285, + -0.006077867, + -0.0048917783, + -0.0030054282, + -0.009287678, + -0.0118608875, + -0.010788716, + 0.009173759, + 0.00867788, + 0.00052980304, + -0.005166522, + -0.008302621, + -0.039080616, + 0.009167058, + -0.0068618916, + -0.003400791, + 0.011659855, + -0.00041232497, + 0.01288615, + -0.013053677, + 0.0100516, + 0.011840784, + 0.033961, + 0.017315555, + -0.011740268, + 0.014876367, + 0.018092878, + 0.0031059443, + -0.0031662537, + -0.006523488, + -0.0013779068, + 0.014795954, + 0.014246467, + -0.0049688406, + -0.0072639557, + 0.013616567, + -0.0015680495, + 0.01137841, + 0.008731489, + 0.021443412, + 0.00008318746, + -0.0087113865, + 0.019969177, + -0.012015012, + 0.0125712, + 0.029243452, + 0.009274276, + -0.026214572, + -0.01665885, + -0.01206862, + 0.020398045, + 0.005618844, + -0.0099711865, + 0.022019703, + 0.026201168, + -0.00515312, + -0.02357435, + -0.004342291, + -0.020639284, + -0.0070294184, + -0.041787848, + 0.0106815, + -0.032888833, + -0.011914495, + -0.019808352, + 0.00760571, + -0.022904243, + -0.0061113723, + 0.02067949, + 0.016511427, + 0.00597065, + 0.02350734, + -0.021765063, + -0.0059572477, + 0.012041816, + 0.009602628, + -0.024485696, + -0.027447566, + -0.01716813, + -0.006406219, + 0.014635129, + 0.017650608, + -0.016484622, + 0.007954165, + 0.009696443, + 0.027688805, + -0.00591034, + 0.015452659, + 0.0073510697, + -0.016189776, + -0.017489783, + 0.010078403, + 0.002017021, + -0.016645448, + -0.014018631, + 0.025249617, + -0.01986196, + -0.008751593, + 0.005317296, + 0.004915232, + -0.016390808, + 0.01728875, + -0.0008204618, + -0.0126717165, + 0.006309054, + 0.021885682, + -0.025812507, + 0.006881995, + 0.019098038, + -0.019151647, + 0.046424985, + -0.00057335995, + 0.022716613, + -0.006121424, + -0.001206192, + 0.01087583, + 0.0007924011, + 0.016109362, + 0.0066508083, + -0.011961403, + -0.008704685, + 0.0055015753, + -0.017462978, + 0.003268445, + -0.0023805539, + -0.00848355, + 0.026321787, + -0.012242848, + -0.03425585, + -0.027608393, + 0.00521678, + -0.017771227, + 0.019071234, + -0.011043357, + -0.02771561, + -0.035220806, + -0.009039738, + 0.012001609, + -0.009220667, + -0.018762985, + -0.021349598, + 0.007833546, + 0.0063392087, + 0.014313477, + 0.011974805, + 0.008161899, + 0.01628359, + -0.02776922, + -0.0029618712, + -0.03294244, + -0.035864107, + -0.022515582, + -0.014795954, + 0.01614957, + 0.009575823, + 0.026268179, + 0.029752733, + 0.007880454, + -0.012946459, + -0.007310863, + 0.0058835363, + -0.0008506166, + 0.009401596, + -0.015760908, + 0.0108289225, + 0.026831068, + 0.029377474, + -0.0030071035, + -0.026335191, + -0.017556794, + 0.020719696, + -0.016940296, + -0.00037693497, + -0.00993098, + -0.019272266, + 0.0018109631, + -0.0045801788, + -0.005297193, + -0.017114524, + 0.0058801854, + 0.008885614, + 0.00006428835, + -0.005045903, + 0.010641293, + -0.010406756, + 0.020974336, + -0.010601087, + -0.015693897, + -0.023172287, + -0.012162435, + 0.011686659, + -0.017449576, + 0.01182068, + 0.0118608875, + 0.010728407, + 0.023091873, + -0.012048517, + -0.01275883, + 0.0040809494, + 0.011043357, + 0.018950615, + 0.0060008047, + -0.017838238, + 0.005002346, + -0.037070297, + -0.023614557, + -0.015613484, + -0.009240771, + -0.026254777, + -0.011076862, + 0.021014543, + 0.0022565841, + 0.02105475, + -0.0073443684, + -0.008664479, + 0.018628964, + 0.008510354, + 0.012979965, + -0.020625882, + 0.02790324, + 0.018267106, + 0.0036889368, + -0.01413925, + -0.01991557, + -0.011887691, + -0.017985662, + 0.02275682, + 0.027876435, + -0.006875294, + -0.023520742, + 0.013871207, + 0.024097035, + -0.02570529, + -0.008249013, + 0.019768145, + 0.027822826, + 0.0019416339, + -0.01991557, + 0.0091603575, + -0.017516587, + 0.021952692, + -0.017503185, + -0.0017154729, + -0.015881527, + -0.010172218, + -0.018508345, + 0.015667092, + -0.023735177, + 0.0015018765, + 0.02652282, + -0.020960934, + 0.011545937, + -0.0008259064, + 0.004623736, + 0.0044093016, + -0.0105139725, + 0.02432487, + 0.01691349, + 0.0034644513, + -0.0037928035, + 0.013341823, + -0.0003802855, + 0.0005612143, + -0.0040273406, + 0.026227973, + -0.006228641, + -0.015988745, + -0.0039502787, + -0.00892582, + -0.0016291967, + -0.0063325074, + 0.0035616166, + 0.0010470416, + -0.016457818, + -0.007330966, + 0.02790324, + -0.0056791534, + -0.0029434434, + -0.017597, + -0.0056925556, + -0.019111441, + -0.004657241, + -0.0054613687, + 0.007592308, + -0.013274812, + -0.020880522, + -0.01923206, + 0.0074515855, + 0.027018698, + -0.008496952, + -0.018937213, + 0.013321719, + 0.011827381, + -0.02790324, + 0.007424781, + 0.010272735, + 0.0055015753, + -0.03256718, + 0.00086527516, + -0.01388461, + -0.010266033, + 0.0063559613, + -0.025504258, + -0.00911345, + -0.02972593, + -0.022676408, + 0.03739195, + 0.008952624, + 0.022207333, + 0.0257723, + -0.022864038, + -0.00070947537, + -0.01558668, + -0.010004692, + 0.008336126, + 0.007987671, + 0.011365009, + 0.024445489, + -0.016833078, + 0.01647122, + 0.0067345714, + 0.00049755414, + -0.0037123905, + -0.024539305, + -0.0327012, + 0.0025179256, + 0.0063593118, + -0.027930044, + -0.01206862, + -0.02047846, + -0.02117537, + -0.0027641898, + -0.0024224354, + 0.008838707, + -0.0005004859, + 0.0133485235, + 0.035408434, + 0.0018746232, + 0.016806275, + -0.01640421, + -0.015975341, + 0.0025815857, + -0.013804196, + -0.01628359, + -0.01125109, + -0.0025514308, + 0.02067949, + 0.009917578, + -0.017275348, + -0.019808352, + 0.019473298, + -0.037847623, + 0.0066005504, + -0.02180527, + 0.021094956, + 0.011948001, + -0.0072438526, + 0.004720901, + 0.027983652, + -0.0069557065, + 0.030556861, + -0.015077399, + -0.009723247, + 0.013026873, + -0.026281582, + 0.04846211, + 0.00021862228, + -0.01175367, + -0.0022214034, + 0.008282518, + 0.020371241, + 0.004312136, + 0.0030188302, + -0.021832073, + -0.0019466598, + -0.0020723047, + -0.0124505805, + -0.018990822, + 0.019580515, + 0.012350065, + -0.04631777, + 0.01439389, + -0.0005499062, + -0.007699525, + -0.0063023525, + -0.0008162736, + -0.0059036394, + -0.00081376074, + 0.022971256, + -0.013341823, + -0.012638211, + 0.0069289026, + -0.027259937, + 0.008604169, + 0.0017112847, + 0.0043255384, + 0.0028730822, + 0.0019081286, + -0.013703681, + -0.027930044, + 0.0004301247, + -0.029699124, + -0.0032918989, + 0.011539236, + -0.0010261007, + -0.009488709, + -0.0106479945, + 0.011217585, + -0.037365146, + -0.018079476, + 0.0029501445, + -0.029645517, + -0.02570529, + 0.018789789, + 0.0027156072, + -0.021537228, + -0.011545937, + -0.0066742618, + 0.0038363603, + -0.012725324, + -0.017382566, + 0.011338204, + -0.027018698, + 0.0024040076, + -0.0073376675, + -0.017690815, + -0.0257723, + 0.005890237, + 0.005437915, + -0.004436106, + 0.0010269384, + 0.23652083, + -0.010527375, + -0.0022599346, + 0.01998258, + -0.0075521017, + 0.017529989, + 0.028358912, + -0.0007073813, + 0.0017389266, + 0.02256919, + -0.017811434, + -0.000539017, + 0.018722778, + -0.004543323, + -0.0062018367, + -0.021832073, + -0.032888833, + -0.02551766, + -0.031012535, + -0.0015412453, + 0.02483415, + -0.015546474, + 0.005632246, + -0.002117537, + 0.0099711865, + -0.011994909, + -0.0017623804, + 0.01162635, + 0.011043357, + 0.024793945, + 0.0027072306, + 0.009327884, + -0.007699525, + 0.0038732162, + -0.006362662, + 0.008999532, + 0.007987671, + -0.012041816, + 0.029886754, + -0.0038330099, + -0.0036889368, + -0.0151042035, + -0.018722778, + 0.0059170416, + -0.0044897143, + 0.0076526175, + 0.007934063, + 0.0074515855, + -0.009736649, + 0.021041349, + -0.040367223, + -0.0007986833, + 0.014045435, + 0.026080549, + 0.012209343, + -0.021523824, + 0.030771296, + 0.0031729548, + -0.015063996, + -0.006121424, + 0.004456209, + 0.030396037, + -0.010728407, + 0.036855865, + -0.02407023, + -0.0011333178, + -0.009917578, + 0.0038531132, + 0.029779539, + -0.012732026, + 0.022515582, + 0.0124036735, + 0.004342291, + -0.021188771, + -0.010741809, + -0.023453731, + 0.027501175, + 0.0157207, + 0.016940296, + 0.041707437, + -0.009012934, + -0.012819139, + 0.008992831, + 0.007585607, + 0.0005260337, + -0.034095023, + 0.012209343, + -0.000043975746, + 0.0129866665, + -0.031575423, + 0.0037425454, + -0.0032835223, + -0.011257791, + -0.020076394, + 0.0021711455, + 0.009951083, + 0.009602628, + 0.01590833, + -0.01118408, + 0.021041349, + -0.015827918, + 0.0021610938, + 0.004895129, + -0.005739463, + -0.017141327, + -0.005990753, + -0.006888696, + 0.011177379, + -0.009461906, + -0.013871207, + 0.0011500705, + -0.03602493, + -0.0048281183, + -0.017570196, + 0.0071366355, + 0.008041279, + -0.02047846, + -0.011793876, + 0.034523893, + -0.021979498, + 0.019848557, + -0.027608393, + -0.013650072, + -0.012524293, + -0.017462978, + -0.010312941, + 0.009977887, + -0.01640421, + 0.0032282386, + -0.048220873, + 0.028305303, + -0.0032667697, + 0.020652685, + -0.0063258065, + -0.0022766872, + 0.02110836, + 0.006543591, + -0.006881995, + 0.012356766, + -0.0020387995, + 0.008986129, + -0.018159889, + 0.035435237, + 0.03640019, + -0.021161968, + 0.0021577433, + 0.02413724, + -0.0026754006, + -0.018508345, + 0.008912418, + -0.0100516, + -0.02149702, + -0.013341823, + -0.02110836, + 0.011351606, + 0.0046203854, + 0.0015035517, + -0.003930175, + 0.003638679, + 0.0019014275, + -0.04135898, + 0.0067647262, + 0.026429005, + -0.0075655035, + -0.036158953, + -0.02752798, + -0.17454937, + 0.027045503, + -0.00021548115, + -0.014487705, + 0.011545937, + 0.034389872, + 0.0079474645, + -0.022287747, + -0.00810829, + 0.015506268, + 0.031253774, + 0.019526906, + -0.005488173, + -0.014889769, + -0.0019684383, + -0.026040344, + -0.028921802, + 0.017556794, + 0.026683645, + 0.013408833, + 0.03042284, + -0.022153724, + -0.0005792234, + -0.016390808, + -0.001614957, + 0.024619717, + -0.009997991, + 0.012892852, + 0.0012313209, + 0.0013779068, + -0.017395968, + -0.019553712, + 0.026965091, + 0.014702139, + -0.004184816, + 0.0040440937, + -0.0077464324, + -0.009951083, + -0.00018270875, + 0.014742346, + -0.012651613, + 0.018923812, + 0.012236147, + 0.0163506, + -0.0012857671, + 0.019098038, + 0.005297193, + -0.0065134363, + -0.010185621, + -0.005380956, + 0.02092073, + -0.00760571, + 0.009066543, + 0.020652685, + 0.020009384, + 0.00019412152, + 0.007813443, + 0.005166522, + 0.012745428, + -0.008369632, + -0.025263019, + -0.016015548, + -0.00033044632, + -0.010507272, + -0.0046940967, + -0.00396033, + -0.021912487, + 0.022033105, + -0.017395968, + 0.010594386, + 0.0061683315, + -0.009924279, + 0.01049387, + -0.016551634, + -0.0039234743, + 0.0008112478, + -0.011425318, + 0.020826913, + 0.0021711455, + -0.015814517, + -0.03310327, + 0.026348593, + -0.03626617, + -0.009187162, + 0.00358172, + 0.03130738, + 0.0019198555, + 0.0101990225, + -0.025624877, + -0.003638679, + 0.022528984, + -0.013375328, + 0.0037525971, + -0.0045600757, + 0.011036656, + 0.022528984, + -0.01363667, + 0.037123907, + -0.025785703, + 0.004858273, + -0.01017892, + -0.005538431, + -0.012021713, + -0.00083763327, + 0.029109431, + 0.0007630839, + 0.020384643, + 0.035810497, + 0.027983652, + -0.012289755, + -0.015131007, + 0.0031913829, + 0.00848355, + -0.0030623872, + -0.016498026, + 0.016256787, + 0.019928971, + -0.013596463, + 0.016632047, + -0.00798097, + 0.029431082, + -0.0092072645, + 0.010473766, + 0.010353147, + -0.02236816, + 0.0056791534, + -0.053930182, + 0.023292907, + 0.005193326, + 0.018977419, + -0.012685118, + 0.037123907, + 0.02112176, + 0.032325942, + -0.00810829, + 0.016136168, + -0.012953161, + -0.011807279, + -0.0028496285, + -0.0005783858, + 0.03444348, + -0.005166522, + 0.0056724525, + 0.004154661, + 0.0010076729, + 0.024432087, + -0.007753134, + -0.011572741, + 0.00078402477, + -0.004111104, + -0.024177447, + 0.019017626, + -0.021403205, + 0.027742414, + 0.0327012, + 0.02187228, + 0.021537228, + 0.0018025868, + 0.014045435, + -0.013562958, + -0.01495678, + 0.014501107, + -0.01017892, + -0.0038531132, + 0.023453731, + -0.033666156, + 0.003085841, + -0.016605241, + -0.019580515, + -0.020947533, + -0.008597468, + 0.016270189, + -0.034148633, + 0.011492329, + 0.014192858, + -0.0033790127, + -0.033773374, + -0.028948605, + -0.013308317, + -0.011425318, + 0.027849631, + -0.010500571, + 0.01074851, + 0.00010899703, + -0.035730086, + -0.0031511763, + -0.0070629236, + 0.0074180802, + -0.041895065, + 0.018535148, + 0.022917647, + 0.008443343, + -0.012557798, + -0.03575689, + 0.01665885, + -0.0011483952, + -0.013234606, + -0.0036621327, + -0.026750656, + -0.00055535085, + -0.019098038, + -0.031226968, + -0.038169272, + 0.003281847, + -0.0016962073, + -0.0050291503, + 0.011445421, + -0.035542455, + -0.020076394, + -0.010292837, + 0.001948335, + 0.042029087, + 0.011137172, + -0.014621726, + 0.008818603, + -0.011579443, + 0.006530189, + 0.008691283, + 0.029752733, + -0.01991557, + -0.016605241, + 0.029002214, + 0.01149903, + 0.023413526, + 0.0010034847, + 0.010279436, + -0.010266033, + -0.026388798, + -0.090973675, + 0.015988745, + 0.026804265, + 0.007585607, + 0.0006826711, + -0.0219929, + 0.009957785, + -0.009012934, + 0.008141795, + 0.00849025, + -0.025343433, + 0.014192858, + -0.0069356035, + -0.016551634, + -0.032272335, + -0.010835624, + 0.011545937, + 0.0033086515, + 0.0074113794, + 0.01747638, + 0.0026301686, + 0.025383638, + 0.028680563, + -0.0072304504, + -0.022354757, + 0.000009966527, + -0.021322792, + 0.036239367, + -0.014755747, + -0.0073376675, + -0.0059672995, + -0.033773374, + -0.01232326, + 0.01659184, + -0.012624809, + -0.014246467, + 0.0035917715, + 0.020759903, + 0.0031277225, + 0.032325942, + -0.01614957, + 0.008778397, + 0.016310396, + 0.0015378947, + -0.010225827, + 0.01439389, + -0.0000051010556, + 0.002992026, + 0.02533003, + 0.0033203783, + 0.0011911145, + 0.020143405, + 0.0033220535, + -0.0050258, + 0.0014566443, + -0.025892919, + 0.013831001, + -0.006637406, + -0.006215239, + 0.0076727206, + 0.009173759, + 0.0076124114, + 0.023601156, + 0.010849026, + 0.005618844, + -0.013911413, + -0.005833278, + 0.010929439, + 0.027849631, + -0.022354757, + -0.039884746, + 0.023976415, + 0.004034042, + 0.014916574, + 0.015063996, + -0.0003350533, + 0.000020050846, + 0.0048917783, + -0.015827918, + 0.035783693, + 0.0075789057, + -0.010567581, + -0.03235275, + 0.01703411, + 0.023896001, + -0.019768145, + 0.0000081931, + -0.0039871344, + -0.0046739937, + 0.04449508, + -0.018829996, + -0.0013829325, + 0.008195404, + -0.001062119, + -0.005096161, + 0.031387795, + -0.0018310663, + -0.028734172, + 0.043262083, + 0.023078471, + 0.014568117, + 0.004117805, + 0.003876567, + -0.017704217, + -0.027474372, + 0.012631509, + -0.014434096, + -0.0064497762, + -0.002224754, + 0.022609398, + 0.0141124455, + 0.016377406, + -0.0017204988, + 0.025115596, + 0.0129866665, + -0.0076526175, + -0.00091469556, + -0.020706294, + -0.010889232, + 0.016377406, + 0.008758293, + 0.00515312, + 0.012055218, + -0.016444417, + -0.005367554, + 0.0009951083, + 0.010225827, + -0.024298066, + -0.0003149501, + 0.011358307, + 0.018401127, + 0.016766068, + -0.023735177, + -0.008979429, + -0.009079944, + -0.0037324938, + 0.0028211488, + 0.0018293911, + -0.038383707, + 0.022354757, + 0.019004224, + 0.0039938353, + -0.004278631, + -0.002697179, + 0.0152382245, + -0.0045466735, + 0.002638545, + -0.012658314, + -0.02533003, + 0.010346446, + -0.025933126, + -0.0059538973, + -0.01791865, + -0.014246467, + -0.012618108, + 0.009106749, + 0.006701066, + 0.006255445, + -0.0057729683, + 0.024847554, + -0.0074850908, + 0.025745496, + 0.014782552, + -0.023453731, + -0.0073778736, + 0.00993098, + -0.0039569796, + 0.011874289, + -0.014554716, + 0.021416608, + 0.000161035, + -0.016243385, + -0.019392885, + 0.02520941, + -0.01143872, + -0.026991894, + 0.00013747656, + -0.003538163, + 0.014125847, + -0.015988745, + 0.011666556, + -0.016189776, + -0.00792066, + 0.027688805, + -0.003926825, + 0.007826845, + -0.0019064533, + -0.012839243 + ] + }, + { + "object": "embedding", + "index": 6, + "embedding": [ + -0.0131454775, + -0.007023479, + -0.007137846, + -0.028793573, + -0.03425628, + 0.0073396703, + -0.032803144, + 0.013912409, + -0.007124391, + -0.025228014, + 0.000104275794, + -0.007595314, + 0.018890737, + -0.0022755668, + -0.0018584637, + 0.0096404655, + 0.019994043, + -0.006337277, + 0.004726048, + -0.005577073, + -0.044078387, + 0.001702891, + 0.012815831, + -0.005116241, + 0.0020535602, + -0.00840261, + 0.011147418, + -0.0054458873, + -0.010407397, + -0.012217086, + -0.007992235, + -0.008557342, + -0.004463677, + -0.010817773, + -0.0130109275, + -0.0073733074, + -0.00095698267, + -0.006098452, + 0.027246255, + -0.01677831, + 0.015917195, + -0.011066689, + 0.0026657602, + -0.01789507, + 0.008294971, + 0.0343101, + 0.00424167, + 0.020895522, + -0.008624617, + 0.0009553008, + -0.00075095386, + 0.056295473, + -0.024420718, + -0.011618341, + -0.018688913, + -0.0019139653, + -0.011584704, + 0.004816869, + -0.009034993, + -0.023653787, + -0.013737494, + -0.020020952, + -0.026721513, + 0.003582378, + 0.0043156724, + 0.008079692, + 0.0014716341, + 0.008079692, + 0.002578303, + 0.0019072378, + 0.020693699, + 0.017706702, + 0.0112550575, + 0.005775533, + 0.013461668, + -0.01710123, + -0.0072051208, + -0.002921404, + 0.012129629, + 0.011678888, + 0.01691286, + -0.023842156, + -0.024286168, + 0.029520141, + 0.04106448, + 0.021245351, + -0.010003748, + 0.04701156, + -0.009526098, + -0.009230089, + 0.001309334, + 0.01614593, + 0.0010965776, + 0.032534048, + -0.009660647, + -0.006313731, + -0.0038682956, + 0.03880405, + -0.01683213, + -0.0013900636, + 0.004460313, + 0.01183362, + -0.008469885, + -0.020518785, + -0.004039846, + -0.004167668, + -0.0129369255, + 0.0053517027, + 0.010508309, + 0.0006235524, + 0.02938559, + 0.026748423, + 0.022429386, + -0.047872677, + -0.010071023, + -0.018096896, + -0.0019358296, + -0.01813726, + -0.009647192, + -0.0047327755, + 0.024689816, + -0.0039187516, + -0.006414643, + -0.027663358, + 0.021164622, + 0.015580822, + -0.00594372, + -0.004779868, + 0.0035790142, + 0.0028877666, + 0.010999414, + 0.0112550575, + -0.000038788072, + -0.0018315538, + -0.034229368, + 0.013239662, + -0.026398594, + 0.014975349, + -0.029681599, + -0.009620283, + -0.00480005, + 0.015190628, + -0.032238036, + -0.0005697326, + 0.019576939, + 0.014719705, + 0.014127688, + -0.0027111706, + 0.021339536, + -0.01305802, + 0.013502033, + -0.03207658, + 0.01119451, + -0.0048673246, + 0.010858137, + 0.0038279307, + 0.007292578, + 0.023411596, + -0.009479006, + 0.009115722, + -0.004359401, + -0.015123353, + 0.0048101414, + -0.013286754, + 0.022617755, + 0.008624617, + 0.00739349, + 0.013044565, + 0.0025127102, + -0.007783683, + 0.008557342, + 0.022402477, + -0.02401707, + 0.02018241, + 0.032964606, + 0.01364331, + 0.0067510167, + -0.01903874, + -0.030569626, + -0.031134732, + -0.014612066, + 0.005476161, + 0.016119018, + 0.018352538, + -0.0049110535, + 0.016374663, + -0.0024925277, + -0.011187783, + 0.011853803, + -0.012930198, + 0.014558246, + 0.004463677, + 0.004103757, + -0.0125870975, + -0.6824346, + -0.027770998, + -0.01186053, + -0.011450155, + -0.011820165, + 0.025241468, + 0.014100778, + 0.0026489415, + -0.011389608, + -0.0132194795, + -0.0073800352, + 0.018554363, + 0.007595314, + 0.0053113378, + -0.012963835, + -0.0022335202, + 0.0064684628, + 0.016859042, + -0.0034747384, + 0.024864731, + -0.014961895, + 0.020720609, + 0.0075751315, + -0.004742867, + 0.012714919, + 0.006656832, + 0.0018197808, + -0.011954715, + -0.010952322, + 0.004921145, + -0.030650355, + 0.0035151034, + 0.0072185756, + -0.018904192, + 0.043970745, + 0.0144775165, + -0.019711489, + 0.01462552, + 0.012573642, + 0.03657053, + 0.015917195, + 0.0054257046, + 0.024676362, + -0.0050893314, + -0.010938867, + 0.010501581, + 0.013858589, + 0.0002537518, + 0.017303053, + -0.01949621, + -0.0076020416, + -0.03172675, + -0.017854707, + -0.01079759, + 0.007050389, + -0.003632834, + 0.01792198, + 0.006290185, + 0.007736591, + 0.014517881, + 0.0085909795, + 0.0049245083, + -0.02973542, + -0.014033503, + 0.0170205, + -0.008765894, + -0.015378998, + -0.0075145843, + 0.009384821, + 0.01358949, + 0.00038619884, + 0.017477969, + 0.0042248513, + -0.009613555, + 0.031296194, + 0.012149812, + 0.010030658, + 0.002450481, + 0.0040196637, + -0.0056073465, + 0.011766345, + -0.008860079, + -0.025308743, + 0.0060513597, + 0.037458554, + -0.024985826, + 0.0025244833, + -0.005758715, + 0.009021537, + 0.002909631, + 0.01903874, + 0.037862204, + -0.0052642454, + -0.011954715, + -0.022954129, + 0.02508001, + -0.01680522, + 0.0006550874, + 0.0201555, + -0.021218441, + 0.010602494, + -0.003266187, + -0.00032207766, + -0.005829353, + 0.007178211, + 0.022456296, + -0.017558698, + 0.015190628, + 0.014100778, + -0.022563936, + -0.009660647, + -0.0058259894, + -0.028820483, + -0.010030658, + -0.013132022, + -0.026358228, + 0.011685616, + -0.011187783, + 0.01745106, + -0.011322333, + 0.009748105, + -0.0151098985, + 0.022375567, + -0.005122969, + -0.010804318, + -0.0015313404, + -0.011699071, + -0.014329512, + 0.0045410427, + 0.0022402476, + -0.008227697, + 0.02976233, + 0.026842607, + -0.005499707, + 0.035251945, + 0.009458823, + -0.01130215, + -0.011732709, + -0.0056342566, + -0.028793573, + -0.013690402, + -0.0047966866, + 0.006949477, + -0.01568846, + -0.0065996484, + -0.03910006, + -0.013286754, + -0.015217538, + -0.01130215, + 0.014571701, + -0.006132089, + -0.013676947, + -0.025564387, + -0.009135905, + -0.0075011295, + -0.010467944, + 0.009674102, + -0.017303053, + -0.014316057, + -0.012196904, + 0.027905548, + 0.007709681, + -0.021352991, + -0.011403062, + -0.011154146, + -0.014046958, + 0.018446723, + 0.0028120826, + -0.013481851, + -0.015621186, + -0.0059100827, + 0.00023293866, + 0.0025648482, + 0.0011251695, + 0.020411145, + -0.010420851, + 0.013461668, + -0.0031097732, + -0.0031013638, + -0.0023478873, + -0.009956656, + -0.010817773, + -0.026923336, + -0.020855159, + 0.018783098, + -0.0074203997, + 0.015163718, + 0.016737947, + -0.019940222, + 0.0030727722, + 0.008503523, + 0.005516526, + 0.0010427579, + -0.0035420132, + -0.0060513597, + 0.012910016, + -0.0022654757, + -0.00003250735, + 0.0034848296, + 0.013468396, + 0.026075676, + 0.0067409254, + 0.014531336, + 0.028255375, + 0.0007866936, + -0.026210224, + -0.000914095, + -0.012903288, + 0.04830324, + 0.008046054, + 0.010111388, + -0.017383784, + -0.026936792, + 0.012775466, + -0.0061690905, + 0.033368252, + 0.011974897, + -0.0019005104, + -0.00808642, + -0.0031602292, + 0.013730767, + -0.01584992, + -0.006895657, + 0.018877283, + -0.027851727, + -0.0058461716, + 0.0052137896, + 0.023129044, + 0.0063843695, + -0.032507136, + -0.011820165, + 0.008046054, + -0.0014724751, + 0.016105564, + -0.006697197, + -0.0020064681, + 0.0010721906, + -0.010259393, + 0.03412173, + -0.0027548992, + 0.01917329, + 0.022308292, + 0.027824817, + -0.02146063, + -0.0172896, + -0.011059961, + 0.024030523, + 0.0036025604, + -0.012573642, + 0.009909564, + -0.019509664, + -0.0019795583, + -0.00085817295, + -0.011100326, + 0.017666338, + -0.028336106, + 0.011228148, + 0.007918233, + 0.0108312275, + 0.027932458, + 0.012842741, + -0.009795197, + 0.015123353, + -0.000015347041, + -0.017007045, + 0.020747518, + 0.010145025, + 0.008934081, + -0.009465551, + -0.012439093, + 0.011880713, + -0.000118887016, + -0.009721194, + 0.005015329, + 0.015136808, + -0.000084251056, + -0.010124843, + -0.009304091, + 0.013105112, + 0.029116493, + -0.01789507, + -0.021689365, + 0.0021141076, + 0.032910787, + -0.00962701, + -0.034686837, + -0.01481389, + 0.0020905614, + -0.0096001, + 0.0035487406, + -0.0001552574, + 0.03234568, + -0.004941327, + -0.0047159567, + -0.0045645884, + -0.0053416113, + 0.033475894, + -0.034283187, + -0.02154136, + 0.007090754, + 0.006054723, + -0.008368974, + -0.0035285582, + -0.025941126, + 0.04970255, + -0.0037606559, + -0.018971467, + 0.00011405165, + 0.0009670739, + -0.009620283, + -0.006629922, + 0.0003853579, + -0.012466002, + 0.013656765, + 0.0006336436, + 0.015177174, + -0.009331001, + 0.01478698, + 0.024716726, + -0.021608636, + -0.009526098, + -0.0069629317, + -0.021877734, + 0.011584704, + 0.096014455, + 0.020115137, + 0.022833034, + -0.00030084405, + 0.030677265, + 0.004904326, + -0.015634641, + -0.009801924, + 0.012008535, + 0.010481399, + -0.007649134, + -0.038050573, + 0.0012521504, + 0.01079759, + -0.012910016, + -0.0036765626, + -0.022927219, + -0.0065458287, + 0.021285716, + -0.011638524, + -0.0060849967, + -0.0024302986, + 0.0022637937, + 0.003468011, + 0.014208417, + -0.010461217, + 0.029331772, + 0.0075751315, + 0.011557794, + 0.010441034, + 0.0061455444, + 0.014181508, + 0.0076424065, + 0.011826893, + -0.0037202912, + -0.01130215, + 0.022644665, + -0.005092695, + 0.014221872, + -0.017625973, + 0.019106016, + 0.003834658, + 0.009028265, + -0.0023747971, + 0.0315922, + -0.025833486, + -0.012714919, + 0.016751401, + -0.0034646473, + -0.017464513, + 0.026519688, + 0.016024834, + -0.024003614, + -0.017356874, + -0.0019543301, + 0.011181056, + 0.0068250187, + -0.00026510438, + -0.0001514732, + 0.017114684, + -0.019765308, + -0.028712844, + 0.0039591165, + -0.01566155, + -0.012324726, + -0.028389925, + 0.002159518, + -0.011880713, + -0.013172387, + -0.025456747, + -0.0022419295, + -0.019859493, + -0.007548222, + 0.008927354, + 0.018043075, + -0.0060244496, + 0.020626424, + 0.014692795, + 0.013690402, + 0.027797908, + 0.0032207766, + -0.014221872, + -0.008490068, + -0.012647645, + -0.01584992, + 0.01693977, + 0.024743635, + -0.017733611, + -0.010737043, + 0.024649452, + 0.016253568, + 0.0005579596, + 0.015473182, + -0.007871141, + -0.012788922, + 0.0016473893, + 0.007036934, + 0.021675909, + -0.018769642, + -0.009546281, + 0.04098375, + -0.009822107, + 0.003126592, + -0.0014968622, + 0.025779666, + -0.008994628, + 0.005193607, + 0.0051633334, + -0.014168053, + -0.023209773, + 0.044751134, + -0.031242372, + 0.025187649, + 0.025201105, + 0.0051263324, + 0.018702367, + -0.004726048, + 0.024743635, + -0.018769642, + 0.0058058067, + -0.01802962, + -0.03248023, + 0.0063070036, + 0.037216365, + -0.012277634, + 0.015405907, + 0.022617755, + -0.014006593, + -0.0020047862, + -0.008348791, + 0.021070438, + 0.028416835, + -0.014046958, + -0.012136357, + -0.00019478129, + -0.0039927536, + -0.0050489665, + 0.011557794, + -0.019590395, + -0.005082604, + -0.010723588, + -0.00507924, + 0.01704741, + -0.010071023, + -0.025672028, + -0.020572605, + -0.00022473956, + -0.0038582042, + 0.0015616141, + 0.03425628, + -0.0029819512, + 0.012815831, + -0.0046184086, + 0.00070680486, + -0.037862204, + -0.010649585, + 0.0037942934, + -0.034283187, + 0.002781809, + 0.021366445, + 0.027905548, + -0.0016145929, + 0.019711489, + -0.0048875073, + -0.006771199, + -0.00039986402, + 0.0074203997, + -0.00041079617, + -0.018635092, + 0.010441034, + 0.01922711, + 0.011470337, + -0.010615949, + -0.005778897, + -0.015553911, + 0.012042172, + 0.0047495943, + -0.008220969, + -0.0033418708, + -0.025228014, + -0.018460179, + -0.017114684, + 0.014571701, + 0.0043257633, + -0.0040196637, + 0.0049245083, + 0.029224131, + -0.004534315, + 0.033314433, + -0.005139787, + 0.014181508, + -0.0036799263, + 0.005957175, + 0.019240566, + -0.0011066688, + -0.012062354, + 0.002120835, + 0.005183516, + 0.012190176, + 0.038238943, + 0.01590374, + -0.0019795583, + -0.018608183, + 0.023048313, + -0.0031854573, + 0.018123806, + 0.0056208014, + -0.0056611663, + 0.01843327, + -0.021285716, + -0.0025766212, + -0.016213203, + -0.023236683, + -0.01933475, + -0.011295423, + 0.011793256, + 0.0017222324, + 0.024339987, + -0.011059961, + -0.009048448, + -0.010676496, + 0.009162814, + 0.013939318, + 0.0007496925, + 0.022792669, + 0.023707606, + -0.012082537, + -0.016576488, + -0.010911957, + 0.009297364, + -0.021837369, + 0.012230542, + 0.035870872, + -0.005462706, + -0.00909554, + -0.0059134467, + 0.003239277, + -0.0001609337, + -0.014235327, + 0.026506234, + 0.012546732, + 0.0048202327, + -0.0028793574, + 0.0012672872, + 0.002388252, + 0.026519688, + -0.026869517, + -0.0116721615, + -0.02736735, + -0.006744289, + -0.0014977031, + 0.005640984, + -0.022052648, + 0.03883096, + -0.0025093465, + -0.010286302, + 0.004265216, + -0.019792218, + -0.0004406493, + -0.0035016483, + 0.008584253, + 0.0039187516, + -0.004140758, + -0.008624617, + -0.0015128399, + -0.0059672664, + -0.006172454, + 0.018998377, + -0.015096444, + 0.021070438, + -0.010932139, + -0.005893264, + 0.0008152853, + -0.025833486, + 0.006566011, + 0.018917646, + 0.013515488, + -0.0024656178, + -0.015230993, + -0.010555401, + 0.0015355451, + 0.009061903, + -0.010609221, + 0.008947535, + -0.013071475, + -0.009916292, + -0.00256653, + -0.021137713, + 0.018796552, + -0.0023344322, + -0.020101681, + -0.013125295, + -0.008436248, + 0.029116493, + -0.015015714, + 0.009976839, + 0.021985373, + 0.012990746, + -0.0046520457, + 0.011160874, + 0.0006151431, + -0.0057856245, + -0.011140691, + 0.0047933226, + -0.008712074, + -0.0099902935, + 0.028955033, + -0.027636448, + -0.002921404, + -0.0034141913, + 0.009337729, + 0.0067812903, + 0.0065021003, + -0.0019021922, + 0.032614775, + -0.0035588318, + 0.0018567818, + -0.0031669566, + -0.011477064, + 0.020464964, + -0.0068889298, + -0.002312568, + 0.006730834, + -0.004369492, + 0.009727922, + 0.017706702, + -0.012876378, + -0.0044704042, + -0.016415028, + -0.019698033, + -0.0034326918, + 0.015594277, + -0.016065199, + -0.025577843, + -0.012883106, + 0.00928391, + -0.0071042087, + 0.02962778, + -0.015944105, + -0.0077029536, + -0.0011739436, + 0.003177048, + 0.010387214, + -0.0055266167, + -0.006592921, + -0.032641686, + -0.015836466, + 0.0037438374, + -0.029816149, + -0.006710652, + -0.01829872, + 0.023546146, + 0.0071983933, + -0.026465869, + -0.005116241, + 0.01486771, + -0.017975802, + 0.015352087, + 0.00008703665, + 0.01707432, + 0.020559149, + 0.008712074, + 0.015500092, + 0.022779215, + 0.009801924, + 0.021164622, + -0.03923461, + -0.012560187, + 0.018635092, + -0.015163718, + 0.0077164085, + 0.006340641, + -0.030246707, + -0.0015860011, + 0.01677831, + 0.010938867, + 0.0038178395, + -0.0014884528, + -0.024703272, + -0.00784423, + -0.02704443, + -0.014141142, + -0.02499928, + 0.012614007, + -0.00073623756, + -0.019267475, + -0.0015304995, + 0.010595766, + -0.017868161, + -0.012614007, + -0.005462706, + -0.0030626808, + 0.00079215964, + 0.0024336623, + -0.0018180988, + 0.016078655, + 0.017639427, + -0.050913494, + -0.0043762196, + 0.004080211, + 0.0028154464, + 0.0015473182, + -0.007857685, + -0.010030658, + -0.007063844, + -0.004964873, + -0.025968036, + -0.009337729, + -0.0027616266, + -0.017545242, + 0.0024740272, + -0.028847393, + -0.0017045728, + -0.03401409, + 0.0032813237, + -0.026479324, + 0.0007740796, + -0.012143084, + 0.011066689, + 0.01481389, + -0.027582629, + -0.017787432, + -0.0137105845, + -0.01590374, + -0.016334299, + 0.0070571164, + 0.007265668, + -0.014423696, + -0.016267024, + 0.00970774, + -0.025362564, + -0.03396027, + 0.00035130008, + 0.0040331185, + -0.0065727388, + 0.004127303, + 0.23917502, + -0.022119923, + 0.004927872, + 0.021527905, + 0.0017693248, + 0.015056078, + 0.0343101, + -0.018608183, + -0.010737043, + -0.00068998616, + -0.019603848, + 0.010528491, + -0.005398795, + 0.007904777, + -0.013912409, + -0.014881165, + -0.035817053, + -0.037593104, + -0.019092562, + -0.013246389, + 0.0009098904, + -0.008839896, + -0.006158999, + -0.008079692, + 0.028524475, + 0.0099902935, + -0.015163718, + -0.014046958, + 0.020908978, + 0.022079557, + 0.0055333446, + 0.0032527319, + -0.0054088864, + 0.03662435, + 0.00041668268, + -0.006438189, + -0.0123045435, + -0.027609538, + 0.007050389, + 0.012943653, + -0.025120374, + -0.004100393, + -0.02390943, + -0.008153694, + -0.010178663, + 0.016240114, + -0.0063843695, + -0.0023478873, + 0.019846037, + 0.014100778, + -0.019671123, + -0.010676496, + 0.03891169, + 0.031672932, + 0.0010461217, + -0.012398728, + 0.010017203, + 0.01486771, + 0.009230089, + -0.010017203, + -0.018648548, + 0.01712814, + 0.00797878, + 0.019321295, + -0.01710123, + -0.0034579197, + -0.044159114, + 0.022119923, + 0.00068115635, + 0.005462706, + 0.007232031, + -0.013602945, + -0.009808652, + -0.01313875, + -0.032318767, + -0.014585156, + 0.023330867, + 0.010609221, + 0.00792496, + 0.035440315, + -0.0043728556, + 0.0065727388, + 0.016119018, + -0.009734649, + -0.0036361977, + -0.02148754, + 0.023425052, + -0.0016532758, + -0.008476613, + -0.0063473685, + 0.0029129947, + 0.004204669, + -0.021649, + -0.013925863, + 0.024864731, + 0.013313664, + 0.0054862523, + 0.03406791, + 0.001156284, + 0.0027246254, + -0.024434172, + 0.031107822, + 0.000033584794, + -0.010992686, + -0.015271358, + 0.00368329, + 0.012614007, + -0.0041104844, + -0.010488126, + -0.012640917, + -0.009815379, + -0.03172675, + -0.00281881, + -0.0016448665, + 0.006394461, + 0.01031994, + 0.012990746, + -0.0030794996, + 0.0033855995, + -0.012741829, + -0.006895657, + 0.0025143921, + -0.0054896157, + 0.0096404655, + -0.0048706885, + 0.0001105828, + -0.0038043845, + 0.016132474, + 0.00092334533, + -0.03686654, + 0.014329512, + -0.014746615, + 0.017989255, + -0.004164304, + -0.034659926, + 0.04109139, + 0.0022856581, + -0.01571537, + -0.019819127, + -0.0067779263, + 0.015029169, + -0.015096444, + 0.0066097397, + -0.0019896494, + -0.024905095, + -0.006138817, + 0.01925402, + 0.000007647242, + -0.0005571186, + -0.008617889, + -0.0030895907, + -0.011584704, + -0.0065391012, + -0.041925594, + 0.022981038, + -0.019294385, + -0.0076625887, + -0.026627328, + -0.017733611, + 0.017881617, + -0.044051476, + -0.0055568907, + 0.021931553, + -0.014692795, + -0.020962797, + 0.013925863, + -0.17523715, + 0.02031696, + 0.019119471, + -0.020088227, + 0.0010208937, + 0.0092906365, + 0.010447761, + 0.0028675843, + 0.0021443812, + 0.0018887373, + 0.012533277, + -0.0027347167, + -0.024461083, + 0.0055568907, + 0.0012311271, + -0.024784, + -0.0048740525, + -0.00027057045, + 0.0037101998, + -0.007090754, + 0.0117461635, + -0.036139973, + 0.010030658, + -0.023317412, + -0.0060244496, + 0.010938867, + -0.013562581, + 0.021635545, + -0.017168505, + -0.01598447, + -0.0063440045, + -0.0011974897, + 0.028820483, + 0.0030172705, + 0.0072723953, + 0.010017203, + -0.009532825, + -0.009230089, + -0.006350732, + 0.030784905, + 0.012291089, + 0.016253568, + -0.003811112, + 0.008409338, + 0.005038875, + 0.029089581, + 0.025281833, + 0.0006916681, + 0.007911505, + 0.004507405, + 0.028147737, + -0.01819108, + 0.0026523052, + -0.008812986, + -0.009775015, + -0.0043661282, + 0.0012269224, + 0.017370328, + 0.0007459083, + -0.014800435, + -0.034740657, + -0.029869968, + -0.007837503, + -0.010447761, + 0.0036092878, + -0.027582629, + -0.019698033, + 0.0075549493, + -0.0135693075, + 0.0100642955, + -0.016253568, + -0.033583533, + -0.0055871643, + -0.0037572922, + 0.0058259894, + 0.014100778, + -0.0054929797, + 0.005321429, + 0.00027288301, + -0.00070554344, + -0.014316057, + 0.030219797, + -0.0029264495, + -0.005536708, + -0.0049312357, + 0.0045645884, + -0.005015329, + 0.020586058, + -0.009849017, + -0.017383784, + 0.0044502215, + -0.02047842, + -0.006428098, + -0.0012101037, + 0.011342515, + 0.022927219, + -0.0052507906, + 0.022671575, + -0.005859627, + -0.0067846538, + 0.0068014725, + -0.0071042087, + -0.015863376, + 0.022631211, + 0.028766664, + 0.030327436, + 0.01481389, + -0.0040499372, + 0.0057217134, + 0.014437151, + -0.024380352, + -0.025174195, + 0.015190628, + 0.035063576, + -0.020411145, + 0.0042853984, + 0.029358681, + -0.014612066, + 0.016482303, + -0.0029634507, + 0.057264227, + -0.0015725462, + 0.005499707, + 0.015325177, + -0.015607731, + -0.001993013, + -0.09219325, + -0.022456296, + 0.022254473, + 0.009297364, + -0.006798109, + 0.017410694, + -0.0016179567, + -0.0022133377, + 0.0012656053, + 0.013105112, + -0.010656313, + -0.003060999, + 0.026761876, + -0.018756187, + 0.04327109, + 0.0029029034, + -0.017612517, + -0.0064617353, + -0.020693699, + 0.023115588, + -0.0070436615, + 0.0045780437, + -0.0024992554, + -0.008059509, + -0.0021141076, + -0.0038481131, + -0.019846037, + 0.018554363, + 0.007945143, + 0.020868612, + 0.0007084867, + -0.00006837843, + 0.014033503, + -0.006418007, + -0.0012000125, + 0.012802376, + -0.014221872, + 0.015378998, + 0.024313077, + -0.015096444, + -0.014854254, + 0.0013042883, + 0.0204246, + -0.007783683, + -0.005577073, + -0.00027162163, + -0.0058461716, + 0.006969659, + 0.006387733, + -0.013858589, + -0.013367483, + -0.008974445, + 0.001727278, + -0.0038481131, + 0.0042853984, + -0.010723588, + 0.027770998, + 0.016159384, + -0.035063576, + -0.010925412, + -0.0032964605, + 0.007124391, + -0.021608636, + 0.016051745, + 0.017558698, + 0.0012075809, + -0.02992379, + -0.00017806773, + 0.0039523887, + -0.028981943, + -0.012842741, + 0.0074809473, + -0.007353125, + -0.007736591, + -0.01568846, + 0.00011720515, + -0.0069629317, + 0.009196452, + 0.006175818, + -0.0023462053, + -0.035225034, + -0.023155954, + -0.0025446657, + -0.02641205, + 0.02595458, + 0.035386495, + 0.0014623839, + -0.015405907, + 0.016374663, + -0.017222324, + -0.0121699935, + 0.010387214, + 0.021191532, + -0.022981038, + -0.018123806, + 0.021352991, + 0.022994494, + -0.004524224, + -0.017666338, + 0.024609087, + -0.024299623, + 0.0057250774, + -0.08847969, + 0.011006142, + 0.009189725, + -0.00853716, + 0.0039086603, + -0.028120827, + 0.017706702, + -0.0034511923, + 0.012768739, + 0.0062060915, + -0.026802242, + -0.0137778595, + 0.008187331, + 0.0024185255, + -0.03643598, + -0.026990611, + 0.022227563, + 0.01590374, + 0.016576488, + 0.017773977, + -0.013347302, + 0.0047933226, + -0.0010007112, + 0.0072051208, + -0.021016618, + 0.006734198, + 0.009055175, + 0.017208869, + -0.004480495, + 0.0034781022, + 0.029035762, + -0.03654362, + -0.01077068, + 0.015419362, + -0.011981625, + -0.03215731, + -0.015271358, + 0.030354347, + -0.0047529577, + 0.044239845, + -0.0046049533, + -0.006172454, + 0.028578294, + 0.005001874, + -0.005751987, + -0.021420266, + 0.016576488, + 0.011692343, + 0.026654238, + 0.008826441, + -0.003912024, + 0.026290955, + -0.016697582, + 0.0027919002, + -0.01617284, + -0.011927805, + 0.013239662, + 0.016267024, + -0.0005323111, + -0.023734516, + 0.024891641, + -0.00015820067, + -0.004742867, + 0.019711489, + 0.03624761, + -0.00006328027, + -0.015325177, + -0.0032039578, + -0.00022852376, + -0.01462552, + -0.024757091, + 0.0038043845, + 0.029331772, + 0.0055299806, + 0.010642858, + -0.00077702285, + 0.011174329, + 0.0024084344, + -0.020088227, + 0.017181959, + 0.01856782, + -0.014100778, + -0.032883875, + 0.02606222, + 0.032722417, + 0.0004662978, + -0.0058663543, + -0.006552556, + -0.00731276, + 0.03248023, + 0.0101988455, + 0.015971014, + 0.0021763367, + -0.011288695, + 0.011470337, + 0.017060865, + -0.00092418626, + -0.03584396, + -0.006996569, + 0.03673199, + -0.0008644799, + -0.004379583, + -0.008705347, + -0.026802242, + -0.04087611, + 0.008638072, + -0.015446272, + -0.03178057, + 0.008335336, + 0.02595458, + 0.010461217, + -0.0017390511, + -0.00077954563, + 0.018984921, + 0.0014321102, + 0.0042080325, + 0.010367032, + -0.018608183, + -0.016441938, + 0.0003891421, + 0.01566155, + 0.03616688, + 0.00851025, + -0.026317865, + 0.02063988, + -0.0029701781, + 0.013979684, + -0.019778762, + 0.0040331185, + 0.013925863, + 0.006606376, + -0.018608183, + -0.008066237, + -0.021649, + -0.0040331185, + -0.0031854573, + -0.016509213, + 0.018258354, + -0.018527454, + 0.037377827, + 0.010145025, + -0.028551385, + -0.005338248, + 0.0074136723, + 0.023317412, + 0.0075751315, + 0.03624761, + -0.02273885, + -0.0121699935, + 0.02497237, + 0.000634905, + 0.0033469165, + -0.0294125, + -0.023223227, + 0.0053819763, + -0.018608183, + -0.0026321227, + -0.01726269, + -0.007783683, + 0.03802366, + -0.0033485985, + 0.0053819763, + 0.0104141245, + -0.024649452, + -0.007063844, + 0.023317412, + 0.015056078, + 0.0021948372, + -0.021770094, + 0.014437151, + 0.010367032, + -0.0074002175, + -0.025376018, + 0.022644665, + 0.0027885365, + -0.01699359, + -0.014840799, + 0.030300526, + -0.0006176659, + -0.028928123, + 0.023815244, + -0.02957396, + -0.033395164, + 0.025066555, + -0.015917195, + -0.022510115, + -0.02404398, + -0.01063613 + ] + }, + { + "object": "embedding", + "index": 7, + "embedding": [ + 0.024549589, + -0.006144328, + -0.0028832944, + -0.013314444, + -0.0069968407, + 0.013993681, + -0.026268475, + -0.008857813, + -0.020072164, + -0.013064927, + 0.022997046, + 0.018325554, + 0.0039887885, + -0.021319743, + -0.0155808795, + -0.009024157, + 0.04932097, + -0.0061477935, + 0.014118439, + -0.011817348, + -0.004775456, + -0.005073489, + 0.0033060852, + 0.0011115585, + 0.008712262, + -0.009516258, + 0.008746917, + -0.013238203, + -0.0026129854, + -0.013737234, + -0.003250637, + -0.0150541235, + -0.025783306, + -0.0341005, + -0.020987056, + -0.01412537, + -0.01635715, + -0.0047823875, + 0.0049002143, + -0.0023201508, + 0.012392621, + -0.009620222, + -0.004837835, + 0.0061270003, + -0.009661809, + 0.038453165, + -0.0066468255, + -0.013245134, + -0.025603099, + 0.0003155769, + 0.02205443, + 0.0023704006, + -0.020113751, + -0.02108409, + -0.026074408, + -0.026254613, + -0.018256243, + 0.03276975, + 0.0028763635, + -0.018588932, + -0.0022144532, + -0.0104658045, + 0.0045952504, + 0.013210478, + 0.0078112325, + -0.01461054, + -0.009620222, + 0.005371522, + -0.017064113, + -0.0048828865, + 0.011172766, + 0.005461625, + 0.0011860667, + -0.02136133, + 0.022484152, + -0.0065393946, + -0.0055967793, + 0.0025783305, + -0.01183121, + 0.005752727, + 0.026434818, + -0.014305576, + -0.007617165, + 0.021444501, + -0.0032610337, + 0.0035937214, + -0.005260626, + 0.02991418, + -0.012344104, + 0.007825094, + 0.015123433, + 0.019046377, + -0.016066048, + -0.0027931915, + -0.031910308, + -0.0038848233, + -0.011706453, + 0.04502375, + 0.016897768, + -0.0039160126, + 0.014035267, + 0.006414637, + -0.022373255, + -0.022109877, + -0.006972582, + -0.0012137907, + -0.00049383345, + 0.0022387118, + 0.008365712, + 0.010382632, + -0.0013385486, + 0.033296507, + 0.01935134, + -0.05838671, + 0.00013656229, + -0.040144328, + -0.010410356, + 0.0024812967, + -0.011644074, + -0.036484763, + 0.023149528, + 0.033989605, + 0.010548976, + 0.0018107228, + 0.027973501, + -0.0084072985, + -0.010590562, + -0.03493222, + 0.0013082256, + 0.01926817, + 0.01092325, + 0.011789625, + 0.029110184, + 0.014915504, + -0.0037947204, + 0.005943329, + -0.027848743, + 0.013155031, + -0.022345532, + -0.015622465, + -0.007894404, + 0.03166079, + -0.020127613, + 0.0046160435, + 0.011054939, + 0.013064927, + 0.005874019, + 0.012697585, + 0.017868107, + -0.0040061157, + 0.03263113, + -0.011914383, + 0.007021099, + -0.0015586078, + 0.005655693, + 0.025007034, + -0.004896749, + 0.031078586, + 0.005558659, + 0.0073329937, + 0.005246764, + 0.006525533, + 0.012725309, + 0.0008650749, + 0.019947406, + 0.002574865, + 0.0043006833, + 0.02922108, + 0.007346856, + -0.010514321, + 0.0050076446, + 0.023856489, + -0.034849048, + 0.018769138, + 0.006986444, + 0.03590256, + 0.016856182, + -0.013681786, + -0.026753645, + -0.0056348997, + -0.00897564, + 0.014776884, + 0.020432577, + 0.01996127, + -0.01447192, + 0.022151463, + 0.022802977, + -0.0017474773, + -0.008116197, + -0.01962858, + -0.0022560393, + 0.0153175015, + 0.02999735, + -0.014291714, + -0.66404486, + -0.0057042097, + -0.010278667, + 0.011359903, + 0.0086984, + 0.016523495, + 0.010847009, + 0.013064927, + -0.019531546, + -0.013155031, + -0.006109673, + -0.012572827, + -0.004751198, + -0.000104181534, + -0.0065844464, + -0.023468353, + 0.005063093, + -0.01718887, + 0.009446948, + 0.017216595, + 0.0065324637, + 0.013300582, + 0.007755785, + -0.0040234434, + 0.00036907554, + 0.011477729, + 0.012468862, + -0.023343595, + -0.003002854, + 0.012115381, + -0.02247029, + 0.033712365, + -0.023204975, + -0.02894384, + 0.013016411, + 0.011456937, + -0.010313322, + 0.038591787, + 0.024826828, + 0.050651718, + -0.0024067883, + 0.005867088, + 0.010874732, + 0.0046437676, + -0.017507697, + -0.011117318, + 0.027266538, + -0.014291714, + 0.0006905005, + 0.0030704313, + 0.01064601, + -0.040809706, + -0.00018410459, + 0.013758027, + 0.03069045, + 0.0009781368, + 0.03673428, + 0.009211293, + 0.0022543066, + 0.008920192, + 0.0025384773, + -0.027807156, + -0.003569463, + -0.0084696775, + -0.006882479, + 0.0020637042, + -0.0155808795, + -0.011297524, + -0.0020637042, + -0.019739477, + -0.011630211, + 0.03437774, + -0.018006727, + -0.006702273, + 0.0109994905, + 0.0060576904, + 0.011678728, + -0.010119255, + -0.014929365, + -0.0026112527, + -0.021278158, + -0.01732749, + -0.034571808, + 0.009571706, + 0.007076547, + -0.01691163, + -0.031300377, + 0.017590867, + 0.0293597, + -0.015539293, + 0.016897768, + 0.021735603, + 0.009828152, + -0.0075686476, + -0.0016062583, + 0.0058636228, + -0.007880542, + -0.014028336, + 0.0028226483, + -0.0059052086, + 0.010174702, + -0.004924473, + 0.0062725516, + 0.010410356, + 0.02894384, + -0.002160738, + -0.016246255, + 0.020765264, + 0.025797168, + -0.013536235, + -0.0020844971, + -0.012004485, + -0.01940679, + -0.006546326, + -0.0024691673, + -0.028777495, + 0.023981247, + -0.0029370096, + 0.032326166, + -0.0023149527, + 0.008656814, + -0.014804607, + 0.010611355, + -0.021042503, + 0.0034187138, + 0.02366242, + 0.0004886352, + -0.01774335, + -0.0007715065, + 0.008372643, + 0.0007702069, + 0.016371014, + 0.0069829784, + -0.010687596, + -0.0006029967, + 0.012018347, + 0.020155337, + -0.011560901, + 0.012441138, + -0.008656814, + -0.01663439, + -0.013771889, + -0.01002222, + 0.004914076, + -0.006764652, + -0.034072775, + -0.014097646, + -0.009446948, + -0.035375804, + -0.00031406077, + -0.0009971971, + 0.011886658, + -0.01642646, + 0.013695648, + 0.010237081, + -0.011581695, + 0.016759148, + -0.014499644, + -0.029831007, + -0.0019285496, + 0.015636327, + -0.0038986853, + -0.012565896, + -0.00078017026, + 0.0029768627, + -0.0051947813, + 0.0058705537, + 0.019365203, + 0.004775456, + -0.037760068, + 0.01231638, + -0.013071858, + -0.01454123, + 0.021042503, + 0.006511671, + 0.009578637, + 0.013203547, + -0.007956783, + -0.002713485, + 0.008733055, + 0.019794924, + -0.017632455, + -0.02852798, + -0.0075270617, + 0.010555907, + -0.005378453, + 0.011505454, + 0.017798798, + -0.02380104, + 0.011713384, + 0.0137233725, + 0.010521252, + -0.010250943, + -0.003437774, + -0.0049903174, + 0.0011427479, + 0.00028265468, + 0.021319743, + -0.011983693, + 0.03193803, + 0.020072164, + 0.0014355825, + 0.02156926, + 0.0067854454, + 0.018783, + -0.039229438, + -0.010292529, + -0.007838957, + 0.03179941, + 0.019254306, + 0.00025428092, + -0.019808786, + -0.015081847, + 0.0009486801, + -0.000596932, + 0.02037713, + -0.0029959232, + 0.0058948123, + -0.004584854, + -0.0042209765, + 0.016509634, + -0.012011416, + -0.015830396, + 0.012940169, + -0.020501886, + 0.0144580575, + 0.029831007, + 0.03451636, + 0.012891653, + -0.035569873, + -0.019171136, + 0.008691469, + -0.005960657, + -0.003912547, + -0.0027308124, + -0.0006081949, + 0.023191113, + -0.02330201, + 0.01551157, + 0.009550912, + 0.033241056, + 0.017798798, + 0.026351647, + -0.008199369, + -0.00897564, + -0.022400979, + 0.0058151055, + 0.012718378, + -0.0095370505, + 0.01488778, + -0.011935175, + 0.015969016, + 0.008019162, + 0.01260055, + 0.0018211192, + 0.0033355418, + 0.019794924, + 0.007173581, + 0.018450312, + 0.02525655, + -0.008871675, + -0.011318317, + -0.0052710227, + 0.013425339, + 0.00077627157, + -0.008441953, + 0.007242891, + -0.028417084, + -0.016925493, + -0.019101825, + -0.014763022, + -0.010244012, + 0.024799105, + -0.004896749, + -0.003957599, + -0.02999735, + -0.01635715, + -0.008317195, + 0.0023028234, + 0.0029647336, + -0.017369077, + -0.045633677, + 0.003624911, + 0.021056365, + -0.01134604, + -0.010680665, + -0.023884213, + -0.0038189788, + -0.0040996843, + 0.0023738663, + 0.0056660892, + 0.020862298, + -0.011124249, + -0.004307614, + 0.009641016, + -0.028236877, + 0.032326166, + -0.011713384, + 0.002968199, + -0.0034412395, + -0.0065775155, + -0.02357925, + -0.0079429215, + -0.027141782, + 0.027918052, + 0.036512487, + -0.018796861, + -0.04216818, + -0.02400897, + -0.026393233, + 0.007845888, + 0.0068027726, + 0.0016487107, + 0.005142799, + -0.00723596, + -0.007915198, + -0.012642137, + -0.0012510448, + 0.032464787, + 0.0090726735, + -0.02073754, + -0.02407828, + -0.036318418, + -0.01064601, + 0.10180247, + 0.03263113, + 0.0059537254, + 0.007270615, + -0.004165529, + 0.007388442, + -0.008642952, + -0.0019285496, + 0.021804914, + 0.0007793039, + 0.012787688, + 0.01190052, + 0.009308328, + 0.0040303743, + 0.012954032, + 0.011401488, + -0.014527367, + -0.033435125, + -0.0033961881, + -0.010146978, + -0.0069344616, + -0.01990582, + -0.013508512, + 0.041585978, + -0.013792682, + 0.0012822343, + 0.021832637, + 0.023094079, + 0.0012250536, + -0.025658548, + -0.014236266, + 0.008005301, + -0.00995291, + 0.003860565, + -0.022997046, + 0.00967567, + 0.025298135, + 0.0008516461, + 0.019642442, + 0.0016209867, + 0.013155031, + 0.014596677, + -0.005343798, + -0.0053195395, + 0.027945776, + -0.0026667006, + -0.017979003, + 0.012489655, + -0.002444909, + -0.02366242, + 0.030939966, + -0.008039955, + -0.03598573, + -0.0012302519, + 0.0023218838, + 0.013023342, + 0.02080685, + 0.0056660892, + -0.023260422, + 0.001045714, + -0.001802059, + -0.035514425, + 0.007818163, + -0.01071532, + -0.010840078, + -0.03346285, + 0.007242891, + -0.0065671187, + -0.03199348, + -0.0011748038, + 0.0046056467, + -0.023981247, + -0.012143105, + 0.016343288, + 0.004969524, + -0.006206707, + 0.02567241, + -0.012753033, + -0.021333605, + 0.019600857, + -0.021181123, + -0.016176945, + -0.0052329022, + -0.008601367, + -0.021139538, + 0.03437774, + 0.006123535, + -0.01822852, + -0.014970952, + 0.011637143, + 0.026102131, + -0.01642646, + 0.007326063, + -0.0018332484, + -0.016246255, + -0.0017700031, + 0.016828459, + 0.019517684, + -0.022525737, + -0.019642442, + 0.034904495, + -0.029831007, + -0.017424524, + -0.008296402, + 0.029331975, + 0.019157274, + 0.00608888, + -0.0068027726, + -0.017369077, + 0.0017301498, + 0.03742738, + -0.019988993, + -0.00855978, + 0.008733055, + -0.002181531, + 0.014555092, + -0.014305576, + 0.019697892, + 0.015497707, + -0.035514425, + -0.023856489, + -0.00904495, + 0.0023010906, + 0.037676893, + -0.005052696, + -0.008289471, + -0.0018869637, + -0.011082663, + 0.009377638, + -0.00290582, + 0.0047962493, + 0.0347936, + 0.0077904398, + -0.012364897, + -0.024535727, + 0.0086706765, + -0.012856998, + 0.009100398, + -0.009211293, + -0.011644074, + -0.012545103, + 0.009051881, + -0.005364591, + -0.0059537254, + -0.023704007, + -0.04183549, + 0.015386811, + -0.013543166, + -0.0147214355, + 0.021208849, + -0.011228214, + 0.015816534, + -0.0047789216, + 0.016163083, + -0.03897992, + -0.022345532, + -0.007908267, + -0.005295281, + 0.0054928144, + 0.023066355, + 0.028472532, + -0.0062240344, + 0.003562532, + -0.0013342168, + 0.0066191014, + 0.003992254, + 0.027252676, + -0.0055136075, + -0.014707574, + 0.023676282, + 0.011997554, + -0.004182856, + -0.015691776, + -0.00038142139, + -0.012863928, + 0.015705638, + 0.020418715, + -0.01649577, + -0.0056452965, + -0.020307818, + -0.010361839, + -0.009966772, + -0.035514425, + 0.002479564, + -0.0061547244, + -0.008504332, + 0.025353584, + 0.0025020896, + 0.005101213, + -0.014596677, + 0.0327143, + -0.0045536645, + 0.00046914179, + 0.020058302, + 0.0014052595, + 0.0046576294, + 0.0047096116, + -0.0016556417, + -0.005122006, + 0.013889716, + 0.012489655, + -0.008913261, + -0.015123433, + -0.0011626746, + 0.008379574, + 0.020224646, + 0.010535114, + -0.013619407, + 0.019171136, + -0.025062481, + -0.011657936, + -0.010535114, + -0.013813475, + -0.018076038, + -0.018394863, + 0.023426767, + -0.029692387, + 0.017979003, + -0.013064927, + -0.03124493, + 0.0075339926, + 0.00883702, + 0.017105699, + 0.004217511, + 0.025020896, + 0.018020589, + 0.00018702859, + -0.014638264, + 0.017147284, + 0.006310672, + -0.023898074, + 0.028555704, + 0.017687902, + -0.0035937214, + -0.012170829, + -0.009516258, + 0.004363062, + -0.018810723, + -0.0033736622, + 0.03590256, + 0.017992865, + 0.00876771, + -0.0078112325, + -0.009141983, + -0.01781266, + 0.028583428, + -0.02219305, + -0.00995291, + -0.0096687395, + -0.02330201, + -0.012399552, + 0.018672103, + -0.02219305, + 0.004706146, + 0.007845888, + -0.021319743, + 0.011124249, + -0.018519621, + -0.013570891, + 0.011373765, + 0.016412599, + 0.017272042, + -0.027613088, + -0.0058151055, + 0.0076379576, + 0.0058497605, + -0.013459994, + -0.006615636, + -0.008053818, + 0.028500255, + -0.007478545, + 0.0007112935, + 0.0098836, + -0.02032168, + 0.03046866, + -0.0027931915, + -0.011852004, + -0.01892162, + -0.0068201004, + -0.01836714, + 0.0045536645, + 0.020224646, + -0.008199369, + -0.009550912, + -0.017563144, + -0.008989502, + -0.007915198, + -0.0048586284, + 0.010528183, + 0.0038155133, + -0.010036082, + -0.011145041, + -0.0073953727, + 0.014943227, + -0.0062794825, + -0.0019302825, + 0.008920192, + 0.028028948, + -0.02776557, + 0.0074369586, + 0.006650291, + 0.0018956275, + -0.029193355, + 0.009862808, + -0.008448884, + -0.010410356, + 0.019448375, + 0.018311692, + -0.020335542, + 0.008227092, + -0.0038536338, + 0.007984508, + 0.009876669, + 0.009446948, + 0.031965755, + 0.0014693711, + -0.020820713, + -0.0013515443, + -0.021070229, + 0.011845073, + -0.016038325, + 0.00828254, + 0.02344063, + -0.013557028, + 0.01711956, + 0.0024414433, + 0.019226583, + 0.037593722, + -0.016412599, + -0.012787688, + -0.00476506, + 0.0005271889, + -0.011470798, + -0.04632678, + -0.01705025, + -0.003583325, + -0.021680156, + 0.042057283, + -0.003583325, + 0.00042603965, + 0.012863928, + 0.019670166, + 0.01962858, + 0.009585568, + -0.0030271125, + -0.01795128, + -0.014638264, + -0.0061616553, + 0.0054165735, + -0.0100014275, + -0.007457752, + 0.026102131, + 0.01064601, + -0.02581103, + -0.006632963, + 0.0020810317, + -0.022373255, + 0.01962858, + -0.02227622, + 0.02073754, + 0.022096016, + 0.012392621, + 0.0016166548, + 0.00959943, + 0.013217409, + 0.0040130466, + -0.022165326, + -0.03102314, + -0.0034065845, + -0.029886454, + -0.0050007137, + -0.025824891, + -0.016870044, + -0.010957905, + 0.03041321, + -0.0050353687, + 0.0116648665, + 0.012080726, + -0.011172766, + 0.0035729285, + 0.0022629702, + 0.0014962287, + -0.00049340026, + 0.014139232, + 0.026975436, + -0.027280401, + 0.006137397, + 0.030219143, + 0.010902457, + -0.01677301, + -0.010978698, + 0.010084599, + -0.014104577, + 0.011041077, + -0.014305576, + 0.01935134, + 0.006650291, + -0.030357763, + 0.009294466, + -0.018173072, + -0.025492204, + 0.009661809, + -0.012496586, + -0.0017509429, + -0.012753033, + 0.013148099, + -0.029193355, + -0.011519316, + 0.023329733, + -0.006813169, + 0.0028347773, + -0.013626338, + -0.015691776, + -0.017424524, + 0.006868617, + -0.0036907555, + -0.014527367, + 0.0008711396, + 0.028444808, + 0.024161452, + -0.015594741, + -0.00765182, + 0.0016963613, + -0.027543778, + 0.014513506, + -0.014527367, + 0.0014832332, + -0.023482215, + -0.0013567425, + -0.00055924477, + -0.022913873, + -0.017105699, + -0.007478545, + -0.00821323, + -0.00849047, + 0.0015170218, + 0.20615555, + -0.010361839, + 0.005316074, + 0.03498767, + 0.006359189, + 0.020002855, + 0.010569769, + 0.022622772, + -0.0043388037, + 0.012822343, + -0.024410969, + 0.0005024972, + 0.014832332, + 0.013494649, + 0.01767404, + -0.011470798, + -0.022844562, + -0.037593722, + -0.026628887, + 0.025575375, + 0.013688717, + 0.0070938743, + -0.014132301, + -0.016537357, + 0.0015768016, + 0.008393437, + -0.02414759, + -0.017992865, + 0.02894384, + 0.011096525, + 0.00946081, + 0.011359903, + -0.025436755, + -0.00009031954, + -0.00029478394, + 0.019850373, + -0.0025696668, + 0.032880645, + 0.019947406, + 0.0016833657, + -0.0060854144, + -0.0077141984, + -0.014665987, + 0.0013550097, + -0.0038813578, + -0.011158904, + -0.0043388037, + 0.008455815, + -0.0034741617, + 0.027557641, + -0.033157885, + -0.008739986, + 0.020488024, + 0.026310062, + 0.0031154826, + -0.02324656, + 0.035597596, + 0.030108247, + 0.0028295792, + -0.015456121, + -0.02269208, + 0.01948996, + -0.0048482316, + 0.010722251, + -0.0019770667, + 0.020404853, + -0.023204975, + -0.003694221, + 0.012288656, + -0.0045536645, + -0.00062812155, + -0.013709511, + -0.0017492102, + 0.0068720826, + -0.02547834, + -0.017771075, + 0.027931914, + -0.01120742, + 0.0008572776, + 0.022345532, + 0.0006632097, + -0.0056452965, + -0.0043318723, + 0.003203853, + 0.0029907248, + -0.028153706, + 0.03645704, + 0.013356029, + -0.023981247, + 0.00026294467, + -0.0057735196, + -0.0056868824, + 0.0048413007, + -0.012337173, + 0.0003433009, + 0.005402711, + 0.0015308837, + 0.041696873, + -0.02310794, + -0.009821221, + -0.016662115, + -0.02484069, + 0.021527674, + -0.0028191826, + 0.009232087, + 0.008150851, + -0.008296402, + 0.017881969, + -0.006979513, + -0.014943227, + -0.015705638, + -0.012413414, + 0.020931609, + -0.014790745, + 0.022082154, + 0.0040823566, + -0.005364591, + -0.011997554, + 0.0015048925, + -0.0125936195, + 0.017244319, + 0.0049972483, + 0.0010630415, + -0.0035365408, + 0.016398737, + -0.012579758, + -0.026115993, + 0.009627153, + -0.002236979, + -0.036346145, + 0.011699521, + -0.0011574763, + 0.01260055, + 0.011110387, + -0.039201714, + 0.007014168, + 0.0024466417, + 0.007173581, + -0.006736928, + 0.018214658, + 0.0016556417, + -0.021236572, + -0.0068304967, + 0.01467985, + 0.0013541434, + 0.006276017, + 0.024119867, + -0.0045813886, + -0.0063661197, + -0.010978698, + -0.012572827, + 0.00010591428, + -0.023080217, + -0.020501886, + 0.0293597, + 0.006234431, + -0.021860361, + -0.026129855, + 0.0113321785, + 0.0115955565, + -0.018048314, + -0.0001495579, + 0.025464479, + 0.007686475, + -0.0003125446, + -0.010424218, + -0.17987321, + 0.017105699, + 0.016967079, + -0.01537295, + 0.025228826, + 0.020723678, + 0.021194985, + -0.0026805627, + -0.013411477, + 0.0053126086, + 0.02129202, + -0.0075339926, + -0.027613088, + -0.008462747, + -0.020917745, + 0.0026476404, + 0.0013913974, + 0.013563959, + 0.018200796, + 0.009828152, + 0.02380104, + -0.03396188, + 0.023856489, + -0.000010633394, + -0.011865865, + 0.00019287663, + -0.011366834, + 0.00932219, + -0.0020255835, + -0.033379678, + -0.01635715, + 0.000749414, + 0.041336462, + 0.02533972, + 0.008532057, + 0.03227072, + 0.0011921313, + 0.0057146065, + -0.015622465, + 0.010375701, + 0.00849047, + 0.006352258, + -0.0023946592, + -0.009433086, + -0.007901335, + 0.01621853, + 0.012704516, + -0.0065948428, + -0.0037704618, + 0.003167465, + -0.007048823, + -0.02636551, + -0.010743044, + -0.002940475, + 0.0076587508, + 0.013203547, + 0.0054512285, + 0.0013784019, + -0.0005761391, + 0.008871675, + -0.035874836, + -0.00025428092, + 0.017784936, + -0.021139538, + -0.011443075, + -0.011810417, + -0.02477138, + -0.013709511, + -0.021319743, + 0.016592804, + -0.012607482, + -0.015650189, + -0.0017076242, + -0.039700747, + -0.016010601, + 0.020765264, + -0.025921926, + 0.0051289373, + -0.008227092, + 0.0037704618, + -0.0067923763, + 0.046520844, + -0.013619407, + -0.0029040873, + 0.0058324332, + -0.005385384, + 0.0034568342, + 0.020418715, + -0.010847009, + -0.016939355, + 0.007346856, + -0.010382632, + -0.006546326, + -0.0097380495, + 0.023288148, + 0.016925493, + -0.016232394, + 0.027640812, + -0.013959026, + -0.016925493, + -0.00084731425, + -0.005551728, + -0.02136133, + 0.014090715, + 0.044053413, + 0.01447192, + -0.00060559576, + -0.0019372134, + 0.013605545, + -0.0006012639, + -0.019018654, + 0.0021018246, + 0.030856794, + 0.010763837, + -0.016010601, + 0.013515443, + 0.012323311, + -0.009135053, + 0.025145654, + -0.01760473, + 0.04410886, + -0.0073607177, + 0.0047026807, + 0.013113445, + 0.015109572, + -0.013418408, + -0.13895261, + -0.031272653, + 0.012129243, + 0.038647234, + 0.0032229132, + 0.02122271, + 0.008573642, + 0.0056314343, + 0.012940169, + 0.020862298, + -0.022816839, + -0.02212374, + 0.005447763, + 0.020973194, + 0.018741414, + -0.009377638, + -0.0021936602, + -0.023620835, + -0.012011416, + 0.022719806, + -0.0068998067, + -0.0014633066, + 0.0105767, + 0.006068087, + 0.008441953, + 0.008726124, + -0.020474162, + 0.021264296, + 0.012448069, + 0.0005076955, + 0.0013558761, + -0.023288148, + 0.019642442, + -0.036900625, + -0.0150264, + 0.024341658, + -0.009398431, + 0.000066169356, + 0.026102131, + -0.035375804, + 0.003411783, + -0.0036283764, + 0.024438692, + -0.02136133, + -0.007977577, + 0.0022733668, + -0.015650189, + 0.020224646, + 0.013903578, + -0.02073754, + -0.030302314, + 0.003527877, + -0.00959943, + -0.009356845, + 0.01940679, + -0.015469983, + -0.0005536133, + 0.024161452, + -0.004245235, + -0.0033060852, + 0.0023513404, + -0.009051881, + -0.0055274693, + 0.0034499033, + 0.0066260323, + 0.005343798, + -0.013321375, + -0.009211293, + 0.010458873, + -0.0014451126, + 0.0025367446, + 0.014901642, + -0.005420039, + 0.026670473, + -0.031050863, + -0.0069552544, + -0.015761085, + -0.0037600654, + 0.010950974, + -0.03069045, + -0.010978698, + -0.0155808795, + 0.006262155, + -0.0010517787, + 0.020196922, + 0.020890022, + 0.024854552, + 0.006137397, + 0.0030323109, + -0.0071943738, + 0.008608297, + -0.0058601573, + 0.023814902, + -0.0197672, + 0.008344919, + -0.00723596, + 0.012205484, + -0.021056365, + -0.007277546, + 0.02665661, + -0.02832005, + -0.02366242, + -0.10518479, + 0.017701764, + -0.0063487925, + -0.0024709, + 0.0029266132, + -0.002706554, + -0.0002720416, + -0.008109265, + 0.0049348692, + -0.037732344, + -0.03276975, + 0.013155031, + -0.0077141984, + 0.0068270313, + -0.031189483, + -0.014804607, + 0.026947713, + 0.018034453, + -0.0025280807, + -0.0100014275, + 0.00006822699, + 0.0013818673, + 0.012198553, + 0.016800735, + -0.024064418, + -0.005586383, + 0.011775763, + -0.0067750486, + -0.014160025, + 0.0057908474, + 0.0016253185, + -0.024549589, + 0.0033615332, + 0.040948324, + -0.004120477, + -0.01585812, + -0.03742738, + 0.01474916, + 0.012884722, + 0.0204603, + -0.023745593, + -0.026698196, + 0.025755582, + -0.017285904, + 0.014166956, + 0.021070229, + 0.0013264194, + 0.02400897, + 0.020903884, + 0.008220161, + -0.005822037, + 0.022068292, + 0.009897462, + -0.01843645, + -0.021264296, + -0.020931609, + 0.01642646, + 0.027640812, + 0.013965957, + -0.020987056, + 0.031633068, + 0.011962899, + 0.017355215, + -0.005402711, + 0.003238508, + -0.02170788, + -0.020557335, + -0.01405606, + -0.006255224, + -0.026060546, + -0.015733361, + -0.011644074, + 0.020432577, + 0.0064596883, + 0.034682706, + -0.006553257, + -0.00090622774, + -0.0044843545, + 0.0063765165, + 0.03160534, + -0.004879421, + 0.012829274, + -0.0456614, + 0.020820713, + 0.013563959, + 0.0033961881, + -0.014430334, + -0.016066048, + -0.021305881, + 0.020141475, + 0.019753339, + 0.010084599, + 0.02463276, + -0.010819285, + -0.003086026, + 0.01426399, + 0.019309755, + -0.019711753, + 0.0016504434, + 0.014638264, + 0.003673428, + -0.011290593, + -0.025977373, + -0.0016920294, + -0.018685965, + -0.013945164, + -0.026850678, + -0.022442566, + -0.0065740496, + 0.013702579, + 0.0093360515, + 0.021097952, + 0.008663745, + 0.02991418, + -0.0045605954, + 0.0057908474, + 0.00723596, + -0.014652126, + -0.026864542, + 0.017577006, + 0.046160433, + 0.019434514, + 0.028555704, + 0.0032575682, + 0.014180818, + 0.003694221, + -0.005489349, + -0.03681745, + 0.01767404, + -0.0073329937, + 0.0022491082, + -0.013861992, + -0.016454184, + -0.0030548365, + -0.008587504, + 0.0012934972, + 0.0026961574, + 0.018783, + -0.032242995, + 0.049431864, + -0.018519621, + -0.015885843, + -0.0016253185, + -0.005343798, + 0.017646316, + 0.00240159, + 0.018186934, + -0.032326166, + -0.005752727, + 0.007915198, + 0.0013454796, + 0.013758027, + -0.009065743, + -0.010535114, + -0.0056452965, + -0.040976048, + 0.0027117522, + -0.019850373, + 0.001718887, + 0.03415595, + 0.01495709, + 0.015899705, + 0.012552034, + -0.025686271, + -0.020474162, + 0.011498523, + 0.0055136075, + 0.00008230558, + -0.012053003, + 0.013314444, + -0.009751911, + -0.038924474, + -0.03096769, + -0.0020238508, + -0.0019891958, + -0.011165835, + -0.003458567, + 0.0043041487, + 0.014638264, + -0.0064388956, + 0.0429999, + -0.011290593, + -0.029526044, + 0.0103964945, + -0.0064354297, + -0.007346856, + -0.013584753, + -0.0008802365 + ] + }, + { + "object": "embedding", + "index": 8, + "embedding": [ + 0.011767127, + 0.006192154, + -0.0037607332, + -0.028241105, + -0.003828555, + 0.013503372, + -0.025406143, + 0.0040421947, + -0.009298404, + -0.010261477, + -0.004018457, + 0.0074604265, + -0.0018278045, + 0.0119773755, + -0.013076093, + -0.0055546267, + 0.033314195, + -0.00091305445, + 0.020034635, + -0.005205343, + -0.020780679, + 0.010403904, + 0.020210974, + -0.022530487, + -0.01789146, + -0.0061141583, + 0.015368478, + 0.0002994768, + -0.008905036, + -0.009352662, + -0.008735481, + -0.017376011, + -0.020333054, + -0.0075011197, + -0.010152962, + -0.0062396294, + -0.010770143, + 0.0021414815, + 0.0021041792, + -0.020021072, + 0.028078333, + -0.003923506, + -0.011305937, + 0.00513413, + -0.024253167, + 0.03917402, + 0.000032453914, + 0.012289356, + -0.020088894, + 0.026125057, + 0.004445736, + 0.019180078, + -0.021051968, + -0.018474728, + -0.02327653, + -0.015856797, + -0.013198173, + 0.019315721, + 0.0029129575, + -0.00022169335, + -0.025758818, + -0.024985647, + -0.018881662, + 0.008206469, + 0.0032673276, + 0.0022499969, + -0.015015803, + 0.006232847, + -0.0065414375, + 0.008769392, + 0.02859378, + -0.0094137015, + 0.008674441, + -0.004571207, + 0.018298391, + -0.01592462, + -0.026545553, + -0.0027891821, + -0.009725683, + -0.0009537477, + 0.010064794, + -0.011197422, + -0.015707588, + 0.026681198, + 0.022639003, + 0.012133366, + 0.004255834, + 0.029489031, + -0.0065448284, + 0.011923118, + 0.011061777, + 0.012764111, + -0.010749796, + 0.007080623, + -0.028729424, + -0.021255434, + -0.020441568, + 0.048045147, + -0.019966815, + -0.025107726, + 0.023466432, + -0.024958517, + -0.032147657, + -0.012811586, + -0.024985647, + -0.015368478, + -0.0141341165, + 0.0130354, + 0.009040681, + -0.004849277, + -0.014093423, + 0.03133379, + 0.021567414, + -0.06516343, + 0.005303685, + -0.01417481, + -0.022408407, + -0.031659335, + -0.009637514, + -0.02364277, + 0.023561383, + 0.031713594, + 0.017660864, + 0.0018244133, + 0.028485265, + -0.009149196, + -0.0013479633, + -0.021594543, + 0.0015031063, + -0.0018735843, + 0.027698528, + 0.008525233, + 0.021160481, + 0.0084235, + -0.017633734, + 0.018651066, + -0.015856797, + 0.023018807, + -0.012235099, + -0.023791978, + -0.016060263, + 0.01509719, + -0.032635976, + 0.0055546267, + -0.01220797, + 0.025894461, + 0.024700794, + 0.014459663, + 0.0021838702, + -0.0073044356, + 0.018705323, + -0.01589749, + 0.010098704, + -0.01669779, + 0.0071009696, + 0.010349646, + 0.008626966, + 0.027779914, + -0.011312719, + 0.0013589845, + -0.008498104, + 0.011895989, + 0.01405273, + -0.0033046298, + 0.037492033, + 0.009325533, + -0.0029044796, + 0.014961546, + 0.016236601, + -0.013510154, + -0.015015803, + 0.007826665, + -0.038821347, + 0.016874127, + 0.02361564, + 0.033287067, + 0.013693273, + -0.0076231994, + -0.020889195, + -0.0010478508, + -0.0061378963, + 0.021933654, + 0.030465668, + 0.026423473, + -0.033070035, + -0.012960795, + 0.03255459, + -0.013510154, + 0.0278613, + -0.01266916, + 0.019139385, + 0.026179314, + 0.021947218, + -0.01152975, + -0.66194326, + -0.003367365, + -0.010980391, + 0.021268997, + 0.0051002186, + 0.018189875, + 0.010573459, + 0.00056334696, + -0.025867334, + 0.0013691578, + -0.021363948, + 0.0028078333, + -0.0089999875, + 0.0003458925, + -0.0089999875, + -0.00086218794, + 0.0006595695, + -0.001080914, + 0.0008346352, + 0.009210235, + 0.0023144276, + 0.022082862, + 0.004238879, + -0.013455897, + 0.021920089, + 0.014120553, + 0.027942687, + -0.036813814, + -0.0042592254, + -0.0023686853, + -0.013062528, + 0.016250165, + -0.012472477, + -0.0058530434, + 0.020156715, + -0.00061675685, + -0.025080597, + 0.022462666, + -0.0069585433, + 0.04430137, + -0.014812337, + 0.0049408367, + 0.01869176, + -0.010512419, + -0.000081545426, + 0.004255834, + 0.026816841, + -0.0060531185, + 0.014066295, + 0.00074519485, + 0.010064794, + -0.025053468, + -0.012675943, + 0.0051917783, + 0.012621685, + 0.0023992052, + 0.016779177, + 0.0032673276, + 0.0030096038, + 0.012418219, + -0.0002490341, + -0.019030869, + -0.021174047, + -0.012370744, + 0.0007621504, + 0.015042933, + -0.01393065, + 0.00321307, + 0.0034826626, + -0.011027867, + -0.0049272724, + 0.022910291, + -0.011339848, + 0.010193655, + 0.0010359819, + 0.01346946, + 0.02026523, + -0.027752787, + 0.0006358318, + -0.011448364, + 0.007087405, + -0.004313483, + -0.04362315, + -0.010308953, + 0.040286303, + -0.021011274, + -0.011292373, + -0.011855296, + 0.033721127, + -0.02029236, + 0.012628467, + 0.01881384, + -0.008328549, + 0.010837965, + -0.0077927546, + 0.017457398, + -0.0039438526, + 0.01441897, + 0.008416717, + -0.016670661, + -0.0033588875, + -0.006215892, + 0.016507888, + 0.0053308136, + 0.012784458, + 0.0040896703, + -0.025039904, + 0.031496562, + 0.023086628, + -0.030547054, + -0.015599073, + -0.0017014858, + -0.0018871487, + 0.00043406116, + 0.02499921, + -0.034752022, + 0.009325533, + 0.029461902, + 0.03255459, + -0.015232834, + -0.0018735843, + -0.00079309416, + 0.0018244133, + -0.012397872, + -0.027467933, + 0.006880548, + -0.004221923, + -0.021146918, + 0.0033470185, + 0.0216488, + 0.004449127, + 0.0040998436, + 0.028648037, + -0.0063786646, + 0.039011247, + 0.009122067, + 0.033124294, + -0.011658612, + 0.007941963, + 0.005524107, + -0.031686466, + -0.012065544, + -0.00968499, + 0.0007252721, + -0.010397121, + -0.03846867, + -0.012099455, + -0.0051137833, + -0.03477915, + 0.016073829, + 0.001085153, + -0.0035030092, + -0.015110754, + 0.0010902396, + -0.016223036, + -0.020305924, + 0.0006366796, + -0.003050297, + -0.022096427, + -0.0068398546, + 0.0024314208, + 0.0065177, + -0.01122455, + -0.015639767, + 0.0022059125, + -0.0018295, + 0.02521624, + 0.011319501, + -0.012831934, + -0.014106988, + -0.0062192827, + 0.00008382383, + -0.015029368, + 0.024456633, + 0.0154634295, + -0.0060904208, + 0.01122455, + 0.015232834, + 0.0076978034, + 0.023018807, + 0.010519201, + -0.0033521052, + -0.029868834, + -0.010492072, + 0.029380515, + -0.00038086323, + 0.028566651, + -0.0012555559, + -0.011631483, + 0.0016116217, + 0.0076503283, + 0.0034657072, + 0.0006366796, + 0.0027739222, + 0.002623018, + 0.0054257647, + -0.007019583, + -0.0019532752, + 0.010505637, + 0.0057173995, + 0.021133354, + 0.0078198835, + 0.019478494, + 0.009305187, + 0.0062396294, + -0.018935919, + -0.014269761, + -0.016440067, + 0.019505624, + 0.0036149158, + 0.021418206, + -0.021445334, + -0.020102458, + -0.0015861883, + -0.0040659322, + 0.03111676, + -0.015666895, + 0.004225314, + -0.0042897454, + -0.007745279, + 0.009603604, + -0.017335318, + -0.0048967525, + 0.010186873, + -0.045549296, + 0.013089657, + 0.011122817, + 0.01958701, + -0.0038014264, + -0.013781442, + -0.017253932, + 0.003984546, + 0.003659, + 0.011177075, + -0.029895963, + 0.0066126506, + 0.018434035, + -0.020563647, + 0.03543024, + -0.0011394105, + 0.02330366, + 0.028213976, + 0.024877131, + -0.024822874, + 0.0031774633, + -0.007704586, + 0.026925357, + 0.008213251, + -0.007908052, + -0.0012487737, + -0.011319501, + 0.01331347, + -0.0025941937, + -0.0067855967, + 0.0020855283, + -0.0051002186, + 0.018705323, + -0.0120791085, + 0.01854255, + 0.022462666, + -0.010871876, + -0.0044694734, + 0.006656735, + -0.006883939, + -0.00055020646, + 0.013164261, + 0.016833434, + 0.0017565913, + -0.032174785, + -0.02422604, + -0.0034114495, + -0.020590777, + 0.01168574, + -0.011394106, + 0.01134663, + -0.018732453, + -0.015694024, + -0.025080597, + 0.0060056434, + 0.005476631, + -0.005144303, + -0.029570417, + 0.011461928, + 0.016087392, + -0.01116351, + -0.021879395, + -0.015273527, + 0.00019021968, + -0.00412019, + 0.018149182, + 0.014147681, + 0.014364712, + -0.007541813, + 0.0038658574, + -0.011611137, + -0.011550097, + 0.029190613, + -0.021282561, + -0.005710617, + -0.003367365, + -0.007948745, + -0.02429386, + 0.0066024773, + -0.008247162, + 0.024185346, + 0.011109253, + -0.013015053, + -0.014120553, + 0.0029875617, + -0.019139385, + -0.0019142776, + 0.015816104, + 0.0033724518, + 0.014785209, + 0.002041444, + 0.007806319, + -0.0040455856, + 0.0054596756, + 0.018244134, + -0.007643546, + 0.004903535, + -0.030357152, + -0.023710592, + -0.020834936, + 0.121645644, + -0.0028061375, + -0.0020516173, + 0.002687449, + 0.006293887, + -0.0049883123, + -0.010654845, + -0.0035538757, + 0.0024941561, + -0.00027467933, + 0.0071348804, + -0.01337451, + -0.00839637, + 0.0119773755, + -0.00059174746, + -0.0060395543, + -0.016467195, + 0.0031384658, + 0.0047916286, + -0.015259963, + -0.00056037976, + -0.031035373, + 0.011536532, + 0.03358548, + -0.005931039, + 0.01488016, + 0.013510154, + 0.009373008, + 0.01226901, + -0.032853004, + -0.007813101, + 0.029678933, + -0.008152211, + 0.022299893, + 0.0062091094, + 0.026721891, + 0.021119788, + 0.013984908, + 0.023113757, + -0.013449114, + 0.009590039, + 0.012580992, + 0.0135305, + -0.018284827, + 0.032527458, + -0.021363948, + 0.0012903146, + 0.016874127, + -0.0016523149, + -0.021363948, + 0.03274449, + 0.016155215, + -0.03160508, + 0.0032842832, + -0.010688757, + 0.013944215, + 0.0041778386, + -0.0007443471, + 0.0008295485, + 0.012811586, + -0.0032045923, + -0.038360156, + 0.00642614, + -0.0014954763, + -0.01036321, + -0.024036137, + -0.0013293123, + 0.015965313, + -0.021784445, + -0.010180091, + 0.0051544765, + -0.027481498, + -0.013849264, + 0.023886928, + 0.010892223, + -0.0073383464, + 0.027237339, + -0.004717024, + -0.010295388, + 0.02339861, + -0.022856034, + 0.00039485155, + -0.010946481, + -0.010756578, + -0.03225617, + 0.024632972, + 0.023832671, + -0.015300657, + -0.011482274, + 0.0069381967, + 0.010458161, + 0.017850766, + 0.019139385, + 0.014256196, + -0.006822899, + -0.012587774, + -0.01263525, + 0.012614903, + -0.016223036, + -0.019573446, + 0.020238101, + -0.01696908, + 0.001300488, + 0.005049352, + 0.019898992, + 0.031822108, + 0.018271262, + 0.015178576, + -0.010661627, + 0.012499605, + 0.027549319, + -0.034236576, + 0.0260708, + 0.012804804, + -0.015259963, + 0.0049544014, + -0.0015319308, + 0.01205198, + 0.020183844, + -0.0042049675, + -0.008003003, + -0.011970594, + 0.012859062, + 0.027006743, + -0.0051137833, + 0.0050391788, + -0.015734717, + 0.001179256, + -0.0011343239, + 0.015571944, + 0.0024687229, + 0.023357917, + -0.018054232, + -0.00590391, + -0.026247136, + 0.0019871863, + -0.018366214, + 0.013028617, + -0.009291622, + -0.009834198, + -0.012770893, + 0.014825902, + 0.0061684162, + -0.022828905, + -0.026437039, + -0.024958517, + 0.0025009385, + 0.0004192251, + -0.023127321, + 0.01577541, + -0.00020802298, + 0.011102471, + -0.011326283, + 0.007813101, + -0.019085128, + -0.014364712, + -0.027264467, + -0.02330366, + -0.0029044796, + 0.02337148, + 0.03871283, + -0.0048255394, + 0.025012774, + -0.0033843208, + 0.013449114, + -0.00035479415, + 0.008348895, + 0.012140148, + -0.027996946, + 0.0032825875, + 0.010003754, + -0.0071009696, + -0.009895238, + 0.01079049, + -0.011733216, + 0.021798009, + -0.0001939287, + -0.0117196515, + -0.011482274, + -0.0063074515, + -0.023385046, + -0.029299129, + -0.015599073, + -0.001655706, + -0.016521454, + -0.007284089, + 0.022055734, + 0.0025297627, + 0.0097731585, + -0.017362447, + -0.0014446098, + -0.008369242, + 0.02878368, + -0.000865579, + -0.020305924, + -0.0027111867, + 0.00581235, + -0.020468697, + -0.018990176, + 0.024022574, + 0.000786312, + 0.0019804041, + -0.012926884, + 0.021892961, + 0.0047509354, + 0.01325243, + 0.01266916, + 0.0044355625, + 0.010770143, + -0.018949483, + -0.016467195, + -0.008470975, + -0.0112584615, + -0.021825138, + -0.009020334, + 0.012418219, + 0.0021346994, + 0.027807044, + -0.028159719, + -0.01881384, + 0.012106237, + 0.006965325, + 0.011183857, + 0.004316874, + 0.025067033, + 0.013598323, + 0.0029739973, + -0.022747518, + 0.014500356, + -0.011482274, + -0.009020334, + 0.047475442, + 0.022367714, + 0.004686504, + -0.022856034, + 0.0004115951, + 0.0035504848, + -0.006866983, + -0.0008626118, + 0.04427424, + 0.0100783575, + -0.0015200619, + -0.0067381216, + -0.004157492, + -0.030248638, + 0.0049544014, + -0.0084913215, + -0.005941212, + -0.026789714, + -0.015504123, + -0.0094611775, + 0.00044635392, + -0.0076910215, + 0.0075689415, + 0.0061378963, + -0.018623937, + -0.0045915535, + 0.0038794216, + -0.014636, + 0.02524337, + 0.02398188, + 0.011611137, + -0.0125402985, + 0.013523718, + 0.023900494, + -0.0043338295, + -0.013754313, + -0.016006006, + -0.00359796, + 0.022245634, + -0.01395778, + 0.0010495463, + 0.0071416628, + -0.010214002, + 0.024307426, + 0.003129988, + 0.017552348, + -0.0032215477, + -0.012872627, + -0.0020550084, + 0.005602102, + 0.030411411, + 0.006144678, + -0.003209679, + -0.034724895, + -0.020373747, + -0.004744153, + -0.0065821307, + 0.02152672, + 0.014825902, + -0.0055614086, + 0.002407683, + -0.024578713, + 0.011733216, + 0.0022533878, + -0.01749809, + 0.0012428393, + 0.029353386, + -0.021784445, + 0.00777919, + 0.008688006, + 0.022340586, + -0.023168014, + -0.008199687, + 0.004676331, + -0.006226065, + 0.021024838, + 0.0031537258, + -0.0027162733, + -0.011448364, + -0.016440067, + -0.0044966023, + -0.008165776, + -0.0050222236, + 0.037709065, + -0.0021635236, + -0.0039981105, + -0.0034182316, + -0.023534253, + 0.03363974, + -0.017240368, + 0.006677082, + 0.020129588, + -0.014866595, + 0.0015980572, + 0.022367714, + 0.0094137015, + 0.007860577, + -0.005005268, + -0.030004479, + 0.0061209407, + 0.016223036, + -0.007324782, + -0.028539522, + -0.01577541, + -0.013564412, + -0.012519952, + 0.027549319, + -0.0050696987, + -0.006907677, + 0.008464193, + 0.017782943, + 0.05577686, + 0.003662391, + -0.004649202, + -0.023317223, + -0.011495839, + -0.0009774854, + -0.03391103, + -0.00029269457, + -0.0041371454, + 0.02364277, + -0.011509404, + -0.014825902, + -0.022055734, + 0.008199687, + -0.039770856, + 0.008118301, + -0.014324019, + 0.020929888, + 0.008755827, + 0.008321767, + 0.013110003, + 0.004544078, + 0.0013572889, + 0.0061514606, + -0.018067796, + -0.006622824, + 0.02232702, + -0.04061185, + 0.016128086, + -0.012018069, + -0.014703822, + 0.017606607, + 0.020319488, + 0.0041642743, + -0.0009791809, + 0.02152672, + -0.029434772, + 0.0070399297, + 0.0039404617, + 0.014012037, + -0.0020075329, + 0.021174047, + 0.0014081554, + -0.024619406, + 0.012506387, + 0.024470199, + -0.012065544, + 0.0012716636, + 0.018339084, + 0.000033884535, + 0.0063854465, + 0.015382043, + -0.013639016, + 0.002948564, + 0.024266733, + -0.025962284, + 0.024755051, + -0.015219269, + 0.0060124253, + 0.0067313393, + -0.008247162, + 0.0026399735, + 0.004052368, + 0.017850766, + -0.03206627, + -0.011597572, + 0.01786433, + -0.014947982, + -0.0077249324, + 0.005469849, + 0.0145953065, + -0.03751916, + -0.009508653, + -0.014907288, + -0.0064498778, + -0.015124319, + 0.027508626, + 0.019478494, + -0.013150697, + -0.012614903, + -0.009671425, + -0.020780679, + 0.005340987, + -0.023045935, + 0.006656735, + -0.013110003, + -0.009352662, + -0.0010936307, + -0.0047543263, + -0.02133682, + -0.0060836384, + 0.002139786, + 0.008403153, + 0.0057614837, + 0.2369974, + -0.027996946, + 0.0017379402, + 0.025962284, + 0.007975874, + 0.011292373, + 0.03382964, + 0.0141341165, + -0.012465694, + 0.000540457, + -0.031008245, + 0.0068873297, + 0.004554251, + 0.007880923, + 0.0063447533, + 0.0011190639, + -0.032418944, + -0.05669924, + -0.019600574, + -0.009556128, + -0.0020702684, + -0.000778682, + -0.008755827, + -0.013428767, + 0.022299893, + 0.010776925, + -0.010770143, + -0.014446098, + 0.017660864, + 0.0056224484, + -0.012553863, + -0.0012046893, + -0.018895226, + 0.007941963, + 0.0037471687, + 0.015273527, + -0.01657571, + -0.0022211724, + 0.0013683101, + 0.020129588, + -0.009637514, + -0.004327047, + -0.0024941561, + -0.021892961, + -0.023262966, + 0.015219269, + -0.011631483, + -0.005378289, + -0.014527485, + 0.027617142, + -0.04796376, + -0.0069348053, + 0.019641267, + 0.03339558, + 0.002389032, + -0.012920102, + 0.0445184, + 0.012302921, + -0.009020334, + -0.015042933, + -0.038875602, + 0.0072637424, + -0.011299155, + 0.0008672746, + -0.009528999, + 0.0145410495, + -0.029597547, + -0.00830142, + 0.0029282174, + 0.0120791085, + -0.008572708, + -0.02398188, + -0.009786723, + -0.0017938934, + -0.019112255, + -0.036216978, + 0.013815354, + 0.0077588432, + -0.004510167, + 0.02432099, + -0.0031435525, + -0.009474741, + 0.017036902, + 0.014120553, + 0.016467195, + -0.015354914, + 0.0064668334, + 0.0222592, + -0.009386573, + -0.0096171675, + 0.0012682725, + -0.016331552, + -0.003726822, + -0.0099766245, + 0.00986811, + 0.016385809, + 0.003246981, + 0.02582664, + -0.030438539, + -0.02133682, + -0.0073722578, + -0.02063147, + 0.025596045, + 0.013123568, + 0.017782943, + -0.010661627, + 0.006619433, + 0.012648813, + -0.013849264, + -0.013869611, + -0.0057818303, + -0.022544052, + -0.00025030578, + -0.009495088, + 0.018013539, + -0.00030901426, + 0.014256196, + -0.020739986, + 0.0150022395, + -0.01980404, + 0.010939698, + -0.014364712, + 0.014093423, + 0.0084913215, + 0.0010351342, + -0.0096171675, + -0.020943452, + 0.0030486016, + -0.014215503, + -0.0432976, + -0.011556879, + 0.007975874, + 0.0040693237, + -0.008057261, + -0.031930625, + -0.0013801788, + -0.00035288665, + -0.008437064, + -0.006198936, + 0.005683488, + 0.0019804041, + -0.0076638926, + 0.011088907, + 0.0042320965, + -0.009657861, + -0.0021804792, + 0.0025806292, + -0.0050663077, + -0.008565926, + -0.007514684, + -0.006002252, + -0.0061819805, + -0.015788974, + -0.026314959, + 0.036542524, + -0.017552348, + 0.0044355625, + -0.024917824, + 0.0041676653, + 0.022164248, + -0.033558354, + -0.012248663, + 0.027834173, + -0.014473227, + -0.0063820556, + 0.010044447, + -0.17655438, + 0.025311192, + 0.019790476, + -0.0055274977, + 0.013218519, + 0.0091017205, + 0.0186375, + 0.01128559, + -0.025107726, + -0.0005629231, + 0.022896728, + 0.0038963773, + -0.043080572, + -0.024158217, + -0.018203441, + -0.021174047, + -0.0057038353, + -0.0063379714, + 0.009705337, + 0.016765613, + 0.02693892, + -0.019912556, + 0.022544052, + -0.016290858, + 0.00538168, + -0.011706087, + -0.014012037, + 0.0154634295, + -0.008464193, + -0.018054232, + -0.027942687, + -0.010987174, + 0.03184924, + 0.007080623, + 0.0032842832, + 0.040666107, + -0.01233005, + 0.005364725, + -0.01681987, + 0.016358681, + 0.02813259, + 0.033721127, + -0.004971357, + 0.0026671025, + -0.015327785, + 0.021798009, + -0.0040693237, + -0.0050595254, + 0.0013920477, + -0.0069280234, + 0.013598323, + -0.010770143, + 0.01417481, + 0.021947218, + 0.008403153, + 0.004384696, + -0.0041167988, + -0.0077588432, + -0.0097731585, + 0.002555196, + -0.03502331, + -0.011909554, + 0.0059513855, + -0.019980378, + -0.009142414, + -0.010715885, + -0.022530487, + -0.0041405368, + -0.019424237, + 0.017972846, + -0.015192141, + -0.021079095, + 0.011210986, + -0.0140798595, + 0.018271262, + 0.009081374, + -0.0107972715, + 0.018596807, + 0.014378277, + 0.011149947, + 0.0045983354, + 0.051816054, + -0.012804804, + 0.025677431, + -0.0056631416, + -0.005144303, + -0.007514684, + 0.012309703, + -0.019546317, + -0.011061777, + 0.01774225, + -0.009467959, + -0.018311955, + -0.022408407, + 0.011502621, + 0.025379013, + -0.0042320965, + 0.0036013513, + -0.0033656696, + -0.0006430379, + 0.0108244, + 0.0065380465, + -0.023195144, + 0.019790476, + 0.032853004, + 0.02536545, + 0.017131852, + -0.0035742226, + 0.00535116, + 0.02235415, + -0.0278613, + -0.01497511, + 0.011265243, + 0.016833434, + -0.030465668, + 0.01614165, + 0.015300657, + -0.024334554, + 0.012567427, + -0.024850002, + 0.048018016, + -0.0036149158, + 0.00071085995, + 0.019329287, + -0.0040388037, + 0.0035674402, + -0.090990074, + -0.041344326, + 0.0052833385, + 0.02533832, + -0.00067525334, + 0.029190613, + -0.008938947, + -0.011407671, + 0.021540286, + 0.029461902, + -0.030058736, + 0.0044999938, + 0.018718887, + 0.011645047, + 0.03155082, + -0.01263525, + 0.004717024, + -0.009203454, + -0.011292373, + 0.017782943, + -0.008118301, + -0.003923506, + -0.00016118336, + -0.0014963242, + -0.009196671, + -0.0014708908, + -0.025650302, + 0.010614152, + 0.024185346, + 0.010810836, + 0.00802335, + -0.032120526, + 0.014798773, + -0.02337148, + -0.014147681, + 0.0052901204, + -0.016901257, + 0.013442332, + 0.030248638, + -0.012445347, + -0.011278808, + -0.002112657, + 0.030492797, + -0.023683462, + 0.008586273, + -0.010817618, + -0.009888456, + 0.015721153, + 0.015911054, + -0.0178372, + -0.013204955, + -0.01180782, + -0.028186847, + -0.0184476, + 0.019437801, + -0.028702294, + -0.0058225235, + 0.014378277, + -0.014730951, + 0.0011699304, + -0.0031706812, + -0.007155227, + -0.028892197, + 0.032825876, + -0.005700444, + 0.0044084336, + -0.020360181, + -0.0014395232, + 0.01856968, + -0.008667659, + -0.0033436276, + 0.0033131074, + -0.02997735, + 0.013408421, + -0.013279559, + 0.009237364, + 0.0001644685, + -0.009752812, + -0.00019668396, + -0.035565887, + -0.009495088, + -0.022286328, + 0.0047305888, + -0.00916276, + 0.026735455, + 0.014798773, + -0.0037471687, + -0.005568191, + 0.0054528937, + -0.033015776, + 0.008898254, + -0.00013479634, + 0.018434035, + -0.025202677, + -0.00003764654, + 0.010261477, + -0.00928484, + -0.017810073, + 0.02444307, + 0.018203441, + -0.019275028, + -0.019315721, + -0.10292675, + 0.0049374457, + 0.0071687917, + -0.0027145778, + 0.014812337, + -0.0044999938, + 0.014527485, + -0.015666895, + -0.0020380528, + -0.007019583, + -0.040259175, + 0.0020990926, + -0.015368478, + 0.0020397485, + -0.016670661, + -0.009501871, + 0.025677431, + 0.02613862, + -0.009474741, + 0.013727184, + 0.018718887, + 0.0013979821, + -0.008504886, + 0.00050061155, + -0.0073926044, + 0.004686504, + 0.00042367593, + 0.015219269, + -0.015219269, + -0.01152975, + 0.01970909, + -0.02711526, + 0.0034572294, + 0.026084363, + 0.00096646434, + -0.009908803, + -0.008660877, + 0.0054495023, + -0.010492072, + 0.031523693, + -0.013327034, + -0.0059106923, + 0.012228317, + -0.01239109, + 0.003338541, + -0.009088156, + 0.012235099, + 0.018556114, + 0.011489057, + 0.019912556, + -0.01337451, + 0.023412174, + -0.0045949444, + -0.013293123, + -0.015165012, + -0.009508653, + 0.011509404, + 0.007914834, + 0.016494324, + -0.01614165, + 0.010295388, + -0.00470346, + 0.010675192, + -0.0006421901, + 0.019410674, + -0.029000713, + -0.016562147, + 0.004198185, + 0.00088083895, + -0.026274266, + -0.009271275, + -0.023344353, + 0.025813075, + 0.013110003, + 0.02121474, + -0.0034267094, + 0.01174678, + -0.02533832, + -0.03206627, + 0.04077462, + 0.0055308887, + 0.008966076, + -0.024741488, + 0.015883926, + 0.023778414, + -0.00676525, + -0.018434035, + -0.014486792, + 0.0021720014, + 0.010905787, + 0.007813101, + -0.000060509992, + 0.01587036, + -0.011265243, + -0.0094611775, + -0.003950635, + -0.015883926, + -0.004917099, + -0.0045372956, + 0.02133682, + 0.026152186, + 0.006527873, + -0.01079049, + -0.01100752, + -0.015571944, + 0.025379013, + -0.0006040402, + -0.021051968, + -0.0007231527, + 0.026599811, + 0.020156715, + 0.004645811, + -0.0060124253, + 0.01657571, + -0.0016336638, + 0.014351147, + 0.0012504692, + -0.004445736, + -0.02330366, + 0.0017498091, + 0.031876367, + 0.02213712, + 0.025894461, + -0.0012665769, + 0.019980378, + 0.0065143085, + 0.0032859787, + -0.02650486, + -0.01128559, + -0.003338541, + -0.0075214664, + -0.0055546267, + -0.031496562, + -0.01842047, + -0.004649202, + -0.0020227928, + 0.022964548, + 0.025718125, + -0.025161983, + 0.037898965, + -0.012642032, + -0.013733966, + 0.008084389, + -0.015110754, + 0.019424237, + -0.00081513636, + 0.027264467, + -0.025609609, + -0.024632972, + 0.0007235766, + 0.014405405, + 0.0005769114, + -0.036759555, + -0.025636738, + -0.016684227, + -0.03415519, + 0.016331552, + -0.023045935, + 0.02060434, + 0.040449075, + 0.01568046, + -0.006158243, + 0.0067279483, + -0.027101694, + 0.004601727, + 0.028376749, + 0.0073383464, + -0.003360583, + -0.022530487, + 0.023412174, + 0.0047339797, + -0.028431006, + -0.021798009, + 0.010865093, + -0.0058089592, + -0.007704586, + -0.010749796, + 0.030764086, + 0.012764111, + -0.02133682, + 0.033097163, + -0.022042168, + -0.04514236, + 0.014934417, + -0.0092238, + -0.012587774, + -0.0022652568, + -0.020007508 + ] + }, + { + "object": "embedding", + "index": 9, + "embedding": [ + -0.008189119, + -0.0015157744, + 0.0074148276, + -0.034777507, + -0.021128977, + 0.0044751437, + -0.019960977, + 0.020341562, + -0.017729968, + -0.0353287, + 0.022835044, + -0.0058432776, + 0.012998914, + 0.0019521337, + -0.010229837, + -0.01561707, + 0.016115766, + -0.011404398, + 0.008445029, + -0.0051181996, + -0.008208805, + 0.027297063, + -0.010879455, + -0.008215366, + 0.0019783808, + 0.0065093, + -0.002918358, + -0.016535722, + 0.0061976146, + -0.024475493, + 0.013307318, + -0.028793152, + -0.024449244, + -0.037244745, + 0.011791544, + -0.011798106, + -0.015984531, + -0.008733748, + 0.006151682, + -0.009494917, + 0.012887363, + -0.011023814, + -0.003313706, + -0.010026421, + -0.021404572, + 0.015722059, + -0.0073098387, + -0.003343234, + -0.028688164, + 0.006670064, + 0.021535808, + 0.022441337, + -0.0248692, + 0.0019258866, + -0.025590997, + -0.013806015, + -0.015577699, + -0.0004457919, + -0.017323136, + -0.010761342, + -0.0062993225, + -0.01956727, + -0.015630193, + 0.024081785, + 0.0025951895, + -0.018438641, + -0.0024196615, + 0.0134385545, + 0.0038714586, + 0.02171954, + 0.030525466, + -0.0061352775, + 0.012847993, + -0.0032087173, + 0.014212846, + 0.0012319769, + -0.019829743, + 0.013333566, + -0.0075263777, + 0.0059023337, + 0.004183144, + -0.042940382, + -0.030079264, + 0.026247177, + 0.017415002, + 0.009199635, + -0.031549107, + 0.023950549, + -0.006975187, + -0.0041929865, + 0.022034505, + 0.021916393, + 0.022467583, + 0.0011507747, + -0.032756478, + 0.014147229, + -0.0021407853, + 0.037717193, + -0.014186599, + -0.012231184, + 0.011955589, + -0.005836716, + -0.010846646, + -0.02040718, + -0.0014239093, + 0.008930602, + -0.02175891, + -0.034357555, + 0.013543543, + -0.016378239, + -0.013451678, + 0.014750914, + 0.0056398623, + -0.041234314, + -0.002867504, + -0.023071269, + 0.003335032, + -0.0158008, + -0.025840346, + -0.038609598, + 0.020538416, + 0.021772033, + 0.010754781, + -0.020367809, + 0.037795935, + 0.0056004915, + -0.00057210645, + -0.019304799, + -0.008504085, + 0.0029298412, + 0.021207718, + -0.0065093, + -0.0076576136, + 0.0034711892, + -0.013327004, + 0.023058144, + -0.033412658, + 0.009711456, + -0.018123675, + -0.035197463, + 0.0015379206, + 0.028241962, + -0.0060926257, + 0.020748394, + -0.007040805, + 0.020039719, + 0.0023310774, + 0.004842604, + 0.013195768, + -0.025407268, + 0.018661743, + -0.022808796, + 0.0075066923, + 0.0073229624, + 0.0025361334, + 0.012559274, + 0.012847993, + 0.019409787, + 0.007972579, + 0.0030331893, + -0.0024311447, + -0.007106423, + 0.030997915, + -0.034278814, + 0.020328438, + 0.016207632, + 0.012008083, + -0.0034908745, + 0.0060335696, + -0.016430732, + -0.010347949, + 0.020275945, + -0.018254912, + 0.02077464, + 0.013792891, + 0.009914871, + 0.0066208504, + 0.022716932, + -0.022231359, + -0.0051542893, + 0.007244221, + 0.008655006, + 0.007841344, + 0.028688164, + 0.0038124025, + 0.0062665134, + 0.025761604, + -0.017139407, + -0.00019572601, + -0.02282192, + -0.004406245, + 0.02398992, + 0.023635583, + -0.010846646, + -0.6702479, + -0.016666956, + -0.011286286, + -0.0068701985, + 0.017454373, + 0.0113847125, + 0.022401966, + 0.017651226, + -0.02165392, + -0.013117027, + -0.011732488, + 0.0056004915, + 0.0064469627, + -0.012933296, + -0.013963498, + -0.0033547173, + 0.01459343, + -0.0063583786, + -0.029370591, + 0.0076641757, + -0.013451678, + -0.0011868646, + -0.0036253913, + -0.004334065, + 0.024436122, + 0.0033924475, + 0.0030594366, + -0.0072639063, + -0.010525118, + 0.0064141536, + -0.03566991, + 0.016614463, + 0.018044934, + -0.0039042674, + 0.047271166, + 0.0016666957, + -0.023740571, + -0.0036549193, + 0.024344256, + 0.009389928, + 0.0054397276, + -0.0039436384, + 0.009055276, + -0.010420129, + -0.001067932, + 0.008864984, + 0.014068487, + -0.006830828, + 0.015564576, + 0.018569877, + 0.017861204, + 0.0023720886, + -0.013215453, + -0.005255997, + 0.007165479, + -0.0031102905, + 0.008733748, + 0.0010654713, + 0.019659135, + -0.009245568, + -0.004215953, + -0.005095233, + -0.036116116, + -0.008727186, + -0.01232305, + 0.014094734, + -0.010288893, + 0.0016552126, + -0.00054914015, + -0.009265253, + 0.008438467, + 0.035092477, + -0.018189294, + -0.001996426, + 0.01748062, + 0.019002955, + 0.015498958, + -0.006817704, + 0.006214019, + -0.0067783333, + 0.018373024, + 0.004275009, + -0.008536894, + 0.014107858, + 0.011620938, + -0.027218321, + -0.033412658, + 0.008641883, + 0.0015239767, + -0.0006393648, + 0.01057105, + 0.024724841, + -0.01700817, + 0.001861909, + -0.014002869, + 0.01085977, + 0.013884757, + 0.020827135, + 0.013832262, + -0.008943725, + -0.011030376, + -0.024987312, + -0.011305971, + 0.0008915838, + 0.0012877521, + 0.008038198, + 0.009245568, + 0.01155532, + 0.025039807, + -0.043622807, + 0.004199548, + -0.02128646, + -0.048583522, + -0.008674691, + 0.025722234, + -0.029239355, + 0.022428213, + -0.0057875025, + 0.016338868, + -0.014882149, + -0.0033727621, + -0.007447636, + 0.012054016, + -0.008333478, + 0.018228665, + 0.009501478, + 0.008661568, + -0.017205024, + -0.009258691, + 0.001945572, + -0.0033104252, + 0.018386148, + 0.014724666, + 0.001847145, + 0.023740571, + 0.0032497286, + 0.005416761, + -0.0147377895, + 0.0049508736, + -0.019331045, + -0.023228751, + -0.0043110987, + -0.012716757, + -0.008976534, + -0.0056234575, + -0.020538416, + -0.012382106, + -0.023058144, + -0.041890495, + 0.011647184, + -0.021496437, + -0.010282331, + -0.0408931, + 0.009711456, + -0.00541348, + -0.015328351, + 0.004275009, + -0.02194264, + 0.0049279076, + -0.0041503347, + 0.021181472, + 0.021968886, + -0.03162785, + -0.003251369, + 0.022362594, + -0.0034875935, + 0.023136886, + 0.016430732, + -0.0013189206, + -0.010708848, + -0.00113355, + -0.009567096, + 0.0021342235, + 0.0020948527, + 0.032231532, + 0.016443856, + -0.006243547, + -0.0026690098, + -0.0036221105, + -0.0005782581, + 0.00039739866, + -0.02161455, + -0.01389788, + 0.00892404, + 0.009718017, + 0.005160851, + 0.01631262, + 0.019751001, + -0.022769425, + 0.00041236775, + -0.016811317, + 0.0034318184, + -0.014829655, + 0.005761255, + -0.0048918175, + -0.00039657843, + -0.0082481755, + 0.005964671, + 0.0003272695, + 0.022113247, + 0.025315402, + -0.010892578, + 0.0017733249, + -0.005679233, + -0.006670064, + -0.031549107, + 0.012624892, + -0.02161455, + 0.021010865, + 0.0066339737, + 0.014291587, + -0.024344256, + 0.0053445813, + 0.015236486, + 0.021955764, + 0.04047315, + -0.01013141, + 0.0011868646, + 0.014396576, + 0.01013141, + -0.010807275, + -0.022953156, + -0.0036811666, + 0.0059056147, + -0.012099949, + 0.015669564, + 0.006177929, + 0.027769513, + -0.004809795, + -0.023556842, + -0.022283852, + 0.008385973, + 0.010052669, + 0.008169434, + -0.01645698, + -0.0076379282, + 0.011719365, + -0.028556928, + 0.019698506, + -0.0035597733, + 0.02556475, + -0.010741657, + 0.033780117, + 0.0023671673, + -0.005446289, + -0.00314474, + 0.032940205, + 0.005767817, + -0.024987312, + 0.02673275, + -0.014252217, + -0.00438984, + 0.00043758965, + -0.004685121, + 0.010183904, + -0.016443856, + 0.03262524, + -0.008490962, + 0.005797345, + 0.037061013, + -0.0019586955, + -0.0102495225, + 0.014803408, + 0.002326156, + 0.00047942108, + -0.018438641, + 0.029738052, + -0.010623544, + -0.007677299, + -0.010374197, + -0.010052669, + -0.01232305, + 0.031286635, + -0.021877022, + 0.011588128, + -0.028530682, + -0.004078155, + -0.013248262, + -0.0003565925, + -0.00917995, + -0.014422824, + -0.023097515, + 0.014449071, + 0.009173389, + -0.0076116812, + -0.017454373, + -0.0017536395, + 0.0048196376, + -0.008359726, + 0.051234487, + 0.0031004478, + 0.03236277, + -0.0054955026, + -0.00259683, + -0.0030692792, + -0.0050394577, + 0.029318096, + -0.017834956, + -0.010223275, + -0.017401878, + 0.018281158, + -0.010649792, + -0.008162872, + 0.0011745611, + 0.05141822, + 0.007139232, + 0.00053642667, + -0.0068964455, + -0.005922019, + -0.009501478, + 0.008930602, + 0.0059909183, + -0.005101795, + -0.0030988073, + -0.011102555, + -0.018858597, + -0.006975187, + 0.009875501, + 0.015643317, + -0.009534287, + -0.005236312, + -0.030840432, + -0.017992439, + -0.016155137, + 0.10467374, + -0.0028100885, + -0.0047376156, + 0.004537481, + 0.0029052345, + 0.014278464, + 0.00071441534, + 0.005823592, + 0.015971407, + -0.0052428734, + 0.009823006, + -0.033727624, + 0.016391361, + 0.0060795024, + -0.0020981338, + -0.008353164, + -0.0046916828, + -0.033045195, + 0.019790372, + -0.012841431, + 0.009527725, + -0.0100854775, + 0.011673432, + 0.02658839, + -0.0066799065, + -0.007769164, + 0.03968573, + 0.012441162, + 0.021811403, + -0.008733748, + -0.005987637, + 0.022467583, + 0.0029462455, + 0.01872736, + 0.00003957582, + -0.020656528, + 0.030919174, + 0.006889884, + 0.0063911877, + -0.011811229, + 0.025105424, + -0.007112985, + -0.0027608748, + -0.017113158, + 0.011483139, + -0.0010613702, + -0.02333374, + 0.013208891, + -0.029711803, + -0.0043110987, + 0.048216064, + -0.008792805, + -0.0054659746, + -0.00009171133, + -0.0024295042, + 0.015315227, + -0.0067061535, + -0.021168347, + 0.005003368, + -0.0070736143, + -0.016653834, + -0.023976795, + -0.0074082655, + -0.011679994, + -0.018792978, + -0.03698227, + -0.012375544, + -0.0032661331, + -0.042546675, + -0.030892927, + 0.01085977, + -0.029921781, + -0.004048627, + -0.0011286286, + 0.024173649, + -0.025932211, + 0.020249696, + 0.004275009, + 0.009737702, + 0.022743179, + -0.0014255497, + -0.029134367, + 0.0066372547, + 0.011732488, + 0.0022277292, + 0.022913786, + 0.026772121, + -0.031470366, + -0.0019111226, + 0.02040718, + 0.0015830329, + -0.007237659, + 0.021732662, + 0.012664263, + -0.009055276, + -0.023202505, + 0.006758648, + 0.025761604, + -0.010991005, + -0.016522598, + 0.022152618, + -0.02552538, + 0.007906962, + -0.008353164, + 0.015577699, + 0.014094734, + 0.009639275, + 0.023254998, + -0.025000436, + -0.0029380433, + 0.028005738, + -0.03013176, + 0.0069555016, + 0.009632714, + -0.01846489, + 0.026798368, + 0.008910917, + 0.009015905, + -0.01085977, + -0.00917995, + 0.025814097, + -0.025735356, + 0.01375352, + 0.03734973, + 0.001441134, + -0.00081612315, + -0.006128716, + 0.0008440108, + -0.019803494, + -0.0051444466, + -0.010485747, + 0.0017290327, + -0.012697072, + -0.018911092, + -0.028136974, + -0.00943586, + -0.011942466, + 0.011470016, + -0.007920085, + -0.022835044, + -0.0024114593, + -0.004911503, + 0.0072639063, + -0.0034547846, + -0.031732835, + -0.012979229, + 0.017401878, + 0.0037369418, + -0.027165828, + 0.012218061, + -0.017113158, + 0.007828221, + -0.022677561, + 0.0014435947, + -0.0143572055, + -0.018766731, + -0.028399445, + -0.013504173, + 0.017821833, + 0.010420129, + 0.027218321, + 0.0017257519, + 0.013235139, + 0.0030348299, + -0.017821833, + 0.0018635496, + -0.009711456, + 0.0151708685, + 0.001002314, + 0.016876934, + 0.027060838, + 0.013543543, + -0.015538328, + 0.0014362127, + -0.016063273, + 0.018609248, + 0.011804667, + -0.018123675, + -0.017100036, + -0.019029204, + -0.016719451, + 0.0028871894, + -0.012080263, + 0.0030331893, + -0.019396663, + -0.015288981, + 0.022664437, + -0.01210651, + -0.0021899987, + 0.006624131, + 0.009737702, + -0.01938354, + 0.010964758, + 0.020197202, + -0.016194507, + -0.013622285, + -0.015498958, + -0.0038681778, + 0.008425344, + 0.023753695, + 0.018661743, + 0.0017798867, + -0.016404485, + -0.0034219758, + -0.0004466121, + 0.015328351, + -0.00079233665, + -0.016653834, + 0.017953068, + -0.02779576, + -0.015420216, + -0.0022687404, + 0.0033990094, + -0.018058058, + -0.010452938, + 0.012585521, + -0.022362594, + 0.017467497, + -0.02750704, + -0.009514602, + -0.011076309, + -0.010964758, + 0.019737877, + -0.0053773904, + 0.018596124, + 0.013418869, + -0.013005476, + -0.013287633, + 0.017310012, + 0.0036910092, + -0.022585696, + 0.021824528, + 0.0021850774, + -0.010918826, + -0.022191988, + -0.0039305147, + -0.0026903355, + 0.009980489, + -0.0065617943, + 0.035984877, + 0.023740571, + 0.0031709871, + -0.03178533, + -0.02194264, + 0.0073360857, + 0.013235139, + -0.0086812535, + 0.008576265, + -0.0071851644, + -0.0023130325, + -0.01729689, + 0.007040805, + -0.02640466, + 0.019803494, + 0.009927995, + -0.025669739, + -0.009941118, + -0.012099949, + 0.0030988073, + -0.00097442645, + 0.0050525814, + 0.019357292, + 0.018819226, + 0.012401791, + -0.003946919, + -0.00030655882, + -0.032494005, + 0.01784808, + -0.019987226, + 0.020932123, + -0.014186599, + -0.013701026, + -0.002252336, + 0.0045834132, + 0.02644403, + 0.028583175, + 0.004527638, + -0.01960664, + -0.014580307, + 0.0027789199, + 0.024396751, + 0.0030610769, + -0.003269414, + -0.00837285, + -0.021640796, + -0.014514688, + -0.014790284, + 0.0089502875, + 0.012821746, + -0.007493569, + -0.0086812535, + -0.007966018, + -0.0052166265, + 0.020604033, + -0.0020472798, + -0.0138716325, + 0.03616861, + 0.027034592, + -0.004970559, + -0.0028691445, + -0.002472156, + 0.013300757, + -0.034226317, + -0.001879954, + -0.007854467, + -0.007966018, + 0.013648531, + -0.012598645, + -0.00035741273, + -0.011699679, + 0.015774554, + 0.012972667, + 0.016247002, + 0.01225087, + 0.023727447, + -0.010426691, + 0.0062960414, + -0.014659048, + 0.0017241114, + 0.024527987, + -0.0075132544, + 0.006059817, + 0.009225883, + -0.008175995, + 0.03010551, + 0.013182645, + 0.00976395, + 0.012152443, + -0.020131584, + -0.011371589, + -0.012231184, + 0.014711542, + -0.011896533, + -0.008149749, + -0.013701026, + -0.014449071, + -0.0053445813, + 0.015945159, + 0.015302104, + -0.014829655, + -0.021050235, + 0.032756478, + 0.03921328, + 0.012624892, + -0.0059023337, + -0.020354686, + -0.00859595, + 0.002677212, + -0.05448914, + -0.013556667, + -0.0030249872, + 0.030840432, + 0.009376803, + -0.018294282, + -0.031732835, + 0.0062173, + -0.024659222, + -0.006082783, + -0.007493569, + 0.023097515, + 0.01524961, + -0.008116939, + -0.012664263, + -0.0021785158, + 0.0041044024, + 0.022690684, + -0.00010550135, + 0.0061943335, + 0.030158006, + -0.031207893, + 0.02458048, + 0.0014304711, + -0.009494917, + 0.010229837, + 0.0137666445, + -0.00025611502, + 0.00021407854, + 0.0013952014, + -0.017493743, + -0.013609161, + -0.016732575, + 0.0004293874, + -0.011515949, + 0.021522684, + 0.033622634, + -0.037244745, + 0.0027198638, + 0.021667045, + -0.026129065, + 0.0036713239, + 0.008497523, + 0.0007603479, + 0.0069883107, + 0.00015574008, + -0.028530682, + -0.0068242657, + -0.005446289, + -0.041129325, + 0.015682688, + 0.012598645, + -0.012565835, + 0.0076969843, + -0.0027756388, + 0.0055906484, + -0.010557927, + -0.0067192772, + -0.037979666, + -0.007880715, + 0.020997742, + -0.026877109, + -0.008280984, + -0.010741657, + 0.012565835, + -0.034357555, + 0.0047310535, + 0.0003309605, + -0.012821746, + -0.014514688, + -0.0020128305, + 0.016470103, + -0.007106423, + -0.0027297065, + 0.0062533896, + -0.021312708, + -0.001503471, + -0.006528985, + 0.01758561, + -0.010518556, + 0.024436122, + 0.013464802, + -0.007040805, + -0.042494178, + -0.004524357, + 0.013622285, + 0.0016265047, + 0.0060106036, + 0.23475474, + 0.018110553, + 0.0013000554, + 0.031207893, + -0.0067783333, + 0.030525466, + 0.025249785, + -0.005735008, + -0.00994768, + -0.010098601, + -0.018058058, + -0.007749479, + -0.0077626025, + -0.0012992353, + -0.0091668265, + -0.015669564, + -0.020958371, + -0.039160788, + -0.01027577, + -0.022428213, + 0.0016256846, + 0.005928581, + -0.0018291001, + -0.020302191, + 0.033333912, + 0.004567009, + -0.016509473, + 0.013884757, + 0.03228403, + 0.0059154574, + -0.003167706, + 0.009475231, + 0.014606554, + 0.008609074, + -0.012185251, + -0.012185251, + -0.022428213, + -0.0034711892, + 0.015538328, + 0.01872736, + 0.0007808535, + -0.008904355, + 0.005794064, + -0.0053905137, + -0.0031168521, + 0.040210675, + 0.0006287019, + -0.004143773, + 0.018412394, + 0.019449158, + -0.023635583, + -0.009639275, + 0.00980332, + 0.039475754, + 0.013687903, + 0.0080841305, + 0.026024075, + 0.013195768, + 0.0033891667, + 0.0019833022, + -0.017782463, + 0.0065913224, + -0.014435947, + 0.006204176, + -0.003992852, + 0.0025295718, + -0.029134367, + 0.03514497, + 0.005767817, + 0.0020948527, + 0.0146852955, + -0.016811317, + -0.011975274, + -0.010026421, + -0.02051217, + -0.032494005, + 0.027822006, + 0.037953418, + 0.0037763126, + 0.0183599, + -0.022178864, + 0.015288981, + 0.018766731, + -0.00076198834, + 0.011417522, + -0.03404259, + 0.004970559, + 0.008451591, + 0.0037172565, + 0.00175528, + 0.007565749, + 0.0043832785, + -0.014015992, + -0.0038124025, + 0.010544803, + 0.0057186037, + 0.0035466498, + 0.012847993, + -0.01408161, + 0.008405658, + -0.010702286, + -0.005397076, + 0.02519729, + -0.0023655267, + -0.0050985143, + 0.0011097634, + 0.008891231, + 0.015498958, + -0.027008345, + -0.037323486, + -0.01013141, + -0.010439814, + -0.008766557, + -0.0012631454, + 0.029081872, + 0.003628672, + 0.032572746, + -0.0126839485, + 0.012172128, + -0.01608952, + 0.00057374686, + -0.01923918, + -0.018858597, + 0.012933296, + 0.0071917265, + -0.011837477, + -0.018569877, + 0.0038353687, + 0.0082481755, + -0.031732835, + 0.0022392122, + 0.010354511, + -0.00057989854, + -0.0061221537, + -0.006496176, + 0.027926996, + 0.0037402227, + -0.021076484, + -0.010761342, + -0.0017175496, + 0.026929604, + 0.006410873, + 0.011305971, + 0.017572485, + -0.006666783, + -0.0040748743, + 0.022979403, + 0.0016404486, + 0.0028428973, + -0.012368982, + -0.013366375, + -0.017165653, + -0.0035433688, + -0.018884843, + 0.01803181, + -0.019002955, + -0.023451852, + -0.023963673, + -0.014908397, + 0.03616861, + -0.014580307, + 0.0073820185, + 0.033963848, + -0.013431992, + -0.030525466, + -0.0007845445, + -0.16934678, + 0.0274283, + 0.039108295, + -0.00028092682, + 0.010052669, + 0.01989536, + -0.005587368, + -0.012204937, + -0.0038386495, + 0.017113158, + 0.039187036, + 0.0019980664, + -0.025171041, + -0.016522598, + 0.0012483813, + -0.026982097, + -0.008313793, + -0.0037369418, + 0.010931949, + -0.002874066, + 0.016443856, + -0.013806015, + 0.022178864, + -0.027585782, + -0.006597884, + 0.017165653, + 0.0010728533, + 0.02220511, + -0.0019997067, + -0.018609248, + -0.02761203, + -0.010630107, + 0.016076395, + 0.0048918175, + 0.022021381, + 0.021312708, + 0.0015379206, + -0.012565835, + -0.0076707373, + 0.008359726, + 0.009029029, + 0.019331045, + 0.015328351, + 0.008490962, + -0.0035204026, + 0.024698593, + 0.03517122, + 0.0027854815, + 0.0061024684, + -0.014606554, + 0.016037025, + -0.021496437, + -0.003533526, + 0.014475318, + 0.0012811903, + 0.011634061, + -0.0018192574, + -0.0011614376, + 0.0073492094, + -0.016627586, + -0.021995135, + 0.0008579546, + -0.005426604, + -0.0054692556, + -0.022795673, + -0.022323223, + -0.0050985143, + 0.009593343, + -0.026220929, + 0.018163046, + 0.0044849864, + -0.03632609, + 0.013327004, + -0.024947941, + 0.026247177, + 0.018819226, + -0.015000261, + 0.014934643, + -0.009914871, + -0.001301696, + -0.020105338, + 0.027533289, + -0.020840257, + -0.022520078, + 0.010662915, + 0.009396489, + -0.008497523, + 0.0026050322, + -0.0071326704, + -0.016693205, + -0.014317835, + -0.02542039, + 0.0056693903, + -0.03262524, + 0.0063419743, + 0.007867591, + -0.010872893, + -0.002897032, + -0.011424083, + 0.008477838, + 0.027848255, + 0.0021457067, + -0.030420478, + 0.02845194, + 0.029606815, + 0.010833522, + -0.009448984, + 0.014619677, + 0.012408352, + -0.012460847, + -0.028294457, + -0.01129941, + 0.021023989, + 0.0042782896, + -0.009134018, + 0.0009826287, + 0.012939858, + -0.006981749, + 0.004176582, + -0.0014723026, + 0.05496159, + -0.0007816737, + -0.0076969843, + 0.039738227, + -0.00015850834, + -0.013543543, + -0.07690423, + -0.027218321, + 0.02106336, + 0.016194507, + -0.013674779, + 0.04433148, + -0.0055808057, + 0.01762498, + 0.0036188294, + 0.019436033, + 0.0068439515, + -0.018084304, + 0.01371415, + -0.013976621, + 0.0427829, + 0.019081697, + 0.008792805, + -0.028294457, + -0.008182557, + 0.016601339, + -0.017126283, + 0.0041240877, + -0.011634061, + -0.016483227, + 0.000017788614, + -0.0018012126, + -0.029475579, + 0.01755936, + 0.011889971, + 0.011876848, + -0.010807275, + -0.020604033, + -0.01960664, + -0.00281665, + -0.014147229, + 0.009849253, + -0.034173824, + 0.010879455, + 0.020131584, + -0.04015818, + -0.007565749, + 0.00208501, + 0.0046687163, + -0.021850774, + -0.010492309, + -0.004078155, + 0.015735183, + -0.0130186, + 0.023793066, + -0.009527725, + -0.0022687404, + -0.0022917066, + -0.008504085, + 0.015525205, + -0.016443856, + -0.016430732, + -0.01024296, + 0.011430645, + -0.020787764, + -0.0067652096, + -0.00917995, + -0.0043078177, + -0.025945334, + 0.010800713, + 0.016194507, + 0.014882149, + -0.031339128, + -0.026181558, + 0.012605207, + -0.0169688, + -0.016942553, + 0.009081523, + -0.02695585, + -0.00071277487, + -0.023071269, + -0.010518556, + -0.013556667, + -0.0156039465, + 0.024737963, + -0.029239355, + -0.027926996, + -0.028845647, + 0.008746872, + 0.013136712, + 0.023924302, + 0.025879717, + 0.0012024487, + -0.015813924, + -0.0068045803, + -0.024265515, + 0.015315227, + 0.031207893, + -0.0020308753, + -0.025066053, + -0.008707501, + 0.024186773, + 0.0031939533, + -0.006378064, + 0.007447636, + 0.0158008, + -0.012710195, + -0.010072354, + -0.08887294, + 0.013648531, + -0.0027854815, + -0.019094821, + 0.030289242, + -0.014882149, + 0.0027379086, + -0.021352079, + -0.001368134, + 0.012027768, + -0.047271166, + -0.007985704, + 0.0021243808, + 0.0117062405, + -0.020302191, + -0.02490857, + 0.031207893, + 0.012172128, + 0.009665523, + 0.010439814, + 0.014816531, + 0.0035630541, + 0.014514688, + -0.008307232, + -0.020879628, + -0.00073902204, + -0.010945072, + 0.017375631, + 0.0015805722, + -0.0052133454, + 0.009560534, + -0.039187036, + 0.005613615, + 0.0446202, + -0.00075952767, + -0.021575179, + 0.013412307, + 0.024698593, + 0.03446254, + 0.008641883, + -0.009672085, + -0.008602512, + 0.008202243, + -0.020695899, + -0.009744264, + 0.0073229624, + 0.009927995, + -0.002040718, + 0.016470103, + 0.031654093, + 0.0014271903, + 0.03923953, + 0.00039145202, + -0.02304502, + -0.0092193205, + -0.023254998, + 0.017716844, + 0.0036713239, + -0.007723232, + 0.011017253, + 0.023963673, + 0.0125199035, + 0.011640623, + 0.024173649, + 0.023766818, + -0.011056623, + -0.02545976, + 0.0020472798, + 0.021863898, + -0.015341475, + -0.00015502238, + 0.0011679993, + 0.023071269, + 0.0009777073, + 0.028268209, + -0.0183599, + 0.015905788, + -0.0027149424, + -0.029974276, + 0.02212637, + 0.0020718866, + 0.000023261047, + -0.01758561, + 0.020761516, + 0.01254615, + -0.0006791457, + -0.023018774, + 0.00318247, + -0.005954828, + 0.0167457, + -0.004212672, + -0.010649792, + 0.012847993, + -0.0031217735, + 0.010557927, + 0.011279725, + 0.010945072, + -0.005108357, + 0.017782463, + 0.01758561, + 0.008792805, + -0.023018774, + -0.0044423346, + -0.016338868, + -0.016010778, + 0.030315489, + -0.0005606233, + -0.015367722, + -0.012093387, + 0.011050061, + 0.023386234, + 0.026654009, + 0.009613029, + 0.02538102, + -0.026378412, + 0.01700817, + -0.0138191385, + -0.029055625, + -0.03244151, + 0.015695812, + 0.013464802, + 0.023359988, + 0.0060040415, + -0.0077035464, + 0.012716757, + 0.015236486, + -0.0066208504, + -0.008622197, + 0.008038198, + -0.0068964455, + 0.023622459, + 0.007578872, + -0.020564662, + 0.006027008, + -0.013622285, + 0.013661656, + -0.008182557, + -0.0034908745, + -0.017073788, + 0.024186773, + -0.0037336608, + 0.00961959, + 0.0058465586, + 0.012198376, + 0.031837825, + 0.012992352, + 0.022401966, + -0.027664524, + -0.019659135, + 0.009724579, + 0.01729689, + 0.006975187, + -0.012480533, + -0.016706329, + 0.0034022902, + 0.002165392, + 0.017533114, + -0.014278464, + 0.012040893, + 0.039370764, + 0.005219907, + 0.029606815, + -0.01733626, + -0.022730054, + -0.005105076, + 0.017310012, + 0.010991005, + -0.0013927408, + -0.026798368, + 0.0107875895, + 0.00032644926, + -0.016286373, + -0.023241876, + 0.012237746, + -0.014068487, + -0.02431801, + 0.0028806275, + 0.026535895, + 0.018648619, + -0.007723232, + 0.024790458, + -0.020052843, + -0.0042651664, + 0.013477925, + -0.014029116, + -0.007355771, + 0.0037795934, + -0.013340128 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 23, + "total_tokens": 23 + } +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:33 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 64 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-qpwjk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_d26c339b889a48e98afe974ba3bc4727 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:34 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 82 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-xzdkj +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_76c89ea05c7e4eaab229e6051202e070 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} diff --git a/vectorstores/dolt/testdata/TestDoltStoreSimilarityScore.httprr b/vectorstores/dolt/testdata/TestDoltStoreSimilarityScore.httprr new file mode 100644 index 000000000..4c4a37244 --- /dev/null +++ b/vectorstores/dolt/testdata/TestDoltStoreSimilarityScore.httprr @@ -0,0 +1,6263 @@ +httprr trace v1 +333 101190 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 137 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Tokyo is the capital city of Japan.","Paris is the city of love.","I like to visit London."]}HTTP/2.0 200 OK +Content-Length: 100233 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:36 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 157 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999979 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_6b6f4d402ea5493280d751561e20200d + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.00077703263, + -0.005729557, + -0.029226901, + -0.0020885158, + -0.00060029427, + 0.0071896696, + -0.01998568, + 0.011939657, + 0.0037827396, + -0.042435687, + -0.0044943136, + 0.0011613134, + 0.007325208, + -0.035190567, + -0.019172452, + -0.024175033, + 0.020207468, + -0.03960171, + -0.0002475877, + -0.022831976, + -0.0072019915, + 0.016289191, + -0.004639093, + -0.00832942, + -0.01596883, + -0.0050364654, + 0.0012452545, + -0.021180877, + 0.025234694, + -0.017435104, + -0.011397505, + 0.0010057528, + -0.0064072465, + -0.01847012, + 0.004497394, + -0.011508401, + -0.010682851, + 0.0003284484, + -0.006943237, + -0.015537572, + 0.02959655, + -0.005344506, + -0.00476847, + -0.004799274, + -0.00938908, + 0.020983731, + -0.0050611086, + -0.00017510189, + -0.003314518, + 0.010430258, + 0.018322261, + 0.012678955, + -0.037728824, + -0.011292771, + -0.028512247, + -0.019973358, + -0.033785902, + -0.0125619, + -0.0019160131, + 0.006752252, + 0.005131958, + -0.0013068626, + -0.004130826, + -0.002293363, + 0.0053537474, + -0.015648467, + -0.018223688, + 0.039330635, + -0.020712657, + 0.0055385716, + 0.020527832, + 0.012481809, + 0.010836871, + -0.0070294887, + 0.026466856, + -0.00908104, + -0.022758046, + 0.011446792, + 0.0065058195, + 0.011520722, + 0.0129623525, + -0.027649732, + 0.010029805, + -0.01907388, + 0.014009691, + 0.008871572, + -0.019591387, + 0.028216528, + 0.0024566245, + -0.010325524, + 0.013430574, + -0.000298992, + 0.0052551744, + -0.00023295578, + -0.023263233, + -0.009795694, + 0.00037946762, + 0.016215261, + -0.016153654, + -0.018642623, + 0.016264549, + 0.0008009058, + -0.00025066812, + -0.0014262284, + -0.026737932, + 0.023250911, + 0.015549894, + -0.0032652314, + 0.014650416, + -0.011157234, + 0.011206521, + 0.02400253, + -0.005815808, + -0.055792328, + -0.019394241, + -0.014009691, + 0.011785637, + -0.013048603, + -0.011563848, + 0.0029695123, + 0.032726243, + 0.027156867, + 0.011058661, + 0.011415988, + 0.020823551, + 0.010873836, + -0.011791797, + -0.027230797, + -0.008409511, + -0.011939657, + 0.016486337, + 0.010313203, + -0.014638093, + 0.029842982, + 0.000703873, + 0.012777528, + -0.018630302, + 0.014835239, + -0.0053106216, + -0.010109896, + 0.020823551, + 0.002240996, + -0.0048085153, + 0.009795694, + 0.027082937, + 0.019813176, + 0.030877998, + 0.018383868, + 0.019443529, + 0.0062039397, + 0.0074607455, + -0.005649466, + 0.021525884, + 0.006943237, + 0.018728875, + 0.00976489, + 0.019961037, + 0.00991891, + 0.005738798, + 0.0064934976, + -0.0028678589, + 0.008822286, + 0.028857252, + -0.0065304628, + -0.0066783223, + 0.016165975, + -0.008483441, + 0.01189037, + 0.0015078592, + -0.004072298, + -0.013713972, + 0.0002454699, + -0.036545947, + 0.016005794, + 0.0040846197, + 0.010744459, + 0.00091026025, + -0.001127429, + -0.022450006, + -0.0023734535, + -0.017915646, + -0.0018975306, + 0.033884477, + 0.012321628, + -0.001249105, + 0.009795694, + 0.01786636, + 0.012888422, + 0.019505136, + -0.025234694, + 0.032578383, + 0.035091996, + 0.01295003, + 0.008163079, + -0.66990227, + -0.02838903, + 0.005649466, + 0.0062871105, + 0.031025859, + 0.00628095, + 0.0011697846, + 0.030631566, + 0.0019052316, + 0.012463327, + -0.023213947, + -0.004805435, + -0.03745775, + -0.01590722, + -0.01732421, + -0.008729873, + -0.008655943, + -0.011853406, + -0.0021054582, + 0.013640041, + 0.0066906437, + 0.016855987, + -0.016289191, + -0.018457798, + 0.0045158765, + 0.0020915964, + 0.024840401, + -0.014145228, + -0.020047288, + 0.039034918, + -0.035018064, + 0.029005112, + 0.01590722, + -0.0059636678, + 0.028413674, + 0.012549577, + -0.03814776, + 0.019258704, + 0.016695805, + 0.011477596, + -0.009617031, + 0.021784637, + 0.0072019915, + -0.008391028, + -0.0034315733, + -0.0017897164, + 0.033416253, + -0.021759994, + 0.006647518, + 0.0033976887, + 0.006548945, + -0.037063457, + -0.013344322, + -0.002778527, + -0.008095309, + 0.0034716185, + -0.012839136, + -0.0034623775, + -0.014958456, + -0.011662421, + -0.014465591, + 0.0010042127, + -0.024975939, + 0.001703465, + -0.013972726, + 0.012851458, + -0.017053133, + 0.0062439847, + 0.0022795012, + -0.029621193, + -0.0017666133, + 0.002565979, + 0.0017465907, + -0.008095309, + 0.011637777, + 0.008803803, + 0.028980467, + -0.009869624, + -0.0027292406, + -0.003194382, + -0.0064380504, + 0.0008756057, + -0.020108895, + -0.014169872, + 0.0074299416, + -0.045984313, + -0.03376126, + -0.0037519357, + 0.026368283, + -0.025678271, + -0.0030311204, + 0.00196684, + 0.0050919126, + 0.0011359, + -0.013861831, + 0.008637461, + 0.011779476, + -0.012426361, + 0.014847562, + 0.00024932044, + -0.008144596, + -0.016437052, + 0.009549261, + 0.00658591, + -0.0076332483, + -0.005686431, + -0.018137436, + 0.009216578, + 0.029769052, + -0.004050735, + 0.013455218, + -0.01757064, + -0.0037889006, + 0.014921491, + 0.017127063, + -0.01582097, + 0.033120535, + 0.012629668, + 0.036521304, + 0.014650416, + 0.016326157, + 0.023041444, + 0.021821603, + 0.0036071565, + 0.015636146, + 0.020416938, + 0.0005186635, + -0.0015656168, + -0.025555056, + 0.002890962, + -0.01249413, + 0.009105682, + 0.018260652, + -0.0013345863, + 0.019591387, + 0.0020638725, + 0.0030018566, + -0.023965565, + 0.019973358, + -0.015044707, + -0.027871521, + -0.012136803, + -0.005455401, + 0.0007812682, + 0.0064072465, + -0.026466856, + -0.021365702, + -0.0043957406, + -0.027970094, + 0.012851458, + 0.0003475084, + 0.0066105532, + -0.00022121173, + 0.024557004, + -0.026491499, + 0.0021455034, + -0.024433788, + 0.0030542235, + -0.0022225135, + -0.002906364, + 0.015069351, + 0.0128021715, + -0.0407353, + -0.008772999, + -0.010830711, + -0.008680587, + 0.0066043925, + 0.019480493, + -0.009475332, + -0.026491499, + -0.030902643, + -0.018186722, + -0.012974674, + -0.012025909, + 0.0054708025, + 0.0059605874, + 0.022228217, + -0.011902692, + 0.000022212622, + -0.007965933, + 0.008754516, + -0.0075469967, + -0.0018944503, + -0.009185773, + 0.024840401, + -0.022437684, + 0.01702849, + 0.00492249, + -0.0032282665, + 0.00749771, + -0.019344956, + 0.013553791, + 0.0051566013, + -0.0072327955, + 0.004404982, + 0.0039244383, + 0.023953244, + 0.013455218, + -0.0251238, + 0.007676374, + 0.0138987955, + -0.009358277, + 0.005390712, + -0.02407646, + 0.0052982997, + -0.011797958, + -0.015044707, + -0.025949348, + 0.011588491, + 0.0047530676, + 0.016560268, + -0.021981783, + -0.012352432, + 0.017582962, + -0.018371547, + 0.026811862, + 0.013566112, + 0.0143546965, + -0.011853406, + -0.00067730446, + 0.013935761, + -0.010380971, + -0.0060006324, + -0.030606924, + -0.025173085, + 0.01567311, + 0.013110212, + 0.03573272, + -0.00855737, + -0.015944187, + -0.0336134, + -0.025407197, + 0.0021100787, + 0.023152338, + -0.016535625, + -0.022240538, + 0.007879681, + -0.011415988, + 0.03149408, + 0.0146134505, + 0.02498826, + -0.003209784, + 0.023448057, + -0.02861082, + 0.0081877215, + -0.009315151, + 0.055447325, + 0.014835239, + -0.006647518, + 0.013516826, + -0.026097206, + -0.011841084, + -0.0067214477, + -0.004149308, + 0.0052212896, + -0.044308573, + 0.029892268, + -0.0018944503, + 0.033145178, + 0.037383817, + 0.01423148, + 0.0073868157, + -0.00893318, + 0.0044542686, + 0.002612185, + -0.005843532, + 0.017398138, + 0.019616032, + -0.0005787315, + -0.0054153553, + -0.036398087, + 0.012999317, + 0.0070664533, + -0.010725977, + 0.014983099, + -0.01415755, + -0.028734036, + -0.019800855, + 0.010652047, + 0.01377558, + 0.002277961, + -0.054708026, + -0.0113913445, + 0.019677639, + 0.0093213115, + -0.045688596, + -0.020712657, + -0.009801854, + -0.02294287, + 0.022474648, + -0.00166496, + 0.0036934079, + -0.0012329329, + -0.0032683117, + -0.00651198, + -0.021710709, + 0.015562216, + 0.013295036, + -0.017915646, + -0.007836555, + 0.014477912, + -0.028758679, + -0.003791981, + 0.0028293538, + 0.01128045, + 0.0029156052, + -0.004626771, + 0.004648334, + 0.008939341, + -0.008317099, + 0.0060067936, + -0.02400253, + -0.0064380504, + -0.0038628303, + 0.006616714, + -0.0019036914, + -0.010596599, + 0.020688012, + 0.013258072, + -0.008070666, + -0.010350167, + -0.00064303493, + -0.033194464, + 0.01468738, + 0.09985447, + -0.004934812, + 0.013048603, + -0.01014686, + -0.008822286, + 0.007208152, + -0.010553474, + -0.009931232, + 0.0009017891, + 0.010966249, + -0.002037689, + -0.021106947, + -0.018975306, + 0.01938192, + 0.008292455, + 0.0062501454, + -0.0163508, + -0.025333267, + 0.01211216, + -0.0044173035, + 0.0071650264, + -0.0010581198, + -0.004066137, + -0.0011004753, + -0.010239272, + -0.0006376442, + 0.0336134, + 0.020909801, + 0.0129623525, + -0.021168556, + -0.0035332267, + 0.014983099, + -0.03580665, + 0.008908537, + -0.026516143, + 0.024421467, + -0.0061146077, + 0.01702849, + -0.010430258, + -0.009432206, + 0.0024473832, + 0.018137436, + 0.01256806, + -0.010005161, + 0.009050235, + -0.011878049, + -0.017225636, + 0.014440947, + -0.012678955, + -0.025678271, + 0.024630934, + 0.0046236906, + -0.041523885, + -0.021168556, + -0.0098388195, + 0.008686747, + -0.01165626, + -0.010528831, + -0.0027354013, + -0.017681535, + 0.0019622191, + -0.029645836, + -0.028635463, + -0.0283151, + -0.011064822, + -0.034574486, + 0.0090872, + -0.005532411, + -0.028955825, + -0.0023765338, + 0.0072635994, + -0.017829396, + -0.016239906, + 0.025579698, + 0.018913697, + -0.021057662, + 0.012136803, + -0.01847012, + 0.005988311, + 0.03573272, + -0.030040128, + -0.019603709, + -0.024175033, + -0.011767155, + -0.03730989, + 0.021944819, + 0.023213947, + -0.015328105, + -0.00083325006, + 0.0043125697, + 0.008391028, + -0.0018713472, + 0.019579066, + 0.031149074, + -0.00018703846, + 0.003058844, + 0.0030095575, + 0.0147736315, + -0.012728241, + -0.012974674, + 0.019061558, + -0.0061238487, + -0.0029387083, + 0.019320313, + 0.017891003, + -0.0013769419, + 0.015759362, + 0.0055601345, + -0.0015278818, + 0.0052798176, + 0.0100975735, + -0.016252227, + 0.017237958, + 0.009740246, + -0.020540154, + 0.017274922, + 0.00938908, + 0.023657525, + 0.025333267, + -0.024815759, + -0.012401718, + -0.005553974, + 0.026442213, + 0.02838903, + -0.00006555491, + -0.00073544716, + 0.013640041, + -0.0047007008, + -0.0054091946, + -0.008890054, + -0.008588174, + 0.01695456, + -0.022758046, + -0.014256123, + -0.010947766, + 0.008354063, + -0.022992156, + 0.015414356, + -0.019110844, + -0.014588807, + -0.011643938, + 0.015722398, + 0.01664652, + -0.015057029, + -0.04209068, + -0.022548579, + 0.008434154, + 0.009475332, + -0.0032898746, + 0.011348219, + 0.0036287194, + 0.016104367, + -0.011643938, + 0.016868308, + -0.0076948563, + -0.008261652, + -0.031740513, + -0.029350117, + -0.006672161, + 0.012900744, + 0.030040128, + 0.0026676324, + 0.01536507, + -0.015882578, + -0.015475964, + 0.0036441213, + 0.006758413, + 0.008200043, + -0.018125115, + 0.0084649585, + 0.036225583, + 0.02445843, + -0.016966881, + -0.009475332, + -0.020219792, + 0.031223005, + -0.0007916646, + 0.0062717083, + -0.011933496, + -0.021833925, + -0.009364437, + -0.001499388, + -0.0006538164, + 0.009031753, + -0.0086313, + -0.009672478, + 0.007282082, + -0.002080815, + 0.031518724, + 0.01249413, + 0.007910485, + -0.013368966, + 0.009881945, + 0.0070356494, + 0.0062778695, + 0.009216578, + -0.012777528, + -0.00072505075, + -0.00065304624, + 0.02201875, + 0.022905905, + -0.007337529, + -0.011009375, + 0.0029910752, + 0.0049194098, + 0.024791114, + -0.0007154245, + -0.009653995, + 0.004445027, + -0.0058496925, + -0.013677007, + -0.011348219, + -0.01899995, + -0.018938342, + -0.013763258, + -0.00085019233, + -0.01816208, + 0.022979835, + -0.032110162, + -0.017533677, + 0.0071280617, + -0.007411459, + 0.035239857, + 0.00087098504, + 0.011163395, + -0.008095309, + -0.0055262498, + 0.000110509594, + -0.0018066587, + 0.0010303961, + -0.0012968513, + 0.01823601, + 0.017077776, + -0.018605657, + -0.044702865, + -0.023509666, + 0.01582097, + -0.0109539265, + -0.006542784, + 0.0023441897, + 0.004411143, + -0.0012829895, + -0.021981783, + 0.016831344, + -0.008046023, + 0.029276187, + -0.015796326, + -0.017755466, + -0.0015093994, + -0.013911118, + -0.003776579, + 0.007540836, + -0.009684799, + -0.0005510078, + 0.0007985955, + -0.002096217, + 0.009962036, + -0.02907904, + -0.016547946, + 0.00056140416, + -0.005926703, + 0.01309789, + 0.003573272, + 0.022659473, + 0.0105349915, + 0.00325599, + -0.0022456166, + 0.010454901, + 0.008206204, + 0.02590006, + -0.0013661605, + -0.025259336, + -0.015623824, + 0.01983782, + 0.01036865, + -0.0019791615, + -0.0026768737, + -0.010405614, + -0.030582279, + -0.011496078, + 0.020219792, + 0.009937393, + -0.003542468, + -0.019332634, + -0.02663936, + -0.028019382, + -0.03043442, + 0.0030033968, + 0.01839619, + -0.006290191, + -0.007208152, + 0.012826814, + -0.017804751, + 0.024938975, + 0.009869624, + -0.0052798176, + 0.017151706, + 0.01642473, + -0.019739248, + -0.0051750834, + -0.0013908037, + 0.03716203, + -0.027033651, + -0.0061454116, + -0.0060529998, + -0.024273606, + 0.023201624, + -0.020207468, + -0.014169872, + -0.031321578, + 0.019123167, + 0.01499542, + 0.0017311887, + 0.01627687, + 0.018815124, + -0.019369598, + -0.0032991157, + -0.009715604, + -0.026614716, + 0.03156801, + 0.0038412674, + 0.012216894, + 0.014933812, + -0.012549577, + -0.007109579, + 0.020688012, + -0.022979835, + -0.007935128, + -0.0038628303, + -0.028561532, + -0.028413674, + 0.0045620827, + -0.014293088, + 0.010140699, + -0.0038135438, + 0.0025320945, + -0.0062316633, + -0.004201675, + 0.009093361, + -0.0022055714, + 0.0011151073, + 0.029424047, + 0.004860882, + -0.004867043, + -0.0011482217, + -0.00961087, + 0.018088149, + -0.008292455, + -0.023793062, + -0.0143546965, + -0.021772316, + 0.0029648917, + -0.0037580964, + -0.023041444, + -0.021710709, + -0.0058342908, + -0.039084204, + -0.017607605, + -0.00257368, + 0.034820918, + 0.025259336, + 0.003308357, + 0.002732321, + 0.007996736, + 0.017410459, + 0.0067399302, + -0.008871572, + 0.018297616, + 0.033835188, + -0.029276187, + 0.023706812, + 0.0077934293, + -0.0046914597, + -0.0075285146, + -0.0081754, + -0.005051867, + 0.004019931, + 0.027526516, + 0.0027908487, + -0.0150323855, + -0.012937709, + 0.009481492, + -0.029497977, + 0.017040811, + 0.012999317, + -0.022474648, + 0.02824117, + 0.020798907, + -0.006856986, + -0.013677007, + 0.011459114, + -0.003915197, + -0.006752252, + 0.0002633748, + -0.027797591, + -0.016301513, + -0.004226318, + -0.017927969, + 0.012155286, + -0.01763225, + 0.0043402934, + 0.0020238273, + 0.0073868157, + -0.0040877, + -0.022918228, + 0.0051874053, + -0.017237958, + 0.002022287, + -0.00054253667, + -0.005131958, + -0.022437684, + -0.013344322, + 0.009647834, + -0.035609502, + -0.012937709, + 0.019394241, + -0.0041000214, + -0.04504787, + 0.013233428, + 0.02111927, + -0.016338479, + -0.0074052983, + 0.00734369, + -0.020096574, + 0.013344322, + -0.016030438, + 0.011711707, + -0.033194464, + 0.02044158, + 0.0025228532, + -0.007540836, + -0.017977254, + -0.0032036232, + 0.009259704, + -0.033120535, + -0.0045928867, + 0.2261265, + -0.0152911395, + 0.015931865, + 0.02809331, + -0.016005794, + 0.04965616, + 0.015944187, + -0.010467223, + -0.023053765, + 0.0008979386, + -0.037211314, + 0.010251594, + 0.0146134505, + 0.010079091, + -0.0015925703, + -0.030532993, + -0.025074512, + -0.021106947, + -0.021242486, + 0.0007477688, + 0.0010558094, + -0.0087237125, + 0.009210417, + 0.001445481, + 0.000023812989, + 0.014071299, + -0.0216491, + 0.010473384, + 0.027107581, + -0.00009765852, + 0.0025351748, + 0.00011811435, + 0.0011466815, + 0.01384951, + -0.01590722, + -0.012543417, + -0.009118005, + 0.002103918, + 0.026121851, + 0.013245749, + 0.0115700085, + 0.0071958303, + -0.01302396, + 0.00070964877, + 0.0008910077, + 0.011089465, + -0.019640675, + -0.001120498, + -0.016400086, + 0.02769902, + -0.028586175, + -0.022918228, + 0.030680852, + 0.034081623, + 0.011144912, + -0.0063949246, + 0.05618662, + 0.023793062, + 0.0070602926, + -0.011415988, + -0.014071299, + 0.04135138, + -0.01642473, + 0.021230165, + 0.006542784, + 0.009783372, + -0.03245517, + 0.020121219, + 0.019628353, + 0.0032036232, + 0.015562216, + 0.007639409, + 0.0053475862, + -0.015599181, + -0.01688063, + 0.0052674958, + 0.032578383, + -0.004528198, + 0.029399404, + 0.021390345, + -0.00317898, + -0.0016464775, + 0.017102418, + -0.005042626, + 0.011477596, + -0.010307042, + 0.021599812, + 0.005935944, + 0.0077934293, + -0.0022302147, + -0.005815808, + -0.02294287, + 0.0031327738, + -0.021796959, + -0.004324891, + 0.006912433, + -0.007910485, + 0.0074299416, + 0.009931232, + -0.005557054, + -0.010701333, + 0.0035948348, + 0.022376075, + -0.004528198, + 0.0015363529, + 0.0032190252, + 0.002188629, + -0.007214313, + -0.003376126, + -0.020158183, + 0.0002633748, + -0.017817074, + 0.009000949, + 0.017065454, + 0.007910485, + 0.0033021963, + 0.010134539, + -0.014182193, + 0.03193766, + -0.014330053, + 0.009771051, + -0.018112792, + -0.021612136, + 0.00079320476, + -0.0052674958, + -0.020269077, + -0.007349851, + -0.010725977, + -0.003733453, + -0.04036565, + 0.027871521, + -0.0015910302, + 0.010467223, + 0.008298616, + -0.0041585495, + 0.009241221, + 0.005230531, + -0.020626405, + -0.01749671, + 0.021920176, + 0.009697121, + -0.0018821287, + -0.0019745408, + -0.0150323855, + -0.0066906437, + -0.012161447, + 0.005957507, + 0.01211216, + -0.0168067, + 0.010528831, + -0.031444795, + -0.029547263, + -0.0012290824, + -0.016868308, + 0.027748305, + 0.006758413, + -0.016289191, + -0.016375443, + 0.0168067, + 0.02468022, + -0.027772948, + -0.010140699, + 0.032430522, + -0.025037548, + -0.022918228, + -0.00011195354, + -0.15367533, + 0.024606291, + 0.007226635, + -0.012149124, + 0.016129011, + 0.00249821, + 0.008526566, + -0.033983048, + 0.0060283565, + 0.030163344, + 0.052342273, + 0.023411093, + -0.018753517, + -0.0062409043, + 0.007226635, + -0.024593968, + -0.011539204, + -0.008317099, + 0.027649732, + 0.015303462, + 0.028339744, + -0.02270876, + 0.0046791383, + 0.015438999, + -0.0046144496, + 0.034401983, + -0.016769735, + -0.0026260468, + 0.027575802, + -0.010923123, + -0.021994105, + -0.025259336, + 0.041302096, + 0.036003795, + 0.012925387, + 0.001355379, + -0.013553791, + -0.011459114, + -0.0074484237, + 0.02013354, + 0.008970145, + -0.011767155, + 0.00042740646, + -0.008267812, + 0.0042509614, + 0.023830028, + 0.019123167, + 0.010263916, + -0.0073621725, + -0.0070233275, + 0.031149074, + -0.03050835, + -0.012432522, + 0.0026291274, + 0.018667266, + 0.0025228532, + 0.0037827396, + 0.010571957, + 0.0137386145, + -0.01582097, + -0.009185773, + 0.0068323426, + 0.011083304, + -0.00847728, + 0.000124949, + -0.0018128195, + -0.010498026, + 0.007047971, + -0.016437052, + 0.012284663, + -0.0020038048, + -0.013208785, + 0.0061792964, + -0.027082937, + -0.010658208, + -0.0020130458, + -0.004740746, + 0.024532361, + 0.010732138, + 0.012451004, + -0.013159499, + 0.049853306, + -0.011169556, + -0.016892951, + -0.00032171, + 0.0198255, + 0.006850825, + 0.011687064, + -0.038221687, + -0.010485705, + 0.014527199, + -0.033736616, + -0.0064010858, + -0.007818073, + 0.005597099, + 0.015857935, + 0.0062624672, + 0.02157517, + -0.019788533, + -0.0048516407, + 0.013405931, + 0.003286794, + -0.0143546965, + 0.026294352, + 0.029128328, + 0.032726243, + 0.014884526, + 0.02378074, + -0.0034315733, + 0.022659473, + -0.01757064, + -0.005707994, + 0.010411776, + 0.014921491, + -0.0069001117, + 0.015857935, + 0.02111927, + -0.01445327, + 0.0095431, + 0.03284946, + 0.04292855, + -0.00052559446, + -0.0066228746, + 0.014625772, + -0.01362772, + -0.011915014, + -0.09665085, + 0.0034254126, + 0.0046606557, + 0.020774264, + -0.0016033518, + 0.06397389, + 0.012469487, + 0.017755466, + 0.0008686747, + 0.005563215, + 0.003385367, + -0.029226901, + -0.014169872, + -0.0094014015, + 0.01521721, + -0.018088149, + 0.0040784585, + 0.00628403, + -0.008310938, + 0.029029755, + -0.010473384, + -0.01453952, + 0.0054862048, + -0.029719766, + -0.019369598, + 0.010855354, + -0.028881894, + 0.0010157642, + 0.011305094, + -0.00074391824, + 0.0026491499, + -0.01885209, + 0.010048287, + -0.01309789, + 0.010818389, + 0.016634198, + -0.024261285, + 0.019344956, + 0.03368733, + -0.024877366, + -0.0059482655, + 0.005270576, + 0.015882578, + -0.027132224, + -0.009426045, + 0.00029398632, + -0.012395557, + -0.0012506451, + -0.00802138, + -0.01362772, + -0.024310572, + -0.010916962, + -0.0056433054, + -0.016018115, + 0.012426361, + -0.006943237, + 0.0076886956, + 0.007682535, + -0.03997136, + 0.024248963, + 0.0071650264, + -0.010467223, + -0.019024594, + 0.0076332483, + 0.010621243, + 0.009617031, + -0.013516826, + -0.0029417886, + 0.02641757, + -0.03230731, + -0.013011639, + 0.020121219, + -0.019998001, + -0.009426045, + -0.029916912, + -0.020540154, + -0.0040784585, + -0.00038274055, + 0.014650416, + -0.008939341, + -0.010830711, + -0.019172452, + -0.0031327738, + -0.009955875, + -0.0087052295, + 0.006413407, + 0.00055062276, + -0.021895532, + 0.021772316, + -0.015574537, + 0.022006426, + 0.0040168506, + 0.0061731352, + -0.014884526, + -0.0077564646, + 0.029867625, + 0.019160131, + 0.00022775758, + 0.012826814, + 0.0081754, + -0.0077256607, + -0.032652315, + -0.0566302, + 0.019406563, + -0.0054461593, + -0.009653995, + 0.0038227849, + -0.0038443478, + 0.027058294, + 0.01521721, + 0.019887106, + -0.02634364, + -0.038492765, + 0.010159182, + -0.016609553, + -0.0037519357, + -0.03694024, + -0.008391028, + 0.009204255, + 0.023509666, + 0.012161447, + 0.0035701916, + -0.006641357, + 0.0020392293, + 0.031986944, + 0.011107948, + -0.02188321, + 0.015278818, + -0.004512796, + 0.028807966, + -0.040932447, + -0.009074879, + 0.012999317, + -0.021562848, + 0.009493814, + 0.002732321, + -0.002907904, + -0.008908537, + 0.0023210866, + 0.019197095, + 0.0009757189, + 0.04088316, + -0.016757414, + -0.035018064, + 0.018568693, + -0.020959089, + -0.0009048695, + -0.01604276, + -0.0009025592, + -0.014022012, + 0.022831976, + 0.0216491, + -0.019271025, + 0.022203572, + -0.0029371679, + 0.016708126, + 0.0003034201, + -0.02060176, + 0.0048393193, + 0.006216261, + -0.0021177798, + 0.0067399302, + 0.01901227, + -0.0010773723, + 0.020946767, + 0.015106316, + 0.029793695, + -0.011120269, + -0.029497977, + 0.009888106, + -0.0011158774, + -0.04487537, + -0.027994737, + 0.0055262498, + 0.018987628, + 0.017841717, + -0.0027461827, + 0.01408362, + 0.009789533, + -0.01476131, + -0.0317898, + 0.005769602, + 0.0029710524, + -0.01219225, + -0.045910385, + 0.023300197, + 0.0069678803, + -0.003490101, + -0.01590722, + -0.0065612667, + -0.027920809, + 0.012075195, + -0.014058977, + -0.0011451413, + 0.009056396, + 0.00514736, + 0.010159182, + 0.01195814, + -0.005640225, + -0.023411093, + 0.03036049, + 0.028191883, + 0.009191934, + -0.021439632, + -0.023078408, + -0.014034334, + -0.011200359, + -0.010645886, + -0.0027677456, + -0.018026542, + 0.012777528, + 0.021821603, + -0.009734086, + 0.037654895, + 0.00066228746, + 0.013282714, + 0.01423148, + -0.010331685, + -0.005738798, + -0.0058835773, + -0.010208469, + 0.024692541, + 0.007325208, + 0.011471435, + 0.014169872, + -0.011305094, + 0.020503188, + 0.004032253, + -0.0076578916, + -0.024359858, + 0.0080090575, + 0.001604892, + 0.010528831, + 0.01998568, + -0.013011639, + 0.0010873836, + 0.00047592286, + 0.0027954692, + 0.011194198, + 0.025530413, + 0.011508401, + 0.034106266, + -0.002287202, + 0.0016865227, + 0.0027846878, + 0.011101786, + 0.040612083, + -0.0005579387, + 0.021094626, + -0.020022646, + -0.009684799, + -0.0065920707, + 0.0077995905, + -0.0033884477, + -0.00514736, + -0.025333267, + 0.002914065, + -0.023411093, + 0.021784637, + -0.015611502, + 0.017127063, + 0.03262767, + 0.0067645735, + 0.025197728, + 0.013418253, + -0.016498659, + -0.0001567157, + 0.040143862, + 0.013566112, + 0.03413091, + -0.0013130234, + 0.018802803, + -0.0075223534, + -0.014810597, + -0.010171504, + 0.0039614034, + 0.0017573722, + 0.0059821503, + 0.00832942, + 0.009808016, + 0.018741196, + 0.009265864, + 0.022499291, + -0.020404615, + -0.027354013, + -0.021291772, + 0.018679587, + -0.0022456166, + -0.009093361, + -0.025148442 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.003444411, + -0.00001404399, + -0.004434365, + -0.01983679, + -0.010440086, + 0.0020883314, + -0.012162291, + 0.0062885643, + -0.005836014, + -0.020867601, + -0.008743022, + 0.020377338, + -0.0024780275, + -0.020641325, + -0.018152298, + -0.023306344, + 0.036757145, + -0.020113349, + 0.0036769717, + -0.021885838, + -0.0018997687, + 0.011276047, + 0.010829782, + -0.010295521, + -0.009591553, + 0.0040132417, + 0.024601141, + -0.024211444, + -0.0035261216, + -0.01759918, + 0.007460796, + -0.009905824, + -0.022740657, + -0.024085736, + -0.025154257, + -0.01341309, + -0.0063985595, + 0.007907061, + 0.002971433, + -0.010647505, + 0.016254101, + -0.016115822, + 0.0038655344, + -0.016606085, + -0.011577747, + 0.02727873, + -0.017486043, + -0.009886969, + -0.025694804, + 0.017108917, + 0.022878936, + 0.0039378167, + -0.022564664, + 0.0029871466, + -0.034167554, + -0.025543954, + -0.025254825, + 0.0050597647, + 0.014871308, + -0.008975582, + -0.00038753555, + -0.018956833, + -0.0046292134, + 0.0058203004, + 0.006750543, + -0.0031945657, + -0.018793412, + 0.02594622, + 0.0053206095, + 0.015889546, + 0.022451527, + -0.0033061318, + -0.0050786207, + -0.009000724, + -0.001538357, + 0.0071716662, + -0.008824732, + 0.0061439998, + 0.0032558485, + 0.0023774607, + 0.01699578, + -0.022464097, + -0.01199887, + 0.013928494, + 0.0042992285, + 0.012036582, + -0.010603506, + 0.037209697, + -0.008680168, + -0.008837303, + 0.01593983, + 0.0143684745, + -0.019560233, + -0.0007491437, + 0.0030719999, + 0.0104212295, + 0.009472131, + 0.016052967, + 0.015889546, + 0.0022878936, + 0.018403715, + -0.0032212788, + -0.021521283, + -0.012564559, + -0.010748072, + -0.01117548, + -0.011225764, + -0.0011148767, + 0.022577235, + 0.013337665, + 0.015688412, + 0.042238034, + 0.00984297, + -0.046688113, + 0.0015949258, + -0.030622575, + -0.016505517, + 0.012470277, + -0.017347764, + 0.005543742, + 0.010515511, + 0.021961264, + 0.005380321, + -0.015512421, + 0.034016702, + 0.0029195785, + -0.014720458, + -0.039321598, + -0.02758043, + 0.013086248, + 0.009792687, + 0.015524992, + -0.011112626, + 0.007731069, + -0.004176663, + 0.0122377165, + -0.0065808366, + 0.008642455, + -0.011288618, + -0.013199386, + 0.003915818, + 0.021483572, + -0.011156623, + 0.0047643497, + 0.025229683, + 0.02502855, + -0.0015030014, + -0.009069864, + 0.026926747, + -0.018278006, + 0.028560957, + -0.019019686, + 0.008353326, + 0.0023884603, + 0.009893253, + 0.0009820971, + -0.0144061865, + 0.018981975, + 0.011093769, + 0.0056914496, + 0.014959304, + 0.016266672, + 0.000103807666, + -0.015059871, + 0.008931585, + 0.015386713, + 0.0143433325, + 0.024978267, + -0.01169717, + -0.008761878, + 0.011049772, + 0.02652448, + -0.03326245, + 0.031326544, + 0.01786317, + 0.049227424, + 0.00954127, + -0.0103458045, + -0.0123257125, + 0.009792687, + -0.03482124, + -0.006291707, + 0.032633908, + 0.029692333, + -0.023721183, + 0.025242254, + 0.0035261216, + 0.00047376368, + -0.008372182, + -0.00039735652, + 0.002957291, + -0.0052137575, + 0.029415773, + -0.017108917, + -0.67741764, + -0.007749925, + -0.0040446687, + 0.009522414, + 0.024827417, + 0.009113861, + 0.024349725, + 0.015449567, + -0.0143433325, + 0.008831018, + -0.02861124, + -0.010414944, + -0.01272798, + 0.011923445, + -0.004355797, + -0.016027825, + 0.003815251, + -0.022313247, + -0.016668938, + 0.015977543, + 0.009817828, + 0.009270997, + 0.00073107315, + 0.020503046, + 0.011162909, + 0.023130352, + 0.01296054, + -0.024751991, + -0.026449054, + -0.0032338495, + -0.005424319, + 0.024261728, + -0.012507989, + -0.0058768694, + 0.03517322, + 0.02114416, + -0.005779445, + 0.031527676, + 0.031703666, + 0.029415773, + 0.009327566, + 0.016480375, + 0.00092238566, + -0.0058171577, + -0.0029337206, + -0.0015257861, + 0.029516341, + -0.00083438976, + -0.015889546, + 0.021370433, + 0.004817776, + -0.015085013, + 0.0015854976, + 0.016580943, + -0.002971433, + 0.008409894, + 0.031929944, + -0.0071716662, + 0.0057700174, + -0.003434983, + 0.0021009021, + -0.013626794, + -0.0034161268, + 0.0036518301, + 0.013526227, + -0.0021433288, + 0.013501086, + -0.013425661, + 0.0038309647, + -0.024663996, + 0.0030468581, + 0.017033493, + -0.0051886155, + -0.01386564, + 0.0030390015, + 0.002020763, + 0.01891912, + -0.005493459, + -0.037209697, + -0.011571461, + -0.026700472, + -0.0040446687, + -0.034368686, + 0.010930348, + 0.018944262, + -0.019748796, + -0.03803937, + 0.0019154823, + 0.034972087, + -0.01771232, + 0.0052891825, + 0.029038649, + -0.021948693, + -0.008384753, + -0.0027577288, + 0.028586099, + -0.006530553, + -0.0029227212, + -0.0080013415, + -0.018743128, + 0.018567136, + -0.026801039, + 0.007272233, + 0.0039409595, + 0.027153023, + -0.019321386, + -0.012947969, + 0.0142804785, + 0.010094387, + -0.012143435, + -0.006681403, + -0.012495418, + -0.018893978, + -0.007938487, + -0.026901605, + -0.018353432, + 0.013827928, + 0.02429944, + 0.024601141, + -0.0060402905, + 0.011540035, + 0.003931531, + -0.0070271017, + 0.003337559, + 0.0019076255, + 0.01861742, + -0.0015792123, + 0.008604743, + -0.014645033, + 0.007938487, + 0.007416798, + 0.020213917, + 0.015424425, + -0.0036235456, + -0.004292943, + 0.007837921, + 0.017398048, + -0.028812373, + 0.025543954, + 0.0034412683, + -0.022376101, + -0.004968626, + -0.017674606, + 0.009886969, + 0.014481612, + -0.036380023, + -0.010119529, + -0.025116546, + -0.05465803, + -0.0031175693, + -0.005870584, + -0.0007306803, + -0.015977543, + 0.012426279, + 0.0015281432, + 0.008397323, + 0.01386564, + 0.0150473, + -0.030748283, + -0.011527464, + 0.020452762, + 0.0037021134, + -0.0145193245, + 0.0031128551, + 0.004902629, + 0.00049772684, + 0.01147718, + 0.0103080915, + -0.0025440245, + -0.026901605, + 0.0007027887, + -0.008441322, + -0.010974347, + 0.021207012, + -0.007284804, + 0.024827417, + 0.0077687814, + -0.03803937, + -0.00841618, + -0.014946733, + 0.02189841, + -0.010496655, + -0.038240507, + 0.0005629381, + 0.011728597, + -0.0061157155, + -0.00096402655, + 0.028762091, + 0.002430887, + -0.0027420153, + -0.0017724889, + -0.0021606137, + -0.019610517, + -0.016052967, + -0.009396706, + 0.0064331293, + 0.0012390137, + 0.015059871, + -0.009402991, + 0.012947969, + 0.007944773, + -0.00085874577, + 0.017787743, + 0.004726637, + -0.0022627518, + -0.04319342, + -0.0043463693, + -0.002808012, + 0.035248645, + -0.006769399, + 0.009314995, + -0.022489239, + -0.013752503, + 0.0030484295, + -0.007856777, + 0.03816508, + 0.009201857, + 0.0035858331, + -0.017762601, + -0.0064205583, + 0.020314483, + 0.0072156643, + -0.018240293, + 0.0019641942, + -0.015826693, + 0.008673882, + 0.013677077, + 0.009937252, + -0.015110154, + -0.026474196, + -0.03218136, + 0.00082339026, + -0.0025707376, + 0.032131076, + -0.02609707, + -0.022904078, + 0.016316954, + -0.016228959, + 0.014557037, + 0.017196914, + 0.04289172, + 0.014582179, + 0.005898868, + -0.019019686, + -0.013551369, + 0.011854306, + 0.008837303, + 0.04485277, + -0.018743128, + 0.013576511, + -0.011282332, + 0.0051414752, + -0.006030862, + 0.010044104, + -0.015147867, + -0.018152298, + 0.015336429, + 0.00886873, + 0.026423912, + 0.030949418, + -0.0050849062, + 0.006869966, + 0.0038183937, + 0.018856265, + -0.008824732, + -0.0016153534, + 0.011470894, + -0.014003919, + -0.017322622, + -0.0027891558, + -0.009057293, + -0.018416286, + 0.0023146067, + -0.019660799, + 0.005509172, + -0.02323092, + -0.01787574, + -0.017913451, + -0.00079117744, + 0.03336302, + -0.0055186003, + -0.039145608, + -0.0044186516, + 0.043268844, + -0.004789491, + -0.018076872, + -0.012759406, + 0.024462862, + -0.008472749, + -0.00095145573, + 0.017196914, + 0.015022158, + 0.00025534525, + -0.017662035, + -0.008384753, + -0.034167554, + 0.018127156, + -0.018567136, + 0.011980014, + 0.00051108334, + -0.016606085, + -0.02220011, + -0.013174244, + -0.030572291, + 0.016379809, + -0.01489645, + -0.011816593, + -0.015876975, + 0.0070585287, + -0.020867601, + 0.022036688, + 0.019208249, + -0.004424937, + -0.014066774, + -0.0009813114, + 0.0040635252, + -0.022979502, + 0.02667533, + 0.03937188, + -0.01057208, + 0.0027954413, + -0.027856989, + -0.03605318, + -0.004934056, + 0.10308092, + 0.0030594291, + 0.010628648, + -0.0049434844, + -0.001343509, + 0.012595985, + -0.0002011335, + -0.0025895939, + -0.011703456, + 0.034494396, + -0.0034758383, + -0.020741891, + 0.008359611, + 0.011062343, + 0.017310051, + 0.007316231, + -0.01102463, + -0.022162396, + -0.00221404, + -0.0015501422, + 0.0005319038, + -0.016769506, + -0.0015980685, + 0.026298204, + -0.027203305, + -0.0059491517, + 0.020063067, + 0.010848638, + 0.0016923498, + -0.019007115, + -0.018906549, + 0.018667703, + -0.0072093788, + -0.013375377, + -0.035575487, + 0.019095112, + 0.012910256, + 0.011294903, + 0.012608556, + 0.0056663076, + 0.007328802, + 0.012357139, + 0.0011887304, + -0.0016687795, + 0.018303148, + -0.018755699, + -0.021936122, + 0.020012783, + 0.004714066, + -0.020138491, + 0.019811649, + -0.016115822, + -0.017611751, + -0.010138385, + 0.014557037, + 0.01983679, + 0.013664507, + -0.0021150445, + -0.03560063, + -0.0072910893, + -0.0122879995, + -0.03635488, + -0.0101320995, + -0.022627518, + -0.001016667, + -0.04422423, + -0.004638641, + -0.018366002, + -0.024601141, + 0.0050943345, + 0.010616077, + -0.025732517, + 0.005053479, + 0.005163474, + 0.010609792, + -0.010295521, + -0.0018981973, + -0.0147456, + -0.0010763785, + 0.015851833, + -0.024211444, + -0.0083030425, + 0.0014346475, + 0.000438801, + -0.04352026, + 0.024626283, + 0.00849789, + -0.012734264, + -0.02130758, + 0.01772489, + 0.028460389, + 0.0037555394, + 0.008064196, + 0.0036612581, + -0.0017960593, + 0.0027781564, + -0.0027875847, + 0.009051007, + -0.017611751, + -0.007643073, + 0.012665125, + -0.012539417, + -0.020880172, + 0.019698512, + 0.029767757, + 0.019786507, + 0.012344568, + -0.005663165, + -0.021383004, + 0.0007063243, + 0.005229471, + -0.02818383, + 0.0013843641, + 0.010289235, + 0.004519218, + 0.017171772, + -0.0045129326, + 0.039296456, + 0.0300946, + -0.032030508, + -0.028334681, + -0.024337154, + 0.013878211, + 0.036606297, + 0.02354519, + -0.010452656, + -0.009679549, + -0.0080264835, + 0.011703456, + 0.009032151, + 0.0025911652, + 0.020691609, + -0.01243885, + -0.015386713, + -0.011961157, + -0.01341309, + 0.008831018, + -0.021320151, + -0.022011546, + 0.0021103304, + -0.014946733, + 0.024789704, + -0.0026948745, + -0.017121488, + -0.0036549729, + -0.023620615, + 0.015537563, + -0.01938424, + -0.023293773, + 0.021181872, + -0.023054928, + 0.006901393, + -0.023432052, + 0.016191246, + -0.022250393, + 0.0040383837, + -0.008724165, + -0.02220011, + 0.0147456, + 0.0034538393, + 0.02309264, + -0.00078567775, + 0.019761367, + -0.013325094, + -0.0010001677, + -0.010704073, + 0.011898303, + 0.001019024, + -0.027505007, + 0.03693314, + 0.02115673, + 0.01728491, + -0.014054203, + -0.009660693, + -0.007944773, + 0.033614434, + -0.0052797543, + -0.026197638, + -0.008397323, + -0.0156507, + -0.0032369923, + 0.0011156624, + -0.017523756, + 0.0029635765, + 0.0034601246, + 0.0058768694, + 0.011200622, + -0.0080264835, + 0.0010370946, + 0.0145193245, + 0.038617633, + -0.019597946, + 0.005000053, + 0.01846657, + -0.0038749625, + -0.02326863, + -0.011508607, + 0.01146461, + -0.011973728, + 0.0028567242, + 0.012445135, + 0.0023617472, + -0.013501086, + 0.0042458023, + -0.011760024, + 0.018152298, + 0.0044940766, + -0.01326224, + 0.0067316866, + -0.014984446, + 0.0075173643, + 0.0016452092, + -0.03590233, + -0.03351387, + -0.028887799, + -0.0066876886, + -0.034972087, + 0.024173733, + -0.026046788, + -0.032457918, + -0.022489239, + 0.008541889, + 0.0045412173, + -0.008761878, + 0.024500575, + 0.0065808366, + -0.007297375, + -0.0023664613, + 0.031401966, + 0.010339519, + -0.02176013, + 0.023658328, + 0.006574551, + -0.009811544, + -0.015110154, + -0.030773425, + 0.03396642, + -0.008108194, + 0.004468935, + 0.013312523, + -0.0015776409, + -0.010138385, + -0.023494907, + -0.0018526281, + -0.0052169003, + 0.031175692, + -0.0121874325, + 0.011188051, + 0.0058737267, + -0.0018369146, + -0.013488515, + 0.017938593, + -0.0061942833, + 0.00402267, + 0.010176098, + -0.020239059, + 0.016782077, + -0.02326863, + 0.0020317626, + 0.010176098, + 0.008743022, + 0.0076745, + -0.014783312, + -0.005380321, + 0.015210721, + 0.00841618, + 0.012495418, + 0.02235096, + 0.02277837, + 0.02280351, + -0.0050723352, + -0.013174244, + -0.016807217, + -0.011885732, + 0.029717473, + -0.0035072654, + -0.012143435, + -0.017008351, + 0.003510408, + -0.011496036, + 0.013312523, + -0.0070271017, + 0.015424425, + -0.007812779, + -0.021973835, + -0.019107683, + -0.011307474, + -0.00078607054, + 0.011797736, + 0.011804022, + -0.016819788, + -0.012049153, + -0.009302424, + 0.01846657, + 0.016882643, + -0.00066389766, + 0.005732305, + 0.015851833, + -0.01937167, + 0.00886873, + 0.01252056, + 0.023457194, + -0.0045915004, + -0.007907061, + -0.013174244, + 0.0054306043, + 0.022765798, + 0.020477904, + 0.0053771785, + 0.00061714987, + 0.0013890782, + 0.011426897, + 0.000079500765, + -0.006869966, + 0.008321898, + 0.0046480694, + -0.0023554617, + 0.002140186, + 0.0073225163, + 0.0052483273, + -0.01146461, + -0.004503505, + 0.034343544, + -0.032281928, + 0.004786349, + 0.012432564, + -0.017926022, + 0.010861209, + -0.0065682656, + -0.017083777, + -0.015235863, + 0.001869913, + -0.014129628, + -0.036983423, + -0.0059397235, + -0.009855541, + -0.016756935, + 0.014909021, + 0.023180636, + -0.009352707, + 0.00510062, + 0.032005366, + 0.009792687, + 0.004519218, + 0.00051697594, + 0.021031022, + -0.009226999, + -0.0014880736, + -0.0066562616, + -0.031728808, + -0.018240293, + 0.017033493, + 0.008629885, + -0.044148803, + -0.01684493, + -0.0003893033, + -0.017825456, + -0.0008642455, + -0.023344057, + 0.022577235, + 0.019472236, + 0.022124685, + -0.02369604, + 0.01713406, + 0.02934035, + 0.024048023, + -0.013689648, + -0.008051625, + 0.022262964, + -0.012947969, + 0.014192482, + 0.004588358, + -0.021483572, + -0.0037335407, + 0.009547556, + 0.008233903, + 0.019396812, + 0.007033387, + -0.008761878, + -0.005631738, + -0.00819619, + -0.002710588, + -0.0066876886, + 0.025870796, + 0.021772701, + -0.025367962, + 0.01876827, + 0.019321386, + 0.015713554, + -0.00025357748, + 0.015675843, + -0.010729215, + -0.024475433, + 0.00900701, + -0.011012059, + 0.007020816, + 0.010880065, + -0.01759918, + 0.0017457759, + -0.023482336, + -0.027178165, + 0.012947969, + -0.014393616, + -0.0031615673, + -0.016191246, + 0.0142679075, + -0.016442664, + 0.0021574711, + -0.000396178, + -0.016266672, + -0.0032652766, + -0.020943025, + 0.014104486, + -0.011294903, + 0.010100673, + 0.013023394, + -0.0027373012, + -0.011439468, + 0.03572634, + 0.03771253, + -0.029516341, + 0.019509949, + -0.009340137, + -0.011250905, + 0.002528311, + -0.019484807, + 0.0061377143, + -0.029918607, + -0.010678932, + 0.023457194, + -0.021018451, + -0.02622278, + -0.0045569306, + 0.0016970639, + 0.008070482, + 0.005348894, + 0.22044231, + -0.0105217965, + -0.004956055, + 0.03451954, + -0.010446371, + 0.0294912, + -0.01199887, + 0.01876827, + -0.0078002084, + -0.013538798, + -0.033840712, + -0.0036675436, + 0.0010260951, + 0.0061314288, + -0.0124765625, + -0.009132718, + -0.019208249, + -0.02265266, + 0.0038875334, + 0.011684599, + -0.008353326, + 0.008447607, + -0.0020223344, + -0.016216388, + -0.004340084, + 0.028736949, + -0.022011546, + -0.02682618, + 0.022464097, + 0.013061106, + 0.009095006, + -0.012162291, + -0.014695317, + 0.014682746, + -0.0012233002, + -0.0050251945, + -0.0017143488, + 0.005185473, + 0.027680997, + 0.0074545103, + 0.009365278, + -0.008032769, + -0.00885616, + 0.00878702, + -0.0023271774, + 0.0156507, + -0.009830399, + 0.011288618, + 0.0021197584, + 0.043268844, + -0.022237822, + -0.021207012, + 0.04259002, + 0.033011034, + 0.009126432, + -0.007982486, + 0.038994756, + 0.032030508, + -0.0035261216, + -0.030019175, + -0.012507989, + 0.0003447161, + 0.0057103056, + 0.005968008, + 0.012306856, + 0.013362806, + -0.04714066, + -0.0028724377, + 0.009622981, + 0.005524886, + 0.0066436906, + -0.009930966, + 0.021093875, + 0.002126044, + -0.022074401, + -0.000038571867, + 0.014934163, + -0.031376824, + 0.0039252457, + 0.011954872, + -0.004553788, + -0.009289853, + 0.008642455, + -0.004638641, + -0.0026885893, + -0.02326863, + 0.029013507, + 0.0055940254, + -0.025204541, + -0.013211956, + 0.0021653278, + -0.025820512, + 0.0034632673, + -0.008491605, + 0.011785165, + 0.011049772, + 0.013601652, + 0.01593983, + -0.007705927, + 0.009509843, + -0.0070271017, + -0.047643498, + 0.02534282, + 0.005317467, + -0.018252864, + -0.005389749, + 0.003739826, + -0.0031364255, + 0.011118911, + -0.018705415, + -0.011238334, + -0.016115822, + -0.009868112, + 0.01758661, + 0.007599075, + 0.00878702, + 0.0080264835, + -0.0015147866, + 0.006316849, + -0.019346528, + -0.0046292134, + 0.0003920532, + -0.012193718, + -0.00059515086, + 0.021269867, + -0.0144187575, + -0.042112324, + 0.0040823813, + 0.0038781052, + -0.03451954, + 0.02221268, + 0.008667597, + 0.0012665124, + 0.015713554, + -0.014934163, + 0.02353262, + 0.011232048, + -0.017335193, + 0.0023303202, + 0.021923551, + 0.008843589, + 0.0020474761, + -0.006153428, + -0.003456982, + -0.0034946946, + -0.0042269463, + 0.017083777, + 0.000108128894, + -0.009516128, + 0.008051625, + -0.0080893375, + -0.015135296, + 0.0024811702, + -0.03665658, + 0.033715002, + -0.02055333, + -0.04007585, + -0.010584651, + 0.016266672, + 0.009132718, + -0.008560744, + -0.002077332, + 0.013739932, + -0.006291707, + -0.00012786905, + -0.007749925, + -0.15839262, + 0.028762091, + 0.020603612, + 0.0055940254, + 0.006414273, + 0.026926747, + 0.016153535, + -0.008604743, + -0.004274087, + 0.01297311, + 0.034217834, + -0.013438232, + -0.025468528, + -0.0009310281, + -0.020452762, + -0.00752365, + 0.0015792123, + 0.015751267, + 0.025845654, + 0.020905312, + 0.014003919, + -0.032734476, + 0.010119529, + 0.00071339536, + -0.0065808366, + -0.009880683, + 0.0027153022, + -0.0033784143, + 0.01020124, + -0.013702219, + -0.01728491, + 0.0011690884, + 0.03741083, + 0.034770954, + 0.013739932, + -0.0010999488, + 0.001396935, + -0.005238899, + 0.0020474761, + -0.0019830505, + 0.019170536, + -0.0011015201, + -0.0101446705, + -0.025103975, + -0.0032039937, + 0.0010842353, + 0.030698, + 0.009057293, + -0.0009318138, + 0.010188669, + 0.016379809, + -0.005782588, + 0.002267466, + -0.0025581666, + 0.00051894016, + 0.0046449266, + 0.009660693, + 0.016379809, + -0.0024905985, + -0.0051383325, + -0.028007839, + 0.008435036, + 0.006869966, + -0.00045137186, + -0.0017206342, + -0.010383517, + -0.006769399, + -0.007416798, + -0.016668938, + 0.02339434, + 0.0017960593, + -0.014833596, + 0.013274811, + -0.026172496, + -0.0037461114, + 0.008604743, + -0.027505007, + 0.011565176, + -0.00082653295, + 0.002391603, + -0.00804534, + 0.02609707, + 0.013224527, + 0.025707375, + -0.017523756, + 0.0040792385, + -0.0016672082, + 0.014569608, + -0.027680997, + -0.0028111548, + -0.0029305778, + -0.026298204, + -0.017775172, + -0.012853688, + 0.0012570843, + -0.00021409718, + -0.00499691, + 0.02338177, + -0.009874398, + -0.0040698107, + 0.0072030933, + -0.008994439, + -0.011087484, + 0.0038749625, + 0.04110666, + 0.016279243, + 0.009629266, + -0.00027518361, + 0.019044828, + 0.01087378, + -0.020377338, + 0.0018384858, + 0.020515617, + 0.030873992, + -0.013061106, + 0.010993203, + 0.034192696, + -0.01937167, + 0.031049984, + 0.021810414, + 0.03653087, + 0.0029054363, + 0.0009954537, + 0.021244725, + -0.011219478, + 0.0025770229, + -0.09810286, + -0.026599905, + 0.019007115, + 0.035399497, + -0.009264711, + 0.043117993, + 0.010044104, + -0.004698353, + 0.0076619294, + 0.0020663324, + 0.005839157, + -0.017888311, + 0.0009585268, + 0.0080264835, + 0.03084885, + -0.0017426332, + -0.0027247304, + -0.01967337, + -0.03326245, + 0.006706545, + -0.020314483, + 0.010741786, + 0.014079344, + -0.005751161, + 0.003947245, + 0.006543124, + -0.0303963, + 0.0064739846, + 0.002635163, + 0.01341309, + 0.0016452092, + -0.021471001, + 0.013312523, + -0.01580155, + -0.013425661, + 0.0019327672, + -0.0053363233, + 0.0071213827, + 0.02607193, + -0.028460389, + -0.002454457, + -0.0010237381, + 0.023620615, + -0.043721393, + 0.005330038, + -0.004283515, + -0.007951058, + -0.009736118, + -0.0065494096, + -0.0297929, + -0.029767757, + 0.00834704, + -0.006285422, + -0.0017174915, + 0.019723654, + -0.027630715, + -0.005298611, + 0.0002386496, + -0.021395575, + -0.0017473473, + -0.008818447, + 0.0075299353, + -0.014821025, + 0.004446936, + -0.012457706, + -0.0022470383, + -0.01758661, + -0.011043486, + 0.03456982, + -0.008573315, + -0.0069516767, + 0.00088703015, + -0.009886969, + -0.0025927364, + -0.026298204, + -0.017121488, + -0.0035638341, + 0.0012610127, + -0.0016672082, + -0.003934674, + -0.015436996, + -0.01802659, + 0.010905207, + -0.010163527, + 0.0040258127, + 0.011929731, + 0.024161162, + -0.0019704797, + -0.005040908, + 0.0076933564, + 0.0297929, + -0.0014590035, + 0.022539522, + -0.041508924, + -0.009723548, + 0.0061502852, + 0.007492223, + -0.016153535, + 0.014205053, + 0.0051729023, + -0.037486255, + -0.02144586, + -0.05350151, + 0.026549622, + -0.0070271017, + -0.007951058, + 0.01274055, + -0.013777644, + 0.0009781688, + 0.008560744, + 0.012998252, + -0.027555289, + 0.0020239057, + 0.009472131, + 0.007196808, + 0.019019686, + -0.037083987, + 0.01147718, + 0.017536327, + 0.024462862, + 0.0032212788, + -0.0020993308, + -0.01176631, + -0.013199386, + 0.014129628, + 0.0074545103, + -0.030773425, + 0.0010638076, + 0.0041043805, + 0.0035921186, + -0.0062257103, + 0.0028095834, + 0.0017033493, + -0.039598156, + 0.015512421, + 0.01743576, + -0.0032102792, + -0.030421441, + -0.026700472, + 0.020653896, + 0.026549622, + 0.025845654, + -0.02250181, + -0.046914387, + 0.032080792, + -0.018453998, + 0.005663165, + 0.013752503, + -0.0071716662, + 0.0014927876, + 0.024563428, + 0.015424425, + 0.0010284522, + 0.0313014, + -0.01610325, + -0.019170536, + -0.02458857, + -0.01169717, + 0.008397323, + 0.021533854, + 0.00095067004, + 0.0025330249, + 0.04098095, + 0.0032621338, + 0.019899646, + 0.0070710997, + 0.026474196, + -0.015110154, + -0.023557762, + 0.0016750649, + 0.0055060294, + -0.026775897, + -0.01937167, + -0.009817828, + 0.014821025, + 0.033287592, + 0.022225251, + 0.008673882, + 0.002896008, + -0.008171048, + -0.0061345715, + 0.009201857, + -0.004952912, + 0.00144329, + -0.037335407, + 0.015814122, + 0.011100055, + 0.009874398, + -0.025217112, + 0.0018589135, + -0.009402991, + 0.018994546, + 0.0024041738, + -0.0055500274, + 0.027630715, + -0.012011441, + -0.004921485, + 0.011797736, + 0.005534314, + -0.03997528, + -0.027102739, + 0.012809689, + 0.0030248591, + -0.020138491, + -0.01878084, + -0.024022883, + -0.004968626, + -0.0011313759, + -0.031024842, + -0.0026445913, + -0.006605978, + 0.019912217, + 0.01773746, + 0.02549367, + 0.024978267, + 0.0081647625, + 0.009830399, + -0.034242976, + 0.022325817, + -0.0025141686, + -0.019283675, + 0.019120254, + 0.0032024223, + 0.018089443, + 0.028460389, + 0.0070585287, + 0.014833596, + 0.016166104, + -0.0015682128, + -0.009503557, + 0.020540759, + 0.00002415959, + 0.011301189, + -0.0030264305, + -0.011282332, + 0.012539417, + 0.003978672, + -0.0042552305, + 0.01326224, + 0.016505517, + -0.009578982, + 0.045883577, + -0.01206801, + -0.0038435354, + 0.0006933606, + 0.011364043, + 0.03205565, + -0.0031317114, + -0.008975582, + -0.007328802, + -0.0043746536, + -0.0010182384, + 0.0044815056, + 0.010597222, + -0.034318402, + -0.017071206, + -0.00070239586, + -0.027052455, + 0.0017033493, + -0.02994375, + -0.0056254524, + 0.016932927, + 0.013450802, + -0.006530553, + 0.01847914, + -0.011012059, + -0.0144187575, + 0.007316231, + -0.0010370946, + 0.012602271, + -0.015675843, + -0.008969297, + -0.019660799, + -0.037586823, + -0.013978778, + 0.019711083, + 0.016455235, + -0.000989954, + -0.030195165, + -0.0026383058, + 0.021822985, + -0.012753121, + 0.010609792, + -0.0141673405, + -0.03886905, + 0.01236971, + 0.0065934076, + -0.011062343, + -0.0072470913, + -0.03326245 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.0036616856, + 0.0023591535, + -0.005305319, + -0.0354111, + -0.011245246, + 0.025130458, + -0.013479064, + -0.0065428037, + 0.000525931, + -0.014710203, + -0.015865188, + -0.010839097, + 0.015966726, + -0.015052891, + -0.005124456, + -0.01776901, + 0.03292344, + -0.0066951094, + 0.013682139, + -0.016131723, + -0.016944021, + 0.013161761, + 0.020510515, + -0.030664237, + -0.01723594, + -0.0044390797, + 0.010394871, + -0.016093647, + -0.008859121, + -0.0033888044, + 0.023569325, + 0.008979697, + -0.007088566, + -0.010128336, + -0.019368222, + -0.014177132, + -0.01663941, + -0.0054798364, + -0.0033221706, + -0.023912013, + 0.009538151, + 0.0030048667, + 0.0062255003, + -0.009830071, + 0.000304215, + 0.02713582, + 0.0030318375, + -0.0020259847, + -0.015230581, + 0.007881826, + -0.0069997213, + 0.004991188, + -0.024978153, + -0.01434213, + -0.01599211, + 0.0025796797, + -0.026348906, + -0.0015373367, + 0.020573977, + -0.012546191, + -0.015484424, + 0.0025542954, + -0.025587376, + 0.0034046695, + 0.005736852, + 0.004534271, + 0.0036204362, + 0.017794395, + 0.023772398, + 0.013923289, + 0.011454666, + 0.0065364577, + -0.0017546898, + 0.016119031, + 0.027186587, + -0.008275283, + -0.013466372, + 0.0014770491, + -0.0071076048, + -0.0044263876, + 0.0008249898, + -0.030968849, + -0.021843191, + 0.025930064, + 0.014900586, + 0.027465815, + -0.007145681, + 0.0349288, + 0.01206389, + -0.007456639, + -0.024216624, + 0.0038012993, + -0.013974058, + 0.010401217, + -0.009918916, + -0.0046675387, + -0.0011875094, + 0.024229316, + -0.01793401, + -0.01144832, + 0.02071359, + -0.025803143, + -0.015382887, + -0.0058701197, + -0.025511224, + 0.0013445747, + -0.018568616, + -0.012343117, + 0.016195185, + 0.008319705, + 0.006019253, + 0.03297421, + 0.016131723, + -0.041351028, + 0.004724653, + -0.035208028, + -0.014189824, + -0.029242717, + -0.023582017, + -0.013034839, + 0.023772398, + 0.011143709, + 0.01587788, + -0.0018657462, + 0.021906653, + -0.004194756, + 0.009182772, + -0.022097034, + -0.0076089446, + 0.009969684, + -0.001427867, + 0.012006775, + 0.009328731, + 0.004988015, + -0.023087023, + 0.021805115, + -0.016715562, + 0.020535901, + -0.01806093, + -0.01194966, + -0.0018133911, + 0.020688206, + -0.0031936625, + -0.013948674, + 0.001388204, + 0.04708788, + 0.008027785, + -0.014354823, + 0.011315052, + -0.018720923, + 0.020929357, + -0.011410244, + 0.035030335, + -0.00031869198, + 0.010471025, + 0.004861094, + 0.014583281, + 0.025561992, + -0.0099443, + -0.011886199, + 0.00060843, + 0.0037917802, + 0.019406298, + -0.022706259, + 0.024242008, + 0.022033574, + 0.017312095, + 0.01356791, + -0.00740587, + -0.008725854, + 0.010604292, + 0.009239886, + -0.061683852, + 0.024203932, + 0.028481187, + 0.043508694, + -0.0031143366, + -0.0013255365, + -0.009855455, + -0.005463971, + -0.019990139, + 0.019152455, + 0.033837274, + 0.025054306, + -0.03051193, + -0.0095698815, + 0.023455095, + -0.0071837576, + 0.013885213, + -0.017781703, + 0.010077568, + 0.0071774116, + -0.016398259, + -0.02260472, + -0.67339474, + -0.008015093, + 0.0062826145, + 0.012197157, + 0.02584122, + 0.022871256, + 0.0082625905, + 0.012584268, + -0.013174453, + -0.00046643656, + -0.030004244, + 0.0075391377, + -0.0015111592, + 0.025295457, + 0.008884505, + -0.019406298, + 0.005657526, + -0.006317518, + -0.0003151223, + -0.0022131938, + -0.0078310575, + 0.048052482, + -0.005286281, + -0.0066189566, + 0.018276697, + 0.022909332, + 0.011391206, + -0.048306327, + -0.012146388, + 0.0068601076, + -0.015789036, + 0.0026685249, + 0.002014879, + 0.011892545, + 0.04784941, + 0.014621358, + -0.018746307, + 0.017007483, + -0.0077104815, + 0.024800463, + 0.0031302017, + 0.015014814, + -0.008287975, + 0.0037917802, + 0.0100204535, + 0.0076343287, + 0.023455095, + 0.022020882, + 0.0181117, + -0.0067712627, + -0.016842484, + 0.0011065969, + -0.025752375, + -0.0042360052, + 0.02507969, + 0.0019672834, + 0.022033574, + -0.022325493, + 0.008947967, + 0.004708788, + -0.02601891, + 0.005054649, + -0.014786356, + -0.011486396, + -0.011219862, + 0.025168536, + -0.007456639, + -0.0035918788, + -0.0051530134, + -0.020193212, + -0.0106677525, + 0.036426473, + -0.012146388, + -0.0044898484, + 0.0010026799, + 0.006082713, + 0.0142152095, + -0.027465815, + -0.017629398, + 0.0006778402, + 0.021107048, + 0.008421242, + -0.037314925, + -0.011632357, + 0.045310978, + -0.007424908, + -0.0128888795, + -0.027491199, + 0.02307433, + -0.013428296, + 0.00047159274, + 0.023582017, + -0.0016991617, + -0.017515168, + -0.023772398, + -0.012247926, + -0.017439015, + 0.009728534, + -0.004264563, + -0.016969405, + -0.004883305, + -0.017489783, + 0.0046675387, + -0.004562828, + 0.008713162, + -0.0009915743, + -0.01641095, + 0.014481745, + 0.0011113564, + -0.0323396, + -0.023480479, + -0.010432948, + 0.012349463, + 0.01634749, + 0.011905238, + -0.024902001, + 0.009601613, + 0.011956006, + 0.015890572, + -0.012622344, + 0.006472997, + 0.02507969, + 0.0043248506, + -0.03355805, + -0.0054449327, + 0.023150483, + 0.0008091246, + -0.003782261, + -0.003017559, + 0.012311387, + -0.008027785, + 0.007450293, + 0.024584696, + -0.0069235684, + 0.013123685, + 0.009868148, + 0.020853205, + -0.028125806, + 0.014177132, + -0.016131723, + -0.013669447, + -0.012698497, + -0.010401217, + -0.006898184, + 0.007977017, + -0.038787212, + 0.005720987, + 0.006790301, + -0.02100551, + 0.00044065563, + -0.0041693714, + -0.0035696675, + -0.0060002143, + -0.008662393, + -0.017908625, + -0.0028176575, + 0.00008002004, + 0.021855883, + -0.023569325, + 0.010331411, + 0.008706816, + 0.0062128077, + -0.016956713, + -0.010610638, + 0.014735587, + -0.006063675, + -0.0031508266, + 0.022680873, + -0.022795103, + -0.028455803, + -0.01416444, + -0.0124383075, + 0.010299681, + 0.011518127, + 0.018670155, + -0.0128888795, + 0.0038108183, + -0.010045838, + 0.0022703086, + -0.0022179533, + 0.0070124133, + 0.0038425487, + -0.010724868, + -0.0015555818, + 0.035258796, + 0.0035760135, + 0.017096328, + 0.014913278, + -0.0011637115, + -0.00944296, + 0.037543382, + -0.010001415, + -0.01971091, + -0.016550565, + -0.004454945, + 0.004280428, + -0.01062333, + 0.0007484403, + 0.00028101215, + 0.0030001071, + -0.0003750134, + 0.0068410696, + 0.018264005, + -0.0039948546, + -0.0034903416, + -0.031121153, + 0.003928221, + -0.0012160668, + 0.023378942, + 0.014532513, + 0.003921875, + -0.0153067345, + -0.008103939, + -0.001684883, + -0.0066633793, + 0.024330853, + 0.013783676, + 0.013022147, + -0.027237356, + 0.006463478, + -0.010293335, + -0.0014453187, + 0.0006794267, + -0.0012739747, + -0.020091675, + 0.010248912, + 0.015433656, + 0.0054988745, + -0.00074645714, + -0.0009701563, + -0.043661, + -0.00941123, + 0.009747572, + 0.027110435, + -0.011727547, + -0.0009638102, + 0.015471732, + -0.024280084, + 0.035360333, + 0.0029604442, + 0.02690736, + 0.006720494, + 0.016182493, + -0.010185451, + 0.016499797, + 0.010566216, + 0.0052608964, + 0.017159788, + -0.019444376, + -0.0045882124, + -0.012844456, + 0.0012406578, + -0.013390219, + -0.018759, + -0.014481745, + -0.021360891, + 0.011746585, + 0.0035918788, + 0.02624737, + 0.029471174, + -0.0068537616, + 0.0015087795, + 0.019507837, + -0.0011272216, + -0.022084342, + 0.013720215, + 0.018923998, + -0.00532753, + -0.016677486, + -0.020269366, + 0.0042360052, + -0.020307442, + 0.009347769, + -0.022617413, + 0.03074039, + -0.028760415, + 0.0067776088, + -0.016233262, + 0.0035760135, + 0.032948826, + 0.021767039, + -0.023315482, + -0.0025431898, + 0.031298846, + 0.004889651, + -0.03228883, + -0.0065491498, + -0.0019418991, + -0.00030342172, + 0.013072915, + 0.010578908, + 0.0036743777, + -0.018555924, + -0.017261324, + -0.017121712, + 0.007577214, + 0.054170102, + -0.010534485, + 0.021919345, + -0.0051593594, + -0.011797355, + -0.023315482, + -0.00926527, + -0.019875908, + 0.027846579, + -0.014938662, + -0.009563535, + 0.003861587, + -0.0047754217, + 0.0034332268, + -0.00036251955, + 0.014024827, + -0.0023591535, + 0.000115022616, + -0.0076597133, + 0.016144415, + -0.0113340905, + 0.022668181, + 0.01912707, + -0.010045838, + -0.0055750273, + -0.024800463, + -0.027618121, + -0.0049118623, + 0.12011851, + -0.015382887, + -0.0066697253, + -0.001366786, + 0.015154428, + -0.0030413566, + -0.0016468066, + -0.004191583, + 0.0061810776, + 0.023061639, + -0.0016626718, + -0.024089703, + -0.0146467425, + 0.019495144, + -0.0022131938, + -0.008744892, + -0.018733615, + 0.0047722487, + 0.0012700084, + -0.008859121, + 0.0069235684, + -0.032314215, + 0.014773664, + 0.011257938, + 0.0044073495, + 0.024140472, + 0.008332397, + -0.010762944, + 0.016867869, + -0.02614583, + -0.010934288, + 0.0035538024, + -0.021640118, + 0.0037378385, + -0.011023133, + 0.006050983, + -0.0001546856, + 0.020078983, + 0.009607959, + -0.025511224, + 0.008129323, + 0.019368222, + 0.015471732, + -0.02230011, + 0.02655198, + -0.0198886, + -0.009227194, + 0.03051193, + -0.013301374, + -0.017616706, + 0.023759706, + 0.0059272344, + -0.022312801, + -0.0087004695, + -0.011867161, + 0.011099286, + -0.02283318, + -0.006752224, + -0.041224107, + 0.014062903, + 0.001889544, + -0.042163327, + -0.0055083935, + -0.018720923, + -0.0062096347, + -0.034446497, + -0.013390219, + 0.004613597, + -0.0016737774, + 0.004553309, + 0.0033380357, + -0.034192655, + -0.005121283, + -0.008890851, + 0.015446348, + -0.013885213, + 0.012355809, + -0.0065110736, + 0.0073741395, + 0.026958128, + -0.018162468, + 0.006707802, + 0.0018974766, + -0.009703149, + -0.043661, + 0.021208584, + 0.01345368, + -0.020142443, + -0.018923998, + 0.0021354544, + 0.014227902, + 0.020637438, + 0.014684819, + 0.01764209, + -0.009277962, + 0.025790451, + -0.003953605, + 0.01510366, + -0.015382887, + 0.0039853356, + 0.027110435, + 0.002100551, + 0.001223206, + 0.007996055, + 0.03787338, + 0.034801878, + 0.015205197, + 0.023175867, + -0.018251313, + -0.007799327, + 0.018517848, + -0.031704992, + 0.02637429, + 0.009633343, + -0.002843042, + 0.013821753, + -0.0054512788, + 0.032542676, + 0.018733615, + -0.013072915, + -0.008992389, + -0.017477091, + 0.022795103, + 0.008827391, + 0.00607954, + 0.0026336212, + -0.009373154, + -0.0041122567, + -0.029420406, + -0.0024876615, + -0.006060502, + 0.0029318868, + -0.05386549, + -0.018264005, + -0.027161203, + 0.006453959, + 0.0019768025, + -0.0047817677, + -0.0155225005, + -0.0026177561, + -0.025955448, + 0.014139056, + 0.00784375, + -0.0080341315, + -0.038863365, + -0.026526596, + 0.008465664, + -0.022223957, + -0.03335497, + 0.03599494, + 0.002354394, + 0.006783955, + -0.011975044, + 0.007964325, + 0.003953605, + -0.01283811, + -0.013656754, + -0.006701456, + -0.011810047, + 0.013225221, + 0.03221268, + 0.009563535, + 0.031298846, + -0.029471174, + -0.009684111, + -0.010718522, + -0.0016864695, + -0.009633343, + -0.014291362, + 0.023455095, + 0.0042455243, + 0.0021671848, + 0.004182064, + 0.025358917, + -0.016677486, + 0.032542676, + -0.014088288, + -0.003696589, + -0.0062223272, + -0.0012866668, + -0.012216195, + -0.0084783565, + -0.025460456, + -0.002308385, + 0.0025400168, + -0.0050927256, + 0.025536608, + -0.0055147395, + 0.03015655, + -0.014227902, + -0.000683393, + -0.0119940825, + 0.013377527, + -0.0068410696, + -0.0135552175, + -0.021195892, + -0.009690457, + -0.020129751, + -0.011841777, + 0.020662822, + 0.03327882, + -0.0034363999, + -0.0011399138, + 0.013796368, + -0.011816393, + 0.029166562, + 0.0057622367, + -0.000033713524, + -0.008427588, + -0.006644341, + -0.018771691, + -0.020434363, + -0.004274082, + -0.007735866, + 0.00022806208, + 0.00013941535, + -0.005644834, + 0.016309414, + -0.01793401, + -0.001592865, + -0.016449027, + 0.019050919, + -0.0009289068, + 0.022782411, + 0.0031476535, + 0.0019434856, + 0.012901572, + -0.027998885, + 0.02637429, + -0.0051752245, + 0.006657033, + -0.0008075381, + 0.036858007, + -0.00057233666, + -0.04196025, + -0.025790451, + -0.0061525204, + -0.0019545914, + 0.013149069, + 0.01893669, + -0.000504513, + 0.0018990631, + -0.005654353, + 0.007856442, + -0.015217889, + -0.00092176744, + -0.0018308428, + 0.0041439873, + -0.019520529, + -0.006361941, + -0.0029858286, + 0.0022703086, + -0.025155844, + 0.0089289285, + -0.016766332, + 0.005283108, + -0.019203225, + -0.011042171, + -0.008795661, + 0.026095062, + 0.01710902, + 0.0061017517, + -0.01946976, + 0.0031539996, + 0.022287417, + 0.0031651051, + -0.0020466093, + -0.0064349207, + -0.0017419977, + 0.019964753, + -0.002479729, + -0.012279656, + -0.00973488, + 0.014786356, + 0.015065583, + -0.009423922, + 0.0014373861, + -0.0055972384, + 0.014519821, + -0.007139335, + 0.006472997, + 0.014012135, + -0.010966019, + -0.00844028, + -0.02359471, + -0.016271338, + -0.011518127, + 0.0024130952, + 0.014469052, + 0.0041059107, + -0.015154428, + -0.00494042, + -0.009887186, + 0.008643355, + 0.01641095, + -0.0047754217, + 0.0035887058, + 0.025130458, + -0.017908625, + 0.026856592, + 0.007139335, + 0.009855455, + -0.011759277, + 0.0000119732595, + 0.009398538, + 0.005695603, + 0.0218305, + 0.004981669, + -0.002106897, + -0.028709646, + 0.004204275, + 0.007386832, + 0.011410244, + -0.020104367, + 0.016944021, + 0.0016690178, + 0.008218167, + -0.001592865, + -0.028506571, + 0.011327744, + -0.01481174, + 0.009309692, + 0.019964753, + -0.02519392, + 0.004708788, + 0.020015523, + 0.0076089446, + -0.0044454257, + -0.0073487554, + -0.023340866, + -0.0229601, + 0.023861244, + -0.001327123, + -0.02672967, + 0.008326051, + -0.0144182835, + -0.0058383895, + 0.02650121, + 0.0012938061, + -0.004534271, + 0.00080833136, + 0.048128635, + 0.034903415, + 0.007171065, + -0.0006853762, + 0.008414896, + 0.00973488, + -0.012514461, + -0.03244114, + -0.00086385955, + -0.012869841, + 0.031679608, + 0.0061112707, + -0.012006775, + -0.01498943, + 0.0040138927, + -0.044980984, + -0.0023892974, + -0.004981669, + 0.019482452, + 0.019317454, + 0.010889865, + -0.01351714, + 0.019253993, + 0.0012858736, + 0.0080849, + -0.009982376, + -0.005682911, + 0.034141887, + -0.025993526, + -0.0084720105, + -0.026678901, + -0.033380356, + 0.025270073, + 0.0048230174, + 0.0008932101, + 0.020688206, + 0.016893253, + 0.00018264799, + -0.0017229595, + -0.018187853, + 0.0104646785, + 0.013872521, + 0.026323522, + -0.005695603, + -0.00554647, + -0.014012135, + 0.026577365, + -0.008865467, + 0.007507407, + 0.017667474, + -0.006146174, + -0.0011272216, + -0.002828763, + -0.004302639, + -0.009481037, + 0.016309414, + -0.017756319, + 0.02124666, + -0.015649423, + 0.009144695, + 0.01893669, + -0.0020450228, + -0.008129323, + -0.000619139, + 0.005029265, + 0.0064983815, + -0.01191793, + 0.009614305, + -0.020548593, + -0.010515447, + 0.007507407, + 0.0071901036, + -0.016969405, + -0.0041281222, + -0.011632357, + -0.021627426, + -0.02318856, + 0.016791716, + 0.024914693, + -0.013136377, + -0.006885492, + -0.014367515, + 0.00032087346, + -0.010629676, + -0.018860536, + 0.013694831, + -0.019050919, + 0.001507193, + 0.018746307, + -0.008681431, + -0.022173189, + -0.012514461, + 0.010566216, + 0.014494437, + -0.000041075964, + 0.22196034, + -0.030664237, + -0.003871106, + 0.023518555, + 0.006472997, + 0.029395021, + 0.028075038, + -0.00772952, + 0.008180091, + -0.004029758, + -0.029674249, + -0.0040963916, + -0.020612054, + 0.0033888044, + 0.006035118, + -0.016982097, + -0.017616706, + -0.043990996, + -0.016017495, + -0.003369766, + 0.0011994083, + 0.013529833, + 0.0048103253, + -0.012876187, + 0.018264005, + 0.021741655, + -0.018048238, + -0.015078275, + 0.028075038, + 0.011257938, + 0.0072916406, + -0.0014794288, + -0.016931329, + -0.0062286733, + 0.00926527, + 0.0025780932, + 0.0021211756, + -0.0126667665, + 0.021094356, + 0.003544283, + -0.0051910896, + 0.0024559312, + -0.012723882, + -0.01828939, + -0.009144695, + 0.03657878, + 0.0012065476, + -0.007932594, + 0.0005402097, + 0.036172632, + -0.04005643, + -0.027821194, + 0.022706259, + 0.02519392, + -0.00095905067, + -0.029902708, + 0.04320408, + 0.017616706, + -0.038761828, + -0.016855177, + -0.0043248506, + 0.01198139, + -0.006783955, + -0.004978496, + 0.009760264, + 0.009557189, + -0.016385566, + -0.0003672791, + 0.0065999185, + 0.013504448, + 0.021640118, + -0.006031945, + -0.013859829, + -0.0084783565, + -0.02501623, + -0.01005853, + 0.011549857, + 0.011105632, + 0.011626011, + 0.005733679, + -0.003379285, + 0.0008955899, + 0.023226636, + 0.0004791287, + 0.025435071, + -0.028075038, + 0.015865188, + 0.01941899, + -0.008935275, + -0.037314925, + 0.011257938, + -0.020967433, + 0.008135669, + -0.019050919, + 0.0069489526, + 0.006469824, + 0.006479343, + 0.024902001, + -0.0037378385, + -0.0016737774, + -0.029115794, + -0.03777184, + 0.017147096, + 0.0091383485, + 0.0065174196, + 0.0035791865, + -0.0031270287, + -0.002060888, + -0.024457775, + -0.009614305, + 0.0056733913, + -0.014253286, + 0.008332397, + 0.020269366, + -0.002018052, + -0.004194756, + 0.02436893, + -0.0038330297, + 0.017261324, + -0.003607744, + 0.00082419656, + -0.003225393, + 0.0044866754, + 0.005654353, + 0.0010954912, + -0.021767039, + -0.041934866, + -0.0035855325, + -0.028582724, + -0.037746456, + 0.008852775, + 0.021335505, + 0.013885213, + -0.013821753, + -0.017895933, + 0.0064349207, + -0.008218167, + -0.018124392, + -0.013301374, + 0.013161761, + 0.015420963, + 0.011511781, + -0.011816393, + -0.018657463, + -0.01463405, + -0.007113951, + -0.0071012583, + 0.010204489, + -0.012101966, + 0.0016610853, + 0.005064168, + -0.018517848, + 0.011029479, + -0.023480479, + 0.053053193, + -0.018048238, + -0.029902708, + -0.0124319615, + 0.01888592, + 0.017007483, + -0.017274018, + -0.02690736, + 0.032187294, + -0.0018022854, + 0.0011748172, + 0.0020402633, + -0.16012418, + 0.022020882, + 0.025219304, + -0.0064983815, + 0.024445083, + 0.0023385289, + 0.024077011, + -0.00504513, + -0.004696096, + -0.0036870698, + 0.033888042, + 0.010972365, + -0.024343546, + -0.012336771, + -0.020434363, + -0.018835152, + 0.019609373, + -0.01510366, + 0.01935553, + 0.010014107, + 0.019558605, + -0.025384301, + 0.031222692, + 0.00059613446, + 0.020675514, + -0.0047722487, + 0.01070583, + 0.023556633, + -0.010318719, + -0.01793401, + -0.02289664, + -0.0010375833, + 0.013694831, + -0.0058510816, + 0.014062903, + 0.02590468, + 0.005625796, + 0.0029160217, + -0.011518127, + 0.0020196384, + 0.027186587, + 0.008649701, + -0.0037949532, + -0.009722188, + -0.013085607, + 0.012698497, + 0.017096328, + 0.0010201316, + -0.018302081, + 0.002271895, + 0.023620093, + -0.004715134, + 0.026323522, + -0.0035093797, + -0.008795661, + 0.000028755654, + 0.015547885, + 0.012412923, + -0.009449306, + -0.00074963016, + -0.022947408, + -0.00058344234, + 0.0013905838, + -0.0142025165, + 0.0006853762, + -0.021157816, + -0.023645477, + -0.00009484408, + -0.0041788905, + 0.02071359, + -0.019114379, + -0.026653517, + 0.018911306, + -0.008243552, + 0.022452416, + 0.025460456, + -0.0075454838, + 0.012844456, + 0.008078554, + -0.01828939, + 0.0055274316, + 0.044574834, + -0.016690178, + 0.034801878, + -0.041579485, + -0.0033856314, + 0.0036331282, + -0.0001255333, + -0.012546191, + -0.0126667665, + 0.027389662, + -0.010858135, + -0.021107048, + -0.003207941, + -0.00096619, + 0.015725575, + 0.019139763, + 0.033583432, + -0.017439015, + -0.010712176, + 0.027897349, + 0.0011867161, + -0.0068791457, + 0.015662115, + 0.032542676, + 0.034141887, + 0.035436485, + 0.017020175, + 0.010794674, + 0.018898612, + -0.020345518, + -0.027643505, + 0.006419055, + 0.010502755, + -0.031781144, + 0.009258924, + 0.032085758, + -0.015217889, + 0.008757584, + 0.003060395, + 0.026628133, + -0.012044852, + -0.0033412087, + 0.004258217, + -0.006650687, + 0.00926527, + -0.10935558, + -0.043001007, + 0.011683125, + 0.022617413, + -0.014545205, + 0.024038933, + 0.00016648532, + -0.022757027, + 0.009703149, + -0.0069616446, + -0.015547885, + -0.003617263, + 0.020472439, + 0.00063460757, + 0.037162617, + -0.017667474, + 0.003073087, + -0.0054988745, + -0.0062762685, + 0.0004069421, + -0.00015309907, + 0.010940634, + 0.0010177519, + 0.0073424093, + -0.02726274, + -0.0058796387, + -0.01971091, + 0.0066760713, + 0.019279378, + 0.0047722487, + 0.0038298566, + -0.040919494, + 0.009252578, + -0.0033983234, + -0.001724546, + -0.0034681302, + 0.0021116566, + 0.030308856, + 0.0022417512, + -0.02336625, + -0.0047278265, + 0.0006710975, + 0.021132432, + -0.03015655, + -0.013910597, + -0.002486075, + -0.0011859229, + 0.027389662, + 0.011378514, + -0.01434213, + 0.0059177154, + -0.0012247926, + -0.028709646, + -0.016436335, + 0.01770555, + -0.009093926, + 0.0032460175, + 0.010432948, + -0.010712176, + 0.013770984, + -0.036832623, + -0.017984778, + -0.016715562, + 0.01787055, + 0.020269366, + 0.012787342, + -0.017692858, + 0.007989709, + -0.009328731, + -0.003537937, + -0.008510088, + 0.01274292, + -0.014380207, + 0.009030465, + -0.015141736, + -0.007075874, + 0.007507407, + 0.0040773535, + 0.0018356023, + -0.015738267, + -0.013897905, + -0.0040487964, + -0.0055623353, + -0.032415755, + 0.024102395, + 0.012311387, + -0.00045295115, + -0.008725854, + -0.010661406, + -0.005736852, + 0.013390219, + -0.0020783397, + 0.029065026, + -0.025447764, + -0.011276976, + 0.01295234, + -0.017553246, + -0.008935275, + 0.02507969, + -0.01416444, + -0.037670303, + -0.021259353, + -0.044650987, + 0.003934567, + -0.011930622, + -0.013770984, + 0.0038139913, + -0.010788328, + 0.019038226, + 0.009290654, + -0.0053370497, + -0.0015389234, + -0.017007483, + 0.0020450228, + 0.0012779409, + 0.017312095, + -0.0011549857, + -0.0093604615, + 0.025714299, + 0.008275283, + -0.0065428037, + 0.019406298, + -0.0039155288, + -0.0011906824, + 0.012717536, + -0.0032840942, + -0.009125656, + 0.012254272, + -0.0033824584, + 0.023340866, + -0.028531956, + -0.011702163, + 0.016664794, + -0.029039642, + 0.006898184, + -0.008960659, + -0.009525459, + -0.029826555, + -0.00772952, + 0.018949382, + -0.0055401237, + 0.025523916, + -0.0075327917, + -0.013187145, + 0.037974916, + -0.0078183655, + 0.014037519, + -0.011454666, + -0.0015254379, + 0.0100204535, + -0.0009209742, + 0.029775785, + -0.017248632, + 0.03114654, + -0.010775636, + -0.015738267, + -0.013720215, + 0.00087655167, + 0.0029493386, + 0.033075746, + 0.009239886, + -0.0016991617, + 0.018962074, + -0.021678194, + 0.017134404, + 0.013390219, + 0.021145124, + -0.01893669, + -0.017946701, + 0.0058542546, + 0.015839804, + -0.022046266, + -0.016956713, + -0.009626997, + 0.014799048, + 0.04277255, + 0.02147512, + 0.006415882, + 0.010610638, + -0.028811183, + -0.02868426, + 0.025028922, + 0.008091247, + -0.025206612, + -0.0026161696, + 0.004705615, + 0.020040907, + 0.0024686235, + -0.016588641, + -0.013593294, + 0.002489248, + 0.03150192, + -0.0012866668, + -0.011226208, + 0.026602749, + 0.0072726025, + 0.0032523638, + 0.009487383, + -0.00675857, + -0.024889309, + -0.010781982, + 0.027745042, + 0.017375555, + -0.003867933, + -0.038685676, + -0.005708295, + -0.010248912, + 0.008224513, + -0.011048517, + -0.0069997213, + 0.0048198444, + 0.007056836, + 0.008897197, + 0.021132432, + 0.015738267, + 0.0062508844, + -0.0052577234, + 0.0029858286, + 0.0046485, + -0.000010938304, + -0.022807796, + 0.02024398, + 0.013847137, + 0.01610634, + 0.015014814, + -0.032085758, + 0.009030465, + 0.0148625085, + 0.014316746, + -0.021360891, + -0.0119940825, + 0.00890989, + -0.012558883, + -0.0218305, + -0.039167978, + -0.009855455, + 0.0045120595, + -0.023061639, + 0.014748279, + 0.02873503, + -0.0142025165, + 0.049144007, + -0.0071076048, + -0.023569325, + 0.006644341, + -0.010286989, + 0.027313508, + 0.0040614884, + 0.016664794, + -0.012349463, + -0.026095062, + -0.007393178, + 0.0040773535, + -0.008211821, + -0.031704992, + -0.032466523, + -0.008465664, + -0.017185172, + -0.013123685, + -0.0024067492, + 0.008008747, + 0.03190807, + 0.013377527, + -0.0036553396, + 0.011422936, + -0.017223248, + -0.0040805265, + 0.025308149, + 0.013923289, + -0.012495423, + -0.030308856, + 0.009189118, + 0.0174644, + -0.025041614, + -0.0026066506, + -0.00018592019, + -0.0089225825, + -0.007113951, + -0.014837124, + 0.005054649, + 0.021868575, + -0.024026241, + 0.02431816, + -0.005698776, + -0.03510649, + 0.009316039, + 0.0035855325, + -0.0025336707, + 0.0128888795, + -0.03612186 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 22, + "total_tokens": 22 + } +} +276 34376 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What is the capital city of Japan?"]}HTTP/2.0 200 OK +Content-Length: 33421 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:38 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 81 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_878f6e594e6244619c3aaf9186987e0b + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.008851459, + -0.013955677, + -0.013557299, + 0.00080998323, + -0.017902108, + 0.015374898, + -0.022782238, + 0.0062557785, + -0.0017662459, + -0.042178262, + -0.000029226701, + 0.004540886, + -0.0050668693, + -0.018873155, + -0.022234468, + -0.01136622, + 0.021562206, + -0.024512691, + 0.0057702553, + -0.01858682, + -0.0068720193, + 0.013880981, + -0.0065981345, + -0.007513159, + -0.008621148, + -0.0012597146, + 0.015312652, + -0.019097243, + 0.016781671, + -0.013457704, + 0.009175141, + 0.007961334, + -0.025695376, + -0.008540227, + -0.006442518, + 0.0061406223, + -0.012654724, + -0.0060099047, + -0.0034142234, + -0.023554096, + 0.037522223, + 0.00496105, + -0.020292375, + 0.0016588706, + -0.01952052, + 0.017441483, + -0.013843633, + 0.0074820356, + -0.0039464314, + 0.00894483, + 0.025471289, + 0.02417656, + -0.033065367, + -0.004167407, + -0.03861776, + -0.008067153, + -0.026392538, + -0.01696841, + -0.008739416, + 0.018151095, + 0.0066168085, + 0.009144018, + -0.016931063, + 0.01985665, + 0.00054310117, + -0.01983175, + -0.013669343, + 0.030724898, + -0.029679157, + 0.0027123934, + 0.016383292, + 0.014291808, + 0.012343491, + -0.0050979927, + 0.007824391, + -0.007973784, + -0.02385288, + 0.0043728203, + 0.0043665958, + 0.012860138, + 0.015063666, + -0.006529663, + 0.00075590657, + -0.017902108, + 0.008004907, + -0.0003059807, + -0.0074011153, + 0.027687266, + -0.0019887774, + -0.012038483, + 0.021649351, + 0.013781386, + 0.008776763, + 0.013868532, + -0.028981995, + -0.009349432, + 0.0117397, + 0.010133739, + -0.0076625505, + -0.01840008, + 0.00393087, + -0.0015071447, + 0.0036974452, + -0.009505048, + -0.0074260137, + 0.023429602, + 0.005157127, + -0.006735077, + 0.01101764, + 0.010525892, + 0.0024727443, + 0.027537875, + 0.003230596, + -0.05691825, + -0.021786293, + -0.021387916, + 0.027139496, + -0.007675, + -0.0050917678, + -0.009486374, + 0.026467234, + 0.03821938, + 0.019682359, + 0.00061896414, + 0.036949553, + 0.0075380574, + -0.014702636, + -0.017989254, + -0.012044708, + -0.016296146, + 0.027761962, + 0.011801946, + -0.005104217, + 0.017117802, + -0.0063398113, + 0.020466667, + -0.0030174016, + 0.01246176, + -0.014279359, + -0.022184672, + 0.02544639, + 0.0018160432, + 0.02004339, + 0.016980859, + 0.024761679, + 0.0144660985, + 0.02456249, + 0.024151662, + 0.013943228, + 0.0016215227, + -0.008957279, + -0.004761861, + 0.030774696, + 0.014391403, + 0.0024369524, + 0.017715368, + 0.013594647, + 0.007089882, + 0.006109499, + 0.0018471665, + -0.0016899939, + 0.009262287, + 0.01932133, + -0.001395879, + -0.012474209, + 0.018698864, + -0.007326419, + 0.0043946067, + 0.003716119, + -0.0031559002, + -0.039265126, + -0.007089882, + -0.031695943, + 0.00286801, + 0.005664436, + 0.013669343, + 0.013021979, + -0.007096107, + -0.013955677, + 0.0025443279, + -0.01318382, + 0.0012425968, + 0.021549756, + 0.019906448, + -0.007008962, + 0.0025240977, + 0.019097243, + 0.005567954, + 0.020628508, + -0.028782805, + 0.023429602, + 0.03144696, + 0.015586536, + 0.017964356, + -0.6413885, + -0.030202027, + -0.019819302, + 0.0009235832, + 0.031197973, + -0.0004341697, + 0.007058759, + 0.029305676, + 0.0005053642, + 0.013619546, + -0.01335811, + -0.0070649837, + -0.041381508, + -0.005767143, + -0.022172222, + -0.0135324, + -0.0017693583, + -0.014129967, + -0.009834955, + 0.0055523925, + 0.001993446, + 0.022371411, + -0.012760543, + -0.0055243815, + -0.0076252026, + -0.0033799878, + 0.009685564, + -0.024313504, + -0.0025598893, + 0.05074339, + -0.034882966, + 0.034783375, + 0.023765733, + -0.0041549574, + 0.035107054, + 0.017441483, + -0.04048516, + 0.032418005, + 0.0011826844, + 0.02943017, + -0.008347263, + 0.006529663, + 0.010731306, + -0.012405738, + -0.0050886557, + -0.017441483, + 0.04890089, + -0.018362733, + 0.01100519, + 0.0048490064, + 0.008048479, + -0.034609083, + -0.025023114, + -0.0014884707, + 0.0065607866, + 0.014752433, + 0.0062184306, + -0.007631427, + 0.0012083612, + -0.0033799878, + -0.010202209, + 0.01663228, + -0.015213057, + -0.008197871, + -0.012480434, + 0.017055554, + -0.018424978, + -0.0030329633, + 0.0047400747, + -0.044892214, + -0.00096482155, + 0.0029878344, + 0.004883242, + -0.00290847, + 0.017429035, + -0.0051166667, + 0.026143553, + 0.0054963706, + 0.0021023774, + -0.019059895, + -0.012443086, + -0.00005334724, + -0.029504865, + -0.00976026, + -0.007438463, + -0.035256445, + -0.025595782, + -0.007164578, + 0.01878601, + -0.016657177, + 0.008994627, + 0.01589777, + 0.0027046127, + 0.013420356, + -0.022321614, + 0.016009813, + 0.006548337, + -0.013146472, + -0.005387439, + 0.005356316, + -0.0083908355, + -0.017130252, + -0.0008379942, + 0.0028197689, + -0.0020930404, + -0.011503163, + -0.0012511557, + 0.0062931264, + 0.032069422, + -0.017727818, + 0.021250973, + -0.03179554, + -0.01985665, + 0.007998682, + 0.02313082, + -0.014702636, + 0.03677526, + 0.013507502, + 0.040012084, + 0.020342173, + 0.0148271285, + 0.01533755, + 0.015623884, + -0.0063615977, + 0.02456249, + 0.010164862, + -0.013619546, + -0.006308688, + -0.031471856, + 0.020130536, + 0.0025816758, + 0.021960584, + 0.0022844484, + -0.012175426, + 0.020902392, + 0.016321046, + 0.011048763, + -0.023628792, + 0.009953224, + -0.0198442, + -0.037123844, + -0.014528345, + 0.011210604, + -0.021973033, + 0.0019420924, + -0.030849392, + -0.00731397, + -0.0047929846, + -0.031671047, + 0.010476095, + 0.011335097, + -0.0030345195, + -0.0014199995, + 0.017130252, + -0.02564558, + -0.013781386, + -0.01389343, + 0.0011313311, + 0.0155491885, + -0.00794266, + 0.018275587, + 0.01317137, + -0.03234331, + 0.00045284367, + -0.0046684914, + -0.0023607004, + 0.018163543, + 0.005197587, + -0.009617092, + -0.01696841, + -0.02581987, + -0.017927008, + -0.012019809, + 0.0024260595, + -0.002004339, + -0.007531833, + 0.021562206, + 0.004444404, + -0.003448459, + -0.0020323498, + 0.009698013, + -0.0075567313, + -0.004148733, + 0.0019809965, + 0.025409043, + -0.020653406, + 0.0133954575, + 0.020479115, + 0.0037379055, + -0.006772425, + -0.031322464, + 0.028135441, + 0.0076625505, + -0.005586628, + 0.005863625, + 0.0056955596, + 0.021736495, + 0.011714801, + -0.016333494, + 0.014553244, + 0.020827696, + -0.008558901, + 0.012038483, + -0.005079319, + 0.015872872, + -0.0108931465, + -0.019557867, + -0.030102432, + 0.016134307, + 0.00014491775, + 0.01254268, + -0.021325668, + -0.0112417275, + 0.0076812245, + -0.0005252053, + 0.027961152, + 0.013955677, + 0.0133954575, + -0.01894785, + 0.007824391, + 0.02671622, + 0.00029469852, + -0.0075567313, + -0.027761962, + -0.020255027, + 0.014528345, + 0.009890977, + 0.046909, + -0.0044319546, + -0.01589777, + -0.034360096, + -0.025234751, + -0.01535, + 0.011403568, + -0.00033107385, + 0.001520372, + 0.013270965, + -0.005605302, + 0.026218249, + 0.0030267385, + 0.026965206, + 0.003163681, + 0.022097526, + -0.022657745, + 0.017316991, + -0.019234184, + 0.050942577, + 0.023081021, + 0.0023591444, + 0.015424696, + -0.027139496, + -0.026417436, + 0.0031730179, + -0.0007345093, + -0.002678158, + -0.04048516, + 0.0069778385, + 0.004572009, + 0.015200608, + 0.029156284, + 0.024437996, + 0.008235219, + -0.007967559, + -0.0010791996, + 0.008720742, + -0.012760543, + 0.004030464, + 0.023155717, + -0.00013947119, + -0.01029558, + -0.03861776, + 0.0041176095, + 0.0042638886, + -0.001862728, + -0.0018611719, + -0.0198442, + -0.012362165, + -0.024935968, + 0.01300953, + 0.014528345, + 0.0019327555, + -0.058710948, + 0.0031107715, + 0.015872872, + -0.002573895, + -0.034733575, + -0.011403568, + -0.015872872, + -0.020142984, + 0.03821938, + -0.004341697, + 0.008919931, + -0.002953599, + -0.010264456, + -0.011534286, + -0.021400364, + 0.023043673, + 0.00627134, + -0.014777332, + -0.0063989456, + 0.013383009, + -0.03956391, + 0.0038530615, + -0.008882583, + 0.02310592, + -0.007008962, + -0.004039801, + -0.01766557, + 0.016719423, + -0.010662834, + -0.00043650393, + -0.013295864, + -0.012642275, + 0.025720276, + 0.019047445, + 0.002195747, + -0.008216545, + 0.014889375, + 0.016047161, + -0.0006419176, + -0.005956995, + -0.01145959, + -0.026517032, + 0.014565693, + 0.08216545, + -0.011036314, + 0.003675659, + 0.0045937956, + -0.01127285, + 0.00554928, + -0.01199491, + -0.024861272, + -0.0018098186, + -0.0005252053, + -0.008334814, + -0.0070338603, + -0.02398982, + 0.009523722, + 0.008527777, + 0.0021973033, + -0.006809773, + -0.043248903, + 0.004114497, + 0.0049081407, + 0.0029473742, + -0.0018876267, + 0.007494485, + 0.018213341, + -0.01335811, + 0.020367071, + 0.036725465, + 0.0137440385, + 0.014167315, + -0.014677737, + 0.0021615115, + 0.018885603, + -0.025371695, + 0.011341322, + -0.023703488, + 0.010774878, + 0.0017444596, + 0.023616342, + -0.02076545, + 0.0013515282, + -0.0022657744, + 0.012069606, + 0.005045083, + -0.019358678, + 0.019171938, + -0.020715652, + -0.016906163, + 0.0058947485, + -0.005826277, + -0.0029582675, + 0.018039051, + -0.007002737, + -0.046336334, + -0.016047161, + -0.008235219, + 0.00976026, + -0.013320762, + -0.017254744, + 0.0049050283, + -0.0016791008, + -0.011397344, + -0.017715368, + -0.013706691, + -0.015611435, + -0.01029558, + -0.04601265, + 0.011496938, + -0.010631711, + -0.01786476, + -0.0019701035, + 0.007923986, + -0.02671622, + -0.018910503, + 0.016146755, + 0.02346695, + -0.020018492, + 0.020690754, + -0.012947283, + -0.0014223338, + 0.027861556, + -0.016669627, + -0.023952473, + -0.03846837, + -0.024114314, + -0.028757907, + 0.023504298, + 0.032044526, + -0.0063615977, + -0.006442518, + 0.010463646, + 0.015947567, + 0.012573804, + 0.018935401, + 0.01299708, + 0.0024338402, + -0.0021770732, + -0.0029582675, + 0.030550608, + -0.009890977, + -0.027338685, + 0.022271816, + -0.014951622, + -0.0035262671, + 0.006791099, + 0.005888524, + 0.008789213, + 0.01642064, + -0.005331417, + 0.0029893906, + 0.008951054, + 0.01933378, + -0.026815815, + 0.0162339, + 0.008421958, + -0.022122424, + 0.014117518, + 0.020665856, + 0.028135441, + 0.027562773, + -0.015213057, + 0.00088934763, + -0.016209003, + 0.024450446, + 0.035405837, + -0.02491107, + 0.002793314, + 0.0066354824, + -0.002270443, + 0.0007998682, + -0.013656894, + -0.015013868, + 0.020479115, + -0.022072628, + -0.022246918, + -0.013943228, + -0.009442802, + -0.019719707, + 0.026492132, + -0.018549472, + -0.010152413, + -0.02471188, + 0.0018829582, + 0.006716403, + -0.018039051, + -0.050519302, + -0.025197404, + 0.018898053, + 0.017951906, + 0.00069599424, + 0.013233617, + 0.0012029146, + 0.014055272, + -0.030475913, + 0.011048763, + -0.013806285, + -0.0033270782, + -0.01425446, + -0.028757907, + -0.0019420924, + 0.011216829, + 0.041032925, + 0.014117518, + 0.033961717, + -0.020802798, + -0.019034995, + 0.0029847221, + -0.008085827, + 0.008191646, + -0.0020572485, + 0.00632425, + 0.040709246, + 0.024263706, + -0.017628223, + -0.0005014738, + -0.02364124, + 0.037771206, + -0.013781386, + 0.006479866, + -0.02581987, + -0.036600973, + -0.0036818834, + -0.009523722, + -0.006666606, + 0.003753467, + -0.020516463, + -0.010525892, + -0.0066728303, + -0.014042822, + 0.019981144, + 0.0015693912, + 0.007986233, + -0.014279359, + 0.0080422545, + 0.0064736414, + 0.020379521, + 0.011814396, + -0.006890693, + -0.0014192214, + 0.0012340379, + 0.028733008, + 0.0026532593, + -0.0026236922, + 0.0012807228, + 0.014739984, + -0.00015308762, + 0.017615775, + -0.011901541, + -0.0098225055, + 0.01048232, + -0.0023295772, + -0.013071776, + -0.0040273517, + -0.0061904197, + -0.012772992, + -0.010233333, + 0.010718856, + -0.017080454, + 0.028210137, + -0.030600404, + -0.009617092, + 0.013631995, + -0.007911537, + 0.022906732, + -0.00088312296, + 0.01535, + -0.015586536, + -0.008720742, + -0.0015802843, + -0.0083908355, + -0.002069698, + -0.0040211272, + 0.026292944, + 0.024076967, + -0.018263139, + -0.052386697, + -0.00695294, + 0.013320762, + -0.015200608, + -0.0063398113, + 0.012511557, + 0.008807887, + -0.020105636, + -0.00011739311, + 0.008409509, + -0.011440916, + 0.018200891, + -0.010563239, + -0.018972749, + -0.008590024, + -0.0126796225, + 0.003656985, + -0.008235219, + -0.006610584, + -0.0012223667, + 0.009866078, + -0.015287753, + 0.012922384, + -0.03182044, + -0.014329156, + 0.0151881585, + -0.006567011, + 0.019047445, + -0.0067973235, + 0.030600404, + 0.008870133, + 0.00042016423, + -0.013046877, + 0.0016697637, + 0.007799493, + 0.02457494, + -0.016756771, + -0.03284128, + -0.019396026, + 0.012984631, + 0.0026734895, + 0.009635766, + 0.000103582155, + 0.002592569, + -0.032816384, + -0.006548337, + 0.025396593, + 0.0090942215, + -0.0074260137, + -0.011839294, + -0.027737064, + -0.020541362, + -0.024973316, + 0.0014417857, + 0.0011819064, + -0.004842782, + -0.0144660985, + 0.010233333, + -0.0038592862, + 0.025359245, + 0.008085827, + -0.0013289639, + 0.016570032, + 0.0040989355, + -0.02599416, + -0.0038810726, + 0.005393664, + 0.030376317, + -0.0180515, + -0.0013095118, + -0.010258231, + -0.02997794, + 0.027512977, + -0.010444972, + -0.0045191, + -0.020728102, + 0.006299351, + 0.02059116, + 0.0151881585, + 0.017752716, + 0.020429319, + -0.013320762, + -0.018848255, + -0.009754035, + -0.026915409, + 0.032791484, + 0.012187875, + 0.015735928, + 0.008857684, + -0.018910503, + 0.00609705, + 0.014304258, + -0.020504015, + -0.0108993715, + -0.016096959, + -0.030326521, + -0.024774129, + 0.001615298, + -0.030202027, + 0.0005427121, + -0.0043634833, + -0.00096793385, + -0.0010589694, + -0.0062744524, + 0.008347263, + -0.009044424, + -0.0026952757, + 0.03465888, + 0.010500994, + -0.0028462235, + -0.011154582, + -0.029280778, + 0.0065421127, + -0.024462895, + -0.031496756, + -0.016819019, + -0.022346511, + 0.026990104, + -0.0058107157, + -0.029355474, + -0.039464314, + -0.013059326, + -0.041381508, + -0.02671622, + -0.0015997364, + 0.013059326, + 0.022570599, + 0.0010932051, + 0.0008208764, + -0.0005956217, + 0.015213057, + 0.005303406, + -0.0077745942, + 0.020416869, + 0.02562068, + -0.0451163, + 0.02905669, + 0.0048863543, + -0.00596322, + -0.00037192315, + -0.0119575625, + -0.0030376317, + 0.008172972, + 0.0270648, + -0.0005785039, + -0.024400648, + -0.006809773, + -0.000902575, + -0.01661983, + 0.02313082, + 0.002071254, + -0.0433236, + 0.022147324, + 0.0137440385, + -0.004491089, + -0.011509388, + 0.020367071, + -0.0032835056, + -0.01335811, + -0.010849574, + -0.023591444, + -0.02346695, + -0.0027497415, + -0.016657177, + -0.0026921635, + -0.0066977288, + -0.005944546, + -0.002782421, + 0.0022066403, + -0.005583516, + -0.013109124, + 0.0012223667, + -0.047780454, + -0.0047556367, + 0.010071492, + -0.014640389, + -0.0133954575, + -0.01933378, + 0.0119637875, + -0.04257664, + -0.019719707, + 0.012243897, + -0.006548337, + -0.04202887, + 0.0116089815, + 0.012405738, + -0.008670945, + -0.00659191, + 0.01300953, + -0.03680016, + 0.010949168, + -0.02634274, + 0.015984915, + -0.035555232, + 0.034210704, + 0.007388666, + -0.015374898, + -0.026641523, + -0.006716403, + 0.018686416, + -0.012237672, + -0.005966332, + 0.23245353, + -0.00021222184, + 0.0031418947, + 0.023330009, + -0.0012215886, + 0.027139496, + 0.029330576, + -0.013507502, + -0.01952052, + 0.002088372, + -0.024301054, + -0.012785442, + -0.002678158, + 0.013818734, + -0.004970387, + -0.034733575, + -0.025222303, + -0.020192781, + -0.012206549, + -0.0047680857, + 0.0017491281, + -0.0044350666, + -0.00069015863, + 0.0023840428, + 0.008204096, + 0.023367357, + -0.006946715, + 0.009735361, + 0.029106488, + 0.00993455, + -0.005767143, + 0.012467984, + 0.003924645, + 0.030052636, + -0.008502879, + -0.0075940792, + -0.0057795923, + 0.0155242905, + 0.02021768, + 0.030027736, + 0.0005843395, + -0.0011624544, + -0.017802514, + 0.024301054, + 0.00090024073, + -0.0044599655, + -0.012405738, + -0.010034144, + -0.010874473, + 0.03050081, + -0.034011517, + -0.009890977, + 0.04165539, + 0.03234331, + 0.014951622, + -0.020416869, + 0.030177128, + 0.009262287, + -0.014378954, + -0.01425446, + -0.0075816303, + 0.041281912, + -0.012872587, + 0.027936252, + 0.0123310415, + 0.013993025, + -0.03919043, + 0.003495144, + 0.017404135, + -0.0069965124, + 0.012262571, + 0.004310574, + -0.0018985198, + -0.023043673, + -0.00976026, + 0.002689051, + 0.021798743, + 0.018113747, + 0.033189863, + 0.023865327, + -0.0021941909, + -0.006392721, + 0.010650385, + 0.008602474, + 0.0091066705, + -0.012872587, + 0.003544941, + 0.0041082725, + -0.0016557582, + -0.002430728, + 0.004855231, + -0.008832785, + -0.0058107157, + -0.028060745, + -0.010233333, + 0.01182062, + 0.0051540146, + 0.025035564, + 0.015561638, + -0.001510257, + -0.003513818, + 0.019234184, + 0.019408476, + -0.009548621, + -0.0022875608, + 0.0043977187, + 0.008608698, + 0.007693674, + -0.0035200424, + -0.006535888, + -0.0056270882, + -0.012374614, + 0.005203812, + 0.004615582, + 0.0144660985, + -0.0003828163, + 0.007257948, + -0.0101835355, + 0.020516463, + -0.021885887, + 0.01910969, + -0.03122287, + -0.029529763, + 0.011808171, + -0.0025038675, + -0.025346795, + 0.0010013914, + -0.009299635, + -0.014042822, + -0.033837225, + 0.01838763, + -0.008795437, + 0.014055272, + -0.005748469, + 0.0022922293, + 0.012735644, + -0.0017537966, + -0.020105636, + 0.0015693912, + 0.012505332, + -0.007152129, + -0.00095704076, + 0.010052818, + 0.00043494778, + -0.007183252, + -0.01859927, + 0.008602474, + 0.012586253, + -0.0039370945, + -0.004609357, + -0.02689051, + -0.037148744, + 0.002422947, + -0.012885036, + 0.008888808, + 0.009785158, + -0.006349148, + -0.030401217, + 0.025222303, + 0.016358394, + -0.022807136, + -0.008689619, + 0.04297502, + -0.017478831, + -0.03956391, + 0.003467133, + -0.15467024, + 0.02418901, + 0.026591728, + -0.020080738, + 0.016358394, + 0.019781955, + -0.007544282, + -0.03142206, + 0.0026501468, + 0.030002838, + 0.043597486, + 0.012113179, + -0.015611435, + -0.023292659, + -0.0012052489, + -0.018537024, + -0.014366504, + 0.006215318, + 0.021064233, + 0.017491281, + 0.026093755, + -0.0116152065, + 0.00042055326, + 0.016769221, + -0.018512124, + 0.017516179, + -0.022807136, + 0.0044257296, + 0.011416018, + -0.012922384, + -0.01337056, + -0.0288824, + 0.025670478, + 0.039464314, + 0.0020261253, + -0.000465682, + -0.0077683697, + -0.0041985298, + -0.014901824, + 0.021213625, + 0.004662267, + -0.00046295873, + 0.007040085, + -0.0068844687, + -0.011030089, + 0.021973033, + 0.00929341, + -0.0019778842, + -0.008863909, + -0.008801662, + 0.03560503, + -0.02469943, + -0.0034515713, + 0.004528437, + 0.015872872, + -0.0054185623, + 0.0070525343, + 0.01985665, + 0.019757055, + -0.0074260137, + -0.01272942, + 0.0019607665, + 0.02671622, + -0.008851459, + 0.0043946067, + 0.0032368207, + 0.0012231447, + 0.016507786, + -0.010270681, + 0.013134022, + -0.00037114506, + -0.024139212, + 0.008789213, + -0.027886456, + -0.0004065478, + 0.008359712, + 0.009529947, + 0.01462794, + 0.006031691, + 0.007905312, + -0.039613705, + 0.049598053, + -0.010438747, + -0.012094505, + -0.0069778385, + 0.019582765, + 0.01183307, + 0.011814396, + -0.013121573, + -0.0049486007, + 0.025359245, + -0.03142206, + -0.008845235, + -0.012299919, + 0.024052069, + 0.017603325, + -0.00133052, + 0.026492132, + -0.029181184, + -0.018325385, + 0.0021241636, + -0.0058947485, + -0.019993592, + 0.028558718, + 0.028683212, + 0.029380372, + 0.00524116, + 0.011478264, + 0.009249838, + 0.020130536, + -0.01840008, + -0.0075567313, + 0.02469943, + 0.017180048, + -0.020977087, + 0.014603041, + 0.0076625505, + -0.017117802, + 0.01589777, + 0.031073479, + 0.037920598, + -0.0026065744, + -0.0060099047, + 0.006090825, + -0.014279359, + -0.0066541564, + -0.074895054, + 0.015997363, + 0.006221543, + 0.015860422, + 0.004824108, + 0.07449667, + 0.026118653, + 0.025695376, + -0.004123834, + 0.0006870463, + 0.010258231, + -0.026043957, + 0.00009443969, + -0.0101835355, + 0.016171655, + -0.017043106, + -0.0005858957, + -0.0067662, + 0.009585969, + 0.028210137, + -0.0076252026, + -0.028010948, + -0.0034235604, + -0.0307, + -0.005063757, + -0.00069366, + -0.027886456, + -0.0020354623, + 0.022620397, + 0.005623976, + 0.003943319, + -0.03821938, + -0.008092051, + -0.008129399, + 0.0011367777, + 0.006318025, + -0.028857501, + 0.011073662, + 0.0270648, + -0.03754712, + 0.00092202704, + 0.014964071, + 0.018499676, + -0.024276156, + -0.0038997466, + 0.005113554, + -0.017839862, + 0.004447516, + 0.008658496, + -0.016171655, + -0.02923098, + -0.023043673, + 0.0038997466, + -0.003162125, + 0.015051216, + -0.0022953416, + 0.0031029906, + 0.002953599, + -0.036426682, + 0.0042265407, + 0.014590592, + 0.011291524, + -0.025359245, + -0.011801946, + 0.032268614, + 0.012293694, + -0.015486942, + -0.011434692, + 0.0234794, + -0.03535604, + -0.021612003, + 0.018163543, + -0.023193065, + -0.021786293, + -0.04299992, + -0.031994727, + -0.0016993309, + 0.0036787712, + 0.01147204, + -0.0019405363, + 0.0011274407, + -0.020118086, + -0.006461192, + -0.0014682405, + -0.016072059, + 0.009641991, + 0.0011087666, + -0.029629359, + 0.007836841, + -0.027488077, + 0.013930778, + 0.008608698, + 0.024350852, + -0.0162339, + -0.016395742, + 0.02634274, + 0.025794972, + 0.00604414, + 0.024064517, + 0.010127514, + -0.0018222678, + -0.013644444, + -0.07564201, + 0.017192498, + -0.00668528, + -0.027886456, + 0.01029558, + -0.0070338603, + 0.03811979, + 0.00016942734, + 0.020852596, + -0.016134307, + -0.03769651, + 0.027338685, + -0.013121573, + -0.0024431772, + -0.027239092, + -0.0078057176, + 0.011777048, + 0.024786577, + 0.017765166, + 0.006411395, + -0.005045083, + 0.000011045116, + 0.03702425, + -0.00025754512, + -0.04534039, + 0.02149996, + -0.011652554, + 0.037248336, + -0.044219952, + -0.01029558, + 0.00541545, + -0.021400364, + 0.0005574957, + 0.0243882, + -0.003968218, + -0.00250698, + -0.006479866, + 0.024649635, + 0.005203812, + 0.030052636, + -0.022433657, + -0.008228994, + 0.01335811, + -0.017715368, + 0.0032430454, + -0.010195985, + 0.0012480434, + -0.014242011, + 0.03177064, + 0.012573804, + -0.0060846005, + 0.028135441, + 0.018213341, + 0.010837125, + 0.002841555, + -0.024749229, + 0.00076213124, + -0.00048863544, + -0.0069404906, + 0.012225223, + 0.031322464, + 0.004257664, + 0.02508536, + 0.01571103, + 0.023155717, + -0.024101865, + -0.01894785, + 0.01910969, + 0.0010986517, + -0.036327086, + -0.03876715, + 0.018026602, + 0.0069778385, + 0.018449878, + 0.013482603, + 0.0050295214, + 0.020429319, + -0.026193349, + -0.031720843, + 0.01535, + 0.003828163, + -0.013034428, + -0.045913056, + 0.0073015206, + 0.022309164, + -0.013420356, + -0.008919931, + -0.017777616, + -0.037248336, + 0.02564558, + -0.01299708, + 0.005424787, + 0.005900973, + 0.0015600543, + 0.016856367, + 0.007867964, + -0.014291808, + -0.017018206, + 0.026068855, + 0.024612287, + 0.0049361517, + -0.011895316, + -0.015611435, + -0.022358961, + -0.021524858, + 0.011496938, + -0.0023140155, + -0.034235604, + 0.022657745, + 0.02417656, + -0.01571103, + 0.040335767, + -0.002412054, + 0.019545417, + 0.015300202, + -0.015125912, + -0.011559185, + -0.015038767, + -0.017715368, + 0.030600404, + 0.012218998, + 0.010500994, + 0.013283414, + -0.010009246, + 0.02274489, + 0.0008488874, + -0.00501396, + -0.019707259, + 0.01695596, + 0.0056395377, + -0.0037285686, + 0.023417152, + -0.0047743106, + -0.0039557684, + 0.0005283176, + 0.0029006894, + 0.018138645, + 0.013021979, + 0.00007707874, + 0.021188727, + 0.010115065, + 0.011048763, + -0.002811988, + -0.0060565895, + 0.03560503, + 0.015673682, + 0.011702352, + -0.021773843, + -0.013930778, + 0.006585685, + 0.011229278, + 0.005521269, + 0.004618694, + -0.03284128, + 0.014403852, + -0.013482603, + 0.036401782, + -0.0059818937, + 0.014030373, + 0.026591728, + -0.0020167883, + 0.015076115, + 0.008141849, + -0.036849957, + 0.005169576, + 0.044269748, + -0.0028151004, + 0.033588238, + -0.010276906, + 0.022060178, + 0.004699615, + -0.020429319, + -0.020616058, + 0.0024198347, + -0.00518825, + 0.0043759327, + -0.0010574133, + 0.017839862, + 0.0234794, + 0.008577575, + 0.0037970396, + -0.01073753, + -0.022520803, + -0.015499392, + 0.0162339, + -0.005832502, + -0.0059040855, + -0.02238386 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 8, + "total_tokens": 8 + } +} diff --git a/vectorstores/dolt/testdata/TestSimilaritySearchWithDifferentDimensions.httprr b/vectorstores/dolt/testdata/TestSimilaritySearchWithDifferentDimensions.httprr new file mode 100644 index 000000000..bbee8865d --- /dev/null +++ b/vectorstores/dolt/testdata/TestSimilaritySearchWithDifferentDimensions.httprr @@ -0,0 +1,20160 @@ +httprr trace v1 +333 334599 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 137 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Tokyo","Yokohama","Osaka","Nagoya","Sapporo","Fukuoka","Dublin","Paris","London","New York"]}HTTP/2.0 200 OK +Content-Length: 333642 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:42 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 158 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-66lnk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999985 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_90be83943bc0413a83eb93a2c424dbd2 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.001070031, + 0.008037085, + -0.008887224, + -0.008638722, + -0.010875242, + 0.014713947, + -0.029375577, + 0.013065985, + -0.011051809, + -0.035548896, + 0.001566218, + -0.02474559, + 0.016296513, + -0.027125979, + -0.007997848, + -0.021070372, + 0.021711247, + -0.01803603, + 0.0024016432, + -0.02207746, + -0.011306851, + 0.012686692, + -0.0024065478, + -0.019016959, + -0.008344443, + -0.011803855, + 0.0013651273, + -0.015302505, + 0.008965698, + -0.020010969, + 0.019043118, + -0.019095434, + -0.010522107, + -0.022875283, + 0.008828368, + -0.004652877, + -0.015328663, + -0.0060261786, + -0.0023493269, + -0.0118496325, + 0.009122647, + -0.008207113, + 0.0015155366, + -0.017251285, + -0.018323768, + 0.01607417, + -0.016649649, + 0.016571173, + -0.00018801155, + 0.012255083, + 0.015119398, + 0.020311786, + -0.032331448, + -0.0067684157, + -0.026602816, + -0.016388068, + -0.028486202, + -0.0007291578, + 0.000018967197, + 0.0041558724, + -0.0033645893, + -0.0059934813, + -0.015982617, + 0.0117123015, + 0.014269259, + -0.011346088, + -0.011241456, + 0.028616993, + -0.015302505, + 0.0038223565, + 0.013242552, + 0.017395156, + -0.0010079053, + -0.0024752128, + 0.031625178, + -0.008010927, + -0.0015245284, + 0.004652877, + 0.011856171, + 0.009848535, + 0.01523711, + -0.035601214, + 0.004365138, + 0.0026583197, + 0.013190236, + 0.007605476, + -0.008743354, + 0.0360459, + -0.002671399, + -0.00082071126, + 0.009534637, + 0.003756961, + 0.00992047, + 0.01062674, + -0.024850221, + -0.016113406, + -0.006454518, + 0.043344017, + -0.01857227, + -0.013196776, + -0.0015964633, + 0.009815837, + -0.0037242635, + -0.011529195, + -0.025883468, + 0.011568432, + 0.014321575, + -0.016440384, + 0.008906842, + -0.008710656, + -0.0019765736, + 0.027989198, + -0.013085604, + -0.059065055, + -0.017722132, + -0.012961352, + 0.005476858, + -0.01662349, + -0.010234368, + -0.014753184, + 0.018807694, + 0.019265462, + 0.011856171, + 0.002682843, + 0.02725677, + 0.00033167689, + -0.006483946, + -0.019330857, + 0.00050926604, + -0.009613113, + 0.026995188, + 0.011744999, + -0.0058986577, + 0.015629482, + -0.021004977, + 0.013903045, + -0.016440384, + 0.01131993, + -0.01103873, + -0.006441439, + 0.0063368063, + 0.0090637915, + -0.01286326, + 0.013347185, + 0.0097242845, + 0.02502025, + 0.023136863, + -0.0030392476, + 0.015851825, + -0.005967323, + 0.003730803, + -0.0050256304, + 0.016976625, + 0.0071804062, + 0.009580415, + 0.0035738542, + 0.03225297, + 0.018611507, + 0.0059280857, + 0.010548265, + 0.006931904, + 0.004237617, + 0.031389754, + -0.021345032, + 0.0030081847, + 0.0127063105, + 0.012032739, + 0.014413129, + -0.00033699026, + -0.011588051, + -0.018336847, + 0.019448569, + -0.04049278, + 0.018624587, + 0.005208737, + 0.017578263, + 0.011006032, + 0.009292675, + -0.019854018, + -0.007971689, + -0.0023803897, + 0.00003410264, + 0.02683824, + 0.009927009, + -0.007919373, + 0.005771137, + 0.027779931, + 0.01551177, + -0.0011803856, + -0.014504682, + 0.025870388, + 0.035548896, + 0.031180488, + 0.0071346294, + -0.67843723, + -0.03280229, + 0.0011599495, + 0.004224538, + 0.020468736, + 0.005329719, + 0.018245295, + 0.015498691, + -0.012830562, + 0.013562989, + -0.027230611, + 0.017996792, + -0.01789216, + -0.012601678, + -0.008749894, + 0.0048032864, + 0.015263268, + -0.0027139059, + -0.004208189, + 0.0105548045, + 0.0047771283, + 0.017813684, + -0.008409838, + -0.0052348953, + 0.013236013, + -0.010567884, + 0.007697029, + -0.004306282, + -0.009416926, + 0.02362079, + -0.029794108, + 0.049700443, + 0.0050485185, + -0.01508016, + 0.039917305, + -0.015694877, + -0.02305839, + 0.017565183, + 0.02054721, + 0.031258963, + 0.0014574982, + 0.003841975, + 0.0028806638, + -0.0026027337, + 0.005336258, + 0.002027255, + 0.022208251, + -0.023280734, + 0.008991856, + -0.008220192, + 0.021828959, + -0.036229007, + -0.016675808, + -0.01634883, + -0.0004142385, + 0.0098354565, + 0.0035967426, + -0.0034332543, + -0.0009694856, + -0.009534637, + -0.015851825, + -0.0092011215, + -0.027779931, + -0.021279637, + -0.012366255, + 0.012405492, + -0.010437093, + -0.023306891, + -0.0006384218, + -0.01968399, + 0.004554784, + 0.021397348, + -0.0070365365, + -0.009586954, + 0.017656736, + 0.006235444, + 0.0259881, + -0.031991392, + -0.0034169054, + -0.007618555, + 0.004201649, + 0.012183148, + -0.01969707, + -0.0053035603, + 0.015681798, + -0.040178884, + -0.035967425, + 0.002808729, + 0.026602816, + -0.012882878, + 0.0046430677, + 0.0036719472, + 0.0063923923, + 0.00908995, + -0.011810395, + 0.011882329, + -0.0016970086, + -0.008050164, + 0.006748797, + -0.0071346294, + -0.014216943, + -0.015446375, + 0.009750443, + 0.0036261706, + -0.015302505, + -0.004280124, + -0.014910133, + 0.017238207, + 0.021894353, + -0.014923212, + 0.006107923, + -0.010240907, + -0.017722132, + 0.00039257627, + 0.018493796, + -0.023019154, + 0.017839843, + -0.00011781375, + 0.022391358, + 0.0090637915, + 0.007363513, + 0.0019733037, + 0.016374988, + 0.022574464, + 0.017251285, + 0.015106319, + 0.006078495, + 0.0010798402, + -0.00642509, + 0.0061733183, + -0.001871941, + 0.014426208, + 0.010574424, + -0.006467597, + 0.023176102, + -0.009488861, + -0.009181503, + -0.0059346254, + 0.018493796, + -0.036385957, + -0.033587035, + -0.012425111, + -0.0015277981, + -0.003521538, + 0.012085055, + -0.026419709, + -0.016937388, + 0.0007418282, + -0.019827861, + 0.00503217, + -0.008213652, + 0.0026615895, + -0.029794108, + 0.01914775, + -0.0060065603, + -0.013484515, + -0.00008174415, + -0.0026632245, + -0.021057293, + 0.0029525987, + 0.019043118, + 0.0080697825, + -0.03832166, + -0.0014574982, + 0.0060686856, + -0.012071976, + 0.012804404, + 0.017447472, + -0.0054833977, + -0.008867606, + -0.02151506, + -0.019265462, + -0.02388237, + 0.003953147, + 0.018925406, + 0.0033090033, + 0.010541726, + -0.013628385, + -0.0012694866, + 0.002153141, + 0.011091046, + -0.020730317, + -0.013602227, + 0.011758079, + 0.02027255, + -0.01971015, + 0.011267614, + 0.017944476, + -0.00084196473, + 0.0032043706, + -0.0073308153, + 0.015877984, + 0.008030545, + -0.000106778294, + 0.0120981345, + -0.012909036, + 0.009730823, + -0.003897561, + -0.021828959, + 0.015825668, + 0.032933082, + -0.01523711, + 0.0024572292, + -0.00950194, + 0.016322672, + -0.012124293, + -0.00656569, + -0.018951563, + 0.031206647, + 0.014596236, + 0.014648552, + -0.015210952, + -0.0068861274, + 0.01857227, + -0.006931904, + 0.03288077, + 0.006833811, + 0.023019154, + -0.019396253, + -0.0068665086, + 0.021201164, + -0.034214832, + -0.016257277, + -0.018415323, + -0.012765166, + 0.016741201, + -0.0011983692, + 0.033456247, + 0.0073308153, + -0.0059738625, + -0.034450255, + -0.013406041, + 0.001732976, + 0.021188084, + -0.01522403, + -0.029009365, + 0.00009017401, + -0.024640957, + 0.030081848, + 0.012562441, + 0.023267655, + 0.010253986, + 0.028957048, + -0.019670913, + -0.000803545, + 0.001984748, + 0.035862792, + 0.014269259, + -0.009632731, + 0.01886001, + -0.016688885, + -0.009096489, + -0.005699202, + -0.004064319, + 0.0011893774, + -0.03382246, + 0.021619692, + -0.00048596898, + 0.014831658, + 0.038504764, + -0.0002630118, + 0.0009237089, + 0.0055128257, + 0.005270863, + -0.0011632192, + -0.0044926587, + 0.02725677, + 0.012941734, + -0.007906294, + -0.008298666, + -0.015315584, + 0.006369504, + -0.012967892, + -0.0045318957, + 0.019893257, + -0.016701965, + -0.025831152, + -0.0170551, + 0.01285672, + 0.01647962, + -0.007389671, + -0.04444266, + -0.005100835, + 0.0046365284, + 0.0043945657, + -0.024654036, + -0.01076407, + -0.013039826, + -0.01131339, + 0.019801702, + 0.009966247, + 0.023816975, + 0.001081475, + -0.01789216, + -0.017866002, + -0.009789679, + 0.02207746, + -0.013334106, + -0.011908487, + -0.01048941, + 0.015197872, + -0.008148257, + -0.00030837982, + 0.005431081, + 0.026210444, + 0.011267614, + 0.005355877, + -0.011143362, + -0.0051891184, + -0.0034365242, + 0.017565183, + -0.011091046, + -0.006304109, + 0.010528646, + 0.012549362, + -0.009874693, + -0.0146093145, + 0.008056703, + 0.02417011, + -0.0012057262, + -0.017709052, + 0.006680132, + -0.026668211, + -0.0089526195, + 0.08569403, + 0.0059607835, + 0.01145726, + -0.005633807, + 0.0029362498, + 0.0073308153, + -0.016008774, + 0.0008820194, + 0.0099727865, + 0.008056703, + 0.0038452449, + -0.009233819, + -0.0020174456, + 0.011130284, + -0.0024294362, + -0.00656569, + -0.01676736, + -0.027361402, + 0.02418319, + -0.01969707, + 0.00038338007, + 0.00628776, + 0.0027972849, + 0.012130832, + -0.000813763, + -0.0035476962, + 0.024797905, + 0.018101424, + 0.01913467, + -0.025778836, + 0.0021040945, + 0.019644754, + -0.018402243, + 0.017133573, + -0.008226731, + -0.00004115307, + 0.009966247, + 0.0212404, + 0.0062092855, + -0.01160113, + 0.007513922, + 0.015394058, + 0.00824635, + 0.00038481058, + 0.014138469, + -0.019592438, + -0.018101424, + 0.02024639, + -0.019500885, + -0.018506875, + 0.032776136, + 0.006944983, + -0.041042104, + -0.017656736, + -0.017473629, + 0.008900303, + -0.009547717, + -0.013615306, + -0.0027694919, + 0.010038181, + 0.0066016577, + -0.042114586, + 0.005257784, + -0.011921567, + -0.024614798, + -0.037903126, + -0.002767857, + -0.016741201, + -0.03633364, + -0.0063923923, + -0.005558602, + -0.029401736, + -0.022796808, + 0.024300901, + 0.01607417, + -0.03047422, + 0.008095941, + -0.01621804, + -0.0010790228, + 0.036935277, + -0.026027337, + -0.011398404, + -0.012117753, + -0.008710656, + -0.031886756, + 0.025268752, + 0.031651337, + -0.03280229, + -0.0027760314, + -0.00006381153, + 0.0148055, + -0.00684689, + 0.0153679, + 0.0212404, + 0.0027466035, + -0.011359167, + 0.010155893, + 0.032357603, + -0.016034933, + -0.01313138, + 0.023660026, + -0.014033835, + 0.008462154, + 0.015812589, + 0.015119398, + 0.011346088, + 0.012922116, + 0.018820774, + -0.010777148, + 0.0012743913, + 0.02934942, + -0.018402243, + 0.0084294565, + 0.013484515, + -0.013824571, + 0.021920511, + 0.010280144, + 0.021397348, + 0.011928107, + -0.019762466, + 0.0070299967, + -0.023293814, + 0.015681798, + 0.02989874, + 0.0058855787, + -0.014334654, + 0.0138376495, + -0.009070331, + -0.0061242715, + 0.00097193796, + -0.009259977, + 0.013772255, + -0.02178972, + -0.008050164, + -0.022836046, + 0.001999462, + -0.033482403, + 0.0128436405, + 0.0031079126, + -0.031075856, + -0.007415829, + 0.007481225, + 0.01160113, + -0.0012327018, + -0.03675217, + -0.021985907, + 0.0017297062, + 0.010665976, + -0.0066310856, + 0.017826764, + 0.005404923, + 0.020442577, + -0.01061366, + 0.0062975693, + -0.030918907, + -0.02628892, + -0.025124881, + -0.028172305, + 0.0058299927, + 0.008847987, + 0.031520545, + 0.011189139, + 0.005404923, + -0.011640367, + -0.007997848, + 0.002779301, + 0.004253966, + 0.020939581, + -0.013445278, + 0.02516412, + 0.012366255, + 0.01816682, + -0.02751835, + 0.007487764, + -0.02780609, + 0.023568474, + -0.0027482384, + -0.011195679, + -0.009652349, + -0.02516412, + -0.00907687, + -0.019213146, + 0.005195658, + 0.0005362416, + -0.0025929245, + -0.0032763055, + -0.00060163694, + -0.0124578085, + 0.023555394, + 0.007991308, + 0.007605476, + -0.009338452, + 0.0002950964, + -0.0023918338, + -0.006346616, + 0.005257784, + -0.012680152, + -0.005404923, + -0.0026926524, + 0.025961943, + 0.018820774, + -0.014334654, + -0.0045482446, + 0.002601099, + 0.012130832, + 0.03944646, + 0.0059084673, + -0.015302505, + 0.007278499, + -0.012215846, + -0.026053496, + -0.011751539, + 0.007383132, + -0.01940933, + -0.02359463, + 0.010090498, + -0.006676862, + 0.028303094, + -0.0248633, + -0.015642561, + 0.019893257, + 0.011862711, + 0.032043707, + 0.015681798, + 0.010665976, + 0.008913382, + -0.0071346294, + -0.004737891, + 0.004201649, + -0.015982617, + -0.0070692343, + 0.023110706, + 0.020913424, + -0.011496497, + -0.037301492, + -0.016322672, + 0.004247426, + -0.0016087248, + -0.0010675786, + 0.023856213, + 0.0015899237, + 0.00489157, + -0.026184287, + -0.0014599506, + -0.022875283, + 0.036569063, + -0.015276347, + -0.002754778, + -0.0008574961, + -0.019108513, + -0.0015980981, + 0.014269259, + -0.003802738, + 0.003662138, + 0.015027844, + -0.012621297, + 0.0031226266, + -0.018258374, + -0.00531337, + 0.013942283, + 0.00043201784, + 0.024810985, + 0.009325373, + -0.0010871972, + 0.012804404, + 0.005467049, + -0.011267614, + 0.0054016532, + -0.00014376752, + 0.023686185, + -0.004260505, + -0.011594591, + -0.021358112, + -0.0018523225, + 0.003202736, + 0.009214201, + 0.005215277, + -0.007291578, + -0.01774829, + -0.0049209977, + 0.008409838, + 0.007468146, + -0.0029248057, + -0.011758079, + -0.025216436, + -0.024797905, + -0.022260567, + -0.0061831274, + 0.025948863, + -0.018768458, + 0.0013634925, + 0.0025880197, + -0.018977722, + 0.023960846, + -0.013347185, + -0.0044795796, + 0.017852923, + 0.027884565, + -0.024379376, + 0.011431102, + 0.0070496155, + 0.021763563, + -0.020507973, + -0.0012531378, + 0.00030286208, + -0.011404944, + 0.012928654, + -0.0138376495, + -0.0099727865, + -0.030500377, + 0.006451248, + 0.012124293, + 0.0069384435, + 0.025595728, + 0.033717826, + -0.026158128, + -0.0028888383, + -0.020298708, + -0.015564086, + 0.0181799, + -0.0051466115, + 0.014504682, + 0.020442577, + -0.012464348, + -0.0010021833, + 0.013536831, + -0.013458357, + -0.0059411647, + -0.0073308153, + -0.027701458, + -0.0069580623, + 0.0068534296, + -0.0110779675, + -0.012078515, + -0.02054721, + 0.0036261706, + -0.010947176, + 0.008900303, + 0.010430554, + 0.0046201795, + 0.0011158077, + 0.015446375, + 0.01453084, + 0.012281241, + -0.0113264695, + -0.029113997, + 0.006160239, + -0.0033367963, + -0.029584844, + -0.03897561, + -0.005100835, + 0.020926502, + 0.0034201753, + -0.014897054, + -0.020141758, + 0.011208758, + -0.021449665, + -0.007389671, + -0.013536831, + 0.018846931, + 0.012202767, + -0.012340097, + 0.007808201, + 0.0061275414, + 0.014779342, + 0.00823981, + -0.0034790311, + 0.018336847, + 0.038766347, + -0.036569063, + 0.032226812, + 0.006408741, + -0.016610412, + -0.010502488, + 0.005493207, + 0.005646886, + -0.002699192, + 0.0068534296, + -0.01702894, + -0.010136275, + -0.012111213, + 0.0022724874, + -0.026642054, + 0.017996792, + 0.007605476, + -0.03591511, + 0.026158128, + 0.017695975, + -0.01494937, + 0.005656695, + 0.0059346254, + -0.00475097, + -0.0011787507, + 0.004162412, + -0.025791915, + -0.0034005567, + -0.000193938, + -0.031991392, + 0.01984094, + -0.012261623, + 0.014713947, + 0.0045318957, + 0.00922074, + -0.01075753, + -0.019854018, + 0.0005378765, + -0.015642561, + -0.014413129, + 0.026040416, + -0.0013667622, + -0.025621887, + -0.0122354645, + 0.017983712, + -0.045619775, + 0.009214201, + 0.008834908, + -0.007808201, + -0.024928696, + 0.008167876, + 0.023581553, + -0.026380472, + -0.016937388, + 0.009998945, + -0.022862203, + -0.0003002054, + -0.011888869, + 0.027570667, + -0.031102015, + 0.015616402, + -0.0011501402, + -0.0022463293, + -0.031625178, + -0.0061177323, + 0.011391865, + -0.008043624, + -0.008468694, + 0.23981772, + -0.023542315, + -0.0048000165, + 0.038949452, + -0.0032223545, + 0.039629564, + 0.030134164, + -0.0012049088, + -0.014687789, + 0.00032452427, + -0.03131128, + 0.001627526, + 0.020834949, + -0.0019160829, + -0.0029591382, + -0.025098724, + -0.021292716, + -0.03301156, + -0.038190868, + -0.0060294485, + 0.020141758, + -0.00258475, + -0.002694287, + -0.01341912, + 0.014269259, + 0.012693232, + -0.011287232, + -0.0056665046, + 0.020442577, + 0.019867098, + 0.0048588724, + 0.008017466, + -0.00517277, + 0.02122732, + 0.00013763671, + -0.009600033, + -0.015040924, + -0.0046626865, + 0.02725677, + 0.023673106, + -0.004567863, + 0.0020861106, + -0.010796768, + -0.010247447, + 0.00038848908, + 0.021894353, + -0.007873597, + 0.008364062, + -0.011980423, + 0.034162514, + -0.032933082, + -0.01048941, + 0.030788116, + 0.01662349, + 0.0094234655, + -0.013602227, + 0.036412116, + 0.015250188, + -0.009573875, + -0.017172812, + -0.020861108, + 0.010417474, + -0.010012023, + 0.027230611, + 0.0048163654, + 0.0001181203, + -0.023411525, + 0.012869799, + 0.0062092855, + -0.00083624263, + 0.014923212, + -0.011470339, + -0.0033940172, + -0.01734284, + -0.02893089, + -0.016597332, + 0.032226812, + -0.0033874775, + 0.02177664, + 0.037118383, + -0.008403298, + 0.006833811, + 0.022718335, + 0.0007839264, + 0.009279596, + -0.016793517, + 0.023503078, + 0.0156033235, + 0.0077885827, + -0.008468694, + -0.01369378, + -0.018140662, + -0.014596236, + -0.020390261, + -0.0070757736, + 0.014700868, + 0.0005292934, + 0.008978778, + -7.4080634e-7, + -0.016793517, + -0.008187494, + -0.001349596, + 0.015904142, + -0.009586954, + 0.004257235, + 0.0059869415, + -0.000112091664, + -0.0023264384, + -0.006052337, + -0.03060501, + -0.006232174, + -0.03479031, + 0.008972238, + 0.016989704, + 0.0020713967, + -0.0068926667, + -0.008861066, + -0.023660026, + 0.017368997, + -0.02263986, + 0.014910133, + -0.02024639, + -0.015001686, + 0.00115341, + -0.0036850262, + -0.011025651, + -0.0018212596, + -0.01607417, + 0.0069711413, + -0.035732005, + 0.010541726, + 0.0032730359, + 0.014230021, + 0.0020223502, + -0.0090637915, + 0.021266557, + 0.011542274, + -0.008004387, + -0.014779342, + 0.014975528, + 0.018807694, + -0.012745548, + 0.018075267, + -0.0004217998, + -0.0018572271, + -0.011548813, + 0.0101951305, + 0.012085055, + -0.013458357, + 0.008677959, + -0.0100578, + -0.024000082, + -0.0058365325, + -0.01675428, + 0.031128172, + -0.0050550583, + -0.0127063105, + -0.020298708, + -0.00038276697, + 0.01704202, + -0.029506369, + -0.016231118, + 0.046927683, + -0.017277444, + -0.030029532, + -0.0043520587, + -0.16908614, + 0.027884565, + 0.020848028, + -0.021148847, + 0.019357014, + 0.012948274, + -0.0101951305, + -0.019644754, + -0.0063793133, + 0.023372287, + 0.053101, + 0.018611507, + -0.007952071, + -0.014190785, + 0.0032615915, + -0.019082354, + 0.00040769894, + -0.006382583, + 0.025674203, + 0.01229432, + 0.044364184, + -0.02976795, + 0.002838157, + 0.0011722111, + -0.0028659499, + 0.026053496, + -0.014556998, + 0.009881233, + 0.023136863, + -0.015917221, + -0.02390853, + -0.017447472, + 0.037223015, + 0.0265505, + 0.009979326, + 0.008887224, + 0.00011883556, + -0.01760442, + -0.019880177, + 0.027989198, + 0.006464327, + 0.013916125, + -0.0006760241, + -0.0034496032, + 0.008128638, + 0.027282927, + 0.0042703142, + -0.0068272715, + -0.016244197, + -0.011287232, + 0.031651337, + -0.015694877, + -0.007154248, + 0.018650746, + 0.0056959325, + -0.0024425152, + 0.0062289042, + 0.0106202, + 0.004165682, + -0.012653994, + -0.032906923, + 0.0010160798, + 0.019016959, + -0.0011010937, + -0.012183148, + -0.0034430637, + -0.007873597, + -0.0070757736, + -0.017172812, + 0.020586446, + 0.0003275897, + -0.011915027, + 0.017578263, + -0.03295924, + 0.015446375, + 0.00017779352, + -0.0087041175, + 0.025556492, + 0.011686143, + 0.0088414475, + -0.022208251, + 0.042951647, + -0.014190785, + -0.013680701, + -0.0022872014, + 0.010999493, + -0.0076774107, + -0.0022103619, + -0.03175597, + -0.01956628, + 0.007363513, + -0.018467639, + -0.007814741, + -0.011673065, + 0.000020998028, + 0.008854526, + -0.007952071, + 0.02934942, + -0.021972828, + 0.003253417, + 0.006735718, + -0.008697578, + -0.010077419, + 0.033796303, + 0.024784826, + 0.025922704, + 0.019827861, + 0.019278541, + 0.01104527, + 0.011012572, + -0.029297104, + -0.005084486, + 0.012915576, + 0.028747782, + -0.032906923, + 0.002151506, + 0.01940933, + -0.0082921265, + 0.018323768, + 0.01257552, + 0.044808872, + -0.0100839585, + 0.002180934, + 0.025648044, + -0.016374988, + -0.023660026, + -0.07219643, + -0.000642509, + 0.0045318957, + 0.018546114, + -0.004384756, + 0.042402327, + 0.0056501557, + 0.01691123, + 0.00377331, + 0.013432199, + -0.0024212617, + -0.017238207, + 0.0048523326, + -0.016322672, + 0.028041514, + -0.00335478, + 0.0059313555, + -0.002205457, + -0.0023362478, + 0.023960846, + -0.018389164, + -0.016414225, + 0.0028446964, + -0.008965698, + -0.014844738, + 0.008847987, + -0.026785923, + 0.011398404, + 0.01508016, + 0.007853978, + -0.003701375, + -0.0012931925, + 0.0024555943, + -0.029140154, + -0.02109653, + 0.024536325, + -0.019618597, + 0.013183696, + 0.033299297, + -0.045096613, + -0.010783688, + 0.0100839585, + 0.003004915, + -0.011071428, + -0.013615306, + -0.0029575033, + -0.028538518, + 0.005421272, + 0.0048163654, + -0.018768458, + -0.0122354645, + -0.0019226224, + -0.00081049325, + 0.0025455127, + 0.014779342, + -0.0028005545, + 0.0037536914, + 0.01565564, + -0.030003373, + 0.0070823133, + 0.010594042, + -0.0046201795, + -0.018768458, + 0.026458947, + 0.01551177, + 0.008762973, + -0.019200066, + -0.026668211, + 0.025765756, + -0.022992995, + -0.021384269, + 0.013098682, + -0.016871992, + 0.00684689, + -0.018506875, + -0.014046915, + -0.0028561407, + -0.003212545, + 0.014897054, + -0.02362079, + -0.011346088, + -0.030526536, + -0.0023934687, + 0.007376592, + -0.0024931966, + 0.014910133, + 0.012058897, + -0.0058071045, + 0.013301408, + -0.01916083, + 0.014883975, + 0.009403847, + 0.0030997382, + -0.0159303, + -0.007572778, + 0.026432788, + 0.0051662303, + -0.009698126, + 0.005143342, + 0.018977722, + -0.015524849, + -0.024078557, + -0.09129187, + 0.027910722, + 0.007520462, + -0.008409838, + 0.016545016, + -0.006807653, + 0.022312883, + 0.0057907556, + 0.01732976, + -0.018088346, + -0.04852333, + 0.00049904804, + -0.00922728, + -0.011411483, + -0.033796303, + -0.025543412, + 0.014203863, + 0.016466541, + 0.0056926627, + 0.011588051, + 0.0013250727, + 0.0027318895, + 0.016453462, + 0.010587502, + -0.027466035, + 0.011431102, + -0.006189667, + 0.023764659, + -0.031808283, + -0.013013668, + 0.022129776, + -0.031494386, + -0.0011166251, + 0.01857227, + -0.0063368063, + -0.0127063105, + 0.005473588, + 0.01354991, + 0.0070169177, + 0.0405451, + -0.019749386, + -0.005002742, + 0.009070331, + -0.010796768, + 0.0069515225, + -0.0056795836, + 0.017525947, + 0.000104734696, + 0.016832756, + 0.022129776, + -0.009815837, + 0.038949452, + -0.0104436325, + -0.003032708, + -0.0049733142, + -0.016139565, + 0.0040904772, + 0.0019651293, + -0.0077493456, + -0.008782592, + 0.023450762, + 0.0040479703, + 0.011803855, + 0.01047633, + 0.021959748, + -0.0068141925, + -0.02025947, + 0.007167327, + 0.008115559, + -0.03452873, + -0.026079653, + 0.010234368, + 0.016701965, + 0.014687789, + 0.00076512527, + -0.0061536995, + 0.014386971, + -0.008220192, + -0.034345623, + 0.01914775, + 0.004708463, + 0.0035411566, + -0.05367648, + 0.004093747, + 0.014713947, + -0.01789216, + -0.0079324525, + -0.010744452, + -0.01732976, + 0.0265505, + -0.00036396584, + -0.005503016, + 0.00740275, + 0.004404375, + 0.004021812, + 0.012902496, + -0.006245253, + -0.026066575, + 0.030866591, + 0.02403932, + 0.0088414475, + -0.016191881, + -0.012183148, + -0.0079324525, + -0.020730317, + -0.0019749387, + -0.019030038, + -0.02151506, + 0.018363006, + 0.025281832, + 0.015459454, + 0.02097882, + -0.0052054673, + 0.011097586, + -0.0037536914, + -0.002738429, + -0.013746097, + -0.028538518, + -0.011012572, + 0.013562989, + 0.024130873, + 0.029218629, + 0.01620496, + -0.013876887, + 0.010672516, + -0.005198928, + 0.009998945, + -0.027753774, + 0.0010896495, + -0.0051368023, + 0.011496497, + 0.009279596, + -0.010999493, + 0.0015384249, + -0.0023362478, + 0.012497046, + 0.0037406124, + 0.019030038, + -0.0026109081, + 0.024300901, + 0.0005570864, + 0.0034921102, + -0.0027155406, + 0.004355328, + 0.025674203, + -0.006820732, + 0.0254257, + -0.029846424, + -0.022718335, + -0.00642836, + -0.0077885827, + -0.002543878, + -0.00188502, + -0.023777738, + -0.007598936, + -0.020782633, + 0.019631675, + -0.004361868, + 0.014570077, + 0.03983883, + -0.0085929455, + 0.026485104, + 0.023843134, + -0.014831658, + 0.00089101127, + 0.014844738, + 0.015106319, + 0.007716648, + -0.01634883, + 0.01872922, + -0.0015220761, + -0.022535227, + -0.01341912, + 0.0077755037, + -0.013641464, + -0.021410428, + 0.0014215307, + 0.0059444346, + 0.008468694, + 0.002136792, + 0.014190785, + -0.021292716, + -0.026890555, + 0.009796219, + -0.004149333, + -0.011476879, + -0.0071869455, + -0.017643657 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.0026680413, + -0.0026349186, + 0.008843787, + -0.0049684197, + -0.033255287, + 0.01970144, + -0.02827362, + 0.0020668625, + -0.012116319, + -0.035746124, + 0.00008668857, + -0.0036931918, + 0.016720388, + -0.018151293, + -0.036779553, + -0.024100147, + 0.012487294, + -0.023715923, + 0.009870593, + -0.023212455, + 0.0044020195, + 0.0038091217, + -0.010128952, + -0.015819447, + -0.011096137, + 0.008585429, + 0.0054586367, + -0.017488837, + 0.006253584, + -0.018800499, + 0.020045916, + 0.0018300345, + -0.00961886, + 0.0020685187, + 0.003918427, + -0.00977785, + -0.0061608404, + -0.0112153785, + -0.0011576418, + 0.00024324554, + 0.001564224, + 0.0026713535, + -0.0020635503, + -0.01999292, + -0.0040476057, + 0.013348487, + 0.003825683, + -0.0020536133, + -0.01968819, + 0.028538601, + 0.0107715335, + 0.020655377, + -0.008201204, + -0.005057851, + -0.021092597, + 0.014905258, + -0.020483138, + 0.005163844, + -0.012467421, + -0.006396012, + 0.007333387, + 0.0032874376, + -0.023980904, + 0.011573105, + 0.0063893874, + -0.017038366, + -0.016786633, + 0.011261751, + -0.021145593, + -0.0028286867, + 0.019012485, + 0.0014847293, + -0.020112162, + -0.014229554, + 0.036938544, + 0.013474354, + -0.014706521, + -0.0053957035, + -0.0013091785, + 0.0020171783, + 0.022364512, + -0.023119712, + 0.0028253745, + -0.004888925, + 0.03428872, + 0.0007568559, + -0.010976895, + 0.018230787, + 0.0062204613, + -0.019197972, + 0.024762603, + 0.019423207, + 0.009532741, + -0.004322525, + -0.016495153, + -0.026643978, + -0.0054188897, + 0.01938346, + 0.012898017, + -0.029678026, + -0.018959489, + 0.02571654, + 0.001242933, + -0.01968819, + -0.019303966, + -0.00054611213, + -0.002073487, + -0.020098913, + -0.0015857539, + 0.0011071295, + 0.007823604, + 0.020509636, + -0.0027690658, + -0.05079712, + -0.015845945, + -0.010890775, + 0.005670623, + -0.0001018526, + -0.026723472, + -0.022470506, + 0.011374368, + 0.023543684, + 0.004216532, + -0.0033785251, + 0.028035134, + 0.0016669048, + -0.005034665, + -0.011619477, + -0.0076447413, + -0.001836659, + 0.006134342, + 0.01217594, + 0.027293185, + 0.0031350728, + -0.024020651, + 0.012003701, + -0.013938073, + 0.0210396, + -0.026259754, + -0.01909198, + 0.007260517, + 0.01926422, + -0.00810846, + -0.00009802278, + 0.016362661, + 0.024325382, + 0.03439471, + 0.023517186, + 0.0013373329, + 0.000698477, + -0.007638117, + -0.0040608547, + 0.014335547, + -0.002936336, + -0.0014648556, + 0.0055944403, + 0.015103995, + 0.004206595, + -0.012527042, + 0.025358813, + -0.004832616, + 0.005283086, + 0.030790951, + -0.027902644, + 0.016349413, + 0.01457403, + 0.016813131, + 0.005978665, + -0.0018234099, + -0.022814982, + -0.018866746, + 0.017793566, + -0.027160693, + 0.010619168, + -0.010692039, + 0.01233493, + 0.027213689, + 0.007836854, + -0.026948707, + -0.01909198, + -0.009645359, + 0.0157797, + 0.02045664, + 0.011705596, + 0.01923772, + 0.0017356345, + 0.020006169, + 0.016932374, + 0.021596063, + -0.009711604, + 0.015090746, + 0.046583902, + 0.005081037, + -0.0046703145, + -0.67114735, + -0.04674289, + -0.011785091, + 0.018204289, + 0.023331698, + 0.024444625, + 0.023291951, + -0.006409261, + -0.020072415, + 0.012228937, + -0.02314621, + 0.024550617, + -0.028247122, + -0.0026581045, + 0.0068895416, + -0.016627643, + 0.0049087983, + -0.025001086, + 0.02253675, + 0.01759483, + -0.0065285033, + 0.010764909, + -0.007187647, + 0.0074791275, + 0.039296884, + -0.011314747, + -0.007532124, + -0.008459562, + -0.008664924, + 0.036011104, + -0.040038835, + 0.04030382, + 0.0029048692, + -0.002283817, + 0.056017272, + -0.0071942713, + -0.005922356, + 0.028538601, + 0.023358196, + 0.048544772, + 0.0044682655, + -0.015753202, + 0.0071942713, + 0.0063893874, + 0.0056805597, + -0.0021413888, + 0.030737955, + -0.04239718, + 0.0058263, + -0.022059783, + 0.013328614, + -0.0066113104, + -0.021079348, + -0.00080488395, + 0.00025173326, + 0.013885076, + 0.009420123, + -0.006574875, + -0.011751968, + -0.006184026, + -0.020032667, + -0.0040177954, + -0.030631963, + -0.024736105, + -0.011314747, + 0.020628877, + -0.019515952, + -0.006442384, + -0.00007613068, + -0.0038389321, + -0.0058428613, + 0.022351263, + 0.0051174723, + -0.0035607007, + 0.034050234, + 0.027452175, + 0.0285651, + -0.017011868, + -0.0056772474, + -0.003221192, + 0.010705288, + 0.019356962, + 0.0058196755, + -0.010665541, + 0.019462956, + -0.022642743, + -0.0330698, + -0.0065814997, + 0.006005163, + -0.017846562, + 0.020642126, + 0.0068630436, + -0.0076646153, + 0.0013820487, + -0.0013174593, + 0.03094994, + -0.0033851499, + 0.0034878305, + 0.03847544, + -0.0048690513, + -0.019476205, + -0.006313205, + -0.0025073958, + -0.012427674, + -0.004892237, + -0.023676176, + -0.0035010795, + 0.005919044, + 0.015925441, + -0.014004318, + 0.021543067, + 0.0009845751, + -0.02074812, + -0.009327379, + 0.0072075203, + -0.027929142, + 0.019052232, + -0.0060217245, + 0.03895241, + -0.017846562, + 0.0018499081, + -0.0044583282, + 0.03243384, + 0.011539983, + 0.007863352, + 0.024245888, + 0.007724236, + -0.012990761, + -0.007287015, + -0.0064854436, + -0.01849577, + 0.01850902, + 0.003128448, + -0.011944081, + 0.01909198, + 0.011639351, + -0.010115702, + 0.0068895416, + 0.0023301886, + -0.028671093, + -0.026524736, + -0.020549383, + -0.0056639984, + 0.010393933, + 0.0025587361, + -0.012984136, + -0.0021182029, + -0.010506551, + -0.012566789, + 0.028618095, + -0.0010731786, + -0.016296417, + -0.03145341, + 0.021715306, + -0.02510708, + -0.028220622, + -0.0107715335, + -0.014295799, + -0.005875984, + 0.018389776, + 0.008313822, + 0.006690805, + -0.018654758, + 0.018588513, + 0.016468655, + -0.024378378, + 0.003766062, + -0.0077308607, + -0.0026796341, + -0.02525282, + -0.01864151, + -0.00969173, + -0.012209062, + -0.0038157462, + 0.022642743, + -0.0051174723, + 0.011169007, + 0.0025421747, + 0.0051505947, + 0.0003231543, + 0.008221078, + -0.030843949, + -0.011937456, + 0.015117245, + 0.031479906, + -0.010095828, + 0.012646284, + 0.026378995, + -0.021278085, + 0.0107847825, + -0.012725779, + 0.022073032, + 0.0032857815, + 0.0023401256, + 0.016468655, + -0.03198337, + 0.0032973744, + 0.013911574, + 0.002522301, + 0.018866746, + 0.024921592, + -0.0016834661, + 0.0042695287, + -0.013818831, + 0.022218771, + -0.012189189, + -0.004368897, + -0.012944389, + 0.02660423, + 0.012507168, + 0.009519491, + -0.012884768, + -0.02674997, + 0.0050975983, + 0.00072000676, + 0.026167009, + -0.012401175, + 0.016945623, + -0.001420968, + 0.0029711148, + 0.021649059, + -0.00916839, + 0.012056698, + -0.033599764, + -0.008936531, + 0.004491451, + 0.027584665, + 0.03656757, + 0.016667392, + -0.010307814, + -0.03622309, + -0.009433373, + -0.005498384, + 0.0051108473, + -0.00234675, + -0.015686957, + 0.0079494715, + -0.02058913, + 0.041708227, + 0.024431374, + 0.033043303, + 0.0039846725, + 0.033043303, + -0.018893244, + -0.0012893048, + 0.016587896, + 0.0360376, + 0.009651983, + -0.005452012, + 0.0044583282, + -0.025067333, + 0.001219747, + -0.016402408, + 0.0009696699, + -0.00857218, + -0.030287486, + 0.0003328841, + 0.0038588059, + 0.019476205, + 0.022642743, + 0.012520417, + 0.011891084, + 0.000675291, + 0.0030506095, + 0.015488219, + -0.007684489, + 0.014534283, + 0.001232168, + 0.011526734, + -0.0042629037, + -0.01142074, + 0.003941613, + -0.0026200132, + -0.014097062, + -0.0057699913, + -0.0008044699, + 0.013222621, + -0.012997385, + 0.0055480683, + 0.0066113104, + -0.021728555, + -0.037786487, + 0.004984981, + -0.005044602, + -0.0042099073, + -0.01623017, + -0.025809282, + 0.014865511, + -0.01503775, + 0.03428872, + 0.01697212, + 0.017409341, + 0.0009547646, + -0.02224527, + -0.011983828, + 0.0074195066, + 0.027425675, + -0.005498384, + -0.01457403, + -0.009307506, + 0.010254818, + -0.019436456, + 0.0064821313, + 0.010148825, + 0.018310282, + -0.003138385, + 0.005495072, + -0.0072472678, + -0.00424303, + -0.0048624263, + 0.014680023, + -0.003138385, + 0.00909552, + 0.002237445, + 0.0062038996, + -0.002726006, + -0.015647208, + -0.015289483, + 0.027293185, + -0.010599295, + -0.019621944, + -0.0051207845, + -0.020615628, + -0.0069491626, + 0.086331256, + -0.011765217, + 0.017846562, + 0.005991914, + 0.0093605025, + -0.0071015274, + -0.01742259, + -0.0047001247, + 0.0070087835, + 0.0079627205, + 0.0017372906, + -0.016481904, + 0.018601762, + 0.012725779, + 0.015859194, + -0.01986043, + -0.031347416, + -0.023821915, + 0.030711457, + -0.025491305, + -0.018760752, + 0.0019045608, + 0.0047796196, + 0.0050412896, + 0.005591128, + 0.005746805, + 0.0065947487, + 0.020469889, + 0.03712403, + -0.014415041, + 0.0054321387, + 0.010817905, + -0.010407182, + -0.00043887706, + -0.0044351425, + -0.008989527, + 0.017515335, + 0.003660069, + -0.006849794, + -0.017064866, + 0.016071182, + 0.0088504115, + 0.007379759, + -0.029121563, + 0.010075955, + -0.0056639984, + 0.0073863836, + 0.010281316, + -0.014746269, + -0.0180188, + 0.030658461, + -0.001954245, + -0.028061634, + -0.025411809, + -0.01746234, + 0.01670714, + -0.014600528, + 0.008565555, + 0.0053923912, + 0.011222003, + 0.011758593, + -0.021172091, + 0.0116724735, + -0.023093214, + -0.026034517, + -0.023093214, + -0.0022655993, + -0.021013102, + -0.036620565, + -0.0058362368, + 0.008631801, + 0.001326568, + -0.013116627, + 0.009837471, + 0.012606536, + -0.008201204, + 0.016998619, + -0.016998619, + 0.008671548, + 0.029810516, + -0.010195197, + -0.010148825, + -0.017170858, + -0.018005552, + -0.0058561102, + 0.008002467, + 0.020801116, + -0.037389014, + 0.00015919644, + -0.0018581889, + 0.041072268, + -0.005018104, + 0.0041635353, + -0.0003494455, + 0.003424897, + -0.027531669, + 0.012162691, + 0.014216304, + -0.011937456, + -0.009506242, + 0.017382843, + -0.013792332, + 0.016919125, + 0.012864894, + 0.006571563, + 0.012096445, + 0.018985987, + 0.01835003, + 0.01307688, + 0.013050382, + 0.024259137, + -0.032062866, + -0.017926058, + 0.02451087, + -0.031903878, + 0.02930705, + 0.007929597, + 0.023424441, + -0.008115085, + -0.0108974, + 0.0046636895, + -0.031055935, + 0.020827614, + 0.029837016, + 0.003941613, + 0.017528584, + -0.008042215, + -0.015978437, + 0.0018697819, + 0.002027115, + -0.016773384, + 0.0072340188, + -0.0016876064, + -0.0089034075, + -0.035004172, + -0.000004062718, + -0.0069822855, + 0.008585429, + 0.0079494715, + -0.031850882, + -0.012407799, + -0.00698891, + 0.008505934, + -0.010486677, + -0.022920975, + -0.023490688, + -0.009744727, + 0.02343769, + -0.0011692347, + 0.013646592, + 0.013911574, + 0.020072415, + -0.009088895, + -0.004415269, + -0.017833313, + -0.030049002, + -0.024457874, + -0.014256052, + 0.010042832, + 0.028432608, + 0.018972738, + -0.009685106, + 0.016680641, + -0.0021463572, + -0.0009199857, + 0.0027193816, + -0.0058693597, + 0.024643362, + -0.0059057944, + 0.007412882, + 0.019356962, + 0.0300755, + -0.022682492, + 0.0061608404, + -0.027041452, + 0.01015545, + 0.0006504489, + 0.0066874926, + 0.0018118169, + -0.034209225, + -0.0045113247, + -0.0057534296, + -0.013739336, + -0.0035607007, + -0.003660069, + -0.007406257, + -0.0040939776, + -0.01939671, + 0.016415657, + -0.0022407572, + 0.00096470147, + -0.014401792, + 0.004166848, + -0.00033681744, + 0.010102453, + -0.013633343, + -0.008598678, + -0.0034911428, + 0.009042524, + 0.019423207, + 0.03145341, + -0.010480053, + 0.009724853, + -0.00043887706, + 0.0203109, + 0.015554465, + 0.011467112, + -0.01179834, + 0.018469272, + -0.029731022, + -0.01518349, + -0.017369594, + 0.0054884474, + -0.020337397, + -0.027478673, + 0.02615376, + -0.009512867, + 0.015660457, + -0.026617479, + -0.011149134, + 0.018774, + -0.0064688823, + 0.024471123, + -0.0063761384, + 0.028777085, + 0.016468655, + -0.011175632, + 0.006386075, + -0.007273766, + -0.027584665, + -0.014865511, + 0.020403642, + -0.004382146, + -0.0050081667, + -0.033043303, + 0.0015203364, + 0.021927292, + -0.002500771, + -0.020814365, + 0.027902644, + 0.00037387357, + -0.004832616, + -0.003481206, + 0.009320755, + -0.008704671, + 0.00835357, + -0.007452629, + -0.00894978, + -0.008254201, + -0.012507168, + -0.009665232, + 0.016905876, + -0.020403642, + 0.0093605025, + 0.016243419, + -0.021437073, + -0.0026316063, + -0.008989527, + -0.013275617, + 0.015382227, + -0.004408644, + 0.03818396, + 0.0028568413, + 0.0049352967, + 0.014666774, + 0.015249736, + -0.0066113104, + -0.002866778, + 0.003931676, + 0.021423824, + -0.013951322, + -0.013924824, + 0.017356345, + -0.014083813, + 0.00034385602, + -0.0045179497, + 0.006323142, + -0.0145077845, + -0.036620565, + -0.006551689, + 0.0135405995, + 0.014812514, + 0.003448083, + -0.014309048, + -0.016852878, + -0.029890012, + -0.018813748, + 0.00023827712, + 0.0032973744, + -0.022497004, + -0.013487603, + 0.002191073, + -0.012407799, + 0.013898325, + -0.015236487, + -0.013964571, + 0.012732403, + 0.0076182433, + -0.01759483, + 0.01894624, + 0.0066510574, + 0.01788631, + -0.022497004, + -0.0078037307, + -0.0038323076, + -0.007154524, + 0.016495153, + 0.00008156489, + -0.024444625, + -0.009029275, + 0.011334621, + 0.02194054, + -0.002485866, + 0.013229245, + 0.03296381, + -0.0247891, + -0.0029893324, + -0.019277468, + -0.022033283, + 0.0026481675, + 0.008512558, + 0.018204289, + 0.001989024, + -0.020337397, + 0.0026912272, + 0.023782168, + -0.035984606, + 0.0012172628, + -0.013169624, + -0.027425675, + 0.005296335, + 0.0136068445, + -0.020695124, + -0.013182873, + -0.02163581, + -0.010029583, + -0.0130835045, + 0.009552615, + 0.0048061176, + -0.0020105538, + 0.005968728, + 0.010837779, + -0.014057315, + 0.028697591, + -0.0070286575, + -0.014017567, + 0.008399941, + -0.008187955, + -0.027041452, + -0.008247577, + -0.0010913962, + 0.04088678, + -0.0012214031, + -0.025173325, + -0.025968272, + 0.0070750294, + -0.0391114, + -0.010652292, + -0.013355112, + 0.017753819, + 0.00326922, + -0.0021463572, + 0.0041039144, + 0.018734254, + 0.0021331082, + 0.02538531, + 0.0032377534, + 0.001243761, + 0.026484989, + -0.01862826, + 0.026935458, + 0.010890775, + -0.023119712, + 0.0069822855, + 0.0165349, + 0.004905486, + 0.00336362, + 0.016110929, + -0.0030506095, + -0.008426439, + 0.01015545, + -0.009857344, + -0.012434298, + -0.0010922243, + 0.01224881, + -0.047140364, + 0.016574647, + 0.0038521811, + -0.013129877, + 0.01774057, + -0.007154524, + 0.005316209, + -0.0037726865, + 0.006882917, + -0.010996768, + -0.0088636605, + -0.0121428175, + -0.011334621, + 0.01697212, + 0.0015948627, + -0.021331081, + 0.021238336, + 0.01637591, + -0.0038223707, + -0.016905876, + 0.0069822855, + -0.0031317605, + 0.008075338, + 0.0016768415, + -0.018323531, + -0.010321063, + -0.014004318, + 0.004971732, + -0.032142363, + -0.0030737955, + 0.009380376, + -0.016309666, + -0.019515952, + 0.018548766, + 0.025981521, + -0.013885076, + -0.0038687426, + 0.0026117326, + -0.007684489, + 0.016998619, + -0.024219388, + 0.006256896, + -0.029439542, + 0.0029810518, + 0.0026730096, + -0.00819458, + -0.027266687, + 0.010427057, + 0.0020238028, + -0.020178407, + -0.008711295, + 0.23572832, + -0.0058594225, + -0.0018267222, + 0.022351263, + -0.001126175, + 0.023623178, + 0.025663543, + -0.008234328, + -0.008081962, + 0.008022341, + 0.00052292616, + -0.005339395, + 0.010062706, + -0.0154352235, + -0.0070617804, + -0.03216886, + -0.016733637, + -0.02178155, + -0.036620565, + 0.016004935, + 0.020946857, + -0.014945006, + -0.011937456, + -0.006382763, + 0.022894477, + 0.002653136, + -0.011447239, + 0.013494227, + 0.01605793, + 0.023490688, + -0.005852798, + 0.0043258374, + -0.0037230023, + 0.009757976, + 0.000064278924, + 0.008181331, + -0.00014149645, + 0.0024924905, + 0.027452175, + 0.03219536, + -0.007929597, + -0.015196739, + -0.0165349, + -0.004312588, + -0.010115702, + 0.016124178, + 0.0040177954, + -0.006299956, + -0.015395476, + 0.01922447, + -0.03407673, + -0.026855964, + 0.03023449, + 0.022126028, + 0.017170858, + -0.006445696, + 0.023252204, + -0.0023070027, + -0.00518703, + -0.016428906, + -0.011513484, + 0.02255, + -0.01788631, + 0.025133578, + -0.02044339, + 0.017091364, + -0.009281008, + -0.0157797, + 0.011838088, + -0.0041072266, + 0.015209988, + -0.0021331082, + -0.0002641543, + -0.01367309, + -0.026869213, + -0.025001086, + 0.032831315, + 0.008969653, + 0.015991686, + 0.026617479, + -0.030446475, + 0.016919125, + 0.01862826, + -0.008525807, + -0.003742876, + -0.03110893, + 0.0054884474, + 0.0054553244, + 0.009479744, + -0.0013795645, + 0.0008218594, + -0.02706795, + -0.016587896, + -0.028300118, + 0.006111156, + 0.0015799574, + -0.007856728, + 0.006170777, + -0.010572797, + 0.016322915, + -0.004888925, + 0.006929289, + 0.010612544, + -0.000272642, + 0.003471269, + -0.008963029, + -0.0144812865, + 0.0068299207, + -0.016733637, + -0.020204905, + -0.006326454, + -0.01894624, + 0.014083813, + -0.00036186655, + -0.0012487294, + 0.01789956, + 0.008307197, + 0.006326454, + 0.014242803, + -0.026683725, + 0.009486369, + -0.028141128, + -0.011910957, + 0.0108974, + -0.0032129113, + -0.0054453877, + -0.019330464, + -0.0012594943, + -0.0006641121, + -0.0315859, + 0.013964571, + 0.0011270031, + 0.02194054, + -0.004193346, + 0.0074923765, + 0.0029247429, + -0.009221386, + -0.010837779, + -0.020814365, + 0.0058826087, + 0.023861663, + -0.0103144385, + 0.015011251, + 0.0130967535, + -0.021410575, + -0.026710223, + 0.021529818, + 0.0068166717, + -0.024444625, + -0.002995957, + -0.017674325, + -0.024550617, + -0.016640892, + -0.014110311, + 0.021728555, + -0.0032410657, + -0.015156992, + -0.0024428063, + -0.0064125736, + 0.022523502, + -0.039482374, + -0.013414732, + 0.028538601, + -0.027478673, + -0.020536134, + -0.012262059, + -0.17170858, + 0.018204289, + 0.033546768, + -0.020496387, + 0.025146827, + 0.0210661, + 0.010380684, + -0.011301498, + -0.022046532, + -0.00048400686, + 0.035110164, + -0.0033470585, + -0.03667356, + -0.017475588, + -0.006634496, + -0.008088587, + -0.02162256, + 0.0055050086, + 0.015050999, + 0.00061028753, + 0.026087515, + -0.026670476, + 0.01609768, + -0.0046206303, + -0.021331081, + 0.023106463, + -0.015408725, + 0.003706441, + 0.0016627643, + -0.003411648, + -0.005587816, + -0.017912809, + 0.014521034, + 0.020827614, + -0.0021297957, + 0.014229554, + -0.008134959, + -0.008081962, + -0.018363278, + 0.0072936397, + -0.01593869, + 0.004859114, + 0.015488219, + -0.01262641, + -0.0017240415, + 0.0144680375, + 0.008671548, + -0.0055348193, + -0.0010516488, + -0.042768154, + 0.008896783, + -0.017541833, + 0.0036865673, + 0.022430757, + 0.0015004626, + 0.017237103, + -0.0053658932, + 0.016905876, + 0.023689425, + -0.0017372906, + -0.03142691, + -0.005011479, + 0.015806198, + -0.0093340045, + -0.0130437575, + -0.007412882, + -0.013368361, + -0.0027972201, + -0.02959853, + 0.007333387, + 0.007903099, + -0.016561398, + 0.009857344, + -0.040674794, + 0.014640276, + -0.0103011895, + 0.006492068, + 0.022470506, + 0.012401175, + -0.018151293, + -0.03216886, + 0.029360047, + -0.01970144, + -0.005061163, + -0.0056308755, + 0.045311987, + 0.010009709, + -0.00073035766, + -0.031347416, + -0.0028121255, + 0.015329231, + -0.014269301, + -0.009393625, + -0.013321989, + -0.005554693, + 0.012845021, + -0.011539983, + 0.031320915, + -0.0016486872, + 0.01233493, + -0.0008334524, + -0.008062089, + -0.01819104, + 0.013633343, + 0.024736105, + 0.018972738, + 0.019873679, + 0.014547532, + 0.024563866, + -0.0035441392, + -0.023623178, + -0.011374368, + 0.0144812865, + 0.015315982, + -0.00095145236, + 0.011977203, + 0.0233052, + -0.009439997, + 0.024524119, + 0.007903099, + 0.048465274, + -0.012527042, + -0.004772995, + 0.016760135, + -0.0017025118, + -0.028194124, + -0.05591128, + 0.010440306, + 0.012765526, + -0.013845329, + 0.0011990452, + 0.03852844, + 0.02195379, + 0.035136662, + -0.0041734725, + 0.013335238, + -0.0077639837, + -0.0037329393, + 0.0030953253, + -0.011380993, + 0.036726557, + -0.01608443, + 0.0054288264, + 0.0030853886, + -0.024391627, + 0.004951858, + -0.005389079, + -0.02239101, + -0.01669389, + -0.008433064, + -0.020006169, + 0.015739953, + -0.03094994, + 0.026710223, + 0.01730335, + 0.0052897106, + 0.0103144385, + 0.00045999285, + -0.0017356345, + -0.020377144, + 0.00003317455, + 0.014322298, + -0.02391466, + -0.0026034517, + 0.03410323, + -0.023397943, + -0.0036302586, + -0.009400249, + 0.01323587, + -0.011851337, + -0.009274383, + -0.009890467, + -0.01608443, + 0.009413498, + 0.022814982, + -0.017714072, + -0.024285635, + 0.008274075, + -0.0053460193, + -0.008929906, + 0.030737955, + -0.025650294, + -0.0004691016, + 0.009016025, + -0.052122034, + 0.02150332, + -0.008843787, + 0.002003929, + -0.007823604, + 0.025425058, + 0.032672327, + -0.0042595915, + -0.017078115, + -0.043086134, + 0.01997967, + -0.0039681112, + -0.009453246, + 0.031294417, + -0.006150903, + 0.0054321387, + -0.010208446, + -0.017555082, + -0.037177026, + -0.013169624, + 0.0023898098, + -0.016163925, + -0.004739872, + -0.02358343, + -0.0135538485, + 0.013315364, + -0.016269919, + 0.028750587, + -0.0063463277, + -0.006710679, + 0.016508402, + -0.01143399, + 0.0063562645, + 0.028856581, + 0.030472973, + -0.01059267, + -0.010195197, + 0.016839629, + 0.021158842, + 0.010566172, + -0.00064258225, + 0.017621327, + -0.007406257, + -0.027293185, + -0.08818613, + 0.026034517, + 0.017117862, + -0.01850902, + 0.012440923, + -0.009989835, + 0.023941157, + -0.0027773464, + 0.026405493, + -0.005173781, + -0.042900644, + 0.020986604, + -0.022510253, + -0.015064248, + -0.031506404, + -0.016654141, + 0.031506404, + 0.016627643, + 0.008346945, + 0.016150676, + 0.017992303, + -0.012434298, + 0.028538601, + 0.0028634658, + -0.018548766, + 0.011440614, + -0.04642491, + 0.039906345, + -0.0036799428, + -0.002321908, + 0.012560165, + -0.031029437, + 0.0036136971, + 0.013752585, + -0.0037826234, + 0.01081128, + -0.010393933, + -0.012646284, + 0.001006105, + 0.044861514, + -0.032990307, + 0.0028982447, + 0.0064721946, + -0.00492536, + -0.0026829466, + -0.0062668333, + 0.019515952, + 0.00480943, + 0.0070087835, + 0.0145077845, + -0.017661076, + 0.01983393, + -0.0046239425, + -0.015302732, + -0.0032394095, + -0.043987073, + 0.028247122, + -0.004915423, + 0.00058130507, + -0.0029181184, + 0.014521034, + 0.016269919, + 0.020231403, + 0.0050247284, + 0.0016735293, + -0.008724544, + -0.009188264, + -0.0046206303, + 0.016163925, + -0.026392244, + -0.037309516, + 0.012401175, + -0.004537823, + 0.037230022, + -0.0021397327, + -0.023543684, + -0.0052599, + 0.0043755216, + -0.021755053, + 0.014587279, + -0.00061898225, + 0.009002776, + -0.04014483, + 0.012189189, + 0.009797723, + -0.013726087, + -0.00473656, + -0.005352644, + -0.0077109872, + 0.020072415, + -0.02538531, + 0.012712529, + 0.01805855, + 0.0011245189, + 0.00097546633, + 0.01833678, + -0.0023335011, + -0.027982138, + 0.022377761, + 0.023106463, + 0.02314621, + -0.011520108, + 0.002545487, + -0.014640276, + -0.0075387484, + 0.012613161, + -0.022920975, + 0.009877218, + 0.009651983, + 0.009088895, + 0.02255, + 0.0034282093, + 0.0011924207, + 0.020655377, + 0.026061017, + -0.008512558, + -0.017647825, + -0.024881845, + -0.017064866, + 0.008797415, + 0.020377144, + 0.0144415395, + 0.013739336, + 0.0011468768, + 0.017184107, + -0.016481904, + 0.005425514, + -0.018866746, + -0.0009936839, + -0.008009092, + 0.0039482373, + 0.001657796, + -0.009380376, + -0.0073068887, + -0.025226321, + 0.0070551555, + 0.012315055, + 0.006303268, + 0.008333696, + 0.049366217, + 0.0051572192, + 0.009969962, + 0.019025734, + 0.008068713, + 0.0105198, + 0.008028965, + -0.00046123494, + -0.034050234, + -0.02420614, + 0.009022649, + -0.014534283, + 0.0055845035, + -0.010102453, + -0.018615011, + -0.026551234, + -0.0011063014, + 0.009221386, + -0.00037242443, + 0.008101836, + 0.037044536, + -0.0073400117, + 0.023225704, + 0.014256052, + -0.0008479436, + 0.007896475, + 0.0300755, + -0.0018300345, + -0.0004927016, + -0.019476205, + 0.0144547885, + 0.007393008, + -0.028512103, + -0.02225852, + -0.018707756, + -0.0028319992, + -0.016998619, + 0.01789956, + 0.004938609, + 0.0031582587, + 0.0019857117, + 0.018668009, + -0.022165775, + -0.02538531, + 0.031188425, + -0.020072415, + -0.000031751304, + 0.0067636753, + -0.017700823 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + -0.0044841906, + 0.00023355159, + -0.00082493754, + 0.010029372, + -0.015641283, + 0.02653146, + -0.026091048, + -0.0066962577, + -0.008347801, + -0.021913812, + 0.017136013, + -0.013826254, + 0.012485, + -0.010282942, + -0.008074212, + -0.017709883, + 0.03384496, + -0.008374493, + 0.026838413, + -0.0343521, + 0.0005384198, + -0.005495135, + -0.010082755, + -0.006906454, + -0.009889241, + 0.006275865, + -0.0017316182, + -0.020539194, + 0.0030695351, + -0.032296848, + 0.02372884, + 0.010356344, + 0.0012778608, + -0.019031117, + -0.019645024, + -0.009628998, + -0.009955971, + -0.008194324, + -0.011243841, + -0.017136013, + 0.016748985, + -0.009228624, + -0.015441096, + -0.004170564, + -0.014333394, + 0.01742962, + 0.0025173523, + 0.016655564, + -0.028106265, + 0.012311505, + 0.0062091355, + 0.024329402, + -0.027705891, + -0.0017182723, + -0.014159899, + 0.0021203146, + -0.0042840033, + 0.002655815, + 0.0074269404, + -0.0026708292, + 0.024436168, + 0.011877766, + -0.018951043, + -0.003623386, + 0.014053132, + 0.000584296, + -0.0009575615, + 0.030054752, + -0.012992141, + -0.009115185, + 0.01901777, + 0.02137998, + -0.012731898, + 0.008234361, + 0.015040722, + -0.019458184, + -0.049539626, + 0.0010468116, + 0.00804752, + 0.001294543, + -0.003364811, + -0.019538257, + 0.012311505, + -0.0006247505, + 0.008094231, + 0.010643279, + -0.005154817, + 0.04406785, + -0.021019643, + -0.01533433, + 0.018283753, + 0.0029227312, + 0.005051387, + -0.009268661, + -0.03878291, + 0.004617648, + -0.016108386, + 0.027652508, + -0.007306828, + -0.032697223, + -0.010923541, + 0.008287745, + -0.016775677, + -0.014546927, + -0.02984122, + 0.010342998, + 0.012411598, + 0.007453632, + 0.015894853, + -0.0026674927, + 0.0011010289, + 0.012131336, + -0.009115185, + -0.05519825, + -0.015347675, + -0.037234794, + 0.0069932016, + 0.00059430534, + -0.019524911, + -0.019645024, + 0.012698533, + 0.018884314, + 0.016882444, + -0.026704956, + 0.0056219203, + -0.014573619, + -0.017202742, + -0.0058688177, + -0.0016457045, + -0.002824306, + 0.02853333, + 0.038996443, + 0.00025794937, + -0.013973057, + -0.021046335, + 0.008594698, + -0.035419766, + 0.006225818, + -0.011010289, + -0.029654378, + 0.0069798557, + 0.0028109602, + -0.0038435918, + 0.0027308853, + -0.009989335, + 0.0036734329, + 0.032136697, + 0.00459763, + 0.009849204, + 0.015027376, + 0.017976798, + 0.0032113343, + 0.0075470526, + -0.0009950965, + 0.0076938565, + 0.00986255, + 0.022287494, + 0.023328466, + -0.003823573, + -0.024382785, + -0.01211799, + -0.010509822, + 0.021460054, + -0.014400124, + -0.0030361705, + 0.016375303, + 0.005671967, + 0.054130584, + 0.0027909414, + -0.0036801056, + -0.0069398186, + 0.018043527, + -0.023995757, + 0.004791144, + 0.025637291, + 0.009362082, + 0.006886435, + 0.009302026, + -0.023982411, + 0.014533581, + -0.019564949, + 0.0028209696, + 0.010129466, + 0.012431617, + -0.008995072, + 0.019378109, + 0.018016836, + -0.0007114982, + 0.0057420325, + 0.000746948, + 0.013285749, + 0.029067162, + 0.0017449639, + 0.001951824, + -0.6700662, + -0.04406785, + -0.027999498, + 0.0029260677, + 0.04081147, + 0.030214902, + 0.018497285, + 0.027225442, + -0.00887496, + -0.010710008, + -0.046656933, + 0.0064393505, + -0.017202742, + 0.007867352, + 0.01377287, + -0.025357028, + 0.010296288, + -0.012171374, + 0.008868287, + 0.0120979715, + 0.011851074, + 0.007827315, + -0.0036200495, + -0.0065928274, + 0.018790893, + -0.0070065474, + -0.005805425, + -0.026718302, + -0.012284813, + 0.044841904, + -0.032136697, + 0.033417895, + -0.0017699874, + -0.008534642, + 0.044735137, + -0.024836542, + -0.025637291, + 0.03445887, + -0.011704271, + 0.049165946, + 0.003446554, + -0.006559463, + -0.010449765, + -0.017376238, + -0.00474777, + 0.010463111, + 0.022541065, + -0.023061551, + -0.014266665, + -0.010663298, + 0.008914998, + -0.013892983, + -0.0017533051, + -0.011670906, + 0.007894044, + 0.010349671, + 0.014653694, + -0.0001789172, + 0.015307638, + -0.019044463, + -0.008307763, + 0.0056519485, + -0.03795547, + -0.028239723, + -0.002780932, + -0.0026441375, + -0.037848704, + -0.0026825068, + 0.015214218, + -0.018924352, + -0.007860679, + 0.014159899, + -0.000095297386, + 0.020539194, + 0.0252903, + 0.031949855, + 0.01616177, + -0.0070198933, + -0.019364763, + -0.0009900919, + 0.008307763, + -0.017603116, + -0.0030661987, + -0.008768193, + 0.02172697, + -0.03331113, + -0.02853333, + 0.00665622, + 0.008200997, + -0.024676394, + 0.01809691, + 0.010423074, + -0.0063359207, + 0.0023521981, + -0.002750904, + 0.005331649, + -0.011090363, + 0.023501962, + 0.014720422, + -0.032110006, + 0.00526492, + 0.0029010442, + 0.007867352, + -0.0027559088, + -0.02039239, + -0.001042641, + -0.01839052, + 0.02503673, + 0.010556531, + -0.016188461, + 0.008074212, + -0.025570562, + -0.012224757, + -0.020045398, + 0.009468849, + -0.018857623, + 0.011036981, + 0.01717605, + 0.022767942, + -0.0057687243, + 0.010950233, + 0.006212472, + 0.027132021, + -0.0018750855, + 0.008728156, + 0.011750981, + -0.006182444, + -0.010423074, + -0.010289615, + 0.010903522, + -0.0013429216, + -0.00019737193, + 0.004237293, + -0.007780604, + 0.0038169, + -0.030294977, + -0.004974649, + 0.0071199867, + 0.02952092, + -0.02554387, + -0.043881007, + -0.025276953, + -0.0075337067, + 0.0035599933, + -0.021620203, + -0.009415465, + 0.012872029, + 0.015240909, + -0.012565075, + 0.019938633, + 0.0068130335, + -0.021873774, + -0.03961035, + 0.019524911, + 0.0120045515, + -0.008788212, + -0.029600995, + -0.007046585, + -0.02137998, + 0.008608044, + -0.0043073585, + -0.0043073585, + -0.033551354, + -0.009135203, + 0.005611911, + -0.015494479, + -0.004220611, + 0.011777673, + -0.0011744308, + -0.02653146, + -0.015187526, + -0.013706141, + -0.013826254, + 0.012992141, + 0.009555596, + -0.0010735032, + 0.012458309, + -0.0045309006, + 0.0138529455, + 0.010850139, + 0.005184845, + -0.031042341, + -0.021620203, + -0.0060890233, + 0.027225442, + 0.009201933, + -0.0022821326, + 0.02439613, + -0.014253319, + 0.011203803, + -0.031949855, + 0.015761396, + -0.0017266135, + -0.009021764, + 0.0138529455, + -0.01730951, + -0.0013103912, + 0.0044041155, + 0.015214218, + 0.008834923, + 0.026424693, + -0.0035966944, + 0.007059931, + -0.015240909, + 0.018337136, + -0.01975179, + -0.00028776893, + -0.0042339563, + 0.024169253, + 0.029627686, + 0.002655815, + -0.025677329, + 0.0011719285, + -0.005855472, + 0.011003616, + 0.012077954, + 0.025410412, + 0.019925287, + -0.004340723, + -0.014733768, + 0.023074897, + -0.011410663, + 0.006662893, + -0.023301775, + 0.0069198, + 0.021500092, + 0.023288429, + 0.022541065, + 0.026731648, + 0.0040537883, + -0.014013095, + -0.007473651, + -0.012204738, + -0.0050180224, + 0.0084812585, + -0.013919674, + 0.0036300588, + -0.0036367318, + 0.030561892, + -0.016415339, + 0.010783411, + -0.0015197535, + 0.016535452, + -0.011497411, + 0.005695322, + -0.016121732, + 0.04745768, + 0.0112571865, + -0.0069464915, + 0.020419082, + -0.025490487, + -0.003860274, + -0.01800349, + 0.028159648, + 0.002388899, + -0.031789705, + -0.00402376, + 0.009422138, + 0.007974118, + 0.0256106, + 0.014800497, + -0.0078339875, + 0.0018350482, + 0.024062486, + -0.016455377, + -0.00021686933, + 0.018110257, + 0.026051011, + -0.007914063, + -0.034832552, + -0.02531699, + -0.020218894, + 0.003519956, + 0.009535577, + 0.0043073585, + -0.009689054, + -0.015894853, + -0.011417336, + 0.014119862, + 0.0057553784, + -0.002882694, + -0.040250946, + 0.030001368, + 0.01492061, + -0.01016283, + -0.0077405665, + -0.009388774, + 0.008868287, + -0.01673564, + 0.01965837, + 0.026357964, + 0.020699343, + -0.004304022, + -0.018857623, + -0.0133991875, + 0.0074002487, + 0.02589086, + -0.041345302, + 0.013946366, + -0.019898595, + 0.0014004754, + -0.025930898, + -0.00903511, + -0.009188587, + 0.020218894, + 0.0027342218, + 0.00001191869, + -0.01673564, + -0.013459244, + -0.008427876, + 0.022180727, + -0.02885363, + -0.0024656374, + 0.009462176, + -0.0058621448, + 0.0050847516, + -0.006205799, + -0.016108386, + 0.016708948, + -0.0024089178, + -0.015828125, + 0.009095166, + -0.022848018, + -0.005925537, + 0.10890177, + -0.0012027906, + -0.003973713, + 0.021073025, + 0.0057854066, + 0.023328466, + -0.0040904894, + -0.0011410663, + 0.006352603, + 0.008307763, + -0.022287494, + 0.003483255, + -0.0039837225, + 0.0037368254, + 0.009849204, + -0.0012711879, + -0.013479263, + -0.052876078, + 0.030108135, + -0.009555596, + -0.012304832, + 0.017296163, + 0.0029911285, + 0.02045912, + 0.007960772, + -0.012985468, + 0.01689579, + 0.008794885, + 0.031896472, + -0.009849204, + -0.000403085, + 0.002167025, + 0.014119862, + 0.013292422, + -0.01730951, + -0.008274399, + 0.036914498, + -0.0035366383, + 0.008454567, + -0.003947022, + 0.01988525, + 0.00045792793, + -0.0020435764, + -0.003947022, + -0.002173698, + -0.0062825377, + -0.015000684, + 0.024489552, + -0.036700964, + -0.019858558, + 0.01418659, + 0.00031904815, + -0.03750171, + -0.009395447, + -0.026918488, + 0.024916617, + -0.0057120044, + -0.007974118, + 0.002056922, + 0.023635421, + 0.009642344, + -0.013879637, + -0.013372497, + -0.020525848, + -0.0013304099, + -0.043747548, + 0.0009709073, + -0.013205674, + -0.018884314, + -0.01476046, + 0.0102429055, + -0.011203803, + -0.025076767, + 0.02007209, + 0.015454442, + -0.009261988, + 0.016642218, + -0.02360873, + -0.007900717, + 0.020552538, + -0.013639413, + -0.0133991875, + -0.017349547, + -0.015908198, + -0.011784346, + 0.009689054, + 0.0130255055, + 0.0038736197, + -0.017669845, + 0.017189397, + 0.038596068, + -0.011951168, + 0.006522762, + -0.0035166196, + -0.011710944, + -0.009075147, + 0.008241034, + 0.017829996, + -0.018857623, + -0.0023488617, + 0.021927157, + -0.021940503, + -0.0069398186, + 0.021126408, + -0.0017850014, + -0.0021853754, + 0.010129466, + -0.003298082, + -0.010102774, + -0.001996866, + 0.02888032, + -0.0093153715, + 0.014360086, + 0.001457195, + 0.003616713, + 0.0082076695, + 0.00006532146, + 0.023114935, + 0.00850795, + 0.010189522, + -0.0147871515, + -0.0016231835, + 0.015427751, + 0.015027376, + 0.024195943, + -0.018817585, + 0.002757577, + -0.010896849, + 0.009101839, + 0.0016657233, + 0.008234361, + 0.018377174, + -0.019858558, + -0.016708948, + -0.0015189194, + 0.0044841906, + -0.0138396, + 0.023755532, + 0.003653414, + -0.029814528, + -0.008434549, + 0.005485126, + 0.018764202, + -0.015921544, + -0.039556965, + -0.028132956, + 0.0036033674, + 0.035286307, + 0.0026674927, + 0.008174306, + 0.009322044, + 0.028773556, + -0.007607109, + -0.010022699, + -0.011070345, + -0.006032304, + -0.015227563, + -0.013419206, + 0.012331524, + 0.005501808, + 0.020565884, + 0.00030507674, + 0.010816774, + 0.0043006856, + -0.0049946676, + 0.005395042, + -0.001981852, + 0.006886435, + 0.010409728, + 0.029067162, + 0.008174306, + 0.022073962, + -0.005131462, + -0.0011961177, + -0.030108135, + 0.0061323973, + -0.0135193, + -0.015521171, + -0.021099716, + -0.030268285, + -0.0015614592, + -0.00871481, + -0.010563204, + 0.009382101, + 0.0015005689, + 0.02595759, + 0.025223572, + -0.00041726494, + 0.013692795, + -0.008267726, + 0.009769129, + -0.011504084, + -0.023341812, + 0.008654755, + 0.00018559009, + -0.005014686, + -0.020886185, + 0.008788212, + 0.0062892106, + 0.008788212, + 0.010036045, + 0.0009784143, + -0.009949298, + 0.014680386, + -0.0007957436, + 0.041211843, + -0.00928868, + -0.008354474, + 0.015667975, + -0.0346724, + -0.016014965, + -0.007653819, + 0.0065861545, + -0.04409454, + -0.020832801, + 0.013145617, + -0.010249578, + 0.02255441, + -0.017736575, + -0.019645024, + 0.01959164, + 0.016535452, + 0.025717366, + -0.015828125, + 0.023061551, + 0.0083878385, + -0.010796756, + 0.011370625, + 0.015948236, + -0.01689579, + -0.023208354, + 0.018937698, + 0.018363828, + -0.020485811, + -0.020218894, + 0.002595759, + 0.009622325, + -0.03451225, + 0.006365949, + 0.027252134, + 0.029787837, + 0.0010835126, + 0.00572535, + 0.009582288, + -0.0054817894, + 0.023929028, + -0.015788088, + -0.020525848, + -0.01666891, + -0.004577611, + -0.015107451, + 0.006833052, + -0.002046913, + 0.0031095725, + 0.020552538, + -0.009322044, + -0.011010289, + -0.019898595, + 0.010016026, + 0.0069998745, + -0.02917393, + 0.023101589, + 0.0022737915, + 0.007053258, + 0.0107033355, + 0.0034699093, + -0.008628063, + 0.0013821248, + 0.014400124, + 0.024703085, + -0.0071333325, + 0.0059989393, + 0.002167025, + -0.011644214, + 0.0122781405, + 0.009248642, + -0.0009875896, + -0.00830109, + -0.0054250695, + -0.008781539, + 0.0106165875, + 0.0048678825, + 0.011070345, + -0.012138009, + -0.03002806, + -0.014707076, + -0.007994137, + -0.015467788, + 0.00079032185, + -0.011944495, + -0.0170159, + -0.020605922, + -0.0046710316, + 0.022207418, + 0.014013095, + -0.021446709, + 0.009141876, + 0.0044474895, + -0.0107033355, + 0.006646211, + -0.01717605, + 0.010509822, + 0.0018584033, + 0.0006201629, + -0.0147871515, + -0.025757402, + 0.027999498, + -0.023982411, + -0.0018250388, + -0.029387463, + -0.01377287, + 0.023501962, + -0.002078609, + 0.019217959, + 0.025850823, + -0.017189397, + 0.008527969, + -0.03333782, + -0.014627002, + 0.0028142966, + 0.010563204, + -0.0020902867, + 0.026291234, + -0.007366884, + 0.01517418, + 0.018977735, + 0.015454442, + 0.0035633298, + -0.010716681, + -0.013906329, + -0.009789147, + -0.00836782, + 0.00007934498, + -0.0073001552, + -0.017149359, + 0.0040137507, + -0.00944883, + -0.0053516678, + 0.01924465, + -0.0072134077, + 0.0067262854, + 0.013652759, + 0.022701213, + -0.0010526504, + -0.006803024, + -0.020685997, + -0.0127452435, + -0.006752977, + -0.02379557, + -0.006065668, + -0.0152676, + 0.02519688, + 0.027412282, + -0.040678013, + -0.02338185, + 0.026891796, + -0.031576175, + 0.003166292, + -0.02214069, + 0.015361021, + 0.014453506, + -0.00045167207, + -0.00036429876, + 0.010603242, + -0.010262924, + 0.009048455, + -0.029307388, + -0.003750171, + 0.022260802, + -0.017616462, + 0.008588025, + 0.00816096, + -0.014293357, + 0.0039236667, + 0.007580417, + -0.0014705409, + 0.01492061, + -0.006676239, + 0.00314961, + 0.0003401095, + 0.00036617552, + 0.01492061, + -0.0083878385, + 0.023942374, + 0.0071533513, + -0.0349927, + 0.012291486, + 0.010783411, + -0.016588835, + 0.008354474, + 0.013425879, + 0.0014421811, + -0.02080611, + 0.00541506, + -0.02089953, + 0.014573619, + -0.0012745244, + -0.0081075765, + 0.016415339, + -0.012972122, + -0.00024001596, + 0.031389333, + 0.000569282, + -0.0065394444, + -0.022474336, + 0.010543185, + -0.012391579, + 0.0085746795, + 0.013279076, + 0.0031712968, + -0.009201933, + -0.022113997, + 0.008354474, + -0.027492357, + -0.020178856, + 0.0065561268, + -0.0019801839, + -0.021793699, + 0.02519688, + 0.0011026971, + -0.0019234641, + -0.0062224814, + -0.011003616, + 0.00190845, + -0.006722949, + -0.025770748, + -0.003373152, + -0.03878291, + -0.018030182, + 0.0060756775, + -0.01393302, + -0.00020310647, + 0.0008024165, + 0.024556281, + -0.020525848, + 0.009155222, + 0.25111467, + -0.007520361, + -0.0110770175, + 0.028293107, + -0.0070799496, + 0.029414153, + 0.03387165, + -0.013158963, + -0.0097024, + 0.019831866, + -0.015107451, + -0.0027275488, + 0.01409317, + -0.0038402553, + 0.0082944175, + -0.011097036, + -0.019364763, + -0.04062463, + -0.0030862174, + -0.009375428, + 0.034378793, + -0.008914998, + -0.0014580291, + -0.0066495473, + 0.0050680693, + 0.013973057, + -0.0041238535, + 0.008434549, + 0.020152165, + 0.023261737, + 0.010683317, + 0.019578295, + 0.0003943268, + 0.03331113, + 0.0043507325, + 0.0070132203, + -0.0011886107, + -0.007787277, + 0.024943309, + 0.008321109, + 0.0021136417, + -0.012144682, + -0.0077472394, + -0.0011585826, + 0.0095022125, + 0.028613405, + -0.011270532, + -0.0061857803, + -0.003194652, + 0.02262114, + -0.029707761, + -0.004017087, + 0.01682906, + 0.023021514, + 0.011250514, + 0.0014229964, + 0.009048455, + -0.020619268, + -0.01915123, + -0.010509822, + 0.0008983395, + 0.024316056, + 0.003623386, + 0.024075832, + 0.0000784066, + -0.010823447, + -0.028266415, + 0.024502898, + -0.004871219, + 0.004140536, + -0.0005375857, + -0.003446554, + -0.0011844402, + -0.029787837, + -0.029013779, + -0.0026925162, + 0.03864945, + 0.00074152625, + 0.018150294, + 0.015881507, + -0.016175115, + 0.009835858, + -0.0013862954, + 0.0008512121, + -0.006893108, + -0.040384404, + 0.0027108665, + 0.0037835357, + 0.016281882, + -0.004387433, + 0.0052315556, + -0.021433363, + -0.0017166041, + -0.0077072023, + 0.0048478637, + -0.019351417, + -0.00092920166, + 0.006395977, + 0.000065217195, + 0.0056686304, + -0.0197251, + 0.004771125, + 0.0048512, + -0.022354223, + -0.01285201, + 0.0060890233, + 0.010556531, + 0.013679449, + 0.013138944, + -0.011710944, + -0.016014965, + -0.01682906, + 0.0060022757, + -0.010496476, + 0.00040663, + -0.0013270734, + -0.025930898, + -0.016975863, + 0.03267053, + -0.033898342, + 0.012158028, + -0.025010038, + -0.0071533513, + 0.0053516678, + -0.018457249, + 0.002078609, + -0.016081695, + 0.00060598296, + 0.009268661, + -0.031816397, + 0.030401744, + -0.016175115, + 0.014400124, + 0.0045142183, + -0.015881507, + 0.007320174, + 0.003947022, + -0.0033247736, + -0.0014446834, + -0.02137998, + 0.009969316, + -0.0074002487, + 0.008094231, + 0.00402376, + -0.0145068895, + -0.019231305, + 0.0069264728, + 0.017963452, + -0.013205674, + 0.0132990945, + -0.022380915, + -0.013158963, + 0.0022654503, + -0.016748985, + 0.015761396, + 0.00092836755, + 0.00026274554, + -0.008374493, + 0.011270532, + 0.027332207, + -0.015601246, + 0.0141332075, + 0.011744308, + -0.00578207, + -0.02188712, + -0.015734704, + -0.17306839, + 0.032910753, + 0.010896849, + -0.01632192, + 0.015187526, + 0.013499281, + 0.011824383, + -0.021633549, + 0.012358215, + 0.009328717, + 0.025263608, + 0.031202491, + -0.018777547, + -0.014733768, + 0.01151743, + -0.012358215, + -0.0040137507, + 0.0055451817, + 0.030161519, + 0.010489803, + 0.02166024, + -0.02057923, + 0.0009500545, + 0.0071600243, + -0.029814528, + 0.033925034, + 0.011183784, + 0.025877515, + -0.016855752, + -0.009015091, + -0.02751905, + -0.026344618, + 0.0120912995, + 0.032056622, + -0.0010001012, + 0.008601371, + 0.00053299806, + -0.024102524, + -0.012658495, + 0.022567756, + 0.003750171, + 0.020138819, + 0.00028568364, + -0.008654755, + 0.014653694, + 0.017629808, + 0.0013787885, + 0.0023021514, + -0.011791019, + -0.017789958, + 0.0256106, + -0.013919674, + 0.020298969, + 0.0006706267, + 0.0032380258, + 0.020032052, + 0.0141332075, + -0.0009216946, + 0.015948236, + -0.0214734, + -0.019551603, + -0.008601371, + 0.018403865, + -0.016415339, + -0.020672651, + 0.0063792947, + -0.016522106, + -0.0026257872, + -0.043267097, + 0.026998563, + -0.010029372, + -0.013225692, + 0.0026357963, + -0.012978795, + 0.0013103912, + -0.019338071, + -0.00022375076, + 0.030161519, + 0.0041805734, + -0.017629808, + -0.018684126, + 0.025490487, + -0.018363828, + -0.018564014, + 0.0025006703, + -0.008120922, + 0.0034231988, + 0.022954784, + -0.007053258, + -0.021913812, + 0.027572433, + -0.025410412, + 0.007954099, + -0.010756719, + 0.026264545, + 0.006576145, + -0.0031846426, + 0.021967195, + -0.004017087, + -0.010583223, + -0.00066520495, + -0.011550794, + -0.014280011, + 0.012838664, + 0.026704956, + -0.0019551604, + 0.008227688, + 0.0010217882, + 0.012298159, + -0.005361677, + -0.028426563, + 0.00093587453, + 0.015227563, + 0.021046335, + -0.026224507, + -0.00464434, + 0.016188461, + 0.0017583098, + 0.019578295, + -0.023341812, + 0.05207533, + -0.008314436, + 0.016628873, + 0.009775802, + 0.00029152242, + -0.01616177, + -0.06897112, + -0.021713624, + 0.002854334, + 0.005641939, + -0.011684252, + 0.029013779, + 0.007954099, + 0.01867078, + 0.008441222, + 0.02681172, + -0.0026891797, + -0.024489552, + -0.0020902867, + -0.0011427345, + 0.026838413, + -0.001641534, + 0.011010289, + -0.02853333, + 0.0060990327, + 0.026931833, + -0.000014557875, + -0.0046543493, + 0.008868287, + -0.011604177, + -0.015054068, + -0.0009208605, + -0.02554387, + 0.022420952, + 0.022848018, + 0.0031112407, + 0.001441347, + -0.0032430305, + 0.0025540534, + -0.028319798, + 0.0074002487, + 0.019271342, + -0.038729526, + -0.0016440363, + 0.020258931, + -0.024449514, + -0.0020102118, + -0.011584158, + 0.017216088, + -0.02137998, + -0.010196195, + 0.005962238, + -0.01800349, + -0.009622325, + 0.01593489, + -0.025637291, + -0.026357964, + -0.023195008, + 0.00068063603, + 0.01022956, + 0.008521296, + -0.017456312, + -0.018483939, + 0.0012545056, + -0.009635671, + -0.003166292, + 0.014560273, + 0.010850139, + -0.013879637, + 0.011303897, + 0.022594448, + 0.0028960395, + -0.021206483, + -0.02710533, + 0.009528904, + -0.0049713124, + 0.0068597435, + 0.010963579, + -0.007473651, + 0.0005559362, + -0.009008418, + -0.03680773, + -0.01800349, + -0.01119713, + 0.012725225, + -0.016775677, + 0.0028293105, + -0.03477917, + -0.0007181711, + -0.0019551604, + 0.025156843, + 0.015294292, + -0.0060623316, + 0.010302961, + -0.0016673915, + -0.034058493, + -0.006065668, + 0.036220513, + 0.008541315, + -0.03186978, + -0.014693731, + 0.032296848, + 0.0152676, + -0.014933956, + 0.005805425, + 0.014480198, + 0.00052590814, + -0.01816364, + -0.08295752, + 0.012698533, + 0.010356344, + -0.0037001243, + 0.014693731, + -0.0086681, + 0.015601246, + -0.018817585, + -0.0021837072, + -0.0061757714, + -0.017950106, + -0.00036054527, + -0.0054050507, + 0.0076938565, + -0.028960396, + -0.018523976, + 0.025050076, + -0.0014563609, + 0.015120797, + 0.012618458, + 0.0058821635, + 0.00526492, + 0.033097595, + -0.001323737, + -0.009755783, + 0.008354474, + -0.014266665, + 0.031202491, + -0.021193137, + -0.007867352, + -0.00056761375, + -0.029067162, + -0.013639413, + 0.016348612, + -0.0053082937, + -0.01896439, + -0.01068999, + 0.0024222636, + 0.0003165458, + 0.02602432, + -0.017029246, + -0.009615652, + 0.029654378, + -0.01476046, + -0.010082755, + 0.0061390703, + -0.0007736396, + -0.004941284, + 0.01616177, + 0.016762331, + -0.00049963355, + 0.01717605, + 0.015347675, + -0.0141332075, + 0.017042592, + -0.054504268, + 0.009055128, + 0.010649952, + -0.018203678, + 0.013178982, + 0.019645024, + 0.010790084, + 0.0025173523, + 0.011984533, + -0.0012294822, + -0.0143200485, + -0.0038502647, + -0.0014229964, + 0.007053258, + -0.02968107, + -0.04118515, + 0.014360086, + 0.015067413, + 0.020152165, + 0.020138819, + 0.0033531333, + 0.009842531, + -0.024409477, + -0.030081443, + 0.03248369, + -0.0012670173, + 0.0070866225, + -0.026785031, + 0.019137884, + 0.004814499, + -0.007046585, + -0.014907264, + -0.006913127, + -0.0058855, + 0.032777295, + -0.0077005294, + 0.0027792638, + 0.01581478, + 0.0042339563, + 0.023008168, + -0.002046913, + -0.008721483, + -0.027625816, + 0.025917552, + 0.01823037, + 0.016642218, + -0.0007899048, + -0.002382226, + -0.024649702, + -0.0068664164, + 0.00015358102, + -0.03931674, + -0.0052849385, + 0.01533433, + 0.0031079042, + 0.013352478, + 0.019965325, + -0.0037835357, + 0.03400511, + 0.008868287, + -0.0012895383, + -0.011343934, + -0.037741937, + -0.020685997, + 0.028907012, + 0.023275083, + 0.007653819, + 0.021913812, + -0.006676239, + -0.006906454, + 0.0069264728, + 0.008120922, + -0.017002555, + -0.00598893, + -0.007813969, + 0.013332459, + -0.0058888365, + -0.02738559, + 0.004200592, + -0.00804752, + -0.023848953, + 0.00183338, + 0.005975584, + -0.012444963, + 0.03632728, + 0.016989209, + 0.023421887, + -0.0036467412, + 0.0042172745, + 0.02039239, + 0.008060866, + 0.013652759, + -0.016855752, + -0.015921544, + 0.00862139, + -0.002714203, + -0.000095245254, + -0.01119713, + -0.020312315, + -0.011630869, + 0.006072341, + 0.024129216, + -0.012885374, + -0.0032380258, + 0.042679884, + 0.025076767, + 0.014773806, + 0.0105164945, + -0.006786342, + -0.008694792, + 0.023208354, + 0.0077605853, + 0.0095022125, + -0.008881633, + 0.022594448, + 0.012938757, + -0.017296163, + -0.008834923, + 0.014533581, + -0.010676644, + 0.0013871295, + -0.009942625, + 0.012771935, + 0.012605113, + -0.014853881, + 0.0077472394, + -0.016108386, + -0.040838163, + 0.0040270966, + 0.0019551604, + -0.0047677886, + 0.0013337464, + -0.013759525 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + -0.0010213737, + 0.008644082, + 0.0023587057, + 0.009380755, + -0.0029162795, + 0.0086643575, + -0.018856129, + 0.0043659713, + -0.0068497085, + -0.04287573, + -0.0075086593, + -0.010408043, + 0.021775788, + -0.019937484, + -0.0062008956, + -0.013003294, + 0.023168033, + -0.006413787, + 0.010455352, + -0.025371293, + -0.013476388, + 0.023438372, + -0.016044606, + -0.009150967, + 0.0061704824, + 0.005903523, + 0.007907409, + -0.021383796, + 0.013523697, + -0.0016980654, + 0.0190724, + -0.0030886205, + 0.0021998817, + -0.004203768, + 0.0023468784, + -0.013625074, + -0.015490412, + -0.005937315, + -0.0011193715, + -0.011164991, + 0.02591197, + -0.02397905, + -0.010833826, + -0.008637324, + -0.0030210358, + 0.0026172171, + -0.016977275, + 0.017409816, + -0.024695447, + 0.010536454, + 0.0074951425, + 0.0034941286, + -0.03752302, + -0.012422066, + -0.019829348, + -0.00043676607, + -0.028196333, + 0.0045011407, + -0.006494889, + -0.014706429, + 0.011678635, + 0.000102855454, + -0.0281693, + 0.016409563, + -0.0037779843, + 0.00011837881, + -0.008157472, + 0.011901665, + -0.04260539, + -0.021140492, + 0.022843625, + 0.01858579, + -0.011219059, + -0.021478415, + 0.018639859, + -0.006626679, + -0.024560276, + 0.007522176, + 0.00737349, + 0.0059001436, + 0.016842104, + -0.018639859, + 0.01726113, + 0.004882994, + 0.024695447, + 0.0069071557, + -0.010921686, + 0.022613838, + 0.008191264, + -0.026425615, + 0.03173777, + 0.0031545155, + 0.011746219, + -0.0048221676, + -0.03033201, + -0.011556982, + -0.015517445, + 0.019194052, + -0.0077722394, + -0.010556729, + -0.01770719, + 0.011151474, + -0.004264594, + -0.015612064, + -0.016788037, + 0.00671116, + 0.008704908, + 0.0002832221, + 0.010293148, + 0.005704148, + 0.0093537215, + 0.024763031, + -0.016450115, + -0.052526824, + -0.02185689, + -0.016869139, + 0.03522514, + 0.0117259445, + -0.013260117, + -0.03381938, + 0.0075356932, + 0.036144294, + -0.007893892, + -0.0050046463, + 0.031818874, + 0.012307173, + -0.0087387, + -0.01046211, + -0.004720791, + -0.012090902, + 0.005271606, + 0.014760497, + 0.010867618, + 0.020762017, + -0.009664611, + 0.024735996, + -0.022938244, + 0.022897694, + -0.034278955, + -0.018707443, + 0.02203261, + 0.019045366, + -0.025155023, + 0.011935457, + 0.010313424, + 0.02662837, + 0.024465658, + 0.022438118, + 0.00737349, + 0.0055216695, + 0.018072147, + -0.016612317, + 0.020032102, + -0.014314438, + 0.0032085832, + 0.016990792, + 0.026141759, + 0.018964265, + -0.005197263, + 0.003558334, + 0.003761088, + 0.009286136, + 0.015598547, + -0.008927938, + -0.011219059, + 0.019613078, + 0.006728056, + 0.013834586, + 0.0060150377, + -0.021613585, + -0.013226325, + 0.020964772, + -0.0014032272, + 0.009772747, + 0.008252091, + 0.010313424, + 0.03222438, + 0.01761257, + -0.021208076, + 0.0067922617, + -0.0031359298, + -0.0132466, + 0.006227929, + 0.008434569, + -0.013239841, + -0.002096815, + 0.009941708, + 0.008015544, + 0.006643575, + 0.002061333, + 0.008488637, + 0.0397398, + 0.018031595, + 0.0026510095, + -0.67217034, + -0.051850975, + 0.0032254795, + 0.0016161189, + 0.020910705, + 0.0067719864, + 0.0150713865, + 0.006079243, + -0.0040415647, + -0.001850131, + -0.0314404, + 0.0071504605, + -0.007988511, + -0.0019126468, + -0.0027067668, + -0.0028317985, + -0.0006935879, + -0.012030075, + 0.014976768, + 0.012178762, + -0.006379995, + 0.0045856214, + -0.005704148, + 0.0048593394, + 0.021154009, + -0.015341725, + -0.0040753568, + -0.019275155, + -0.008718425, + 0.032602854, + -0.031007856, + 0.0381448, + 0.009475374, + 0.005268227, + 0.047011912, + -0.009948467, + -0.022776041, + 0.026236378, + 0.011279885, + 0.03425192, + -0.022654388, + -0.016585283, + 0.0058021457, + -0.025046887, + -0.011928698, + 0.012070626, + 0.017855875, + -0.04498437, + -0.0045450707, + -0.018991299, + 0.020248374, + -0.013219566, + -0.011894906, + -0.01942384, + 0.004626172, + 0.0143279545, + 0.02207316, + -0.014963251, + 0.006809158, + -0.00710991, + -0.021559516, + -0.0066570924, + -0.029548027, + -0.02287066, + -0.014638844, + -0.0017403058, + -0.029277688, + -0.0031883079, + 0.006278618, + -0.008427811, + 0.010259356, + 0.023789812, + -0.013571006, + 0.010293148, + 0.019923966, + 0.017274648, + 0.008988764, + 0.0015966883, + -0.007974993, + -0.01695024, + -0.007332939, + -0.003612402, + -0.0157202, + 0.0077114133, + 0.028764045, + -0.035684716, + -0.020910705, + 0.005548703, + 0.023032863, + -0.027790826, + 0.005656839, + 0.012253105, + -0.005224297, + 0.018004563, + -0.008157472, + 0.0095835095, + 0.0065861284, + -0.00096223707, + 0.014652361, + -0.011847597, + -0.017761257, + -0.011104165, + 0.0052918815, + -0.015544479, + -0.024965785, + -0.0029754161, + -0.0053662243, + 0.0087387, + 0.025939004, + -0.012895159, + 0.007718172, + -0.011577258, + -0.030223874, + -0.008725184, + 0.0097254375, + -0.027980063, + 0.017936977, + 0.0012925572, + 0.016531216, + 0.003686745, + 0.0035110246, + -0.0069747404, + 0.031467434, + 0.0033268565, + 0.00020835093, + 0.014598293, + -0.0020495057, + -0.014963251, + -0.010773, + 0.00238405, + 0.00037657344, + 0.002578356, + -0.006565853, + -0.008535947, + 0.026587818, + -0.017639605, + -0.018788544, + -0.0031646532, + 0.030602349, + -0.042443186, + -0.041037425, + -0.0081507135, + 0.004230802, + 0.0074072825, + 0.0111244405, + -0.023816846, + -0.022127228, + 0.02697981, + -0.0029720368, + 0.032467686, + 0.002101884, + -0.0038523274, + -0.037712257, + 0.022329982, + -0.0035346793, + -0.0032660302, + -0.022248881, + -0.011164991, + 0.0025749768, + 0.012624821, + 0.012205795, + 0.010326941, + -0.040577848, + 0.0012410239, + 0.008840078, + -0.015206556, + 0.014152234, + 0.014963251, + 0.002318155, + -0.018423587, + -0.003717158, + -0.005788629, + -0.009651094, + 0.015422827, + 0.015084904, + -0.01125961, + 0.009995776, + -0.0045247953, + -0.0035786096, + 0.006839571, + 0.0065489565, + -0.023965532, + -0.012983019, + 0.006545577, + 0.026371546, + -0.007055842, + 0.0077114133, + 0.014179269, + -0.0062448257, + 0.002874039, + -0.027358284, + 0.02437104, + -0.0007628622, + 0.0025935625, + 0.015949987, + -0.023384303, + 0.005359466, + 0.0055824956, + -0.0035313002, + 0.023478922, + 0.021924473, + -0.010739207, + 0.010489144, + -0.009319929, + 0.0051905042, + -0.02193799, + -0.0058021457, + -0.007359973, + 0.02176227, + 0.0281693, + 0.020342993, + -0.025966039, + -0.010658106, + 0.0064475797, + 0.022478668, + 0.03738785, + 0.015652616, + 0.009394272, + -0.005592633, + -0.002441497, + 0.0030869308, + -0.030304976, + 0.015220073, + -0.018558756, + -0.003541438, + 0.0019278533, + 0.006177241, + 0.038334038, + 0.015449861, + -0.0040145307, + -0.022059644, + -0.011333953, + -0.0077992734, + 0.008988764, + 0.012895159, + -0.019910451, + 0.0059542116, + -0.013787277, + 0.035792854, + 0.007927684, + 0.0147875305, + -0.0036968826, + 0.03676607, + -0.010705415, + -0.0039706007, + -0.009401031, + 0.040172342, + 0.015179521, + -0.0058798683, + 0.018328968, + -0.025438879, + -0.015990539, + -0.017964011, + 0.0067652278, + 0.014341472, + -0.035522513, + 0.009319929, + 0.0031714116, + 0.019369774, + 0.04211878, + 0.02397905, + -0.0010357354, + 0.0062718596, + 0.009968742, + 0.008137197, + -0.00023802483, + 0.032467686, + 0.0049776128, + -0.008143956, + -0.0061130356, + -0.02022134, + -0.0086643575, + -0.01593647, + -0.014706429, + -0.004095632, + -0.012604545, + -0.0014632086, + -0.018639859, + 0.026141759, + 0.0043423166, + -0.008731943, + -0.037279718, + 0.027561037, + -0.009529442, + -0.0007624398, + -0.013064121, + -0.009745712, + -0.009455099, + -0.026141759, + 0.021356763, + 0.009211794, + 0.016260877, + -0.008285883, + 0.00073878514, + -0.009042832, + 0.007130185, + 0.019315705, + -0.037144545, + -0.016923208, + -0.019234603, + 0.016801555, + -0.022708457, + 0.0029382445, + -0.0014311059, + 0.012435583, + -0.006596266, + 0.01774774, + -0.025709217, + -0.012834333, + 0.000044669257, + 0.022911211, + -0.012124694, + -0.0027135254, + 0.009482132, + 0.011252851, + 0.0013778829, + -0.00489989, + 0.0038219143, + 0.012401791, + -0.013908929, + -0.0052479515, + -0.021505449, + -0.024046633, + -0.00043148603, + 0.084778234, + -0.0034180959, + 0.00657937, + 0.002101884, + 0.011043339, + 0.008995523, + -0.004305145, + 0.0067517105, + 0.0062448257, + 0.016409563, + -0.011502914, + -0.018991299, + 0.012023317, + 0.001227507, + 0.0063833743, + -0.012124694, + -0.013537214, + -0.019194052, + 0.026033623, + -0.0063056517, + 0.00865084, + 0.012340965, + -0.001894061, + 0.018518206, + -0.0064002704, + -0.004115908, + 0.013097913, + 0.010049844, + 0.0013128327, + -0.025411844, + 0.012793782, + 0.0005677114, + -0.015409309, + -0.0016718763, + -0.020113204, + -0.0016271014, + 0.018085664, + 0.020586297, + -0.008157472, + -0.012199037, + 0.010212047, + 0.0063124103, + 0.0051195403, + -0.005082369, + -0.0018687168, + -0.0077384473, + 0.0021255387, + 0.012489651, + -0.027304215, + 0.004798513, + 0.03541438, + -0.0046025175, + -0.037279718, + -0.014909183, + -0.00094618567, + 0.01333446, + -0.012003041, + -0.0038557067, + 0.0017943736, + 0.014841598, + -0.00017962744, + -0.021559516, + 0.01457126, + -0.009421306, + -0.03400862, + -0.044524796, + -0.0015468446, + -0.014855116, + -0.03827997, + -0.021248627, + 0.016004056, + -0.013179015, + -0.029602095, + 0.009752471, + 0.017369267, + -0.004538312, + 0.026168793, + -0.010056602, + -0.0101850135, + 0.02662837, + -0.01607164, + -0.03417082, + -0.02392498, + -0.027817858, + 0.00040402974, + 0.009968742, + 0.020559262, + -0.017098928, + 0.002115401, + -0.016720453, + 0.040415645, + -0.011827321, + 0.014733463, + 0.0009689955, + -0.014368505, + -0.020829601, + 0.013239841, + 0.020599814, + -0.02949396, + -0.004896511, + 0.013354735, + -0.021708203, + 0.0019041987, + -0.013800794, + -0.0059069023, + 0.007846583, + 0.01690969, + 0.000936048, + -0.0072923885, + 0.00485596, + 0.029034384, + -0.036495734, + 0.00984709, + 0.013030329, + -0.020424094, + 0.03354904, + 0.013990032, + 0.0348737, + 0.007691138, + -0.00083382614, + 0.008421052, + -0.011002788, + 0.022154262, + 0.015963504, + 0.00047478246, + 0.006802399, + -0.0013381769, + -0.00034827236, + 0.006423925, + -0.0026594577, + -0.011131199, + 0.013388528, + -0.019491425, + -0.022235364, + -0.022194812, + -0.0075694853, + -0.0083805015, + 0.010563487, + 0.0037847427, + -0.03611726, + -0.01461181, + -0.016004056, + 0.011543466, + -0.008576497, + -0.020464644, + -0.016896173, + 0.006140069, + 0.015868885, + -0.0076505872, + 0.01377376, + 0.02012672, + 0.024398074, + -0.01426037, + -0.0075289346, + -0.024492692, + -0.030304976, + -0.021018839, + -0.030791586, + 0.002321534, + 0.017869392, + 0.034900736, + 0.0057751117, + -0.0041902508, + -0.01642308, + -0.0014648982, + 0.011151474, + -0.014733463, + 0.02397905, + -0.006298893, + 0.0135304555, + 0.027871927, + 0.018991299, + -0.015517445, + -0.004967475, + -0.037063446, + 0.028250402, + 0.0006534595, + -0.011408296, + -0.0067483317, + -0.03346794, + -0.0020106446, + -0.0037374336, + -0.015125454, + 0.008583256, + -0.0038962576, + -0.00024013685, + 0.021600068, + -0.004291628, + 0.015747232, + -0.013935964, + 0.020059137, + -0.009198276, + -0.0097254375, + -0.010252598, + 0.0026391821, + 0.0025935625, + -0.026817605, + 0.0026459408, + 0.01337501, + -0.001041649, + 0.024425108, + -0.0143279545, + -0.005612909, + -0.01037425, + 0.006386753, + 0.028412605, + -0.009421306, + -0.013706176, + 0.00036094448, + -0.027817858, + -0.037333783, + -0.006292135, + 0.0106107965, + -0.01284785, + -0.014017065, + 0.0043997634, + -0.0048863734, + 0.018315451, + -0.011604291, + -0.0026915604, + 0.026344514, + -0.004176734, + 0.021748753, + -0.016801555, + 0.015963504, + 0.0100092925, + -0.014733463, + -0.0010450283, + -0.00079707697, + -0.016152741, + -0.018883163, + 0.009637577, + 0.019491425, + -0.011469122, + -0.02675002, + -0.0045856214, + 0.009002281, + -0.014422573, + -0.0040246686, + 0.04322717, + 0.019085918, + -0.0059846244, + -0.015287657, + 0.0037982597, + -0.010725691, + 0.020897187, + -0.0024347384, + -0.009914674, + -0.0074951425, + -0.013949481, + 0.0018822337, + -0.0016144293, + -0.009157726, + 0.013746726, + 0.018612824, + -0.015017319, + 0.005646701, + -0.014165752, + 0.018815579, + 0.0039266706, + -0.012949227, + 0.016058123, + 0.010401284, + 0.0079209255, + 0.020194305, + 0.018247867, + -0.0013145222, + 0.016531216, + 0.008306159, + 0.029710231, + -0.013537214, + -0.019045366, + -0.001580637, + 0.0036326773, + 0.015436344, + -0.005822421, + 0.004578863, + 0.0014370196, + -0.03757709, + -0.0011261299, + 0.015476895, + 0.0034518882, + 0.004420039, + 0.0047444454, + -0.024479175, + -0.022965278, + 0.0041091493, + 0.00016452649, + -0.01006336, + -0.0015400861, + -0.0075019007, + -0.007434316, + -0.004825547, + 0.019045366, + -0.01205035, + -0.014706429, + 0.021546, + 0.016693419, + -0.008495396, + 0.000274774, + 0.009630819, + 0.0057818703, + -0.0016085156, + 0.0047714794, + -0.014138717, + -0.006238067, + 0.014246853, + -0.009542959, + 0.00042916278, + -0.020464644, + 0.005400017, + 0.043416407, + 0.025817353, + 0.013456112, + 0.025749767, + -0.030169807, + -0.0017960632, + -0.030791586, + -0.026087692, + 0.018288417, + 0.024884684, + 0.02666892, + 0.004626172, + -0.016301427, + 0.021126974, + 0.02339782, + -0.019477908, + -0.006940948, + -0.022221847, + -0.04182141, + -0.01108389, + 0.0039942553, + -0.01841007, + -0.024384556, + -0.018802062, + -0.0140981665, + -0.005136437, + 0.007630312, + 0.00067120045, + 0.0045315535, + 0.0056872517, + 0.022681423, + -0.00035650926, + 0.010577004, + -0.031197093, + -0.0070085325, + 0.0064171664, + -0.019545494, + -0.036090225, + -0.019207569, + -0.016517699, + 0.014679395, + -0.0015721889, + -0.020694433, + -0.016450115, + 0.013618316, + -0.034143787, + -0.0062177917, + -0.027142012, + 0.01258427, + 0.019761764, + 0.0005677114, + 0.010955479, + -0.0077722394, + -0.008704908, + 0.011685393, + -0.01443609, + 0.0073802485, + 0.012151727, + -0.023641124, + 0.0256957, + 0.019180536, + -0.021464897, + -0.008258849, + 0.012523443, + 0.005704148, + -0.0072721126, + -0.007420799, + -0.01103658, + 0.00084692065, + 0.009820056, + -0.013091154, + -0.008745459, + 0.022667905, + 0.017950494, + -0.045633186, + 0.0010264425, + -0.0039773593, + -0.006940948, + -0.0042882487, + -0.01258427, + 0.009907916, + 0.005815663, + 0.010806792, + -0.02710146, + -0.0134425955, + -0.0033674072, + -0.010766242, + 0.013037087, + 0.0039874967, + 0.004220664, + 0.009617302, + 0.0071369433, + -0.0021508827, + -0.0138143115, + -0.002586804, + -0.030899722, + -0.01108389, + 0.012077385, + -0.00856298, + -0.012509926, + -0.014246853, + 0.010340458, + -0.037982598, + -0.015355242, + 0.0033606489, + -0.0014370196, + -0.035117008, + 0.020802569, + 0.013037087, + -0.023330236, + -0.0050012674, + 0.0038388106, + -0.009455099, + -0.0063056517, + -0.021478415, + 0.008968488, + -0.03133226, + -0.010441835, + -0.0039976346, + 0.0031156542, + -0.024087185, + -0.00856298, + -0.0029720368, + -0.011185266, + -0.013449354, + 0.21756864, + -0.00763707, + -0.0062887557, + 0.021708203, + -0.014909183, + 0.035171073, + 0.028601842, + -0.00057911634, + -0.0031122752, + 0.0024431867, + -0.015341725, + -0.011320436, + 0.007359973, + -0.0031511362, + 0.0016693419, + -0.03576582, + -0.022911211, + -0.027898962, + -0.028574808, + -0.02057278, + 0.032062177, + -0.009441582, + 0.014517192, + -0.007745206, + 0.026506716, + 0.0058697304, + -0.018018078, + 0.015963504, + 0.02039706, + 0.025601082, + 0.017517952, + 0.014517192, + -0.0041699754, + 0.015625581, + -0.0023722227, + 0.012854609, + 0.0024617724, + -0.0026037002, + 0.024776548, + 0.014814565, + 0.009178001, + -0.019045366, + -0.021140492, + -0.0015882403, + -0.017842358, + 0.018747993, + -0.009279378, + 0.0015890851, + -0.0298454, + 0.025790319, + -0.038712513, + -0.0055655995, + 0.020315958, + 0.031467434, + 0.014287404, + -0.00543043, + 0.020099688, + -0.009015798, + -0.0016668075, + -0.002608769, + -0.014354989, + 0.026479682, + -0.012550477, + 0.037766326, + -0.007170736, + -0.00026062346, + -0.014409056, + -0.0023384304, + 0.011685393, + -0.002529357, + 0.027479935, + 0.0027287318, + -0.00018659711, + -0.034143787, + -0.021532483, + -0.021518966, + 0.04206471, + 0.024289938, + 0.016747486, + 0.01682859, + 0.003832052, + 0.004737687, + 0.006940948, + 0.015368759, + -0.013577765, + -0.014314438, + -0.008225057, + 0.00068767427, + 0.01002281, + -0.015571513, + 0.011759737, + -0.005285123, + -0.0027912478, + -0.015787784, + 0.00012355327, + 0.010347216, + 0.0007434316, + 0.007954719, + -0.006467855, + 0.015044352, + -0.025574047, + 0.0073261806, + 0.005893385, + -0.0051330575, + -0.006961223, + 0.004071978, + -0.0019836107, + 0.0030092085, + -0.006900397, + 0.0013770381, + -0.0077384473, + -0.010928445, + -0.00042219312, + -0.0039976346, + 0.00008706809, + -0.005974487, + -0.005589254, + -0.020478161, + 0.024492692, + -0.033873446, + 0.020586297, + -0.014706429, + -0.014652361, + 0.014409056, + -0.014503675, + -0.015463377, + -0.006481372, + -0.019045366, + -0.018612824, + -0.036847174, + 0.026722988, + -0.025628116, + 0.020613331, + -0.0030058292, + 0.0028571428, + 0.0086643575, + -0.012604545, + 0.006025175, + -0.005014784, + -0.0082926415, + 0.010745966, + -0.012719439, + 0.02631748, + 0.005427051, + -0.001880544, + 0.003448509, + 0.018139731, + 0.015260624, + -0.010712174, + 0.015449861, + -0.0066030244, + -0.025925487, + -0.0037272957, + 0.015882403, + 0.023289684, + 0.00018469628, + -0.013483146, + -0.021708203, + 0.010299907, + 0.019139985, + -0.033062432, + -0.013800794, + 0.04790403, + 0.0032085832, + -0.019450875, + -0.014300921, + -0.1757202, + 0.015030836, + 0.024722481, + -0.026966292, + 0.025925487, + 0.028764045, + 0.00441328, + -0.017112443, + -0.0037779843, + 0.008394019, + 0.03452226, + 0.017896427, + -0.01695024, + -0.008914421, + -0.0024448761, + -0.0035448172, + -0.000100849036, + 0.017017825, + 0.017044859, + 0.0065185437, + 0.025803836, + -0.015706683, + 0.008218299, + -0.0038962576, + -0.02635803, + 0.03262989, + -0.010293148, + 0.0052378136, + 0.0043456955, + -0.0033217876, + -0.0095362, + 0.0011050097, + 0.013767002, + 0.02887218, + 0.01673397, + 0.019748246, + -0.00251584, + -0.011861114, + -0.014354989, + 0.018139731, + -0.009022556, + 0.0003429923, + 0.009860607, + -0.0033302356, + -0.011793529, + 0.018639859, + 0.0145577425, + -0.0044605895, + 0.0056061503, + -0.009637577, + 0.03284616, + -0.025668666, + 0.016666384, + 0.01854524, + 0.016166259, + 0.018626342, + 0.023168033, + 0.004582242, + 0.005143195, + -0.019329222, + -0.019045366, + 0.0078601, + 0.0034603362, + -0.005345949, + -0.017342232, + -0.02715553, + -0.009326687, + 0.021532483, + -0.016490664, + 0.008164231, + 0.0027354904, + -0.008860353, + 0.014354989, + -0.028115232, + 0.022830108, + -0.008975247, + 0.0056230463, + 0.02914252, + 0.012158486, + -0.0022133987, + -0.029061418, + 0.03395455, + -0.014449608, + -0.009117175, + 0.009428064, + 0.01337501, + 0.012753231, + 0.004132804, + -0.035468448, + -0.016544733, + 0.022329982, + -0.019194052, + 0.014530709, + -0.02697981, + -0.0038388106, + 0.01068514, + -0.017909944, + 0.03235955, + -0.014909183, + -0.0005427896, + -0.0040314267, + -0.015963504, + -0.021789305, + 0.020937737, + 0.010806792, + 0.016409563, + 0.0035617133, + 0.019937484, + 0.018247867, + -0.008576497, + -0.0068497085, + 0.0029281068, + 0.009651094, + 0.008319676, + -0.023843879, + 0.015612064, + 0.02573625, + -0.009373996, + 0.016842104, + -0.0056940103, + 0.032305483, + -0.0004671792, + 0.006927431, + 0.011185266, + -0.0074410746, + -0.028358538, + -0.07585706, + 0.0118678715, + -0.0029855538, + 0.008542705, + -0.010941962, + 0.04387598, + 0.016517699, + 0.03711751, + -0.0091239335, + 0.022897694, + -0.0053628455, + -0.009245586, + 0.00033665626, + -0.0074681086, + 0.03290023, + -0.010408043, + -0.0016921518, + -0.007346456, + -0.0029179691, + 0.022681423, + -0.0060217963, + -0.027033877, + -0.0016262566, + 0.0027321111, + -0.018396553, + 0.010421559, + -0.023735743, + 0.02962913, + 0.023127481, + 0.011665118, + -0.0046329307, + -0.007846583, + 0.020288924, + -0.025817353, + -0.039820902, + 0.0140981665, + -0.024830615, + 0.0025682184, + 0.026898708, + -0.029926501, + -0.0070220493, + 0.00010385866, + 0.00242798, + -0.007968235, + -0.015774267, + -0.005558841, + -0.014125201, + 0.01527414, + 0.0140981665, + -0.009009039, + -0.016679902, + -0.012104418, + 0.014882149, + -0.021600068, + 0.028493706, + 0.0030210358, + 0.010299907, + 0.016436597, + -0.046768606, + 0.002816592, + 0.00927262, + 0.012597786, + -0.015747232, + 0.013523697, + 0.031115992, + 0.0241007, + -0.022492185, + -0.029791333, + 0.023262652, + -0.008880628, + 0.00037087098, + 0.016341979, + -0.006106277, + -0.0062346878, + -0.01757202, + -0.021072907, + -0.016896173, + -0.011671877, + 0.016382528, + -0.018004563, + 0.0012942469, + -0.034900736, + 0.005568979, + 0.0059001436, + -0.0054676016, + 0.026939258, + 0.015368759, + -0.008238574, + 0.015517445, + -0.016666384, + -0.003585368, + 0.009907916, + 0.022478668, + -0.030413112, + -0.022140745, + 0.0314404, + 0.019613078, + 0.00095463375, + 0.010036327, + 0.0097795045, + -0.005041818, + -0.027520487, + -0.095267385, + 0.01872096, + 0.012530202, + -0.0006243136, + 0.0061434484, + -0.017544987, + 0.04038861, + -0.008556222, + 0.0122733805, + -0.011300161, + -0.057906564, + 0.006538819, + -0.013652108, + -0.014273887, + -0.024654895, + -0.027953029, + 0.03903692, + 0.012003041, + 0.006089381, + 0.0076573454, + 0.016869139, + 0.011009546, + 0.007312664, + -0.0008621272, + -0.026777055, + 0.010225564, + -0.0082994, + 0.024560276, + -0.009549717, + 0.0006733125, + -0.009029315, + -0.046173863, + 0.017680155, + 0.026303962, + -0.007332939, + -0.019491425, + -0.006873363, + 0.013449354, + 0.010779758, + 0.03682014, + -0.04509251, + 0.012111177, + 0.022248881, + -0.0052209175, + -0.004122666, + -0.01099603, + 0.019018332, + 0.008116921, + 0.026020106, + 0.009211794, + 0.0027963165, + 0.02406015, + 0.0051905042, + -0.0050350595, + -0.0035110246, + -0.03773929, + 0.023614092, + -0.009063107, + -0.004686998, + 0.007988511, + 0.014030582, + 0.004247698, + 0.01143533, + 0.012016558, + 0.025155023, + -0.011225818, + -0.014814565, + 0.0043152827, + 0.020545747, + -0.016815072, + -0.018856129, + 0.01218552, + -0.003818535, + 0.0134425955, + 0.009029315, + -0.0029940018, + 0.010766242, + -0.0063495818, + -0.028115232, + 0.021478415, + -0.00014330067, + -0.0018129593, + -0.031494465, + 0.01823435, + 0.026858157, + -0.012908677, + -0.024019599, + -0.02962913, + 0.000034927558, + 0.02269494, + -0.015220073, + 0.0045011407, + 0.010543212, + 0.010455352, + -0.005058714, + 0.013429078, + -0.010786517, + -0.019085918, + 0.03184591, + 0.02485765, + 0.0052918815, + -0.001196249, + -0.005663597, + -0.03208921, + -0.009279378, + 0.014463124, + -0.033630144, + -0.018707443, + 0.026479682, + 0.015787784, + 0.009259103, + 0.020153755, + 0.00041374503, + 0.019951, + 0.0064205457, + 0.010103911, + -0.007576244, + -0.03249472, + -0.02357354, + 0.018612824, + 0.0134425955, + 0.024438625, + 0.0031207232, + -0.014706429, + 0.0024178424, + -0.011678635, + 0.014368505, + -0.024006082, + 0.006450959, + -0.013949481, + 0.004071978, + 0.010097153, + -0.000086487285, + 0.0026374925, + -0.0042443187, + -0.0023519474, + 0.0017293233, + 0.010441835, + -0.024127735, + 0.034414124, + 0.005200642, + 0.014030582, + 0.0091239335, + -0.01509842, + 0.0265743, + -0.0047782375, + 0.008535947, + 0.004997888, + -0.04025344, + -0.0056433217, + -0.0014277266, + 0.0011117682, + -0.02843964, + -0.028277434, + -0.0074816253, + -0.011266368, + 0.019356256, + -0.005288502, + -0.013050604, + 0.038712513, + -0.00058840925, + 0.008319676, + 0.021424348, + -0.02339782, + 0.0021069527, + 0.020640366, + 0.005751457, + 0.008657599, + -0.038712513, + 0.00944834, + 0.018802062, + -0.018666891, + -0.013821069, + -0.008867112, + -0.0101512205, + -0.016652867, + -0.004247698, + -0.0066030244, + 0.01319929, + -0.009772747, + 0.020451128, + -0.024654895, + -0.0011007857, + 0.039793868, + -0.0051330575, + -0.0133006675, + 0.010570246, + -0.022586804 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.019221356, + 0.0036138783, + -0.007965014, + -0.0067472225, + -0.024066191, + 0.013718256, + -0.00505548, + -0.01043351, + 0.0065530343, + -0.04420912, + 0.015508738, + 0.0044893716, + 0.012171331, + -0.031412434, + -0.014574001, + -0.018997546, + 0.02109083, + -0.020788029, + -0.0024273545, + -0.024145182, + 0.0010812012, + -0.012987581, + -0.014258034, + -0.014073719, + -0.020603715, + 0.013757751, + 0.0028387704, + -0.028753042, + 0.009880567, + -0.0032534779, + 0.02904268, + -0.0067735533, + -0.009307876, + -0.030490864, + -0.008037423, + -0.019642645, + -0.035230376, + -0.00874835, + -0.020630045, + -0.028489737, + 0.009742331, + -0.017575692, + -0.0019023876, + 0.0013996373, + -0.007563472, + 0.008491627, + -0.006510247, + -0.010644155, + -0.004374175, + 0.00862328, + 0.011348499, + 0.012809849, + -0.034809086, + -0.009900315, + 0.0029523212, + 0.010736313, + -0.019274017, + -0.006329224, + -0.0033538633, + -0.011809285, + 0.0025985036, + 0.0050521884, + -0.032544654, + 0.013810413, + -0.009413199, + -0.0071750954, + -0.029569292, + -0.005197007, + -0.020235086, + -0.004663812, + 0.026054153, + 0.030543525, + -0.0048382524, + -0.030227557, + 0.010525667, + 0.0027087631, + -0.01702275, + 0.005789446, + -0.0062436494, + -0.0027169914, + 0.029937921, + -0.025567036, + 0.018233957, + 0.002512929, + 0.035572674, + 0.016956922, + -0.011282673, + 0.012842762, + -0.0035348863, + -0.015324424, + 0.018984381, + 0.012934919, + 0.0049139527, + 0.015495572, + -0.023486918, + -0.030675178, + 0.0009191034, + 0.04434077, + -0.0020291037, + -0.036020294, + -0.006832797, + 0.012625535, + 0.0066682305, + -0.0084258, + -0.008807594, + 0.02128831, + 0.01811547, + 0.0011494963, + 0.015008456, + -0.0037027441, + 0.0133759575, + 0.031149128, + -0.0011708899, + -0.04426178, + -0.018444603, + -0.019432, + 0.03243933, + -0.009465859, + -0.014429183, + -0.026804576, + 0.016127508, + 0.027673487, + 0.01209234, + -0.0064641684, + 0.023895042, + -0.005187133, + -0.014442348, + -0.0035381778, + 0.021696435, + -0.01092721, + 0.028805703, + -0.000857391, + 0.0066254437, + -0.0017197189, + -0.021577947, + 0.018273454, + -0.017615188, + -0.0025902751, + -0.0048119216, + -0.013744586, + 0.014416017, + 0.015087448, + -0.013836743, + 0.025145747, + -0.0012210828, + 0.018839562, + 0.019589985, + -0.00042129, + 0.01957682, + -0.0073989057, + 0.013468115, + -0.030464534, + 0.009860819, + 0.005628171, + 0.0079321, + -0.00002769344, + 0.021617442, + 0.028042115, + -0.002312158, + 0.014284364, + -0.004792174, + 0.003060935, + 0.0158642, + -0.024158347, + -0.0265676, + 0.009274962, + 0.018984381, + 0.00787944, + 0.0052200463, + -0.0061909882, + -0.013468115, + 0.01179612, + -0.025619699, + 0.014968961, + -0.0010984808, + 0.020156093, + -0.00038343974, + 0.0022232921, + -0.016180169, + -0.019050207, + -0.0072475043, + -0.018997546, + 0.01516644, + 0.020932848, + 0.0061547835, + -0.028621389, + 0.0019451749, + 0.009090648, + 0.008978743, + -0.014218537, + 0.013784082, + 0.04183936, + 0.014942629, + 0.014600332, + -0.6736427, + -0.040312186, + 0.000431164, + -0.013277218, + 0.028753042, + 0.015126944, + 0.022446858, + -0.0015321132, + -0.009228884, + 0.01224374, + -0.016193334, + 0.014310694, + 0.0010392369, + -0.0006257637, + 0.0054274, + -0.024053026, + 0.0031086593, + -0.0096830875, + 0.016469806, + -0.0012836179, + -0.0061909882, + 0.013290383, + -0.017430874, + 0.008307312, + 0.026620261, + -0.024105687, + 0.002277599, + -0.02446115, + -0.01273744, + 0.04162872, + -0.012941502, + 0.048658993, + 0.03451945, + -0.004943575, + 0.042787265, + -0.014863637, + -0.0048777484, + 0.03754747, + 0.022762826, + 0.05397778, + -0.005786155, + -0.012691361, + 0.006177823, + -0.009005073, + -0.0030197934, + -0.01288884, + 0.032228686, + -0.032886952, + 0.014679323, + -0.015535069, + 0.0120660085, + -0.02446115, + -0.0158642, + 0.010861383, + -0.0043215137, + 0.0062173186, + 0.019945448, + -0.011223429, + -0.0026445822, + 0.0011503191, + 0.0012432992, + 0.014955794, + -0.002351654, + -0.0156008955, + -0.0024849528, + 0.0016341445, + -0.038548034, + -0.01729922, + 0.0031432183, + -0.015679887, + 0.016588293, + 0.028147439, + -0.007517393, + 0.0014317278, + 0.011032532, + 0.027726147, + 0.009623843, + -0.008320478, + -0.008537705, + -0.02218355, + -0.003992381, + 0.018181296, + -0.0136919245, + -0.017259724, + 0.00014378989, + -0.038416382, + -0.032965943, + 0.025619699, + 0.009900315, + -0.0071750954, + 0.018971216, + 0.014613497, + 0.0022035441, + 0.022565346, + -0.0030428327, + 0.0129809985, + -0.003179423, + 0.004854709, + 0.0069578676, + -0.03157042, + -0.010229448, + -0.0031942339, + -0.005940847, + -0.011453822, + 0.0127440225, + -0.014613497, + -0.030490864, + -0.0042392304, + 0.038442712, + -0.014889969, + 0.028963687, + -0.010604659, + -0.023855546, + -0.0016423727, + 0.013639264, + -0.02047206, + 0.02572502, + -0.010630989, + 0.03451945, + -0.019668976, + 0.013277218, + 0.0069578676, + 0.0246323, + 0.0053319517, + -0.0029572584, + 0.014982126, + 0.0022232921, + -0.00054841756, + -0.0065267035, + -0.012987581, + 0.00051015586, + 0.018233957, + -0.016733112, + -0.012711109, + 0.012474134, + -0.0064115073, + 0.0027350937, + 0.0014638181, + 0.023565909, + -0.013106069, + -0.048237704, + -0.020985508, + -0.006230484, + 0.0039594676, + -0.0100451335, + -0.021920245, + -0.0016917427, + 0.0023993782, + -0.010703399, + 0.008438965, + -0.004344553, + -0.0032370212, + -0.013560272, + 0.013955231, + -0.016680451, + -0.0035546343, + 0.011677632, + -0.009847654, + -0.020564217, + 0.00579932, + 0.009873984, + 0.014468678, + -0.030701509, + -0.00308562, + 0.003531595, + -0.010005637, + 0.005644628, + 0.003531595, + 0.02215722, + -0.015653556, + -0.023631737, + -0.027647156, + -0.017154401, + 0.02954296, + -0.0027844636, + -0.008735185, + 0.005206881, + -0.0034460204, + 0.016746277, + -0.0069578676, + -0.0033193044, + -0.0032567692, + -0.03615195, + 0.009873984, + 0.027594496, + -0.012869093, + 0.013836743, + 0.014982126, + -0.004713182, + 0.0073594097, + -0.017694179, + 0.0340455, + 0.01095354, + 0.0028683925, + 0.010933792, + -0.013744586, + 0.017351883, + 0.011901442, + -0.0020373322, + 0.01980063, + 0.022065064, + -0.0078070303, + 0.006520121, + -0.033360902, + 0.026027823, + -0.022012403, + 0.0010589848, + -0.008195407, + 0.009821323, + -0.009834488, + 0.0116249705, + -0.012632118, + -0.01452134, + -0.0033176588, + -0.005197007, + 0.02091968, + 0.0053286604, + 0.009992472, + 0.0051015588, + 0.009511938, + 0.01918186, + -0.029569292, + 0.018892223, + -0.022828652, + -0.004433419, + -0.0027449676, + 0.014402851, + 0.029727275, + 0.0025688815, + 0.0005064531, + -0.036494248, + -0.01578521, + -0.006990781, + -0.002958904, + 0.0004784768, + -0.011434074, + 0.0011700671, + -0.023500083, + 0.01727289, + 0.004453167, + 0.02322361, + -0.0053681564, + 0.019458331, + -0.0119936, + 0.009103813, + -0.01107861, + 0.035651665, + -0.00025980923, + -0.017825833, + 0.028674051, + -0.01937934, + -0.018892223, + -0.008188824, + 0.008616697, + 0.0037850274, + -0.01105228, + 0.004301766, + 0.0143238595, + -0.0011338625, + 0.036072955, + 0.016311822, + 0.0018233957, + 0.0014885032, + -0.0079781795, + 0.0073396615, + -0.007293583, + 0.017786337, + -0.009228884, + 0.003521721, + -0.005177259, + -0.012829597, + 0.0031958795, + -0.007984762, + -0.0055590533, + 0.0055623446, + -0.009228884, + -0.01606168, + -0.0040285857, + 0.013389123, + -0.000023720704, + 0.0019534032, + -0.04347186, + 0.012039678, + -0.009097231, + -0.008702272, + -0.014495009, + -0.022736495, + -0.0049304096, + -0.018523594, + 0.030569855, + 0.010170204, + 0.009841071, + -0.007451567, + -0.0072540874, + -0.012072591, + -0.010163621, + 0.018826397, + -0.028937357, + -0.019023877, + 0.0033867767, + 0.008346808, + -0.007945266, + 0.015324424, + -0.02044573, + 0.03625727, + -0.009037987, + -0.0035447604, + -0.018944884, + -0.0015938256, + -0.003943011, + 0.01030844, + -0.0061514922, + -0.01338254, + 0.016509302, + -0.004170113, + -0.0028058572, + -0.025145747, + 0.0059210993, + 0.013310131, + 0.0017081993, + -0.0181418, + -0.01606168, + -0.023855546, + -0.021275144, + 0.075937524, + -0.008853673, + 0.018523594, + 0.011822451, + 0.014797811, + 0.0104400925, + -0.0120660085, + -0.0158642, + -0.003531595, + -0.011124689, + 0.0035941303, + 0.0005315495, + 0.0029572584, + 0.00066978525, + 0.0017213646, + -0.0223547, + -0.0074054883, + -0.016272327, + 0.007234339, + -0.015113778, + 0.013547107, + 0.006753805, + -0.008629862, + 0.038100414, + 0.008234903, + 0.017430874, + 0.008511375, + 0.035704326, + 0.02577768, + -0.0127769355, + -0.0035447604, + 0.03675755, + -0.020063937, + 0.008991908, + -0.0012013348, + -0.0007475429, + 0.032623645, + 0.013955231, + -0.018813232, + 0.0032386668, + 0.005424109, + 0.017983817, + 0.02039307, + -0.009314459, + 0.014863637, + -0.014863637, + 0.00021023359, + 0.010512502, + -0.0061416184, + -0.000029621953, + 0.036915537, + 0.022762826, + -0.026909899, + -0.0143238595, + -0.016088013, + 0.034782756, + 0.009360537, + -0.0057137455, + 0.01105228, + 0.0040252944, + -0.0022446858, + -0.02292081, + 0.0073659923, + -0.0129020065, + -0.028884696, + -0.033913843, + -0.0063983416, + -0.019708473, + -0.026778245, + 0.000012953176, + 0.0053615733, + -0.017615188, + -0.02215722, + 0.009933229, + 0.022473188, + -0.0034558945, + 0.020287747, + -0.032807957, + -0.0036731223, + 0.021893915, + 0.009426364, + -0.03117546, + -0.011894859, + -0.0052233376, + -0.0068525453, + 0.018918553, + 0.025409052, + -0.02091968, + -0.018497264, + -0.0029128254, + 0.0265676, + 0.0075766374, + 0.008169076, + -0.0016563609, + -0.023355264, + 0.0060428786, + 0.018273454, + 0.026449112, + -0.013422036, + -0.016733112, + 0.025330061, + 0.00009375143, + 0.007392323, + -0.0031168878, + 0.01682527, + -0.0012646929, + 0.015614061, + 0.0040779556, + -0.008307312, + 0.00032584148, + 0.04834303, + -0.021670105, + 0.010920627, + -0.00078292465, + -0.022565346, + 0.020748531, + 0.016193334, + 0.03375586, + -0.0074384017, + -0.010473006, + 0.003551343, + -0.022710163, + 0.025119416, + 0.023210445, + 0.006971033, + -0.03154409, + 0.008195407, + -0.009827905, + -0.007155347, + -0.016640956, + -0.019524159, + 0.015311258, + -0.00916964, + -0.020458896, + -0.046947505, + -0.0056117144, + -0.02342109, + 0.0168516, + -0.01273744, + -0.02064321, + -0.0018579547, + -0.00014049857, + 0.004779008, + 0.006088957, + -0.010301857, + -0.016719947, + 0.0117500415, + 0.0037586966, + -0.00025919208, + 0.0028058572, + 0.014639827, + 0.020063937, + -0.0021130326, + 0.008906334, + -0.0034756425, + -0.035388358, + -0.020880185, + -0.011256342, + 0.009577765, + 0.00864961, + 0.020735366, + 0.02544855, + 0.018049642, + -0.010986453, + -0.01244122, + 0.0024635592, + -0.021235649, + -0.00031411613, + -0.016311822, + 0.00914331, + 0.01625916, + 0.027857801, + -0.022762826, + -0.007997927, + -0.008366556, + 0.024987763, + -0.011190516, + -0.014481843, + -0.011651302, + -0.03907465, + -0.0026248342, + -0.0064049247, + 0.0016004083, + -0.0037652794, + 0.006289728, + -0.002081765, + 0.022091394, + -0.014402851, + -0.009742331, + -0.013448367, + 0.019142365, + 0.003380194, + 0.019484662, + 0.008491627, + -0.0032633517, + -0.010038551, + -0.023763388, + 0.004351136, + -0.0047987564, + 0.0002133192, + 0.008109832, + -0.021051334, + 0.00520359, + -0.0019484663, + 0.0052990383, + 0.03446679, + 0.008188824, + -0.013797248, + 0.008873421, + -0.012566291, + -0.031149128, + -0.017088575, + -0.015324424, + -0.025659194, + 0.007813613, + 0.03117546, + -0.0018694743, + 0.040233195, + -0.023263106, + -0.016088013, + 0.014942629, + -0.008208572, + 0.022460023, + 0.006911789, + 0.04581529, + 0.010604659, + -0.0048876223, + -0.021340972, + -0.011987017, + -0.015442912, + -0.0077280384, + -0.006148201, + 0.0102097, + 0.0019369465, + -0.03615195, + 0.008465296, + 0.02485611, + -0.010288692, + -0.008807594, + 0.024553308, + 0.0030494155, + -0.0042820177, + -0.018707909, + -0.016561963, + -0.0036764136, + 0.022446858, + -0.02668609, + -0.01296125, + -0.0052002985, + -0.0128230145, + -0.008445548, + 0.010492754, + -0.025066756, + 0.0035645084, + 0.023236776, + -0.02698889, + 0.008866838, + -0.019142365, + -0.014192207, + 0.0008812531, + -0.001876057, + 0.029148001, + 0.0027729438, + 0.00617124, + -0.013428618, + 0.014810977, + -0.002777881, + 0.0064246724, + -0.020630045, + 0.025830343, + -0.012276654, + -0.020287747, + -0.006898624, + -0.008175659, + 0.009966142, + 0.0054043606, + -0.0045157024, + -0.006421381, + -0.021788592, + -0.0028700382, + 0.036915537, + 0.0102097, + -0.018220792, + -0.01679894, + -0.005325369, + -0.019366175, + -0.010946957, + -0.0041371994, + -0.019313512, + -0.023486918, + -0.018457768, + -0.010881131, + 0.00308562, + 0.014508175, + -0.0045025367, + -0.005980343, + 0.02109083, + 0.011493318, + -0.027568163, + 0.018879058, + 0.02059055, + 0.023881877, + -0.004897496, + 0.020261416, + -0.005851981, + -0.01477148, + 0.011605223, + 0.0025639446, + -0.00039681073, + -0.027647156, + 0.020090267, + 0.019247686, + 0.0168516, + 0.023355264, + 0.029305985, + -0.026370121, + 0.0015855973, + -0.031149128, + -0.02213089, + 0.00021599341, + 0.010525667, + 0.004867874, + 0.02448748, + -0.030569855, + 0.014824142, + 0.028331753, + -0.020340407, + 0.007675377, + -0.027594496, + -0.01283618, + 0.007102686, + -0.0035184298, + -0.007971597, + -0.023131454, + -0.016469806, + 0.005516266, + -0.0032057536, + 0.004963323, + 0.00080267264, + 0.0005689883, + 0.0024668504, + 0.03035921, + -0.0150479525, + 0.0008861901, + -0.010551997, + -0.019129198, + -0.01117735, + 0.0018612461, + -0.03199171, + -0.023802884, + -0.01169738, + 0.01679894, + 0.008544288, + -0.028911026, + -0.04170771, + -0.00034332665, + -0.022249378, + -0.0010556935, + -0.021512121, + 0.0074054883, + 0.02213089, + -0.008735185, + 0.010940375, + 0.018576255, + 0.006230484, + 0.0126189515, + -0.015350754, + -0.024303166, + 0.007971597, + -0.016575128, + 0.04299791, + 0.000023245004, + -0.022960305, + -0.022051899, + 0.030464534, + 0.013402288, + 0.0052792905, + 0.0038278145, + -0.03199171, + 0.006760388, + -0.010328188, + -0.0028338335, + -0.005578801, + 0.0009520167, + 0.006760388, + -0.038916662, + 0.008261234, + 0.0013222911, + -0.012803267, + -0.005697289, + 0.009873984, + 0.0014193852, + 0.012079174, + 0.025790848, + -0.016548797, + -0.026383286, + 0.0045157024, + -0.019221356, + 0.005489935, + 0.0000777062, + -0.0070961034, + 0.009617261, + -0.01276377, + -0.018036477, + -0.023078792, + 0.014731985, + -0.025685525, + -0.013797248, + 0.011302421, + 0.0033571546, + -0.014258034, + -0.01918186, + 0.003913389, + -0.022723328, + 0.008307312, + 0.0013247596, + -0.03401917, + -0.0030905572, + 0.017417708, + 0.010802139, + -0.013520776, + -0.02342109, + 0.004973197, + 0.0084521305, + 0.011565727, + -0.007168513, + 0.019919118, + -0.024842944, + 0.0022578512, + -0.008656193, + -0.017773172, + -0.046921175, + -0.016351318, + 0.0039561763, + 0.00021002788, + 0.0056413366, + 0.23507982, + 0.0023549453, + -0.0056512104, + 0.03420348, + 0.009439529, + 0.035309367, + 0.012507047, + -0.006059335, + -0.011256342, + 0.01982696, + -0.0229998, + -0.0013823578, + -0.003281454, + -0.0046572294, + 0.012467551, + -0.024948267, + -0.023039296, + -0.022644337, + -0.03243933, + -0.013560272, + 0.017338717, + -0.005226629, + 0.001489326, + -0.010604659, + -0.003130053, + 0.020801194, + -0.026054153, + -0.0023944413, + 0.023328934, + 0.028805703, + 0.0076687946, + 0.011940938, + -0.0018447894, + 0.0073462445, + 0.009854237, + -0.002988526, + 0.02361857, + -0.0013510901, + 0.00052249833, + 0.005358282, + -0.023763388, + -0.0008664421, + 0.011835616, + -0.006352263, + 0.0051838416, + 0.0012745669, + 0.008801011, + 0.0067373486, + -0.0062864367, + 0.024290001, + -0.017365048, + 0.005888186, + 0.03249199, + 0.027752478, + 0.00022319319, + -0.00453545, + 0.029648283, + -0.019432, + -0.0073594097, + 0.00091334357, + -0.014705654, + 0.030885823, + -0.021841254, + 0.017259724, + -0.021393633, + -0.0061284527, + -0.030069573, + -0.000862328, + -0.0015066054, + -0.025935665, + 0.007997927, + -0.030517194, + -0.02109083, + -0.005907934, + -0.032281347, + -0.023434255, + 0.017509865, + 0.010802139, + 0.012842762, + 0.02909534, + -0.015074283, + 0.006421381, + -0.00007791191, + 0.009709418, + -0.00083147176, + -0.019537324, + 0.007675377, + 0.0021821505, + 0.0040680817, + -0.0112760905, + 0.0030773918, + -0.02059055, + -0.0009799929, + -0.030464534, + -0.0019846708, + -0.0014531213, + -0.011190516, + 0.014705654, + 0.0034756425, + 0.0046901423, + -0.010380849, + -0.001915553, + 0.020735366, + 0.010894296, + -0.0070171114, + -0.0100451335, + 0.026580766, + -0.00047971107, + -0.0022216465, + -0.022288874, + -0.009505356, + -0.031860057, + 0.007622716, + -0.010644155, + -0.0027416763, + 0.0155219035, + -0.010881131, + -0.014982126, + 0.009702835, + -0.01053225, + 0.030464534, + -0.02693623, + -0.015693052, + -0.00041018176, + -0.017549362, + -0.013250887, + 0.017259724, + -0.019695308, + -0.0037652794, + -0.042050008, + 0.017391378, + 0.010466424, + 0.022499518, + -0.009340789, + 0.013244304, + 0.016509302, + 0.000004605931, + -0.011842199, + -0.0069183717, + 0.00055623444, + 0.009149892, + -0.00929471, + 0.01937934, + 0.016298657, + -0.011769789, + -0.013211391, + 0.01603535, + 0.0007997927, + -0.013171895, + 0.020998674, + -0.0025392596, + -0.035520013, + -0.015943194, + -0.009538269, + 0.039522268, + -0.0030823287, + -0.023328934, + 0.00369287, + 0.014810977, + 0.013626099, + -0.03209703, + -0.0029967541, + 0.016601458, + -0.032176025, + -0.03828473, + -0.008583784, + -0.17030647, + -0.007965014, + 0.009380285, + -0.031149128, + 0.013955231, + 0.0028042116, + 0.005878312, + 0.0029556127, + -0.010380849, + -0.0013659012, + 0.032413, + 0.017207064, + -0.010973288, + -0.035441022, + 0.0050719366, + -0.020169258, + -0.019432, + 0.006599113, + 0.024803448, + 0.0019747969, + 0.021577947, + -0.011124689, + 0.0027153457, + -0.0005368979, + -0.0026561017, + 0.03157042, + -0.009755497, + -0.008017675, + -0.0067735533, + -0.015666721, + -0.017259724, + 0.0035381778, + 0.015153275, + 0.024092522, + -0.004301766, + -0.0013823578, + -0.024579639, + -0.00919597, + -0.004522285, + 0.013560272, + -0.010848218, + 0.00803084, + 0.0009824614, + -0.01157231, + -0.0059869257, + 0.010802139, + 0.011282673, + -0.008866838, + -0.006056044, + -0.006572782, + 0.017970651, + -0.011842199, + 0.0012564645, + 0.019010711, + 0.022446858, + 0.00192049, + 0.0036237522, + 0.018102305, + 0.0132969655, + 0.0091301445, + -0.01876057, + -0.009505356, + 0.013981562, + -0.0026890151, + -0.020182423, + -0.011756624, + 0.008366556, + 0.022315204, + -0.02317095, + 0.01980063, + 0.0051476373, + 0.003712618, + -0.01747037, + -0.009452694, + 0.01960315, + -0.00079362147, + -0.009176223, + 0.03580965, + 0.0105980765, + -0.013211391, + -0.020774864, + 0.044525087, + -0.021275144, + 0.005977052, + 0.0022051898, + 0.026093649, + 0.0030066282, + -0.0076095504, + -0.01606168, + -0.021591112, + 0.01231615, + -0.008419218, + -0.0066089868, + -0.006984198, + 0.0009939811, + 0.0013988145, + -0.021670105, + 0.03831106, + -0.0012054489, + -0.000015813803, + -0.00014574412, + -0.014429183, + -0.007221174, + 0.022065064, + 0.01253996, + 0.018800067, + 0.016772607, + 0.016970087, + 0.0046802685, + 0.00016559495, + -0.027410181, + -0.009643591, + 0.011223429, + 0.006500373, + -0.012230575, + 0.0136919245, + 0.019037042, + -0.015298093, + 0.021591112, + 0.006483916, + 0.02128831, + -0.0132969655, + 0.013125816, + -0.0001234248, + -0.014363356, + -0.013448367, + -0.058822617, + -0.009472442, + 0.009419781, + 0.01727289, + -0.010782391, + 0.04839569, + 0.02091968, + 0.028358083, + -0.0082151545, + -0.003041187, + 0.0043708836, + -0.029990582, + 0.0022627881, + -0.00020848507, + 0.045393996, + 0.0010836698, + 0.011710545, + -0.00028531702, + 0.004094412, + 0.01957682, + -0.009841071, + -0.0037455314, + -0.014350191, + -0.013705091, + -0.0076292986, + 0.0022315204, + -0.0174967, + 0.008564035, + 0.015772045, + 0.01851043, + 0.02698889, + -0.0068130493, + 0.0005599372, + -0.013033659, + -0.004252396, + 0.005878312, + -0.022367865, + 0.005684124, + 0.0379161, + -0.029964251, + -0.0014539441, + 0.0057664067, + 0.0010647447, + -0.013705091, + -0.016601458, + -0.0008664421, + -0.021472625, + 0.019010711, + 0.03754747, + -0.020656375, + -0.019682143, + -0.003771862, + 0.00010809956, + -0.0084258, + 0.028647719, + -0.0015600895, + 0.020208754, + 0.00874835, + -0.025040423, + 0.007602968, + 0.01918186, + 0.006780136, + -0.0116710495, + 0.003972633, + 0.021419963, + 0.0015806603, + -0.015930029, + -0.026383286, + 0.020300912, + -0.0024997636, + -0.01305999, + -0.00023512426, + -0.010492754, + 0.0063983416, + -0.0106770685, + -0.034756426, + -0.020774864, + -0.006158075, + -0.0008236549, + -0.021999236, + 0.010670486, + -0.041102104, + -0.004637481, + 0.0011009492, + 0.0013025431, + 0.020551052, + 0.012263489, + -0.013277218, + 0.016088013, + -0.01288884, + 0.020169258, + 0.0053944867, + 0.03425614, + -0.03167574, + -0.009222302, + 0.029305985, + 0.005486644, + 0.02213089, + 0.0052134637, + 0.02086702, + -0.01519277, + -0.031781062, + -0.09600146, + 0.007221174, + 0.016522467, + -0.0017065536, + 0.007129017, + -0.017378213, + 0.020959178, + -0.0049995272, + 0.010512502, + -0.02059055, + -0.037758116, + 0.009261797, + -0.004005546, + -0.01980063, + -0.03151776, + -0.0017888368, + 0.028121108, + 0.01600902, + 0.017773172, + 0.02294714, + 0.015574564, + 0.0032732259, + 0.008392886, + -0.00049411063, + -0.03633626, + 0.011565727, + 0.0028535814, + 0.03170207, + -0.01224374, + 0.013053407, + 0.0015288219, + -0.026778245, + 0.015877366, + 0.03154409, + -0.014982126, + -0.010196535, + 0.004933701, + 0.014587166, + 0.018721074, + 0.03580965, + -0.034861747, + 0.0108350525, + 0.02002444, + -0.0059968, + -0.015679887, + 0.005233212, + 0.015574564, + 0.018233957, + 0.035362028, + -0.007793865, + 0.013402288, + 0.030622516, + -0.004170113, + -0.006559617, + -0.0077280384, + -0.03654691, + 0.010762643, + -0.0021969615, + -0.0050686453, + -0.010453258, + 0.02361857, + 0.01045984, + 0.01732555, + 0.007352827, + 0.014982126, + -0.007352827, + -0.017694179, + 0.007155347, + 0.01876057, + -0.0053418255, + -0.03459844, + 0.006161366, + 0.014337026, + 0.02901635, + 0.019853292, + -0.013448367, + -0.01598269, + -0.0099200625, + -0.019432, + 0.019339845, + 0.0040483335, + -0.019168695, + -0.0340455, + 0.021314641, + 0.028963687, + -0.010315022, + -0.012553126, + -0.015205936, + -0.009235467, + 0.034756426, + -0.005726911, + -0.009933229, + 0.012164748, + -0.00612187, + 0.019932283, + 0.03246566, + 0.006589239, + -0.01789166, + 0.035888642, + -0.0072870003, + 0.0023138036, + 0.016167004, + 0.013112651, + -0.0021574656, + -0.02339476, + 0.013560272, + -0.014113215, + -0.0217096, + 0.00916964, + 0.0014917945, + 0.006602404, + 0.008346808, + 0.009064318, + 0.028121108, + 0.0064345463, + 0.0040252944, + -0.016127508, + -0.02954296, + -0.01603535, + -0.0060922485, + 0.013836743, + 0.013586602, + 0.013652429, + -0.005506392, + 0.014995291, + -0.00966334, + 0.008208572, + -0.030648848, + 0.007826778, + 0.001890868, + 0.0050324406, + 0.0070566074, + -0.000534018, + -0.007115851, + -0.019129198, + 0.0075108106, + 0.012052843, + 0.011677632, + -0.0062568146, + 0.03617828, + 0.018194461, + -0.00322221, + 0.0031168878, + -0.0024717874, + 0.019260852, + 0.0057400763, + 0.012204245, + -0.0030839744, + -0.032202356, + 0.027410181, + -0.0021969615, + 0.013270635, + -0.014402851, + -0.01224374, + -0.026409617, + -0.0015329361, + 0.016693616, + -0.0034163985, + 0.0076095504, + 0.025514375, + -0.006266689, + 0.02002444, + 0.0073594097, + -0.011164185, + -0.009926646, + 0.026554435, + 0.0021327806, + 0.009518521, + -0.0156008955, + 0.013547107, + 0.0011050634, + -0.0252774, + -0.024763953, + 0.009623843, + 0.00852454, + -0.0008680878, + 0.006342389, + 0.007945266, + 0.008616697, + -0.0037586966, + 0.020801194, + -0.016601458, + -0.014271199, + 0.019168695, + -0.01851043, + 0.004301766, + 0.0047822995, + -0.003248541 + ] + }, + { + "object": "embedding", + "index": 5, + "embedding": [ + 0.0021845475, + 0.008128393, + 0.0016116065, + -0.0032902234, + -0.03658782, + 0.004707499, + -0.017878445, + -0.0045868796, + 0.010058301, + -0.03318368, + -0.004885077, + 0.0063559613, + 0.019768145, + -0.014166054, + -0.02752798, + -0.01904443, + 0.02173826, + -0.025544465, + -0.0021460163, + -0.026670244, + -0.00603431, + 0.033022854, + -0.012115528, + -0.020331034, + 0.0038229583, + 0.005575287, + -0.002809422, + -0.015680496, + -0.0014516185, + -0.011733566, + 0.01049387, + 0.0016526504, + 0.009689742, + -0.021537228, + 0.0055250293, + -0.02439188, + -0.014233065, + -0.009863969, + -0.016993904, + -0.020331034, + 0.019392885, + -0.018722778, + -0.008249013, + -0.00634926, + -0.007458287, + 0.01150573, + 0.0060008047, + 0.005149769, + -0.011840784, + 0.013227904, + 0.023560949, + 0.014005228, + -0.017865043, + -0.0012363467, + -0.000084129795, + -0.009046439, + -0.023467133, + -0.013817598, + -0.01125109, + -0.0092072645, + 0.0038665151, + 0.005173223, + -0.018092878, + -0.0010579309, + -0.0025363537, + -0.009488709, + -0.006342559, + 0.008007774, + -0.03224553, + -0.011780474, + 0.010949542, + 0.021698052, + -0.008604169, + -0.0045734774, + 0.038732164, + 0.003682236, + -0.031655837, + -0.00010491357, + 0.011793876, + -0.00007125118, + 0.021255782, + -0.018856801, + 0.0066709113, + 0.015613484, + 0.0046203854, + 0.015626887, + -0.016136168, + 0.025785703, + -0.008222208, + -0.00311097, + 0.010916037, + 0.008966027, + -0.00591034, + 0.004627086, + -0.030127993, + -0.025343433, + 0.0064765806, + 0.018883605, + -0.0061549293, + -0.043128062, + -0.0096562365, + 0.02161764, + -0.011874289, + -0.018012466, + -0.030020777, + 0.014045435, + 0.010835624, + -0.01521142, + 0.0017339009, + 0.011137172, + 0.0020287477, + 0.03181666, + -0.006838438, + -0.039080616, + -0.032272335, + -0.018374324, + 0.014460901, + -0.011512431, + -0.019567113, + -0.026817666, + 0.017784629, + 0.017302154, + -0.00015025047, + 0.001991892, + 0.018709376, + -0.003588421, + -0.017597, + -0.0056523494, + 0.0057461644, + 0.002444214, + 0.020974336, + 0.02299806, + 0.017865043, + 0.0012505865, + -0.014809356, + 0.015546474, + -0.021322792, + 0.010574282, + -0.0115928445, + -0.012209343, + 0.021135163, + 0.017985662, + -0.013790794, + 0.0056422977, + 0.0020320984, + 0.017717618, + 0.027259937, + 0.02180527, + 0.018803192, + -0.0025631578, + 0.008456745, + -0.005022449, + 0.006278899, + 0.008470148, + 0.016417611, + 0.0046203854, + 0.0141124455, + 0.01740937, + 0.0044160024, + 0.0034778533, + 0.009783557, + -0.003551565, + 0.009763453, + 0.008510354, + 0.0048281183, + 0.013650072, + 0.022555789, + 0.018937213, + 0.017114524, + 0.00068392756, + -0.014702139, + 0.03004758, + -0.0020220468, + 0.02445889, + 0.017422773, + 0.010373251, + 0.013710381, + 0.00414796, + -0.023668166, + -0.0054144613, + -0.033290897, + -0.0002041731, + 0.007310863, + 0.007994372, + 0.0028931852, + -0.007310863, + 0.0182269, + 0.00855056, + 0.006406219, + -0.013026873, + 0.0058734845, + 0.038303293, + 0.03229914, + 0.025115596, + -0.6776118, + -0.042752802, + -0.007404678, + -0.0079005575, + 0.019218657, + 0.028224891, + 0.010225827, + 0.012276353, + 0.004741004, + -0.005776319, + -0.018977419, + 0.032593984, + 0.0061448775, + 0.0013418884, + 0.008872212, + -0.015801115, + -0.013274812, + -0.015787711, + 0.006881995, + 0.006272198, + -0.0101990225, + 0.024445489, + -0.0063593118, + 0.0055149775, + 0.02238156, + -0.030127993, + 0.013650072, + -0.013965022, + -0.013375328, + 0.016055755, + -0.030181602, + 0.036346585, + 0.0028747574, + -0.016953697, + 0.051705427, + -0.008148496, + -0.010708304, + 0.024043426, + 0.008899016, + 0.045808487, + 0.00094987615, + -0.028064065, + 0.023614557, + -0.018561954, + -0.024525901, + 0.007518596, + 0.020156806, + -0.01941969, + 0.010400055, + -0.013670175, + -0.0028077466, + -0.029216649, + -0.02708571, + -0.011425318, + 0.010507272, + -0.0069356035, + 0.0069356035, + -0.007257255, + -0.0017523288, + 0.003129398, + -0.005990753, + 0.020625882, + -0.039482683, + -0.012678417, + -0.0042216717, + -0.0014733969, + -0.04393219, + 0.0018210147, + 0.018025868, + 0.008188703, + -0.0077062263, + 0.007679422, + -0.009642834, + 0.008919119, + 0.038169272, + 0.022220735, + 0.01754339, + -0.026201168, + -0.016833078, + -0.011948001, + 0.010916037, + -0.003608524, + -0.013180997, + -0.0049755415, + 0.005129666, + -0.015305235, + -0.023172287, + 0.0044294046, + 0.009750051, + -0.022033105, + 0.017717618, + 0.009863969, + 0.012953161, + 0.018066075, + -0.016296992, + 0.01584132, + -0.019727938, + 0.0044160024, + 0.02218053, + -0.027032102, + -0.00004824244, + -0.013100584, + -0.0007304162, + -0.0108289225, + -0.012805738, + -0.0069222013, + -0.024793945, + 0.00204215, + 0.0119413, + -0.02439188, + 0.0043020844, + -0.012336663, + -0.02376198, + -0.0043858476, + 0.019821754, + -0.03211151, + 0.0099711865, + -0.0062185894, + 0.00798097, + -0.00011171934, + 0.0141124455, + -0.01011861, + 0.038624946, + -0.008537158, + -0.00072622806, + 0.030690882, + 0.01062119, + -0.003323729, + -0.009629432, + 0.0056221946, + -0.007217048, + 0.018883605, + 0.012497488, + -0.0067144684, + 0.0038162572, + -0.0101521155, + 0.0037123905, + -0.00008203571, + 0.01539905, + -0.041519806, + -0.0439858, + -0.0067647262, + 0.019513505, + -0.000016072088, + -0.0036286274, + -0.023426928, + -0.017020708, + 0.0007655968, + -0.011432019, + 0.037499167, + -0.0029266907, + -0.011170677, + -0.03280842, + 0.01998258, + 0.0015110904, + -0.013469143, + 0.0014717217, + -0.012939759, + -0.0008837031, + -0.012329962, + 0.0088923145, + 0.0014859614, + -0.029136235, + 0.019768145, + 0.00710313, + -0.00066549965, + 0.013643371, + 0.0067044166, + 0.010440261, + -0.026335191, + -0.018709376, + -0.011988208, + 0.004657241, + 0.01766401, + 0.013221203, + 0.004784561, + 0.0005616331, + -0.0073510697, + -0.0053206463, + -0.025450649, + 0.010567581, + -0.03776721, + -0.02502178, + 0.0024676677, + 0.014621726, + -0.008852108, + 0.004013939, + 0.017141327, + -0.016859882, + 0.0012489113, + -0.017422773, + 0.012236147, + 0.01326141, + 0.005866783, + 0.021644443, + -0.008429941, + 0.00035390005, + 0.010279436, + 0.006895397, + 0.019245462, + 0.014715541, + -0.010373251, + 0.014099043, + -0.018334117, + 0.029297061, + -0.04141259, + -0.006868593, + -0.0132145025, + 0.02520941, + 0.019299071, + 0.0025028482, + -0.010949542, + -0.013938217, + -0.0076191123, + 0.01609596, + 0.015787711, + 0.01614957, + 0.010822222, + -0.004486364, + -0.0038899689, + 0.019634124, + -0.020880522, + 0.013382029, + 0.003796154, + -0.0065469416, + 0.004117805, + 0.0009054816, + 0.023239298, + 0.02224754, + 0.0017925352, + -0.005776319, + -0.010259332, + -0.01017892, + 0.017865043, + 0.005769618, + -0.014594922, + 0.012651613, + -0.010574282, + 0.038356904, + 0.0021644444, + 0.019701134, + 0.0047477055, + 0.027849631, + -0.010534076, + -0.011083564, + -0.0082155075, + 0.033961, + -0.008376333, + 0.0031578774, + 0.0065770964, + -0.018159889, + -0.0060376604, + -0.008751593, + 0.0012732026, + 0.009756752, + -0.017516587, + -0.0041446094, + 0.007585607, + 0.004298734, + 0.045594055, + 0.0017439525, + -0.00090799446, + 0.0010947867, + -0.011867588, + 0.005990753, + 0.008832005, + 0.011318101, + 0.0036889368, + -0.013790794, + -0.0055551836, + -0.026817666, + -0.0124036735, + -0.007404678, + -0.0033170278, + 0.014715541, + -0.018937213, + 0.0024592914, + -0.0026502716, + 0.02275682, + 0.01143872, + -0.014889769, + -0.03640019, + 0.01766401, + -0.005762917, + 0.0034678017, + -0.022783626, + -0.028439324, + 0.003665483, + -0.02841252, + 0.018468138, + 0.011204183, + 0.009482008, + 0.002784293, + -0.010922737, + -0.016176375, + 0.0056925556, + 0.018829996, + -0.03607854, + -0.019513505, + -0.0049688406, + -0.008074785, + -0.006248744, + -0.002023722, + 0.0007999398, + 0.019660927, + 0.003601823, + -0.006587148, + -0.0037291434, + 0.013040274, + -0.00077941775, + 0.019526906, + -0.020786706, + -0.0026201168, + 0.02067949, + 0.003953629, + 0.007954165, + -0.02110836, + -0.0017690815, + 0.031629033, + -0.00032311704, + -0.010815521, + 0.005096161, + -0.024365077, + -0.005119615, + 0.087596335, + 0.0031059443, + 0.013368627, + -0.0042317235, + 0.02570529, + 0.016873285, + -0.006077867, + -0.0048917783, + -0.0030054282, + -0.009287678, + -0.0118608875, + -0.010788716, + 0.009173759, + 0.00867788, + 0.00052980304, + -0.005166522, + -0.008302621, + -0.039080616, + 0.009167058, + -0.0068618916, + -0.003400791, + 0.011659855, + -0.00041232497, + 0.01288615, + -0.013053677, + 0.0100516, + 0.011840784, + 0.033961, + 0.017315555, + -0.011740268, + 0.014876367, + 0.018092878, + 0.0031059443, + -0.0031662537, + -0.006523488, + -0.0013779068, + 0.014795954, + 0.014246467, + -0.0049688406, + -0.0072639557, + 0.013616567, + -0.0015680495, + 0.01137841, + 0.008731489, + 0.021443412, + 0.00008318746, + -0.0087113865, + 0.019969177, + -0.012015012, + 0.0125712, + 0.029243452, + 0.009274276, + -0.026214572, + -0.01665885, + -0.01206862, + 0.020398045, + 0.005618844, + -0.0099711865, + 0.022019703, + 0.026201168, + -0.00515312, + -0.02357435, + -0.004342291, + -0.020639284, + -0.0070294184, + -0.041787848, + 0.0106815, + -0.032888833, + -0.011914495, + -0.019808352, + 0.00760571, + -0.022904243, + -0.0061113723, + 0.02067949, + 0.016511427, + 0.00597065, + 0.02350734, + -0.021765063, + -0.0059572477, + 0.012041816, + 0.009602628, + -0.024485696, + -0.027447566, + -0.01716813, + -0.006406219, + 0.014635129, + 0.017650608, + -0.016484622, + 0.007954165, + 0.009696443, + 0.027688805, + -0.00591034, + 0.015452659, + 0.0073510697, + -0.016189776, + -0.017489783, + 0.010078403, + 0.002017021, + -0.016645448, + -0.014018631, + 0.025249617, + -0.01986196, + -0.008751593, + 0.005317296, + 0.004915232, + -0.016390808, + 0.01728875, + -0.0008204618, + -0.0126717165, + 0.006309054, + 0.021885682, + -0.025812507, + 0.006881995, + 0.019098038, + -0.019151647, + 0.046424985, + -0.00057335995, + 0.022716613, + -0.006121424, + -0.001206192, + 0.01087583, + 0.0007924011, + 0.016109362, + 0.0066508083, + -0.011961403, + -0.008704685, + 0.0055015753, + -0.017462978, + 0.003268445, + -0.0023805539, + -0.00848355, + 0.026321787, + -0.012242848, + -0.03425585, + -0.027608393, + 0.00521678, + -0.017771227, + 0.019071234, + -0.011043357, + -0.02771561, + -0.035220806, + -0.009039738, + 0.012001609, + -0.009220667, + -0.018762985, + -0.021349598, + 0.007833546, + 0.0063392087, + 0.014313477, + 0.011974805, + 0.008161899, + 0.01628359, + -0.02776922, + -0.0029618712, + -0.03294244, + -0.035864107, + -0.022515582, + -0.014795954, + 0.01614957, + 0.009575823, + 0.026268179, + 0.029752733, + 0.007880454, + -0.012946459, + -0.007310863, + 0.0058835363, + -0.0008506166, + 0.009401596, + -0.015760908, + 0.0108289225, + 0.026831068, + 0.029377474, + -0.0030071035, + -0.026335191, + -0.017556794, + 0.020719696, + -0.016940296, + -0.00037693497, + -0.00993098, + -0.019272266, + 0.0018109631, + -0.0045801788, + -0.005297193, + -0.017114524, + 0.0058801854, + 0.008885614, + 0.00006428835, + -0.005045903, + 0.010641293, + -0.010406756, + 0.020974336, + -0.010601087, + -0.015693897, + -0.023172287, + -0.012162435, + 0.011686659, + -0.017449576, + 0.01182068, + 0.0118608875, + 0.010728407, + 0.023091873, + -0.012048517, + -0.01275883, + 0.0040809494, + 0.011043357, + 0.018950615, + 0.0060008047, + -0.017838238, + 0.005002346, + -0.037070297, + -0.023614557, + -0.015613484, + -0.009240771, + -0.026254777, + -0.011076862, + 0.021014543, + 0.0022565841, + 0.02105475, + -0.0073443684, + -0.008664479, + 0.018628964, + 0.008510354, + 0.012979965, + -0.020625882, + 0.02790324, + 0.018267106, + 0.0036889368, + -0.01413925, + -0.01991557, + -0.011887691, + -0.017985662, + 0.02275682, + 0.027876435, + -0.006875294, + -0.023520742, + 0.013871207, + 0.024097035, + -0.02570529, + -0.008249013, + 0.019768145, + 0.027822826, + 0.0019416339, + -0.01991557, + 0.0091603575, + -0.017516587, + 0.021952692, + -0.017503185, + -0.0017154729, + -0.015881527, + -0.010172218, + -0.018508345, + 0.015667092, + -0.023735177, + 0.0015018765, + 0.02652282, + -0.020960934, + 0.011545937, + -0.0008259064, + 0.004623736, + 0.0044093016, + -0.0105139725, + 0.02432487, + 0.01691349, + 0.0034644513, + -0.0037928035, + 0.013341823, + -0.0003802855, + 0.0005612143, + -0.0040273406, + 0.026227973, + -0.006228641, + -0.015988745, + -0.0039502787, + -0.00892582, + -0.0016291967, + -0.0063325074, + 0.0035616166, + 0.0010470416, + -0.016457818, + -0.007330966, + 0.02790324, + -0.0056791534, + -0.0029434434, + -0.017597, + -0.0056925556, + -0.019111441, + -0.004657241, + -0.0054613687, + 0.007592308, + -0.013274812, + -0.020880522, + -0.01923206, + 0.0074515855, + 0.027018698, + -0.008496952, + -0.018937213, + 0.013321719, + 0.011827381, + -0.02790324, + 0.007424781, + 0.010272735, + 0.0055015753, + -0.03256718, + 0.00086527516, + -0.01388461, + -0.010266033, + 0.0063559613, + -0.025504258, + -0.00911345, + -0.02972593, + -0.022676408, + 0.03739195, + 0.008952624, + 0.022207333, + 0.0257723, + -0.022864038, + -0.00070947537, + -0.01558668, + -0.010004692, + 0.008336126, + 0.007987671, + 0.011365009, + 0.024445489, + -0.016833078, + 0.01647122, + 0.0067345714, + 0.00049755414, + -0.0037123905, + -0.024539305, + -0.0327012, + 0.0025179256, + 0.0063593118, + -0.027930044, + -0.01206862, + -0.02047846, + -0.02117537, + -0.0027641898, + -0.0024224354, + 0.008838707, + -0.0005004859, + 0.0133485235, + 0.035408434, + 0.0018746232, + 0.016806275, + -0.01640421, + -0.015975341, + 0.0025815857, + -0.013804196, + -0.01628359, + -0.01125109, + -0.0025514308, + 0.02067949, + 0.009917578, + -0.017275348, + -0.019808352, + 0.019473298, + -0.037847623, + 0.0066005504, + -0.02180527, + 0.021094956, + 0.011948001, + -0.0072438526, + 0.004720901, + 0.027983652, + -0.0069557065, + 0.030556861, + -0.015077399, + -0.009723247, + 0.013026873, + -0.026281582, + 0.04846211, + 0.00021862228, + -0.01175367, + -0.0022214034, + 0.008282518, + 0.020371241, + 0.004312136, + 0.0030188302, + -0.021832073, + -0.0019466598, + -0.0020723047, + -0.0124505805, + -0.018990822, + 0.019580515, + 0.012350065, + -0.04631777, + 0.01439389, + -0.0005499062, + -0.007699525, + -0.0063023525, + -0.0008162736, + -0.0059036394, + -0.00081376074, + 0.022971256, + -0.013341823, + -0.012638211, + 0.0069289026, + -0.027259937, + 0.008604169, + 0.0017112847, + 0.0043255384, + 0.0028730822, + 0.0019081286, + -0.013703681, + -0.027930044, + 0.0004301247, + -0.029699124, + -0.0032918989, + 0.011539236, + -0.0010261007, + -0.009488709, + -0.0106479945, + 0.011217585, + -0.037365146, + -0.018079476, + 0.0029501445, + -0.029645517, + -0.02570529, + 0.018789789, + 0.0027156072, + -0.021537228, + -0.011545937, + -0.0066742618, + 0.0038363603, + -0.012725324, + -0.017382566, + 0.011338204, + -0.027018698, + 0.0024040076, + -0.0073376675, + -0.017690815, + -0.0257723, + 0.005890237, + 0.005437915, + -0.004436106, + 0.0010269384, + 0.23652083, + -0.010527375, + -0.0022599346, + 0.01998258, + -0.0075521017, + 0.017529989, + 0.028358912, + -0.0007073813, + 0.0017389266, + 0.02256919, + -0.017811434, + -0.000539017, + 0.018722778, + -0.004543323, + -0.0062018367, + -0.021832073, + -0.032888833, + -0.02551766, + -0.031012535, + -0.0015412453, + 0.02483415, + -0.015546474, + 0.005632246, + -0.002117537, + 0.0099711865, + -0.011994909, + -0.0017623804, + 0.01162635, + 0.011043357, + 0.024793945, + 0.0027072306, + 0.009327884, + -0.007699525, + 0.0038732162, + -0.006362662, + 0.008999532, + 0.007987671, + -0.012041816, + 0.029886754, + -0.0038330099, + -0.0036889368, + -0.0151042035, + -0.018722778, + 0.0059170416, + -0.0044897143, + 0.0076526175, + 0.007934063, + 0.0074515855, + -0.009736649, + 0.021041349, + -0.040367223, + -0.0007986833, + 0.014045435, + 0.026080549, + 0.012209343, + -0.021523824, + 0.030771296, + 0.0031729548, + -0.015063996, + -0.006121424, + 0.004456209, + 0.030396037, + -0.010728407, + 0.036855865, + -0.02407023, + -0.0011333178, + -0.009917578, + 0.0038531132, + 0.029779539, + -0.012732026, + 0.022515582, + 0.0124036735, + 0.004342291, + -0.021188771, + -0.010741809, + -0.023453731, + 0.027501175, + 0.0157207, + 0.016940296, + 0.041707437, + -0.009012934, + -0.012819139, + 0.008992831, + 0.007585607, + 0.0005260337, + -0.034095023, + 0.012209343, + -0.000043975746, + 0.0129866665, + -0.031575423, + 0.0037425454, + -0.0032835223, + -0.011257791, + -0.020076394, + 0.0021711455, + 0.009951083, + 0.009602628, + 0.01590833, + -0.01118408, + 0.021041349, + -0.015827918, + 0.0021610938, + 0.004895129, + -0.005739463, + -0.017141327, + -0.005990753, + -0.006888696, + 0.011177379, + -0.009461906, + -0.013871207, + 0.0011500705, + -0.03602493, + -0.0048281183, + -0.017570196, + 0.0071366355, + 0.008041279, + -0.02047846, + -0.011793876, + 0.034523893, + -0.021979498, + 0.019848557, + -0.027608393, + -0.013650072, + -0.012524293, + -0.017462978, + -0.010312941, + 0.009977887, + -0.01640421, + 0.0032282386, + -0.048220873, + 0.028305303, + -0.0032667697, + 0.020652685, + -0.0063258065, + -0.0022766872, + 0.02110836, + 0.006543591, + -0.006881995, + 0.012356766, + -0.0020387995, + 0.008986129, + -0.018159889, + 0.035435237, + 0.03640019, + -0.021161968, + 0.0021577433, + 0.02413724, + -0.0026754006, + -0.018508345, + 0.008912418, + -0.0100516, + -0.02149702, + -0.013341823, + -0.02110836, + 0.011351606, + 0.0046203854, + 0.0015035517, + -0.003930175, + 0.003638679, + 0.0019014275, + -0.04135898, + 0.0067647262, + 0.026429005, + -0.0075655035, + -0.036158953, + -0.02752798, + -0.17454937, + 0.027045503, + -0.00021548115, + -0.014487705, + 0.011545937, + 0.034389872, + 0.0079474645, + -0.022287747, + -0.00810829, + 0.015506268, + 0.031253774, + 0.019526906, + -0.005488173, + -0.014889769, + -0.0019684383, + -0.026040344, + -0.028921802, + 0.017556794, + 0.026683645, + 0.013408833, + 0.03042284, + -0.022153724, + -0.0005792234, + -0.016390808, + -0.001614957, + 0.024619717, + -0.009997991, + 0.012892852, + 0.0012313209, + 0.0013779068, + -0.017395968, + -0.019553712, + 0.026965091, + 0.014702139, + -0.004184816, + 0.0040440937, + -0.0077464324, + -0.009951083, + -0.00018270875, + 0.014742346, + -0.012651613, + 0.018923812, + 0.012236147, + 0.0163506, + -0.0012857671, + 0.019098038, + 0.005297193, + -0.0065134363, + -0.010185621, + -0.005380956, + 0.02092073, + -0.00760571, + 0.009066543, + 0.020652685, + 0.020009384, + 0.00019412152, + 0.007813443, + 0.005166522, + 0.012745428, + -0.008369632, + -0.025263019, + -0.016015548, + -0.00033044632, + -0.010507272, + -0.0046940967, + -0.00396033, + -0.021912487, + 0.022033105, + -0.017395968, + 0.010594386, + 0.0061683315, + -0.009924279, + 0.01049387, + -0.016551634, + -0.0039234743, + 0.0008112478, + -0.011425318, + 0.020826913, + 0.0021711455, + -0.015814517, + -0.03310327, + 0.026348593, + -0.03626617, + -0.009187162, + 0.00358172, + 0.03130738, + 0.0019198555, + 0.0101990225, + -0.025624877, + -0.003638679, + 0.022528984, + -0.013375328, + 0.0037525971, + -0.0045600757, + 0.011036656, + 0.022528984, + -0.01363667, + 0.037123907, + -0.025785703, + 0.004858273, + -0.01017892, + -0.005538431, + -0.012021713, + -0.00083763327, + 0.029109431, + 0.0007630839, + 0.020384643, + 0.035810497, + 0.027983652, + -0.012289755, + -0.015131007, + 0.0031913829, + 0.00848355, + -0.0030623872, + -0.016498026, + 0.016256787, + 0.019928971, + -0.013596463, + 0.016632047, + -0.00798097, + 0.029431082, + -0.0092072645, + 0.010473766, + 0.010353147, + -0.02236816, + 0.0056791534, + -0.053930182, + 0.023292907, + 0.005193326, + 0.018977419, + -0.012685118, + 0.037123907, + 0.02112176, + 0.032325942, + -0.00810829, + 0.016136168, + -0.012953161, + -0.011807279, + -0.0028496285, + -0.0005783858, + 0.03444348, + -0.005166522, + 0.0056724525, + 0.004154661, + 0.0010076729, + 0.024432087, + -0.007753134, + -0.011572741, + 0.00078402477, + -0.004111104, + -0.024177447, + 0.019017626, + -0.021403205, + 0.027742414, + 0.0327012, + 0.02187228, + 0.021537228, + 0.0018025868, + 0.014045435, + -0.013562958, + -0.01495678, + 0.014501107, + -0.01017892, + -0.0038531132, + 0.023453731, + -0.033666156, + 0.003085841, + -0.016605241, + -0.019580515, + -0.020947533, + -0.008597468, + 0.016270189, + -0.034148633, + 0.011492329, + 0.014192858, + -0.0033790127, + -0.033773374, + -0.028948605, + -0.013308317, + -0.011425318, + 0.027849631, + -0.010500571, + 0.01074851, + 0.00010899703, + -0.035730086, + -0.0031511763, + -0.0070629236, + 0.0074180802, + -0.041895065, + 0.018535148, + 0.022917647, + 0.008443343, + -0.012557798, + -0.03575689, + 0.01665885, + -0.0011483952, + -0.013234606, + -0.0036621327, + -0.026750656, + -0.00055535085, + -0.019098038, + -0.031226968, + -0.038169272, + 0.003281847, + -0.0016962073, + -0.0050291503, + 0.011445421, + -0.035542455, + -0.020076394, + -0.010292837, + 0.001948335, + 0.042029087, + 0.011137172, + -0.014621726, + 0.008818603, + -0.011579443, + 0.006530189, + 0.008691283, + 0.029752733, + -0.01991557, + -0.016605241, + 0.029002214, + 0.01149903, + 0.023413526, + 0.0010034847, + 0.010279436, + -0.010266033, + -0.026388798, + -0.090973675, + 0.015988745, + 0.026804265, + 0.007585607, + 0.0006826711, + -0.0219929, + 0.009957785, + -0.009012934, + 0.008141795, + 0.00849025, + -0.025343433, + 0.014192858, + -0.0069356035, + -0.016551634, + -0.032272335, + -0.010835624, + 0.011545937, + 0.0033086515, + 0.0074113794, + 0.01747638, + 0.0026301686, + 0.025383638, + 0.028680563, + -0.0072304504, + -0.022354757, + 0.000009966527, + -0.021322792, + 0.036239367, + -0.014755747, + -0.0073376675, + -0.0059672995, + -0.033773374, + -0.01232326, + 0.01659184, + -0.012624809, + -0.014246467, + 0.0035917715, + 0.020759903, + 0.0031277225, + 0.032325942, + -0.01614957, + 0.008778397, + 0.016310396, + 0.0015378947, + -0.010225827, + 0.01439389, + -0.0000051010556, + 0.002992026, + 0.02533003, + 0.0033203783, + 0.0011911145, + 0.020143405, + 0.0033220535, + -0.0050258, + 0.0014566443, + -0.025892919, + 0.013831001, + -0.006637406, + -0.006215239, + 0.0076727206, + 0.009173759, + 0.0076124114, + 0.023601156, + 0.010849026, + 0.005618844, + -0.013911413, + -0.005833278, + 0.010929439, + 0.027849631, + -0.022354757, + -0.039884746, + 0.023976415, + 0.004034042, + 0.014916574, + 0.015063996, + -0.0003350533, + 0.000020050846, + 0.0048917783, + -0.015827918, + 0.035783693, + 0.0075789057, + -0.010567581, + -0.03235275, + 0.01703411, + 0.023896001, + -0.019768145, + 0.0000081931, + -0.0039871344, + -0.0046739937, + 0.04449508, + -0.018829996, + -0.0013829325, + 0.008195404, + -0.001062119, + -0.005096161, + 0.031387795, + -0.0018310663, + -0.028734172, + 0.043262083, + 0.023078471, + 0.014568117, + 0.004117805, + 0.003876567, + -0.017704217, + -0.027474372, + 0.012631509, + -0.014434096, + -0.0064497762, + -0.002224754, + 0.022609398, + 0.0141124455, + 0.016377406, + -0.0017204988, + 0.025115596, + 0.0129866665, + -0.0076526175, + -0.00091469556, + -0.020706294, + -0.010889232, + 0.016377406, + 0.008758293, + 0.00515312, + 0.012055218, + -0.016444417, + -0.005367554, + 0.0009951083, + 0.010225827, + -0.024298066, + -0.0003149501, + 0.011358307, + 0.018401127, + 0.016766068, + -0.023735177, + -0.008979429, + -0.009079944, + -0.0037324938, + 0.0028211488, + 0.0018293911, + -0.038383707, + 0.022354757, + 0.019004224, + 0.0039938353, + -0.004278631, + -0.002697179, + 0.0152382245, + -0.0045466735, + 0.002638545, + -0.012658314, + -0.02533003, + 0.010346446, + -0.025933126, + -0.0059538973, + -0.01791865, + -0.014246467, + -0.012618108, + 0.009106749, + 0.006701066, + 0.006255445, + -0.0057729683, + 0.024847554, + -0.0074850908, + 0.025745496, + 0.014782552, + -0.023453731, + -0.0073778736, + 0.00993098, + -0.0039569796, + 0.011874289, + -0.014554716, + 0.021416608, + 0.000161035, + -0.016243385, + -0.019392885, + 0.02520941, + -0.01143872, + -0.026991894, + 0.00013747656, + -0.003538163, + 0.014125847, + -0.015988745, + 0.011666556, + -0.016189776, + -0.00792066, + 0.027688805, + -0.003926825, + 0.007826845, + -0.0019064533, + -0.012839243 + ] + }, + { + "object": "embedding", + "index": 6, + "embedding": [ + -0.0131454775, + -0.007023479, + -0.007137846, + -0.028793573, + -0.03425628, + 0.0073396703, + -0.032803144, + 0.013912409, + -0.007124391, + -0.025228014, + 0.000104275794, + -0.007595314, + 0.018890737, + -0.0022755668, + -0.0018584637, + 0.0096404655, + 0.019994043, + -0.006337277, + 0.004726048, + -0.005577073, + -0.044078387, + 0.001702891, + 0.012815831, + -0.005116241, + 0.0020535602, + -0.00840261, + 0.011147418, + -0.0054458873, + -0.010407397, + -0.012217086, + -0.007992235, + -0.008557342, + -0.004463677, + -0.010817773, + -0.0130109275, + -0.0073733074, + -0.00095698267, + -0.006098452, + 0.027246255, + -0.01677831, + 0.015917195, + -0.011066689, + 0.0026657602, + -0.01789507, + 0.008294971, + 0.0343101, + 0.00424167, + 0.020895522, + -0.008624617, + 0.0009553008, + -0.00075095386, + 0.056295473, + -0.024420718, + -0.011618341, + -0.018688913, + -0.0019139653, + -0.011584704, + 0.004816869, + -0.009034993, + -0.023653787, + -0.013737494, + -0.020020952, + -0.026721513, + 0.003582378, + 0.0043156724, + 0.008079692, + 0.0014716341, + 0.008079692, + 0.002578303, + 0.0019072378, + 0.020693699, + 0.017706702, + 0.0112550575, + 0.005775533, + 0.013461668, + -0.01710123, + -0.0072051208, + -0.002921404, + 0.012129629, + 0.011678888, + 0.01691286, + -0.023842156, + -0.024286168, + 0.029520141, + 0.04106448, + 0.021245351, + -0.010003748, + 0.04701156, + -0.009526098, + -0.009230089, + 0.001309334, + 0.01614593, + 0.0010965776, + 0.032534048, + -0.009660647, + -0.006313731, + -0.0038682956, + 0.03880405, + -0.01683213, + -0.0013900636, + 0.004460313, + 0.01183362, + -0.008469885, + -0.020518785, + -0.004039846, + -0.004167668, + -0.0129369255, + 0.0053517027, + 0.010508309, + 0.0006235524, + 0.02938559, + 0.026748423, + 0.022429386, + -0.047872677, + -0.010071023, + -0.018096896, + -0.0019358296, + -0.01813726, + -0.009647192, + -0.0047327755, + 0.024689816, + -0.0039187516, + -0.006414643, + -0.027663358, + 0.021164622, + 0.015580822, + -0.00594372, + -0.004779868, + 0.0035790142, + 0.0028877666, + 0.010999414, + 0.0112550575, + -0.000038788072, + -0.0018315538, + -0.034229368, + 0.013239662, + -0.026398594, + 0.014975349, + -0.029681599, + -0.009620283, + -0.00480005, + 0.015190628, + -0.032238036, + -0.0005697326, + 0.019576939, + 0.014719705, + 0.014127688, + -0.0027111706, + 0.021339536, + -0.01305802, + 0.013502033, + -0.03207658, + 0.01119451, + -0.0048673246, + 0.010858137, + 0.0038279307, + 0.007292578, + 0.023411596, + -0.009479006, + 0.009115722, + -0.004359401, + -0.015123353, + 0.0048101414, + -0.013286754, + 0.022617755, + 0.008624617, + 0.00739349, + 0.013044565, + 0.0025127102, + -0.007783683, + 0.008557342, + 0.022402477, + -0.02401707, + 0.02018241, + 0.032964606, + 0.01364331, + 0.0067510167, + -0.01903874, + -0.030569626, + -0.031134732, + -0.014612066, + 0.005476161, + 0.016119018, + 0.018352538, + -0.0049110535, + 0.016374663, + -0.0024925277, + -0.011187783, + 0.011853803, + -0.012930198, + 0.014558246, + 0.004463677, + 0.004103757, + -0.0125870975, + -0.6824346, + -0.027770998, + -0.01186053, + -0.011450155, + -0.011820165, + 0.025241468, + 0.014100778, + 0.0026489415, + -0.011389608, + -0.0132194795, + -0.0073800352, + 0.018554363, + 0.007595314, + 0.0053113378, + -0.012963835, + -0.0022335202, + 0.0064684628, + 0.016859042, + -0.0034747384, + 0.024864731, + -0.014961895, + 0.020720609, + 0.0075751315, + -0.004742867, + 0.012714919, + 0.006656832, + 0.0018197808, + -0.011954715, + -0.010952322, + 0.004921145, + -0.030650355, + 0.0035151034, + 0.0072185756, + -0.018904192, + 0.043970745, + 0.0144775165, + -0.019711489, + 0.01462552, + 0.012573642, + 0.03657053, + 0.015917195, + 0.0054257046, + 0.024676362, + -0.0050893314, + -0.010938867, + 0.010501581, + 0.013858589, + 0.0002537518, + 0.017303053, + -0.01949621, + -0.0076020416, + -0.03172675, + -0.017854707, + -0.01079759, + 0.007050389, + -0.003632834, + 0.01792198, + 0.006290185, + 0.007736591, + 0.014517881, + 0.0085909795, + 0.0049245083, + -0.02973542, + -0.014033503, + 0.0170205, + -0.008765894, + -0.015378998, + -0.0075145843, + 0.009384821, + 0.01358949, + 0.00038619884, + 0.017477969, + 0.0042248513, + -0.009613555, + 0.031296194, + 0.012149812, + 0.010030658, + 0.002450481, + 0.0040196637, + -0.0056073465, + 0.011766345, + -0.008860079, + -0.025308743, + 0.0060513597, + 0.037458554, + -0.024985826, + 0.0025244833, + -0.005758715, + 0.009021537, + 0.002909631, + 0.01903874, + 0.037862204, + -0.0052642454, + -0.011954715, + -0.022954129, + 0.02508001, + -0.01680522, + 0.0006550874, + 0.0201555, + -0.021218441, + 0.010602494, + -0.003266187, + -0.00032207766, + -0.005829353, + 0.007178211, + 0.022456296, + -0.017558698, + 0.015190628, + 0.014100778, + -0.022563936, + -0.009660647, + -0.0058259894, + -0.028820483, + -0.010030658, + -0.013132022, + -0.026358228, + 0.011685616, + -0.011187783, + 0.01745106, + -0.011322333, + 0.009748105, + -0.0151098985, + 0.022375567, + -0.005122969, + -0.010804318, + -0.0015313404, + -0.011699071, + -0.014329512, + 0.0045410427, + 0.0022402476, + -0.008227697, + 0.02976233, + 0.026842607, + -0.005499707, + 0.035251945, + 0.009458823, + -0.01130215, + -0.011732709, + -0.0056342566, + -0.028793573, + -0.013690402, + -0.0047966866, + 0.006949477, + -0.01568846, + -0.0065996484, + -0.03910006, + -0.013286754, + -0.015217538, + -0.01130215, + 0.014571701, + -0.006132089, + -0.013676947, + -0.025564387, + -0.009135905, + -0.0075011295, + -0.010467944, + 0.009674102, + -0.017303053, + -0.014316057, + -0.012196904, + 0.027905548, + 0.007709681, + -0.021352991, + -0.011403062, + -0.011154146, + -0.014046958, + 0.018446723, + 0.0028120826, + -0.013481851, + -0.015621186, + -0.0059100827, + 0.00023293866, + 0.0025648482, + 0.0011251695, + 0.020411145, + -0.010420851, + 0.013461668, + -0.0031097732, + -0.0031013638, + -0.0023478873, + -0.009956656, + -0.010817773, + -0.026923336, + -0.020855159, + 0.018783098, + -0.0074203997, + 0.015163718, + 0.016737947, + -0.019940222, + 0.0030727722, + 0.008503523, + 0.005516526, + 0.0010427579, + -0.0035420132, + -0.0060513597, + 0.012910016, + -0.0022654757, + -0.00003250735, + 0.0034848296, + 0.013468396, + 0.026075676, + 0.0067409254, + 0.014531336, + 0.028255375, + 0.0007866936, + -0.026210224, + -0.000914095, + -0.012903288, + 0.04830324, + 0.008046054, + 0.010111388, + -0.017383784, + -0.026936792, + 0.012775466, + -0.0061690905, + 0.033368252, + 0.011974897, + -0.0019005104, + -0.00808642, + -0.0031602292, + 0.013730767, + -0.01584992, + -0.006895657, + 0.018877283, + -0.027851727, + -0.0058461716, + 0.0052137896, + 0.023129044, + 0.0063843695, + -0.032507136, + -0.011820165, + 0.008046054, + -0.0014724751, + 0.016105564, + -0.006697197, + -0.0020064681, + 0.0010721906, + -0.010259393, + 0.03412173, + -0.0027548992, + 0.01917329, + 0.022308292, + 0.027824817, + -0.02146063, + -0.0172896, + -0.011059961, + 0.024030523, + 0.0036025604, + -0.012573642, + 0.009909564, + -0.019509664, + -0.0019795583, + -0.00085817295, + -0.011100326, + 0.017666338, + -0.028336106, + 0.011228148, + 0.007918233, + 0.0108312275, + 0.027932458, + 0.012842741, + -0.009795197, + 0.015123353, + -0.000015347041, + -0.017007045, + 0.020747518, + 0.010145025, + 0.008934081, + -0.009465551, + -0.012439093, + 0.011880713, + -0.000118887016, + -0.009721194, + 0.005015329, + 0.015136808, + -0.000084251056, + -0.010124843, + -0.009304091, + 0.013105112, + 0.029116493, + -0.01789507, + -0.021689365, + 0.0021141076, + 0.032910787, + -0.00962701, + -0.034686837, + -0.01481389, + 0.0020905614, + -0.0096001, + 0.0035487406, + -0.0001552574, + 0.03234568, + -0.004941327, + -0.0047159567, + -0.0045645884, + -0.0053416113, + 0.033475894, + -0.034283187, + -0.02154136, + 0.007090754, + 0.006054723, + -0.008368974, + -0.0035285582, + -0.025941126, + 0.04970255, + -0.0037606559, + -0.018971467, + 0.00011405165, + 0.0009670739, + -0.009620283, + -0.006629922, + 0.0003853579, + -0.012466002, + 0.013656765, + 0.0006336436, + 0.015177174, + -0.009331001, + 0.01478698, + 0.024716726, + -0.021608636, + -0.009526098, + -0.0069629317, + -0.021877734, + 0.011584704, + 0.096014455, + 0.020115137, + 0.022833034, + -0.00030084405, + 0.030677265, + 0.004904326, + -0.015634641, + -0.009801924, + 0.012008535, + 0.010481399, + -0.007649134, + -0.038050573, + 0.0012521504, + 0.01079759, + -0.012910016, + -0.0036765626, + -0.022927219, + -0.0065458287, + 0.021285716, + -0.011638524, + -0.0060849967, + -0.0024302986, + 0.0022637937, + 0.003468011, + 0.014208417, + -0.010461217, + 0.029331772, + 0.0075751315, + 0.011557794, + 0.010441034, + 0.0061455444, + 0.014181508, + 0.0076424065, + 0.011826893, + -0.0037202912, + -0.01130215, + 0.022644665, + -0.005092695, + 0.014221872, + -0.017625973, + 0.019106016, + 0.003834658, + 0.009028265, + -0.0023747971, + 0.0315922, + -0.025833486, + -0.012714919, + 0.016751401, + -0.0034646473, + -0.017464513, + 0.026519688, + 0.016024834, + -0.024003614, + -0.017356874, + -0.0019543301, + 0.011181056, + 0.0068250187, + -0.00026510438, + -0.0001514732, + 0.017114684, + -0.019765308, + -0.028712844, + 0.0039591165, + -0.01566155, + -0.012324726, + -0.028389925, + 0.002159518, + -0.011880713, + -0.013172387, + -0.025456747, + -0.0022419295, + -0.019859493, + -0.007548222, + 0.008927354, + 0.018043075, + -0.0060244496, + 0.020626424, + 0.014692795, + 0.013690402, + 0.027797908, + 0.0032207766, + -0.014221872, + -0.008490068, + -0.012647645, + -0.01584992, + 0.01693977, + 0.024743635, + -0.017733611, + -0.010737043, + 0.024649452, + 0.016253568, + 0.0005579596, + 0.015473182, + -0.007871141, + -0.012788922, + 0.0016473893, + 0.007036934, + 0.021675909, + -0.018769642, + -0.009546281, + 0.04098375, + -0.009822107, + 0.003126592, + -0.0014968622, + 0.025779666, + -0.008994628, + 0.005193607, + 0.0051633334, + -0.014168053, + -0.023209773, + 0.044751134, + -0.031242372, + 0.025187649, + 0.025201105, + 0.0051263324, + 0.018702367, + -0.004726048, + 0.024743635, + -0.018769642, + 0.0058058067, + -0.01802962, + -0.03248023, + 0.0063070036, + 0.037216365, + -0.012277634, + 0.015405907, + 0.022617755, + -0.014006593, + -0.0020047862, + -0.008348791, + 0.021070438, + 0.028416835, + -0.014046958, + -0.012136357, + -0.00019478129, + -0.0039927536, + -0.0050489665, + 0.011557794, + -0.019590395, + -0.005082604, + -0.010723588, + -0.00507924, + 0.01704741, + -0.010071023, + -0.025672028, + -0.020572605, + -0.00022473956, + -0.0038582042, + 0.0015616141, + 0.03425628, + -0.0029819512, + 0.012815831, + -0.0046184086, + 0.00070680486, + -0.037862204, + -0.010649585, + 0.0037942934, + -0.034283187, + 0.002781809, + 0.021366445, + 0.027905548, + -0.0016145929, + 0.019711489, + -0.0048875073, + -0.006771199, + -0.00039986402, + 0.0074203997, + -0.00041079617, + -0.018635092, + 0.010441034, + 0.01922711, + 0.011470337, + -0.010615949, + -0.005778897, + -0.015553911, + 0.012042172, + 0.0047495943, + -0.008220969, + -0.0033418708, + -0.025228014, + -0.018460179, + -0.017114684, + 0.014571701, + 0.0043257633, + -0.0040196637, + 0.0049245083, + 0.029224131, + -0.004534315, + 0.033314433, + -0.005139787, + 0.014181508, + -0.0036799263, + 0.005957175, + 0.019240566, + -0.0011066688, + -0.012062354, + 0.002120835, + 0.005183516, + 0.012190176, + 0.038238943, + 0.01590374, + -0.0019795583, + -0.018608183, + 0.023048313, + -0.0031854573, + 0.018123806, + 0.0056208014, + -0.0056611663, + 0.01843327, + -0.021285716, + -0.0025766212, + -0.016213203, + -0.023236683, + -0.01933475, + -0.011295423, + 0.011793256, + 0.0017222324, + 0.024339987, + -0.011059961, + -0.009048448, + -0.010676496, + 0.009162814, + 0.013939318, + 0.0007496925, + 0.022792669, + 0.023707606, + -0.012082537, + -0.016576488, + -0.010911957, + 0.009297364, + -0.021837369, + 0.012230542, + 0.035870872, + -0.005462706, + -0.00909554, + -0.0059134467, + 0.003239277, + -0.0001609337, + -0.014235327, + 0.026506234, + 0.012546732, + 0.0048202327, + -0.0028793574, + 0.0012672872, + 0.002388252, + 0.026519688, + -0.026869517, + -0.0116721615, + -0.02736735, + -0.006744289, + -0.0014977031, + 0.005640984, + -0.022052648, + 0.03883096, + -0.0025093465, + -0.010286302, + 0.004265216, + -0.019792218, + -0.0004406493, + -0.0035016483, + 0.008584253, + 0.0039187516, + -0.004140758, + -0.008624617, + -0.0015128399, + -0.0059672664, + -0.006172454, + 0.018998377, + -0.015096444, + 0.021070438, + -0.010932139, + -0.005893264, + 0.0008152853, + -0.025833486, + 0.006566011, + 0.018917646, + 0.013515488, + -0.0024656178, + -0.015230993, + -0.010555401, + 0.0015355451, + 0.009061903, + -0.010609221, + 0.008947535, + -0.013071475, + -0.009916292, + -0.00256653, + -0.021137713, + 0.018796552, + -0.0023344322, + -0.020101681, + -0.013125295, + -0.008436248, + 0.029116493, + -0.015015714, + 0.009976839, + 0.021985373, + 0.012990746, + -0.0046520457, + 0.011160874, + 0.0006151431, + -0.0057856245, + -0.011140691, + 0.0047933226, + -0.008712074, + -0.0099902935, + 0.028955033, + -0.027636448, + -0.002921404, + -0.0034141913, + 0.009337729, + 0.0067812903, + 0.0065021003, + -0.0019021922, + 0.032614775, + -0.0035588318, + 0.0018567818, + -0.0031669566, + -0.011477064, + 0.020464964, + -0.0068889298, + -0.002312568, + 0.006730834, + -0.004369492, + 0.009727922, + 0.017706702, + -0.012876378, + -0.0044704042, + -0.016415028, + -0.019698033, + -0.0034326918, + 0.015594277, + -0.016065199, + -0.025577843, + -0.012883106, + 0.00928391, + -0.0071042087, + 0.02962778, + -0.015944105, + -0.0077029536, + -0.0011739436, + 0.003177048, + 0.010387214, + -0.0055266167, + -0.006592921, + -0.032641686, + -0.015836466, + 0.0037438374, + -0.029816149, + -0.006710652, + -0.01829872, + 0.023546146, + 0.0071983933, + -0.026465869, + -0.005116241, + 0.01486771, + -0.017975802, + 0.015352087, + 0.00008703665, + 0.01707432, + 0.020559149, + 0.008712074, + 0.015500092, + 0.022779215, + 0.009801924, + 0.021164622, + -0.03923461, + -0.012560187, + 0.018635092, + -0.015163718, + 0.0077164085, + 0.006340641, + -0.030246707, + -0.0015860011, + 0.01677831, + 0.010938867, + 0.0038178395, + -0.0014884528, + -0.024703272, + -0.00784423, + -0.02704443, + -0.014141142, + -0.02499928, + 0.012614007, + -0.00073623756, + -0.019267475, + -0.0015304995, + 0.010595766, + -0.017868161, + -0.012614007, + -0.005462706, + -0.0030626808, + 0.00079215964, + 0.0024336623, + -0.0018180988, + 0.016078655, + 0.017639427, + -0.050913494, + -0.0043762196, + 0.004080211, + 0.0028154464, + 0.0015473182, + -0.007857685, + -0.010030658, + -0.007063844, + -0.004964873, + -0.025968036, + -0.009337729, + -0.0027616266, + -0.017545242, + 0.0024740272, + -0.028847393, + -0.0017045728, + -0.03401409, + 0.0032813237, + -0.026479324, + 0.0007740796, + -0.012143084, + 0.011066689, + 0.01481389, + -0.027582629, + -0.017787432, + -0.0137105845, + -0.01590374, + -0.016334299, + 0.0070571164, + 0.007265668, + -0.014423696, + -0.016267024, + 0.00970774, + -0.025362564, + -0.03396027, + 0.00035130008, + 0.0040331185, + -0.0065727388, + 0.004127303, + 0.23917502, + -0.022119923, + 0.004927872, + 0.021527905, + 0.0017693248, + 0.015056078, + 0.0343101, + -0.018608183, + -0.010737043, + -0.00068998616, + -0.019603848, + 0.010528491, + -0.005398795, + 0.007904777, + -0.013912409, + -0.014881165, + -0.035817053, + -0.037593104, + -0.019092562, + -0.013246389, + 0.0009098904, + -0.008839896, + -0.006158999, + -0.008079692, + 0.028524475, + 0.0099902935, + -0.015163718, + -0.014046958, + 0.020908978, + 0.022079557, + 0.0055333446, + 0.0032527319, + -0.0054088864, + 0.03662435, + 0.00041668268, + -0.006438189, + -0.0123045435, + -0.027609538, + 0.007050389, + 0.012943653, + -0.025120374, + -0.004100393, + -0.02390943, + -0.008153694, + -0.010178663, + 0.016240114, + -0.0063843695, + -0.0023478873, + 0.019846037, + 0.014100778, + -0.019671123, + -0.010676496, + 0.03891169, + 0.031672932, + 0.0010461217, + -0.012398728, + 0.010017203, + 0.01486771, + 0.009230089, + -0.010017203, + -0.018648548, + 0.01712814, + 0.00797878, + 0.019321295, + -0.01710123, + -0.0034579197, + -0.044159114, + 0.022119923, + 0.00068115635, + 0.005462706, + 0.007232031, + -0.013602945, + -0.009808652, + -0.01313875, + -0.032318767, + -0.014585156, + 0.023330867, + 0.010609221, + 0.00792496, + 0.035440315, + -0.0043728556, + 0.0065727388, + 0.016119018, + -0.009734649, + -0.0036361977, + -0.02148754, + 0.023425052, + -0.0016532758, + -0.008476613, + -0.0063473685, + 0.0029129947, + 0.004204669, + -0.021649, + -0.013925863, + 0.024864731, + 0.013313664, + 0.0054862523, + 0.03406791, + 0.001156284, + 0.0027246254, + -0.024434172, + 0.031107822, + 0.000033584794, + -0.010992686, + -0.015271358, + 0.00368329, + 0.012614007, + -0.0041104844, + -0.010488126, + -0.012640917, + -0.009815379, + -0.03172675, + -0.00281881, + -0.0016448665, + 0.006394461, + 0.01031994, + 0.012990746, + -0.0030794996, + 0.0033855995, + -0.012741829, + -0.006895657, + 0.0025143921, + -0.0054896157, + 0.0096404655, + -0.0048706885, + 0.0001105828, + -0.0038043845, + 0.016132474, + 0.00092334533, + -0.03686654, + 0.014329512, + -0.014746615, + 0.017989255, + -0.004164304, + -0.034659926, + 0.04109139, + 0.0022856581, + -0.01571537, + -0.019819127, + -0.0067779263, + 0.015029169, + -0.015096444, + 0.0066097397, + -0.0019896494, + -0.024905095, + -0.006138817, + 0.01925402, + 0.000007647242, + -0.0005571186, + -0.008617889, + -0.0030895907, + -0.011584704, + -0.0065391012, + -0.041925594, + 0.022981038, + -0.019294385, + -0.0076625887, + -0.026627328, + -0.017733611, + 0.017881617, + -0.044051476, + -0.0055568907, + 0.021931553, + -0.014692795, + -0.020962797, + 0.013925863, + -0.17523715, + 0.02031696, + 0.019119471, + -0.020088227, + 0.0010208937, + 0.0092906365, + 0.010447761, + 0.0028675843, + 0.0021443812, + 0.0018887373, + 0.012533277, + -0.0027347167, + -0.024461083, + 0.0055568907, + 0.0012311271, + -0.024784, + -0.0048740525, + -0.00027057045, + 0.0037101998, + -0.007090754, + 0.0117461635, + -0.036139973, + 0.010030658, + -0.023317412, + -0.0060244496, + 0.010938867, + -0.013562581, + 0.021635545, + -0.017168505, + -0.01598447, + -0.0063440045, + -0.0011974897, + 0.028820483, + 0.0030172705, + 0.0072723953, + 0.010017203, + -0.009532825, + -0.009230089, + -0.006350732, + 0.030784905, + 0.012291089, + 0.016253568, + -0.003811112, + 0.008409338, + 0.005038875, + 0.029089581, + 0.025281833, + 0.0006916681, + 0.007911505, + 0.004507405, + 0.028147737, + -0.01819108, + 0.0026523052, + -0.008812986, + -0.009775015, + -0.0043661282, + 0.0012269224, + 0.017370328, + 0.0007459083, + -0.014800435, + -0.034740657, + -0.029869968, + -0.007837503, + -0.010447761, + 0.0036092878, + -0.027582629, + -0.019698033, + 0.0075549493, + -0.0135693075, + 0.0100642955, + -0.016253568, + -0.033583533, + -0.0055871643, + -0.0037572922, + 0.0058259894, + 0.014100778, + -0.0054929797, + 0.005321429, + 0.00027288301, + -0.00070554344, + -0.014316057, + 0.030219797, + -0.0029264495, + -0.005536708, + -0.0049312357, + 0.0045645884, + -0.005015329, + 0.020586058, + -0.009849017, + -0.017383784, + 0.0044502215, + -0.02047842, + -0.006428098, + -0.0012101037, + 0.011342515, + 0.022927219, + -0.0052507906, + 0.022671575, + -0.005859627, + -0.0067846538, + 0.0068014725, + -0.0071042087, + -0.015863376, + 0.022631211, + 0.028766664, + 0.030327436, + 0.01481389, + -0.0040499372, + 0.0057217134, + 0.014437151, + -0.024380352, + -0.025174195, + 0.015190628, + 0.035063576, + -0.020411145, + 0.0042853984, + 0.029358681, + -0.014612066, + 0.016482303, + -0.0029634507, + 0.057264227, + -0.0015725462, + 0.005499707, + 0.015325177, + -0.015607731, + -0.001993013, + -0.09219325, + -0.022456296, + 0.022254473, + 0.009297364, + -0.006798109, + 0.017410694, + -0.0016179567, + -0.0022133377, + 0.0012656053, + 0.013105112, + -0.010656313, + -0.003060999, + 0.026761876, + -0.018756187, + 0.04327109, + 0.0029029034, + -0.017612517, + -0.0064617353, + -0.020693699, + 0.023115588, + -0.0070436615, + 0.0045780437, + -0.0024992554, + -0.008059509, + -0.0021141076, + -0.0038481131, + -0.019846037, + 0.018554363, + 0.007945143, + 0.020868612, + 0.0007084867, + -0.00006837843, + 0.014033503, + -0.006418007, + -0.0012000125, + 0.012802376, + -0.014221872, + 0.015378998, + 0.024313077, + -0.015096444, + -0.014854254, + 0.0013042883, + 0.0204246, + -0.007783683, + -0.005577073, + -0.00027162163, + -0.0058461716, + 0.006969659, + 0.006387733, + -0.013858589, + -0.013367483, + -0.008974445, + 0.001727278, + -0.0038481131, + 0.0042853984, + -0.010723588, + 0.027770998, + 0.016159384, + -0.035063576, + -0.010925412, + -0.0032964605, + 0.007124391, + -0.021608636, + 0.016051745, + 0.017558698, + 0.0012075809, + -0.02992379, + -0.00017806773, + 0.0039523887, + -0.028981943, + -0.012842741, + 0.0074809473, + -0.007353125, + -0.007736591, + -0.01568846, + 0.00011720515, + -0.0069629317, + 0.009196452, + 0.006175818, + -0.0023462053, + -0.035225034, + -0.023155954, + -0.0025446657, + -0.02641205, + 0.02595458, + 0.035386495, + 0.0014623839, + -0.015405907, + 0.016374663, + -0.017222324, + -0.0121699935, + 0.010387214, + 0.021191532, + -0.022981038, + -0.018123806, + 0.021352991, + 0.022994494, + -0.004524224, + -0.017666338, + 0.024609087, + -0.024299623, + 0.0057250774, + -0.08847969, + 0.011006142, + 0.009189725, + -0.00853716, + 0.0039086603, + -0.028120827, + 0.017706702, + -0.0034511923, + 0.012768739, + 0.0062060915, + -0.026802242, + -0.0137778595, + 0.008187331, + 0.0024185255, + -0.03643598, + -0.026990611, + 0.022227563, + 0.01590374, + 0.016576488, + 0.017773977, + -0.013347302, + 0.0047933226, + -0.0010007112, + 0.0072051208, + -0.021016618, + 0.006734198, + 0.009055175, + 0.017208869, + -0.004480495, + 0.0034781022, + 0.029035762, + -0.03654362, + -0.01077068, + 0.015419362, + -0.011981625, + -0.03215731, + -0.015271358, + 0.030354347, + -0.0047529577, + 0.044239845, + -0.0046049533, + -0.006172454, + 0.028578294, + 0.005001874, + -0.005751987, + -0.021420266, + 0.016576488, + 0.011692343, + 0.026654238, + 0.008826441, + -0.003912024, + 0.026290955, + -0.016697582, + 0.0027919002, + -0.01617284, + -0.011927805, + 0.013239662, + 0.016267024, + -0.0005323111, + -0.023734516, + 0.024891641, + -0.00015820067, + -0.004742867, + 0.019711489, + 0.03624761, + -0.00006328027, + -0.015325177, + -0.0032039578, + -0.00022852376, + -0.01462552, + -0.024757091, + 0.0038043845, + 0.029331772, + 0.0055299806, + 0.010642858, + -0.00077702285, + 0.011174329, + 0.0024084344, + -0.020088227, + 0.017181959, + 0.01856782, + -0.014100778, + -0.032883875, + 0.02606222, + 0.032722417, + 0.0004662978, + -0.0058663543, + -0.006552556, + -0.00731276, + 0.03248023, + 0.0101988455, + 0.015971014, + 0.0021763367, + -0.011288695, + 0.011470337, + 0.017060865, + -0.00092418626, + -0.03584396, + -0.006996569, + 0.03673199, + -0.0008644799, + -0.004379583, + -0.008705347, + -0.026802242, + -0.04087611, + 0.008638072, + -0.015446272, + -0.03178057, + 0.008335336, + 0.02595458, + 0.010461217, + -0.0017390511, + -0.00077954563, + 0.018984921, + 0.0014321102, + 0.0042080325, + 0.010367032, + -0.018608183, + -0.016441938, + 0.0003891421, + 0.01566155, + 0.03616688, + 0.00851025, + -0.026317865, + 0.02063988, + -0.0029701781, + 0.013979684, + -0.019778762, + 0.0040331185, + 0.013925863, + 0.006606376, + -0.018608183, + -0.008066237, + -0.021649, + -0.0040331185, + -0.0031854573, + -0.016509213, + 0.018258354, + -0.018527454, + 0.037377827, + 0.010145025, + -0.028551385, + -0.005338248, + 0.0074136723, + 0.023317412, + 0.0075751315, + 0.03624761, + -0.02273885, + -0.0121699935, + 0.02497237, + 0.000634905, + 0.0033469165, + -0.0294125, + -0.023223227, + 0.0053819763, + -0.018608183, + -0.0026321227, + -0.01726269, + -0.007783683, + 0.03802366, + -0.0033485985, + 0.0053819763, + 0.0104141245, + -0.024649452, + -0.007063844, + 0.023317412, + 0.015056078, + 0.0021948372, + -0.021770094, + 0.014437151, + 0.010367032, + -0.0074002175, + -0.025376018, + 0.022644665, + 0.0027885365, + -0.01699359, + -0.014840799, + 0.030300526, + -0.0006176659, + -0.028928123, + 0.023815244, + -0.02957396, + -0.033395164, + 0.025066555, + -0.015917195, + -0.022510115, + -0.02404398, + -0.01063613 + ] + }, + { + "object": "embedding", + "index": 7, + "embedding": [ + 0.024549589, + -0.006144328, + -0.0028832944, + -0.013314444, + -0.0069968407, + 0.013993681, + -0.026268475, + -0.008857813, + -0.020072164, + -0.013064927, + 0.022997046, + 0.018325554, + 0.0039887885, + -0.021319743, + -0.0155808795, + -0.009024157, + 0.04932097, + -0.0061477935, + 0.014118439, + -0.011817348, + -0.004775456, + -0.005073489, + 0.0033060852, + 0.0011115585, + 0.008712262, + -0.009516258, + 0.008746917, + -0.013238203, + -0.0026129854, + -0.013737234, + -0.003250637, + -0.0150541235, + -0.025783306, + -0.0341005, + -0.020987056, + -0.01412537, + -0.01635715, + -0.0047823875, + 0.0049002143, + -0.0023201508, + 0.012392621, + -0.009620222, + -0.004837835, + 0.0061270003, + -0.009661809, + 0.038453165, + -0.0066468255, + -0.013245134, + -0.025603099, + 0.0003155769, + 0.02205443, + 0.0023704006, + -0.020113751, + -0.02108409, + -0.026074408, + -0.026254613, + -0.018256243, + 0.03276975, + 0.0028763635, + -0.018588932, + -0.0022144532, + -0.0104658045, + 0.0045952504, + 0.013210478, + 0.0078112325, + -0.01461054, + -0.009620222, + 0.005371522, + -0.017064113, + -0.0048828865, + 0.011172766, + 0.005461625, + 0.0011860667, + -0.02136133, + 0.022484152, + -0.0065393946, + -0.0055967793, + 0.0025783305, + -0.01183121, + 0.005752727, + 0.026434818, + -0.014305576, + -0.007617165, + 0.021444501, + -0.0032610337, + 0.0035937214, + -0.005260626, + 0.02991418, + -0.012344104, + 0.007825094, + 0.015123433, + 0.019046377, + -0.016066048, + -0.0027931915, + -0.031910308, + -0.0038848233, + -0.011706453, + 0.04502375, + 0.016897768, + -0.0039160126, + 0.014035267, + 0.006414637, + -0.022373255, + -0.022109877, + -0.006972582, + -0.0012137907, + -0.00049383345, + 0.0022387118, + 0.008365712, + 0.010382632, + -0.0013385486, + 0.033296507, + 0.01935134, + -0.05838671, + 0.00013656229, + -0.040144328, + -0.010410356, + 0.0024812967, + -0.011644074, + -0.036484763, + 0.023149528, + 0.033989605, + 0.010548976, + 0.0018107228, + 0.027973501, + -0.0084072985, + -0.010590562, + -0.03493222, + 0.0013082256, + 0.01926817, + 0.01092325, + 0.011789625, + 0.029110184, + 0.014915504, + -0.0037947204, + 0.005943329, + -0.027848743, + 0.013155031, + -0.022345532, + -0.015622465, + -0.007894404, + 0.03166079, + -0.020127613, + 0.0046160435, + 0.011054939, + 0.013064927, + 0.005874019, + 0.012697585, + 0.017868107, + -0.0040061157, + 0.03263113, + -0.011914383, + 0.007021099, + -0.0015586078, + 0.005655693, + 0.025007034, + -0.004896749, + 0.031078586, + 0.005558659, + 0.0073329937, + 0.005246764, + 0.006525533, + 0.012725309, + 0.0008650749, + 0.019947406, + 0.002574865, + 0.0043006833, + 0.02922108, + 0.007346856, + -0.010514321, + 0.0050076446, + 0.023856489, + -0.034849048, + 0.018769138, + 0.006986444, + 0.03590256, + 0.016856182, + -0.013681786, + -0.026753645, + -0.0056348997, + -0.00897564, + 0.014776884, + 0.020432577, + 0.01996127, + -0.01447192, + 0.022151463, + 0.022802977, + -0.0017474773, + -0.008116197, + -0.01962858, + -0.0022560393, + 0.0153175015, + 0.02999735, + -0.014291714, + -0.66404486, + -0.0057042097, + -0.010278667, + 0.011359903, + 0.0086984, + 0.016523495, + 0.010847009, + 0.013064927, + -0.019531546, + -0.013155031, + -0.006109673, + -0.012572827, + -0.004751198, + -0.000104181534, + -0.0065844464, + -0.023468353, + 0.005063093, + -0.01718887, + 0.009446948, + 0.017216595, + 0.0065324637, + 0.013300582, + 0.007755785, + -0.0040234434, + 0.00036907554, + 0.011477729, + 0.012468862, + -0.023343595, + -0.003002854, + 0.012115381, + -0.02247029, + 0.033712365, + -0.023204975, + -0.02894384, + 0.013016411, + 0.011456937, + -0.010313322, + 0.038591787, + 0.024826828, + 0.050651718, + -0.0024067883, + 0.005867088, + 0.010874732, + 0.0046437676, + -0.017507697, + -0.011117318, + 0.027266538, + -0.014291714, + 0.0006905005, + 0.0030704313, + 0.01064601, + -0.040809706, + -0.00018410459, + 0.013758027, + 0.03069045, + 0.0009781368, + 0.03673428, + 0.009211293, + 0.0022543066, + 0.008920192, + 0.0025384773, + -0.027807156, + -0.003569463, + -0.0084696775, + -0.006882479, + 0.0020637042, + -0.0155808795, + -0.011297524, + -0.0020637042, + -0.019739477, + -0.011630211, + 0.03437774, + -0.018006727, + -0.006702273, + 0.0109994905, + 0.0060576904, + 0.011678728, + -0.010119255, + -0.014929365, + -0.0026112527, + -0.021278158, + -0.01732749, + -0.034571808, + 0.009571706, + 0.007076547, + -0.01691163, + -0.031300377, + 0.017590867, + 0.0293597, + -0.015539293, + 0.016897768, + 0.021735603, + 0.009828152, + -0.0075686476, + -0.0016062583, + 0.0058636228, + -0.007880542, + -0.014028336, + 0.0028226483, + -0.0059052086, + 0.010174702, + -0.004924473, + 0.0062725516, + 0.010410356, + 0.02894384, + -0.002160738, + -0.016246255, + 0.020765264, + 0.025797168, + -0.013536235, + -0.0020844971, + -0.012004485, + -0.01940679, + -0.006546326, + -0.0024691673, + -0.028777495, + 0.023981247, + -0.0029370096, + 0.032326166, + -0.0023149527, + 0.008656814, + -0.014804607, + 0.010611355, + -0.021042503, + 0.0034187138, + 0.02366242, + 0.0004886352, + -0.01774335, + -0.0007715065, + 0.008372643, + 0.0007702069, + 0.016371014, + 0.0069829784, + -0.010687596, + -0.0006029967, + 0.012018347, + 0.020155337, + -0.011560901, + 0.012441138, + -0.008656814, + -0.01663439, + -0.013771889, + -0.01002222, + 0.004914076, + -0.006764652, + -0.034072775, + -0.014097646, + -0.009446948, + -0.035375804, + -0.00031406077, + -0.0009971971, + 0.011886658, + -0.01642646, + 0.013695648, + 0.010237081, + -0.011581695, + 0.016759148, + -0.014499644, + -0.029831007, + -0.0019285496, + 0.015636327, + -0.0038986853, + -0.012565896, + -0.00078017026, + 0.0029768627, + -0.0051947813, + 0.0058705537, + 0.019365203, + 0.004775456, + -0.037760068, + 0.01231638, + -0.013071858, + -0.01454123, + 0.021042503, + 0.006511671, + 0.009578637, + 0.013203547, + -0.007956783, + -0.002713485, + 0.008733055, + 0.019794924, + -0.017632455, + -0.02852798, + -0.0075270617, + 0.010555907, + -0.005378453, + 0.011505454, + 0.017798798, + -0.02380104, + 0.011713384, + 0.0137233725, + 0.010521252, + -0.010250943, + -0.003437774, + -0.0049903174, + 0.0011427479, + 0.00028265468, + 0.021319743, + -0.011983693, + 0.03193803, + 0.020072164, + 0.0014355825, + 0.02156926, + 0.0067854454, + 0.018783, + -0.039229438, + -0.010292529, + -0.007838957, + 0.03179941, + 0.019254306, + 0.00025428092, + -0.019808786, + -0.015081847, + 0.0009486801, + -0.000596932, + 0.02037713, + -0.0029959232, + 0.0058948123, + -0.004584854, + -0.0042209765, + 0.016509634, + -0.012011416, + -0.015830396, + 0.012940169, + -0.020501886, + 0.0144580575, + 0.029831007, + 0.03451636, + 0.012891653, + -0.035569873, + -0.019171136, + 0.008691469, + -0.005960657, + -0.003912547, + -0.0027308124, + -0.0006081949, + 0.023191113, + -0.02330201, + 0.01551157, + 0.009550912, + 0.033241056, + 0.017798798, + 0.026351647, + -0.008199369, + -0.00897564, + -0.022400979, + 0.0058151055, + 0.012718378, + -0.0095370505, + 0.01488778, + -0.011935175, + 0.015969016, + 0.008019162, + 0.01260055, + 0.0018211192, + 0.0033355418, + 0.019794924, + 0.007173581, + 0.018450312, + 0.02525655, + -0.008871675, + -0.011318317, + -0.0052710227, + 0.013425339, + 0.00077627157, + -0.008441953, + 0.007242891, + -0.028417084, + -0.016925493, + -0.019101825, + -0.014763022, + -0.010244012, + 0.024799105, + -0.004896749, + -0.003957599, + -0.02999735, + -0.01635715, + -0.008317195, + 0.0023028234, + 0.0029647336, + -0.017369077, + -0.045633677, + 0.003624911, + 0.021056365, + -0.01134604, + -0.010680665, + -0.023884213, + -0.0038189788, + -0.0040996843, + 0.0023738663, + 0.0056660892, + 0.020862298, + -0.011124249, + -0.004307614, + 0.009641016, + -0.028236877, + 0.032326166, + -0.011713384, + 0.002968199, + -0.0034412395, + -0.0065775155, + -0.02357925, + -0.0079429215, + -0.027141782, + 0.027918052, + 0.036512487, + -0.018796861, + -0.04216818, + -0.02400897, + -0.026393233, + 0.007845888, + 0.0068027726, + 0.0016487107, + 0.005142799, + -0.00723596, + -0.007915198, + -0.012642137, + -0.0012510448, + 0.032464787, + 0.0090726735, + -0.02073754, + -0.02407828, + -0.036318418, + -0.01064601, + 0.10180247, + 0.03263113, + 0.0059537254, + 0.007270615, + -0.004165529, + 0.007388442, + -0.008642952, + -0.0019285496, + 0.021804914, + 0.0007793039, + 0.012787688, + 0.01190052, + 0.009308328, + 0.0040303743, + 0.012954032, + 0.011401488, + -0.014527367, + -0.033435125, + -0.0033961881, + -0.010146978, + -0.0069344616, + -0.01990582, + -0.013508512, + 0.041585978, + -0.013792682, + 0.0012822343, + 0.021832637, + 0.023094079, + 0.0012250536, + -0.025658548, + -0.014236266, + 0.008005301, + -0.00995291, + 0.003860565, + -0.022997046, + 0.00967567, + 0.025298135, + 0.0008516461, + 0.019642442, + 0.0016209867, + 0.013155031, + 0.014596677, + -0.005343798, + -0.0053195395, + 0.027945776, + -0.0026667006, + -0.017979003, + 0.012489655, + -0.002444909, + -0.02366242, + 0.030939966, + -0.008039955, + -0.03598573, + -0.0012302519, + 0.0023218838, + 0.013023342, + 0.02080685, + 0.0056660892, + -0.023260422, + 0.001045714, + -0.001802059, + -0.035514425, + 0.007818163, + -0.01071532, + -0.010840078, + -0.03346285, + 0.007242891, + -0.0065671187, + -0.03199348, + -0.0011748038, + 0.0046056467, + -0.023981247, + -0.012143105, + 0.016343288, + 0.004969524, + -0.006206707, + 0.02567241, + -0.012753033, + -0.021333605, + 0.019600857, + -0.021181123, + -0.016176945, + -0.0052329022, + -0.008601367, + -0.021139538, + 0.03437774, + 0.006123535, + -0.01822852, + -0.014970952, + 0.011637143, + 0.026102131, + -0.01642646, + 0.007326063, + -0.0018332484, + -0.016246255, + -0.0017700031, + 0.016828459, + 0.019517684, + -0.022525737, + -0.019642442, + 0.034904495, + -0.029831007, + -0.017424524, + -0.008296402, + 0.029331975, + 0.019157274, + 0.00608888, + -0.0068027726, + -0.017369077, + 0.0017301498, + 0.03742738, + -0.019988993, + -0.00855978, + 0.008733055, + -0.002181531, + 0.014555092, + -0.014305576, + 0.019697892, + 0.015497707, + -0.035514425, + -0.023856489, + -0.00904495, + 0.0023010906, + 0.037676893, + -0.005052696, + -0.008289471, + -0.0018869637, + -0.011082663, + 0.009377638, + -0.00290582, + 0.0047962493, + 0.0347936, + 0.0077904398, + -0.012364897, + -0.024535727, + 0.0086706765, + -0.012856998, + 0.009100398, + -0.009211293, + -0.011644074, + -0.012545103, + 0.009051881, + -0.005364591, + -0.0059537254, + -0.023704007, + -0.04183549, + 0.015386811, + -0.013543166, + -0.0147214355, + 0.021208849, + -0.011228214, + 0.015816534, + -0.0047789216, + 0.016163083, + -0.03897992, + -0.022345532, + -0.007908267, + -0.005295281, + 0.0054928144, + 0.023066355, + 0.028472532, + -0.0062240344, + 0.003562532, + -0.0013342168, + 0.0066191014, + 0.003992254, + 0.027252676, + -0.0055136075, + -0.014707574, + 0.023676282, + 0.011997554, + -0.004182856, + -0.015691776, + -0.00038142139, + -0.012863928, + 0.015705638, + 0.020418715, + -0.01649577, + -0.0056452965, + -0.020307818, + -0.010361839, + -0.009966772, + -0.035514425, + 0.002479564, + -0.0061547244, + -0.008504332, + 0.025353584, + 0.0025020896, + 0.005101213, + -0.014596677, + 0.0327143, + -0.0045536645, + 0.00046914179, + 0.020058302, + 0.0014052595, + 0.0046576294, + 0.0047096116, + -0.0016556417, + -0.005122006, + 0.013889716, + 0.012489655, + -0.008913261, + -0.015123433, + -0.0011626746, + 0.008379574, + 0.020224646, + 0.010535114, + -0.013619407, + 0.019171136, + -0.025062481, + -0.011657936, + -0.010535114, + -0.013813475, + -0.018076038, + -0.018394863, + 0.023426767, + -0.029692387, + 0.017979003, + -0.013064927, + -0.03124493, + 0.0075339926, + 0.00883702, + 0.017105699, + 0.004217511, + 0.025020896, + 0.018020589, + 0.00018702859, + -0.014638264, + 0.017147284, + 0.006310672, + -0.023898074, + 0.028555704, + 0.017687902, + -0.0035937214, + -0.012170829, + -0.009516258, + 0.004363062, + -0.018810723, + -0.0033736622, + 0.03590256, + 0.017992865, + 0.00876771, + -0.0078112325, + -0.009141983, + -0.01781266, + 0.028583428, + -0.02219305, + -0.00995291, + -0.0096687395, + -0.02330201, + -0.012399552, + 0.018672103, + -0.02219305, + 0.004706146, + 0.007845888, + -0.021319743, + 0.011124249, + -0.018519621, + -0.013570891, + 0.011373765, + 0.016412599, + 0.017272042, + -0.027613088, + -0.0058151055, + 0.0076379576, + 0.0058497605, + -0.013459994, + -0.006615636, + -0.008053818, + 0.028500255, + -0.007478545, + 0.0007112935, + 0.0098836, + -0.02032168, + 0.03046866, + -0.0027931915, + -0.011852004, + -0.01892162, + -0.0068201004, + -0.01836714, + 0.0045536645, + 0.020224646, + -0.008199369, + -0.009550912, + -0.017563144, + -0.008989502, + -0.007915198, + -0.0048586284, + 0.010528183, + 0.0038155133, + -0.010036082, + -0.011145041, + -0.0073953727, + 0.014943227, + -0.0062794825, + -0.0019302825, + 0.008920192, + 0.028028948, + -0.02776557, + 0.0074369586, + 0.006650291, + 0.0018956275, + -0.029193355, + 0.009862808, + -0.008448884, + -0.010410356, + 0.019448375, + 0.018311692, + -0.020335542, + 0.008227092, + -0.0038536338, + 0.007984508, + 0.009876669, + 0.009446948, + 0.031965755, + 0.0014693711, + -0.020820713, + -0.0013515443, + -0.021070229, + 0.011845073, + -0.016038325, + 0.00828254, + 0.02344063, + -0.013557028, + 0.01711956, + 0.0024414433, + 0.019226583, + 0.037593722, + -0.016412599, + -0.012787688, + -0.00476506, + 0.0005271889, + -0.011470798, + -0.04632678, + -0.01705025, + -0.003583325, + -0.021680156, + 0.042057283, + -0.003583325, + 0.00042603965, + 0.012863928, + 0.019670166, + 0.01962858, + 0.009585568, + -0.0030271125, + -0.01795128, + -0.014638264, + -0.0061616553, + 0.0054165735, + -0.0100014275, + -0.007457752, + 0.026102131, + 0.01064601, + -0.02581103, + -0.006632963, + 0.0020810317, + -0.022373255, + 0.01962858, + -0.02227622, + 0.02073754, + 0.022096016, + 0.012392621, + 0.0016166548, + 0.00959943, + 0.013217409, + 0.0040130466, + -0.022165326, + -0.03102314, + -0.0034065845, + -0.029886454, + -0.0050007137, + -0.025824891, + -0.016870044, + -0.010957905, + 0.03041321, + -0.0050353687, + 0.0116648665, + 0.012080726, + -0.011172766, + 0.0035729285, + 0.0022629702, + 0.0014962287, + -0.00049340026, + 0.014139232, + 0.026975436, + -0.027280401, + 0.006137397, + 0.030219143, + 0.010902457, + -0.01677301, + -0.010978698, + 0.010084599, + -0.014104577, + 0.011041077, + -0.014305576, + 0.01935134, + 0.006650291, + -0.030357763, + 0.009294466, + -0.018173072, + -0.025492204, + 0.009661809, + -0.012496586, + -0.0017509429, + -0.012753033, + 0.013148099, + -0.029193355, + -0.011519316, + 0.023329733, + -0.006813169, + 0.0028347773, + -0.013626338, + -0.015691776, + -0.017424524, + 0.006868617, + -0.0036907555, + -0.014527367, + 0.0008711396, + 0.028444808, + 0.024161452, + -0.015594741, + -0.00765182, + 0.0016963613, + -0.027543778, + 0.014513506, + -0.014527367, + 0.0014832332, + -0.023482215, + -0.0013567425, + -0.00055924477, + -0.022913873, + -0.017105699, + -0.007478545, + -0.00821323, + -0.00849047, + 0.0015170218, + 0.20615555, + -0.010361839, + 0.005316074, + 0.03498767, + 0.006359189, + 0.020002855, + 0.010569769, + 0.022622772, + -0.0043388037, + 0.012822343, + -0.024410969, + 0.0005024972, + 0.014832332, + 0.013494649, + 0.01767404, + -0.011470798, + -0.022844562, + -0.037593722, + -0.026628887, + 0.025575375, + 0.013688717, + 0.0070938743, + -0.014132301, + -0.016537357, + 0.0015768016, + 0.008393437, + -0.02414759, + -0.017992865, + 0.02894384, + 0.011096525, + 0.00946081, + 0.011359903, + -0.025436755, + -0.00009031954, + -0.00029478394, + 0.019850373, + -0.0025696668, + 0.032880645, + 0.019947406, + 0.0016833657, + -0.0060854144, + -0.0077141984, + -0.014665987, + 0.0013550097, + -0.0038813578, + -0.011158904, + -0.0043388037, + 0.008455815, + -0.0034741617, + 0.027557641, + -0.033157885, + -0.008739986, + 0.020488024, + 0.026310062, + 0.0031154826, + -0.02324656, + 0.035597596, + 0.030108247, + 0.0028295792, + -0.015456121, + -0.02269208, + 0.01948996, + -0.0048482316, + 0.010722251, + -0.0019770667, + 0.020404853, + -0.023204975, + -0.003694221, + 0.012288656, + -0.0045536645, + -0.00062812155, + -0.013709511, + -0.0017492102, + 0.0068720826, + -0.02547834, + -0.017771075, + 0.027931914, + -0.01120742, + 0.0008572776, + 0.022345532, + 0.0006632097, + -0.0056452965, + -0.0043318723, + 0.003203853, + 0.0029907248, + -0.028153706, + 0.03645704, + 0.013356029, + -0.023981247, + 0.00026294467, + -0.0057735196, + -0.0056868824, + 0.0048413007, + -0.012337173, + 0.0003433009, + 0.005402711, + 0.0015308837, + 0.041696873, + -0.02310794, + -0.009821221, + -0.016662115, + -0.02484069, + 0.021527674, + -0.0028191826, + 0.009232087, + 0.008150851, + -0.008296402, + 0.017881969, + -0.006979513, + -0.014943227, + -0.015705638, + -0.012413414, + 0.020931609, + -0.014790745, + 0.022082154, + 0.0040823566, + -0.005364591, + -0.011997554, + 0.0015048925, + -0.0125936195, + 0.017244319, + 0.0049972483, + 0.0010630415, + -0.0035365408, + 0.016398737, + -0.012579758, + -0.026115993, + 0.009627153, + -0.002236979, + -0.036346145, + 0.011699521, + -0.0011574763, + 0.01260055, + 0.011110387, + -0.039201714, + 0.007014168, + 0.0024466417, + 0.007173581, + -0.006736928, + 0.018214658, + 0.0016556417, + -0.021236572, + -0.0068304967, + 0.01467985, + 0.0013541434, + 0.006276017, + 0.024119867, + -0.0045813886, + -0.0063661197, + -0.010978698, + -0.012572827, + 0.00010591428, + -0.023080217, + -0.020501886, + 0.0293597, + 0.006234431, + -0.021860361, + -0.026129855, + 0.0113321785, + 0.0115955565, + -0.018048314, + -0.0001495579, + 0.025464479, + 0.007686475, + -0.0003125446, + -0.010424218, + -0.17987321, + 0.017105699, + 0.016967079, + -0.01537295, + 0.025228826, + 0.020723678, + 0.021194985, + -0.0026805627, + -0.013411477, + 0.0053126086, + 0.02129202, + -0.0075339926, + -0.027613088, + -0.008462747, + -0.020917745, + 0.0026476404, + 0.0013913974, + 0.013563959, + 0.018200796, + 0.009828152, + 0.02380104, + -0.03396188, + 0.023856489, + -0.000010633394, + -0.011865865, + 0.00019287663, + -0.011366834, + 0.00932219, + -0.0020255835, + -0.033379678, + -0.01635715, + 0.000749414, + 0.041336462, + 0.02533972, + 0.008532057, + 0.03227072, + 0.0011921313, + 0.0057146065, + -0.015622465, + 0.010375701, + 0.00849047, + 0.006352258, + -0.0023946592, + -0.009433086, + -0.007901335, + 0.01621853, + 0.012704516, + -0.0065948428, + -0.0037704618, + 0.003167465, + -0.007048823, + -0.02636551, + -0.010743044, + -0.002940475, + 0.0076587508, + 0.013203547, + 0.0054512285, + 0.0013784019, + -0.0005761391, + 0.008871675, + -0.035874836, + -0.00025428092, + 0.017784936, + -0.021139538, + -0.011443075, + -0.011810417, + -0.02477138, + -0.013709511, + -0.021319743, + 0.016592804, + -0.012607482, + -0.015650189, + -0.0017076242, + -0.039700747, + -0.016010601, + 0.020765264, + -0.025921926, + 0.0051289373, + -0.008227092, + 0.0037704618, + -0.0067923763, + 0.046520844, + -0.013619407, + -0.0029040873, + 0.0058324332, + -0.005385384, + 0.0034568342, + 0.020418715, + -0.010847009, + -0.016939355, + 0.007346856, + -0.010382632, + -0.006546326, + -0.0097380495, + 0.023288148, + 0.016925493, + -0.016232394, + 0.027640812, + -0.013959026, + -0.016925493, + -0.00084731425, + -0.005551728, + -0.02136133, + 0.014090715, + 0.044053413, + 0.01447192, + -0.00060559576, + -0.0019372134, + 0.013605545, + -0.0006012639, + -0.019018654, + 0.0021018246, + 0.030856794, + 0.010763837, + -0.016010601, + 0.013515443, + 0.012323311, + -0.009135053, + 0.025145654, + -0.01760473, + 0.04410886, + -0.0073607177, + 0.0047026807, + 0.013113445, + 0.015109572, + -0.013418408, + -0.13895261, + -0.031272653, + 0.012129243, + 0.038647234, + 0.0032229132, + 0.02122271, + 0.008573642, + 0.0056314343, + 0.012940169, + 0.020862298, + -0.022816839, + -0.02212374, + 0.005447763, + 0.020973194, + 0.018741414, + -0.009377638, + -0.0021936602, + -0.023620835, + -0.012011416, + 0.022719806, + -0.0068998067, + -0.0014633066, + 0.0105767, + 0.006068087, + 0.008441953, + 0.008726124, + -0.020474162, + 0.021264296, + 0.012448069, + 0.0005076955, + 0.0013558761, + -0.023288148, + 0.019642442, + -0.036900625, + -0.0150264, + 0.024341658, + -0.009398431, + 0.000066169356, + 0.026102131, + -0.035375804, + 0.003411783, + -0.0036283764, + 0.024438692, + -0.02136133, + -0.007977577, + 0.0022733668, + -0.015650189, + 0.020224646, + 0.013903578, + -0.02073754, + -0.030302314, + 0.003527877, + -0.00959943, + -0.009356845, + 0.01940679, + -0.015469983, + -0.0005536133, + 0.024161452, + -0.004245235, + -0.0033060852, + 0.0023513404, + -0.009051881, + -0.0055274693, + 0.0034499033, + 0.0066260323, + 0.005343798, + -0.013321375, + -0.009211293, + 0.010458873, + -0.0014451126, + 0.0025367446, + 0.014901642, + -0.005420039, + 0.026670473, + -0.031050863, + -0.0069552544, + -0.015761085, + -0.0037600654, + 0.010950974, + -0.03069045, + -0.010978698, + -0.0155808795, + 0.006262155, + -0.0010517787, + 0.020196922, + 0.020890022, + 0.024854552, + 0.006137397, + 0.0030323109, + -0.0071943738, + 0.008608297, + -0.0058601573, + 0.023814902, + -0.0197672, + 0.008344919, + -0.00723596, + 0.012205484, + -0.021056365, + -0.007277546, + 0.02665661, + -0.02832005, + -0.02366242, + -0.10518479, + 0.017701764, + -0.0063487925, + -0.0024709, + 0.0029266132, + -0.002706554, + -0.0002720416, + -0.008109265, + 0.0049348692, + -0.037732344, + -0.03276975, + 0.013155031, + -0.0077141984, + 0.0068270313, + -0.031189483, + -0.014804607, + 0.026947713, + 0.018034453, + -0.0025280807, + -0.0100014275, + 0.00006822699, + 0.0013818673, + 0.012198553, + 0.016800735, + -0.024064418, + -0.005586383, + 0.011775763, + -0.0067750486, + -0.014160025, + 0.0057908474, + 0.0016253185, + -0.024549589, + 0.0033615332, + 0.040948324, + -0.004120477, + -0.01585812, + -0.03742738, + 0.01474916, + 0.012884722, + 0.0204603, + -0.023745593, + -0.026698196, + 0.025755582, + -0.017285904, + 0.014166956, + 0.021070229, + 0.0013264194, + 0.02400897, + 0.020903884, + 0.008220161, + -0.005822037, + 0.022068292, + 0.009897462, + -0.01843645, + -0.021264296, + -0.020931609, + 0.01642646, + 0.027640812, + 0.013965957, + -0.020987056, + 0.031633068, + 0.011962899, + 0.017355215, + -0.005402711, + 0.003238508, + -0.02170788, + -0.020557335, + -0.01405606, + -0.006255224, + -0.026060546, + -0.015733361, + -0.011644074, + 0.020432577, + 0.0064596883, + 0.034682706, + -0.006553257, + -0.00090622774, + -0.0044843545, + 0.0063765165, + 0.03160534, + -0.004879421, + 0.012829274, + -0.0456614, + 0.020820713, + 0.013563959, + 0.0033961881, + -0.014430334, + -0.016066048, + -0.021305881, + 0.020141475, + 0.019753339, + 0.010084599, + 0.02463276, + -0.010819285, + -0.003086026, + 0.01426399, + 0.019309755, + -0.019711753, + 0.0016504434, + 0.014638264, + 0.003673428, + -0.011290593, + -0.025977373, + -0.0016920294, + -0.018685965, + -0.013945164, + -0.026850678, + -0.022442566, + -0.0065740496, + 0.013702579, + 0.0093360515, + 0.021097952, + 0.008663745, + 0.02991418, + -0.0045605954, + 0.0057908474, + 0.00723596, + -0.014652126, + -0.026864542, + 0.017577006, + 0.046160433, + 0.019434514, + 0.028555704, + 0.0032575682, + 0.014180818, + 0.003694221, + -0.005489349, + -0.03681745, + 0.01767404, + -0.0073329937, + 0.0022491082, + -0.013861992, + -0.016454184, + -0.0030548365, + -0.008587504, + 0.0012934972, + 0.0026961574, + 0.018783, + -0.032242995, + 0.049431864, + -0.018519621, + -0.015885843, + -0.0016253185, + -0.005343798, + 0.017646316, + 0.00240159, + 0.018186934, + -0.032326166, + -0.005752727, + 0.007915198, + 0.0013454796, + 0.013758027, + -0.009065743, + -0.010535114, + -0.0056452965, + -0.040976048, + 0.0027117522, + -0.019850373, + 0.001718887, + 0.03415595, + 0.01495709, + 0.015899705, + 0.012552034, + -0.025686271, + -0.020474162, + 0.011498523, + 0.0055136075, + 0.00008230558, + -0.012053003, + 0.013314444, + -0.009751911, + -0.038924474, + -0.03096769, + -0.0020238508, + -0.0019891958, + -0.011165835, + -0.003458567, + 0.0043041487, + 0.014638264, + -0.0064388956, + 0.0429999, + -0.011290593, + -0.029526044, + 0.0103964945, + -0.0064354297, + -0.007346856, + -0.013584753, + -0.0008802365 + ] + }, + { + "object": "embedding", + "index": 8, + "embedding": [ + 0.011767127, + 0.006192154, + -0.0037607332, + -0.028241105, + -0.003828555, + 0.013503372, + -0.025406143, + 0.0040421947, + -0.009298404, + -0.010261477, + -0.004018457, + 0.0074604265, + -0.0018278045, + 0.0119773755, + -0.013076093, + -0.0055546267, + 0.033314195, + -0.00091305445, + 0.020034635, + -0.005205343, + -0.020780679, + 0.010403904, + 0.020210974, + -0.022530487, + -0.01789146, + -0.0061141583, + 0.015368478, + 0.0002994768, + -0.008905036, + -0.009352662, + -0.008735481, + -0.017376011, + -0.020333054, + -0.0075011197, + -0.010152962, + -0.0062396294, + -0.010770143, + 0.0021414815, + 0.0021041792, + -0.020021072, + 0.028078333, + -0.003923506, + -0.011305937, + 0.00513413, + -0.024253167, + 0.03917402, + 0.000032453914, + 0.012289356, + -0.020088894, + 0.026125057, + 0.004445736, + 0.019180078, + -0.021051968, + -0.018474728, + -0.02327653, + -0.015856797, + -0.013198173, + 0.019315721, + 0.0029129575, + -0.00022169335, + -0.025758818, + -0.024985647, + -0.018881662, + 0.008206469, + 0.0032673276, + 0.0022499969, + -0.015015803, + 0.006232847, + -0.0065414375, + 0.008769392, + 0.02859378, + -0.0094137015, + 0.008674441, + -0.004571207, + 0.018298391, + -0.01592462, + -0.026545553, + -0.0027891821, + -0.009725683, + -0.0009537477, + 0.010064794, + -0.011197422, + -0.015707588, + 0.026681198, + 0.022639003, + 0.012133366, + 0.004255834, + 0.029489031, + -0.0065448284, + 0.011923118, + 0.011061777, + 0.012764111, + -0.010749796, + 0.007080623, + -0.028729424, + -0.021255434, + -0.020441568, + 0.048045147, + -0.019966815, + -0.025107726, + 0.023466432, + -0.024958517, + -0.032147657, + -0.012811586, + -0.024985647, + -0.015368478, + -0.0141341165, + 0.0130354, + 0.009040681, + -0.004849277, + -0.014093423, + 0.03133379, + 0.021567414, + -0.06516343, + 0.005303685, + -0.01417481, + -0.022408407, + -0.031659335, + -0.009637514, + -0.02364277, + 0.023561383, + 0.031713594, + 0.017660864, + 0.0018244133, + 0.028485265, + -0.009149196, + -0.0013479633, + -0.021594543, + 0.0015031063, + -0.0018735843, + 0.027698528, + 0.008525233, + 0.021160481, + 0.0084235, + -0.017633734, + 0.018651066, + -0.015856797, + 0.023018807, + -0.012235099, + -0.023791978, + -0.016060263, + 0.01509719, + -0.032635976, + 0.0055546267, + -0.01220797, + 0.025894461, + 0.024700794, + 0.014459663, + 0.0021838702, + -0.0073044356, + 0.018705323, + -0.01589749, + 0.010098704, + -0.01669779, + 0.0071009696, + 0.010349646, + 0.008626966, + 0.027779914, + -0.011312719, + 0.0013589845, + -0.008498104, + 0.011895989, + 0.01405273, + -0.0033046298, + 0.037492033, + 0.009325533, + -0.0029044796, + 0.014961546, + 0.016236601, + -0.013510154, + -0.015015803, + 0.007826665, + -0.038821347, + 0.016874127, + 0.02361564, + 0.033287067, + 0.013693273, + -0.0076231994, + -0.020889195, + -0.0010478508, + -0.0061378963, + 0.021933654, + 0.030465668, + 0.026423473, + -0.033070035, + -0.012960795, + 0.03255459, + -0.013510154, + 0.0278613, + -0.01266916, + 0.019139385, + 0.026179314, + 0.021947218, + -0.01152975, + -0.66194326, + -0.003367365, + -0.010980391, + 0.021268997, + 0.0051002186, + 0.018189875, + 0.010573459, + 0.00056334696, + -0.025867334, + 0.0013691578, + -0.021363948, + 0.0028078333, + -0.0089999875, + 0.0003458925, + -0.0089999875, + -0.00086218794, + 0.0006595695, + -0.001080914, + 0.0008346352, + 0.009210235, + 0.0023144276, + 0.022082862, + 0.004238879, + -0.013455897, + 0.021920089, + 0.014120553, + 0.027942687, + -0.036813814, + -0.0042592254, + -0.0023686853, + -0.013062528, + 0.016250165, + -0.012472477, + -0.0058530434, + 0.020156715, + -0.00061675685, + -0.025080597, + 0.022462666, + -0.0069585433, + 0.04430137, + -0.014812337, + 0.0049408367, + 0.01869176, + -0.010512419, + -0.000081545426, + 0.004255834, + 0.026816841, + -0.0060531185, + 0.014066295, + 0.00074519485, + 0.010064794, + -0.025053468, + -0.012675943, + 0.0051917783, + 0.012621685, + 0.0023992052, + 0.016779177, + 0.0032673276, + 0.0030096038, + 0.012418219, + -0.0002490341, + -0.019030869, + -0.021174047, + -0.012370744, + 0.0007621504, + 0.015042933, + -0.01393065, + 0.00321307, + 0.0034826626, + -0.011027867, + -0.0049272724, + 0.022910291, + -0.011339848, + 0.010193655, + 0.0010359819, + 0.01346946, + 0.02026523, + -0.027752787, + 0.0006358318, + -0.011448364, + 0.007087405, + -0.004313483, + -0.04362315, + -0.010308953, + 0.040286303, + -0.021011274, + -0.011292373, + -0.011855296, + 0.033721127, + -0.02029236, + 0.012628467, + 0.01881384, + -0.008328549, + 0.010837965, + -0.0077927546, + 0.017457398, + -0.0039438526, + 0.01441897, + 0.008416717, + -0.016670661, + -0.0033588875, + -0.006215892, + 0.016507888, + 0.0053308136, + 0.012784458, + 0.0040896703, + -0.025039904, + 0.031496562, + 0.023086628, + -0.030547054, + -0.015599073, + -0.0017014858, + -0.0018871487, + 0.00043406116, + 0.02499921, + -0.034752022, + 0.009325533, + 0.029461902, + 0.03255459, + -0.015232834, + -0.0018735843, + -0.00079309416, + 0.0018244133, + -0.012397872, + -0.027467933, + 0.006880548, + -0.004221923, + -0.021146918, + 0.0033470185, + 0.0216488, + 0.004449127, + 0.0040998436, + 0.028648037, + -0.0063786646, + 0.039011247, + 0.009122067, + 0.033124294, + -0.011658612, + 0.007941963, + 0.005524107, + -0.031686466, + -0.012065544, + -0.00968499, + 0.0007252721, + -0.010397121, + -0.03846867, + -0.012099455, + -0.0051137833, + -0.03477915, + 0.016073829, + 0.001085153, + -0.0035030092, + -0.015110754, + 0.0010902396, + -0.016223036, + -0.020305924, + 0.0006366796, + -0.003050297, + -0.022096427, + -0.0068398546, + 0.0024314208, + 0.0065177, + -0.01122455, + -0.015639767, + 0.0022059125, + -0.0018295, + 0.02521624, + 0.011319501, + -0.012831934, + -0.014106988, + -0.0062192827, + 0.00008382383, + -0.015029368, + 0.024456633, + 0.0154634295, + -0.0060904208, + 0.01122455, + 0.015232834, + 0.0076978034, + 0.023018807, + 0.010519201, + -0.0033521052, + -0.029868834, + -0.010492072, + 0.029380515, + -0.00038086323, + 0.028566651, + -0.0012555559, + -0.011631483, + 0.0016116217, + 0.0076503283, + 0.0034657072, + 0.0006366796, + 0.0027739222, + 0.002623018, + 0.0054257647, + -0.007019583, + -0.0019532752, + 0.010505637, + 0.0057173995, + 0.021133354, + 0.0078198835, + 0.019478494, + 0.009305187, + 0.0062396294, + -0.018935919, + -0.014269761, + -0.016440067, + 0.019505624, + 0.0036149158, + 0.021418206, + -0.021445334, + -0.020102458, + -0.0015861883, + -0.0040659322, + 0.03111676, + -0.015666895, + 0.004225314, + -0.0042897454, + -0.007745279, + 0.009603604, + -0.017335318, + -0.0048967525, + 0.010186873, + -0.045549296, + 0.013089657, + 0.011122817, + 0.01958701, + -0.0038014264, + -0.013781442, + -0.017253932, + 0.003984546, + 0.003659, + 0.011177075, + -0.029895963, + 0.0066126506, + 0.018434035, + -0.020563647, + 0.03543024, + -0.0011394105, + 0.02330366, + 0.028213976, + 0.024877131, + -0.024822874, + 0.0031774633, + -0.007704586, + 0.026925357, + 0.008213251, + -0.007908052, + -0.0012487737, + -0.011319501, + 0.01331347, + -0.0025941937, + -0.0067855967, + 0.0020855283, + -0.0051002186, + 0.018705323, + -0.0120791085, + 0.01854255, + 0.022462666, + -0.010871876, + -0.0044694734, + 0.006656735, + -0.006883939, + -0.00055020646, + 0.013164261, + 0.016833434, + 0.0017565913, + -0.032174785, + -0.02422604, + -0.0034114495, + -0.020590777, + 0.01168574, + -0.011394106, + 0.01134663, + -0.018732453, + -0.015694024, + -0.025080597, + 0.0060056434, + 0.005476631, + -0.005144303, + -0.029570417, + 0.011461928, + 0.016087392, + -0.01116351, + -0.021879395, + -0.015273527, + 0.00019021968, + -0.00412019, + 0.018149182, + 0.014147681, + 0.014364712, + -0.007541813, + 0.0038658574, + -0.011611137, + -0.011550097, + 0.029190613, + -0.021282561, + -0.005710617, + -0.003367365, + -0.007948745, + -0.02429386, + 0.0066024773, + -0.008247162, + 0.024185346, + 0.011109253, + -0.013015053, + -0.014120553, + 0.0029875617, + -0.019139385, + -0.0019142776, + 0.015816104, + 0.0033724518, + 0.014785209, + 0.002041444, + 0.007806319, + -0.0040455856, + 0.0054596756, + 0.018244134, + -0.007643546, + 0.004903535, + -0.030357152, + -0.023710592, + -0.020834936, + 0.121645644, + -0.0028061375, + -0.0020516173, + 0.002687449, + 0.006293887, + -0.0049883123, + -0.010654845, + -0.0035538757, + 0.0024941561, + -0.00027467933, + 0.0071348804, + -0.01337451, + -0.00839637, + 0.0119773755, + -0.00059174746, + -0.0060395543, + -0.016467195, + 0.0031384658, + 0.0047916286, + -0.015259963, + -0.00056037976, + -0.031035373, + 0.011536532, + 0.03358548, + -0.005931039, + 0.01488016, + 0.013510154, + 0.009373008, + 0.01226901, + -0.032853004, + -0.007813101, + 0.029678933, + -0.008152211, + 0.022299893, + 0.0062091094, + 0.026721891, + 0.021119788, + 0.013984908, + 0.023113757, + -0.013449114, + 0.009590039, + 0.012580992, + 0.0135305, + -0.018284827, + 0.032527458, + -0.021363948, + 0.0012903146, + 0.016874127, + -0.0016523149, + -0.021363948, + 0.03274449, + 0.016155215, + -0.03160508, + 0.0032842832, + -0.010688757, + 0.013944215, + 0.0041778386, + -0.0007443471, + 0.0008295485, + 0.012811586, + -0.0032045923, + -0.038360156, + 0.00642614, + -0.0014954763, + -0.01036321, + -0.024036137, + -0.0013293123, + 0.015965313, + -0.021784445, + -0.010180091, + 0.0051544765, + -0.027481498, + -0.013849264, + 0.023886928, + 0.010892223, + -0.0073383464, + 0.027237339, + -0.004717024, + -0.010295388, + 0.02339861, + -0.022856034, + 0.00039485155, + -0.010946481, + -0.010756578, + -0.03225617, + 0.024632972, + 0.023832671, + -0.015300657, + -0.011482274, + 0.0069381967, + 0.010458161, + 0.017850766, + 0.019139385, + 0.014256196, + -0.006822899, + -0.012587774, + -0.01263525, + 0.012614903, + -0.016223036, + -0.019573446, + 0.020238101, + -0.01696908, + 0.001300488, + 0.005049352, + 0.019898992, + 0.031822108, + 0.018271262, + 0.015178576, + -0.010661627, + 0.012499605, + 0.027549319, + -0.034236576, + 0.0260708, + 0.012804804, + -0.015259963, + 0.0049544014, + -0.0015319308, + 0.01205198, + 0.020183844, + -0.0042049675, + -0.008003003, + -0.011970594, + 0.012859062, + 0.027006743, + -0.0051137833, + 0.0050391788, + -0.015734717, + 0.001179256, + -0.0011343239, + 0.015571944, + 0.0024687229, + 0.023357917, + -0.018054232, + -0.00590391, + -0.026247136, + 0.0019871863, + -0.018366214, + 0.013028617, + -0.009291622, + -0.009834198, + -0.012770893, + 0.014825902, + 0.0061684162, + -0.022828905, + -0.026437039, + -0.024958517, + 0.0025009385, + 0.0004192251, + -0.023127321, + 0.01577541, + -0.00020802298, + 0.011102471, + -0.011326283, + 0.007813101, + -0.019085128, + -0.014364712, + -0.027264467, + -0.02330366, + -0.0029044796, + 0.02337148, + 0.03871283, + -0.0048255394, + 0.025012774, + -0.0033843208, + 0.013449114, + -0.00035479415, + 0.008348895, + 0.012140148, + -0.027996946, + 0.0032825875, + 0.010003754, + -0.0071009696, + -0.009895238, + 0.01079049, + -0.011733216, + 0.021798009, + -0.0001939287, + -0.0117196515, + -0.011482274, + -0.0063074515, + -0.023385046, + -0.029299129, + -0.015599073, + -0.001655706, + -0.016521454, + -0.007284089, + 0.022055734, + 0.0025297627, + 0.0097731585, + -0.017362447, + -0.0014446098, + -0.008369242, + 0.02878368, + -0.000865579, + -0.020305924, + -0.0027111867, + 0.00581235, + -0.020468697, + -0.018990176, + 0.024022574, + 0.000786312, + 0.0019804041, + -0.012926884, + 0.021892961, + 0.0047509354, + 0.01325243, + 0.01266916, + 0.0044355625, + 0.010770143, + -0.018949483, + -0.016467195, + -0.008470975, + -0.0112584615, + -0.021825138, + -0.009020334, + 0.012418219, + 0.0021346994, + 0.027807044, + -0.028159719, + -0.01881384, + 0.012106237, + 0.006965325, + 0.011183857, + 0.004316874, + 0.025067033, + 0.013598323, + 0.0029739973, + -0.022747518, + 0.014500356, + -0.011482274, + -0.009020334, + 0.047475442, + 0.022367714, + 0.004686504, + -0.022856034, + 0.0004115951, + 0.0035504848, + -0.006866983, + -0.0008626118, + 0.04427424, + 0.0100783575, + -0.0015200619, + -0.0067381216, + -0.004157492, + -0.030248638, + 0.0049544014, + -0.0084913215, + -0.005941212, + -0.026789714, + -0.015504123, + -0.0094611775, + 0.00044635392, + -0.0076910215, + 0.0075689415, + 0.0061378963, + -0.018623937, + -0.0045915535, + 0.0038794216, + -0.014636, + 0.02524337, + 0.02398188, + 0.011611137, + -0.0125402985, + 0.013523718, + 0.023900494, + -0.0043338295, + -0.013754313, + -0.016006006, + -0.00359796, + 0.022245634, + -0.01395778, + 0.0010495463, + 0.0071416628, + -0.010214002, + 0.024307426, + 0.003129988, + 0.017552348, + -0.0032215477, + -0.012872627, + -0.0020550084, + 0.005602102, + 0.030411411, + 0.006144678, + -0.003209679, + -0.034724895, + -0.020373747, + -0.004744153, + -0.0065821307, + 0.02152672, + 0.014825902, + -0.0055614086, + 0.002407683, + -0.024578713, + 0.011733216, + 0.0022533878, + -0.01749809, + 0.0012428393, + 0.029353386, + -0.021784445, + 0.00777919, + 0.008688006, + 0.022340586, + -0.023168014, + -0.008199687, + 0.004676331, + -0.006226065, + 0.021024838, + 0.0031537258, + -0.0027162733, + -0.011448364, + -0.016440067, + -0.0044966023, + -0.008165776, + -0.0050222236, + 0.037709065, + -0.0021635236, + -0.0039981105, + -0.0034182316, + -0.023534253, + 0.03363974, + -0.017240368, + 0.006677082, + 0.020129588, + -0.014866595, + 0.0015980572, + 0.022367714, + 0.0094137015, + 0.007860577, + -0.005005268, + -0.030004479, + 0.0061209407, + 0.016223036, + -0.007324782, + -0.028539522, + -0.01577541, + -0.013564412, + -0.012519952, + 0.027549319, + -0.0050696987, + -0.006907677, + 0.008464193, + 0.017782943, + 0.05577686, + 0.003662391, + -0.004649202, + -0.023317223, + -0.011495839, + -0.0009774854, + -0.03391103, + -0.00029269457, + -0.0041371454, + 0.02364277, + -0.011509404, + -0.014825902, + -0.022055734, + 0.008199687, + -0.039770856, + 0.008118301, + -0.014324019, + 0.020929888, + 0.008755827, + 0.008321767, + 0.013110003, + 0.004544078, + 0.0013572889, + 0.0061514606, + -0.018067796, + -0.006622824, + 0.02232702, + -0.04061185, + 0.016128086, + -0.012018069, + -0.014703822, + 0.017606607, + 0.020319488, + 0.0041642743, + -0.0009791809, + 0.02152672, + -0.029434772, + 0.0070399297, + 0.0039404617, + 0.014012037, + -0.0020075329, + 0.021174047, + 0.0014081554, + -0.024619406, + 0.012506387, + 0.024470199, + -0.012065544, + 0.0012716636, + 0.018339084, + 0.000033884535, + 0.0063854465, + 0.015382043, + -0.013639016, + 0.002948564, + 0.024266733, + -0.025962284, + 0.024755051, + -0.015219269, + 0.0060124253, + 0.0067313393, + -0.008247162, + 0.0026399735, + 0.004052368, + 0.017850766, + -0.03206627, + -0.011597572, + 0.01786433, + -0.014947982, + -0.0077249324, + 0.005469849, + 0.0145953065, + -0.03751916, + -0.009508653, + -0.014907288, + -0.0064498778, + -0.015124319, + 0.027508626, + 0.019478494, + -0.013150697, + -0.012614903, + -0.009671425, + -0.020780679, + 0.005340987, + -0.023045935, + 0.006656735, + -0.013110003, + -0.009352662, + -0.0010936307, + -0.0047543263, + -0.02133682, + -0.0060836384, + 0.002139786, + 0.008403153, + 0.0057614837, + 0.2369974, + -0.027996946, + 0.0017379402, + 0.025962284, + 0.007975874, + 0.011292373, + 0.03382964, + 0.0141341165, + -0.012465694, + 0.000540457, + -0.031008245, + 0.0068873297, + 0.004554251, + 0.007880923, + 0.0063447533, + 0.0011190639, + -0.032418944, + -0.05669924, + -0.019600574, + -0.009556128, + -0.0020702684, + -0.000778682, + -0.008755827, + -0.013428767, + 0.022299893, + 0.010776925, + -0.010770143, + -0.014446098, + 0.017660864, + 0.0056224484, + -0.012553863, + -0.0012046893, + -0.018895226, + 0.007941963, + 0.0037471687, + 0.015273527, + -0.01657571, + -0.0022211724, + 0.0013683101, + 0.020129588, + -0.009637514, + -0.004327047, + -0.0024941561, + -0.021892961, + -0.023262966, + 0.015219269, + -0.011631483, + -0.005378289, + -0.014527485, + 0.027617142, + -0.04796376, + -0.0069348053, + 0.019641267, + 0.03339558, + 0.002389032, + -0.012920102, + 0.0445184, + 0.012302921, + -0.009020334, + -0.015042933, + -0.038875602, + 0.0072637424, + -0.011299155, + 0.0008672746, + -0.009528999, + 0.0145410495, + -0.029597547, + -0.00830142, + 0.0029282174, + 0.0120791085, + -0.008572708, + -0.02398188, + -0.009786723, + -0.0017938934, + -0.019112255, + -0.036216978, + 0.013815354, + 0.0077588432, + -0.004510167, + 0.02432099, + -0.0031435525, + -0.009474741, + 0.017036902, + 0.014120553, + 0.016467195, + -0.015354914, + 0.0064668334, + 0.0222592, + -0.009386573, + -0.0096171675, + 0.0012682725, + -0.016331552, + -0.003726822, + -0.0099766245, + 0.00986811, + 0.016385809, + 0.003246981, + 0.02582664, + -0.030438539, + -0.02133682, + -0.0073722578, + -0.02063147, + 0.025596045, + 0.013123568, + 0.017782943, + -0.010661627, + 0.006619433, + 0.012648813, + -0.013849264, + -0.013869611, + -0.0057818303, + -0.022544052, + -0.00025030578, + -0.009495088, + 0.018013539, + -0.00030901426, + 0.014256196, + -0.020739986, + 0.0150022395, + -0.01980404, + 0.010939698, + -0.014364712, + 0.014093423, + 0.0084913215, + 0.0010351342, + -0.0096171675, + -0.020943452, + 0.0030486016, + -0.014215503, + -0.0432976, + -0.011556879, + 0.007975874, + 0.0040693237, + -0.008057261, + -0.031930625, + -0.0013801788, + -0.00035288665, + -0.008437064, + -0.006198936, + 0.005683488, + 0.0019804041, + -0.0076638926, + 0.011088907, + 0.0042320965, + -0.009657861, + -0.0021804792, + 0.0025806292, + -0.0050663077, + -0.008565926, + -0.007514684, + -0.006002252, + -0.0061819805, + -0.015788974, + -0.026314959, + 0.036542524, + -0.017552348, + 0.0044355625, + -0.024917824, + 0.0041676653, + 0.022164248, + -0.033558354, + -0.012248663, + 0.027834173, + -0.014473227, + -0.0063820556, + 0.010044447, + -0.17655438, + 0.025311192, + 0.019790476, + -0.0055274977, + 0.013218519, + 0.0091017205, + 0.0186375, + 0.01128559, + -0.025107726, + -0.0005629231, + 0.022896728, + 0.0038963773, + -0.043080572, + -0.024158217, + -0.018203441, + -0.021174047, + -0.0057038353, + -0.0063379714, + 0.009705337, + 0.016765613, + 0.02693892, + -0.019912556, + 0.022544052, + -0.016290858, + 0.00538168, + -0.011706087, + -0.014012037, + 0.0154634295, + -0.008464193, + -0.018054232, + -0.027942687, + -0.010987174, + 0.03184924, + 0.007080623, + 0.0032842832, + 0.040666107, + -0.01233005, + 0.005364725, + -0.01681987, + 0.016358681, + 0.02813259, + 0.033721127, + -0.004971357, + 0.0026671025, + -0.015327785, + 0.021798009, + -0.0040693237, + -0.0050595254, + 0.0013920477, + -0.0069280234, + 0.013598323, + -0.010770143, + 0.01417481, + 0.021947218, + 0.008403153, + 0.004384696, + -0.0041167988, + -0.0077588432, + -0.0097731585, + 0.002555196, + -0.03502331, + -0.011909554, + 0.0059513855, + -0.019980378, + -0.009142414, + -0.010715885, + -0.022530487, + -0.0041405368, + -0.019424237, + 0.017972846, + -0.015192141, + -0.021079095, + 0.011210986, + -0.0140798595, + 0.018271262, + 0.009081374, + -0.0107972715, + 0.018596807, + 0.014378277, + 0.011149947, + 0.0045983354, + 0.051816054, + -0.012804804, + 0.025677431, + -0.0056631416, + -0.005144303, + -0.007514684, + 0.012309703, + -0.019546317, + -0.011061777, + 0.01774225, + -0.009467959, + -0.018311955, + -0.022408407, + 0.011502621, + 0.025379013, + -0.0042320965, + 0.0036013513, + -0.0033656696, + -0.0006430379, + 0.0108244, + 0.0065380465, + -0.023195144, + 0.019790476, + 0.032853004, + 0.02536545, + 0.017131852, + -0.0035742226, + 0.00535116, + 0.02235415, + -0.0278613, + -0.01497511, + 0.011265243, + 0.016833434, + -0.030465668, + 0.01614165, + 0.015300657, + -0.024334554, + 0.012567427, + -0.024850002, + 0.048018016, + -0.0036149158, + 0.00071085995, + 0.019329287, + -0.0040388037, + 0.0035674402, + -0.090990074, + -0.041344326, + 0.0052833385, + 0.02533832, + -0.00067525334, + 0.029190613, + -0.008938947, + -0.011407671, + 0.021540286, + 0.029461902, + -0.030058736, + 0.0044999938, + 0.018718887, + 0.011645047, + 0.03155082, + -0.01263525, + 0.004717024, + -0.009203454, + -0.011292373, + 0.017782943, + -0.008118301, + -0.003923506, + -0.00016118336, + -0.0014963242, + -0.009196671, + -0.0014708908, + -0.025650302, + 0.010614152, + 0.024185346, + 0.010810836, + 0.00802335, + -0.032120526, + 0.014798773, + -0.02337148, + -0.014147681, + 0.0052901204, + -0.016901257, + 0.013442332, + 0.030248638, + -0.012445347, + -0.011278808, + -0.002112657, + 0.030492797, + -0.023683462, + 0.008586273, + -0.010817618, + -0.009888456, + 0.015721153, + 0.015911054, + -0.0178372, + -0.013204955, + -0.01180782, + -0.028186847, + -0.0184476, + 0.019437801, + -0.028702294, + -0.0058225235, + 0.014378277, + -0.014730951, + 0.0011699304, + -0.0031706812, + -0.007155227, + -0.028892197, + 0.032825876, + -0.005700444, + 0.0044084336, + -0.020360181, + -0.0014395232, + 0.01856968, + -0.008667659, + -0.0033436276, + 0.0033131074, + -0.02997735, + 0.013408421, + -0.013279559, + 0.009237364, + 0.0001644685, + -0.009752812, + -0.00019668396, + -0.035565887, + -0.009495088, + -0.022286328, + 0.0047305888, + -0.00916276, + 0.026735455, + 0.014798773, + -0.0037471687, + -0.005568191, + 0.0054528937, + -0.033015776, + 0.008898254, + -0.00013479634, + 0.018434035, + -0.025202677, + -0.00003764654, + 0.010261477, + -0.00928484, + -0.017810073, + 0.02444307, + 0.018203441, + -0.019275028, + -0.019315721, + -0.10292675, + 0.0049374457, + 0.0071687917, + -0.0027145778, + 0.014812337, + -0.0044999938, + 0.014527485, + -0.015666895, + -0.0020380528, + -0.007019583, + -0.040259175, + 0.0020990926, + -0.015368478, + 0.0020397485, + -0.016670661, + -0.009501871, + 0.025677431, + 0.02613862, + -0.009474741, + 0.013727184, + 0.018718887, + 0.0013979821, + -0.008504886, + 0.00050061155, + -0.0073926044, + 0.004686504, + 0.00042367593, + 0.015219269, + -0.015219269, + -0.01152975, + 0.01970909, + -0.02711526, + 0.0034572294, + 0.026084363, + 0.00096646434, + -0.009908803, + -0.008660877, + 0.0054495023, + -0.010492072, + 0.031523693, + -0.013327034, + -0.0059106923, + 0.012228317, + -0.01239109, + 0.003338541, + -0.009088156, + 0.012235099, + 0.018556114, + 0.011489057, + 0.019912556, + -0.01337451, + 0.023412174, + -0.0045949444, + -0.013293123, + -0.015165012, + -0.009508653, + 0.011509404, + 0.007914834, + 0.016494324, + -0.01614165, + 0.010295388, + -0.00470346, + 0.010675192, + -0.0006421901, + 0.019410674, + -0.029000713, + -0.016562147, + 0.004198185, + 0.00088083895, + -0.026274266, + -0.009271275, + -0.023344353, + 0.025813075, + 0.013110003, + 0.02121474, + -0.0034267094, + 0.01174678, + -0.02533832, + -0.03206627, + 0.04077462, + 0.0055308887, + 0.008966076, + -0.024741488, + 0.015883926, + 0.023778414, + -0.00676525, + -0.018434035, + -0.014486792, + 0.0021720014, + 0.010905787, + 0.007813101, + -0.000060509992, + 0.01587036, + -0.011265243, + -0.0094611775, + -0.003950635, + -0.015883926, + -0.004917099, + -0.0045372956, + 0.02133682, + 0.026152186, + 0.006527873, + -0.01079049, + -0.01100752, + -0.015571944, + 0.025379013, + -0.0006040402, + -0.021051968, + -0.0007231527, + 0.026599811, + 0.020156715, + 0.004645811, + -0.0060124253, + 0.01657571, + -0.0016336638, + 0.014351147, + 0.0012504692, + -0.004445736, + -0.02330366, + 0.0017498091, + 0.031876367, + 0.02213712, + 0.025894461, + -0.0012665769, + 0.019980378, + 0.0065143085, + 0.0032859787, + -0.02650486, + -0.01128559, + -0.003338541, + -0.0075214664, + -0.0055546267, + -0.031496562, + -0.01842047, + -0.004649202, + -0.0020227928, + 0.022964548, + 0.025718125, + -0.025161983, + 0.037898965, + -0.012642032, + -0.013733966, + 0.008084389, + -0.015110754, + 0.019424237, + -0.00081513636, + 0.027264467, + -0.025609609, + -0.024632972, + 0.0007235766, + 0.014405405, + 0.0005769114, + -0.036759555, + -0.025636738, + -0.016684227, + -0.03415519, + 0.016331552, + -0.023045935, + 0.02060434, + 0.040449075, + 0.01568046, + -0.006158243, + 0.0067279483, + -0.027101694, + 0.004601727, + 0.028376749, + 0.0073383464, + -0.003360583, + -0.022530487, + 0.023412174, + 0.0047339797, + -0.028431006, + -0.021798009, + 0.010865093, + -0.0058089592, + -0.007704586, + -0.010749796, + 0.030764086, + 0.012764111, + -0.02133682, + 0.033097163, + -0.022042168, + -0.04514236, + 0.014934417, + -0.0092238, + -0.012587774, + -0.0022652568, + -0.020007508 + ] + }, + { + "object": "embedding", + "index": 9, + "embedding": [ + -0.008189119, + -0.0015157744, + 0.0074148276, + -0.034777507, + -0.021128977, + 0.0044751437, + -0.019960977, + 0.020341562, + -0.017729968, + -0.0353287, + 0.022835044, + -0.0058432776, + 0.012998914, + 0.0019521337, + -0.010229837, + -0.01561707, + 0.016115766, + -0.011404398, + 0.008445029, + -0.0051181996, + -0.008208805, + 0.027297063, + -0.010879455, + -0.008215366, + 0.0019783808, + 0.0065093, + -0.002918358, + -0.016535722, + 0.0061976146, + -0.024475493, + 0.013307318, + -0.028793152, + -0.024449244, + -0.037244745, + 0.011791544, + -0.011798106, + -0.015984531, + -0.008733748, + 0.006151682, + -0.009494917, + 0.012887363, + -0.011023814, + -0.003313706, + -0.010026421, + -0.021404572, + 0.015722059, + -0.0073098387, + -0.003343234, + -0.028688164, + 0.006670064, + 0.021535808, + 0.022441337, + -0.0248692, + 0.0019258866, + -0.025590997, + -0.013806015, + -0.015577699, + -0.0004457919, + -0.017323136, + -0.010761342, + -0.0062993225, + -0.01956727, + -0.015630193, + 0.024081785, + 0.0025951895, + -0.018438641, + -0.0024196615, + 0.0134385545, + 0.0038714586, + 0.02171954, + 0.030525466, + -0.0061352775, + 0.012847993, + -0.0032087173, + 0.014212846, + 0.0012319769, + -0.019829743, + 0.013333566, + -0.0075263777, + 0.0059023337, + 0.004183144, + -0.042940382, + -0.030079264, + 0.026247177, + 0.017415002, + 0.009199635, + -0.031549107, + 0.023950549, + -0.006975187, + -0.0041929865, + 0.022034505, + 0.021916393, + 0.022467583, + 0.0011507747, + -0.032756478, + 0.014147229, + -0.0021407853, + 0.037717193, + -0.014186599, + -0.012231184, + 0.011955589, + -0.005836716, + -0.010846646, + -0.02040718, + -0.0014239093, + 0.008930602, + -0.02175891, + -0.034357555, + 0.013543543, + -0.016378239, + -0.013451678, + 0.014750914, + 0.0056398623, + -0.041234314, + -0.002867504, + -0.023071269, + 0.003335032, + -0.0158008, + -0.025840346, + -0.038609598, + 0.020538416, + 0.021772033, + 0.010754781, + -0.020367809, + 0.037795935, + 0.0056004915, + -0.00057210645, + -0.019304799, + -0.008504085, + 0.0029298412, + 0.021207718, + -0.0065093, + -0.0076576136, + 0.0034711892, + -0.013327004, + 0.023058144, + -0.033412658, + 0.009711456, + -0.018123675, + -0.035197463, + 0.0015379206, + 0.028241962, + -0.0060926257, + 0.020748394, + -0.007040805, + 0.020039719, + 0.0023310774, + 0.004842604, + 0.013195768, + -0.025407268, + 0.018661743, + -0.022808796, + 0.0075066923, + 0.0073229624, + 0.0025361334, + 0.012559274, + 0.012847993, + 0.019409787, + 0.007972579, + 0.0030331893, + -0.0024311447, + -0.007106423, + 0.030997915, + -0.034278814, + 0.020328438, + 0.016207632, + 0.012008083, + -0.0034908745, + 0.0060335696, + -0.016430732, + -0.010347949, + 0.020275945, + -0.018254912, + 0.02077464, + 0.013792891, + 0.009914871, + 0.0066208504, + 0.022716932, + -0.022231359, + -0.0051542893, + 0.007244221, + 0.008655006, + 0.007841344, + 0.028688164, + 0.0038124025, + 0.0062665134, + 0.025761604, + -0.017139407, + -0.00019572601, + -0.02282192, + -0.004406245, + 0.02398992, + 0.023635583, + -0.010846646, + -0.6702479, + -0.016666956, + -0.011286286, + -0.0068701985, + 0.017454373, + 0.0113847125, + 0.022401966, + 0.017651226, + -0.02165392, + -0.013117027, + -0.011732488, + 0.0056004915, + 0.0064469627, + -0.012933296, + -0.013963498, + -0.0033547173, + 0.01459343, + -0.0063583786, + -0.029370591, + 0.0076641757, + -0.013451678, + -0.0011868646, + -0.0036253913, + -0.004334065, + 0.024436122, + 0.0033924475, + 0.0030594366, + -0.0072639063, + -0.010525118, + 0.0064141536, + -0.03566991, + 0.016614463, + 0.018044934, + -0.0039042674, + 0.047271166, + 0.0016666957, + -0.023740571, + -0.0036549193, + 0.024344256, + 0.009389928, + 0.0054397276, + -0.0039436384, + 0.009055276, + -0.010420129, + -0.001067932, + 0.008864984, + 0.014068487, + -0.006830828, + 0.015564576, + 0.018569877, + 0.017861204, + 0.0023720886, + -0.013215453, + -0.005255997, + 0.007165479, + -0.0031102905, + 0.008733748, + 0.0010654713, + 0.019659135, + -0.009245568, + -0.004215953, + -0.005095233, + -0.036116116, + -0.008727186, + -0.01232305, + 0.014094734, + -0.010288893, + 0.0016552126, + -0.00054914015, + -0.009265253, + 0.008438467, + 0.035092477, + -0.018189294, + -0.001996426, + 0.01748062, + 0.019002955, + 0.015498958, + -0.006817704, + 0.006214019, + -0.0067783333, + 0.018373024, + 0.004275009, + -0.008536894, + 0.014107858, + 0.011620938, + -0.027218321, + -0.033412658, + 0.008641883, + 0.0015239767, + -0.0006393648, + 0.01057105, + 0.024724841, + -0.01700817, + 0.001861909, + -0.014002869, + 0.01085977, + 0.013884757, + 0.020827135, + 0.013832262, + -0.008943725, + -0.011030376, + -0.024987312, + -0.011305971, + 0.0008915838, + 0.0012877521, + 0.008038198, + 0.009245568, + 0.01155532, + 0.025039807, + -0.043622807, + 0.004199548, + -0.02128646, + -0.048583522, + -0.008674691, + 0.025722234, + -0.029239355, + 0.022428213, + -0.0057875025, + 0.016338868, + -0.014882149, + -0.0033727621, + -0.007447636, + 0.012054016, + -0.008333478, + 0.018228665, + 0.009501478, + 0.008661568, + -0.017205024, + -0.009258691, + 0.001945572, + -0.0033104252, + 0.018386148, + 0.014724666, + 0.001847145, + 0.023740571, + 0.0032497286, + 0.005416761, + -0.0147377895, + 0.0049508736, + -0.019331045, + -0.023228751, + -0.0043110987, + -0.012716757, + -0.008976534, + -0.0056234575, + -0.020538416, + -0.012382106, + -0.023058144, + -0.041890495, + 0.011647184, + -0.021496437, + -0.010282331, + -0.0408931, + 0.009711456, + -0.00541348, + -0.015328351, + 0.004275009, + -0.02194264, + 0.0049279076, + -0.0041503347, + 0.021181472, + 0.021968886, + -0.03162785, + -0.003251369, + 0.022362594, + -0.0034875935, + 0.023136886, + 0.016430732, + -0.0013189206, + -0.010708848, + -0.00113355, + -0.009567096, + 0.0021342235, + 0.0020948527, + 0.032231532, + 0.016443856, + -0.006243547, + -0.0026690098, + -0.0036221105, + -0.0005782581, + 0.00039739866, + -0.02161455, + -0.01389788, + 0.00892404, + 0.009718017, + 0.005160851, + 0.01631262, + 0.019751001, + -0.022769425, + 0.00041236775, + -0.016811317, + 0.0034318184, + -0.014829655, + 0.005761255, + -0.0048918175, + -0.00039657843, + -0.0082481755, + 0.005964671, + 0.0003272695, + 0.022113247, + 0.025315402, + -0.010892578, + 0.0017733249, + -0.005679233, + -0.006670064, + -0.031549107, + 0.012624892, + -0.02161455, + 0.021010865, + 0.0066339737, + 0.014291587, + -0.024344256, + 0.0053445813, + 0.015236486, + 0.021955764, + 0.04047315, + -0.01013141, + 0.0011868646, + 0.014396576, + 0.01013141, + -0.010807275, + -0.022953156, + -0.0036811666, + 0.0059056147, + -0.012099949, + 0.015669564, + 0.006177929, + 0.027769513, + -0.004809795, + -0.023556842, + -0.022283852, + 0.008385973, + 0.010052669, + 0.008169434, + -0.01645698, + -0.0076379282, + 0.011719365, + -0.028556928, + 0.019698506, + -0.0035597733, + 0.02556475, + -0.010741657, + 0.033780117, + 0.0023671673, + -0.005446289, + -0.00314474, + 0.032940205, + 0.005767817, + -0.024987312, + 0.02673275, + -0.014252217, + -0.00438984, + 0.00043758965, + -0.004685121, + 0.010183904, + -0.016443856, + 0.03262524, + -0.008490962, + 0.005797345, + 0.037061013, + -0.0019586955, + -0.0102495225, + 0.014803408, + 0.002326156, + 0.00047942108, + -0.018438641, + 0.029738052, + -0.010623544, + -0.007677299, + -0.010374197, + -0.010052669, + -0.01232305, + 0.031286635, + -0.021877022, + 0.011588128, + -0.028530682, + -0.004078155, + -0.013248262, + -0.0003565925, + -0.00917995, + -0.014422824, + -0.023097515, + 0.014449071, + 0.009173389, + -0.0076116812, + -0.017454373, + -0.0017536395, + 0.0048196376, + -0.008359726, + 0.051234487, + 0.0031004478, + 0.03236277, + -0.0054955026, + -0.00259683, + -0.0030692792, + -0.0050394577, + 0.029318096, + -0.017834956, + -0.010223275, + -0.017401878, + 0.018281158, + -0.010649792, + -0.008162872, + 0.0011745611, + 0.05141822, + 0.007139232, + 0.00053642667, + -0.0068964455, + -0.005922019, + -0.009501478, + 0.008930602, + 0.0059909183, + -0.005101795, + -0.0030988073, + -0.011102555, + -0.018858597, + -0.006975187, + 0.009875501, + 0.015643317, + -0.009534287, + -0.005236312, + -0.030840432, + -0.017992439, + -0.016155137, + 0.10467374, + -0.0028100885, + -0.0047376156, + 0.004537481, + 0.0029052345, + 0.014278464, + 0.00071441534, + 0.005823592, + 0.015971407, + -0.0052428734, + 0.009823006, + -0.033727624, + 0.016391361, + 0.0060795024, + -0.0020981338, + -0.008353164, + -0.0046916828, + -0.033045195, + 0.019790372, + -0.012841431, + 0.009527725, + -0.0100854775, + 0.011673432, + 0.02658839, + -0.0066799065, + -0.007769164, + 0.03968573, + 0.012441162, + 0.021811403, + -0.008733748, + -0.005987637, + 0.022467583, + 0.0029462455, + 0.01872736, + 0.00003957582, + -0.020656528, + 0.030919174, + 0.006889884, + 0.0063911877, + -0.011811229, + 0.025105424, + -0.007112985, + -0.0027608748, + -0.017113158, + 0.011483139, + -0.0010613702, + -0.02333374, + 0.013208891, + -0.029711803, + -0.0043110987, + 0.048216064, + -0.008792805, + -0.0054659746, + -0.00009171133, + -0.0024295042, + 0.015315227, + -0.0067061535, + -0.021168347, + 0.005003368, + -0.0070736143, + -0.016653834, + -0.023976795, + -0.0074082655, + -0.011679994, + -0.018792978, + -0.03698227, + -0.012375544, + -0.0032661331, + -0.042546675, + -0.030892927, + 0.01085977, + -0.029921781, + -0.004048627, + -0.0011286286, + 0.024173649, + -0.025932211, + 0.020249696, + 0.004275009, + 0.009737702, + 0.022743179, + -0.0014255497, + -0.029134367, + 0.0066372547, + 0.011732488, + 0.0022277292, + 0.022913786, + 0.026772121, + -0.031470366, + -0.0019111226, + 0.02040718, + 0.0015830329, + -0.007237659, + 0.021732662, + 0.012664263, + -0.009055276, + -0.023202505, + 0.006758648, + 0.025761604, + -0.010991005, + -0.016522598, + 0.022152618, + -0.02552538, + 0.007906962, + -0.008353164, + 0.015577699, + 0.014094734, + 0.009639275, + 0.023254998, + -0.025000436, + -0.0029380433, + 0.028005738, + -0.03013176, + 0.0069555016, + 0.009632714, + -0.01846489, + 0.026798368, + 0.008910917, + 0.009015905, + -0.01085977, + -0.00917995, + 0.025814097, + -0.025735356, + 0.01375352, + 0.03734973, + 0.001441134, + -0.00081612315, + -0.006128716, + 0.0008440108, + -0.019803494, + -0.0051444466, + -0.010485747, + 0.0017290327, + -0.012697072, + -0.018911092, + -0.028136974, + -0.00943586, + -0.011942466, + 0.011470016, + -0.007920085, + -0.022835044, + -0.0024114593, + -0.004911503, + 0.0072639063, + -0.0034547846, + -0.031732835, + -0.012979229, + 0.017401878, + 0.0037369418, + -0.027165828, + 0.012218061, + -0.017113158, + 0.007828221, + -0.022677561, + 0.0014435947, + -0.0143572055, + -0.018766731, + -0.028399445, + -0.013504173, + 0.017821833, + 0.010420129, + 0.027218321, + 0.0017257519, + 0.013235139, + 0.0030348299, + -0.017821833, + 0.0018635496, + -0.009711456, + 0.0151708685, + 0.001002314, + 0.016876934, + 0.027060838, + 0.013543543, + -0.015538328, + 0.0014362127, + -0.016063273, + 0.018609248, + 0.011804667, + -0.018123675, + -0.017100036, + -0.019029204, + -0.016719451, + 0.0028871894, + -0.012080263, + 0.0030331893, + -0.019396663, + -0.015288981, + 0.022664437, + -0.01210651, + -0.0021899987, + 0.006624131, + 0.009737702, + -0.01938354, + 0.010964758, + 0.020197202, + -0.016194507, + -0.013622285, + -0.015498958, + -0.0038681778, + 0.008425344, + 0.023753695, + 0.018661743, + 0.0017798867, + -0.016404485, + -0.0034219758, + -0.0004466121, + 0.015328351, + -0.00079233665, + -0.016653834, + 0.017953068, + -0.02779576, + -0.015420216, + -0.0022687404, + 0.0033990094, + -0.018058058, + -0.010452938, + 0.012585521, + -0.022362594, + 0.017467497, + -0.02750704, + -0.009514602, + -0.011076309, + -0.010964758, + 0.019737877, + -0.0053773904, + 0.018596124, + 0.013418869, + -0.013005476, + -0.013287633, + 0.017310012, + 0.0036910092, + -0.022585696, + 0.021824528, + 0.0021850774, + -0.010918826, + -0.022191988, + -0.0039305147, + -0.0026903355, + 0.009980489, + -0.0065617943, + 0.035984877, + 0.023740571, + 0.0031709871, + -0.03178533, + -0.02194264, + 0.0073360857, + 0.013235139, + -0.0086812535, + 0.008576265, + -0.0071851644, + -0.0023130325, + -0.01729689, + 0.007040805, + -0.02640466, + 0.019803494, + 0.009927995, + -0.025669739, + -0.009941118, + -0.012099949, + 0.0030988073, + -0.00097442645, + 0.0050525814, + 0.019357292, + 0.018819226, + 0.012401791, + -0.003946919, + -0.00030655882, + -0.032494005, + 0.01784808, + -0.019987226, + 0.020932123, + -0.014186599, + -0.013701026, + -0.002252336, + 0.0045834132, + 0.02644403, + 0.028583175, + 0.004527638, + -0.01960664, + -0.014580307, + 0.0027789199, + 0.024396751, + 0.0030610769, + -0.003269414, + -0.00837285, + -0.021640796, + -0.014514688, + -0.014790284, + 0.0089502875, + 0.012821746, + -0.007493569, + -0.0086812535, + -0.007966018, + -0.0052166265, + 0.020604033, + -0.0020472798, + -0.0138716325, + 0.03616861, + 0.027034592, + -0.004970559, + -0.0028691445, + -0.002472156, + 0.013300757, + -0.034226317, + -0.001879954, + -0.007854467, + -0.007966018, + 0.013648531, + -0.012598645, + -0.00035741273, + -0.011699679, + 0.015774554, + 0.012972667, + 0.016247002, + 0.01225087, + 0.023727447, + -0.010426691, + 0.0062960414, + -0.014659048, + 0.0017241114, + 0.024527987, + -0.0075132544, + 0.006059817, + 0.009225883, + -0.008175995, + 0.03010551, + 0.013182645, + 0.00976395, + 0.012152443, + -0.020131584, + -0.011371589, + -0.012231184, + 0.014711542, + -0.011896533, + -0.008149749, + -0.013701026, + -0.014449071, + -0.0053445813, + 0.015945159, + 0.015302104, + -0.014829655, + -0.021050235, + 0.032756478, + 0.03921328, + 0.012624892, + -0.0059023337, + -0.020354686, + -0.00859595, + 0.002677212, + -0.05448914, + -0.013556667, + -0.0030249872, + 0.030840432, + 0.009376803, + -0.018294282, + -0.031732835, + 0.0062173, + -0.024659222, + -0.006082783, + -0.007493569, + 0.023097515, + 0.01524961, + -0.008116939, + -0.012664263, + -0.0021785158, + 0.0041044024, + 0.022690684, + -0.00010550135, + 0.0061943335, + 0.030158006, + -0.031207893, + 0.02458048, + 0.0014304711, + -0.009494917, + 0.010229837, + 0.0137666445, + -0.00025611502, + 0.00021407854, + 0.0013952014, + -0.017493743, + -0.013609161, + -0.016732575, + 0.0004293874, + -0.011515949, + 0.021522684, + 0.033622634, + -0.037244745, + 0.0027198638, + 0.021667045, + -0.026129065, + 0.0036713239, + 0.008497523, + 0.0007603479, + 0.0069883107, + 0.00015574008, + -0.028530682, + -0.0068242657, + -0.005446289, + -0.041129325, + 0.015682688, + 0.012598645, + -0.012565835, + 0.0076969843, + -0.0027756388, + 0.0055906484, + -0.010557927, + -0.0067192772, + -0.037979666, + -0.007880715, + 0.020997742, + -0.026877109, + -0.008280984, + -0.010741657, + 0.012565835, + -0.034357555, + 0.0047310535, + 0.0003309605, + -0.012821746, + -0.014514688, + -0.0020128305, + 0.016470103, + -0.007106423, + -0.0027297065, + 0.0062533896, + -0.021312708, + -0.001503471, + -0.006528985, + 0.01758561, + -0.010518556, + 0.024436122, + 0.013464802, + -0.007040805, + -0.042494178, + -0.004524357, + 0.013622285, + 0.0016265047, + 0.0060106036, + 0.23475474, + 0.018110553, + 0.0013000554, + 0.031207893, + -0.0067783333, + 0.030525466, + 0.025249785, + -0.005735008, + -0.00994768, + -0.010098601, + -0.018058058, + -0.007749479, + -0.0077626025, + -0.0012992353, + -0.0091668265, + -0.015669564, + -0.020958371, + -0.039160788, + -0.01027577, + -0.022428213, + 0.0016256846, + 0.005928581, + -0.0018291001, + -0.020302191, + 0.033333912, + 0.004567009, + -0.016509473, + 0.013884757, + 0.03228403, + 0.0059154574, + -0.003167706, + 0.009475231, + 0.014606554, + 0.008609074, + -0.012185251, + -0.012185251, + -0.022428213, + -0.0034711892, + 0.015538328, + 0.01872736, + 0.0007808535, + -0.008904355, + 0.005794064, + -0.0053905137, + -0.0031168521, + 0.040210675, + 0.0006287019, + -0.004143773, + 0.018412394, + 0.019449158, + -0.023635583, + -0.009639275, + 0.00980332, + 0.039475754, + 0.013687903, + 0.0080841305, + 0.026024075, + 0.013195768, + 0.0033891667, + 0.0019833022, + -0.017782463, + 0.0065913224, + -0.014435947, + 0.006204176, + -0.003992852, + 0.0025295718, + -0.029134367, + 0.03514497, + 0.005767817, + 0.0020948527, + 0.0146852955, + -0.016811317, + -0.011975274, + -0.010026421, + -0.02051217, + -0.032494005, + 0.027822006, + 0.037953418, + 0.0037763126, + 0.0183599, + -0.022178864, + 0.015288981, + 0.018766731, + -0.00076198834, + 0.011417522, + -0.03404259, + 0.004970559, + 0.008451591, + 0.0037172565, + 0.00175528, + 0.007565749, + 0.0043832785, + -0.014015992, + -0.0038124025, + 0.010544803, + 0.0057186037, + 0.0035466498, + 0.012847993, + -0.01408161, + 0.008405658, + -0.010702286, + -0.005397076, + 0.02519729, + -0.0023655267, + -0.0050985143, + 0.0011097634, + 0.008891231, + 0.015498958, + -0.027008345, + -0.037323486, + -0.01013141, + -0.010439814, + -0.008766557, + -0.0012631454, + 0.029081872, + 0.003628672, + 0.032572746, + -0.0126839485, + 0.012172128, + -0.01608952, + 0.00057374686, + -0.01923918, + -0.018858597, + 0.012933296, + 0.0071917265, + -0.011837477, + -0.018569877, + 0.0038353687, + 0.0082481755, + -0.031732835, + 0.0022392122, + 0.010354511, + -0.00057989854, + -0.0061221537, + -0.006496176, + 0.027926996, + 0.0037402227, + -0.021076484, + -0.010761342, + -0.0017175496, + 0.026929604, + 0.006410873, + 0.011305971, + 0.017572485, + -0.006666783, + -0.0040748743, + 0.022979403, + 0.0016404486, + 0.0028428973, + -0.012368982, + -0.013366375, + -0.017165653, + -0.0035433688, + -0.018884843, + 0.01803181, + -0.019002955, + -0.023451852, + -0.023963673, + -0.014908397, + 0.03616861, + -0.014580307, + 0.0073820185, + 0.033963848, + -0.013431992, + -0.030525466, + -0.0007845445, + -0.16934678, + 0.0274283, + 0.039108295, + -0.00028092682, + 0.010052669, + 0.01989536, + -0.005587368, + -0.012204937, + -0.0038386495, + 0.017113158, + 0.039187036, + 0.0019980664, + -0.025171041, + -0.016522598, + 0.0012483813, + -0.026982097, + -0.008313793, + -0.0037369418, + 0.010931949, + -0.002874066, + 0.016443856, + -0.013806015, + 0.022178864, + -0.027585782, + -0.006597884, + 0.017165653, + 0.0010728533, + 0.02220511, + -0.0019997067, + -0.018609248, + -0.02761203, + -0.010630107, + 0.016076395, + 0.0048918175, + 0.022021381, + 0.021312708, + 0.0015379206, + -0.012565835, + -0.0076707373, + 0.008359726, + 0.009029029, + 0.019331045, + 0.015328351, + 0.008490962, + -0.0035204026, + 0.024698593, + 0.03517122, + 0.0027854815, + 0.0061024684, + -0.014606554, + 0.016037025, + -0.021496437, + -0.003533526, + 0.014475318, + 0.0012811903, + 0.011634061, + -0.0018192574, + -0.0011614376, + 0.0073492094, + -0.016627586, + -0.021995135, + 0.0008579546, + -0.005426604, + -0.0054692556, + -0.022795673, + -0.022323223, + -0.0050985143, + 0.009593343, + -0.026220929, + 0.018163046, + 0.0044849864, + -0.03632609, + 0.013327004, + -0.024947941, + 0.026247177, + 0.018819226, + -0.015000261, + 0.014934643, + -0.009914871, + -0.001301696, + -0.020105338, + 0.027533289, + -0.020840257, + -0.022520078, + 0.010662915, + 0.009396489, + -0.008497523, + 0.0026050322, + -0.0071326704, + -0.016693205, + -0.014317835, + -0.02542039, + 0.0056693903, + -0.03262524, + 0.0063419743, + 0.007867591, + -0.010872893, + -0.002897032, + -0.011424083, + 0.008477838, + 0.027848255, + 0.0021457067, + -0.030420478, + 0.02845194, + 0.029606815, + 0.010833522, + -0.009448984, + 0.014619677, + 0.012408352, + -0.012460847, + -0.028294457, + -0.01129941, + 0.021023989, + 0.0042782896, + -0.009134018, + 0.0009826287, + 0.012939858, + -0.006981749, + 0.004176582, + -0.0014723026, + 0.05496159, + -0.0007816737, + -0.0076969843, + 0.039738227, + -0.00015850834, + -0.013543543, + -0.07690423, + -0.027218321, + 0.02106336, + 0.016194507, + -0.013674779, + 0.04433148, + -0.0055808057, + 0.01762498, + 0.0036188294, + 0.019436033, + 0.0068439515, + -0.018084304, + 0.01371415, + -0.013976621, + 0.0427829, + 0.019081697, + 0.008792805, + -0.028294457, + -0.008182557, + 0.016601339, + -0.017126283, + 0.0041240877, + -0.011634061, + -0.016483227, + 0.000017788614, + -0.0018012126, + -0.029475579, + 0.01755936, + 0.011889971, + 0.011876848, + -0.010807275, + -0.020604033, + -0.01960664, + -0.00281665, + -0.014147229, + 0.009849253, + -0.034173824, + 0.010879455, + 0.020131584, + -0.04015818, + -0.007565749, + 0.00208501, + 0.0046687163, + -0.021850774, + -0.010492309, + -0.004078155, + 0.015735183, + -0.0130186, + 0.023793066, + -0.009527725, + -0.0022687404, + -0.0022917066, + -0.008504085, + 0.015525205, + -0.016443856, + -0.016430732, + -0.01024296, + 0.011430645, + -0.020787764, + -0.0067652096, + -0.00917995, + -0.0043078177, + -0.025945334, + 0.010800713, + 0.016194507, + 0.014882149, + -0.031339128, + -0.026181558, + 0.012605207, + -0.0169688, + -0.016942553, + 0.009081523, + -0.02695585, + -0.00071277487, + -0.023071269, + -0.010518556, + -0.013556667, + -0.0156039465, + 0.024737963, + -0.029239355, + -0.027926996, + -0.028845647, + 0.008746872, + 0.013136712, + 0.023924302, + 0.025879717, + 0.0012024487, + -0.015813924, + -0.0068045803, + -0.024265515, + 0.015315227, + 0.031207893, + -0.0020308753, + -0.025066053, + -0.008707501, + 0.024186773, + 0.0031939533, + -0.006378064, + 0.007447636, + 0.0158008, + -0.012710195, + -0.010072354, + -0.08887294, + 0.013648531, + -0.0027854815, + -0.019094821, + 0.030289242, + -0.014882149, + 0.0027379086, + -0.021352079, + -0.001368134, + 0.012027768, + -0.047271166, + -0.007985704, + 0.0021243808, + 0.0117062405, + -0.020302191, + -0.02490857, + 0.031207893, + 0.012172128, + 0.009665523, + 0.010439814, + 0.014816531, + 0.0035630541, + 0.014514688, + -0.008307232, + -0.020879628, + -0.00073902204, + -0.010945072, + 0.017375631, + 0.0015805722, + -0.0052133454, + 0.009560534, + -0.039187036, + 0.005613615, + 0.0446202, + -0.00075952767, + -0.021575179, + 0.013412307, + 0.024698593, + 0.03446254, + 0.008641883, + -0.009672085, + -0.008602512, + 0.008202243, + -0.020695899, + -0.009744264, + 0.0073229624, + 0.009927995, + -0.002040718, + 0.016470103, + 0.031654093, + 0.0014271903, + 0.03923953, + 0.00039145202, + -0.02304502, + -0.0092193205, + -0.023254998, + 0.017716844, + 0.0036713239, + -0.007723232, + 0.011017253, + 0.023963673, + 0.0125199035, + 0.011640623, + 0.024173649, + 0.023766818, + -0.011056623, + -0.02545976, + 0.0020472798, + 0.021863898, + -0.015341475, + -0.00015502238, + 0.0011679993, + 0.023071269, + 0.0009777073, + 0.028268209, + -0.0183599, + 0.015905788, + -0.0027149424, + -0.029974276, + 0.02212637, + 0.0020718866, + 0.000023261047, + -0.01758561, + 0.020761516, + 0.01254615, + -0.0006791457, + -0.023018774, + 0.00318247, + -0.005954828, + 0.0167457, + -0.004212672, + -0.010649792, + 0.012847993, + -0.0031217735, + 0.010557927, + 0.011279725, + 0.010945072, + -0.005108357, + 0.017782463, + 0.01758561, + 0.008792805, + -0.023018774, + -0.0044423346, + -0.016338868, + -0.016010778, + 0.030315489, + -0.0005606233, + -0.015367722, + -0.012093387, + 0.011050061, + 0.023386234, + 0.026654009, + 0.009613029, + 0.02538102, + -0.026378412, + 0.01700817, + -0.0138191385, + -0.029055625, + -0.03244151, + 0.015695812, + 0.013464802, + 0.023359988, + 0.0060040415, + -0.0077035464, + 0.012716757, + 0.015236486, + -0.0066208504, + -0.008622197, + 0.008038198, + -0.0068964455, + 0.023622459, + 0.007578872, + -0.020564662, + 0.006027008, + -0.013622285, + 0.013661656, + -0.008182557, + -0.0034908745, + -0.017073788, + 0.024186773, + -0.0037336608, + 0.00961959, + 0.0058465586, + 0.012198376, + 0.031837825, + 0.012992352, + 0.022401966, + -0.027664524, + -0.019659135, + 0.009724579, + 0.01729689, + 0.006975187, + -0.012480533, + -0.016706329, + 0.0034022902, + 0.002165392, + 0.017533114, + -0.014278464, + 0.012040893, + 0.039370764, + 0.005219907, + 0.029606815, + -0.01733626, + -0.022730054, + -0.005105076, + 0.017310012, + 0.010991005, + -0.0013927408, + -0.026798368, + 0.0107875895, + 0.00032644926, + -0.016286373, + -0.023241876, + 0.012237746, + -0.014068487, + -0.02431801, + 0.0028806275, + 0.026535895, + 0.018648619, + -0.007723232, + 0.024790458, + -0.020052843, + -0.0042651664, + 0.013477925, + -0.014029116, + -0.007355771, + 0.0037795934, + -0.013340128 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 23, + "total_tokens": 23 + } +} +436 67292 +POST https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:batchEmbedContents HTTP/1.1 +Host: generativelanguage.googleapis.com +User-Agent: langchaingo-httprr +Content-Length: 109 +Content-Type: application/json +X-Goog-Api-Client: google-genai-sdk/X.XX.X gl-go/goX.XX.X +X-Goog-Api-Key: test-api-key + +{"requests":[{"content":{"parts":[{"text":"Beijing"}],"role":"user"},"model":"models/gemini-embedding-001"}]}HTTP/2.0 200 OK +Content-Length: 66912 +Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 +Content-Type: application/json; charset=UTF-8 +Date: Wed, 23 Sep 2026 10:19:43 GMT +Server: scaffolding on HTTPServer2 +Server-Timing: gfet4t7; dur=261 +Vary: Origin +Vary: X-Origin +Vary: Referer +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-Xss-Protection: 0 + +{ + "embeddings": [ + { + "values": [ + -0.0063551543, + 0.016102875, + 0.0025184422, + -0.06450228, + -0.011145094, + -0.0017095193, + -0.010466754, + -0.014819786, + 0.007944607, + -0.009844465, + 0.02627988, + 0.0005290811, + 0.021550694, + 0.014117757, + 0.08421562, + 0.007890114, + 0.021590482, + -0.036296967, + 0.008239877, + -0.033143397, + -0.024023073, + -0.0071394015, + 0.026021717, + -0.016012026, + -0.0013396433, + 0.011513916, + -0.00964948, + -0.02027911, + 0.020185934, + 0.026132856, + 0.022241998, + -0.019913755, + 0.0060549704, + -0.017460946, + 0.013950326, + -0.013509957, + 0.0044174525, + 0.0081113335, + -0.014121574, + 0.0071531185, + 0.015969781, + 0.013153238, + -0.004400515, + 0.014650824, + 0.0046382556, + -0.019576825, + 0.0066992207, + -0.025219817, + 0.028843993, + 0.009681094, + 0.028219955, + 0.017304933, + 0.003994314, + -0.14916469, + -0.0020506408, + -0.022159234, + -0.01220226, + -0.0005695116, + 0.016322328, + 0.0036592477, + -0.017106129, + -0.013098781, + -0.011157898, + -0.0071095936, + 0.0017108265, + -0.0071799583, + 0.022572618, + 0.0046764133, + -0.0512339, + 0.00329169, + 0.009588029, + -0.011635375, + -0.0017702867, + 0.004274009, + 0.0022750008, + -0.018372174, + -0.017434062, + -0.009578391, + -0.019144882, + 0.02661255, + -0.0058826096, + 0.019118166, + 0.0038887938, + 0.0049904794, + 0.008675974, + 0.009201594, + 0.0034076595, + -0.0063505503, + -0.0120315775, + 0.022470584, + 0.02058215, + -0.00012978374, + -0.0039833416, + -0.022589803, + 0.021844324, + 0.018430045, + -0.021536823, + 0.007484924, + 0.0023836636, + 0.0020405757, + -0.005447644, + -0.0041501103, + 0.009563024, + 0.008413351, + -0.0024128684, + -0.02541384, + 0.009046341, + -0.0021488206, + -0.0085451305, + 0.014438212, + -0.002896873, + 0.007498084, + -0.0025235151, + 0.02277479, + 0.016626634, + -0.18287012, + -0.0073958687, + 0.012745881, + 0.013355627, + -0.006209894, + 0.029279338, + 0.010433714, + 0.0098551065, + -0.006656174, + -0.020760003, + -0.003321761, + 0.010822108, + -0.015899125, + 0.009552324, + 0.010090353, + 0.0136583485, + -0.0018861623, + -0.005349075, + -0.001015341, + -0.034654666, + 0.024294017, + -0.008448941, + -0.021153277, + -0.020333815, + -0.02146894, + 0.007534668, + -0.009168525, + -0.010094172, + -0.025726954, + -0.012099901, + -0.04991192, + 0.004274897, + 0.021763584, + 0.010298866, + 0.007188806, + -0.007859624, + 0.0034723051, + -0.0051036524, + 0.00055222417, + -0.0030106427, + -0.05011998, + 0.0070394934, + -0.009704327, + 0.0045076204, + -0.0029967614, + -0.0018685178, + 0.00027954477, + 0.0057056723, + 0.004698614, + 0.015422536, + 0.018253483, + -0.02473913, + 0.011234085, + 0.01670005, + 0.016503641, + 0.02322702, + 0.014981803, + -0.011549604, + 0.0030360892, + 0.0034499634, + -0.006891598, + -0.011392665, + 0.0053600525, + 0.0017250235, + -0.015849752, + 0.0019526418, + 0.00441381, + 0.0011083069, + 0.00879632, + -0.006487191, + -0.006071513, + -0.014979449, + 0.002908953, + 0.007734771, + -0.00062810123, + -0.013057615, + 0.004856765, + -0.028751146, + -0.0378328, + 0.0071902177, + -0.0026101978, + -0.006176157, + -0.014301397, + 0.009311645, + 0.005812043, + 0.006216182, + -0.028744193, + -0.026385684, + -0.0117400745, + -0.016666705, + -0.03396553, + -0.026202817, + 0.007959171, + -0.00038143582, + 0.0060949964, + 0.010590929, + 0.0046335543, + 0.017146029, + 0.00062021264, + 0.011148049, + 6.3616985e-06, + -0.026893452, + 0.016917495, + 0.012630638, + 0.00021880504, + 0.008228402, + -0.0035598008, + 0.004849153, + -0.00068987056, + 0.020476872, + 0.015225312, + 0.011713798, + 0.010487364, + -0.021695467, + -0.004192251, + -0.008274628, + 0.002563185, + -0.007375835, + -0.004681318, + -0.025145316, + 0.0067083687, + 0.033540048, + -0.0061201155, + -0.0024181919, + 0.025476867, + 0.018105075, + 0.007092122, + -0.04112829, + 0.01879443, + 0.012370854, + -0.021660259, + 0.01008139, + -0.015663356, + 0.023410449, + 0.018574718, + -0.020436762, + 0.0044952407, + -0.008403982, + -0.0048802453, + 0.009639978, + -0.01811318, + -0.023762362, + 0.0104453005, + 0.016646363, + 0.019754373, + -0.04181457, + -0.0061548315, + -0.009867979, + 0.0033878842, + -0.018200044, + -0.012585777, + 0.02678131, + 0.024188522, + -0.03144448, + 0.033384383, + -0.0007540113, + 0.009400057, + -0.00971263, + 0.0021998873, + 0.0009807494, + 0.0032415488, + -0.124622345, + 0.011174502, + 0.024572065, + -0.011790753, + -0.012057281, + -0.010909291, + -0.029012749, + 0.0068161655, + 0.01376444, + -0.003577031, + -0.0074938694, + -0.023549544, + 0.029214898, + 0.009093398, + -0.010575748, + -0.008189132, + -0.0037616221, + 0.0145715065, + 0.030900769, + -0.035605688, + 0.0020199956, + 0.0041381693, + -0.020411737, + -0.028485753, + 0.011085002, + 0.0035083066, + 0.025516436, + 0.016869627, + -0.004033204, + -0.006885995, + -0.0040293713, + -0.011581048, + 0.033477582, + 0.02492992, + 0.008761239, + -0.010692216, + -0.006940811, + -0.024590697, + 0.0025437665, + -0.006774471, + -0.004200975, + -0.00869821, + 0.00758568, + 0.01852672, + -0.01876319, + 0.0045159985, + -0.013281693, + -0.0004899191, + -0.01579372, + 0.018986015, + -0.021734033, + -0.006706007, + 0.0060647964, + -0.0019459872, + -0.007123383, + 0.012118385, + 0.01166797, + 0.0020355766, + -0.005540299, + 0.004892636, + 0.0064751203, + -0.0013884788, + 0.0037279443, + -0.023315618, + -0.018937973, + 0.011611779, + -0.015195095, + 0.016511658, + -0.005727811, + 0.025226949, + 0.009488917, + -0.021378398, + -0.019656911, + -0.016410029, + 0.021136995, + 0.035832502, + -0.013867513, + 0.004386308, + 0.0015575212, + -0.003359174, + 0.005140994, + -0.016254758, + 0.026736539, + -0.0062967846, + 0.027923945, + 0.008575099, + 0.019918622, + 0.0152424155, + 0.021759192, + -0.0379675, + 0.013200135, + 0.006362793, + 0.017756319, + -0.006131732, + 0.009085887, + -0.013920091, + 0.013506577, + 0.0013176923, + 0.0068232627, + 0.00810692, + -0.023185266, + -0.013748858, + 0.013784822, + -0.0053748903, + 0.0012270955, + -0.018692145, + -0.0025695444, + 0.033486832, + 0.013972321, + -0.0046645477, + 0.007211459, + 0.003860303, + 0.033323407, + 0.03173955, + 0.0022209324, + 0.008125612, + 0.00032341457, + -0.003504367, + 0.008849454, + -0.014901913, + 0.020093285, + 0.010984518, + 0.020708168, + -0.027557617, + -0.019866042, + -0.019064197, + -0.009329451, + -0.001619139, + 0.017031545, + 0.008624701, + 0.0075506493, + -0.00046830848, + -0.012231559, + 0.005261167, + -0.009973151, + 0.012327313, + -0.00029284228, + -0.012177945, + 0.026138522, + -0.0052511594, + -0.032983255, + 0.0019666967, + -0.01631379, + -0.005283866, + 0.0067007225, + -0.018335393, + -0.01242996, + 0.023244824, + 0.004459207, + -0.012739205, + -0.023677023, + -0.008792814, + -0.015042924, + -0.015243082, + -0.01852342, + -0.00979116, + -0.010403343, + 0.011183803, + -0.014179961, + -0.01996088, + 0.008711537, + 0.01358377, + -0.017433995, + -0.009293668, + 0.0025363783, + -0.0039437036, + 0.003040843, + 0.014627929, + -0.01513753, + -0.010893818, + 0.028436167, + -0.00030052045, + -0.016798263, + -0.0037398995, + 0.013743322, + 0.024623534, + 0.0017090314, + 0.021805495, + 0.0021703215, + -0.0035057694, + 0.021018457, + 0.03189835, + 0.009966769, + -0.012396259, + 0.01910743, + 0.01285138, + -0.008228967, + 0.042157833, + -0.0034584103, + 0.014909452, + -0.037549157, + 0.0023912285, + 0.0041717207, + -0.0024750216, + -0.0026060815, + -0.0011443269, + -0.010756205, + 0.02133299, + 0.0049221194, + -0.006027957, + -0.021874117, + 0.011923416, + -0.017914725, + -0.027032953, + -0.004819454, + -0.0038527464, + 0.005984662, + -0.003016204, + -0.014474656, + -0.0059804735, + -0.0024918262, + -0.0051547373, + -0.019267162, + -0.0043931603, + 0.0015678286, + 0.005682289, + -0.004605099, + -0.018670866, + 0.013046881, + 0.012114228, + -0.0049528107, + -0.0049569765, + 0.0076052253, + 0.019269137, + 0.0035500932, + 0.017008971, + -0.009618731, + -0.0027449355, + -0.0066079027, + -0.025162073, + 0.023254089, + 0.020586526, + 0.020907655, + 0.0078194635, + 0.017589271, + -0.0093044415, + 0.03972411, + -0.01367009, + 0.021820767, + 0.0065663103, + 0.022037128, + 0.0033105027, + -0.017324902, + 0.01886154, + -0.0024833062, + -0.033237927, + -0.029825876, + -0.007130667, + 0.008148691, + -0.013622872, + 0.008215217, + 0.023586703, + -0.0032375052, + 0.018134532, + 0.003340157, + 0.062084984, + 0.024971696, + 0.00078927726, + -0.008140991, + 0.022751125, + 0.0024958488, + 0.021983938, + 0.030028807, + 0.013055454, + 0.021202512, + 0.008967539, + 0.014477907, + -0.024139725, + -0.007268213, + -0.08979645, + 0.009827532, + 0.0044519864, + 0.006242123, + -0.028093224, + -0.007492523, + 0.0108569795, + -0.038266905, + -0.00062515767, + -0.020292485, + 0.0069982656, + -0.009460653, + -0.022561941, + -0.0016777073, + 0.009359358, + -0.0056340685, + 0.0009903106, + 0.02589537, + 0.013633952, + -0.008307132, + 0.022135915, + 0.022014154, + -0.0015987023, + -0.008531485, + -0.038564667, + 0.0136941, + 0.007536604, + -0.0034995447, + 0.0077190925, + 0.003736426, + -0.005453855, + -0.0037902861, + -0.009574276, + 0.02503652, + -0.009713838, + 0.025748665, + -0.0030429803, + -0.0017319445, + -0.005556372, + 0.007151899, + 0.00044861686, + 0.024243254, + -0.0011174859, + -0.0042923554, + -0.0034043856, + 0.0020586264, + -0.0024652036, + 0.0010641557, + 0.0063525126, + 0.0061083874, + -0.033520598, + 0.024725132, + -0.009062996, + -0.018589048, + -0.027296893, + 0.009039292, + -0.019942956, + -0.014651528, + 0.008203328, + 0.006380216, + -0.0029732834, + 0.0148180835, + -0.0037313567, + 0.018803854, + 0.009569448, + 0.0015683277, + 0.007917696, + -0.0044776164, + 0.02532016, + -0.0073694712, + -0.012464774, + -0.008975098, + -0.029023916, + 0.0112504475, + -0.0024546199, + 0.008568983, + -0.0025914637, + 0.007500221, + 0.01136516, + 0.006178373, + 0.00065487315, + -0.0010890116, + -0.111340486, + 0.0076107616, + -0.011710949, + 0.002834612, + -0.01966956, + 0.00855262, + -0.0010161481, + -0.011820341, + -0.0019463799, + 0.0014960662, + 0.02480435, + 0.0032408242, + -0.013242925, + 4.790979e-05, + -0.0032446042, + -0.009810685, + -0.0024709958, + -0.002814128, + -7.2203e-05, + 7.994804e-05, + 0.007851277, + 0.0056396984, + 0.009152572, + 0.011867177, + 0.004770401, + -0.012824003, + 0.0012317409, + -0.0285443, + -0.010837693, + -0.0030892438, + -0.005758533, + -0.13255383, + 0.0047593284, + 0.028043093, + -0.023309993, + -0.0077553773, + -0.029166562, + -0.0064552925, + 0.02165724, + 0.0039130286, + -0.009785951, + -0.0125840865, + 0.013915085, + -0.010369048, + 0.011079606, + -0.015707199, + 0.14853208, + -0.0194613, + -0.0038884897, + 0.014487094, + -0.022777615, + -0.0142748235, + 0.009197172, + -0.0061391294, + -0.01160789, + 0.0054051797, + 0.0031735098, + 0.004734277, + 0.019488329, + -0.009929215, + -0.0153087545, + -0.00031808962, + -0.011743752, + -0.0063962415, + 0.009748386, + -0.0021266262, + -0.009444004, + -0.01820517, + 0.010775697, + 0.009769245, + 0.0023124106, + 0.011758359, + 0.0019383354, + -0.025756916, + -0.0058244932, + -0.016744541, + -0.005177213, + -0.0010623655, + -0.007505421, + -0.010191935, + 0.023054658, + -0.020112004, + -0.063145414, + 0.005531174, + -0.0010751032, + -0.014058348, + 0.029796744, + -0.002334073, + 0.017840018, + 0.009151701, + -0.0042541544, + -0.0019743878, + -0.06923265, + -0.009436598, + 0.0233867, + -0.007027338, + 0.008806033, + 0.012857061, + 0.018439652, + 0.025269529, + 0.017095635, + 0.0062048156, + 0.010068323, + -0.022050511, + 0.007765344, + 0.0005873925, + -0.0069274115, + 0.015783776, + 0.0015900064, + 0.010024876, + -0.0115946885, + -0.007553512, + -0.0017752476, + 0.014310054, + -0.0014167057, + 0.010843936, + -0.00752356, + 0.015507261, + 0.027154377, + -0.021629224, + 0.0020533637, + 0.008390171, + -0.01356634, + 0.012175692, + 0.00056733814, + -0.0029302756, + 0.007758077, + -0.013251133, + 0.03735139, + -0.011355253, + -0.0008606549, + 0.018703135, + -0.031041395, + 0.001513347, + -0.03283054, + 0.036566976, + 0.015855275, + -0.01553206, + -0.0018216535, + 0.026656386, + 0.009425796, + 0.013647747, + -0.0038406998, + -0.0034908426, + 0.032966126, + -0.020823695, + 0.014203207, + 0.0035750426, + -0.008039023, + -0.0061734766, + -0.018390669, + 0.0031592986, + 0.01102675, + -0.009378094, + 0.01946, + 0.0056270505, + -0.006576176, + -0.0036247377, + 0.002222759, + -0.005955491, + 0.0033926242, + -0.0022702909, + 0.004542753, + -0.0020777804, + 0.0069348146, + 0.018808065, + 0.002593777, + 0.00035886414, + 0.0023482353, + 0.0053278566, + -0.0048979986, + -0.0027712337, + -0.01519547, + 0.014016227, + -0.003993287, + -0.0039424673, + 0.0068112765, + 0.0009354211, + 0.009655554, + -0.0021440438, + -0.01173959, + -0.009086621, + -0.003311498, + -0.0075752395, + -0.005547464, + -0.012148378, + 0.0055227103, + 0.004714189, + 0.0074225753, + -0.008678949, + -0.006936506, + -0.011988269, + 0.0145136425, + 0.008268353, + 0.0013511959, + 0.0022097428, + 0.0067520393, + -0.015721671, + 0.0015095283, + 0.0018876757, + 0.0131803, + -0.0052125994, + 0.013240421, + 0.0032718752, + 0.011470708, + 0.019719018, + -0.007868722, + -0.0031630448, + -0.013607919, + -0.007671135, + 0.02265445, + -0.018993057, + 0.0011178631, + 0.0030184465, + -0.0032923226, + -0.012910732, + 0.0055696806, + -0.004385955, + -0.014097004, + 0.013098738, + 0.009927833, + -0.020466123, + -0.031790804, + 0.008953468, + -0.007841991, + 0.009622844, + 0.011689912, + 0.014736357, + 0.011966775, + -0.0049949824, + -0.013456217, + 0.0029761053, + -0.0004972462, + 0.0018124623, + 0.023450242, + 0.008818961, + 0.015578403, + 0.006838381, + 0.011787743, + 0.006401848, + -0.008554068, + 0.0032769984, + 0.005691664, + 0.0033446192, + 0.004996657, + -0.012328935, + -0.00014337787, + -0.0072276476, + -0.013489926, + 0.006542398, + 0.0024200412, + 0.006407659, + 0.00658257, + 0.0098438375, + -0.006926448, + -0.0018434568, + -0.011406963, + 0.002057549, + -0.0028111308, + -0.0062484816, + 0.0047938316, + -0.007665935, + 0.014911896, + 0.012184405, + -0.0004537209, + 0.017269272, + 0.0015187316, + 0.022711638, + -0.009039745, + 0.000566125, + 0.0057224897, + -0.014241028, + 0.00728214, + -0.012275623, + -0.003991845, + 0.0031499718, + 0.013683913, + 0.005002052, + 0.007791011, + -0.006061983, + 0.012462491, + -0.017259948, + -0.003294801, + 0.020635586, + 0.0064685466, + -0.0032722915, + -0.010588137, + 0.0055095153, + 0.012568544, + 0.020467281, + 0.0039871284, + -0.006567104, + -0.0052050436, + 0.019310508, + 0.0007541559, + -0.0039628134, + 0.0018161333, + -0.025565801, + 0.0022170816, + 0.008383371, + 0.0016976749, + 0.0013169087, + 0.0072280904, + 0.00043818206, + 0.006487496, + -0.008234987, + -0.013804775, + -0.0071011824, + 0.004301779, + 0.0076040607, + 0.00026553465, + -0.013978863, + -0.0022398445, + -0.010073331, + 0.001378665, + -0.011655543, + -0.0025281853, + 0.0064877234, + 0.005105184, + -0.001253591, + -0.016037136, + 0.0022178087, + -0.00018209097, + -0.0017776627, + 9.390462e-05, + -0.010127431, + 0.010108842, + 0.008802711, + 0.0012650582, + 0.0014346605, + -0.0022895061, + -0.009721528, + 0.002106671, + -0.0032146594, + 0.0012294214, + 0.025103608, + -0.0060916333, + -0.004375702, + 0.0031169306, + -0.002403232, + 0.0036379022, + 0.099150434, + 0.0050977077, + 0.019103516, + 0.018123176, + -0.00641615, + -0.007812411, + 0.01689265, + 0.006873689, + 0.0012032719, + -0.010745668, + -0.0072558033, + -0.0057703336, + -0.016017653, + 0.011575295, + -0.014287684, + 0.0040288507, + 0.00035499665, + 0.0038425853, + -0.0059944894, + 0.0064374455, + -0.01055123, + -0.011411333, + -0.0020794396, + -0.03357867, + 0.023145113, + 0.0038708441, + 0.013038566, + 0.0013081246, + 0.0137445815, + 0.0037631444, + 0.006775272, + -0.014702711, + -0.012787806, + -0.011213579, + 0.0018051929, + 0.007411551, + 0.0012860112, + 0.0023756204, + 0.008827388, + 0.008103292, + -0.006595727, + 0.009404119, + 0.005707071, + -0.0076382444, + 0.0044162855, + -0.011250839, + -0.007862551, + -0.004038489, + -0.013900646, + 0.009726302, + -0.010318265, + -0.0049637896, + -0.008849078, + 0.011831046, + -0.018245734, + 0.0026684778, + 0.0030156735, + 0.002048939, + -0.017357029, + -0.006360324, + -0.0031979224, + 0.013873581, + -0.011460241, + 0.015699241, + -0.006945846, + -0.014704577, + 0.001639534, + -0.0036077767, + 7.477201e-05, + -0.0070529534, + -0.0074082003, + 0.008105086, + 0.0027408854, + -0.012404076, + 0.047166396, + -0.023610884, + 0.005393696, + -0.009819781, + -0.020763718, + 0.016728906, + -0.0044856705, + -0.011954361, + -0.005414105, + 0.0039427187, + -0.003017932, + -0.005948869, + -0.018116254, + -0.0055170427, + -0.012061531, + 0.0025465896, + 0.019162923, + -0.0038469536, + -0.02426238, + 0.0033866293, + 0.001715548, + -0.0126257595, + 0.110108815, + 0.009526291, + 0.015302868, + -0.0018256153, + 0.009874081, + -0.015023826, + -0.0026252833, + -0.007113226, + 0.012222318, + 0.010760951, + -0.0006905928, + 0.008161423, + 0.017670702, + -0.0023108753, + 0.014374014, + -0.008081441, + -0.008081291, + 0.0125306295, + -0.0026793822, + -0.0032000365, + -0.007764513, + 0.008264854, + -0.017081711, + 0.01505305, + 0.015108973, + -0.0058961324, + -0.008967146, + -0.0009737416, + -0.026299978, + -0.010576113, + -0.009151786, + 0.000629556, + -0.00080465974, + 0.009976492, + -0.005365671, + -0.014674663, + 0.0056867753, + 0.00039618395, + -0.008198037, + -0.019754961, + -0.006353381, + -0.0047243657, + 0.011523915, + -0.003669543, + -0.001969544, + 0.009289482, + -0.0057113664, + 7.804169e-05, + -0.005704618, + 0.017114911, + -0.00028992468, + 0.0021905575, + 0.0032700768, + -0.003848536, + -0.0069853826, + 0.0154455695, + -0.008593011, + -0.01874888, + 0.00533686, + -0.013470405, + 0.010130901, + 0.0016556757, + 0.01733363, + 0.012311638, + 0.0010464182, + 0.016613899, + -0.0018007389, + -0.0075159017, + 2.5645355e-05, + -0.010907435, + 0.013142811, + -0.022482142, + -0.011474547, + 0.018076569, + 0.005050351, + -0.001997235, + 0.008096223, + 0.0043833777, + 0.00949188, + 0.01515072, + 0.00046413866, + -0.00854549, + -0.004377132, + -0.0063424995, + -0.000576798, + 0.004404358, + -0.0059497557, + 0.019253355, + 0.005373753, + -0.005796289, + -0.0045998674, + 0.015444049, + 0.013625838, + -0.0019261105, + -0.0049046995, + -0.028571926, + 0.028330754, + -0.0026768905, + -0.014038912, + 0.017988183, + -0.012462325, + -0.0029675905, + 0.016606113, + -0.014302834, + -0.018672237, + -0.015079303, + -0.0022023825, + -0.026077606, + 0.010548628, + -0.023084678, + -0.005073793, + -0.004002584, + 0.00067545514, + -0.0009742146, + -0.018017456, + 0.0034590624, + -0.0023994674, + 0.0032991623, + 0.003367507, + -0.0026153838, + 0.0057632807, + -0.008392058, + -0.0018211775, + 0.0071298676, + 0.012505902, + 0.0028128691, + -0.021341728, + 0.0074576484, + 0.016159458, + 0.0098391455, + 0.0046103573, + -0.029048951, + 0.0044192513, + -0.035650607, + -0.0012240071, + -0.01462015, + -0.0025579168, + 0.01802885, + -0.016236685, + -0.0030668057, + -0.012446593, + -0.013280719, + 0.0039154715, + -0.019768277, + -0.0018593695, + 0.013105579, + -0.012902612, + -0.0011059877, + 0.008373417, + 0.024523573, + -0.0046463627, + 0.012843337, + -0.01789186, + 0.0013248714, + -0.008297413, + -0.0017105504, + 0.002998413, + 0.008483556, + 0.0025365911, + -0.01965758, + -0.00034947516, + -0.07128841, + 0.02114405, + 0.012849592, + 0.0044030068, + 0.012301979, + 0.0012762411, + 0.010948455, + -0.009778161, + -0.0076717194, + -0.004807137, + 0.011057163, + -0.0027344066, + 0.0039713355, + 0.014307493, + -0.004719575, + -0.005606275, + -0.004857556, + 0.0030969298, + -0.0071502356, + 0.0071694753, + 0.0056118337, + -0.011003906, + -0.013242454, + -0.002201133, + -0.011210143, + 0.011707216, + 0.014977044, + 0.01779632, + 0.0049853637, + 0.011419012, + -0.015742203, + -0.00091059506, + 0.019840932, + -0.0076076766, + 0.014827489, + -0.0013193649, + -0.004084095, + -0.0046535544, + -0.0033257792, + 0.016922941, + 0.00933627, + -0.0029515675, + -0.019037096, + -0.011801967, + -0.009330346, + -0.010905885, + 0.007985489, + 0.009175586, + -0.0026117398, + -0.017909586, + -0.018827332, + 0.010766246, + -0.012840325, + -0.010998265, + 0.016460525, + 0.006236891, + 0.010233909, + 0.0026413705, + -0.008256922, + 0.00972893, + 0.007981085, + 0.01276551, + 0.0018061681, + -0.0043630814, + -0.00842181, + 0.004283824, + -0.0077637713, + 0.015816802, + -0.009293964, + 0.012796772, + 0.0040589576, + 0.0011082987, + 0.010102504, + -0.01052493, + -0.008747211, + 0.012556736, + -0.0055830814, + 0.014535094, + -0.0045808023, + 0.00898575, + 0.0039800196, + -0.00030643796, + -0.009707205, + -0.0021455677, + 0.004889441, + -0.0019278255, + -0.00551531, + -0.00697778, + -0.009371127, + -0.007763565, + 0.0070936517, + 0.010226026, + -0.025632773, + -0.0029757218, + -0.0073764855, + -0.0039766, + -0.01939676, + -0.005446109, + -0.009669013, + 0.013183179, + 0.005567823, + -0.019986682, + -0.009758843, + -0.00025886044, + -0.0105059445, + 0.020477045, + 0.011233786, + 0.0077587278, + 0.0035075815, + 0.007340564, + -0.0016727118, + -0.0027424465, + 0.01035379, + 0.007912738, + -0.000476204, + 0.004735652, + 0.0073024845, + 0.01843886, + 0.019832747, + -0.00910018, + -0.015345127, + 0.008405346, + 0.0019537315, + 0.0019164104, + 0.002299855, + 0.002696311, + 0.005631684, + 0.00578032, + 0.00852868, + 0.0028267794, + 0.008999864, + -0.007418031, + 0.02282058, + 0.011151882, + -0.024318231, + 0.0009780303, + 0.0048498465, + 0.012158211, + 0.013832286, + 0.005164173, + 0.0015807186, + -0.011898483, + -0.009008129, + -0.008798536, + -0.010670915, + 0.014252894, + 0.009829728, + -0.009099043, + 0.0069771223, + 0.02418554, + 0.015512573, + 0.00018900732, + 0.0064851698, + 0.019639648, + 0.0027836817, + -0.008141263, + -0.001998092, + -0.008841341, + -0.0021694945, + -0.027253378, + 0.021251235, + 0.0019023509, + 0.0038814552, + 0.0021502986, + 0.014704044, + 0.0013565895, + 0.007978371, + -0.0006929121, + 0.010177474, + 0.0063588684, + -0.0010999792, + 0.011858147, + 0.00059684494, + 0.013481803, + -0.0013868957, + -0.0039049794, + 0.0035277978, + -0.0069398256, + 0.013482031, + 0.0053362814, + 0.011165399, + -0.0091067515, + 0.009329792, + 8.713115e-05, + 0.001329974, + 0.003414262, + 0.009019938, + 0.0031056672, + -0.009470695, + -0.0022317746, + -0.027405925, + 0.025359284, + 0.012371703, + -0.0037342575, + 0.0018377325, + 0.00076526735, + -0.015860876, + 0.0033443947, + 0.0005435608, + 0.011880754, + 0.0064352187, + -0.0040956065, + 0.0013957444, + -0.0019419627, + -0.004247217, + -0.10113446, + -0.0049007274, + 0.005112618, + 0.014931993, + -0.004185019, + -0.011393176, + 0.01751062, + 0.0077599576, + -0.0061833723, + -0.029866148, + 0.004701496, + -0.0037799496, + -0.0043319985, + -0.0015041421, + -0.004327486, + -0.01946988, + 0.0157463, + -0.009110845, + -0.0012058119, + 0.010209955, + 0.012683676, + 0.008276147, + -0.009890312, + 0.009617936, + 0.0058802175, + -0.0015596602, + 0.011550261, + 0.009336738, + 0.01749894, + 0.010255385, + -0.027008766, + 0.013050459, + 0.008046472, + 0.0030197853, + -0.004652549, + 0.0069988957, + 0.009348113, + 0.0010765893, + -0.13154635, + 0.0012652715, + -0.0071356157, + -0.0040416284, + -5.566019e-05, + 0.00078611454, + -1.2464685e-05, + 0.00022251309, + -0.0005219734, + 0.017187934, + 0.0023682495, + 0.0081900945, + 0.003430522, + -0.0023826663, + -0.007831453, + -0.0032064104, + -0.01439624, + 0.023305664, + -0.0075669624, + 0.015986707, + -0.0068884487, + 0.00775772, + 0.01839717, + 0.008425049, + 0.00012909493, + -0.014745144, + 0.004739198, + 0.020555062, + -0.014311922, + -0.0004176774, + -0.0014121381, + -0.0014468001, + -0.009847998, + -0.0040604915, + 0.0064213397, + 0.0001540802, + -0.0045972574, + 0.004563926, + 5.513047e-05, + -0.013095992, + -2.350623e-05, + 0.00257934, + -0.022639152, + -0.004979251, + -0.0066806725, + 0.01242826, + -0.01733605, + 0.015073579, + 0.004502074, + -0.013236162, + 0.005460156, + 0.008564144, + -0.018589975, + 0.011798008, + 0.01764574, + -0.006389439, + 0.013675649, + 0.0027546242, + 0.004415887, + 0.0009002774, + 0.0007691865, + 0.008201844, + -0.0050344197, + -0.0043231295, + 0.0039198464, + -0.00011188745, + -0.011282626, + 0.0126269655, + 0.013221059, + 0.011627293, + -0.006934167, + -0.00085665955, + -0.018859025, + -0.014511176, + -0.00013327446, + 7.926157e-05, + -0.0009064932, + 0.009159476, + 0.007928088, + -0.007916146, + -0.0027911032, + -0.0050543775, + -0.0042212503, + 0.014304856, + 0.009245745, + -0.03528282, + -7.623171e-05, + -0.00063225004, + -0.00079313794, + -0.041682914, + -0.022347867, + 0.008790185, + 0.010286237, + 0.01932483, + 0.009303921, + 0.014143503, + -0.00030344658, + 0.008106611, + 0.0033638885, + 0.013180762, + 0.00077922305, + -0.005838258, + 0.012066535, + 0.0051860586, + -0.0070442194, + -0.006834165, + -0.00023954672, + 0.007342173, + -0.023239428, + -0.003617059, + -0.0026720944, + -0.003708353, + 0.0154788615, + 0.009052739, + 0.0043318435, + 0.0039538904, + -0.0017184541, + -0.002295819, + -0.008554293, + -0.007275183, + 0.024533488, + -0.01794375, + -0.007010153, + 0.0021689893, + 0.009303209, + -0.0012250267, + 0.028254261, + 0.0009670305, + -0.010763198, + -0.016930241, + 0.0051692757, + 0.0061168987, + -0.012951033, + -0.0076493258, + -0.0026840272, + 0.011222177, + -0.0010592218, + 0.011700341, + -0.03209625, + -0.006637757, + 0.014856078, + -0.0023493082, + -0.003142559, + -0.0010250331, + -0.0064032343, + 0.00408636, + -0.008821977, + -0.009490421, + 0.009515141, + 0.0054991934, + -0.011902213, + -0.024442425, + -0.005363275, + 0.005948597, + 0.019373002, + 0.00038308738, + 0.0071736826, + -0.0068738596, + -0.0050033713, + 0.010404801, + 0.01242861, + 0.003386588, + -0.01729966, + 0.0044065197, + -0.0056427605, + 0.01180931, + 0.013047892, + -0.011034325, + -0.009681939, + 0.0023137769, + -0.013493431, + -0.001059334, + 0.0094511295, + 0.016935976, + -0.006434127, + 0.010116888, + 0.0014509656, + 0.0135692, + 0.017733265, + 0.007530965, + -0.0008389675, + -0.020920306, + -0.01974019, + -0.011524619, + 0.020378327, + 0.0011572792, + 0.0057896916, + -0.0076154163, + -0.007968624, + 0.0062724855, + -0.02427061, + 0.011058769, + -0.002157005, + -0.0049139075, + -0.022619544, + 0.0036295229, + -0.00033956114, + 0.0061540008, + 0.011330802, + -0.0016705551, + -0.0006477638, + 0.008865951, + 0.008978624, + -0.12549376, + 0.0011483863, + -0.0007791609, + 0.0005772204, + 0.007218184, + -0.010967211, + -0.01324162, + 0.00046197567, + 0.00034464907, + -0.01693338, + 0.014493383, + -0.0025178269, + 0.0027948504, + 0.0036025217, + -0.009861312, + -0.0225297, + -0.000573024, + -0.012890834, + -0.0013044835, + -0.0038721594, + -0.006036357, + 0.009784855, + -0.00015153433, + 0.0011565959, + 0.004817443, + -0.018549193, + 0.0057863165, + 0.012938486, + 0.003984826, + 0.008245914, + -0.00889808, + 0.0015177145, + 0.0004841874, + 0.0023484682, + 0.0063209306, + -0.019559119, + -0.013507841, + 0.009482627, + -0.010881602, + 0.011027014, + -0.011760992, + 0.0031759902, + -0.0015512988, + 0.0014484901, + 0.014865368, + -0.016976962, + -0.02547821, + -0.0065713366, + -0.02425702, + -0.00451906, + 0.020565875, + -0.013748187, + 0.025450295, + 0.008542114, + 0.019847086, + 0.011130348, + -0.021192199, + -0.003708448, + -0.0078379, + -0.0063854987, + 0.0025960186, + -0.029646127, + 0.0044672065, + -0.013433558, + -0.0058213654, + 0.0012396253, + 0.003019675, + 0.15411599, + 0.010998347, + 0.029062161, + 0.006693313, + -0.0054720165, + 0.019001098, + 0.0017947664, + 0.009643303, + -0.019859176, + -0.013053867, + -0.0014972056, + 0.012968202, + 0.022594115, + 0.0042089564, + 0.0057625542, + 0.012586268, + -0.002975285, + 0.0036044864, + 0.002609338, + -0.013938287, + 0.0072566983, + 0.0050863284, + -0.0026246917, + -0.012773603, + 0.017351517, + 0.0008529758, + -0.0040164003, + 0.026201462, + -0.0035293067, + 0.029804457, + -0.03150015, + -0.025760215, + -0.011178453, + 0.00096790073, + 0.022471966, + -0.013772505, + 0.0046933587, + -0.00025096192, + -0.00555039, + -0.0049909786, + 0.004744763, + 0.017482406, + 0.001062143, + 0.0011754198, + -0.01266103, + 0.030516041, + -0.009300723, + 0.028953398, + 0.013668008, + 0.012296531, + -0.01588032, + 0.01264528, + -0.016288685, + 0.0040984144, + 0.008894846, + -0.009905231, + -0.0031888848, + -0.019149061, + -0.022689741, + 0.005309861, + -0.010596462, + -0.02324654, + 0.0013965329, + -0.029675262, + -0.0043770433, + -0.003507999, + -0.0064335177, + -0.0103402445, + 0.01674405, + -0.13440363, + 0.0075927963, + -0.026676102, + -0.032818712, + -0.0067202155, + -0.014972761, + 0.027623676, + 0.004783768, + 0.010645377, + 0.012571089, + -0.0047334954, + -0.001073749, + -0.010340614, + -0.0057129604, + -0.019388748, + -0.002851394, + 0.0018149882, + 0.0051914062, + -0.003441121, + 0.031389713, + -0.0032258602, + 0.019027298, + -0.008462774, + 0.012915185, + 0.0032007927, + -0.010973557, + -0.034335855, + -0.0059200427, + -0.03785064, + -0.0037700073, + 8.772684e-05, + 0.012637739, + -0.0051584966, + 0.009722612, + -0.0118046375, + -0.015749305, + 0.0069755847, + -0.0036867931, + -0.011300213, + -0.031987187, + 0.027123645, + -0.016610831, + 0.0005068831, + -0.01626866, + 0.004232682, + -0.0039797314, + 0.0006992772, + 0.008946579, + 0.009619923, + 0.008039646, + 0.006433071, + 0.0083857635, + 0.029214738, + -0.0034094984, + -0.0071839793, + -0.014568484, + 0.025239041, + -0.023112576, + -0.0040391656, + 0.0025568993, + 0.005448043, + 0.008596333, + -0.01949378, + -0.024491489, + 0.015189006, + 0.0069937613, + -0.0015614115, + 0.0022333695, + 0.0013130095, + 0.027399655, + -0.021442642, + -0.0027017589, + 0.024845898, + 0.0042768396, + -0.015303012, + -0.0012927616, + -0.014212585, + -0.008490385, + -0.012857499, + 0.0026918866, + 0.0024612076, + -0.01787842, + 0.00016677297, + -0.013076192, + 0.01851199, + -0.020004472, + -0.018267537, + -0.008571638, + 0.009272392, + 0.009917584, + 2.2427668e-05, + -0.0001679924, + 0.001495124, + 0.0029355432, + -0.009955851, + 0.011481669, + -0.018617634, + -0.012655013, + 0.002959863, + -0.010551828, + 0.010566976, + -0.00547638, + -0.007314806, + 0.007814827, + 0.017825393, + -0.011271756, + 0.0015437632, + 0.026420074, + 0.011520657, + 0.0028496024, + -0.009558027, + -0.003171749, + -0.026519092, + 0.00839664, + 0.010000108, + -0.00984401, + -0.012995163, + 0.01792866, + 0.0103383735, + 0.008174345, + -0.013954868, + -0.0008839658, + -0.0016546377, + -0.0014585721, + -0.003730229, + 0.008337699, + 0.021007448, + -0.0116751855, + 0.006853999, + 0.010470975, + 0.0047475155, + -0.017074361, + -0.0036898616, + 0.007525888, + 0.014242162, + -0.0031338038, + -0.010483396, + 0.004184124, + 0.004200691, + -0.0047563063, + 0.0067842705, + 0.006841096, + -0.006166926, + 0.0073447954, + -0.00331166, + -0.0033253352, + 0.014838811, + 0.03302482, + 0.013676978, + -0.003965307, + 0.00034891054, + -0.0070057632, + -0.031226847, + 0.008741119, + 7.7074925e-05, + 0.002309868, + -0.021092178, + 0.004424756, + -0.010805343, + -0.0070582503, + 0.0009030877, + 0.0047311857, + 0.00027707225, + -0.015054697, + 0.011745699, + -0.015118417, + 0.0020726868, + -0.0074079563, + -0.003979076, + -0.0373274, + 0.0076907068, + -0.0033847496, + 0.009676019, + 0.003989316, + 0.00537552, + -0.0102131115, + 0.01604806, + -0.0021019657, + -0.0036074242, + -0.07370773, + 0.016251508, + 0.01913491, + -0.0075744167, + -0.0057346495, + -0.019592883, + -0.00089839625, + -0.008792925, + -0.0062233307, + -0.0034513252, + -0.0009158271, + 0.006966837, + -0.021693151, + -0.022992263, + 0.011297129, + 0.012391907, + -0.028648555, + 0.010610384, + -0.010035838, + 0.0014479007, + 0.0036349122, + 0.0019729754, + 0.027745439, + 0.0024648064, + 0.002361533, + -0.0014738202, + -0.003769813, + -0.020667529, + -0.01568652, + -0.006640782, + 0.007305903, + -0.001541139, + 0.0011563754, + 0.012078278, + 0.014150128, + 0.0066564083, + 0.0012767742, + -0.0030075193, + 0.008200627, + -0.059310015, + 0.025066322, + 0.00867268, + -0.10115889, + 0.001994195, + -0.018544506, + 0.0028172724, + -0.008930844, + -0.0077836025, + -0.015807088, + -0.0027923172, + 0.011694538, + 0.022896796, + -0.002467835, + -0.014921493, + -0.0013206194, + -0.0022400932, + 0.0028951548, + -0.015705826, + -0.009918975, + -0.022789411, + -0.0011261936, + 0.015051474, + 0.006905711, + 0.007927853, + 0.001767738, + 0.003032793, + -9.9784564e-05, + 0.010290896, + 0.0037157934, + -0.0009753703, + 0.0030746039, + -0.01603226, + 0.008226444, + 0.010678811, + -0.001846853, + -0.01040114, + -0.0029527647, + -0.0107408315, + 0.0031248461, + -0.002524024, + -0.0051562926, + 0.0032902923, + -0.008285604, + 0.030032016, + 0.008766954, + -0.012917063, + -0.0019435539, + -0.12764004, + -0.0117520355, + -0.026418528, + 0.0015738814, + -0.0022685546, + 0.01869576, + 0.007770697, + 0.1321313, + -0.031599507, + 0.0009070102, + -0.013740191, + -0.0071907807, + 0.00022861015, + -0.0064419587, + 0.0021176182, + -0.00010337344, + 0.011212686, + -0.010468846, + -0.016620316, + -0.0018967239, + -0.0239491, + 0.00014967505, + -0.004005274, + -0.0051165093, + -0.0032032167, + -0.041815303, + 0.0073320684, + 0.019712688, + 0.00586059, + -0.0021483193, + -0.0046662134, + -0.0040648635, + 0.015170731, + 0.005767225, + 0.0012438516, + 0.017445898, + -0.00781913, + -0.00075357634, + -0.0026311597, + 0.0015433509, + 0.005465703, + 0.009966477, + 0.012214459, + -0.025185978, + -0.01744069, + -0.010157152, + -0.015251515, + -0.007837943, + 0.026992958, + -0.014606038, + 0.0125807235, + 0.012833016, + -0.007330095, + 0.006914375, + -0.022544127, + -0.00012776212, + 0.0022015842, + -0.013039287, + -0.0064494205, + 0.00250702, + -0.014849575, + -0.0054368586, + -0.003328686, + -0.013628556, + 0.0036707746, + 0.018588293, + 0.0033171338, + -0.005719763, + -0.0046660253, + -0.00085371744, + 0.006026803, + 0.01482038, + 0.008803959, + 0.0050346083, + -0.0071692043, + 0.0038208691, + 0.010881046, + -0.00025067513, + -0.025629546, + 0.015926838, + 0.012460762, + -0.0012118124, + -0.0003016765, + -0.012153138, + 0.015534729, + -0.0044092545, + -0.00095768174, + -0.0016420397, + 0.013804815, + -0.010450318, + -0.009980672, + -0.016674217, + -0.018013258, + -0.0026939707, + 0.006385547, + -0.00022842591, + 0.010432637, + 0.0026066245, + -0.015953293, + -0.0056060944, + -0.022458443, + -0.022350803, + -0.008945824, + -0.0022699353, + 0.0007100897, + -0.0075403196, + -0.0020852736, + -0.008612602, + 0.003081507, + -0.0063186265, + 0.015791815, + -0.008857787, + 0.012388251, + 0.0036018589, + 0.003696184, + 0.014438639, + 0.0069463286, + 0.008595042, + -0.014976479, + 0.005360097, + -0.0008863557, + 0.0021500725, + -0.009453832, + -0.01975644, + -0.005339055, + -0.012412678, + 0.022777477, + 0.0026788148, + 0.004590457, + -0.019592844, + -0.010005164, + -0.0024333696, + 0.0029599476, + 0.013824455, + -0.011126957, + -0.0044667856, + -0.0027832435, + 0.009864287, + -0.010240515, + -0.02289832, + -0.018920938, + 0.0055165305, + -0.021835156, + -0.010456208, + 0.016913459, + 0.007766291, + 0.0077063288, + -0.02810555, + -0.016521297, + -0.023434367, + 0.0053794077, + 0.0036307161, + 0.02542831, + -0.0025094163, + -0.006459824, + 0.0063279364, + -0.005066118, + 0.0075214356, + 0.011747835, + -0.002646805, + -0.029509472, + -0.00086615206, + -0.007892074, + -0.003725141, + -0.021037554, + -0.0011267157, + -5.579391e-05, + -0.010627381, + 0.023485506, + 0.005429961, + -0.004252876, + -0.017227678, + -6.281759e-05, + 0.003560077, + 0.017644353, + 0.0030251953, + 0.0035889088, + 0.006534239, + 0.010435479, + -0.010141574, + -0.003465907, + 3.264064e-05, + -0.0017140793, + -3.5351193e-05, + 0.0045308904, + 0.00033461765, + -0.0051832167, + 0.0012082846, + -0.0068293232, + 0.0032011736, + -0.0020273188, + 0.012943087, + 0.007367056, + 0.015017999, + -0.0009245704, + 0.00767235, + 0.0054951287, + -0.019832144, + -0.0026459172, + 0.017353136, + 0.014508564, + -0.008996641, + -0.008176985, + -0.023621656, + 0.016050432, + 0.016184215, + 0.00855087, + 0.0077263364, + -0.022535987, + -0.0062524043, + 0.00948866, + 0.007980636, + -0.006194562, + 0.008656705, + 0.011052535, + 0.006233825, + 0.013555629, + -0.001158201, + 0.0016663927, + 0.003887912, + 0.016378049, + 0.010259253, + 0.03075573, + -0.0073310076, + 0.002906897, + -0.023796588, + -0.0049516573, + 0.009867118, + 0.009279919, + -0.0013618099, + 0.004735957, + -0.011912313, + 0.014314374, + -0.010991461, + -0.01793626, + -0.0042441883, + -0.011599214, + -0.004664947, + -0.007730245, + -0.023849424, + -0.008907767, + 0.001680627, + 0.0021082838, + 0.004427241, + -0.009299997, + -0.027704282, + 0.013674968, + 0.018026924, + -0.013029633, + -0.013729332, + -0.005878005, + 0.0016829204, + -0.0051390175, + 0.010078276, + 0.0030407524, + 0.013154401, + 0.010024837, + 0.007754739, + 0.010033473, + 0.004688279, + -0.004011831, + 0.006805001, + 0.009030964, + -0.0032740508, + -0.024805795, + -0.012260087, + -0.017885132, + 0.022400007, + -0.019947696, + 0.0022859147, + 0.0013856788, + 0.0060809995, + -0.022569733, + -0.021946022, + -0.0054134256, + -0.017881397, + -0.009177422, + 0.0107345125, + -0.010607636, + 0.013973255, + 0.003978502, + -0.012738835, + 0.000791927, + -0.022167979, + -0.010027519, + -0.006300139, + 0.0016046254, + -0.0011658802, + 0.0128343385, + -0.025260564, + 0.004826241, + -0.0064358516, + 0.0054054204, + -0.0033747216, + -0.0011064982, + -0.004175435, + 0.010213595, + -0.012992344, + 0.010516374, + -0.004002639, + 0.028947463, + -0.006851498, + -0.008816499, + -0.012853919, + -0.005094008, + -0.014931464, + -0.0034168812, + -0.01646018, + -0.02397455, + -0.0047775037, + -0.02043237, + -0.0029183512, + 0.02339196, + 0.0010641259, + -0.035893433, + 0.015418697, + -0.00570236, + 0.022694616, + 0.032251097, + 0.0014124541, + 0.014922707, + 0.006191483, + 0.021030203, + 0.011940469, + 0.02959254, + -0.0066985167, + 0.01737022, + 0.001593132, + -0.0024463893, + -0.008048572, + 0.016283758, + -0.0076325587, + -0.022071593, + -0.009680199, + -0.009991326, + -0.008559377, + -0.003527623, + 0.009898091, + -0.0239721, + -0.006869922, + 0.005094324, + 0.014594455, + -0.0042542615, + -0.018695602, + -0.0059096892, + 0.010420368, + -0.0024047978, + -0.005004349, + -0.018082088, + -0.0026000964, + -0.0023837327, + -0.011441631, + -0.0074695516, + 0.008580243, + -0.0063919043, + -0.0017962483, + 0.011074562, + -0.0025787882, + 0.005604805, + -0.0037249092, + -0.016371569, + 0.03919583, + 0.0032451504, + 0.004928544, + 0.011013678, + 0.005899762, + -0.038711008, + -0.006520802, + -0.009998993, + 0.01638301, + 0.01924471, + 0.008516619, + 0.012274732, + -0.004723619, + -0.015955744, + -0.01359156, + -0.010410402, + -0.00184826, + -8.660255e-05, + 0.014252323, + -0.004730456, + 0.013736535, + 0.012686817, + -0.013235756, + -0.0009964491, + 0.0037149363, + -0.020582091, + 0.02038097, + 0.028052317, + -0.007478327, + 0.0033647777, + -0.0037701842, + 0.0016368731, + 0.0045173857, + 0.011923115, + -0.011889629, + -0.0012407245, + -0.0010608097, + 0.0019567208, + -0.0248674, + 0.033993214, + 0.00042667708, + -0.0034449252, + -0.022427725, + 0.009021254, + -0.027144741, + -0.0023788041, + 0.011085944, + -0.023597613, + -0.009491141, + -0.005776225, + -0.0016031681, + -0.021279635, + 0.012437693, + -0.016642189, + 0.025417395, + -0.014908248, + -0.008183821, + 0.039981786, + 0.0040104603, + -0.0074198744, + -0.015832355, + 0.021973945, + 0.010837469, + 0.0030428884, + -0.0038051778, + -0.012305103, + -0.020555655, + 0.03235212, + -0.010549047, + 0.015897121, + -0.013503583, + -0.015522676, + -0.021551834, + -0.0021402794, + -0.003645485, + -0.013429839, + -0.007476074, + -0.0013966657, + 0.011476252, + -0.011817603, + 0.0143499, + 0.026428957, + -0.0056521515, + 0.019470528, + -0.009124, + -0.018970879, + 0.015043343, + 0.0004576729, + 0.040772706, + 0.002367863, + 0.0028462203, + -0.002960511, + 0.012848347, + -0.009437713, + 0.008334162, + -0.005632875, + 0.0031996076, + 0.029671298, + 0.008185566, + 0.0084228795, + 0.005100863, + 0.011880753, + 0.0012442798, + -0.019727675, + -0.023113897, + 0.0035514317, + -0.012268589, + -0.0054680523, + -0.0017859386, + -0.046230547, + -0.013419785, + -0.033217926, + 0.011873421, + -0.003891995, + 0.012969521, + 0.0065369657, + 0.0013104244, + 0.011228913, + -0.04874567, + -0.0065299175, + -0.012434343, + -0.026985493, + -0.0038235527, + 0.018916523, + -0.0042355824, + 0.009603488, + -0.034257222, + -0.014229425, + 0.017436275, + 0.0023552575, + 0.004705255, + -0.0017279481, + -0.015836205, + -0.011282497, + 0.00075895473, + -0.011368437, + 0.0042966832, + -0.0017585753, + 0.01659405, + -0.012923276, + -0.0059640934, + -0.0046882005, + -0.011100364, + 0.014342708, + 0.015982203, + -0.00887332, + -0.0022998685, + 0.030196847, + -0.018628055, + -0.006706339, + 0.014671887, + -0.0099548185, + -0.0067233085, + -0.009807834, + -0.01689993, + -0.008447269, + -0.01216179, + -0.017622743, + 0.017328693, + 0.017838366, + -0.011037993, + 0.0039087404, + -0.0032270402, + 0.011305451, + -0.0068248753, + 0.0034847471, + 0.0033400392, + 0.021361908, + 0.019645192, + -0.011504775, + 0.020355903, + -0.017869975, + 0.008740273, + 0.0040119006, + -0.02039089, + 0.010365827, + 0.011100598, + 0.012329933, + 0.0031863514, + 0.025081683, + 0.0017841234, + -0.012944432, + 0.008082693, + 0.012554458, + -0.0070418385, + 8.4894644e-05, + -0.031730615, + 0.009901145, + 0.009566268, + -0.007260933, + -0.016410906, + 0.0039879605, + -0.014069598, + 0.024369983, + 0.00776768, + 0.013354023, + 0.0076537197, + 0.008906825, + -0.011182678, + -0.01077545, + -0.0007510319, + -0.0010947599, + 0.002254599, + 0.01809531, + -0.024941899, + 0.025307592, + -0.012712451, + -0.00095111044, + 0.012815936, + -0.007110248, + 0.0022671574, + 0.0070549324, + -0.009609365, + 0.0030197115, + 0.013972379, + -0.010187787, + -0.015748797, + -0.010865253, + 0.0046360004, + -0.0028331748, + -0.003289964, + -0.01276741, + -0.005548282, + -0.026381258, + 0.01732164, + 0.0051409523, + 0.014974104, + 0.012286174, + -0.004700372, + 0.011064182, + -0.008523704, + 0.024264384, + 0.011873411, + -0.009858362, + 0.020916112, + -0.0016135278, + -0.028254904, + -0.020963738, + 0.0061805816, + 0.011928123, + -0.016326925, + -0.017728625, + -0.028945975, + -0.008378486, + 0.018371321, + -0.00047020285, + 0.0050460277, + -0.0014687211, + -0.008961886, + -0.027412, + 0.02813198, + -0.015013141, + 0.0026996767, + 0.015116287, + 0.0007102734, + 0.024283363, + -0.023386529, + 0.0022846186, + -0.007687656, + -0.0033755803, + -0.0020437601, + -0.0054740226, + -0.0036424045, + 0.0028392277, + -0.012008524, + 0.031928256, + 0.0041273134, + -0.0089144325, + -0.032349136, + 0.018246403, + 0.0064425273, + 0.013568862, + -0.0056619854, + -0.011318169, + 0.009910818, + 0.005976557, + -0.0024324104, + -0.009070891, + 0.02609382, + 0.009164383, + 0.0067841965, + -0.0003882786, + -0.00662996, + 0.0072617503, + -0.0032657527, + 0.0012167445, + -0.0037888796, + 0.012696804, + -0.001716066, + -0.0024137483, + -0.00061802333, + 0.009255335, + 0.013259118, + 0.010822346, + -0.0022604822, + 0.007705501, + -0.0062117274, + 0.022560894, + 0.005789997, + 0.009870279, + -0.016180025, + 0.008896671, + -0.017942028, + -0.00044274877, + 0.016847199, + 0.0148135545, + -0.008388685, + 0.0025089493, + 0.00496837, + -0.010412286, + -0.00950524, + -0.012983192, + 0.011212081, + 0.00030424952, + -0.015531045, + 0.0068566757, + 0.00036008502, + -0.015272015, + 0.011732208, + -0.033582006, + 0.01810853, + -0.00037915682, + -0.0044306708, + 0.016721655, + 0.0024983326, + 0.18192898, + 0.11574661, + -0.006695629, + 0.00040009964, + -0.0012250019, + 0.0076864487, + 0.0034757166, + 0.012513828, + 0.0037730555, + -0.016599694, + -0.02198299, + -0.012400087, + -0.0046616937, + -0.0045308257, + -0.008734685, + -0.018628504, + -0.0053031123, + -0.009979567, + -0.012507724, + -0.0038312646, + 0.007432121, + 0.025419325, + 0.015787736, + 0.016439037, + -0.01633571, + -0.0069500324, + -0.028771466, + 0.0007385791, + 0.0042925347, + 0.0098091485, + 0.0053268457, + 0.0054380856, + -0.0075696036, + 0.00061018346, + 0.00820882, + 0.0011488122, + -0.004683429, + -0.00546984, + 0.0011713504, + -0.008540978, + -0.008693511, + 0.009943681, + -0.027417703, + 0.008421478, + -0.004617386, + -0.0036036822, + -0.00806491, + 0.006609918, + -0.002115457, + -0.006302717, + -0.0004683854, + -0.0011388202, + 0.0023845516, + 0.005539582, + -0.02458794, + 0.0066834376, + 0.009032304, + 0.022472192, + -0.024583867, + 0.011357299, + 0.030708237, + 0.006286613, + -0.024127001, + -0.004261912, + 0.0060589416, + -0.019336466, + 0.011349811, + -0.017727597, + 0.019299418, + 0.011931476, + 0.0025496334, + 0.003698905, + 0.021144561, + -0.0053581125, + -0.007147438, + -0.0070261406, + 0.007004396, + 0.02087099, + -0.02232327, + -0.00914425, + -0.03734111, + -0.012692625, + 0.00951948, + 0.0027951377, + 0.0029665923, + 0.008958011, + -0.014967644, + 0.017949145, + 0.13550235, + 0.008739238, + 0.0069498075, + -0.016870564, + 0.008574542, + -0.015286999, + -0.009498894, + 0.050684035, + 0.0031985315, + -0.0071731596, + 0.0034208817, + -0.023815464, + 0.011259904, + -0.013000243, + 0.0023959975, + -0.0031024679, + 0.018822419, + 0.07259271, + -0.005754364, + -0.01297449, + -0.009203447, + -0.012284401, + 0.00066643266, + -0.016920662, + -0.01871044, + 0.014503336, + 0.00446966, + -0.014284746, + -0.020385472, + -0.010954158, + -0.11834668, + -0.012137524, + 0.0034122174, + 0.02119757, + 0.023010245, + 0.013619113, + -0.03608078, + -0.022575248, + 0.020519473, + 0.0077648647, + 0.0129157165, + 0.0010266651, + 0.037588265, + -0.013121277, + -0.010810563, + -0.010819504, + 0.01107703, + 0.0058187465, + 0.0073332693, + 0.0055080527, + 0.0063170707, + 0.010691358, + -0.013011938, + -0.017021524, + 0.0018511998, + 0.010016584, + 0.0029402256, + 0.0049434146, + 0.016218748, + -0.00094759377, + 0.005489795, + 0.006671583, + -0.002078264, + 0.01642489, + -0.005284572, + 0.006392261, + -0.016854798, + 0.0001234301, + 0.0070276, + -0.017583396, + 0.008571602, + -0.007872555, + 0.014736844, + -0.03051385, + -0.008184289, + -0.02187798, + 0.025266686, + -0.02554556, + -0.006624621, + 0.001638356, + 0.0661878, + -0.00018980939, + -0.01949759, + -0.014423047, + 0.011357499, + 0.016133076, + 0.009662694, + 0.011706927, + -0.02588653, + 0.009055956, + -0.028707054, + 0.009987235, + 0.009483339, + -0.015588614, + 0.025857266, + 0.0008257921, + -0.009878127, + 0.0011446921, + 0.00858539, + 0.007949241, + -0.012273512, + -0.010559733, + -0.009155529, + -0.01851766, + -0.023253812, + -0.015820866, + -0.0071343724, + 0.010148998, + 0.005852047, + -0.004211419, + 0.014076001, + -0.021029646, + 0.01143922, + 0.12621424, + 0.016577745, + -0.013200802, + 0.007252911, + 0.010128976, + -0.01800221, + -0.0071450714, + 0.00057110324, + 2.8346067e-05, + 0.01218976, + -0.011770302, + 0.009635198, + 0.007728661, + 0.018418025, + 0.01590825, + -0.022693992, + 0.023796547, + -0.011384495, + 0.0056952396, + -0.0020202643, + 0.0030059956, + 0.0052879816, + 0.004840821, + 0.004000073, + 0.001347768, + 0.0021706864, + -0.026343353, + -0.007946671, + -0.004369344, + -0.011418952, + -0.00075893884, + -0.0019176402, + 0.00233453, + 0.0035377692, + -0.006982876, + 0.0041959435, + 0.012710008, + -0.011041814, + 0.0009983975, + -0.0037775876, + 0.013419514, + 0.018840149, + -0.009303957, + 0.01006055, + -0.02049406, + 0.19282317, + -0.01902035, + 0.0070103165, + -0.0062239985, + 0.000586477, + 0.013768561, + -0.016021231, + 0.013410198, + 0.008437876, + 0.003821201, + 0.02031044, + -0.0114681395, + -0.006616491, + 0.013073506, + 0.0159395, + 0.0057846056, + 0.0004546654, + 0.038460035, + -0.017734298, + 0.011703511, + 0.00028914964, + -0.012233376, + -0.030684683, + 0.00022904284, + -0.010351831, + 0.011136337, + 0.01243425, + -0.01100715, + 0.0084689, + -0.025079433, + -0.022724723, + -0.028273942, + 0.011432339, + -0.009235956, + 0.008413546, + -0.0010819634, + 0.013597246, + -0.013910726, + -0.013140183, + 0.023079393, + -0.013715101, + -0.01590305, + 0.030263143, + 0.017954111, + 0.005136289, + -0.025599692, + -0.0030492947, + 0.014094089, + -0.006422627, + -0.010872441, + 0.0054095616, + 0.009063865, + 0.034053225, + 0.012715899, + -0.0225691, + 0.010167347, + -0.011571894, + 0.018559432, + -0.0064651566, + 0.0020887065, + 0.0014984119, + -0.007625711, + 0.011184661, + 0.0034512766, + 0.018264674, + 9.511567e-05, + -0.0081613185 + ] + } + ] +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:44 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 93 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-xzdkj +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_e5a204d946f144cb9ca3e99827a28179 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} diff --git a/vectorstores/dolt/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr b/vectorstores/dolt/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr new file mode 100644 index 000000000..b1dce7e59 --- /dev/null +++ b/vectorstores/dolt/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr @@ -0,0 +1,15468 @@ +httprr trace v1 +333 334599 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 137 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Tokyo","Yokohama","Osaka","Nagoya","Sapporo","Fukuoka","Dublin","Paris","London","New York"]}HTTP/2.0 200 OK +Content-Length: 333642 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:19:40 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 125 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-fqbb6 +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999985 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_08b285665f064ff5b15b9ce91cfe5673 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.001070031, + 0.008037085, + -0.008887224, + -0.008638722, + -0.010875242, + 0.014713947, + -0.029375577, + 0.013065985, + -0.011051809, + -0.035548896, + 0.001566218, + -0.02474559, + 0.016296513, + -0.027125979, + -0.007997848, + -0.021070372, + 0.021711247, + -0.01803603, + 0.0024016432, + -0.02207746, + -0.011306851, + 0.012686692, + -0.0024065478, + -0.019016959, + -0.008344443, + -0.011803855, + 0.0013651273, + -0.015302505, + 0.008965698, + -0.020010969, + 0.019043118, + -0.019095434, + -0.010522107, + -0.022875283, + 0.008828368, + -0.004652877, + -0.015328663, + -0.0060261786, + -0.0023493269, + -0.0118496325, + 0.009122647, + -0.008207113, + 0.0015155366, + -0.017251285, + -0.018323768, + 0.01607417, + -0.016649649, + 0.016571173, + -0.00018801155, + 0.012255083, + 0.015119398, + 0.020311786, + -0.032331448, + -0.0067684157, + -0.026602816, + -0.016388068, + -0.028486202, + -0.0007291578, + 0.000018967197, + 0.0041558724, + -0.0033645893, + -0.0059934813, + -0.015982617, + 0.0117123015, + 0.014269259, + -0.011346088, + -0.011241456, + 0.028616993, + -0.015302505, + 0.0038223565, + 0.013242552, + 0.017395156, + -0.0010079053, + -0.0024752128, + 0.031625178, + -0.008010927, + -0.0015245284, + 0.004652877, + 0.011856171, + 0.009848535, + 0.01523711, + -0.035601214, + 0.004365138, + 0.0026583197, + 0.013190236, + 0.007605476, + -0.008743354, + 0.0360459, + -0.002671399, + -0.00082071126, + 0.009534637, + 0.003756961, + 0.00992047, + 0.01062674, + -0.024850221, + -0.016113406, + -0.006454518, + 0.043344017, + -0.01857227, + -0.013196776, + -0.0015964633, + 0.009815837, + -0.0037242635, + -0.011529195, + -0.025883468, + 0.011568432, + 0.014321575, + -0.016440384, + 0.008906842, + -0.008710656, + -0.0019765736, + 0.027989198, + -0.013085604, + -0.059065055, + -0.017722132, + -0.012961352, + 0.005476858, + -0.01662349, + -0.010234368, + -0.014753184, + 0.018807694, + 0.019265462, + 0.011856171, + 0.002682843, + 0.02725677, + 0.00033167689, + -0.006483946, + -0.019330857, + 0.00050926604, + -0.009613113, + 0.026995188, + 0.011744999, + -0.0058986577, + 0.015629482, + -0.021004977, + 0.013903045, + -0.016440384, + 0.01131993, + -0.01103873, + -0.006441439, + 0.0063368063, + 0.0090637915, + -0.01286326, + 0.013347185, + 0.0097242845, + 0.02502025, + 0.023136863, + -0.0030392476, + 0.015851825, + -0.005967323, + 0.003730803, + -0.0050256304, + 0.016976625, + 0.0071804062, + 0.009580415, + 0.0035738542, + 0.03225297, + 0.018611507, + 0.0059280857, + 0.010548265, + 0.006931904, + 0.004237617, + 0.031389754, + -0.021345032, + 0.0030081847, + 0.0127063105, + 0.012032739, + 0.014413129, + -0.00033699026, + -0.011588051, + -0.018336847, + 0.019448569, + -0.04049278, + 0.018624587, + 0.005208737, + 0.017578263, + 0.011006032, + 0.009292675, + -0.019854018, + -0.007971689, + -0.0023803897, + 0.00003410264, + 0.02683824, + 0.009927009, + -0.007919373, + 0.005771137, + 0.027779931, + 0.01551177, + -0.0011803856, + -0.014504682, + 0.025870388, + 0.035548896, + 0.031180488, + 0.0071346294, + -0.67843723, + -0.03280229, + 0.0011599495, + 0.004224538, + 0.020468736, + 0.005329719, + 0.018245295, + 0.015498691, + -0.012830562, + 0.013562989, + -0.027230611, + 0.017996792, + -0.01789216, + -0.012601678, + -0.008749894, + 0.0048032864, + 0.015263268, + -0.0027139059, + -0.004208189, + 0.0105548045, + 0.0047771283, + 0.017813684, + -0.008409838, + -0.0052348953, + 0.013236013, + -0.010567884, + 0.007697029, + -0.004306282, + -0.009416926, + 0.02362079, + -0.029794108, + 0.049700443, + 0.0050485185, + -0.01508016, + 0.039917305, + -0.015694877, + -0.02305839, + 0.017565183, + 0.02054721, + 0.031258963, + 0.0014574982, + 0.003841975, + 0.0028806638, + -0.0026027337, + 0.005336258, + 0.002027255, + 0.022208251, + -0.023280734, + 0.008991856, + -0.008220192, + 0.021828959, + -0.036229007, + -0.016675808, + -0.01634883, + -0.0004142385, + 0.0098354565, + 0.0035967426, + -0.0034332543, + -0.0009694856, + -0.009534637, + -0.015851825, + -0.0092011215, + -0.027779931, + -0.021279637, + -0.012366255, + 0.012405492, + -0.010437093, + -0.023306891, + -0.0006384218, + -0.01968399, + 0.004554784, + 0.021397348, + -0.0070365365, + -0.009586954, + 0.017656736, + 0.006235444, + 0.0259881, + -0.031991392, + -0.0034169054, + -0.007618555, + 0.004201649, + 0.012183148, + -0.01969707, + -0.0053035603, + 0.015681798, + -0.040178884, + -0.035967425, + 0.002808729, + 0.026602816, + -0.012882878, + 0.0046430677, + 0.0036719472, + 0.0063923923, + 0.00908995, + -0.011810395, + 0.011882329, + -0.0016970086, + -0.008050164, + 0.006748797, + -0.0071346294, + -0.014216943, + -0.015446375, + 0.009750443, + 0.0036261706, + -0.015302505, + -0.004280124, + -0.014910133, + 0.017238207, + 0.021894353, + -0.014923212, + 0.006107923, + -0.010240907, + -0.017722132, + 0.00039257627, + 0.018493796, + -0.023019154, + 0.017839843, + -0.00011781375, + 0.022391358, + 0.0090637915, + 0.007363513, + 0.0019733037, + 0.016374988, + 0.022574464, + 0.017251285, + 0.015106319, + 0.006078495, + 0.0010798402, + -0.00642509, + 0.0061733183, + -0.001871941, + 0.014426208, + 0.010574424, + -0.006467597, + 0.023176102, + -0.009488861, + -0.009181503, + -0.0059346254, + 0.018493796, + -0.036385957, + -0.033587035, + -0.012425111, + -0.0015277981, + -0.003521538, + 0.012085055, + -0.026419709, + -0.016937388, + 0.0007418282, + -0.019827861, + 0.00503217, + -0.008213652, + 0.0026615895, + -0.029794108, + 0.01914775, + -0.0060065603, + -0.013484515, + -0.00008174415, + -0.0026632245, + -0.021057293, + 0.0029525987, + 0.019043118, + 0.0080697825, + -0.03832166, + -0.0014574982, + 0.0060686856, + -0.012071976, + 0.012804404, + 0.017447472, + -0.0054833977, + -0.008867606, + -0.02151506, + -0.019265462, + -0.02388237, + 0.003953147, + 0.018925406, + 0.0033090033, + 0.010541726, + -0.013628385, + -0.0012694866, + 0.002153141, + 0.011091046, + -0.020730317, + -0.013602227, + 0.011758079, + 0.02027255, + -0.01971015, + 0.011267614, + 0.017944476, + -0.00084196473, + 0.0032043706, + -0.0073308153, + 0.015877984, + 0.008030545, + -0.000106778294, + 0.0120981345, + -0.012909036, + 0.009730823, + -0.003897561, + -0.021828959, + 0.015825668, + 0.032933082, + -0.01523711, + 0.0024572292, + -0.00950194, + 0.016322672, + -0.012124293, + -0.00656569, + -0.018951563, + 0.031206647, + 0.014596236, + 0.014648552, + -0.015210952, + -0.0068861274, + 0.01857227, + -0.006931904, + 0.03288077, + 0.006833811, + 0.023019154, + -0.019396253, + -0.0068665086, + 0.021201164, + -0.034214832, + -0.016257277, + -0.018415323, + -0.012765166, + 0.016741201, + -0.0011983692, + 0.033456247, + 0.0073308153, + -0.0059738625, + -0.034450255, + -0.013406041, + 0.001732976, + 0.021188084, + -0.01522403, + -0.029009365, + 0.00009017401, + -0.024640957, + 0.030081848, + 0.012562441, + 0.023267655, + 0.010253986, + 0.028957048, + -0.019670913, + -0.000803545, + 0.001984748, + 0.035862792, + 0.014269259, + -0.009632731, + 0.01886001, + -0.016688885, + -0.009096489, + -0.005699202, + -0.004064319, + 0.0011893774, + -0.03382246, + 0.021619692, + -0.00048596898, + 0.014831658, + 0.038504764, + -0.0002630118, + 0.0009237089, + 0.0055128257, + 0.005270863, + -0.0011632192, + -0.0044926587, + 0.02725677, + 0.012941734, + -0.007906294, + -0.008298666, + -0.015315584, + 0.006369504, + -0.012967892, + -0.0045318957, + 0.019893257, + -0.016701965, + -0.025831152, + -0.0170551, + 0.01285672, + 0.01647962, + -0.007389671, + -0.04444266, + -0.005100835, + 0.0046365284, + 0.0043945657, + -0.024654036, + -0.01076407, + -0.013039826, + -0.01131339, + 0.019801702, + 0.009966247, + 0.023816975, + 0.001081475, + -0.01789216, + -0.017866002, + -0.009789679, + 0.02207746, + -0.013334106, + -0.011908487, + -0.01048941, + 0.015197872, + -0.008148257, + -0.00030837982, + 0.005431081, + 0.026210444, + 0.011267614, + 0.005355877, + -0.011143362, + -0.0051891184, + -0.0034365242, + 0.017565183, + -0.011091046, + -0.006304109, + 0.010528646, + 0.012549362, + -0.009874693, + -0.0146093145, + 0.008056703, + 0.02417011, + -0.0012057262, + -0.017709052, + 0.006680132, + -0.026668211, + -0.0089526195, + 0.08569403, + 0.0059607835, + 0.01145726, + -0.005633807, + 0.0029362498, + 0.0073308153, + -0.016008774, + 0.0008820194, + 0.0099727865, + 0.008056703, + 0.0038452449, + -0.009233819, + -0.0020174456, + 0.011130284, + -0.0024294362, + -0.00656569, + -0.01676736, + -0.027361402, + 0.02418319, + -0.01969707, + 0.00038338007, + 0.00628776, + 0.0027972849, + 0.012130832, + -0.000813763, + -0.0035476962, + 0.024797905, + 0.018101424, + 0.01913467, + -0.025778836, + 0.0021040945, + 0.019644754, + -0.018402243, + 0.017133573, + -0.008226731, + -0.00004115307, + 0.009966247, + 0.0212404, + 0.0062092855, + -0.01160113, + 0.007513922, + 0.015394058, + 0.00824635, + 0.00038481058, + 0.014138469, + -0.019592438, + -0.018101424, + 0.02024639, + -0.019500885, + -0.018506875, + 0.032776136, + 0.006944983, + -0.041042104, + -0.017656736, + -0.017473629, + 0.008900303, + -0.009547717, + -0.013615306, + -0.0027694919, + 0.010038181, + 0.0066016577, + -0.042114586, + 0.005257784, + -0.011921567, + -0.024614798, + -0.037903126, + -0.002767857, + -0.016741201, + -0.03633364, + -0.0063923923, + -0.005558602, + -0.029401736, + -0.022796808, + 0.024300901, + 0.01607417, + -0.03047422, + 0.008095941, + -0.01621804, + -0.0010790228, + 0.036935277, + -0.026027337, + -0.011398404, + -0.012117753, + -0.008710656, + -0.031886756, + 0.025268752, + 0.031651337, + -0.03280229, + -0.0027760314, + -0.00006381153, + 0.0148055, + -0.00684689, + 0.0153679, + 0.0212404, + 0.0027466035, + -0.011359167, + 0.010155893, + 0.032357603, + -0.016034933, + -0.01313138, + 0.023660026, + -0.014033835, + 0.008462154, + 0.015812589, + 0.015119398, + 0.011346088, + 0.012922116, + 0.018820774, + -0.010777148, + 0.0012743913, + 0.02934942, + -0.018402243, + 0.0084294565, + 0.013484515, + -0.013824571, + 0.021920511, + 0.010280144, + 0.021397348, + 0.011928107, + -0.019762466, + 0.0070299967, + -0.023293814, + 0.015681798, + 0.02989874, + 0.0058855787, + -0.014334654, + 0.0138376495, + -0.009070331, + -0.0061242715, + 0.00097193796, + -0.009259977, + 0.013772255, + -0.02178972, + -0.008050164, + -0.022836046, + 0.001999462, + -0.033482403, + 0.0128436405, + 0.0031079126, + -0.031075856, + -0.007415829, + 0.007481225, + 0.01160113, + -0.0012327018, + -0.03675217, + -0.021985907, + 0.0017297062, + 0.010665976, + -0.0066310856, + 0.017826764, + 0.005404923, + 0.020442577, + -0.01061366, + 0.0062975693, + -0.030918907, + -0.02628892, + -0.025124881, + -0.028172305, + 0.0058299927, + 0.008847987, + 0.031520545, + 0.011189139, + 0.005404923, + -0.011640367, + -0.007997848, + 0.002779301, + 0.004253966, + 0.020939581, + -0.013445278, + 0.02516412, + 0.012366255, + 0.01816682, + -0.02751835, + 0.007487764, + -0.02780609, + 0.023568474, + -0.0027482384, + -0.011195679, + -0.009652349, + -0.02516412, + -0.00907687, + -0.019213146, + 0.005195658, + 0.0005362416, + -0.0025929245, + -0.0032763055, + -0.00060163694, + -0.0124578085, + 0.023555394, + 0.007991308, + 0.007605476, + -0.009338452, + 0.0002950964, + -0.0023918338, + -0.006346616, + 0.005257784, + -0.012680152, + -0.005404923, + -0.0026926524, + 0.025961943, + 0.018820774, + -0.014334654, + -0.0045482446, + 0.002601099, + 0.012130832, + 0.03944646, + 0.0059084673, + -0.015302505, + 0.007278499, + -0.012215846, + -0.026053496, + -0.011751539, + 0.007383132, + -0.01940933, + -0.02359463, + 0.010090498, + -0.006676862, + 0.028303094, + -0.0248633, + -0.015642561, + 0.019893257, + 0.011862711, + 0.032043707, + 0.015681798, + 0.010665976, + 0.008913382, + -0.0071346294, + -0.004737891, + 0.004201649, + -0.015982617, + -0.0070692343, + 0.023110706, + 0.020913424, + -0.011496497, + -0.037301492, + -0.016322672, + 0.004247426, + -0.0016087248, + -0.0010675786, + 0.023856213, + 0.0015899237, + 0.00489157, + -0.026184287, + -0.0014599506, + -0.022875283, + 0.036569063, + -0.015276347, + -0.002754778, + -0.0008574961, + -0.019108513, + -0.0015980981, + 0.014269259, + -0.003802738, + 0.003662138, + 0.015027844, + -0.012621297, + 0.0031226266, + -0.018258374, + -0.00531337, + 0.013942283, + 0.00043201784, + 0.024810985, + 0.009325373, + -0.0010871972, + 0.012804404, + 0.005467049, + -0.011267614, + 0.0054016532, + -0.00014376752, + 0.023686185, + -0.004260505, + -0.011594591, + -0.021358112, + -0.0018523225, + 0.003202736, + 0.009214201, + 0.005215277, + -0.007291578, + -0.01774829, + -0.0049209977, + 0.008409838, + 0.007468146, + -0.0029248057, + -0.011758079, + -0.025216436, + -0.024797905, + -0.022260567, + -0.0061831274, + 0.025948863, + -0.018768458, + 0.0013634925, + 0.0025880197, + -0.018977722, + 0.023960846, + -0.013347185, + -0.0044795796, + 0.017852923, + 0.027884565, + -0.024379376, + 0.011431102, + 0.0070496155, + 0.021763563, + -0.020507973, + -0.0012531378, + 0.00030286208, + -0.011404944, + 0.012928654, + -0.0138376495, + -0.0099727865, + -0.030500377, + 0.006451248, + 0.012124293, + 0.0069384435, + 0.025595728, + 0.033717826, + -0.026158128, + -0.0028888383, + -0.020298708, + -0.015564086, + 0.0181799, + -0.0051466115, + 0.014504682, + 0.020442577, + -0.012464348, + -0.0010021833, + 0.013536831, + -0.013458357, + -0.0059411647, + -0.0073308153, + -0.027701458, + -0.0069580623, + 0.0068534296, + -0.0110779675, + -0.012078515, + -0.02054721, + 0.0036261706, + -0.010947176, + 0.008900303, + 0.010430554, + 0.0046201795, + 0.0011158077, + 0.015446375, + 0.01453084, + 0.012281241, + -0.0113264695, + -0.029113997, + 0.006160239, + -0.0033367963, + -0.029584844, + -0.03897561, + -0.005100835, + 0.020926502, + 0.0034201753, + -0.014897054, + -0.020141758, + 0.011208758, + -0.021449665, + -0.007389671, + -0.013536831, + 0.018846931, + 0.012202767, + -0.012340097, + 0.007808201, + 0.0061275414, + 0.014779342, + 0.00823981, + -0.0034790311, + 0.018336847, + 0.038766347, + -0.036569063, + 0.032226812, + 0.006408741, + -0.016610412, + -0.010502488, + 0.005493207, + 0.005646886, + -0.002699192, + 0.0068534296, + -0.01702894, + -0.010136275, + -0.012111213, + 0.0022724874, + -0.026642054, + 0.017996792, + 0.007605476, + -0.03591511, + 0.026158128, + 0.017695975, + -0.01494937, + 0.005656695, + 0.0059346254, + -0.00475097, + -0.0011787507, + 0.004162412, + -0.025791915, + -0.0034005567, + -0.000193938, + -0.031991392, + 0.01984094, + -0.012261623, + 0.014713947, + 0.0045318957, + 0.00922074, + -0.01075753, + -0.019854018, + 0.0005378765, + -0.015642561, + -0.014413129, + 0.026040416, + -0.0013667622, + -0.025621887, + -0.0122354645, + 0.017983712, + -0.045619775, + 0.009214201, + 0.008834908, + -0.007808201, + -0.024928696, + 0.008167876, + 0.023581553, + -0.026380472, + -0.016937388, + 0.009998945, + -0.022862203, + -0.0003002054, + -0.011888869, + 0.027570667, + -0.031102015, + 0.015616402, + -0.0011501402, + -0.0022463293, + -0.031625178, + -0.0061177323, + 0.011391865, + -0.008043624, + -0.008468694, + 0.23981772, + -0.023542315, + -0.0048000165, + 0.038949452, + -0.0032223545, + 0.039629564, + 0.030134164, + -0.0012049088, + -0.014687789, + 0.00032452427, + -0.03131128, + 0.001627526, + 0.020834949, + -0.0019160829, + -0.0029591382, + -0.025098724, + -0.021292716, + -0.03301156, + -0.038190868, + -0.0060294485, + 0.020141758, + -0.00258475, + -0.002694287, + -0.01341912, + 0.014269259, + 0.012693232, + -0.011287232, + -0.0056665046, + 0.020442577, + 0.019867098, + 0.0048588724, + 0.008017466, + -0.00517277, + 0.02122732, + 0.00013763671, + -0.009600033, + -0.015040924, + -0.0046626865, + 0.02725677, + 0.023673106, + -0.004567863, + 0.0020861106, + -0.010796768, + -0.010247447, + 0.00038848908, + 0.021894353, + -0.007873597, + 0.008364062, + -0.011980423, + 0.034162514, + -0.032933082, + -0.01048941, + 0.030788116, + 0.01662349, + 0.0094234655, + -0.013602227, + 0.036412116, + 0.015250188, + -0.009573875, + -0.017172812, + -0.020861108, + 0.010417474, + -0.010012023, + 0.027230611, + 0.0048163654, + 0.0001181203, + -0.023411525, + 0.012869799, + 0.0062092855, + -0.00083624263, + 0.014923212, + -0.011470339, + -0.0033940172, + -0.01734284, + -0.02893089, + -0.016597332, + 0.032226812, + -0.0033874775, + 0.02177664, + 0.037118383, + -0.008403298, + 0.006833811, + 0.022718335, + 0.0007839264, + 0.009279596, + -0.016793517, + 0.023503078, + 0.0156033235, + 0.0077885827, + -0.008468694, + -0.01369378, + -0.018140662, + -0.014596236, + -0.020390261, + -0.0070757736, + 0.014700868, + 0.0005292934, + 0.008978778, + -7.4080634e-7, + -0.016793517, + -0.008187494, + -0.001349596, + 0.015904142, + -0.009586954, + 0.004257235, + 0.0059869415, + -0.000112091664, + -0.0023264384, + -0.006052337, + -0.03060501, + -0.006232174, + -0.03479031, + 0.008972238, + 0.016989704, + 0.0020713967, + -0.0068926667, + -0.008861066, + -0.023660026, + 0.017368997, + -0.02263986, + 0.014910133, + -0.02024639, + -0.015001686, + 0.00115341, + -0.0036850262, + -0.011025651, + -0.0018212596, + -0.01607417, + 0.0069711413, + -0.035732005, + 0.010541726, + 0.0032730359, + 0.014230021, + 0.0020223502, + -0.0090637915, + 0.021266557, + 0.011542274, + -0.008004387, + -0.014779342, + 0.014975528, + 0.018807694, + -0.012745548, + 0.018075267, + -0.0004217998, + -0.0018572271, + -0.011548813, + 0.0101951305, + 0.012085055, + -0.013458357, + 0.008677959, + -0.0100578, + -0.024000082, + -0.0058365325, + -0.01675428, + 0.031128172, + -0.0050550583, + -0.0127063105, + -0.020298708, + -0.00038276697, + 0.01704202, + -0.029506369, + -0.016231118, + 0.046927683, + -0.017277444, + -0.030029532, + -0.0043520587, + -0.16908614, + 0.027884565, + 0.020848028, + -0.021148847, + 0.019357014, + 0.012948274, + -0.0101951305, + -0.019644754, + -0.0063793133, + 0.023372287, + 0.053101, + 0.018611507, + -0.007952071, + -0.014190785, + 0.0032615915, + -0.019082354, + 0.00040769894, + -0.006382583, + 0.025674203, + 0.01229432, + 0.044364184, + -0.02976795, + 0.002838157, + 0.0011722111, + -0.0028659499, + 0.026053496, + -0.014556998, + 0.009881233, + 0.023136863, + -0.015917221, + -0.02390853, + -0.017447472, + 0.037223015, + 0.0265505, + 0.009979326, + 0.008887224, + 0.00011883556, + -0.01760442, + -0.019880177, + 0.027989198, + 0.006464327, + 0.013916125, + -0.0006760241, + -0.0034496032, + 0.008128638, + 0.027282927, + 0.0042703142, + -0.0068272715, + -0.016244197, + -0.011287232, + 0.031651337, + -0.015694877, + -0.007154248, + 0.018650746, + 0.0056959325, + -0.0024425152, + 0.0062289042, + 0.0106202, + 0.004165682, + -0.012653994, + -0.032906923, + 0.0010160798, + 0.019016959, + -0.0011010937, + -0.012183148, + -0.0034430637, + -0.007873597, + -0.0070757736, + -0.017172812, + 0.020586446, + 0.0003275897, + -0.011915027, + 0.017578263, + -0.03295924, + 0.015446375, + 0.00017779352, + -0.0087041175, + 0.025556492, + 0.011686143, + 0.0088414475, + -0.022208251, + 0.042951647, + -0.014190785, + -0.013680701, + -0.0022872014, + 0.010999493, + -0.0076774107, + -0.0022103619, + -0.03175597, + -0.01956628, + 0.007363513, + -0.018467639, + -0.007814741, + -0.011673065, + 0.000020998028, + 0.008854526, + -0.007952071, + 0.02934942, + -0.021972828, + 0.003253417, + 0.006735718, + -0.008697578, + -0.010077419, + 0.033796303, + 0.024784826, + 0.025922704, + 0.019827861, + 0.019278541, + 0.01104527, + 0.011012572, + -0.029297104, + -0.005084486, + 0.012915576, + 0.028747782, + -0.032906923, + 0.002151506, + 0.01940933, + -0.0082921265, + 0.018323768, + 0.01257552, + 0.044808872, + -0.0100839585, + 0.002180934, + 0.025648044, + -0.016374988, + -0.023660026, + -0.07219643, + -0.000642509, + 0.0045318957, + 0.018546114, + -0.004384756, + 0.042402327, + 0.0056501557, + 0.01691123, + 0.00377331, + 0.013432199, + -0.0024212617, + -0.017238207, + 0.0048523326, + -0.016322672, + 0.028041514, + -0.00335478, + 0.0059313555, + -0.002205457, + -0.0023362478, + 0.023960846, + -0.018389164, + -0.016414225, + 0.0028446964, + -0.008965698, + -0.014844738, + 0.008847987, + -0.026785923, + 0.011398404, + 0.01508016, + 0.007853978, + -0.003701375, + -0.0012931925, + 0.0024555943, + -0.029140154, + -0.02109653, + 0.024536325, + -0.019618597, + 0.013183696, + 0.033299297, + -0.045096613, + -0.010783688, + 0.0100839585, + 0.003004915, + -0.011071428, + -0.013615306, + -0.0029575033, + -0.028538518, + 0.005421272, + 0.0048163654, + -0.018768458, + -0.0122354645, + -0.0019226224, + -0.00081049325, + 0.0025455127, + 0.014779342, + -0.0028005545, + 0.0037536914, + 0.01565564, + -0.030003373, + 0.0070823133, + 0.010594042, + -0.0046201795, + -0.018768458, + 0.026458947, + 0.01551177, + 0.008762973, + -0.019200066, + -0.026668211, + 0.025765756, + -0.022992995, + -0.021384269, + 0.013098682, + -0.016871992, + 0.00684689, + -0.018506875, + -0.014046915, + -0.0028561407, + -0.003212545, + 0.014897054, + -0.02362079, + -0.011346088, + -0.030526536, + -0.0023934687, + 0.007376592, + -0.0024931966, + 0.014910133, + 0.012058897, + -0.0058071045, + 0.013301408, + -0.01916083, + 0.014883975, + 0.009403847, + 0.0030997382, + -0.0159303, + -0.007572778, + 0.026432788, + 0.0051662303, + -0.009698126, + 0.005143342, + 0.018977722, + -0.015524849, + -0.024078557, + -0.09129187, + 0.027910722, + 0.007520462, + -0.008409838, + 0.016545016, + -0.006807653, + 0.022312883, + 0.0057907556, + 0.01732976, + -0.018088346, + -0.04852333, + 0.00049904804, + -0.00922728, + -0.011411483, + -0.033796303, + -0.025543412, + 0.014203863, + 0.016466541, + 0.0056926627, + 0.011588051, + 0.0013250727, + 0.0027318895, + 0.016453462, + 0.010587502, + -0.027466035, + 0.011431102, + -0.006189667, + 0.023764659, + -0.031808283, + -0.013013668, + 0.022129776, + -0.031494386, + -0.0011166251, + 0.01857227, + -0.0063368063, + -0.0127063105, + 0.005473588, + 0.01354991, + 0.0070169177, + 0.0405451, + -0.019749386, + -0.005002742, + 0.009070331, + -0.010796768, + 0.0069515225, + -0.0056795836, + 0.017525947, + 0.000104734696, + 0.016832756, + 0.022129776, + -0.009815837, + 0.038949452, + -0.0104436325, + -0.003032708, + -0.0049733142, + -0.016139565, + 0.0040904772, + 0.0019651293, + -0.0077493456, + -0.008782592, + 0.023450762, + 0.0040479703, + 0.011803855, + 0.01047633, + 0.021959748, + -0.0068141925, + -0.02025947, + 0.007167327, + 0.008115559, + -0.03452873, + -0.026079653, + 0.010234368, + 0.016701965, + 0.014687789, + 0.00076512527, + -0.0061536995, + 0.014386971, + -0.008220192, + -0.034345623, + 0.01914775, + 0.004708463, + 0.0035411566, + -0.05367648, + 0.004093747, + 0.014713947, + -0.01789216, + -0.0079324525, + -0.010744452, + -0.01732976, + 0.0265505, + -0.00036396584, + -0.005503016, + 0.00740275, + 0.004404375, + 0.004021812, + 0.012902496, + -0.006245253, + -0.026066575, + 0.030866591, + 0.02403932, + 0.0088414475, + -0.016191881, + -0.012183148, + -0.0079324525, + -0.020730317, + -0.0019749387, + -0.019030038, + -0.02151506, + 0.018363006, + 0.025281832, + 0.015459454, + 0.02097882, + -0.0052054673, + 0.011097586, + -0.0037536914, + -0.002738429, + -0.013746097, + -0.028538518, + -0.011012572, + 0.013562989, + 0.024130873, + 0.029218629, + 0.01620496, + -0.013876887, + 0.010672516, + -0.005198928, + 0.009998945, + -0.027753774, + 0.0010896495, + -0.0051368023, + 0.011496497, + 0.009279596, + -0.010999493, + 0.0015384249, + -0.0023362478, + 0.012497046, + 0.0037406124, + 0.019030038, + -0.0026109081, + 0.024300901, + 0.0005570864, + 0.0034921102, + -0.0027155406, + 0.004355328, + 0.025674203, + -0.006820732, + 0.0254257, + -0.029846424, + -0.022718335, + -0.00642836, + -0.0077885827, + -0.002543878, + -0.00188502, + -0.023777738, + -0.007598936, + -0.020782633, + 0.019631675, + -0.004361868, + 0.014570077, + 0.03983883, + -0.0085929455, + 0.026485104, + 0.023843134, + -0.014831658, + 0.00089101127, + 0.014844738, + 0.015106319, + 0.007716648, + -0.01634883, + 0.01872922, + -0.0015220761, + -0.022535227, + -0.01341912, + 0.0077755037, + -0.013641464, + -0.021410428, + 0.0014215307, + 0.0059444346, + 0.008468694, + 0.002136792, + 0.014190785, + -0.021292716, + -0.026890555, + 0.009796219, + -0.004149333, + -0.011476879, + -0.0071869455, + -0.017643657 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.0026680413, + -0.0026349186, + 0.008843787, + -0.0049684197, + -0.033255287, + 0.01970144, + -0.02827362, + 0.0020668625, + -0.012116319, + -0.035746124, + 0.00008668857, + -0.0036931918, + 0.016720388, + -0.018151293, + -0.036779553, + -0.024100147, + 0.012487294, + -0.023715923, + 0.009870593, + -0.023212455, + 0.0044020195, + 0.0038091217, + -0.010128952, + -0.015819447, + -0.011096137, + 0.008585429, + 0.0054586367, + -0.017488837, + 0.006253584, + -0.018800499, + 0.020045916, + 0.0018300345, + -0.00961886, + 0.0020685187, + 0.003918427, + -0.00977785, + -0.0061608404, + -0.0112153785, + -0.0011576418, + 0.00024324554, + 0.001564224, + 0.0026713535, + -0.0020635503, + -0.01999292, + -0.0040476057, + 0.013348487, + 0.003825683, + -0.0020536133, + -0.01968819, + 0.028538601, + 0.0107715335, + 0.020655377, + -0.008201204, + -0.005057851, + -0.021092597, + 0.014905258, + -0.020483138, + 0.005163844, + -0.012467421, + -0.006396012, + 0.007333387, + 0.0032874376, + -0.023980904, + 0.011573105, + 0.0063893874, + -0.017038366, + -0.016786633, + 0.011261751, + -0.021145593, + -0.0028286867, + 0.019012485, + 0.0014847293, + -0.020112162, + -0.014229554, + 0.036938544, + 0.013474354, + -0.014706521, + -0.0053957035, + -0.0013091785, + 0.0020171783, + 0.022364512, + -0.023119712, + 0.0028253745, + -0.004888925, + 0.03428872, + 0.0007568559, + -0.010976895, + 0.018230787, + 0.0062204613, + -0.019197972, + 0.024762603, + 0.019423207, + 0.009532741, + -0.004322525, + -0.016495153, + -0.026643978, + -0.0054188897, + 0.01938346, + 0.012898017, + -0.029678026, + -0.018959489, + 0.02571654, + 0.001242933, + -0.01968819, + -0.019303966, + -0.00054611213, + -0.002073487, + -0.020098913, + -0.0015857539, + 0.0011071295, + 0.007823604, + 0.020509636, + -0.0027690658, + -0.05079712, + -0.015845945, + -0.010890775, + 0.005670623, + -0.0001018526, + -0.026723472, + -0.022470506, + 0.011374368, + 0.023543684, + 0.004216532, + -0.0033785251, + 0.028035134, + 0.0016669048, + -0.005034665, + -0.011619477, + -0.0076447413, + -0.001836659, + 0.006134342, + 0.01217594, + 0.027293185, + 0.0031350728, + -0.024020651, + 0.012003701, + -0.013938073, + 0.0210396, + -0.026259754, + -0.01909198, + 0.007260517, + 0.01926422, + -0.00810846, + -0.00009802278, + 0.016362661, + 0.024325382, + 0.03439471, + 0.023517186, + 0.0013373329, + 0.000698477, + -0.007638117, + -0.0040608547, + 0.014335547, + -0.002936336, + -0.0014648556, + 0.0055944403, + 0.015103995, + 0.004206595, + -0.012527042, + 0.025358813, + -0.004832616, + 0.005283086, + 0.030790951, + -0.027902644, + 0.016349413, + 0.01457403, + 0.016813131, + 0.005978665, + -0.0018234099, + -0.022814982, + -0.018866746, + 0.017793566, + -0.027160693, + 0.010619168, + -0.010692039, + 0.01233493, + 0.027213689, + 0.007836854, + -0.026948707, + -0.01909198, + -0.009645359, + 0.0157797, + 0.02045664, + 0.011705596, + 0.01923772, + 0.0017356345, + 0.020006169, + 0.016932374, + 0.021596063, + -0.009711604, + 0.015090746, + 0.046583902, + 0.005081037, + -0.0046703145, + -0.67114735, + -0.04674289, + -0.011785091, + 0.018204289, + 0.023331698, + 0.024444625, + 0.023291951, + -0.006409261, + -0.020072415, + 0.012228937, + -0.02314621, + 0.024550617, + -0.028247122, + -0.0026581045, + 0.0068895416, + -0.016627643, + 0.0049087983, + -0.025001086, + 0.02253675, + 0.01759483, + -0.0065285033, + 0.010764909, + -0.007187647, + 0.0074791275, + 0.039296884, + -0.011314747, + -0.007532124, + -0.008459562, + -0.008664924, + 0.036011104, + -0.040038835, + 0.04030382, + 0.0029048692, + -0.002283817, + 0.056017272, + -0.0071942713, + -0.005922356, + 0.028538601, + 0.023358196, + 0.048544772, + 0.0044682655, + -0.015753202, + 0.0071942713, + 0.0063893874, + 0.0056805597, + -0.0021413888, + 0.030737955, + -0.04239718, + 0.0058263, + -0.022059783, + 0.013328614, + -0.0066113104, + -0.021079348, + -0.00080488395, + 0.00025173326, + 0.013885076, + 0.009420123, + -0.006574875, + -0.011751968, + -0.006184026, + -0.020032667, + -0.0040177954, + -0.030631963, + -0.024736105, + -0.011314747, + 0.020628877, + -0.019515952, + -0.006442384, + -0.00007613068, + -0.0038389321, + -0.0058428613, + 0.022351263, + 0.0051174723, + -0.0035607007, + 0.034050234, + 0.027452175, + 0.0285651, + -0.017011868, + -0.0056772474, + -0.003221192, + 0.010705288, + 0.019356962, + 0.0058196755, + -0.010665541, + 0.019462956, + -0.022642743, + -0.0330698, + -0.0065814997, + 0.006005163, + -0.017846562, + 0.020642126, + 0.0068630436, + -0.0076646153, + 0.0013820487, + -0.0013174593, + 0.03094994, + -0.0033851499, + 0.0034878305, + 0.03847544, + -0.0048690513, + -0.019476205, + -0.006313205, + -0.0025073958, + -0.012427674, + -0.004892237, + -0.023676176, + -0.0035010795, + 0.005919044, + 0.015925441, + -0.014004318, + 0.021543067, + 0.0009845751, + -0.02074812, + -0.009327379, + 0.0072075203, + -0.027929142, + 0.019052232, + -0.0060217245, + 0.03895241, + -0.017846562, + 0.0018499081, + -0.0044583282, + 0.03243384, + 0.011539983, + 0.007863352, + 0.024245888, + 0.007724236, + -0.012990761, + -0.007287015, + -0.0064854436, + -0.01849577, + 0.01850902, + 0.003128448, + -0.011944081, + 0.01909198, + 0.011639351, + -0.010115702, + 0.0068895416, + 0.0023301886, + -0.028671093, + -0.026524736, + -0.020549383, + -0.0056639984, + 0.010393933, + 0.0025587361, + -0.012984136, + -0.0021182029, + -0.010506551, + -0.012566789, + 0.028618095, + -0.0010731786, + -0.016296417, + -0.03145341, + 0.021715306, + -0.02510708, + -0.028220622, + -0.0107715335, + -0.014295799, + -0.005875984, + 0.018389776, + 0.008313822, + 0.006690805, + -0.018654758, + 0.018588513, + 0.016468655, + -0.024378378, + 0.003766062, + -0.0077308607, + -0.0026796341, + -0.02525282, + -0.01864151, + -0.00969173, + -0.012209062, + -0.0038157462, + 0.022642743, + -0.0051174723, + 0.011169007, + 0.0025421747, + 0.0051505947, + 0.0003231543, + 0.008221078, + -0.030843949, + -0.011937456, + 0.015117245, + 0.031479906, + -0.010095828, + 0.012646284, + 0.026378995, + -0.021278085, + 0.0107847825, + -0.012725779, + 0.022073032, + 0.0032857815, + 0.0023401256, + 0.016468655, + -0.03198337, + 0.0032973744, + 0.013911574, + 0.002522301, + 0.018866746, + 0.024921592, + -0.0016834661, + 0.0042695287, + -0.013818831, + 0.022218771, + -0.012189189, + -0.004368897, + -0.012944389, + 0.02660423, + 0.012507168, + 0.009519491, + -0.012884768, + -0.02674997, + 0.0050975983, + 0.00072000676, + 0.026167009, + -0.012401175, + 0.016945623, + -0.001420968, + 0.0029711148, + 0.021649059, + -0.00916839, + 0.012056698, + -0.033599764, + -0.008936531, + 0.004491451, + 0.027584665, + 0.03656757, + 0.016667392, + -0.010307814, + -0.03622309, + -0.009433373, + -0.005498384, + 0.0051108473, + -0.00234675, + -0.015686957, + 0.0079494715, + -0.02058913, + 0.041708227, + 0.024431374, + 0.033043303, + 0.0039846725, + 0.033043303, + -0.018893244, + -0.0012893048, + 0.016587896, + 0.0360376, + 0.009651983, + -0.005452012, + 0.0044583282, + -0.025067333, + 0.001219747, + -0.016402408, + 0.0009696699, + -0.00857218, + -0.030287486, + 0.0003328841, + 0.0038588059, + 0.019476205, + 0.022642743, + 0.012520417, + 0.011891084, + 0.000675291, + 0.0030506095, + 0.015488219, + -0.007684489, + 0.014534283, + 0.001232168, + 0.011526734, + -0.0042629037, + -0.01142074, + 0.003941613, + -0.0026200132, + -0.014097062, + -0.0057699913, + -0.0008044699, + 0.013222621, + -0.012997385, + 0.0055480683, + 0.0066113104, + -0.021728555, + -0.037786487, + 0.004984981, + -0.005044602, + -0.0042099073, + -0.01623017, + -0.025809282, + 0.014865511, + -0.01503775, + 0.03428872, + 0.01697212, + 0.017409341, + 0.0009547646, + -0.02224527, + -0.011983828, + 0.0074195066, + 0.027425675, + -0.005498384, + -0.01457403, + -0.009307506, + 0.010254818, + -0.019436456, + 0.0064821313, + 0.010148825, + 0.018310282, + -0.003138385, + 0.005495072, + -0.0072472678, + -0.00424303, + -0.0048624263, + 0.014680023, + -0.003138385, + 0.00909552, + 0.002237445, + 0.0062038996, + -0.002726006, + -0.015647208, + -0.015289483, + 0.027293185, + -0.010599295, + -0.019621944, + -0.0051207845, + -0.020615628, + -0.0069491626, + 0.086331256, + -0.011765217, + 0.017846562, + 0.005991914, + 0.0093605025, + -0.0071015274, + -0.01742259, + -0.0047001247, + 0.0070087835, + 0.0079627205, + 0.0017372906, + -0.016481904, + 0.018601762, + 0.012725779, + 0.015859194, + -0.01986043, + -0.031347416, + -0.023821915, + 0.030711457, + -0.025491305, + -0.018760752, + 0.0019045608, + 0.0047796196, + 0.0050412896, + 0.005591128, + 0.005746805, + 0.0065947487, + 0.020469889, + 0.03712403, + -0.014415041, + 0.0054321387, + 0.010817905, + -0.010407182, + -0.00043887706, + -0.0044351425, + -0.008989527, + 0.017515335, + 0.003660069, + -0.006849794, + -0.017064866, + 0.016071182, + 0.0088504115, + 0.007379759, + -0.029121563, + 0.010075955, + -0.0056639984, + 0.0073863836, + 0.010281316, + -0.014746269, + -0.0180188, + 0.030658461, + -0.001954245, + -0.028061634, + -0.025411809, + -0.01746234, + 0.01670714, + -0.014600528, + 0.008565555, + 0.0053923912, + 0.011222003, + 0.011758593, + -0.021172091, + 0.0116724735, + -0.023093214, + -0.026034517, + -0.023093214, + -0.0022655993, + -0.021013102, + -0.036620565, + -0.0058362368, + 0.008631801, + 0.001326568, + -0.013116627, + 0.009837471, + 0.012606536, + -0.008201204, + 0.016998619, + -0.016998619, + 0.008671548, + 0.029810516, + -0.010195197, + -0.010148825, + -0.017170858, + -0.018005552, + -0.0058561102, + 0.008002467, + 0.020801116, + -0.037389014, + 0.00015919644, + -0.0018581889, + 0.041072268, + -0.005018104, + 0.0041635353, + -0.0003494455, + 0.003424897, + -0.027531669, + 0.012162691, + 0.014216304, + -0.011937456, + -0.009506242, + 0.017382843, + -0.013792332, + 0.016919125, + 0.012864894, + 0.006571563, + 0.012096445, + 0.018985987, + 0.01835003, + 0.01307688, + 0.013050382, + 0.024259137, + -0.032062866, + -0.017926058, + 0.02451087, + -0.031903878, + 0.02930705, + 0.007929597, + 0.023424441, + -0.008115085, + -0.0108974, + 0.0046636895, + -0.031055935, + 0.020827614, + 0.029837016, + 0.003941613, + 0.017528584, + -0.008042215, + -0.015978437, + 0.0018697819, + 0.002027115, + -0.016773384, + 0.0072340188, + -0.0016876064, + -0.0089034075, + -0.035004172, + -0.000004062718, + -0.0069822855, + 0.008585429, + 0.0079494715, + -0.031850882, + -0.012407799, + -0.00698891, + 0.008505934, + -0.010486677, + -0.022920975, + -0.023490688, + -0.009744727, + 0.02343769, + -0.0011692347, + 0.013646592, + 0.013911574, + 0.020072415, + -0.009088895, + -0.004415269, + -0.017833313, + -0.030049002, + -0.024457874, + -0.014256052, + 0.010042832, + 0.028432608, + 0.018972738, + -0.009685106, + 0.016680641, + -0.0021463572, + -0.0009199857, + 0.0027193816, + -0.0058693597, + 0.024643362, + -0.0059057944, + 0.007412882, + 0.019356962, + 0.0300755, + -0.022682492, + 0.0061608404, + -0.027041452, + 0.01015545, + 0.0006504489, + 0.0066874926, + 0.0018118169, + -0.034209225, + -0.0045113247, + -0.0057534296, + -0.013739336, + -0.0035607007, + -0.003660069, + -0.007406257, + -0.0040939776, + -0.01939671, + 0.016415657, + -0.0022407572, + 0.00096470147, + -0.014401792, + 0.004166848, + -0.00033681744, + 0.010102453, + -0.013633343, + -0.008598678, + -0.0034911428, + 0.009042524, + 0.019423207, + 0.03145341, + -0.010480053, + 0.009724853, + -0.00043887706, + 0.0203109, + 0.015554465, + 0.011467112, + -0.01179834, + 0.018469272, + -0.029731022, + -0.01518349, + -0.017369594, + 0.0054884474, + -0.020337397, + -0.027478673, + 0.02615376, + -0.009512867, + 0.015660457, + -0.026617479, + -0.011149134, + 0.018774, + -0.0064688823, + 0.024471123, + -0.0063761384, + 0.028777085, + 0.016468655, + -0.011175632, + 0.006386075, + -0.007273766, + -0.027584665, + -0.014865511, + 0.020403642, + -0.004382146, + -0.0050081667, + -0.033043303, + 0.0015203364, + 0.021927292, + -0.002500771, + -0.020814365, + 0.027902644, + 0.00037387357, + -0.004832616, + -0.003481206, + 0.009320755, + -0.008704671, + 0.00835357, + -0.007452629, + -0.00894978, + -0.008254201, + -0.012507168, + -0.009665232, + 0.016905876, + -0.020403642, + 0.0093605025, + 0.016243419, + -0.021437073, + -0.0026316063, + -0.008989527, + -0.013275617, + 0.015382227, + -0.004408644, + 0.03818396, + 0.0028568413, + 0.0049352967, + 0.014666774, + 0.015249736, + -0.0066113104, + -0.002866778, + 0.003931676, + 0.021423824, + -0.013951322, + -0.013924824, + 0.017356345, + -0.014083813, + 0.00034385602, + -0.0045179497, + 0.006323142, + -0.0145077845, + -0.036620565, + -0.006551689, + 0.0135405995, + 0.014812514, + 0.003448083, + -0.014309048, + -0.016852878, + -0.029890012, + -0.018813748, + 0.00023827712, + 0.0032973744, + -0.022497004, + -0.013487603, + 0.002191073, + -0.012407799, + 0.013898325, + -0.015236487, + -0.013964571, + 0.012732403, + 0.0076182433, + -0.01759483, + 0.01894624, + 0.0066510574, + 0.01788631, + -0.022497004, + -0.0078037307, + -0.0038323076, + -0.007154524, + 0.016495153, + 0.00008156489, + -0.024444625, + -0.009029275, + 0.011334621, + 0.02194054, + -0.002485866, + 0.013229245, + 0.03296381, + -0.0247891, + -0.0029893324, + -0.019277468, + -0.022033283, + 0.0026481675, + 0.008512558, + 0.018204289, + 0.001989024, + -0.020337397, + 0.0026912272, + 0.023782168, + -0.035984606, + 0.0012172628, + -0.013169624, + -0.027425675, + 0.005296335, + 0.0136068445, + -0.020695124, + -0.013182873, + -0.02163581, + -0.010029583, + -0.0130835045, + 0.009552615, + 0.0048061176, + -0.0020105538, + 0.005968728, + 0.010837779, + -0.014057315, + 0.028697591, + -0.0070286575, + -0.014017567, + 0.008399941, + -0.008187955, + -0.027041452, + -0.008247577, + -0.0010913962, + 0.04088678, + -0.0012214031, + -0.025173325, + -0.025968272, + 0.0070750294, + -0.0391114, + -0.010652292, + -0.013355112, + 0.017753819, + 0.00326922, + -0.0021463572, + 0.0041039144, + 0.018734254, + 0.0021331082, + 0.02538531, + 0.0032377534, + 0.001243761, + 0.026484989, + -0.01862826, + 0.026935458, + 0.010890775, + -0.023119712, + 0.0069822855, + 0.0165349, + 0.004905486, + 0.00336362, + 0.016110929, + -0.0030506095, + -0.008426439, + 0.01015545, + -0.009857344, + -0.012434298, + -0.0010922243, + 0.01224881, + -0.047140364, + 0.016574647, + 0.0038521811, + -0.013129877, + 0.01774057, + -0.007154524, + 0.005316209, + -0.0037726865, + 0.006882917, + -0.010996768, + -0.0088636605, + -0.0121428175, + -0.011334621, + 0.01697212, + 0.0015948627, + -0.021331081, + 0.021238336, + 0.01637591, + -0.0038223707, + -0.016905876, + 0.0069822855, + -0.0031317605, + 0.008075338, + 0.0016768415, + -0.018323531, + -0.010321063, + -0.014004318, + 0.004971732, + -0.032142363, + -0.0030737955, + 0.009380376, + -0.016309666, + -0.019515952, + 0.018548766, + 0.025981521, + -0.013885076, + -0.0038687426, + 0.0026117326, + -0.007684489, + 0.016998619, + -0.024219388, + 0.006256896, + -0.029439542, + 0.0029810518, + 0.0026730096, + -0.00819458, + -0.027266687, + 0.010427057, + 0.0020238028, + -0.020178407, + -0.008711295, + 0.23572832, + -0.0058594225, + -0.0018267222, + 0.022351263, + -0.001126175, + 0.023623178, + 0.025663543, + -0.008234328, + -0.008081962, + 0.008022341, + 0.00052292616, + -0.005339395, + 0.010062706, + -0.0154352235, + -0.0070617804, + -0.03216886, + -0.016733637, + -0.02178155, + -0.036620565, + 0.016004935, + 0.020946857, + -0.014945006, + -0.011937456, + -0.006382763, + 0.022894477, + 0.002653136, + -0.011447239, + 0.013494227, + 0.01605793, + 0.023490688, + -0.005852798, + 0.0043258374, + -0.0037230023, + 0.009757976, + 0.000064278924, + 0.008181331, + -0.00014149645, + 0.0024924905, + 0.027452175, + 0.03219536, + -0.007929597, + -0.015196739, + -0.0165349, + -0.004312588, + -0.010115702, + 0.016124178, + 0.0040177954, + -0.006299956, + -0.015395476, + 0.01922447, + -0.03407673, + -0.026855964, + 0.03023449, + 0.022126028, + 0.017170858, + -0.006445696, + 0.023252204, + -0.0023070027, + -0.00518703, + -0.016428906, + -0.011513484, + 0.02255, + -0.01788631, + 0.025133578, + -0.02044339, + 0.017091364, + -0.009281008, + -0.0157797, + 0.011838088, + -0.0041072266, + 0.015209988, + -0.0021331082, + -0.0002641543, + -0.01367309, + -0.026869213, + -0.025001086, + 0.032831315, + 0.008969653, + 0.015991686, + 0.026617479, + -0.030446475, + 0.016919125, + 0.01862826, + -0.008525807, + -0.003742876, + -0.03110893, + 0.0054884474, + 0.0054553244, + 0.009479744, + -0.0013795645, + 0.0008218594, + -0.02706795, + -0.016587896, + -0.028300118, + 0.006111156, + 0.0015799574, + -0.007856728, + 0.006170777, + -0.010572797, + 0.016322915, + -0.004888925, + 0.006929289, + 0.010612544, + -0.000272642, + 0.003471269, + -0.008963029, + -0.0144812865, + 0.0068299207, + -0.016733637, + -0.020204905, + -0.006326454, + -0.01894624, + 0.014083813, + -0.00036186655, + -0.0012487294, + 0.01789956, + 0.008307197, + 0.006326454, + 0.014242803, + -0.026683725, + 0.009486369, + -0.028141128, + -0.011910957, + 0.0108974, + -0.0032129113, + -0.0054453877, + -0.019330464, + -0.0012594943, + -0.0006641121, + -0.0315859, + 0.013964571, + 0.0011270031, + 0.02194054, + -0.004193346, + 0.0074923765, + 0.0029247429, + -0.009221386, + -0.010837779, + -0.020814365, + 0.0058826087, + 0.023861663, + -0.0103144385, + 0.015011251, + 0.0130967535, + -0.021410575, + -0.026710223, + 0.021529818, + 0.0068166717, + -0.024444625, + -0.002995957, + -0.017674325, + -0.024550617, + -0.016640892, + -0.014110311, + 0.021728555, + -0.0032410657, + -0.015156992, + -0.0024428063, + -0.0064125736, + 0.022523502, + -0.039482374, + -0.013414732, + 0.028538601, + -0.027478673, + -0.020536134, + -0.012262059, + -0.17170858, + 0.018204289, + 0.033546768, + -0.020496387, + 0.025146827, + 0.0210661, + 0.010380684, + -0.011301498, + -0.022046532, + -0.00048400686, + 0.035110164, + -0.0033470585, + -0.03667356, + -0.017475588, + -0.006634496, + -0.008088587, + -0.02162256, + 0.0055050086, + 0.015050999, + 0.00061028753, + 0.026087515, + -0.026670476, + 0.01609768, + -0.0046206303, + -0.021331081, + 0.023106463, + -0.015408725, + 0.003706441, + 0.0016627643, + -0.003411648, + -0.005587816, + -0.017912809, + 0.014521034, + 0.020827614, + -0.0021297957, + 0.014229554, + -0.008134959, + -0.008081962, + -0.018363278, + 0.0072936397, + -0.01593869, + 0.004859114, + 0.015488219, + -0.01262641, + -0.0017240415, + 0.0144680375, + 0.008671548, + -0.0055348193, + -0.0010516488, + -0.042768154, + 0.008896783, + -0.017541833, + 0.0036865673, + 0.022430757, + 0.0015004626, + 0.017237103, + -0.0053658932, + 0.016905876, + 0.023689425, + -0.0017372906, + -0.03142691, + -0.005011479, + 0.015806198, + -0.0093340045, + -0.0130437575, + -0.007412882, + -0.013368361, + -0.0027972201, + -0.02959853, + 0.007333387, + 0.007903099, + -0.016561398, + 0.009857344, + -0.040674794, + 0.014640276, + -0.0103011895, + 0.006492068, + 0.022470506, + 0.012401175, + -0.018151293, + -0.03216886, + 0.029360047, + -0.01970144, + -0.005061163, + -0.0056308755, + 0.045311987, + 0.010009709, + -0.00073035766, + -0.031347416, + -0.0028121255, + 0.015329231, + -0.014269301, + -0.009393625, + -0.013321989, + -0.005554693, + 0.012845021, + -0.011539983, + 0.031320915, + -0.0016486872, + 0.01233493, + -0.0008334524, + -0.008062089, + -0.01819104, + 0.013633343, + 0.024736105, + 0.018972738, + 0.019873679, + 0.014547532, + 0.024563866, + -0.0035441392, + -0.023623178, + -0.011374368, + 0.0144812865, + 0.015315982, + -0.00095145236, + 0.011977203, + 0.0233052, + -0.009439997, + 0.024524119, + 0.007903099, + 0.048465274, + -0.012527042, + -0.004772995, + 0.016760135, + -0.0017025118, + -0.028194124, + -0.05591128, + 0.010440306, + 0.012765526, + -0.013845329, + 0.0011990452, + 0.03852844, + 0.02195379, + 0.035136662, + -0.0041734725, + 0.013335238, + -0.0077639837, + -0.0037329393, + 0.0030953253, + -0.011380993, + 0.036726557, + -0.01608443, + 0.0054288264, + 0.0030853886, + -0.024391627, + 0.004951858, + -0.005389079, + -0.02239101, + -0.01669389, + -0.008433064, + -0.020006169, + 0.015739953, + -0.03094994, + 0.026710223, + 0.01730335, + 0.0052897106, + 0.0103144385, + 0.00045999285, + -0.0017356345, + -0.020377144, + 0.00003317455, + 0.014322298, + -0.02391466, + -0.0026034517, + 0.03410323, + -0.023397943, + -0.0036302586, + -0.009400249, + 0.01323587, + -0.011851337, + -0.009274383, + -0.009890467, + -0.01608443, + 0.009413498, + 0.022814982, + -0.017714072, + -0.024285635, + 0.008274075, + -0.0053460193, + -0.008929906, + 0.030737955, + -0.025650294, + -0.0004691016, + 0.009016025, + -0.052122034, + 0.02150332, + -0.008843787, + 0.002003929, + -0.007823604, + 0.025425058, + 0.032672327, + -0.0042595915, + -0.017078115, + -0.043086134, + 0.01997967, + -0.0039681112, + -0.009453246, + 0.031294417, + -0.006150903, + 0.0054321387, + -0.010208446, + -0.017555082, + -0.037177026, + -0.013169624, + 0.0023898098, + -0.016163925, + -0.004739872, + -0.02358343, + -0.0135538485, + 0.013315364, + -0.016269919, + 0.028750587, + -0.0063463277, + -0.006710679, + 0.016508402, + -0.01143399, + 0.0063562645, + 0.028856581, + 0.030472973, + -0.01059267, + -0.010195197, + 0.016839629, + 0.021158842, + 0.010566172, + -0.00064258225, + 0.017621327, + -0.007406257, + -0.027293185, + -0.08818613, + 0.026034517, + 0.017117862, + -0.01850902, + 0.012440923, + -0.009989835, + 0.023941157, + -0.0027773464, + 0.026405493, + -0.005173781, + -0.042900644, + 0.020986604, + -0.022510253, + -0.015064248, + -0.031506404, + -0.016654141, + 0.031506404, + 0.016627643, + 0.008346945, + 0.016150676, + 0.017992303, + -0.012434298, + 0.028538601, + 0.0028634658, + -0.018548766, + 0.011440614, + -0.04642491, + 0.039906345, + -0.0036799428, + -0.002321908, + 0.012560165, + -0.031029437, + 0.0036136971, + 0.013752585, + -0.0037826234, + 0.01081128, + -0.010393933, + -0.012646284, + 0.001006105, + 0.044861514, + -0.032990307, + 0.0028982447, + 0.0064721946, + -0.00492536, + -0.0026829466, + -0.0062668333, + 0.019515952, + 0.00480943, + 0.0070087835, + 0.0145077845, + -0.017661076, + 0.01983393, + -0.0046239425, + -0.015302732, + -0.0032394095, + -0.043987073, + 0.028247122, + -0.004915423, + 0.00058130507, + -0.0029181184, + 0.014521034, + 0.016269919, + 0.020231403, + 0.0050247284, + 0.0016735293, + -0.008724544, + -0.009188264, + -0.0046206303, + 0.016163925, + -0.026392244, + -0.037309516, + 0.012401175, + -0.004537823, + 0.037230022, + -0.0021397327, + -0.023543684, + -0.0052599, + 0.0043755216, + -0.021755053, + 0.014587279, + -0.00061898225, + 0.009002776, + -0.04014483, + 0.012189189, + 0.009797723, + -0.013726087, + -0.00473656, + -0.005352644, + -0.0077109872, + 0.020072415, + -0.02538531, + 0.012712529, + 0.01805855, + 0.0011245189, + 0.00097546633, + 0.01833678, + -0.0023335011, + -0.027982138, + 0.022377761, + 0.023106463, + 0.02314621, + -0.011520108, + 0.002545487, + -0.014640276, + -0.0075387484, + 0.012613161, + -0.022920975, + 0.009877218, + 0.009651983, + 0.009088895, + 0.02255, + 0.0034282093, + 0.0011924207, + 0.020655377, + 0.026061017, + -0.008512558, + -0.017647825, + -0.024881845, + -0.017064866, + 0.008797415, + 0.020377144, + 0.0144415395, + 0.013739336, + 0.0011468768, + 0.017184107, + -0.016481904, + 0.005425514, + -0.018866746, + -0.0009936839, + -0.008009092, + 0.0039482373, + 0.001657796, + -0.009380376, + -0.0073068887, + -0.025226321, + 0.0070551555, + 0.012315055, + 0.006303268, + 0.008333696, + 0.049366217, + 0.0051572192, + 0.009969962, + 0.019025734, + 0.008068713, + 0.0105198, + 0.008028965, + -0.00046123494, + -0.034050234, + -0.02420614, + 0.009022649, + -0.014534283, + 0.0055845035, + -0.010102453, + -0.018615011, + -0.026551234, + -0.0011063014, + 0.009221386, + -0.00037242443, + 0.008101836, + 0.037044536, + -0.0073400117, + 0.023225704, + 0.014256052, + -0.0008479436, + 0.007896475, + 0.0300755, + -0.0018300345, + -0.0004927016, + -0.019476205, + 0.0144547885, + 0.007393008, + -0.028512103, + -0.02225852, + -0.018707756, + -0.0028319992, + -0.016998619, + 0.01789956, + 0.004938609, + 0.0031582587, + 0.0019857117, + 0.018668009, + -0.022165775, + -0.02538531, + 0.031188425, + -0.020072415, + -0.000031751304, + 0.0067636753, + -0.017700823 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + -0.0044841906, + 0.00023355159, + -0.00082493754, + 0.010029372, + -0.015641283, + 0.02653146, + -0.026091048, + -0.0066962577, + -0.008347801, + -0.021913812, + 0.017136013, + -0.013826254, + 0.012485, + -0.010282942, + -0.008074212, + -0.017709883, + 0.03384496, + -0.008374493, + 0.026838413, + -0.0343521, + 0.0005384198, + -0.005495135, + -0.010082755, + -0.006906454, + -0.009889241, + 0.006275865, + -0.0017316182, + -0.020539194, + 0.0030695351, + -0.032296848, + 0.02372884, + 0.010356344, + 0.0012778608, + -0.019031117, + -0.019645024, + -0.009628998, + -0.009955971, + -0.008194324, + -0.011243841, + -0.017136013, + 0.016748985, + -0.009228624, + -0.015441096, + -0.004170564, + -0.014333394, + 0.01742962, + 0.0025173523, + 0.016655564, + -0.028106265, + 0.012311505, + 0.0062091355, + 0.024329402, + -0.027705891, + -0.0017182723, + -0.014159899, + 0.0021203146, + -0.0042840033, + 0.002655815, + 0.0074269404, + -0.0026708292, + 0.024436168, + 0.011877766, + -0.018951043, + -0.003623386, + 0.014053132, + 0.000584296, + -0.0009575615, + 0.030054752, + -0.012992141, + -0.009115185, + 0.01901777, + 0.02137998, + -0.012731898, + 0.008234361, + 0.015040722, + -0.019458184, + -0.049539626, + 0.0010468116, + 0.00804752, + 0.001294543, + -0.003364811, + -0.019538257, + 0.012311505, + -0.0006247505, + 0.008094231, + 0.010643279, + -0.005154817, + 0.04406785, + -0.021019643, + -0.01533433, + 0.018283753, + 0.0029227312, + 0.005051387, + -0.009268661, + -0.03878291, + 0.004617648, + -0.016108386, + 0.027652508, + -0.007306828, + -0.032697223, + -0.010923541, + 0.008287745, + -0.016775677, + -0.014546927, + -0.02984122, + 0.010342998, + 0.012411598, + 0.007453632, + 0.015894853, + -0.0026674927, + 0.0011010289, + 0.012131336, + -0.009115185, + -0.05519825, + -0.015347675, + -0.037234794, + 0.0069932016, + 0.00059430534, + -0.019524911, + -0.019645024, + 0.012698533, + 0.018884314, + 0.016882444, + -0.026704956, + 0.0056219203, + -0.014573619, + -0.017202742, + -0.0058688177, + -0.0016457045, + -0.002824306, + 0.02853333, + 0.038996443, + 0.00025794937, + -0.013973057, + -0.021046335, + 0.008594698, + -0.035419766, + 0.006225818, + -0.011010289, + -0.029654378, + 0.0069798557, + 0.0028109602, + -0.0038435918, + 0.0027308853, + -0.009989335, + 0.0036734329, + 0.032136697, + 0.00459763, + 0.009849204, + 0.015027376, + 0.017976798, + 0.0032113343, + 0.0075470526, + -0.0009950965, + 0.0076938565, + 0.00986255, + 0.022287494, + 0.023328466, + -0.003823573, + -0.024382785, + -0.01211799, + -0.010509822, + 0.021460054, + -0.014400124, + -0.0030361705, + 0.016375303, + 0.005671967, + 0.054130584, + 0.0027909414, + -0.0036801056, + -0.0069398186, + 0.018043527, + -0.023995757, + 0.004791144, + 0.025637291, + 0.009362082, + 0.006886435, + 0.009302026, + -0.023982411, + 0.014533581, + -0.019564949, + 0.0028209696, + 0.010129466, + 0.012431617, + -0.008995072, + 0.019378109, + 0.018016836, + -0.0007114982, + 0.0057420325, + 0.000746948, + 0.013285749, + 0.029067162, + 0.0017449639, + 0.001951824, + -0.6700662, + -0.04406785, + -0.027999498, + 0.0029260677, + 0.04081147, + 0.030214902, + 0.018497285, + 0.027225442, + -0.00887496, + -0.010710008, + -0.046656933, + 0.0064393505, + -0.017202742, + 0.007867352, + 0.01377287, + -0.025357028, + 0.010296288, + -0.012171374, + 0.008868287, + 0.0120979715, + 0.011851074, + 0.007827315, + -0.0036200495, + -0.0065928274, + 0.018790893, + -0.0070065474, + -0.005805425, + -0.026718302, + -0.012284813, + 0.044841904, + -0.032136697, + 0.033417895, + -0.0017699874, + -0.008534642, + 0.044735137, + -0.024836542, + -0.025637291, + 0.03445887, + -0.011704271, + 0.049165946, + 0.003446554, + -0.006559463, + -0.010449765, + -0.017376238, + -0.00474777, + 0.010463111, + 0.022541065, + -0.023061551, + -0.014266665, + -0.010663298, + 0.008914998, + -0.013892983, + -0.0017533051, + -0.011670906, + 0.007894044, + 0.010349671, + 0.014653694, + -0.0001789172, + 0.015307638, + -0.019044463, + -0.008307763, + 0.0056519485, + -0.03795547, + -0.028239723, + -0.002780932, + -0.0026441375, + -0.037848704, + -0.0026825068, + 0.015214218, + -0.018924352, + -0.007860679, + 0.014159899, + -0.000095297386, + 0.020539194, + 0.0252903, + 0.031949855, + 0.01616177, + -0.0070198933, + -0.019364763, + -0.0009900919, + 0.008307763, + -0.017603116, + -0.0030661987, + -0.008768193, + 0.02172697, + -0.03331113, + -0.02853333, + 0.00665622, + 0.008200997, + -0.024676394, + 0.01809691, + 0.010423074, + -0.0063359207, + 0.0023521981, + -0.002750904, + 0.005331649, + -0.011090363, + 0.023501962, + 0.014720422, + -0.032110006, + 0.00526492, + 0.0029010442, + 0.007867352, + -0.0027559088, + -0.02039239, + -0.001042641, + -0.01839052, + 0.02503673, + 0.010556531, + -0.016188461, + 0.008074212, + -0.025570562, + -0.012224757, + -0.020045398, + 0.009468849, + -0.018857623, + 0.011036981, + 0.01717605, + 0.022767942, + -0.0057687243, + 0.010950233, + 0.006212472, + 0.027132021, + -0.0018750855, + 0.008728156, + 0.011750981, + -0.006182444, + -0.010423074, + -0.010289615, + 0.010903522, + -0.0013429216, + -0.00019737193, + 0.004237293, + -0.007780604, + 0.0038169, + -0.030294977, + -0.004974649, + 0.0071199867, + 0.02952092, + -0.02554387, + -0.043881007, + -0.025276953, + -0.0075337067, + 0.0035599933, + -0.021620203, + -0.009415465, + 0.012872029, + 0.015240909, + -0.012565075, + 0.019938633, + 0.0068130335, + -0.021873774, + -0.03961035, + 0.019524911, + 0.0120045515, + -0.008788212, + -0.029600995, + -0.007046585, + -0.02137998, + 0.008608044, + -0.0043073585, + -0.0043073585, + -0.033551354, + -0.009135203, + 0.005611911, + -0.015494479, + -0.004220611, + 0.011777673, + -0.0011744308, + -0.02653146, + -0.015187526, + -0.013706141, + -0.013826254, + 0.012992141, + 0.009555596, + -0.0010735032, + 0.012458309, + -0.0045309006, + 0.0138529455, + 0.010850139, + 0.005184845, + -0.031042341, + -0.021620203, + -0.0060890233, + 0.027225442, + 0.009201933, + -0.0022821326, + 0.02439613, + -0.014253319, + 0.011203803, + -0.031949855, + 0.015761396, + -0.0017266135, + -0.009021764, + 0.0138529455, + -0.01730951, + -0.0013103912, + 0.0044041155, + 0.015214218, + 0.008834923, + 0.026424693, + -0.0035966944, + 0.007059931, + -0.015240909, + 0.018337136, + -0.01975179, + -0.00028776893, + -0.0042339563, + 0.024169253, + 0.029627686, + 0.002655815, + -0.025677329, + 0.0011719285, + -0.005855472, + 0.011003616, + 0.012077954, + 0.025410412, + 0.019925287, + -0.004340723, + -0.014733768, + 0.023074897, + -0.011410663, + 0.006662893, + -0.023301775, + 0.0069198, + 0.021500092, + 0.023288429, + 0.022541065, + 0.026731648, + 0.0040537883, + -0.014013095, + -0.007473651, + -0.012204738, + -0.0050180224, + 0.0084812585, + -0.013919674, + 0.0036300588, + -0.0036367318, + 0.030561892, + -0.016415339, + 0.010783411, + -0.0015197535, + 0.016535452, + -0.011497411, + 0.005695322, + -0.016121732, + 0.04745768, + 0.0112571865, + -0.0069464915, + 0.020419082, + -0.025490487, + -0.003860274, + -0.01800349, + 0.028159648, + 0.002388899, + -0.031789705, + -0.00402376, + 0.009422138, + 0.007974118, + 0.0256106, + 0.014800497, + -0.0078339875, + 0.0018350482, + 0.024062486, + -0.016455377, + -0.00021686933, + 0.018110257, + 0.026051011, + -0.007914063, + -0.034832552, + -0.02531699, + -0.020218894, + 0.003519956, + 0.009535577, + 0.0043073585, + -0.009689054, + -0.015894853, + -0.011417336, + 0.014119862, + 0.0057553784, + -0.002882694, + -0.040250946, + 0.030001368, + 0.01492061, + -0.01016283, + -0.0077405665, + -0.009388774, + 0.008868287, + -0.01673564, + 0.01965837, + 0.026357964, + 0.020699343, + -0.004304022, + -0.018857623, + -0.0133991875, + 0.0074002487, + 0.02589086, + -0.041345302, + 0.013946366, + -0.019898595, + 0.0014004754, + -0.025930898, + -0.00903511, + -0.009188587, + 0.020218894, + 0.0027342218, + 0.00001191869, + -0.01673564, + -0.013459244, + -0.008427876, + 0.022180727, + -0.02885363, + -0.0024656374, + 0.009462176, + -0.0058621448, + 0.0050847516, + -0.006205799, + -0.016108386, + 0.016708948, + -0.0024089178, + -0.015828125, + 0.009095166, + -0.022848018, + -0.005925537, + 0.10890177, + -0.0012027906, + -0.003973713, + 0.021073025, + 0.0057854066, + 0.023328466, + -0.0040904894, + -0.0011410663, + 0.006352603, + 0.008307763, + -0.022287494, + 0.003483255, + -0.0039837225, + 0.0037368254, + 0.009849204, + -0.0012711879, + -0.013479263, + -0.052876078, + 0.030108135, + -0.009555596, + -0.012304832, + 0.017296163, + 0.0029911285, + 0.02045912, + 0.007960772, + -0.012985468, + 0.01689579, + 0.008794885, + 0.031896472, + -0.009849204, + -0.000403085, + 0.002167025, + 0.014119862, + 0.013292422, + -0.01730951, + -0.008274399, + 0.036914498, + -0.0035366383, + 0.008454567, + -0.003947022, + 0.01988525, + 0.00045792793, + -0.0020435764, + -0.003947022, + -0.002173698, + -0.0062825377, + -0.015000684, + 0.024489552, + -0.036700964, + -0.019858558, + 0.01418659, + 0.00031904815, + -0.03750171, + -0.009395447, + -0.026918488, + 0.024916617, + -0.0057120044, + -0.007974118, + 0.002056922, + 0.023635421, + 0.009642344, + -0.013879637, + -0.013372497, + -0.020525848, + -0.0013304099, + -0.043747548, + 0.0009709073, + -0.013205674, + -0.018884314, + -0.01476046, + 0.0102429055, + -0.011203803, + -0.025076767, + 0.02007209, + 0.015454442, + -0.009261988, + 0.016642218, + -0.02360873, + -0.007900717, + 0.020552538, + -0.013639413, + -0.0133991875, + -0.017349547, + -0.015908198, + -0.011784346, + 0.009689054, + 0.0130255055, + 0.0038736197, + -0.017669845, + 0.017189397, + 0.038596068, + -0.011951168, + 0.006522762, + -0.0035166196, + -0.011710944, + -0.009075147, + 0.008241034, + 0.017829996, + -0.018857623, + -0.0023488617, + 0.021927157, + -0.021940503, + -0.0069398186, + 0.021126408, + -0.0017850014, + -0.0021853754, + 0.010129466, + -0.003298082, + -0.010102774, + -0.001996866, + 0.02888032, + -0.0093153715, + 0.014360086, + 0.001457195, + 0.003616713, + 0.0082076695, + 0.00006532146, + 0.023114935, + 0.00850795, + 0.010189522, + -0.0147871515, + -0.0016231835, + 0.015427751, + 0.015027376, + 0.024195943, + -0.018817585, + 0.002757577, + -0.010896849, + 0.009101839, + 0.0016657233, + 0.008234361, + 0.018377174, + -0.019858558, + -0.016708948, + -0.0015189194, + 0.0044841906, + -0.0138396, + 0.023755532, + 0.003653414, + -0.029814528, + -0.008434549, + 0.005485126, + 0.018764202, + -0.015921544, + -0.039556965, + -0.028132956, + 0.0036033674, + 0.035286307, + 0.0026674927, + 0.008174306, + 0.009322044, + 0.028773556, + -0.007607109, + -0.010022699, + -0.011070345, + -0.006032304, + -0.015227563, + -0.013419206, + 0.012331524, + 0.005501808, + 0.020565884, + 0.00030507674, + 0.010816774, + 0.0043006856, + -0.0049946676, + 0.005395042, + -0.001981852, + 0.006886435, + 0.010409728, + 0.029067162, + 0.008174306, + 0.022073962, + -0.005131462, + -0.0011961177, + -0.030108135, + 0.0061323973, + -0.0135193, + -0.015521171, + -0.021099716, + -0.030268285, + -0.0015614592, + -0.00871481, + -0.010563204, + 0.009382101, + 0.0015005689, + 0.02595759, + 0.025223572, + -0.00041726494, + 0.013692795, + -0.008267726, + 0.009769129, + -0.011504084, + -0.023341812, + 0.008654755, + 0.00018559009, + -0.005014686, + -0.020886185, + 0.008788212, + 0.0062892106, + 0.008788212, + 0.010036045, + 0.0009784143, + -0.009949298, + 0.014680386, + -0.0007957436, + 0.041211843, + -0.00928868, + -0.008354474, + 0.015667975, + -0.0346724, + -0.016014965, + -0.007653819, + 0.0065861545, + -0.04409454, + -0.020832801, + 0.013145617, + -0.010249578, + 0.02255441, + -0.017736575, + -0.019645024, + 0.01959164, + 0.016535452, + 0.025717366, + -0.015828125, + 0.023061551, + 0.0083878385, + -0.010796756, + 0.011370625, + 0.015948236, + -0.01689579, + -0.023208354, + 0.018937698, + 0.018363828, + -0.020485811, + -0.020218894, + 0.002595759, + 0.009622325, + -0.03451225, + 0.006365949, + 0.027252134, + 0.029787837, + 0.0010835126, + 0.00572535, + 0.009582288, + -0.0054817894, + 0.023929028, + -0.015788088, + -0.020525848, + -0.01666891, + -0.004577611, + -0.015107451, + 0.006833052, + -0.002046913, + 0.0031095725, + 0.020552538, + -0.009322044, + -0.011010289, + -0.019898595, + 0.010016026, + 0.0069998745, + -0.02917393, + 0.023101589, + 0.0022737915, + 0.007053258, + 0.0107033355, + 0.0034699093, + -0.008628063, + 0.0013821248, + 0.014400124, + 0.024703085, + -0.0071333325, + 0.0059989393, + 0.002167025, + -0.011644214, + 0.0122781405, + 0.009248642, + -0.0009875896, + -0.00830109, + -0.0054250695, + -0.008781539, + 0.0106165875, + 0.0048678825, + 0.011070345, + -0.012138009, + -0.03002806, + -0.014707076, + -0.007994137, + -0.015467788, + 0.00079032185, + -0.011944495, + -0.0170159, + -0.020605922, + -0.0046710316, + 0.022207418, + 0.014013095, + -0.021446709, + 0.009141876, + 0.0044474895, + -0.0107033355, + 0.006646211, + -0.01717605, + 0.010509822, + 0.0018584033, + 0.0006201629, + -0.0147871515, + -0.025757402, + 0.027999498, + -0.023982411, + -0.0018250388, + -0.029387463, + -0.01377287, + 0.023501962, + -0.002078609, + 0.019217959, + 0.025850823, + -0.017189397, + 0.008527969, + -0.03333782, + -0.014627002, + 0.0028142966, + 0.010563204, + -0.0020902867, + 0.026291234, + -0.007366884, + 0.01517418, + 0.018977735, + 0.015454442, + 0.0035633298, + -0.010716681, + -0.013906329, + -0.009789147, + -0.00836782, + 0.00007934498, + -0.0073001552, + -0.017149359, + 0.0040137507, + -0.00944883, + -0.0053516678, + 0.01924465, + -0.0072134077, + 0.0067262854, + 0.013652759, + 0.022701213, + -0.0010526504, + -0.006803024, + -0.020685997, + -0.0127452435, + -0.006752977, + -0.02379557, + -0.006065668, + -0.0152676, + 0.02519688, + 0.027412282, + -0.040678013, + -0.02338185, + 0.026891796, + -0.031576175, + 0.003166292, + -0.02214069, + 0.015361021, + 0.014453506, + -0.00045167207, + -0.00036429876, + 0.010603242, + -0.010262924, + 0.009048455, + -0.029307388, + -0.003750171, + 0.022260802, + -0.017616462, + 0.008588025, + 0.00816096, + -0.014293357, + 0.0039236667, + 0.007580417, + -0.0014705409, + 0.01492061, + -0.006676239, + 0.00314961, + 0.0003401095, + 0.00036617552, + 0.01492061, + -0.0083878385, + 0.023942374, + 0.0071533513, + -0.0349927, + 0.012291486, + 0.010783411, + -0.016588835, + 0.008354474, + 0.013425879, + 0.0014421811, + -0.02080611, + 0.00541506, + -0.02089953, + 0.014573619, + -0.0012745244, + -0.0081075765, + 0.016415339, + -0.012972122, + -0.00024001596, + 0.031389333, + 0.000569282, + -0.0065394444, + -0.022474336, + 0.010543185, + -0.012391579, + 0.0085746795, + 0.013279076, + 0.0031712968, + -0.009201933, + -0.022113997, + 0.008354474, + -0.027492357, + -0.020178856, + 0.0065561268, + -0.0019801839, + -0.021793699, + 0.02519688, + 0.0011026971, + -0.0019234641, + -0.0062224814, + -0.011003616, + 0.00190845, + -0.006722949, + -0.025770748, + -0.003373152, + -0.03878291, + -0.018030182, + 0.0060756775, + -0.01393302, + -0.00020310647, + 0.0008024165, + 0.024556281, + -0.020525848, + 0.009155222, + 0.25111467, + -0.007520361, + -0.0110770175, + 0.028293107, + -0.0070799496, + 0.029414153, + 0.03387165, + -0.013158963, + -0.0097024, + 0.019831866, + -0.015107451, + -0.0027275488, + 0.01409317, + -0.0038402553, + 0.0082944175, + -0.011097036, + -0.019364763, + -0.04062463, + -0.0030862174, + -0.009375428, + 0.034378793, + -0.008914998, + -0.0014580291, + -0.0066495473, + 0.0050680693, + 0.013973057, + -0.0041238535, + 0.008434549, + 0.020152165, + 0.023261737, + 0.010683317, + 0.019578295, + 0.0003943268, + 0.03331113, + 0.0043507325, + 0.0070132203, + -0.0011886107, + -0.007787277, + 0.024943309, + 0.008321109, + 0.0021136417, + -0.012144682, + -0.0077472394, + -0.0011585826, + 0.0095022125, + 0.028613405, + -0.011270532, + -0.0061857803, + -0.003194652, + 0.02262114, + -0.029707761, + -0.004017087, + 0.01682906, + 0.023021514, + 0.011250514, + 0.0014229964, + 0.009048455, + -0.020619268, + -0.01915123, + -0.010509822, + 0.0008983395, + 0.024316056, + 0.003623386, + 0.024075832, + 0.0000784066, + -0.010823447, + -0.028266415, + 0.024502898, + -0.004871219, + 0.004140536, + -0.0005375857, + -0.003446554, + -0.0011844402, + -0.029787837, + -0.029013779, + -0.0026925162, + 0.03864945, + 0.00074152625, + 0.018150294, + 0.015881507, + -0.016175115, + 0.009835858, + -0.0013862954, + 0.0008512121, + -0.006893108, + -0.040384404, + 0.0027108665, + 0.0037835357, + 0.016281882, + -0.004387433, + 0.0052315556, + -0.021433363, + -0.0017166041, + -0.0077072023, + 0.0048478637, + -0.019351417, + -0.00092920166, + 0.006395977, + 0.000065217195, + 0.0056686304, + -0.0197251, + 0.004771125, + 0.0048512, + -0.022354223, + -0.01285201, + 0.0060890233, + 0.010556531, + 0.013679449, + 0.013138944, + -0.011710944, + -0.016014965, + -0.01682906, + 0.0060022757, + -0.010496476, + 0.00040663, + -0.0013270734, + -0.025930898, + -0.016975863, + 0.03267053, + -0.033898342, + 0.012158028, + -0.025010038, + -0.0071533513, + 0.0053516678, + -0.018457249, + 0.002078609, + -0.016081695, + 0.00060598296, + 0.009268661, + -0.031816397, + 0.030401744, + -0.016175115, + 0.014400124, + 0.0045142183, + -0.015881507, + 0.007320174, + 0.003947022, + -0.0033247736, + -0.0014446834, + -0.02137998, + 0.009969316, + -0.0074002487, + 0.008094231, + 0.00402376, + -0.0145068895, + -0.019231305, + 0.0069264728, + 0.017963452, + -0.013205674, + 0.0132990945, + -0.022380915, + -0.013158963, + 0.0022654503, + -0.016748985, + 0.015761396, + 0.00092836755, + 0.00026274554, + -0.008374493, + 0.011270532, + 0.027332207, + -0.015601246, + 0.0141332075, + 0.011744308, + -0.00578207, + -0.02188712, + -0.015734704, + -0.17306839, + 0.032910753, + 0.010896849, + -0.01632192, + 0.015187526, + 0.013499281, + 0.011824383, + -0.021633549, + 0.012358215, + 0.009328717, + 0.025263608, + 0.031202491, + -0.018777547, + -0.014733768, + 0.01151743, + -0.012358215, + -0.0040137507, + 0.0055451817, + 0.030161519, + 0.010489803, + 0.02166024, + -0.02057923, + 0.0009500545, + 0.0071600243, + -0.029814528, + 0.033925034, + 0.011183784, + 0.025877515, + -0.016855752, + -0.009015091, + -0.02751905, + -0.026344618, + 0.0120912995, + 0.032056622, + -0.0010001012, + 0.008601371, + 0.00053299806, + -0.024102524, + -0.012658495, + 0.022567756, + 0.003750171, + 0.020138819, + 0.00028568364, + -0.008654755, + 0.014653694, + 0.017629808, + 0.0013787885, + 0.0023021514, + -0.011791019, + -0.017789958, + 0.0256106, + -0.013919674, + 0.020298969, + 0.0006706267, + 0.0032380258, + 0.020032052, + 0.0141332075, + -0.0009216946, + 0.015948236, + -0.0214734, + -0.019551603, + -0.008601371, + 0.018403865, + -0.016415339, + -0.020672651, + 0.0063792947, + -0.016522106, + -0.0026257872, + -0.043267097, + 0.026998563, + -0.010029372, + -0.013225692, + 0.0026357963, + -0.012978795, + 0.0013103912, + -0.019338071, + -0.00022375076, + 0.030161519, + 0.0041805734, + -0.017629808, + -0.018684126, + 0.025490487, + -0.018363828, + -0.018564014, + 0.0025006703, + -0.008120922, + 0.0034231988, + 0.022954784, + -0.007053258, + -0.021913812, + 0.027572433, + -0.025410412, + 0.007954099, + -0.010756719, + 0.026264545, + 0.006576145, + -0.0031846426, + 0.021967195, + -0.004017087, + -0.010583223, + -0.00066520495, + -0.011550794, + -0.014280011, + 0.012838664, + 0.026704956, + -0.0019551604, + 0.008227688, + 0.0010217882, + 0.012298159, + -0.005361677, + -0.028426563, + 0.00093587453, + 0.015227563, + 0.021046335, + -0.026224507, + -0.00464434, + 0.016188461, + 0.0017583098, + 0.019578295, + -0.023341812, + 0.05207533, + -0.008314436, + 0.016628873, + 0.009775802, + 0.00029152242, + -0.01616177, + -0.06897112, + -0.021713624, + 0.002854334, + 0.005641939, + -0.011684252, + 0.029013779, + 0.007954099, + 0.01867078, + 0.008441222, + 0.02681172, + -0.0026891797, + -0.024489552, + -0.0020902867, + -0.0011427345, + 0.026838413, + -0.001641534, + 0.011010289, + -0.02853333, + 0.0060990327, + 0.026931833, + -0.000014557875, + -0.0046543493, + 0.008868287, + -0.011604177, + -0.015054068, + -0.0009208605, + -0.02554387, + 0.022420952, + 0.022848018, + 0.0031112407, + 0.001441347, + -0.0032430305, + 0.0025540534, + -0.028319798, + 0.0074002487, + 0.019271342, + -0.038729526, + -0.0016440363, + 0.020258931, + -0.024449514, + -0.0020102118, + -0.011584158, + 0.017216088, + -0.02137998, + -0.010196195, + 0.005962238, + -0.01800349, + -0.009622325, + 0.01593489, + -0.025637291, + -0.026357964, + -0.023195008, + 0.00068063603, + 0.01022956, + 0.008521296, + -0.017456312, + -0.018483939, + 0.0012545056, + -0.009635671, + -0.003166292, + 0.014560273, + 0.010850139, + -0.013879637, + 0.011303897, + 0.022594448, + 0.0028960395, + -0.021206483, + -0.02710533, + 0.009528904, + -0.0049713124, + 0.0068597435, + 0.010963579, + -0.007473651, + 0.0005559362, + -0.009008418, + -0.03680773, + -0.01800349, + -0.01119713, + 0.012725225, + -0.016775677, + 0.0028293105, + -0.03477917, + -0.0007181711, + -0.0019551604, + 0.025156843, + 0.015294292, + -0.0060623316, + 0.010302961, + -0.0016673915, + -0.034058493, + -0.006065668, + 0.036220513, + 0.008541315, + -0.03186978, + -0.014693731, + 0.032296848, + 0.0152676, + -0.014933956, + 0.005805425, + 0.014480198, + 0.00052590814, + -0.01816364, + -0.08295752, + 0.012698533, + 0.010356344, + -0.0037001243, + 0.014693731, + -0.0086681, + 0.015601246, + -0.018817585, + -0.0021837072, + -0.0061757714, + -0.017950106, + -0.00036054527, + -0.0054050507, + 0.0076938565, + -0.028960396, + -0.018523976, + 0.025050076, + -0.0014563609, + 0.015120797, + 0.012618458, + 0.0058821635, + 0.00526492, + 0.033097595, + -0.001323737, + -0.009755783, + 0.008354474, + -0.014266665, + 0.031202491, + -0.021193137, + -0.007867352, + -0.00056761375, + -0.029067162, + -0.013639413, + 0.016348612, + -0.0053082937, + -0.01896439, + -0.01068999, + 0.0024222636, + 0.0003165458, + 0.02602432, + -0.017029246, + -0.009615652, + 0.029654378, + -0.01476046, + -0.010082755, + 0.0061390703, + -0.0007736396, + -0.004941284, + 0.01616177, + 0.016762331, + -0.00049963355, + 0.01717605, + 0.015347675, + -0.0141332075, + 0.017042592, + -0.054504268, + 0.009055128, + 0.010649952, + -0.018203678, + 0.013178982, + 0.019645024, + 0.010790084, + 0.0025173523, + 0.011984533, + -0.0012294822, + -0.0143200485, + -0.0038502647, + -0.0014229964, + 0.007053258, + -0.02968107, + -0.04118515, + 0.014360086, + 0.015067413, + 0.020152165, + 0.020138819, + 0.0033531333, + 0.009842531, + -0.024409477, + -0.030081443, + 0.03248369, + -0.0012670173, + 0.0070866225, + -0.026785031, + 0.019137884, + 0.004814499, + -0.007046585, + -0.014907264, + -0.006913127, + -0.0058855, + 0.032777295, + -0.0077005294, + 0.0027792638, + 0.01581478, + 0.0042339563, + 0.023008168, + -0.002046913, + -0.008721483, + -0.027625816, + 0.025917552, + 0.01823037, + 0.016642218, + -0.0007899048, + -0.002382226, + -0.024649702, + -0.0068664164, + 0.00015358102, + -0.03931674, + -0.0052849385, + 0.01533433, + 0.0031079042, + 0.013352478, + 0.019965325, + -0.0037835357, + 0.03400511, + 0.008868287, + -0.0012895383, + -0.011343934, + -0.037741937, + -0.020685997, + 0.028907012, + 0.023275083, + 0.007653819, + 0.021913812, + -0.006676239, + -0.006906454, + 0.0069264728, + 0.008120922, + -0.017002555, + -0.00598893, + -0.007813969, + 0.013332459, + -0.0058888365, + -0.02738559, + 0.004200592, + -0.00804752, + -0.023848953, + 0.00183338, + 0.005975584, + -0.012444963, + 0.03632728, + 0.016989209, + 0.023421887, + -0.0036467412, + 0.0042172745, + 0.02039239, + 0.008060866, + 0.013652759, + -0.016855752, + -0.015921544, + 0.00862139, + -0.002714203, + -0.000095245254, + -0.01119713, + -0.020312315, + -0.011630869, + 0.006072341, + 0.024129216, + -0.012885374, + -0.0032380258, + 0.042679884, + 0.025076767, + 0.014773806, + 0.0105164945, + -0.006786342, + -0.008694792, + 0.023208354, + 0.0077605853, + 0.0095022125, + -0.008881633, + 0.022594448, + 0.012938757, + -0.017296163, + -0.008834923, + 0.014533581, + -0.010676644, + 0.0013871295, + -0.009942625, + 0.012771935, + 0.012605113, + -0.014853881, + 0.0077472394, + -0.016108386, + -0.040838163, + 0.0040270966, + 0.0019551604, + -0.0047677886, + 0.0013337464, + -0.013759525 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + -0.0010213737, + 0.008644082, + 0.0023587057, + 0.009380755, + -0.0029162795, + 0.0086643575, + -0.018856129, + 0.0043659713, + -0.0068497085, + -0.04287573, + -0.0075086593, + -0.010408043, + 0.021775788, + -0.019937484, + -0.0062008956, + -0.013003294, + 0.023168033, + -0.006413787, + 0.010455352, + -0.025371293, + -0.013476388, + 0.023438372, + -0.016044606, + -0.009150967, + 0.0061704824, + 0.005903523, + 0.007907409, + -0.021383796, + 0.013523697, + -0.0016980654, + 0.0190724, + -0.0030886205, + 0.0021998817, + -0.004203768, + 0.0023468784, + -0.013625074, + -0.015490412, + -0.005937315, + -0.0011193715, + -0.011164991, + 0.02591197, + -0.02397905, + -0.010833826, + -0.008637324, + -0.0030210358, + 0.0026172171, + -0.016977275, + 0.017409816, + -0.024695447, + 0.010536454, + 0.0074951425, + 0.0034941286, + -0.03752302, + -0.012422066, + -0.019829348, + -0.00043676607, + -0.028196333, + 0.0045011407, + -0.006494889, + -0.014706429, + 0.011678635, + 0.000102855454, + -0.0281693, + 0.016409563, + -0.0037779843, + 0.00011837881, + -0.008157472, + 0.011901665, + -0.04260539, + -0.021140492, + 0.022843625, + 0.01858579, + -0.011219059, + -0.021478415, + 0.018639859, + -0.006626679, + -0.024560276, + 0.007522176, + 0.00737349, + 0.0059001436, + 0.016842104, + -0.018639859, + 0.01726113, + 0.004882994, + 0.024695447, + 0.0069071557, + -0.010921686, + 0.022613838, + 0.008191264, + -0.026425615, + 0.03173777, + 0.0031545155, + 0.011746219, + -0.0048221676, + -0.03033201, + -0.011556982, + -0.015517445, + 0.019194052, + -0.0077722394, + -0.010556729, + -0.01770719, + 0.011151474, + -0.004264594, + -0.015612064, + -0.016788037, + 0.00671116, + 0.008704908, + 0.0002832221, + 0.010293148, + 0.005704148, + 0.0093537215, + 0.024763031, + -0.016450115, + -0.052526824, + -0.02185689, + -0.016869139, + 0.03522514, + 0.0117259445, + -0.013260117, + -0.03381938, + 0.0075356932, + 0.036144294, + -0.007893892, + -0.0050046463, + 0.031818874, + 0.012307173, + -0.0087387, + -0.01046211, + -0.004720791, + -0.012090902, + 0.005271606, + 0.014760497, + 0.010867618, + 0.020762017, + -0.009664611, + 0.024735996, + -0.022938244, + 0.022897694, + -0.034278955, + -0.018707443, + 0.02203261, + 0.019045366, + -0.025155023, + 0.011935457, + 0.010313424, + 0.02662837, + 0.024465658, + 0.022438118, + 0.00737349, + 0.0055216695, + 0.018072147, + -0.016612317, + 0.020032102, + -0.014314438, + 0.0032085832, + 0.016990792, + 0.026141759, + 0.018964265, + -0.005197263, + 0.003558334, + 0.003761088, + 0.009286136, + 0.015598547, + -0.008927938, + -0.011219059, + 0.019613078, + 0.006728056, + 0.013834586, + 0.0060150377, + -0.021613585, + -0.013226325, + 0.020964772, + -0.0014032272, + 0.009772747, + 0.008252091, + 0.010313424, + 0.03222438, + 0.01761257, + -0.021208076, + 0.0067922617, + -0.0031359298, + -0.0132466, + 0.006227929, + 0.008434569, + -0.013239841, + -0.002096815, + 0.009941708, + 0.008015544, + 0.006643575, + 0.002061333, + 0.008488637, + 0.0397398, + 0.018031595, + 0.0026510095, + -0.67217034, + -0.051850975, + 0.0032254795, + 0.0016161189, + 0.020910705, + 0.0067719864, + 0.0150713865, + 0.006079243, + -0.0040415647, + -0.001850131, + -0.0314404, + 0.0071504605, + -0.007988511, + -0.0019126468, + -0.0027067668, + -0.0028317985, + -0.0006935879, + -0.012030075, + 0.014976768, + 0.012178762, + -0.006379995, + 0.0045856214, + -0.005704148, + 0.0048593394, + 0.021154009, + -0.015341725, + -0.0040753568, + -0.019275155, + -0.008718425, + 0.032602854, + -0.031007856, + 0.0381448, + 0.009475374, + 0.005268227, + 0.047011912, + -0.009948467, + -0.022776041, + 0.026236378, + 0.011279885, + 0.03425192, + -0.022654388, + -0.016585283, + 0.0058021457, + -0.025046887, + -0.011928698, + 0.012070626, + 0.017855875, + -0.04498437, + -0.0045450707, + -0.018991299, + 0.020248374, + -0.013219566, + -0.011894906, + -0.01942384, + 0.004626172, + 0.0143279545, + 0.02207316, + -0.014963251, + 0.006809158, + -0.00710991, + -0.021559516, + -0.0066570924, + -0.029548027, + -0.02287066, + -0.014638844, + -0.0017403058, + -0.029277688, + -0.0031883079, + 0.006278618, + -0.008427811, + 0.010259356, + 0.023789812, + -0.013571006, + 0.010293148, + 0.019923966, + 0.017274648, + 0.008988764, + 0.0015966883, + -0.007974993, + -0.01695024, + -0.007332939, + -0.003612402, + -0.0157202, + 0.0077114133, + 0.028764045, + -0.035684716, + -0.020910705, + 0.005548703, + 0.023032863, + -0.027790826, + 0.005656839, + 0.012253105, + -0.005224297, + 0.018004563, + -0.008157472, + 0.0095835095, + 0.0065861284, + -0.00096223707, + 0.014652361, + -0.011847597, + -0.017761257, + -0.011104165, + 0.0052918815, + -0.015544479, + -0.024965785, + -0.0029754161, + -0.0053662243, + 0.0087387, + 0.025939004, + -0.012895159, + 0.007718172, + -0.011577258, + -0.030223874, + -0.008725184, + 0.0097254375, + -0.027980063, + 0.017936977, + 0.0012925572, + 0.016531216, + 0.003686745, + 0.0035110246, + -0.0069747404, + 0.031467434, + 0.0033268565, + 0.00020835093, + 0.014598293, + -0.0020495057, + -0.014963251, + -0.010773, + 0.00238405, + 0.00037657344, + 0.002578356, + -0.006565853, + -0.008535947, + 0.026587818, + -0.017639605, + -0.018788544, + -0.0031646532, + 0.030602349, + -0.042443186, + -0.041037425, + -0.0081507135, + 0.004230802, + 0.0074072825, + 0.0111244405, + -0.023816846, + -0.022127228, + 0.02697981, + -0.0029720368, + 0.032467686, + 0.002101884, + -0.0038523274, + -0.037712257, + 0.022329982, + -0.0035346793, + -0.0032660302, + -0.022248881, + -0.011164991, + 0.0025749768, + 0.012624821, + 0.012205795, + 0.010326941, + -0.040577848, + 0.0012410239, + 0.008840078, + -0.015206556, + 0.014152234, + 0.014963251, + 0.002318155, + -0.018423587, + -0.003717158, + -0.005788629, + -0.009651094, + 0.015422827, + 0.015084904, + -0.01125961, + 0.009995776, + -0.0045247953, + -0.0035786096, + 0.006839571, + 0.0065489565, + -0.023965532, + -0.012983019, + 0.006545577, + 0.026371546, + -0.007055842, + 0.0077114133, + 0.014179269, + -0.0062448257, + 0.002874039, + -0.027358284, + 0.02437104, + -0.0007628622, + 0.0025935625, + 0.015949987, + -0.023384303, + 0.005359466, + 0.0055824956, + -0.0035313002, + 0.023478922, + 0.021924473, + -0.010739207, + 0.010489144, + -0.009319929, + 0.0051905042, + -0.02193799, + -0.0058021457, + -0.007359973, + 0.02176227, + 0.0281693, + 0.020342993, + -0.025966039, + -0.010658106, + 0.0064475797, + 0.022478668, + 0.03738785, + 0.015652616, + 0.009394272, + -0.005592633, + -0.002441497, + 0.0030869308, + -0.030304976, + 0.015220073, + -0.018558756, + -0.003541438, + 0.0019278533, + 0.006177241, + 0.038334038, + 0.015449861, + -0.0040145307, + -0.022059644, + -0.011333953, + -0.0077992734, + 0.008988764, + 0.012895159, + -0.019910451, + 0.0059542116, + -0.013787277, + 0.035792854, + 0.007927684, + 0.0147875305, + -0.0036968826, + 0.03676607, + -0.010705415, + -0.0039706007, + -0.009401031, + 0.040172342, + 0.015179521, + -0.0058798683, + 0.018328968, + -0.025438879, + -0.015990539, + -0.017964011, + 0.0067652278, + 0.014341472, + -0.035522513, + 0.009319929, + 0.0031714116, + 0.019369774, + 0.04211878, + 0.02397905, + -0.0010357354, + 0.0062718596, + 0.009968742, + 0.008137197, + -0.00023802483, + 0.032467686, + 0.0049776128, + -0.008143956, + -0.0061130356, + -0.02022134, + -0.0086643575, + -0.01593647, + -0.014706429, + -0.004095632, + -0.012604545, + -0.0014632086, + -0.018639859, + 0.026141759, + 0.0043423166, + -0.008731943, + -0.037279718, + 0.027561037, + -0.009529442, + -0.0007624398, + -0.013064121, + -0.009745712, + -0.009455099, + -0.026141759, + 0.021356763, + 0.009211794, + 0.016260877, + -0.008285883, + 0.00073878514, + -0.009042832, + 0.007130185, + 0.019315705, + -0.037144545, + -0.016923208, + -0.019234603, + 0.016801555, + -0.022708457, + 0.0029382445, + -0.0014311059, + 0.012435583, + -0.006596266, + 0.01774774, + -0.025709217, + -0.012834333, + 0.000044669257, + 0.022911211, + -0.012124694, + -0.0027135254, + 0.009482132, + 0.011252851, + 0.0013778829, + -0.00489989, + 0.0038219143, + 0.012401791, + -0.013908929, + -0.0052479515, + -0.021505449, + -0.024046633, + -0.00043148603, + 0.084778234, + -0.0034180959, + 0.00657937, + 0.002101884, + 0.011043339, + 0.008995523, + -0.004305145, + 0.0067517105, + 0.0062448257, + 0.016409563, + -0.011502914, + -0.018991299, + 0.012023317, + 0.001227507, + 0.0063833743, + -0.012124694, + -0.013537214, + -0.019194052, + 0.026033623, + -0.0063056517, + 0.00865084, + 0.012340965, + -0.001894061, + 0.018518206, + -0.0064002704, + -0.004115908, + 0.013097913, + 0.010049844, + 0.0013128327, + -0.025411844, + 0.012793782, + 0.0005677114, + -0.015409309, + -0.0016718763, + -0.020113204, + -0.0016271014, + 0.018085664, + 0.020586297, + -0.008157472, + -0.012199037, + 0.010212047, + 0.0063124103, + 0.0051195403, + -0.005082369, + -0.0018687168, + -0.0077384473, + 0.0021255387, + 0.012489651, + -0.027304215, + 0.004798513, + 0.03541438, + -0.0046025175, + -0.037279718, + -0.014909183, + -0.00094618567, + 0.01333446, + -0.012003041, + -0.0038557067, + 0.0017943736, + 0.014841598, + -0.00017962744, + -0.021559516, + 0.01457126, + -0.009421306, + -0.03400862, + -0.044524796, + -0.0015468446, + -0.014855116, + -0.03827997, + -0.021248627, + 0.016004056, + -0.013179015, + -0.029602095, + 0.009752471, + 0.017369267, + -0.004538312, + 0.026168793, + -0.010056602, + -0.0101850135, + 0.02662837, + -0.01607164, + -0.03417082, + -0.02392498, + -0.027817858, + 0.00040402974, + 0.009968742, + 0.020559262, + -0.017098928, + 0.002115401, + -0.016720453, + 0.040415645, + -0.011827321, + 0.014733463, + 0.0009689955, + -0.014368505, + -0.020829601, + 0.013239841, + 0.020599814, + -0.02949396, + -0.004896511, + 0.013354735, + -0.021708203, + 0.0019041987, + -0.013800794, + -0.0059069023, + 0.007846583, + 0.01690969, + 0.000936048, + -0.0072923885, + 0.00485596, + 0.029034384, + -0.036495734, + 0.00984709, + 0.013030329, + -0.020424094, + 0.03354904, + 0.013990032, + 0.0348737, + 0.007691138, + -0.00083382614, + 0.008421052, + -0.011002788, + 0.022154262, + 0.015963504, + 0.00047478246, + 0.006802399, + -0.0013381769, + -0.00034827236, + 0.006423925, + -0.0026594577, + -0.011131199, + 0.013388528, + -0.019491425, + -0.022235364, + -0.022194812, + -0.0075694853, + -0.0083805015, + 0.010563487, + 0.0037847427, + -0.03611726, + -0.01461181, + -0.016004056, + 0.011543466, + -0.008576497, + -0.020464644, + -0.016896173, + 0.006140069, + 0.015868885, + -0.0076505872, + 0.01377376, + 0.02012672, + 0.024398074, + -0.01426037, + -0.0075289346, + -0.024492692, + -0.030304976, + -0.021018839, + -0.030791586, + 0.002321534, + 0.017869392, + 0.034900736, + 0.0057751117, + -0.0041902508, + -0.01642308, + -0.0014648982, + 0.011151474, + -0.014733463, + 0.02397905, + -0.006298893, + 0.0135304555, + 0.027871927, + 0.018991299, + -0.015517445, + -0.004967475, + -0.037063446, + 0.028250402, + 0.0006534595, + -0.011408296, + -0.0067483317, + -0.03346794, + -0.0020106446, + -0.0037374336, + -0.015125454, + 0.008583256, + -0.0038962576, + -0.00024013685, + 0.021600068, + -0.004291628, + 0.015747232, + -0.013935964, + 0.020059137, + -0.009198276, + -0.0097254375, + -0.010252598, + 0.0026391821, + 0.0025935625, + -0.026817605, + 0.0026459408, + 0.01337501, + -0.001041649, + 0.024425108, + -0.0143279545, + -0.005612909, + -0.01037425, + 0.006386753, + 0.028412605, + -0.009421306, + -0.013706176, + 0.00036094448, + -0.027817858, + -0.037333783, + -0.006292135, + 0.0106107965, + -0.01284785, + -0.014017065, + 0.0043997634, + -0.0048863734, + 0.018315451, + -0.011604291, + -0.0026915604, + 0.026344514, + -0.004176734, + 0.021748753, + -0.016801555, + 0.015963504, + 0.0100092925, + -0.014733463, + -0.0010450283, + -0.00079707697, + -0.016152741, + -0.018883163, + 0.009637577, + 0.019491425, + -0.011469122, + -0.02675002, + -0.0045856214, + 0.009002281, + -0.014422573, + -0.0040246686, + 0.04322717, + 0.019085918, + -0.0059846244, + -0.015287657, + 0.0037982597, + -0.010725691, + 0.020897187, + -0.0024347384, + -0.009914674, + -0.0074951425, + -0.013949481, + 0.0018822337, + -0.0016144293, + -0.009157726, + 0.013746726, + 0.018612824, + -0.015017319, + 0.005646701, + -0.014165752, + 0.018815579, + 0.0039266706, + -0.012949227, + 0.016058123, + 0.010401284, + 0.0079209255, + 0.020194305, + 0.018247867, + -0.0013145222, + 0.016531216, + 0.008306159, + 0.029710231, + -0.013537214, + -0.019045366, + -0.001580637, + 0.0036326773, + 0.015436344, + -0.005822421, + 0.004578863, + 0.0014370196, + -0.03757709, + -0.0011261299, + 0.015476895, + 0.0034518882, + 0.004420039, + 0.0047444454, + -0.024479175, + -0.022965278, + 0.0041091493, + 0.00016452649, + -0.01006336, + -0.0015400861, + -0.0075019007, + -0.007434316, + -0.004825547, + 0.019045366, + -0.01205035, + -0.014706429, + 0.021546, + 0.016693419, + -0.008495396, + 0.000274774, + 0.009630819, + 0.0057818703, + -0.0016085156, + 0.0047714794, + -0.014138717, + -0.006238067, + 0.014246853, + -0.009542959, + 0.00042916278, + -0.020464644, + 0.005400017, + 0.043416407, + 0.025817353, + 0.013456112, + 0.025749767, + -0.030169807, + -0.0017960632, + -0.030791586, + -0.026087692, + 0.018288417, + 0.024884684, + 0.02666892, + 0.004626172, + -0.016301427, + 0.021126974, + 0.02339782, + -0.019477908, + -0.006940948, + -0.022221847, + -0.04182141, + -0.01108389, + 0.0039942553, + -0.01841007, + -0.024384556, + -0.018802062, + -0.0140981665, + -0.005136437, + 0.007630312, + 0.00067120045, + 0.0045315535, + 0.0056872517, + 0.022681423, + -0.00035650926, + 0.010577004, + -0.031197093, + -0.0070085325, + 0.0064171664, + -0.019545494, + -0.036090225, + -0.019207569, + -0.016517699, + 0.014679395, + -0.0015721889, + -0.020694433, + -0.016450115, + 0.013618316, + -0.034143787, + -0.0062177917, + -0.027142012, + 0.01258427, + 0.019761764, + 0.0005677114, + 0.010955479, + -0.0077722394, + -0.008704908, + 0.011685393, + -0.01443609, + 0.0073802485, + 0.012151727, + -0.023641124, + 0.0256957, + 0.019180536, + -0.021464897, + -0.008258849, + 0.012523443, + 0.005704148, + -0.0072721126, + -0.007420799, + -0.01103658, + 0.00084692065, + 0.009820056, + -0.013091154, + -0.008745459, + 0.022667905, + 0.017950494, + -0.045633186, + 0.0010264425, + -0.0039773593, + -0.006940948, + -0.0042882487, + -0.01258427, + 0.009907916, + 0.005815663, + 0.010806792, + -0.02710146, + -0.0134425955, + -0.0033674072, + -0.010766242, + 0.013037087, + 0.0039874967, + 0.004220664, + 0.009617302, + 0.0071369433, + -0.0021508827, + -0.0138143115, + -0.002586804, + -0.030899722, + -0.01108389, + 0.012077385, + -0.00856298, + -0.012509926, + -0.014246853, + 0.010340458, + -0.037982598, + -0.015355242, + 0.0033606489, + -0.0014370196, + -0.035117008, + 0.020802569, + 0.013037087, + -0.023330236, + -0.0050012674, + 0.0038388106, + -0.009455099, + -0.0063056517, + -0.021478415, + 0.008968488, + -0.03133226, + -0.010441835, + -0.0039976346, + 0.0031156542, + -0.024087185, + -0.00856298, + -0.0029720368, + -0.011185266, + -0.013449354, + 0.21756864, + -0.00763707, + -0.0062887557, + 0.021708203, + -0.014909183, + 0.035171073, + 0.028601842, + -0.00057911634, + -0.0031122752, + 0.0024431867, + -0.015341725, + -0.011320436, + 0.007359973, + -0.0031511362, + 0.0016693419, + -0.03576582, + -0.022911211, + -0.027898962, + -0.028574808, + -0.02057278, + 0.032062177, + -0.009441582, + 0.014517192, + -0.007745206, + 0.026506716, + 0.0058697304, + -0.018018078, + 0.015963504, + 0.02039706, + 0.025601082, + 0.017517952, + 0.014517192, + -0.0041699754, + 0.015625581, + -0.0023722227, + 0.012854609, + 0.0024617724, + -0.0026037002, + 0.024776548, + 0.014814565, + 0.009178001, + -0.019045366, + -0.021140492, + -0.0015882403, + -0.017842358, + 0.018747993, + -0.009279378, + 0.0015890851, + -0.0298454, + 0.025790319, + -0.038712513, + -0.0055655995, + 0.020315958, + 0.031467434, + 0.014287404, + -0.00543043, + 0.020099688, + -0.009015798, + -0.0016668075, + -0.002608769, + -0.014354989, + 0.026479682, + -0.012550477, + 0.037766326, + -0.007170736, + -0.00026062346, + -0.014409056, + -0.0023384304, + 0.011685393, + -0.002529357, + 0.027479935, + 0.0027287318, + -0.00018659711, + -0.034143787, + -0.021532483, + -0.021518966, + 0.04206471, + 0.024289938, + 0.016747486, + 0.01682859, + 0.003832052, + 0.004737687, + 0.006940948, + 0.015368759, + -0.013577765, + -0.014314438, + -0.008225057, + 0.00068767427, + 0.01002281, + -0.015571513, + 0.011759737, + -0.005285123, + -0.0027912478, + -0.015787784, + 0.00012355327, + 0.010347216, + 0.0007434316, + 0.007954719, + -0.006467855, + 0.015044352, + -0.025574047, + 0.0073261806, + 0.005893385, + -0.0051330575, + -0.006961223, + 0.004071978, + -0.0019836107, + 0.0030092085, + -0.006900397, + 0.0013770381, + -0.0077384473, + -0.010928445, + -0.00042219312, + -0.0039976346, + 0.00008706809, + -0.005974487, + -0.005589254, + -0.020478161, + 0.024492692, + -0.033873446, + 0.020586297, + -0.014706429, + -0.014652361, + 0.014409056, + -0.014503675, + -0.015463377, + -0.006481372, + -0.019045366, + -0.018612824, + -0.036847174, + 0.026722988, + -0.025628116, + 0.020613331, + -0.0030058292, + 0.0028571428, + 0.0086643575, + -0.012604545, + 0.006025175, + -0.005014784, + -0.0082926415, + 0.010745966, + -0.012719439, + 0.02631748, + 0.005427051, + -0.001880544, + 0.003448509, + 0.018139731, + 0.015260624, + -0.010712174, + 0.015449861, + -0.0066030244, + -0.025925487, + -0.0037272957, + 0.015882403, + 0.023289684, + 0.00018469628, + -0.013483146, + -0.021708203, + 0.010299907, + 0.019139985, + -0.033062432, + -0.013800794, + 0.04790403, + 0.0032085832, + -0.019450875, + -0.014300921, + -0.1757202, + 0.015030836, + 0.024722481, + -0.026966292, + 0.025925487, + 0.028764045, + 0.00441328, + -0.017112443, + -0.0037779843, + 0.008394019, + 0.03452226, + 0.017896427, + -0.01695024, + -0.008914421, + -0.0024448761, + -0.0035448172, + -0.000100849036, + 0.017017825, + 0.017044859, + 0.0065185437, + 0.025803836, + -0.015706683, + 0.008218299, + -0.0038962576, + -0.02635803, + 0.03262989, + -0.010293148, + 0.0052378136, + 0.0043456955, + -0.0033217876, + -0.0095362, + 0.0011050097, + 0.013767002, + 0.02887218, + 0.01673397, + 0.019748246, + -0.00251584, + -0.011861114, + -0.014354989, + 0.018139731, + -0.009022556, + 0.0003429923, + 0.009860607, + -0.0033302356, + -0.011793529, + 0.018639859, + 0.0145577425, + -0.0044605895, + 0.0056061503, + -0.009637577, + 0.03284616, + -0.025668666, + 0.016666384, + 0.01854524, + 0.016166259, + 0.018626342, + 0.023168033, + 0.004582242, + 0.005143195, + -0.019329222, + -0.019045366, + 0.0078601, + 0.0034603362, + -0.005345949, + -0.017342232, + -0.02715553, + -0.009326687, + 0.021532483, + -0.016490664, + 0.008164231, + 0.0027354904, + -0.008860353, + 0.014354989, + -0.028115232, + 0.022830108, + -0.008975247, + 0.0056230463, + 0.02914252, + 0.012158486, + -0.0022133987, + -0.029061418, + 0.03395455, + -0.014449608, + -0.009117175, + 0.009428064, + 0.01337501, + 0.012753231, + 0.004132804, + -0.035468448, + -0.016544733, + 0.022329982, + -0.019194052, + 0.014530709, + -0.02697981, + -0.0038388106, + 0.01068514, + -0.017909944, + 0.03235955, + -0.014909183, + -0.0005427896, + -0.0040314267, + -0.015963504, + -0.021789305, + 0.020937737, + 0.010806792, + 0.016409563, + 0.0035617133, + 0.019937484, + 0.018247867, + -0.008576497, + -0.0068497085, + 0.0029281068, + 0.009651094, + 0.008319676, + -0.023843879, + 0.015612064, + 0.02573625, + -0.009373996, + 0.016842104, + -0.0056940103, + 0.032305483, + -0.0004671792, + 0.006927431, + 0.011185266, + -0.0074410746, + -0.028358538, + -0.07585706, + 0.0118678715, + -0.0029855538, + 0.008542705, + -0.010941962, + 0.04387598, + 0.016517699, + 0.03711751, + -0.0091239335, + 0.022897694, + -0.0053628455, + -0.009245586, + 0.00033665626, + -0.0074681086, + 0.03290023, + -0.010408043, + -0.0016921518, + -0.007346456, + -0.0029179691, + 0.022681423, + -0.0060217963, + -0.027033877, + -0.0016262566, + 0.0027321111, + -0.018396553, + 0.010421559, + -0.023735743, + 0.02962913, + 0.023127481, + 0.011665118, + -0.0046329307, + -0.007846583, + 0.020288924, + -0.025817353, + -0.039820902, + 0.0140981665, + -0.024830615, + 0.0025682184, + 0.026898708, + -0.029926501, + -0.0070220493, + 0.00010385866, + 0.00242798, + -0.007968235, + -0.015774267, + -0.005558841, + -0.014125201, + 0.01527414, + 0.0140981665, + -0.009009039, + -0.016679902, + -0.012104418, + 0.014882149, + -0.021600068, + 0.028493706, + 0.0030210358, + 0.010299907, + 0.016436597, + -0.046768606, + 0.002816592, + 0.00927262, + 0.012597786, + -0.015747232, + 0.013523697, + 0.031115992, + 0.0241007, + -0.022492185, + -0.029791333, + 0.023262652, + -0.008880628, + 0.00037087098, + 0.016341979, + -0.006106277, + -0.0062346878, + -0.01757202, + -0.021072907, + -0.016896173, + -0.011671877, + 0.016382528, + -0.018004563, + 0.0012942469, + -0.034900736, + 0.005568979, + 0.0059001436, + -0.0054676016, + 0.026939258, + 0.015368759, + -0.008238574, + 0.015517445, + -0.016666384, + -0.003585368, + 0.009907916, + 0.022478668, + -0.030413112, + -0.022140745, + 0.0314404, + 0.019613078, + 0.00095463375, + 0.010036327, + 0.0097795045, + -0.005041818, + -0.027520487, + -0.095267385, + 0.01872096, + 0.012530202, + -0.0006243136, + 0.0061434484, + -0.017544987, + 0.04038861, + -0.008556222, + 0.0122733805, + -0.011300161, + -0.057906564, + 0.006538819, + -0.013652108, + -0.014273887, + -0.024654895, + -0.027953029, + 0.03903692, + 0.012003041, + 0.006089381, + 0.0076573454, + 0.016869139, + 0.011009546, + 0.007312664, + -0.0008621272, + -0.026777055, + 0.010225564, + -0.0082994, + 0.024560276, + -0.009549717, + 0.0006733125, + -0.009029315, + -0.046173863, + 0.017680155, + 0.026303962, + -0.007332939, + -0.019491425, + -0.006873363, + 0.013449354, + 0.010779758, + 0.03682014, + -0.04509251, + 0.012111177, + 0.022248881, + -0.0052209175, + -0.004122666, + -0.01099603, + 0.019018332, + 0.008116921, + 0.026020106, + 0.009211794, + 0.0027963165, + 0.02406015, + 0.0051905042, + -0.0050350595, + -0.0035110246, + -0.03773929, + 0.023614092, + -0.009063107, + -0.004686998, + 0.007988511, + 0.014030582, + 0.004247698, + 0.01143533, + 0.012016558, + 0.025155023, + -0.011225818, + -0.014814565, + 0.0043152827, + 0.020545747, + -0.016815072, + -0.018856129, + 0.01218552, + -0.003818535, + 0.0134425955, + 0.009029315, + -0.0029940018, + 0.010766242, + -0.0063495818, + -0.028115232, + 0.021478415, + -0.00014330067, + -0.0018129593, + -0.031494465, + 0.01823435, + 0.026858157, + -0.012908677, + -0.024019599, + -0.02962913, + 0.000034927558, + 0.02269494, + -0.015220073, + 0.0045011407, + 0.010543212, + 0.010455352, + -0.005058714, + 0.013429078, + -0.010786517, + -0.019085918, + 0.03184591, + 0.02485765, + 0.0052918815, + -0.001196249, + -0.005663597, + -0.03208921, + -0.009279378, + 0.014463124, + -0.033630144, + -0.018707443, + 0.026479682, + 0.015787784, + 0.009259103, + 0.020153755, + 0.00041374503, + 0.019951, + 0.0064205457, + 0.010103911, + -0.007576244, + -0.03249472, + -0.02357354, + 0.018612824, + 0.0134425955, + 0.024438625, + 0.0031207232, + -0.014706429, + 0.0024178424, + -0.011678635, + 0.014368505, + -0.024006082, + 0.006450959, + -0.013949481, + 0.004071978, + 0.010097153, + -0.000086487285, + 0.0026374925, + -0.0042443187, + -0.0023519474, + 0.0017293233, + 0.010441835, + -0.024127735, + 0.034414124, + 0.005200642, + 0.014030582, + 0.0091239335, + -0.01509842, + 0.0265743, + -0.0047782375, + 0.008535947, + 0.004997888, + -0.04025344, + -0.0056433217, + -0.0014277266, + 0.0011117682, + -0.02843964, + -0.028277434, + -0.0074816253, + -0.011266368, + 0.019356256, + -0.005288502, + -0.013050604, + 0.038712513, + -0.00058840925, + 0.008319676, + 0.021424348, + -0.02339782, + 0.0021069527, + 0.020640366, + 0.005751457, + 0.008657599, + -0.038712513, + 0.00944834, + 0.018802062, + -0.018666891, + -0.013821069, + -0.008867112, + -0.0101512205, + -0.016652867, + -0.004247698, + -0.0066030244, + 0.01319929, + -0.009772747, + 0.020451128, + -0.024654895, + -0.0011007857, + 0.039793868, + -0.0051330575, + -0.0133006675, + 0.010570246, + -0.022586804 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.019221356, + 0.0036138783, + -0.007965014, + -0.0067472225, + -0.024066191, + 0.013718256, + -0.00505548, + -0.01043351, + 0.0065530343, + -0.04420912, + 0.015508738, + 0.0044893716, + 0.012171331, + -0.031412434, + -0.014574001, + -0.018997546, + 0.02109083, + -0.020788029, + -0.0024273545, + -0.024145182, + 0.0010812012, + -0.012987581, + -0.014258034, + -0.014073719, + -0.020603715, + 0.013757751, + 0.0028387704, + -0.028753042, + 0.009880567, + -0.0032534779, + 0.02904268, + -0.0067735533, + -0.009307876, + -0.030490864, + -0.008037423, + -0.019642645, + -0.035230376, + -0.00874835, + -0.020630045, + -0.028489737, + 0.009742331, + -0.017575692, + -0.0019023876, + 0.0013996373, + -0.007563472, + 0.008491627, + -0.006510247, + -0.010644155, + -0.004374175, + 0.00862328, + 0.011348499, + 0.012809849, + -0.034809086, + -0.009900315, + 0.0029523212, + 0.010736313, + -0.019274017, + -0.006329224, + -0.0033538633, + -0.011809285, + 0.0025985036, + 0.0050521884, + -0.032544654, + 0.013810413, + -0.009413199, + -0.0071750954, + -0.029569292, + -0.005197007, + -0.020235086, + -0.004663812, + 0.026054153, + 0.030543525, + -0.0048382524, + -0.030227557, + 0.010525667, + 0.0027087631, + -0.01702275, + 0.005789446, + -0.0062436494, + -0.0027169914, + 0.029937921, + -0.025567036, + 0.018233957, + 0.002512929, + 0.035572674, + 0.016956922, + -0.011282673, + 0.012842762, + -0.0035348863, + -0.015324424, + 0.018984381, + 0.012934919, + 0.0049139527, + 0.015495572, + -0.023486918, + -0.030675178, + 0.0009191034, + 0.04434077, + -0.0020291037, + -0.036020294, + -0.006832797, + 0.012625535, + 0.0066682305, + -0.0084258, + -0.008807594, + 0.02128831, + 0.01811547, + 0.0011494963, + 0.015008456, + -0.0037027441, + 0.0133759575, + 0.031149128, + -0.0011708899, + -0.04426178, + -0.018444603, + -0.019432, + 0.03243933, + -0.009465859, + -0.014429183, + -0.026804576, + 0.016127508, + 0.027673487, + 0.01209234, + -0.0064641684, + 0.023895042, + -0.005187133, + -0.014442348, + -0.0035381778, + 0.021696435, + -0.01092721, + 0.028805703, + -0.000857391, + 0.0066254437, + -0.0017197189, + -0.021577947, + 0.018273454, + -0.017615188, + -0.0025902751, + -0.0048119216, + -0.013744586, + 0.014416017, + 0.015087448, + -0.013836743, + 0.025145747, + -0.0012210828, + 0.018839562, + 0.019589985, + -0.00042129, + 0.01957682, + -0.0073989057, + 0.013468115, + -0.030464534, + 0.009860819, + 0.005628171, + 0.0079321, + -0.00002769344, + 0.021617442, + 0.028042115, + -0.002312158, + 0.014284364, + -0.004792174, + 0.003060935, + 0.0158642, + -0.024158347, + -0.0265676, + 0.009274962, + 0.018984381, + 0.00787944, + 0.0052200463, + -0.0061909882, + -0.013468115, + 0.01179612, + -0.025619699, + 0.014968961, + -0.0010984808, + 0.020156093, + -0.00038343974, + 0.0022232921, + -0.016180169, + -0.019050207, + -0.0072475043, + -0.018997546, + 0.01516644, + 0.020932848, + 0.0061547835, + -0.028621389, + 0.0019451749, + 0.009090648, + 0.008978743, + -0.014218537, + 0.013784082, + 0.04183936, + 0.014942629, + 0.014600332, + -0.6736427, + -0.040312186, + 0.000431164, + -0.013277218, + 0.028753042, + 0.015126944, + 0.022446858, + -0.0015321132, + -0.009228884, + 0.01224374, + -0.016193334, + 0.014310694, + 0.0010392369, + -0.0006257637, + 0.0054274, + -0.024053026, + 0.0031086593, + -0.0096830875, + 0.016469806, + -0.0012836179, + -0.0061909882, + 0.013290383, + -0.017430874, + 0.008307312, + 0.026620261, + -0.024105687, + 0.002277599, + -0.02446115, + -0.01273744, + 0.04162872, + -0.012941502, + 0.048658993, + 0.03451945, + -0.004943575, + 0.042787265, + -0.014863637, + -0.0048777484, + 0.03754747, + 0.022762826, + 0.05397778, + -0.005786155, + -0.012691361, + 0.006177823, + -0.009005073, + -0.0030197934, + -0.01288884, + 0.032228686, + -0.032886952, + 0.014679323, + -0.015535069, + 0.0120660085, + -0.02446115, + -0.0158642, + 0.010861383, + -0.0043215137, + 0.0062173186, + 0.019945448, + -0.011223429, + -0.0026445822, + 0.0011503191, + 0.0012432992, + 0.014955794, + -0.002351654, + -0.0156008955, + -0.0024849528, + 0.0016341445, + -0.038548034, + -0.01729922, + 0.0031432183, + -0.015679887, + 0.016588293, + 0.028147439, + -0.007517393, + 0.0014317278, + 0.011032532, + 0.027726147, + 0.009623843, + -0.008320478, + -0.008537705, + -0.02218355, + -0.003992381, + 0.018181296, + -0.0136919245, + -0.017259724, + 0.00014378989, + -0.038416382, + -0.032965943, + 0.025619699, + 0.009900315, + -0.0071750954, + 0.018971216, + 0.014613497, + 0.0022035441, + 0.022565346, + -0.0030428327, + 0.0129809985, + -0.003179423, + 0.004854709, + 0.0069578676, + -0.03157042, + -0.010229448, + -0.0031942339, + -0.005940847, + -0.011453822, + 0.0127440225, + -0.014613497, + -0.030490864, + -0.0042392304, + 0.038442712, + -0.014889969, + 0.028963687, + -0.010604659, + -0.023855546, + -0.0016423727, + 0.013639264, + -0.02047206, + 0.02572502, + -0.010630989, + 0.03451945, + -0.019668976, + 0.013277218, + 0.0069578676, + 0.0246323, + 0.0053319517, + -0.0029572584, + 0.014982126, + 0.0022232921, + -0.00054841756, + -0.0065267035, + -0.012987581, + 0.00051015586, + 0.018233957, + -0.016733112, + -0.012711109, + 0.012474134, + -0.0064115073, + 0.0027350937, + 0.0014638181, + 0.023565909, + -0.013106069, + -0.048237704, + -0.020985508, + -0.006230484, + 0.0039594676, + -0.0100451335, + -0.021920245, + -0.0016917427, + 0.0023993782, + -0.010703399, + 0.008438965, + -0.004344553, + -0.0032370212, + -0.013560272, + 0.013955231, + -0.016680451, + -0.0035546343, + 0.011677632, + -0.009847654, + -0.020564217, + 0.00579932, + 0.009873984, + 0.014468678, + -0.030701509, + -0.00308562, + 0.003531595, + -0.010005637, + 0.005644628, + 0.003531595, + 0.02215722, + -0.015653556, + -0.023631737, + -0.027647156, + -0.017154401, + 0.02954296, + -0.0027844636, + -0.008735185, + 0.005206881, + -0.0034460204, + 0.016746277, + -0.0069578676, + -0.0033193044, + -0.0032567692, + -0.03615195, + 0.009873984, + 0.027594496, + -0.012869093, + 0.013836743, + 0.014982126, + -0.004713182, + 0.0073594097, + -0.017694179, + 0.0340455, + 0.01095354, + 0.0028683925, + 0.010933792, + -0.013744586, + 0.017351883, + 0.011901442, + -0.0020373322, + 0.01980063, + 0.022065064, + -0.0078070303, + 0.006520121, + -0.033360902, + 0.026027823, + -0.022012403, + 0.0010589848, + -0.008195407, + 0.009821323, + -0.009834488, + 0.0116249705, + -0.012632118, + -0.01452134, + -0.0033176588, + -0.005197007, + 0.02091968, + 0.0053286604, + 0.009992472, + 0.0051015588, + 0.009511938, + 0.01918186, + -0.029569292, + 0.018892223, + -0.022828652, + -0.004433419, + -0.0027449676, + 0.014402851, + 0.029727275, + 0.0025688815, + 0.0005064531, + -0.036494248, + -0.01578521, + -0.006990781, + -0.002958904, + 0.0004784768, + -0.011434074, + 0.0011700671, + -0.023500083, + 0.01727289, + 0.004453167, + 0.02322361, + -0.0053681564, + 0.019458331, + -0.0119936, + 0.009103813, + -0.01107861, + 0.035651665, + -0.00025980923, + -0.017825833, + 0.028674051, + -0.01937934, + -0.018892223, + -0.008188824, + 0.008616697, + 0.0037850274, + -0.01105228, + 0.004301766, + 0.0143238595, + -0.0011338625, + 0.036072955, + 0.016311822, + 0.0018233957, + 0.0014885032, + -0.0079781795, + 0.0073396615, + -0.007293583, + 0.017786337, + -0.009228884, + 0.003521721, + -0.005177259, + -0.012829597, + 0.0031958795, + -0.007984762, + -0.0055590533, + 0.0055623446, + -0.009228884, + -0.01606168, + -0.0040285857, + 0.013389123, + -0.000023720704, + 0.0019534032, + -0.04347186, + 0.012039678, + -0.009097231, + -0.008702272, + -0.014495009, + -0.022736495, + -0.0049304096, + -0.018523594, + 0.030569855, + 0.010170204, + 0.009841071, + -0.007451567, + -0.0072540874, + -0.012072591, + -0.010163621, + 0.018826397, + -0.028937357, + -0.019023877, + 0.0033867767, + 0.008346808, + -0.007945266, + 0.015324424, + -0.02044573, + 0.03625727, + -0.009037987, + -0.0035447604, + -0.018944884, + -0.0015938256, + -0.003943011, + 0.01030844, + -0.0061514922, + -0.01338254, + 0.016509302, + -0.004170113, + -0.0028058572, + -0.025145747, + 0.0059210993, + 0.013310131, + 0.0017081993, + -0.0181418, + -0.01606168, + -0.023855546, + -0.021275144, + 0.075937524, + -0.008853673, + 0.018523594, + 0.011822451, + 0.014797811, + 0.0104400925, + -0.0120660085, + -0.0158642, + -0.003531595, + -0.011124689, + 0.0035941303, + 0.0005315495, + 0.0029572584, + 0.00066978525, + 0.0017213646, + -0.0223547, + -0.0074054883, + -0.016272327, + 0.007234339, + -0.015113778, + 0.013547107, + 0.006753805, + -0.008629862, + 0.038100414, + 0.008234903, + 0.017430874, + 0.008511375, + 0.035704326, + 0.02577768, + -0.0127769355, + -0.0035447604, + 0.03675755, + -0.020063937, + 0.008991908, + -0.0012013348, + -0.0007475429, + 0.032623645, + 0.013955231, + -0.018813232, + 0.0032386668, + 0.005424109, + 0.017983817, + 0.02039307, + -0.009314459, + 0.014863637, + -0.014863637, + 0.00021023359, + 0.010512502, + -0.0061416184, + -0.000029621953, + 0.036915537, + 0.022762826, + -0.026909899, + -0.0143238595, + -0.016088013, + 0.034782756, + 0.009360537, + -0.0057137455, + 0.01105228, + 0.0040252944, + -0.0022446858, + -0.02292081, + 0.0073659923, + -0.0129020065, + -0.028884696, + -0.033913843, + -0.0063983416, + -0.019708473, + -0.026778245, + 0.000012953176, + 0.0053615733, + -0.017615188, + -0.02215722, + 0.009933229, + 0.022473188, + -0.0034558945, + 0.020287747, + -0.032807957, + -0.0036731223, + 0.021893915, + 0.009426364, + -0.03117546, + -0.011894859, + -0.0052233376, + -0.0068525453, + 0.018918553, + 0.025409052, + -0.02091968, + -0.018497264, + -0.0029128254, + 0.0265676, + 0.0075766374, + 0.008169076, + -0.0016563609, + -0.023355264, + 0.0060428786, + 0.018273454, + 0.026449112, + -0.013422036, + -0.016733112, + 0.025330061, + 0.00009375143, + 0.007392323, + -0.0031168878, + 0.01682527, + -0.0012646929, + 0.015614061, + 0.0040779556, + -0.008307312, + 0.00032584148, + 0.04834303, + -0.021670105, + 0.010920627, + -0.00078292465, + -0.022565346, + 0.020748531, + 0.016193334, + 0.03375586, + -0.0074384017, + -0.010473006, + 0.003551343, + -0.022710163, + 0.025119416, + 0.023210445, + 0.006971033, + -0.03154409, + 0.008195407, + -0.009827905, + -0.007155347, + -0.016640956, + -0.019524159, + 0.015311258, + -0.00916964, + -0.020458896, + -0.046947505, + -0.0056117144, + -0.02342109, + 0.0168516, + -0.01273744, + -0.02064321, + -0.0018579547, + -0.00014049857, + 0.004779008, + 0.006088957, + -0.010301857, + -0.016719947, + 0.0117500415, + 0.0037586966, + -0.00025919208, + 0.0028058572, + 0.014639827, + 0.020063937, + -0.0021130326, + 0.008906334, + -0.0034756425, + -0.035388358, + -0.020880185, + -0.011256342, + 0.009577765, + 0.00864961, + 0.020735366, + 0.02544855, + 0.018049642, + -0.010986453, + -0.01244122, + 0.0024635592, + -0.021235649, + -0.00031411613, + -0.016311822, + 0.00914331, + 0.01625916, + 0.027857801, + -0.022762826, + -0.007997927, + -0.008366556, + 0.024987763, + -0.011190516, + -0.014481843, + -0.011651302, + -0.03907465, + -0.0026248342, + -0.0064049247, + 0.0016004083, + -0.0037652794, + 0.006289728, + -0.002081765, + 0.022091394, + -0.014402851, + -0.009742331, + -0.013448367, + 0.019142365, + 0.003380194, + 0.019484662, + 0.008491627, + -0.0032633517, + -0.010038551, + -0.023763388, + 0.004351136, + -0.0047987564, + 0.0002133192, + 0.008109832, + -0.021051334, + 0.00520359, + -0.0019484663, + 0.0052990383, + 0.03446679, + 0.008188824, + -0.013797248, + 0.008873421, + -0.012566291, + -0.031149128, + -0.017088575, + -0.015324424, + -0.025659194, + 0.007813613, + 0.03117546, + -0.0018694743, + 0.040233195, + -0.023263106, + -0.016088013, + 0.014942629, + -0.008208572, + 0.022460023, + 0.006911789, + 0.04581529, + 0.010604659, + -0.0048876223, + -0.021340972, + -0.011987017, + -0.015442912, + -0.0077280384, + -0.006148201, + 0.0102097, + 0.0019369465, + -0.03615195, + 0.008465296, + 0.02485611, + -0.010288692, + -0.008807594, + 0.024553308, + 0.0030494155, + -0.0042820177, + -0.018707909, + -0.016561963, + -0.0036764136, + 0.022446858, + -0.02668609, + -0.01296125, + -0.0052002985, + -0.0128230145, + -0.008445548, + 0.010492754, + -0.025066756, + 0.0035645084, + 0.023236776, + -0.02698889, + 0.008866838, + -0.019142365, + -0.014192207, + 0.0008812531, + -0.001876057, + 0.029148001, + 0.0027729438, + 0.00617124, + -0.013428618, + 0.014810977, + -0.002777881, + 0.0064246724, + -0.020630045, + 0.025830343, + -0.012276654, + -0.020287747, + -0.006898624, + -0.008175659, + 0.009966142, + 0.0054043606, + -0.0045157024, + -0.006421381, + -0.021788592, + -0.0028700382, + 0.036915537, + 0.0102097, + -0.018220792, + -0.01679894, + -0.005325369, + -0.019366175, + -0.010946957, + -0.0041371994, + -0.019313512, + -0.023486918, + -0.018457768, + -0.010881131, + 0.00308562, + 0.014508175, + -0.0045025367, + -0.005980343, + 0.02109083, + 0.011493318, + -0.027568163, + 0.018879058, + 0.02059055, + 0.023881877, + -0.004897496, + 0.020261416, + -0.005851981, + -0.01477148, + 0.011605223, + 0.0025639446, + -0.00039681073, + -0.027647156, + 0.020090267, + 0.019247686, + 0.0168516, + 0.023355264, + 0.029305985, + -0.026370121, + 0.0015855973, + -0.031149128, + -0.02213089, + 0.00021599341, + 0.010525667, + 0.004867874, + 0.02448748, + -0.030569855, + 0.014824142, + 0.028331753, + -0.020340407, + 0.007675377, + -0.027594496, + -0.01283618, + 0.007102686, + -0.0035184298, + -0.007971597, + -0.023131454, + -0.016469806, + 0.005516266, + -0.0032057536, + 0.004963323, + 0.00080267264, + 0.0005689883, + 0.0024668504, + 0.03035921, + -0.0150479525, + 0.0008861901, + -0.010551997, + -0.019129198, + -0.01117735, + 0.0018612461, + -0.03199171, + -0.023802884, + -0.01169738, + 0.01679894, + 0.008544288, + -0.028911026, + -0.04170771, + -0.00034332665, + -0.022249378, + -0.0010556935, + -0.021512121, + 0.0074054883, + 0.02213089, + -0.008735185, + 0.010940375, + 0.018576255, + 0.006230484, + 0.0126189515, + -0.015350754, + -0.024303166, + 0.007971597, + -0.016575128, + 0.04299791, + 0.000023245004, + -0.022960305, + -0.022051899, + 0.030464534, + 0.013402288, + 0.0052792905, + 0.0038278145, + -0.03199171, + 0.006760388, + -0.010328188, + -0.0028338335, + -0.005578801, + 0.0009520167, + 0.006760388, + -0.038916662, + 0.008261234, + 0.0013222911, + -0.012803267, + -0.005697289, + 0.009873984, + 0.0014193852, + 0.012079174, + 0.025790848, + -0.016548797, + -0.026383286, + 0.0045157024, + -0.019221356, + 0.005489935, + 0.0000777062, + -0.0070961034, + 0.009617261, + -0.01276377, + -0.018036477, + -0.023078792, + 0.014731985, + -0.025685525, + -0.013797248, + 0.011302421, + 0.0033571546, + -0.014258034, + -0.01918186, + 0.003913389, + -0.022723328, + 0.008307312, + 0.0013247596, + -0.03401917, + -0.0030905572, + 0.017417708, + 0.010802139, + -0.013520776, + -0.02342109, + 0.004973197, + 0.0084521305, + 0.011565727, + -0.007168513, + 0.019919118, + -0.024842944, + 0.0022578512, + -0.008656193, + -0.017773172, + -0.046921175, + -0.016351318, + 0.0039561763, + 0.00021002788, + 0.0056413366, + 0.23507982, + 0.0023549453, + -0.0056512104, + 0.03420348, + 0.009439529, + 0.035309367, + 0.012507047, + -0.006059335, + -0.011256342, + 0.01982696, + -0.0229998, + -0.0013823578, + -0.003281454, + -0.0046572294, + 0.012467551, + -0.024948267, + -0.023039296, + -0.022644337, + -0.03243933, + -0.013560272, + 0.017338717, + -0.005226629, + 0.001489326, + -0.010604659, + -0.003130053, + 0.020801194, + -0.026054153, + -0.0023944413, + 0.023328934, + 0.028805703, + 0.0076687946, + 0.011940938, + -0.0018447894, + 0.0073462445, + 0.009854237, + -0.002988526, + 0.02361857, + -0.0013510901, + 0.00052249833, + 0.005358282, + -0.023763388, + -0.0008664421, + 0.011835616, + -0.006352263, + 0.0051838416, + 0.0012745669, + 0.008801011, + 0.0067373486, + -0.0062864367, + 0.024290001, + -0.017365048, + 0.005888186, + 0.03249199, + 0.027752478, + 0.00022319319, + -0.00453545, + 0.029648283, + -0.019432, + -0.0073594097, + 0.00091334357, + -0.014705654, + 0.030885823, + -0.021841254, + 0.017259724, + -0.021393633, + -0.0061284527, + -0.030069573, + -0.000862328, + -0.0015066054, + -0.025935665, + 0.007997927, + -0.030517194, + -0.02109083, + -0.005907934, + -0.032281347, + -0.023434255, + 0.017509865, + 0.010802139, + 0.012842762, + 0.02909534, + -0.015074283, + 0.006421381, + -0.00007791191, + 0.009709418, + -0.00083147176, + -0.019537324, + 0.007675377, + 0.0021821505, + 0.0040680817, + -0.0112760905, + 0.0030773918, + -0.02059055, + -0.0009799929, + -0.030464534, + -0.0019846708, + -0.0014531213, + -0.011190516, + 0.014705654, + 0.0034756425, + 0.0046901423, + -0.010380849, + -0.001915553, + 0.020735366, + 0.010894296, + -0.0070171114, + -0.0100451335, + 0.026580766, + -0.00047971107, + -0.0022216465, + -0.022288874, + -0.009505356, + -0.031860057, + 0.007622716, + -0.010644155, + -0.0027416763, + 0.0155219035, + -0.010881131, + -0.014982126, + 0.009702835, + -0.01053225, + 0.030464534, + -0.02693623, + -0.015693052, + -0.00041018176, + -0.017549362, + -0.013250887, + 0.017259724, + -0.019695308, + -0.0037652794, + -0.042050008, + 0.017391378, + 0.010466424, + 0.022499518, + -0.009340789, + 0.013244304, + 0.016509302, + 0.000004605931, + -0.011842199, + -0.0069183717, + 0.00055623444, + 0.009149892, + -0.00929471, + 0.01937934, + 0.016298657, + -0.011769789, + -0.013211391, + 0.01603535, + 0.0007997927, + -0.013171895, + 0.020998674, + -0.0025392596, + -0.035520013, + -0.015943194, + -0.009538269, + 0.039522268, + -0.0030823287, + -0.023328934, + 0.00369287, + 0.014810977, + 0.013626099, + -0.03209703, + -0.0029967541, + 0.016601458, + -0.032176025, + -0.03828473, + -0.008583784, + -0.17030647, + -0.007965014, + 0.009380285, + -0.031149128, + 0.013955231, + 0.0028042116, + 0.005878312, + 0.0029556127, + -0.010380849, + -0.0013659012, + 0.032413, + 0.017207064, + -0.010973288, + -0.035441022, + 0.0050719366, + -0.020169258, + -0.019432, + 0.006599113, + 0.024803448, + 0.0019747969, + 0.021577947, + -0.011124689, + 0.0027153457, + -0.0005368979, + -0.0026561017, + 0.03157042, + -0.009755497, + -0.008017675, + -0.0067735533, + -0.015666721, + -0.017259724, + 0.0035381778, + 0.015153275, + 0.024092522, + -0.004301766, + -0.0013823578, + -0.024579639, + -0.00919597, + -0.004522285, + 0.013560272, + -0.010848218, + 0.00803084, + 0.0009824614, + -0.01157231, + -0.0059869257, + 0.010802139, + 0.011282673, + -0.008866838, + -0.006056044, + -0.006572782, + 0.017970651, + -0.011842199, + 0.0012564645, + 0.019010711, + 0.022446858, + 0.00192049, + 0.0036237522, + 0.018102305, + 0.0132969655, + 0.0091301445, + -0.01876057, + -0.009505356, + 0.013981562, + -0.0026890151, + -0.020182423, + -0.011756624, + 0.008366556, + 0.022315204, + -0.02317095, + 0.01980063, + 0.0051476373, + 0.003712618, + -0.01747037, + -0.009452694, + 0.01960315, + -0.00079362147, + -0.009176223, + 0.03580965, + 0.0105980765, + -0.013211391, + -0.020774864, + 0.044525087, + -0.021275144, + 0.005977052, + 0.0022051898, + 0.026093649, + 0.0030066282, + -0.0076095504, + -0.01606168, + -0.021591112, + 0.01231615, + -0.008419218, + -0.0066089868, + -0.006984198, + 0.0009939811, + 0.0013988145, + -0.021670105, + 0.03831106, + -0.0012054489, + -0.000015813803, + -0.00014574412, + -0.014429183, + -0.007221174, + 0.022065064, + 0.01253996, + 0.018800067, + 0.016772607, + 0.016970087, + 0.0046802685, + 0.00016559495, + -0.027410181, + -0.009643591, + 0.011223429, + 0.006500373, + -0.012230575, + 0.0136919245, + 0.019037042, + -0.015298093, + 0.021591112, + 0.006483916, + 0.02128831, + -0.0132969655, + 0.013125816, + -0.0001234248, + -0.014363356, + -0.013448367, + -0.058822617, + -0.009472442, + 0.009419781, + 0.01727289, + -0.010782391, + 0.04839569, + 0.02091968, + 0.028358083, + -0.0082151545, + -0.003041187, + 0.0043708836, + -0.029990582, + 0.0022627881, + -0.00020848507, + 0.045393996, + 0.0010836698, + 0.011710545, + -0.00028531702, + 0.004094412, + 0.01957682, + -0.009841071, + -0.0037455314, + -0.014350191, + -0.013705091, + -0.0076292986, + 0.0022315204, + -0.0174967, + 0.008564035, + 0.015772045, + 0.01851043, + 0.02698889, + -0.0068130493, + 0.0005599372, + -0.013033659, + -0.004252396, + 0.005878312, + -0.022367865, + 0.005684124, + 0.0379161, + -0.029964251, + -0.0014539441, + 0.0057664067, + 0.0010647447, + -0.013705091, + -0.016601458, + -0.0008664421, + -0.021472625, + 0.019010711, + 0.03754747, + -0.020656375, + -0.019682143, + -0.003771862, + 0.00010809956, + -0.0084258, + 0.028647719, + -0.0015600895, + 0.020208754, + 0.00874835, + -0.025040423, + 0.007602968, + 0.01918186, + 0.006780136, + -0.0116710495, + 0.003972633, + 0.021419963, + 0.0015806603, + -0.015930029, + -0.026383286, + 0.020300912, + -0.0024997636, + -0.01305999, + -0.00023512426, + -0.010492754, + 0.0063983416, + -0.0106770685, + -0.034756426, + -0.020774864, + -0.006158075, + -0.0008236549, + -0.021999236, + 0.010670486, + -0.041102104, + -0.004637481, + 0.0011009492, + 0.0013025431, + 0.020551052, + 0.012263489, + -0.013277218, + 0.016088013, + -0.01288884, + 0.020169258, + 0.0053944867, + 0.03425614, + -0.03167574, + -0.009222302, + 0.029305985, + 0.005486644, + 0.02213089, + 0.0052134637, + 0.02086702, + -0.01519277, + -0.031781062, + -0.09600146, + 0.007221174, + 0.016522467, + -0.0017065536, + 0.007129017, + -0.017378213, + 0.020959178, + -0.0049995272, + 0.010512502, + -0.02059055, + -0.037758116, + 0.009261797, + -0.004005546, + -0.01980063, + -0.03151776, + -0.0017888368, + 0.028121108, + 0.01600902, + 0.017773172, + 0.02294714, + 0.015574564, + 0.0032732259, + 0.008392886, + -0.00049411063, + -0.03633626, + 0.011565727, + 0.0028535814, + 0.03170207, + -0.01224374, + 0.013053407, + 0.0015288219, + -0.026778245, + 0.015877366, + 0.03154409, + -0.014982126, + -0.010196535, + 0.004933701, + 0.014587166, + 0.018721074, + 0.03580965, + -0.034861747, + 0.0108350525, + 0.02002444, + -0.0059968, + -0.015679887, + 0.005233212, + 0.015574564, + 0.018233957, + 0.035362028, + -0.007793865, + 0.013402288, + 0.030622516, + -0.004170113, + -0.006559617, + -0.0077280384, + -0.03654691, + 0.010762643, + -0.0021969615, + -0.0050686453, + -0.010453258, + 0.02361857, + 0.01045984, + 0.01732555, + 0.007352827, + 0.014982126, + -0.007352827, + -0.017694179, + 0.007155347, + 0.01876057, + -0.0053418255, + -0.03459844, + 0.006161366, + 0.014337026, + 0.02901635, + 0.019853292, + -0.013448367, + -0.01598269, + -0.0099200625, + -0.019432, + 0.019339845, + 0.0040483335, + -0.019168695, + -0.0340455, + 0.021314641, + 0.028963687, + -0.010315022, + -0.012553126, + -0.015205936, + -0.009235467, + 0.034756426, + -0.005726911, + -0.009933229, + 0.012164748, + -0.00612187, + 0.019932283, + 0.03246566, + 0.006589239, + -0.01789166, + 0.035888642, + -0.0072870003, + 0.0023138036, + 0.016167004, + 0.013112651, + -0.0021574656, + -0.02339476, + 0.013560272, + -0.014113215, + -0.0217096, + 0.00916964, + 0.0014917945, + 0.006602404, + 0.008346808, + 0.009064318, + 0.028121108, + 0.0064345463, + 0.0040252944, + -0.016127508, + -0.02954296, + -0.01603535, + -0.0060922485, + 0.013836743, + 0.013586602, + 0.013652429, + -0.005506392, + 0.014995291, + -0.00966334, + 0.008208572, + -0.030648848, + 0.007826778, + 0.001890868, + 0.0050324406, + 0.0070566074, + -0.000534018, + -0.007115851, + -0.019129198, + 0.0075108106, + 0.012052843, + 0.011677632, + -0.0062568146, + 0.03617828, + 0.018194461, + -0.00322221, + 0.0031168878, + -0.0024717874, + 0.019260852, + 0.0057400763, + 0.012204245, + -0.0030839744, + -0.032202356, + 0.027410181, + -0.0021969615, + 0.013270635, + -0.014402851, + -0.01224374, + -0.026409617, + -0.0015329361, + 0.016693616, + -0.0034163985, + 0.0076095504, + 0.025514375, + -0.006266689, + 0.02002444, + 0.0073594097, + -0.011164185, + -0.009926646, + 0.026554435, + 0.0021327806, + 0.009518521, + -0.0156008955, + 0.013547107, + 0.0011050634, + -0.0252774, + -0.024763953, + 0.009623843, + 0.00852454, + -0.0008680878, + 0.006342389, + 0.007945266, + 0.008616697, + -0.0037586966, + 0.020801194, + -0.016601458, + -0.014271199, + 0.019168695, + -0.01851043, + 0.004301766, + 0.0047822995, + -0.003248541 + ] + }, + { + "object": "embedding", + "index": 5, + "embedding": [ + 0.0021845475, + 0.008128393, + 0.0016116065, + -0.0032902234, + -0.03658782, + 0.004707499, + -0.017878445, + -0.0045868796, + 0.010058301, + -0.03318368, + -0.004885077, + 0.0063559613, + 0.019768145, + -0.014166054, + -0.02752798, + -0.01904443, + 0.02173826, + -0.025544465, + -0.0021460163, + -0.026670244, + -0.00603431, + 0.033022854, + -0.012115528, + -0.020331034, + 0.0038229583, + 0.005575287, + -0.002809422, + -0.015680496, + -0.0014516185, + -0.011733566, + 0.01049387, + 0.0016526504, + 0.009689742, + -0.021537228, + 0.0055250293, + -0.02439188, + -0.014233065, + -0.009863969, + -0.016993904, + -0.020331034, + 0.019392885, + -0.018722778, + -0.008249013, + -0.00634926, + -0.007458287, + 0.01150573, + 0.0060008047, + 0.005149769, + -0.011840784, + 0.013227904, + 0.023560949, + 0.014005228, + -0.017865043, + -0.0012363467, + -0.000084129795, + -0.009046439, + -0.023467133, + -0.013817598, + -0.01125109, + -0.0092072645, + 0.0038665151, + 0.005173223, + -0.018092878, + -0.0010579309, + -0.0025363537, + -0.009488709, + -0.006342559, + 0.008007774, + -0.03224553, + -0.011780474, + 0.010949542, + 0.021698052, + -0.008604169, + -0.0045734774, + 0.038732164, + 0.003682236, + -0.031655837, + -0.00010491357, + 0.011793876, + -0.00007125118, + 0.021255782, + -0.018856801, + 0.0066709113, + 0.015613484, + 0.0046203854, + 0.015626887, + -0.016136168, + 0.025785703, + -0.008222208, + -0.00311097, + 0.010916037, + 0.008966027, + -0.00591034, + 0.004627086, + -0.030127993, + -0.025343433, + 0.0064765806, + 0.018883605, + -0.0061549293, + -0.043128062, + -0.0096562365, + 0.02161764, + -0.011874289, + -0.018012466, + -0.030020777, + 0.014045435, + 0.010835624, + -0.01521142, + 0.0017339009, + 0.011137172, + 0.0020287477, + 0.03181666, + -0.006838438, + -0.039080616, + -0.032272335, + -0.018374324, + 0.014460901, + -0.011512431, + -0.019567113, + -0.026817666, + 0.017784629, + 0.017302154, + -0.00015025047, + 0.001991892, + 0.018709376, + -0.003588421, + -0.017597, + -0.0056523494, + 0.0057461644, + 0.002444214, + 0.020974336, + 0.02299806, + 0.017865043, + 0.0012505865, + -0.014809356, + 0.015546474, + -0.021322792, + 0.010574282, + -0.0115928445, + -0.012209343, + 0.021135163, + 0.017985662, + -0.013790794, + 0.0056422977, + 0.0020320984, + 0.017717618, + 0.027259937, + 0.02180527, + 0.018803192, + -0.0025631578, + 0.008456745, + -0.005022449, + 0.006278899, + 0.008470148, + 0.016417611, + 0.0046203854, + 0.0141124455, + 0.01740937, + 0.0044160024, + 0.0034778533, + 0.009783557, + -0.003551565, + 0.009763453, + 0.008510354, + 0.0048281183, + 0.013650072, + 0.022555789, + 0.018937213, + 0.017114524, + 0.00068392756, + -0.014702139, + 0.03004758, + -0.0020220468, + 0.02445889, + 0.017422773, + 0.010373251, + 0.013710381, + 0.00414796, + -0.023668166, + -0.0054144613, + -0.033290897, + -0.0002041731, + 0.007310863, + 0.007994372, + 0.0028931852, + -0.007310863, + 0.0182269, + 0.00855056, + 0.006406219, + -0.013026873, + 0.0058734845, + 0.038303293, + 0.03229914, + 0.025115596, + -0.6776118, + -0.042752802, + -0.007404678, + -0.0079005575, + 0.019218657, + 0.028224891, + 0.010225827, + 0.012276353, + 0.004741004, + -0.005776319, + -0.018977419, + 0.032593984, + 0.0061448775, + 0.0013418884, + 0.008872212, + -0.015801115, + -0.013274812, + -0.015787711, + 0.006881995, + 0.006272198, + -0.0101990225, + 0.024445489, + -0.0063593118, + 0.0055149775, + 0.02238156, + -0.030127993, + 0.013650072, + -0.013965022, + -0.013375328, + 0.016055755, + -0.030181602, + 0.036346585, + 0.0028747574, + -0.016953697, + 0.051705427, + -0.008148496, + -0.010708304, + 0.024043426, + 0.008899016, + 0.045808487, + 0.00094987615, + -0.028064065, + 0.023614557, + -0.018561954, + -0.024525901, + 0.007518596, + 0.020156806, + -0.01941969, + 0.010400055, + -0.013670175, + -0.0028077466, + -0.029216649, + -0.02708571, + -0.011425318, + 0.010507272, + -0.0069356035, + 0.0069356035, + -0.007257255, + -0.0017523288, + 0.003129398, + -0.005990753, + 0.020625882, + -0.039482683, + -0.012678417, + -0.0042216717, + -0.0014733969, + -0.04393219, + 0.0018210147, + 0.018025868, + 0.008188703, + -0.0077062263, + 0.007679422, + -0.009642834, + 0.008919119, + 0.038169272, + 0.022220735, + 0.01754339, + -0.026201168, + -0.016833078, + -0.011948001, + 0.010916037, + -0.003608524, + -0.013180997, + -0.0049755415, + 0.005129666, + -0.015305235, + -0.023172287, + 0.0044294046, + 0.009750051, + -0.022033105, + 0.017717618, + 0.009863969, + 0.012953161, + 0.018066075, + -0.016296992, + 0.01584132, + -0.019727938, + 0.0044160024, + 0.02218053, + -0.027032102, + -0.00004824244, + -0.013100584, + -0.0007304162, + -0.0108289225, + -0.012805738, + -0.0069222013, + -0.024793945, + 0.00204215, + 0.0119413, + -0.02439188, + 0.0043020844, + -0.012336663, + -0.02376198, + -0.0043858476, + 0.019821754, + -0.03211151, + 0.0099711865, + -0.0062185894, + 0.00798097, + -0.00011171934, + 0.0141124455, + -0.01011861, + 0.038624946, + -0.008537158, + -0.00072622806, + 0.030690882, + 0.01062119, + -0.003323729, + -0.009629432, + 0.0056221946, + -0.007217048, + 0.018883605, + 0.012497488, + -0.0067144684, + 0.0038162572, + -0.0101521155, + 0.0037123905, + -0.00008203571, + 0.01539905, + -0.041519806, + -0.0439858, + -0.0067647262, + 0.019513505, + -0.000016072088, + -0.0036286274, + -0.023426928, + -0.017020708, + 0.0007655968, + -0.011432019, + 0.037499167, + -0.0029266907, + -0.011170677, + -0.03280842, + 0.01998258, + 0.0015110904, + -0.013469143, + 0.0014717217, + -0.012939759, + -0.0008837031, + -0.012329962, + 0.0088923145, + 0.0014859614, + -0.029136235, + 0.019768145, + 0.00710313, + -0.00066549965, + 0.013643371, + 0.0067044166, + 0.010440261, + -0.026335191, + -0.018709376, + -0.011988208, + 0.004657241, + 0.01766401, + 0.013221203, + 0.004784561, + 0.0005616331, + -0.0073510697, + -0.0053206463, + -0.025450649, + 0.010567581, + -0.03776721, + -0.02502178, + 0.0024676677, + 0.014621726, + -0.008852108, + 0.004013939, + 0.017141327, + -0.016859882, + 0.0012489113, + -0.017422773, + 0.012236147, + 0.01326141, + 0.005866783, + 0.021644443, + -0.008429941, + 0.00035390005, + 0.010279436, + 0.006895397, + 0.019245462, + 0.014715541, + -0.010373251, + 0.014099043, + -0.018334117, + 0.029297061, + -0.04141259, + -0.006868593, + -0.0132145025, + 0.02520941, + 0.019299071, + 0.0025028482, + -0.010949542, + -0.013938217, + -0.0076191123, + 0.01609596, + 0.015787711, + 0.01614957, + 0.010822222, + -0.004486364, + -0.0038899689, + 0.019634124, + -0.020880522, + 0.013382029, + 0.003796154, + -0.0065469416, + 0.004117805, + 0.0009054816, + 0.023239298, + 0.02224754, + 0.0017925352, + -0.005776319, + -0.010259332, + -0.01017892, + 0.017865043, + 0.005769618, + -0.014594922, + 0.012651613, + -0.010574282, + 0.038356904, + 0.0021644444, + 0.019701134, + 0.0047477055, + 0.027849631, + -0.010534076, + -0.011083564, + -0.0082155075, + 0.033961, + -0.008376333, + 0.0031578774, + 0.0065770964, + -0.018159889, + -0.0060376604, + -0.008751593, + 0.0012732026, + 0.009756752, + -0.017516587, + -0.0041446094, + 0.007585607, + 0.004298734, + 0.045594055, + 0.0017439525, + -0.00090799446, + 0.0010947867, + -0.011867588, + 0.005990753, + 0.008832005, + 0.011318101, + 0.0036889368, + -0.013790794, + -0.0055551836, + -0.026817666, + -0.0124036735, + -0.007404678, + -0.0033170278, + 0.014715541, + -0.018937213, + 0.0024592914, + -0.0026502716, + 0.02275682, + 0.01143872, + -0.014889769, + -0.03640019, + 0.01766401, + -0.005762917, + 0.0034678017, + -0.022783626, + -0.028439324, + 0.003665483, + -0.02841252, + 0.018468138, + 0.011204183, + 0.009482008, + 0.002784293, + -0.010922737, + -0.016176375, + 0.0056925556, + 0.018829996, + -0.03607854, + -0.019513505, + -0.0049688406, + -0.008074785, + -0.006248744, + -0.002023722, + 0.0007999398, + 0.019660927, + 0.003601823, + -0.006587148, + -0.0037291434, + 0.013040274, + -0.00077941775, + 0.019526906, + -0.020786706, + -0.0026201168, + 0.02067949, + 0.003953629, + 0.007954165, + -0.02110836, + -0.0017690815, + 0.031629033, + -0.00032311704, + -0.010815521, + 0.005096161, + -0.024365077, + -0.005119615, + 0.087596335, + 0.0031059443, + 0.013368627, + -0.0042317235, + 0.02570529, + 0.016873285, + -0.006077867, + -0.0048917783, + -0.0030054282, + -0.009287678, + -0.0118608875, + -0.010788716, + 0.009173759, + 0.00867788, + 0.00052980304, + -0.005166522, + -0.008302621, + -0.039080616, + 0.009167058, + -0.0068618916, + -0.003400791, + 0.011659855, + -0.00041232497, + 0.01288615, + -0.013053677, + 0.0100516, + 0.011840784, + 0.033961, + 0.017315555, + -0.011740268, + 0.014876367, + 0.018092878, + 0.0031059443, + -0.0031662537, + -0.006523488, + -0.0013779068, + 0.014795954, + 0.014246467, + -0.0049688406, + -0.0072639557, + 0.013616567, + -0.0015680495, + 0.01137841, + 0.008731489, + 0.021443412, + 0.00008318746, + -0.0087113865, + 0.019969177, + -0.012015012, + 0.0125712, + 0.029243452, + 0.009274276, + -0.026214572, + -0.01665885, + -0.01206862, + 0.020398045, + 0.005618844, + -0.0099711865, + 0.022019703, + 0.026201168, + -0.00515312, + -0.02357435, + -0.004342291, + -0.020639284, + -0.0070294184, + -0.041787848, + 0.0106815, + -0.032888833, + -0.011914495, + -0.019808352, + 0.00760571, + -0.022904243, + -0.0061113723, + 0.02067949, + 0.016511427, + 0.00597065, + 0.02350734, + -0.021765063, + -0.0059572477, + 0.012041816, + 0.009602628, + -0.024485696, + -0.027447566, + -0.01716813, + -0.006406219, + 0.014635129, + 0.017650608, + -0.016484622, + 0.007954165, + 0.009696443, + 0.027688805, + -0.00591034, + 0.015452659, + 0.0073510697, + -0.016189776, + -0.017489783, + 0.010078403, + 0.002017021, + -0.016645448, + -0.014018631, + 0.025249617, + -0.01986196, + -0.008751593, + 0.005317296, + 0.004915232, + -0.016390808, + 0.01728875, + -0.0008204618, + -0.0126717165, + 0.006309054, + 0.021885682, + -0.025812507, + 0.006881995, + 0.019098038, + -0.019151647, + 0.046424985, + -0.00057335995, + 0.022716613, + -0.006121424, + -0.001206192, + 0.01087583, + 0.0007924011, + 0.016109362, + 0.0066508083, + -0.011961403, + -0.008704685, + 0.0055015753, + -0.017462978, + 0.003268445, + -0.0023805539, + -0.00848355, + 0.026321787, + -0.012242848, + -0.03425585, + -0.027608393, + 0.00521678, + -0.017771227, + 0.019071234, + -0.011043357, + -0.02771561, + -0.035220806, + -0.009039738, + 0.012001609, + -0.009220667, + -0.018762985, + -0.021349598, + 0.007833546, + 0.0063392087, + 0.014313477, + 0.011974805, + 0.008161899, + 0.01628359, + -0.02776922, + -0.0029618712, + -0.03294244, + -0.035864107, + -0.022515582, + -0.014795954, + 0.01614957, + 0.009575823, + 0.026268179, + 0.029752733, + 0.007880454, + -0.012946459, + -0.007310863, + 0.0058835363, + -0.0008506166, + 0.009401596, + -0.015760908, + 0.0108289225, + 0.026831068, + 0.029377474, + -0.0030071035, + -0.026335191, + -0.017556794, + 0.020719696, + -0.016940296, + -0.00037693497, + -0.00993098, + -0.019272266, + 0.0018109631, + -0.0045801788, + -0.005297193, + -0.017114524, + 0.0058801854, + 0.008885614, + 0.00006428835, + -0.005045903, + 0.010641293, + -0.010406756, + 0.020974336, + -0.010601087, + -0.015693897, + -0.023172287, + -0.012162435, + 0.011686659, + -0.017449576, + 0.01182068, + 0.0118608875, + 0.010728407, + 0.023091873, + -0.012048517, + -0.01275883, + 0.0040809494, + 0.011043357, + 0.018950615, + 0.0060008047, + -0.017838238, + 0.005002346, + -0.037070297, + -0.023614557, + -0.015613484, + -0.009240771, + -0.026254777, + -0.011076862, + 0.021014543, + 0.0022565841, + 0.02105475, + -0.0073443684, + -0.008664479, + 0.018628964, + 0.008510354, + 0.012979965, + -0.020625882, + 0.02790324, + 0.018267106, + 0.0036889368, + -0.01413925, + -0.01991557, + -0.011887691, + -0.017985662, + 0.02275682, + 0.027876435, + -0.006875294, + -0.023520742, + 0.013871207, + 0.024097035, + -0.02570529, + -0.008249013, + 0.019768145, + 0.027822826, + 0.0019416339, + -0.01991557, + 0.0091603575, + -0.017516587, + 0.021952692, + -0.017503185, + -0.0017154729, + -0.015881527, + -0.010172218, + -0.018508345, + 0.015667092, + -0.023735177, + 0.0015018765, + 0.02652282, + -0.020960934, + 0.011545937, + -0.0008259064, + 0.004623736, + 0.0044093016, + -0.0105139725, + 0.02432487, + 0.01691349, + 0.0034644513, + -0.0037928035, + 0.013341823, + -0.0003802855, + 0.0005612143, + -0.0040273406, + 0.026227973, + -0.006228641, + -0.015988745, + -0.0039502787, + -0.00892582, + -0.0016291967, + -0.0063325074, + 0.0035616166, + 0.0010470416, + -0.016457818, + -0.007330966, + 0.02790324, + -0.0056791534, + -0.0029434434, + -0.017597, + -0.0056925556, + -0.019111441, + -0.004657241, + -0.0054613687, + 0.007592308, + -0.013274812, + -0.020880522, + -0.01923206, + 0.0074515855, + 0.027018698, + -0.008496952, + -0.018937213, + 0.013321719, + 0.011827381, + -0.02790324, + 0.007424781, + 0.010272735, + 0.0055015753, + -0.03256718, + 0.00086527516, + -0.01388461, + -0.010266033, + 0.0063559613, + -0.025504258, + -0.00911345, + -0.02972593, + -0.022676408, + 0.03739195, + 0.008952624, + 0.022207333, + 0.0257723, + -0.022864038, + -0.00070947537, + -0.01558668, + -0.010004692, + 0.008336126, + 0.007987671, + 0.011365009, + 0.024445489, + -0.016833078, + 0.01647122, + 0.0067345714, + 0.00049755414, + -0.0037123905, + -0.024539305, + -0.0327012, + 0.0025179256, + 0.0063593118, + -0.027930044, + -0.01206862, + -0.02047846, + -0.02117537, + -0.0027641898, + -0.0024224354, + 0.008838707, + -0.0005004859, + 0.0133485235, + 0.035408434, + 0.0018746232, + 0.016806275, + -0.01640421, + -0.015975341, + 0.0025815857, + -0.013804196, + -0.01628359, + -0.01125109, + -0.0025514308, + 0.02067949, + 0.009917578, + -0.017275348, + -0.019808352, + 0.019473298, + -0.037847623, + 0.0066005504, + -0.02180527, + 0.021094956, + 0.011948001, + -0.0072438526, + 0.004720901, + 0.027983652, + -0.0069557065, + 0.030556861, + -0.015077399, + -0.009723247, + 0.013026873, + -0.026281582, + 0.04846211, + 0.00021862228, + -0.01175367, + -0.0022214034, + 0.008282518, + 0.020371241, + 0.004312136, + 0.0030188302, + -0.021832073, + -0.0019466598, + -0.0020723047, + -0.0124505805, + -0.018990822, + 0.019580515, + 0.012350065, + -0.04631777, + 0.01439389, + -0.0005499062, + -0.007699525, + -0.0063023525, + -0.0008162736, + -0.0059036394, + -0.00081376074, + 0.022971256, + -0.013341823, + -0.012638211, + 0.0069289026, + -0.027259937, + 0.008604169, + 0.0017112847, + 0.0043255384, + 0.0028730822, + 0.0019081286, + -0.013703681, + -0.027930044, + 0.0004301247, + -0.029699124, + -0.0032918989, + 0.011539236, + -0.0010261007, + -0.009488709, + -0.0106479945, + 0.011217585, + -0.037365146, + -0.018079476, + 0.0029501445, + -0.029645517, + -0.02570529, + 0.018789789, + 0.0027156072, + -0.021537228, + -0.011545937, + -0.0066742618, + 0.0038363603, + -0.012725324, + -0.017382566, + 0.011338204, + -0.027018698, + 0.0024040076, + -0.0073376675, + -0.017690815, + -0.0257723, + 0.005890237, + 0.005437915, + -0.004436106, + 0.0010269384, + 0.23652083, + -0.010527375, + -0.0022599346, + 0.01998258, + -0.0075521017, + 0.017529989, + 0.028358912, + -0.0007073813, + 0.0017389266, + 0.02256919, + -0.017811434, + -0.000539017, + 0.018722778, + -0.004543323, + -0.0062018367, + -0.021832073, + -0.032888833, + -0.02551766, + -0.031012535, + -0.0015412453, + 0.02483415, + -0.015546474, + 0.005632246, + -0.002117537, + 0.0099711865, + -0.011994909, + -0.0017623804, + 0.01162635, + 0.011043357, + 0.024793945, + 0.0027072306, + 0.009327884, + -0.007699525, + 0.0038732162, + -0.006362662, + 0.008999532, + 0.007987671, + -0.012041816, + 0.029886754, + -0.0038330099, + -0.0036889368, + -0.0151042035, + -0.018722778, + 0.0059170416, + -0.0044897143, + 0.0076526175, + 0.007934063, + 0.0074515855, + -0.009736649, + 0.021041349, + -0.040367223, + -0.0007986833, + 0.014045435, + 0.026080549, + 0.012209343, + -0.021523824, + 0.030771296, + 0.0031729548, + -0.015063996, + -0.006121424, + 0.004456209, + 0.030396037, + -0.010728407, + 0.036855865, + -0.02407023, + -0.0011333178, + -0.009917578, + 0.0038531132, + 0.029779539, + -0.012732026, + 0.022515582, + 0.0124036735, + 0.004342291, + -0.021188771, + -0.010741809, + -0.023453731, + 0.027501175, + 0.0157207, + 0.016940296, + 0.041707437, + -0.009012934, + -0.012819139, + 0.008992831, + 0.007585607, + 0.0005260337, + -0.034095023, + 0.012209343, + -0.000043975746, + 0.0129866665, + -0.031575423, + 0.0037425454, + -0.0032835223, + -0.011257791, + -0.020076394, + 0.0021711455, + 0.009951083, + 0.009602628, + 0.01590833, + -0.01118408, + 0.021041349, + -0.015827918, + 0.0021610938, + 0.004895129, + -0.005739463, + -0.017141327, + -0.005990753, + -0.006888696, + 0.011177379, + -0.009461906, + -0.013871207, + 0.0011500705, + -0.03602493, + -0.0048281183, + -0.017570196, + 0.0071366355, + 0.008041279, + -0.02047846, + -0.011793876, + 0.034523893, + -0.021979498, + 0.019848557, + -0.027608393, + -0.013650072, + -0.012524293, + -0.017462978, + -0.010312941, + 0.009977887, + -0.01640421, + 0.0032282386, + -0.048220873, + 0.028305303, + -0.0032667697, + 0.020652685, + -0.0063258065, + -0.0022766872, + 0.02110836, + 0.006543591, + -0.006881995, + 0.012356766, + -0.0020387995, + 0.008986129, + -0.018159889, + 0.035435237, + 0.03640019, + -0.021161968, + 0.0021577433, + 0.02413724, + -0.0026754006, + -0.018508345, + 0.008912418, + -0.0100516, + -0.02149702, + -0.013341823, + -0.02110836, + 0.011351606, + 0.0046203854, + 0.0015035517, + -0.003930175, + 0.003638679, + 0.0019014275, + -0.04135898, + 0.0067647262, + 0.026429005, + -0.0075655035, + -0.036158953, + -0.02752798, + -0.17454937, + 0.027045503, + -0.00021548115, + -0.014487705, + 0.011545937, + 0.034389872, + 0.0079474645, + -0.022287747, + -0.00810829, + 0.015506268, + 0.031253774, + 0.019526906, + -0.005488173, + -0.014889769, + -0.0019684383, + -0.026040344, + -0.028921802, + 0.017556794, + 0.026683645, + 0.013408833, + 0.03042284, + -0.022153724, + -0.0005792234, + -0.016390808, + -0.001614957, + 0.024619717, + -0.009997991, + 0.012892852, + 0.0012313209, + 0.0013779068, + -0.017395968, + -0.019553712, + 0.026965091, + 0.014702139, + -0.004184816, + 0.0040440937, + -0.0077464324, + -0.009951083, + -0.00018270875, + 0.014742346, + -0.012651613, + 0.018923812, + 0.012236147, + 0.0163506, + -0.0012857671, + 0.019098038, + 0.005297193, + -0.0065134363, + -0.010185621, + -0.005380956, + 0.02092073, + -0.00760571, + 0.009066543, + 0.020652685, + 0.020009384, + 0.00019412152, + 0.007813443, + 0.005166522, + 0.012745428, + -0.008369632, + -0.025263019, + -0.016015548, + -0.00033044632, + -0.010507272, + -0.0046940967, + -0.00396033, + -0.021912487, + 0.022033105, + -0.017395968, + 0.010594386, + 0.0061683315, + -0.009924279, + 0.01049387, + -0.016551634, + -0.0039234743, + 0.0008112478, + -0.011425318, + 0.020826913, + 0.0021711455, + -0.015814517, + -0.03310327, + 0.026348593, + -0.03626617, + -0.009187162, + 0.00358172, + 0.03130738, + 0.0019198555, + 0.0101990225, + -0.025624877, + -0.003638679, + 0.022528984, + -0.013375328, + 0.0037525971, + -0.0045600757, + 0.011036656, + 0.022528984, + -0.01363667, + 0.037123907, + -0.025785703, + 0.004858273, + -0.01017892, + -0.005538431, + -0.012021713, + -0.00083763327, + 0.029109431, + 0.0007630839, + 0.020384643, + 0.035810497, + 0.027983652, + -0.012289755, + -0.015131007, + 0.0031913829, + 0.00848355, + -0.0030623872, + -0.016498026, + 0.016256787, + 0.019928971, + -0.013596463, + 0.016632047, + -0.00798097, + 0.029431082, + -0.0092072645, + 0.010473766, + 0.010353147, + -0.02236816, + 0.0056791534, + -0.053930182, + 0.023292907, + 0.005193326, + 0.018977419, + -0.012685118, + 0.037123907, + 0.02112176, + 0.032325942, + -0.00810829, + 0.016136168, + -0.012953161, + -0.011807279, + -0.0028496285, + -0.0005783858, + 0.03444348, + -0.005166522, + 0.0056724525, + 0.004154661, + 0.0010076729, + 0.024432087, + -0.007753134, + -0.011572741, + 0.00078402477, + -0.004111104, + -0.024177447, + 0.019017626, + -0.021403205, + 0.027742414, + 0.0327012, + 0.02187228, + 0.021537228, + 0.0018025868, + 0.014045435, + -0.013562958, + -0.01495678, + 0.014501107, + -0.01017892, + -0.0038531132, + 0.023453731, + -0.033666156, + 0.003085841, + -0.016605241, + -0.019580515, + -0.020947533, + -0.008597468, + 0.016270189, + -0.034148633, + 0.011492329, + 0.014192858, + -0.0033790127, + -0.033773374, + -0.028948605, + -0.013308317, + -0.011425318, + 0.027849631, + -0.010500571, + 0.01074851, + 0.00010899703, + -0.035730086, + -0.0031511763, + -0.0070629236, + 0.0074180802, + -0.041895065, + 0.018535148, + 0.022917647, + 0.008443343, + -0.012557798, + -0.03575689, + 0.01665885, + -0.0011483952, + -0.013234606, + -0.0036621327, + -0.026750656, + -0.00055535085, + -0.019098038, + -0.031226968, + -0.038169272, + 0.003281847, + -0.0016962073, + -0.0050291503, + 0.011445421, + -0.035542455, + -0.020076394, + -0.010292837, + 0.001948335, + 0.042029087, + 0.011137172, + -0.014621726, + 0.008818603, + -0.011579443, + 0.006530189, + 0.008691283, + 0.029752733, + -0.01991557, + -0.016605241, + 0.029002214, + 0.01149903, + 0.023413526, + 0.0010034847, + 0.010279436, + -0.010266033, + -0.026388798, + -0.090973675, + 0.015988745, + 0.026804265, + 0.007585607, + 0.0006826711, + -0.0219929, + 0.009957785, + -0.009012934, + 0.008141795, + 0.00849025, + -0.025343433, + 0.014192858, + -0.0069356035, + -0.016551634, + -0.032272335, + -0.010835624, + 0.011545937, + 0.0033086515, + 0.0074113794, + 0.01747638, + 0.0026301686, + 0.025383638, + 0.028680563, + -0.0072304504, + -0.022354757, + 0.000009966527, + -0.021322792, + 0.036239367, + -0.014755747, + -0.0073376675, + -0.0059672995, + -0.033773374, + -0.01232326, + 0.01659184, + -0.012624809, + -0.014246467, + 0.0035917715, + 0.020759903, + 0.0031277225, + 0.032325942, + -0.01614957, + 0.008778397, + 0.016310396, + 0.0015378947, + -0.010225827, + 0.01439389, + -0.0000051010556, + 0.002992026, + 0.02533003, + 0.0033203783, + 0.0011911145, + 0.020143405, + 0.0033220535, + -0.0050258, + 0.0014566443, + -0.025892919, + 0.013831001, + -0.006637406, + -0.006215239, + 0.0076727206, + 0.009173759, + 0.0076124114, + 0.023601156, + 0.010849026, + 0.005618844, + -0.013911413, + -0.005833278, + 0.010929439, + 0.027849631, + -0.022354757, + -0.039884746, + 0.023976415, + 0.004034042, + 0.014916574, + 0.015063996, + -0.0003350533, + 0.000020050846, + 0.0048917783, + -0.015827918, + 0.035783693, + 0.0075789057, + -0.010567581, + -0.03235275, + 0.01703411, + 0.023896001, + -0.019768145, + 0.0000081931, + -0.0039871344, + -0.0046739937, + 0.04449508, + -0.018829996, + -0.0013829325, + 0.008195404, + -0.001062119, + -0.005096161, + 0.031387795, + -0.0018310663, + -0.028734172, + 0.043262083, + 0.023078471, + 0.014568117, + 0.004117805, + 0.003876567, + -0.017704217, + -0.027474372, + 0.012631509, + -0.014434096, + -0.0064497762, + -0.002224754, + 0.022609398, + 0.0141124455, + 0.016377406, + -0.0017204988, + 0.025115596, + 0.0129866665, + -0.0076526175, + -0.00091469556, + -0.020706294, + -0.010889232, + 0.016377406, + 0.008758293, + 0.00515312, + 0.012055218, + -0.016444417, + -0.005367554, + 0.0009951083, + 0.010225827, + -0.024298066, + -0.0003149501, + 0.011358307, + 0.018401127, + 0.016766068, + -0.023735177, + -0.008979429, + -0.009079944, + -0.0037324938, + 0.0028211488, + 0.0018293911, + -0.038383707, + 0.022354757, + 0.019004224, + 0.0039938353, + -0.004278631, + -0.002697179, + 0.0152382245, + -0.0045466735, + 0.002638545, + -0.012658314, + -0.02533003, + 0.010346446, + -0.025933126, + -0.0059538973, + -0.01791865, + -0.014246467, + -0.012618108, + 0.009106749, + 0.006701066, + 0.006255445, + -0.0057729683, + 0.024847554, + -0.0074850908, + 0.025745496, + 0.014782552, + -0.023453731, + -0.0073778736, + 0.00993098, + -0.0039569796, + 0.011874289, + -0.014554716, + 0.021416608, + 0.000161035, + -0.016243385, + -0.019392885, + 0.02520941, + -0.01143872, + -0.026991894, + 0.00013747656, + -0.003538163, + 0.014125847, + -0.015988745, + 0.011666556, + -0.016189776, + -0.00792066, + 0.027688805, + -0.003926825, + 0.007826845, + -0.0019064533, + -0.012839243 + ] + }, + { + "object": "embedding", + "index": 6, + "embedding": [ + -0.0131454775, + -0.007023479, + -0.007137846, + -0.028793573, + -0.03425628, + 0.0073396703, + -0.032803144, + 0.013912409, + -0.007124391, + -0.025228014, + 0.000104275794, + -0.007595314, + 0.018890737, + -0.0022755668, + -0.0018584637, + 0.0096404655, + 0.019994043, + -0.006337277, + 0.004726048, + -0.005577073, + -0.044078387, + 0.001702891, + 0.012815831, + -0.005116241, + 0.0020535602, + -0.00840261, + 0.011147418, + -0.0054458873, + -0.010407397, + -0.012217086, + -0.007992235, + -0.008557342, + -0.004463677, + -0.010817773, + -0.0130109275, + -0.0073733074, + -0.00095698267, + -0.006098452, + 0.027246255, + -0.01677831, + 0.015917195, + -0.011066689, + 0.0026657602, + -0.01789507, + 0.008294971, + 0.0343101, + 0.00424167, + 0.020895522, + -0.008624617, + 0.0009553008, + -0.00075095386, + 0.056295473, + -0.024420718, + -0.011618341, + -0.018688913, + -0.0019139653, + -0.011584704, + 0.004816869, + -0.009034993, + -0.023653787, + -0.013737494, + -0.020020952, + -0.026721513, + 0.003582378, + 0.0043156724, + 0.008079692, + 0.0014716341, + 0.008079692, + 0.002578303, + 0.0019072378, + 0.020693699, + 0.017706702, + 0.0112550575, + 0.005775533, + 0.013461668, + -0.01710123, + -0.0072051208, + -0.002921404, + 0.012129629, + 0.011678888, + 0.01691286, + -0.023842156, + -0.024286168, + 0.029520141, + 0.04106448, + 0.021245351, + -0.010003748, + 0.04701156, + -0.009526098, + -0.009230089, + 0.001309334, + 0.01614593, + 0.0010965776, + 0.032534048, + -0.009660647, + -0.006313731, + -0.0038682956, + 0.03880405, + -0.01683213, + -0.0013900636, + 0.004460313, + 0.01183362, + -0.008469885, + -0.020518785, + -0.004039846, + -0.004167668, + -0.0129369255, + 0.0053517027, + 0.010508309, + 0.0006235524, + 0.02938559, + 0.026748423, + 0.022429386, + -0.047872677, + -0.010071023, + -0.018096896, + -0.0019358296, + -0.01813726, + -0.009647192, + -0.0047327755, + 0.024689816, + -0.0039187516, + -0.006414643, + -0.027663358, + 0.021164622, + 0.015580822, + -0.00594372, + -0.004779868, + 0.0035790142, + 0.0028877666, + 0.010999414, + 0.0112550575, + -0.000038788072, + -0.0018315538, + -0.034229368, + 0.013239662, + -0.026398594, + 0.014975349, + -0.029681599, + -0.009620283, + -0.00480005, + 0.015190628, + -0.032238036, + -0.0005697326, + 0.019576939, + 0.014719705, + 0.014127688, + -0.0027111706, + 0.021339536, + -0.01305802, + 0.013502033, + -0.03207658, + 0.01119451, + -0.0048673246, + 0.010858137, + 0.0038279307, + 0.007292578, + 0.023411596, + -0.009479006, + 0.009115722, + -0.004359401, + -0.015123353, + 0.0048101414, + -0.013286754, + 0.022617755, + 0.008624617, + 0.00739349, + 0.013044565, + 0.0025127102, + -0.007783683, + 0.008557342, + 0.022402477, + -0.02401707, + 0.02018241, + 0.032964606, + 0.01364331, + 0.0067510167, + -0.01903874, + -0.030569626, + -0.031134732, + -0.014612066, + 0.005476161, + 0.016119018, + 0.018352538, + -0.0049110535, + 0.016374663, + -0.0024925277, + -0.011187783, + 0.011853803, + -0.012930198, + 0.014558246, + 0.004463677, + 0.004103757, + -0.0125870975, + -0.6824346, + -0.027770998, + -0.01186053, + -0.011450155, + -0.011820165, + 0.025241468, + 0.014100778, + 0.0026489415, + -0.011389608, + -0.0132194795, + -0.0073800352, + 0.018554363, + 0.007595314, + 0.0053113378, + -0.012963835, + -0.0022335202, + 0.0064684628, + 0.016859042, + -0.0034747384, + 0.024864731, + -0.014961895, + 0.020720609, + 0.0075751315, + -0.004742867, + 0.012714919, + 0.006656832, + 0.0018197808, + -0.011954715, + -0.010952322, + 0.004921145, + -0.030650355, + 0.0035151034, + 0.0072185756, + -0.018904192, + 0.043970745, + 0.0144775165, + -0.019711489, + 0.01462552, + 0.012573642, + 0.03657053, + 0.015917195, + 0.0054257046, + 0.024676362, + -0.0050893314, + -0.010938867, + 0.010501581, + 0.013858589, + 0.0002537518, + 0.017303053, + -0.01949621, + -0.0076020416, + -0.03172675, + -0.017854707, + -0.01079759, + 0.007050389, + -0.003632834, + 0.01792198, + 0.006290185, + 0.007736591, + 0.014517881, + 0.0085909795, + 0.0049245083, + -0.02973542, + -0.014033503, + 0.0170205, + -0.008765894, + -0.015378998, + -0.0075145843, + 0.009384821, + 0.01358949, + 0.00038619884, + 0.017477969, + 0.0042248513, + -0.009613555, + 0.031296194, + 0.012149812, + 0.010030658, + 0.002450481, + 0.0040196637, + -0.0056073465, + 0.011766345, + -0.008860079, + -0.025308743, + 0.0060513597, + 0.037458554, + -0.024985826, + 0.0025244833, + -0.005758715, + 0.009021537, + 0.002909631, + 0.01903874, + 0.037862204, + -0.0052642454, + -0.011954715, + -0.022954129, + 0.02508001, + -0.01680522, + 0.0006550874, + 0.0201555, + -0.021218441, + 0.010602494, + -0.003266187, + -0.00032207766, + -0.005829353, + 0.007178211, + 0.022456296, + -0.017558698, + 0.015190628, + 0.014100778, + -0.022563936, + -0.009660647, + -0.0058259894, + -0.028820483, + -0.010030658, + -0.013132022, + -0.026358228, + 0.011685616, + -0.011187783, + 0.01745106, + -0.011322333, + 0.009748105, + -0.0151098985, + 0.022375567, + -0.005122969, + -0.010804318, + -0.0015313404, + -0.011699071, + -0.014329512, + 0.0045410427, + 0.0022402476, + -0.008227697, + 0.02976233, + 0.026842607, + -0.005499707, + 0.035251945, + 0.009458823, + -0.01130215, + -0.011732709, + -0.0056342566, + -0.028793573, + -0.013690402, + -0.0047966866, + 0.006949477, + -0.01568846, + -0.0065996484, + -0.03910006, + -0.013286754, + -0.015217538, + -0.01130215, + 0.014571701, + -0.006132089, + -0.013676947, + -0.025564387, + -0.009135905, + -0.0075011295, + -0.010467944, + 0.009674102, + -0.017303053, + -0.014316057, + -0.012196904, + 0.027905548, + 0.007709681, + -0.021352991, + -0.011403062, + -0.011154146, + -0.014046958, + 0.018446723, + 0.0028120826, + -0.013481851, + -0.015621186, + -0.0059100827, + 0.00023293866, + 0.0025648482, + 0.0011251695, + 0.020411145, + -0.010420851, + 0.013461668, + -0.0031097732, + -0.0031013638, + -0.0023478873, + -0.009956656, + -0.010817773, + -0.026923336, + -0.020855159, + 0.018783098, + -0.0074203997, + 0.015163718, + 0.016737947, + -0.019940222, + 0.0030727722, + 0.008503523, + 0.005516526, + 0.0010427579, + -0.0035420132, + -0.0060513597, + 0.012910016, + -0.0022654757, + -0.00003250735, + 0.0034848296, + 0.013468396, + 0.026075676, + 0.0067409254, + 0.014531336, + 0.028255375, + 0.0007866936, + -0.026210224, + -0.000914095, + -0.012903288, + 0.04830324, + 0.008046054, + 0.010111388, + -0.017383784, + -0.026936792, + 0.012775466, + -0.0061690905, + 0.033368252, + 0.011974897, + -0.0019005104, + -0.00808642, + -0.0031602292, + 0.013730767, + -0.01584992, + -0.006895657, + 0.018877283, + -0.027851727, + -0.0058461716, + 0.0052137896, + 0.023129044, + 0.0063843695, + -0.032507136, + -0.011820165, + 0.008046054, + -0.0014724751, + 0.016105564, + -0.006697197, + -0.0020064681, + 0.0010721906, + -0.010259393, + 0.03412173, + -0.0027548992, + 0.01917329, + 0.022308292, + 0.027824817, + -0.02146063, + -0.0172896, + -0.011059961, + 0.024030523, + 0.0036025604, + -0.012573642, + 0.009909564, + -0.019509664, + -0.0019795583, + -0.00085817295, + -0.011100326, + 0.017666338, + -0.028336106, + 0.011228148, + 0.007918233, + 0.0108312275, + 0.027932458, + 0.012842741, + -0.009795197, + 0.015123353, + -0.000015347041, + -0.017007045, + 0.020747518, + 0.010145025, + 0.008934081, + -0.009465551, + -0.012439093, + 0.011880713, + -0.000118887016, + -0.009721194, + 0.005015329, + 0.015136808, + -0.000084251056, + -0.010124843, + -0.009304091, + 0.013105112, + 0.029116493, + -0.01789507, + -0.021689365, + 0.0021141076, + 0.032910787, + -0.00962701, + -0.034686837, + -0.01481389, + 0.0020905614, + -0.0096001, + 0.0035487406, + -0.0001552574, + 0.03234568, + -0.004941327, + -0.0047159567, + -0.0045645884, + -0.0053416113, + 0.033475894, + -0.034283187, + -0.02154136, + 0.007090754, + 0.006054723, + -0.008368974, + -0.0035285582, + -0.025941126, + 0.04970255, + -0.0037606559, + -0.018971467, + 0.00011405165, + 0.0009670739, + -0.009620283, + -0.006629922, + 0.0003853579, + -0.012466002, + 0.013656765, + 0.0006336436, + 0.015177174, + -0.009331001, + 0.01478698, + 0.024716726, + -0.021608636, + -0.009526098, + -0.0069629317, + -0.021877734, + 0.011584704, + 0.096014455, + 0.020115137, + 0.022833034, + -0.00030084405, + 0.030677265, + 0.004904326, + -0.015634641, + -0.009801924, + 0.012008535, + 0.010481399, + -0.007649134, + -0.038050573, + 0.0012521504, + 0.01079759, + -0.012910016, + -0.0036765626, + -0.022927219, + -0.0065458287, + 0.021285716, + -0.011638524, + -0.0060849967, + -0.0024302986, + 0.0022637937, + 0.003468011, + 0.014208417, + -0.010461217, + 0.029331772, + 0.0075751315, + 0.011557794, + 0.010441034, + 0.0061455444, + 0.014181508, + 0.0076424065, + 0.011826893, + -0.0037202912, + -0.01130215, + 0.022644665, + -0.005092695, + 0.014221872, + -0.017625973, + 0.019106016, + 0.003834658, + 0.009028265, + -0.0023747971, + 0.0315922, + -0.025833486, + -0.012714919, + 0.016751401, + -0.0034646473, + -0.017464513, + 0.026519688, + 0.016024834, + -0.024003614, + -0.017356874, + -0.0019543301, + 0.011181056, + 0.0068250187, + -0.00026510438, + -0.0001514732, + 0.017114684, + -0.019765308, + -0.028712844, + 0.0039591165, + -0.01566155, + -0.012324726, + -0.028389925, + 0.002159518, + -0.011880713, + -0.013172387, + -0.025456747, + -0.0022419295, + -0.019859493, + -0.007548222, + 0.008927354, + 0.018043075, + -0.0060244496, + 0.020626424, + 0.014692795, + 0.013690402, + 0.027797908, + 0.0032207766, + -0.014221872, + -0.008490068, + -0.012647645, + -0.01584992, + 0.01693977, + 0.024743635, + -0.017733611, + -0.010737043, + 0.024649452, + 0.016253568, + 0.0005579596, + 0.015473182, + -0.007871141, + -0.012788922, + 0.0016473893, + 0.007036934, + 0.021675909, + -0.018769642, + -0.009546281, + 0.04098375, + -0.009822107, + 0.003126592, + -0.0014968622, + 0.025779666, + -0.008994628, + 0.005193607, + 0.0051633334, + -0.014168053, + -0.023209773, + 0.044751134, + -0.031242372, + 0.025187649, + 0.025201105, + 0.0051263324, + 0.018702367, + -0.004726048, + 0.024743635, + -0.018769642, + 0.0058058067, + -0.01802962, + -0.03248023, + 0.0063070036, + 0.037216365, + -0.012277634, + 0.015405907, + 0.022617755, + -0.014006593, + -0.0020047862, + -0.008348791, + 0.021070438, + 0.028416835, + -0.014046958, + -0.012136357, + -0.00019478129, + -0.0039927536, + -0.0050489665, + 0.011557794, + -0.019590395, + -0.005082604, + -0.010723588, + -0.00507924, + 0.01704741, + -0.010071023, + -0.025672028, + -0.020572605, + -0.00022473956, + -0.0038582042, + 0.0015616141, + 0.03425628, + -0.0029819512, + 0.012815831, + -0.0046184086, + 0.00070680486, + -0.037862204, + -0.010649585, + 0.0037942934, + -0.034283187, + 0.002781809, + 0.021366445, + 0.027905548, + -0.0016145929, + 0.019711489, + -0.0048875073, + -0.006771199, + -0.00039986402, + 0.0074203997, + -0.00041079617, + -0.018635092, + 0.010441034, + 0.01922711, + 0.011470337, + -0.010615949, + -0.005778897, + -0.015553911, + 0.012042172, + 0.0047495943, + -0.008220969, + -0.0033418708, + -0.025228014, + -0.018460179, + -0.017114684, + 0.014571701, + 0.0043257633, + -0.0040196637, + 0.0049245083, + 0.029224131, + -0.004534315, + 0.033314433, + -0.005139787, + 0.014181508, + -0.0036799263, + 0.005957175, + 0.019240566, + -0.0011066688, + -0.012062354, + 0.002120835, + 0.005183516, + 0.012190176, + 0.038238943, + 0.01590374, + -0.0019795583, + -0.018608183, + 0.023048313, + -0.0031854573, + 0.018123806, + 0.0056208014, + -0.0056611663, + 0.01843327, + -0.021285716, + -0.0025766212, + -0.016213203, + -0.023236683, + -0.01933475, + -0.011295423, + 0.011793256, + 0.0017222324, + 0.024339987, + -0.011059961, + -0.009048448, + -0.010676496, + 0.009162814, + 0.013939318, + 0.0007496925, + 0.022792669, + 0.023707606, + -0.012082537, + -0.016576488, + -0.010911957, + 0.009297364, + -0.021837369, + 0.012230542, + 0.035870872, + -0.005462706, + -0.00909554, + -0.0059134467, + 0.003239277, + -0.0001609337, + -0.014235327, + 0.026506234, + 0.012546732, + 0.0048202327, + -0.0028793574, + 0.0012672872, + 0.002388252, + 0.026519688, + -0.026869517, + -0.0116721615, + -0.02736735, + -0.006744289, + -0.0014977031, + 0.005640984, + -0.022052648, + 0.03883096, + -0.0025093465, + -0.010286302, + 0.004265216, + -0.019792218, + -0.0004406493, + -0.0035016483, + 0.008584253, + 0.0039187516, + -0.004140758, + -0.008624617, + -0.0015128399, + -0.0059672664, + -0.006172454, + 0.018998377, + -0.015096444, + 0.021070438, + -0.010932139, + -0.005893264, + 0.0008152853, + -0.025833486, + 0.006566011, + 0.018917646, + 0.013515488, + -0.0024656178, + -0.015230993, + -0.010555401, + 0.0015355451, + 0.009061903, + -0.010609221, + 0.008947535, + -0.013071475, + -0.009916292, + -0.00256653, + -0.021137713, + 0.018796552, + -0.0023344322, + -0.020101681, + -0.013125295, + -0.008436248, + 0.029116493, + -0.015015714, + 0.009976839, + 0.021985373, + 0.012990746, + -0.0046520457, + 0.011160874, + 0.0006151431, + -0.0057856245, + -0.011140691, + 0.0047933226, + -0.008712074, + -0.0099902935, + 0.028955033, + -0.027636448, + -0.002921404, + -0.0034141913, + 0.009337729, + 0.0067812903, + 0.0065021003, + -0.0019021922, + 0.032614775, + -0.0035588318, + 0.0018567818, + -0.0031669566, + -0.011477064, + 0.020464964, + -0.0068889298, + -0.002312568, + 0.006730834, + -0.004369492, + 0.009727922, + 0.017706702, + -0.012876378, + -0.0044704042, + -0.016415028, + -0.019698033, + -0.0034326918, + 0.015594277, + -0.016065199, + -0.025577843, + -0.012883106, + 0.00928391, + -0.0071042087, + 0.02962778, + -0.015944105, + -0.0077029536, + -0.0011739436, + 0.003177048, + 0.010387214, + -0.0055266167, + -0.006592921, + -0.032641686, + -0.015836466, + 0.0037438374, + -0.029816149, + -0.006710652, + -0.01829872, + 0.023546146, + 0.0071983933, + -0.026465869, + -0.005116241, + 0.01486771, + -0.017975802, + 0.015352087, + 0.00008703665, + 0.01707432, + 0.020559149, + 0.008712074, + 0.015500092, + 0.022779215, + 0.009801924, + 0.021164622, + -0.03923461, + -0.012560187, + 0.018635092, + -0.015163718, + 0.0077164085, + 0.006340641, + -0.030246707, + -0.0015860011, + 0.01677831, + 0.010938867, + 0.0038178395, + -0.0014884528, + -0.024703272, + -0.00784423, + -0.02704443, + -0.014141142, + -0.02499928, + 0.012614007, + -0.00073623756, + -0.019267475, + -0.0015304995, + 0.010595766, + -0.017868161, + -0.012614007, + -0.005462706, + -0.0030626808, + 0.00079215964, + 0.0024336623, + -0.0018180988, + 0.016078655, + 0.017639427, + -0.050913494, + -0.0043762196, + 0.004080211, + 0.0028154464, + 0.0015473182, + -0.007857685, + -0.010030658, + -0.007063844, + -0.004964873, + -0.025968036, + -0.009337729, + -0.0027616266, + -0.017545242, + 0.0024740272, + -0.028847393, + -0.0017045728, + -0.03401409, + 0.0032813237, + -0.026479324, + 0.0007740796, + -0.012143084, + 0.011066689, + 0.01481389, + -0.027582629, + -0.017787432, + -0.0137105845, + -0.01590374, + -0.016334299, + 0.0070571164, + 0.007265668, + -0.014423696, + -0.016267024, + 0.00970774, + -0.025362564, + -0.03396027, + 0.00035130008, + 0.0040331185, + -0.0065727388, + 0.004127303, + 0.23917502, + -0.022119923, + 0.004927872, + 0.021527905, + 0.0017693248, + 0.015056078, + 0.0343101, + -0.018608183, + -0.010737043, + -0.00068998616, + -0.019603848, + 0.010528491, + -0.005398795, + 0.007904777, + -0.013912409, + -0.014881165, + -0.035817053, + -0.037593104, + -0.019092562, + -0.013246389, + 0.0009098904, + -0.008839896, + -0.006158999, + -0.008079692, + 0.028524475, + 0.0099902935, + -0.015163718, + -0.014046958, + 0.020908978, + 0.022079557, + 0.0055333446, + 0.0032527319, + -0.0054088864, + 0.03662435, + 0.00041668268, + -0.006438189, + -0.0123045435, + -0.027609538, + 0.007050389, + 0.012943653, + -0.025120374, + -0.004100393, + -0.02390943, + -0.008153694, + -0.010178663, + 0.016240114, + -0.0063843695, + -0.0023478873, + 0.019846037, + 0.014100778, + -0.019671123, + -0.010676496, + 0.03891169, + 0.031672932, + 0.0010461217, + -0.012398728, + 0.010017203, + 0.01486771, + 0.009230089, + -0.010017203, + -0.018648548, + 0.01712814, + 0.00797878, + 0.019321295, + -0.01710123, + -0.0034579197, + -0.044159114, + 0.022119923, + 0.00068115635, + 0.005462706, + 0.007232031, + -0.013602945, + -0.009808652, + -0.01313875, + -0.032318767, + -0.014585156, + 0.023330867, + 0.010609221, + 0.00792496, + 0.035440315, + -0.0043728556, + 0.0065727388, + 0.016119018, + -0.009734649, + -0.0036361977, + -0.02148754, + 0.023425052, + -0.0016532758, + -0.008476613, + -0.0063473685, + 0.0029129947, + 0.004204669, + -0.021649, + -0.013925863, + 0.024864731, + 0.013313664, + 0.0054862523, + 0.03406791, + 0.001156284, + 0.0027246254, + -0.024434172, + 0.031107822, + 0.000033584794, + -0.010992686, + -0.015271358, + 0.00368329, + 0.012614007, + -0.0041104844, + -0.010488126, + -0.012640917, + -0.009815379, + -0.03172675, + -0.00281881, + -0.0016448665, + 0.006394461, + 0.01031994, + 0.012990746, + -0.0030794996, + 0.0033855995, + -0.012741829, + -0.006895657, + 0.0025143921, + -0.0054896157, + 0.0096404655, + -0.0048706885, + 0.0001105828, + -0.0038043845, + 0.016132474, + 0.00092334533, + -0.03686654, + 0.014329512, + -0.014746615, + 0.017989255, + -0.004164304, + -0.034659926, + 0.04109139, + 0.0022856581, + -0.01571537, + -0.019819127, + -0.0067779263, + 0.015029169, + -0.015096444, + 0.0066097397, + -0.0019896494, + -0.024905095, + -0.006138817, + 0.01925402, + 0.000007647242, + -0.0005571186, + -0.008617889, + -0.0030895907, + -0.011584704, + -0.0065391012, + -0.041925594, + 0.022981038, + -0.019294385, + -0.0076625887, + -0.026627328, + -0.017733611, + 0.017881617, + -0.044051476, + -0.0055568907, + 0.021931553, + -0.014692795, + -0.020962797, + 0.013925863, + -0.17523715, + 0.02031696, + 0.019119471, + -0.020088227, + 0.0010208937, + 0.0092906365, + 0.010447761, + 0.0028675843, + 0.0021443812, + 0.0018887373, + 0.012533277, + -0.0027347167, + -0.024461083, + 0.0055568907, + 0.0012311271, + -0.024784, + -0.0048740525, + -0.00027057045, + 0.0037101998, + -0.007090754, + 0.0117461635, + -0.036139973, + 0.010030658, + -0.023317412, + -0.0060244496, + 0.010938867, + -0.013562581, + 0.021635545, + -0.017168505, + -0.01598447, + -0.0063440045, + -0.0011974897, + 0.028820483, + 0.0030172705, + 0.0072723953, + 0.010017203, + -0.009532825, + -0.009230089, + -0.006350732, + 0.030784905, + 0.012291089, + 0.016253568, + -0.003811112, + 0.008409338, + 0.005038875, + 0.029089581, + 0.025281833, + 0.0006916681, + 0.007911505, + 0.004507405, + 0.028147737, + -0.01819108, + 0.0026523052, + -0.008812986, + -0.009775015, + -0.0043661282, + 0.0012269224, + 0.017370328, + 0.0007459083, + -0.014800435, + -0.034740657, + -0.029869968, + -0.007837503, + -0.010447761, + 0.0036092878, + -0.027582629, + -0.019698033, + 0.0075549493, + -0.0135693075, + 0.0100642955, + -0.016253568, + -0.033583533, + -0.0055871643, + -0.0037572922, + 0.0058259894, + 0.014100778, + -0.0054929797, + 0.005321429, + 0.00027288301, + -0.00070554344, + -0.014316057, + 0.030219797, + -0.0029264495, + -0.005536708, + -0.0049312357, + 0.0045645884, + -0.005015329, + 0.020586058, + -0.009849017, + -0.017383784, + 0.0044502215, + -0.02047842, + -0.006428098, + -0.0012101037, + 0.011342515, + 0.022927219, + -0.0052507906, + 0.022671575, + -0.005859627, + -0.0067846538, + 0.0068014725, + -0.0071042087, + -0.015863376, + 0.022631211, + 0.028766664, + 0.030327436, + 0.01481389, + -0.0040499372, + 0.0057217134, + 0.014437151, + -0.024380352, + -0.025174195, + 0.015190628, + 0.035063576, + -0.020411145, + 0.0042853984, + 0.029358681, + -0.014612066, + 0.016482303, + -0.0029634507, + 0.057264227, + -0.0015725462, + 0.005499707, + 0.015325177, + -0.015607731, + -0.001993013, + -0.09219325, + -0.022456296, + 0.022254473, + 0.009297364, + -0.006798109, + 0.017410694, + -0.0016179567, + -0.0022133377, + 0.0012656053, + 0.013105112, + -0.010656313, + -0.003060999, + 0.026761876, + -0.018756187, + 0.04327109, + 0.0029029034, + -0.017612517, + -0.0064617353, + -0.020693699, + 0.023115588, + -0.0070436615, + 0.0045780437, + -0.0024992554, + -0.008059509, + -0.0021141076, + -0.0038481131, + -0.019846037, + 0.018554363, + 0.007945143, + 0.020868612, + 0.0007084867, + -0.00006837843, + 0.014033503, + -0.006418007, + -0.0012000125, + 0.012802376, + -0.014221872, + 0.015378998, + 0.024313077, + -0.015096444, + -0.014854254, + 0.0013042883, + 0.0204246, + -0.007783683, + -0.005577073, + -0.00027162163, + -0.0058461716, + 0.006969659, + 0.006387733, + -0.013858589, + -0.013367483, + -0.008974445, + 0.001727278, + -0.0038481131, + 0.0042853984, + -0.010723588, + 0.027770998, + 0.016159384, + -0.035063576, + -0.010925412, + -0.0032964605, + 0.007124391, + -0.021608636, + 0.016051745, + 0.017558698, + 0.0012075809, + -0.02992379, + -0.00017806773, + 0.0039523887, + -0.028981943, + -0.012842741, + 0.0074809473, + -0.007353125, + -0.007736591, + -0.01568846, + 0.00011720515, + -0.0069629317, + 0.009196452, + 0.006175818, + -0.0023462053, + -0.035225034, + -0.023155954, + -0.0025446657, + -0.02641205, + 0.02595458, + 0.035386495, + 0.0014623839, + -0.015405907, + 0.016374663, + -0.017222324, + -0.0121699935, + 0.010387214, + 0.021191532, + -0.022981038, + -0.018123806, + 0.021352991, + 0.022994494, + -0.004524224, + -0.017666338, + 0.024609087, + -0.024299623, + 0.0057250774, + -0.08847969, + 0.011006142, + 0.009189725, + -0.00853716, + 0.0039086603, + -0.028120827, + 0.017706702, + -0.0034511923, + 0.012768739, + 0.0062060915, + -0.026802242, + -0.0137778595, + 0.008187331, + 0.0024185255, + -0.03643598, + -0.026990611, + 0.022227563, + 0.01590374, + 0.016576488, + 0.017773977, + -0.013347302, + 0.0047933226, + -0.0010007112, + 0.0072051208, + -0.021016618, + 0.006734198, + 0.009055175, + 0.017208869, + -0.004480495, + 0.0034781022, + 0.029035762, + -0.03654362, + -0.01077068, + 0.015419362, + -0.011981625, + -0.03215731, + -0.015271358, + 0.030354347, + -0.0047529577, + 0.044239845, + -0.0046049533, + -0.006172454, + 0.028578294, + 0.005001874, + -0.005751987, + -0.021420266, + 0.016576488, + 0.011692343, + 0.026654238, + 0.008826441, + -0.003912024, + 0.026290955, + -0.016697582, + 0.0027919002, + -0.01617284, + -0.011927805, + 0.013239662, + 0.016267024, + -0.0005323111, + -0.023734516, + 0.024891641, + -0.00015820067, + -0.004742867, + 0.019711489, + 0.03624761, + -0.00006328027, + -0.015325177, + -0.0032039578, + -0.00022852376, + -0.01462552, + -0.024757091, + 0.0038043845, + 0.029331772, + 0.0055299806, + 0.010642858, + -0.00077702285, + 0.011174329, + 0.0024084344, + -0.020088227, + 0.017181959, + 0.01856782, + -0.014100778, + -0.032883875, + 0.02606222, + 0.032722417, + 0.0004662978, + -0.0058663543, + -0.006552556, + -0.00731276, + 0.03248023, + 0.0101988455, + 0.015971014, + 0.0021763367, + -0.011288695, + 0.011470337, + 0.017060865, + -0.00092418626, + -0.03584396, + -0.006996569, + 0.03673199, + -0.0008644799, + -0.004379583, + -0.008705347, + -0.026802242, + -0.04087611, + 0.008638072, + -0.015446272, + -0.03178057, + 0.008335336, + 0.02595458, + 0.010461217, + -0.0017390511, + -0.00077954563, + 0.018984921, + 0.0014321102, + 0.0042080325, + 0.010367032, + -0.018608183, + -0.016441938, + 0.0003891421, + 0.01566155, + 0.03616688, + 0.00851025, + -0.026317865, + 0.02063988, + -0.0029701781, + 0.013979684, + -0.019778762, + 0.0040331185, + 0.013925863, + 0.006606376, + -0.018608183, + -0.008066237, + -0.021649, + -0.0040331185, + -0.0031854573, + -0.016509213, + 0.018258354, + -0.018527454, + 0.037377827, + 0.010145025, + -0.028551385, + -0.005338248, + 0.0074136723, + 0.023317412, + 0.0075751315, + 0.03624761, + -0.02273885, + -0.0121699935, + 0.02497237, + 0.000634905, + 0.0033469165, + -0.0294125, + -0.023223227, + 0.0053819763, + -0.018608183, + -0.0026321227, + -0.01726269, + -0.007783683, + 0.03802366, + -0.0033485985, + 0.0053819763, + 0.0104141245, + -0.024649452, + -0.007063844, + 0.023317412, + 0.015056078, + 0.0021948372, + -0.021770094, + 0.014437151, + 0.010367032, + -0.0074002175, + -0.025376018, + 0.022644665, + 0.0027885365, + -0.01699359, + -0.014840799, + 0.030300526, + -0.0006176659, + -0.028928123, + 0.023815244, + -0.02957396, + -0.033395164, + 0.025066555, + -0.015917195, + -0.022510115, + -0.02404398, + -0.01063613 + ] + }, + { + "object": "embedding", + "index": 7, + "embedding": [ + 0.024549589, + -0.006144328, + -0.0028832944, + -0.013314444, + -0.0069968407, + 0.013993681, + -0.026268475, + -0.008857813, + -0.020072164, + -0.013064927, + 0.022997046, + 0.018325554, + 0.0039887885, + -0.021319743, + -0.0155808795, + -0.009024157, + 0.04932097, + -0.0061477935, + 0.014118439, + -0.011817348, + -0.004775456, + -0.005073489, + 0.0033060852, + 0.0011115585, + 0.008712262, + -0.009516258, + 0.008746917, + -0.013238203, + -0.0026129854, + -0.013737234, + -0.003250637, + -0.0150541235, + -0.025783306, + -0.0341005, + -0.020987056, + -0.01412537, + -0.01635715, + -0.0047823875, + 0.0049002143, + -0.0023201508, + 0.012392621, + -0.009620222, + -0.004837835, + 0.0061270003, + -0.009661809, + 0.038453165, + -0.0066468255, + -0.013245134, + -0.025603099, + 0.0003155769, + 0.02205443, + 0.0023704006, + -0.020113751, + -0.02108409, + -0.026074408, + -0.026254613, + -0.018256243, + 0.03276975, + 0.0028763635, + -0.018588932, + -0.0022144532, + -0.0104658045, + 0.0045952504, + 0.013210478, + 0.0078112325, + -0.01461054, + -0.009620222, + 0.005371522, + -0.017064113, + -0.0048828865, + 0.011172766, + 0.005461625, + 0.0011860667, + -0.02136133, + 0.022484152, + -0.0065393946, + -0.0055967793, + 0.0025783305, + -0.01183121, + 0.005752727, + 0.026434818, + -0.014305576, + -0.007617165, + 0.021444501, + -0.0032610337, + 0.0035937214, + -0.005260626, + 0.02991418, + -0.012344104, + 0.007825094, + 0.015123433, + 0.019046377, + -0.016066048, + -0.0027931915, + -0.031910308, + -0.0038848233, + -0.011706453, + 0.04502375, + 0.016897768, + -0.0039160126, + 0.014035267, + 0.006414637, + -0.022373255, + -0.022109877, + -0.006972582, + -0.0012137907, + -0.00049383345, + 0.0022387118, + 0.008365712, + 0.010382632, + -0.0013385486, + 0.033296507, + 0.01935134, + -0.05838671, + 0.00013656229, + -0.040144328, + -0.010410356, + 0.0024812967, + -0.011644074, + -0.036484763, + 0.023149528, + 0.033989605, + 0.010548976, + 0.0018107228, + 0.027973501, + -0.0084072985, + -0.010590562, + -0.03493222, + 0.0013082256, + 0.01926817, + 0.01092325, + 0.011789625, + 0.029110184, + 0.014915504, + -0.0037947204, + 0.005943329, + -0.027848743, + 0.013155031, + -0.022345532, + -0.015622465, + -0.007894404, + 0.03166079, + -0.020127613, + 0.0046160435, + 0.011054939, + 0.013064927, + 0.005874019, + 0.012697585, + 0.017868107, + -0.0040061157, + 0.03263113, + -0.011914383, + 0.007021099, + -0.0015586078, + 0.005655693, + 0.025007034, + -0.004896749, + 0.031078586, + 0.005558659, + 0.0073329937, + 0.005246764, + 0.006525533, + 0.012725309, + 0.0008650749, + 0.019947406, + 0.002574865, + 0.0043006833, + 0.02922108, + 0.007346856, + -0.010514321, + 0.0050076446, + 0.023856489, + -0.034849048, + 0.018769138, + 0.006986444, + 0.03590256, + 0.016856182, + -0.013681786, + -0.026753645, + -0.0056348997, + -0.00897564, + 0.014776884, + 0.020432577, + 0.01996127, + -0.01447192, + 0.022151463, + 0.022802977, + -0.0017474773, + -0.008116197, + -0.01962858, + -0.0022560393, + 0.0153175015, + 0.02999735, + -0.014291714, + -0.66404486, + -0.0057042097, + -0.010278667, + 0.011359903, + 0.0086984, + 0.016523495, + 0.010847009, + 0.013064927, + -0.019531546, + -0.013155031, + -0.006109673, + -0.012572827, + -0.004751198, + -0.000104181534, + -0.0065844464, + -0.023468353, + 0.005063093, + -0.01718887, + 0.009446948, + 0.017216595, + 0.0065324637, + 0.013300582, + 0.007755785, + -0.0040234434, + 0.00036907554, + 0.011477729, + 0.012468862, + -0.023343595, + -0.003002854, + 0.012115381, + -0.02247029, + 0.033712365, + -0.023204975, + -0.02894384, + 0.013016411, + 0.011456937, + -0.010313322, + 0.038591787, + 0.024826828, + 0.050651718, + -0.0024067883, + 0.005867088, + 0.010874732, + 0.0046437676, + -0.017507697, + -0.011117318, + 0.027266538, + -0.014291714, + 0.0006905005, + 0.0030704313, + 0.01064601, + -0.040809706, + -0.00018410459, + 0.013758027, + 0.03069045, + 0.0009781368, + 0.03673428, + 0.009211293, + 0.0022543066, + 0.008920192, + 0.0025384773, + -0.027807156, + -0.003569463, + -0.0084696775, + -0.006882479, + 0.0020637042, + -0.0155808795, + -0.011297524, + -0.0020637042, + -0.019739477, + -0.011630211, + 0.03437774, + -0.018006727, + -0.006702273, + 0.0109994905, + 0.0060576904, + 0.011678728, + -0.010119255, + -0.014929365, + -0.0026112527, + -0.021278158, + -0.01732749, + -0.034571808, + 0.009571706, + 0.007076547, + -0.01691163, + -0.031300377, + 0.017590867, + 0.0293597, + -0.015539293, + 0.016897768, + 0.021735603, + 0.009828152, + -0.0075686476, + -0.0016062583, + 0.0058636228, + -0.007880542, + -0.014028336, + 0.0028226483, + -0.0059052086, + 0.010174702, + -0.004924473, + 0.0062725516, + 0.010410356, + 0.02894384, + -0.002160738, + -0.016246255, + 0.020765264, + 0.025797168, + -0.013536235, + -0.0020844971, + -0.012004485, + -0.01940679, + -0.006546326, + -0.0024691673, + -0.028777495, + 0.023981247, + -0.0029370096, + 0.032326166, + -0.0023149527, + 0.008656814, + -0.014804607, + 0.010611355, + -0.021042503, + 0.0034187138, + 0.02366242, + 0.0004886352, + -0.01774335, + -0.0007715065, + 0.008372643, + 0.0007702069, + 0.016371014, + 0.0069829784, + -0.010687596, + -0.0006029967, + 0.012018347, + 0.020155337, + -0.011560901, + 0.012441138, + -0.008656814, + -0.01663439, + -0.013771889, + -0.01002222, + 0.004914076, + -0.006764652, + -0.034072775, + -0.014097646, + -0.009446948, + -0.035375804, + -0.00031406077, + -0.0009971971, + 0.011886658, + -0.01642646, + 0.013695648, + 0.010237081, + -0.011581695, + 0.016759148, + -0.014499644, + -0.029831007, + -0.0019285496, + 0.015636327, + -0.0038986853, + -0.012565896, + -0.00078017026, + 0.0029768627, + -0.0051947813, + 0.0058705537, + 0.019365203, + 0.004775456, + -0.037760068, + 0.01231638, + -0.013071858, + -0.01454123, + 0.021042503, + 0.006511671, + 0.009578637, + 0.013203547, + -0.007956783, + -0.002713485, + 0.008733055, + 0.019794924, + -0.017632455, + -0.02852798, + -0.0075270617, + 0.010555907, + -0.005378453, + 0.011505454, + 0.017798798, + -0.02380104, + 0.011713384, + 0.0137233725, + 0.010521252, + -0.010250943, + -0.003437774, + -0.0049903174, + 0.0011427479, + 0.00028265468, + 0.021319743, + -0.011983693, + 0.03193803, + 0.020072164, + 0.0014355825, + 0.02156926, + 0.0067854454, + 0.018783, + -0.039229438, + -0.010292529, + -0.007838957, + 0.03179941, + 0.019254306, + 0.00025428092, + -0.019808786, + -0.015081847, + 0.0009486801, + -0.000596932, + 0.02037713, + -0.0029959232, + 0.0058948123, + -0.004584854, + -0.0042209765, + 0.016509634, + -0.012011416, + -0.015830396, + 0.012940169, + -0.020501886, + 0.0144580575, + 0.029831007, + 0.03451636, + 0.012891653, + -0.035569873, + -0.019171136, + 0.008691469, + -0.005960657, + -0.003912547, + -0.0027308124, + -0.0006081949, + 0.023191113, + -0.02330201, + 0.01551157, + 0.009550912, + 0.033241056, + 0.017798798, + 0.026351647, + -0.008199369, + -0.00897564, + -0.022400979, + 0.0058151055, + 0.012718378, + -0.0095370505, + 0.01488778, + -0.011935175, + 0.015969016, + 0.008019162, + 0.01260055, + 0.0018211192, + 0.0033355418, + 0.019794924, + 0.007173581, + 0.018450312, + 0.02525655, + -0.008871675, + -0.011318317, + -0.0052710227, + 0.013425339, + 0.00077627157, + -0.008441953, + 0.007242891, + -0.028417084, + -0.016925493, + -0.019101825, + -0.014763022, + -0.010244012, + 0.024799105, + -0.004896749, + -0.003957599, + -0.02999735, + -0.01635715, + -0.008317195, + 0.0023028234, + 0.0029647336, + -0.017369077, + -0.045633677, + 0.003624911, + 0.021056365, + -0.01134604, + -0.010680665, + -0.023884213, + -0.0038189788, + -0.0040996843, + 0.0023738663, + 0.0056660892, + 0.020862298, + -0.011124249, + -0.004307614, + 0.009641016, + -0.028236877, + 0.032326166, + -0.011713384, + 0.002968199, + -0.0034412395, + -0.0065775155, + -0.02357925, + -0.0079429215, + -0.027141782, + 0.027918052, + 0.036512487, + -0.018796861, + -0.04216818, + -0.02400897, + -0.026393233, + 0.007845888, + 0.0068027726, + 0.0016487107, + 0.005142799, + -0.00723596, + -0.007915198, + -0.012642137, + -0.0012510448, + 0.032464787, + 0.0090726735, + -0.02073754, + -0.02407828, + -0.036318418, + -0.01064601, + 0.10180247, + 0.03263113, + 0.0059537254, + 0.007270615, + -0.004165529, + 0.007388442, + -0.008642952, + -0.0019285496, + 0.021804914, + 0.0007793039, + 0.012787688, + 0.01190052, + 0.009308328, + 0.0040303743, + 0.012954032, + 0.011401488, + -0.014527367, + -0.033435125, + -0.0033961881, + -0.010146978, + -0.0069344616, + -0.01990582, + -0.013508512, + 0.041585978, + -0.013792682, + 0.0012822343, + 0.021832637, + 0.023094079, + 0.0012250536, + -0.025658548, + -0.014236266, + 0.008005301, + -0.00995291, + 0.003860565, + -0.022997046, + 0.00967567, + 0.025298135, + 0.0008516461, + 0.019642442, + 0.0016209867, + 0.013155031, + 0.014596677, + -0.005343798, + -0.0053195395, + 0.027945776, + -0.0026667006, + -0.017979003, + 0.012489655, + -0.002444909, + -0.02366242, + 0.030939966, + -0.008039955, + -0.03598573, + -0.0012302519, + 0.0023218838, + 0.013023342, + 0.02080685, + 0.0056660892, + -0.023260422, + 0.001045714, + -0.001802059, + -0.035514425, + 0.007818163, + -0.01071532, + -0.010840078, + -0.03346285, + 0.007242891, + -0.0065671187, + -0.03199348, + -0.0011748038, + 0.0046056467, + -0.023981247, + -0.012143105, + 0.016343288, + 0.004969524, + -0.006206707, + 0.02567241, + -0.012753033, + -0.021333605, + 0.019600857, + -0.021181123, + -0.016176945, + -0.0052329022, + -0.008601367, + -0.021139538, + 0.03437774, + 0.006123535, + -0.01822852, + -0.014970952, + 0.011637143, + 0.026102131, + -0.01642646, + 0.007326063, + -0.0018332484, + -0.016246255, + -0.0017700031, + 0.016828459, + 0.019517684, + -0.022525737, + -0.019642442, + 0.034904495, + -0.029831007, + -0.017424524, + -0.008296402, + 0.029331975, + 0.019157274, + 0.00608888, + -0.0068027726, + -0.017369077, + 0.0017301498, + 0.03742738, + -0.019988993, + -0.00855978, + 0.008733055, + -0.002181531, + 0.014555092, + -0.014305576, + 0.019697892, + 0.015497707, + -0.035514425, + -0.023856489, + -0.00904495, + 0.0023010906, + 0.037676893, + -0.005052696, + -0.008289471, + -0.0018869637, + -0.011082663, + 0.009377638, + -0.00290582, + 0.0047962493, + 0.0347936, + 0.0077904398, + -0.012364897, + -0.024535727, + 0.0086706765, + -0.012856998, + 0.009100398, + -0.009211293, + -0.011644074, + -0.012545103, + 0.009051881, + -0.005364591, + -0.0059537254, + -0.023704007, + -0.04183549, + 0.015386811, + -0.013543166, + -0.0147214355, + 0.021208849, + -0.011228214, + 0.015816534, + -0.0047789216, + 0.016163083, + -0.03897992, + -0.022345532, + -0.007908267, + -0.005295281, + 0.0054928144, + 0.023066355, + 0.028472532, + -0.0062240344, + 0.003562532, + -0.0013342168, + 0.0066191014, + 0.003992254, + 0.027252676, + -0.0055136075, + -0.014707574, + 0.023676282, + 0.011997554, + -0.004182856, + -0.015691776, + -0.00038142139, + -0.012863928, + 0.015705638, + 0.020418715, + -0.01649577, + -0.0056452965, + -0.020307818, + -0.010361839, + -0.009966772, + -0.035514425, + 0.002479564, + -0.0061547244, + -0.008504332, + 0.025353584, + 0.0025020896, + 0.005101213, + -0.014596677, + 0.0327143, + -0.0045536645, + 0.00046914179, + 0.020058302, + 0.0014052595, + 0.0046576294, + 0.0047096116, + -0.0016556417, + -0.005122006, + 0.013889716, + 0.012489655, + -0.008913261, + -0.015123433, + -0.0011626746, + 0.008379574, + 0.020224646, + 0.010535114, + -0.013619407, + 0.019171136, + -0.025062481, + -0.011657936, + -0.010535114, + -0.013813475, + -0.018076038, + -0.018394863, + 0.023426767, + -0.029692387, + 0.017979003, + -0.013064927, + -0.03124493, + 0.0075339926, + 0.00883702, + 0.017105699, + 0.004217511, + 0.025020896, + 0.018020589, + 0.00018702859, + -0.014638264, + 0.017147284, + 0.006310672, + -0.023898074, + 0.028555704, + 0.017687902, + -0.0035937214, + -0.012170829, + -0.009516258, + 0.004363062, + -0.018810723, + -0.0033736622, + 0.03590256, + 0.017992865, + 0.00876771, + -0.0078112325, + -0.009141983, + -0.01781266, + 0.028583428, + -0.02219305, + -0.00995291, + -0.0096687395, + -0.02330201, + -0.012399552, + 0.018672103, + -0.02219305, + 0.004706146, + 0.007845888, + -0.021319743, + 0.011124249, + -0.018519621, + -0.013570891, + 0.011373765, + 0.016412599, + 0.017272042, + -0.027613088, + -0.0058151055, + 0.0076379576, + 0.0058497605, + -0.013459994, + -0.006615636, + -0.008053818, + 0.028500255, + -0.007478545, + 0.0007112935, + 0.0098836, + -0.02032168, + 0.03046866, + -0.0027931915, + -0.011852004, + -0.01892162, + -0.0068201004, + -0.01836714, + 0.0045536645, + 0.020224646, + -0.008199369, + -0.009550912, + -0.017563144, + -0.008989502, + -0.007915198, + -0.0048586284, + 0.010528183, + 0.0038155133, + -0.010036082, + -0.011145041, + -0.0073953727, + 0.014943227, + -0.0062794825, + -0.0019302825, + 0.008920192, + 0.028028948, + -0.02776557, + 0.0074369586, + 0.006650291, + 0.0018956275, + -0.029193355, + 0.009862808, + -0.008448884, + -0.010410356, + 0.019448375, + 0.018311692, + -0.020335542, + 0.008227092, + -0.0038536338, + 0.007984508, + 0.009876669, + 0.009446948, + 0.031965755, + 0.0014693711, + -0.020820713, + -0.0013515443, + -0.021070229, + 0.011845073, + -0.016038325, + 0.00828254, + 0.02344063, + -0.013557028, + 0.01711956, + 0.0024414433, + 0.019226583, + 0.037593722, + -0.016412599, + -0.012787688, + -0.00476506, + 0.0005271889, + -0.011470798, + -0.04632678, + -0.01705025, + -0.003583325, + -0.021680156, + 0.042057283, + -0.003583325, + 0.00042603965, + 0.012863928, + 0.019670166, + 0.01962858, + 0.009585568, + -0.0030271125, + -0.01795128, + -0.014638264, + -0.0061616553, + 0.0054165735, + -0.0100014275, + -0.007457752, + 0.026102131, + 0.01064601, + -0.02581103, + -0.006632963, + 0.0020810317, + -0.022373255, + 0.01962858, + -0.02227622, + 0.02073754, + 0.022096016, + 0.012392621, + 0.0016166548, + 0.00959943, + 0.013217409, + 0.0040130466, + -0.022165326, + -0.03102314, + -0.0034065845, + -0.029886454, + -0.0050007137, + -0.025824891, + -0.016870044, + -0.010957905, + 0.03041321, + -0.0050353687, + 0.0116648665, + 0.012080726, + -0.011172766, + 0.0035729285, + 0.0022629702, + 0.0014962287, + -0.00049340026, + 0.014139232, + 0.026975436, + -0.027280401, + 0.006137397, + 0.030219143, + 0.010902457, + -0.01677301, + -0.010978698, + 0.010084599, + -0.014104577, + 0.011041077, + -0.014305576, + 0.01935134, + 0.006650291, + -0.030357763, + 0.009294466, + -0.018173072, + -0.025492204, + 0.009661809, + -0.012496586, + -0.0017509429, + -0.012753033, + 0.013148099, + -0.029193355, + -0.011519316, + 0.023329733, + -0.006813169, + 0.0028347773, + -0.013626338, + -0.015691776, + -0.017424524, + 0.006868617, + -0.0036907555, + -0.014527367, + 0.0008711396, + 0.028444808, + 0.024161452, + -0.015594741, + -0.00765182, + 0.0016963613, + -0.027543778, + 0.014513506, + -0.014527367, + 0.0014832332, + -0.023482215, + -0.0013567425, + -0.00055924477, + -0.022913873, + -0.017105699, + -0.007478545, + -0.00821323, + -0.00849047, + 0.0015170218, + 0.20615555, + -0.010361839, + 0.005316074, + 0.03498767, + 0.006359189, + 0.020002855, + 0.010569769, + 0.022622772, + -0.0043388037, + 0.012822343, + -0.024410969, + 0.0005024972, + 0.014832332, + 0.013494649, + 0.01767404, + -0.011470798, + -0.022844562, + -0.037593722, + -0.026628887, + 0.025575375, + 0.013688717, + 0.0070938743, + -0.014132301, + -0.016537357, + 0.0015768016, + 0.008393437, + -0.02414759, + -0.017992865, + 0.02894384, + 0.011096525, + 0.00946081, + 0.011359903, + -0.025436755, + -0.00009031954, + -0.00029478394, + 0.019850373, + -0.0025696668, + 0.032880645, + 0.019947406, + 0.0016833657, + -0.0060854144, + -0.0077141984, + -0.014665987, + 0.0013550097, + -0.0038813578, + -0.011158904, + -0.0043388037, + 0.008455815, + -0.0034741617, + 0.027557641, + -0.033157885, + -0.008739986, + 0.020488024, + 0.026310062, + 0.0031154826, + -0.02324656, + 0.035597596, + 0.030108247, + 0.0028295792, + -0.015456121, + -0.02269208, + 0.01948996, + -0.0048482316, + 0.010722251, + -0.0019770667, + 0.020404853, + -0.023204975, + -0.003694221, + 0.012288656, + -0.0045536645, + -0.00062812155, + -0.013709511, + -0.0017492102, + 0.0068720826, + -0.02547834, + -0.017771075, + 0.027931914, + -0.01120742, + 0.0008572776, + 0.022345532, + 0.0006632097, + -0.0056452965, + -0.0043318723, + 0.003203853, + 0.0029907248, + -0.028153706, + 0.03645704, + 0.013356029, + -0.023981247, + 0.00026294467, + -0.0057735196, + -0.0056868824, + 0.0048413007, + -0.012337173, + 0.0003433009, + 0.005402711, + 0.0015308837, + 0.041696873, + -0.02310794, + -0.009821221, + -0.016662115, + -0.02484069, + 0.021527674, + -0.0028191826, + 0.009232087, + 0.008150851, + -0.008296402, + 0.017881969, + -0.006979513, + -0.014943227, + -0.015705638, + -0.012413414, + 0.020931609, + -0.014790745, + 0.022082154, + 0.0040823566, + -0.005364591, + -0.011997554, + 0.0015048925, + -0.0125936195, + 0.017244319, + 0.0049972483, + 0.0010630415, + -0.0035365408, + 0.016398737, + -0.012579758, + -0.026115993, + 0.009627153, + -0.002236979, + -0.036346145, + 0.011699521, + -0.0011574763, + 0.01260055, + 0.011110387, + -0.039201714, + 0.007014168, + 0.0024466417, + 0.007173581, + -0.006736928, + 0.018214658, + 0.0016556417, + -0.021236572, + -0.0068304967, + 0.01467985, + 0.0013541434, + 0.006276017, + 0.024119867, + -0.0045813886, + -0.0063661197, + -0.010978698, + -0.012572827, + 0.00010591428, + -0.023080217, + -0.020501886, + 0.0293597, + 0.006234431, + -0.021860361, + -0.026129855, + 0.0113321785, + 0.0115955565, + -0.018048314, + -0.0001495579, + 0.025464479, + 0.007686475, + -0.0003125446, + -0.010424218, + -0.17987321, + 0.017105699, + 0.016967079, + -0.01537295, + 0.025228826, + 0.020723678, + 0.021194985, + -0.0026805627, + -0.013411477, + 0.0053126086, + 0.02129202, + -0.0075339926, + -0.027613088, + -0.008462747, + -0.020917745, + 0.0026476404, + 0.0013913974, + 0.013563959, + 0.018200796, + 0.009828152, + 0.02380104, + -0.03396188, + 0.023856489, + -0.000010633394, + -0.011865865, + 0.00019287663, + -0.011366834, + 0.00932219, + -0.0020255835, + -0.033379678, + -0.01635715, + 0.000749414, + 0.041336462, + 0.02533972, + 0.008532057, + 0.03227072, + 0.0011921313, + 0.0057146065, + -0.015622465, + 0.010375701, + 0.00849047, + 0.006352258, + -0.0023946592, + -0.009433086, + -0.007901335, + 0.01621853, + 0.012704516, + -0.0065948428, + -0.0037704618, + 0.003167465, + -0.007048823, + -0.02636551, + -0.010743044, + -0.002940475, + 0.0076587508, + 0.013203547, + 0.0054512285, + 0.0013784019, + -0.0005761391, + 0.008871675, + -0.035874836, + -0.00025428092, + 0.017784936, + -0.021139538, + -0.011443075, + -0.011810417, + -0.02477138, + -0.013709511, + -0.021319743, + 0.016592804, + -0.012607482, + -0.015650189, + -0.0017076242, + -0.039700747, + -0.016010601, + 0.020765264, + -0.025921926, + 0.0051289373, + -0.008227092, + 0.0037704618, + -0.0067923763, + 0.046520844, + -0.013619407, + -0.0029040873, + 0.0058324332, + -0.005385384, + 0.0034568342, + 0.020418715, + -0.010847009, + -0.016939355, + 0.007346856, + -0.010382632, + -0.006546326, + -0.0097380495, + 0.023288148, + 0.016925493, + -0.016232394, + 0.027640812, + -0.013959026, + -0.016925493, + -0.00084731425, + -0.005551728, + -0.02136133, + 0.014090715, + 0.044053413, + 0.01447192, + -0.00060559576, + -0.0019372134, + 0.013605545, + -0.0006012639, + -0.019018654, + 0.0021018246, + 0.030856794, + 0.010763837, + -0.016010601, + 0.013515443, + 0.012323311, + -0.009135053, + 0.025145654, + -0.01760473, + 0.04410886, + -0.0073607177, + 0.0047026807, + 0.013113445, + 0.015109572, + -0.013418408, + -0.13895261, + -0.031272653, + 0.012129243, + 0.038647234, + 0.0032229132, + 0.02122271, + 0.008573642, + 0.0056314343, + 0.012940169, + 0.020862298, + -0.022816839, + -0.02212374, + 0.005447763, + 0.020973194, + 0.018741414, + -0.009377638, + -0.0021936602, + -0.023620835, + -0.012011416, + 0.022719806, + -0.0068998067, + -0.0014633066, + 0.0105767, + 0.006068087, + 0.008441953, + 0.008726124, + -0.020474162, + 0.021264296, + 0.012448069, + 0.0005076955, + 0.0013558761, + -0.023288148, + 0.019642442, + -0.036900625, + -0.0150264, + 0.024341658, + -0.009398431, + 0.000066169356, + 0.026102131, + -0.035375804, + 0.003411783, + -0.0036283764, + 0.024438692, + -0.02136133, + -0.007977577, + 0.0022733668, + -0.015650189, + 0.020224646, + 0.013903578, + -0.02073754, + -0.030302314, + 0.003527877, + -0.00959943, + -0.009356845, + 0.01940679, + -0.015469983, + -0.0005536133, + 0.024161452, + -0.004245235, + -0.0033060852, + 0.0023513404, + -0.009051881, + -0.0055274693, + 0.0034499033, + 0.0066260323, + 0.005343798, + -0.013321375, + -0.009211293, + 0.010458873, + -0.0014451126, + 0.0025367446, + 0.014901642, + -0.005420039, + 0.026670473, + -0.031050863, + -0.0069552544, + -0.015761085, + -0.0037600654, + 0.010950974, + -0.03069045, + -0.010978698, + -0.0155808795, + 0.006262155, + -0.0010517787, + 0.020196922, + 0.020890022, + 0.024854552, + 0.006137397, + 0.0030323109, + -0.0071943738, + 0.008608297, + -0.0058601573, + 0.023814902, + -0.0197672, + 0.008344919, + -0.00723596, + 0.012205484, + -0.021056365, + -0.007277546, + 0.02665661, + -0.02832005, + -0.02366242, + -0.10518479, + 0.017701764, + -0.0063487925, + -0.0024709, + 0.0029266132, + -0.002706554, + -0.0002720416, + -0.008109265, + 0.0049348692, + -0.037732344, + -0.03276975, + 0.013155031, + -0.0077141984, + 0.0068270313, + -0.031189483, + -0.014804607, + 0.026947713, + 0.018034453, + -0.0025280807, + -0.0100014275, + 0.00006822699, + 0.0013818673, + 0.012198553, + 0.016800735, + -0.024064418, + -0.005586383, + 0.011775763, + -0.0067750486, + -0.014160025, + 0.0057908474, + 0.0016253185, + -0.024549589, + 0.0033615332, + 0.040948324, + -0.004120477, + -0.01585812, + -0.03742738, + 0.01474916, + 0.012884722, + 0.0204603, + -0.023745593, + -0.026698196, + 0.025755582, + -0.017285904, + 0.014166956, + 0.021070229, + 0.0013264194, + 0.02400897, + 0.020903884, + 0.008220161, + -0.005822037, + 0.022068292, + 0.009897462, + -0.01843645, + -0.021264296, + -0.020931609, + 0.01642646, + 0.027640812, + 0.013965957, + -0.020987056, + 0.031633068, + 0.011962899, + 0.017355215, + -0.005402711, + 0.003238508, + -0.02170788, + -0.020557335, + -0.01405606, + -0.006255224, + -0.026060546, + -0.015733361, + -0.011644074, + 0.020432577, + 0.0064596883, + 0.034682706, + -0.006553257, + -0.00090622774, + -0.0044843545, + 0.0063765165, + 0.03160534, + -0.004879421, + 0.012829274, + -0.0456614, + 0.020820713, + 0.013563959, + 0.0033961881, + -0.014430334, + -0.016066048, + -0.021305881, + 0.020141475, + 0.019753339, + 0.010084599, + 0.02463276, + -0.010819285, + -0.003086026, + 0.01426399, + 0.019309755, + -0.019711753, + 0.0016504434, + 0.014638264, + 0.003673428, + -0.011290593, + -0.025977373, + -0.0016920294, + -0.018685965, + -0.013945164, + -0.026850678, + -0.022442566, + -0.0065740496, + 0.013702579, + 0.0093360515, + 0.021097952, + 0.008663745, + 0.02991418, + -0.0045605954, + 0.0057908474, + 0.00723596, + -0.014652126, + -0.026864542, + 0.017577006, + 0.046160433, + 0.019434514, + 0.028555704, + 0.0032575682, + 0.014180818, + 0.003694221, + -0.005489349, + -0.03681745, + 0.01767404, + -0.0073329937, + 0.0022491082, + -0.013861992, + -0.016454184, + -0.0030548365, + -0.008587504, + 0.0012934972, + 0.0026961574, + 0.018783, + -0.032242995, + 0.049431864, + -0.018519621, + -0.015885843, + -0.0016253185, + -0.005343798, + 0.017646316, + 0.00240159, + 0.018186934, + -0.032326166, + -0.005752727, + 0.007915198, + 0.0013454796, + 0.013758027, + -0.009065743, + -0.010535114, + -0.0056452965, + -0.040976048, + 0.0027117522, + -0.019850373, + 0.001718887, + 0.03415595, + 0.01495709, + 0.015899705, + 0.012552034, + -0.025686271, + -0.020474162, + 0.011498523, + 0.0055136075, + 0.00008230558, + -0.012053003, + 0.013314444, + -0.009751911, + -0.038924474, + -0.03096769, + -0.0020238508, + -0.0019891958, + -0.011165835, + -0.003458567, + 0.0043041487, + 0.014638264, + -0.0064388956, + 0.0429999, + -0.011290593, + -0.029526044, + 0.0103964945, + -0.0064354297, + -0.007346856, + -0.013584753, + -0.0008802365 + ] + }, + { + "object": "embedding", + "index": 8, + "embedding": [ + 0.011767127, + 0.006192154, + -0.0037607332, + -0.028241105, + -0.003828555, + 0.013503372, + -0.025406143, + 0.0040421947, + -0.009298404, + -0.010261477, + -0.004018457, + 0.0074604265, + -0.0018278045, + 0.0119773755, + -0.013076093, + -0.0055546267, + 0.033314195, + -0.00091305445, + 0.020034635, + -0.005205343, + -0.020780679, + 0.010403904, + 0.020210974, + -0.022530487, + -0.01789146, + -0.0061141583, + 0.015368478, + 0.0002994768, + -0.008905036, + -0.009352662, + -0.008735481, + -0.017376011, + -0.020333054, + -0.0075011197, + -0.010152962, + -0.0062396294, + -0.010770143, + 0.0021414815, + 0.0021041792, + -0.020021072, + 0.028078333, + -0.003923506, + -0.011305937, + 0.00513413, + -0.024253167, + 0.03917402, + 0.000032453914, + 0.012289356, + -0.020088894, + 0.026125057, + 0.004445736, + 0.019180078, + -0.021051968, + -0.018474728, + -0.02327653, + -0.015856797, + -0.013198173, + 0.019315721, + 0.0029129575, + -0.00022169335, + -0.025758818, + -0.024985647, + -0.018881662, + 0.008206469, + 0.0032673276, + 0.0022499969, + -0.015015803, + 0.006232847, + -0.0065414375, + 0.008769392, + 0.02859378, + -0.0094137015, + 0.008674441, + -0.004571207, + 0.018298391, + -0.01592462, + -0.026545553, + -0.0027891821, + -0.009725683, + -0.0009537477, + 0.010064794, + -0.011197422, + -0.015707588, + 0.026681198, + 0.022639003, + 0.012133366, + 0.004255834, + 0.029489031, + -0.0065448284, + 0.011923118, + 0.011061777, + 0.012764111, + -0.010749796, + 0.007080623, + -0.028729424, + -0.021255434, + -0.020441568, + 0.048045147, + -0.019966815, + -0.025107726, + 0.023466432, + -0.024958517, + -0.032147657, + -0.012811586, + -0.024985647, + -0.015368478, + -0.0141341165, + 0.0130354, + 0.009040681, + -0.004849277, + -0.014093423, + 0.03133379, + 0.021567414, + -0.06516343, + 0.005303685, + -0.01417481, + -0.022408407, + -0.031659335, + -0.009637514, + -0.02364277, + 0.023561383, + 0.031713594, + 0.017660864, + 0.0018244133, + 0.028485265, + -0.009149196, + -0.0013479633, + -0.021594543, + 0.0015031063, + -0.0018735843, + 0.027698528, + 0.008525233, + 0.021160481, + 0.0084235, + -0.017633734, + 0.018651066, + -0.015856797, + 0.023018807, + -0.012235099, + -0.023791978, + -0.016060263, + 0.01509719, + -0.032635976, + 0.0055546267, + -0.01220797, + 0.025894461, + 0.024700794, + 0.014459663, + 0.0021838702, + -0.0073044356, + 0.018705323, + -0.01589749, + 0.010098704, + -0.01669779, + 0.0071009696, + 0.010349646, + 0.008626966, + 0.027779914, + -0.011312719, + 0.0013589845, + -0.008498104, + 0.011895989, + 0.01405273, + -0.0033046298, + 0.037492033, + 0.009325533, + -0.0029044796, + 0.014961546, + 0.016236601, + -0.013510154, + -0.015015803, + 0.007826665, + -0.038821347, + 0.016874127, + 0.02361564, + 0.033287067, + 0.013693273, + -0.0076231994, + -0.020889195, + -0.0010478508, + -0.0061378963, + 0.021933654, + 0.030465668, + 0.026423473, + -0.033070035, + -0.012960795, + 0.03255459, + -0.013510154, + 0.0278613, + -0.01266916, + 0.019139385, + 0.026179314, + 0.021947218, + -0.01152975, + -0.66194326, + -0.003367365, + -0.010980391, + 0.021268997, + 0.0051002186, + 0.018189875, + 0.010573459, + 0.00056334696, + -0.025867334, + 0.0013691578, + -0.021363948, + 0.0028078333, + -0.0089999875, + 0.0003458925, + -0.0089999875, + -0.00086218794, + 0.0006595695, + -0.001080914, + 0.0008346352, + 0.009210235, + 0.0023144276, + 0.022082862, + 0.004238879, + -0.013455897, + 0.021920089, + 0.014120553, + 0.027942687, + -0.036813814, + -0.0042592254, + -0.0023686853, + -0.013062528, + 0.016250165, + -0.012472477, + -0.0058530434, + 0.020156715, + -0.00061675685, + -0.025080597, + 0.022462666, + -0.0069585433, + 0.04430137, + -0.014812337, + 0.0049408367, + 0.01869176, + -0.010512419, + -0.000081545426, + 0.004255834, + 0.026816841, + -0.0060531185, + 0.014066295, + 0.00074519485, + 0.010064794, + -0.025053468, + -0.012675943, + 0.0051917783, + 0.012621685, + 0.0023992052, + 0.016779177, + 0.0032673276, + 0.0030096038, + 0.012418219, + -0.0002490341, + -0.019030869, + -0.021174047, + -0.012370744, + 0.0007621504, + 0.015042933, + -0.01393065, + 0.00321307, + 0.0034826626, + -0.011027867, + -0.0049272724, + 0.022910291, + -0.011339848, + 0.010193655, + 0.0010359819, + 0.01346946, + 0.02026523, + -0.027752787, + 0.0006358318, + -0.011448364, + 0.007087405, + -0.004313483, + -0.04362315, + -0.010308953, + 0.040286303, + -0.021011274, + -0.011292373, + -0.011855296, + 0.033721127, + -0.02029236, + 0.012628467, + 0.01881384, + -0.008328549, + 0.010837965, + -0.0077927546, + 0.017457398, + -0.0039438526, + 0.01441897, + 0.008416717, + -0.016670661, + -0.0033588875, + -0.006215892, + 0.016507888, + 0.0053308136, + 0.012784458, + 0.0040896703, + -0.025039904, + 0.031496562, + 0.023086628, + -0.030547054, + -0.015599073, + -0.0017014858, + -0.0018871487, + 0.00043406116, + 0.02499921, + -0.034752022, + 0.009325533, + 0.029461902, + 0.03255459, + -0.015232834, + -0.0018735843, + -0.00079309416, + 0.0018244133, + -0.012397872, + -0.027467933, + 0.006880548, + -0.004221923, + -0.021146918, + 0.0033470185, + 0.0216488, + 0.004449127, + 0.0040998436, + 0.028648037, + -0.0063786646, + 0.039011247, + 0.009122067, + 0.033124294, + -0.011658612, + 0.007941963, + 0.005524107, + -0.031686466, + -0.012065544, + -0.00968499, + 0.0007252721, + -0.010397121, + -0.03846867, + -0.012099455, + -0.0051137833, + -0.03477915, + 0.016073829, + 0.001085153, + -0.0035030092, + -0.015110754, + 0.0010902396, + -0.016223036, + -0.020305924, + 0.0006366796, + -0.003050297, + -0.022096427, + -0.0068398546, + 0.0024314208, + 0.0065177, + -0.01122455, + -0.015639767, + 0.0022059125, + -0.0018295, + 0.02521624, + 0.011319501, + -0.012831934, + -0.014106988, + -0.0062192827, + 0.00008382383, + -0.015029368, + 0.024456633, + 0.0154634295, + -0.0060904208, + 0.01122455, + 0.015232834, + 0.0076978034, + 0.023018807, + 0.010519201, + -0.0033521052, + -0.029868834, + -0.010492072, + 0.029380515, + -0.00038086323, + 0.028566651, + -0.0012555559, + -0.011631483, + 0.0016116217, + 0.0076503283, + 0.0034657072, + 0.0006366796, + 0.0027739222, + 0.002623018, + 0.0054257647, + -0.007019583, + -0.0019532752, + 0.010505637, + 0.0057173995, + 0.021133354, + 0.0078198835, + 0.019478494, + 0.009305187, + 0.0062396294, + -0.018935919, + -0.014269761, + -0.016440067, + 0.019505624, + 0.0036149158, + 0.021418206, + -0.021445334, + -0.020102458, + -0.0015861883, + -0.0040659322, + 0.03111676, + -0.015666895, + 0.004225314, + -0.0042897454, + -0.007745279, + 0.009603604, + -0.017335318, + -0.0048967525, + 0.010186873, + -0.045549296, + 0.013089657, + 0.011122817, + 0.01958701, + -0.0038014264, + -0.013781442, + -0.017253932, + 0.003984546, + 0.003659, + 0.011177075, + -0.029895963, + 0.0066126506, + 0.018434035, + -0.020563647, + 0.03543024, + -0.0011394105, + 0.02330366, + 0.028213976, + 0.024877131, + -0.024822874, + 0.0031774633, + -0.007704586, + 0.026925357, + 0.008213251, + -0.007908052, + -0.0012487737, + -0.011319501, + 0.01331347, + -0.0025941937, + -0.0067855967, + 0.0020855283, + -0.0051002186, + 0.018705323, + -0.0120791085, + 0.01854255, + 0.022462666, + -0.010871876, + -0.0044694734, + 0.006656735, + -0.006883939, + -0.00055020646, + 0.013164261, + 0.016833434, + 0.0017565913, + -0.032174785, + -0.02422604, + -0.0034114495, + -0.020590777, + 0.01168574, + -0.011394106, + 0.01134663, + -0.018732453, + -0.015694024, + -0.025080597, + 0.0060056434, + 0.005476631, + -0.005144303, + -0.029570417, + 0.011461928, + 0.016087392, + -0.01116351, + -0.021879395, + -0.015273527, + 0.00019021968, + -0.00412019, + 0.018149182, + 0.014147681, + 0.014364712, + -0.007541813, + 0.0038658574, + -0.011611137, + -0.011550097, + 0.029190613, + -0.021282561, + -0.005710617, + -0.003367365, + -0.007948745, + -0.02429386, + 0.0066024773, + -0.008247162, + 0.024185346, + 0.011109253, + -0.013015053, + -0.014120553, + 0.0029875617, + -0.019139385, + -0.0019142776, + 0.015816104, + 0.0033724518, + 0.014785209, + 0.002041444, + 0.007806319, + -0.0040455856, + 0.0054596756, + 0.018244134, + -0.007643546, + 0.004903535, + -0.030357152, + -0.023710592, + -0.020834936, + 0.121645644, + -0.0028061375, + -0.0020516173, + 0.002687449, + 0.006293887, + -0.0049883123, + -0.010654845, + -0.0035538757, + 0.0024941561, + -0.00027467933, + 0.0071348804, + -0.01337451, + -0.00839637, + 0.0119773755, + -0.00059174746, + -0.0060395543, + -0.016467195, + 0.0031384658, + 0.0047916286, + -0.015259963, + -0.00056037976, + -0.031035373, + 0.011536532, + 0.03358548, + -0.005931039, + 0.01488016, + 0.013510154, + 0.009373008, + 0.01226901, + -0.032853004, + -0.007813101, + 0.029678933, + -0.008152211, + 0.022299893, + 0.0062091094, + 0.026721891, + 0.021119788, + 0.013984908, + 0.023113757, + -0.013449114, + 0.009590039, + 0.012580992, + 0.0135305, + -0.018284827, + 0.032527458, + -0.021363948, + 0.0012903146, + 0.016874127, + -0.0016523149, + -0.021363948, + 0.03274449, + 0.016155215, + -0.03160508, + 0.0032842832, + -0.010688757, + 0.013944215, + 0.0041778386, + -0.0007443471, + 0.0008295485, + 0.012811586, + -0.0032045923, + -0.038360156, + 0.00642614, + -0.0014954763, + -0.01036321, + -0.024036137, + -0.0013293123, + 0.015965313, + -0.021784445, + -0.010180091, + 0.0051544765, + -0.027481498, + -0.013849264, + 0.023886928, + 0.010892223, + -0.0073383464, + 0.027237339, + -0.004717024, + -0.010295388, + 0.02339861, + -0.022856034, + 0.00039485155, + -0.010946481, + -0.010756578, + -0.03225617, + 0.024632972, + 0.023832671, + -0.015300657, + -0.011482274, + 0.0069381967, + 0.010458161, + 0.017850766, + 0.019139385, + 0.014256196, + -0.006822899, + -0.012587774, + -0.01263525, + 0.012614903, + -0.016223036, + -0.019573446, + 0.020238101, + -0.01696908, + 0.001300488, + 0.005049352, + 0.019898992, + 0.031822108, + 0.018271262, + 0.015178576, + -0.010661627, + 0.012499605, + 0.027549319, + -0.034236576, + 0.0260708, + 0.012804804, + -0.015259963, + 0.0049544014, + -0.0015319308, + 0.01205198, + 0.020183844, + -0.0042049675, + -0.008003003, + -0.011970594, + 0.012859062, + 0.027006743, + -0.0051137833, + 0.0050391788, + -0.015734717, + 0.001179256, + -0.0011343239, + 0.015571944, + 0.0024687229, + 0.023357917, + -0.018054232, + -0.00590391, + -0.026247136, + 0.0019871863, + -0.018366214, + 0.013028617, + -0.009291622, + -0.009834198, + -0.012770893, + 0.014825902, + 0.0061684162, + -0.022828905, + -0.026437039, + -0.024958517, + 0.0025009385, + 0.0004192251, + -0.023127321, + 0.01577541, + -0.00020802298, + 0.011102471, + -0.011326283, + 0.007813101, + -0.019085128, + -0.014364712, + -0.027264467, + -0.02330366, + -0.0029044796, + 0.02337148, + 0.03871283, + -0.0048255394, + 0.025012774, + -0.0033843208, + 0.013449114, + -0.00035479415, + 0.008348895, + 0.012140148, + -0.027996946, + 0.0032825875, + 0.010003754, + -0.0071009696, + -0.009895238, + 0.01079049, + -0.011733216, + 0.021798009, + -0.0001939287, + -0.0117196515, + -0.011482274, + -0.0063074515, + -0.023385046, + -0.029299129, + -0.015599073, + -0.001655706, + -0.016521454, + -0.007284089, + 0.022055734, + 0.0025297627, + 0.0097731585, + -0.017362447, + -0.0014446098, + -0.008369242, + 0.02878368, + -0.000865579, + -0.020305924, + -0.0027111867, + 0.00581235, + -0.020468697, + -0.018990176, + 0.024022574, + 0.000786312, + 0.0019804041, + -0.012926884, + 0.021892961, + 0.0047509354, + 0.01325243, + 0.01266916, + 0.0044355625, + 0.010770143, + -0.018949483, + -0.016467195, + -0.008470975, + -0.0112584615, + -0.021825138, + -0.009020334, + 0.012418219, + 0.0021346994, + 0.027807044, + -0.028159719, + -0.01881384, + 0.012106237, + 0.006965325, + 0.011183857, + 0.004316874, + 0.025067033, + 0.013598323, + 0.0029739973, + -0.022747518, + 0.014500356, + -0.011482274, + -0.009020334, + 0.047475442, + 0.022367714, + 0.004686504, + -0.022856034, + 0.0004115951, + 0.0035504848, + -0.006866983, + -0.0008626118, + 0.04427424, + 0.0100783575, + -0.0015200619, + -0.0067381216, + -0.004157492, + -0.030248638, + 0.0049544014, + -0.0084913215, + -0.005941212, + -0.026789714, + -0.015504123, + -0.0094611775, + 0.00044635392, + -0.0076910215, + 0.0075689415, + 0.0061378963, + -0.018623937, + -0.0045915535, + 0.0038794216, + -0.014636, + 0.02524337, + 0.02398188, + 0.011611137, + -0.0125402985, + 0.013523718, + 0.023900494, + -0.0043338295, + -0.013754313, + -0.016006006, + -0.00359796, + 0.022245634, + -0.01395778, + 0.0010495463, + 0.0071416628, + -0.010214002, + 0.024307426, + 0.003129988, + 0.017552348, + -0.0032215477, + -0.012872627, + -0.0020550084, + 0.005602102, + 0.030411411, + 0.006144678, + -0.003209679, + -0.034724895, + -0.020373747, + -0.004744153, + -0.0065821307, + 0.02152672, + 0.014825902, + -0.0055614086, + 0.002407683, + -0.024578713, + 0.011733216, + 0.0022533878, + -0.01749809, + 0.0012428393, + 0.029353386, + -0.021784445, + 0.00777919, + 0.008688006, + 0.022340586, + -0.023168014, + -0.008199687, + 0.004676331, + -0.006226065, + 0.021024838, + 0.0031537258, + -0.0027162733, + -0.011448364, + -0.016440067, + -0.0044966023, + -0.008165776, + -0.0050222236, + 0.037709065, + -0.0021635236, + -0.0039981105, + -0.0034182316, + -0.023534253, + 0.03363974, + -0.017240368, + 0.006677082, + 0.020129588, + -0.014866595, + 0.0015980572, + 0.022367714, + 0.0094137015, + 0.007860577, + -0.005005268, + -0.030004479, + 0.0061209407, + 0.016223036, + -0.007324782, + -0.028539522, + -0.01577541, + -0.013564412, + -0.012519952, + 0.027549319, + -0.0050696987, + -0.006907677, + 0.008464193, + 0.017782943, + 0.05577686, + 0.003662391, + -0.004649202, + -0.023317223, + -0.011495839, + -0.0009774854, + -0.03391103, + -0.00029269457, + -0.0041371454, + 0.02364277, + -0.011509404, + -0.014825902, + -0.022055734, + 0.008199687, + -0.039770856, + 0.008118301, + -0.014324019, + 0.020929888, + 0.008755827, + 0.008321767, + 0.013110003, + 0.004544078, + 0.0013572889, + 0.0061514606, + -0.018067796, + -0.006622824, + 0.02232702, + -0.04061185, + 0.016128086, + -0.012018069, + -0.014703822, + 0.017606607, + 0.020319488, + 0.0041642743, + -0.0009791809, + 0.02152672, + -0.029434772, + 0.0070399297, + 0.0039404617, + 0.014012037, + -0.0020075329, + 0.021174047, + 0.0014081554, + -0.024619406, + 0.012506387, + 0.024470199, + -0.012065544, + 0.0012716636, + 0.018339084, + 0.000033884535, + 0.0063854465, + 0.015382043, + -0.013639016, + 0.002948564, + 0.024266733, + -0.025962284, + 0.024755051, + -0.015219269, + 0.0060124253, + 0.0067313393, + -0.008247162, + 0.0026399735, + 0.004052368, + 0.017850766, + -0.03206627, + -0.011597572, + 0.01786433, + -0.014947982, + -0.0077249324, + 0.005469849, + 0.0145953065, + -0.03751916, + -0.009508653, + -0.014907288, + -0.0064498778, + -0.015124319, + 0.027508626, + 0.019478494, + -0.013150697, + -0.012614903, + -0.009671425, + -0.020780679, + 0.005340987, + -0.023045935, + 0.006656735, + -0.013110003, + -0.009352662, + -0.0010936307, + -0.0047543263, + -0.02133682, + -0.0060836384, + 0.002139786, + 0.008403153, + 0.0057614837, + 0.2369974, + -0.027996946, + 0.0017379402, + 0.025962284, + 0.007975874, + 0.011292373, + 0.03382964, + 0.0141341165, + -0.012465694, + 0.000540457, + -0.031008245, + 0.0068873297, + 0.004554251, + 0.007880923, + 0.0063447533, + 0.0011190639, + -0.032418944, + -0.05669924, + -0.019600574, + -0.009556128, + -0.0020702684, + -0.000778682, + -0.008755827, + -0.013428767, + 0.022299893, + 0.010776925, + -0.010770143, + -0.014446098, + 0.017660864, + 0.0056224484, + -0.012553863, + -0.0012046893, + -0.018895226, + 0.007941963, + 0.0037471687, + 0.015273527, + -0.01657571, + -0.0022211724, + 0.0013683101, + 0.020129588, + -0.009637514, + -0.004327047, + -0.0024941561, + -0.021892961, + -0.023262966, + 0.015219269, + -0.011631483, + -0.005378289, + -0.014527485, + 0.027617142, + -0.04796376, + -0.0069348053, + 0.019641267, + 0.03339558, + 0.002389032, + -0.012920102, + 0.0445184, + 0.012302921, + -0.009020334, + -0.015042933, + -0.038875602, + 0.0072637424, + -0.011299155, + 0.0008672746, + -0.009528999, + 0.0145410495, + -0.029597547, + -0.00830142, + 0.0029282174, + 0.0120791085, + -0.008572708, + -0.02398188, + -0.009786723, + -0.0017938934, + -0.019112255, + -0.036216978, + 0.013815354, + 0.0077588432, + -0.004510167, + 0.02432099, + -0.0031435525, + -0.009474741, + 0.017036902, + 0.014120553, + 0.016467195, + -0.015354914, + 0.0064668334, + 0.0222592, + -0.009386573, + -0.0096171675, + 0.0012682725, + -0.016331552, + -0.003726822, + -0.0099766245, + 0.00986811, + 0.016385809, + 0.003246981, + 0.02582664, + -0.030438539, + -0.02133682, + -0.0073722578, + -0.02063147, + 0.025596045, + 0.013123568, + 0.017782943, + -0.010661627, + 0.006619433, + 0.012648813, + -0.013849264, + -0.013869611, + -0.0057818303, + -0.022544052, + -0.00025030578, + -0.009495088, + 0.018013539, + -0.00030901426, + 0.014256196, + -0.020739986, + 0.0150022395, + -0.01980404, + 0.010939698, + -0.014364712, + 0.014093423, + 0.0084913215, + 0.0010351342, + -0.0096171675, + -0.020943452, + 0.0030486016, + -0.014215503, + -0.0432976, + -0.011556879, + 0.007975874, + 0.0040693237, + -0.008057261, + -0.031930625, + -0.0013801788, + -0.00035288665, + -0.008437064, + -0.006198936, + 0.005683488, + 0.0019804041, + -0.0076638926, + 0.011088907, + 0.0042320965, + -0.009657861, + -0.0021804792, + 0.0025806292, + -0.0050663077, + -0.008565926, + -0.007514684, + -0.006002252, + -0.0061819805, + -0.015788974, + -0.026314959, + 0.036542524, + -0.017552348, + 0.0044355625, + -0.024917824, + 0.0041676653, + 0.022164248, + -0.033558354, + -0.012248663, + 0.027834173, + -0.014473227, + -0.0063820556, + 0.010044447, + -0.17655438, + 0.025311192, + 0.019790476, + -0.0055274977, + 0.013218519, + 0.0091017205, + 0.0186375, + 0.01128559, + -0.025107726, + -0.0005629231, + 0.022896728, + 0.0038963773, + -0.043080572, + -0.024158217, + -0.018203441, + -0.021174047, + -0.0057038353, + -0.0063379714, + 0.009705337, + 0.016765613, + 0.02693892, + -0.019912556, + 0.022544052, + -0.016290858, + 0.00538168, + -0.011706087, + -0.014012037, + 0.0154634295, + -0.008464193, + -0.018054232, + -0.027942687, + -0.010987174, + 0.03184924, + 0.007080623, + 0.0032842832, + 0.040666107, + -0.01233005, + 0.005364725, + -0.01681987, + 0.016358681, + 0.02813259, + 0.033721127, + -0.004971357, + 0.0026671025, + -0.015327785, + 0.021798009, + -0.0040693237, + -0.0050595254, + 0.0013920477, + -0.0069280234, + 0.013598323, + -0.010770143, + 0.01417481, + 0.021947218, + 0.008403153, + 0.004384696, + -0.0041167988, + -0.0077588432, + -0.0097731585, + 0.002555196, + -0.03502331, + -0.011909554, + 0.0059513855, + -0.019980378, + -0.009142414, + -0.010715885, + -0.022530487, + -0.0041405368, + -0.019424237, + 0.017972846, + -0.015192141, + -0.021079095, + 0.011210986, + -0.0140798595, + 0.018271262, + 0.009081374, + -0.0107972715, + 0.018596807, + 0.014378277, + 0.011149947, + 0.0045983354, + 0.051816054, + -0.012804804, + 0.025677431, + -0.0056631416, + -0.005144303, + -0.007514684, + 0.012309703, + -0.019546317, + -0.011061777, + 0.01774225, + -0.009467959, + -0.018311955, + -0.022408407, + 0.011502621, + 0.025379013, + -0.0042320965, + 0.0036013513, + -0.0033656696, + -0.0006430379, + 0.0108244, + 0.0065380465, + -0.023195144, + 0.019790476, + 0.032853004, + 0.02536545, + 0.017131852, + -0.0035742226, + 0.00535116, + 0.02235415, + -0.0278613, + -0.01497511, + 0.011265243, + 0.016833434, + -0.030465668, + 0.01614165, + 0.015300657, + -0.024334554, + 0.012567427, + -0.024850002, + 0.048018016, + -0.0036149158, + 0.00071085995, + 0.019329287, + -0.0040388037, + 0.0035674402, + -0.090990074, + -0.041344326, + 0.0052833385, + 0.02533832, + -0.00067525334, + 0.029190613, + -0.008938947, + -0.011407671, + 0.021540286, + 0.029461902, + -0.030058736, + 0.0044999938, + 0.018718887, + 0.011645047, + 0.03155082, + -0.01263525, + 0.004717024, + -0.009203454, + -0.011292373, + 0.017782943, + -0.008118301, + -0.003923506, + -0.00016118336, + -0.0014963242, + -0.009196671, + -0.0014708908, + -0.025650302, + 0.010614152, + 0.024185346, + 0.010810836, + 0.00802335, + -0.032120526, + 0.014798773, + -0.02337148, + -0.014147681, + 0.0052901204, + -0.016901257, + 0.013442332, + 0.030248638, + -0.012445347, + -0.011278808, + -0.002112657, + 0.030492797, + -0.023683462, + 0.008586273, + -0.010817618, + -0.009888456, + 0.015721153, + 0.015911054, + -0.0178372, + -0.013204955, + -0.01180782, + -0.028186847, + -0.0184476, + 0.019437801, + -0.028702294, + -0.0058225235, + 0.014378277, + -0.014730951, + 0.0011699304, + -0.0031706812, + -0.007155227, + -0.028892197, + 0.032825876, + -0.005700444, + 0.0044084336, + -0.020360181, + -0.0014395232, + 0.01856968, + -0.008667659, + -0.0033436276, + 0.0033131074, + -0.02997735, + 0.013408421, + -0.013279559, + 0.009237364, + 0.0001644685, + -0.009752812, + -0.00019668396, + -0.035565887, + -0.009495088, + -0.022286328, + 0.0047305888, + -0.00916276, + 0.026735455, + 0.014798773, + -0.0037471687, + -0.005568191, + 0.0054528937, + -0.033015776, + 0.008898254, + -0.00013479634, + 0.018434035, + -0.025202677, + -0.00003764654, + 0.010261477, + -0.00928484, + -0.017810073, + 0.02444307, + 0.018203441, + -0.019275028, + -0.019315721, + -0.10292675, + 0.0049374457, + 0.0071687917, + -0.0027145778, + 0.014812337, + -0.0044999938, + 0.014527485, + -0.015666895, + -0.0020380528, + -0.007019583, + -0.040259175, + 0.0020990926, + -0.015368478, + 0.0020397485, + -0.016670661, + -0.009501871, + 0.025677431, + 0.02613862, + -0.009474741, + 0.013727184, + 0.018718887, + 0.0013979821, + -0.008504886, + 0.00050061155, + -0.0073926044, + 0.004686504, + 0.00042367593, + 0.015219269, + -0.015219269, + -0.01152975, + 0.01970909, + -0.02711526, + 0.0034572294, + 0.026084363, + 0.00096646434, + -0.009908803, + -0.008660877, + 0.0054495023, + -0.010492072, + 0.031523693, + -0.013327034, + -0.0059106923, + 0.012228317, + -0.01239109, + 0.003338541, + -0.009088156, + 0.012235099, + 0.018556114, + 0.011489057, + 0.019912556, + -0.01337451, + 0.023412174, + -0.0045949444, + -0.013293123, + -0.015165012, + -0.009508653, + 0.011509404, + 0.007914834, + 0.016494324, + -0.01614165, + 0.010295388, + -0.00470346, + 0.010675192, + -0.0006421901, + 0.019410674, + -0.029000713, + -0.016562147, + 0.004198185, + 0.00088083895, + -0.026274266, + -0.009271275, + -0.023344353, + 0.025813075, + 0.013110003, + 0.02121474, + -0.0034267094, + 0.01174678, + -0.02533832, + -0.03206627, + 0.04077462, + 0.0055308887, + 0.008966076, + -0.024741488, + 0.015883926, + 0.023778414, + -0.00676525, + -0.018434035, + -0.014486792, + 0.0021720014, + 0.010905787, + 0.007813101, + -0.000060509992, + 0.01587036, + -0.011265243, + -0.0094611775, + -0.003950635, + -0.015883926, + -0.004917099, + -0.0045372956, + 0.02133682, + 0.026152186, + 0.006527873, + -0.01079049, + -0.01100752, + -0.015571944, + 0.025379013, + -0.0006040402, + -0.021051968, + -0.0007231527, + 0.026599811, + 0.020156715, + 0.004645811, + -0.0060124253, + 0.01657571, + -0.0016336638, + 0.014351147, + 0.0012504692, + -0.004445736, + -0.02330366, + 0.0017498091, + 0.031876367, + 0.02213712, + 0.025894461, + -0.0012665769, + 0.019980378, + 0.0065143085, + 0.0032859787, + -0.02650486, + -0.01128559, + -0.003338541, + -0.0075214664, + -0.0055546267, + -0.031496562, + -0.01842047, + -0.004649202, + -0.0020227928, + 0.022964548, + 0.025718125, + -0.025161983, + 0.037898965, + -0.012642032, + -0.013733966, + 0.008084389, + -0.015110754, + 0.019424237, + -0.00081513636, + 0.027264467, + -0.025609609, + -0.024632972, + 0.0007235766, + 0.014405405, + 0.0005769114, + -0.036759555, + -0.025636738, + -0.016684227, + -0.03415519, + 0.016331552, + -0.023045935, + 0.02060434, + 0.040449075, + 0.01568046, + -0.006158243, + 0.0067279483, + -0.027101694, + 0.004601727, + 0.028376749, + 0.0073383464, + -0.003360583, + -0.022530487, + 0.023412174, + 0.0047339797, + -0.028431006, + -0.021798009, + 0.010865093, + -0.0058089592, + -0.007704586, + -0.010749796, + 0.030764086, + 0.012764111, + -0.02133682, + 0.033097163, + -0.022042168, + -0.04514236, + 0.014934417, + -0.0092238, + -0.012587774, + -0.0022652568, + -0.020007508 + ] + }, + { + "object": "embedding", + "index": 9, + "embedding": [ + -0.008189119, + -0.0015157744, + 0.0074148276, + -0.034777507, + -0.021128977, + 0.0044751437, + -0.019960977, + 0.020341562, + -0.017729968, + -0.0353287, + 0.022835044, + -0.0058432776, + 0.012998914, + 0.0019521337, + -0.010229837, + -0.01561707, + 0.016115766, + -0.011404398, + 0.008445029, + -0.0051181996, + -0.008208805, + 0.027297063, + -0.010879455, + -0.008215366, + 0.0019783808, + 0.0065093, + -0.002918358, + -0.016535722, + 0.0061976146, + -0.024475493, + 0.013307318, + -0.028793152, + -0.024449244, + -0.037244745, + 0.011791544, + -0.011798106, + -0.015984531, + -0.008733748, + 0.006151682, + -0.009494917, + 0.012887363, + -0.011023814, + -0.003313706, + -0.010026421, + -0.021404572, + 0.015722059, + -0.0073098387, + -0.003343234, + -0.028688164, + 0.006670064, + 0.021535808, + 0.022441337, + -0.0248692, + 0.0019258866, + -0.025590997, + -0.013806015, + -0.015577699, + -0.0004457919, + -0.017323136, + -0.010761342, + -0.0062993225, + -0.01956727, + -0.015630193, + 0.024081785, + 0.0025951895, + -0.018438641, + -0.0024196615, + 0.0134385545, + 0.0038714586, + 0.02171954, + 0.030525466, + -0.0061352775, + 0.012847993, + -0.0032087173, + 0.014212846, + 0.0012319769, + -0.019829743, + 0.013333566, + -0.0075263777, + 0.0059023337, + 0.004183144, + -0.042940382, + -0.030079264, + 0.026247177, + 0.017415002, + 0.009199635, + -0.031549107, + 0.023950549, + -0.006975187, + -0.0041929865, + 0.022034505, + 0.021916393, + 0.022467583, + 0.0011507747, + -0.032756478, + 0.014147229, + -0.0021407853, + 0.037717193, + -0.014186599, + -0.012231184, + 0.011955589, + -0.005836716, + -0.010846646, + -0.02040718, + -0.0014239093, + 0.008930602, + -0.02175891, + -0.034357555, + 0.013543543, + -0.016378239, + -0.013451678, + 0.014750914, + 0.0056398623, + -0.041234314, + -0.002867504, + -0.023071269, + 0.003335032, + -0.0158008, + -0.025840346, + -0.038609598, + 0.020538416, + 0.021772033, + 0.010754781, + -0.020367809, + 0.037795935, + 0.0056004915, + -0.00057210645, + -0.019304799, + -0.008504085, + 0.0029298412, + 0.021207718, + -0.0065093, + -0.0076576136, + 0.0034711892, + -0.013327004, + 0.023058144, + -0.033412658, + 0.009711456, + -0.018123675, + -0.035197463, + 0.0015379206, + 0.028241962, + -0.0060926257, + 0.020748394, + -0.007040805, + 0.020039719, + 0.0023310774, + 0.004842604, + 0.013195768, + -0.025407268, + 0.018661743, + -0.022808796, + 0.0075066923, + 0.0073229624, + 0.0025361334, + 0.012559274, + 0.012847993, + 0.019409787, + 0.007972579, + 0.0030331893, + -0.0024311447, + -0.007106423, + 0.030997915, + -0.034278814, + 0.020328438, + 0.016207632, + 0.012008083, + -0.0034908745, + 0.0060335696, + -0.016430732, + -0.010347949, + 0.020275945, + -0.018254912, + 0.02077464, + 0.013792891, + 0.009914871, + 0.0066208504, + 0.022716932, + -0.022231359, + -0.0051542893, + 0.007244221, + 0.008655006, + 0.007841344, + 0.028688164, + 0.0038124025, + 0.0062665134, + 0.025761604, + -0.017139407, + -0.00019572601, + -0.02282192, + -0.004406245, + 0.02398992, + 0.023635583, + -0.010846646, + -0.6702479, + -0.016666956, + -0.011286286, + -0.0068701985, + 0.017454373, + 0.0113847125, + 0.022401966, + 0.017651226, + -0.02165392, + -0.013117027, + -0.011732488, + 0.0056004915, + 0.0064469627, + -0.012933296, + -0.013963498, + -0.0033547173, + 0.01459343, + -0.0063583786, + -0.029370591, + 0.0076641757, + -0.013451678, + -0.0011868646, + -0.0036253913, + -0.004334065, + 0.024436122, + 0.0033924475, + 0.0030594366, + -0.0072639063, + -0.010525118, + 0.0064141536, + -0.03566991, + 0.016614463, + 0.018044934, + -0.0039042674, + 0.047271166, + 0.0016666957, + -0.023740571, + -0.0036549193, + 0.024344256, + 0.009389928, + 0.0054397276, + -0.0039436384, + 0.009055276, + -0.010420129, + -0.001067932, + 0.008864984, + 0.014068487, + -0.006830828, + 0.015564576, + 0.018569877, + 0.017861204, + 0.0023720886, + -0.013215453, + -0.005255997, + 0.007165479, + -0.0031102905, + 0.008733748, + 0.0010654713, + 0.019659135, + -0.009245568, + -0.004215953, + -0.005095233, + -0.036116116, + -0.008727186, + -0.01232305, + 0.014094734, + -0.010288893, + 0.0016552126, + -0.00054914015, + -0.009265253, + 0.008438467, + 0.035092477, + -0.018189294, + -0.001996426, + 0.01748062, + 0.019002955, + 0.015498958, + -0.006817704, + 0.006214019, + -0.0067783333, + 0.018373024, + 0.004275009, + -0.008536894, + 0.014107858, + 0.011620938, + -0.027218321, + -0.033412658, + 0.008641883, + 0.0015239767, + -0.0006393648, + 0.01057105, + 0.024724841, + -0.01700817, + 0.001861909, + -0.014002869, + 0.01085977, + 0.013884757, + 0.020827135, + 0.013832262, + -0.008943725, + -0.011030376, + -0.024987312, + -0.011305971, + 0.0008915838, + 0.0012877521, + 0.008038198, + 0.009245568, + 0.01155532, + 0.025039807, + -0.043622807, + 0.004199548, + -0.02128646, + -0.048583522, + -0.008674691, + 0.025722234, + -0.029239355, + 0.022428213, + -0.0057875025, + 0.016338868, + -0.014882149, + -0.0033727621, + -0.007447636, + 0.012054016, + -0.008333478, + 0.018228665, + 0.009501478, + 0.008661568, + -0.017205024, + -0.009258691, + 0.001945572, + -0.0033104252, + 0.018386148, + 0.014724666, + 0.001847145, + 0.023740571, + 0.0032497286, + 0.005416761, + -0.0147377895, + 0.0049508736, + -0.019331045, + -0.023228751, + -0.0043110987, + -0.012716757, + -0.008976534, + -0.0056234575, + -0.020538416, + -0.012382106, + -0.023058144, + -0.041890495, + 0.011647184, + -0.021496437, + -0.010282331, + -0.0408931, + 0.009711456, + -0.00541348, + -0.015328351, + 0.004275009, + -0.02194264, + 0.0049279076, + -0.0041503347, + 0.021181472, + 0.021968886, + -0.03162785, + -0.003251369, + 0.022362594, + -0.0034875935, + 0.023136886, + 0.016430732, + -0.0013189206, + -0.010708848, + -0.00113355, + -0.009567096, + 0.0021342235, + 0.0020948527, + 0.032231532, + 0.016443856, + -0.006243547, + -0.0026690098, + -0.0036221105, + -0.0005782581, + 0.00039739866, + -0.02161455, + -0.01389788, + 0.00892404, + 0.009718017, + 0.005160851, + 0.01631262, + 0.019751001, + -0.022769425, + 0.00041236775, + -0.016811317, + 0.0034318184, + -0.014829655, + 0.005761255, + -0.0048918175, + -0.00039657843, + -0.0082481755, + 0.005964671, + 0.0003272695, + 0.022113247, + 0.025315402, + -0.010892578, + 0.0017733249, + -0.005679233, + -0.006670064, + -0.031549107, + 0.012624892, + -0.02161455, + 0.021010865, + 0.0066339737, + 0.014291587, + -0.024344256, + 0.0053445813, + 0.015236486, + 0.021955764, + 0.04047315, + -0.01013141, + 0.0011868646, + 0.014396576, + 0.01013141, + -0.010807275, + -0.022953156, + -0.0036811666, + 0.0059056147, + -0.012099949, + 0.015669564, + 0.006177929, + 0.027769513, + -0.004809795, + -0.023556842, + -0.022283852, + 0.008385973, + 0.010052669, + 0.008169434, + -0.01645698, + -0.0076379282, + 0.011719365, + -0.028556928, + 0.019698506, + -0.0035597733, + 0.02556475, + -0.010741657, + 0.033780117, + 0.0023671673, + -0.005446289, + -0.00314474, + 0.032940205, + 0.005767817, + -0.024987312, + 0.02673275, + -0.014252217, + -0.00438984, + 0.00043758965, + -0.004685121, + 0.010183904, + -0.016443856, + 0.03262524, + -0.008490962, + 0.005797345, + 0.037061013, + -0.0019586955, + -0.0102495225, + 0.014803408, + 0.002326156, + 0.00047942108, + -0.018438641, + 0.029738052, + -0.010623544, + -0.007677299, + -0.010374197, + -0.010052669, + -0.01232305, + 0.031286635, + -0.021877022, + 0.011588128, + -0.028530682, + -0.004078155, + -0.013248262, + -0.0003565925, + -0.00917995, + -0.014422824, + -0.023097515, + 0.014449071, + 0.009173389, + -0.0076116812, + -0.017454373, + -0.0017536395, + 0.0048196376, + -0.008359726, + 0.051234487, + 0.0031004478, + 0.03236277, + -0.0054955026, + -0.00259683, + -0.0030692792, + -0.0050394577, + 0.029318096, + -0.017834956, + -0.010223275, + -0.017401878, + 0.018281158, + -0.010649792, + -0.008162872, + 0.0011745611, + 0.05141822, + 0.007139232, + 0.00053642667, + -0.0068964455, + -0.005922019, + -0.009501478, + 0.008930602, + 0.0059909183, + -0.005101795, + -0.0030988073, + -0.011102555, + -0.018858597, + -0.006975187, + 0.009875501, + 0.015643317, + -0.009534287, + -0.005236312, + -0.030840432, + -0.017992439, + -0.016155137, + 0.10467374, + -0.0028100885, + -0.0047376156, + 0.004537481, + 0.0029052345, + 0.014278464, + 0.00071441534, + 0.005823592, + 0.015971407, + -0.0052428734, + 0.009823006, + -0.033727624, + 0.016391361, + 0.0060795024, + -0.0020981338, + -0.008353164, + -0.0046916828, + -0.033045195, + 0.019790372, + -0.012841431, + 0.009527725, + -0.0100854775, + 0.011673432, + 0.02658839, + -0.0066799065, + -0.007769164, + 0.03968573, + 0.012441162, + 0.021811403, + -0.008733748, + -0.005987637, + 0.022467583, + 0.0029462455, + 0.01872736, + 0.00003957582, + -0.020656528, + 0.030919174, + 0.006889884, + 0.0063911877, + -0.011811229, + 0.025105424, + -0.007112985, + -0.0027608748, + -0.017113158, + 0.011483139, + -0.0010613702, + -0.02333374, + 0.013208891, + -0.029711803, + -0.0043110987, + 0.048216064, + -0.008792805, + -0.0054659746, + -0.00009171133, + -0.0024295042, + 0.015315227, + -0.0067061535, + -0.021168347, + 0.005003368, + -0.0070736143, + -0.016653834, + -0.023976795, + -0.0074082655, + -0.011679994, + -0.018792978, + -0.03698227, + -0.012375544, + -0.0032661331, + -0.042546675, + -0.030892927, + 0.01085977, + -0.029921781, + -0.004048627, + -0.0011286286, + 0.024173649, + -0.025932211, + 0.020249696, + 0.004275009, + 0.009737702, + 0.022743179, + -0.0014255497, + -0.029134367, + 0.0066372547, + 0.011732488, + 0.0022277292, + 0.022913786, + 0.026772121, + -0.031470366, + -0.0019111226, + 0.02040718, + 0.0015830329, + -0.007237659, + 0.021732662, + 0.012664263, + -0.009055276, + -0.023202505, + 0.006758648, + 0.025761604, + -0.010991005, + -0.016522598, + 0.022152618, + -0.02552538, + 0.007906962, + -0.008353164, + 0.015577699, + 0.014094734, + 0.009639275, + 0.023254998, + -0.025000436, + -0.0029380433, + 0.028005738, + -0.03013176, + 0.0069555016, + 0.009632714, + -0.01846489, + 0.026798368, + 0.008910917, + 0.009015905, + -0.01085977, + -0.00917995, + 0.025814097, + -0.025735356, + 0.01375352, + 0.03734973, + 0.001441134, + -0.00081612315, + -0.006128716, + 0.0008440108, + -0.019803494, + -0.0051444466, + -0.010485747, + 0.0017290327, + -0.012697072, + -0.018911092, + -0.028136974, + -0.00943586, + -0.011942466, + 0.011470016, + -0.007920085, + -0.022835044, + -0.0024114593, + -0.004911503, + 0.0072639063, + -0.0034547846, + -0.031732835, + -0.012979229, + 0.017401878, + 0.0037369418, + -0.027165828, + 0.012218061, + -0.017113158, + 0.007828221, + -0.022677561, + 0.0014435947, + -0.0143572055, + -0.018766731, + -0.028399445, + -0.013504173, + 0.017821833, + 0.010420129, + 0.027218321, + 0.0017257519, + 0.013235139, + 0.0030348299, + -0.017821833, + 0.0018635496, + -0.009711456, + 0.0151708685, + 0.001002314, + 0.016876934, + 0.027060838, + 0.013543543, + -0.015538328, + 0.0014362127, + -0.016063273, + 0.018609248, + 0.011804667, + -0.018123675, + -0.017100036, + -0.019029204, + -0.016719451, + 0.0028871894, + -0.012080263, + 0.0030331893, + -0.019396663, + -0.015288981, + 0.022664437, + -0.01210651, + -0.0021899987, + 0.006624131, + 0.009737702, + -0.01938354, + 0.010964758, + 0.020197202, + -0.016194507, + -0.013622285, + -0.015498958, + -0.0038681778, + 0.008425344, + 0.023753695, + 0.018661743, + 0.0017798867, + -0.016404485, + -0.0034219758, + -0.0004466121, + 0.015328351, + -0.00079233665, + -0.016653834, + 0.017953068, + -0.02779576, + -0.015420216, + -0.0022687404, + 0.0033990094, + -0.018058058, + -0.010452938, + 0.012585521, + -0.022362594, + 0.017467497, + -0.02750704, + -0.009514602, + -0.011076309, + -0.010964758, + 0.019737877, + -0.0053773904, + 0.018596124, + 0.013418869, + -0.013005476, + -0.013287633, + 0.017310012, + 0.0036910092, + -0.022585696, + 0.021824528, + 0.0021850774, + -0.010918826, + -0.022191988, + -0.0039305147, + -0.0026903355, + 0.009980489, + -0.0065617943, + 0.035984877, + 0.023740571, + 0.0031709871, + -0.03178533, + -0.02194264, + 0.0073360857, + 0.013235139, + -0.0086812535, + 0.008576265, + -0.0071851644, + -0.0023130325, + -0.01729689, + 0.007040805, + -0.02640466, + 0.019803494, + 0.009927995, + -0.025669739, + -0.009941118, + -0.012099949, + 0.0030988073, + -0.00097442645, + 0.0050525814, + 0.019357292, + 0.018819226, + 0.012401791, + -0.003946919, + -0.00030655882, + -0.032494005, + 0.01784808, + -0.019987226, + 0.020932123, + -0.014186599, + -0.013701026, + -0.002252336, + 0.0045834132, + 0.02644403, + 0.028583175, + 0.004527638, + -0.01960664, + -0.014580307, + 0.0027789199, + 0.024396751, + 0.0030610769, + -0.003269414, + -0.00837285, + -0.021640796, + -0.014514688, + -0.014790284, + 0.0089502875, + 0.012821746, + -0.007493569, + -0.0086812535, + -0.007966018, + -0.0052166265, + 0.020604033, + -0.0020472798, + -0.0138716325, + 0.03616861, + 0.027034592, + -0.004970559, + -0.0028691445, + -0.002472156, + 0.013300757, + -0.034226317, + -0.001879954, + -0.007854467, + -0.007966018, + 0.013648531, + -0.012598645, + -0.00035741273, + -0.011699679, + 0.015774554, + 0.012972667, + 0.016247002, + 0.01225087, + 0.023727447, + -0.010426691, + 0.0062960414, + -0.014659048, + 0.0017241114, + 0.024527987, + -0.0075132544, + 0.006059817, + 0.009225883, + -0.008175995, + 0.03010551, + 0.013182645, + 0.00976395, + 0.012152443, + -0.020131584, + -0.011371589, + -0.012231184, + 0.014711542, + -0.011896533, + -0.008149749, + -0.013701026, + -0.014449071, + -0.0053445813, + 0.015945159, + 0.015302104, + -0.014829655, + -0.021050235, + 0.032756478, + 0.03921328, + 0.012624892, + -0.0059023337, + -0.020354686, + -0.00859595, + 0.002677212, + -0.05448914, + -0.013556667, + -0.0030249872, + 0.030840432, + 0.009376803, + -0.018294282, + -0.031732835, + 0.0062173, + -0.024659222, + -0.006082783, + -0.007493569, + 0.023097515, + 0.01524961, + -0.008116939, + -0.012664263, + -0.0021785158, + 0.0041044024, + 0.022690684, + -0.00010550135, + 0.0061943335, + 0.030158006, + -0.031207893, + 0.02458048, + 0.0014304711, + -0.009494917, + 0.010229837, + 0.0137666445, + -0.00025611502, + 0.00021407854, + 0.0013952014, + -0.017493743, + -0.013609161, + -0.016732575, + 0.0004293874, + -0.011515949, + 0.021522684, + 0.033622634, + -0.037244745, + 0.0027198638, + 0.021667045, + -0.026129065, + 0.0036713239, + 0.008497523, + 0.0007603479, + 0.0069883107, + 0.00015574008, + -0.028530682, + -0.0068242657, + -0.005446289, + -0.041129325, + 0.015682688, + 0.012598645, + -0.012565835, + 0.0076969843, + -0.0027756388, + 0.0055906484, + -0.010557927, + -0.0067192772, + -0.037979666, + -0.007880715, + 0.020997742, + -0.026877109, + -0.008280984, + -0.010741657, + 0.012565835, + -0.034357555, + 0.0047310535, + 0.0003309605, + -0.012821746, + -0.014514688, + -0.0020128305, + 0.016470103, + -0.007106423, + -0.0027297065, + 0.0062533896, + -0.021312708, + -0.001503471, + -0.006528985, + 0.01758561, + -0.010518556, + 0.024436122, + 0.013464802, + -0.007040805, + -0.042494178, + -0.004524357, + 0.013622285, + 0.0016265047, + 0.0060106036, + 0.23475474, + 0.018110553, + 0.0013000554, + 0.031207893, + -0.0067783333, + 0.030525466, + 0.025249785, + -0.005735008, + -0.00994768, + -0.010098601, + -0.018058058, + -0.007749479, + -0.0077626025, + -0.0012992353, + -0.0091668265, + -0.015669564, + -0.020958371, + -0.039160788, + -0.01027577, + -0.022428213, + 0.0016256846, + 0.005928581, + -0.0018291001, + -0.020302191, + 0.033333912, + 0.004567009, + -0.016509473, + 0.013884757, + 0.03228403, + 0.0059154574, + -0.003167706, + 0.009475231, + 0.014606554, + 0.008609074, + -0.012185251, + -0.012185251, + -0.022428213, + -0.0034711892, + 0.015538328, + 0.01872736, + 0.0007808535, + -0.008904355, + 0.005794064, + -0.0053905137, + -0.0031168521, + 0.040210675, + 0.0006287019, + -0.004143773, + 0.018412394, + 0.019449158, + -0.023635583, + -0.009639275, + 0.00980332, + 0.039475754, + 0.013687903, + 0.0080841305, + 0.026024075, + 0.013195768, + 0.0033891667, + 0.0019833022, + -0.017782463, + 0.0065913224, + -0.014435947, + 0.006204176, + -0.003992852, + 0.0025295718, + -0.029134367, + 0.03514497, + 0.005767817, + 0.0020948527, + 0.0146852955, + -0.016811317, + -0.011975274, + -0.010026421, + -0.02051217, + -0.032494005, + 0.027822006, + 0.037953418, + 0.0037763126, + 0.0183599, + -0.022178864, + 0.015288981, + 0.018766731, + -0.00076198834, + 0.011417522, + -0.03404259, + 0.004970559, + 0.008451591, + 0.0037172565, + 0.00175528, + 0.007565749, + 0.0043832785, + -0.014015992, + -0.0038124025, + 0.010544803, + 0.0057186037, + 0.0035466498, + 0.012847993, + -0.01408161, + 0.008405658, + -0.010702286, + -0.005397076, + 0.02519729, + -0.0023655267, + -0.0050985143, + 0.0011097634, + 0.008891231, + 0.015498958, + -0.027008345, + -0.037323486, + -0.01013141, + -0.010439814, + -0.008766557, + -0.0012631454, + 0.029081872, + 0.003628672, + 0.032572746, + -0.0126839485, + 0.012172128, + -0.01608952, + 0.00057374686, + -0.01923918, + -0.018858597, + 0.012933296, + 0.0071917265, + -0.011837477, + -0.018569877, + 0.0038353687, + 0.0082481755, + -0.031732835, + 0.0022392122, + 0.010354511, + -0.00057989854, + -0.0061221537, + -0.006496176, + 0.027926996, + 0.0037402227, + -0.021076484, + -0.010761342, + -0.0017175496, + 0.026929604, + 0.006410873, + 0.011305971, + 0.017572485, + -0.006666783, + -0.0040748743, + 0.022979403, + 0.0016404486, + 0.0028428973, + -0.012368982, + -0.013366375, + -0.017165653, + -0.0035433688, + -0.018884843, + 0.01803181, + -0.019002955, + -0.023451852, + -0.023963673, + -0.014908397, + 0.03616861, + -0.014580307, + 0.0073820185, + 0.033963848, + -0.013431992, + -0.030525466, + -0.0007845445, + -0.16934678, + 0.0274283, + 0.039108295, + -0.00028092682, + 0.010052669, + 0.01989536, + -0.005587368, + -0.012204937, + -0.0038386495, + 0.017113158, + 0.039187036, + 0.0019980664, + -0.025171041, + -0.016522598, + 0.0012483813, + -0.026982097, + -0.008313793, + -0.0037369418, + 0.010931949, + -0.002874066, + 0.016443856, + -0.013806015, + 0.022178864, + -0.027585782, + -0.006597884, + 0.017165653, + 0.0010728533, + 0.02220511, + -0.0019997067, + -0.018609248, + -0.02761203, + -0.010630107, + 0.016076395, + 0.0048918175, + 0.022021381, + 0.021312708, + 0.0015379206, + -0.012565835, + -0.0076707373, + 0.008359726, + 0.009029029, + 0.019331045, + 0.015328351, + 0.008490962, + -0.0035204026, + 0.024698593, + 0.03517122, + 0.0027854815, + 0.0061024684, + -0.014606554, + 0.016037025, + -0.021496437, + -0.003533526, + 0.014475318, + 0.0012811903, + 0.011634061, + -0.0018192574, + -0.0011614376, + 0.0073492094, + -0.016627586, + -0.021995135, + 0.0008579546, + -0.005426604, + -0.0054692556, + -0.022795673, + -0.022323223, + -0.0050985143, + 0.009593343, + -0.026220929, + 0.018163046, + 0.0044849864, + -0.03632609, + 0.013327004, + -0.024947941, + 0.026247177, + 0.018819226, + -0.015000261, + 0.014934643, + -0.009914871, + -0.001301696, + -0.020105338, + 0.027533289, + -0.020840257, + -0.022520078, + 0.010662915, + 0.009396489, + -0.008497523, + 0.0026050322, + -0.0071326704, + -0.016693205, + -0.014317835, + -0.02542039, + 0.0056693903, + -0.03262524, + 0.0063419743, + 0.007867591, + -0.010872893, + -0.002897032, + -0.011424083, + 0.008477838, + 0.027848255, + 0.0021457067, + -0.030420478, + 0.02845194, + 0.029606815, + 0.010833522, + -0.009448984, + 0.014619677, + 0.012408352, + -0.012460847, + -0.028294457, + -0.01129941, + 0.021023989, + 0.0042782896, + -0.009134018, + 0.0009826287, + 0.012939858, + -0.006981749, + 0.004176582, + -0.0014723026, + 0.05496159, + -0.0007816737, + -0.0076969843, + 0.039738227, + -0.00015850834, + -0.013543543, + -0.07690423, + -0.027218321, + 0.02106336, + 0.016194507, + -0.013674779, + 0.04433148, + -0.0055808057, + 0.01762498, + 0.0036188294, + 0.019436033, + 0.0068439515, + -0.018084304, + 0.01371415, + -0.013976621, + 0.0427829, + 0.019081697, + 0.008792805, + -0.028294457, + -0.008182557, + 0.016601339, + -0.017126283, + 0.0041240877, + -0.011634061, + -0.016483227, + 0.000017788614, + -0.0018012126, + -0.029475579, + 0.01755936, + 0.011889971, + 0.011876848, + -0.010807275, + -0.020604033, + -0.01960664, + -0.00281665, + -0.014147229, + 0.009849253, + -0.034173824, + 0.010879455, + 0.020131584, + -0.04015818, + -0.007565749, + 0.00208501, + 0.0046687163, + -0.021850774, + -0.010492309, + -0.004078155, + 0.015735183, + -0.0130186, + 0.023793066, + -0.009527725, + -0.0022687404, + -0.0022917066, + -0.008504085, + 0.015525205, + -0.016443856, + -0.016430732, + -0.01024296, + 0.011430645, + -0.020787764, + -0.0067652096, + -0.00917995, + -0.0043078177, + -0.025945334, + 0.010800713, + 0.016194507, + 0.014882149, + -0.031339128, + -0.026181558, + 0.012605207, + -0.0169688, + -0.016942553, + 0.009081523, + -0.02695585, + -0.00071277487, + -0.023071269, + -0.010518556, + -0.013556667, + -0.0156039465, + 0.024737963, + -0.029239355, + -0.027926996, + -0.028845647, + 0.008746872, + 0.013136712, + 0.023924302, + 0.025879717, + 0.0012024487, + -0.015813924, + -0.0068045803, + -0.024265515, + 0.015315227, + 0.031207893, + -0.0020308753, + -0.025066053, + -0.008707501, + 0.024186773, + 0.0031939533, + -0.006378064, + 0.007447636, + 0.0158008, + -0.012710195, + -0.010072354, + -0.08887294, + 0.013648531, + -0.0027854815, + -0.019094821, + 0.030289242, + -0.014882149, + 0.0027379086, + -0.021352079, + -0.001368134, + 0.012027768, + -0.047271166, + -0.007985704, + 0.0021243808, + 0.0117062405, + -0.020302191, + -0.02490857, + 0.031207893, + 0.012172128, + 0.009665523, + 0.010439814, + 0.014816531, + 0.0035630541, + 0.014514688, + -0.008307232, + -0.020879628, + -0.00073902204, + -0.010945072, + 0.017375631, + 0.0015805722, + -0.0052133454, + 0.009560534, + -0.039187036, + 0.005613615, + 0.0446202, + -0.00075952767, + -0.021575179, + 0.013412307, + 0.024698593, + 0.03446254, + 0.008641883, + -0.009672085, + -0.008602512, + 0.008202243, + -0.020695899, + -0.009744264, + 0.0073229624, + 0.009927995, + -0.002040718, + 0.016470103, + 0.031654093, + 0.0014271903, + 0.03923953, + 0.00039145202, + -0.02304502, + -0.0092193205, + -0.023254998, + 0.017716844, + 0.0036713239, + -0.007723232, + 0.011017253, + 0.023963673, + 0.0125199035, + 0.011640623, + 0.024173649, + 0.023766818, + -0.011056623, + -0.02545976, + 0.0020472798, + 0.021863898, + -0.015341475, + -0.00015502238, + 0.0011679993, + 0.023071269, + 0.0009777073, + 0.028268209, + -0.0183599, + 0.015905788, + -0.0027149424, + -0.029974276, + 0.02212637, + 0.0020718866, + 0.000023261047, + -0.01758561, + 0.020761516, + 0.01254615, + -0.0006791457, + -0.023018774, + 0.00318247, + -0.005954828, + 0.0167457, + -0.004212672, + -0.010649792, + 0.012847993, + -0.0031217735, + 0.010557927, + 0.011279725, + 0.010945072, + -0.005108357, + 0.017782463, + 0.01758561, + 0.008792805, + -0.023018774, + -0.0044423346, + -0.016338868, + -0.016010778, + 0.030315489, + -0.0005606233, + -0.015367722, + -0.012093387, + 0.011050061, + 0.023386234, + 0.026654009, + 0.009613029, + 0.02538102, + -0.026378412, + 0.01700817, + -0.0138191385, + -0.029055625, + -0.03244151, + 0.015695812, + 0.013464802, + 0.023359988, + 0.0060040415, + -0.0077035464, + 0.012716757, + 0.015236486, + -0.0066208504, + -0.008622197, + 0.008038198, + -0.0068964455, + 0.023622459, + 0.007578872, + -0.020564662, + 0.006027008, + -0.013622285, + 0.013661656, + -0.008182557, + -0.0034908745, + -0.017073788, + 0.024186773, + -0.0037336608, + 0.00961959, + 0.0058465586, + 0.012198376, + 0.031837825, + 0.012992352, + 0.022401966, + -0.027664524, + -0.019659135, + 0.009724579, + 0.01729689, + 0.006975187, + -0.012480533, + -0.016706329, + 0.0034022902, + 0.002165392, + 0.017533114, + -0.014278464, + 0.012040893, + 0.039370764, + 0.005219907, + 0.029606815, + -0.01733626, + -0.022730054, + -0.005105076, + 0.017310012, + 0.010991005, + -0.0013927408, + -0.026798368, + 0.0107875895, + 0.00032644926, + -0.016286373, + -0.023241876, + 0.012237746, + -0.014068487, + -0.02431801, + 0.0028806275, + 0.026535895, + 0.018648619, + -0.007723232, + 0.024790458, + -0.020052843, + -0.0042651664, + 0.013477925, + -0.014029116, + -0.007355771, + 0.0037795934, + -0.013340128 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 23, + "total_tokens": 23 + } +} diff --git a/vectorstores/dolt/testdata/TestWithAllOptions.httprr b/vectorstores/dolt/testdata/TestWithAllOptions.httprr new file mode 100644 index 000000000..11f58b712 --- /dev/null +++ b/vectorstores/dolt/testdata/TestWithAllOptions.httprr @@ -0,0 +1,9441 @@ +httprr trace v1 +256 67812 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 61 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["tokyo","potato"]}HTTP/2.0 200 OK +Content-Length: 66856 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:11 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 106 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-fqbb6 +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999998 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_8556afbd1c1047e383547116b8e0e438 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.008533556, + 0.0014080032, + -0.010539479, + -0.014651955, + -0.010988966, + 0.012142874, + -0.036978744, + 0.00235981, + -0.014812965, + -0.038239993, + 0.0062223845, + -0.015269161, + 0.011740348, + -0.02619104, + -0.015228909, + -0.01734888, + 0.022621974, + -0.01937493, + 0.017093947, + -0.01806001, + -0.009070258, + 0.015618018, + -0.004125894, + -0.027371783, + -0.012498439, + -0.014504362, + 0.007305851, + -0.0207301, + 0.01004303, + -0.020864276, + 0.01631573, + -0.013820067, + -0.010646819, + -0.017254958, + 0.0031111923, + -0.004622343, + -0.010606566, + -0.008741528, + 0.0027019572, + -0.0042097536, + 0.005702455, + -0.016235225, + -0.0030893888, + -0.012578945, + -0.023977146, + 0.0073729386, + -0.01140491, + 0.012968053, + -0.0033761887, + 0.014168924, + 0.010807829, + 0.018999238, + -0.0352613, + -0.0080706505, + -0.02373563, + -0.0012956313, + -0.030779839, + -0.0047934167, + 0.0034449536, + 0.0035858378, + -0.002752273, + -0.006460546, + -0.01745622, + 0.011847689, + 0.018100264, + -0.018140515, + -0.011136559, + 0.02836468, + -0.017697737, + -0.0014717365, + 0.022943996, + 0.020649595, + -0.0025107574, + 0.00168474, + 0.036549382, + -0.01200199, + 0.0014599962, + -0.00029015433, + 0.008305457, + 0.0134510845, + 0.021763252, + -0.042372596, + 0.004920883, + -0.0032285957, + 0.009157471, + 0.010982257, + -0.010707198, + 0.032604624, + 0.0072387634, + -0.004162792, + 0.010136953, + 0.008540265, + 0.010901752, + 0.011069471, + -0.02836468, + -0.0015295997, + -0.007654707, + 0.048866685, + -0.02313184, + -0.013196152, + -0.006688644, + 0.0035221046, + 0.0070643355, + -0.00834571, + -0.032336272, + 0.00905684, + 0.015336249, + -0.0129278, + 0.0025057257, + -0.0144238565, + -0.00014235172, + 0.031504385, + -0.0054039145, + -0.05342865, + -0.02346728, + -0.018905316, + -0.0015648208, + -0.018650383, + -0.008828742, + -0.012800334, + 0.009479493, + 0.010660237, + 0.026445974, + 0.0047397465, + 0.025775095, + -0.0072119283, + -0.0086408965, + -0.0103717595, + 0.0003601771, + -0.010519352, + 0.03469776, + 0.01069378, + 0.0101101175, + 0.015953457, + -0.028820878, + 0.015483842, + -0.01615472, + 0.009613669, + -0.019254172, + -0.009076967, + 0.0037502027, + 0.010982257, + -0.008842159, + 0.010579731, + 0.0066651637, + 0.021427812, + 0.029116064, + 0.005746062, + 0.0036428624, + -0.004830315, + -0.0010306349, + -0.011740348, + 0.021146044, + -0.000048035847, + 0.0046693045, + 0.006950286, + 0.029760106, + 0.008969626, + 0.00024507978, + 0.0132632395, + -0.000092088354, + 0.0027002802, + 0.03475143, + -0.019683532, + 0.0006000157, + 0.023037918, + 0.0075540757, + 0.020985033, + 0.0032185325, + -0.0101101175, + -0.013444376, + 0.01418234, + -0.038535178, + 0.01042543, + 0.002062947, + 0.023588037, + 0.01718787, + 0.015779028, + -0.024191827, + -0.009123928, + -0.0011388138, + 0.0026583504, + 0.03359752, + 0.020864276, + -0.011331113, + 0.0046625957, + 0.029116064, + 0.018194186, + -0.0019438663, + -0.008251788, + 0.022353623, + 0.031584892, + 0.0312092, + 0.005907072, + -0.67409724, + -0.028337847, + 0.014370186, + -0.00327388, + 0.026123952, + 0.01129086, + 0.014799547, + 0.0065444056, + -0.013303492, + 0.013706018, + -0.03378537, + 0.014276263, + -0.014115253, + -0.014262846, + -0.010707198, + -0.00095683837, + 0.012773499, + -0.009217851, + 0.0007991823, + 0.01025771, + -0.0012327366, + 0.016932936, + -0.0148398, + 0.0017694383, + 0.013323618, + -0.01718787, + 0.00943924, + -0.01140491, + -0.009727717, + 0.023936894, + -0.034295235, + 0.04086983, + 0.0069435774, + -0.015872952, + 0.035824835, + -0.012116039, + -0.024849286, + 0.026553314, + 0.025077384, + 0.040011108, + -0.004266778, + 0.0004216043, + -0.0020277258, + 0.0064202934, + 0.0042131077, + 0.004595508, + 0.03268513, + -0.03104819, + 0.0066752266, + -0.014101836, + 0.015779028, + -0.037032414, + -0.021964515, + -0.01877114, + -0.0018616838, + 0.0050550587, + 0.010921879, + -0.022621974, + -0.0007715086, + -0.00048345077, + -0.011720222, + -0.0025476555, + -0.021011868, + -0.020220235, + -0.008245079, + 0.008587226, + -0.011988573, + -0.018261272, + 0.0036529256, + -0.021722998, + 0.010083282, + 0.015000811, + -0.010318089, + -0.0022273117, + 0.013873737, + 0.015524095, + 0.031799573, + -0.03126287, + -0.001854975, + -0.008218244, + 0.0069368687, + 0.011592755, + -0.017805077, + 0.0018868417, + 0.02341361, + -0.02946492, + -0.035798, + -0.010660237, + 0.020891111, + -0.018382031, + 0.0048739216, + -0.003475143, + -0.001501926, + 0.001458319, + 0.00017883067, + 0.005222778, + -0.0006138525, + -0.012592362, + 0.0035321678, + -0.0051255007, + -0.016409652, + -0.008976335, + 0.013390706, + 0.0005387981, + -0.0105126435, + -0.002769045, + -0.016396236, + 0.017308628, + 0.028901383, + -0.0122435065, + 0.01391399, + -0.010687072, + -0.014638538, + -0.00867444, + 0.021561988, + -0.024151573, + 0.021374144, + 0.009533163, + 0.026754577, + 0.010391885, + 0.0063263704, + -0.003683115, + 0.018194186, + 0.014772712, + 0.01233072, + 0.023574619, + 0.014973976, + -0.0062123216, + -0.0068831984, + 0.0053066374, + -0.01074745, + 0.012498439, + 0.016409652, + -0.016181555, + 0.016033962, + -0.009975942, + -0.000742577, + -0.005424041, + 0.01227705, + -0.042855624, + -0.040950336, + -0.013732853, + -0.0014901856, + 0.0012042243, + 0.013565134, + -0.028176837, + -0.017885583, + 0.0066047846, + -0.01679876, + 0.007715086, + -0.006889907, + -0.004135957, + -0.025989776, + 0.013303492, + -0.008305457, + -0.015067899, + -0.0033543853, + -0.0015681752, + -0.013981078, + 0.009123928, + 0.006661809, + 0.0064639, + -0.036737226, + 0.0028461958, + 0.0015623049, + -0.025721425, + 0.010264419, + 0.015966874, + -0.00055724726, + -0.017992923, + -0.017214704, + -0.019267589, + -0.017979505, + 0.0027355012, + 0.020394662, + 0.006956995, + 0.0052999286, + -0.013008306, + -0.0012218348, + 0.006393458, + 0.006074792, + -0.022474382, + -0.0044378517, + 0.004830315, + 0.025949525, + -0.029062394, + 0.007943184, + 0.019764038, + -0.0070710443, + 0.0040554516, + -0.01293451, + 0.019790873, + 0.003022301, + 0.0042365887, + 0.018543042, + -0.010338215, + 0.013350453, + 0.009419113, + -0.020394662, + 0.018046593, + 0.033758532, + -0.026043447, + 0.0045217113, + -0.01004303, + 0.012679576, + -0.02384297, + -0.0043674097, + -0.020287322, + 0.025493328, + 0.010049738, + 0.0030960976, + -0.017120782, + -0.0055582165, + 0.012954636, + -0.0036696976, + 0.04282879, + 0.006990539, + 0.019401764, + -0.026123952, + -0.0081847, + 0.017590396, + -0.033463348, + -0.009855184, + -0.017550144, + -0.012800334, + 0.010143661, + 0.001518698, + 0.03236311, + 0.01806001, + -0.006651746, + -0.02941125, + -0.021360725, + -0.004068869, + 0.023990564, + -0.0112237735, + -0.035610154, + 0.00096606294, + -0.027197355, + 0.034724597, + 0.008573809, + 0.020824024, + 0.01795267, + 0.035180792, + -0.024621187, + 0.007319269, + 0.006722188, + 0.03612002, + 0.013498046, + -0.0084262155, + 0.022554886, + -0.011586047, + -0.003938048, + -0.00496449, + 0.0010440524, + 0.011344531, + -0.029169735, + 0.01681218, + -0.0015061189, + 0.016543828, + 0.02700951, + 0.0045082937, + 0.0021702873, + 0.011867815, + 0.0019992136, + 0.0035053326, + -0.0006184648, + 0.026620401, + 0.015014228, + -0.0021652556, + 0.008298749, + -0.01729521, + 0.009144054, + -0.007218637, + -0.005313346, + 0.017483056, + -0.017415969, + -0.022554886, + -0.013873737, + 0.014933723, + 0.013229695, + -0.0137127265, + -0.051335514, + -0.0033543853, + 0.008318875, + -0.0014591576, + -0.030189468, + -0.0013761366, + -0.022138942, + -0.015457007, + 0.02078377, + 0.010613275, + 0.023668543, + 0.013940825, + -0.02085086, + -0.017845329, + -0.006651746, + 0.019240754, + -0.0155375125, + -0.0032537538, + -0.008446342, + 0.0064538373, + -0.012397808, + -0.009405696, + 0.0112707345, + 0.013498046, + 0.0134510845, + 0.009211142, + -0.0055414443, + -0.00785597, + 0.00012274954, + 0.002577845, + -0.013571843, + -0.017375715, + 0.01309552, + 0.010344924, + -0.0066148476, + -0.010217457, + 0.0024151574, + 0.02407107, + -0.007319269, + -0.017590396, + -0.0019891504, + -0.02204502, + -0.004588799, + 0.06606797, + 0.00845976, + 0.013524882, + -0.0010541156, + 0.006265992, + 0.0022558242, + -0.020287322, + 0.00009701511, + 0.012847295, + 0.007507114, + 0.0054609394, + -0.0066819354, + 0.0010390208, + 0.0070643355, + 0.00046835604, + -0.002802589, + -0.011559212, + -0.019388346, + 0.022782985, + -0.023386775, + 0.00089226646, + 0.0036864693, + 0.008285332, + 0.02252805, + 0.0006360753, + -0.0050550587, + 0.019093161, + 0.021400979, + 0.015483842, + -0.02400398, + -0.0009954139, + 0.012921092, + -0.015631435, + 0.012592362, + -0.010734033, + 0.002760659, + 0.004102413, + 0.0155375125, + 0.005021515, + -0.009975942, + 0.012216671, + 0.01932126, + 0.0026801538, + -0.0056991004, + 0.021977931, + -0.025198141, + -0.015148404, + 0.018247856, + -0.016731674, + -0.029947951, + 0.03389271, + 0.0076681245, + -0.04014528, + -0.020864276, + -0.014075001, + 0.013115646, + -0.020917946, + -0.018690635, + -0.000033255586, + 0.02280982, + 0.007996854, + -0.050181605, + 0.006658455, + -0.009727717, + -0.028176837, + -0.030457819, + -0.01167997, + -0.0046022166, + -0.028337847, + -0.002445347, + -0.007647998, + -0.021790087, + -0.024862703, + 0.024044234, + 0.019442016, + -0.024232078, + 0.004457978, + -0.00992898, + 0.00055389287, + 0.03617369, + -0.030350478, + -0.013430959, + -0.021105792, + -0.008204826, + -0.02476878, + 0.0201934, + 0.02941125, + -0.03410739, + -0.009606959, + -0.0005840823, + 0.011378075, + -0.0016713225, + 0.011284152, + 0.020649595, + 0.0148263825, + -0.011451871, + 0.0111768115, + 0.029706435, + -0.0045116483, + -0.01663775, + 0.0151349865, + -0.00943924, + 0.0016193294, + 0.012062369, + 0.00774863, + 0.02117288, + 0.01626206, + 0.019240754, + -0.011304278, + 0.00041321834, + 0.041943233, + -0.014558032, + 0.0118879415, + 0.017724572, + -0.0072320546, + 0.021454647, + 0.007339395, + 0.029438084, + 0.01893215, + -0.01462512, + 0.0055246726, + -0.023266016, + 0.016355982, + 0.017147617, + 0.011384783, + -0.003934694, + 0.019079743, + -0.007715086, + -0.008157865, + 0.00466595, + -0.0055615706, + 0.011995282, + -0.015054481, + -0.018019758, + -0.023588037, + 0.0018214312, + -0.027854815, + 0.013397414, + 0.0056957463, + -0.03628103, + -0.010063156, + -0.004987971, + 0.008741528, + -0.002576168, + -0.026553314, + -0.023990564, + -0.00035933853, + 0.012485022, + 0.0029669537, + 0.019442016, + -0.0009232945, + 0.013061976, + -0.015255744, + -0.00216861, + -0.018261272, + -0.032497283, + -0.022957413, + -0.023655124, + 0.008097486, + 0.015872952, + 0.024030816, + 0.011035928, + -0.0023279435, + -0.010948714, + -0.0067725037, + 0.013209569, + -0.004920883, + 0.025453076, + -0.017845329, + 0.023400191, + 0.014987393, + 0.01271312, + -0.022460964, + 0.0015857856, + -0.02798899, + 0.02199135, + -0.0037300764, + 0.0035724202, + -0.012565527, + -0.029706435, + -0.0009107156, + -0.014142089, + -0.0051422725, + -0.0002387903, + -0.0015388242, + 0.0019522522, + 0.0049745534, + -0.006732251, + 0.03142388, + -0.0039850096, + 0.010385177, + -0.012404516, + 0.0031413818, + -0.004300322, + 0.0005509578, + 0.004327157, + -0.011814144, + -0.0040889955, + -0.0030105608, + 0.02668749, + 0.02264881, + -0.009452658, + -0.0010356664, + 0.0003169894, + 0.011908067, + 0.035744328, + -0.00009811577, + -0.014772712, + -0.0043774727, + -0.014034748, + -0.025385987, + -0.018341778, + 0.00033921222, + -0.019723786, + -0.022514634, + 0.012907675, + -0.017067112, + 0.022501215, + -0.02951859, + -0.02635205, + 0.021951096, + 0.0090434225, + 0.022729315, + 0.016355982, + 0.010251001, + -0.00025430432, + -0.001171519, + -0.009835058, + -0.005182525, + -0.013981078, + -0.001215126, + 0.016396236, + 0.030484654, + -0.020609343, + -0.028928218, + -0.010009485, + 0.0024705047, + 0.0022776276, + -0.008419507, + 0.014222593, + 0.0005153174, + 0.009566707, + -0.024057651, + -0.0011497155, + -0.025882436, + 0.038481507, + -0.014772712, + 0.0047062025, + -0.002480568, + -0.030618828, + -0.0054106233, + 0.018153934, + -0.010029612, + 0.009311774, + 0.013833485, + -0.016959772, + 0.0020478521, + -0.018462537, + -0.018194186, + 0.02046175, + 0.0029568905, + 0.026647236, + 0.009513036, + -0.008285332, + 0.013779814, + 0.010599857, + -0.013632222, + 0.0006297858, + 0.004833669, + 0.024419924, + -0.007943184, + -0.009526454, + -0.018797975, + -0.0017006734, + 0.00094090507, + 0.0022776276, + 0.009298356, + -0.013176025, + -0.02003239, + -0.005746062, + 0.009700882, + 0.006269346, + -0.004572027, + -0.007044209, + -0.025278646, + -0.030350478, + -0.009117219, + 0.0016620979, + 0.012169709, + -0.01663775, + -0.009224559, + -0.0037233676, + -0.02946492, + 0.01745622, + -0.011693387, + -0.0042097536, + 0.009935689, + 0.027251026, + -0.016906101, + 0.009620377, + -0.007547367, + 0.019455435, + -0.025090802, + -0.006044602, + -0.0030742942, + -0.01674509, + 0.013887155, + -0.01358526, + -0.0122904675, + -0.021253385, + 0.012357555, + 0.0021971224, + 0.0062794094, + 0.021843757, + 0.042962965, + -0.020354409, + -0.0024654733, + -0.025761679, + -0.025520163, + 0.009452658, + -0.009996068, + 0.02008606, + 0.024916373, + -0.001707382, + 0.0012134488, + 0.013061976, + -0.012082496, + -0.00878849, + -0.010391885, + -0.03115553, + -0.008647605, + 0.0130015975, + -0.014142089, + -0.007815718, + -0.017469639, + 0.0012578944, + -0.0071716756, + 0.0097545525, + 0.008151156, + 0.0011295893, + 0.0004297806, + 0.025171306, + 0.011492124, + 0.012022117, + -0.013310201, + -0.024352837, + 0.011310987, + -0.007654707, + -0.026902169, + -0.03459042, + -0.0025979714, + 0.01544359, + 0.0014096803, + -0.02085086, + -0.022675645, + 0.010727324, + -0.02836468, + -0.0049376553, + -0.010821247, + 0.026110535, + 0.017670901, + -0.010848082, + 0.0077888826, + 0.006651746, + 0.019737203, + 0.008037107, + 0.004048743, + 0.01042543, + 0.034134224, + -0.031128695, + 0.03252412, + 0.0111768115, + -0.019160248, + -0.008748237, + 0.008828742, + -0.002343038, + 0.005712518, + 0.013591969, + -0.008251788, + -0.008567099, + -0.011357948, + 0.0051020198, + -0.025560416, + 0.018757721, + 0.006198904, + -0.046854053, + 0.026365468, + 0.013155899, + -0.010861499, + 0.00041133148, + 0.0111768115, + -0.0046894304, + -0.0024252206, + 0.0062928265, + -0.030243138, + -0.0018063365, + 0.0004939332, + -0.023708794, + 0.029760106, + -0.011753766, + 0.0111768115, + 0.02307817, + 0.021481482, + -0.0052730935, + -0.02471511, + -0.003683115, + -0.011384783, + -0.008694567, + 0.025520163, + -0.0027623363, + -0.027452288, + -0.004042034, + 0.02199135, + -0.042426266, + 0.011304278, + 0.009828349, + -0.0056018233, + -0.018086845, + 0.0098015135, + 0.025493328, + -0.02984061, + -0.0151349865, + 0.009117219, + -0.015738776, + -0.009311774, + -0.010244292, + 0.028472021, + -0.026392303, + 0.018408867, + 0.0017207996, + -0.002237375, + -0.03874986, + -0.01467879, + 0.0053871428, + -0.0077687562, + -0.008466468, + 0.21124576, + -0.019656697, + -0.00076354196, + 0.04103084, + -0.009996068, + 0.03775696, + 0.027251026, + 0.0010784349, + -0.011344531, + 0.0022055083, + -0.038320497, + 0.0075339493, + 0.01544359, + -0.0013962629, + -0.00020388373, + -0.01871747, + -0.024191827, + -0.02782798, + -0.041379698, + 0.0017358944, + 0.009197724, + 0.0018683926, + 0.0033208414, + -0.014544615, + 0.018784557, + 0.011250608, + -0.005222778, + -0.008868994, + 0.017563561, + 0.018891897, + 0.0015430172, + 0.0030172695, + -0.0014792839, + 0.014866635, + -0.0057661883, + -0.0026633819, + -0.005642076, + -0.008137738, + 0.031772736, + 0.023762465, + -0.0022541468, + 0.0028965117, + -0.005947325, + -0.009009879, + -0.007446735, + 0.023091588, + -0.007929767, + 0.0031279642, + -0.011921485, + 0.030296808, + -0.037354436, + -0.015121569, + 0.040574644, + 0.02471511, + 0.011592755, + -0.013732853, + 0.03322183, + 0.00682282, + -0.009915562, + -0.008104195, + -0.020126311, + 0.02291716, + -0.010358342, + 0.02352095, + 0.005216069, + -0.0038810237, + -0.01478613, + 0.0061888406, + -0.0007912156, + -0.010324798, + 0.017254958, + -0.011431745, + -0.009070258, + -0.021092374, + -0.033517018, + -0.023547783, + 0.032711964, + 0.005598469, + 0.011398201, + 0.0348051, + -0.005088602, + 0.009486201, + 0.02580193, + 0.004535129, + 0.00022180872, + -0.01937493, + 0.017415969, + 0.010130243, + 0.015309414, + -0.00709117, + -0.008761655, + -0.024205243, + -0.008976335, + -0.017872164, + -0.009781388, + 0.01200199, + -0.005940616, + 0.016074214, + -0.010848082, + -0.014061583, + -0.009499619, + -0.028015826, + 0.011438454, + -0.0069368687, + 0.0058299215, + 0.007829135, + -0.00030021748, + -0.0067792125, + -0.00050525425, + -0.030967684, + 0.0037233676, + -0.037569113, + 0.0070643355, + 0.01615472, + 0.0077016684, + -0.0020881048, + -0.016248642, + -0.025949525, + 0.018140515, + -0.019401764, + 0.02307817, + -0.017872164, + -0.009519746, + -0.006363269, + -0.004726329, + -0.008889121, + -0.0062794094, + -0.014303098, + 0.0056823287, + -0.041621212, + 0.003022301, + -0.0030742942, + 0.022514634, + -0.0012444769, + -0.0064639, + 0.018556459, + 0.0053670164, + -0.010707198, + -0.017268375, + 0.026164206, + 0.008969626, + -0.008385963, + 0.019683532, + 0.0026617048, + -0.0051758164, + -0.020904528, + 0.0063431426, + 0.021105792, + -0.016074214, + 0.010861499, + -0.021548571, + -0.021065539, + -0.0011471998, + -0.014061583, + 0.030162632, + -0.007882806, + -0.022943996, + -0.01985796, + 0.0033225187, + 0.0111768115, + -0.030243138, + -0.009204433, + 0.049725406, + -0.02193768, + -0.027532794, + -0.011539085, + -0.17464271, + 0.028981889, + 0.019133413, + -0.022165777, + 0.026767993, + 0.010807829, + -0.0056991004, + -0.018247856, + -0.0051925885, + 0.016758509, + 0.05173804, + 0.013075394, + -0.008600644, + -0.011243899, + 0.0037032412, + -0.007876096, + -0.0034784975, + 0.0049477182, + 0.028981889, + 0.013692601, + 0.0470419, + -0.03137021, + 0.0148263825, + -0.00062517356, + -0.0007048402, + 0.024084486, + -0.00038973763, + -0.00087381736, + 0.016275477, + -0.010633402, + -0.023333104, + -0.013216278, + 0.03501978, + 0.022353623, + 0.009989359, + 0.013659056, + -0.008627479, + -0.018207602, + -0.019348094, + 0.03595901, + 0.005779606, + 0.010666945, + -0.003039073, + -0.012672868, + 0.0124313515, + 0.03088718, + 0.008278623, + -0.003917922, + -0.025761679, + -0.008775072, + 0.021454647, + -0.016610915, + -0.0030172695, + 0.01936151, + 0.00867444, + -0.0107742855, + 0.008627479, + 0.0098954365, + 0.0017845329, + -0.013752979, + -0.03469776, + -0.012283759, + 0.021602241, + 0.0018415574, + -0.015067899, + 0.0014172278, + -0.01222338, + -0.010546187, + -0.019281005, + 0.017805077, + 0.0009258103, + -0.016194971, + 0.021199714, + -0.043177646, + 0.019240754, + 0.005024869, + -0.009647212, + 0.024191827, + 0.019670116, + -0.0005023192, + -0.022474382, + 0.052999288, + -0.0148263825, + -0.0047665816, + 0.0010633401, + 0.009955815, + 0.0043841815, + -0.011438454, + -0.029277075, + -0.021696163, + 0.02199135, + -0.025520163, + -0.014638538, + -0.0109151695, + -0.0012620875, + 0.010687072, + -0.007876096, + 0.023695378, + -0.021951096, + 0.004692785, + 0.011834271, + -0.009700882, + -0.010163788, + 0.043231316, + 0.026003195, + 0.023910059, + 0.018301526, + 0.026016612, + 0.01930784, + 0.008057233, + -0.020837441, + 0.002262533, + 0.015175239, + 0.02629838, + -0.024876121, + 0.0036965325, + 0.013122355, + -0.01320286, + 0.009519746, + 0.007574202, + 0.037086084, + -0.015819281, + 0.0041393116, + 0.023883224, + -0.008936082, + -0.026445974, + -0.07358179, + 0.0043674097, + 0.006765795, + 0.022393877, + -0.0055951145, + 0.039501242, + 0.0112707345, + 0.011310987, + -0.0024067715, + 0.018449118, + -0.0077352123, + -0.018019758, + 0.00911051, + -0.01985796, + 0.024809033, + -0.0033208414, + -0.0022876908, + -0.002638224, + -0.0043170936, + 0.023091588, + -0.014973976, + -0.016839014, + 0.004830315, + -0.010479099, + -0.01473246, + 0.0066752266, + -0.010713906, + 0.017831912, + 0.015725357, + 0.0072991424, + 0.0033493536, + 0.004387536, + 0.00965392, + -0.026982674, + -0.013310201, + 0.013954243, + -0.010700489, + 0.008278623, + 0.03365119, + -0.051469687, + -0.0030189466, + 0.012760081, + -0.0061687143, + -0.0034717887, + -0.009828349, + -0.013383997, + -0.028579362, + 0.00679263, + -0.00336948, + -0.015966874, + -0.018838227, + -0.0043170936, + 0.0026650592, + -0.008271914, + 0.017415969, + -0.005625304, + 0.004927592, + 0.0253189, + -0.03464409, + 0.01681218, + 0.0035824834, + -0.0038072274, + -0.014920305, + 0.02925024, + 0.008667732, + 0.011411618, + -0.018435702, + -0.033114493, + 0.031853244, + -0.018757721, + -0.015577765, + 0.021239968, + -0.020810606, + 0.00534689, + -0.027693804, + -0.010633402, + -0.00274221, + -0.017120782, + 0.018972402, + -0.024057651, + -0.014236011, + -0.028391516, + 0.0015069576, + 0.007050918, + 0.0030357186, + 0.0041762097, + 0.010942005, + -0.0034248272, + 0.018314943, + -0.016476741, + 0.005407269, + 0.008164573, + 0.0094929105, + -0.029438084, + -0.006276055, + 0.022380458, + 0.002037789, + -0.015000811, + 0.002542624, + 0.0071783843, + -0.013457794, + -0.022340206, + -0.07546025, + 0.028659867, + 0.0013124032, + -0.008292041, + 0.020502003, + 0.005128855, + 0.018704053, + 0.0069704126, + 0.0116732605, + -0.022541469, + -0.045082938, + 0.009459366, + -0.013457794, + -0.0042466517, + -0.032953482, + -0.024809033, + 0.024996879, + 0.020743519, + 0.008681149, + 0.015913203, + 0.011357948, + 0.0013442698, + 0.024272332, + 0.010391885, + -0.03410739, + 0.0077620475, + -0.0030055293, + 0.026593566, + -0.024970043, + -0.015779028, + 0.0258556, + -0.027479123, + -0.007963311, + 0.009157471, + 0.0001614298, + -0.0061620055, + 0.0016956418, + 0.0126929935, + 0.009432531, + 0.031450715, + -0.020555673, + -0.0069435774, + 0.012283759, + -0.011257317, + 0.00649409, + 0.0001541969, + 0.0020797187, + 0.0052294866, + 0.017120782, + 0.016329147, + -0.010526061, + 0.03349018, + -0.008258496, + -0.0069033247, + -0.0057628336, + -0.026284963, + 0.017000025, + 0.0105126435, + -0.008493303, + -0.0113176955, + 0.023252599, + 0.004424434, + 0.016825596, + 0.010948714, + 0.012404516, + -0.007822426, + -0.02286349, + -0.0028428414, + 0.012491731, + -0.035529647, + -0.02930391, + 0.007970019, + 0.009808223, + 0.014397021, + 0.008714693, + 0.0009325191, + 0.0090903845, + -0.0067456686, + -0.03357069, + 0.023923475, + 0.005085248, + -0.000054613585, + -0.053348143, + 0.0060546654, + 0.01255211, + -0.01816735, + -0.0072052195, + -0.012458187, + -0.01953594, + 0.026835082, + -0.005447522, + -0.0075674932, + 0.0049846163, + 0.0030524905, + 0.0028327783, + 0.018757721, + -0.008325584, + -0.022031602, + 0.026794828, + 0.028418351, + 0.01871747, + -0.0074936966, + -0.011633008, + -0.0070106653, + -0.012833878, + -0.009747843, + -0.019884795, + -0.022018185, + 0.009975942, + 0.01462512, + 0.02286349, + 0.015792446, + -0.0005379595, + 0.018596712, + -0.01031138, + 0.006520925, + -0.017831912, + -0.036254197, + -0.01936151, + 0.018891897, + 0.03378537, + 0.021213133, + 0.026942423, + -0.005997641, + 0.016047379, + -0.0019203855, + 0.008942791, + -0.02613737, + 0.0029417959, + -0.0035153958, + 0.01626206, + 0.00976797, + -0.017899, + -0.0025308838, + -0.00878849, + 0.0038273535, + 0.0076681245, + 0.02836468, + -0.003978301, + 0.05291878, + -0.01135124, + 0.0014675435, + -0.0017375716, + 0.0059607425, + 0.02122655, + -0.004655887, + 0.016718255, + -0.025412822, + -0.014705625, + 0.0030575222, + -0.011163394, + 0.00698383, + -0.014598285, + -0.02471511, + -0.0051355637, + -0.020354409, + 0.019442016, + -0.010398595, + 0.015685106, + 0.037783794, + -0.003874315, + 0.02658015, + 0.018395448, + -0.013571843, + 0.0013308524, + 0.021535153, + 0.011612882, + 0.009305065, + -0.02389664, + 0.016825596, + -0.00226421, + -0.018650383, + -0.0112707345, + 0.0061519425, + -0.015054481, + -0.02613737, + 0.009996068, + 0.0024587645, + 0.014665373, + 0.0005983385, + 0.019227337, + -0.020985033, + -0.024299167, + 0.01734888, + -0.005806441, + -0.003579129, + -0.0024621189, + -0.01948227 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 4, + "total_tokens": 4 + } +} +247 34475 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 52 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["japan"]}HTTP/2.0 200 OK +Content-Length: 33520 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:12 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 97 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-66lnk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999998 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_6addc7670bab492cb3252c6a5def1b8d + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0025093954, + -0.014704405, + -0.0073522027, + -0.02217393, + -0.008075691, + 0.017116033, + -0.024598593, + 0.0051230774, + 0.014808692, + -0.039342105, + -0.0152910175, + 0.011536702, + 0.005507634, + -0.023177689, + 0.0012546977, + -0.0012180345, + 0.019983914, + -0.018875869, + 0.02467681, + -0.017037818, + -0.009405345, + 0.026501823, + 0.0047776285, + -0.0016522902, + 0.008303817, + 0.0038748977, + 0.0046766005, + -0.019006226, + 0.008773107, + -0.005448973, + 0.00782801, + -0.007977922, + -0.0087079285, + -0.027140578, + 0.0075477404, + -0.009196771, + -0.011621434, + -0.01291198, + -0.0018624929, + -0.012527424, + 0.019579802, + -0.009066413, + -0.012436173, + -0.00083307043, + -0.010213565, + 0.022108752, + -0.014743513, + 0.005768351, + -0.008492837, + 0.026058605, + 0.02089642, + 0.03381492, + -0.030243104, + -0.014274224, + -0.026827719, + -0.005315356, + -0.03334563, + -0.0094379345, + -0.0065146512, + 0.00045136528, + 0.0052729896, + 0.021678569, + -0.03459707, + 0.012768586, + 0.012827247, + -0.012468763, + -0.00036948404, + 0.012560013, + -0.016672814, + -0.008544981, + 0.030634178, + 0.027922727, + 0.006045362, + 0.003698914, + 0.024624664, + -0.006325632, + -0.0067069298, + -0.008584088, + 0.0030406052, + 0.013765827, + 0.019162657, + -0.031259898, + 0.0016294776, + -0.0118625965, + 0.007899707, + 0.0049307994, + -0.034232065, + 0.03449278, + 0.006967646, + -0.0044680275, + 0.011100002, + 0.01160188, + 0.011504112, + 0.02024463, + -0.028887378, + -0.014443689, + -0.0041095424, + 0.043617856, + -0.006182238, + -0.025719674, + -0.017142104, + 0.0192148, + -0.008773107, + -0.012879391, + -0.024116268, + 0.010037581, + 0.0064788028, + -0.010115797, + 0.016359955, + -0.0086362315, + -0.009118557, + 0.0281313, + 0.006100764, + -0.053290434, + -0.010721963, + -0.018980155, + 0.011256431, + 0.0030520116, + -0.008942573, + -0.01930605, + 0.017572286, + 0.023490548, + 0.016425135, + 0.000037987196, + 0.026749505, + 0.003094378, + -0.008193013, + -0.017702645, + 0.000025320554, + -0.0077497954, + 0.022916973, + 0.0109175, + 0.0000014878531, + 0.016751029, + -0.017441928, + 0.0029949797, + -0.0130293025, + -0.00095080014, + -0.018380508, + -0.016894424, + 0.0015748901, + 0.0033925723, + -0.0026055346, + 0.007065415, + 0.011113037, + 0.018302292, + 0.014795656, + -0.00048925064, + -0.005377276, + 0.001883676, + -0.0040965066, + -0.020049091, + 0.028835235, + 0.00043425578, + 0.023894658, + 0.011269467, + 0.0125926025, + 0.01319225, + 0.011784382, + 0.0039596306, + -0.0012579567, + -0.006032326, + 0.01753318, + -0.012116795, + -0.009333648, + 0.024533415, + 0.013896185, + 0.00623764, + 0.00089621264, + -0.0038879334, + -0.02420752, + 0.01800247, + -0.03746495, + 0.01565602, + -0.0050839703, + 0.0017158398, + 0.0050285677, + 0.015760306, + -0.024194483, + -0.0127751045, + -0.011425897, + 0.021639463, + 0.01977534, + 0.006693894, + -0.005813976, + -0.002207942, + 0.011947329, + 0.008740517, + 0.0064788028, + -0.016829245, + 0.014482797, + 0.038820673, + 0.022890901, + 0.016021024, + -0.6841199, + -0.04638145, + 0.011191252, + 0.007638991, + 0.03477957, + 0.021078922, + 0.017076924, + 0.008883912, + -0.01001151, + 0.019136585, + -0.024155376, + 0.012735996, + -0.008747036, + -0.011184734, + 0.0005059528, + -0.0062930426, + 0.011210806, + -0.030373462, + -0.0038716388, + -0.0065113925, + -0.015369233, + 0.008003994, + -0.015173695, + 0.0005088044, + -0.0022600854, + -0.0021036556, + 0.00041205416, + 0.001955373, + -0.0053674993, + 0.034883857, + -0.04270535, + 0.033554204, + 0.01827622, + -0.0109696435, + 0.03384099, + -0.025067883, + -0.02199143, + 0.03728245, + 0.020453202, + 0.029956317, + -0.0021199503, + -0.010278745, + -0.0013483927, + -0.009183736, + -0.004164945, + -0.0027081918, + 0.024807166, + -0.018419614, + 0.0036174401, + -0.015864594, + 0.012234118, + -0.01565602, + -0.01755925, + -0.012762069, + 0.00075567025, + 0.019345157, + -0.0024458459, + -0.02495056, + 0.003200294, + -0.003995479, + -0.019123549, + 0.0070849685, + -0.016920496, + -0.005282766, + -0.0075216684, + -0.003175852, + -0.034075636, + 0.0024491048, + 0.013179215, + -0.018315328, + -0.0013964623, + 0.009744276, + -0.0033632417, + -0.0030520116, + 0.010682855, + 0.022186967, + 0.013987436, + -0.026149856, + -0.019801412, + -0.019996949, + 0.008512391, + 0.0064136237, + -0.009359719, + 0.0025631683, + 0.018758547, + 0.002545244, + -0.021261424, + 0.0027407813, + 0.013739755, + -0.019201763, + 0.006980682, + 0.0020107753, + 0.006377775, + -0.0051882565, + -0.01035696, + 0.01793729, + -0.0003220255, + -0.026723431, + 0.009568293, + -0.0011919629, + -0.017911218, + -0.0056836177, + 0.001955373, + -0.0027163392, + -0.0020841018, + -0.0026674548, + -0.014730478, + 0.008303817, + 0.034883857, + -0.030712394, + 0.022486791, + -0.011621434, + -0.022369469, + 0.0036826194, + 0.028704876, + -0.026540931, + 0.012898944, + -0.0028825458, + 0.016320847, + -0.00063997734, + 0.011875632, + 0.0023937025, + 0.018719438, + 0.0024458459, + 0.00901427, + 0.021469997, + 0.004132355, + -0.02595432, + -0.007762831, + 0.004494099, + -0.011882151, + 0.014000472, + 0.021417852, + -0.019671053, + 0.025120026, + -0.007801939, + 0.0061137998, + 0.0053414274, + 0.01493905, + -0.046511807, + -0.03003453, + -0.01619049, + 0.0016042207, + -0.0010070171, + 0.0077563133, + -0.015864594, + -0.0023822961, + 0.002483324, + -0.0003623551, + 0.010122315, + 0.024559487, + -0.005093747, + -0.021039814, + 0.021548212, + -0.00034157923, + -0.015369233, + -0.008883912, + -0.007912743, + 0.012312332, + -0.012416619, + 0.026905933, + -0.0012408472, + -0.02940881, + -0.0028890637, + 0.014039579, + -0.01254046, + 0.004634234, + 0.030686323, + -0.019540695, + -0.026254144, + -0.0030552705, + -0.001484454, + -0.009581328, + 0.016555492, + 0.008388551, + 0.0100441, + 0.0013451338, + -0.011934293, + 0.0042529367, + -0.0031514096, + 0.0043702587, + -0.022447683, + -0.00667434, + -0.004226865, + 0.032015976, + -0.01840658, + 0.0151997665, + 0.014352438, + 0.0028108489, + 0.00033180238, + -0.031025253, + 0.024572521, + 0.011465005, + 0.0118625965, + 0.0082712285, + -0.013479038, + 0.015369233, + 0.016751029, + -0.0077823848, + 0.022421611, + 0.024259662, + -0.011627952, + 0.007938814, + -0.016086202, + 0.014978158, + -0.021065885, + -0.013439931, + -0.025628423, + 0.025432887, + 0.013700647, + 0.011412861, + -0.024220554, + -0.0029314302, + -0.008649267, + -0.0011691501, + 0.028652733, + 0.010389549, + 0.0063484446, + -0.006045362, + 0.0018869351, + 0.003241031, + -0.020596597, + 0.0032068118, + -0.01603406, + 0.0030291989, + 0.015551734, + -0.019605875, + 0.014052615, + 0.01849783, + -0.017324606, + -0.025524138, + -0.020414095, + -0.011660541, + 0.020974636, + 0.015017265, + -0.0011194511, + 0.016451206, + -0.024898417, + 0.035692077, + 0.022695364, + -0.0006326447, + 0.0111521445, + 0.008101762, + 0.011869115, + 0.013557253, + -0.009340165, + 0.050605055, + -0.00006920187, + -0.02313858, + 0.019253908, + -0.006693894, + -0.0071175583, + -0.006602643, + 0.010207048, + 0.009900706, + -0.029904172, + 0.015147624, + 0.0011830007, + 0.038221028, + 0.03796031, + 0.007990958, + -0.003946595, + 0.009385791, + -0.0017875369, + 0.0027733708, + -0.0049307994, + 0.021065885, + 0.014248152, + -0.0020726954, + 0.00001147636, + -0.015030301, + 0.0014518645, + 0.000006034159, + -0.023699122, + 0.02685379, + -0.014821728, + -0.0035196715, + 0.0008807326, + 0.021235352, + 0.01771568, + -0.0077823848, + -0.05034434, + 0.018654259, + 0.001085232, + -0.007502115, + -0.021626426, + -0.00355552, + -0.012853319, + -0.021900179, + 0.027088435, + 0.02747951, + 0.028470233, + -0.0023154877, + -0.023047332, + -0.014091722, + 0.0065570176, + 0.024989668, + -0.019436408, + -0.011908222, + 0.0027489287, + 0.014404582, + -0.021183208, + 0.006902467, + 0.010780623, + 0.017846039, + -0.006961128, + 0.0072283624, + -0.010415621, + 0.0035848506, + 0.0033893134, + -0.011223841, + -0.009301058, + -0.003848826, + 0.008427658, + 0.0046114214, + -0.004481063, + -0.019449444, + 0.01254046, + 0.013948328, + -0.00661242, + -0.013009749, + -0.012879391, + -0.010715445, + 0.0023839257, + 0.06450124, + -0.010982679, + 0.0016384397, + 0.0041258372, + 0.0022503086, + -0.010154904, + -0.02098767, + -0.015642984, + -0.0008636231, + 0.0041844985, + -0.0038390493, + 0.008968645, + 0.011047858, + 0.014052615, + -0.0012832136, + 0.0020678071, + -0.009431416, + -0.018354435, + 0.006902467, + -0.015903702, + 0.012846801, + -0.007606401, + 0.01469137, + 0.013042338, + 0.0036923962, + 0.004142132, + 0.0134138595, + 0.027427366, + 0.018302292, + -0.017833002, + 0.0059769237, + -0.0020238112, + -0.025067883, + 0.012455727, + -0.014991194, + 0.009718204, + 0.020388024, + 0.032693837, + 0.0020759543, + -0.006322373, + 0.0149260145, + 0.015108516, + 0.009033823, + -0.004601645, + 0.008962126, + -0.031859547, + -0.031233827, + 0.018145863, + -0.02651486, + -0.012077688, + 0.04364393, + 0.0017679832, + -0.02891345, + -0.024285734, + -0.0070849685, + 0.031129539, + -0.021978393, + -0.00019716678, + 0.0013980918, + -0.004132355, + -0.0012326998, + -0.04544287, + 0.0045462423, + -0.00973124, + -0.020596597, + -0.041844983, + -0.015512627, + -0.029643456, + -0.02732308, + -0.013622433, + -0.019045334, + -0.03000846, + -0.01937123, + 0.008003994, + 0.025185205, + -0.01755925, + 0.008303817, + -0.00589545, + -0.0012791399, + 0.021013742, + -0.022017501, + -0.016633706, + -0.030217033, + -0.008127834, + -0.0043246336, + 0.022069644, + 0.025902176, + -0.028548447, + -0.0074630072, + 0.0019407078, + 0.025237348, + -0.0033990901, + 0.015577805, + 0.017415857, + 0.005963888, + 0.0006827511, + 0.02152214, + 0.03206812, + -0.0046928953, + -0.010220083, + 0.02380341, + -0.01637299, + 0.0038748977, + 0.007925779, + 0.0011520407, + 0.020661775, + 0.0048884326, + 0.01191474, + -0.005533706, + -0.0075086327, + 0.02548503, + -0.014899943, + 0.007489079, + 0.017428892, + -0.0049829422, + 0.02049231, + -0.0085254265, + 0.008095245, + 0.008023548, + 0.0009874634, + 0.021821965, + -0.019970877, + 0.013387788, + 0.021065885, + 0.0015431152, + 0.021039814, + 0.0071175583, + -0.0025810925, + -0.0054848217, + -0.0073587205, + -0.019879626, + 0.018967118, + -0.01469137, + -0.011373754, + -0.022538934, + 0.006746037, + -0.009046859, + 0.008740517, + -0.010233119, + -0.027010221, + -0.0075086327, + -0.011249913, + 0.006635233, + 0.0038586028, + -0.023972875, + -0.019736232, + 0.00017058593, + 0.010832767, + 0.00268212, + 0.01699871, + -0.004793923, + 0.0009565033, + -0.01203858, + -0.0009842045, + -0.026019499, + -0.044895366, + -0.041375693, + -0.023646979, + 0.019879626, + 0.021795891, + 0.030686323, + 0.015421376, + 0.004934058, + -0.0016604377, + -0.017598357, + 0.018132826, + 0.0021199503, + 0.02906988, + -0.0064983563, + 0.0020564008, + 0.026215035, + 0.018354435, + -0.020309808, + -0.009529185, + -0.010383031, + 0.027297009, + -0.00421057, + 0.010024546, + -0.010220083, + -0.0255111, + 0.00866882, + -0.01977534, + -0.0029737966, + -0.0006033141, + 0.008473284, + -0.0075998832, + 0.009053377, + -0.0023562245, + 0.011119555, + -0.002264974, + 0.0042627132, + -0.023034295, + 0.0009100632, + -0.01874551, + -0.001924413, + -0.012064652, + -0.0008945832, + -0.006739519, + 0.014248152, + 0.014143866, + 0.023281975, + 0.010083207, + 0.00097198336, + -0.01406565, + 0.00302594, + 0.028548447, + -0.016490312, + -0.026827719, + 0.00031428548, + -0.01578638, + -0.02017945, + -0.018419614, + -0.0022226074, + -0.022213038, + -0.020596597, + 0.017363712, + -0.0065830895, + 0.030164888, + -0.00044403263, + -0.019671053, + -0.002872769, + 0.012221082, + 0.03939425, + 0.0039661485, + 0.019019263, + 0.0006118688, + -0.0033697595, + -0.026905933, + -0.01699871, + -0.014417618, + 0.00066197524, + 0.010304816, + 0.020453202, + -0.022695364, + -0.043748215, + -0.0058596013, + 0.008968645, + -0.00627023, + -0.009379273, + 0.02192625, + 0.010780623, + 0.009952849, + -0.020726955, + -0.010845803, + -0.00988767, + 0.03000846, + -0.0034544924, + -0.00010561052, + -0.0100441, + -0.018823724, + -0.021013742, + 0.021887142, + -0.011627952, + 0.014847799, + 0.0034773052, + -0.017194247, + 0.0036435118, + -0.009379273, + -0.013309573, + 0.009548739, + -0.0070132716, + 0.009868116, + 0.0077302414, + -0.010532943, + 0.003852085, + 0.011386789, + -0.014326367, + -0.0016302923, + -0.019814447, + 0.022447683, + -0.012885909, + -0.023125546, + -0.018888904, + 0.01619049, + 0.024572521, + -0.006733001, + -0.00027538172, + 0.010402584, + -0.022578042, + -0.0009662802, + 0.020270701, + 0.008812215, + -0.024976632, + -0.007058897, + -0.0165946, + -0.021561246, + -0.021821965, + -0.0005246918, + -0.0050578984, + -0.0025419851, + -0.0067525553, + -0.0033795366, + -0.024585558, + 0.010487318, + -0.011856079, + -0.013479038, + 0.0013019526, + 0.02293001, + -0.019345157, + 0.00842114, + -0.0014665298, + 0.020361952, + -0.023646979, + 0.0022405316, + 0.00024381059, + -0.016777102, + 0.020401059, + -0.01603406, + -0.002385555, + -0.03081668, + 0.00014868983, + 0.019253908, + 0.017363712, + 0.028235588, + 0.02239554, + -0.024168411, + 0.0036141812, + -0.042679276, + -0.025054848, + 0.013909221, + 0.009164182, + 0.017963361, + -0.004705931, + -0.00552067, + 0.002941207, + 0.010839284, + -0.013179215, + -0.0152910175, + -0.012501352, + -0.030451678, + -0.017846039, + 0.01406565, + -0.011158663, + 0.0018282739, + -0.017102996, + 0.0046733418, + -0.0024474752, + 0.018941047, + 0.0018820466, + 0.0068568415, + 0.004780887, + 0.032667767, + 0.00645599, + 0.0007678913, + -0.0021557987, + -0.019658018, + 0.01908444, + -0.019188728, + -0.01771568, + -0.025915211, + -0.017663537, + 0.037908167, + 0.010910982, + -0.015043337, + -0.024689844, + 0.008590606, + -0.025654495, + -0.02058356, + -0.009620436, + 0.031624902, + 0.016816208, + 0.0005605403, + 0.011627952, + -0.0022014242, + 0.0071827373, + 0.0030650473, + -0.0010583457, + -0.00007072951, + 0.021730714, + -0.028000943, + 0.021939287, + 0.0002782333, + -0.034388494, + -0.010982679, + 0.023295011, + 0.0004073694, + 0.001618886, + 0.007847564, + -0.003421903, + -0.017324606, + -0.000569095, + 0.0009622065, + -0.019384265, + 0.0054880804, + 0.008206049, + -0.044738937, + 0.013544218, + -0.0026299767, + -0.011556255, + -0.017819967, + 0.009483559, + -0.0063386676, + 0.0012579567, + -0.00047865903, + -0.008994716, + 0.0024882122, + -0.00073489436, + -0.03256348, + 0.019970877, + -0.008395068, + 0.0047352617, + 0.038664244, + 0.0077367597, + -0.0008571052, + -0.021391781, + -0.006605902, + -0.020388024, + -0.013290019, + 0.0235818, + -0.0100766895, + -0.018914975, + -0.016855316, + 0.0069350568, + -0.031624902, + 0.0130293025, + 0.0024588816, + 0.0134138595, + -0.028027015, + 0.021339638, + 0.018576045, + -0.039263893, + 0.0015919995, + 0.023555728, + -0.023125546, + 0.0056836177, + -0.013335644, + 0.010689373, + -0.029200237, + 0.022630185, + 0.0071827373, + -0.0064853206, + -0.025328599, + 0.007697652, + -0.006416883, + -0.027583797, + -0.004230124, + 0.18563008, + -0.017767824, + 0.015877629, + 0.038247097, + -0.00052917283, + 0.03587458, + 0.02860059, + -0.0005393571, + -0.0031025254, + 0.008166942, + -0.040776048, + 0.020766063, + 0.014274224, + -0.0005866119, + -0.001288102, + -0.043331068, + -0.029956317, + -0.011465005, + -0.036656726, + 0.009431416, + 0.009314094, + -0.0054750447, + -0.013922256, + -0.00910552, + 0.013557253, + -0.0019977395, + -0.006462508, + 0.009222843, + 0.023881624, + 0.016737994, + 0.0025941283, + 0.008153906, + 0.004748298, + -0.0010208677, + -0.019488553, + -0.014417618, + -0.0043148566, + -0.0037477985, + 0.012468763, + 0.019006226, + 0.0023122288, + 0.008225603, + 0.0069220206, + -0.0042333826, + -0.013557253, + 0.019188728, + 0.003786906, + -0.0077432776, + -0.008968645, + 0.026032533, + -0.03066025, + -0.017089961, + 0.03496207, + 0.03285027, + 0.014547976, + -0.008219085, + 0.02826166, + 0.0053186147, + -0.0005430234, + -0.010734999, + -0.017102996, + 0.01619049, + -0.012677335, + 0.025185205, + -0.011673577, + 0.0043539642, + -0.035222787, + -0.0038129776, + -0.0016262187, + -0.016555492, + 0.014508869, + -0.018198006, + -0.01818497, + -0.013896185, + -0.030399533, + -0.02747951, + 0.037099946, + 0.015499591, + 0.00826471, + 0.038507815, + 0.0039074873, + 0.0065928665, + -0.0036206993, + 0.011908222, + 0.00110723, + -0.021131065, + 0.008336407, + -0.008916501, + 0.01437851, + 0.0008265525, + -0.0017370231, + -0.01883676, + -0.003770611, + -0.020674812, + -0.0057716095, + 0.008492837, + 0.0000075172384, + 0.016724957, + -0.014182973, + 0.002862992, + -0.010995715, + -0.010734999, + 0.0026348652, + 0.007899707, + 0.010669819, + 0.01469137, + -0.018237114, + 0.004376777, + -0.002167205, + -0.010891428, + -0.011921258, + -0.028079158, + -0.000112433954, + 0.005892191, + -0.017259426, + 0.004494099, + -0.0050024963, + -0.015538698, + 0.018615153, + -0.026619146, + 0.015369233, + -0.021874107, + -0.011556255, + -0.011621434, + -0.021874107, + -0.013726719, + 0.0004872138, + -0.01930605, + 0.0010477541, + -0.0331892, + 0.0016359955, + -0.012403583, + 0.026958076, + -0.026723431, + 0.00095161493, + 0.01774175, + 0.017324606, + 0.0038586028, + -0.0072544343, + 0.033137057, + 0.0047352617, + -0.011249913, + 0.025850032, + 0.006746037, + -0.000620831, + -0.005892191, + 0.0043050796, + 0.025250385, + -0.009985439, + 0.0099658845, + -0.00941838, + -0.016777102, + 0.0014388287, + -0.005735761, + 0.04082819, + -0.010220083, + -0.0333717, + -0.015825486, + 0.013283501, + 0.021483032, + -0.03558779, + -0.0043050796, + 0.061685503, + -0.010311334, + -0.027114507, + 0.004503876, + -0.16800566, + 0.0165946, + 0.02064874, + -0.022408575, + 0.021848036, + 0.022486791, + -0.01780693, + -0.0060160314, + 0.004376777, + 0.016021024, + 0.047919676, + 0.03384099, + -0.0165946, + -0.013622433, + 0.01493905, + -0.008655785, + -0.01927998, + 0.0030080157, + 0.01968409, + 0.014052615, + 0.036917444, + -0.012664299, + 0.0035066358, + 0.00017160436, + -0.016490312, + 0.023242868, + 0.0023464477, + 0.01381797, + -0.0085254265, + 0.015695129, + -0.021065885, + -0.0100766895, + 0.02875702, + 0.018719438, + 0.0030585295, + 0.0019635204, + -0.021913214, + -0.020322844, + -0.0151997665, + 0.01646424, + 0.0065081334, + 0.011334646, + 0.00227638, + -0.014287259, + 0.0017582063, + 0.024051089, + 0.014717441, + -0.024663772, + -0.014143866, + -0.011686613, + 0.014613155, + -0.012520906, + -0.011438932, + 0.028704876, + 0.014313331, + -0.0050187907, + 0.008603642, + 0.008290782, + 0.004787405, + 0.024363948, + -0.039316036, + -0.02255197, + 0.017037818, + -0.0062148273, + -0.02622807, + -0.00458535, + -0.0074434537, + 0.0033958312, + -0.010187494, + -0.0026967854, + 0.004138873, + -0.020192485, + 0.0047189672, + -0.034883857, + 0.011373754, + 0.005667323, + 0.0068177343, + 0.02398591, + -0.01325743, + -0.014600119, + -0.036448155, + 0.02860059, + -0.009359719, + -0.0040867296, + -0.013778863, + 0.032302763, + 0.015916737, + 0.005533706, + -0.038455673, + -0.01755925, + 0.027349152, + -0.01827622, + 0.005025309, + -0.009744276, + 0.0024230331, + 0.022617148, + -0.010369996, + 0.028704876, + -0.02938274, + 0.013231358, + 0.008303817, + -0.007573812, + -0.013583325, + 0.02685379, + 0.019723197, + 0.0009499854, + 0.023373226, + 0.024898417, + 0.03782995, + 0.012612157, + -0.018224077, + 0.008199532, + 0.028339874, + 0.010363477, + -0.008355961, + 0.008975162, + 0.014000472, + -0.0047352617, + 0.025693603, + 0.013987436, + 0.019983914, + -0.007104522, + 0.0057487967, + 0.010930535, + -0.007176219, + -0.016177453, + -0.08222996, + 0.0022454201, + -0.0041128015, + 0.020036057, + 0.005009014, + 0.045234296, + 0.01297716, + 0.0062017916, + -0.010207048, + 0.024246626, + -0.0002056197, + -0.019592838, + -0.017389785, + -0.024624664, + 0.0153822685, + 0.0021085439, + -0.018628187, + -0.013374752, + -0.010559015, + 0.010461246, + -0.018980155, + -0.008734, + 0.0034642692, + -0.0076455087, + -0.018054612, + 0.006967646, + -0.010389549, + 0.012879391, + 0.0076194373, + -0.0019570026, + -0.0033665006, + -0.0016213302, + -0.0050350856, + -0.032433122, + -0.013426895, + -0.005292543, + -0.02264322, + 0.0077563133, + 0.036630657, + -0.045651443, + 0.00988767, + -0.00011620212, + -0.0008090356, + -0.020374987, + 0.0062083094, + -0.014587083, + -0.019423373, + 0.013400824, + 0.008303817, + -0.023321083, + -0.035379216, + -0.0057781273, + -0.0025501323, + 0.0017859074, + 0.027714154, + -0.009522667, + 0.017285498, + 0.0073522027, + -0.034988143, + 0.02217393, + 0.009464006, + -0.005729243, + -0.009196771, + 0.027297009, + 0.015343161, + 0.009548739, + -0.016216561, + -0.041740697, + 0.02940881, + -0.015225839, + -0.017911218, + 0.028313803, + -0.02423359, + -0.0068503236, + -0.025563244, + -0.009274987, + -0.016021024, + -0.003135115, + 0.015017265, + -0.023868587, + -0.011510629, + -0.021874107, + 0.010780623, + -0.0065342053, + 0.0018804171, + 0.021600354, + 0.008414622, + -0.0066580456, + 0.0119538475, + -0.009705168, + 0.026553966, + 0.024064125, + 0.023099475, + -0.015095481, + 0.0010941942, + 0.048310753, + -0.0067786267, + -0.009457488, + -0.000286177, + -0.0026593073, + 0.0049307994, + -0.019762304, + -0.06820341, + 0.019175692, + -0.0050383448, + -0.011465005, + 0.028053086, + 0.0034088672, + 0.012768586, + -0.005807458, + 0.014912979, + -0.01690746, + -0.048258606, + 0.015017265, + -0.0078084567, + -0.014600119, + -0.03863817, + -0.025198242, + 0.024168411, + 0.016307812, + 0.00085140206, + -0.005282766, + 0.01995784, + 0.011549737, + 0.024168411, + 0.030399533, + -0.038455673, + 0.00552067, + -0.0038423082, + 0.021417852, + -0.026671289, + -0.011393307, + 0.003500118, + -0.024624664, + -0.0027798887, + 0.01800247, + 0.0021590579, + -0.005729243, + 0.010956607, + -0.0007507818, + 0.021887142, + 0.047293957, + -0.018015504, + -0.009718204, + 0.022069644, + -0.0038455671, + -0.0054750447, + 0.012625192, + -0.0032638435, + -0.0014184603, + -0.0040541403, + 0.01493905, + 0.011575809, + 0.019501587, + -0.0017142104, + -0.008382033, + -0.0048558433, + -0.039811395, + 0.012058134, + 0.008499355, + -0.010050618, + -0.0014828246, + 0.023047332, + -0.0030357167, + 0.029591313, + 0.0014673446, + 0.0013394306, + 0.00056257716, + -0.017116033, + -0.0051133004, + 0.0025615387, + -0.026188964, + -0.025719674, + 0.011940812, + -0.0028809165, + 0.021222316, + 0.008219085, + -0.014965122, + -0.00057276135, + -0.010669819, + -0.016021024, + 0.025367707, + -0.005312097, + -0.0044354377, + -0.044530362, + 0.017194247, + 0.01665978, + -0.017507108, + -0.016777102, + -0.00029615755, + -0.00558259, + 0.020844277, + 0.00012546977, + -0.0015357826, + 0.025993425, + 0.00421057, + 0.00033689447, + 0.009959367, + -0.008688374, + -0.028027015, + 0.037882093, + 0.0016115534, + 0.023373226, + -0.0038846745, + -0.0022812686, + -0.0151997665, + -0.02488538, + -0.009118557, + -0.018954083, + -0.011614916, + -0.00008422362, + 0.016607635, + 0.03034739, + 0.025185205, + -0.010891428, + 0.025367707, + -0.011308574, + -0.0107871415, + -0.015212802, + -0.022604113, + -0.018445686, + 0.02158732, + 0.024116268, + 0.014495833, + 0.016555492, + -0.020205522, + 0.019423373, + -0.0072479164, + 0.00997892, + -0.028704876, + 0.009529185, + -0.012931534, + 0.014339402, + 0.017324606, + -0.006693894, + -0.018875869, + -0.03736066, + 0.013791898, + 0.011693131, + 0.018797653, + -0.01643817, + 0.041688554, + -0.0020629186, + -0.006843806, + 0.003019422, + 0.0024230331, + 0.028027015, + -0.009027306, + 0.016151382, + -0.0038032006, + -0.015017265, + -0.007632473, + 0.0007255249, + -0.013452967, + 0.00648858, + -0.031833474, + -0.0048330305, + -0.024038054, + 0.030634178, + 0.00049454643, + -0.0013418748, + 0.037126016, + -0.0116083985, + 0.03642208, + 0.008179978, + -0.020518381, + -0.012181974, + 0.026723431, + 0.00048151062, + 0.010141868, + -0.007990958, + 0.01175831, + 0.001750059, + -0.022812687, + -0.0014608266, + 0.009040342, + -0.0059736646, + -0.014196008, + 0.0030210514, + 0.008883912, + 0.03081668, + 0.00083673676, + 0.027427366, + -0.0183414, + -0.017050853, + 0.004295303, + 0.00973124, + 0.008193013, + 0.0003967778, + -0.020283736 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} +256 67812 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 61 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["tokyo","potato"]}HTTP/2.0 200 OK +Content-Length: 66856 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:13 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 118 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-w85sk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999998 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_df1c0a21b903422db6a212785707c847 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.008533556, + 0.0014080032, + -0.010539479, + -0.014651955, + -0.010988966, + 0.012142874, + -0.036978744, + 0.00235981, + -0.014812965, + -0.038239993, + 0.0062223845, + -0.015269161, + 0.011740348, + -0.02619104, + -0.015228909, + -0.01734888, + 0.022621974, + -0.01937493, + 0.017093947, + -0.01806001, + -0.009070258, + 0.015618018, + -0.004125894, + -0.027371783, + -0.012498439, + -0.014504362, + 0.007305851, + -0.0207301, + 0.01004303, + -0.020864276, + 0.01631573, + -0.013820067, + -0.010646819, + -0.017254958, + 0.0031111923, + -0.004622343, + -0.010606566, + -0.008741528, + 0.0027019572, + -0.0042097536, + 0.005702455, + -0.016235225, + -0.0030893888, + -0.012578945, + -0.023977146, + 0.0073729386, + -0.01140491, + 0.012968053, + -0.0033761887, + 0.014168924, + 0.010807829, + 0.018999238, + -0.0352613, + -0.0080706505, + -0.02373563, + -0.0012956313, + -0.030779839, + -0.0047934167, + 0.0034449536, + 0.0035858378, + -0.002752273, + -0.006460546, + -0.01745622, + 0.011847689, + 0.018100264, + -0.018140515, + -0.011136559, + 0.02836468, + -0.017697737, + -0.0014717365, + 0.022943996, + 0.020649595, + -0.0025107574, + 0.00168474, + 0.036549382, + -0.01200199, + 0.0014599962, + -0.00029015433, + 0.008305457, + 0.0134510845, + 0.021763252, + -0.042372596, + 0.004920883, + -0.0032285957, + 0.009157471, + 0.010982257, + -0.010707198, + 0.032604624, + 0.0072387634, + -0.004162792, + 0.010136953, + 0.008540265, + 0.010901752, + 0.011069471, + -0.02836468, + -0.0015295997, + -0.007654707, + 0.048866685, + -0.02313184, + -0.013196152, + -0.006688644, + 0.0035221046, + 0.0070643355, + -0.00834571, + -0.032336272, + 0.00905684, + 0.015336249, + -0.0129278, + 0.0025057257, + -0.0144238565, + -0.00014235172, + 0.031504385, + -0.0054039145, + -0.05342865, + -0.02346728, + -0.018905316, + -0.0015648208, + -0.018650383, + -0.008828742, + -0.012800334, + 0.009479493, + 0.010660237, + 0.026445974, + 0.0047397465, + 0.025775095, + -0.0072119283, + -0.0086408965, + -0.0103717595, + 0.0003601771, + -0.010519352, + 0.03469776, + 0.01069378, + 0.0101101175, + 0.015953457, + -0.028820878, + 0.015483842, + -0.01615472, + 0.009613669, + -0.019254172, + -0.009076967, + 0.0037502027, + 0.010982257, + -0.008842159, + 0.010579731, + 0.0066651637, + 0.021427812, + 0.029116064, + 0.005746062, + 0.0036428624, + -0.004830315, + -0.0010306349, + -0.011740348, + 0.021146044, + -0.000048035847, + 0.0046693045, + 0.006950286, + 0.029760106, + 0.008969626, + 0.00024507978, + 0.0132632395, + -0.000092088354, + 0.0027002802, + 0.03475143, + -0.019683532, + 0.0006000157, + 0.023037918, + 0.0075540757, + 0.020985033, + 0.0032185325, + -0.0101101175, + -0.013444376, + 0.01418234, + -0.038535178, + 0.01042543, + 0.002062947, + 0.023588037, + 0.01718787, + 0.015779028, + -0.024191827, + -0.009123928, + -0.0011388138, + 0.0026583504, + 0.03359752, + 0.020864276, + -0.011331113, + 0.0046625957, + 0.029116064, + 0.018194186, + -0.0019438663, + -0.008251788, + 0.022353623, + 0.031584892, + 0.0312092, + 0.005907072, + -0.67409724, + -0.028337847, + 0.014370186, + -0.00327388, + 0.026123952, + 0.01129086, + 0.014799547, + 0.0065444056, + -0.013303492, + 0.013706018, + -0.03378537, + 0.014276263, + -0.014115253, + -0.014262846, + -0.010707198, + -0.00095683837, + 0.012773499, + -0.009217851, + 0.0007991823, + 0.01025771, + -0.0012327366, + 0.016932936, + -0.0148398, + 0.0017694383, + 0.013323618, + -0.01718787, + 0.00943924, + -0.01140491, + -0.009727717, + 0.023936894, + -0.034295235, + 0.04086983, + 0.0069435774, + -0.015872952, + 0.035824835, + -0.012116039, + -0.024849286, + 0.026553314, + 0.025077384, + 0.040011108, + -0.004266778, + 0.0004216043, + -0.0020277258, + 0.0064202934, + 0.0042131077, + 0.004595508, + 0.03268513, + -0.03104819, + 0.0066752266, + -0.014101836, + 0.015779028, + -0.037032414, + -0.021964515, + -0.01877114, + -0.0018616838, + 0.0050550587, + 0.010921879, + -0.022621974, + -0.0007715086, + -0.00048345077, + -0.011720222, + -0.0025476555, + -0.021011868, + -0.020220235, + -0.008245079, + 0.008587226, + -0.011988573, + -0.018261272, + 0.0036529256, + -0.021722998, + 0.010083282, + 0.015000811, + -0.010318089, + -0.0022273117, + 0.013873737, + 0.015524095, + 0.031799573, + -0.03126287, + -0.001854975, + -0.008218244, + 0.0069368687, + 0.011592755, + -0.017805077, + 0.0018868417, + 0.02341361, + -0.02946492, + -0.035798, + -0.010660237, + 0.020891111, + -0.018382031, + 0.0048739216, + -0.003475143, + -0.001501926, + 0.001458319, + 0.00017883067, + 0.005222778, + -0.0006138525, + -0.012592362, + 0.0035321678, + -0.0051255007, + -0.016409652, + -0.008976335, + 0.013390706, + 0.0005387981, + -0.0105126435, + -0.002769045, + -0.016396236, + 0.017308628, + 0.028901383, + -0.0122435065, + 0.01391399, + -0.010687072, + -0.014638538, + -0.00867444, + 0.021561988, + -0.024151573, + 0.021374144, + 0.009533163, + 0.026754577, + 0.010391885, + 0.0063263704, + -0.003683115, + 0.018194186, + 0.014772712, + 0.01233072, + 0.023574619, + 0.014973976, + -0.0062123216, + -0.0068831984, + 0.0053066374, + -0.01074745, + 0.012498439, + 0.016409652, + -0.016181555, + 0.016033962, + -0.009975942, + -0.000742577, + -0.005424041, + 0.01227705, + -0.042855624, + -0.040950336, + -0.013732853, + -0.0014901856, + 0.0012042243, + 0.013565134, + -0.028176837, + -0.017885583, + 0.0066047846, + -0.01679876, + 0.007715086, + -0.006889907, + -0.004135957, + -0.025989776, + 0.013303492, + -0.008305457, + -0.015067899, + -0.0033543853, + -0.0015681752, + -0.013981078, + 0.009123928, + 0.006661809, + 0.0064639, + -0.036737226, + 0.0028461958, + 0.0015623049, + -0.025721425, + 0.010264419, + 0.015966874, + -0.00055724726, + -0.017992923, + -0.017214704, + -0.019267589, + -0.017979505, + 0.0027355012, + 0.020394662, + 0.006956995, + 0.0052999286, + -0.013008306, + -0.0012218348, + 0.006393458, + 0.006074792, + -0.022474382, + -0.0044378517, + 0.004830315, + 0.025949525, + -0.029062394, + 0.007943184, + 0.019764038, + -0.0070710443, + 0.0040554516, + -0.01293451, + 0.019790873, + 0.003022301, + 0.0042365887, + 0.018543042, + -0.010338215, + 0.013350453, + 0.009419113, + -0.020394662, + 0.018046593, + 0.033758532, + -0.026043447, + 0.0045217113, + -0.01004303, + 0.012679576, + -0.02384297, + -0.0043674097, + -0.020287322, + 0.025493328, + 0.010049738, + 0.0030960976, + -0.017120782, + -0.0055582165, + 0.012954636, + -0.0036696976, + 0.04282879, + 0.006990539, + 0.019401764, + -0.026123952, + -0.0081847, + 0.017590396, + -0.033463348, + -0.009855184, + -0.017550144, + -0.012800334, + 0.010143661, + 0.001518698, + 0.03236311, + 0.01806001, + -0.006651746, + -0.02941125, + -0.021360725, + -0.004068869, + 0.023990564, + -0.0112237735, + -0.035610154, + 0.00096606294, + -0.027197355, + 0.034724597, + 0.008573809, + 0.020824024, + 0.01795267, + 0.035180792, + -0.024621187, + 0.007319269, + 0.006722188, + 0.03612002, + 0.013498046, + -0.0084262155, + 0.022554886, + -0.011586047, + -0.003938048, + -0.00496449, + 0.0010440524, + 0.011344531, + -0.029169735, + 0.01681218, + -0.0015061189, + 0.016543828, + 0.02700951, + 0.0045082937, + 0.0021702873, + 0.011867815, + 0.0019992136, + 0.0035053326, + -0.0006184648, + 0.026620401, + 0.015014228, + -0.0021652556, + 0.008298749, + -0.01729521, + 0.009144054, + -0.007218637, + -0.005313346, + 0.017483056, + -0.017415969, + -0.022554886, + -0.013873737, + 0.014933723, + 0.013229695, + -0.0137127265, + -0.051335514, + -0.0033543853, + 0.008318875, + -0.0014591576, + -0.030189468, + -0.0013761366, + -0.022138942, + -0.015457007, + 0.02078377, + 0.010613275, + 0.023668543, + 0.013940825, + -0.02085086, + -0.017845329, + -0.006651746, + 0.019240754, + -0.0155375125, + -0.0032537538, + -0.008446342, + 0.0064538373, + -0.012397808, + -0.009405696, + 0.0112707345, + 0.013498046, + 0.0134510845, + 0.009211142, + -0.0055414443, + -0.00785597, + 0.00012274954, + 0.002577845, + -0.013571843, + -0.017375715, + 0.01309552, + 0.010344924, + -0.0066148476, + -0.010217457, + 0.0024151574, + 0.02407107, + -0.007319269, + -0.017590396, + -0.0019891504, + -0.02204502, + -0.004588799, + 0.06606797, + 0.00845976, + 0.013524882, + -0.0010541156, + 0.006265992, + 0.0022558242, + -0.020287322, + 0.00009701511, + 0.012847295, + 0.007507114, + 0.0054609394, + -0.0066819354, + 0.0010390208, + 0.0070643355, + 0.00046835604, + -0.002802589, + -0.011559212, + -0.019388346, + 0.022782985, + -0.023386775, + 0.00089226646, + 0.0036864693, + 0.008285332, + 0.02252805, + 0.0006360753, + -0.0050550587, + 0.019093161, + 0.021400979, + 0.015483842, + -0.02400398, + -0.0009954139, + 0.012921092, + -0.015631435, + 0.012592362, + -0.010734033, + 0.002760659, + 0.004102413, + 0.0155375125, + 0.005021515, + -0.009975942, + 0.012216671, + 0.01932126, + 0.0026801538, + -0.0056991004, + 0.021977931, + -0.025198141, + -0.015148404, + 0.018247856, + -0.016731674, + -0.029947951, + 0.03389271, + 0.0076681245, + -0.04014528, + -0.020864276, + -0.014075001, + 0.013115646, + -0.020917946, + -0.018690635, + -0.000033255586, + 0.02280982, + 0.007996854, + -0.050181605, + 0.006658455, + -0.009727717, + -0.028176837, + -0.030457819, + -0.01167997, + -0.0046022166, + -0.028337847, + -0.002445347, + -0.007647998, + -0.021790087, + -0.024862703, + 0.024044234, + 0.019442016, + -0.024232078, + 0.004457978, + -0.00992898, + 0.00055389287, + 0.03617369, + -0.030350478, + -0.013430959, + -0.021105792, + -0.008204826, + -0.02476878, + 0.0201934, + 0.02941125, + -0.03410739, + -0.009606959, + -0.0005840823, + 0.011378075, + -0.0016713225, + 0.011284152, + 0.020649595, + 0.0148263825, + -0.011451871, + 0.0111768115, + 0.029706435, + -0.0045116483, + -0.01663775, + 0.0151349865, + -0.00943924, + 0.0016193294, + 0.012062369, + 0.00774863, + 0.02117288, + 0.01626206, + 0.019240754, + -0.011304278, + 0.00041321834, + 0.041943233, + -0.014558032, + 0.0118879415, + 0.017724572, + -0.0072320546, + 0.021454647, + 0.007339395, + 0.029438084, + 0.01893215, + -0.01462512, + 0.0055246726, + -0.023266016, + 0.016355982, + 0.017147617, + 0.011384783, + -0.003934694, + 0.019079743, + -0.007715086, + -0.008157865, + 0.00466595, + -0.0055615706, + 0.011995282, + -0.015054481, + -0.018019758, + -0.023588037, + 0.0018214312, + -0.027854815, + 0.013397414, + 0.0056957463, + -0.03628103, + -0.010063156, + -0.004987971, + 0.008741528, + -0.002576168, + -0.026553314, + -0.023990564, + -0.00035933853, + 0.012485022, + 0.0029669537, + 0.019442016, + -0.0009232945, + 0.013061976, + -0.015255744, + -0.00216861, + -0.018261272, + -0.032497283, + -0.022957413, + -0.023655124, + 0.008097486, + 0.015872952, + 0.024030816, + 0.011035928, + -0.0023279435, + -0.010948714, + -0.0067725037, + 0.013209569, + -0.004920883, + 0.025453076, + -0.017845329, + 0.023400191, + 0.014987393, + 0.01271312, + -0.022460964, + 0.0015857856, + -0.02798899, + 0.02199135, + -0.0037300764, + 0.0035724202, + -0.012565527, + -0.029706435, + -0.0009107156, + -0.014142089, + -0.0051422725, + -0.0002387903, + -0.0015388242, + 0.0019522522, + 0.0049745534, + -0.006732251, + 0.03142388, + -0.0039850096, + 0.010385177, + -0.012404516, + 0.0031413818, + -0.004300322, + 0.0005509578, + 0.004327157, + -0.011814144, + -0.0040889955, + -0.0030105608, + 0.02668749, + 0.02264881, + -0.009452658, + -0.0010356664, + 0.0003169894, + 0.011908067, + 0.035744328, + -0.00009811577, + -0.014772712, + -0.0043774727, + -0.014034748, + -0.025385987, + -0.018341778, + 0.00033921222, + -0.019723786, + -0.022514634, + 0.012907675, + -0.017067112, + 0.022501215, + -0.02951859, + -0.02635205, + 0.021951096, + 0.0090434225, + 0.022729315, + 0.016355982, + 0.010251001, + -0.00025430432, + -0.001171519, + -0.009835058, + -0.005182525, + -0.013981078, + -0.001215126, + 0.016396236, + 0.030484654, + -0.020609343, + -0.028928218, + -0.010009485, + 0.0024705047, + 0.0022776276, + -0.008419507, + 0.014222593, + 0.0005153174, + 0.009566707, + -0.024057651, + -0.0011497155, + -0.025882436, + 0.038481507, + -0.014772712, + 0.0047062025, + -0.002480568, + -0.030618828, + -0.0054106233, + 0.018153934, + -0.010029612, + 0.009311774, + 0.013833485, + -0.016959772, + 0.0020478521, + -0.018462537, + -0.018194186, + 0.02046175, + 0.0029568905, + 0.026647236, + 0.009513036, + -0.008285332, + 0.013779814, + 0.010599857, + -0.013632222, + 0.0006297858, + 0.004833669, + 0.024419924, + -0.007943184, + -0.009526454, + -0.018797975, + -0.0017006734, + 0.00094090507, + 0.0022776276, + 0.009298356, + -0.013176025, + -0.02003239, + -0.005746062, + 0.009700882, + 0.006269346, + -0.004572027, + -0.007044209, + -0.025278646, + -0.030350478, + -0.009117219, + 0.0016620979, + 0.012169709, + -0.01663775, + -0.009224559, + -0.0037233676, + -0.02946492, + 0.01745622, + -0.011693387, + -0.0042097536, + 0.009935689, + 0.027251026, + -0.016906101, + 0.009620377, + -0.007547367, + 0.019455435, + -0.025090802, + -0.006044602, + -0.0030742942, + -0.01674509, + 0.013887155, + -0.01358526, + -0.0122904675, + -0.021253385, + 0.012357555, + 0.0021971224, + 0.0062794094, + 0.021843757, + 0.042962965, + -0.020354409, + -0.0024654733, + -0.025761679, + -0.025520163, + 0.009452658, + -0.009996068, + 0.02008606, + 0.024916373, + -0.001707382, + 0.0012134488, + 0.013061976, + -0.012082496, + -0.00878849, + -0.010391885, + -0.03115553, + -0.008647605, + 0.0130015975, + -0.014142089, + -0.007815718, + -0.017469639, + 0.0012578944, + -0.0071716756, + 0.0097545525, + 0.008151156, + 0.0011295893, + 0.0004297806, + 0.025171306, + 0.011492124, + 0.012022117, + -0.013310201, + -0.024352837, + 0.011310987, + -0.007654707, + -0.026902169, + -0.03459042, + -0.0025979714, + 0.01544359, + 0.0014096803, + -0.02085086, + -0.022675645, + 0.010727324, + -0.02836468, + -0.0049376553, + -0.010821247, + 0.026110535, + 0.017670901, + -0.010848082, + 0.0077888826, + 0.006651746, + 0.019737203, + 0.008037107, + 0.004048743, + 0.01042543, + 0.034134224, + -0.031128695, + 0.03252412, + 0.0111768115, + -0.019160248, + -0.008748237, + 0.008828742, + -0.002343038, + 0.005712518, + 0.013591969, + -0.008251788, + -0.008567099, + -0.011357948, + 0.0051020198, + -0.025560416, + 0.018757721, + 0.006198904, + -0.046854053, + 0.026365468, + 0.013155899, + -0.010861499, + 0.00041133148, + 0.0111768115, + -0.0046894304, + -0.0024252206, + 0.0062928265, + -0.030243138, + -0.0018063365, + 0.0004939332, + -0.023708794, + 0.029760106, + -0.011753766, + 0.0111768115, + 0.02307817, + 0.021481482, + -0.0052730935, + -0.02471511, + -0.003683115, + -0.011384783, + -0.008694567, + 0.025520163, + -0.0027623363, + -0.027452288, + -0.004042034, + 0.02199135, + -0.042426266, + 0.011304278, + 0.009828349, + -0.0056018233, + -0.018086845, + 0.0098015135, + 0.025493328, + -0.02984061, + -0.0151349865, + 0.009117219, + -0.015738776, + -0.009311774, + -0.010244292, + 0.028472021, + -0.026392303, + 0.018408867, + 0.0017207996, + -0.002237375, + -0.03874986, + -0.01467879, + 0.0053871428, + -0.0077687562, + -0.008466468, + 0.21124576, + -0.019656697, + -0.00076354196, + 0.04103084, + -0.009996068, + 0.03775696, + 0.027251026, + 0.0010784349, + -0.011344531, + 0.0022055083, + -0.038320497, + 0.0075339493, + 0.01544359, + -0.0013962629, + -0.00020388373, + -0.01871747, + -0.024191827, + -0.02782798, + -0.041379698, + 0.0017358944, + 0.009197724, + 0.0018683926, + 0.0033208414, + -0.014544615, + 0.018784557, + 0.011250608, + -0.005222778, + -0.008868994, + 0.017563561, + 0.018891897, + 0.0015430172, + 0.0030172695, + -0.0014792839, + 0.014866635, + -0.0057661883, + -0.0026633819, + -0.005642076, + -0.008137738, + 0.031772736, + 0.023762465, + -0.0022541468, + 0.0028965117, + -0.005947325, + -0.009009879, + -0.007446735, + 0.023091588, + -0.007929767, + 0.0031279642, + -0.011921485, + 0.030296808, + -0.037354436, + -0.015121569, + 0.040574644, + 0.02471511, + 0.011592755, + -0.013732853, + 0.03322183, + 0.00682282, + -0.009915562, + -0.008104195, + -0.020126311, + 0.02291716, + -0.010358342, + 0.02352095, + 0.005216069, + -0.0038810237, + -0.01478613, + 0.0061888406, + -0.0007912156, + -0.010324798, + 0.017254958, + -0.011431745, + -0.009070258, + -0.021092374, + -0.033517018, + -0.023547783, + 0.032711964, + 0.005598469, + 0.011398201, + 0.0348051, + -0.005088602, + 0.009486201, + 0.02580193, + 0.004535129, + 0.00022180872, + -0.01937493, + 0.017415969, + 0.010130243, + 0.015309414, + -0.00709117, + -0.008761655, + -0.024205243, + -0.008976335, + -0.017872164, + -0.009781388, + 0.01200199, + -0.005940616, + 0.016074214, + -0.010848082, + -0.014061583, + -0.009499619, + -0.028015826, + 0.011438454, + -0.0069368687, + 0.0058299215, + 0.007829135, + -0.00030021748, + -0.0067792125, + -0.00050525425, + -0.030967684, + 0.0037233676, + -0.037569113, + 0.0070643355, + 0.01615472, + 0.0077016684, + -0.0020881048, + -0.016248642, + -0.025949525, + 0.018140515, + -0.019401764, + 0.02307817, + -0.017872164, + -0.009519746, + -0.006363269, + -0.004726329, + -0.008889121, + -0.0062794094, + -0.014303098, + 0.0056823287, + -0.041621212, + 0.003022301, + -0.0030742942, + 0.022514634, + -0.0012444769, + -0.0064639, + 0.018556459, + 0.0053670164, + -0.010707198, + -0.017268375, + 0.026164206, + 0.008969626, + -0.008385963, + 0.019683532, + 0.0026617048, + -0.0051758164, + -0.020904528, + 0.0063431426, + 0.021105792, + -0.016074214, + 0.010861499, + -0.021548571, + -0.021065539, + -0.0011471998, + -0.014061583, + 0.030162632, + -0.007882806, + -0.022943996, + -0.01985796, + 0.0033225187, + 0.0111768115, + -0.030243138, + -0.009204433, + 0.049725406, + -0.02193768, + -0.027532794, + -0.011539085, + -0.17464271, + 0.028981889, + 0.019133413, + -0.022165777, + 0.026767993, + 0.010807829, + -0.0056991004, + -0.018247856, + -0.0051925885, + 0.016758509, + 0.05173804, + 0.013075394, + -0.008600644, + -0.011243899, + 0.0037032412, + -0.007876096, + -0.0034784975, + 0.0049477182, + 0.028981889, + 0.013692601, + 0.0470419, + -0.03137021, + 0.0148263825, + -0.00062517356, + -0.0007048402, + 0.024084486, + -0.00038973763, + -0.00087381736, + 0.016275477, + -0.010633402, + -0.023333104, + -0.013216278, + 0.03501978, + 0.022353623, + 0.009989359, + 0.013659056, + -0.008627479, + -0.018207602, + -0.019348094, + 0.03595901, + 0.005779606, + 0.010666945, + -0.003039073, + -0.012672868, + 0.0124313515, + 0.03088718, + 0.008278623, + -0.003917922, + -0.025761679, + -0.008775072, + 0.021454647, + -0.016610915, + -0.0030172695, + 0.01936151, + 0.00867444, + -0.0107742855, + 0.008627479, + 0.0098954365, + 0.0017845329, + -0.013752979, + -0.03469776, + -0.012283759, + 0.021602241, + 0.0018415574, + -0.015067899, + 0.0014172278, + -0.01222338, + -0.010546187, + -0.019281005, + 0.017805077, + 0.0009258103, + -0.016194971, + 0.021199714, + -0.043177646, + 0.019240754, + 0.005024869, + -0.009647212, + 0.024191827, + 0.019670116, + -0.0005023192, + -0.022474382, + 0.052999288, + -0.0148263825, + -0.0047665816, + 0.0010633401, + 0.009955815, + 0.0043841815, + -0.011438454, + -0.029277075, + -0.021696163, + 0.02199135, + -0.025520163, + -0.014638538, + -0.0109151695, + -0.0012620875, + 0.010687072, + -0.007876096, + 0.023695378, + -0.021951096, + 0.004692785, + 0.011834271, + -0.009700882, + -0.010163788, + 0.043231316, + 0.026003195, + 0.023910059, + 0.018301526, + 0.026016612, + 0.01930784, + 0.008057233, + -0.020837441, + 0.002262533, + 0.015175239, + 0.02629838, + -0.024876121, + 0.0036965325, + 0.013122355, + -0.01320286, + 0.009519746, + 0.007574202, + 0.037086084, + -0.015819281, + 0.0041393116, + 0.023883224, + -0.008936082, + -0.026445974, + -0.07358179, + 0.0043674097, + 0.006765795, + 0.022393877, + -0.0055951145, + 0.039501242, + 0.0112707345, + 0.011310987, + -0.0024067715, + 0.018449118, + -0.0077352123, + -0.018019758, + 0.00911051, + -0.01985796, + 0.024809033, + -0.0033208414, + -0.0022876908, + -0.002638224, + -0.0043170936, + 0.023091588, + -0.014973976, + -0.016839014, + 0.004830315, + -0.010479099, + -0.01473246, + 0.0066752266, + -0.010713906, + 0.017831912, + 0.015725357, + 0.0072991424, + 0.0033493536, + 0.004387536, + 0.00965392, + -0.026982674, + -0.013310201, + 0.013954243, + -0.010700489, + 0.008278623, + 0.03365119, + -0.051469687, + -0.0030189466, + 0.012760081, + -0.0061687143, + -0.0034717887, + -0.009828349, + -0.013383997, + -0.028579362, + 0.00679263, + -0.00336948, + -0.015966874, + -0.018838227, + -0.0043170936, + 0.0026650592, + -0.008271914, + 0.017415969, + -0.005625304, + 0.004927592, + 0.0253189, + -0.03464409, + 0.01681218, + 0.0035824834, + -0.0038072274, + -0.014920305, + 0.02925024, + 0.008667732, + 0.011411618, + -0.018435702, + -0.033114493, + 0.031853244, + -0.018757721, + -0.015577765, + 0.021239968, + -0.020810606, + 0.00534689, + -0.027693804, + -0.010633402, + -0.00274221, + -0.017120782, + 0.018972402, + -0.024057651, + -0.014236011, + -0.028391516, + 0.0015069576, + 0.007050918, + 0.0030357186, + 0.0041762097, + 0.010942005, + -0.0034248272, + 0.018314943, + -0.016476741, + 0.005407269, + 0.008164573, + 0.0094929105, + -0.029438084, + -0.006276055, + 0.022380458, + 0.002037789, + -0.015000811, + 0.002542624, + 0.0071783843, + -0.013457794, + -0.022340206, + -0.07546025, + 0.028659867, + 0.0013124032, + -0.008292041, + 0.020502003, + 0.005128855, + 0.018704053, + 0.0069704126, + 0.0116732605, + -0.022541469, + -0.045082938, + 0.009459366, + -0.013457794, + -0.0042466517, + -0.032953482, + -0.024809033, + 0.024996879, + 0.020743519, + 0.008681149, + 0.015913203, + 0.011357948, + 0.0013442698, + 0.024272332, + 0.010391885, + -0.03410739, + 0.0077620475, + -0.0030055293, + 0.026593566, + -0.024970043, + -0.015779028, + 0.0258556, + -0.027479123, + -0.007963311, + 0.009157471, + 0.0001614298, + -0.0061620055, + 0.0016956418, + 0.0126929935, + 0.009432531, + 0.031450715, + -0.020555673, + -0.0069435774, + 0.012283759, + -0.011257317, + 0.00649409, + 0.0001541969, + 0.0020797187, + 0.0052294866, + 0.017120782, + 0.016329147, + -0.010526061, + 0.03349018, + -0.008258496, + -0.0069033247, + -0.0057628336, + -0.026284963, + 0.017000025, + 0.0105126435, + -0.008493303, + -0.0113176955, + 0.023252599, + 0.004424434, + 0.016825596, + 0.010948714, + 0.012404516, + -0.007822426, + -0.02286349, + -0.0028428414, + 0.012491731, + -0.035529647, + -0.02930391, + 0.007970019, + 0.009808223, + 0.014397021, + 0.008714693, + 0.0009325191, + 0.0090903845, + -0.0067456686, + -0.03357069, + 0.023923475, + 0.005085248, + -0.000054613585, + -0.053348143, + 0.0060546654, + 0.01255211, + -0.01816735, + -0.0072052195, + -0.012458187, + -0.01953594, + 0.026835082, + -0.005447522, + -0.0075674932, + 0.0049846163, + 0.0030524905, + 0.0028327783, + 0.018757721, + -0.008325584, + -0.022031602, + 0.026794828, + 0.028418351, + 0.01871747, + -0.0074936966, + -0.011633008, + -0.0070106653, + -0.012833878, + -0.009747843, + -0.019884795, + -0.022018185, + 0.009975942, + 0.01462512, + 0.02286349, + 0.015792446, + -0.0005379595, + 0.018596712, + -0.01031138, + 0.006520925, + -0.017831912, + -0.036254197, + -0.01936151, + 0.018891897, + 0.03378537, + 0.021213133, + 0.026942423, + -0.005997641, + 0.016047379, + -0.0019203855, + 0.008942791, + -0.02613737, + 0.0029417959, + -0.0035153958, + 0.01626206, + 0.00976797, + -0.017899, + -0.0025308838, + -0.00878849, + 0.0038273535, + 0.0076681245, + 0.02836468, + -0.003978301, + 0.05291878, + -0.01135124, + 0.0014675435, + -0.0017375716, + 0.0059607425, + 0.02122655, + -0.004655887, + 0.016718255, + -0.025412822, + -0.014705625, + 0.0030575222, + -0.011163394, + 0.00698383, + -0.014598285, + -0.02471511, + -0.0051355637, + -0.020354409, + 0.019442016, + -0.010398595, + 0.015685106, + 0.037783794, + -0.003874315, + 0.02658015, + 0.018395448, + -0.013571843, + 0.0013308524, + 0.021535153, + 0.011612882, + 0.009305065, + -0.02389664, + 0.016825596, + -0.00226421, + -0.018650383, + -0.0112707345, + 0.0061519425, + -0.015054481, + -0.02613737, + 0.009996068, + 0.0024587645, + 0.014665373, + 0.0005983385, + 0.019227337, + -0.020985033, + -0.024299167, + 0.01734888, + -0.005806441, + -0.003579129, + -0.0024621189, + -0.01948227 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 4, + "total_tokens": 4 + } +} +247 34475 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 52 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["japan"]}HTTP/2.0 200 OK +Content-Length: 33520 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 10:20:14 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 85 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-rnb7h +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999999 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_50e11732b14b4572a1744fdaa5f103ac + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0025093954, + -0.014704405, + -0.0073522027, + -0.02217393, + -0.008075691, + 0.017116033, + -0.024598593, + 0.0051230774, + 0.014808692, + -0.039342105, + -0.0152910175, + 0.011536702, + 0.005507634, + -0.023177689, + 0.0012546977, + -0.0012180345, + 0.019983914, + -0.018875869, + 0.02467681, + -0.017037818, + -0.009405345, + 0.026501823, + 0.0047776285, + -0.0016522902, + 0.008303817, + 0.0038748977, + 0.0046766005, + -0.019006226, + 0.008773107, + -0.005448973, + 0.00782801, + -0.007977922, + -0.0087079285, + -0.027140578, + 0.0075477404, + -0.009196771, + -0.011621434, + -0.01291198, + -0.0018624929, + -0.012527424, + 0.019579802, + -0.009066413, + -0.012436173, + -0.00083307043, + -0.010213565, + 0.022108752, + -0.014743513, + 0.005768351, + -0.008492837, + 0.026058605, + 0.02089642, + 0.03381492, + -0.030243104, + -0.014274224, + -0.026827719, + -0.005315356, + -0.03334563, + -0.0094379345, + -0.0065146512, + 0.00045136528, + 0.0052729896, + 0.021678569, + -0.03459707, + 0.012768586, + 0.012827247, + -0.012468763, + -0.00036948404, + 0.012560013, + -0.016672814, + -0.008544981, + 0.030634178, + 0.027922727, + 0.006045362, + 0.003698914, + 0.024624664, + -0.006325632, + -0.0067069298, + -0.008584088, + 0.0030406052, + 0.013765827, + 0.019162657, + -0.031259898, + 0.0016294776, + -0.0118625965, + 0.007899707, + 0.0049307994, + -0.034232065, + 0.03449278, + 0.006967646, + -0.0044680275, + 0.011100002, + 0.01160188, + 0.011504112, + 0.02024463, + -0.028887378, + -0.014443689, + -0.0041095424, + 0.043617856, + -0.006182238, + -0.025719674, + -0.017142104, + 0.0192148, + -0.008773107, + -0.012879391, + -0.024116268, + 0.010037581, + 0.0064788028, + -0.010115797, + 0.016359955, + -0.0086362315, + -0.009118557, + 0.0281313, + 0.006100764, + -0.053290434, + -0.010721963, + -0.018980155, + 0.011256431, + 0.0030520116, + -0.008942573, + -0.01930605, + 0.017572286, + 0.023490548, + 0.016425135, + 0.000037987196, + 0.026749505, + 0.003094378, + -0.008193013, + -0.017702645, + 0.000025320554, + -0.0077497954, + 0.022916973, + 0.0109175, + 0.0000014878531, + 0.016751029, + -0.017441928, + 0.0029949797, + -0.0130293025, + -0.00095080014, + -0.018380508, + -0.016894424, + 0.0015748901, + 0.0033925723, + -0.0026055346, + 0.007065415, + 0.011113037, + 0.018302292, + 0.014795656, + -0.00048925064, + -0.005377276, + 0.001883676, + -0.0040965066, + -0.020049091, + 0.028835235, + 0.00043425578, + 0.023894658, + 0.011269467, + 0.0125926025, + 0.01319225, + 0.011784382, + 0.0039596306, + -0.0012579567, + -0.006032326, + 0.01753318, + -0.012116795, + -0.009333648, + 0.024533415, + 0.013896185, + 0.00623764, + 0.00089621264, + -0.0038879334, + -0.02420752, + 0.01800247, + -0.03746495, + 0.01565602, + -0.0050839703, + 0.0017158398, + 0.0050285677, + 0.015760306, + -0.024194483, + -0.0127751045, + -0.011425897, + 0.021639463, + 0.01977534, + 0.006693894, + -0.005813976, + -0.002207942, + 0.011947329, + 0.008740517, + 0.0064788028, + -0.016829245, + 0.014482797, + 0.038820673, + 0.022890901, + 0.016021024, + -0.6841199, + -0.04638145, + 0.011191252, + 0.007638991, + 0.03477957, + 0.021078922, + 0.017076924, + 0.008883912, + -0.01001151, + 0.019136585, + -0.024155376, + 0.012735996, + -0.008747036, + -0.011184734, + 0.0005059528, + -0.0062930426, + 0.011210806, + -0.030373462, + -0.0038716388, + -0.0065113925, + -0.015369233, + 0.008003994, + -0.015173695, + 0.0005088044, + -0.0022600854, + -0.0021036556, + 0.00041205416, + 0.001955373, + -0.0053674993, + 0.034883857, + -0.04270535, + 0.033554204, + 0.01827622, + -0.0109696435, + 0.03384099, + -0.025067883, + -0.02199143, + 0.03728245, + 0.020453202, + 0.029956317, + -0.0021199503, + -0.010278745, + -0.0013483927, + -0.009183736, + -0.004164945, + -0.0027081918, + 0.024807166, + -0.018419614, + 0.0036174401, + -0.015864594, + 0.012234118, + -0.01565602, + -0.01755925, + -0.012762069, + 0.00075567025, + 0.019345157, + -0.0024458459, + -0.02495056, + 0.003200294, + -0.003995479, + -0.019123549, + 0.0070849685, + -0.016920496, + -0.005282766, + -0.0075216684, + -0.003175852, + -0.034075636, + 0.0024491048, + 0.013179215, + -0.018315328, + -0.0013964623, + 0.009744276, + -0.0033632417, + -0.0030520116, + 0.010682855, + 0.022186967, + 0.013987436, + -0.026149856, + -0.019801412, + -0.019996949, + 0.008512391, + 0.0064136237, + -0.009359719, + 0.0025631683, + 0.018758547, + 0.002545244, + -0.021261424, + 0.0027407813, + 0.013739755, + -0.019201763, + 0.006980682, + 0.0020107753, + 0.006377775, + -0.0051882565, + -0.01035696, + 0.01793729, + -0.0003220255, + -0.026723431, + 0.009568293, + -0.0011919629, + -0.017911218, + -0.0056836177, + 0.001955373, + -0.0027163392, + -0.0020841018, + -0.0026674548, + -0.014730478, + 0.008303817, + 0.034883857, + -0.030712394, + 0.022486791, + -0.011621434, + -0.022369469, + 0.0036826194, + 0.028704876, + -0.026540931, + 0.012898944, + -0.0028825458, + 0.016320847, + -0.00063997734, + 0.011875632, + 0.0023937025, + 0.018719438, + 0.0024458459, + 0.00901427, + 0.021469997, + 0.004132355, + -0.02595432, + -0.007762831, + 0.004494099, + -0.011882151, + 0.014000472, + 0.021417852, + -0.019671053, + 0.025120026, + -0.007801939, + 0.0061137998, + 0.0053414274, + 0.01493905, + -0.046511807, + -0.03003453, + -0.01619049, + 0.0016042207, + -0.0010070171, + 0.0077563133, + -0.015864594, + -0.0023822961, + 0.002483324, + -0.0003623551, + 0.010122315, + 0.024559487, + -0.005093747, + -0.021039814, + 0.021548212, + -0.00034157923, + -0.015369233, + -0.008883912, + -0.007912743, + 0.012312332, + -0.012416619, + 0.026905933, + -0.0012408472, + -0.02940881, + -0.0028890637, + 0.014039579, + -0.01254046, + 0.004634234, + 0.030686323, + -0.019540695, + -0.026254144, + -0.0030552705, + -0.001484454, + -0.009581328, + 0.016555492, + 0.008388551, + 0.0100441, + 0.0013451338, + -0.011934293, + 0.0042529367, + -0.0031514096, + 0.0043702587, + -0.022447683, + -0.00667434, + -0.004226865, + 0.032015976, + -0.01840658, + 0.0151997665, + 0.014352438, + 0.0028108489, + 0.00033180238, + -0.031025253, + 0.024572521, + 0.011465005, + 0.0118625965, + 0.0082712285, + -0.013479038, + 0.015369233, + 0.016751029, + -0.0077823848, + 0.022421611, + 0.024259662, + -0.011627952, + 0.007938814, + -0.016086202, + 0.014978158, + -0.021065885, + -0.013439931, + -0.025628423, + 0.025432887, + 0.013700647, + 0.011412861, + -0.024220554, + -0.0029314302, + -0.008649267, + -0.0011691501, + 0.028652733, + 0.010389549, + 0.0063484446, + -0.006045362, + 0.0018869351, + 0.003241031, + -0.020596597, + 0.0032068118, + -0.01603406, + 0.0030291989, + 0.015551734, + -0.019605875, + 0.014052615, + 0.01849783, + -0.017324606, + -0.025524138, + -0.020414095, + -0.011660541, + 0.020974636, + 0.015017265, + -0.0011194511, + 0.016451206, + -0.024898417, + 0.035692077, + 0.022695364, + -0.0006326447, + 0.0111521445, + 0.008101762, + 0.011869115, + 0.013557253, + -0.009340165, + 0.050605055, + -0.00006920187, + -0.02313858, + 0.019253908, + -0.006693894, + -0.0071175583, + -0.006602643, + 0.010207048, + 0.009900706, + -0.029904172, + 0.015147624, + 0.0011830007, + 0.038221028, + 0.03796031, + 0.007990958, + -0.003946595, + 0.009385791, + -0.0017875369, + 0.0027733708, + -0.0049307994, + 0.021065885, + 0.014248152, + -0.0020726954, + 0.00001147636, + -0.015030301, + 0.0014518645, + 0.000006034159, + -0.023699122, + 0.02685379, + -0.014821728, + -0.0035196715, + 0.0008807326, + 0.021235352, + 0.01771568, + -0.0077823848, + -0.05034434, + 0.018654259, + 0.001085232, + -0.007502115, + -0.021626426, + -0.00355552, + -0.012853319, + -0.021900179, + 0.027088435, + 0.02747951, + 0.028470233, + -0.0023154877, + -0.023047332, + -0.014091722, + 0.0065570176, + 0.024989668, + -0.019436408, + -0.011908222, + 0.0027489287, + 0.014404582, + -0.021183208, + 0.006902467, + 0.010780623, + 0.017846039, + -0.006961128, + 0.0072283624, + -0.010415621, + 0.0035848506, + 0.0033893134, + -0.011223841, + -0.009301058, + -0.003848826, + 0.008427658, + 0.0046114214, + -0.004481063, + -0.019449444, + 0.01254046, + 0.013948328, + -0.00661242, + -0.013009749, + -0.012879391, + -0.010715445, + 0.0023839257, + 0.06450124, + -0.010982679, + 0.0016384397, + 0.0041258372, + 0.0022503086, + -0.010154904, + -0.02098767, + -0.015642984, + -0.0008636231, + 0.0041844985, + -0.0038390493, + 0.008968645, + 0.011047858, + 0.014052615, + -0.0012832136, + 0.0020678071, + -0.009431416, + -0.018354435, + 0.006902467, + -0.015903702, + 0.012846801, + -0.007606401, + 0.01469137, + 0.013042338, + 0.0036923962, + 0.004142132, + 0.0134138595, + 0.027427366, + 0.018302292, + -0.017833002, + 0.0059769237, + -0.0020238112, + -0.025067883, + 0.012455727, + -0.014991194, + 0.009718204, + 0.020388024, + 0.032693837, + 0.0020759543, + -0.006322373, + 0.0149260145, + 0.015108516, + 0.009033823, + -0.004601645, + 0.008962126, + -0.031859547, + -0.031233827, + 0.018145863, + -0.02651486, + -0.012077688, + 0.04364393, + 0.0017679832, + -0.02891345, + -0.024285734, + -0.0070849685, + 0.031129539, + -0.021978393, + -0.00019716678, + 0.0013980918, + -0.004132355, + -0.0012326998, + -0.04544287, + 0.0045462423, + -0.00973124, + -0.020596597, + -0.041844983, + -0.015512627, + -0.029643456, + -0.02732308, + -0.013622433, + -0.019045334, + -0.03000846, + -0.01937123, + 0.008003994, + 0.025185205, + -0.01755925, + 0.008303817, + -0.00589545, + -0.0012791399, + 0.021013742, + -0.022017501, + -0.016633706, + -0.030217033, + -0.008127834, + -0.0043246336, + 0.022069644, + 0.025902176, + -0.028548447, + -0.0074630072, + 0.0019407078, + 0.025237348, + -0.0033990901, + 0.015577805, + 0.017415857, + 0.005963888, + 0.0006827511, + 0.02152214, + 0.03206812, + -0.0046928953, + -0.010220083, + 0.02380341, + -0.01637299, + 0.0038748977, + 0.007925779, + 0.0011520407, + 0.020661775, + 0.0048884326, + 0.01191474, + -0.005533706, + -0.0075086327, + 0.02548503, + -0.014899943, + 0.007489079, + 0.017428892, + -0.0049829422, + 0.02049231, + -0.0085254265, + 0.008095245, + 0.008023548, + 0.0009874634, + 0.021821965, + -0.019970877, + 0.013387788, + 0.021065885, + 0.0015431152, + 0.021039814, + 0.0071175583, + -0.0025810925, + -0.0054848217, + -0.0073587205, + -0.019879626, + 0.018967118, + -0.01469137, + -0.011373754, + -0.022538934, + 0.006746037, + -0.009046859, + 0.008740517, + -0.010233119, + -0.027010221, + -0.0075086327, + -0.011249913, + 0.006635233, + 0.0038586028, + -0.023972875, + -0.019736232, + 0.00017058593, + 0.010832767, + 0.00268212, + 0.01699871, + -0.004793923, + 0.0009565033, + -0.01203858, + -0.0009842045, + -0.026019499, + -0.044895366, + -0.041375693, + -0.023646979, + 0.019879626, + 0.021795891, + 0.030686323, + 0.015421376, + 0.004934058, + -0.0016604377, + -0.017598357, + 0.018132826, + 0.0021199503, + 0.02906988, + -0.0064983563, + 0.0020564008, + 0.026215035, + 0.018354435, + -0.020309808, + -0.009529185, + -0.010383031, + 0.027297009, + -0.00421057, + 0.010024546, + -0.010220083, + -0.0255111, + 0.00866882, + -0.01977534, + -0.0029737966, + -0.0006033141, + 0.008473284, + -0.0075998832, + 0.009053377, + -0.0023562245, + 0.011119555, + -0.002264974, + 0.0042627132, + -0.023034295, + 0.0009100632, + -0.01874551, + -0.001924413, + -0.012064652, + -0.0008945832, + -0.006739519, + 0.014248152, + 0.014143866, + 0.023281975, + 0.010083207, + 0.00097198336, + -0.01406565, + 0.00302594, + 0.028548447, + -0.016490312, + -0.026827719, + 0.00031428548, + -0.01578638, + -0.02017945, + -0.018419614, + -0.0022226074, + -0.022213038, + -0.020596597, + 0.017363712, + -0.0065830895, + 0.030164888, + -0.00044403263, + -0.019671053, + -0.002872769, + 0.012221082, + 0.03939425, + 0.0039661485, + 0.019019263, + 0.0006118688, + -0.0033697595, + -0.026905933, + -0.01699871, + -0.014417618, + 0.00066197524, + 0.010304816, + 0.020453202, + -0.022695364, + -0.043748215, + -0.0058596013, + 0.008968645, + -0.00627023, + -0.009379273, + 0.02192625, + 0.010780623, + 0.009952849, + -0.020726955, + -0.010845803, + -0.00988767, + 0.03000846, + -0.0034544924, + -0.00010561052, + -0.0100441, + -0.018823724, + -0.021013742, + 0.021887142, + -0.011627952, + 0.014847799, + 0.0034773052, + -0.017194247, + 0.0036435118, + -0.009379273, + -0.013309573, + 0.009548739, + -0.0070132716, + 0.009868116, + 0.0077302414, + -0.010532943, + 0.003852085, + 0.011386789, + -0.014326367, + -0.0016302923, + -0.019814447, + 0.022447683, + -0.012885909, + -0.023125546, + -0.018888904, + 0.01619049, + 0.024572521, + -0.006733001, + -0.00027538172, + 0.010402584, + -0.022578042, + -0.0009662802, + 0.020270701, + 0.008812215, + -0.024976632, + -0.007058897, + -0.0165946, + -0.021561246, + -0.021821965, + -0.0005246918, + -0.0050578984, + -0.0025419851, + -0.0067525553, + -0.0033795366, + -0.024585558, + 0.010487318, + -0.011856079, + -0.013479038, + 0.0013019526, + 0.02293001, + -0.019345157, + 0.00842114, + -0.0014665298, + 0.020361952, + -0.023646979, + 0.0022405316, + 0.00024381059, + -0.016777102, + 0.020401059, + -0.01603406, + -0.002385555, + -0.03081668, + 0.00014868983, + 0.019253908, + 0.017363712, + 0.028235588, + 0.02239554, + -0.024168411, + 0.0036141812, + -0.042679276, + -0.025054848, + 0.013909221, + 0.009164182, + 0.017963361, + -0.004705931, + -0.00552067, + 0.002941207, + 0.010839284, + -0.013179215, + -0.0152910175, + -0.012501352, + -0.030451678, + -0.017846039, + 0.01406565, + -0.011158663, + 0.0018282739, + -0.017102996, + 0.0046733418, + -0.0024474752, + 0.018941047, + 0.0018820466, + 0.0068568415, + 0.004780887, + 0.032667767, + 0.00645599, + 0.0007678913, + -0.0021557987, + -0.019658018, + 0.01908444, + -0.019188728, + -0.01771568, + -0.025915211, + -0.017663537, + 0.037908167, + 0.010910982, + -0.015043337, + -0.024689844, + 0.008590606, + -0.025654495, + -0.02058356, + -0.009620436, + 0.031624902, + 0.016816208, + 0.0005605403, + 0.011627952, + -0.0022014242, + 0.0071827373, + 0.0030650473, + -0.0010583457, + -0.00007072951, + 0.021730714, + -0.028000943, + 0.021939287, + 0.0002782333, + -0.034388494, + -0.010982679, + 0.023295011, + 0.0004073694, + 0.001618886, + 0.007847564, + -0.003421903, + -0.017324606, + -0.000569095, + 0.0009622065, + -0.019384265, + 0.0054880804, + 0.008206049, + -0.044738937, + 0.013544218, + -0.0026299767, + -0.011556255, + -0.017819967, + 0.009483559, + -0.0063386676, + 0.0012579567, + -0.00047865903, + -0.008994716, + 0.0024882122, + -0.00073489436, + -0.03256348, + 0.019970877, + -0.008395068, + 0.0047352617, + 0.038664244, + 0.0077367597, + -0.0008571052, + -0.021391781, + -0.006605902, + -0.020388024, + -0.013290019, + 0.0235818, + -0.0100766895, + -0.018914975, + -0.016855316, + 0.0069350568, + -0.031624902, + 0.0130293025, + 0.0024588816, + 0.0134138595, + -0.028027015, + 0.021339638, + 0.018576045, + -0.039263893, + 0.0015919995, + 0.023555728, + -0.023125546, + 0.0056836177, + -0.013335644, + 0.010689373, + -0.029200237, + 0.022630185, + 0.0071827373, + -0.0064853206, + -0.025328599, + 0.007697652, + -0.006416883, + -0.027583797, + -0.004230124, + 0.18563008, + -0.017767824, + 0.015877629, + 0.038247097, + -0.00052917283, + 0.03587458, + 0.02860059, + -0.0005393571, + -0.0031025254, + 0.008166942, + -0.040776048, + 0.020766063, + 0.014274224, + -0.0005866119, + -0.001288102, + -0.043331068, + -0.029956317, + -0.011465005, + -0.036656726, + 0.009431416, + 0.009314094, + -0.0054750447, + -0.013922256, + -0.00910552, + 0.013557253, + -0.0019977395, + -0.006462508, + 0.009222843, + 0.023881624, + 0.016737994, + 0.0025941283, + 0.008153906, + 0.004748298, + -0.0010208677, + -0.019488553, + -0.014417618, + -0.0043148566, + -0.0037477985, + 0.012468763, + 0.019006226, + 0.0023122288, + 0.008225603, + 0.0069220206, + -0.0042333826, + -0.013557253, + 0.019188728, + 0.003786906, + -0.0077432776, + -0.008968645, + 0.026032533, + -0.03066025, + -0.017089961, + 0.03496207, + 0.03285027, + 0.014547976, + -0.008219085, + 0.02826166, + 0.0053186147, + -0.0005430234, + -0.010734999, + -0.017102996, + 0.01619049, + -0.012677335, + 0.025185205, + -0.011673577, + 0.0043539642, + -0.035222787, + -0.0038129776, + -0.0016262187, + -0.016555492, + 0.014508869, + -0.018198006, + -0.01818497, + -0.013896185, + -0.030399533, + -0.02747951, + 0.037099946, + 0.015499591, + 0.00826471, + 0.038507815, + 0.0039074873, + 0.0065928665, + -0.0036206993, + 0.011908222, + 0.00110723, + -0.021131065, + 0.008336407, + -0.008916501, + 0.01437851, + 0.0008265525, + -0.0017370231, + -0.01883676, + -0.003770611, + -0.020674812, + -0.0057716095, + 0.008492837, + 0.0000075172384, + 0.016724957, + -0.014182973, + 0.002862992, + -0.010995715, + -0.010734999, + 0.0026348652, + 0.007899707, + 0.010669819, + 0.01469137, + -0.018237114, + 0.004376777, + -0.002167205, + -0.010891428, + -0.011921258, + -0.028079158, + -0.000112433954, + 0.005892191, + -0.017259426, + 0.004494099, + -0.0050024963, + -0.015538698, + 0.018615153, + -0.026619146, + 0.015369233, + -0.021874107, + -0.011556255, + -0.011621434, + -0.021874107, + -0.013726719, + 0.0004872138, + -0.01930605, + 0.0010477541, + -0.0331892, + 0.0016359955, + -0.012403583, + 0.026958076, + -0.026723431, + 0.00095161493, + 0.01774175, + 0.017324606, + 0.0038586028, + -0.0072544343, + 0.033137057, + 0.0047352617, + -0.011249913, + 0.025850032, + 0.006746037, + -0.000620831, + -0.005892191, + 0.0043050796, + 0.025250385, + -0.009985439, + 0.0099658845, + -0.00941838, + -0.016777102, + 0.0014388287, + -0.005735761, + 0.04082819, + -0.010220083, + -0.0333717, + -0.015825486, + 0.013283501, + 0.021483032, + -0.03558779, + -0.0043050796, + 0.061685503, + -0.010311334, + -0.027114507, + 0.004503876, + -0.16800566, + 0.0165946, + 0.02064874, + -0.022408575, + 0.021848036, + 0.022486791, + -0.01780693, + -0.0060160314, + 0.004376777, + 0.016021024, + 0.047919676, + 0.03384099, + -0.0165946, + -0.013622433, + 0.01493905, + -0.008655785, + -0.01927998, + 0.0030080157, + 0.01968409, + 0.014052615, + 0.036917444, + -0.012664299, + 0.0035066358, + 0.00017160436, + -0.016490312, + 0.023242868, + 0.0023464477, + 0.01381797, + -0.0085254265, + 0.015695129, + -0.021065885, + -0.0100766895, + 0.02875702, + 0.018719438, + 0.0030585295, + 0.0019635204, + -0.021913214, + -0.020322844, + -0.0151997665, + 0.01646424, + 0.0065081334, + 0.011334646, + 0.00227638, + -0.014287259, + 0.0017582063, + 0.024051089, + 0.014717441, + -0.024663772, + -0.014143866, + -0.011686613, + 0.014613155, + -0.012520906, + -0.011438932, + 0.028704876, + 0.014313331, + -0.0050187907, + 0.008603642, + 0.008290782, + 0.004787405, + 0.024363948, + -0.039316036, + -0.02255197, + 0.017037818, + -0.0062148273, + -0.02622807, + -0.00458535, + -0.0074434537, + 0.0033958312, + -0.010187494, + -0.0026967854, + 0.004138873, + -0.020192485, + 0.0047189672, + -0.034883857, + 0.011373754, + 0.005667323, + 0.0068177343, + 0.02398591, + -0.01325743, + -0.014600119, + -0.036448155, + 0.02860059, + -0.009359719, + -0.0040867296, + -0.013778863, + 0.032302763, + 0.015916737, + 0.005533706, + -0.038455673, + -0.01755925, + 0.027349152, + -0.01827622, + 0.005025309, + -0.009744276, + 0.0024230331, + 0.022617148, + -0.010369996, + 0.028704876, + -0.02938274, + 0.013231358, + 0.008303817, + -0.007573812, + -0.013583325, + 0.02685379, + 0.019723197, + 0.0009499854, + 0.023373226, + 0.024898417, + 0.03782995, + 0.012612157, + -0.018224077, + 0.008199532, + 0.028339874, + 0.010363477, + -0.008355961, + 0.008975162, + 0.014000472, + -0.0047352617, + 0.025693603, + 0.013987436, + 0.019983914, + -0.007104522, + 0.0057487967, + 0.010930535, + -0.007176219, + -0.016177453, + -0.08222996, + 0.0022454201, + -0.0041128015, + 0.020036057, + 0.005009014, + 0.045234296, + 0.01297716, + 0.0062017916, + -0.010207048, + 0.024246626, + -0.0002056197, + -0.019592838, + -0.017389785, + -0.024624664, + 0.0153822685, + 0.0021085439, + -0.018628187, + -0.013374752, + -0.010559015, + 0.010461246, + -0.018980155, + -0.008734, + 0.0034642692, + -0.0076455087, + -0.018054612, + 0.006967646, + -0.010389549, + 0.012879391, + 0.0076194373, + -0.0019570026, + -0.0033665006, + -0.0016213302, + -0.0050350856, + -0.032433122, + -0.013426895, + -0.005292543, + -0.02264322, + 0.0077563133, + 0.036630657, + -0.045651443, + 0.00988767, + -0.00011620212, + -0.0008090356, + -0.020374987, + 0.0062083094, + -0.014587083, + -0.019423373, + 0.013400824, + 0.008303817, + -0.023321083, + -0.035379216, + -0.0057781273, + -0.0025501323, + 0.0017859074, + 0.027714154, + -0.009522667, + 0.017285498, + 0.0073522027, + -0.034988143, + 0.02217393, + 0.009464006, + -0.005729243, + -0.009196771, + 0.027297009, + 0.015343161, + 0.009548739, + -0.016216561, + -0.041740697, + 0.02940881, + -0.015225839, + -0.017911218, + 0.028313803, + -0.02423359, + -0.0068503236, + -0.025563244, + -0.009274987, + -0.016021024, + -0.003135115, + 0.015017265, + -0.023868587, + -0.011510629, + -0.021874107, + 0.010780623, + -0.0065342053, + 0.0018804171, + 0.021600354, + 0.008414622, + -0.0066580456, + 0.0119538475, + -0.009705168, + 0.026553966, + 0.024064125, + 0.023099475, + -0.015095481, + 0.0010941942, + 0.048310753, + -0.0067786267, + -0.009457488, + -0.000286177, + -0.0026593073, + 0.0049307994, + -0.019762304, + -0.06820341, + 0.019175692, + -0.0050383448, + -0.011465005, + 0.028053086, + 0.0034088672, + 0.012768586, + -0.005807458, + 0.014912979, + -0.01690746, + -0.048258606, + 0.015017265, + -0.0078084567, + -0.014600119, + -0.03863817, + -0.025198242, + 0.024168411, + 0.016307812, + 0.00085140206, + -0.005282766, + 0.01995784, + 0.011549737, + 0.024168411, + 0.030399533, + -0.038455673, + 0.00552067, + -0.0038423082, + 0.021417852, + -0.026671289, + -0.011393307, + 0.003500118, + -0.024624664, + -0.0027798887, + 0.01800247, + 0.0021590579, + -0.005729243, + 0.010956607, + -0.0007507818, + 0.021887142, + 0.047293957, + -0.018015504, + -0.009718204, + 0.022069644, + -0.0038455671, + -0.0054750447, + 0.012625192, + -0.0032638435, + -0.0014184603, + -0.0040541403, + 0.01493905, + 0.011575809, + 0.019501587, + -0.0017142104, + -0.008382033, + -0.0048558433, + -0.039811395, + 0.012058134, + 0.008499355, + -0.010050618, + -0.0014828246, + 0.023047332, + -0.0030357167, + 0.029591313, + 0.0014673446, + 0.0013394306, + 0.00056257716, + -0.017116033, + -0.0051133004, + 0.0025615387, + -0.026188964, + -0.025719674, + 0.011940812, + -0.0028809165, + 0.021222316, + 0.008219085, + -0.014965122, + -0.00057276135, + -0.010669819, + -0.016021024, + 0.025367707, + -0.005312097, + -0.0044354377, + -0.044530362, + 0.017194247, + 0.01665978, + -0.017507108, + -0.016777102, + -0.00029615755, + -0.00558259, + 0.020844277, + 0.00012546977, + -0.0015357826, + 0.025993425, + 0.00421057, + 0.00033689447, + 0.009959367, + -0.008688374, + -0.028027015, + 0.037882093, + 0.0016115534, + 0.023373226, + -0.0038846745, + -0.0022812686, + -0.0151997665, + -0.02488538, + -0.009118557, + -0.018954083, + -0.011614916, + -0.00008422362, + 0.016607635, + 0.03034739, + 0.025185205, + -0.010891428, + 0.025367707, + -0.011308574, + -0.0107871415, + -0.015212802, + -0.022604113, + -0.018445686, + 0.02158732, + 0.024116268, + 0.014495833, + 0.016555492, + -0.020205522, + 0.019423373, + -0.0072479164, + 0.00997892, + -0.028704876, + 0.009529185, + -0.012931534, + 0.014339402, + 0.017324606, + -0.006693894, + -0.018875869, + -0.03736066, + 0.013791898, + 0.011693131, + 0.018797653, + -0.01643817, + 0.041688554, + -0.0020629186, + -0.006843806, + 0.003019422, + 0.0024230331, + 0.028027015, + -0.009027306, + 0.016151382, + -0.0038032006, + -0.015017265, + -0.007632473, + 0.0007255249, + -0.013452967, + 0.00648858, + -0.031833474, + -0.0048330305, + -0.024038054, + 0.030634178, + 0.00049454643, + -0.0013418748, + 0.037126016, + -0.0116083985, + 0.03642208, + 0.008179978, + -0.020518381, + -0.012181974, + 0.026723431, + 0.00048151062, + 0.010141868, + -0.007990958, + 0.01175831, + 0.001750059, + -0.022812687, + -0.0014608266, + 0.009040342, + -0.0059736646, + -0.014196008, + 0.0030210514, + 0.008883912, + 0.03081668, + 0.00083673676, + 0.027427366, + -0.0183414, + -0.017050853, + 0.004295303, + 0.00973124, + 0.008193013, + 0.0003967778, + -0.020283736 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} diff --git a/vectorstores/inmemory/inmemory.go b/vectorstores/inmemory/inmemory.go index 20a243838..a0c8bd5b5 100644 --- a/vectorstores/inmemory/inmemory.go +++ b/vectorstores/inmemory/inmemory.go @@ -1,6 +1,7 @@ package inmemory import ( + "cmp" "context" "errors" "slices" @@ -175,8 +176,9 @@ func (s *Store) SimilaritySearch( return nil, err } - // already sorted by increasing distance, so reverse to get highest similarity first - slices.Reverse(docs) + // hnsw hands back its result heap as is, not sorted by distance, so order + // by similarity here, highest first. + slices.SortStableFunc(docs, func(a, b schema.Document) int { return cmp.Compare(b.Score, a.Score) }) return docs, nil } diff --git a/vectorstores/inmemory/inmemory_test.go b/vectorstores/inmemory/inmemory_test.go index 1bd5f6750..42cbc1e9a 100644 --- a/vectorstores/inmemory/inmemory_test.go +++ b/vectorstores/inmemory/inmemory_test.go @@ -2,12 +2,13 @@ package inmemory_test import ( "context" - "os" + "net/http" "strings" "testing" "github.com/vxcontrol/langchaingo/chains" "github.com/vxcontrol/langchaingo/embeddings" + "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/llms/openai" "github.com/vxcontrol/langchaingo/schema" "github.com/vxcontrol/langchaingo/vectorstores" @@ -106,22 +107,37 @@ func TestMockSimilarityScoreCalculation(t *testing.T) { } } -func preCheckEnvSetting(t *testing.T) { +func createOpenAILLM(t *testing.T, rr *httprr.RecordReplay) *openai.LLM { t.Helper() - if openaiKey := os.Getenv("OPENAI_API_KEY"); openaiKey == "" { - t.Skip("OPENAI_API_KEY not set") + opts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), + openai.WithEmbeddingModel("text-embedding-ada-002"), + openai.WithHTTPClient(rr.Client()), } + if !rr.Recording() { + opts = append(opts, openai.WithToken("test-api-key")) + } + + llm, err := openai.New(opts...) + require.NoError(t, err) + + return llm } func TestInMemoryStoreRest(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -148,13 +164,18 @@ func TestInMemoryStoreRest(t *testing.T) { } func TestInMemoryStoreRestWithScoreThreshold(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -200,13 +221,18 @@ func TestInMemoryStoreRestWithScoreThreshold(t *testing.T) { } func TestSimilaritySearchWithInvalidScoreThreshold(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -249,13 +275,18 @@ func TestSimilaritySearchWithInvalidScoreThreshold(t *testing.T) { } func TestInMemoryAsRetriever(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -289,13 +320,18 @@ func TestInMemoryAsRetriever(t *testing.T) { } func TestInMemoryAsRetrieverWithScoreThreshold(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -334,13 +370,18 @@ func TestInMemoryAsRetrieverWithScoreThreshold(t *testing.T) { } func TestInMemoryAsRetrieverWithMetadataFilterNotSelected(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -406,13 +447,18 @@ func TestInMemoryAsRetrieverWithMetadataFilterNotSelected(t *testing.T) { } func TestInMemoryAsRetrieverWithMetadataFilters(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) @@ -469,13 +515,18 @@ func TestInMemoryAsRetrieverWithMetadataFilters(t *testing.T) { } func TestDeduplicater(t *testing.T) { - t.Parallel() + httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + + if !rr.Recording() { + t.Parallel() + } - preCheckEnvSetting(t) ctx := t.Context() - llm, err := openai.New() - require.NoError(t, err) + llm := createOpenAILLM(t, rr) e, err := embeddings.NewEmbedder(llm) require.NoError(t, err) diff --git a/vectorstores/inmemory/testdata/TestDeduplicater.httprr b/vectorstores/inmemory/testdata/TestDeduplicater.httprr new file mode 100644 index 000000000..b64fde5df --- /dev/null +++ b/vectorstores/inmemory/testdata/TestDeduplicater.httprr @@ -0,0 +1,3179 @@ +httprr trace v1 +248 34504 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 53 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["potato"]}HTTP/2.0 200 OK +Content-Length: 33548 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:59 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 101 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999999 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_541ce36f3eb447c59a57bc08dde2b6cb + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} +248 34503 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 53 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["potato"]}HTTP/2.0 200 OK +Content-Length: 33548 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:28:00 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 76 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-qpwjk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999999 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_51cd021dc4ed4f2e95352d3a13c79be0 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} diff --git a/vectorstores/inmemory/testdata/TestInMemoryAsRetriever.httprr b/vectorstores/inmemory/testdata/TestInMemoryAsRetriever.httprr new file mode 100644 index 000000000..d1531ef85 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestInMemoryAsRetriever.httprr @@ -0,0 +1,6332 @@ +httprr trace v1 +340 101308 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 144 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["The color of the house is blue.","The color of the car is red.","The color of the desk is orange."]}HTTP/2.0 200 OK +Content-Length: 100351 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:40 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 129 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999978 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_f2947ec48239424589242becd1bc6dcf + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0045962376, + 0.00861834, + -0.008126223, + -0.0057255807, + -0.016656235, + 0.023255637, + -0.0021608942, + 0.0004629361, + 0.03417052, + -0.009558408, + -0.021224082, + 0.019343946, + 0.008006349, + -0.017110497, + -0.008088369, + -0.009735065, + 0.019672023, + -0.024353435, + 0.018031636, + -0.0012744544, + -0.03485191, + 0.028063232, + -0.0003330064, + -0.0025457542, + -0.0055268416, + -0.005293402, + 0.01669409, + -0.013539501, + 0.017047405, + 0.007836002, + -0.0042019137, + -0.01500323, + -0.011741384, + -0.009659355, + -0.010170398, + -0.0058580735, + -0.0010071029, + 0.0023943337, + -0.007186156, + 0.000008675122, + 0.01755214, + -0.0024795078, + 0.0055457694, + -0.030965455, + -0.0057445085, + 0.005832837, + 0.0017397564, + 0.0144227855, + -0.022713048, + 0.008290263, + 0.0053501846, + 0.026296662, + -0.0006660128, + -0.03437241, + 0.0062997164, + -0.011110466, + 0.0062050787, + 0.015596293, + 0.0025773, + -0.004785513, + 0.010145161, + -0.02176667, + -0.011899114, + -0.012328138, + -0.029602673, + -0.010511094, + -0.017905453, + -0.010498475, + 0.005618325, + 0.022511154, + 0.019268235, + 0.024782458, + 0.0139180515, + -0.001563888, + 0.012782399, + 0.013451172, + -0.023444913, + -0.012290282, + 0.0012602587, + 0.010908572, + 0.006561547, + -0.004507909, + -0.033287235, + 0.007507924, + 0.029224122, + 0.017791888, + -0.015911752, + 0.014902283, + -0.039899256, + 0.0029921287, + 0.024429144, + 0.041716296, + 0.016845511, + -0.008959035, + -0.009053674, + -0.014183037, + 0.011993751, + 0.029880276, + 0.006914861, + -0.026220951, + -0.00060213235, + 0.011318669, + -0.048025478, + 0.00761518, + -0.03015788, + 0.0017019013, + -0.0023186237, + -0.004255542, + 0.027432315, + -0.029577436, + -0.025337666, + 0.027508024, + 0.024782458, + -0.031520665, + -0.00094085647, + -0.00008300515, + 0.0006277634, + -0.011854949, + -0.0102397995, + 0.01654267, + 0.009911722, + 0.021817144, + 0.014637298, + 0.017640468, + -0.004946397, + 0.005485832, + -0.021968564, + -0.044113785, + -0.005362803, + -0.0021640488, + 0.009413296, + 0.021526922, + 0.015836041, + 0.0018312394, + -0.025640508, + -0.0038643728, + -0.026094768, + 0.028416546, + -0.024656275, + -0.00353945, + 0.009779229, + 0.019558458, + -0.023369202, + -0.0035993871, + 0.019836063, + 0.02861844, + 0.003400648, + -0.0028706768, + -0.0105174035, + -0.030258827, + 0.017779268, + -0.031596374, + 0.0141451815, + 0.020580545, + 0.020984333, + 0.0360128, + -0.008977963, + 0.012662524, + -0.03333771, + 0.013526882, + -0.025716217, + -0.0013304483, + 0.036441825, + -0.006362808, + 0.034321938, + 0.018839212, + 0.017564757, + 0.0049053873, + -0.028366074, + 0.0011963783, + -0.012403848, + 0.035810906, + -0.039571177, + 0.021640487, + 0.007886475, + 0.01523036, + -0.0057034986, + 0.0015607334, + -0.01669409, + -0.0049716337, + -0.041665826, + -0.0055299965, + 0.0111987945, + 0.006681422, + -0.0016798192, + 0.012946437, + 0.016138883, + -0.008353354, + 0.017817125, + 0.0018959086, + 0.021514304, + 0.004731885, + -0.0024479618, + -0.00040891374, + -0.6856312, + -0.017981162, + 0.010132543, + -0.02200642, + 0.02161525, + 0.021526922, + 0.026725687, + 0.0070284265, + -0.01577295, + -0.017211443, + -0.005914856, + -0.0013501645, + -0.010088379, + -0.0015402286, + 0.0032902374, + -0.0035236771, + 0.007829692, + 0.01008207, + 0.0049905614, + 0.005022107, + -0.0075647067, + -0.009324968, + -0.015066322, + 0.001839126, + 0.01577295, + 0.009823393, + 0.014788718, + 0.0016861283, + -0.028896045, + 0.014902283, + -0.015735095, + 0.03470049, + -0.0020094737, + 0.008719287, + 0.03263108, + 0.0047129574, + -0.02114837, + 0.036896084, + 0.021791907, + 0.013829722, + -0.0024952807, + -0.0036151602, + 0.019343946, + -0.00020209092, + -0.010126234, + 0.006255552, + 0.009501625, + -0.010933809, + 0.010334437, + 0.0074069775, + 0.00669404, + -0.009451152, + -0.00892749, + 0.021034807, + 0.021299792, + 0.00046254176, + 0.036492296, + 0.020795057, + -0.010151471, + -0.0066435663, + -0.00815146, + 0.0025268267, + -0.012485867, + -0.021400739, + -0.015129413, + 0.002026824, + -0.027785629, + -0.01608841, + -0.0141451815, + -0.005340721, + -0.00081625016, + 0.017097877, + -0.02294018, + 0.023053743, + 0.0026277734, + -0.0019590005, + 0.03480144, + -0.008877017, + -0.010801316, + 0.013135713, + 0.015343926, + -0.018019019, + -0.012126244, + -0.018813975, + 0.009028437, + -0.015697239, + -0.01885183, + -0.019911772, + 0.004432199, + -0.027104238, + 0.020214614, + -0.0074069775, + -0.014864428, + -0.025135772, + -0.013299751, + 0.009817084, + -0.0067508225, + 0.02015152, + 0.016138883, + -0.021905473, + -0.017577376, + -0.008971654, + 0.0007425116, + 0.010397528, + 0.03210111, + 0.012302901, + -0.004485827, + 0.023508005, + 0.0039022279, + -0.026246188, + 0.02215784, + -0.0056877257, + -0.015066322, + 0.0061956146, + -0.004763431, + -0.02360895, + 0.014940138, + 0.0076404167, + 0.02977933, + -0.013690921, + 0.02016414, + 0.0032586914, + -0.00073304784, + -0.003369102, + 0.0151041765, + 0.0052965567, + -0.010700369, + -0.0050725807, + -0.0048202137, + 0.00042547533, + 0.0031608993, + 0.011671983, + 0.022069512, + 0.009552099, + 0.013186187, + 0.003378566, + 0.00619246, + -0.008612031, + 0.031192586, + -0.007192465, + -0.014637298, + 0.014536351, + -0.01138807, + 0.0065110736, + -0.00946377, + -0.031949688, + -0.037981264, + -0.018978013, + -0.025097918, + 0.01692122, + -0.005851764, + -0.00074448326, + 0.0019858144, + 0.015608911, + -0.01162151, + 0.011224031, + 0.0012571041, + -0.0008667236, + -0.008397519, + 0.013514264, + 0.023419676, + 0.015899133, + -0.0026987516, + 0.006580475, + -0.01530607, + -0.013842341, + -0.018372333, + 0.013413317, + -0.01261205, + -0.022031657, + 0.007810765, + -0.004078885, + -0.013211423, + -0.016214592, + -0.01838495, + 0.006977953, + -0.03333771, + -0.033135813, + -0.004583619, + -0.012996911, + 0.01806949, + 0.015470109, + -0.004763431, + -0.0027397615, + 0.016530052, + 0.0074889967, + 0.037829842, + 0.032429185, + 0.0043060156, + 0.0071483008, + -0.0014771367, + 0.0144480225, + 0.0012768203, + 0.022183077, + 0.011640437, + -0.009375442, + -0.00077997235, + 0.009154621, + -0.004138822, + 0.014889665, + 0.02476984, + 0.0024905489, + 0.013678302, + -0.020366034, + -0.0027413387, + -0.042902425, + 0.020138903, + 0.002561527, + -0.001892754, + 0.005946402, + -0.019356564, + -0.02208213, + -0.01660576, + -0.013375462, + 0.009665663, + -0.012018988, + -0.005662489, + 0.006422745, + 0.009552099, + -0.006971644, + 0.006031576, + 0.00011908577, + 0.029022228, + -0.00438488, + -0.014460641, + -0.012239809, + 0.0004830466, + 0.011160939, + -0.014864428, + -0.010132543, + -0.021198845, + 0.0073123397, + -0.008107296, + 0.009507935, + -0.0028690996, + 0.0105174035, + 0.018296622, + -0.020252468, + 0.0013951174, + -0.0013170413, + 0.019179907, + 0.026296662, + 0.0017381791, + -0.0076845814, + 0.021817144, + -0.0049116965, + 0.010858099, + -0.00034877934, + -0.020504834, + 0.014864428, + -0.007753982, + -0.0049337787, + -0.014889665, + -0.0005788673, + 0.013375462, + -0.01953322, + 0.02685187, + -0.0056025516, + 0.026145242, + 0.017741414, + 0.03321152, + 0.0060662767, + -0.0007535527, + -0.007817074, + 0.00984232, + -0.0016048977, + -0.020631019, + -0.008283953, + -0.005794982, + -0.025968585, + -0.006100977, + -0.009482698, + 0.029224122, + -0.0015694086, + 0.0007488208, + -0.007331267, + 0.0021593168, + -0.0016656235, + 0.012170408, + -0.009880176, + -0.0078486195, + -0.023381822, + 0.0052460833, + 0.012599433, + -0.000050769184, + -0.009438533, + -0.0303093, + 0.02100957, + -0.015507964, + 0.012971674, + 0.026372373, + 0.0016672008, + 0.0063501894, + -0.008567867, + -0.00488646, + -0.02839131, + 0.0025362903, + -0.0027902348, + 0.015722476, + -0.017060023, + 0.008826543, + -0.0193818, + -0.007974803, + -0.0010165666, + 0.008069442, + 0.022296643, + 0.00885178, + 0.0149275195, + -0.012403848, + -0.022801377, + -0.029501725, + -0.0076277987, + 0.008006349, + 0.009104147, + -0.015293452, + -0.0052681654, + -0.025489086, + -0.02476984, + 0.024429144, + 0.013287133, + -0.00066522416, + -0.0055489237, + -0.01276978, + -0.0008895944, + 0.085602954, + -0.018612081, + 0.0021041115, + -0.001769725, + 0.023331348, + -0.017425954, + -0.016201975, + 0.0061829966, + -0.008347045, + 0.026448082, + 0.011413307, + -0.002197172, + 0.0069211703, + 0.012492176, + 0.00043217881, + -0.0014211428, + 0.024164159, + -0.0116152, + 0.012340756, + -0.019507984, + -0.026725687, + 0.0029495417, + 0.014725626, + 0.007829692, + -0.0040410296, + 0.008990581, + 0.012795017, + 0.0006581263, + 0.021413356, + -0.009627809, + -0.004861223, + 0.013981143, + -0.002235027, + -0.019457512, + -0.00091246516, + -0.020138903, + -0.03439765, + -0.007400668, + 0.01238492, + -0.026220951, + 0.029426016, + 0.012151481, + 0.008984272, + -0.009571026, + 0.002984242, + 0.012006369, + -0.0014637298, + 0.0412368, + -0.013022147, + -0.010183017, + 0.030889746, + -0.017123114, + 0.0014353384, + 0.00438488, + 0.013148331, + 0.015810804, + 0.005933784, + 0.005523687, + 0.01755214, + -0.029804567, + -0.0149275195, + -0.025842402, + -0.015899133, + 0.002908532, + -0.002946387, + -0.03886455, + -0.015091559, + -0.00082413666, + -0.022220932, + -0.015318689, + 0.025993822, + -0.011299741, + -0.018359713, + 0.01515465, + 0.024403907, + 0.022952797, + 0.002925882, + -0.018965395, + -0.019634169, + 0.02016414, + -0.012996911, + -0.0021246164, + 0.015041085, + 0.008839161, + -0.0041230493, + -0.0027350294, + 0.023318728, + -0.027255658, + -0.00792433, + 0.022914942, + 0.004823368, + 0.0019558459, + 0.030359775, + 0.009451152, + -0.008984272, + 0.0043817256, + -0.001984237, + 0.009116765, + -0.01669409, + 0.0024448072, + 0.010933809, + -0.031066403, + -0.013577355, + -0.004548919, + -0.0061041317, + 0.0025063218, + 0.010302891, + -0.0005694035, + -0.04138822, + 0.005302866, + 0.016807655, + -0.017135734, + 0.000028194148, + -0.030208353, + 0.003277619, + 0.023861319, + -0.019331327, + 0.017577376, + 0.0023659426, + -0.03538188, + 0.027205184, + -0.036366113, + 0.025123155, + 0.010763461, + -0.007356504, + 0.004744503, + 0.008895944, + -0.0059211655, + -0.016164118, + 0.0039274646, + 0.0022097903, + 0.00082255935, + -0.022145221, + -0.012946437, + -0.01969726, + -0.013047384, + 0.019444892, + 0.0047728946, + 0.00004029496, + -0.011255577, + -0.0111987945, + 0.011911732, + 0.0030883437, + -0.0017634158, + -0.024731986, + -0.016416486, + 0.00276973, + -0.0144480225, + -0.013552119, + 0.022750903, + 0.016731946, + -0.0076593445, + -0.001903795, + 0.022107366, + 0.006839151, + -0.009873867, + -0.017981162, + -0.004100967, + 0.02161525, + 0.029602673, + 0.006681422, + -0.00030402362, + 0.02176667, + -0.009552099, + -0.016290303, + -0.011968515, + 0.0075836345, + -0.0053911945, + -0.021425975, + 0.01962155, + 0.01631554, + 0.027861338, + 0.015457491, + 0.022271406, + 0.0056372522, + 0.015962224, + 0.0049653244, + -0.0027239884, + -0.015205123, + -0.037527002, + -0.01808211, + 0.0024243025, + -0.019672023, + 0.00423346, + 0.021943329, + -0.0035552229, + 0.010883335, + 0.01953322, + 0.0077792187, + 0.001205842, + 0.02439129, + -0.013665684, + 0.042347215, + -0.0028596357, + -0.0072807935, + -0.0058044456, + -0.008914871, + -0.011495326, + 0.008952727, + 0.0023359738, + 0.018498516, + 0.020366034, + -0.021943329, + -0.008208243, + 0.0033943388, + 0.019583695, + -0.0014006379, + -0.0057413536, + 0.005302866, + -0.012037915, + -0.018675173, + -0.018801356, + -0.012719307, + -0.043381922, + 0.003608851, + 0.010788698, + -0.028643677, + 0.022435443, + -0.005239774, + -0.020580545, + -0.008895944, + -0.0040284116, + 0.011829712, + -0.0040599573, + 0.023735136, + 0.0051829913, + -0.02801276, + -0.0150284665, + 0.011047374, + -0.0146499155, + -0.01515465, + 0.010832862, + 0.0036624789, + -0.012700379, + -0.0034038026, + 0.0110978475, + 0.006801296, + 0.012479558, + -0.011690911, + -0.009173548, + 0.0035205225, + 0.017716177, + -0.017955925, + 0.0074637597, + -0.008580484, + 0.025728837, + -0.0068265325, + -0.021741435, + 0.0051672184, + -0.011123084, + -0.015255597, + -0.009564717, + -0.025817165, + 0.012252428, + 0.004848605, + -0.008119915, + 0.0035899235, + 0.0107950065, + -0.012933819, + -0.0073817405, + -0.009104147, + 0.047066484, + 0.0040820395, + 0.012334446, + 0.015533201, + 0.026347136, + 0.0041640587, + -0.011608891, + 0.010353364, + 0.026220951, + -0.0010496898, + 0.0015701972, + -0.0071735377, + 0.05130625, + 0.021590013, + -0.009741374, + -0.005186146, + -0.014952756, + -0.02215784, + -0.013766631, + 0.0145994425, + -0.00087382144, + -0.015419636, + -0.0034101119, + -0.027861338, + -0.010277654, + -0.027810866, + -0.01300953, + 0.010776079, + -0.0031198894, + -0.016353395, + -0.013678302, + -0.021993801, + 0.027987523, + 0.02099695, + 0.00009715151, + -0.005785518, + 0.010050524, + -0.025211483, + 0.018183056, + -0.023104217, + 0.022485917, + -0.013375462, + 0.008447992, + 0.011791857, + -0.018473279, + 0.010599422, + -0.00042271506, + -0.0283156, + -0.04555228, + 0.009804466, + -0.009198785, + 0.012391229, + -0.0063217985, + -0.018612081, + 0.010750842, + 0.009110456, + -0.015444873, + -0.021791907, + 0.010536331, + -0.0060284217, + -0.0019022177, + 0.021943329, + -0.0140947085, + -0.0032050635, + 0.019041106, + -0.016820274, + -0.00033596382, + -0.0263219, + -0.012795017, + 0.016037935, + 0.025640508, + 0.000056092555, + -0.021918092, + 0.000246058, + -0.015356544, + -0.017905453, + 0.0051262085, + -0.005555233, + 0.0014960644, + 0.03591185, + 0.025186246, + -0.003962165, + 0.0054448224, + -0.02677616, + -0.009501625, + -0.021451212, + -0.021261936, + -0.016227212, + -0.027659444, + 0.00777291, + 0.016832892, + -0.0067318953, + -0.019861298, + 0.00078825315, + 0.0122335, + -0.0035741504, + -0.018498516, + 0.011413307, + 0.015659384, + 0.016668854, + -0.0054826774, + -0.0046277833, + 0.02161525, + -0.0016009544, + 0.005952711, + -0.0057508177, + 0.003839136, + 0.0020394425, + -0.01261836, + 0.021123135, + 0.012056843, + 0.0065741655, + -0.019369183, + 0.009135692, + 0.008416446, + 0.0052366196, + 0.012403848, + -0.008485847, + 0.010990592, + -0.008365973, + 0.012933819, + 0.008372282, + 0.0073438855, + 0.007671963, + -0.008290263, + -0.01823353, + -0.0128518, + 0.0014605751, + -0.011356524, + -0.00039294362, + 0.020731965, + 0.00021451213, + -0.022675192, + -0.0139937615, + -0.01323666, + -0.025198866, + -0.016176738, + 0.0065741655, + 0.001552847, + -0.0047918223, + 0.011571036, + 0.0023817155, + 0.011854949, + -0.0071987743, + 0.002176667, + -0.0137161575, + 0.00022614466, + -0.027533261, + -0.01769094, + 0.002523672, + -0.02670045, + -0.022637337, + -0.024782458, + 0.00004091109, + -0.0012839182, + -0.004324943, + -0.028567966, + 0.027205184, + 0.010372292, + -0.0108707175, + 0.0072303205, + -0.043104317, + -0.015091559, + 0.009571026, + -0.005063117, + -0.008719287, + -0.016290303, + 0.010687751, + 0.0033943388, + -0.0044353534, + -0.0057665906, + 0.010151471, + 0.015836041, + 0.0056246337, + 0.04063112, + 0.22591911, + -0.0003475964, + -0.00011977584, + 0.039217863, + 0.016984312, + 0.021564778, + 0.0144732585, + 0.017034786, + 0.00296216, + 0.015205123, + -0.0037634259, + -0.0050315713, + -0.013438554, + 0.014372312, + 0.00046372472, + -0.035129514, + -0.030334538, + -0.00861834, + -0.0063186437, + 0.007501615, + -0.019608932, + -0.026044294, + -0.0071419915, + -0.008990581, + 0.0029590053, + 0.006555238, + -0.01815782, + 0.014283983, + 0.024214633, + -0.0010796584, + -0.0018848676, + -0.035482828, + 0.010731915, + -0.003416421, + -0.007015808, + -0.0043407157, + 0.005501605, + -0.020883385, + 0.025602652, + 0.02685187, + 0.00040043576, + -0.0035615321, + -0.024467, + 0.0043407157, + -0.013653065, + 0.017148351, + -0.0059211655, + -0.00569088, + 0.008119915, + 0.008397519, + -0.024000121, + -0.021400739, + 0.009375442, + 0.047344085, + -0.0052271555, + 0.010927499, + 0.015760332, + -0.0021514304, + 0.017160969, + -0.0044195806, + -0.027937049, + 0.037880316, + -0.020921241, + 0.028138943, + -0.0010110461, + -0.002069411, + -0.015268216, + 0.0010930655, + 0.00853632, + -0.015596293, + 0.01538178, + 0.010012669, + -0.0012878614, + -0.007009499, + -0.0059747933, + -0.014990612, + 0.031142112, + 0.00626817, + 0.030914983, + 0.013690921, + -0.02393703, + 0.03000646, + -0.022183077, + -0.0011695642, + 0.0112745045, + -0.04010115, + 0.012119935, + -0.024517473, + 0.013539501, + 0.0020993797, + 0.011123084, + 0.0071672285, + 0.00037657918, + -0.0039747832, + 0.01984868, + 0.018208293, + 0.0139180515, + 0.027028527, + -0.028643677, + 0.0072240112, + -0.037350345, + -0.029224122, + 0.017905453, + 0.0051293634, + -0.012530032, + 0.008719287, + 0.017148351, + 0.0015694086, + 0.021325028, + -0.008977963, + 0.025754072, + -0.012637287, + 0.0030015924, + 0.000056536166, + 0.016719326, + 0.0001789244, + -0.0056057065, + -0.025060063, + -0.003940083, + 0.0076277987, + -0.020908622, + 0.0043438706, + -0.01515465, + 0.010788698, + 0.014940138, + -0.023280874, + -0.018637318, + 0.0103092, + 0.0010347056, + -0.048429266, + 0.0006498455, + 0.005318639, + 0.039646886, + -0.0034511215, + -0.0142966015, + 0.03437241, + 0.01577295, + -0.0335396, + -0.0112492675, + 0.002411684, + -0.00091246516, + -0.025640508, + -0.0041262037, + -0.016984312, + -0.0012665679, + -0.010094688, + 0.0064732186, + 0.00037993092, + -0.029526962, + -0.017981162, + -0.019949628, + 0.0011963783, + -0.017943308, + -0.011583654, + 0.020366034, + -0.02099695, + -0.019823443, + -0.012586814, + 0.008813924, + 0.029754093, + -0.010176707, + 0.019672023, + 0.022321878, + 0.0039116917, + -0.019571077, + 0.013564737, + -0.16050553, + 0.027280895, + 0.011123084, + 0.005318639, + -0.012479558, + -0.022826614, + 0.006091513, + 0.006485837, + -0.013678302, + 0.024050593, + 0.025261957, + 0.0083849, + -0.016984312, + 0.000029845378, + -0.024277724, + -0.0014053698, + 0.0008194047, + -0.0069211703, + 0.018119965, + 0.013337607, + 0.013148331, + -0.014940138, + 0.015558437, + 0.0014755594, + -0.0068265325, + -0.01007576, + -0.011766621, + 0.030284064, + -0.001716097, + -0.0315459, + -0.0073880497, + 0.0019053724, + 0.0069653345, + 0.0048139044, + 0.014586824, + 0.001315464, + -0.0017350245, + 0.0075647067, + -0.0075647067, + 0.0049337787, + 0.0108959535, + 0.0024369208, + 0.017564757, + 0.013072621, + -0.02730613, + 0.014586824, + 0.02977933, + 0.028870808, + -0.009501625, + -0.012391229, + -0.019104198, + -0.021905473, + -0.006031576, + -0.013653065, + 0.03533141, + 0.02307898, + 0.0048517594, + 0.012176718, + -0.00013919629, + -0.0055836244, + -0.03061214, + -0.009981123, + 0.004608856, + 0.0053281025, + 0.019596312, + -0.009110456, + 0.008574176, + 0.0052839383, + -0.02376037, + 0.012662524, + -0.013337607, + -0.03147019, + -0.013123094, + -0.0034416576, + -0.003501595, + 0.008340736, + -0.017804505, + -0.00015043451, + -0.0049653244, + -0.021211464, + 0.0020189376, + 0.037754133, + -0.031899214, + -0.024681512, + -0.017022168, + 0.020075811, + -0.0057508177, + 0.006504765, + -0.008668813, + -0.009501625, + 0.008725596, + -0.043432396, + -0.0038265176, + -0.024530092, + 0.02116099, + 0.020340797, + 0.017589994, + -0.001494487, + -0.0027192566, + -0.009217712, + 0.005041035, + -0.007671963, + -0.012479558, + 0.0028517493, + 0.036189456, + 0.0139180515, + 0.0036214693, + 0.02715471, + 0.0315459, + 0.022359734, + -0.00892749, + 0.015987461, + 0.012946437, + 0.013123094, + 0.0027933894, + -0.009343895, + 0.018170439, + -0.015444873, + -0.0029369232, + 0.005362803, + 0.048429266, + 0.0051293634, + -0.018448042, + 0.012454322, + 0.00031723347, + 0.0013541077, + -0.094839595, + -0.010649896, + 0.023848701, + 0.01253634, + 0.0032003315, + 0.0055646966, + -0.0070725908, + 0.03447336, + 0.019924391, + 0.018965395, + -0.0041356673, + -0.013539501, + 0.0060820496, + -0.026574265, + 0.010712988, + 0.0063186437, + 0.01115463, + -0.020302942, + -0.032656316, + 0.016706709, + -0.0027192566, + -0.006416436, + -0.013627829, + -0.008826543, + 0.0021482757, + -0.016492197, + -0.04209485, + 0.026498556, + 0.004918006, + 0.013362844, + 0.028694151, + 0.0020410197, + -0.008088369, + -0.0077035087, + -0.0021088433, + -0.0151041765, + 0.0100631425, + -0.008119915, + 0.01947013, + -0.019419655, + -0.0011601005, + -0.02339444, + 0.0017949617, + -0.041943427, + 0.011564727, + 0.00072042947, + -0.01731239, + 0.015583674, + -0.009911722, + -0.000672322, + -0.005375421, + 0.0108454805, + -0.0056593344, + 0.00010163695, + 0.025653126, + -0.01885183, + 0.014258747, + 0.019495366, + -0.046057016, + 0.007993731, + 0.0044385083, + 0.0057034986, + -0.00003728824, + 0.029097939, + -0.005457441, + -0.005653025, + -0.024668893, + -0.005533151, + 0.0073880497, + -0.03384244, + -0.018044256, + 0.033135813, + 0.0011246114, + 0.023684662, + -0.017791888, + -0.006201924, + -0.04461852, + 0.00077129726, + 0.020933859, + -0.02276352, + -0.01130605, + -0.013766631, + 0.007892784, + -0.026372373, + 0.0033375563, + 0.019747734, + 0.007507924, + 0.009817084, + 0.009552099, + 0.00031683914, + 0.018031636, + 0.023899173, + -0.0145742055, + -0.024517473, + -0.007394359, + 0.012012679, + -0.025817165, + 0.004918006, + 0.008132533, + -0.018183056, + -0.022713048, + -0.023142071, + -0.043028608, + 0.01916729, + -0.010914882, + -0.02292756, + 0.008403827, + -0.0144732585, + -0.0050063343, + -0.0140694715, + -0.021842381, + 0.023747753, + 0.0058233733, + 0.026599502, + -0.0030331383, + -0.013564737, + -0.0107445335, + 0.009741374, + -0.0136404475, + -0.0018028482, + 0.009028437, + -0.00016206707, + -0.010731915, + 0.002053638, + 0.011779239, + -0.0017208288, + -0.031066403, + 0.0036403968, + -0.006230315, + 0.010933809, + -0.03793079, + -0.024101067, + 0.006107286, + -0.025325049, + 0.0063501894, + 0.05070057, + -0.021602632, + -0.024214633, + -0.009280804, + 0.007861238, + 0.020782439, + -0.02617048, + -0.034448124, + -0.044139024, + 0.0016577371, + -0.02876986, + 0.0068454603, + 0.012359683, + 0.0009960618, + -0.0006502399, + 0.0073249578, + 0.0064511364, + 0.008365973, + 0.021665724, + -0.0065678563, + -0.008763451, + 0.0039810925, + -0.034220994, + -0.0022287178, + -0.0009810774, + 0.018599462, + -0.005116745, + 0.022410206, + -0.018763501, + 0.0056246337, + 0.0034668944, + 0.026372373, + -0.0043123243, + 0.017943308, + 0.019192526, + -0.0027097927, + -0.04146393, + 0.004533146, + -0.009047364, + 0.038687892, + -0.00041443427, + 0.024744604, + 0.00400002, + 0.014725626, + -0.011091539, + -0.013665684, + 0.030485958, + -0.0018343941, + 0.02407583, + -0.020605782, + 0.024113687, + 0.021287173, + 0.010176707, + -0.023142071, + 0.0015047394, + 0.0017854979, + 0.017438574, + -0.031949688, + 0.0024668893, + 0.013564737, + 0.010555258, + -0.009716137, + 0.004924315, + 0.008656195, + -0.0105931135, + 0.0030788798, + 0.06647352, + -0.011665674, + 0.0014881778, + -0.029552199, + -0.035028566, + -0.02685187, + 0.009451152, + -0.0068517695, + -0.0145742055, + 0.0058454555, + 0.0077981465, + 0.007041045, + -0.0017870752, + -0.0038896094, + 0.021968564, + -0.0077666007, + 0.017968545, + -0.01870041, + -0.011634128, + -0.004290242, + 0.032959156, + -0.010271345, + 0.008277644, + 0.0015938566, + -0.0071356827, + 0.002107266, + 0.0074448325, + 0.01776665, + -0.01130605, + 0.0016261912, + 0.011318669, + 0.011690911, + -0.0019274545, + -0.008492156, + 0.0016766646, + -0.020681491, + -0.0071735377, + 0.00977292, + 0.018776119, + 0.013602592, + 0.0424734, + 0.0062429337, + -0.041337747, + 0.015369163, + -0.00036534097, + 0.016630998, + 0.007930639, + 0.031646848, + 0.015167269, + -0.011287123, + -0.00024802962, + -0.0009692478, + 0.026902344, + 0.0014361271, + -0.03131877, + -0.021325028, + -0.021375502, + 0.026448082, + -0.031268295, + -0.0062366244, + -0.0066120205, + 0.017034786, + 0.022599483, + -0.0034290394, + -0.015457491, + -0.018107347, + 0.012984293, + -0.01770356, + -0.0056120157, + -0.006763441, + 0.006388045, + -0.0030709933, + -0.024668893, + 0.00043967098, + 0.004362798, + 0.0038801457, + -0.009457461, + -0.0043344065, + 0.001630923, + 0.011148321, + 0.002599382, + 0.033438653, + -0.008403827, + -0.006580475, + 0.0074195955, + 0.01123665, + -0.019142052, + -0.013135713, + -0.02147645 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.00089398306, + -0.00462804, + 0.0042670527, + -0.0047607105, + -0.017598893, + 0.003273567, + -0.024374345, + -0.025522098, + 0.0054086363, + -0.024312638, + -0.018931769, + 0.029347945, + -0.00042616535, + -0.018746648, + -0.011675002, + -0.019425428, + 0.024892684, + -0.012687, + 0.013587926, + -0.008262594, + -0.0074048643, + 0.017352065, + -0.029372627, + 0.011428174, + -0.007238255, + -0.007355498, + 0.02142474, + -0.012582098, + 0.03068082, + -0.008873495, + 0.008237911, + -0.024053467, + -0.0022800812, + -0.018117234, + -0.01122454, + -0.00754062, + 0.004739113, + -0.0063033905, + 0.00008147279, + -0.012150148, + 0.02151113, + -0.0002720902, + 0.001740143, + -0.01875899, + 0.0031362686, + -0.0052574533, + 0.007546791, + 0.010224883, + -0.0011215283, + 0.020894058, + -0.0047175153, + -0.0028323606, + -0.008151521, + -0.032852914, + 0.011496051, + -0.0066952314, + -0.007694888, + 0.033124425, + -0.022732932, + -0.013921144, + 0.0149825085, + 0.0007686403, + -0.00968186, + -0.0025608488, + -0.012384635, + -0.0065162806, + 0.017870406, + 0.0114405155, + -0.005812818, + 0.024756929, + 0.00745423, + -0.00065023964, + 0.013180658, + -0.0019345208, + -0.0083798375, + -0.023029128, + -0.029965017, + 0.003248884, + 0.016586896, + -0.003949261, + 0.010718541, + -0.0034093228, + -0.03127321, + 0.02655878, + 0.024682881, + 0.0031779208, + -0.044676013, + 0.0041528945, + 0.0017771674, + -0.0043842965, + 0.01165649, + 0.03314911, + 0.021992447, + -0.01636475, + -0.0024096663, + 0.0055845017, + 0.020474449, + 0.026237901, + -0.0015565641, + -0.023868345, + 0.01336578, + 0.0058745258, + -0.029718189, + 0.012322928, + -0.03616042, + -0.023596834, + 0.009064788, + 0.006744597, + 0.010132322, + -0.024300296, + -0.021807324, + 0.031075746, + 0.035987638, + -0.03675281, + 0.016846066, + 0.0029403481, + 0.012421659, + -0.009848469, + -0.02673156, + -0.0016167287, + 0.016154945, + 0.032877598, + -0.0011654948, + -0.014143291, + 0.024868002, + 0.0033445302, + -0.011347954, + -0.032359257, + 0.0068001337, + -0.0042824796, + -0.0018357892, + 0.0005187262, + -0.011415832, + 0.016006848, + -0.008972227, + 0.015044216, + -0.02853341, + 0.03872744, + -0.02133835, + -0.033469986, + 0.012150148, + 0.020338694, + -0.02132601, + 0.0056184405, + -0.00847857, + 0.020104205, + 0.012477196, + 0.011767563, + 0.0057233428, + -0.023436395, + 0.028434679, + -0.028829604, + 0.03956666, + 0.009496738, + 0.017512504, + 0.017450796, + 0.0057480256, + -0.01508124, + -0.02981692, + 0.013847096, + -0.00797257, + 0.011162832, + 0.024386685, + -0.0065779877, + 0.014686313, + 0.02365854, + 0.0115947835, + 0.0005488084, + -0.0043380163, + -0.0047144303, + -0.010132322, + 0.050698638, + -0.018536843, + -0.0021767216, + -0.0032612255, + 0.023510443, + 0.015007191, + 0.011551588, + -0.024374345, + -0.010471712, + -0.0039184075, + 0.0011222997, + 0.03386491, + 0.0052481974, + 0.017672943, + 0.013723682, + 0.012847439, + -0.01756187, + -0.0005977885, + -0.012020563, + 0.015179971, + 0.034852225, + 0.01062598, + -0.004362699, + -0.68993586, + -0.02211586, + 0.007546791, + -0.001740143, + 0.013415146, + 0.03386491, + 0.029347945, + 0.0034648594, + -0.016636262, + 0.0011747509, + -0.00736784, + 0.000043002205, + 0.0029372629, + -0.014291388, + 0.007787449, + -0.029347945, + -0.014994849, + 0.009817616, + -0.017500162, + 0.032532036, + -0.0117613925, + -0.019770987, + -0.021498788, + -0.0033291036, + 0.026015757, + 0.025299953, + 0.006991426, + 0.0030745612, + -0.0033167622, + 0.0023587577, + -0.012822757, + -0.0028863542, + -0.0040911874, + -0.008083643, + 0.036283836, + -0.013205341, + -0.01122454, + 0.031075746, + 0.012032905, + 0.031421307, + 0.013995193, + 0.014427143, + -0.00021192567, + -0.026805608, + -0.0029681164, + -0.011113467, + -0.0043318453, + -0.015636604, + 0.016673286, + 0.0029804579, + 0.008614325, + 0.0013591012, + 0.009885494, + 0.02571956, + 0.0050846734, + -0.006068903, + 0.025423367, + 0.015883433, + -0.026435364, + 0.00608433, + -0.0023834407, + 0.011434345, + -0.0010189401, + -0.021548154, + 0.0048039057, + 0.0053839535, + -0.0068803527, + 0.010897492, + 0.009299275, + 0.0042115166, + -0.016006848, + 0.003940005, + -0.010070615, + 0.0067816214, + 0.000030082261, + -0.005371612, + 0.041442554, + 0.012051417, + -0.00924991, + 0.019561183, + 0.018438112, + 0.007392523, + -0.020412741, + -0.008336643, + 0.020671912, + -0.025546782, + -0.033198476, + -0.013958169, + 0.017500162, + -0.010564273, + 0.016241336, + 0.029273896, + -0.021005131, + -0.0051309536, + -0.011094955, + 0.0064484025, + -0.0091511775, + 0.012421659, + 0.0077689365, + -0.0028863542, + 0.0046372963, + -0.030039065, + -0.010317444, + 0.009928688, + 0.019598207, + 0.01884538, + -0.021412399, + 0.002713574, + -0.003427835, + -0.023485761, + 0.028928336, + 0.011045589, + -0.013526218, + 0.03403769, + -0.012921488, + -0.025324635, + 0.015871093, + 0.014710996, + 0.022918055, + -0.04507094, + 0.016031532, + 0.006929719, + 0.00012987437, + 0.0114405155, + -0.0063620126, + -0.022560153, + 0.0029881713, + 0.008077472, + -0.015463824, + -0.029520726, + 0.02742268, + 0.0027922508, + 0.019178597, + 0.007016109, + 0.008645179, + -0.008435374, + 0.016648604, + 0.00063095614, + 0.011687344, + -0.017278016, + -0.017919771, + 0.014945484, + -0.018129576, + 0.008330472, + 0.0024852576, + -0.0066705486, + -0.03401301, + 0.0024405199, + -0.00062671374, + 0.0061151837, + -0.019252647, + -0.008805618, + -0.020585522, + -0.0044922843, + -0.011002394, + 0.0048902957, + -0.0226342, + -0.009712714, + -0.0039369194, + 0.006090501, + 0.021622203, + 0.014661631, + -0.011804587, + 0.0000605984, + -0.0112862475, + -0.011064101, + -0.0070901574, + 0.034062374, + -0.029545408, + -0.014587582, + 0.007923204, + -0.0140692415, + -0.013575585, + -0.008342814, + -0.019203281, + 0.00086235814, + -0.016253676, + -0.024473077, + -0.008540276, + -0.0028385313, + 0.009700372, + -0.005896123, + 0.0033815545, + -0.010348298, + 0.032186475, + 0.002978915, + 0.02571956, + 0.027644826, + -0.013118951, + 0.033815548, + -0.023238933, + -0.013069585, + -0.006615012, + 0.019647572, + -0.0031239272, + 0.00030390796, + -0.008885837, + -0.00033244755, + -0.009527592, + 0.014686313, + 0.01875899, + 0.012551244, + 0.022239275, + -0.020462109, + 0.027274583, + -0.005704831, + 0.008645179, + -0.019166257, + 0.017105237, + 0.034383252, + 0.0016367835, + -0.009033934, + -0.0048810397, + 0.004985942, + 0.007978741, + -0.0023464162, + 0.006892694, + 0.015278703, + 0.0030637626, + -0.019351378, + -0.02621322, + 0.031248527, + 0.03512374, + -0.040010948, + -0.019474793, + -0.010440858, + 0.017364407, + 0.013081927, + 0.0011678088, + -0.017055871, + -0.034210473, + 0.010082956, + 0.0016738079, + 0.0014192656, + -0.0034586887, + -0.00031875627, + 0.013674316, + -0.015315727, + 0.01901816, + -0.0056523797, + 0.015488507, + 0.02870619, + 0.020980448, + -0.018820696, + 0.017290358, + -0.011773734, + 0.022128202, + 0.011002394, + -0.009237568, + 0.022955079, + -0.013242366, + 0.0046403813, + -0.017031187, + -0.005220429, + -0.000036108355, + -0.022239275, + 0.04635445, + -0.0031779208, + 0.012174831, + 0.012785732, + 0.011884807, + 0.0042115166, + -0.00123183, + -0.008151521, + 0.000019440178, + 0.011162832, + -0.019203281, + -0.0034586887, + -0.00033726843, + -0.012748708, + -0.00030545064, + -0.016130263, + -0.0017864235, + -0.030088432, + 0.009077129, + 0.0024220077, + 0.010730882, + -0.003292079, + -0.000076218035, + 0.025065465, + 0.02168391, + -0.0152910445, + 0.017389089, + 0.02981692, + -0.019931426, + -0.027447363, + -0.037394565, + 0.0059855985, + -0.005621526, + 0.004430577, + 0.035025008, + 0.023029128, + 0.0181666, + 0.012896805, + 0.0008515594, + -0.003616042, + 0.019067526, + 0.005991769, + 0.018907087, + -0.014809729, + -0.005828245, + -0.015562556, + -0.032680135, + -0.0056431238, + 0.030433992, + 0.026830291, + 0.029347945, + 0.009811445, + 0.0042886506, + -0.0020286243, + -0.022498446, + -0.020474449, + -0.009749738, + -0.007386352, + -0.011347954, + -0.0018990391, + 0.008768593, + -0.009367153, + 0.024682881, + 0.016673286, + -0.0021921482, + -0.009811445, + 0.0037425417, + -0.004985942, + 0.07557898, + -0.0059269764, + 0.004695918, + 0.0019545755, + 0.007256767, + -0.013032561, + -0.024374345, + -0.02210352, + 0.0014084668, + -0.0022847091, + 0.0007239026, + -0.021943081, + -0.000053849173, + -0.010348298, + 0.0033105914, + -0.0017077468, + 0.0032828231, + -0.014032218, + 0.016006848, + -0.017722309, + -0.015871093, + -0.0027475131, + 0.001075248, + -0.017537186, + -0.0079170335, + -0.0056091845, + 0.017598893, + 0.005741855, + 0.020165913, + -0.020116547, + 0.0181666, + 0.012582098, + -0.015735336, + -0.016920114, + 0.006584158, + -0.013513877, + -0.0025253673, + -0.0037302002, + 0.011212198, + -0.005158722, + 0.015611921, + 0.008015766, + 0.0018728136, + -0.0065162806, + 0.0041004433, + -0.0054456606, + 0.00009458557, + 0.0037147736, + -0.013526218, + -0.02125196, + 0.02544805, + -0.0022245445, + -0.012687, + 0.0042207725, + -0.0026318121, + 0.014636948, + -0.028113801, + 0.0029079518, + -0.02107918, + -0.006584158, + -0.0011770648, + -0.0140692415, + -0.0008330472, + -0.00090709585, + -0.031766865, + -0.010212542, + 0.003119299, + -0.016303042, + -0.0071580354, + 0.00762701, + 0.0003278195, + -0.019573525, + -0.017080553, + 0.025670195, + 0.03435857, + 0.014254363, + 0.0018234478, + -0.017450796, + -0.001894411, + 0.023214249, + -0.003986285, + -0.007083987, + 0.0116071245, + -0.003350701, + -0.0062262565, + 0.006522451, + 0.013180658, + -0.020585522, + -0.012909146, + 0.014994849, + 0.02425093, + -0.0010073701, + 0.01833938, + -0.0068433285, + -0.016130263, + -0.0021042156, + 0.0016228994, + 0.00805279, + -0.01695714, + -0.0067260847, + 0.017981479, + -0.020634888, + -0.016611578, + -0.030656137, + 0.02347342, + -0.009120325, + 0.020499133, + -0.006121354, + -0.01669797, + 0.006436061, + -0.009502909, + -0.0065779877, + 0.0041775773, + -0.018154258, + 0.0032334574, + 0.012699342, + -0.01620431, + 0.024300296, + -0.0026626657, + -0.043096308, + 0.009428861, + -0.032063063, + 0.032186475, + 0.027521411, + 0.010150835, + 0.011422003, + -0.019511817, + -0.0061336956, + -0.015031874, + 0.011946514, + 0.009052446, + 0.018104892, + -0.010983882, + -0.010558102, + -0.009897835, + -0.015179971, + 0.01585875, + 0.020165913, + 0.006349671, + -0.010595126, + -0.023818979, + 0.024954392, + 0.02707712, + -0.011335613, + -0.02038806, + -0.014155632, + 0.01482207, + 0.02262186, + -0.027768241, + 0.017068211, + -0.0026333549, + -0.0028431593, + -0.02836063, + 0.0028693848, + 0.02312786, + 0.0020656486, + -0.025818292, + -0.0054610875, + 0.015229337, + 0.024781613, + 0.028409995, + -0.005297563, + 0.017327381, + -0.0096139815, + -0.008453887, + 0.009965713, + 0.0054641725, + 0.01568597, + -0.018438112, + 0.02406581, + 0.027052436, + -0.0038998951, + 0.003214945, + 0.013871779, + -0.0049304054, + 0.021980105, + 0.00013459883, + -0.0038998951, + -0.0005333816, + -0.036826856, + -0.0030622198, + 0.029027067, + -0.012736366, + 0.004146724, + -0.0006857213, + -0.003099244, + -0.0060966713, + -0.0044151503, + 0.005192661, + 0.020807669, + 0.015537873, + -0.019425428, + 0.011730539, + 0.0018758989, + -0.002883269, + -0.012970854, + -0.032013696, + -0.0009680317, + 0.015155288, + -0.0026009586, + 0.03616042, + 0.023152541, + 0.0073740105, + -0.017376747, + -0.0041004433, + 0.02947136, + 0.01490846, + -0.02947136, + 0.022350349, + -0.0045046257, + -0.019758645, + -0.016611578, + -0.020104205, + -0.039640706, + 0.002232258, + 0.005424063, + -0.039023634, + 0.017450796, + -0.01585875, + -0.016241336, + -0.001154696, + 0.01473568, + 0.015389776, + -0.029249214, + 0.022041813, + 0.00642989, + -0.026978388, + -0.021646887, + 0.01800616, + -0.009589299, + -0.0064052073, + 0.016784359, + 0.021042155, + -0.014957826, + -0.0016275274, + -0.007009938, + 0.0102187125, + 0.015722996, + -0.030063748, + -0.0012248879, + 0.012008221, + 0.015500849, + -0.021992447, + 0.0052667097, + 0.0010305103, + 0.006152208, + -0.014538216, + -0.015389776, + 0.0074048643, + -0.013057244, + -0.02742268, + 0.019499475, + -0.02665751, + -0.0020671913, + 0.00874391, + -0.026435364, + 0.008768593, + -0.019511817, + -0.007738083, + -0.004695918, + -0.018672599, + 0.033889595, + 0.014933143, + 0.030113114, + 0.007324645, + -0.011181345, + -0.0059424033, + -0.009996567, + 0.011662661, + 0.028558092, + -0.0115701, + -0.009996567, + -0.015871093, + 0.035000324, + 0.0076516927, + 0.0058004768, + 0.0023541297, + -0.009552275, + -0.026978388, + -0.0007929375, + 0.020128889, + -0.011434345, + -0.024127515, + 0.018462794, + -0.030532723, + -0.0009965713, + -0.029940333, + 0.003582103, + 0.015895775, + -0.0019283501, + -0.019339036, + 0.003788822, + -0.01208844, + 0.0052142586, + 0.0060874154, + -0.009620152, + 0.018277673, + 0.010261907, + -0.024090491, + 0.012316757, + -0.009262251, + 0.036925588, + 0.00950908, + 0.011366466, + 0.020881716, + -0.01824065, + 0.025250586, + -0.00079910824, + -0.01851216, + -0.009157348, + 0.022214592, + -0.007694888, + 0.009453543, + -0.01671031, + 0.0050599906, + 0.01748782, + 0.024756929, + -0.005766538, + 0.00086081546, + 0.012699342, + -0.01669797, + -0.0066890605, + 0.021906056, + -0.013242366, + -0.0043441867, + -0.0088303005, + -0.012736366, + 0.002724373, + 0.0010567359, + -0.018129576, + -0.020857034, + 0.010878979, + -0.0035018837, + -0.02099279, + -0.007164206, + -0.020104205, + -0.01208227, + 0.012612952, + 0.008811789, + 0.0071271816, + 0.006460744, + 0.025818292, + 0.0006012595, + 0.01620431, + -0.029101117, + 0.0069790846, + 0.0077689365, + 0.00668289, + -0.014254363, + -0.016340068, + 0.0008322759, + 0.010274249, + 0.025768926, + -0.03307506, + -0.017709967, + 0.0046897475, + -0.022523127, + 0.0034000669, + -0.0014570613, + 0.011977368, + 0.020215278, + -0.010033591, + -0.011773734, + 0.0033105914, + 0.004720601, + 0.0074665714, + -0.0019345208, + 0.010996223, + -0.0018990391, + -0.002030167, + 0.011675002, + 0.010866638, + -0.017426113, + -0.018919427, + 0.0076516927, + 0.014427143, + 0.033124425, + 0.019005818, + -0.022436738, + 0.033445302, + -0.014883777, + 0.004038736, + 0.017919771, + 0.02870619, + 0.0020224536, + -0.008552618, + -0.02579361, + -0.0069544017, + 0.013982852, + -0.0060781594, + -0.014488851, + 0.0028693848, + 0.0134521695, + -0.013378121, + -0.016858408, + -0.0030884454, + -0.024645856, + -0.017290358, + -0.002540794, + 0.009101812, + -0.025744244, + 0.013686657, + 0.010311273, + -0.0028092202, + -0.00552588, + -0.008669862, + 0.0013459884, + 0.005707916, + -0.0100644445, + -0.0028308178, + -0.0017771674, + -0.008034278, + 0.0014439485, + -0.023954736, + 0.003341445, + 0.017092895, + -0.0143654365, + -0.03751798, + 0.031001698, + -0.00951525, + -0.018549185, + 0.013094268, + -0.020375717, + -0.021622203, + 0.013822413, + -0.0063805245, + -0.0028431593, + -0.010342127, + 0.008435374, + 0.0015149118, + -0.005004454, + -0.02373259, + -0.001538052, + 0.028212532, + -0.006744597, + 0.03147067, + 0.22056621, + 0.002096502, + 0.0037672247, + 0.027101804, + -0.017635917, + 0.033445302, + 0.0062108296, + -0.010249566, + -0.010582785, + 0.012045246, + 0.009194373, + 0.01191566, + -0.028089117, + 0.0032427134, + 0.013217682, + -0.007941716, + -0.012847439, + -0.015957482, + -0.022066494, + -0.028508727, + -0.016451139, + 0.0014177229, + -0.0116071245, + 0.0025917024, + 0.012069928, + -0.000014125164, + 0.0037086029, + 0.025571464, + 0.012921488, + -0.0021366118, + -0.01627836, + -0.00951525, + 0.015821727, + -0.0067137433, + -0.011082613, + -0.003915322, + 0.00057966204, + 0.014957826, + 0.013513877, + 0.023325322, + 0.020597864, + 0.009274593, + 0.015303385, + -0.026805608, + -0.016080897, + 0.006127525, + -0.016870748, + -0.01740143, + 0.0030406222, + 0.0022091179, + -0.02014123, + -0.024287954, + 0.017413773, + 0.04823035, + -0.004223858, + 0.005390124, + 0.027101804, + 0.005760367, + 0.0074912542, + -0.004257797, + -0.022325665, + 0.008731569, + -0.005982513, + 0.011650319, + -0.0016738079, + 0.015266362, + -0.02184435, + 0.01422968, + 0.011958855, + -0.016056214, + 0.02270825, + -0.008935203, + 0.015204654, + -0.0021288984, + 0.0034741154, + -0.0031686649, + 0.0106815165, + -0.004334931, + 0.032063063, + 0.014316071, + -0.0026379828, + 0.008355155, + 0.003230372, + -0.0032365427, + -0.0062509393, + -0.021646887, + 0.0039523463, + 0.011545417, + 0.028311264, + 0.0016861493, + 0.010638322, + -0.005967086, + -0.010576614, + -0.027620142, + 0.008262594, + 0.025966391, + 0.0055752457, + 0.023596834, + 0.009632494, + 0.0021474105, + -0.028138483, + -0.020536156, + 0.010514907, + -0.0007084758, + -0.0067199143, + 0.014044559, + 0.0041960897, + 0.004763796, + 0.020696595, + -0.024399027, + 0.020351036, + -0.024584148, + 0.022300983, + -0.0072135716, + 0.026410682, + -0.0057788794, + 0.005056905, + -0.02433732, + -0.0034864568, + 0.0039523463, + -0.0045601623, + -0.001086818, + 0.00711484, + -0.008645179, + -0.015969824, + -0.021523472, + -0.031914964, + 0.010298932, + -0.0122118555, + -0.020684253, + 0.003264311, + -0.015661288, + 0.04475006, + -0.0021304411, + -0.008441545, + 0.016191969, + -0.0053345873, + -0.01182927, + 0.006007196, + -0.004140553, + 0.01646348, + 0.0009742024, + 0.005680148, + -0.009546104, + -0.013550902, + -0.009194373, + -0.0054209777, + -0.015994506, + -0.043392505, + -0.008170034, + -0.01988206, + -0.010786419, + -0.019598207, + -0.009725055, + 0.012002051, + -0.014994849, + -0.0363332, + 0.0019345208, + 0.0028909824, + 0.030878283, + -0.009737397, + 0.020276986, + 0.013230024, + -0.009996567, + -0.008725398, + -0.018462794, + -0.15560088, + 0.019388402, + 0.0050846734, + -0.007904693, + -0.009836128, + -0.011724368, + 0.018796014, + 0.015019532, + -0.019339036, + 0.03016248, + 0.027546095, + -0.016722651, + -0.03727115, + -0.012489538, + 0.012810415, + -0.00027131886, + -0.0021258132, + 0.023522785, + 0.0035759322, + 0.008355155, + 0.0049211495, + -0.028780239, + 0.020116547, + 0.0011153576, + -0.011366466, + 0.0029372629, + -0.0031810063, + 0.027792923, + -0.015105923, + -0.0181666, + -0.007670205, + -0.014513534, + 0.011428174, + 0.029841602, + -0.0037980783, + -0.00024200793, + -0.023251273, + 0.0045138816, + -0.017981479, + 0.019770987, + -0.015611921, + 0.009021593, + -0.000009364549, + 0.0047853934, + -0.010039762, + 0.031643454, + 0.015797043, + 0.012822757, + -0.0021798068, + -0.013007878, + 0.0061645494, + -0.015624263, + -0.0114528565, + -0.017179284, + 0.046329767, + 0.03240862, + 0.0058251596, + 0.021449422, + 0.011699685, + 0.019203281, + -0.016241336, + -0.0036407248, + 0.018388746, + 0.0021690081, + 0.015611921, + -0.024028784, + 0.018203624, + 0.006676719, + -0.029101117, + 0.015241679, + -0.0034926275, + -0.009033934, + -0.012921488, + -0.021967763, + 0.0016290701, + 0.0055752457, + -0.020659572, + 0.015130606, + -0.006608841, + -0.026879657, + -0.0013668145, + 0.045712695, + -0.0009680317, + -0.018438112, + -0.0076455222, + 0.012748708, + 0.017981479, + -0.008410691, + -0.013155975, + -0.005735684, + 0.00014520476, + -0.043738063, + 0.023325322, + -0.037246466, + 0.016549872, + 0.010872809, + -0.016944798, + -0.0011894063, + -0.0029125798, + -0.0042732237, + -0.0017092895, + -0.0031285551, + -0.024275612, + -0.0019036671, + 0.010126152, + 0.021474106, + 0.017956795, + 0.01954884, + 0.04114636, + 0.025090149, + -0.008935203, + 0.015229337, + 0.013353438, + 0.028039752, + -0.0030344515, + 0.0047761374, + 0.023461077, + -0.0091511775, + -0.0076455222, + 0.01464929, + 0.03914705, + -0.01996845, + 0.010440858, + 0.014513534, + 0.009990396, + -0.020770645, + -0.09379494, + -0.027373314, + 0.0034556033, + 0.0012865951, + 0.007448059, + 0.0217703, + -0.0054364046, + 0.0115947835, + -0.004732942, + 0.014994849, + -0.00685567, + -0.020869376, + -0.017919771, + -0.012785732, + 0.025040783, + 0.0033599571, + 0.024004102, + -0.011724368, + -0.03830783, + 0.010089127, + -0.020178255, + -0.00951525, + -0.021153228, + 0.006152208, + -0.0014161803, + -0.010601297, + -0.04050461, + 0.016636262, + 0.010891321, + 0.0065101096, + -0.0041436385, + 0.010039762, + 0.01594514, + -0.022584835, + -0.014081583, + -0.013834755, + -0.0140569005, + -0.013513877, + 0.011175174, + -0.03418579, + -0.0018033929, + 0.00008282263, + 0.004393553, + -0.027348632, + -0.018055527, + 0.00847857, + -0.0024405199, + 0.020795327, + 0.0017200882, + -0.00968186, + -0.019215623, + 0.017253334, + -0.0030822747, + 0.0034432618, + 0.030656137, + -0.024522442, + 0.02082001, + 0.005535136, + -0.031569403, + 0.011070272, + -0.0015071984, + 0.00924991, + 0.018487478, + 0.02312786, + -0.017500162, + -0.006590329, + -0.016599238, + 0.0123661235, + 0.019647572, + -0.029890968, + -0.009286934, + 0.010095298, + -0.020289328, + 0.004779223, + -0.010514907, + 0.00056539226, + -0.03050804, + -0.015525532, + 0.020894058, + -0.008151521, + -0.009219056, + -0.007898522, + 0.0029295494, + -0.035469297, + -0.018055527, + 0.0250161, + 0.0053438437, + -0.027546095, + -0.0046156985, + -0.005896123, + 0.0012326014, + 0.031692818, + 0.02347342, + -0.033198476, + -0.026706876, + 0.023559809, + 0.000008370244, + 0.017092895, + -0.015463824, + -0.011835441, + -0.00745423, + -0.018610891, + -0.032951646, + 0.0167967, + -0.009743567, + -0.029150482, + 0.0025809037, + -0.008774764, + 0.009398007, + -0.018833037, + -0.008620496, + 0.022288641, + -0.021461764, + 0.0019391488, + 0.0022384287, + -0.009638665, + -0.0344573, + 0.020931082, + -0.00084307464, + 0.007293791, + -0.00736784, + -0.0066890605, + -0.005655465, + 0.012785732, + -0.00823174, + -0.008768593, + -0.010582785, + 0.004507711, + 0.006254025, + 0.02880492, + -0.019215623, + -0.018018503, + 0.027447363, + -0.012909146, + 0.011175174, + 0.02579361, + -0.02056084, + -0.024756929, + 0.0017000334, + 0.01054576, + 0.008281106, + -0.02406581, + -0.00720123, + -0.0317175, + 0.009206714, + -0.009953371, + -0.010101469, + 0.001460918, + -0.023707906, + -0.0044213207, + 0.0022785384, + 0.017524846, + 0.0137483645, + 0.023868345, + -0.028730873, + -0.007318474, + -0.0062509393, + -0.03102638, + 0.0008723856, + 0.0013297902, + -0.006701402, + -0.015821727, + 0.02665751, + -0.0067569385, + 0.001011998, + -0.014846752, + 0.020696595, + -0.0037949928, + -0.009089471, + -0.0039585168, + -0.004276309, + -0.02511483, + -0.017759332, + 0.008348985, + 0.019055184, + 0.0051463805, + 0.021918397, + -0.015537873, + -0.0072197425, + -0.021634545, + -0.009410348, + 0.007269108, + 0.002695062, + -0.006349671, + -0.035000324, + -0.00094334886, + 0.03699964, + 0.019561183, + -0.013847096, + 0.0007624696, + -0.0021875203, + -0.00075398484, + -0.039048318, + 0.007170377, + -0.0018280759, + -0.0008176204, + -0.013958169, + -0.0046588937, + -0.006272537, + -0.008367497, + 0.004810076, + 0.060522422, + 0.009058617, + 0.0031424393, + -0.025398685, + -0.03418579, + -0.0041498095, + 0.015179971, + -0.001009684, + -0.0023063067, + -0.0126746595, + -0.023448735, + 0.019993134, + -0.022905713, + -0.006374354, + 0.020523814, + 0.003119299, + 0.00066836615, + -0.01721631, + -0.01285978, + -0.024300296, + 0.03857934, + -0.008207058, + 0.02700307, + -0.00968186, + 0.016117921, + 0.02887897, + 0.002729001, + 0.0126746595, + -0.010638322, + 0.010144664, + 0.0044953697, + 0.026929023, + 0.0006228571, + 0.0015642776, + -0.0017231735, + -0.036456615, + 0.000027286153, + 0.011644149, + 0.015871093, + -0.0060565616, + 0.044700697, + -0.0012611409, + -0.04072675, + 0.02766951, + -0.0075961566, + -0.0006085873, + 0.024090491, + -0.0053932094, + -0.013575585, + -0.008095984, + 0.0005711773, + 0.01173671, + 0.018055527, + 0.00565855, + -0.025262928, + -0.0045601623, + -0.020782985, + 0.0075035957, + -0.033692133, + -0.0209064, + 0.014081583, + 0.013180658, + 0.015216996, + 0.0062355124, + 0.0067877923, + -0.017500162, + 0.017858064, + -0.0023541297, + 0.006368183, + -0.0011153576, + 0.0039369194, + 0.014587582, + -0.042355824, + -0.013020219, + 0.0028724703, + 0.0005954745, + -0.018018503, + -0.021227278, + 0.008632838, + 0.02031401, + 0.0004061105, + 0.041417874, + -0.016253676, + -0.03203838, + 0.014303729, + -0.0027274583, + -0.018314697, + -0.019092208, + -0.01714226 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.013982197, + -0.018476475, + -0.005729884, + -0.023803027, + 0.0031706425, + 0.009507126, + -0.044174526, + -0.0043758387, + 0.01791309, + -0.02065319, + 0.010851568, + 0.010934795, + -0.016222933, + 0.019359965, + -0.024520062, + -0.0053873714, + 0.03178005, + -0.0010819557, + 0.010729928, + -0.022381758, + -0.045480553, + 0.0045486954, + -0.020665996, + 0.017695418, + -0.016619865, + 0.0010731529, + 0.015685158, + -0.015185793, + 0.026453499, + 0.010755536, + 0.02481456, + -0.012765798, + 0.017285684, + -0.037337076, + -0.040947862, + 0.017093621, + -0.0021639115, + 0.010064109, + -0.0013468429, + -0.020627582, + 0.008495593, + 0.0055666305, + -0.003665205, + -0.0038092525, + -0.007996229, + 0.013559658, + 0.013918176, + 0.010256172, + -0.008854112, + 0.010320193, + -0.0048271874, + 0.030858146, + -0.0041229557, + -0.0043150187, + 0.01831002, + -0.025621224, + -0.00086028286, + 0.01782346, + -0.020947687, + -0.016709493, + 0.012714581, + -0.0020694805, + 0.005134488, + -0.0097312, + -0.0075928965, + 0.010204955, + -0.0059027406, + -0.004638325, + -0.0038860778, + 0.0057522915, + 0.02932164, + 0.029372858, + 0.00069662905, + 0.0151473805, + 0.0032106556, + 0.013726113, + -0.0042541986, + -0.0020390705, + -0.0048303884, + -0.017503355, + 0.0042894105, + -0.012977066, + -0.026171805, + -0.0008050647, + 0.027196143, + 0.011869502, + -0.002901754, + 0.0011355734, + -0.031088622, + -0.012035958, + -0.005256128, + 0.029424075, + 0.032471478, + -0.0012075971, + -0.013598071, + 0.016427802, + 0.022368954, + 0.020000177, + 0.005729884, + -0.029065557, + 0.0048976103, + 0.014545582, + -0.03836141, + 0.0026472704, + -0.036824908, + -0.015531506, + 0.015557115, + -0.012573734, + 0.027477834, + -0.03211296, + -0.020269064, + 0.0089885555, + 0.011082044, + -0.020461127, + -0.0070487177, + -0.020025784, + 0.017157642, + -0.0084315725, + -0.017861873, + -0.015697962, + 0.014558387, + 0.037337076, + 0.016824732, + -0.023226837, + 0.027247358, + 0.0114149535, + -0.01256093, + -0.013329183, + 0.0060243807, + -0.0002958973, + 0.011037229, + 0.007829774, + 0.01009612, + 0.017554572, + -0.0070295115, + 0.010179347, + -0.009058978, + 0.03157518, + 0.007855383, + -0.029961852, + 0.01523701, + 0.02834852, + -0.0064757294, + -0.0077337427, + -0.004628722, + 0.030550845, + 0.02025626, + -0.016466213, + 0.0021383031, + 0.00906538, + 0.0049616313, + -0.024507258, + 0.019897742, + 0.013546854, + 0.022983557, + 0.0033098883, + -0.011645429, + -0.0093662795, + -0.020115415, + -0.016094891, + -0.0067926333, + 0.0061332164, + 0.028655821, + 0.002460009, + 0.030730104, + 0.019718483, + 0.009711993, + 0.019001449, + 0.0012700176, + 0.0035115546, + -0.001566115, + 0.035877395, + -0.010569875, + 0.014929709, + 0.0047215526, + 0.010544267, + 0.012048761, + 0.003950099, + -0.014251086, + 0.0031978514, + -0.019001449, + -0.0023671784, + 0.013406008, + 0.005432186, + 0.0010955603, + -0.009756808, + 0.010441833, + -0.020858059, + 0.012208814, + -0.013149924, + 0.014609603, + 0.018348433, + 0.0051024775, + -0.01654304, + -0.6912225, + -0.040282045, + 0.0114789745, + -0.0017381716, + 0.0023895856, + 0.03779803, + 0.005845122, + 0.012580137, + 0.0074264416, + -0.026069371, + 0.0063572903, + 0.008860514, + 0.013092305, + -0.0029545715, + 0.007080728, + -0.030192327, + -0.0099872835, + 0.015749179, + -0.0035819777, + 0.014327911, + -0.009071783, + -0.004180575, + -0.028655821, + -0.0047919755, + 0.020153826, + 0.018258803, + 0.010998816, + -0.0097376015, + -0.0056914715, + 0.020691603, + -0.0045358916, + -0.0046095154, + -0.017951502, + -0.020128218, + 0.038335804, + 0.0019030257, + -0.015172989, + 0.008194694, + -0.008041044, + 0.025185881, + -0.0027897172, + 0.015774786, + -0.0015805197, + -0.014686429, + -0.010627494, + -0.005720281, + 0.0057010744, + -0.0014436747, + 0.033214122, + -0.00071423483, + 0.020819645, + 0.003068209, + 0.023700593, + -0.005480202, + 0.0148400795, + -0.0010651503, + 0.030192327, + 0.0151473805, + 0.0063092746, + -0.007195966, + -0.019564833, + 0.012733787, + -0.029577725, + -0.009654375, + -0.012516115, + 0.00413576, + -0.032164175, + -0.017631397, + -0.0015269021, + -0.0019542426, + 0.006078799, + 0.007458452, + -0.011178075, + 0.029859418, + 0.01651743, + 0.0022791494, + 0.026120588, + -0.01788748, + 0.021395834, + 0.012554528, + 0.0018069941, + 0.003918088, + -0.017324096, + -0.009142206, + 0.027759528, + -0.021254988, + -0.029526507, + -0.02131901, + 0.019475203, + -0.011395747, + 0.033956766, + 0.019641658, + 0.00074744574, + -0.0029673756, + -0.006274063, + 0.014635212, + -0.014443149, + 0.0005897939, + 0.0031306294, + -0.0058003073, + 0.014468757, + -0.035288405, + -0.0016821531, + -0.0015725171, + 0.039846703, + 0.0045230873, + -0.026146198, + 0.033470206, + 0.019808114, + -0.017503355, + 0.019180706, + -0.011747863, + -0.0246353, + 0.0062484546, + 0.0101729445, + -0.024750538, + 0.046223197, + 0.009084587, + 0.011594213, + -0.003205854, + 0.009379084, + 0.0065525547, + -0.00052177155, + -0.014622408, + 0.0006009976, + -0.004820785, + 0.00044174524, + -0.016107697, + -0.027913177, + -0.0037356282, + 0.015531506, + -0.009475116, + 0.009968078, + 0.0053809695, + 0.0030345977, + -0.003841263, + 0.005976365, + -0.017938698, + 0.02578768, + -0.029961852, + -0.025736462, + -0.01073633, + -0.013879764, + -0.013585267, + -0.00032290618, + -0.009103794, + -0.03093497, + -0.0077721556, + -0.019231923, + 0.021447051, + -0.033700682, + -0.021639114, + -0.017144836, + 0.0021879193, + -0.006405306, + -0.0040877443, + -0.022817103, + 0.003543565, + -0.0017749836, + 0.02530112, + 0.008457181, + 0.003469941, + -0.01548029, + -0.00013364395, + -0.00906538, + -0.040077176, + -0.009411095, + 0.037337076, + -0.014481561, + -0.022343347, + -0.006213243, + -0.002821728, + 0.0007470456, + -0.023700593, + -0.024891384, + -0.011773471, + -0.025749266, + -0.023303661, + 0.00018245999, + -0.016248543, + 0.014929709, + 0.010268976, + 0.005598641, + -0.01921912, + 0.035288405, + -0.0067862314, + 0.019795308, + 0.03567253, + -0.0020822845, + 0.01937277, + -0.008405964, + -0.0072791935, + -0.007925806, + -0.011382943, + 0.016094891, + -0.0023031572, + -0.0036524008, + 0.006181232, + 0.0006033984, + -0.00037952478, + 0.013559658, + -0.0044174525, + 0.019078273, + -0.02040991, + 0.01970568, + -0.013265162, + 0.01256093, + -0.002040671, + 0.015505899, + 0.03613348, + 0.002983381, + -0.02259943, + 0.0027513045, + 0.0018566104, + 0.017785048, + -0.00103394, + -0.012330454, + 0.0147120375, + -0.010864372, + -0.014699233, + -0.005419382, + 0.0085532125, + 0.043841615, + -0.012746591, + -0.014558387, + -0.013341987, + 0.03925771, + 0.011357334, + 0.0023879851, + -0.008137075, + -0.028758256, + -0.0025624426, + -0.01243929, + 0.00018986243, + -0.016824732, + -0.0049168165, + 0.00927665, + -0.03129349, + 0.014430345, + 0.011440562, + 0.010640299, + 0.0422795, + 0.032036133, + -0.017925894, + 0.022548214, + -0.020448323, + 0.026299847, + 0.015621136, + -0.0206788, + 0.01426389, + -0.018911818, + -0.010185749, + -0.017644202, + 0.015672352, + 0.022676256, + 0.0028569393, + 0.039488185, + 0.003354703, + 0.0270681, + 0.01749055, + -0.016389389, + -0.011101251, + 0.01475045, + -0.017349705, + 0.003841263, + -0.0040557333, + -0.008700461, + 0.021639114, + -0.007311204, + -0.013393204, + -0.004823986, + 0.00094911206, + 0.016978383, + -0.003908485, + 0.0018149968, + -0.022215305, + -0.011626223, + 0.0031338304, + 0.022164088, + 0.010845166, + 0.00095231313, + -0.021088533, + 0.009199825, + 0.012087175, + 0.0089885555, + -0.021178164, + -0.025646832, + 0.021459855, + -0.0062452536, + 0.011216488, + 0.023162816, + 0.023777418, + 0.01402061, + 0.003482745, + -0.0008050647, + -0.02536514, + 0.0047759702, + -0.010134532, + 0.0033995179, + -0.002375181, + -0.00939829, + -0.015685158, + -0.026555931, + 0.0016949573, + 0.0011403749, + 0.027733918, + -0.009468714, + 0.006837448, + -0.02609498, + -0.011421355, + 0.008745275, + -0.0058131116, + 0.0014132647, + 0.0032490683, + -0.019027056, + -0.0012388073, + -0.029065557, + -0.010550669, + 0.024788952, + 0.022061653, + 0.016875949, + -0.01928314, + -0.01158781, + -0.0032490683, + 0.0684257, + 0.0055826358, + -0.009161413, + 0.010717124, + 0.010192151, + -0.016005263, + -0.016261347, + 0.0043182196, + -0.00802824, + -0.0028265293, + 0.0020038588, + 0.0015381058, + 0.007375225, + 0.0064149094, + -0.00031870478, + -0.014724841, + 0.008706863, + 0.00018716154, + 0.030345978, + -0.02162631, + -0.0047855736, + 0.010134532, + -0.009455909, + -0.0024664109, + -0.0061204126, + 0.0077145365, + 0.022189695, + 0.016402192, + 0.015493094, + -0.022176892, + 0.008642842, + 0.020537952, + 0.00650774, + -0.0121639995, + -0.009558342, + -0.01289384, + -0.0032202587, + 0.0047951764, + 0.00696549, + -0.02122938, + 0.015992459, + 0.0040877443, + 0.0065173428, + -0.021050122, + -0.0066197766, + 0.007291998, + -0.011549397, + 0.013457225, + -0.020064197, + 0.0030586056, + 0.022727473, + -0.010192151, + -0.01265056, + -0.007074326, + 0.011703048, + 0.0149041, + -0.012624951, + -0.008758079, + -0.008444376, + -0.018476475, + 0.004571103, + -0.017311292, + -0.008258715, + -0.0031050208, + -0.0093662795, + -0.013482833, + -0.004468669, + 0.004145363, + -0.011363736, + 0.0134700285, + 0.0013700505, + -0.01766981, + -0.013802938, + -0.0013628481, + 0.030909363, + 0.02627424, + 0.006779829, + -0.022868318, + 0.010499452, + 0.046760976, + -0.0020294674, + -0.0076377112, + -0.0142126735, + -0.0020134621, + 0.005483403, + 0.0008874918, + 0.033290945, + -0.013598071, + 0.003409121, + 0.002317562, + 0.031370316, + 0.0057522915, + 0.0072279763, + -0.0017877878, + -0.007381627, + -0.012087175, + 0.022164088, + 0.004820785, + -0.014302302, + -0.01548029, + 0.0033258935, + -0.023495726, + -0.0058131116, + 0.0009211029, + 0.007624907, + 0.01256093, + 0.025006622, + 0.0056914715, + -0.021254988, + 0.014635212, + 0.026812015, + -0.004551897, + 0.0024584082, + -0.008457181, + 0.0029177594, + 0.010550669, + -0.0016565446, + 0.013457225, + 0.0022599432, + -0.029654551, + 0.005044859, + -0.04437939, + 0.02366218, + 0.0010467442, + -0.0033418988, + -0.001234806, + 0.01161982, + -0.021088533, + -0.0038092525, + -0.00027769132, + -0.013943785, + 0.019628854, + -0.028630214, + -0.02658154, + -0.031703223, + -0.018937428, + 0.009948871, + 0.0069270777, + -0.0023975882, + -0.015006534, + -0.025083447, + 0.017785048, + 0.018258803, + -0.00016935568, + -0.031037405, + -0.022240913, + -0.0065813637, + 0.009539137, + 0.0028297305, + 0.012554528, + -0.0041709715, + 0.013572463, + -0.012945056, + 0.02186959, + 0.0034635388, + -0.012381671, + -0.026043763, + -0.017695418, + 0.018975839, + 0.010576277, + 0.033751898, + -0.006017979, + 0.0011875905, + 0.008886122, + -0.006779829, + -0.008169086, + -0.007925806, + -0.0134700285, + -0.019411182, + 0.013495637, + 0.014724841, + 0.0051568956, + 0.017208857, + -0.011818286, + 0.009654375, + 0.0051985094, + -0.0055346196, + -0.0143407155, + -0.028425347, + -0.022855515, + 0.0014692831, + 0.0015725171, + -0.019846525, + -0.012817014, + 0.010000088, + -0.0077145365, + 0.023623768, + 0.012938654, + 0.0025352335, + -0.0076953303, + 0.028220478, + 0.0068694586, + 0.03014111, + -0.009379084, + 0.0013644486, + 0.00019456397, + -0.025698049, + -0.0009363079, + 0.009097391, + 0.0130346855, + 0.013508442, + 0.0062068407, + 0.0019030257, + -0.020781232, + 0.016235739, + 0.017785048, + 0.021754352, + 0.0147760585, + -0.0026392678, + -0.023879852, + -0.023777418, + -0.03516036, + -0.024584083, + -0.032317825, + 0.003297084, + 0.011639027, + -0.0343665, + 0.021293402, + -0.0013892568, + -0.034929886, + 0.014814471, + 0.010140934, + 0.024007894, + -0.011735058, + 0.005621048, + 0.005496207, + -0.011062837, + -0.013329183, + -0.0008022638, + -0.016645472, + -0.004206183, + 0.033956766, + 0.01021776, + -0.003540364, + 0.017592985, + 0.005685069, + 0.00022887526, + 0.025915721, + -0.017708223, + -0.018079545, + 0.0075352774, + 0.015493094, + -0.021754352, + 0.019987373, + -0.014135848, + 0.013713309, + -0.024763342, + -0.029270424, + -0.004990441, + -0.00024067913, + -0.018604517, + 0.003260272, + -0.038207762, + 0.0041293576, + 0.006363692, + -0.007311204, + -0.0075288755, + -0.0048431926, + -0.01766981, + -0.018706951, + -0.006280465, + 0.0054065776, + -0.012016751, + 0.022663452, + 0.0018117958, + 0.0024744135, + -0.031728834, + -0.0028761458, + 0.004574304, + 0.027426617, + -0.0016309363, + -0.006219645, + -0.010749134, + 0.018002719, + 0.0298082, + -0.0058003073, + -0.0054513924, + -0.001447676, + -0.0054673976, + 0.0058195135, + 0.017746635, + -0.012644158, + -0.008930936, + 0.0139053725, + -0.018899014, + 0.005185705, + -0.015697962, + -0.019091077, + -0.006040386, + -0.01450717, + -0.014251086, + -0.0012083973, + 0.011536594, + 0.0027865162, + 0.0067350143, + -0.02503223, + 0.031242272, + 0.011318922, + -0.021843983, + 0.015377856, + -0.0051024775, + 0.009961676, + 0.0026728788, + 0.015224205, + 0.0059443545, + -0.019718483, + 0.03449454, + -0.009980882, + -0.028066829, + -0.015493094, + 0.006411708, + -0.008930936, + -0.0005221717, + 0.0000951813, + 0.002773712, + -0.013239553, + 0.02624863, + -0.0014812871, + -0.0015861215, + -0.0040013157, + -0.0234189, + -0.015313835, + 0.0026312652, + -0.02019224, + -0.0025112256, + 0.014878492, + -0.0018838194, + 0.008783688, + -0.040128395, + -0.0059443545, + -0.03129349, + 0.01037141, + -0.009660777, + -0.012176803, + -0.027247358, + 0.0011203684, + -0.008527604, + -0.004218987, + -0.009270248, + 0.0013148324, + -0.0058835344, + 0.012304846, + -0.007291998, + 0.014443149, + 0.0025832495, + -0.0008882921, + -0.012266433, + -0.0014036616, + -0.015249814, + 0.0041901777, + 0.0045839073, + -0.017132033, + 0.014161456, + -0.031395923, + -0.030345978, + 0.007266389, + -0.010198553, + -0.0011355734, + 0.011325324, + 0.014545582, + 0.03288121, + -0.0029545715, + -0.0016469415, + 0.022420172, + -0.0016901557, + -0.00083867577, + -0.038668714, + -0.018489279, + 0.0032426661, + -0.017785048, + 0.0041293576, + -0.0034763431, + -0.009942469, + -0.022522606, + 0.008277922, + 0.0034219252, + 0.007516071, + -0.0081818905, + 0.0069718924, + 0.011703048, + -0.001241208, + 0.023098795, + 0.032343436, + 0.013700505, + 0.005662662, + -0.010992414, + -0.010441833, + 0.010742732, + 0.036824908, + -0.0007582493, + -0.00068542536, + -0.0034219252, + -0.011805481, + 0.00988485, + -0.010723526, + 0.014238281, + 0.0054481914, + 0.011094848, + 0.005185705, + -0.0090525765, + -0.0049616313, + 0.017388117, + 0.0014820873, + -0.007202368, + -0.018758168, + 0.013764526, + -0.014443149, + -0.008476387, + 0.009142206, + -0.024366412, + -0.0065429513, + -0.021908004, + 0.00915501, + -0.042049024, + -0.0112292925, + -0.023610963, + -0.004641526, + -0.033828724, + 0.024609692, + 0.01718325, + -0.0170296, + -0.006178031, + -0.023982285, + -0.003902083, + -0.0021078931, + -0.013828547, + -0.02326525, + -0.038694322, + -0.03259952, + -0.0058419206, + 0.010544267, + -0.017119229, + -0.0060819997, + -0.0040589347, + 0.008521202, + 0.024379216, + 0.23068064, + 0.010909187, + -0.0053201495, + 0.03257391, + 0.0033611052, + 0.04962912, + 0.022970753, + -0.008540408, + 0.013201141, + 0.020909276, + 0.0037964482, + 0.0025256304, + 0.009379084, + 0.0043150187, + 0.0061428198, + -0.0041773734, + -0.028092436, + -0.0008682855, + -0.015800396, + 0.010019294, + 0.014635212, + -0.017797852, + 0.011280509, + 0.00383166, + 0.034725018, + -0.001922232, + -0.018169174, + -0.0018197984, + 0.023073187, + 0.0054705986, + -0.0062356503, + -0.011472573, + 0.0033354966, + -0.009097391, + -0.0070359134, + -0.005502609, + -0.01928314, + 0.008201096, + 0.020934884, + 0.026069371, + 0.012138391, + 0.012932252, + -0.032138567, + -0.021818373, + -0.0041261567, + 0.02348292, + -0.009404692, + -0.0061908355, + 0.019193511, + 0.0066261785, + -0.017759439, + -0.001922232, + 0.023777418, + 0.02350853, + 0.0011091647, + 0.023226837, + 0.022061653, + -0.011690244, + 0.029526507, + -0.014891297, + -0.014071827, + 0.023457313, + -0.018668538, + 0.0031882483, + 0.0077081346, + -0.0071575535, + -0.019808114, + 0.009475116, + 0.013457225, + -0.010569875, + 0.017746635, + 0.010992414, + 0.019628854, + 0.0056402544, + -0.006286867, + -0.003236264, + 0.024840167, + 0.008162684, + 0.026940057, + -0.017900286, + -0.0037420304, + -0.014404736, + -0.014404736, + 0.022868318, + -0.018719755, + -0.022804298, + 0.0076313093, + 0.0020566762, + 0.03569814, + -0.008674853, + -0.009263846, + -0.009583951, + 0.00976321, + -0.010032099, + 0.006238851, + 0.024776146, + -0.0134700285, + 0.022151284, + -0.02368779, + 0.0031738435, + -0.036517605, + -0.01700399, + 0.017900286, + -0.010787547, + -0.013649288, + 0.011114054, + 0.00480478, + 0.015531506, + 0.038873583, + -0.008828503, + 0.013457225, + -0.005112081, + 0.012003947, + -0.0023223637, + 0.01833563, + -0.00136845, + 0.0033835126, + -0.012618549, + -0.018450867, + -0.0139053725, + -0.00018806184, + -0.022036046, + -0.01441754, + 0.009628766, + -0.015710765, + -0.0037388294, + -0.0040877443, + 0.020077001, + 0.00031870478, + -0.040282045, + 0.03047402, + -0.0020022583, + 0.030909363, + -0.0023719799, + -0.009289455, + -0.00086748524, + -0.009526332, + -0.005243324, + 0.011504583, + -0.01012813, + -0.008636439, + -0.008918133, + 0.012445692, + -0.013738917, + 0.0056466567, + 0.0077977637, + 0.005105679, + -0.012887438, + -0.013585267, + -0.017119229, + 0.0010091318, + -0.02147266, + -0.00059219473, + 0.003473142, + 0.016146109, + -0.013111511, + -0.026376672, + -0.007618505, + -0.016389389, + 0.019539224, + -0.006824644, + 0.025864504, + -0.006472528, + -0.014225477, + -0.008905328, + 0.0014468757, + -0.16409875, + 0.024071915, + 0.004164569, + -0.004033326, + -0.013828547, + -0.0011675839, + 0.02578768, + 0.018233195, + -0.0010171344, + 0.028322913, + 0.015160184, + -0.008649244, + -0.0520107, + -0.024123132, + 0.008924535, + 0.019001449, + -0.0042285905, + -0.015224205, + 0.026402282, + 0.009961676, + -0.0029785794, + -0.029142382, + 0.012215217, + -0.0026408683, + 0.00465433, + 0.00016485421, + -0.00918702, + 0.030243544, + -0.0017877878, + -0.007080728, + -0.00465433, + -0.0052721333, + 0.0028057224, + 0.036287133, + 0.0072855954, + 0.005067266, + 0.00013964591, + 0.005172901, + 0.0010923592, + 0.003972506, + -0.008137075, + 0.024929797, + -0.006152423, + 0.009628766, + -0.019987373, + 0.022970753, + 0.03505793, + 0.021101339, + -0.0015829204, + -0.0073048016, + 0.008681254, + -0.03157518, + -0.023828635, + -0.008649244, + 0.01784907, + 0.0052049113, + 0.018566104, + 0.009808025, + -0.003850866, + 0.022586627, + 0.0036299936, + -0.0267608, + -0.0009651173, + 0.0026200614, + -0.0011043631, + -0.012810612, + 0.0030714099, + 0.008258715, + -0.031856876, + 0.014788862, + -0.013041088, + -0.0066005704, + 0.02323964, + -0.017349705, + 0.012477702, + 0.009910459, + -0.014571191, + 0.012035958, + -0.005377768, + -0.010838764, + 0.013329183, + 0.02618461, + 0.0016773515, + -0.014519975, + -0.016799124, + 0.014865688, + -0.013687701, + 0.005672265, + -0.006261259, + -0.028246088, + 0.00814988, + -0.039949134, + 0.0040013157, + -0.03877115, + 0.016094891, + 0.0133804, + -0.010448235, + -0.011158869, + -0.0011883908, + -0.021088533, + 0.011575006, + -0.010883578, + -0.012112782, + 0.01809235, + 0.024097523, + 0.024660908, + -0.00043574328, + 0.010397019, + 0.027042491, + 0.008233107, + -0.014699233, + 0.031523965, + 0.0142126735, + 0.03323973, + 0.014545582, + -0.00028869492, + 0.0083035305, + -0.034801845, + -0.0027080905, + 0.006779829, + 0.036773693, + 0.012170401, + -0.009692787, + 0.009219031, + -0.0030522035, + -0.024673713, + -0.095365755, + -0.022919536, + 0.012432888, + 0.01475045, + -0.0013924579, + 0.0151473805, + 0.010185749, + 0.03743951, + 0.00018466072, + 0.02934725, + -0.008322736, + -0.017349705, + -0.015019339, + 0.002871344, + 0.008476387, + -0.013201141, + 0.007996229, + -0.025454769, + -0.024981014, + 0.0053297523, + -0.004010919, + -0.012420083, + 0.0022039246, + -0.004270204, + -0.01629976, + -0.020269064, + -0.03920649, + 0.019936156, + 0.00498724, + -0.00471515, + 0.0152114015, + -0.0072407806, + 0.0048559965, + -0.010768341, + -0.017196054, + 0.013790134, + -0.014827276, + -0.00037292263, + 0.006101206, + -0.03144714, + 0.010268976, + 0.012003947, + 0.006510941, + -0.028578997, + -0.013508442, + 0.0040269243, + -0.013713309, + -0.011971937, + -0.009353476, + -0.01937277, + 0.010883578, + 0.037004165, + -0.0033835126, + -0.011178075, + 0.037516337, + -0.020333085, + 0.021280598, + 0.0206788, + -0.009455909, + 0.004817584, + 0.011088446, + 0.012368867, + 0.008508397, + 0.02551879, + -0.0053809695, + -0.015390661, + -0.027324185, + 0.003533962, + 0.012176803, + -0.041895375, + -0.0005985968, + 0.02092208, + -0.018745363, + 0.013226749, + -0.009603158, + -0.001101162, + -0.020755624, + -0.011523789, + 0.009558342, + -0.00032050538, + -0.026018154, + -0.020614779, + -0.006277264, + -0.02366218, + 0.0070423153, + 0.022253716, + -0.013341987, + -0.004388643, + 0.028604604, + -0.014494366, + 0.0005645856, + 0.04312458, + 0.013802938, + -0.012260031, + -0.0075352774, + 0.011901514, + 0.0122280205, + 0.018284412, + 0.00903337, + -0.019398378, + -0.021664724, + -0.0026504714, + -0.049321815, + 0.010115326, + -0.002378382, + -0.023252446, + -0.0032698752, + 0.009878448, + -0.01578759, + -0.004033326, + -0.005256128, + -0.00535216, + -0.0019750495, + -0.002357575, + -0.0050224513, + 0.00065141416, + -0.01402061, + 0.0027016883, + 0.018002719, + -0.0050288537, + 0.02722175, + 0.00053697656, + -0.0019126289, + 0.014571191, + 0.011101251, + 0.0007462454, + -0.016350977, + 0.01742653, + -0.03096058, + -0.01523701, + -0.016607061, + -0.014468757, + -0.0065493532, + -0.018194782, + 0.015006534, + 0.039283317, + -0.019257532, + -0.01903986, + -0.006155624, + 0.030243544, + 0.008822101, + -0.020179436, + -0.013687701, + -0.043508705, + 0.016632669, + -0.013303574, + -0.016325368, + 0.0188606, + -0.0016453409, + -0.012727384, + 0.005854725, + -0.0013548455, + 0.021050122, + 0.027119316, + -0.0002262744, + -0.009122999, + 0.00036051855, + -0.017144836, + 0.030089894, + 0.008834905, + 0.011120456, + -0.03190809, + 0.016607061, + -0.012490507, + -0.00034311283, + 0.011939926, + 0.008495593, + 0.008521202, + -0.017068012, + -0.014699233, + 0.0075736903, + 0.007618505, + -0.008265117, + -0.00918702, + 0.040256437, + 0.008591625, + 0.02323964, + 0.0109476, + -0.011991142, + 0.0037964482, + -0.0013764526, + 0.008124271, + 0.013239553, + -0.0077721556, + -0.019731287, + 0.02691445, + 0.020422716, + 0.031984918, + -0.038310196, + -0.0009251042, + 0.005364964, + -0.005006446, + -0.031370316, + -0.004567902, + -0.007701732, + -0.002986582, + -0.00413576, + 0.0041901777, + -0.0036620041, + 0.0020870862, + 0.015979653, + 0.035390835, + 0.013802938, + -0.0062100417, + -0.0079066, + -0.026530324, + -0.0088669155, + 0.0077209384, + -0.007804166, + -0.0036363956, + -0.012234422, + 0.0076313093, + 0.007080728, + -0.021575093, + -0.0007982625, + 0.022010436, + -0.0017189652, + -0.005726683, + -0.033316553, + -0.028809473, + -0.018783776, + 0.0065557556, + 0.0013556457, + 0.011722255, + -0.011658234, + -0.010397019, + 0.022253716, + 0.027016884, + 0.040154003, + -0.031523965, + -0.0037388294, + 0.018719755, + 0.011542995, + -0.0032506688, + 0.008469985, + -0.01937277, + -0.024443237, + -0.0075096693, + -0.019103881, + 0.02609498, + 0.016235739, + 0.054084983, + -0.004427056, + -0.03577496, + 0.017055208, + 0.001292425, + 0.007842579, + 0.013802938, + 0.0011843895, + -0.014481561, + -0.013713309, + 0.002469612, + 0.0009987283, + 0.021203771, + 0.0033451, + -0.016837535, + -0.0022279324, + -0.01912949, + 0.020000177, + -0.031088622, + -0.013028284, + 0.022304934, + 0.0052049113, + 0.012356062, + 0.0034571367, + -0.016184522, + -0.007151151, + -0.006818242, + 0.012388073, + -0.005006446, + -0.020909276, + 0.017260075, + -0.022420172, + -0.023201229, + -0.00021547085, + 0.01466082, + -0.018630126, + -0.015685158, + -0.025505986, + -0.006213243, + 0.014583996, + -0.00046975445, + 0.020819645, + -0.015838807, + -0.027452227, + -0.011542995, + -0.010064109, + -0.020025784, + 0.005979566, + -0.023841439 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 24, + "total_tokens": 24 + } +} +265 34464 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 70 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What color is the desk?"]}HTTP/2.0 200 OK +Content-Length: 33508 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:41 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 100 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999995 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_0f58bb3fc96a4023b84851b4375c7dfc + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.014726514, + -0.0071365014, + 0.0019683642, + -0.024905318, + -0.01816564, + 0.0029745921, + -0.042025365, + -0.011350376, + 0.015494963, + -0.006342857, + 0.004730373, + 0.008112811, + -0.022121266, + 0.0067837704, + -0.014965867, + 0.00699163, + 0.021466194, + 0.010367768, + 0.007438842, + -0.021466194, + -0.044368505, + 0.01642718, + -0.010682707, + 0.009750489, + -0.022373216, + 0.013617931, + 0.023859724, + -0.005798014, + 0.0071365014, + 0.012849482, + 0.025043892, + -0.0020077315, + 0.0032375655, + -0.03648245, + -0.03144344, + 0.019450588, + 0.0027116186, + 0.00944185, + 0.019211235, + -0.021113463, + 0.0053161583, + 0.004629593, + 0.0036186408, + 0.003999716, + -0.002582494, + 0.012792793, + 0.015557951, + 0.012824287, + -0.0026029649, + 0.011312583, + 0.012427464, + 0.044368505, + -0.006308214, + -0.013454163, + 0.004210725, + -0.02459038, + 0.01408404, + 0.025522599, + -0.02571156, + -0.005259469, + 0.008534827, + 0.0007751418, + 0.0073569585, + 0.0065507162, + -0.012049539, + 0.004163484, + -0.010298482, + 0.00995205, + -0.012326684, + 0.013554944, + 0.025698964, + 0.035348672, + 0.022335423, + 0.019715136, + 0.023444006, + 0.0040028654, + 0.0074514397, + 0.011696808, + -0.017346801, + -0.009334771, + 0.0002572652, + 0.005684636, + -0.032174096, + -0.002036076, + 0.014978465, + 0.0061507444, + 0.006588509, + 0.012389672, + -0.031821363, + -0.010386664, + -0.014335991, + 0.029931733, + 0.029528612, + -0.0051964815, + -0.012836885, + 0.009252886, + 0.02540922, + 0.017535763, + 0.0073947506, + -0.029024713, + 0.005429536, + 0.020735536, + -0.023733748, + -0.0016660235, + -0.022310227, + -0.005873599, + 0.004465825, + 0.0014250957, + 0.020634755, + -0.02642962, + -0.035499845, + 0.018304212, + 0.02995693, + -0.01659095, + -0.0008865513, + -0.012950262, + 0.014613137, + -0.018593956, + -0.012055838, + -0.006966435, + 0.012257398, + 0.041974973, + 0.032728385, + -0.029553808, + 0.0382713, + 0.0067837704, + -0.016150035, + -0.0058798976, + -0.003628089, + 0.0044374806, + 0.010575628, + 0.01652796, + 0.0071616964, + 0.014663527, + -0.020433195, + 0.0098638665, + -0.0066326, + 0.034063723, + 0.005520868, + -0.020193843, + -0.0020502482, + 0.029478222, + -0.0032690594, + 0.001273138, + 0.0027368136, + 0.028243665, + 0.018329408, + -0.0145627465, + -0.017926287, + 0.009007235, + 0.0014652504, + -0.006213732, + 0.017573556, + 0.02678235, + 0.00095741235, + 0.024325833, + -0.025686366, + -0.0111425165, + -0.018694736, + -0.0014250957, + -0.019778123, + -0.0035556532, + 0.029075103, + -0.006027919, + 0.03345904, + 0.024628174, + 0.021718144, + 0.013328188, + -0.002443921, + 0.011306284, + -0.025169868, + 0.02673196, + -0.011444857, + 0.013995857, + 0.009126911, + 0.0138320895, + 0.021503985, + -0.0012581784, + -0.021831522, + 0.01336598, + -0.0148902815, + 0.014940672, + 0.0052783657, + 0.011986551, + 0.0068341605, + -0.012893573, + 0.016036658, + -0.02326764, + 0.018253822, + -0.008446645, + 0.015091842, + 0.01704446, + 0.0013188041, + -0.015482366, + -0.67280895, + -0.04918076, + 0.018493176, + -0.0070231236, + -0.0016408284, + 0.03393775, + 0.010374067, + 0.02592572, + -0.003026557, + -0.029100297, + 0.017271215, + 0.0066703926, + 0.01587289, + -0.007256178, + -0.0006956199, + -0.033811774, + 0.0033257483, + 0.019639552, + -0.00403121, + 0.0025935168, + -0.0019242729, + 0.015469768, + -0.008629309, + -0.0031052914, + 0.021781132, + 0.017397191, + 0.01791369, + -0.015948474, + -0.013895077, + -0.008245084, + -0.012301489, + 0.01331559, + -0.02469116, + -0.0074451407, + 0.040538855, + 0.00018354997, + -0.021151256, + 0.025182465, + -0.006506625, + 0.032476436, + -0.0037540642, + 0.011016541, + 0.0010204001, + -0.018518372, + -0.010437055, + -0.004714626, + 0.0130888345, + 0.0066011064, + 0.044116553, + -0.011955057, + 0.018845906, + -0.016288608, + 0.016805107, + 0.015318598, + 0.012515647, + 0.005164988, + 0.04414175, + 0.01985371, + 0.0035462051, + -0.003184026, + -0.008509632, + 0.018556163, + -0.02356998, + -0.015066647, + -0.017825507, + 0.0037981556, + -0.03408892, + -0.02587533, + -0.027991714, + -0.013529749, + 0.00612555, + 0.0043146545, + -0.014411576, + 0.020634755, + 0.030914342, + 0.01117401, + 0.020760732, + -0.018430188, + 0.007791573, + -0.010890566, + -0.010210299, + -0.0053571, + -0.018367201, + -0.026555596, + 0.029402638, + -0.021315023, + -0.013970662, + -0.018039664, + 0.01525561, + 0.006216882, + 0.022814129, + 0.030939536, + -0.0054169386, + -0.0012644771, + -0.0125534395, + 0.030284464, + 0.004342999, + 0.0009959923, + -0.009712697, + 0.00015924066, + 0.005098851, + -0.014827294, + 0.015583146, + 0.012767598, + 0.032224484, + -0.010840176, + -0.029830953, + 0.041849, + 0.013857285, + -0.012257398, + 0.02005527, + -0.025043892, + -0.032552022, + 0.002138431, + 0.01577211, + -0.03025927, + 0.054068603, + 0.005375996, + 0.010525238, + 0.003398184, + 0.01505405, + -0.001191254, + -0.0041004964, + -0.009422953, + 0.012597531, + -0.008150603, + -0.00883087, + -0.013844687, + -0.01612484, + 0.009712697, + 0.00653182, + 0.000116330324, + 0.01657835, + 0.0023084977, + -0.008389955, + -0.0077537806, + 0.016263412, + -0.019626953, + 0.006878252, + -0.011690509, + -0.01229519, + -0.006563314, + -0.012755, + -0.0089883385, + -0.008799376, + -0.01403365, + -0.035701405, + -0.007123904, + -0.020861512, + 0.010204, + -0.018770322, + -0.028520811, + -0.019425394, + 0.005010668, + 0.014487161, + -0.021100866, + -0.016817704, + -0.015293403, + -0.0055271666, + 0.010518938, + 0.0003253706, + 0.002409278, + -0.016956277, + 0.0045036175, + -0.0036627322, + -0.02786574, + -0.02015605, + 0.044746432, + -0.0056909346, + -0.015331196, + -0.011759795, + 0.0026360333, + -0.011281089, + -0.013605334, + -0.018102651, + -0.016049255, + -0.007224684, + -0.033232287, + -0.010109519, + -0.0134793585, + 0.0043304013, + 0.016490169, + -0.008673401, + 0.0056909346, + 0.037817787, + -0.0020045822, + 0.008515931, + 0.045250334, + -0.0074577383, + 0.013126628, + 0.007205788, + -0.011016541, + -0.005259469, + -0.0009432401, + 0.006802667, + 0.00050350756, + 0.0007310505, + -0.0036784792, + 0.0010093772, + -0.0052752164, + 0.020571768, + -0.009618215, + 0.0118605755, + -0.008648206, + 0.007527025, + -0.0122133065, + 0.01495327, + -0.0034013335, + 0.0022565327, + 0.036608424, + 0.0002501791, + -0.017838104, + 0.013378578, + -0.005470478, + 0.029150687, + -0.0031934741, + -0.02224724, + 0.010348872, + -0.023645567, + -0.015406781, + 0.007577415, + 0.013945467, + 0.030763172, + -0.014197418, + -0.01878292, + -0.01209363, + 0.037540644, + 0.015696524, + -0.0037414667, + -0.024678564, + -0.024514796, + -0.008024627, + -0.0021762236, + 0.0039209817, + -0.022751141, + 0.0039115334, + 0.004868946, + -0.018077457, + 0.005539764, + 0.0045477087, + 0.0035021137, + 0.036306083, + 0.023305433, + -0.020219037, + 0.019009674, + -0.006689289, + 0.018556163, + 0.026253255, + -0.025056489, + 0.016666533, + -0.024099078, + -0.0018786069, + -0.012389672, + 0.017901093, + 0.024628174, + -0.010065427, + 0.037061937, + -0.010033933, + 0.009347368, + 0.011350376, + -0.0032627606, + -0.009788282, + 0.0036816285, + -0.009926855, + 0.012786495, + -0.012578635, + -0.010859072, + 0.0018439636, + -0.0065129236, + -0.030939536, + -0.014361186, + -0.0016345297, + 0.012584934, + -0.0019683642, + 0.0025069087, + -0.008560022, + 0.008547425, + -0.0066451975, + 0.012339282, + 0.0055523617, + -0.005259469, + -0.021869315, + 0.02418726, + 0.0012148744, + -0.0004987835, + -0.01806486, + -0.009347368, + 0.014814696, + -0.012162916, + -0.0008715917, + 0.0084529435, + 0.024955709, + 0.004069003, + -0.00821359, + 0.0012298339, + -0.02367076, + 0.011986551, + 0.008207291, + 0.01321481, + -0.0009448148, + -0.009870166, + -0.010632317, + -0.03000732, + -0.009410356, + 0.006853057, + 0.024162065, + -0.0006842034, + -0.0014471414, + -0.014373783, + -0.0321489, + -0.0068089655, + 0.0020439494, + -0.0040564053, + 0.0077033904, + -0.013302993, + 0.0056122, + -0.03464321, + -0.015784707, + 0.027437422, + 0.018770322, + -0.0072183856, + -0.023771541, + 0.0005767307, + -0.007130203, + 0.06540638, + 0.026152475, + -0.009907958, + 0.017208228, + 0.012925067, + -0.006333409, + -0.018304212, + -0.00032340226, + -0.0043398496, + -0.009139509, + 0.012282593, + -0.0004940594, + -0.007130203, + 0.0025887927, + -0.012717208, + 0.00035666762, + 0.013328188, + 0.00038205952, + 0.017749922, + -0.031166293, + -0.011041736, + 0.011602326, + -0.009725294, + 0.00837106, + -0.010386664, + 0.020609561, + 0.005199631, + -0.0075396225, + 0.02259997, + -0.021541778, + -0.0031367852, + 0.024010895, + 0.0020266278, + -0.0058389558, + -0.008667101, + -0.017472776, + -0.017434983, + 0.008018329, + 0.00836476, + -0.006960136, + 0.023179457, + 0.0056247977, + 0.0036406866, + -0.021881912, + -0.0051964815, + 0.009460746, + -0.006081458, + 0.016464973, + -0.012629025, + -0.014147027, + 0.020773329, + -0.0039871186, + -0.019009674, + 0.0008629309, + 0.010078025, + 0.00035095934, + -0.021970095, + -0.02525805, + 0.001359746, + -0.022562178, + -0.0029919136, + 0.008018329, + 0.008679699, + 0.006588509, + -0.016162632, + -0.027739763, + -0.00089442474, + -0.00077553553, + 0.0016691729, + 0.0016644488, + -0.017901093, + -0.016767314, + -0.019223833, + -0.0020785925, + 0.033131506, + 0.029175883, + 0.024678564, + -0.035071526, + 0.0045729037, + 0.031141097, + 0.016301205, + -0.020067867, + 0.0050799544, + -0.005470478, + 0.005281515, + -0.0010440204, + 0.034315675, + -0.0109472545, + -0.00040705773, + 0.0152808055, + 0.03378658, + 0.008786778, + 0.020508781, + -0.015898084, + -0.007199489, + -0.006802667, + 0.02306608, + 0.019110454, + -0.02577455, + -0.019601759, + 0.010008738, + -0.025220258, + 0.0028958574, + -0.008245084, + -0.012440062, + 0.0063145123, + 0.014928075, + -0.00046886437, + -0.01652796, + 0.014235211, + 0.024766747, + -0.014839891, + -0.002393531, + -0.018644346, + 0.01296286, + 0.015797304, + 0.008037225, + 0.016502766, + -0.01714524, + -0.017397191, + 0.023947908, + -0.039077543, + 0.023532188, + 0.013907675, + -0.011048035, + -0.004765016, + 0.020269427, + -0.01898448, + -0.0037320186, + 0.009479642, + -0.001765229, + 0.028999517, + -0.028697176, + -0.0117346, + -0.020130854, + -0.017472776, + 0.024527393, + 0.02122684, + -0.013580139, + 0.0044532274, + -0.013920272, + 0.012792793, + -0.002102213, + -0.001168421, + -0.045930598, + -0.02566117, + -0.0098764645, + 0.019450588, + -0.022751141, + 0.023292836, + -0.006871953, + 0.015507561, + 0.001719563, + 0.011041736, + -0.0016140587, + -0.019916696, + -0.013277798, + -0.008112811, + 0.026656376, + 0.013907675, + 0.014638332, + 0.010701602, + -0.000071353206, + 0.0011731451, + 0.0003409207, + -0.016338998, + -0.0019825364, + -0.012440062, + -0.0013219535, + 0.008963143, + 0.016150035, + 0.006934941, + 0.0209245, + 0.013592736, + -0.0006782983, + 0.030989926, + -0.01672952, + -0.009561527, + -0.036633622, + -0.02612728, + 0.0079049505, + -0.014487161, + -0.020811122, + -0.0046768333, + -0.0041918284, + -0.009070222, + 0.016250815, + 0.002127408, + 0.0016053979, + -0.0037225704, + 0.032375656, + 0.0036910765, + 0.04169783, + -0.01652796, + 0.005139793, + 0.004853199, + -0.034517236, + -0.0049413815, + 0.010619719, + 0.0077789756, + 0.00826398, + 0.012515647, + 0.011671613, + -0.00806242, + 0.0003052933, + -0.0004527238, + 0.013769101, + 0.012383373, + -0.018379798, + -0.019097857, + -0.024829734, + -0.023393616, + -0.02826886, + -0.037112325, + 0.01873253, + -0.0030202582, + -0.041723024, + 0.018203432, + 0.0049476805, + -0.028394835, + -0.00068695913, + 0.0039934176, + 0.026958717, + 0.0035493544, + 0.005520868, + 0.01689329, + -0.01153304, + -0.001339275, + -0.00648143, + -0.01577211, + 0.0038265001, + 0.035399064, + 0.027286252, + -0.015129635, + 0.024703758, + 0.009618215, + -0.0044280323, + 0.010758292, + -0.0122133065, + -0.018304212, + -0.019677343, + 0.002184097, + -0.014928075, + 0.017737323, + -0.014701319, + 0.013378578, + -0.021970095, + -0.012307788, + 0.0009944176, + -0.0016817704, + -0.014348588, + 0.003480068, + -0.024225052, + 0.0234692, + 0.02786574, + 0.0027746062, + -0.016162632, + -0.0049193357, + -0.00959302, + -0.0004641403, + 0.011148815, + 0.016540559, + -0.008975741, + 0.017220825, + -0.005514569, + 0.008295475, + -0.031166293, + 0.00347062, + -0.0046673855, + 0.024199858, + -0.01280539, + -0.00026356397, + -0.012465257, + 0.01158343, + 0.029150687, + -0.012326684, + -0.0073317634, + 0.00131408, + -0.010115817, + 0.00617279, + 0.009196198, + -0.016666533, + -0.020886706, + 0.017271215, + -0.018329408, + 0.0017337352, + -0.027588593, + -0.009416655, + 0.019425394, + -0.020445794, + -0.016364193, + -0.0015140658, + 0.019488381, + 0.020030074, + 0.0042012767, + -0.008465541, + 0.027160278, + -0.00011416513, + -0.027689373, + 0.023242446, + -0.00053145835, + 0.010065427, + -0.011822783, + 0.015734317, + 0.005095701, + -0.033131506, + 0.028394835, + 0.0068089655, + -0.018430188, + -0.031720582, + 0.0055712583, + -0.019815916, + -0.0027541353, + -0.011822783, + -0.0012266845, + 0.0043807914, + 0.0168303, + 0.006878252, + -0.0019683642, + -0.0058767484, + -0.017749922, + 0.0025541494, + 0.00806242, + -0.010235494, + -0.0047114766, + 0.008673401, + -0.004979174, + 0.013403773, + -0.02597611, + -0.006903447, + -0.020647354, + 0.012755, + -0.01602406, + -0.0069223433, + -0.024779344, + -0.0044122855, + -0.011640118, + -0.00069837563, + -0.015646134, + -0.0027399631, + 0.0057161297, + 0.030334854, + -0.0030564761, + 0.009712697, + -0.008667101, + -0.0028690877, + -0.012351879, + -0.021781132, + -0.028445225, + -0.015935877, + 0.007413647, + 0.00095741235, + 0.0036910765, + -0.035600625, + -0.031141097, + 0.01000244, + 0.0063145123, + -0.026958717, + 0.015079245, + 0.0063963966, + 0.03504633, + -0.010361469, + -0.014273003, + 0.019778123, + -0.0024927366, + -0.016288608, + -0.023242446, + -0.009958348, + -0.002045524, + -0.026757156, + 0.0070546176, + -0.015016257, + -0.006383799, + -0.021768535, + 0.024174662, + -0.00398082, + 0.0034674704, + -0.010147312, + 0.009315874, + 0.008081316, + -0.0011196056, + 0.0123959705, + 0.047467496, + 0.022335423, + -0.0019179741, + -0.024955709, + -0.003867442, + -0.00010904738, + 0.03892637, + -0.005117747, + 0.0058515533, + 0.005577557, + -0.013605334, + -0.0056972336, + -0.027588593, + 0.007999432, + -0.0036721805, + 0.018505773, + 0.009479642, + -0.007256178, + -0.00030667114, + 0.02005527, + -0.0065759113, + -0.017951483, + -0.020659951, + -0.0010503192, + -0.027311448, + -0.0069538374, + 0.010367768, + -0.035247892, + 0.002853341, + -0.013542346, + 0.00087789044, + -0.02520766, + -0.03240085, + -0.01801447, + -0.001571542, + -0.03005771, + 0.02791613, + 0.0076341038, + -0.018417591, + -0.0067837704, + -0.017170435, + -0.015482366, + 0.00045036175, + -0.018342005, + -0.011249595, + -0.03383697, + -0.03000732, + 0.0011707831, + -0.0062515247, + -0.020672549, + 0.0014077742, + 0.0055901543, + 0.02663118, + 0.02087411, + 0.2332055, + 0.017346801, + 0.0050610583, + 0.0525569, + -0.0013219535, + 0.031216683, + 0.031367853, + 0.0025415518, + 0.0070294226, + 0.02781535, + 0.007432543, + -0.0074451407, + -0.006821563, + 0.009939452, + 0.010279586, + -0.013920272, + -0.033307873, + -0.022070875, + -0.0062011345, + 0.004793361, + 0.025031295, + -0.0026360333, + 0.011079528, + 0.0003480068, + 0.017246021, + 0.016666533, + -0.0029430983, + -0.0018959284, + 0.005382295, + 0.0003334409, + -0.008238785, + -0.017208228, + -0.002275429, + 0.003924131, + -0.00048776067, + -0.0025447013, + -0.012880975, + -0.002036076, + 0.019047467, + 0.0331567, + 0.015230415, + -0.016515363, + -0.03464321, + -0.0055712583, + -0.013139225, + -0.0025935168, + -0.012666818, + -0.001359746, + 0.006897148, + 0.008755284, + -0.01781291, + -0.002867513, + 0.0280673, + 0.023960505, + -0.01316442, + 0.0098764645, + 0.022184253, + -0.023632968, + 0.008629309, + -0.019047467, + -0.021718144, + 0.029075103, + -0.01500366, + 0.0077789756, + 0.0069538374, + -0.012685714, + -0.018959284, + -0.0014770605, + 0.02428804, + -0.018669542, + 0.0017699532, + 0.013580139, + 0.014713917, + -0.0043335506, + 0.004843751, + -0.009265484, + 0.022373216, + 0.0036658817, + 0.023305433, + 0.0032533125, + -0.009284381, + -0.01408404, + -0.021718144, + 0.021466194, + -0.0074640373, + -0.014386381, + 0.007035721, + -0.0027998013, + 0.035071526, + -0.003306852, + -0.0038170519, + 0.010953553, + 0.00067554263, + 0.002092765, + 0.016490169, + 0.021516584, + 0.0017101149, + 0.029327054, + -0.00847184, + 0.00073734927, + -0.03224968, + -0.002454944, + 0.008408852, + -0.005234274, + -0.019563965, + 0.017787714, + -0.00045744787, + -0.0047083274, + 0.031115903, + -0.008994637, + -0.0014148602, + -0.015910681, + 0.019312015, + -0.007980536, + -0.00070703647, + 0.0023210952, + -0.0011164562, + -0.018228628, + -0.026555596, + -0.020811122, + 0.0016439778, + -0.031241877, + -0.012099929, + 0.00842145, + -0.011287388, + -0.013240005, + 0.017346801, + 0.015117037, + -0.00043540218, + -0.036910765, + 0.008604114, + 0.007016825, + 0.031241877, + -0.010015037, + -0.017409788, + 0.009725294, + 0.005520868, + 0.0039146827, + 0.0060688606, + -0.005986977, + -0.01572172, + -0.020911902, + 0.012578635, + -0.018140445, + 0.017346801, + -0.007596311, + -0.0030690734, + -0.012698311, + -0.012326684, + -0.021390608, + -0.0023415661, + -0.013038445, + -0.0050799544, + 0.008711193, + 0.010991346, + -0.008660803, + -0.004276862, + -0.010997645, + -0.013252603, + 0.019563965, + 0.003842247, + 0.038649227, + 0.013038445, + -0.0077033904, + -0.010430756, + 0.013491956, + -0.1592328, + 0.028697176, + 0.008434047, + -0.0030926939, + -0.0134793585, + 0.009347368, + 0.013605334, + 0.02642962, + -0.008837168, + 0.032350462, + 0.004818556, + -0.009844971, + -0.032677997, + -0.014096637, + -0.0033635409, + 0.0145501485, + 0.001466825, + -0.017901093, + 0.013328188, + 0.0065759113, + 0.0076530003, + -0.02137801, + 0.0031383599, + 0.002872237, + 0.0076530003, + -0.004862647, + -0.025069088, + 0.032224484, + 0.00449102, + -0.0141848205, + -0.005398042, + -0.010241793, + -0.0057791173, + 0.021264633, + 0.0012723507, + 0.008049822, + 0.00836476, + 0.0008582068, + -0.008018329, + 0.009844971, + -0.0030706483, + 0.026706766, + -0.0039934176, + -0.0032170946, + -0.0145501485, + 0.007287672, + 0.017674336, + 0.022763738, + 0.007230983, + -0.018102651, + 0.019123053, + -0.0362305, + -0.018770322, + -0.00801203, + 0.023506993, + 0.0156209385, + 0.016981471, + 0.0034769187, + -0.0027210668, + 0.0010109519, + -0.008226188, + -0.031015122, + -0.0029509717, + 0.0022329125, + 0.0034611716, + -0.0031115902, + 0.0064940276, + -0.00267855, + -0.014159625, + 0.010682707, + -0.008427748, + -0.011942459, + 0.003892637, + -0.026958717, + 0.006827862, + 0.019979684, + -0.015646134, + -0.0035115618, + -0.005375996, + -0.0038453965, + 0.009511136, + 0.038649227, + -0.003810753, + -0.0008645056, + -0.007955341, + -0.0002421088, + -0.013542346, + -0.00852223, + -0.009611917, + -0.013958065, + 0.007344361, + -0.034265283, + 0.012282593, + -0.024716357, + 0.02995693, + 0.009215094, + -0.012874677, + -0.00006579258, + 0.0010204001, + -0.015847694, + -0.010928358, + -0.016616143, + -0.029553808, + 0.0199041, + 0.020395404, + 0.031065512, + -0.010871669, + 0.0122448, + 0.037011545, + 0.008106511, + -0.025648573, + 0.038548447, + 0.016061852, + 0.024766747, + 0.02587533, + 0.01388248, + -0.006525521, + -0.03628089, + -0.0027761809, + -0.006153894, + 0.051498707, + 0.0014660377, + -0.020370208, + 0.022310227, + -0.0033698396, + -0.0075144274, + -0.091004565, + -0.0043807914, + 0.008282877, + 0.015066647, + 0.005675188, + 0.02535883, + 0.014046247, + 0.02990654, + 0.009366265, + 0.030863952, + -0.008465541, + -0.004097347, + -0.004506767, + 0.00026139876, + 0.0014148602, + -0.009933153, + -0.002760434, + -0.02811769, + -0.031720582, + 0.012446361, + -0.003530458, + -0.015835097, + 0.006408994, + -0.0113251805, + 0.0013644701, + -0.02316686, + -0.03403853, + 0.014298198, + 0.014701319, + 0.0149028795, + 0.013000652, + -0.0152682075, + -0.009970946, + -0.00893165, + -0.036406863, + -0.0017069655, + -0.0073506595, + -0.007476635, + 0.009555227, + -0.034013335, + 0.0052941125, + 0.0152808055, + 0.003480068, + -0.043663044, + -0.0010770889, + 0.023506993, + -0.019400198, + 0.00076490635, + -0.00091489573, + -0.012414867, + 0.009189899, + 0.017409788, + 0.00028009823, + -0.016213022, + 0.03383697, + -0.011312583, + 0.019979684, + 0.024628174, + -0.019790722, + 0.0028942828, + 0.0034737692, + 0.034819577, + 0.0028753865, + 0.035499845, + 0.0007987622, + -0.013743906, + -0.027487813, + 0.0059460346, + 0.025736757, + -0.041874193, + -0.005627947, + 0.017737323, + -0.028873542, + -0.00052988366, + -0.012540842, + 0.00081883953, + -0.027538203, + 0.0042422186, + 0.009630812, + -0.0022029933, + -0.020760732, + -0.027613789, + -0.012269995, + -0.020697745, + 0.00076254434, + 0.028445225, + -0.02771457, + -0.009265484, + 0.020382805, + -0.022310227, + -0.014260406, + 0.044620454, + 0.011375571, + -0.020458391, + 0.0030533266, + 0.020937096, + 0.0009463895, + 0.00786086, + 0.010235494, + -0.015331196, + -0.014310796, + -0.003240715, + -0.055882648, + 0.010493743, + -0.012679415, + -0.03892637, + 0.0028643636, + 0.013504554, + -0.0072435807, + -0.017258618, + -0.014096637, + -0.007760079, + 0.00093457935, + 0.011470052, + -0.01010322, + -0.0056877853, + -0.009164704, + 0.0109472545, + 0.020370208, + 0.0039052346, + 0.023381017, + -0.0029525463, + -0.014877684, + 0.011388169, + -0.0030486025, + 0.007067215, + -0.02786574, + 0.016981471, + -0.03388736, + -0.027588593, + -0.019375004, + -0.021466194, + 0.015646134, + -0.01393287, + 0.01577211, + 0.036961157, + -0.021264633, + -0.020420598, + -0.009372563, + 0.037717007, + 0.01515483, + -0.027790153, + -0.004122542, + -0.029982124, + 0.017598752, + -0.015381586, + 0.0015573698, + 0.022562178, + -0.0138320895, + -0.0029871897, + 0.015217817, + -0.0074640373, + 0.022184253, + 0.028747566, + 0.00898204, + -0.0044815717, + -0.009706398, + -0.019072663, + 0.0209245, + -0.0039430275, + 0.010468548, + -0.036961157, + 0.006062562, + 0.0047083274, + 0.0042422186, + 0.023305433, + 0.007199489, + 0.0023714853, + -0.0018282167, + -0.010159909, + -0.0015400482, + -0.010657512, + -0.001678621, + -0.0000913321, + 0.04179861, + -0.007873457, + 0.028394835, + 0.0011172435, + 0.0021951199, + -0.003204497, + -0.0053445026, + 0.028571201, + -0.00075742655, + -0.012377074, + -0.03134266, + 0.0079175485, + 0.037893374, + 0.012925067, + -0.02612728, + 0.0004409136, + 0.004903589, + 0.00083616114, + -0.024149468, + -0.0032060717, + -0.016855497, + -0.0062231803, + 0.003933579, + -0.008018329, + -0.0077537806, + -0.01316442, + 0.014474563, + 0.047366716, + 0.011929862, + -0.0039682225, + -0.003703674, + -0.040992368, + -0.01204324, + 0.008673401, + -0.007363257, + -0.01776252, + -0.00444063, + 0.010751992, + 0.0039871186, + -0.0008456093, + -0.021503985, + 0.018719932, + 0.002780905, + -0.0031304865, + -0.0469384, + -0.027084691, + -0.023028286, + 0.022612568, + 0.0064215916, + 0.000785771, + 0.0042926087, + 0.009164704, + 0.021000085, + 0.02127723, + 0.042226925, + -0.030612001, + -0.0038642928, + 0.031594608, + 0.0131014325, + 0.0014691871, + 0.0037918568, + -0.008874961, + -0.010015037, + -0.009063924, + -0.008679699, + 0.028042104, + -0.0011077954, + 0.06092166, + -0.00021376436, + -0.015646134, + 0.021844119, + 0.0013479359, + 0.006802667, + 0.032627605, + -0.01565873, + -0.012975457, + -0.018140445, + -0.0055492125, + 0.0007235707, + 0.021390608, + 0.005990126, + -0.017636543, + -0.0016723223, + -0.022587374, + 0.03204812, + -0.035852574, + -0.009555227, + 0.01076459, + -0.0109598525, + 0.0022833026, + 0.010997645, + -0.021806326, + -0.0046106963, + -0.004821705, + 0.0018770321, + -0.0022896014, + -0.01005283, + 0.028596396, + -0.018820712, + -0.020659951, + -0.00760261, + 0.008849766, + -0.03388736, + -0.021894509, + -0.020067867, + 0.00003907203, + 0.012610129, + 0.0071868915, + 0.01672952, + -0.019992283, + -0.022751141, + -0.01153304, + -0.0073947506, + -0.014373783, + -0.006169641, + -0.020496184 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 6, + "total_tokens": 6 + } +} +610 1664 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 408 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the desk?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 839 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:44 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 453 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999925 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_c6d0c31912e54f18b7fc92ade575cece + +{ + "id": "chatcmpl-ERDYNXYKFkdyW1AYPTGPohMXVJrvz", + "object": "chat.completion", + "created": 1790155663, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The color of the desk is orange.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 72, + "completion_tokens": 8, + "total_tokens": 80, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} diff --git a/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilterNotSelected.httprr b/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilterNotSelected.httprr new file mode 100644 index 000000000..2c9373995 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilterNotSelected.httprr @@ -0,0 +1,9416 @@ +httprr trace v1 +492 168033 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 296 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["The color of the lamp beside the desk is black.","The color of the lamp beside the desk is blue.","The color of the lamp beside the desk is orange.","The color of the lamp beside the desk is purple.","The color of the lamp beside the desk is yellow."]}HTTP/2.0 200 OK +Content-Length: 167076 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:43:15 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 109 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-rnb7h +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999941 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_8b50bc6891954abfbaf484bf4dde29dd + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01577385, + -0.0072296807, + 0.0065341513, + -0.021912377, + -0.006553294, + 0.0037105556, + -0.01824968, + -0.033232283, + 0.011862292, + -0.017496722, + 0.019436548, + 0.009731036, + -0.0045847534, + -0.0013471901, + -0.016896907, + -0.00010548602, + 0.03307914, + 0.011607052, + 0.026468417, + -0.016514046, + -0.022308, + 0.018185869, + -0.008920648, + 0.011626194, + -0.020878654, + -0.010196849, + 0.008014545, + -0.016654428, + 0.0024199968, + 0.015505847, + 0.010509518, + -0.018236918, + 0.012238772, + -0.025102882, + -0.035759162, + 0.015595181, + 0.0045209434, + -0.0034936012, + 0.017062813, + -0.018619778, + -0.0006265351, + 0.009845894, + 0.0032798375, + -0.007835876, + -0.008984458, + 0.012130294, + 0.019538643, + 0.0072871097, + -0.017586054, + 0.011638957, + 0.003598888, + 0.019181307, + -0.018096536, + -0.018734636, + 0.011192286, + -0.035248682, + 0.0039466526, + 0.017675389, + 0.0057237633, + -0.008180451, + -0.0126024885, + -0.016922431, + 0.0041348925, + -0.014050977, + 0.004409276, + -0.000938008, + -0.009539605, + 0.004303989, + 0.00019840944, + 0.0054972377, + 0.021325326, + 0.038005278, + 0.006368245, + 0.019359974, + 0.025077358, + 0.009265222, + -0.013770213, + 0.023418296, + -0.004466705, + -0.0031474316, + 0.0009906513, + -0.008735598, + -0.03073093, + -0.0048080888, + 0.0144338375, + -0.0017388244, + -0.009628939, + 0.00431037, + -0.034993444, + -0.0030772407, + -0.011262477, + 0.03073093, + 0.026596038, + -0.012111152, + 0.00066123187, + 0.014803936, + 0.011313525, + 0.029709969, + 0.015735563, + -0.035350777, + 0.014931556, + 0.004524134, + -0.042446457, + 0.0029831207, + -0.024745544, + -0.02059789, + 0.0024790212, + 0.003978558, + 0.026162129, + -0.020559605, + -0.022256952, + 0.023903253, + 0.046683446, + -0.023035435, + -0.0019318499, + -0.021044562, + 0.012870491, + -0.028306147, + -0.017981678, + -0.006052385, + 0.0065245796, + 0.051175676, + 0.01799444, + -0.015225083, + 0.037060887, + -0.0001232332, + -0.008914267, + -0.028969772, + -0.0042178454, + 0.015684515, + -0.0063395305, + 0.01730529, + 0.0020706367, + 0.01350221, + 0.007274348, + -0.0010265445, + -0.0144338375, + 0.02731071, + -0.005950289, + -0.019411024, + 0.010815807, + 0.032313418, + -0.016067376, + 0.0039307005, + -0.006546913, + 0.034993444, + 0.015978042, + -0.003972177, + -0.020380937, + -0.005615286, + 0.0032479325, + -0.011256096, + 0.003187313, + -0.0035765544, + 0.015416513, + 0.0052515687, + -0.0071722516, + 0.005302617, + -0.027234137, + 0.001990874, + -0.019436548, + -0.006451198, + 0.030143877, + -0.011875054, + 0.04354399, + 0.027872238, + 0.0016104067, + -0.002837953, + -0.016258806, + -0.002268448, + 0.0006664164, + 0.025166692, + -0.012985349, + 0.032313418, + -0.017586054, + 0.0121941045, + 0.0077848285, + -0.0018106108, + -0.016360901, + 0.004367799, + -0.02491145, + -0.003314933, + 0.016207758, + 0.004587944, + 0.006033242, + -0.00506971, + 0.02547298, + -0.008646265, + 0.014880508, + -0.004852756, + 0.023801155, + 0.025945174, + -0.02160609, + -0.033538572, + -0.68118525, + -0.043952376, + 0.020074647, + -0.0036339834, + 0.0017978487, + 0.02464345, + 0.0067192004, + 0.015442037, + 0.0057173823, + -0.01629709, + 0.011811243, + 0.005442999, + 0.011077428, + -0.013566021, + -0.0060491944, + -0.02243562, + -0.0033851243, + 0.022205904, + -0.002155185, + -0.015480323, + 0.0005595345, + 0.0069297734, + -0.017649865, + -0.011696386, + 0.021963425, + 0.009029125, + 0.017445672, + -0.00071148225, + -0.017394625, + -0.0018536826, + -0.016845858, + 0.015122986, + -0.020827606, + -0.013023635, + 0.04696421, + -0.011415621, + -0.007070156, + 0.024758307, + 0.008799409, + 0.026417369, + -0.009635321, + -0.0017547769, + 0.01204096, + -0.030935122, + -0.013808499, + 0.010694568, + 0.015071939, + -0.006680914, + 0.0321858, + 0.0014157859, + 0.019500358, + -0.03187951, + 0.0051048053, + 0.00994799, + 0.007893305, + 0.0015099058, + 0.04234436, + 0.00076292915, + 0.0009435914, + 0.007210538, + 0.007133966, + 0.0022174, + -0.004664516, + -0.016194995, + -0.016628904, + -0.0009108887, + -0.038209468, + -0.015850421, + -0.018415585, + -0.00071227987, + -0.0053377124, + 0.0041859406, + -0.015850421, + 0.02382668, + 0.02027884, + -0.005152663, + 0.030756453, + -0.009029125, + 0.00024207945, + -0.0021583757, + 0.011141238, + -0.014446599, + -0.03111379, + -0.017318053, + 0.029633395, + -0.021695424, + -0.016246043, + -0.025421932, + 0.016105661, + -0.0045751818, + 0.025000785, + -0.0013774999, + -0.016105661, + -0.0081357835, + -0.013795737, + 0.03614202, + 0.002204638, + 0.0030086448, + 0.0034457438, + 0.0059470986, + -0.0026305702, + -0.015978042, + -0.0045177527, + -0.0000015173586, + 0.026264224, + -0.012213247, + -0.027361758, + 0.028408242, + 0.0111795245, + -0.015926993, + 0.025077358, + -0.0111795245, + -0.009916085, + 0.017662628, + 0.011989912, + -0.027846714, + 0.04821489, + 0.0024247826, + 0.018709112, + -0.008678169, + 0.0065915803, + 0.024822118, + -0.009156745, + -0.008295309, + -0.0017834915, + -0.013195923, + -0.008907885, + -0.012442963, + -0.044207618, + 0.0014556672, + 0.0031649794, + 0.009750179, + 0.01679481, + 0.006757486, + 0.008646265, + 0.0035574113, + 0.010949808, + -0.021618852, + 0.024439257, + -0.005797145, + -0.011332668, + -0.0010289374, + -0.026008984, + 0.013578783, + 0.0033978862, + -0.034253243, + -0.03461058, + -0.006119386, + -0.012328105, + 0.015352703, + -0.023813918, + -0.012315343, + -0.039255954, + 0.009903323, + 0.015620705, + -0.016526807, + -0.02211657, + -0.005430237, + -0.013285256, + 0.029837588, + 0.016628904, + 0.0011182715, + 0.001812206, + -0.0007577446, + -0.0104329465, + -0.0216699, + -0.008295309, + 0.0413234, + -0.0007465778, + -0.026442893, + -0.021133894, + 0.0010066038, + -0.0039275098, + -0.008212356, + -0.015161272, + -0.019972552, + -0.0062629585, + -0.015071939, + 0.0034010767, + -0.009437509, + 0.01850492, + 0.017164908, + 0.009986276, + -0.017407387, + 0.04739812, + 0.006999965, + 0.016501283, + 0.0028507148, + 0.0015226678, + -0.0018473015, + -0.012525917, + -0.010254278, + 0.002959192, + -0.0092779845, + 0.009928847, + 0.012149437, + 0.010656281, + 0.011211429, + 0.0023817108, + -0.0021950663, + 0.00944389, + -0.011351812, + 0.017535007, + -0.014280694, + 0.00602048, + -0.026876802, + 0.017905105, + -0.010694568, + 0.0005623262, + 0.026442893, + 0.004367799, + -0.023979824, + -0.0032096466, + -0.007574255, + 0.016143948, + -0.00589286, + -0.024311636, + 0.002935263, + 0.0020339459, + -0.0123344865, + 0.0011836768, + 0.014791174, + 0.023520391, + -0.014076501, + -0.0037616035, + 0.0016383235, + 0.032338943, + 0.01761158, + -0.0070254887, + -0.018173108, + -0.023035435, + -0.005101615, + -0.012034579, + 0.010700949, + -0.032543134, + -0.006077909, + 0.0056408104, + -0.0320837, + 0.022308, + 0.011938864, + -0.011319906, + 0.03517211, + 0.025613362, + 0.0048878514, + 0.0039370814, + -0.0013487854, + 0.016335377, + 0.011709148, + -0.017854057, + 0.006617104, + -0.012525917, + 0.009424747, + -0.0034010767, + 0.015658991, + 0.039255954, + -0.0083655, + 0.036780123, + 0.0015936565, + 0.017101098, + 0.023405533, + -0.026085556, + -0.0063714352, + 0.0058450024, + -0.0057684304, + 0.013049159, + -0.0009427938, + -0.0054717134, + -0.0018058249, + 0.0050984244, + -0.009386461, + -0.017420148, + -0.0018329442, + 0.02876558, + -0.007299872, + 0.02674918, + -0.010471232, + -0.0052707116, + -0.004361418, + 0.0308075, + 0.011422003, + -0.008097498, + -0.026111081, + 0.014816698, + -0.0011900578, + -0.0047729933, + -0.030118352, + -0.023048198, + 0.0177392, + -0.0006349102, + 0.009979894, + 0.008378262, + 0.009533225, + 0.029199488, + -0.0060842903, + 0.0076189223, + -0.02579203, + 0.0057716207, + 0.007880543, + 0.01660338, + 0.002325877, + -0.004568801, + -0.018275203, + -0.032134753, + -0.015875945, + 0.011824006, + 0.009845894, + -0.006744724, + 0.008422929, + -0.01013942, + -0.028740056, + -0.011492194, + -0.0005914396, + 0.00079363777, + -0.013770213, + -0.005430237, + -0.002332258, + -0.029250536, + 0.004530515, + 0.034431912, + 0.020802082, + 0.005232426, + -0.010113896, + -0.012034579, + -0.00880579, + 0.077235706, + 0.0249625, + 0.008052831, + 0.010094753, + -0.002775738, + -0.011562385, + -0.028586911, + 0.011983531, + -0.01324697, + -0.0065915803, + 0.01660338, + -0.026060032, + 0.001767539, + 0.004485848, + 0.005165425, + -0.006680914, + 0.0071148225, + -0.0013128922, + 0.033793814, + -0.020138457, + 0.0061321477, + 0.0017563722, + -0.0140254535, + 0.0123344865, + 0.0037296985, + -0.006483103, + 0.007529588, + -0.010228754, + 0.015710039, + -0.011568765, + 0.00899722, + 0.009737416, + -0.007567874, + -0.006572437, + -0.017573293, + 0.0024471162, + -0.0017946583, + 0.0056248577, + 0.010145801, + -0.014650792, + 0.03606545, + 0.004460324, + 0.012787538, + -0.0068851067, + -0.02142742, + 0.007076537, + -0.014012692, + 0.020546842, + -0.011989912, + -0.018173108, + 0.026315272, + 0.007357301, + -0.015263368, + 0.0059215743, + 0.010720092, + 0.0035893165, + -0.010956189, + -0.01807101, + -0.007861401, + 0.00093880564, + 0.000978687, + -0.007331777, + 0.0024423304, + -0.005494047, + -0.015033652, + -0.008659027, + 0.0038636997, + -0.0031043598, + -0.017981678, + -0.0034616962, + 0.014625268, + -0.012659918, + -0.021874093, + 0.0079954015, + 0.027285187, + 0.008544168, + 0.017624341, + -0.024311636, + -0.01781577, + 0.041655213, + -0.0004343073, + -0.0077401614, + -0.0038668902, + -0.0029879066, + -0.0070382506, + 0.0010345208, + 0.025957936, + -0.023494868, + -0.014408314, + -0.010560567, + 0.03236447, + -0.0018935638, + 0.013068303, + -0.005293045, + -0.013770213, + -0.010343612, + 0.029607872, + 0.0084612155, + -0.009679987, + 0.005293045, + 0.003605269, + -0.024783831, + -0.00066163065, + -0.015442037, + 0.015799373, + 0.01425517, + 0.02851034, + 0.0034553153, + -0.017968915, + 0.013195923, + 0.0070127267, + -0.009450272, + -0.012557821, + -0.0038987952, + 0.004734707, + 0.0068276776, + -0.006065147, + 0.014357266, + -0.008722836, + -0.027157566, + -0.0015202749, + -0.040838443, + 0.027157566, + 0.0017005383, + 0.010675425, + 0.0017101099, + 0.027616998, + -0.005755668, + -0.013259732, + 0.013323543, + -0.009131221, + 0.020648938, + -0.010649901, + -0.017330814, + -0.033946957, + -0.025485741, + 0.033538572, + 0.0022923767, + -0.01604185, + -0.0048814705, + 0.011626194, + 0.012762014, + 0.009839512, + 0.0026911898, + -0.03529973, + -0.023035435, + -0.0055801906, + 0.0040072724, + -0.007070156, + 0.016935192, + -0.00957151, + 0.0055546667, + -0.009456652, + 0.011071047, + -0.001292154, + -0.012666299, + -0.031905036, + -0.025562314, + 0.03047569, + 0.016743762, + 0.017356338, + -0.0026401416, + 0.0038828426, + 0.0016718238, + -0.005666334, + 0.0028826199, + -0.00893341, + 0.0018361347, + -0.030118352, + 0.014497648, + 0.0138850715, + -0.0028491195, + 0.023941537, + -0.005545095, + 0.012436583, + 0.013400114, + -0.0042306078, + -0.00003614242, + -0.026442893, + -0.027412806, + 0.007638065, + -0.0001354967, + -0.0076827323, + -0.0018808017, + -0.0001483584, + -0.018594254, + 0.01754777, + 0.0029225012, + -0.008008163, + 0.0037616035, + 0.03338543, + -0.0009826751, + 0.034304295, + -0.0045528486, + -0.002211019, + -0.0052770926, + -0.026902325, + -0.0035223158, + 0.013463925, + 0.0068787253, + 0.007236062, + 0.005570619, + 0.011906959, + -0.024860403, + 0.01577385, + 0.01286411, + 0.03149665, + 0.008537787, + -0.009207793, + -0.01976836, + -0.031011693, + -0.036014404, + -0.03662698, + -0.03226237, + 0.013336305, + 0.0022317572, + -0.031598747, + 0.021542279, + -0.008225118, + -0.020457508, + 0.008040069, + 0.011530479, + 0.029122915, + 0.0008414953, + 0.008907885, + 0.02160609, + -0.008595216, + -0.008659027, + 0.008320833, + -0.011402859, + -0.0067766295, + 0.019270642, + 0.019500358, + -0.020227792, + 0.024809355, + 0.012723728, + 0.011760196, + 0.022091046, + -0.009373699, + -0.0033532192, + -0.005289855, + 0.010777521, + -0.020776559, + 0.011868672, + -0.026136605, + 0.005848193, + -0.037290603, + 0.0022923767, + -0.0024168063, + -0.010420185, + -0.014663554, + -0.0056535723, + -0.03338543, + 0.015327179, + 0.021631613, + 0.008391025, + 0.006250196, + -0.0068978686, + -0.008384643, + -0.0032176226, + -0.010483994, + 0.032721803, + 0.00030868122, + 0.0015354297, + 0.006476722, + -0.00128338, + -0.010196849, + -0.008257023, + -0.003212837, + 0.025370883, + -0.0034489343, + -0.0022174, + -0.024132969, + 0.008148545, + 0.038617853, + -0.01653957, + -0.0007577446, + -0.002136042, + -0.0054334276, + 0.0027214994, + 0.006680914, + 0.0018345395, + -0.015199559, + 0.018607017, + -0.024069158, + -0.012245152, + -0.028050907, + -0.0036084594, + 0.008193213, + -0.015607943, + -0.005248378, + -0.028050907, + 0.014982604, + 0.00004454242, + -0.0038381757, + -0.017394625, + 0.031037217, + 0.005107996, + -0.018594254, + 0.01939826, + 0.00013669314, + 0.015901469, + 0.002268448, + 0.014318979, + 0.004240179, + -0.02515393, + 0.030654358, + 0.0021583757, + -0.03529973, + -0.027080994, + -0.008907885, + -0.0111795245, + 0.0012618441, + -0.005031424, + 0.009335414, + -0.0021902807, + 0.013157636, + -0.020636177, + 0.0005794752, + -0.005924765, + -0.026340798, + 0.018147584, + 0.020623414, + -0.020891417, + -0.017522246, + 0.0090099815, + -0.011173143, + 0.0013695236, + -0.027361758, + -0.008499501, + -0.012647156, + 0.01863254, + 0.013221446, + -0.01933445, + -0.0039434624, + -0.012321725, + -0.012423821, + 0.0033276952, + -0.0021934712, + 0.014370028, + -0.0026991658, + -0.0012474868, + -0.024579639, + 0.0142934555, + -0.021465708, + 0.013936119, + 0.0016135972, + -0.019755598, + -0.017968915, + -0.002136042, + 0.0042050835, + -0.004594325, + -0.004811279, + -0.030424641, + -0.018351777, + 0.0027023565, + -0.003225599, + -0.0027932858, + 0.0017850867, + 0.0081357835, + 0.018262442, + -0.0056535723, + -0.015480323, + 0.020546842, + 0.0007437861, + -0.0015936565, + -0.018045487, + -0.017841296, + -0.008403786, + -0.009297127, + 0.013936119, + 0.0038892238, + 0.004556039, + -0.008327214, + 0.026442893, + -0.016922431, + 0.004916566, + -0.004125321, + -0.022997148, + -0.00071307755, + 0.02142742, + 0.0200236, + 0.031343505, + 0.010069229, + -0.008129403, + -0.02313753, + -0.005545095, + 0.009469414, + 0.037111938, + -0.012513154, + 0.0149698425, + 0.009431128, + -0.01033085, + 0.0013926547, + -0.03098617, + 0.0075423503, + 0.011683623, + 0.021312563, + 0.005596143, + -0.0074849213, + 0.011989912, + 0.028586911, + -0.0028507148, + -0.022780195, + -0.0014907627, + -0.005360046, + -0.03504449, + 0.0014046192, + 0.009533225, + -0.028740056, + 0.0076061604, + -0.023673536, + -0.004169988, + -0.02344382, + -0.007523207, + -0.024796592, + -0.00880579, + -0.03392143, + 0.028791104, + 0.024554115, + -0.009552367, + 0.0088696, + -0.028535863, + -0.0027470235, + -0.007006346, + -0.009156745, + -0.00969275, + -0.026570512, + -0.006623485, + -0.007861401, + 0.0006995179, + -0.031649794, + -0.005564238, + 0.006540532, + 0.0069170115, + 0.020368174, + 0.23420848, + 0.008754741, + -0.013591545, + 0.032134753, + -0.01812206, + 0.025077358, + 0.02376287, + -0.015875945, + 0.028484816, + 0.036652505, + -0.021657137, + 0.0006440829, + 0.00089174573, + -0.0018345395, + 0.011989912, + -0.013030016, + -0.03376829, + -0.002338639, + -0.0014357265, + -0.0090801725, + 0.01685862, + 0.002649713, + 0.009169507, + 0.00033121413, + 0.028995296, + 0.015697276, + -0.0069042495, + 0.0036116499, + 0.004476276, + 0.01178572, + -0.0012068079, + -0.018721875, + 0.004364609, + -0.0060619568, + 0.002522093, + -0.0029065486, + -0.0067383433, + 0.003219218, + 0.009386461, + 0.038617853, + 0.006058766, + 0.0062629585, + -0.024873165, + -0.008550549, + 0.004785755, + 0.00849312, + -0.015735563, + -0.0067383433, + 0.021950664, + 0.015046414, + -0.010152182, + -0.0061449097, + 0.044513904, + 0.023214104, + -0.011007237, + 0.021823043, + 0.033615146, + -0.011268858, + 0.025715457, + -0.010349994, + -0.0151102245, + 0.023673536, + -0.019883217, + 0.004594325, + 0.019155784, + -0.0015721206, + -0.015799373, + 0.0051399013, + 0.021912377, + -0.022780195, + 0.011332668, + 0.0024550925, + 0.0077146376, + 0.0018042297, + -0.0057173823, + -0.019653501, + 0.022716384, + -0.006128957, + 0.027897762, + 0.006508627, + -0.016360901, + -0.008129403, + -0.007644446, + 0.01799444, + -0.006700057, + -0.008914267, + -0.0018329442, + 0.015684515, + 0.022831243, + -0.0068659633, + 0.0041029872, + -0.0029575967, + 0.0016925621, + 0.010273421, + 0.030373594, + 0.022550479, + -0.005360046, + 0.007363682, + -0.026111081, + -0.000995437, + -0.034942392, + -0.035657067, + 0.004214655, + -0.017190432, + -0.00912484, + 0.007248824, + -0.0009746988, + 0.0015107034, + 0.033666193, + -0.0004159619, + 0.0040710825, + -0.011996293, + 0.0083335955, + -0.008308071, + 0.009003601, + -0.0061576716, + 0.013961643, + -0.013234208, + -0.017101098, + -0.018747399, + -0.0034648867, + -0.020687224, + 0.0017866819, + -0.006700057, + -0.000046710964, + -0.019857693, + -0.0027342616, + -0.0025045453, + 0.007261586, + -0.042778272, + 0.036473837, + -0.0046868497, + 0.02136361, + -0.00008260413, + -0.005417475, + 0.011906959, + 0.00017288541, + -0.0077210185, + -0.00047059925, + -0.008129403, + 0.001628752, + 0.0017404197, + 0.00988418, + -0.0052579497, + 0.0014756079, + -0.0066745332, + 0.005886479, + -0.02782119, + -0.02718309, + -0.024298875, + -0.025396409, + -0.010401041, + -0.009405605, + -0.0070573934, + 0.009354556, + 0.0030836216, + -0.021478469, + -0.008952552, + 0.00095156766, + 0.03111379, + -0.0113773355, + -0.0014588577, + 0.026468417, + -0.014803936, + 0.013310781, + 0.0030469308, + -0.16253701, + 0.024069158, + 0.014140312, + -0.014918794, + -0.0050473763, + -0.0026832134, + 0.016182235, + 0.020444747, + -0.020189505, + 0.028714532, + -0.0036403644, + 0.024630686, + -0.042446457, + -0.009137602, + -0.012557821, + 0.0009013172, + 0.00013061124, + -0.0009866632, + 0.017407387, + 0.0033564097, + 0.007491302, + -0.02091694, + 0.022767432, + 0.021057323, + 0.0151102245, + -0.0032559088, + -0.026315272, + 0.03256866, + 0.0074721593, + -0.007191395, + -0.0070191077, + -0.0034712679, + -0.00025763316, + 0.02491145, + 0.016488522, + -0.0026018557, + 0.0023242817, + 0.010547805, + -0.00024566878, + -0.010381898, + 0.002238138, + 0.028612435, + 0.009609796, + 0.012181343, + 0.001036116, + 0.02743833, + 0.029097391, + 0.02117218, + 0.0035510303, + -0.009597034, + 0.023265151, + -0.03338543, + -0.013425639, + -0.0078550195, + 0.022154856, + 0.020317126, + 0.016399188, + 0.009297127, + -0.00817407, + 0.009214174, + 0.00066721404, + -0.03864338, + -0.023456581, + 0.006377816, + 0.0010608424, + -0.0069808215, + 0.01083495, + 0.011906959, + -0.004473086, + 0.006052385, + -0.020508556, + -0.006259768, + -0.0058450024, + -0.02136361, + -0.006559675, + 0.0008973291, + -0.01159429, + -0.0026066413, + -0.0035382684, + -0.013183161, + 0.010318088, + 0.02249943, + -0.015008128, + -0.008786647, + -0.008844076, + 0.008927029, + 0.004903804, + 0.00823788, + -0.024235064, + -0.0005890467, + 0.023290675, + -0.036218595, + 0.0037296985, + -0.03946015, + 0.008971696, + 0.017343577, + 0.0015737158, + -0.011077428, + 0.007848638, + 0.012200485, + 0.00022393346, + 0.0013184756, + -0.023839442, + 0.00957151, + 0.030322544, + 0.018466635, + -0.012238772, + 0.0062151006, + 0.030450165, + -0.0040742727, + -0.01685862, + 0.022359049, + -0.0046964213, + 0.0067638676, + 0.022984387, + 0.010190468, + 0.013731927, + -0.02851034, + -0.0014429052, + 0.009597034, + 0.048878513, + -0.0061672432, + -0.0062852916, + 0.019500358, + -0.0023099245, + -0.030960646, + -0.099952094, + -0.013668117, + 0.01780301, + 0.020751035, + 0.013706403, + 0.02700442, + 0.004986757, + 0.0173691, + 0.0023418295, + 0.02414573, + 0.0021870902, + -0.022805719, + -0.019500358, + 0.0103627555, + 0.005315379, + -0.013463925, + 0.018594254, + -0.023022672, + -0.05063967, + 0.0037775561, + -0.003924319, + 0.0068532014, + -0.0034234102, + -0.016743762, + -0.005296236, + 0.0034457438, + -0.024184017, + 0.0058577643, + 0.01786682, + -0.0040327962, + 0.010662663, + -0.014791174, + 0.0041923216, + -0.0066681523, + -0.008665407, + -0.00039263134, + -0.0047602314, + 0.0012658322, + 0.027514901, + -0.030935122, + -0.0045975153, + 0.0022237808, + 0.015263368, + -0.032823898, + -0.004138083, + 0.010273421, + -0.00010468839, + 0.012296201, + 0.0042497506, + -0.019245116, + 0.006077909, + 0.020636177, + -0.034636106, + -0.009711892, + 0.04410552, + -0.029480252, + 0.011613432, + 0.01703729, + -0.027080994, + 0.021810282, + 0.0048176604, + 0.01703729, + 0.0013152851, + 0.029250536, + -0.02598346, + -0.016386425, + -0.049006134, + -0.008595216, + 0.023022672, + -0.031471126, + 0.0034776488, + 0.017535007, + -0.016156709, + -0.0040774634, + -0.019819407, + 0.019181307, + -0.025192216, + -0.013010873, + 0.00842931, + -0.012219628, + -0.026417369, + -0.020380937, + 0.0081357835, + -0.005666334, + -0.0074147303, + 0.029556824, + -0.021950664, + -0.008442072, + 0.025549551, + -0.002971954, + 0.0133490665, + 0.038617853, + 0.013285256, + -0.019525882, + -0.008614359, + 0.020967988, + 0.007331777, + 0.0028570958, + 0.019206831, + -0.018134821, + -0.019755598, + -0.0079252105, + -0.035886783, + 0.014778412, + -0.014791174, + -0.02445202, + -0.0118559105, + 0.013157636, + -0.011709148, + 0.0034680772, + -0.011543241, + -0.004476276, + -0.011224192, + -0.007344539, + -0.012634394, + -0.015978042, + -0.005369617, + 0.0027103326, + 0.016756523, + -0.001984493, + 0.011875054, + -0.009226936, + -0.007248824, + -0.0014915604, + 0.0003704972, + 0.008033688, + -0.033232283, + 0.0067192004, + -0.016462998, + -0.01906645, + -0.029454729, + -0.0020052313, + 0.024184017, + -0.02649394, + 0.011485812, + 0.026978897, + -0.018709112, + -0.03193056, + -0.012162199, + 0.021376373, + 0.008435691, + -0.020074647, + -0.02389049, + -0.022984387, + 0.017152147, + -0.0109817125, + -0.01976836, + 0.030781977, + -0.01260887, + -0.0076508275, + 0.002065851, + 0.012787538, + 0.01850492, + 0.017700912, + 0.0027645712, + -0.0052834735, + -0.01159429, + -0.008563311, + 0.029148439, + 0.012149437, + 0.0067766295, + -0.013821261, + 0.0063522924, + -0.0046868497, + 0.013476687, + 0.011664481, + -0.0032463372, + 0.018658064, + -0.005666334, + -0.0031266934, + -0.0043199416, + -0.023877729, + -0.01425517, + -0.0040264153, + 0.050792817, + 0.01634814, + 0.012564203, + -0.005950289, + -0.009654463, + -0.018262442, + -0.012015436, + 0.01703729, + 0.0048240414, + -0.0037233175, + -0.01236001, + -0.0010496756, + 0.027642522, + 0.023596963, + -0.053243123, + -0.008231499, + 0.018262442, + -0.0013639402, + -0.024809355, + 0.012755632, + -0.0038605093, + 0.008505883, + 0.0132086845, + 0.00033719634, + -0.001473215, + -0.006103433, + -0.0029496204, + 0.022333525, + 0.0062246723, + -0.017586054, + -0.007382825, + -0.03440639, + -0.010113896, + 0.024247827, + -0.0069425358, + -0.018339014, + -0.0144338375, + 0.018275203, + 0.009112078, + -0.014523172, + 0.0035382684, + 0.014114787, + -0.0070382506, + -0.0020291603, + -0.039434623, + -0.01013942, + -0.013527735, + 0.01362983, + 0.011492194, + 0.005190949, + 0.009099316, + -0.0032622898, + 0.021376373, + 0.010656281, + 0.02649394, + -0.038388137, + 0.018466635, + 0.007465778, + 0.0027613807, + 0.012876872, + -0.015352703, + 0.00228121, + -0.024120206, + -0.011996293, + -0.016360901, + 0.017956154, + 0.0031346697, + 0.0512012, + -0.008856838, + -0.031726368, + 0.033308856, + -0.024158493, + 0.0015027272, + 0.0121941045, + 0.0007314229, + -0.022831243, + -0.0118559105, + -0.0111795245, + 0.013706403, + 0.020176744, + -0.016590618, + -0.0045751818, + -0.00020319519, + -0.029812064, + 0.027463853, + -0.02807643, + -0.0013352257, + 0.028714532, + 0.002611427, + 0.011236954, + 0.015442037, + -0.018709112, + -0.019053686, + 0.014459361, + 0.026111081, + 0.0031665748, + -0.0010576519, + 0.019998075, + -0.008754741, + -0.022027235, + -0.011504956, + 0.0010209611, + -0.0361165, + -0.01596528, + -0.014459361, + -0.00003359999, + 0.014625268, + 0.0084612155, + 0.029888637, + -0.020036362, + -0.020100173, + 0.005685477, + -0.012781157, + -0.0077848285, + 0.007185014, + -0.006240625 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.014704813, + -0.00335014, + 0.0031199777, + -0.020868048, + -0.0131064635, + 0.017760856, + -0.019269697, + -0.005945859, + 0.021226078, + -0.0039063655, + 0.009244852, + 0.017019223, + -0.0045744753, + 0.011904505, + -0.02006248, + -0.011303525, + 0.030739453, + 0.004855785, + 0.023757864, + -0.020599525, + -0.035496138, + 0.02017756, + -0.0056134025, + -0.000521861, + -0.015484807, + -0.004484968, + 0.012678106, + -0.015484807, + 0.0038680052, + 0.017313318, + 0.009615669, + -0.008516004, + 0.0118149975, + -0.028463403, + -0.023259178, + 0.0046288194, + 0.005965039, + -0.0019148224, + 0.011667949, + -0.018361837, + 0.013490068, + 0.010255009, + 0.0030752239, + -0.009999272, + -0.008848461, + 0.011412214, + 0.031250924, + 0.009858618, + -0.0070774904, + 0.011667949, + 0.005418404, + 0.027619475, + -0.016367096, + -0.016929716, + 0.0065788054, + -0.036237773, + 0.004210052, + 0.012256142, + 0.0045201317, + -0.011584835, + -0.015497594, + -0.020663459, + 0.0026884235, + -0.0054727476, + -0.0028562502, + -0.004315543, + -0.011962046, + -0.0017741676, + 0.011572048, + 0.007825518, + 0.017198239, + 0.023553275, + 0.015740544, + 0.017236598, + 0.022031646, + 0.014154981, + -0.016073, + 0.0057125003, + -0.003143953, + -0.003561122, + -0.0027907176, + -0.012812368, + -0.029639788, + -0.014436291, + 0.011898112, + 0.0016910535, + -0.021584108, + 0.0019787564, + -0.044574764, + -0.018834947, + -0.0037049735, + 0.046058033, + 0.021942139, + -0.017671349, + -0.002370352, + 0.014909402, + 0.018400196, + 0.02576539, + 0.011987619, + -0.04255445, + 0.0041844784, + 0.01008878, + -0.043142643, + -0.00012626959, + -0.030918468, + -0.014397929, + 0.0036762033, + -0.0002581334, + 0.035342697, + -0.021520173, + -0.032836486, + 0.02070182, + 0.039869223, + -0.01886052, + -0.0051147174, + -0.013426133, + 0.0024614579, + -0.021750337, + -0.012882695, + 0.008963542, + 0.010574679, + 0.042810187, + 0.010740907, + -0.010191075, + 0.02301623, + 0.004699147, + -0.015152351, + -0.029767657, + -0.00046392085, + 0.015932346, + 0.009347146, + 0.020944769, + 0.014065473, + 0.016852994, + -0.01846413, + -0.0035355485, + -0.0120068, + 0.025675882, + -0.0003336554, + -0.013707443, + 0.007825518, + 0.031762395, + -0.020279855, + -0.0068153613, + -0.004791851, + 0.034217462, + 0.01822118, + -0.009385507, + -0.023463767, + -0.010932709, + 0.0023335898, + -0.01974281, + 0.0026980136, + 0.0018061346, + 0.010600252, + 0.015804477, + -0.016916929, + 0.0062367585, + -0.025074903, + 0.0014321209, + -0.023681141, + -0.00999288, + 0.037183996, + -0.01340056, + 0.036314495, + 0.022236234, + 0.0076465025, + 0.010325336, + -0.018118886, + 0.0036090726, + -0.008599119, + 0.04119905, + -0.023514913, + 0.030100113, + -0.0031199777, + 0.015050056, + -0.000012899178, + -0.0045489017, + -0.013247118, + 0.0052873394, + -0.033041075, + -0.0058915154, + 0.013023349, + 0.0066810995, + -0.0008655061, + -0.0074674874, + 0.015932346, + -0.0045233285, + 0.013170398, + -0.009085017, + 0.022146726, + 0.024103107, + -0.021110997, + -0.03163453, + -0.6796437, + -0.04685081, + 0.01985789, + -0.014154981, + 0.00011388238, + 0.024550645, + 0.008324203, + 0.02153296, + 0.0041940683, + -0.016482178, + 0.0072884723, + -0.00050707627, + 0.0075825686, + -0.006732247, + 0.0030752239, + -0.01985789, + 0.0010405254, + 0.01599628, + 0.0062399553, + -0.015587102, + 0.0023767452, + 0.0067130667, + -0.013119251, + -0.0077615837, + 0.02616178, + 0.0034300575, + 0.021622468, + 0.0030064948, + -0.012454337, + 0.0049133254, + -0.0011651965, + 0.017850364, + -0.010971069, + -0.005223405, + 0.044370174, + -0.0024246958, + -0.020484444, + 0.019691663, + 0.020318216, + 0.009826651, + -0.007135031, + -0.00907223, + 0.0044050505, + -0.022990655, + -0.009174525, + 0.015957918, + 0.021699188, + -0.0073204394, + 0.029281758, + 0.012754827, + 0.017773643, + -0.031404365, + 0.005159471, + 0.0076145357, + 0.020369362, + 0.0034428441, + 0.045188528, + 0.01238401, + -0.0025685471, + -0.002330393, + -0.0100248465, + 0.0020906408, + -0.012467124, + -0.012358436, + -0.018834947, + 0.004421034, + -0.039153162, + -0.026877841, + -0.013087284, + -0.0036282528, + 0.0041461177, + 0.014333996, + -0.01238401, + 0.028872581, + 0.008963542, + 0.00014654864, + 0.025893258, + -0.008758954, + 0.011162871, + 0.0017693726, + 0.022044433, + -0.018285114, + -0.023310324, + -0.016878568, + 0.033910576, + -0.009775504, + -0.018732652, + -0.02465294, + 0.02074018, + -0.010664186, + 0.029205037, + -0.0023959256, + -0.02476802, + -0.01786315, + -0.0047119334, + 0.038923, + -0.009008296, + 0.0029969048, + 0.013119251, + 0.0024854331, + -0.002242484, + -0.0023591635, + -0.0012259339, + -0.0011292337, + 0.034959093, + -0.0074163405, + -0.021954926, + 0.028284388, + 0.0066938866, + -0.023604421, + 0.030918468, + -0.015484807, + -0.011751063, + 0.010120748, + 0.0061856117, + -0.025637522, + 0.039587915, + 0.010683366, + 0.0049548824, + -0.0049452926, + 0.015881198, + 0.010357303, + -0.0033021895, + -0.0066810995, + -0.0031966984, + -0.002237689, + -0.01372023, + -0.017735284, + -0.02412868, + 0.0015815665, + -0.009775504, + 0.0070135565, + 0.021008702, + 0.006019383, + 0.005421601, + 0.0050699636, + 0.010229435, + -0.013643509, + 0.030662732, + -0.007262899, + -0.02077854, + 0.0027427673, + -0.030688304, + 0.0062591354, + -0.0037497273, + -0.023271965, + -0.035342697, + -0.0051722582, + -0.026110632, + 0.012626959, + -0.0104979575, + -0.011610408, + -0.022824427, + 0.026174568, + 0.012857121, + -0.0056102057, + -0.021954926, + 0.004462591, + -0.018515278, + 0.022619838, + 0.00637102, + 0.009046657, + 0.0038008743, + 0.005268159, + -0.0084712505, + -0.023757864, + -0.0061312676, + 0.029179463, + -0.009506981, + -0.030560438, + -0.0048813587, + 0.0047215237, + -0.006764214, + -0.0074035535, + -0.024793593, + -0.01144418, + -0.01834905, + -0.024307694, + 0.018310688, + -0.021596896, + 0.019410353, + 0.028207667, + 0.013298266, + -0.023195244, + 0.041736096, + 0.012249748, + 0.027414886, + 0.013707443, + 0.009238458, + 0.00091105903, + -0.005386437, + 0.00117159, + -0.0058659418, + -0.00036342465, + 0.0155615285, + 0.009104197, + 0.005757254, + 0.011776637, + 0.017402826, + -0.0031071908, + 0.017044796, + -0.008765347, + 0.017453974, + -0.013195971, + -0.0048525883, + -0.04526525, + 0.02409032, + -0.006770607, + -0.012332862, + 0.024422776, + -0.0021178126, + -0.024857527, + -0.0081515815, + -0.010184681, + 0.017441187, + -0.0067578205, + -0.017032009, + 0.0055143046, + -0.003941529, + -0.013221545, + 0.003634646, + 0.007441914, + 0.027389312, + -0.0046064425, + -0.003922349, + 0.0062942994, + 0.030892894, + 0.017287746, + -0.018758226, + -0.008349776, + -0.019627728, + -0.0034620245, + -0.02416704, + 0.018476916, + -0.032683045, + -0.0032478457, + 0.0018844537, + -0.03449877, + 0.021149358, + 0.013860884, + 0.0056901234, + 0.037337437, + 0.0208169, + -0.0062495456, + 0.009475014, + 0.008503218, + 0.011098937, + 0.009737143, + -0.015293005, + 0.013426133, + -0.023834584, + 0.00076321175, + -0.0031519446, + 0.013413346, + 0.023425406, + -0.0045457054, + 0.033347957, + 0.0041525112, + 0.019972973, + 0.008528791, + -0.011699916, + -0.004497755, + 0.00052785483, + -0.001918019, + 0.008285843, + 0.0036410396, + -0.01040845, + -0.005619796, + -0.0043922635, + -0.028182093, + -0.017760856, + 0.007831912, + 0.027466033, + -0.0066938866, + 0.027108002, + -0.020599525, + -0.002677235, + -0.004699147, + 0.02113657, + 0.010792054, + -0.008381743, + -0.040457416, + 0.018476916, + -0.01375859, + -0.0012571017, + -0.02160968, + -0.031123057, + 0.022965081, + 0.0020442887, + 0.006489298, + 0.010478778, + 0.0066299527, + 0.020573951, + -0.0038903821, + 0.008503218, + -0.043526247, + 0.0037017767, + 0.011169264, + 0.022338528, + 0.0036730065, + 0.0025797356, + -0.013937606, + -0.024857527, + -0.011175658, + 0.0033693202, + 0.0095261615, + 0.002087444, + 0.0060129897, + -0.0077743707, + -0.035905316, + -0.009781897, + -0.00022336931, + 0.005440781, + -0.022594264, + -0.008420104, + 0.006243152, + -0.030560438, + -0.007767977, + 0.027824063, + 0.01586841, + -0.0028354714, + -0.012665319, + -0.018643145, + 0.0037081703, + 0.07805059, + 0.008560758, + 0.0046032458, + 0.0037784975, + 0.005885122, + -0.020637885, + -0.02501097, + 0.014346783, + -0.0100120595, + 0.0013170397, + 0.010542711, + -0.020970343, + 0.018093314, + 0.0071797846, + -0.008599119, + 0.0011635983, + 0.013029743, + 0.008848461, + 0.03749088, + -0.0362122, + 0.0004375481, + 0.010932709, + -0.0068409345, + 0.005140291, + 0.0013857688, + -0.007441914, + 0.017415613, + 0.0005182647, + 0.021430666, + -0.0036186627, + 0.0066171656, + 0.013694656, + -0.015676608, + -0.018911667, + -0.010587465, + -0.011335493, + -0.008407317, + 0.008209121, + 0.0010181485, + -0.010523532, + 0.03654466, + 0.011188445, + 0.013771377, + -0.010127141, + -0.0155615285, + 0.013349413, + -0.010939102, + 0.029358478, + -0.009980093, + -0.011514508, + 0.024218187, + -0.0019212158, + -0.0070135565, + 0.003541942, + 0.01100943, + 0.01663562, + -0.0028754303, + -0.013796951, + 0.0013418142, + -0.015203497, + 0.002782726, + -0.00572209, + -0.0034108772, + -0.0029057988, + -0.021980498, + -0.01274204, + 0.0051498814, + 0.0027587507, + -0.020088052, + -0.007026343, + 0.00835617, + -0.009225672, + -0.018003806, + -0.0023495734, + 0.029716508, + 0.015855623, + 0.004980456, + -0.010836808, + -0.016878568, + 0.03728629, + -0.00025753403, + -0.0056933197, + 0.00097339466, + 0.003657023, + -0.0049037356, + 0.0013234331, + 0.027389312, + -0.018950028, + -0.018233968, + -0.0019611744, + 0.0366981, + -0.008049287, + 0.026391942, + -0.009302393, + -0.0068217544, + -0.0020586739, + 0.014513011, + 0.007333226, + -0.01372023, + 0.0039894795, + 0.0065979855, + -0.03222272, + -0.018297901, + -0.015050056, + 0.0022840411, + 0.020331003, + 0.02576539, + -0.0012283314, + -0.028821433, + 0.0036602197, + 0.0125502385, + -0.0049484894, + -0.0054567643, + -0.007365193, + 0.010632219, + 0.008663053, + -0.0072053582, + 0.013912031, + -0.0073204394, + -0.029946672, + 0.014960549, + -0.04240101, + 0.030739453, + -0.0016383079, + -0.0023831388, + -0.0060897106, + 0.028207667, + -0.011252378, + -0.012575812, + 0.014193341, + -0.000002981296, + 0.010619433, + -0.018809374, + -0.0132726915, + -0.035189256, + -0.028565697, + 0.03792563, + 0.009168131, + -0.027645048, + -0.007314046, + 0.0015767715, + 0.016776273, + 0.007262899, + 0.014116621, + -0.024384417, + -0.019883465, + 0.0048110313, + 0.0020810508, + -0.008925182, + 0.021916565, + 0.0016239228, + -0.0060801203, + -0.01372023, + 0.010855988, + 0.003816858, + -0.015702182, + -0.023080163, + -0.029153889, + 0.020727392, + 0.0122881085, + 0.011942865, + -0.007838304, + 0.0070455233, + -0.0044370173, + -0.009264032, + -0.0007488266, + -0.001253905, + 0.00003091807, + -0.027261445, + 0.014794321, + 0.009155344, + 0.0069943764, + 0.018886095, + -0.0043730834, + 0.0052521755, + 0.022837214, + -0.0029377658, + -0.010453204, + -0.020906407, + -0.029997818, + -0.0010405254, + -0.003116781, + -0.012582205, + -0.013221545, + 0.0055526653, + -0.0142572755, + 0.017300531, + 0.0052649626, + -0.0019036339, + 0.0064797075, + 0.03984365, + -0.008253875, + 0.04127577, + -0.009302393, + -0.0030960024, + -0.012077127, + -0.014103834, + -0.005789221, + 0.00941108, + 0.004440214, + 0.013285479, + 0.013963179, + -0.010504351, + -0.02324639, + 0.006604379, + 0.0086374795, + 0.024691299, + 0.0076017487, + -0.0118149975, + -0.0070135565, + -0.012096307, + -0.023156883, + -0.029588642, + -0.03526598, + 0.010459597, + -0.00011368259, + -0.025074903, + 0.02616178, + -0.015446447, + -0.018233968, + 0.0022312955, + 0.006911262, + 0.024269335, + -0.0006389401, + 0.014500224, + 0.020164775, + -0.014103834, + -0.014231701, + 0.0016958485, + -0.009059443, + -0.010574679, + 0.0221723, + 0.01735168, + -0.012863515, + 0.019218551, + 0.0126205655, + 0.0028306765, + 0.028923728, + -0.008004533, + -0.017850364, + 0.002429491, + 0.012492698, + -0.020190347, + 0.008516004, + -0.022364102, + 0.014321209, + -0.018080527, + -0.011878932, + 0.011060577, + -0.00031947004, + -0.0053256997, + -0.010063207, + -0.041224625, + 0.021200504, + 0.011335493, + 0.009935339, + 0.00899551, + 0.0018428967, + -0.017850364, + -0.018233968, + -0.007870272, + 0.024959821, + 0.007314046, + 0.013451707, + 0.011910899, + 0.0030032983, + -0.013132038, + -0.01008878, + 0.014027113, + 0.026315222, + -0.008631086, + 0.0017358073, + -0.018323475, + 0.026021125, + 0.04582787, + -0.02245361, + -0.005332093, + 0.0029633394, + -0.020088052, + 0.0014704813, + 0.00737798, + 0.0008543177, + -0.021903777, + 0.0053512733, + -0.026264075, + -0.010485171, + -0.039025296, + 0.00029509523, + -0.0020171166, + -0.019730022, + -0.0021817468, + -0.018758226, + 0.017044796, + 0.0074610943, + 0.013617936, + -0.0074802744, + 0.025548015, + 0.0068729017, + -0.014922189, + 0.028565697, + -0.015548741, + 0.024972608, + -0.008503218, + 0.014500224, + 0.0048078345, + -0.025049329, + 0.03022798, + -0.0057412703, + -0.029000448, + -0.023770649, + -0.008906002, + -0.015037269, + 0.00566455, + -0.007883058, + 0.0035035815, + -0.0037145636, + 0.0083881365, + -0.022504756, + -0.010318942, + -0.0037689074, + -0.019576581, + 0.013963179, + 0.024780806, + -0.014717599, + -0.014039899, + 0.010274189, + -0.010964676, + -0.007314046, + -0.033347957, + -0.011361066, + -0.01635431, + 0.02189099, + 0.011917292, + -0.014922189, + -0.0075314217, + -0.013937606, + -0.015778903, + 0.004136528, + -0.010127141, + 0.020995915, + 0.009666816, + -0.0002869037, + -0.02049723, + 0.0208169, + -0.025829323, + 0.006124874, + -0.010600252, + -0.022006072, + -0.016801847, + 0.008202728, + 0.010683366, + -0.013234331, + -0.017390039, + -0.041582655, + -0.020394936, + -0.00068209553, + -0.0016814633, + -0.0064956914, + 0.0026452679, + 0.009852225, + 0.022568692, + -0.010229435, + -0.012492698, + 0.015625462, + 0.00057820283, + -0.001959576, + -0.02437163, + -0.0052649626, + 0.0034684178, + -0.0061216773, + 0.017185451, + 0.016060213, + 0.0096092755, + -0.017006436, + 0.012665319, + -0.0114825405, + -0.004200462, + -0.008726987, + -0.011629589, + -0.00570291, + 0.016776273, + 0.016520537, + 0.029895524, + 0.0051051276, + -0.0010796849, + -0.016239228, + -0.0018636752, + 0.003743334, + 0.036109906, + -0.01763299, + 0.012984989, + 0.014909402, + -0.011297132, + -0.0019531827, + -0.026366368, + 0.011776637, + 0.005757254, + 0.010082387, + 0.0030416586, + -0.0073012593, + 0.014666452, + 0.028079798, + -0.008196335, + -0.014282849, + -0.000062235726, + -0.00028530534, + -0.03137879, + -0.002028305, + 0.006486101, + -0.024473924, + 0.004280379, + -0.020011332, + -0.0083881365, + -0.025189985, + -0.003976693, + -0.025369, + -0.0067130667, + -0.037030555, + 0.032887634, + 0.025177198, + -0.012748433, + -0.0011316312, + -0.034601063, + -0.009238458, + 0.001043722, + -0.008624692, + 0.0067386404, + -0.025637522, + -0.009302393, + 0.0010660989, + -0.004555295, + -0.023617208, + 0.0022552707, + 0.018668719, + 0.019154618, + 0.029639788, + 0.23241277, + 0.002979323, + -0.011373853, + 0.044242308, + -0.0011452172, + 0.011712703, + 0.0240136, + -0.007314046, + 0.023425406, + 0.029153889, + -0.009168131, + 0.0053065196, + -0.0058659418, + -0.0006956815, + 0.0028690367, + -0.023949664, + -0.036749244, + -0.0067897877, + -0.004663983, + -0.004261199, + 0.003963906, + -0.01240319, + 0.015216284, + 0.00097259553, + 0.017607415, + 0.0028210864, + -0.009717964, + 0.011105331, + 0.027926357, + 0.012588599, + -0.011808604, + -0.02288836, + -0.0035323517, + -0.013183184, + -0.0014041498, + 0.00572209, + -0.017441187, + -0.0063997903, + 0.020829687, + 0.031890262, + 0.009545341, + -0.0046671797, + -0.027414886, + -0.0070583103, + 0.0004946891, + 0.017517908, + -0.02089362, + -0.018080527, + 0.014244488, + 0.023847371, + -0.014436291, + 0.0017741676, + 0.022543117, + 0.02815652, + -0.0052745524, + 0.02077854, + 0.012997776, + -0.00931518, + 0.015932346, + -0.017543482, + -0.014359569, + 0.023566062, + -0.027389312, + 0.0069176555, + 0.004833408, + -0.010836808, + -0.007569782, + -0.0059106955, + 0.019001175, + -0.01978117, + 0.0051562744, + 0.014717599, + -0.0027491606, + 0.0024023189, + -0.0073396196, + -0.017965445, + 0.0187838, + -0.006892082, + 0.019934611, + 0.008631086, + -0.02137952, + -0.00011268362, + -0.017901512, + 0.008145188, + 0.004258002, + -0.020906407, + 0.0041652983, + -0.004673573, + 0.028182093, + -0.0031775183, + -0.0020043298, + -0.008701413, + 0.005463158, + 0.009628456, + 0.02616178, + 0.023335898, + -0.0015871607, + 0.008695019, + -0.028386682, + 0.0059522525, + -0.034524344, + -0.024985395, + 0.0018396999, + -0.017006436, + -0.009078624, + 0.014922189, + -0.003826448, + 0.012294502, + 0.04035512, + 0.0049261125, + -0.00042116502, + -0.013183184, + 0.007966173, + -0.00811322, + 0.0071797846, + -0.0049261125, + 0.017479546, + -0.014781534, + -0.010127141, + -0.011610408, + -0.0042899693, + -0.010862381, + 0.0007536217, + -0.0031279693, + 0.014640879, + -0.019295271, + 0.0011172461, + 0.012211388, + 0.006604379, + -0.04270789, + 0.026980136, + 0.0014528994, + 0.030023392, + -0.008330597, + -0.011297132, + 0.022504756, + 0.005885122, + -0.016814634, + -0.00014395133, + -0.011194838, + -0.002431089, + -0.011968439, + -0.0028546518, + 0.0007779965, + 0.009078624, + -0.002979323, + 0.009570915, + -0.023310324, + -0.025650308, + -0.02552244, + -0.020279855, + 0.003794481, + -0.006924049, + -0.0027587507, + 0.012198601, + -0.0026644482, + -0.020024119, + -0.011003036, + 0.013950392, + 0.03521483, + -0.009462227, + 0.007915026, + 0.015970705, + -0.0013514042, + 0.0058467616, + 0.0063102827, + -0.1628526, + 0.016060213, + 0.011616802, + -0.006383807, + -0.012959415, + 0.0038296448, + 0.008579939, + 0.020931982, + -0.015037269, + 0.029639788, + 0.007851091, + 0.023924092, + -0.040303975, + -0.008413711, + -0.01072812, + -0.0011875734, + 0.0014896615, + -0.007940599, + 0.01686578, + 0.0039830864, + -0.00027531566, + -0.027338166, + 0.011425001, + 0.017607415, + 0.008081254, + -0.00038120628, + -0.018297901, + 0.030534863, + 0.0037880877, + -0.018604785, + -0.0012475116, + 0.00096780044, + 0.006943229, + 0.015817264, + 0.02680112, + 0.008842068, + -0.002650063, + 0.008119614, + 0.0024230974, + -0.01080484, + -0.005616599, + 0.021520173, + 0.014692026, + 0.0174284, + -0.009270426, + 0.015523167, + 0.031557806, + 0.0139248185, + -0.00012676907, + -0.014154981, + 0.015267432, + -0.03907644, + -0.013183184, + -0.008829281, + 0.016188081, + 0.030458143, + 0.017236598, + 0.013860884, + -0.0063774134, + 0.0058883186, + 0.00035103745, + -0.038309235, + -0.01842577, + 0.0032702226, + 0.008695019, + -0.0062942994, + 0.008726987, + 0.012236962, + -0.019832317, + 0.005990613, + -0.017185451, + -0.013835311, + -0.010523532, + -0.01274204, + -0.008368957, + 0.012812368, + -0.015778903, + 0.0009414277, + -0.007684863, + -0.013374986, + 0.009679602, + 0.0339873, + -0.009980093, + -0.0062719225, + -0.013541214, + 0.011501721, + -0.002151378, + 0.017760856, + -0.024039172, + -0.013975966, + 0.024627365, + -0.035828598, + 0.000078119316, + -0.022517543, + 0.010983855, + 0.018093314, + -0.002443876, + -0.006745034, + 0.016673978, + 0.009660423, + 0.004858982, + -0.002883422, + -0.022632625, + 0.015203497, + 0.0226582, + 0.025381785, + -0.007908632, + 0.015088417, + 0.024665724, + 0.0009909765, + -0.027593901, + 0.029026022, + -0.0065180683, + 0.013502854, + 0.016073, + 0.0014528994, + 0.0063870037, + -0.026366368, + -0.0054887314, + 0.010133534, + 0.059893344, + -0.0012882695, + -0.007429127, + 0.017236598, + -0.011693523, + -0.027491607, + -0.104186796, + -0.010293369, + 0.02548408, + 0.03784891, + 0.0072181453, + 0.022543117, + -0.0011691925, + 0.0226582, + -0.00020229108, + 0.02313131, + -0.0009550137, + -0.02345098, + -0.012965809, + -0.004961276, + 0.0024758428, + -0.011252378, + 0.0037657109, + -0.025995553, + -0.052374706, + 0.01886052, + 0.005162668, + 0.0044370173, + -0.0018876505, + -0.014564158, + -0.01106697, + -0.011680736, + -0.035751875, + 0.019589368, + 0.009801078, + -0.0022952296, + 0.02588047, + -0.011962046, + 0.0076465025, + 0.0003622259, + -0.014333996, + -0.0068153613, + 0.0019659696, + -0.01037009, + 0.011923686, + -0.034831226, + -0.006911262, + -0.0025014165, + 0.010523532, + -0.034166314, + -0.007122244, + 0.004654393, + -0.016904142, + 0.011878932, + -0.0018780603, + -0.012179421, + -0.003131166, + 0.028540123, + -0.025343426, + -0.0021721567, + 0.03536827, + -0.016482178, + 0.01144418, + 0.019717235, + -0.033450253, + 0.0142572755, + 0.015420874, + 0.009973699, + -0.011003036, + 0.021954926, + -0.028847007, + -0.01622644, + -0.033194516, + -0.010242222, + 0.023220817, + -0.028079798, + -0.002699612, + 0.021763124, + -0.00604176, + 0.014768747, + -0.0127804, + 0.007729617, + -0.016686765, + -0.010152714, + 0.006188808, + -0.018668719, + -0.029384052, + -0.018898882, + -0.008969936, + -0.00534488, + -0.0062175784, + 0.032171573, + -0.02010084, + -0.0020315018, + 0.033885002, + -0.008336989, + 0.011910899, + 0.037797764, + 0.005098734, + -0.017326105, + -0.006566019, + 0.01238401, + -0.0051243077, + 0.0082346955, + 0.0153952995, + -0.019026749, + -0.002618096, + -0.013055316, + -0.041147903, + 0.017466761, + -0.011533688, + -0.02237689, + -0.00027811277, + 0.0019947398, + -0.011866145, + -0.0024039173, + -0.013630723, + 0.0061952015, + -0.0032110836, + 0.0005262565, + -0.0047343103, + -0.019921824, + -0.0048525883, + 0.0062783156, + 0.014116621, + -0.0041940683, + 0.014295636, + -0.012524664, + -0.0027443657, + -0.0015751731, + 0.0058147945, + 0.013016956, + -0.038309235, + 0.010983855, + -0.0071733915, + -0.017824791, + -0.032248292, + -0.009794684, + 0.017978232, + -0.028667992, + 0.009545341, + 0.03741416, + -0.01722381, + -0.028693566, + -0.018374622, + 0.018438557, + 0.011412214, + -0.019333633, + -0.026494237, + -0.032529604, + 0.015331366, + -0.030176833, + -0.01906511, + 0.025241131, + -0.012294502, + -0.01232647, + 0.0031007975, + 0.018400196, + 0.013873671, + 0.024422776, + 0.0049261125, + -0.016060213, + -0.009551735, + -0.014346783, + 0.031481087, + 0.016303163, + 0.020625098, + -0.013490068, + 0.004091774, + -0.008119614, + -0.0034780079, + 0.009327966, + 0.007282079, + 0.012415977, + 0.0006757021, + 0.000043779783, + -0.008170761, + -0.016699553, + -0.015305792, + -0.012070733, + 0.047183268, + 0.012582205, + 0.016290376, + -0.0028994055, + -0.002229697, + -0.012607778, + -0.021034276, + 0.021123784, + 0.014014326, + -0.0070199496, + -0.009308786, + 0.007512241, + 0.018438557, + 0.025548015, + -0.044804927, + 0.00017781636, + 0.0030720271, + 0.005463158, + -0.021200504, + 0.0019963381, + 0.0048046377, + 0.015459234, + 0.013630723, + 0.002598916, + -0.011751063, + -0.010862381, + 0.00086470693, + 0.035444994, + -0.0068729017, + -0.013656296, + -0.00094462436, + -0.03920431, + -0.024205402, + 0.010843202, + -0.014461864, + -0.019755596, + -0.0032830094, + 0.018540852, + 0.0068409345, + -0.0031103876, + -0.0011004634, + 0.016929716, + -0.009813864, + -0.0056453696, + -0.023323111, + -0.013745803, + -0.0064765112, + 0.015331366, + 0.008516004, + 0.0011675941, + 0.013362199, + -0.013119251, + 0.014385143, + 0.011182051, + 0.028233241, + -0.025305064, + 0.010740907, + 0.018950028, + 0.0070455233, + 0.008311416, + -0.007262899, + 0.00043914645, + 0.00011208424, + -0.028054226, + -0.018323475, + 0.019001175, + -0.00012686897, + 0.052988473, + -0.016136933, + -0.046288192, + 0.030662732, + -0.019832317, + 0.011488934, + 0.018771013, + 0.018694293, + -0.0057093035, + -0.004919719, + -0.00012427165, + 0.013630723, + 0.025420146, + -0.003089609, + -0.021302799, + -0.011597622, + -0.019909037, + 0.015778903, + -0.025790963, + -0.0037593173, + 0.022031646, + -0.008937969, + 0.009014689, + 0.013426133, + -0.020983128, + -0.00499644, + 0.016034639, + 0.0011292337, + -0.0009622062, + 0.003404484, + 0.029000448, + -0.0153952995, + -0.02452507, + -0.0066810995, + 0.003217477, + -0.028847007, + -0.016891355, + -0.021520173, + 0.00081755564, + 0.009327966, + 0.012051553, + 0.032427307, + -0.020931982, + -0.0032558374, + 0.005575042, + -0.0062783156, + -0.008484038, + 0.0045840656, + -0.008592726 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.021987127, + -0.015545284, + -0.0045292196, + -0.016123893, + 0.007316184, + 0.013668021, + -0.026165966, + -0.0054614223, + 0.015288125, + -0.021909978, + 0.0131087, + 0.011732897, + -0.015339557, + 0.024507288, + -0.022527162, + -0.009289882, + 0.04253416, + 0.003148595, + 0.022771463, + -0.021344228, + -0.038265314, + -0.0012681172, + -0.017641133, + 0.014593795, + -0.015776727, + -0.008370537, + 0.010768549, + -0.019222664, + 0.01899122, + 0.010504961, + 0.019788414, + -0.020868484, + 0.01987842, + -0.03134773, + -0.033250708, + 0.013899464, + 0.0077983583, + 0.0017808287, + 0.010717117, + -0.026744576, + 0.015056682, + 0.008254816, + -0.0038766777, + -0.011919337, + -0.010196369, + 0.015751012, + 0.02246287, + 0.012015772, + -0.010183511, + 0.020084148, + -0.007425477, + 0.018142594, + -0.011559314, + -0.01861834, + 0.01025423, + -0.031553455, + 0.0019351243, + 0.015236693, + -0.013256566, + -0.016959662, + -0.0038702486, + -0.006576851, + 0.00061878975, + -0.011405018, + 0.0047060167, + 0.0044745733, + -0.0030875197, + 0.0011315013, + 0.002441407, + 0.006956161, + 0.026243115, + 0.026770292, + -0.0016418019, + 0.018374037, + 0.014889528, + 0.012742247, + -0.016188182, + 0.0032305648, + 0.0061236075, + -0.015288125, + 0.0014296455, + -0.010659256, + -0.024172982, + -0.0041177645, + 0.017705424, + 0.006120393, + -0.014568078, + 0.0034716516, + -0.03487081, + -0.017191105, + -0.0067247176, + 0.032196354, + 0.028801851, + -0.010029215, + -0.0040181153, + 0.0150052495, + 0.014388067, + 0.02362009, + 0.015403846, + -0.03348215, + 0.007457622, + 0.0044745733, + -0.044334278, + 0.0018949432, + -0.029547613, + -0.02475159, + 0.010376381, + -0.0016747505, + 0.031810615, + -0.024970176, + -0.022835752, + 0.016033888, + 0.025908807, + -0.020649899, + -0.012369366, + -0.01760256, + 0.008852712, + -0.016226757, + -0.027876077, + -0.008177668, + 0.012324363, + 0.045491494, + 0.01120572, + -0.020238442, + 0.034922242, + 0.0072133206, + -0.010884271, + -0.019775556, + -0.008209813, + 0.010344236, + 0.0046417266, + 0.008094091, + 0.014529505, + 0.020521319, + -0.005033895, + 0.006281118, + -0.006171825, + 0.024893027, + 0.0020283447, + -0.026487416, + 0.019415533, + 0.027721781, + -0.013398004, + -0.007361187, + -0.011700751, + 0.030781977, + 0.019441249, + -0.01120572, + -0.010074219, + -0.0016924301, + 0.003539156, + -0.028287532, + 0.012433656, + -0.0019319098, + 0.019004079, + -0.0033527154, + -0.01132787, + 0.0029348314, + -0.027618917, + -0.0072583235, + -0.016316762, + 0.0015067932, + 0.033019263, + 0.0032948544, + 0.024507288, + 0.021408519, + 0.0037191676, + 0.017203962, + -0.0062232567, + -0.002508911, + 0.0017390402, + 0.036362335, + -0.012260073, + 0.023182917, + -0.008891285, + 0.01728111, + 0.0045035034, + -0.002965369, + -0.011777899, + 0.003048946, + -0.020598466, + -0.008711274, + 0.016805366, + -0.0018852997, + 0.0068918713, + -0.0067697205, + 0.0047767353, + -0.011475737, + 0.0086534135, + -0.014915244, + 0.013423719, + 0.024764448, + -0.0032755677, + -0.025548784, + -0.6891871, + -0.044359993, + 0.0076826364, + -0.002010665, + 0.002344972, + 0.027696066, + 0.0020974563, + 0.011572172, + 0.008068375, + -0.015648149, + 0.0037802428, + 0.005467851, + 0.008929859, + -0.00664757, + 0.008659842, + -0.029650476, + -0.012658671, + 0.020431312, + -0.0032787821, + -0.0034202198, + -0.00016122688, + -0.0035809444, + -0.0264617, + -0.010562821, + 0.029599044, + 0.0091163, + 0.018206883, + -0.0028078589, + -0.004153124, + 0.025330199, + -0.0009852418, + 0.001547778, + -0.015686722, + -0.014349493, + 0.04443714, + -0.0011025708, + -0.008756277, + 0.009097013, + 0.0009989034, + 0.021639962, + -0.010884271, + -0.0010639969, + 0.0053907037, + -0.028004656, + -0.012112207, + 0.0066347118, + 0.017808286, + -0.009990642, + 0.038188167, + 0.003847747, + 0.026204541, + -0.010498531, + 0.0106978305, + -0.0067954366, + 0.016548205, + -0.0016827866, + 0.029599044, + 0.0014336635, + 0.004394211, + -0.0040791905, + -0.018386895, + 0.0015759048, + -0.013680879, + -0.008023373, + -0.012536519, + 0.004709231, + -0.035745155, + -0.015931023, + 0.0022147852, + 0.00092577375, + 0.0024446214, + 0.0114500215, + -0.017499696, + 0.0324278, + 0.0113021545, + -0.0050371094, + 0.026796008, + -0.008100521, + 0.021871405, + 0.0060239583, + 0.015288125, + -0.0065736366, + -0.025394488, + -0.0063839816, + 0.030961988, + -0.01139216, + -0.029161874, + -0.023517225, + 0.026243115, + -0.0031068067, + 0.027953224, + 0.0030730546, + -0.0156095745, + -0.006911158, + -0.0031630604, + 0.02785036, + -0.02070133, + 0.005184976, + 0.004127408, + -0.0040952633, + 0.015648149, + -0.031193433, + -0.012459372, + -0.008351251, + 0.035282265, + 0.0017663635, + -0.022385724, + 0.030679114, + 0.010389239, + -0.024545863, + 0.022334293, + -0.011507882, + -0.016111035, + 0.0059789554, + 0.015352415, + -0.024545863, + 0.045877233, + 0.009656334, + 0.014375209, + -0.0068983003, + 0.0060721757, + 0.012620096, + -0.0045613647, + -0.011089998, + -0.00072607346, + -0.011572172, + -0.005172118, + -0.018682629, + -0.031913478, + -0.0028946502, + 0.006686144, + -0.010357094, + 0.00087353826, + 0.0032868183, + -0.0019624475, + 0.001547778, + 0.006641141, + -0.019132657, + 0.030550534, + -0.0220257, + -0.02867327, + -0.002116743, + -0.023247208, + -0.0054774946, + -0.0010848911, + -0.01708824, + -0.031167716, + -0.007329042, + -0.020354165, + 0.016381053, + -0.032787822, + -0.022501446, + -0.031887762, + 0.012388653, + -0.0024510503, + -0.006641141, + -0.026564565, + 0.0082805315, + -0.012452943, + 0.026435984, + 0.01234365, + 0.0061814687, + -0.00842197, + -0.0013862498, + -0.008344822, + -0.038033873, + 0.0010535498, + 0.03057625, + -0.012105778, + -0.030627681, + -0.00462244, + -0.0047317324, + -0.002820717, + -0.009817059, + -0.026924586, + -0.014439499, + -0.016561063, + -0.02273289, + 0.014593795, + -0.015365273, + 0.015841018, + 0.020791335, + 0.0108907, + -0.025780227, + 0.039705407, + -0.0027837502, + 0.027798928, + 0.013886606, + 0.0067632915, + 0.010549963, + -0.019209806, + 0.0016305512, + 0.00096354407, + -0.011212149, + 0.014735232, + 0.0061686104, + 0.0036902372, + 0.012620096, + 0.007836932, + -0.0039666835, + 0.011424305, + -0.008100521, + 0.02070133, + -0.018065447, + 0.017203962, + -0.027078882, + 0.02070133, + -0.006502918, + 0.005021037, + 0.03235065, + 0.0037191676, + -0.02689887, + -0.0089555755, + -0.008370537, + 0.015120971, + 0.0032787821, + -0.013359429, + 0.015622432, + -0.007007593, + -0.015172403, + -0.006628283, + 0.0090327235, + 0.034587935, + -0.0038445326, + -0.0020412025, + -0.003232172, + 0.03762242, + 0.011957911, + -0.00791408, + -0.0076312046, + -0.029136157, + -0.010607825, + -0.016471058, + 0.010588537, + -0.022437155, + -0.0068082944, + 0.0020894199, + -0.04011686, + 0.018798351, + 0.016638212, + 0.0027307111, + 0.034716517, + 0.03919109, + -0.0063711237, + 0.017821144, + -0.005618932, + 0.022604309, + 0.017319685, + -0.01697252, + 0.008981291, + -0.016098177, + -0.007046167, + -0.012710102, + 0.016509632, + 0.02633312, + 0.0031469879, + 0.03615661, + 0.0084283985, + 0.023890106, + 0.017949725, + -0.022964332, + -0.013642305, + 0.01431092, + -0.01120572, + 0.000014477771, + 0.005551428, + -0.00569608, + 0.00905201, + -0.00017418529, + -0.012247215, + -0.013082983, + 0.0017518982, + 0.025908807, + -0.012838682, + 0.019466965, + -0.023247208, + -0.0133465715, + 0.0021392445, + 0.020405596, + 0.012645813, + -0.003760956, + -0.034999393, + 0.011186433, + 0.00022240268, + 0.0024848024, + -0.026950303, + -0.03222207, + 0.022565736, + 0.0028319675, + 0.008286961, + 0.015468136, + 0.012157209, + 0.025715938, + 0.0061171786, + 0.012080062, + -0.02975334, + 0.0022260358, + -0.0021279939, + 0.015686722, + 0.0044585005, + -0.0061428947, + -0.013205134, + -0.030396238, + -0.0015678686, + 0.0030248372, + 0.014195197, + -0.014529505, + 0.0052428367, + -0.017743997, + -0.0162139, + -0.0017052881, + -0.0023288997, + 0.0018997649, + -0.014362351, + -0.010022786, + -0.0028689343, + -0.020225585, + 0.00010949364, + 0.025857376, + 0.017358258, + 0.019788414, + -0.0162139, + -0.021434234, + -0.0008076412, + 0.0766335, + 0.008319106, + 0.0019303026, + 0.009174161, + 0.006210399, + -0.019338384, + -0.019955568, + 0.012009343, + -0.011089998, + -0.00054003467, + 0.0023208633, + -0.012716531, + 0.0173454, + 0.0046931584, + -0.00011973984, + -0.012105778, + 0.010267088, + 0.0056992946, + 0.035333697, + -0.019286953, + 0.00389275, + 0.00905201, + -0.017229678, + 0.006563993, + -0.0053649875, + -0.0049728192, + 0.019646976, + 0.012710102, + 0.012324363, + -0.0108907, + 0.013976612, + 0.013706595, + -0.001560636, + -0.014889528, + -0.01082641, + -0.014863812, + 0.0007272789, + 0.012022201, + 0.005040324, + -0.01753827, + 0.025754511, + 0.012157209, + 0.010556392, + -0.014850954, + -0.007971941, + 0.016625354, + -0.012112207, + 0.01602103, + -0.010530677, + 0.0050821123, + 0.01803973, + -0.00389275, + -0.0068854424, + -0.008087662, + 0.00810695, + 0.015185261, + -0.0056767934, + -0.014272345, + -0.010292804, + -0.006692573, + 0.010993564, + -0.013500867, + -0.0045742225, + -0.009932781, + -0.012986548, + -0.003212885, + 0.009154874, + -0.0029444748, + -0.015455279, + 0.002684101, + 0.0061300364, + -0.014825238, + -0.026796008, + 0.00095952593, + 0.03235065, + 0.019724125, + 0.008839854, + -0.009617761, + 0.00069151766, + 0.04595438, + -0.0068468684, + -0.00046690498, + -0.014606653, + 0.0008020158, + -0.0060721757, + -0.0015702795, + 0.031322014, + -0.0137966005, + -0.0037545268, + -0.0026519562, + 0.030653398, + 0.0011893621, + 0.0091098705, + -0.008917001, + -0.006866155, + -0.012189355, + 0.018824067, + 0.005490353, + -0.015558142, + -0.0068404395, + 0.008447685, + -0.026487416, + -0.008222671, + -0.010222085, + 0.00860841, + 0.025278768, + 0.032813538, + 0.0018242244, + -0.021189932, + 0.013680879, + 0.025085898, + -0.005663935, + 0.00083817885, + -0.00028448255, + 0.0015976026, + 0.005924309, + -0.015802443, + 0.016111035, + -0.0015317055, + -0.032813538, + 0.00024831953, + -0.044591434, + 0.021665677, + -0.0034105761, + 0.0016241221, + -0.000046082758, + 0.01778257, + -0.013706595, + 0.0033816458, + 0.0010993563, + -0.005969312, + 0.020752762, + -0.015056682, + -0.021061353, + -0.03880535, + -0.029110441, + 0.022308577, + -0.0025410561, + -0.013012265, + -0.008646984, + -0.00848626, + 0.012710102, + 0.019518396, + 0.0021038852, + -0.024713017, + -0.020469887, + -0.0016418019, + 0.00591788, + 0.0075797727, + 0.009322028, + -0.002684101, + 0.005680008, + -0.022720031, + 0.01740969, + 0.0051592602, + -0.008113379, + -0.030550534, + -0.028518975, + 0.020122722, + 0.010897129, + 0.031116284, + -0.007284039, + 0.00484424, + 0.01038281, + -0.01120572, + 0.0005018626, + -0.0068597263, + -0.0056542917, + -0.03247923, + 0.010961418, + 0.015249551, + 0.0012938331, + 0.020187011, + -0.00427206, + 0.014953818, + 0.0064900597, + -0.002991085, + -0.011160717, + -0.02304148, + -0.022938617, + -0.0004564579, + 0.004362066, + -0.020187011, + -0.0076054884, + 0.0108907, + -0.01025423, + 0.020367023, + 0.011617175, + -0.005570715, + -0.008319106, + 0.03556514, + 0.0024156908, + 0.031476308, + -0.009836346, + 0.0010897128, + -0.012838682, + -0.02526591, + -0.000019249284, + 0.00880128, + 0.006348622, + 0.011025708, + 0.0038123878, + -0.0015493853, + -0.0329164, + 0.020932773, + 0.019981284, + 0.032144923, + 0.012780821, + -0.007856219, + -0.018065447, + -0.025741654, + -0.032967832, + -0.0316306, + -0.027516054, + 0.0054710656, + 0.009804201, + -0.030370522, + 0.023722952, + -0.003187169, + -0.027207462, + 0.010119221, + 0.00715546, + 0.027361758, + -0.0030601965, + 0.013693737, + 0.0047767353, + -0.0075026248, + -0.020341307, + -0.0048024515, + -0.016535347, + -0.009707767, + 0.02697602, + 0.01272939, + 0.000053943197, + 0.020045573, + 0.016239615, + 0.010427813, + 0.032376364, + -0.009315599, + -0.0133465715, + 0.018849783, + 0.0173454, + -0.02165282, + 0.00993921, + -0.019441249, + 0.012189355, + -0.018271174, + -0.020212727, + -0.001946375, + -0.0053264135, + -0.015853876, + -0.006615425, + -0.04348565, + 0.0024783735, + 0.0023722954, + 0.0014577722, + 0.009489181, + -0.010183511, + -0.016149608, + -0.02044417, + -0.011867905, + 0.019364102, + -0.005284625, + 0.016175324, + 0.006052889, + -0.006432199, + -0.02518876, + -0.008409112, + 0.009251309, + 0.02810752, + 0.0015590288, + -0.004236701, + -0.021087069, + 0.01600817, + 0.041685537, + -0.008145523, + -0.0035905878, + 0.008087662, + -0.008878428, + 0.006477202, + 0.021305654, + -0.0036613066, + -0.01094856, + 0.013963754, + -0.022102848, + 0.0000116023075, + -0.026281688, + -0.010350665, + -0.011315012, + -0.016728217, + -0.0039666835, + -0.009341314, + 0.019441249, + -0.0007718799, + 0.006737576, + -0.025214477, + 0.03672236, + 0.0076890653, + -0.01760256, + 0.015326699, + -0.0050081788, + 0.014259487, + 0.0020138794, + 0.015558142, + 0.0072326073, + -0.024648726, + 0.038085304, + -0.010022786, + -0.034999393, + -0.007393332, + 0.0021038852, + -0.0065125613, + -0.0012512411, + -0.0075926306, + 0.010485673, + -0.0109228445, + 0.0138737485, + -0.017834002, + -0.0034266487, + 0.0009715803, + -0.022360008, + 0.002631062, + 0.01171361, + -0.022437155, + -0.0080490885, + 0.012896542, + -0.0088848565, + 0.004088834, + -0.03682522, + -0.006563993, + -0.022835752, + 0.012639384, + 0.0044134976, + -0.014786664, + -0.016149608, + -0.005040324, + -0.009662763, + 0.00022039362, + -0.005773228, + 0.014092334, + -0.009881349, + -0.0046867295, + -0.015853876, + 0.021639962, + -0.011662178, + 0.0061557526, + -0.017589701, + -0.007399761, + -0.018566906, + 0.012009343, + -0.0017390402, + -0.020367023, + 0.00021838456, + -0.04006543, + -0.022720031, + -0.0016699287, + -0.014992392, + 0.0004910137, + 0.002658385, + 0.008756277, + 0.024597295, + -0.0067890077, + -0.0010712296, + 0.022642883, + 0.001965662, + 0.005641434, + -0.036362335, + -0.018515475, + 0.0029605473, + -0.011430735, + 0.014015186, + 0.009527755, + -0.0011282868, + -0.011803616, + 0.010215656, + -0.004291347, + 0.00892343, + -0.014066618, + -0.012986548, + 0.008942718, + 0.0097913435, + 0.026101677, + 0.026950303, + 0.008904143, + -0.007071883, + -0.013153702, + -0.0116043165, + 0.013359429, + 0.03265924, + -0.0078047873, + 0.0056767934, + 0.0068147234, + -0.008248387, + 0.012883685, + -0.015596717, + 0.01285154, + 0.0053199846, + 0.015841018, + 0.0010013144, + -0.010794265, + 0.0064739874, + 0.01513383, + -0.0045870803, + -0.012317934, + -0.0015566179, + 0.006943303, + -0.02702745, + -0.0014224128, + 0.0106978305, + -0.014645226, + -0.000055801574, + -0.024327276, + 0.0035616574, + -0.037879575, + 0.0008253209, + -0.02697602, + -0.0082033845, + -0.03615661, + 0.03368788, + 0.02221857, + -0.015262409, + -0.0033173559, + -0.03026766, + -0.001554207, + -0.0024896243, + -0.010961418, + -0.010267088, + -0.030601965, + -0.026101677, + 0.0016892157, + 0.00560286, + -0.027516054, + -0.0084283985, + 0.000048794987, + 0.0063904105, + 0.021511381, + 0.23596944, + 0.0104471, + -0.016908228, + 0.028724702, + -0.0034170053, + 0.03551371, + 0.024455857, + -0.012176497, + 0.024404425, + 0.025291625, + -0.0106206825, + 0.0038123878, + 0.0081262365, + -0.000507488, + 0.0036484487, + -0.0067504337, + -0.029701907, + 0.0073033264, + -0.0068725846, + -0.008171239, + 0.013783743, + -0.010871412, + 0.011745755, + 0.0012890113, + 0.03134773, + 0.0059789554, + -0.013018694, + -0.00068870495, + 0.023465794, + 0.013256566, + -0.007830503, + -0.00974634, + 0.0013966969, + -0.01329514, + -0.005078898, + -0.0063229064, + -0.016046746, + 0.012369366, + 0.01665107, + 0.024481572, + 0.015455279, + 0.013655163, + -0.0282361, + -0.012054346, + 0.0068404395, + 0.02152424, + -0.012337221, + -0.01608532, + 0.023877248, + 0.012832253, + -0.016921086, + -0.0017358258, + 0.029830487, + 0.01949268, + 0.0017952939, + 0.0262174, + 0.02392868, + -0.008036231, + 0.02702745, + -0.008151952, + -0.009514897, + 0.018759776, + -0.02234715, + 0.0045035034, + 0.014452357, + -0.0056317905, + -0.017885435, + 0.007926938, + 0.009682051, + -0.014902386, + 0.013693737, + 0.0077276393, + 0.014285203, + 0.010099934, + -0.008743418, + -0.006412912, + 0.019518396, + -0.0026278475, + 0.021035638, + -0.012774392, + -0.009765628, + -0.014015186, + -0.0045356485, + 0.020559892, + -0.0092641665, + -0.017872578, + 0.00052034593, + 0.0069690193, + 0.032556377, + -0.0059532397, + -0.0043074195, + -0.016162466, + 0.012157209, + -0.002605346, + 0.009932781, + 0.024468714, + -0.015841018, + 0.017821144, + -0.024597295, + 0.0053489152, + -0.027901793, + -0.035153687, + 0.010839268, + -0.015661007, + -0.016471058, + 0.010607825, + -0.0019174446, + 0.017486837, + 0.041814115, + -0.001841904, + 0.006493274, + -0.0063775526, + 0.009881349, + -0.004291347, + 0.017191105, + -0.006911158, + 0.011630033, + -0.011462879, + -0.01784686, + -0.010871412, + -0.006348622, + -0.021768542, + -0.00943132, + 0.0021231722, + -0.007573344, + -0.012131494, + -0.004911744, + 0.016239615, + 0.0019142301, + -0.03875392, + 0.04027116, + -0.008344822, + 0.027798928, + 0.0045806514, + -0.006692573, + 0.00011431538, + -0.011636462, + -0.008190527, + 0.015866734, + -0.01051139, + 0.0018708345, + -0.0032803894, + 0.01240794, + -0.00031160485, + -0.0011821295, + 0.00062682596, + 0.006531848, + -0.022514304, + -0.01784686, + -0.022488588, + -0.010183511, + -0.011199291, + -0.00019899716, + -0.007791929, + 0.015185261, + -0.011192862, + -0.023362929, + -0.0060111005, + 0.0029042938, + 0.02286147, + -0.008376967, + 0.007959083, + -0.0013500868, + -0.0049021007, + 0.0048153093, + 0.00079639046, + -0.16489059, + 0.01753827, + 0.017563986, + -0.016432485, + -0.011083569, + 0.0035938022, + 0.024507288, + 0.020598466, + -0.0064739874, + 0.032119207, + 0.009013436, + 0.0116043165, + -0.05811802, + -0.01956983, + -0.00021798276, + 0.014285203, + -0.0032369937, + -0.003532727, + 0.024545863, + 0.008190527, + -0.0051592602, + -0.024082975, + 0.019466965, + 0.0066347118, + 0.0059918133, + 0.00050507707, + -0.01569958, + 0.035333697, + -0.0025410561, + -0.008711274, + -0.0039506108, + 0.0027049952, + 0.0025185547, + 0.025934523, + 0.021485666, + -0.0020797765, + 0.0018627982, + 0.008666271, + -0.0022951474, + -0.0050049643, + -0.007920509, + 0.019595545, + 0.011295726, + 0.02354294, + -0.019068368, + 0.026924586, + 0.036130894, + 0.0130379805, + -0.0059114513, + -0.0068275817, + 0.017049666, + -0.03070483, + -0.01684394, + -0.004053475, + 0.0033077125, + 0.01329514, + 0.02165282, + 0.015429563, + -0.004030973, + 0.024275845, + 0.010961418, + -0.04096549, + -0.0073483293, + 0.0031437734, + 0.0020122721, + -0.014285203, + 0.006097892, + 0.009206305, + -0.028827567, + 0.009842775, + -0.019389817, + -0.008023373, + 0.009142016, + -0.0119064795, + 0.0028448256, + 0.003519869, + -0.017756855, + 0.010813552, + -0.012054346, + -0.010119221, + 0.012292218, + 0.029804772, + -0.0058021583, + -0.005088541, + -0.017075382, + 0.017962582, + -0.0023080055, + 0.016856797, + -0.021292796, + -0.021961411, + 0.022668598, + -0.034922242, + -0.0016683214, + -0.045748655, + 0.0076826364, + 0.010723546, + -0.0007630401, + -0.009270595, + 0.0084283985, + -0.002063704, + 0.008331964, + -0.0029685835, + -0.011006421, + 0.019235522, + 0.029213306, + 0.017101098, + -0.007001164, + 0.0023321141, + 0.020238442, + -0.002741962, + -0.022321435, + 0.023774384, + -0.00015469744, + 0.024790164, + 0.008781993, + -0.006236115, + 0.009926352, + -0.028081805, + 0.0071811755, + 0.013655163, + 0.042328432, + 0.0036355907, + -0.0065061324, + 0.005708938, + -0.008698416, + -0.031064853, + -0.099109225, + -0.019916994, + 0.016676785, + 0.01968555, + 0.0024462286, + 0.02265574, + 0.008994149, + 0.028210383, + -0.004609582, + 0.026410269, + -0.0047124457, + -0.020649899, + -0.019646976, + 0.0067118597, + 0.0067504337, + -0.014066618, + 0.011893622, + -0.023028621, + -0.039911136, + 0.0058150166, + -0.00039819523, + 0.0018033301, + -0.0007843361, + -0.007734068, + -0.015249551, + -0.011668607, + -0.035359416, + 0.013256566, + 0.0025410561, + -0.0103956675, + 0.01974984, + -0.017036809, + 0.014388067, + -0.005908237, + -0.009720624, + 0.0051239007, + -0.014580937, + 0.00242212, + 0.009193447, + -0.03456222, + 0.0024446214, + 0.0034234342, + 0.011938624, + -0.012845111, + -0.011797186, + -0.0029155444, + -0.013082983, + 0.0039409674, + -0.00042712566, + -0.026873155, + 0.0045227907, + 0.03898536, + -0.015661007, + -0.003998828, + 0.038522474, + -0.028133236, + 0.01753827, + 0.022694316, + -0.017924009, + 0.0150823975, + 0.013835175, + 0.004127408, + -0.0038156023, + 0.020289876, + -0.011655749, + -0.015288125, + -0.030653398, + -0.010305662, + 0.015995312, + -0.036233757, + -0.010267088, + 0.013886606, + -0.0061396803, + 0.011122143, + -0.017422548, + 0.0036420196, + -0.007939796, + -0.012459372, + 0.00088157447, + -0.006052889, + -0.028518975, + -0.017949725, + -0.0053649875, + -0.0062136133, + 0.0004568597, + 0.02728461, + -0.018374037, + -0.007084741, + 0.03659378, + -0.009977784, + 0.003944182, + 0.039525397, + 0.011089998, + -0.0131087, + -0.013603731, + 0.015108113, + 0.010993564, + 0.017795429, + 0.016535347, + -0.016535347, + -0.016869655, + -0.001407144, + -0.045337196, + 0.01253009, + -0.0041949125, + -0.015185261, + -0.0063968394, + 0.00093380996, + -0.013629447, + 0.0072776102, + -0.005021037, + 0.0011564136, + -0.004754234, + -0.00930917, + -0.003805959, + -0.0049728192, + -0.010453529, + -0.0008880035, + 0.013809458, + -0.0038284601, + 0.020521319, + -0.006068961, + -0.0025715937, + 0.003969898, + 0.0060625323, + 0.00582466, + -0.02849326, + 0.014362351, + -0.017924009, + -0.014966676, + -0.02152424, + -0.009662763, + 0.009090584, + -0.02785036, + 0.0061428947, + 0.03438221, + -0.015571, + -0.02462301, + -0.014529505, + 0.022630025, + 0.004448857, + -0.02126708, + -0.026513131, + -0.032376364, + 0.019531256, + -0.01506954, + -0.023851532, + 0.020791335, + -0.011032137, + -0.010909987, + 0.0073804744, + 0.009322028, + 0.015802443, + 0.023080055, + 0.0012576701, + -0.0076247756, + -0.0067247176, + -0.014568078, + 0.037108097, + 0.0068018655, + 0.013822316, + -0.018194025, + 0.012793679, + -0.009926352, + 0.0022292503, + 0.015030965, + 0.008621268, + 0.013134415, + -0.008550549, + -0.009058439, + -0.000013900168, + 0.0052364077, + -0.015776727, + -0.007997656, + 0.04348565, + 0.016818224, + 0.022964332, + 0.0062200422, + -0.008492689, + -0.003507011, + -0.0048410255, + 0.0051978338, + 0.021395661, + -0.004792808, + -0.008942718, + 0.014760949, + 0.01892693, + 0.03520512, + -0.045440063, + -0.0027387473, + 0.0033912894, + -0.0019319098, + -0.022745747, + -0.00031240846, + -0.0035841588, + 0.0055546425, + 0.005680008, + 0.0024076547, + -0.0072326073, + 0.005641434, + 0.0065414915, + 0.025960239, + 0.011128572, + -0.016252473, + -0.0020315591, + -0.02594738, + -0.015095255, + 0.009013436, + -0.011115714, + -0.011912908, + -0.0131151285, + 0.008589123, + 0.010408525, + -0.021999985, + 0.009881349, + 0.016059604, + -0.0048024515, + -0.009026295, + -0.026770292, + -0.022038558, + -0.013005836, + 0.0064514857, + 0.006943303, + 0.008061946, + -0.003748098, + -0.016175324, + 0.023401503, + 0.021665677, + 0.032942116, + -0.030421954, + 0.017178247, + 0.016252473, + 0.009302741, + 0.0023915821, + -0.0040631182, + -0.014992392, + -0.018309748, + -0.020418454, + -0.023915822, + 0.01702395, + 0.006400054, + 0.048011657, + -0.009784915, + -0.04309991, + 0.027824644, + -0.01424663, + 0.01183576, + 0.0054260627, + 0.013526583, + -0.020341307, + -0.008466972, + -0.0024831952, + 0.014735232, + 0.024713017, + -0.00892343, + -0.018155452, + -0.0020267374, + -0.025561642, + 0.010479244, + -0.024674442, + -0.011263581, + 0.034485072, + 0.0047574486, + 0.0052139065, + 0.007881935, + -0.017628275, + -0.009238451, + 0.010479244, + 0.0109228445, + -0.0021987127, + -0.010106363, + 0.016381053, + -0.012137922, + -0.02354294, + -0.004448857, + 0.013719453, + -0.026718859, + -0.016946804, + -0.02633312, + -0.0027355328, + 0.00810695, + 0.0015614396, + 0.029856203, + -0.01398947, + -0.021035638, + -0.0021183505, + -0.007984798, + -0.017872578, + 0.012067203, + -0.012427227 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + 0.024428807, + -0.010380333, + 0.002464533, + -0.016939685, + -0.0017831246, + 0.02194517, + -0.01774209, + -0.028529994, + 0.0144051, + -0.010157443, + 0.00918946, + 0.0086672595, + -0.00750186, + 0.0065784566, + -0.017601987, + -0.016290117, + 0.032249082, + -0.008641786, + 0.024658067, + -0.025307633, + -0.022085274, + 0.009832659, + -0.007527333, + 0.010335755, + -0.028555468, + 0.0007634002, + 0.010736958, + -0.016697688, + 0.0077183824, + 0.02269663, + 0.0116094155, + -0.012628344, + 0.03436336, + -0.029956495, + -0.038209815, + 0.010221126, + 0.017958613, + 0.0039833733, + 0.01928322, + -0.019423323, + 0.0054862923, + 0.01928322, + 0.00044180098, + -0.009807185, + -0.019525215, + -0.0032733073, + 0.019346902, + 0.013309752, + -0.008527157, + 0.023919344, + 0.008246952, + 0.013972055, + -0.014430573, + -0.016264644, + 0.0047061755, + -0.036477637, + 0.010310282, + 0.018442605, + -0.015424028, + 0.0035089345, + -0.011838675, + -0.0071197622, + 0.00086210895, + -0.0028721043, + -0.0017656118, + -0.0024931903, + -0.010526804, + 0.0044960217, + 0.019729001, + -0.0010865916, + 0.022836732, + 0.037496563, + 0.010641433, + 0.005871575, + 0.008832836, + 0.010342123, + -0.010176547, + 0.0061167544, + -0.0052538496, + -0.011450208, + -0.00058429176, + -0.018060505, + -0.018939331, + -0.014634359, + 0.012163457, + 0.0053875837, + -0.015729707, + -0.0085207885, + -0.030899003, + -0.023817452, + -0.0016939684, + 0.048526466, + 0.015844336, + -0.010157443, + 0.007036974, + 0.016175488, + 0.012711132, + 0.024594383, + 0.025231214, + -0.035025664, + 0.00416487, + 0.00859084, + -0.035433233, + -0.00014378433, + -0.03744562, + -0.025842572, + 0.00046050787, + 0.0015220243, + 0.030491432, + -0.027358226, + -0.027001603, + 0.020314885, + 0.043075196, + -0.020493196, + 0.005836549, + -0.017461885, + 0.01515656, + -0.015997175, + -0.02018752, + 0.0012720684, + 0.009819922, + 0.044807374, + 0.016825056, + -0.013628167, + 0.040145777, + -0.0038687438, + -0.01083885, + -0.02149939, + -0.006648508, + 0.012150721, + 0.010857956, + 0.015424028, + -0.000029478275, + 0.0053621107, + -0.012571029, + 0.00039443673, + -0.016939685, + 0.018811965, + 0.008081376, + -0.004909961, + 0.010584119, + 0.024148602, + -0.02588078, + -0.010526804, + -0.0029564844, + 0.027893165, + 0.018238818, + -0.013640904, + -0.016455693, + 0.0015498856, + 0.007871222, + -0.021142764, + 0.008756416, + -0.005378031, + 0.0064988527, + 0.0018786492, + -0.030593324, + 0.014035738, + -0.013564484, + 0.0051901666, + -0.02014931, + 0.009437825, + 0.029829128, + -0.007871222, + 0.026288353, + 0.025243951, + 0.010972585, + 0.009488771, + -0.02281126, + 0.0039292425, + -0.0041393964, + 0.026390245, + -0.022594737, + 0.015691496, + -0.013704587, + 0.013437118, + 0.0045342315, + -0.014748989, + -0.014825408, + -0.0022018405, + -0.019703528, + 0.0042253686, + 0.016009912, + 0.012163457, + 0.0058906795, + -0.00003445351, + 0.026594032, + -0.014354154, + 0.007259865, + -0.012469136, + 0.022760313, + 0.020849822, + -0.015525921, + -0.038439073, + -0.68227446, + -0.04771132, + 0.021805067, + -0.004375024, + -0.001918451, + 0.030746164, + 0.012545556, + 0.01856997, + -0.006170885, + -0.012520082, + 0.011813201, + 0.015131086, + 0.004152133, + 0.0062377523, + 0.0064797476, + -0.022556527, + -0.013640904, + -0.0046202033, + 0.013475328, + -0.0036808788, + 0.0012983377, + 0.009348668, + -0.005791971, + -0.012825761, + 0.020862559, + 0.018073242, + 0.024517965, + 0.010227494, + -0.008208741, + 0.004056609, + -0.016608533, + 0.017525569, + -0.0148763545, + -0.007985851, + 0.03856644, + 0.00060260063, + -0.012443663, + 0.017614724, + 0.017652934, + 0.011794096, + -0.016200962, + 0.009163987, + 0.006712191, + -0.023231568, + -0.01444331, + 0.014850881, + 0.011596679, + -0.013921109, + 0.03999294, + 0.0084889475, + 0.020849822, + -0.030516906, + 0.013182386, + -0.0028116056, + 0.028402628, + 0.003922874, + 0.037165415, + 0.012182563, + -0.009622505, + 0.006317356, + -0.0015506817, + -0.00072558847, + -0.00050030975, + -0.009100304, + -0.0068395566, + -0.0043845763, + -0.029064933, + -0.022836732, + -0.022289058, + -0.0076801726, + 0.0012370427, + 0.015296662, + -0.0127175, + 0.013233332, + 0.0041139233, + -0.005747393, + 0.023040518, + -0.007998588, + 0.01140563, + 0.0023116937, + 0.009781713, + -0.014073948, + -0.028835673, + -0.01185141, + 0.038031504, + -0.0057633137, + -0.040706187, + -0.023116937, + 0.022314532, + -0.0021938803, + 0.012150721, + -0.0067312955, + -0.025842572, + -0.007030606, + -0.012112511, + 0.038515493, + -0.016162751, + -0.0009011148, + -0.0030169832, + 0.0002167213, + 0.0025791624, + -0.016048122, + -0.01222714, + -0.0059893886, + 0.036961626, + -0.011170003, + -0.019372376, + 0.019499741, + 0.014748989, + -0.026237406, + 0.03624838, + -0.017347256, + -0.008686365, + 0.0101383375, + 0.013526274, + -0.026568558, + 0.053035222, + 0.0012744565, + -0.010195652, + -0.0066421395, + 0.011348315, + 0.023104202, + -0.0016732714, + 0.0016780477, + -0.011583942, + -0.013717324, + -0.007087921, + -0.007712014, + -0.024810906, + 0.007049711, + 0.0048335413, + 0.0040725293, + 0.018506287, + 0.003537592, + 0.008603577, + -0.005836549, + 0.016583059, + -0.012271719, + 0.019907312, + -0.0027940928, + -0.01654485, + 0.006215463, + -0.037216358, + 0.0039706365, + 0.003036088, + -0.031561308, + -0.042718574, + -0.005263402, + -0.01928322, + 0.0055340547, + -0.020913506, + -0.011953304, + -0.021091817, + 0.018862912, + 0.006763137, + -0.0065211416, + -0.029141352, + 0.002504335, + -0.020238465, + 0.0030281278, + 0.002696976, + -0.0067440323, + -0.0029596686, + -0.0013747573, + 0.00010248987, + -0.024377862, + -0.009208566, + 0.022365479, + -0.0077756974, + -0.023320723, + -0.008686365, + 0.00052498694, + -0.000013967976, + -0.010647802, + -0.017423676, + -0.011418366, + -0.011501154, + -0.029192299, + 0.0001619937, + -0.015742444, + 0.0138829, + 0.013742796, + 0.01594623, + -0.0007228023, + 0.039789155, + -0.0076101213, + 0.012201668, + 0.016264644, + 0.0030822584, + -0.012481873, + -0.0007176281, + 0.0031029554, + 0.00016915804, + -0.010303914, + -0.0039419793, + 0.0022909967, + 0.012902181, + 0.013093229, + 0.0050819055, + 0.0030456407, + 0.010252967, + -0.01984363, + 0.017194416, + -0.01797135, + 0.0051041944, + -0.04508758, + 0.008762784, + -0.008539894, + -0.0072917063, + 0.02746012, + -0.00082469516, + -0.011845043, + -0.007852117, + -0.008374318, + 0.0024868222, + 0.008839204, + -0.016264644, + 0.004047056, + -0.009367773, + -0.008125954, + 0.0013715731, + 0.0037222728, + 0.0351785, + 0.0013373435, + -0.0021349734, + 0.0035312236, + 0.0259572, + 0.018990278, + -0.008679996, + -0.015207506, + -0.023690086, + -0.010928007, + -0.01376827, + 0.014023002, + -0.03713994, + -0.00040319315, + 0.0027654353, + -0.03724183, + 0.02389387, + 0.019779947, + 0.0011064926, + 0.03810792, + 0.02412313, + -0.0026332932, + 0.011845043, + -0.0034420674, + 0.012520082, + 0.009845396, + -0.029421557, + 0.014608886, + -0.017487358, + -0.0074636503, + 0.004148949, + 0.0093868775, + 0.014596149, + -0.010762431, + 0.034414306, + 0.009253143, + 0.017474622, + 0.021028135, + -0.028682834, + -0.005075537, + 0.0059225215, + -0.0031125078, + 0.0061772536, + 0.009622505, + -0.009240407, + -0.008399791, + 0.0024724933, + -0.026364772, + -0.021817803, + -0.0022129852, + 0.023562718, + -0.018442605, + 0.018022295, + -0.014736252, + -0.0052092713, + 0.0037318252, + 0.010265703, + 0.02111729, + 0.0013564484, + -0.03331896, + 0.014290471, + -0.0012306744, + -0.000010982834, + -0.032809492, + -0.032325502, + 0.01132921, + 0.0020808429, + 0.00047921477, + 0.014048475, + 0.004820805, + 0.03398126, + 0.006024414, + 0.0003705556, + -0.025893517, + 0.007858485, + 0.01511835, + 0.011768623, + 0.0091576185, + -0.008469842, + -0.01853176, + -0.02607183, + -0.003980189, + 0.0034134102, + 0.012443663, + -0.011297368, + 0.0015427213, + -0.01148205, + -0.030771637, + -0.02221264, + 0.002843447, + 0.004276315, + -0.01781851, + -0.01527119, + 0.0015228203, + -0.021601282, + -0.0027733957, + 0.032503817, + 0.014927301, + 0.0053143483, + -0.011698572, + -0.016901474, + -0.012405453, + 0.07677625, + 0.013844689, + 0.0063237245, + 0.014621622, + 0.0046934388, + -0.015347608, + -0.018175134, + 0.013322488, + 0.0031507176, + 0.001935964, + 0.007845748, + -0.012908549, + 0.012825761, + -0.000054677846, + 0.012634712, + 0.0055754487, + 0.0067312955, + 0.012953127, + 0.024734486, + -0.025142059, + 0.015576867, + -0.0017831246, + -0.012889444, + 0.005298428, + -0.00686503, + -0.0028816569, + 0.025766151, + 0.0036999837, + 0.0140102655, + 0.005393952, + -0.0031650462, + 0.015640551, + 0.0013588365, + -0.022352742, + -0.01132921, + -0.008170532, + -0.003852823, + 0.01961437, + -0.0040534246, + 0.003875112, + 0.031968877, + 0.021410232, + 0.013093229, + -0.011469313, + -0.0009608176, + 0.01500372, + -0.010666907, + 0.016837792, + -0.004460996, + -0.0033433589, + 0.026772343, + -0.0073744943, + -0.0045405994, + -0.005670973, + 0.017347256, + 0.020938978, + -0.0027511066, + -0.017398203, + -0.011692204, + -0.017194416, + 0.0045405994, + -0.0033879369, + -0.0018054137, + -0.007928536, + -0.027969584, + -0.0023116937, + 0.0063078036, + -0.0044801007, + -0.013297016, + -0.0006826024, + -0.0065179574, + -0.024709014, + -0.021066345, + 0.0023944818, + 0.0377513, + 0.023575455, + 0.02092624, + -0.010851587, + -0.010068286, + 0.04880667, + 0.004760306, + -0.0034038576, + -0.015933493, + 0.01053954, + -0.01200425, + 0.0023053256, + 0.040833555, + -0.012074301, + -0.024059447, + -0.0005229968, + 0.034465253, + -0.008113218, + 0.016672216, + -0.010526804, + -0.00547674, + -0.011093583, + 0.021372022, + 0.0103994375, + -0.01706705, + -0.0020999478, + 0.020696983, + -0.0259572, + -0.013093229, + -0.015182033, + 0.0141248945, + 0.01132921, + 0.023957554, + 0.002021936, + -0.022976834, + 0.01511835, + 0.0000023414705, + -0.0073872306, + -0.016404746, + 0.0038814803, + 0.014175842, + 0.014392364, + -0.011488417, + 0.015220243, + -0.0067058224, + -0.02888662, + 0.0082596885, + -0.034490727, + 0.021168238, + -0.0013039099, + -0.009998235, + -0.0010085799, + 0.0192068, + 0.0014089869, + 0.0056805257, + 0.011131792, + 0.0013644088, + 0.025345843, + -0.019665318, + -0.0127175, + -0.035153028, + -0.02419955, + 0.029905548, + 0.0105140675, + -0.00964161, + -0.015245716, + -0.010144706, + 0.009011148, + 0.0062536728, + 0.0040247673, + -0.026594032, + -0.01714347, + 0.0028912092, + 0.007928536, + -0.011182739, + 0.01519477, + 0.00092101574, + -0.009966393, + -0.012316297, + 0.018608179, + 0.0016477982, + -0.009011148, + -0.019346902, + -0.030822584, + 0.027689379, + 0.007017869, + 0.025307633, + -0.010870692, + -0.0004103575, + 0.010596856, + -0.0032335056, + 0.0018245187, + 0.0022687078, + -0.0064893, + -0.03443978, + 0.032249082, + 0.008597208, + 0.007820276, + 0.022085274, + 0.00051225035, + 0.0048399097, + 0.019461533, + -0.0076164897, + -0.005454451, + -0.026594032, + -0.026746871, + -0.007584648, + 0.0041839746, + -0.016710425, + -0.007489124, + -0.004254026, + -0.0064415378, + 0.01872281, + 0.008851941, + -0.00922767, + -0.0031332048, + 0.032580234, + -0.018888384, + 0.042412896, + -0.012309928, + 0.0023944818, + -0.006107202, + -0.016888738, + -0.0046807025, + 0.010934375, + 0.004043872, + 0.014914564, + 0.01508014, + -0.017270837, + -0.015666025, + 0.005448083, + 0.0149909835, + 0.021473916, + -0.003196888, + -0.015653288, + -0.028147897, + -0.025485946, + -0.022289058, + -0.034770932, + -0.038439073, + 0.011424734, + 0.0008382278, + -0.02325704, + 0.025078375, + -0.0050628004, + -0.01909217, + 0.0036331166, + 0.014023002, + 0.028249789, + -0.003951532, + 0.0071261306, + 0.025829835, + -0.016786845, + -0.005830181, + 0.008336108, + -0.011934198, + -0.011189108, + 0.023104202, + 0.028224315, + -0.018888384, + 0.028759254, + 0.0076929093, + 0.0064670113, + 0.032733075, + -0.01812419, + -0.015691496, + -0.00011194281, + 0.025040165, + -0.015564132, + 0.012921286, + -0.026160987, + 0.01230356, + -0.019970996, + -0.004566073, + 0.007743856, + -0.0030026545, + -0.0097626075, + -0.006699454, + -0.028555468, + 0.012564661, + 0.015232979, + 0.0061772536, + 0.01928322, + -0.002273484, + -0.013309752, + -0.015385819, + -0.019168591, + 0.03268213, + 0.011978777, + 0.019181326, + -0.003241466, + -0.0060976497, + -0.0069605545, + 0.00037990903, + -0.0044482592, + 0.027078021, + -0.0048494623, + 0.005967099, + -0.023842923, + 0.021130027, + 0.034770932, + -0.022187166, + -0.0037795876, + 0.008380686, + -0.013666377, + -0.0057346565, + 0.013844689, + -0.009985498, + -0.02393208, + 0.005846102, + -0.030262172, + 0.0028052372, + -0.018850176, + 0.0007538478, + 0.012297192, + -0.023460826, + -0.0024279153, + -0.011864147, + 0.008055902, + 0.005897048, + -0.0056104744, + -0.010609591, + 0.025817098, + 0.008094112, + -0.012297192, + 0.016786845, + -0.008367949, + 0.012271719, + -0.011348315, + 0.010189284, + 0.0035630653, + -0.029472504, + 0.021091817, + -0.0092722485, + -0.03263118, + -0.0140102655, + -0.011399262, + -0.0036745104, + -0.006616666, + -0.0066867177, + 0.004040688, + -0.004566073, + 0.0088965185, + -0.01718168, + 0.005648684, + -0.003496198, + -0.021996116, + 0.016876, + 0.02603362, + -0.022314532, + -0.008234215, + 0.009921815, + -0.011112688, + 0.0022894046, + -0.035127558, + -0.008036798, + -0.027511066, + 0.0048239892, + 0.0037859557, + -0.009017516, + -0.012762078, + -0.0051710615, + -0.018009558, + 0.0008867861, + -0.006314172, + 0.011431103, + -0.006355566, + 0.006355566, + -0.02333346, + 0.00825332, + -0.02588078, + 0.024594383, + -0.008998412, + -0.023741031, + -0.018862912, + 0.012329034, + -0.00375093, + -0.00652751, + -0.0055276863, + -0.042667627, + -0.01812419, + -0.014659832, + -0.0057346565, + -0.000505882, + 0.0063714865, + -0.0017958613, + 0.02051867, + -0.01714347, + -0.0074827555, + 0.00821511, + 0.009246775, + -0.0075082285, + -0.024352388, + -0.009960025, + -0.0018420315, + -0.0107751675, + 0.020493196, + 0.011908726, + -0.00656572, + -0.008367949, + 0.014838144, + -0.00010696758, + 0.0047475696, + -0.0058874954, + -0.007177077, + 0.00077573885, + 0.0055436073, + 0.024849117, + 0.0377513, + 0.012125248, + 0.0035057506, + -0.019690791, + -0.014812672, + 0.004422786, + 0.03530587, + -0.02483638, + 0.009934552, + 0.0023323908, + -0.019372376, + 0.01650664, + -0.022900416, + 0.005094642, + 0.016124541, + 0.025689732, + 0.007928536, + -0.009781713, + 0.011647625, + 0.0118705155, + -0.00042627825, + -0.018608179, + -0.008132322, + 0.0022050247, + -0.01812419, + -0.00560729, + 0.016723162, + -0.020684246, + 0.004085266, + -0.019945523, + 0.004209448, + -0.018837439, + 0.0016064043, + -0.024339652, + -0.009278617, + -0.035433233, + 0.017309045, + 0.01710526, + -0.0052665863, + 0.003913322, + -0.03168867, + 0.002923051, + 0.00006199144, + -0.012239877, + 0.0066230344, + -0.022161692, + -0.026313826, + 0.004152133, + -0.0035280394, + -0.026084566, + 0.0030838505, + 0.015385819, + 0.0149909835, + 0.02479817, + 0.22925888, + 0.016570322, + -0.011125424, + 0.037598457, + 0.0056327633, + 0.030669745, + 0.02281126, + -0.017869456, + 0.03324254, + 0.029370612, + -0.016761372, + -0.0040088464, + -0.007743856, + 0.0025520972, + 0.00500867, + -0.02107908, + -0.033599164, + 0.0008788257, + -0.022441898, + -0.014112158, + 0.014379627, + -0.005075537, + 0.015131086, + 0.006966923, + 0.029345138, + 0.009807185, + -0.010826115, + 0.010068286, + 0.021321077, + 0.009348668, + -0.005432162, + -0.014838144, + 0.0032175847, + -0.011450208, + 0.0037955083, + -0.004715728, + -0.0015642142, + 0.008565367, + 0.020773403, + 0.030032914, + 0.012615607, + 0.01121458, + -0.03380295, + -0.014163105, + -0.0035949068, + 0.006552983, + -0.026313826, + -0.011055373, + 0.014494256, + 0.018149663, + -0.008164164, + 0.004339998, + 0.033268012, + 0.031077316, + -0.0078011705, + 0.01789493, + 0.028046004, + -0.006339645, + 0.005330269, + -0.010342123, + -0.019741738, + 0.019894578, + -0.025384054, + -0.006043519, + 0.0163538, + -0.011061741, + -0.022365479, + -0.0030647456, + 0.008839204, + -0.03135752, + -0.0004107555, + 0.0059734676, + 0.0074827555, + 0.013093229, + -0.016965158, + -0.017041577, + 0.008800994, + -0.003537592, + 0.022110745, + -0.0020728824, + -0.0086672595, + -0.005053248, + -0.010310282, + 0.0037541143, + -0.002800461, + -0.019015752, + -0.0008318595, + 0.006591193, + 0.026543085, + -0.015347608, + 0.0029262349, + -0.004098003, + 0.0010929599, + 0.00240085, + 0.018799229, + 0.027842218, + -0.0025314002, + 0.0141248945, + -0.020773403, + 0.016417483, + -0.027001603, + -0.035840806, + 0.007890327, + -0.0142395245, + -0.02314241, + 0.020085625, + 0.004002478, + 0.0007980279, + 0.026594032, + -0.0006599153, + -0.0058652065, + -0.015958967, + 0.0076101213, + -0.006801347, + 0.016723162, + -0.016786845, + 0.017576514, + -0.02265842, + -0.007966747, + 0.00307589, + -0.0031841511, + -0.012819393, + 0.00075942004, + -0.011392893, + 0.012348139, + -0.016901474, + -0.00825332, + 0.015653288, + 0.00043543268, + -0.035968173, + 0.03525492, + 0.0036745104, + 0.032784022, + -0.010635065, + -0.014698042, + 0.012539187, + -0.007807539, + 0.0024088104, + 0.010647802, + -0.014659832, + -0.0036331166, + -0.005285691, + 0.010590487, + 0.013246069, + -0.0042922357, + 0.0035885384, + -0.0022925888, + -0.01797135, + -0.0096479785, + -0.01196604, + -0.018862912, + -0.0039674523, + -0.005995757, + -0.01650664, + 0.017296309, + -0.0021827356, + -0.015767917, + -0.010450385, + 0.004967276, + 0.030924477, + -0.012551924, + 0.0032382817, + 0.020811612, + -0.0009998234, + 0.012456399, + -0.00065752724, + -0.16200961, + 0.016532114, + 0.006884135, + -0.011475681, + -0.019474268, + 0.0021365655, + 0.021881487, + 0.013220596, + -0.019117644, + 0.024161339, + -0.0014567492, + 0.017232627, + -0.053493742, + -0.017551042, + -0.0035598811, + 0.017041577, + -0.008450737, + 0.005846102, + 0.02123192, + 0.002357864, + 0.0051583247, + -0.02389387, + 0.0076929093, + 0.013793743, + 0.016684953, + -0.00551495, + -0.017156206, + 0.029880075, + 0.0033147014, + -0.015373082, + 0.0026364771, + 0.008578103, + 0.014061212, + 0.0056104744, + 0.022314532, + -0.0059893886, + 0.004467364, + 0.011921462, + 0.012087038, + -0.007597385, + -0.0013198307, + 0.022785787, + 0.020276675, + 0.01812419, + -0.013933846, + 0.027128968, + 0.02479817, + 0.02603362, + 0.0043845763, + -0.0039833733, + 0.019270483, + -0.0288102, + -0.020862559, + -0.011730413, + 0.021333814, + 0.019932786, + 0.02456891, + 0.015041931, + -0.007196182, + 0.024059447, + 0.011291, + -0.050386008, + -0.006511589, + 0.013831953, + 0.0026603583, + -0.00581426, + 0.00064717873, + 0.008743679, + -0.020289412, + 0.006871398, + -0.015360345, + -0.011392893, + -0.009597031, + -0.012558293, + 0.0024979666, + 0.01099169, + -0.022454634, + 0.00463294, + -0.010641433, + -0.005499029, + 0.014354154, + 0.02888662, + -0.008157795, + -0.009654347, + -0.015882546, + 0.009660714, + -0.00050468795, + 0.019359639, + -0.02265842, + -0.004607467, + 0.011252791, + -0.037904136, + -0.0048112525, + -0.040324092, + 0.010666907, + 0.014596149, + -0.008508052, + 0.0064096963, + 0.015029194, + 0.0066867177, + -0.001157439, + -0.003137981, + -0.015895283, + 0.0073999674, + 0.02142297, + 0.014264997, + -0.0008254912, + 0.013679113, + 0.03713994, + 0.00041632776, + -0.013233332, + 0.03357369, + -0.00223209, + 0.021601282, + 0.0063491976, + -0.009749871, + 0.019856367, + -0.02262021, + 0.0034643565, + 0.008673628, + 0.05721283, + -0.00889015, + 0.00012497793, + 0.005142404, + -0.012698395, + -0.016914211, + -0.10072107, + -0.01590802, + 0.016379274, + 0.029064933, + 0.00994092, + 0.0144687835, + 0.00757828, + 0.01976721, + -0.0075082285, + 0.026135514, + -0.004365471, + -0.015806127, + -0.007221655, + 0.00031722107, + -0.008240583, + -0.009246775, + 0.004884488, + -0.015360345, + -0.029141352, + 0.010004603, + -0.0050882734, + 0.009444192, + 0.008266057, + -0.007992219, + -0.016124541, + -0.0060658082, + -0.031204682, + 0.014532466, + 0.0055340547, + -0.017054314, + 0.025052901, + -0.018748282, + 0.010978953, + 0.00044936335, + -0.019856367, + 0.00036975957, + -0.012386348, + 0.0026794632, + 0.009711661, + -0.03976368, + -0.0019073066, + -0.008603577, + 0.011864147, + -0.01361543, + -0.0015275965, + 0.010004603, + -0.021244656, + 0.0015435173, + 0.0072980747, + -0.022467371, + -0.007138867, + 0.02532037, + -0.020964451, + -0.009597031, + 0.030185753, + -0.028861146, + 0.013207859, + 0.013010442, + -0.02344809, + 0.020454988, + -0.0066867177, + 0.019270483, + -0.006871398, + 0.014965511, + -0.0127684465, + -0.024874588, + -0.02520574, + -0.01762746, + 0.02626288, + -0.040120304, + -0.0050628004, + 0.0024295074, + -0.025193004, + 0.022314532, + -0.021626756, + 0.012774815, + -0.02753654, + -0.011972409, + 0.0057378407, + -0.010807009, + -0.023129674, + -0.01001734, + 0.0013835137, + -0.0015435173, + -0.003157086, + 0.029829128, + -0.011647625, + -0.0032175847, + 0.030848056, + 0.0021811435, + 0.012456399, + 0.031179208, + 0.011615784, + -0.023078728, + -0.018773755, + 0.017474622, + 0.00039145158, + 0.009329563, + 0.016812319, + -0.0068777665, + -0.016035385, + -0.01211888, + -0.043839395, + 0.014264997, + -0.004741201, + -0.015818864, + -0.016328327, + 0.0032733073, + -0.009329563, + 0.01136742, + -0.0099090785, + -0.010265703, + -0.008648154, + -0.0034420674, + -0.0051742457, + -0.010061918, + -0.013207859, + 0.0057155513, + 0.013322488, + 0.0027654353, + 0.007890327, + -0.012430926, + -0.015602341, + -0.004569257, + 0.0029739973, + 0.01797135, + -0.03181604, + 0.007419072, + -0.012443663, + -0.03604459, + -0.026797816, + -0.004505574, + 0.016977895, + -0.027256334, + 0.01234177, + 0.034159575, + -0.010042813, + -0.024517965, + -0.025040165, + 0.026390245, + 0.014494256, + -0.025676996, + -0.02959987, + -0.037904136, + 0.013411645, + -0.029880075, + -0.0046902546, + 0.031382993, + -0.021715911, + -0.0076419627, + 0.014812672, + 0.015602341, + 0.0010404214, + 0.022518318, + 0.0024565726, + -0.0116094155, + -0.0063269082, + -0.004219, + 0.022900416, + 0.009660714, + 0.011915094, + -0.023473563, + -0.000778923, + -0.009437825, + 0.0062441207, + 0.0038082448, + 0.008960201, + 0.0027940928, + -0.0007916596, + -0.012373611, + -0.016837792, + -0.0183025, + -0.009208566, + -0.014137631, + 0.04816984, + 0.0148763545, + 0.024250496, + 0.0039037694, + -0.0002296569, + -0.008017693, + -0.014608886, + 0.016188225, + 0.006712191, + -0.00922767, + -0.01928322, + 0.004524679, + 0.03056785, + 0.025676996, + -0.039075904, + -0.0024868222, + 0.003196888, + 0.0077756974, + -0.01665948, + 0.006884135, + -0.008762784, + 0.005368479, + 0.014621622, + 0.0051901666, + 0.005686894, + -0.008380686, + 0.0065466147, + 0.02111729, + 0.010768799, + -0.009240407, + 0.006661244, + -0.025906254, + -0.022365479, + -0.004082082, + -0.017512832, + -0.019525215, + -0.00656572, + 0.00855263, + 0.013207859, + -0.01020202, + -0.0063460134, + 0.018022295, + 0.00032458443, + -0.006043519, + -0.028861146, + -0.016264644, + -0.010870692, + 0.014506993, + 0.005368479, + 0.008788257, + 0.013080494, + -0.003836902, + 0.01594623, + 0.026797816, + 0.02817337, + -0.03199435, + 0.017270837, + 0.01665948, + 0.019487005, + -0.0043941285, + -0.0012577397, + -0.004359103, + 0.0006400144, + -0.016634006, + -0.024874588, + 0.026466664, + 0.007635595, + 0.05548065, + -0.018620916, + -0.039789155, + 0.019346902, + -0.021728648, + 0.0017146654, + 0.025052901, + 0.011080846, + -0.0183025, + -0.009667083, + 0.006107202, + 0.0177803, + 0.026415719, + -0.011991514, + -0.021040872, + -0.00081156055, + -0.024772696, + 0.015029194, + -0.03054238, + 0.0063491976, + 0.043380875, + -0.0006973291, + 0.004575625, + 0.009921815, + -0.021550335, + -0.007100657, + 0.020111099, + 0.01785672, + 0.004441891, + -0.0022161691, + 0.02314241, + -0.02281126, + -0.027714852, + -0.011762255, + 0.0060976497, + -0.03548418, + -0.0047730426, + -0.030058388, + -0.009068463, + 0.0057569453, + 0.008024061, + 0.039330635, + -0.009972761, + -0.0046265717, + 0.013819216, + -0.013093229, + -0.011341946, + 0.007011501, + 0.00095683744 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.016263332, + -0.011116868, + 0.0051686466, + -0.022411201, + 0.0032006947, + 0.018037975, + -0.021194303, + -0.014640802, + 0.013221087, + -0.012967567, + 0.0053049135, + 0.007897159, + -0.0077323713, + 0.017442202, + -0.023387253, + -0.0105844755, + 0.039143544, + -0.00080175814, + 0.025821049, + -0.018697128, + -0.025035135, + 0.0017841496, + -0.015540798, + 0.005637659, + -0.021701343, + -0.004151396, + 0.006705614, + -0.01524925, + 0.0028774561, + 0.020053461, + 0.014983053, + -0.021168951, + 0.014336577, + -0.026188655, + -0.017911214, + 0.012644328, + 0.016276008, + 0.006170052, + 0.014615449, + -0.03186751, + 0.00210105, + 0.006106672, + -0.002021825, + -0.012086583, + -0.012618977, + 0.016402768, + 0.027937945, + -0.00012012508, + -0.01505911, + 0.016630936, + -0.00044366065, + 0.01375348, + -0.022449229, + -0.016732344, + -0.00623977, + -0.030219628, + 0.0074661747, + 0.018430931, + -0.01066687, + -0.017683046, + -0.011161234, + -0.007840117, + 0.0013254362, + -0.003059674, + 0.011757007, + -0.004591888, + -0.005472871, + 0.0044619585, + 0.011959824, + 0.0017065089, + 0.020687262, + 0.023045002, + 0.009386592, + 0.017581638, + 0.024718236, + 0.015097138, + -0.019749237, + 0.014108408, + -0.005574279, + -0.008448566, + 0.0031373145, + -0.013208412, + -0.019267548, + -0.011699965, + 0.016859105, + 0.000040652387, + -0.015578827, + -0.00031412757, + -0.030143572, + -0.02626471, + -0.013537988, + 0.036633693, + 0.033008352, + -0.0055932933, + 0.0029297448, + 0.01674502, + 0.014983053, + 0.022436552, + 0.02661964, + -0.03635482, + 0.0021311557, + 0.007897159, + -0.03245061, + 0.004154565, + -0.023856267, + -0.023437958, + 0.0073077246, + 0.0016138155, + 0.026467526, + -0.027735129, + -0.024477392, + 0.030042164, + 0.036177356, + -0.023881618, + -0.0060686436, + -0.016909808, + 0.010071097, + -0.020509798, + -0.03513792, + 0.0006967849, + 0.016973188, + 0.04053791, + 0.02040839, + -0.014273196, + 0.036405526, + -0.004059495, + -0.011490811, + -0.024794292, + -0.007485189, + 0.01859572, + -0.002457563, + 0.01562953, + 0.025783021, + 0.024363307, + -0.016098544, + 0.008220398, + -0.009532366, + 0.019242195, + 0.0005549719, + -0.023323873, + 0.015743615, + 0.027861888, + -0.014095732, + -0.011262642, + -0.0071429363, + 0.028292874, + 0.015680235, + -0.00055734866, + -0.02165064, + -0.007630963, + 0.004341536, + -0.015705587, + 0.0009808069, + 0.0013555418, + 0.009728844, + 0.01356334, + -0.013550663, + 0.0059101935, + -0.034504123, + -0.009285184, + -0.021092895, + -0.010514758, + 0.023881618, + -0.0015781643, + 0.023564719, + 0.025225276, + -0.00031947528, + 0.0033496378, + -0.012397146, + -0.009513352, + -0.009538704, + 0.040106922, + -0.017201357, + 0.02270275, + -0.012809116, + 0.018443607, + 0.0022056273, + -0.008632368, + -0.017961917, + -0.00391689, + -0.021067543, + -0.0064742765, + 0.009133072, + -0.0009990287, + 0.015337982, + -0.0078084273, + 0.016073192, + -0.0053619556, + 0.015870376, + 0.0023308028, + 0.018367551, + 0.031715397, + -0.0136901, + -0.03719144, + -0.6859247, + -0.04444212, + 0.0059323767, + -0.0013032531, + -0.007504203, + 0.027075976, + 0.004899281, + 0.022981621, + 0.0053524487, + -0.01706192, + 0.008093637, + 0.0020440079, + 0.020002756, + -0.006182728, + 0.009785886, + -0.025073165, + -0.016897133, + 0.002728513, + 0.00678167, + -0.0011384649, + 0.00620808, + 0.015971784, + -0.020129517, + -0.001593217, + 0.028318224, + 0.004217945, + 0.013081651, + 0.001050525, + -0.0012866159, + 0.018773183, + -0.008968283, + 0.014970378, + -0.0072316686, + -0.008651382, + 0.04641958, + 0.0064489245, + -0.011249966, + 0.011230952, + 0.0072126547, + 0.023171762, + -0.010102787, + -0.004290832, + 0.006173221, + -0.033008352, + -0.020104164, + 0.008049272, + 0.026797103, + -0.010007717, + 0.031943567, + 0.0013864395, + 0.026416823, + -0.023944998, + 0.010337293, + 0.0014894322, + 0.017670369, + 0.00830913, + 0.026518231, + -0.003527102, + -0.015287278, + -0.0010933066, + -0.006807022, + 0.0019536912, + -0.016390093, + 0.0018839733, + -0.02266472, + 0.0027776326, + -0.031842157, + -0.013094327, + -0.006274629, + -0.0018095017, + -0.0069591342, + 0.010064758, + -0.018570367, + 0.028140761, + 0.017023893, + 0.0023957675, + 0.022525284, + -0.007624625, + 0.0021248176, + 0.0050894213, + 0.009462648, + -0.016694317, + -0.029230898, + -0.012720385, + 0.028014, + -0.02352669, + -0.026214005, + -0.01611122, + 0.02314641, + 0.00037394254, + 0.025554853, + 0.003441539, + -0.022892889, + -0.0028552732, + -0.008524623, + 0.037292846, + -0.008860537, + 0.0057675885, + 0.017949242, + 0.0005391269, + 0.009735182, + -0.02594781, + -0.006730966, + -0.010799968, + 0.030675964, + -0.0024781616, + -0.016884457, + 0.031994272, + 0.0044207615, + -0.016377416, + 0.030599909, + -0.015021082, + -0.013804184, + 0.005672518, + 0.01394362, + -0.029535122, + 0.056535043, + 0.011940809, + 0.014285873, + 0.00025035135, + 0.015946431, + 0.009823915, + 0.001072708, + 0.00046505142, + -0.0020677755, + 0.0016922485, + -0.016580231, + -0.022322468, + -0.028064705, + 0.002088374, + -0.001561527, + -0.007979553, + 0.005663011, + 0.0022769298, + -0.0026714709, + -0.00025550099, + 0.0106351795, + -0.015046434, + 0.022677397, + -0.014349253, + -0.018785859, + -0.004103861, + -0.023298522, + 0.0012897849, + -0.008423214, + -0.012815455, + -0.03569567, + -0.013423904, + -0.015109814, + 0.021257684, + -0.028039353, + -0.008683072, + -0.031106949, + 0.019812617, + 0.0039961147, + -0.008011243, + -0.02963653, + 0.010286589, + -0.012745736, + 0.016884457, + 0.010933066, + 0.0043478743, + -0.0044080853, + -0.002113726, + -0.013512636, + -0.02333655, + -0.0007062919, + 0.030143572, + -0.007561245, + -0.023729507, + -0.011021798, + -0.0007138183, + -0.0055362512, + -0.015211222, + -0.016542204, + -0.009323211, + -0.00014230811, + -0.027101327, + 0.009088705, + -0.017201357, + 0.007916174, + 0.019787265, + 0.008252088, + -0.019622477, + 0.051109705, + 0.0011384649, + 0.02371683, + 0.018152058, + -0.010876024, + 0.012676018, + -0.018760508, + 0.0008025504, + 0.000495157, + -0.012815455, + 0.00830913, + 0.0017683046, + 0.0049214642, + 0.01133236, + 0.010394335, + -0.003053336, + 0.011750669, + -0.011104192, + 0.021853456, + -0.01486897, + 0.009906309, + -0.032171734, + 0.022867538, + -0.010552785, + -0.001085384, + 0.042033676, + 0.0058721653, + -0.02333655, + -0.0053619556, + -0.005723222, + 0.015426714, + 0.0020202405, + -0.01244785, + 0.01133236, + -0.011522501, + -0.007846455, + -0.0004381149, + 0.011826725, + 0.023171762, + -0.0050672386, + 0.00620808, + 0.0036031583, + 0.041729454, + 0.01362672, + -0.023032326, + -0.009861942, + -0.02021825, + -0.0095577175, + -0.019914025, + 0.020332333, + -0.033794265, + -0.005672518, + 0.0093041975, + -0.03845904, + 0.01581967, + 0.015223898, + 0.0012129365, + 0.01668164, + 0.030828077, + -0.003129392, + 0.011915457, + 0.0005957729, + 0.018798536, + 0.0096908165, + -0.019571772, + 0.012359118, + -0.017847834, + -0.0010933066, + -0.0127393985, + 0.017074596, + 0.02626471, + 0.00079502404, + 0.04119706, + 0.0047788587, + 0.028799914, + 0.02028163, + -0.015730938, + -0.019191492, + 0.012346442, + -0.0023292184, + 0.009025325, + -0.005545758, + 0.0029123153, + -0.0059513906, + 0.010267575, + -0.017391497, + -0.019406984, + 0.009716168, + 0.022411201, + -0.020877402, + 0.014133761, + -0.012910524, + -0.0036031583, + 0.00065796456, + 0.012397146, + 0.01786051, + -0.008239412, + -0.03582243, + 0.013550663, + -0.0028806252, + 0.0019980574, + -0.025529502, + -0.031132301, + 0.017999945, + 0.009139409, + 0.014045028, + 0.009063353, + 0.013030947, + 0.024680208, + 0.00167165, + 0.018545015, + -0.026721047, + 0.0003466099, + 0.01092039, + 0.014133761, + 0.004772521, + -0.0032609056, + -0.01903938, + -0.030168924, + -0.011592219, + 0.0088161705, + 0.0104323635, + -0.012555596, + 0.006192235, + -0.014336577, + -0.018354874, + -0.007821104, + 0.0021470005, + -0.002665133, + -0.01661826, + -0.009988703, + -0.007890821, + -0.022905566, + -0.009278845, + 0.03250131, + 0.004097523, + 0.0044746343, + -0.014678829, + -0.015946431, + -0.00020737173, + 0.077780046, + 0.013778832, + 0.006290474, + 0.009906309, + 0.009228141, + -0.0168084, + -0.023437958, + 0.0071302606, + -0.009798562, + 0.0025859077, + 0.010400673, + -0.011807711, + 0.024566123, + 0.0019536912, + -0.009411944, + -0.0030295684, + 0.014336577, + 0.014640802, + 0.042642128, + -0.019837968, + 0.0023830915, + 0.020205574, + -0.011630246, + 0.0009950674, + 0.005773926, + 0.00136901, + 0.02222106, + 0.0050704074, + 0.017277414, + -0.0025336193, + 0.005399984, + 0.017315442, + -0.010926728, + -0.013652071, + -0.010121801, + -0.0019489378, + -0.0026635483, + 0.0022183033, + -0.003132561, + -0.014425309, + 0.034326658, + 0.0098049, + 0.0094563095, + -0.008803495, + -0.009380254, + 0.023108382, + -0.006223925, + 0.018481635, + -0.018849239, + -0.01604784, + 0.027988648, + -0.006946458, + -0.0061098407, + -0.0073584286, + 0.00681336, + 0.002444887, + -0.006246108, + -0.014780237, + -0.017467553, + -0.01117391, + 0.012904187, + -0.0006706406, + 0.0015290447, + -0.009602084, + -0.007745047, + -0.004759845, + 0.0059577287, + -0.0039073825, + -0.016440796, + 0.003432032, + 0.00023450634, + -0.012682357, + -0.020243602, + -0.00028778522, + 0.0252126, + 0.016542204, + 0.009430958, + -0.01101546, + -0.006296812, + 0.038991433, + -0.00021093687, + 0.006604206, + -0.003485905, + -0.00040246357, + -0.004782028, + 0.0013484114, + 0.039397065, + -0.02165064, + -0.014425309, + 0.0026239357, + 0.030980188, + 0.0003337358, + 0.01241616, + -0.016542204, + -0.016516851, + -0.011452783, + 0.017594313, + 0.010121801, + -0.018253466, + -0.0013864395, + 0.0071682883, + -0.024122464, + -0.014577421, + -0.0074154707, + 0.0072887107, + 0.015908403, + 0.03501116, + 0.0106351795, + -0.023057677, + 0.018278819, + 0.014704181, + -0.012035879, + 0.0002236129, + -0.0032355536, + 0.0005827007, + 0.0053429417, + -0.0012176901, + 0.0091520855, + 0.003447877, + -0.028926674, + 0.0077577233, + -0.048270278, + 0.03087878, + 0.004782028, + -0.0066929376, + 0.0028774561, + 0.02862245, + -0.012549258, + 0.006173221, + 0.006711952, + -0.0044904794, + 0.023323873, + -0.012010528, + -0.015743615, + -0.04099424, + -0.029940756, + 0.035923835, + 0.0057929405, + -0.018963324, + -0.008131666, + 0.00951969, + 0.011858415, + 0.011478134, + 0.001041018, + -0.033768915, + -0.019685857, + -0.0022151342, + 0.009018987, + -0.0051718154, + 0.011478134, + -0.0010521095, + 0.0021248176, + -0.021599935, + 0.0098049, + 0.009373915, + 0.00046109018, + -0.010571799, + -0.019140787, + 0.02251261, + 0.008004906, + 0.014792914, + -0.006040123, + 0.009247156, + 0.0070668804, + -0.0071999785, + 0.000049416667, + -0.0087654665, + -0.0043542124, + -0.02725344, + 0.018380227, + 0.027633721, + -0.0038630166, + 0.028267521, + -0.005384139, + 0.016326712, + 0.013449255, + 0.0058087856, + -0.0025462953, + -0.023450634, + -0.026112597, + -0.0020741136, + 0.00993166, + -0.014399957, + -0.00088652904, + 0.0007621456, + -0.010077435, + 0.01735347, + 0.011864753, + -0.0065408256, + 0.0029123153, + 0.036735103, + -0.0037489324, + 0.031461876, + -0.0017477061, + 0.01136405, + -0.02215768, + -0.017340792, + -0.00044643352, + 0.007472513, + 0.002795062, + 0.013525312, + 0.0019109098, + -0.0011170742, + -0.024071759, + 0.0106351795, + 0.009665464, + 0.021004163, + 0.0052510407, + -0.008061947, + -0.021295711, + -0.01786051, + -0.037901293, + -0.028394282, + -0.025922457, + 0.00240369, + 0.0049119573, + -0.02689851, + 0.022271764, + -0.011522501, + -0.02234782, + 0.0030501669, + 0.011858415, + 0.030219628, + -0.0072570206, + 0.017163329, + 0.013271791, + -0.0058848416, + -0.0227281, + 0.0023957675, + -0.014906998, + -0.00983659, + 0.0192929, + 0.010204195, + -0.010407011, + 0.018950647, + 0.008638707, + 0.017264737, + 0.038028054, + -0.0035999892, + -0.009855605, + 0.0004805003, + 0.008974621, + -0.023957675, + 0.004918295, + -0.01104715, + 0.014767561, + -0.018722478, + -0.007516879, + 0.007973216, + -0.005586955, + -0.01741685, + 0.011852077, + -0.049740694, + 0.016199952, + 0.012783765, + 0.0006920314, + 0.006280967, + -0.014146437, + -0.021308387, + -0.017911214, + -0.010660532, + 0.026568934, + -0.0026223513, + 0.015895726, + 0.015857698, + -0.0067499797, + -0.018430931, + -0.0053936457, + 0.008670396, + 0.0267464, + -0.0046362537, + -0.0044841417, + -0.014514041, + 0.026416823, + 0.048828024, + -0.021004163, + -0.005688363, + 0.0052035055, + -0.015933756, + -0.001677988, + 0.016022487, + 0.006927444, + -0.016947836, + 0.013360524, + -0.023615422, + 0.00047970808, + -0.03186751, + -0.0001870703, + 0.00059379224, + -0.010007717, + -0.0029566812, + -0.0021691837, + 0.01910276, + -0.000068727786, + 0.0076816673, + -0.012536583, + 0.029966107, + 0.00012359118, + -0.015135166, + 0.019026704, + -0.003444708, + 0.021688668, + 0.006274629, + 0.014235169, + 0.0059450525, + -0.019723885, + 0.03037174, + -0.012714046, + -0.026847808, + -0.014577421, + 0.0057929405, + 0.000214502, + -0.0023054508, + -0.012264048, + 0.005000689, + -0.0012533413, + 0.009830252, + -0.012276724, + -0.006217587, + 0.0016193613, + -0.015680235, + 0.011383064, + 0.020028109, + -0.021916837, + -0.010857009, + 0.013335171, + -0.016352063, + -0.0043954095, + -0.03501116, + -0.00811899, + -0.021029515, + 0.009076029, + 0.020040786, + -0.010799968, + -0.004854915, + -0.019064732, + -0.0065725157, + -0.0015036927, + -0.007878145, + 0.01846896, + -0.0022943593, + -0.0049689994, + -0.018342199, + 0.021321064, + -0.018088678, + 0.0058689965, + -0.0026984075, + -0.0065535014, + -0.024971757, + 0.0022373172, + -0.00010299265, + -0.018519662, + -0.011053488, + -0.047028027, + -0.018861916, + -0.0034922431, + -0.015921079, + -0.0016764035, + -0.0016478824, + 0.004930971, + 0.015553474, + -0.0037521014, + -0.012422498, + 0.018392902, + 0.009171099, + 0.0064774454, + -0.0304985, + -0.015642207, + -0.0006349893, + -0.012143626, + 0.0050672386, + 0.012720385, + 0.012593624, + -0.008942931, + 0.0053778007, + -0.0126379905, + 0.0024021056, + -0.018164735, + -0.017467553, + -0.0060527986, + 0.008683072, + 0.012473202, + 0.027811185, + 0.009481662, + -0.0026793934, + -0.015553474, + -0.008974621, + 0.002391014, + 0.033084407, + -0.013005595, + 0.0050735762, + 0.0081760315, + -0.019774588, + 0.004132382, + -0.02333655, + 0.007605611, + -0.004227452, + 0.016060516, + 0.011649261, + -0.008144341, + 0.01388024, + 0.018823888, + -0.007111246, + -0.017036568, + 0.0029883713, + -0.000996652, + -0.025326684, + 0.0013801015, + 0.009367578, + -0.01505911, + 0.0013072144, + -0.019635152, + 0.004160903, + -0.030929485, + 0.002741189, + -0.009488, + -0.016035164, + -0.038864672, + 0.034453418, + 0.022322468, + -0.015325306, + -0.004141889, + -0.037850592, + 0.0045063244, + 0.0018633747, + -0.012035879, + -0.0023925984, + -0.03174075, + -0.022056272, + -0.0022911904, + -0.0021105572, + -0.027405553, + -0.0020154868, + 0.015490094, + 0.009392929, + 0.023387253, + 0.23749788, + 0.010717574, + -0.0033623138, + 0.028850619, + 0.0014862631, + 0.022550637, + 0.023095705, + -0.007694343, + 0.02571964, + 0.028521042, + -0.011509825, + 0.00630315, + 0.00074630056, + 0.000637366, + 0.003451046, + -0.014957702, + -0.033261873, + -0.0014197141, + -0.013385875, + -0.019483041, + 0.011148558, + -0.0103816595, + 0.01581967, + 0.0029408364, + 0.029028082, + 0.015464743, + -0.013297143, + 0.008207722, + 0.026340766, + 0.018253466, + -0.0087654665, + -0.011909119, + -0.0017207694, + -0.014133761, + -0.0042211143, + -0.0033876658, + -0.011826725, + 0.0014870554, + 0.02091543, + 0.031690046, + 0.018836563, + 0.005615476, + -0.024604151, + -0.009164762, + 0.0070161764, + 0.005897518, + -0.018988676, + -0.006261953, + 0.020699939, + 0.015135166, + -0.023045002, + -0.00986828, + 0.027050624, + 0.023552042, + -0.0029186532, + 0.02190416, + 0.019457689, + -0.008568988, + 0.01979994, + -0.0051718154, + -0.015806995, + 0.019330928, + -0.01687178, + 0.011256305, + 0.006173221, + -0.0033591448, + -0.0126379905, + -0.0028885477, + 0.011528838, + -0.015236574, + 0.022626692, + 0.013208412, + 0.009697154, + 0.0073837806, + -0.009684478, + -0.0059830807, + 0.025605557, + -0.0050735762, + 0.015452066, + -0.007447161, + -0.014463337, + 0.0018253466, + -0.011693627, + 0.0052922377, + -0.0035366092, + -0.018811211, + 0.0017999946, + 0.0046869577, + 0.025821049, + -0.007111246, + 0.0010639933, + -0.0053207586, + 0.00620808, + 0.00058468134, + 0.020370362, + 0.025808373, + -0.009874619, + 0.0044239303, + -0.015566151, + 0.011421093, + -0.034808345, + -0.03919425, + 0.0023102043, + -0.017391497, + -0.017429525, + 0.010971094, + -0.010090111, + 0.019064732, + 0.034428068, + 0.0022357327, + -0.0044366065, + -0.0071999785, + 0.015895726, + -0.008607017, + 0.015857698, + -0.00096575415, + 0.014919674, + -0.011776021, + -0.015135166, + -0.012035879, + -0.01107884, + -0.023792887, + -0.0065218112, + 0.0058024474, + -0.0026080909, + -0.011066164, + -0.008271102, + 0.01362672, + 0.0022769298, + -0.044873103, + 0.034275953, + -0.004899281, + 0.029332306, + -0.0053017447, + -0.011814049, + -0.0025050982, + -0.004877098, + 0.0029297448, + 0.013360524, + -0.0058468133, + 0.0037489324, + -0.009950674, + 0.01735347, + -0.0003719619, + -0.005989419, + -0.0052256887, + 0.0017603821, + -0.024274575, + -0.02397035, + -0.032298494, + -0.012073907, + -0.015223898, + 0.0013761403, + -0.014970378, + 0.005384139, + -0.008537298, + -0.011167572, + -0.004173579, + 0.00951969, + 0.03272948, + -0.018380227, + 0.001324644, + 0.0014363513, + 0.00072530593, + 0.007605611, + 0.0030469978, + -0.16154318, + 0.014032353, + 0.010540109, + -0.008410539, + -0.01706192, + 0.023488661, + 0.01964783, + 0.020814022, + -0.010590813, + 0.02776048, + 0.005688363, + 0.02078867, + -0.059678696, + -0.015515447, + -0.007371105, + 0.011478134, + -0.009133072, + -0.009925323, + 0.01964783, + 0.006705614, + -0.00033017067, + -0.02154923, + 0.016073192, + 0.013715452, + 0.010020393, + 0.004582381, + -0.022132328, + 0.03209568, + -0.0030628429, + -0.013335171, + 0.0031531595, + -0.0029883713, + 0.0056344904, + 0.014349253, + 0.024464715, + 0.006255615, + -0.004690127, + -0.00046505142, + -0.00716195, + -0.003992946, + -0.0027364355, + 0.020991486, + 0.020167544, + 0.02639147, + -0.01225771, + 0.024946405, + 0.02378021, + 0.012745736, + -0.0059577287, + -0.01562953, + 0.017049246, + -0.03719144, + -0.009988703, + -0.011642923, + 0.0027522806, + 0.014514041, + 0.021130923, + 0.011687289, + -0.0013808938, + 0.012492216, + 0.01117391, + -0.041298468, + -0.0072253305, + 0.008068286, + -0.004724986, + -0.012327428, + 0.0046964646, + 0.004186255, + -0.02097881, + -0.0014862631, + -0.014450661, + -0.013892916, + 0.0036982284, + -0.009310535, + 0.0019299238, + 0.013208412, + -0.014704181, + -0.004566536, + -0.016922485, + -0.018583043, + 0.0072887107, + 0.032653425, + -0.0066358955, + 0.0009895217, + -0.00961476, + 0.010413349, + 0.004785197, + 0.011782359, + -0.029560475, + -0.014222492, + 0.025643585, + -0.036506932, + -0.0019220012, + -0.037749182, + -0.0021470005, + 0.0097415205, + 0.0017271076, + -0.0065218112, + 0.01687178, + 0.007345753, + 0.00094436336, + -0.00014399165, + -0.025225276, + 0.011161234, + 0.030422444, + 0.0126379905, + -0.013512636, + 0.009247156, + 0.018646423, + -0.008429552, + -0.014260521, + 0.019597124, + -0.00878448, + 0.011630246, + 0.020066136, + -0.0070858942, + 0.010311941, + -0.02725344, + 0.02091543, + 0.0056947013, + 0.050577313, + -0.013208412, + -0.021866132, + 0.021802751, + -0.007700681, + -0.018012622, + -0.09755464, + -0.009190113, + 0.016288683, + 0.019837968, + 0.0056947013, + 0.027025271, + 0.0050387173, + 0.024794292, + -0.008860537, + 0.021409795, + -0.0088668745, + -0.027228087, + -0.021245006, + -0.0029772797, + 0.011839401, + -0.014007, + 0.007700681, + -0.024616828, + -0.054151952, + 0.0042052693, + 0.0072316686, + 0.004341536, + -0.004889774, + -0.014425309, + -0.015312631, + -0.0066739237, + -0.03498581, + 0.014666153, + 0.0038725235, + -0.0039707627, + 0.022652045, + -0.017252062, + 0.0126379905, + -0.010128139, + -0.008163356, + 0.000072986135, + -0.009038001, + -0.003368652, + 0.0095577175, + -0.03247596, + -0.010780954, + -0.0007534308, + 0.014539393, + -0.023057677, + 0.0022135498, + 0.008239412, + -0.011281656, + 0.010882362, + -0.004851746, + -0.033312578, + -0.004259142, + 0.023412606, + -0.021232331, + -0.011858415, + 0.038281575, + -0.021637963, + 0.011630246, + 0.010476729, + -0.029509772, + 0.015528123, + 0.010508419, + 0.00716195, + 0.0038344956, + 0.014108408, + -0.014830941, + -0.019698532, + -0.026188655, + -0.009285184, + 0.018481635, + -0.033135112, + -0.00480738, + 0.020319657, + -0.0140703805, + 0.006730966, + -0.018963324, + 0.003403511, + -0.018152058, + -0.010660532, + 0.008847861, + -0.017556285, + -0.029205546, + -0.016656289, + -0.011351375, + 0.0041799173, + -0.0088161705, + 0.029180195, + -0.01394362, + -0.0126063, + 0.03830693, + -0.014780237, + 0.006946458, + 0.04403649, + 0.005998926, + -0.019052055, + -0.012904187, + 0.026188655, + 0.0092534935, + 0.007605611, + 0.017150654, + -0.013221087, + -0.018253466, + -0.010495743, + -0.036430877, + 0.017404173, + -0.01986332, + -0.013246439, + 0.0024908376, + -0.0071239225, + -0.010071097, + 0.003176927, + -0.011915457, + 0.0028156606, + -0.004791535, + -0.00027015764, + -0.0080746235, + -0.015832348, + -0.008835184, + 0.009468986, + 0.018836563, + 0.00059418834, + 0.0164915, + -0.0016106466, + -0.002823583, + -0.00018192067, + 0.0087654665, + 0.0024908376, + -0.040056217, + 0.00843589, + -0.014919674, + -0.020928107, + -0.018291494, + -0.006952796, + 0.02139712, + -0.028850619, + 0.009633774, + 0.033059057, + -0.015363335, + -0.033211168, + -0.018202763, + 0.0141210845, + 0.013512636, + -0.021422472, + -0.031943567, + -0.024908377, + 0.013170383, + -0.021447822, + -0.021663316, + 0.027278792, + -0.0072380067, + 0.0023323875, + 0.0085626505, + 0.01817741, + 0.00802392, + 0.021828104, + 0.020953458, + -0.015464743, + -0.0034668911, + -0.006021109, + 0.03435201, + 0.0069908244, + 0.013994324, + -0.006997162, + -0.0015345905, + -0.0043383674, + -0.00074946956, + 0.02110557, + 0.011978838, + 0.009392929, + -0.0059418837, + -0.009830252, + -0.009950674, + -0.0164915, + -0.008524623, + -0.0051876605, + 0.039929457, + 0.014133761, + 0.033261873, + 0.0037109044, + -0.008480256, + -0.0052890684, + -0.017556285, + 0.008898565, + 0.019343603, + 0.004040481, + -0.01069856, + -0.000011667136, + 0.028926674, + 0.030980188, + -0.05587589, + -0.015097138, + 0.01073025, + 0.0045792116, + -0.021663316, + 0.006119348, + -0.0043827333, + 0.011402079, + 0.012359118, + -0.004851746, + -0.0056756875, + 0.0016795724, + -0.0007411509, + 0.0252126, + -0.00040998997, + -0.018253466, + -0.0004198931, + -0.027481608, + -0.014691506, + 0.0008033427, + -0.017099949, + -0.012270385, + -0.008271102, + 0.007878145, + 0.009443633, + -0.016377416, + 0.0035651303, + 0.014336577, + -0.003527102, + -0.00030580894, + -0.021283034, + -0.014387281, + -0.014830941, + 0.0143239, + -0.0023355563, + 0.0019727054, + 0.00853096, + -0.0097415205, + 0.036887214, + 0.015337982, + 0.019571772, + -0.024667531, + 0.013195735, + 0.0065344875, + 0.009443633, + 0.0034130178, + -0.0070668804, + -0.012238696, + -0.0033718208, + -0.03349004, + -0.020256277, + 0.019635152, + -0.01474221, + 0.0534928, + -0.010977432, + -0.030802725, + 0.03612665, + -0.022106975, + 0.0036031583, + 0.017429525, + 0.008448566, + -0.020877402, + -0.010229547, + 0.0013167214, + 0.016973188, + 0.019128112, + -0.004867591, + -0.016985865, + -0.007694343, + -0.02104219, + 0.019191492, + -0.027963297, + -0.004699634, + 0.036506932, + 0.0071999785, + 0.0037013975, + 0.0026144288, + -0.021194303, + -0.0074154707, + 0.017771779, + 0.010768278, + 0.0034922431, + 0.0023434788, + 0.020864727, + -0.0028837943, + -0.018608395, + -0.013030947, + 0.0017397836, + -0.03559426, + -0.014792914, + -0.02999146, + -0.0029820334, + 0.011896444, + 0.011712641, + 0.027075976, + -0.010869686, + -0.020509798, + -0.0016241148, + -0.0012636406, + -0.014830941, + 0.007726033, + -0.0051876605 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 55, + "total_tokens": 55 + } +} +278 34444 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 83 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What color is the lamp in each room?"]}HTTP/2.0 200 OK +Content-Length: 33488 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:43:16 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 104 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-xzdkj +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999991 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_7df0dccf45a648358ef7a1b58f49d575 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.02230405, + 0.008771547, + 0.014554557, + -0.011423711, + -0.008448112, + 0.015473112, + 0.0068826885, + -0.008881515, + 0.004744786, + -0.005595419, + -0.016676288, + 0.01731022, + -0.017698342, + 0.024891527, + -0.0063878335, + -0.0012743324, + 0.031618968, + 0.021294935, + 0.013648941, + -0.0046218806, + -0.020337569, + 0.025512522, + -0.01429581, + -0.001887241, + -0.01562836, + -0.008959139, + 0.017374907, + -0.008868577, + -0.011934738, + 0.006138789, + 0.0034187038, + -0.016792726, + -0.012723918, + -0.0168186, + -0.016844476, + 0.0169221, + 0.010860935, + 0.0039006216, + 0.011591896, + -0.014606307, + 0.015718922, + -0.0003416278, + -0.00038286572, + 0.00014958851, + -0.0055177948, + 0.007827118, + -0.0011853878, + 0.0067468463, + -0.039355524, + 0.01296326, + -0.008124677, + 0.0066562844, + -0.012885635, + -0.052706905, + -0.026172329, + 0.00087650784, + 0.008674516, + 0.01811234, + -0.011714802, + -0.0054789823, + -0.0041917125, + -0.0013471051, + -0.014502808, + 0.0060676336, + -0.0006072485, + -0.001574318, + -0.0084093, + 0.010860935, + 0.017038535, + -0.0021136452, + 0.021424308, + 0.028125875, + 0.017581906, + -0.00033576557, + 0.029419612, + -0.008752141, + -0.020712754, + -0.0023740102, + 0.007109093, + 0.00022701068, + 0.0044892724, + 0.0069279694, + -0.03260221, + 0.008758609, + 0.018733334, + 0.013441943, + 0.0025923285, + 0.018371087, + -0.034594566, + -0.0030613088, + -0.013196132, + 0.051439043, + 0.030040607, + -0.021760682, + -0.012445764, + 0.0054854513, + -0.0074325274, + 0.02478803, + 0.0125169195, + -0.013791252, + 0.016119981, + -0.015291989, + -0.031308472, + 0.005977072, + -0.017129097, + -0.023222605, + 0.0037486071, + 0.008480456, + 0.032679833, + -0.040105894, + -0.03487919, + 0.049187936, + 0.039459024, + -0.038449906, + -0.021980617, + -0.0070767496, + 0.0012702894, + -0.024141159, + -0.037337292, + 0.0070055937, + -0.0022672766, + 0.040468138, + 0.017982965, + -0.027530754, + 0.04486685, + -0.002137903, + -0.026482826, + -0.024503406, + -0.024956215, + 0.005016471, + 0.010802716, + 0.014929742, + 0.013467818, + 0.021243185, + -0.008920327, + 0.0013099102, + -0.006513973, + 0.024425782, + -0.03793241, + 0.00328933, + 0.013545441, + 0.006119383, + -0.0047900667, + -0.008059991, + -0.0056406995, + 0.030972099, + 0.0048094727, + -0.0027427257, + -0.020402256, + -0.0018662177, + 0.005673043, + -0.012717449, + 0.023817725, + 0.012827417, + 0.0014692018, + 0.016999723, + -0.0019567795, + 0.017827716, + -0.044219982, + 0.0069538443, + -0.04931731, + 0.0048968, + 0.030402854, + -0.005876807, + 0.012342265, + 0.028772743, + 0.020686878, + 0.0049744244, + -0.010395189, + 0.0075101517, + -0.032576334, + 0.027039135, + -0.020466942, + 0.03330083, + 0.00044795693, + 0.034930937, + 0.007859461, + -0.016158793, + 0.003978246, + 0.01157249, + -0.0095930705, + -0.0068438766, + -0.008538674, + -0.009146731, + 0.0009783898, + -0.017129097, + 0.0017497813, + -0.001466776, + 0.024011785, + -0.004550725, + 0.01143018, + 0.027763627, + -0.015059115, + -0.0069991252, + -0.66901803, + -0.032653958, + 0.004961487, + -0.0085904235, + 0.0080988025, + 0.013390193, + 0.0239471, + 0.028255248, + -0.003522203, + -0.016003545, + 0.009386073, + 0.007063812, + 0.0042078844, + -0.023934161, + 0.0125233885, + -0.021825368, + -0.0053981235, + 0.010893278, + -0.00018577276, + 0.0017788904, + -0.008765078, + 0.019108517, + -0.0018112338, + -0.00398148, + 0.021411372, + 0.022834484, + 0.009638351, + -0.016495166, + -0.015020303, + 0.012102923, + -0.015304926, + 0.011792426, + 0.013099102, + -0.023106169, + 0.025447836, + -0.003709795, + -0.024555156, + 0.028824493, + 0.0054886853, + 0.029962983, + -0.028384622, + -0.0021750978, + 0.017323159, + -0.02305442, + -0.010666873, + 0.010847997, + 0.017568968, + -0.00046129862, + 0.046833333, + -0.014024125, + 0.012769199, + -0.030014733, + -0.015718922, + 0.01844871, + 0.018254649, + 0.015990607, + 0.046212338, + 0.009858287, + -0.008467519, + 0.0031146754, + -0.009987661, + -0.018086463, + 0.0013495309, + 0.002897974, + 0.007445465, + 0.00079120195, + -0.0252279, + -0.023507228, + -0.020104695, + -0.022329926, + -0.0035933587, + 0.016158793, + -0.03904503, + 0.02423172, + 0.0061064456, + -0.010796247, + 0.029911233, + -0.007102624, + -0.0024710405, + -0.017206721, + 0.002055427, + -0.015123802, + -0.02853987, + -0.015123802, + 0.01741372, + -0.010472813, + -0.014670994, + -0.020893876, + 0.015757734, + 0.026987385, + 0.009612476, + 0.015046178, + -0.01839696, + 0.0003299033, + -0.017103223, + 0.03216234, + -0.01646929, + 0.0032181744, + -0.011320212, + -0.025033839, + 0.000618973, + -0.03270571, + -0.0037453729, + 0.013312569, + 0.02913499, + -0.0064428174, + -0.0077494932, + 0.031877715, + 0.015641298, + -0.014399309, + 0.0004980893, + -0.013176726, + -0.021631308, + 0.0009832412, + 0.014502808, + -0.022498112, + 0.04877394, + 0.013234944, + 0.024218785, + -0.015874172, + 0.007607182, + -0.0003988353, + 0.014231123, + -0.0182029, + 0.020570442, + 0.008965608, + -0.013648941, + -0.009146731, + -0.009599539, + 0.024218785, + -0.011967081, + 0.011346086, + 0.010207596, + -0.0065269107, + -0.030583978, + 0.0065269107, + 0.01662454, + -0.026094705, + 0.013881814, + -0.013312569, + -0.01687035, + 0.0033507827, + -0.026651012, + 0.007833586, + -0.023481352, + -0.027065009, + -0.028358746, + -0.007128499, + -0.027686004, + -0.012329328, + -0.018332275, + -0.025991205, + -0.042977992, + 0.007671869, + 0.013299632, + 0.0028947399, + -0.015990607, + -0.0078077116, + -0.028332872, + 0.006614238, + 0.024956215, + 0.011967081, + -0.015421363, + 0.003324908, + -0.010304627, + -0.024205847, + -0.009981193, + 0.02903149, + 0.00025308758, + -0.042822745, + -0.0026004142, + 0.0050229398, + -0.002137903, + 0.013868877, + -0.011837707, + -0.00040328252, + -0.0031454016, + -0.037984163, + -0.006850345, + -0.010298158, + 0.012568669, + 0.029393738, + -0.015304926, + 0.0046024746, + 0.03423232, + 0.012549263, + 0.022679236, + 0.023274355, + 0.0025680708, + 0.010511625, + -0.015123802, + -0.004977659, + 0.013545441, + -0.0077883056, + 0.008726266, + -0.0033281422, + 0.022265239, + -0.012872698, + -0.00095332356, + -0.011087338, + 0.029600736, + -0.0019017955, + -0.005094095, + -0.011514273, + 0.029755985, + -0.033870075, + 0.009159668, + -0.005210532, + 0.013907689, + 0.025253775, + -0.007704213, + -0.025745396, + 0.0020344038, + -0.022627486, + 0.01641754, + 0.010110566, + -0.01687035, + 0.028358746, + -0.0054886853, + -0.00026905717, + 0.01063453, + 0.011954144, + 0.03635405, + 0.0006104828, + -0.015887108, + 0.0037874193, + 0.006649816, + 0.020906813, + 0.009787131, + -0.011281399, + -0.02804825, + -0.0077624307, + 0.000054630127, + 0.006513973, + -0.015279051, + 0.0025179384, + 0.008959139, + -0.016404605, + -0.0049841274, + 0.0050714547, + 0.020402256, + 0.030972099, + 0.022950921, + 0.0077818367, + 0.03244696, + -0.0034963281, + 0.00796296, + 0.026288766, + -0.02449047, + 0.013726565, + -0.008881515, + -0.012374609, + -0.024115285, + 0.0058250576, + 0.018086463, + 0.0038359344, + 0.032628085, + -0.0063781305, + 0.0040396983, + 0.010906215, + -0.0004334024, + -0.0010632913, + 0.016728038, + -0.005912385, + -0.0072578727, + 0.008913858, + -0.023287293, + -0.014554557, + 0.0029189973, + -0.0059447284, + -0.012853292, + -0.008467519, + 0.014774493, + 0.0008178853, + 0.017129097, + 0.0022624251, + -0.0077430247, + -0.017090285, + 0.018358149, + 0.0336372, + -0.0033895948, + -0.02240755, + 0.014308748, + -0.0011603216, + -0.014515745, + -0.018422836, + -0.018177025, + 0.018513398, + -0.017646592, + 0.0072449353, + 0.016326979, + -0.0062519913, + 0.024154097, + -0.0005373058, + 0.0018079996, + -0.022886233, + -0.001822554, + -0.0007689658, + 0.023222605, + 0.005980306, + -0.011139088, + 0.00031231655, + -0.027220257, + -0.013855939, + 0.016378729, + 0.011857113, + -0.016947974, + -0.008364019, + -0.006420177, + -0.0251244, + -0.023093231, + -0.009871225, + 0.004013824, + 0.011223181, + 0.013390193, + 0.008053522, + -0.019328453, + -0.018358149, + 0.023584852, + 0.004159369, + -0.021113811, + -0.029238489, + -0.011449586, + -0.0014821391, + 0.05852873, + 0.009916506, + -0.006306975, + 0.017077347, + -0.002411205, + -0.0194837, + -0.017737154, + 0.012820948, + -0.00930198, + 0.010097628, + 0.013196132, + -0.007859461, + -0.007587776, + -0.009890631, + -0.014748619, + -0.0019406077, + 0.0066821594, + -0.009877693, + 0.019328453, + -0.007594245, + -0.010472813, + 0.0090820445, + -0.0051523135, + 0.02606883, + -0.023390792, + -0.011113213, + 0.022394612, + -0.014567495, + 0.015123802, + -0.01236814, + -0.012161141, + 0.016262293, + -0.0058638696, + -0.0024500173, + -0.025706584, + -0.01697385, + -0.016107043, + 0.008027648, + 0.029238489, + -0.0019001784, + 0.027479006, + 0.0066950964, + 0.0009306831, + -0.025603084, + 0.000605227, + 0.0065754256, + -0.009974724, + 0.02137256, + 0.0066821594, + -0.013687753, + 0.00008136402, + -0.0019858885, + -0.003997652, + -0.0042984462, + 0.0040526357, + 0.00009975937, + -0.013273757, + -0.024645718, + 0.009366667, + -0.01741372, + -0.0038909183, + 0.0034639847, + 0.030816851, + -0.0052364063, + -0.03565543, + -0.024063535, + -0.0013940032, + -0.011798895, + -0.0080858655, + -0.007794774, + -0.0052816872, + -0.015343738, + -0.042072374, + 0.012064111, + 0.04719558, + 0.024645718, + 0.030532228, + -0.0120511735, + 0.0045442563, + 0.01953545, + 0.0043987106, + -0.010375783, + 0.0060223527, + -0.006119383, + -0.0105310315, + -0.0052267034, + 0.021036187, + -0.012070579, + -0.01434756, + 0.027789501, + 0.026198205, + -0.0054304674, + 0.02903149, + -0.027737753, + -0.007937086, + -0.009263167, + -0.0014675845, + 0.02542196, + -0.028074125, + -0.012665699, + 0.017012661, + -0.019781262, + 0.012588075, + -0.035396684, + -0.019781262, + 0.01018819, + -0.0041787755, + -0.009418416, + -0.03169659, + 0.011171431, + 0.0006618281, + -0.020790378, + -0.004023527, + -0.014852118, + 0.028876243, + 0.01627523, + -0.026159393, + 0.012199954, + -0.0047674263, + -0.032032963, + 0.009780663, + -0.03542256, + 0.026935635, + 0.0014683931, + -0.03679392, + 0.005372249, + 0.011928269, + -0.009237292, + 0.01890152, + 0.008629235, + 0.004744786, + 0.01800884, + -0.027789501, + -0.014037062, + -0.026935635, + -0.007212592, + 0.012555731, + 0.009334323, + -0.015097928, + 0.014127624, + -0.009935912, + 0.019600138, + -0.0029545752, + -0.015072053, + -0.011727739, + -0.02631464, + 0.011585428, + -0.0010333736, + 0.0063781305, + 0.028229373, + 0.01608117, + 0.0050358768, + -0.03596593, + 0.017750092, + -0.013073227, + -0.019224953, + -0.006164664, + -0.016145855, + 0.011449586, + 0.013894751, + 0.016042357, + 0.0036192334, + 0.0073225596, + 0.005543669, + -0.0065366137, + 0.0056665745, + 0.009017357, + -0.0019470764, + -0.027116759, + -0.005669809, + 0.011902394, + 0.012083517, + 0.015563673, + 0.008933264, + 0.01152721, + 0.029212615, + -0.005317265, + 0.00062705885, + -0.03482744, + -0.026780386, + 0.001640622, + -0.016999723, + -0.011734208, + 0.0043696016, + 0.0014303896, + 0.013713628, + 0.0067468463, + -0.003897387, + -0.015473112, + -0.00925023, + 0.029652486, + -0.014632182, + 0.044763353, + -0.025344336, + 0.014321685, + -0.009127324, + -0.038812153, + -0.023106169, + -0.0061873044, + -0.020130571, + 0.0059447284, + 0.008376957, + 0.0032197917, + -0.02433522, + 0.021980617, + -0.0027799206, + 0.018979143, + -0.0007612842, + -0.0071996544, + -0.018177025, + -0.03358545, + -0.024050599, + -0.022575736, + -0.02869512, + 0.016585726, + -0.014412247, + -0.03167072, + 0.020454004, + 0.0022769796, + -0.007102624, + -0.010479282, + -0.009269636, + 0.025163213, + 0.013933564, + 0.026237017, + 0.013881814, + -0.0050358768, + -0.011714802, + -0.022523986, + -0.025913581, + -0.017918278, + 0.021424308, + 0.022420488, + 0.0047415514, + 0.010472813, + 0.0135066295, + -0.0030499885, + 0.012866229, + -0.016003545, + -0.0012161141, + 0.013933564, + 0.0068180016, + -0.005026174, + 0.00945076, + -0.017504282, + 0.023339042, + -0.007950023, + -0.008635704, + 0.010291689, + -0.0005227512, + -0.021825368, + -0.0012581607, + -0.01844871, + 0.035629556, + 0.01687035, + -0.011928269, + 0.015744798, + -0.016702164, + -0.009554259, + 0.0026699528, + 0.0068891575, + 0.035344936, + 0.0009694953, + 0.0055080913, + 0.0076848064, + 0.0074389963, + -0.015563673, + -0.00885564, + 0.009431354, + 0.029445488, + -0.015550736, + -0.0043598986, + -0.0110355895, + 0.020764502, + 0.03032523, + -0.01454162, + 0.002259191, + 0.0120252995, + -0.01137843, + 0.015162615, + 0.020001197, + -0.0037033265, + -0.01741372, + 0.0044601634, + -0.03037698, + 0.00420465, + -0.026379328, + -0.011714802, + -0.00026663142, + -0.03423232, + 0.0016737741, + 0.010265815, + 0.024891527, + 0.009515447, + 0.0052331723, + 0.0021136452, + 0.028902117, + -0.014114686, + -0.0052752187, + 0.0033895948, + 0.01068628, + 0.016753914, + -0.016495166, + 0.00413026, + -0.0009694953, + -0.041037384, + 0.017517218, + 0.010311096, + -0.033119705, + -0.0031890653, + 0.022730986, + -0.0038941528, + 0.004773895, + -0.016016481, + -0.0038197627, + 0.002102325, + 0.0012056025, + -0.012866229, + 0.0041884785, + -0.0056924494, + -0.017995901, + 0.015175552, + 0.009683632, + -0.0060126497, + 0.00791768, + 0.0048903315, + -0.010252877, + 0.012284047, + -0.01513674, + 0.0017708045, + 0.0016066615, + 0.018021777, + -0.0014675845, + -0.015990607, + 0.011100276, + -0.004366367, + -0.008364019, + -0.0014643503, + 0.009192012, + 0.008124677, + 0.0036774515, + 0.0144898705, + -0.0039847144, + 0.019651888, + -0.03260221, + -0.0073743095, + -0.014231123, + -0.034542818, + -0.02641814, + -0.020337569, + -0.02547371, + 0.007633057, + -0.010666873, + -0.028125875, + 0.0021815666, + -0.005795948, + 0.008668047, + -0.018384025, + 0.0053690146, + -0.0022478707, + 0.008900921, + -0.0019729512, + -0.004476335, + 0.026094705, + 0.0038068255, + -0.0029092943, + -0.0078077116, + 0.0048968, + 0.006239054, + -0.017271409, + 0.0033863604, + -0.0015597634, + -0.008739203, + -0.018733334, + 0.018319337, + 0.012109392, + 0.011009715, + -0.008972077, + -0.020686878, + 0.00727081, + 0.004579834, + 0.022562798, + 0.02696151, + 0.032886833, + -0.012723918, + -0.027686004, + -0.02286036, + -0.020466942, + 0.014140561, + -0.021657182, + -0.007801243, + 0.030635728, + 0.009166137, + -0.008829765, + -0.031386096, + -0.002327112, + -0.004269337, + 0.0055274977, + 0.014231123, + -0.00022559565, + -0.011274931, + 0.004026761, + 0.016728038, + -0.007044406, + 0.0021055595, + -0.005391655, + -0.011785957, + 0.00027896237, + 0.008913858, + 0.001550869, + -0.0038003568, + -0.014722744, + -0.013338444, + -0.016508102, + -0.0012403717, + -0.007341966, + -0.02156662, + -0.021087937, + 0.024904465, + 0.00939901, + -0.015990607, + 0.0026521639, + -0.040778637, + -0.020285819, + -0.0004916206, + -0.0066110035, + 0.005158782, + -0.030040607, + -0.0050358768, + 0.0011554701, + -0.001466776, + -0.018293463, + -0.022562798, + 0.003690389, + 0.023623664, + 0.012698043, + 0.2370129, + 0.008454581, + 0.0027119992, + 0.04199475, + -0.008875046, + 0.014205248, + 0.027039135, + 0.0049291435, + 0.016443416, + 0.023015607, + -0.02750488, + 0.0011109979, + 0.009386073, + 0.010938559, + -0.011850644, + -0.014554557, + -0.01811234, + -0.015304926, + 0.01310557, + 0.0023109403, + 0.008021179, + 0.000092381015, + 0.0040041204, + -0.021256123, + 0.015304926, + 0.021993553, + -0.0022915343, + -0.001701266, + 0.019328453, + 0.020259945, + 0.005411061, + -0.020945625, + -0.008286395, + -0.00024257596, + -0.004456929, + -0.0085710175, + -0.0023869474, + -0.0026521639, + 0.0222523, + 0.024813903, + -0.0040688077, + -0.0144769335, + -0.020997375, + 0.014127624, + -0.006552785, + -0.0051070326, + -0.019858886, + -0.012782136, + 0.01687035, + 0.0072449353, + -0.017944153, + -0.0072772787, + 0.02324848, + 0.023274355, + -0.00004644319, + 0.0061711324, + 0.02859162, + -0.018138213, + 0.00640724, + 0.00865511, + -0.006119383, + 0.035267312, + -0.020945625, + 0.023636602, + 0.010996777, + -0.008344613, + -0.002513087, + -0.00048515192, + 0.024425782, + -0.012070579, + 0.006300506, + -0.0031421673, + -0.0031648078, + 0.015964733, + 0.01760778, + 0.007937086, + 0.026832135, + 0.010957965, + 0.0095736645, + 0.002344901, + -0.010977371, + -0.0075554326, + -0.004421351, + 0.028384622, + 0.00058056513, + -0.017180847, + -0.0062455223, + 0.008150552, + 0.029419612, + 0.009631883, + 0.00390709, + 0.0017643358, + 0.0052008284, + 0.017193785, + 0.015317864, + 0.022278177, + 0.008422238, + 0.00885564, + -0.018992081, + -0.0023060888, + -0.029109115, + -0.0115207415, + 0.01879802, + 0.002307706, + -0.02696151, + 0.011003246, + 0.004211119, + -0.021760682, + 0.029238489, + 0.0044860383, + 0.004026761, + -0.009192012, + 0.008784484, + 0.0013325507, + 0.0059447284, + -0.0029303175, + 0.005158782, + -0.031618968, + -0.017245533, + -0.0063231466, + -0.008525737, + -0.020738628, + -0.010841528, + -0.0013163789, + -0.008234645, + -0.025486648, + -0.01562836, + 0.013674815, + 0.0073290286, + -0.03780304, + 0.0065107387, + -0.012892104, + 0.024451656, + -0.0026861245, + -0.0017109691, + -0.0021314342, + 0.013687753, + -0.0080858655, + 0.016857412, + -0.012601012, + 0.008519268, + -0.008131146, + 0.016546914, + -0.0010738029, + 0.0052267034, + -0.011876519, + 0.0044439915, + -0.008480456, + -0.014451059, + -0.027530754, + -0.01795709, + -0.006219648, + 0.0018662177, + -0.021152625, + 0.026094705, + -0.012070579, + -0.00045765997, + 0.0020667473, + 0.028436372, + 0.01370069, + -0.009463697, + 0.0063393186, + 0.013817127, + -0.0021087937, + -0.007503683, + 0.0025858597, + -0.16487403, + 0.0057571363, + 0.044219982, + -0.03314558, + -0.022045303, + 0.00796296, + 0.0095801335, + 0.023558978, + -0.014735681, + 0.039640147, + 0.00035961886, + 0.011132619, + -0.04572072, + -0.0026020315, + -0.010847997, + 0.0036095304, + -0.005391655, + 0.019250829, + -0.011578959, + 0.006921501, + 0.011443117, + -0.018616896, + 0.007037937, + 0.014127624, + -0.0037712476, + -0.019431952, + -0.02305442, + 0.021644244, + 0.01038872, + -0.02300267, + -0.009489572, + -0.0003606296, + 0.00051547395, + 0.006400771, + 0.009813006, + 0.0034445787, + 0.003968543, + 0.0026295234, + -0.013868877, + 0.00059754547, + -0.0077688997, + 0.010802716, + 0.017827716, + 0.03348195, + -0.0062778657, + 0.020492818, + 0.011986487, + 0.0009039998, + -0.01221936, + -0.008933264, + 0.009360198, + -0.025137339, + -0.0054045925, + -0.002624672, + 0.005540435, + 0.02067394, + 0.017103223, + 0.01953545, + 0.0009573665, + -0.000321211, + -0.008247583, + -0.03834641, + -0.011766551, + -0.0025454303, + 0.012406952, + 0.009664226, + 0.015887108, + -0.0031551046, + -0.017387845, + 0.008985014, + -0.00221391, + -0.02088094, + -0.0061226175, + -0.019781262, + 0.004903269, + 0.011093807, + 0.0030790975, + -0.026094705, + -0.011934738, + -0.01009116, + -0.002120114, + 0.050171178, + -0.017646592, + 0.0125233885, + -0.013674815, + 0.01592592, + 0.00041803924, + 0.004560428, + -0.027427256, + 0.0015678493, + 0.029109115, + -0.010052348, + 0.00846105, + -0.02853987, + 0.010744498, + 0.0043501956, + 0.0054498734, + -0.00571509, + 0.0004378496, + 0.0018079996, + -0.013674815, + 0.010097628, + -0.018862708, + 0.021605432, + 0.032860957, + -0.00930198, + -0.016339917, + 0.018319337, + 0.03749254, + -0.005210532, + -0.022174677, + 0.010699217, + 0.009819475, + 0.020014133, + 0.016184669, + -0.005857401, + 0.014877993, + -0.0061452575, + 0.024050599, + 0.029471362, + 0.04230525, + -0.020518692, + -0.015473112, + 0.016314043, + 0.0071802484, + -0.016158793, + -0.08569723, + 0.003531906, + -0.0037033265, + 0.021346685, + 0.0077106813, + 0.028798617, + 0.021631308, + 0.035267312, + 0.00687622, + 0.01518849, + -0.012232297, + -0.011669521, + -0.01608117, + 0.009754788, + 0.0008522502, + -0.011391367, + 0.01083506, + -0.032576334, + -0.04574659, + 0.016145855, + 0.000981624, + -0.0030241136, + 0.012801542, + -0.0077300873, + 0.006365193, + -0.037673663, + -0.038605157, + 0.0110355895, + 0.0035157343, + 0.0034154695, + 0.02349429, + -0.027039135, + -0.016986785, + -0.013312569, + -0.021708932, + -0.0149814915, + -0.021281999, + -0.019263767, + 0.011941206, + -0.03961427, + -0.008991483, + 0.018306399, + 0.0168186, + -0.015563673, + 0.015162615, + -0.0058379946, + -0.016197605, + 0.012549263, + -0.009386073, + -0.022627486, + 0.012665699, + 0.0045054443, + -0.008680985, + -0.023416666, + 0.026599264, + -0.011734208, + 0.008564549, + 0.030144107, + -0.013687753, + 0.00895267, + -0.0022656594, + 0.028617496, + -0.0004867691, + 0.020945625, + 0.0050100023, + -0.026482826, + -0.025680708, + -0.0009444291, + 0.009800069, + -0.037259668, + -0.036198802, + -0.003531906, + -0.0029384035, + -0.013894751, + -0.028902117, + -0.008182895, + -0.013648941, + 0.016896224, + -0.0016333448, + -0.0054983883, + -0.017530156, + -0.022562798, + 0.0057991827, + 0.006064399, + -0.001644665, + 0.03555193, + -0.031748343, + -0.018772146, + 0.0024144393, + -0.0015686579, + -0.0060417587, + 0.019134391, + 0.013124976, + -0.016249355, + -0.025098527, + 0.018371087, + -0.0025001497, + 0.014670994, + 0.02734963, + -0.01890152, + -0.022433424, + 0.00079686206, + -0.05387127, + 0.019315515, + -0.005165251, + -0.013959438, + -0.013429006, + -0.0043437267, + 0.005805651, + -0.0063037407, + -0.0067597837, + 0.007193186, + -0.008351082, + 0.017866528, + -0.010343439, + 0.002391799, + -0.0044957413, + 0.0054789823, + 0.009036764, + 0.017504282, + -0.0047577233, + -0.00801471, + -0.015537799, + -0.0018338743, + 0.017672468, + 0.017737154, + -0.029367864, + 0.004773895, + -0.008842702, + 0.001822554, + -0.022394612, + -0.01370069, + 0.03819116, + -0.036923297, + 0.0043404927, + 0.04947256, + -0.010653936, + -0.039950643, + -0.029859483, + 0.030092357, + 0.03423232, + -0.040287014, + -0.00791768, + -0.025848895, + 0.011456054, + -0.024593968, + 0.007982367, + 0.031644844, + -0.015641298, + 0.006921501, + 0.010673342, + 0.0007115562, + 0.022523986, + 0.016883288, + 0.0011045292, + 0.0010754201, + -0.010265815, + -0.025797145, + 0.02354604, + -0.016055295, + 0.029290238, + -0.025745396, + 0.011798895, + 0.0055727786, + 0.013312569, + 0.008079397, + 0.020686878, + -0.011158494, + 0.024865653, + 0.0037680133, + -0.0049905963, + -0.014774493, + 0.005753902, + 0.010446938, + 0.026780386, + 0.016805662, + 0.020363443, + 0.002352987, + 0.023468416, + 0.0075101517, + -0.016404605, + 0.018138213, + 0.019845948, + -0.0027152337, + -0.023313167, + 0.014037062, + 0.035836555, + 0.0002749194, + -0.036172926, + 0.017750092, + 0.010304627, + 0.0036030617, + -0.017504282, + 0.0056762774, + 0.008215239, + 0.004615412, + 0.008351082, + 0.0041076196, + -0.00472538, + 0.01454162, + -0.0036483426, + 0.021100875, + -0.015343738, + -0.022769798, + 0.0066821594, + -0.02552546, + -0.012969729, + 0.005346374, + -0.0050035333, + -0.017970027, + -0.0076395255, + 0.003402532, + 0.0042919773, + 0.0011012949, + 0.004139963, + 0.007658932, + 0.004589537, + -0.006219648, + -0.028953867, + -0.023804788, + -0.022472236, + 0.015615423, + 0.0015557205, + 0.008972077, + -0.005905916, + 0.001896944, + 0.0063748965, + 0.01058278, + 0.018189963, + -0.011197306, + 0.030532228, + 0.02582302, + 0.010479282, + 0.0062455223, + -0.0009436205, + -0.0067015653, + 0.001402089, + -0.022718048, + 0.0034898594, + 0.011747145, + -0.01276273, + 0.06810239, + 0.0030338168, + -0.022601612, + 0.03487919, + -0.013726565, + 0.033430204, + 0.008441644, + 0.009528384, + -0.022032365, + -0.009780663, + -0.0017999136, + 0.019548388, + 0.011404305, + -0.028850367, + -0.02908324, + -0.019224953, + -0.024852715, + 0.0059382594, + -0.0004519999, + -0.015253177, + 0.018707458, + -0.01725847, + 0.007924148, + 0.015059115, + -0.022187615, + -0.024115285, + 0.0144898705, + -0.0020360209, + 0.0006181644, + 0.0032214087, + 0.021683056, + -0.0045539592, + -0.03293858, + -0.0051070326, + 0.014231123, + -0.015822422, + -0.011675989, + -0.019199079, + -0.008887983, + -0.0038100597, + 0.010828591, + 0.027479006, + -0.010155847, + -0.008499862, + 0.013196132, + -0.014049999, + -0.0034995626, + 0.008661579, + -0.0046024746 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 9, + "total_tokens": 9 + } +} +1737 1906 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 1534 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is yellow.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003epatio\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ebedroom\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003eoffice\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003ekitchen\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 1080 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:43:18 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 896 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999750 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_4544d41df4bc4857a3bc547a765bae13 + +{ + "id": "chatcmpl-ERDnSNOLEpbZtbkovgdunwsf673R7", + "object": "chat.completion", + "created": 1790156598, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "In the patio, the lamp beside the desk is yellow. \nIn the bedroom, the lamp beside the desk is blue. \nIn the office, the lamp beside the desk is orange. \nIn the kitchen, the lamp beside the desk is black. \nIn the sitting room, the lamp beside the desk is purple.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 247, + "completion_tokens": 65, + "total_tokens": 312, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_109d5ede69" +} diff --git a/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilters.httprr b/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilters.httprr new file mode 100644 index 000000000..bea284635 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithMetadataFilters.httprr @@ -0,0 +1,6332 @@ +httprr trace v1 +393 101203 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 197 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["The color of the lamp beside the desk is orange.","The color of the lamp beside the desk is purple.","The color of the lamp beside the desk is yellow."]}HTTP/2.0 200 OK +Content-Length: 100246 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:55 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 128 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-hks7j +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999964 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_41ecec89db714f06882a7d1056645262 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.021987127, + -0.015545284, + -0.0045292196, + -0.016123893, + 0.007316184, + 0.013668021, + -0.026165966, + -0.0054614223, + 0.015288125, + -0.021909978, + 0.0131087, + 0.011732897, + -0.015339557, + 0.024507288, + -0.022527162, + -0.009289882, + 0.04253416, + 0.003148595, + 0.022771463, + -0.021344228, + -0.038265314, + -0.0012681172, + -0.017641133, + 0.014593795, + -0.015776727, + -0.008370537, + 0.010768549, + -0.019222664, + 0.01899122, + 0.010504961, + 0.019788414, + -0.020868484, + 0.01987842, + -0.03134773, + -0.033250708, + 0.013899464, + 0.0077983583, + 0.0017808287, + 0.010717117, + -0.026744576, + 0.015056682, + 0.008254816, + -0.0038766777, + -0.011919337, + -0.010196369, + 0.015751012, + 0.02246287, + 0.012015772, + -0.010183511, + 0.020084148, + -0.007425477, + 0.018142594, + -0.011559314, + -0.01861834, + 0.01025423, + -0.031553455, + 0.0019351243, + 0.015236693, + -0.013256566, + -0.016959662, + -0.0038702486, + -0.006576851, + 0.00061878975, + -0.011405018, + 0.0047060167, + 0.0044745733, + -0.0030875197, + 0.0011315013, + 0.002441407, + 0.006956161, + 0.026243115, + 0.026770292, + -0.0016418019, + 0.018374037, + 0.014889528, + 0.012742247, + -0.016188182, + 0.0032305648, + 0.0061236075, + -0.015288125, + 0.0014296455, + -0.010659256, + -0.024172982, + -0.0041177645, + 0.017705424, + 0.006120393, + -0.014568078, + 0.0034716516, + -0.03487081, + -0.017191105, + -0.0067247176, + 0.032196354, + 0.028801851, + -0.010029215, + -0.0040181153, + 0.0150052495, + 0.014388067, + 0.02362009, + 0.015403846, + -0.03348215, + 0.007457622, + 0.0044745733, + -0.044334278, + 0.0018949432, + -0.029547613, + -0.02475159, + 0.010376381, + -0.0016747505, + 0.031810615, + -0.024970176, + -0.022835752, + 0.016033888, + 0.025908807, + -0.020649899, + -0.012369366, + -0.01760256, + 0.008852712, + -0.016226757, + -0.027876077, + -0.008177668, + 0.012324363, + 0.045491494, + 0.01120572, + -0.020238442, + 0.034922242, + 0.0072133206, + -0.010884271, + -0.019775556, + -0.008209813, + 0.010344236, + 0.0046417266, + 0.008094091, + 0.014529505, + 0.020521319, + -0.005033895, + 0.006281118, + -0.006171825, + 0.024893027, + 0.0020283447, + -0.026487416, + 0.019415533, + 0.027721781, + -0.013398004, + -0.007361187, + -0.011700751, + 0.030781977, + 0.019441249, + -0.01120572, + -0.010074219, + -0.0016924301, + 0.003539156, + -0.028287532, + 0.012433656, + -0.0019319098, + 0.019004079, + -0.0033527154, + -0.01132787, + 0.0029348314, + -0.027618917, + -0.0072583235, + -0.016316762, + 0.0015067932, + 0.033019263, + 0.0032948544, + 0.024507288, + 0.021408519, + 0.0037191676, + 0.017203962, + -0.0062232567, + -0.002508911, + 0.0017390402, + 0.036362335, + -0.012260073, + 0.023182917, + -0.008891285, + 0.01728111, + 0.0045035034, + -0.002965369, + -0.011777899, + 0.003048946, + -0.020598466, + -0.008711274, + 0.016805366, + -0.0018852997, + 0.0068918713, + -0.0067697205, + 0.0047767353, + -0.011475737, + 0.0086534135, + -0.014915244, + 0.013423719, + 0.024764448, + -0.0032755677, + -0.025548784, + -0.6891871, + -0.044359993, + 0.0076826364, + -0.002010665, + 0.002344972, + 0.027696066, + 0.0020974563, + 0.011572172, + 0.008068375, + -0.015648149, + 0.0037802428, + 0.005467851, + 0.008929859, + -0.00664757, + 0.008659842, + -0.029650476, + -0.012658671, + 0.020431312, + -0.0032787821, + -0.0034202198, + -0.00016122688, + -0.0035809444, + -0.0264617, + -0.010562821, + 0.029599044, + 0.0091163, + 0.018206883, + -0.0028078589, + -0.004153124, + 0.025330199, + -0.0009852418, + 0.001547778, + -0.015686722, + -0.014349493, + 0.04443714, + -0.0011025708, + -0.008756277, + 0.009097013, + 0.0009989034, + 0.021639962, + -0.010884271, + -0.0010639969, + 0.0053907037, + -0.028004656, + -0.012112207, + 0.0066347118, + 0.017808286, + -0.009990642, + 0.038188167, + 0.003847747, + 0.026204541, + -0.010498531, + 0.0106978305, + -0.0067954366, + 0.016548205, + -0.0016827866, + 0.029599044, + 0.0014336635, + 0.004394211, + -0.0040791905, + -0.018386895, + 0.0015759048, + -0.013680879, + -0.008023373, + -0.012536519, + 0.004709231, + -0.035745155, + -0.015931023, + 0.0022147852, + 0.00092577375, + 0.0024446214, + 0.0114500215, + -0.017499696, + 0.0324278, + 0.0113021545, + -0.0050371094, + 0.026796008, + -0.008100521, + 0.021871405, + 0.0060239583, + 0.015288125, + -0.0065736366, + -0.025394488, + -0.0063839816, + 0.030961988, + -0.01139216, + -0.029161874, + -0.023517225, + 0.026243115, + -0.0031068067, + 0.027953224, + 0.0030730546, + -0.0156095745, + -0.006911158, + -0.0031630604, + 0.02785036, + -0.02070133, + 0.005184976, + 0.004127408, + -0.0040952633, + 0.015648149, + -0.031193433, + -0.012459372, + -0.008351251, + 0.035282265, + 0.0017663635, + -0.022385724, + 0.030679114, + 0.010389239, + -0.024545863, + 0.022334293, + -0.011507882, + -0.016111035, + 0.0059789554, + 0.015352415, + -0.024545863, + 0.045877233, + 0.009656334, + 0.014375209, + -0.0068983003, + 0.0060721757, + 0.012620096, + -0.0045613647, + -0.011089998, + -0.00072607346, + -0.011572172, + -0.005172118, + -0.018682629, + -0.031913478, + -0.0028946502, + 0.006686144, + -0.010357094, + 0.00087353826, + 0.0032868183, + -0.0019624475, + 0.001547778, + 0.006641141, + -0.019132657, + 0.030550534, + -0.0220257, + -0.02867327, + -0.002116743, + -0.023247208, + -0.0054774946, + -0.0010848911, + -0.01708824, + -0.031167716, + -0.007329042, + -0.020354165, + 0.016381053, + -0.032787822, + -0.022501446, + -0.031887762, + 0.012388653, + -0.0024510503, + -0.006641141, + -0.026564565, + 0.0082805315, + -0.012452943, + 0.026435984, + 0.01234365, + 0.0061814687, + -0.00842197, + -0.0013862498, + -0.008344822, + -0.038033873, + 0.0010535498, + 0.03057625, + -0.012105778, + -0.030627681, + -0.00462244, + -0.0047317324, + -0.002820717, + -0.009817059, + -0.026924586, + -0.014439499, + -0.016561063, + -0.02273289, + 0.014593795, + -0.015365273, + 0.015841018, + 0.020791335, + 0.0108907, + -0.025780227, + 0.039705407, + -0.0027837502, + 0.027798928, + 0.013886606, + 0.0067632915, + 0.010549963, + -0.019209806, + 0.0016305512, + 0.00096354407, + -0.011212149, + 0.014735232, + 0.0061686104, + 0.0036902372, + 0.012620096, + 0.007836932, + -0.0039666835, + 0.011424305, + -0.008100521, + 0.02070133, + -0.018065447, + 0.017203962, + -0.027078882, + 0.02070133, + -0.006502918, + 0.005021037, + 0.03235065, + 0.0037191676, + -0.02689887, + -0.0089555755, + -0.008370537, + 0.015120971, + 0.0032787821, + -0.013359429, + 0.015622432, + -0.007007593, + -0.015172403, + -0.006628283, + 0.0090327235, + 0.034587935, + -0.0038445326, + -0.0020412025, + -0.003232172, + 0.03762242, + 0.011957911, + -0.00791408, + -0.0076312046, + -0.029136157, + -0.010607825, + -0.016471058, + 0.010588537, + -0.022437155, + -0.0068082944, + 0.0020894199, + -0.04011686, + 0.018798351, + 0.016638212, + 0.0027307111, + 0.034716517, + 0.03919109, + -0.0063711237, + 0.017821144, + -0.005618932, + 0.022604309, + 0.017319685, + -0.01697252, + 0.008981291, + -0.016098177, + -0.007046167, + -0.012710102, + 0.016509632, + 0.02633312, + 0.0031469879, + 0.03615661, + 0.0084283985, + 0.023890106, + 0.017949725, + -0.022964332, + -0.013642305, + 0.01431092, + -0.01120572, + 0.000014477771, + 0.005551428, + -0.00569608, + 0.00905201, + -0.00017418529, + -0.012247215, + -0.013082983, + 0.0017518982, + 0.025908807, + -0.012838682, + 0.019466965, + -0.023247208, + -0.0133465715, + 0.0021392445, + 0.020405596, + 0.012645813, + -0.003760956, + -0.034999393, + 0.011186433, + 0.00022240268, + 0.0024848024, + -0.026950303, + -0.03222207, + 0.022565736, + 0.0028319675, + 0.008286961, + 0.015468136, + 0.012157209, + 0.025715938, + 0.0061171786, + 0.012080062, + -0.02975334, + 0.0022260358, + -0.0021279939, + 0.015686722, + 0.0044585005, + -0.0061428947, + -0.013205134, + -0.030396238, + -0.0015678686, + 0.0030248372, + 0.014195197, + -0.014529505, + 0.0052428367, + -0.017743997, + -0.0162139, + -0.0017052881, + -0.0023288997, + 0.0018997649, + -0.014362351, + -0.010022786, + -0.0028689343, + -0.020225585, + 0.00010949364, + 0.025857376, + 0.017358258, + 0.019788414, + -0.0162139, + -0.021434234, + -0.0008076412, + 0.0766335, + 0.008319106, + 0.0019303026, + 0.009174161, + 0.006210399, + -0.019338384, + -0.019955568, + 0.012009343, + -0.011089998, + -0.00054003467, + 0.0023208633, + -0.012716531, + 0.0173454, + 0.0046931584, + -0.00011973984, + -0.012105778, + 0.010267088, + 0.0056992946, + 0.035333697, + -0.019286953, + 0.00389275, + 0.00905201, + -0.017229678, + 0.006563993, + -0.0053649875, + -0.0049728192, + 0.019646976, + 0.012710102, + 0.012324363, + -0.0108907, + 0.013976612, + 0.013706595, + -0.001560636, + -0.014889528, + -0.01082641, + -0.014863812, + 0.0007272789, + 0.012022201, + 0.005040324, + -0.01753827, + 0.025754511, + 0.012157209, + 0.010556392, + -0.014850954, + -0.007971941, + 0.016625354, + -0.012112207, + 0.01602103, + -0.010530677, + 0.0050821123, + 0.01803973, + -0.00389275, + -0.0068854424, + -0.008087662, + 0.00810695, + 0.015185261, + -0.0056767934, + -0.014272345, + -0.010292804, + -0.006692573, + 0.010993564, + -0.013500867, + -0.0045742225, + -0.009932781, + -0.012986548, + -0.003212885, + 0.009154874, + -0.0029444748, + -0.015455279, + 0.002684101, + 0.0061300364, + -0.014825238, + -0.026796008, + 0.00095952593, + 0.03235065, + 0.019724125, + 0.008839854, + -0.009617761, + 0.00069151766, + 0.04595438, + -0.0068468684, + -0.00046690498, + -0.014606653, + 0.0008020158, + -0.0060721757, + -0.0015702795, + 0.031322014, + -0.0137966005, + -0.0037545268, + -0.0026519562, + 0.030653398, + 0.0011893621, + 0.0091098705, + -0.008917001, + -0.006866155, + -0.012189355, + 0.018824067, + 0.005490353, + -0.015558142, + -0.0068404395, + 0.008447685, + -0.026487416, + -0.008222671, + -0.010222085, + 0.00860841, + 0.025278768, + 0.032813538, + 0.0018242244, + -0.021189932, + 0.013680879, + 0.025085898, + -0.005663935, + 0.00083817885, + -0.00028448255, + 0.0015976026, + 0.005924309, + -0.015802443, + 0.016111035, + -0.0015317055, + -0.032813538, + 0.00024831953, + -0.044591434, + 0.021665677, + -0.0034105761, + 0.0016241221, + -0.000046082758, + 0.01778257, + -0.013706595, + 0.0033816458, + 0.0010993563, + -0.005969312, + 0.020752762, + -0.015056682, + -0.021061353, + -0.03880535, + -0.029110441, + 0.022308577, + -0.0025410561, + -0.013012265, + -0.008646984, + -0.00848626, + 0.012710102, + 0.019518396, + 0.0021038852, + -0.024713017, + -0.020469887, + -0.0016418019, + 0.00591788, + 0.0075797727, + 0.009322028, + -0.002684101, + 0.005680008, + -0.022720031, + 0.01740969, + 0.0051592602, + -0.008113379, + -0.030550534, + -0.028518975, + 0.020122722, + 0.010897129, + 0.031116284, + -0.007284039, + 0.00484424, + 0.01038281, + -0.01120572, + 0.0005018626, + -0.0068597263, + -0.0056542917, + -0.03247923, + 0.010961418, + 0.015249551, + 0.0012938331, + 0.020187011, + -0.00427206, + 0.014953818, + 0.0064900597, + -0.002991085, + -0.011160717, + -0.02304148, + -0.022938617, + -0.0004564579, + 0.004362066, + -0.020187011, + -0.0076054884, + 0.0108907, + -0.01025423, + 0.020367023, + 0.011617175, + -0.005570715, + -0.008319106, + 0.03556514, + 0.0024156908, + 0.031476308, + -0.009836346, + 0.0010897128, + -0.012838682, + -0.02526591, + -0.000019249284, + 0.00880128, + 0.006348622, + 0.011025708, + 0.0038123878, + -0.0015493853, + -0.0329164, + 0.020932773, + 0.019981284, + 0.032144923, + 0.012780821, + -0.007856219, + -0.018065447, + -0.025741654, + -0.032967832, + -0.0316306, + -0.027516054, + 0.0054710656, + 0.009804201, + -0.030370522, + 0.023722952, + -0.003187169, + -0.027207462, + 0.010119221, + 0.00715546, + 0.027361758, + -0.0030601965, + 0.013693737, + 0.0047767353, + -0.0075026248, + -0.020341307, + -0.0048024515, + -0.016535347, + -0.009707767, + 0.02697602, + 0.01272939, + 0.000053943197, + 0.020045573, + 0.016239615, + 0.010427813, + 0.032376364, + -0.009315599, + -0.0133465715, + 0.018849783, + 0.0173454, + -0.02165282, + 0.00993921, + -0.019441249, + 0.012189355, + -0.018271174, + -0.020212727, + -0.001946375, + -0.0053264135, + -0.015853876, + -0.006615425, + -0.04348565, + 0.0024783735, + 0.0023722954, + 0.0014577722, + 0.009489181, + -0.010183511, + -0.016149608, + -0.02044417, + -0.011867905, + 0.019364102, + -0.005284625, + 0.016175324, + 0.006052889, + -0.006432199, + -0.02518876, + -0.008409112, + 0.009251309, + 0.02810752, + 0.0015590288, + -0.004236701, + -0.021087069, + 0.01600817, + 0.041685537, + -0.008145523, + -0.0035905878, + 0.008087662, + -0.008878428, + 0.006477202, + 0.021305654, + -0.0036613066, + -0.01094856, + 0.013963754, + -0.022102848, + 0.0000116023075, + -0.026281688, + -0.010350665, + -0.011315012, + -0.016728217, + -0.0039666835, + -0.009341314, + 0.019441249, + -0.0007718799, + 0.006737576, + -0.025214477, + 0.03672236, + 0.0076890653, + -0.01760256, + 0.015326699, + -0.0050081788, + 0.014259487, + 0.0020138794, + 0.015558142, + 0.0072326073, + -0.024648726, + 0.038085304, + -0.010022786, + -0.034999393, + -0.007393332, + 0.0021038852, + -0.0065125613, + -0.0012512411, + -0.0075926306, + 0.010485673, + -0.0109228445, + 0.0138737485, + -0.017834002, + -0.0034266487, + 0.0009715803, + -0.022360008, + 0.002631062, + 0.01171361, + -0.022437155, + -0.0080490885, + 0.012896542, + -0.0088848565, + 0.004088834, + -0.03682522, + -0.006563993, + -0.022835752, + 0.012639384, + 0.0044134976, + -0.014786664, + -0.016149608, + -0.005040324, + -0.009662763, + 0.00022039362, + -0.005773228, + 0.014092334, + -0.009881349, + -0.0046867295, + -0.015853876, + 0.021639962, + -0.011662178, + 0.0061557526, + -0.017589701, + -0.007399761, + -0.018566906, + 0.012009343, + -0.0017390402, + -0.020367023, + 0.00021838456, + -0.04006543, + -0.022720031, + -0.0016699287, + -0.014992392, + 0.0004910137, + 0.002658385, + 0.008756277, + 0.024597295, + -0.0067890077, + -0.0010712296, + 0.022642883, + 0.001965662, + 0.005641434, + -0.036362335, + -0.018515475, + 0.0029605473, + -0.011430735, + 0.014015186, + 0.009527755, + -0.0011282868, + -0.011803616, + 0.010215656, + -0.004291347, + 0.00892343, + -0.014066618, + -0.012986548, + 0.008942718, + 0.0097913435, + 0.026101677, + 0.026950303, + 0.008904143, + -0.007071883, + -0.013153702, + -0.0116043165, + 0.013359429, + 0.03265924, + -0.0078047873, + 0.0056767934, + 0.0068147234, + -0.008248387, + 0.012883685, + -0.015596717, + 0.01285154, + 0.0053199846, + 0.015841018, + 0.0010013144, + -0.010794265, + 0.0064739874, + 0.01513383, + -0.0045870803, + -0.012317934, + -0.0015566179, + 0.006943303, + -0.02702745, + -0.0014224128, + 0.0106978305, + -0.014645226, + -0.000055801574, + -0.024327276, + 0.0035616574, + -0.037879575, + 0.0008253209, + -0.02697602, + -0.0082033845, + -0.03615661, + 0.03368788, + 0.02221857, + -0.015262409, + -0.0033173559, + -0.03026766, + -0.001554207, + -0.0024896243, + -0.010961418, + -0.010267088, + -0.030601965, + -0.026101677, + 0.0016892157, + 0.00560286, + -0.027516054, + -0.0084283985, + 0.000048794987, + 0.0063904105, + 0.021511381, + 0.23596944, + 0.0104471, + -0.016908228, + 0.028724702, + -0.0034170053, + 0.03551371, + 0.024455857, + -0.012176497, + 0.024404425, + 0.025291625, + -0.0106206825, + 0.0038123878, + 0.0081262365, + -0.000507488, + 0.0036484487, + -0.0067504337, + -0.029701907, + 0.0073033264, + -0.0068725846, + -0.008171239, + 0.013783743, + -0.010871412, + 0.011745755, + 0.0012890113, + 0.03134773, + 0.0059789554, + -0.013018694, + -0.00068870495, + 0.023465794, + 0.013256566, + -0.007830503, + -0.00974634, + 0.0013966969, + -0.01329514, + -0.005078898, + -0.0063229064, + -0.016046746, + 0.012369366, + 0.01665107, + 0.024481572, + 0.015455279, + 0.013655163, + -0.0282361, + -0.012054346, + 0.0068404395, + 0.02152424, + -0.012337221, + -0.01608532, + 0.023877248, + 0.012832253, + -0.016921086, + -0.0017358258, + 0.029830487, + 0.01949268, + 0.0017952939, + 0.0262174, + 0.02392868, + -0.008036231, + 0.02702745, + -0.008151952, + -0.009514897, + 0.018759776, + -0.02234715, + 0.0045035034, + 0.014452357, + -0.0056317905, + -0.017885435, + 0.007926938, + 0.009682051, + -0.014902386, + 0.013693737, + 0.0077276393, + 0.014285203, + 0.010099934, + -0.008743418, + -0.006412912, + 0.019518396, + -0.0026278475, + 0.021035638, + -0.012774392, + -0.009765628, + -0.014015186, + -0.0045356485, + 0.020559892, + -0.0092641665, + -0.017872578, + 0.00052034593, + 0.0069690193, + 0.032556377, + -0.0059532397, + -0.0043074195, + -0.016162466, + 0.012157209, + -0.002605346, + 0.009932781, + 0.024468714, + -0.015841018, + 0.017821144, + -0.024597295, + 0.0053489152, + -0.027901793, + -0.035153687, + 0.010839268, + -0.015661007, + -0.016471058, + 0.010607825, + -0.0019174446, + 0.017486837, + 0.041814115, + -0.001841904, + 0.006493274, + -0.0063775526, + 0.009881349, + -0.004291347, + 0.017191105, + -0.006911158, + 0.011630033, + -0.011462879, + -0.01784686, + -0.010871412, + -0.006348622, + -0.021768542, + -0.00943132, + 0.0021231722, + -0.007573344, + -0.012131494, + -0.004911744, + 0.016239615, + 0.0019142301, + -0.03875392, + 0.04027116, + -0.008344822, + 0.027798928, + 0.0045806514, + -0.006692573, + 0.00011431538, + -0.011636462, + -0.008190527, + 0.015866734, + -0.01051139, + 0.0018708345, + -0.0032803894, + 0.01240794, + -0.00031160485, + -0.0011821295, + 0.00062682596, + 0.006531848, + -0.022514304, + -0.01784686, + -0.022488588, + -0.010183511, + -0.011199291, + -0.00019899716, + -0.007791929, + 0.015185261, + -0.011192862, + -0.023362929, + -0.0060111005, + 0.0029042938, + 0.02286147, + -0.008376967, + 0.007959083, + -0.0013500868, + -0.0049021007, + 0.0048153093, + 0.00079639046, + -0.16489059, + 0.01753827, + 0.017563986, + -0.016432485, + -0.011083569, + 0.0035938022, + 0.024507288, + 0.020598466, + -0.0064739874, + 0.032119207, + 0.009013436, + 0.0116043165, + -0.05811802, + -0.01956983, + -0.00021798276, + 0.014285203, + -0.0032369937, + -0.003532727, + 0.024545863, + 0.008190527, + -0.0051592602, + -0.024082975, + 0.019466965, + 0.0066347118, + 0.0059918133, + 0.00050507707, + -0.01569958, + 0.035333697, + -0.0025410561, + -0.008711274, + -0.0039506108, + 0.0027049952, + 0.0025185547, + 0.025934523, + 0.021485666, + -0.0020797765, + 0.0018627982, + 0.008666271, + -0.0022951474, + -0.0050049643, + -0.007920509, + 0.019595545, + 0.011295726, + 0.02354294, + -0.019068368, + 0.026924586, + 0.036130894, + 0.0130379805, + -0.0059114513, + -0.0068275817, + 0.017049666, + -0.03070483, + -0.01684394, + -0.004053475, + 0.0033077125, + 0.01329514, + 0.02165282, + 0.015429563, + -0.004030973, + 0.024275845, + 0.010961418, + -0.04096549, + -0.0073483293, + 0.0031437734, + 0.0020122721, + -0.014285203, + 0.006097892, + 0.009206305, + -0.028827567, + 0.009842775, + -0.019389817, + -0.008023373, + 0.009142016, + -0.0119064795, + 0.0028448256, + 0.003519869, + -0.017756855, + 0.010813552, + -0.012054346, + -0.010119221, + 0.012292218, + 0.029804772, + -0.0058021583, + -0.005088541, + -0.017075382, + 0.017962582, + -0.0023080055, + 0.016856797, + -0.021292796, + -0.021961411, + 0.022668598, + -0.034922242, + -0.0016683214, + -0.045748655, + 0.0076826364, + 0.010723546, + -0.0007630401, + -0.009270595, + 0.0084283985, + -0.002063704, + 0.008331964, + -0.0029685835, + -0.011006421, + 0.019235522, + 0.029213306, + 0.017101098, + -0.007001164, + 0.0023321141, + 0.020238442, + -0.002741962, + -0.022321435, + 0.023774384, + -0.00015469744, + 0.024790164, + 0.008781993, + -0.006236115, + 0.009926352, + -0.028081805, + 0.0071811755, + 0.013655163, + 0.042328432, + 0.0036355907, + -0.0065061324, + 0.005708938, + -0.008698416, + -0.031064853, + -0.099109225, + -0.019916994, + 0.016676785, + 0.01968555, + 0.0024462286, + 0.02265574, + 0.008994149, + 0.028210383, + -0.004609582, + 0.026410269, + -0.0047124457, + -0.020649899, + -0.019646976, + 0.0067118597, + 0.0067504337, + -0.014066618, + 0.011893622, + -0.023028621, + -0.039911136, + 0.0058150166, + -0.00039819523, + 0.0018033301, + -0.0007843361, + -0.007734068, + -0.015249551, + -0.011668607, + -0.035359416, + 0.013256566, + 0.0025410561, + -0.0103956675, + 0.01974984, + -0.017036809, + 0.014388067, + -0.005908237, + -0.009720624, + 0.0051239007, + -0.014580937, + 0.00242212, + 0.009193447, + -0.03456222, + 0.0024446214, + 0.0034234342, + 0.011938624, + -0.012845111, + -0.011797186, + -0.0029155444, + -0.013082983, + 0.0039409674, + -0.00042712566, + -0.026873155, + 0.0045227907, + 0.03898536, + -0.015661007, + -0.003998828, + 0.038522474, + -0.028133236, + 0.01753827, + 0.022694316, + -0.017924009, + 0.0150823975, + 0.013835175, + 0.004127408, + -0.0038156023, + 0.020289876, + -0.011655749, + -0.015288125, + -0.030653398, + -0.010305662, + 0.015995312, + -0.036233757, + -0.010267088, + 0.013886606, + -0.0061396803, + 0.011122143, + -0.017422548, + 0.0036420196, + -0.007939796, + -0.012459372, + 0.00088157447, + -0.006052889, + -0.028518975, + -0.017949725, + -0.0053649875, + -0.0062136133, + 0.0004568597, + 0.02728461, + -0.018374037, + -0.007084741, + 0.03659378, + -0.009977784, + 0.003944182, + 0.039525397, + 0.011089998, + -0.0131087, + -0.013603731, + 0.015108113, + 0.010993564, + 0.017795429, + 0.016535347, + -0.016535347, + -0.016869655, + -0.001407144, + -0.045337196, + 0.01253009, + -0.0041949125, + -0.015185261, + -0.0063968394, + 0.00093380996, + -0.013629447, + 0.0072776102, + -0.005021037, + 0.0011564136, + -0.004754234, + -0.00930917, + -0.003805959, + -0.0049728192, + -0.010453529, + -0.0008880035, + 0.013809458, + -0.0038284601, + 0.020521319, + -0.006068961, + -0.0025715937, + 0.003969898, + 0.0060625323, + 0.00582466, + -0.02849326, + 0.014362351, + -0.017924009, + -0.014966676, + -0.02152424, + -0.009662763, + 0.009090584, + -0.02785036, + 0.0061428947, + 0.03438221, + -0.015571, + -0.02462301, + -0.014529505, + 0.022630025, + 0.004448857, + -0.02126708, + -0.026513131, + -0.032376364, + 0.019531256, + -0.01506954, + -0.023851532, + 0.020791335, + -0.011032137, + -0.010909987, + 0.0073804744, + 0.009322028, + 0.015802443, + 0.023080055, + 0.0012576701, + -0.0076247756, + -0.0067247176, + -0.014568078, + 0.037108097, + 0.0068018655, + 0.013822316, + -0.018194025, + 0.012793679, + -0.009926352, + 0.0022292503, + 0.015030965, + 0.008621268, + 0.013134415, + -0.008550549, + -0.009058439, + -0.000013900168, + 0.0052364077, + -0.015776727, + -0.007997656, + 0.04348565, + 0.016818224, + 0.022964332, + 0.0062200422, + -0.008492689, + -0.003507011, + -0.0048410255, + 0.0051978338, + 0.021395661, + -0.004792808, + -0.008942718, + 0.014760949, + 0.01892693, + 0.03520512, + -0.045440063, + -0.0027387473, + 0.0033912894, + -0.0019319098, + -0.022745747, + -0.00031240846, + -0.0035841588, + 0.0055546425, + 0.005680008, + 0.0024076547, + -0.0072326073, + 0.005641434, + 0.0065414915, + 0.025960239, + 0.011128572, + -0.016252473, + -0.0020315591, + -0.02594738, + -0.015095255, + 0.009013436, + -0.011115714, + -0.011912908, + -0.0131151285, + 0.008589123, + 0.010408525, + -0.021999985, + 0.009881349, + 0.016059604, + -0.0048024515, + -0.009026295, + -0.026770292, + -0.022038558, + -0.013005836, + 0.0064514857, + 0.006943303, + 0.008061946, + -0.003748098, + -0.016175324, + 0.023401503, + 0.021665677, + 0.032942116, + -0.030421954, + 0.017178247, + 0.016252473, + 0.009302741, + 0.0023915821, + -0.0040631182, + -0.014992392, + -0.018309748, + -0.020418454, + -0.023915822, + 0.01702395, + 0.006400054, + 0.048011657, + -0.009784915, + -0.04309991, + 0.027824644, + -0.01424663, + 0.01183576, + 0.0054260627, + 0.013526583, + -0.020341307, + -0.008466972, + -0.0024831952, + 0.014735232, + 0.024713017, + -0.00892343, + -0.018155452, + -0.0020267374, + -0.025561642, + 0.010479244, + -0.024674442, + -0.011263581, + 0.034485072, + 0.0047574486, + 0.0052139065, + 0.007881935, + -0.017628275, + -0.009238451, + 0.010479244, + 0.0109228445, + -0.0021987127, + -0.010106363, + 0.016381053, + -0.012137922, + -0.02354294, + -0.004448857, + 0.013719453, + -0.026718859, + -0.016946804, + -0.02633312, + -0.0027355328, + 0.00810695, + 0.0015614396, + 0.029856203, + -0.01398947, + -0.021035638, + -0.0021183505, + -0.007984798, + -0.017872578, + 0.012067203, + -0.012427227 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.024428807, + -0.010380333, + 0.002464533, + -0.016939685, + -0.0017831246, + 0.02194517, + -0.01774209, + -0.028529994, + 0.0144051, + -0.010157443, + 0.00918946, + 0.0086672595, + -0.00750186, + 0.0065784566, + -0.017601987, + -0.016290117, + 0.032249082, + -0.008641786, + 0.024658067, + -0.025307633, + -0.022085274, + 0.009832659, + -0.007527333, + 0.010335755, + -0.028555468, + 0.0007634002, + 0.010736958, + -0.016697688, + 0.0077183824, + 0.02269663, + 0.0116094155, + -0.012628344, + 0.03436336, + -0.029956495, + -0.038209815, + 0.010221126, + 0.017958613, + 0.0039833733, + 0.01928322, + -0.019423323, + 0.0054862923, + 0.01928322, + 0.00044180098, + -0.009807185, + -0.019525215, + -0.0032733073, + 0.019346902, + 0.013309752, + -0.008527157, + 0.023919344, + 0.008246952, + 0.013972055, + -0.014430573, + -0.016264644, + 0.0047061755, + -0.036477637, + 0.010310282, + 0.018442605, + -0.015424028, + 0.0035089345, + -0.011838675, + -0.0071197622, + 0.00086210895, + -0.0028721043, + -0.0017656118, + -0.0024931903, + -0.010526804, + 0.0044960217, + 0.019729001, + -0.0010865916, + 0.022836732, + 0.037496563, + 0.010641433, + 0.005871575, + 0.008832836, + 0.010342123, + -0.010176547, + 0.0061167544, + -0.0052538496, + -0.011450208, + -0.00058429176, + -0.018060505, + -0.018939331, + -0.014634359, + 0.012163457, + 0.0053875837, + -0.015729707, + -0.0085207885, + -0.030899003, + -0.023817452, + -0.0016939684, + 0.048526466, + 0.015844336, + -0.010157443, + 0.007036974, + 0.016175488, + 0.012711132, + 0.024594383, + 0.025231214, + -0.035025664, + 0.00416487, + 0.00859084, + -0.035433233, + -0.00014378433, + -0.03744562, + -0.025842572, + 0.00046050787, + 0.0015220243, + 0.030491432, + -0.027358226, + -0.027001603, + 0.020314885, + 0.043075196, + -0.020493196, + 0.005836549, + -0.017461885, + 0.01515656, + -0.015997175, + -0.02018752, + 0.0012720684, + 0.009819922, + 0.044807374, + 0.016825056, + -0.013628167, + 0.040145777, + -0.0038687438, + -0.01083885, + -0.02149939, + -0.006648508, + 0.012150721, + 0.010857956, + 0.015424028, + -0.000029478275, + 0.0053621107, + -0.012571029, + 0.00039443673, + -0.016939685, + 0.018811965, + 0.008081376, + -0.004909961, + 0.010584119, + 0.024148602, + -0.02588078, + -0.010526804, + -0.0029564844, + 0.027893165, + 0.018238818, + -0.013640904, + -0.016455693, + 0.0015498856, + 0.007871222, + -0.021142764, + 0.008756416, + -0.005378031, + 0.0064988527, + 0.0018786492, + -0.030593324, + 0.014035738, + -0.013564484, + 0.0051901666, + -0.02014931, + 0.009437825, + 0.029829128, + -0.007871222, + 0.026288353, + 0.025243951, + 0.010972585, + 0.009488771, + -0.02281126, + 0.0039292425, + -0.0041393964, + 0.026390245, + -0.022594737, + 0.015691496, + -0.013704587, + 0.013437118, + 0.0045342315, + -0.014748989, + -0.014825408, + -0.0022018405, + -0.019703528, + 0.0042253686, + 0.016009912, + 0.012163457, + 0.0058906795, + -0.00003445351, + 0.026594032, + -0.014354154, + 0.007259865, + -0.012469136, + 0.022760313, + 0.020849822, + -0.015525921, + -0.038439073, + -0.68227446, + -0.04771132, + 0.021805067, + -0.004375024, + -0.001918451, + 0.030746164, + 0.012545556, + 0.01856997, + -0.006170885, + -0.012520082, + 0.011813201, + 0.015131086, + 0.004152133, + 0.0062377523, + 0.0064797476, + -0.022556527, + -0.013640904, + -0.0046202033, + 0.013475328, + -0.0036808788, + 0.0012983377, + 0.009348668, + -0.005791971, + -0.012825761, + 0.020862559, + 0.018073242, + 0.024517965, + 0.010227494, + -0.008208741, + 0.004056609, + -0.016608533, + 0.017525569, + -0.0148763545, + -0.007985851, + 0.03856644, + 0.00060260063, + -0.012443663, + 0.017614724, + 0.017652934, + 0.011794096, + -0.016200962, + 0.009163987, + 0.006712191, + -0.023231568, + -0.01444331, + 0.014850881, + 0.011596679, + -0.013921109, + 0.03999294, + 0.0084889475, + 0.020849822, + -0.030516906, + 0.013182386, + -0.0028116056, + 0.028402628, + 0.003922874, + 0.037165415, + 0.012182563, + -0.009622505, + 0.006317356, + -0.0015506817, + -0.00072558847, + -0.00050030975, + -0.009100304, + -0.0068395566, + -0.0043845763, + -0.029064933, + -0.022836732, + -0.022289058, + -0.0076801726, + 0.0012370427, + 0.015296662, + -0.0127175, + 0.013233332, + 0.0041139233, + -0.005747393, + 0.023040518, + -0.007998588, + 0.01140563, + 0.0023116937, + 0.009781713, + -0.014073948, + -0.028835673, + -0.01185141, + 0.038031504, + -0.0057633137, + -0.040706187, + -0.023116937, + 0.022314532, + -0.0021938803, + 0.012150721, + -0.0067312955, + -0.025842572, + -0.007030606, + -0.012112511, + 0.038515493, + -0.016162751, + -0.0009011148, + -0.0030169832, + 0.0002167213, + 0.0025791624, + -0.016048122, + -0.01222714, + -0.0059893886, + 0.036961626, + -0.011170003, + -0.019372376, + 0.019499741, + 0.014748989, + -0.026237406, + 0.03624838, + -0.017347256, + -0.008686365, + 0.0101383375, + 0.013526274, + -0.026568558, + 0.053035222, + 0.0012744565, + -0.010195652, + -0.0066421395, + 0.011348315, + 0.023104202, + -0.0016732714, + 0.0016780477, + -0.011583942, + -0.013717324, + -0.007087921, + -0.007712014, + -0.024810906, + 0.007049711, + 0.0048335413, + 0.0040725293, + 0.018506287, + 0.003537592, + 0.008603577, + -0.005836549, + 0.016583059, + -0.012271719, + 0.019907312, + -0.0027940928, + -0.01654485, + 0.006215463, + -0.037216358, + 0.0039706365, + 0.003036088, + -0.031561308, + -0.042718574, + -0.005263402, + -0.01928322, + 0.0055340547, + -0.020913506, + -0.011953304, + -0.021091817, + 0.018862912, + 0.006763137, + -0.0065211416, + -0.029141352, + 0.002504335, + -0.020238465, + 0.0030281278, + 0.002696976, + -0.0067440323, + -0.0029596686, + -0.0013747573, + 0.00010248987, + -0.024377862, + -0.009208566, + 0.022365479, + -0.0077756974, + -0.023320723, + -0.008686365, + 0.00052498694, + -0.000013967976, + -0.010647802, + -0.017423676, + -0.011418366, + -0.011501154, + -0.029192299, + 0.0001619937, + -0.015742444, + 0.0138829, + 0.013742796, + 0.01594623, + -0.0007228023, + 0.039789155, + -0.0076101213, + 0.012201668, + 0.016264644, + 0.0030822584, + -0.012481873, + -0.0007176281, + 0.0031029554, + 0.00016915804, + -0.010303914, + -0.0039419793, + 0.0022909967, + 0.012902181, + 0.013093229, + 0.0050819055, + 0.0030456407, + 0.010252967, + -0.01984363, + 0.017194416, + -0.01797135, + 0.0051041944, + -0.04508758, + 0.008762784, + -0.008539894, + -0.0072917063, + 0.02746012, + -0.00082469516, + -0.011845043, + -0.007852117, + -0.008374318, + 0.0024868222, + 0.008839204, + -0.016264644, + 0.004047056, + -0.009367773, + -0.008125954, + 0.0013715731, + 0.0037222728, + 0.0351785, + 0.0013373435, + -0.0021349734, + 0.0035312236, + 0.0259572, + 0.018990278, + -0.008679996, + -0.015207506, + -0.023690086, + -0.010928007, + -0.01376827, + 0.014023002, + -0.03713994, + -0.00040319315, + 0.0027654353, + -0.03724183, + 0.02389387, + 0.019779947, + 0.0011064926, + 0.03810792, + 0.02412313, + -0.0026332932, + 0.011845043, + -0.0034420674, + 0.012520082, + 0.009845396, + -0.029421557, + 0.014608886, + -0.017487358, + -0.0074636503, + 0.004148949, + 0.0093868775, + 0.014596149, + -0.010762431, + 0.034414306, + 0.009253143, + 0.017474622, + 0.021028135, + -0.028682834, + -0.005075537, + 0.0059225215, + -0.0031125078, + 0.0061772536, + 0.009622505, + -0.009240407, + -0.008399791, + 0.0024724933, + -0.026364772, + -0.021817803, + -0.0022129852, + 0.023562718, + -0.018442605, + 0.018022295, + -0.014736252, + -0.0052092713, + 0.0037318252, + 0.010265703, + 0.02111729, + 0.0013564484, + -0.03331896, + 0.014290471, + -0.0012306744, + -0.000010982834, + -0.032809492, + -0.032325502, + 0.01132921, + 0.0020808429, + 0.00047921477, + 0.014048475, + 0.004820805, + 0.03398126, + 0.006024414, + 0.0003705556, + -0.025893517, + 0.007858485, + 0.01511835, + 0.011768623, + 0.0091576185, + -0.008469842, + -0.01853176, + -0.02607183, + -0.003980189, + 0.0034134102, + 0.012443663, + -0.011297368, + 0.0015427213, + -0.01148205, + -0.030771637, + -0.02221264, + 0.002843447, + 0.004276315, + -0.01781851, + -0.01527119, + 0.0015228203, + -0.021601282, + -0.0027733957, + 0.032503817, + 0.014927301, + 0.0053143483, + -0.011698572, + -0.016901474, + -0.012405453, + 0.07677625, + 0.013844689, + 0.0063237245, + 0.014621622, + 0.0046934388, + -0.015347608, + -0.018175134, + 0.013322488, + 0.0031507176, + 0.001935964, + 0.007845748, + -0.012908549, + 0.012825761, + -0.000054677846, + 0.012634712, + 0.0055754487, + 0.0067312955, + 0.012953127, + 0.024734486, + -0.025142059, + 0.015576867, + -0.0017831246, + -0.012889444, + 0.005298428, + -0.00686503, + -0.0028816569, + 0.025766151, + 0.0036999837, + 0.0140102655, + 0.005393952, + -0.0031650462, + 0.015640551, + 0.0013588365, + -0.022352742, + -0.01132921, + -0.008170532, + -0.003852823, + 0.01961437, + -0.0040534246, + 0.003875112, + 0.031968877, + 0.021410232, + 0.013093229, + -0.011469313, + -0.0009608176, + 0.01500372, + -0.010666907, + 0.016837792, + -0.004460996, + -0.0033433589, + 0.026772343, + -0.0073744943, + -0.0045405994, + -0.005670973, + 0.017347256, + 0.020938978, + -0.0027511066, + -0.017398203, + -0.011692204, + -0.017194416, + 0.0045405994, + -0.0033879369, + -0.0018054137, + -0.007928536, + -0.027969584, + -0.0023116937, + 0.0063078036, + -0.0044801007, + -0.013297016, + -0.0006826024, + -0.0065179574, + -0.024709014, + -0.021066345, + 0.0023944818, + 0.0377513, + 0.023575455, + 0.02092624, + -0.010851587, + -0.010068286, + 0.04880667, + 0.004760306, + -0.0034038576, + -0.015933493, + 0.01053954, + -0.01200425, + 0.0023053256, + 0.040833555, + -0.012074301, + -0.024059447, + -0.0005229968, + 0.034465253, + -0.008113218, + 0.016672216, + -0.010526804, + -0.00547674, + -0.011093583, + 0.021372022, + 0.0103994375, + -0.01706705, + -0.0020999478, + 0.020696983, + -0.0259572, + -0.013093229, + -0.015182033, + 0.0141248945, + 0.01132921, + 0.023957554, + 0.002021936, + -0.022976834, + 0.01511835, + 0.0000023414705, + -0.0073872306, + -0.016404746, + 0.0038814803, + 0.014175842, + 0.014392364, + -0.011488417, + 0.015220243, + -0.0067058224, + -0.02888662, + 0.0082596885, + -0.034490727, + 0.021168238, + -0.0013039099, + -0.009998235, + -0.0010085799, + 0.0192068, + 0.0014089869, + 0.0056805257, + 0.011131792, + 0.0013644088, + 0.025345843, + -0.019665318, + -0.0127175, + -0.035153028, + -0.02419955, + 0.029905548, + 0.0105140675, + -0.00964161, + -0.015245716, + -0.010144706, + 0.009011148, + 0.0062536728, + 0.0040247673, + -0.026594032, + -0.01714347, + 0.0028912092, + 0.007928536, + -0.011182739, + 0.01519477, + 0.00092101574, + -0.009966393, + -0.012316297, + 0.018608179, + 0.0016477982, + -0.009011148, + -0.019346902, + -0.030822584, + 0.027689379, + 0.007017869, + 0.025307633, + -0.010870692, + -0.0004103575, + 0.010596856, + -0.0032335056, + 0.0018245187, + 0.0022687078, + -0.0064893, + -0.03443978, + 0.032249082, + 0.008597208, + 0.007820276, + 0.022085274, + 0.00051225035, + 0.0048399097, + 0.019461533, + -0.0076164897, + -0.005454451, + -0.026594032, + -0.026746871, + -0.007584648, + 0.0041839746, + -0.016710425, + -0.007489124, + -0.004254026, + -0.0064415378, + 0.01872281, + 0.008851941, + -0.00922767, + -0.0031332048, + 0.032580234, + -0.018888384, + 0.042412896, + -0.012309928, + 0.0023944818, + -0.006107202, + -0.016888738, + -0.0046807025, + 0.010934375, + 0.004043872, + 0.014914564, + 0.01508014, + -0.017270837, + -0.015666025, + 0.005448083, + 0.0149909835, + 0.021473916, + -0.003196888, + -0.015653288, + -0.028147897, + -0.025485946, + -0.022289058, + -0.034770932, + -0.038439073, + 0.011424734, + 0.0008382278, + -0.02325704, + 0.025078375, + -0.0050628004, + -0.01909217, + 0.0036331166, + 0.014023002, + 0.028249789, + -0.003951532, + 0.0071261306, + 0.025829835, + -0.016786845, + -0.005830181, + 0.008336108, + -0.011934198, + -0.011189108, + 0.023104202, + 0.028224315, + -0.018888384, + 0.028759254, + 0.0076929093, + 0.0064670113, + 0.032733075, + -0.01812419, + -0.015691496, + -0.00011194281, + 0.025040165, + -0.015564132, + 0.012921286, + -0.026160987, + 0.01230356, + -0.019970996, + -0.004566073, + 0.007743856, + -0.0030026545, + -0.0097626075, + -0.006699454, + -0.028555468, + 0.012564661, + 0.015232979, + 0.0061772536, + 0.01928322, + -0.002273484, + -0.013309752, + -0.015385819, + -0.019168591, + 0.03268213, + 0.011978777, + 0.019181326, + -0.003241466, + -0.0060976497, + -0.0069605545, + 0.00037990903, + -0.0044482592, + 0.027078021, + -0.0048494623, + 0.005967099, + -0.023842923, + 0.021130027, + 0.034770932, + -0.022187166, + -0.0037795876, + 0.008380686, + -0.013666377, + -0.0057346565, + 0.013844689, + -0.009985498, + -0.02393208, + 0.005846102, + -0.030262172, + 0.0028052372, + -0.018850176, + 0.0007538478, + 0.012297192, + -0.023460826, + -0.0024279153, + -0.011864147, + 0.008055902, + 0.005897048, + -0.0056104744, + -0.010609591, + 0.025817098, + 0.008094112, + -0.012297192, + 0.016786845, + -0.008367949, + 0.012271719, + -0.011348315, + 0.010189284, + 0.0035630653, + -0.029472504, + 0.021091817, + -0.0092722485, + -0.03263118, + -0.0140102655, + -0.011399262, + -0.0036745104, + -0.006616666, + -0.0066867177, + 0.004040688, + -0.004566073, + 0.0088965185, + -0.01718168, + 0.005648684, + -0.003496198, + -0.021996116, + 0.016876, + 0.02603362, + -0.022314532, + -0.008234215, + 0.009921815, + -0.011112688, + 0.0022894046, + -0.035127558, + -0.008036798, + -0.027511066, + 0.0048239892, + 0.0037859557, + -0.009017516, + -0.012762078, + -0.0051710615, + -0.018009558, + 0.0008867861, + -0.006314172, + 0.011431103, + -0.006355566, + 0.006355566, + -0.02333346, + 0.00825332, + -0.02588078, + 0.024594383, + -0.008998412, + -0.023741031, + -0.018862912, + 0.012329034, + -0.00375093, + -0.00652751, + -0.0055276863, + -0.042667627, + -0.01812419, + -0.014659832, + -0.0057346565, + -0.000505882, + 0.0063714865, + -0.0017958613, + 0.02051867, + -0.01714347, + -0.0074827555, + 0.00821511, + 0.009246775, + -0.0075082285, + -0.024352388, + -0.009960025, + -0.0018420315, + -0.0107751675, + 0.020493196, + 0.011908726, + -0.00656572, + -0.008367949, + 0.014838144, + -0.00010696758, + 0.0047475696, + -0.0058874954, + -0.007177077, + 0.00077573885, + 0.0055436073, + 0.024849117, + 0.0377513, + 0.012125248, + 0.0035057506, + -0.019690791, + -0.014812672, + 0.004422786, + 0.03530587, + -0.02483638, + 0.009934552, + 0.0023323908, + -0.019372376, + 0.01650664, + -0.022900416, + 0.005094642, + 0.016124541, + 0.025689732, + 0.007928536, + -0.009781713, + 0.011647625, + 0.0118705155, + -0.00042627825, + -0.018608179, + -0.008132322, + 0.0022050247, + -0.01812419, + -0.00560729, + 0.016723162, + -0.020684246, + 0.004085266, + -0.019945523, + 0.004209448, + -0.018837439, + 0.0016064043, + -0.024339652, + -0.009278617, + -0.035433233, + 0.017309045, + 0.01710526, + -0.0052665863, + 0.003913322, + -0.03168867, + 0.002923051, + 0.00006199144, + -0.012239877, + 0.0066230344, + -0.022161692, + -0.026313826, + 0.004152133, + -0.0035280394, + -0.026084566, + 0.0030838505, + 0.015385819, + 0.0149909835, + 0.02479817, + 0.22925888, + 0.016570322, + -0.011125424, + 0.037598457, + 0.0056327633, + 0.030669745, + 0.02281126, + -0.017869456, + 0.03324254, + 0.029370612, + -0.016761372, + -0.0040088464, + -0.007743856, + 0.0025520972, + 0.00500867, + -0.02107908, + -0.033599164, + 0.0008788257, + -0.022441898, + -0.014112158, + 0.014379627, + -0.005075537, + 0.015131086, + 0.006966923, + 0.029345138, + 0.009807185, + -0.010826115, + 0.010068286, + 0.021321077, + 0.009348668, + -0.005432162, + -0.014838144, + 0.0032175847, + -0.011450208, + 0.0037955083, + -0.004715728, + -0.0015642142, + 0.008565367, + 0.020773403, + 0.030032914, + 0.012615607, + 0.01121458, + -0.03380295, + -0.014163105, + -0.0035949068, + 0.006552983, + -0.026313826, + -0.011055373, + 0.014494256, + 0.018149663, + -0.008164164, + 0.004339998, + 0.033268012, + 0.031077316, + -0.0078011705, + 0.01789493, + 0.028046004, + -0.006339645, + 0.005330269, + -0.010342123, + -0.019741738, + 0.019894578, + -0.025384054, + -0.006043519, + 0.0163538, + -0.011061741, + -0.022365479, + -0.0030647456, + 0.008839204, + -0.03135752, + -0.0004107555, + 0.0059734676, + 0.0074827555, + 0.013093229, + -0.016965158, + -0.017041577, + 0.008800994, + -0.003537592, + 0.022110745, + -0.0020728824, + -0.0086672595, + -0.005053248, + -0.010310282, + 0.0037541143, + -0.002800461, + -0.019015752, + -0.0008318595, + 0.006591193, + 0.026543085, + -0.015347608, + 0.0029262349, + -0.004098003, + 0.0010929599, + 0.00240085, + 0.018799229, + 0.027842218, + -0.0025314002, + 0.0141248945, + -0.020773403, + 0.016417483, + -0.027001603, + -0.035840806, + 0.007890327, + -0.0142395245, + -0.02314241, + 0.020085625, + 0.004002478, + 0.0007980279, + 0.026594032, + -0.0006599153, + -0.0058652065, + -0.015958967, + 0.0076101213, + -0.006801347, + 0.016723162, + -0.016786845, + 0.017576514, + -0.02265842, + -0.007966747, + 0.00307589, + -0.0031841511, + -0.012819393, + 0.00075942004, + -0.011392893, + 0.012348139, + -0.016901474, + -0.00825332, + 0.015653288, + 0.00043543268, + -0.035968173, + 0.03525492, + 0.0036745104, + 0.032784022, + -0.010635065, + -0.014698042, + 0.012539187, + -0.007807539, + 0.0024088104, + 0.010647802, + -0.014659832, + -0.0036331166, + -0.005285691, + 0.010590487, + 0.013246069, + -0.0042922357, + 0.0035885384, + -0.0022925888, + -0.01797135, + -0.0096479785, + -0.01196604, + -0.018862912, + -0.0039674523, + -0.005995757, + -0.01650664, + 0.017296309, + -0.0021827356, + -0.015767917, + -0.010450385, + 0.004967276, + 0.030924477, + -0.012551924, + 0.0032382817, + 0.020811612, + -0.0009998234, + 0.012456399, + -0.00065752724, + -0.16200961, + 0.016532114, + 0.006884135, + -0.011475681, + -0.019474268, + 0.0021365655, + 0.021881487, + 0.013220596, + -0.019117644, + 0.024161339, + -0.0014567492, + 0.017232627, + -0.053493742, + -0.017551042, + -0.0035598811, + 0.017041577, + -0.008450737, + 0.005846102, + 0.02123192, + 0.002357864, + 0.0051583247, + -0.02389387, + 0.0076929093, + 0.013793743, + 0.016684953, + -0.00551495, + -0.017156206, + 0.029880075, + 0.0033147014, + -0.015373082, + 0.0026364771, + 0.008578103, + 0.014061212, + 0.0056104744, + 0.022314532, + -0.0059893886, + 0.004467364, + 0.011921462, + 0.012087038, + -0.007597385, + -0.0013198307, + 0.022785787, + 0.020276675, + 0.01812419, + -0.013933846, + 0.027128968, + 0.02479817, + 0.02603362, + 0.0043845763, + -0.0039833733, + 0.019270483, + -0.0288102, + -0.020862559, + -0.011730413, + 0.021333814, + 0.019932786, + 0.02456891, + 0.015041931, + -0.007196182, + 0.024059447, + 0.011291, + -0.050386008, + -0.006511589, + 0.013831953, + 0.0026603583, + -0.00581426, + 0.00064717873, + 0.008743679, + -0.020289412, + 0.006871398, + -0.015360345, + -0.011392893, + -0.009597031, + -0.012558293, + 0.0024979666, + 0.01099169, + -0.022454634, + 0.00463294, + -0.010641433, + -0.005499029, + 0.014354154, + 0.02888662, + -0.008157795, + -0.009654347, + -0.015882546, + 0.009660714, + -0.00050468795, + 0.019359639, + -0.02265842, + -0.004607467, + 0.011252791, + -0.037904136, + -0.0048112525, + -0.040324092, + 0.010666907, + 0.014596149, + -0.008508052, + 0.0064096963, + 0.015029194, + 0.0066867177, + -0.001157439, + -0.003137981, + -0.015895283, + 0.0073999674, + 0.02142297, + 0.014264997, + -0.0008254912, + 0.013679113, + 0.03713994, + 0.00041632776, + -0.013233332, + 0.03357369, + -0.00223209, + 0.021601282, + 0.0063491976, + -0.009749871, + 0.019856367, + -0.02262021, + 0.0034643565, + 0.008673628, + 0.05721283, + -0.00889015, + 0.00012497793, + 0.005142404, + -0.012698395, + -0.016914211, + -0.10072107, + -0.01590802, + 0.016379274, + 0.029064933, + 0.00994092, + 0.0144687835, + 0.00757828, + 0.01976721, + -0.0075082285, + 0.026135514, + -0.004365471, + -0.015806127, + -0.007221655, + 0.00031722107, + -0.008240583, + -0.009246775, + 0.004884488, + -0.015360345, + -0.029141352, + 0.010004603, + -0.0050882734, + 0.009444192, + 0.008266057, + -0.007992219, + -0.016124541, + -0.0060658082, + -0.031204682, + 0.014532466, + 0.0055340547, + -0.017054314, + 0.025052901, + -0.018748282, + 0.010978953, + 0.00044936335, + -0.019856367, + 0.00036975957, + -0.012386348, + 0.0026794632, + 0.009711661, + -0.03976368, + -0.0019073066, + -0.008603577, + 0.011864147, + -0.01361543, + -0.0015275965, + 0.010004603, + -0.021244656, + 0.0015435173, + 0.0072980747, + -0.022467371, + -0.007138867, + 0.02532037, + -0.020964451, + -0.009597031, + 0.030185753, + -0.028861146, + 0.013207859, + 0.013010442, + -0.02344809, + 0.020454988, + -0.0066867177, + 0.019270483, + -0.006871398, + 0.014965511, + -0.0127684465, + -0.024874588, + -0.02520574, + -0.01762746, + 0.02626288, + -0.040120304, + -0.0050628004, + 0.0024295074, + -0.025193004, + 0.022314532, + -0.021626756, + 0.012774815, + -0.02753654, + -0.011972409, + 0.0057378407, + -0.010807009, + -0.023129674, + -0.01001734, + 0.0013835137, + -0.0015435173, + -0.003157086, + 0.029829128, + -0.011647625, + -0.0032175847, + 0.030848056, + 0.0021811435, + 0.012456399, + 0.031179208, + 0.011615784, + -0.023078728, + -0.018773755, + 0.017474622, + 0.00039145158, + 0.009329563, + 0.016812319, + -0.0068777665, + -0.016035385, + -0.01211888, + -0.043839395, + 0.014264997, + -0.004741201, + -0.015818864, + -0.016328327, + 0.0032733073, + -0.009329563, + 0.01136742, + -0.0099090785, + -0.010265703, + -0.008648154, + -0.0034420674, + -0.0051742457, + -0.010061918, + -0.013207859, + 0.0057155513, + 0.013322488, + 0.0027654353, + 0.007890327, + -0.012430926, + -0.015602341, + -0.004569257, + 0.0029739973, + 0.01797135, + -0.03181604, + 0.007419072, + -0.012443663, + -0.03604459, + -0.026797816, + -0.004505574, + 0.016977895, + -0.027256334, + 0.01234177, + 0.034159575, + -0.010042813, + -0.024517965, + -0.025040165, + 0.026390245, + 0.014494256, + -0.025676996, + -0.02959987, + -0.037904136, + 0.013411645, + -0.029880075, + -0.0046902546, + 0.031382993, + -0.021715911, + -0.0076419627, + 0.014812672, + 0.015602341, + 0.0010404214, + 0.022518318, + 0.0024565726, + -0.0116094155, + -0.0063269082, + -0.004219, + 0.022900416, + 0.009660714, + 0.011915094, + -0.023473563, + -0.000778923, + -0.009437825, + 0.0062441207, + 0.0038082448, + 0.008960201, + 0.0027940928, + -0.0007916596, + -0.012373611, + -0.016837792, + -0.0183025, + -0.009208566, + -0.014137631, + 0.04816984, + 0.0148763545, + 0.024250496, + 0.0039037694, + -0.0002296569, + -0.008017693, + -0.014608886, + 0.016188225, + 0.006712191, + -0.00922767, + -0.01928322, + 0.004524679, + 0.03056785, + 0.025676996, + -0.039075904, + -0.0024868222, + 0.003196888, + 0.0077756974, + -0.01665948, + 0.006884135, + -0.008762784, + 0.005368479, + 0.014621622, + 0.0051901666, + 0.005686894, + -0.008380686, + 0.0065466147, + 0.02111729, + 0.010768799, + -0.009240407, + 0.006661244, + -0.025906254, + -0.022365479, + -0.004082082, + -0.017512832, + -0.019525215, + -0.00656572, + 0.00855263, + 0.013207859, + -0.01020202, + -0.0063460134, + 0.018022295, + 0.00032458443, + -0.006043519, + -0.028861146, + -0.016264644, + -0.010870692, + 0.014506993, + 0.005368479, + 0.008788257, + 0.013080494, + -0.003836902, + 0.01594623, + 0.026797816, + 0.02817337, + -0.03199435, + 0.017270837, + 0.01665948, + 0.019487005, + -0.0043941285, + -0.0012577397, + -0.004359103, + 0.0006400144, + -0.016634006, + -0.024874588, + 0.026466664, + 0.007635595, + 0.05548065, + -0.018620916, + -0.039789155, + 0.019346902, + -0.021728648, + 0.0017146654, + 0.025052901, + 0.011080846, + -0.0183025, + -0.009667083, + 0.006107202, + 0.0177803, + 0.026415719, + -0.011991514, + -0.021040872, + -0.00081156055, + -0.024772696, + 0.015029194, + -0.03054238, + 0.0063491976, + 0.043380875, + -0.0006973291, + 0.004575625, + 0.009921815, + -0.021550335, + -0.007100657, + 0.020111099, + 0.01785672, + 0.004441891, + -0.0022161691, + 0.02314241, + -0.02281126, + -0.027714852, + -0.011762255, + 0.0060976497, + -0.03548418, + -0.0047730426, + -0.030058388, + -0.009068463, + 0.0057569453, + 0.008024061, + 0.039330635, + -0.009972761, + -0.0046265717, + 0.013819216, + -0.013093229, + -0.011341946, + 0.007011501, + 0.00095683744 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.016263332, + -0.011116868, + 0.0051686466, + -0.022411201, + 0.0032006947, + 0.018037975, + -0.021194303, + -0.014640802, + 0.013221087, + -0.012967567, + 0.0053049135, + 0.007897159, + -0.0077323713, + 0.017442202, + -0.023387253, + -0.0105844755, + 0.039143544, + -0.00080175814, + 0.025821049, + -0.018697128, + -0.025035135, + 0.0017841496, + -0.015540798, + 0.005637659, + -0.021701343, + -0.004151396, + 0.006705614, + -0.01524925, + 0.0028774561, + 0.020053461, + 0.014983053, + -0.021168951, + 0.014336577, + -0.026188655, + -0.017911214, + 0.012644328, + 0.016276008, + 0.006170052, + 0.014615449, + -0.03186751, + 0.00210105, + 0.006106672, + -0.002021825, + -0.012086583, + -0.012618977, + 0.016402768, + 0.027937945, + -0.00012012508, + -0.01505911, + 0.016630936, + -0.00044366065, + 0.01375348, + -0.022449229, + -0.016732344, + -0.00623977, + -0.030219628, + 0.0074661747, + 0.018430931, + -0.01066687, + -0.017683046, + -0.011161234, + -0.007840117, + 0.0013254362, + -0.003059674, + 0.011757007, + -0.004591888, + -0.005472871, + 0.0044619585, + 0.011959824, + 0.0017065089, + 0.020687262, + 0.023045002, + 0.009386592, + 0.017581638, + 0.024718236, + 0.015097138, + -0.019749237, + 0.014108408, + -0.005574279, + -0.008448566, + 0.0031373145, + -0.013208412, + -0.019267548, + -0.011699965, + 0.016859105, + 0.000040652387, + -0.015578827, + -0.00031412757, + -0.030143572, + -0.02626471, + -0.013537988, + 0.036633693, + 0.033008352, + -0.0055932933, + 0.0029297448, + 0.01674502, + 0.014983053, + 0.022436552, + 0.02661964, + -0.03635482, + 0.0021311557, + 0.007897159, + -0.03245061, + 0.004154565, + -0.023856267, + -0.023437958, + 0.0073077246, + 0.0016138155, + 0.026467526, + -0.027735129, + -0.024477392, + 0.030042164, + 0.036177356, + -0.023881618, + -0.0060686436, + -0.016909808, + 0.010071097, + -0.020509798, + -0.03513792, + 0.0006967849, + 0.016973188, + 0.04053791, + 0.02040839, + -0.014273196, + 0.036405526, + -0.004059495, + -0.011490811, + -0.024794292, + -0.007485189, + 0.01859572, + -0.002457563, + 0.01562953, + 0.025783021, + 0.024363307, + -0.016098544, + 0.008220398, + -0.009532366, + 0.019242195, + 0.0005549719, + -0.023323873, + 0.015743615, + 0.027861888, + -0.014095732, + -0.011262642, + -0.0071429363, + 0.028292874, + 0.015680235, + -0.00055734866, + -0.02165064, + -0.007630963, + 0.004341536, + -0.015705587, + 0.0009808069, + 0.0013555418, + 0.009728844, + 0.01356334, + -0.013550663, + 0.0059101935, + -0.034504123, + -0.009285184, + -0.021092895, + -0.010514758, + 0.023881618, + -0.0015781643, + 0.023564719, + 0.025225276, + -0.00031947528, + 0.0033496378, + -0.012397146, + -0.009513352, + -0.009538704, + 0.040106922, + -0.017201357, + 0.02270275, + -0.012809116, + 0.018443607, + 0.0022056273, + -0.008632368, + -0.017961917, + -0.00391689, + -0.021067543, + -0.0064742765, + 0.009133072, + -0.0009990287, + 0.015337982, + -0.0078084273, + 0.016073192, + -0.0053619556, + 0.015870376, + 0.0023308028, + 0.018367551, + 0.031715397, + -0.0136901, + -0.03719144, + -0.6859247, + -0.04444212, + 0.0059323767, + -0.0013032531, + -0.007504203, + 0.027075976, + 0.004899281, + 0.022981621, + 0.0053524487, + -0.01706192, + 0.008093637, + 0.0020440079, + 0.020002756, + -0.006182728, + 0.009785886, + -0.025073165, + -0.016897133, + 0.002728513, + 0.00678167, + -0.0011384649, + 0.00620808, + 0.015971784, + -0.020129517, + -0.001593217, + 0.028318224, + 0.004217945, + 0.013081651, + 0.001050525, + -0.0012866159, + 0.018773183, + -0.008968283, + 0.014970378, + -0.0072316686, + -0.008651382, + 0.04641958, + 0.0064489245, + -0.011249966, + 0.011230952, + 0.0072126547, + 0.023171762, + -0.010102787, + -0.004290832, + 0.006173221, + -0.033008352, + -0.020104164, + 0.008049272, + 0.026797103, + -0.010007717, + 0.031943567, + 0.0013864395, + 0.026416823, + -0.023944998, + 0.010337293, + 0.0014894322, + 0.017670369, + 0.00830913, + 0.026518231, + -0.003527102, + -0.015287278, + -0.0010933066, + -0.006807022, + 0.0019536912, + -0.016390093, + 0.0018839733, + -0.02266472, + 0.0027776326, + -0.031842157, + -0.013094327, + -0.006274629, + -0.0018095017, + -0.0069591342, + 0.010064758, + -0.018570367, + 0.028140761, + 0.017023893, + 0.0023957675, + 0.022525284, + -0.007624625, + 0.0021248176, + 0.0050894213, + 0.009462648, + -0.016694317, + -0.029230898, + -0.012720385, + 0.028014, + -0.02352669, + -0.026214005, + -0.01611122, + 0.02314641, + 0.00037394254, + 0.025554853, + 0.003441539, + -0.022892889, + -0.0028552732, + -0.008524623, + 0.037292846, + -0.008860537, + 0.0057675885, + 0.017949242, + 0.0005391269, + 0.009735182, + -0.02594781, + -0.006730966, + -0.010799968, + 0.030675964, + -0.0024781616, + -0.016884457, + 0.031994272, + 0.0044207615, + -0.016377416, + 0.030599909, + -0.015021082, + -0.013804184, + 0.005672518, + 0.01394362, + -0.029535122, + 0.056535043, + 0.011940809, + 0.014285873, + 0.00025035135, + 0.015946431, + 0.009823915, + 0.001072708, + 0.00046505142, + -0.0020677755, + 0.0016922485, + -0.016580231, + -0.022322468, + -0.028064705, + 0.002088374, + -0.001561527, + -0.007979553, + 0.005663011, + 0.0022769298, + -0.0026714709, + -0.00025550099, + 0.0106351795, + -0.015046434, + 0.022677397, + -0.014349253, + -0.018785859, + -0.004103861, + -0.023298522, + 0.0012897849, + -0.008423214, + -0.012815455, + -0.03569567, + -0.013423904, + -0.015109814, + 0.021257684, + -0.028039353, + -0.008683072, + -0.031106949, + 0.019812617, + 0.0039961147, + -0.008011243, + -0.02963653, + 0.010286589, + -0.012745736, + 0.016884457, + 0.010933066, + 0.0043478743, + -0.0044080853, + -0.002113726, + -0.013512636, + -0.02333655, + -0.0007062919, + 0.030143572, + -0.007561245, + -0.023729507, + -0.011021798, + -0.0007138183, + -0.0055362512, + -0.015211222, + -0.016542204, + -0.009323211, + -0.00014230811, + -0.027101327, + 0.009088705, + -0.017201357, + 0.007916174, + 0.019787265, + 0.008252088, + -0.019622477, + 0.051109705, + 0.0011384649, + 0.02371683, + 0.018152058, + -0.010876024, + 0.012676018, + -0.018760508, + 0.0008025504, + 0.000495157, + -0.012815455, + 0.00830913, + 0.0017683046, + 0.0049214642, + 0.01133236, + 0.010394335, + -0.003053336, + 0.011750669, + -0.011104192, + 0.021853456, + -0.01486897, + 0.009906309, + -0.032171734, + 0.022867538, + -0.010552785, + -0.001085384, + 0.042033676, + 0.0058721653, + -0.02333655, + -0.0053619556, + -0.005723222, + 0.015426714, + 0.0020202405, + -0.01244785, + 0.01133236, + -0.011522501, + -0.007846455, + -0.0004381149, + 0.011826725, + 0.023171762, + -0.0050672386, + 0.00620808, + 0.0036031583, + 0.041729454, + 0.01362672, + -0.023032326, + -0.009861942, + -0.02021825, + -0.0095577175, + -0.019914025, + 0.020332333, + -0.033794265, + -0.005672518, + 0.0093041975, + -0.03845904, + 0.01581967, + 0.015223898, + 0.0012129365, + 0.01668164, + 0.030828077, + -0.003129392, + 0.011915457, + 0.0005957729, + 0.018798536, + 0.0096908165, + -0.019571772, + 0.012359118, + -0.017847834, + -0.0010933066, + -0.0127393985, + 0.017074596, + 0.02626471, + 0.00079502404, + 0.04119706, + 0.0047788587, + 0.028799914, + 0.02028163, + -0.015730938, + -0.019191492, + 0.012346442, + -0.0023292184, + 0.009025325, + -0.005545758, + 0.0029123153, + -0.0059513906, + 0.010267575, + -0.017391497, + -0.019406984, + 0.009716168, + 0.022411201, + -0.020877402, + 0.014133761, + -0.012910524, + -0.0036031583, + 0.00065796456, + 0.012397146, + 0.01786051, + -0.008239412, + -0.03582243, + 0.013550663, + -0.0028806252, + 0.0019980574, + -0.025529502, + -0.031132301, + 0.017999945, + 0.009139409, + 0.014045028, + 0.009063353, + 0.013030947, + 0.024680208, + 0.00167165, + 0.018545015, + -0.026721047, + 0.0003466099, + 0.01092039, + 0.014133761, + 0.004772521, + -0.0032609056, + -0.01903938, + -0.030168924, + -0.011592219, + 0.0088161705, + 0.0104323635, + -0.012555596, + 0.006192235, + -0.014336577, + -0.018354874, + -0.007821104, + 0.0021470005, + -0.002665133, + -0.01661826, + -0.009988703, + -0.007890821, + -0.022905566, + -0.009278845, + 0.03250131, + 0.004097523, + 0.0044746343, + -0.014678829, + -0.015946431, + -0.00020737173, + 0.077780046, + 0.013778832, + 0.006290474, + 0.009906309, + 0.009228141, + -0.0168084, + -0.023437958, + 0.0071302606, + -0.009798562, + 0.0025859077, + 0.010400673, + -0.011807711, + 0.024566123, + 0.0019536912, + -0.009411944, + -0.0030295684, + 0.014336577, + 0.014640802, + 0.042642128, + -0.019837968, + 0.0023830915, + 0.020205574, + -0.011630246, + 0.0009950674, + 0.005773926, + 0.00136901, + 0.02222106, + 0.0050704074, + 0.017277414, + -0.0025336193, + 0.005399984, + 0.017315442, + -0.010926728, + -0.013652071, + -0.010121801, + -0.0019489378, + -0.0026635483, + 0.0022183033, + -0.003132561, + -0.014425309, + 0.034326658, + 0.0098049, + 0.0094563095, + -0.008803495, + -0.009380254, + 0.023108382, + -0.006223925, + 0.018481635, + -0.018849239, + -0.01604784, + 0.027988648, + -0.006946458, + -0.0061098407, + -0.0073584286, + 0.00681336, + 0.002444887, + -0.006246108, + -0.014780237, + -0.017467553, + -0.01117391, + 0.012904187, + -0.0006706406, + 0.0015290447, + -0.009602084, + -0.007745047, + -0.004759845, + 0.0059577287, + -0.0039073825, + -0.016440796, + 0.003432032, + 0.00023450634, + -0.012682357, + -0.020243602, + -0.00028778522, + 0.0252126, + 0.016542204, + 0.009430958, + -0.01101546, + -0.006296812, + 0.038991433, + -0.00021093687, + 0.006604206, + -0.003485905, + -0.00040246357, + -0.004782028, + 0.0013484114, + 0.039397065, + -0.02165064, + -0.014425309, + 0.0026239357, + 0.030980188, + 0.0003337358, + 0.01241616, + -0.016542204, + -0.016516851, + -0.011452783, + 0.017594313, + 0.010121801, + -0.018253466, + -0.0013864395, + 0.0071682883, + -0.024122464, + -0.014577421, + -0.0074154707, + 0.0072887107, + 0.015908403, + 0.03501116, + 0.0106351795, + -0.023057677, + 0.018278819, + 0.014704181, + -0.012035879, + 0.0002236129, + -0.0032355536, + 0.0005827007, + 0.0053429417, + -0.0012176901, + 0.0091520855, + 0.003447877, + -0.028926674, + 0.0077577233, + -0.048270278, + 0.03087878, + 0.004782028, + -0.0066929376, + 0.0028774561, + 0.02862245, + -0.012549258, + 0.006173221, + 0.006711952, + -0.0044904794, + 0.023323873, + -0.012010528, + -0.015743615, + -0.04099424, + -0.029940756, + 0.035923835, + 0.0057929405, + -0.018963324, + -0.008131666, + 0.00951969, + 0.011858415, + 0.011478134, + 0.001041018, + -0.033768915, + -0.019685857, + -0.0022151342, + 0.009018987, + -0.0051718154, + 0.011478134, + -0.0010521095, + 0.0021248176, + -0.021599935, + 0.0098049, + 0.009373915, + 0.00046109018, + -0.010571799, + -0.019140787, + 0.02251261, + 0.008004906, + 0.014792914, + -0.006040123, + 0.009247156, + 0.0070668804, + -0.0071999785, + 0.000049416667, + -0.0087654665, + -0.0043542124, + -0.02725344, + 0.018380227, + 0.027633721, + -0.0038630166, + 0.028267521, + -0.005384139, + 0.016326712, + 0.013449255, + 0.0058087856, + -0.0025462953, + -0.023450634, + -0.026112597, + -0.0020741136, + 0.00993166, + -0.014399957, + -0.00088652904, + 0.0007621456, + -0.010077435, + 0.01735347, + 0.011864753, + -0.0065408256, + 0.0029123153, + 0.036735103, + -0.0037489324, + 0.031461876, + -0.0017477061, + 0.01136405, + -0.02215768, + -0.017340792, + -0.00044643352, + 0.007472513, + 0.002795062, + 0.013525312, + 0.0019109098, + -0.0011170742, + -0.024071759, + 0.0106351795, + 0.009665464, + 0.021004163, + 0.0052510407, + -0.008061947, + -0.021295711, + -0.01786051, + -0.037901293, + -0.028394282, + -0.025922457, + 0.00240369, + 0.0049119573, + -0.02689851, + 0.022271764, + -0.011522501, + -0.02234782, + 0.0030501669, + 0.011858415, + 0.030219628, + -0.0072570206, + 0.017163329, + 0.013271791, + -0.0058848416, + -0.0227281, + 0.0023957675, + -0.014906998, + -0.00983659, + 0.0192929, + 0.010204195, + -0.010407011, + 0.018950647, + 0.008638707, + 0.017264737, + 0.038028054, + -0.0035999892, + -0.009855605, + 0.0004805003, + 0.008974621, + -0.023957675, + 0.004918295, + -0.01104715, + 0.014767561, + -0.018722478, + -0.007516879, + 0.007973216, + -0.005586955, + -0.01741685, + 0.011852077, + -0.049740694, + 0.016199952, + 0.012783765, + 0.0006920314, + 0.006280967, + -0.014146437, + -0.021308387, + -0.017911214, + -0.010660532, + 0.026568934, + -0.0026223513, + 0.015895726, + 0.015857698, + -0.0067499797, + -0.018430931, + -0.0053936457, + 0.008670396, + 0.0267464, + -0.0046362537, + -0.0044841417, + -0.014514041, + 0.026416823, + 0.048828024, + -0.021004163, + -0.005688363, + 0.0052035055, + -0.015933756, + -0.001677988, + 0.016022487, + 0.006927444, + -0.016947836, + 0.013360524, + -0.023615422, + 0.00047970808, + -0.03186751, + -0.0001870703, + 0.00059379224, + -0.010007717, + -0.0029566812, + -0.0021691837, + 0.01910276, + -0.000068727786, + 0.0076816673, + -0.012536583, + 0.029966107, + 0.00012359118, + -0.015135166, + 0.019026704, + -0.003444708, + 0.021688668, + 0.006274629, + 0.014235169, + 0.0059450525, + -0.019723885, + 0.03037174, + -0.012714046, + -0.026847808, + -0.014577421, + 0.0057929405, + 0.000214502, + -0.0023054508, + -0.012264048, + 0.005000689, + -0.0012533413, + 0.009830252, + -0.012276724, + -0.006217587, + 0.0016193613, + -0.015680235, + 0.011383064, + 0.020028109, + -0.021916837, + -0.010857009, + 0.013335171, + -0.016352063, + -0.0043954095, + -0.03501116, + -0.00811899, + -0.021029515, + 0.009076029, + 0.020040786, + -0.010799968, + -0.004854915, + -0.019064732, + -0.0065725157, + -0.0015036927, + -0.007878145, + 0.01846896, + -0.0022943593, + -0.0049689994, + -0.018342199, + 0.021321064, + -0.018088678, + 0.0058689965, + -0.0026984075, + -0.0065535014, + -0.024971757, + 0.0022373172, + -0.00010299265, + -0.018519662, + -0.011053488, + -0.047028027, + -0.018861916, + -0.0034922431, + -0.015921079, + -0.0016764035, + -0.0016478824, + 0.004930971, + 0.015553474, + -0.0037521014, + -0.012422498, + 0.018392902, + 0.009171099, + 0.0064774454, + -0.0304985, + -0.015642207, + -0.0006349893, + -0.012143626, + 0.0050672386, + 0.012720385, + 0.012593624, + -0.008942931, + 0.0053778007, + -0.0126379905, + 0.0024021056, + -0.018164735, + -0.017467553, + -0.0060527986, + 0.008683072, + 0.012473202, + 0.027811185, + 0.009481662, + -0.0026793934, + -0.015553474, + -0.008974621, + 0.002391014, + 0.033084407, + -0.013005595, + 0.0050735762, + 0.0081760315, + -0.019774588, + 0.004132382, + -0.02333655, + 0.007605611, + -0.004227452, + 0.016060516, + 0.011649261, + -0.008144341, + 0.01388024, + 0.018823888, + -0.007111246, + -0.017036568, + 0.0029883713, + -0.000996652, + -0.025326684, + 0.0013801015, + 0.009367578, + -0.01505911, + 0.0013072144, + -0.019635152, + 0.004160903, + -0.030929485, + 0.002741189, + -0.009488, + -0.016035164, + -0.038864672, + 0.034453418, + 0.022322468, + -0.015325306, + -0.004141889, + -0.037850592, + 0.0045063244, + 0.0018633747, + -0.012035879, + -0.0023925984, + -0.03174075, + -0.022056272, + -0.0022911904, + -0.0021105572, + -0.027405553, + -0.0020154868, + 0.015490094, + 0.009392929, + 0.023387253, + 0.23749788, + 0.010717574, + -0.0033623138, + 0.028850619, + 0.0014862631, + 0.022550637, + 0.023095705, + -0.007694343, + 0.02571964, + 0.028521042, + -0.011509825, + 0.00630315, + 0.00074630056, + 0.000637366, + 0.003451046, + -0.014957702, + -0.033261873, + -0.0014197141, + -0.013385875, + -0.019483041, + 0.011148558, + -0.0103816595, + 0.01581967, + 0.0029408364, + 0.029028082, + 0.015464743, + -0.013297143, + 0.008207722, + 0.026340766, + 0.018253466, + -0.0087654665, + -0.011909119, + -0.0017207694, + -0.014133761, + -0.0042211143, + -0.0033876658, + -0.011826725, + 0.0014870554, + 0.02091543, + 0.031690046, + 0.018836563, + 0.005615476, + -0.024604151, + -0.009164762, + 0.0070161764, + 0.005897518, + -0.018988676, + -0.006261953, + 0.020699939, + 0.015135166, + -0.023045002, + -0.00986828, + 0.027050624, + 0.023552042, + -0.0029186532, + 0.02190416, + 0.019457689, + -0.008568988, + 0.01979994, + -0.0051718154, + -0.015806995, + 0.019330928, + -0.01687178, + 0.011256305, + 0.006173221, + -0.0033591448, + -0.0126379905, + -0.0028885477, + 0.011528838, + -0.015236574, + 0.022626692, + 0.013208412, + 0.009697154, + 0.0073837806, + -0.009684478, + -0.0059830807, + 0.025605557, + -0.0050735762, + 0.015452066, + -0.007447161, + -0.014463337, + 0.0018253466, + -0.011693627, + 0.0052922377, + -0.0035366092, + -0.018811211, + 0.0017999946, + 0.0046869577, + 0.025821049, + -0.007111246, + 0.0010639933, + -0.0053207586, + 0.00620808, + 0.00058468134, + 0.020370362, + 0.025808373, + -0.009874619, + 0.0044239303, + -0.015566151, + 0.011421093, + -0.034808345, + -0.03919425, + 0.0023102043, + -0.017391497, + -0.017429525, + 0.010971094, + -0.010090111, + 0.019064732, + 0.034428068, + 0.0022357327, + -0.0044366065, + -0.0071999785, + 0.015895726, + -0.008607017, + 0.015857698, + -0.00096575415, + 0.014919674, + -0.011776021, + -0.015135166, + -0.012035879, + -0.01107884, + -0.023792887, + -0.0065218112, + 0.0058024474, + -0.0026080909, + -0.011066164, + -0.008271102, + 0.01362672, + 0.0022769298, + -0.044873103, + 0.034275953, + -0.004899281, + 0.029332306, + -0.0053017447, + -0.011814049, + -0.0025050982, + -0.004877098, + 0.0029297448, + 0.013360524, + -0.0058468133, + 0.0037489324, + -0.009950674, + 0.01735347, + -0.0003719619, + -0.005989419, + -0.0052256887, + 0.0017603821, + -0.024274575, + -0.02397035, + -0.032298494, + -0.012073907, + -0.015223898, + 0.0013761403, + -0.014970378, + 0.005384139, + -0.008537298, + -0.011167572, + -0.004173579, + 0.00951969, + 0.03272948, + -0.018380227, + 0.001324644, + 0.0014363513, + 0.00072530593, + 0.007605611, + 0.0030469978, + -0.16154318, + 0.014032353, + 0.010540109, + -0.008410539, + -0.01706192, + 0.023488661, + 0.01964783, + 0.020814022, + -0.010590813, + 0.02776048, + 0.005688363, + 0.02078867, + -0.059678696, + -0.015515447, + -0.007371105, + 0.011478134, + -0.009133072, + -0.009925323, + 0.01964783, + 0.006705614, + -0.00033017067, + -0.02154923, + 0.016073192, + 0.013715452, + 0.010020393, + 0.004582381, + -0.022132328, + 0.03209568, + -0.0030628429, + -0.013335171, + 0.0031531595, + -0.0029883713, + 0.0056344904, + 0.014349253, + 0.024464715, + 0.006255615, + -0.004690127, + -0.00046505142, + -0.00716195, + -0.003992946, + -0.0027364355, + 0.020991486, + 0.020167544, + 0.02639147, + -0.01225771, + 0.024946405, + 0.02378021, + 0.012745736, + -0.0059577287, + -0.01562953, + 0.017049246, + -0.03719144, + -0.009988703, + -0.011642923, + 0.0027522806, + 0.014514041, + 0.021130923, + 0.011687289, + -0.0013808938, + 0.012492216, + 0.01117391, + -0.041298468, + -0.0072253305, + 0.008068286, + -0.004724986, + -0.012327428, + 0.0046964646, + 0.004186255, + -0.02097881, + -0.0014862631, + -0.014450661, + -0.013892916, + 0.0036982284, + -0.009310535, + 0.0019299238, + 0.013208412, + -0.014704181, + -0.004566536, + -0.016922485, + -0.018583043, + 0.0072887107, + 0.032653425, + -0.0066358955, + 0.0009895217, + -0.00961476, + 0.010413349, + 0.004785197, + 0.011782359, + -0.029560475, + -0.014222492, + 0.025643585, + -0.036506932, + -0.0019220012, + -0.037749182, + -0.0021470005, + 0.0097415205, + 0.0017271076, + -0.0065218112, + 0.01687178, + 0.007345753, + 0.00094436336, + -0.00014399165, + -0.025225276, + 0.011161234, + 0.030422444, + 0.0126379905, + -0.013512636, + 0.009247156, + 0.018646423, + -0.008429552, + -0.014260521, + 0.019597124, + -0.00878448, + 0.011630246, + 0.020066136, + -0.0070858942, + 0.010311941, + -0.02725344, + 0.02091543, + 0.0056947013, + 0.050577313, + -0.013208412, + -0.021866132, + 0.021802751, + -0.007700681, + -0.018012622, + -0.09755464, + -0.009190113, + 0.016288683, + 0.019837968, + 0.0056947013, + 0.027025271, + 0.0050387173, + 0.024794292, + -0.008860537, + 0.021409795, + -0.0088668745, + -0.027228087, + -0.021245006, + -0.0029772797, + 0.011839401, + -0.014007, + 0.007700681, + -0.024616828, + -0.054151952, + 0.0042052693, + 0.0072316686, + 0.004341536, + -0.004889774, + -0.014425309, + -0.015312631, + -0.0066739237, + -0.03498581, + 0.014666153, + 0.0038725235, + -0.0039707627, + 0.022652045, + -0.017252062, + 0.0126379905, + -0.010128139, + -0.008163356, + 0.000072986135, + -0.009038001, + -0.003368652, + 0.0095577175, + -0.03247596, + -0.010780954, + -0.0007534308, + 0.014539393, + -0.023057677, + 0.0022135498, + 0.008239412, + -0.011281656, + 0.010882362, + -0.004851746, + -0.033312578, + -0.004259142, + 0.023412606, + -0.021232331, + -0.011858415, + 0.038281575, + -0.021637963, + 0.011630246, + 0.010476729, + -0.029509772, + 0.015528123, + 0.010508419, + 0.00716195, + 0.0038344956, + 0.014108408, + -0.014830941, + -0.019698532, + -0.026188655, + -0.009285184, + 0.018481635, + -0.033135112, + -0.00480738, + 0.020319657, + -0.0140703805, + 0.006730966, + -0.018963324, + 0.003403511, + -0.018152058, + -0.010660532, + 0.008847861, + -0.017556285, + -0.029205546, + -0.016656289, + -0.011351375, + 0.0041799173, + -0.0088161705, + 0.029180195, + -0.01394362, + -0.0126063, + 0.03830693, + -0.014780237, + 0.006946458, + 0.04403649, + 0.005998926, + -0.019052055, + -0.012904187, + 0.026188655, + 0.0092534935, + 0.007605611, + 0.017150654, + -0.013221087, + -0.018253466, + -0.010495743, + -0.036430877, + 0.017404173, + -0.01986332, + -0.013246439, + 0.0024908376, + -0.0071239225, + -0.010071097, + 0.003176927, + -0.011915457, + 0.0028156606, + -0.004791535, + -0.00027015764, + -0.0080746235, + -0.015832348, + -0.008835184, + 0.009468986, + 0.018836563, + 0.00059418834, + 0.0164915, + -0.0016106466, + -0.002823583, + -0.00018192067, + 0.0087654665, + 0.0024908376, + -0.040056217, + 0.00843589, + -0.014919674, + -0.020928107, + -0.018291494, + -0.006952796, + 0.02139712, + -0.028850619, + 0.009633774, + 0.033059057, + -0.015363335, + -0.033211168, + -0.018202763, + 0.0141210845, + 0.013512636, + -0.021422472, + -0.031943567, + -0.024908377, + 0.013170383, + -0.021447822, + -0.021663316, + 0.027278792, + -0.0072380067, + 0.0023323875, + 0.0085626505, + 0.01817741, + 0.00802392, + 0.021828104, + 0.020953458, + -0.015464743, + -0.0034668911, + -0.006021109, + 0.03435201, + 0.0069908244, + 0.013994324, + -0.006997162, + -0.0015345905, + -0.0043383674, + -0.00074946956, + 0.02110557, + 0.011978838, + 0.009392929, + -0.0059418837, + -0.009830252, + -0.009950674, + -0.0164915, + -0.008524623, + -0.0051876605, + 0.039929457, + 0.014133761, + 0.033261873, + 0.0037109044, + -0.008480256, + -0.0052890684, + -0.017556285, + 0.008898565, + 0.019343603, + 0.004040481, + -0.01069856, + -0.000011667136, + 0.028926674, + 0.030980188, + -0.05587589, + -0.015097138, + 0.01073025, + 0.0045792116, + -0.021663316, + 0.006119348, + -0.0043827333, + 0.011402079, + 0.012359118, + -0.004851746, + -0.0056756875, + 0.0016795724, + -0.0007411509, + 0.0252126, + -0.00040998997, + -0.018253466, + -0.0004198931, + -0.027481608, + -0.014691506, + 0.0008033427, + -0.017099949, + -0.012270385, + -0.008271102, + 0.007878145, + 0.009443633, + -0.016377416, + 0.0035651303, + 0.014336577, + -0.003527102, + -0.00030580894, + -0.021283034, + -0.014387281, + -0.014830941, + 0.0143239, + -0.0023355563, + 0.0019727054, + 0.00853096, + -0.0097415205, + 0.036887214, + 0.015337982, + 0.019571772, + -0.024667531, + 0.013195735, + 0.0065344875, + 0.009443633, + 0.0034130178, + -0.0070668804, + -0.012238696, + -0.0033718208, + -0.03349004, + -0.020256277, + 0.019635152, + -0.01474221, + 0.0534928, + -0.010977432, + -0.030802725, + 0.03612665, + -0.022106975, + 0.0036031583, + 0.017429525, + 0.008448566, + -0.020877402, + -0.010229547, + 0.0013167214, + 0.016973188, + 0.019128112, + -0.004867591, + -0.016985865, + -0.007694343, + -0.02104219, + 0.019191492, + -0.027963297, + -0.004699634, + 0.036506932, + 0.0071999785, + 0.0037013975, + 0.0026144288, + -0.021194303, + -0.0074154707, + 0.017771779, + 0.010768278, + 0.0034922431, + 0.0023434788, + 0.020864727, + -0.0028837943, + -0.018608395, + -0.013030947, + 0.0017397836, + -0.03559426, + -0.014792914, + -0.02999146, + -0.0029820334, + 0.011896444, + 0.011712641, + 0.027075976, + -0.010869686, + -0.020509798, + -0.0016241148, + -0.0012636406, + -0.014830941, + 0.007726033, + -0.0051876605 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 33, + "total_tokens": 33 + } +} +278 34443 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 83 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What color is the lamp in each room?"]}HTTP/2.0 200 OK +Content-Length: 33488 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:56 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 87 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-rdhq6 +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999991 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_13106fdac939443fb4571e5061ddf369 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.02230405, + 0.008771547, + 0.014554557, + -0.011423711, + -0.008448112, + 0.015473112, + 0.0068826885, + -0.008881515, + 0.004744786, + -0.005595419, + -0.016676288, + 0.01731022, + -0.017698342, + 0.024891527, + -0.0063878335, + -0.0012743324, + 0.031618968, + 0.021294935, + 0.013648941, + -0.0046218806, + -0.020337569, + 0.025512522, + -0.01429581, + -0.001887241, + -0.01562836, + -0.008959139, + 0.017374907, + -0.008868577, + -0.011934738, + 0.006138789, + 0.0034187038, + -0.016792726, + -0.012723918, + -0.0168186, + -0.016844476, + 0.0169221, + 0.010860935, + 0.0039006216, + 0.011591896, + -0.014606307, + 0.015718922, + -0.0003416278, + -0.00038286572, + 0.00014958851, + -0.0055177948, + 0.007827118, + -0.0011853878, + 0.0067468463, + -0.039355524, + 0.01296326, + -0.008124677, + 0.0066562844, + -0.012885635, + -0.052706905, + -0.026172329, + 0.00087650784, + 0.008674516, + 0.01811234, + -0.011714802, + -0.0054789823, + -0.0041917125, + -0.0013471051, + -0.014502808, + 0.0060676336, + -0.0006072485, + -0.001574318, + -0.0084093, + 0.010860935, + 0.017038535, + -0.0021136452, + 0.021424308, + 0.028125875, + 0.017581906, + -0.00033576557, + 0.029419612, + -0.008752141, + -0.020712754, + -0.0023740102, + 0.007109093, + 0.00022701068, + 0.0044892724, + 0.0069279694, + -0.03260221, + 0.008758609, + 0.018733334, + 0.013441943, + 0.0025923285, + 0.018371087, + -0.034594566, + -0.0030613088, + -0.013196132, + 0.051439043, + 0.030040607, + -0.021760682, + -0.012445764, + 0.0054854513, + -0.0074325274, + 0.02478803, + 0.0125169195, + -0.013791252, + 0.016119981, + -0.015291989, + -0.031308472, + 0.005977072, + -0.017129097, + -0.023222605, + 0.0037486071, + 0.008480456, + 0.032679833, + -0.040105894, + -0.03487919, + 0.049187936, + 0.039459024, + -0.038449906, + -0.021980617, + -0.0070767496, + 0.0012702894, + -0.024141159, + -0.037337292, + 0.0070055937, + -0.0022672766, + 0.040468138, + 0.017982965, + -0.027530754, + 0.04486685, + -0.002137903, + -0.026482826, + -0.024503406, + -0.024956215, + 0.005016471, + 0.010802716, + 0.014929742, + 0.013467818, + 0.021243185, + -0.008920327, + 0.0013099102, + -0.006513973, + 0.024425782, + -0.03793241, + 0.00328933, + 0.013545441, + 0.006119383, + -0.0047900667, + -0.008059991, + -0.0056406995, + 0.030972099, + 0.0048094727, + -0.0027427257, + -0.020402256, + -0.0018662177, + 0.005673043, + -0.012717449, + 0.023817725, + 0.012827417, + 0.0014692018, + 0.016999723, + -0.0019567795, + 0.017827716, + -0.044219982, + 0.0069538443, + -0.04931731, + 0.0048968, + 0.030402854, + -0.005876807, + 0.012342265, + 0.028772743, + 0.020686878, + 0.0049744244, + -0.010395189, + 0.0075101517, + -0.032576334, + 0.027039135, + -0.020466942, + 0.03330083, + 0.00044795693, + 0.034930937, + 0.007859461, + -0.016158793, + 0.003978246, + 0.01157249, + -0.0095930705, + -0.0068438766, + -0.008538674, + -0.009146731, + 0.0009783898, + -0.017129097, + 0.0017497813, + -0.001466776, + 0.024011785, + -0.004550725, + 0.01143018, + 0.027763627, + -0.015059115, + -0.0069991252, + -0.66901803, + -0.032653958, + 0.004961487, + -0.0085904235, + 0.0080988025, + 0.013390193, + 0.0239471, + 0.028255248, + -0.003522203, + -0.016003545, + 0.009386073, + 0.007063812, + 0.0042078844, + -0.023934161, + 0.0125233885, + -0.021825368, + -0.0053981235, + 0.010893278, + -0.00018577276, + 0.0017788904, + -0.008765078, + 0.019108517, + -0.0018112338, + -0.00398148, + 0.021411372, + 0.022834484, + 0.009638351, + -0.016495166, + -0.015020303, + 0.012102923, + -0.015304926, + 0.011792426, + 0.013099102, + -0.023106169, + 0.025447836, + -0.003709795, + -0.024555156, + 0.028824493, + 0.0054886853, + 0.029962983, + -0.028384622, + -0.0021750978, + 0.017323159, + -0.02305442, + -0.010666873, + 0.010847997, + 0.017568968, + -0.00046129862, + 0.046833333, + -0.014024125, + 0.012769199, + -0.030014733, + -0.015718922, + 0.01844871, + 0.018254649, + 0.015990607, + 0.046212338, + 0.009858287, + -0.008467519, + 0.0031146754, + -0.009987661, + -0.018086463, + 0.0013495309, + 0.002897974, + 0.007445465, + 0.00079120195, + -0.0252279, + -0.023507228, + -0.020104695, + -0.022329926, + -0.0035933587, + 0.016158793, + -0.03904503, + 0.02423172, + 0.0061064456, + -0.010796247, + 0.029911233, + -0.007102624, + -0.0024710405, + -0.017206721, + 0.002055427, + -0.015123802, + -0.02853987, + -0.015123802, + 0.01741372, + -0.010472813, + -0.014670994, + -0.020893876, + 0.015757734, + 0.026987385, + 0.009612476, + 0.015046178, + -0.01839696, + 0.0003299033, + -0.017103223, + 0.03216234, + -0.01646929, + 0.0032181744, + -0.011320212, + -0.025033839, + 0.000618973, + -0.03270571, + -0.0037453729, + 0.013312569, + 0.02913499, + -0.0064428174, + -0.0077494932, + 0.031877715, + 0.015641298, + -0.014399309, + 0.0004980893, + -0.013176726, + -0.021631308, + 0.0009832412, + 0.014502808, + -0.022498112, + 0.04877394, + 0.013234944, + 0.024218785, + -0.015874172, + 0.007607182, + -0.0003988353, + 0.014231123, + -0.0182029, + 0.020570442, + 0.008965608, + -0.013648941, + -0.009146731, + -0.009599539, + 0.024218785, + -0.011967081, + 0.011346086, + 0.010207596, + -0.0065269107, + -0.030583978, + 0.0065269107, + 0.01662454, + -0.026094705, + 0.013881814, + -0.013312569, + -0.01687035, + 0.0033507827, + -0.026651012, + 0.007833586, + -0.023481352, + -0.027065009, + -0.028358746, + -0.007128499, + -0.027686004, + -0.012329328, + -0.018332275, + -0.025991205, + -0.042977992, + 0.007671869, + 0.013299632, + 0.0028947399, + -0.015990607, + -0.0078077116, + -0.028332872, + 0.006614238, + 0.024956215, + 0.011967081, + -0.015421363, + 0.003324908, + -0.010304627, + -0.024205847, + -0.009981193, + 0.02903149, + 0.00025308758, + -0.042822745, + -0.0026004142, + 0.0050229398, + -0.002137903, + 0.013868877, + -0.011837707, + -0.00040328252, + -0.0031454016, + -0.037984163, + -0.006850345, + -0.010298158, + 0.012568669, + 0.029393738, + -0.015304926, + 0.0046024746, + 0.03423232, + 0.012549263, + 0.022679236, + 0.023274355, + 0.0025680708, + 0.010511625, + -0.015123802, + -0.004977659, + 0.013545441, + -0.0077883056, + 0.008726266, + -0.0033281422, + 0.022265239, + -0.012872698, + -0.00095332356, + -0.011087338, + 0.029600736, + -0.0019017955, + -0.005094095, + -0.011514273, + 0.029755985, + -0.033870075, + 0.009159668, + -0.005210532, + 0.013907689, + 0.025253775, + -0.007704213, + -0.025745396, + 0.0020344038, + -0.022627486, + 0.01641754, + 0.010110566, + -0.01687035, + 0.028358746, + -0.0054886853, + -0.00026905717, + 0.01063453, + 0.011954144, + 0.03635405, + 0.0006104828, + -0.015887108, + 0.0037874193, + 0.006649816, + 0.020906813, + 0.009787131, + -0.011281399, + -0.02804825, + -0.0077624307, + 0.000054630127, + 0.006513973, + -0.015279051, + 0.0025179384, + 0.008959139, + -0.016404605, + -0.0049841274, + 0.0050714547, + 0.020402256, + 0.030972099, + 0.022950921, + 0.0077818367, + 0.03244696, + -0.0034963281, + 0.00796296, + 0.026288766, + -0.02449047, + 0.013726565, + -0.008881515, + -0.012374609, + -0.024115285, + 0.0058250576, + 0.018086463, + 0.0038359344, + 0.032628085, + -0.0063781305, + 0.0040396983, + 0.010906215, + -0.0004334024, + -0.0010632913, + 0.016728038, + -0.005912385, + -0.0072578727, + 0.008913858, + -0.023287293, + -0.014554557, + 0.0029189973, + -0.0059447284, + -0.012853292, + -0.008467519, + 0.014774493, + 0.0008178853, + 0.017129097, + 0.0022624251, + -0.0077430247, + -0.017090285, + 0.018358149, + 0.0336372, + -0.0033895948, + -0.02240755, + 0.014308748, + -0.0011603216, + -0.014515745, + -0.018422836, + -0.018177025, + 0.018513398, + -0.017646592, + 0.0072449353, + 0.016326979, + -0.0062519913, + 0.024154097, + -0.0005373058, + 0.0018079996, + -0.022886233, + -0.001822554, + -0.0007689658, + 0.023222605, + 0.005980306, + -0.011139088, + 0.00031231655, + -0.027220257, + -0.013855939, + 0.016378729, + 0.011857113, + -0.016947974, + -0.008364019, + -0.006420177, + -0.0251244, + -0.023093231, + -0.009871225, + 0.004013824, + 0.011223181, + 0.013390193, + 0.008053522, + -0.019328453, + -0.018358149, + 0.023584852, + 0.004159369, + -0.021113811, + -0.029238489, + -0.011449586, + -0.0014821391, + 0.05852873, + 0.009916506, + -0.006306975, + 0.017077347, + -0.002411205, + -0.0194837, + -0.017737154, + 0.012820948, + -0.00930198, + 0.010097628, + 0.013196132, + -0.007859461, + -0.007587776, + -0.009890631, + -0.014748619, + -0.0019406077, + 0.0066821594, + -0.009877693, + 0.019328453, + -0.007594245, + -0.010472813, + 0.0090820445, + -0.0051523135, + 0.02606883, + -0.023390792, + -0.011113213, + 0.022394612, + -0.014567495, + 0.015123802, + -0.01236814, + -0.012161141, + 0.016262293, + -0.0058638696, + -0.0024500173, + -0.025706584, + -0.01697385, + -0.016107043, + 0.008027648, + 0.029238489, + -0.0019001784, + 0.027479006, + 0.0066950964, + 0.0009306831, + -0.025603084, + 0.000605227, + 0.0065754256, + -0.009974724, + 0.02137256, + 0.0066821594, + -0.013687753, + 0.00008136402, + -0.0019858885, + -0.003997652, + -0.0042984462, + 0.0040526357, + 0.00009975937, + -0.013273757, + -0.024645718, + 0.009366667, + -0.01741372, + -0.0038909183, + 0.0034639847, + 0.030816851, + -0.0052364063, + -0.03565543, + -0.024063535, + -0.0013940032, + -0.011798895, + -0.0080858655, + -0.007794774, + -0.0052816872, + -0.015343738, + -0.042072374, + 0.012064111, + 0.04719558, + 0.024645718, + 0.030532228, + -0.0120511735, + 0.0045442563, + 0.01953545, + 0.0043987106, + -0.010375783, + 0.0060223527, + -0.006119383, + -0.0105310315, + -0.0052267034, + 0.021036187, + -0.012070579, + -0.01434756, + 0.027789501, + 0.026198205, + -0.0054304674, + 0.02903149, + -0.027737753, + -0.007937086, + -0.009263167, + -0.0014675845, + 0.02542196, + -0.028074125, + -0.012665699, + 0.017012661, + -0.019781262, + 0.012588075, + -0.035396684, + -0.019781262, + 0.01018819, + -0.0041787755, + -0.009418416, + -0.03169659, + 0.011171431, + 0.0006618281, + -0.020790378, + -0.004023527, + -0.014852118, + 0.028876243, + 0.01627523, + -0.026159393, + 0.012199954, + -0.0047674263, + -0.032032963, + 0.009780663, + -0.03542256, + 0.026935635, + 0.0014683931, + -0.03679392, + 0.005372249, + 0.011928269, + -0.009237292, + 0.01890152, + 0.008629235, + 0.004744786, + 0.01800884, + -0.027789501, + -0.014037062, + -0.026935635, + -0.007212592, + 0.012555731, + 0.009334323, + -0.015097928, + 0.014127624, + -0.009935912, + 0.019600138, + -0.0029545752, + -0.015072053, + -0.011727739, + -0.02631464, + 0.011585428, + -0.0010333736, + 0.0063781305, + 0.028229373, + 0.01608117, + 0.0050358768, + -0.03596593, + 0.017750092, + -0.013073227, + -0.019224953, + -0.006164664, + -0.016145855, + 0.011449586, + 0.013894751, + 0.016042357, + 0.0036192334, + 0.0073225596, + 0.005543669, + -0.0065366137, + 0.0056665745, + 0.009017357, + -0.0019470764, + -0.027116759, + -0.005669809, + 0.011902394, + 0.012083517, + 0.015563673, + 0.008933264, + 0.01152721, + 0.029212615, + -0.005317265, + 0.00062705885, + -0.03482744, + -0.026780386, + 0.001640622, + -0.016999723, + -0.011734208, + 0.0043696016, + 0.0014303896, + 0.013713628, + 0.0067468463, + -0.003897387, + -0.015473112, + -0.00925023, + 0.029652486, + -0.014632182, + 0.044763353, + -0.025344336, + 0.014321685, + -0.009127324, + -0.038812153, + -0.023106169, + -0.0061873044, + -0.020130571, + 0.0059447284, + 0.008376957, + 0.0032197917, + -0.02433522, + 0.021980617, + -0.0027799206, + 0.018979143, + -0.0007612842, + -0.0071996544, + -0.018177025, + -0.03358545, + -0.024050599, + -0.022575736, + -0.02869512, + 0.016585726, + -0.014412247, + -0.03167072, + 0.020454004, + 0.0022769796, + -0.007102624, + -0.010479282, + -0.009269636, + 0.025163213, + 0.013933564, + 0.026237017, + 0.013881814, + -0.0050358768, + -0.011714802, + -0.022523986, + -0.025913581, + -0.017918278, + 0.021424308, + 0.022420488, + 0.0047415514, + 0.010472813, + 0.0135066295, + -0.0030499885, + 0.012866229, + -0.016003545, + -0.0012161141, + 0.013933564, + 0.0068180016, + -0.005026174, + 0.00945076, + -0.017504282, + 0.023339042, + -0.007950023, + -0.008635704, + 0.010291689, + -0.0005227512, + -0.021825368, + -0.0012581607, + -0.01844871, + 0.035629556, + 0.01687035, + -0.011928269, + 0.015744798, + -0.016702164, + -0.009554259, + 0.0026699528, + 0.0068891575, + 0.035344936, + 0.0009694953, + 0.0055080913, + 0.0076848064, + 0.0074389963, + -0.015563673, + -0.00885564, + 0.009431354, + 0.029445488, + -0.015550736, + -0.0043598986, + -0.0110355895, + 0.020764502, + 0.03032523, + -0.01454162, + 0.002259191, + 0.0120252995, + -0.01137843, + 0.015162615, + 0.020001197, + -0.0037033265, + -0.01741372, + 0.0044601634, + -0.03037698, + 0.00420465, + -0.026379328, + -0.011714802, + -0.00026663142, + -0.03423232, + 0.0016737741, + 0.010265815, + 0.024891527, + 0.009515447, + 0.0052331723, + 0.0021136452, + 0.028902117, + -0.014114686, + -0.0052752187, + 0.0033895948, + 0.01068628, + 0.016753914, + -0.016495166, + 0.00413026, + -0.0009694953, + -0.041037384, + 0.017517218, + 0.010311096, + -0.033119705, + -0.0031890653, + 0.022730986, + -0.0038941528, + 0.004773895, + -0.016016481, + -0.0038197627, + 0.002102325, + 0.0012056025, + -0.012866229, + 0.0041884785, + -0.0056924494, + -0.017995901, + 0.015175552, + 0.009683632, + -0.0060126497, + 0.00791768, + 0.0048903315, + -0.010252877, + 0.012284047, + -0.01513674, + 0.0017708045, + 0.0016066615, + 0.018021777, + -0.0014675845, + -0.015990607, + 0.011100276, + -0.004366367, + -0.008364019, + -0.0014643503, + 0.009192012, + 0.008124677, + 0.0036774515, + 0.0144898705, + -0.0039847144, + 0.019651888, + -0.03260221, + -0.0073743095, + -0.014231123, + -0.034542818, + -0.02641814, + -0.020337569, + -0.02547371, + 0.007633057, + -0.010666873, + -0.028125875, + 0.0021815666, + -0.005795948, + 0.008668047, + -0.018384025, + 0.0053690146, + -0.0022478707, + 0.008900921, + -0.0019729512, + -0.004476335, + 0.026094705, + 0.0038068255, + -0.0029092943, + -0.0078077116, + 0.0048968, + 0.006239054, + -0.017271409, + 0.0033863604, + -0.0015597634, + -0.008739203, + -0.018733334, + 0.018319337, + 0.012109392, + 0.011009715, + -0.008972077, + -0.020686878, + 0.00727081, + 0.004579834, + 0.022562798, + 0.02696151, + 0.032886833, + -0.012723918, + -0.027686004, + -0.02286036, + -0.020466942, + 0.014140561, + -0.021657182, + -0.007801243, + 0.030635728, + 0.009166137, + -0.008829765, + -0.031386096, + -0.002327112, + -0.004269337, + 0.0055274977, + 0.014231123, + -0.00022559565, + -0.011274931, + 0.004026761, + 0.016728038, + -0.007044406, + 0.0021055595, + -0.005391655, + -0.011785957, + 0.00027896237, + 0.008913858, + 0.001550869, + -0.0038003568, + -0.014722744, + -0.013338444, + -0.016508102, + -0.0012403717, + -0.007341966, + -0.02156662, + -0.021087937, + 0.024904465, + 0.00939901, + -0.015990607, + 0.0026521639, + -0.040778637, + -0.020285819, + -0.0004916206, + -0.0066110035, + 0.005158782, + -0.030040607, + -0.0050358768, + 0.0011554701, + -0.001466776, + -0.018293463, + -0.022562798, + 0.003690389, + 0.023623664, + 0.012698043, + 0.2370129, + 0.008454581, + 0.0027119992, + 0.04199475, + -0.008875046, + 0.014205248, + 0.027039135, + 0.0049291435, + 0.016443416, + 0.023015607, + -0.02750488, + 0.0011109979, + 0.009386073, + 0.010938559, + -0.011850644, + -0.014554557, + -0.01811234, + -0.015304926, + 0.01310557, + 0.0023109403, + 0.008021179, + 0.000092381015, + 0.0040041204, + -0.021256123, + 0.015304926, + 0.021993553, + -0.0022915343, + -0.001701266, + 0.019328453, + 0.020259945, + 0.005411061, + -0.020945625, + -0.008286395, + -0.00024257596, + -0.004456929, + -0.0085710175, + -0.0023869474, + -0.0026521639, + 0.0222523, + 0.024813903, + -0.0040688077, + -0.0144769335, + -0.020997375, + 0.014127624, + -0.006552785, + -0.0051070326, + -0.019858886, + -0.012782136, + 0.01687035, + 0.0072449353, + -0.017944153, + -0.0072772787, + 0.02324848, + 0.023274355, + -0.00004644319, + 0.0061711324, + 0.02859162, + -0.018138213, + 0.00640724, + 0.00865511, + -0.006119383, + 0.035267312, + -0.020945625, + 0.023636602, + 0.010996777, + -0.008344613, + -0.002513087, + -0.00048515192, + 0.024425782, + -0.012070579, + 0.006300506, + -0.0031421673, + -0.0031648078, + 0.015964733, + 0.01760778, + 0.007937086, + 0.026832135, + 0.010957965, + 0.0095736645, + 0.002344901, + -0.010977371, + -0.0075554326, + -0.004421351, + 0.028384622, + 0.00058056513, + -0.017180847, + -0.0062455223, + 0.008150552, + 0.029419612, + 0.009631883, + 0.00390709, + 0.0017643358, + 0.0052008284, + 0.017193785, + 0.015317864, + 0.022278177, + 0.008422238, + 0.00885564, + -0.018992081, + -0.0023060888, + -0.029109115, + -0.0115207415, + 0.01879802, + 0.002307706, + -0.02696151, + 0.011003246, + 0.004211119, + -0.021760682, + 0.029238489, + 0.0044860383, + 0.004026761, + -0.009192012, + 0.008784484, + 0.0013325507, + 0.0059447284, + -0.0029303175, + 0.005158782, + -0.031618968, + -0.017245533, + -0.0063231466, + -0.008525737, + -0.020738628, + -0.010841528, + -0.0013163789, + -0.008234645, + -0.025486648, + -0.01562836, + 0.013674815, + 0.0073290286, + -0.03780304, + 0.0065107387, + -0.012892104, + 0.024451656, + -0.0026861245, + -0.0017109691, + -0.0021314342, + 0.013687753, + -0.0080858655, + 0.016857412, + -0.012601012, + 0.008519268, + -0.008131146, + 0.016546914, + -0.0010738029, + 0.0052267034, + -0.011876519, + 0.0044439915, + -0.008480456, + -0.014451059, + -0.027530754, + -0.01795709, + -0.006219648, + 0.0018662177, + -0.021152625, + 0.026094705, + -0.012070579, + -0.00045765997, + 0.0020667473, + 0.028436372, + 0.01370069, + -0.009463697, + 0.0063393186, + 0.013817127, + -0.0021087937, + -0.007503683, + 0.0025858597, + -0.16487403, + 0.0057571363, + 0.044219982, + -0.03314558, + -0.022045303, + 0.00796296, + 0.0095801335, + 0.023558978, + -0.014735681, + 0.039640147, + 0.00035961886, + 0.011132619, + -0.04572072, + -0.0026020315, + -0.010847997, + 0.0036095304, + -0.005391655, + 0.019250829, + -0.011578959, + 0.006921501, + 0.011443117, + -0.018616896, + 0.007037937, + 0.014127624, + -0.0037712476, + -0.019431952, + -0.02305442, + 0.021644244, + 0.01038872, + -0.02300267, + -0.009489572, + -0.0003606296, + 0.00051547395, + 0.006400771, + 0.009813006, + 0.0034445787, + 0.003968543, + 0.0026295234, + -0.013868877, + 0.00059754547, + -0.0077688997, + 0.010802716, + 0.017827716, + 0.03348195, + -0.0062778657, + 0.020492818, + 0.011986487, + 0.0009039998, + -0.01221936, + -0.008933264, + 0.009360198, + -0.025137339, + -0.0054045925, + -0.002624672, + 0.005540435, + 0.02067394, + 0.017103223, + 0.01953545, + 0.0009573665, + -0.000321211, + -0.008247583, + -0.03834641, + -0.011766551, + -0.0025454303, + 0.012406952, + 0.009664226, + 0.015887108, + -0.0031551046, + -0.017387845, + 0.008985014, + -0.00221391, + -0.02088094, + -0.0061226175, + -0.019781262, + 0.004903269, + 0.011093807, + 0.0030790975, + -0.026094705, + -0.011934738, + -0.01009116, + -0.002120114, + 0.050171178, + -0.017646592, + 0.0125233885, + -0.013674815, + 0.01592592, + 0.00041803924, + 0.004560428, + -0.027427256, + 0.0015678493, + 0.029109115, + -0.010052348, + 0.00846105, + -0.02853987, + 0.010744498, + 0.0043501956, + 0.0054498734, + -0.00571509, + 0.0004378496, + 0.0018079996, + -0.013674815, + 0.010097628, + -0.018862708, + 0.021605432, + 0.032860957, + -0.00930198, + -0.016339917, + 0.018319337, + 0.03749254, + -0.005210532, + -0.022174677, + 0.010699217, + 0.009819475, + 0.020014133, + 0.016184669, + -0.005857401, + 0.014877993, + -0.0061452575, + 0.024050599, + 0.029471362, + 0.04230525, + -0.020518692, + -0.015473112, + 0.016314043, + 0.0071802484, + -0.016158793, + -0.08569723, + 0.003531906, + -0.0037033265, + 0.021346685, + 0.0077106813, + 0.028798617, + 0.021631308, + 0.035267312, + 0.00687622, + 0.01518849, + -0.012232297, + -0.011669521, + -0.01608117, + 0.009754788, + 0.0008522502, + -0.011391367, + 0.01083506, + -0.032576334, + -0.04574659, + 0.016145855, + 0.000981624, + -0.0030241136, + 0.012801542, + -0.0077300873, + 0.006365193, + -0.037673663, + -0.038605157, + 0.0110355895, + 0.0035157343, + 0.0034154695, + 0.02349429, + -0.027039135, + -0.016986785, + -0.013312569, + -0.021708932, + -0.0149814915, + -0.021281999, + -0.019263767, + 0.011941206, + -0.03961427, + -0.008991483, + 0.018306399, + 0.0168186, + -0.015563673, + 0.015162615, + -0.0058379946, + -0.016197605, + 0.012549263, + -0.009386073, + -0.022627486, + 0.012665699, + 0.0045054443, + -0.008680985, + -0.023416666, + 0.026599264, + -0.011734208, + 0.008564549, + 0.030144107, + -0.013687753, + 0.00895267, + -0.0022656594, + 0.028617496, + -0.0004867691, + 0.020945625, + 0.0050100023, + -0.026482826, + -0.025680708, + -0.0009444291, + 0.009800069, + -0.037259668, + -0.036198802, + -0.003531906, + -0.0029384035, + -0.013894751, + -0.028902117, + -0.008182895, + -0.013648941, + 0.016896224, + -0.0016333448, + -0.0054983883, + -0.017530156, + -0.022562798, + 0.0057991827, + 0.006064399, + -0.001644665, + 0.03555193, + -0.031748343, + -0.018772146, + 0.0024144393, + -0.0015686579, + -0.0060417587, + 0.019134391, + 0.013124976, + -0.016249355, + -0.025098527, + 0.018371087, + -0.0025001497, + 0.014670994, + 0.02734963, + -0.01890152, + -0.022433424, + 0.00079686206, + -0.05387127, + 0.019315515, + -0.005165251, + -0.013959438, + -0.013429006, + -0.0043437267, + 0.005805651, + -0.0063037407, + -0.0067597837, + 0.007193186, + -0.008351082, + 0.017866528, + -0.010343439, + 0.002391799, + -0.0044957413, + 0.0054789823, + 0.009036764, + 0.017504282, + -0.0047577233, + -0.00801471, + -0.015537799, + -0.0018338743, + 0.017672468, + 0.017737154, + -0.029367864, + 0.004773895, + -0.008842702, + 0.001822554, + -0.022394612, + -0.01370069, + 0.03819116, + -0.036923297, + 0.0043404927, + 0.04947256, + -0.010653936, + -0.039950643, + -0.029859483, + 0.030092357, + 0.03423232, + -0.040287014, + -0.00791768, + -0.025848895, + 0.011456054, + -0.024593968, + 0.007982367, + 0.031644844, + -0.015641298, + 0.006921501, + 0.010673342, + 0.0007115562, + 0.022523986, + 0.016883288, + 0.0011045292, + 0.0010754201, + -0.010265815, + -0.025797145, + 0.02354604, + -0.016055295, + 0.029290238, + -0.025745396, + 0.011798895, + 0.0055727786, + 0.013312569, + 0.008079397, + 0.020686878, + -0.011158494, + 0.024865653, + 0.0037680133, + -0.0049905963, + -0.014774493, + 0.005753902, + 0.010446938, + 0.026780386, + 0.016805662, + 0.020363443, + 0.002352987, + 0.023468416, + 0.0075101517, + -0.016404605, + 0.018138213, + 0.019845948, + -0.0027152337, + -0.023313167, + 0.014037062, + 0.035836555, + 0.0002749194, + -0.036172926, + 0.017750092, + 0.010304627, + 0.0036030617, + -0.017504282, + 0.0056762774, + 0.008215239, + 0.004615412, + 0.008351082, + 0.0041076196, + -0.00472538, + 0.01454162, + -0.0036483426, + 0.021100875, + -0.015343738, + -0.022769798, + 0.0066821594, + -0.02552546, + -0.012969729, + 0.005346374, + -0.0050035333, + -0.017970027, + -0.0076395255, + 0.003402532, + 0.0042919773, + 0.0011012949, + 0.004139963, + 0.007658932, + 0.004589537, + -0.006219648, + -0.028953867, + -0.023804788, + -0.022472236, + 0.015615423, + 0.0015557205, + 0.008972077, + -0.005905916, + 0.001896944, + 0.0063748965, + 0.01058278, + 0.018189963, + -0.011197306, + 0.030532228, + 0.02582302, + 0.010479282, + 0.0062455223, + -0.0009436205, + -0.0067015653, + 0.001402089, + -0.022718048, + 0.0034898594, + 0.011747145, + -0.01276273, + 0.06810239, + 0.0030338168, + -0.022601612, + 0.03487919, + -0.013726565, + 0.033430204, + 0.008441644, + 0.009528384, + -0.022032365, + -0.009780663, + -0.0017999136, + 0.019548388, + 0.011404305, + -0.028850367, + -0.02908324, + -0.019224953, + -0.024852715, + 0.0059382594, + -0.0004519999, + -0.015253177, + 0.018707458, + -0.01725847, + 0.007924148, + 0.015059115, + -0.022187615, + -0.024115285, + 0.0144898705, + -0.0020360209, + 0.0006181644, + 0.0032214087, + 0.021683056, + -0.0045539592, + -0.03293858, + -0.0051070326, + 0.014231123, + -0.015822422, + -0.011675989, + -0.019199079, + -0.008887983, + -0.0038100597, + 0.010828591, + 0.027479006, + -0.010155847, + -0.008499862, + 0.013196132, + -0.014049999, + -0.0034995626, + 0.008661579, + -0.0046024746 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 9, + "total_tokens": 9 + } +} +806 1738 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 604 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is purple.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"location\"\u003esitting room\u003c/kv\u003e\n\n\u003ckv key=\"square_feet\"\u003e400\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the lamp in each room?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 913 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:58 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 637 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999892 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_2b5a4d6d34d3443ab41ff40ba98e8fdf + +{ + "id": "chatcmpl-ERDYcmOanNmHEX5fiwS1xIUcVP7W6", + "object": "chat.completion", + "created": 1790155678, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The lamp beside the desk in the sitting room is purple. The other rooms' lamp colors are not specified.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 108, + "completion_tokens": 22, + "total_tokens": 130, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_0b80e335b8" +} diff --git a/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithScoreThreshold.httprr b/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithScoreThreshold.httprr new file mode 100644 index 000000000..f602f8cd5 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestInMemoryAsRetrieverWithScoreThreshold.httprr @@ -0,0 +1,9416 @@ +httprr trace v1 +441 168102 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 245 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["The color of the house is blue.","The color of the car is red.","The color of the desk is orange.","The color of the lamp beside the desk is black.","The color of the chair beside the desk is beige."]}HTTP/2.0 200 OK +Content-Length: 167145 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:43:10 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 165 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-klnn2 +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999954 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_56a7d3dc40df477ba140f29dfb46ced0 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0045962376, + 0.00861834, + -0.008126223, + -0.0057255807, + -0.016656235, + 0.023255637, + -0.0021608942, + 0.0004629361, + 0.03417052, + -0.009558408, + -0.021224082, + 0.019343946, + 0.008006349, + -0.017110497, + -0.008088369, + -0.009735065, + 0.019672023, + -0.024353435, + 0.018031636, + -0.0012744544, + -0.03485191, + 0.028063232, + -0.0003330064, + -0.0025457542, + -0.0055268416, + -0.005293402, + 0.01669409, + -0.013539501, + 0.017047405, + 0.007836002, + -0.0042019137, + -0.01500323, + -0.011741384, + -0.009659355, + -0.010170398, + -0.0058580735, + -0.0010071029, + 0.0023943337, + -0.007186156, + 0.000008675122, + 0.01755214, + -0.0024795078, + 0.0055457694, + -0.030965455, + -0.0057445085, + 0.005832837, + 0.0017397564, + 0.0144227855, + -0.022713048, + 0.008290263, + 0.0053501846, + 0.026296662, + -0.0006660128, + -0.03437241, + 0.0062997164, + -0.011110466, + 0.0062050787, + 0.015596293, + 0.0025773, + -0.004785513, + 0.010145161, + -0.02176667, + -0.011899114, + -0.012328138, + -0.029602673, + -0.010511094, + -0.017905453, + -0.010498475, + 0.005618325, + 0.022511154, + 0.019268235, + 0.024782458, + 0.0139180515, + -0.001563888, + 0.012782399, + 0.013451172, + -0.023444913, + -0.012290282, + 0.0012602587, + 0.010908572, + 0.006561547, + -0.004507909, + -0.033287235, + 0.007507924, + 0.029224122, + 0.017791888, + -0.015911752, + 0.014902283, + -0.039899256, + 0.0029921287, + 0.024429144, + 0.041716296, + 0.016845511, + -0.008959035, + -0.009053674, + -0.014183037, + 0.011993751, + 0.029880276, + 0.006914861, + -0.026220951, + -0.00060213235, + 0.011318669, + -0.048025478, + 0.00761518, + -0.03015788, + 0.0017019013, + -0.0023186237, + -0.004255542, + 0.027432315, + -0.029577436, + -0.025337666, + 0.027508024, + 0.024782458, + -0.031520665, + -0.00094085647, + -0.00008300515, + 0.0006277634, + -0.011854949, + -0.0102397995, + 0.01654267, + 0.009911722, + 0.021817144, + 0.014637298, + 0.017640468, + -0.004946397, + 0.005485832, + -0.021968564, + -0.044113785, + -0.005362803, + -0.0021640488, + 0.009413296, + 0.021526922, + 0.015836041, + 0.0018312394, + -0.025640508, + -0.0038643728, + -0.026094768, + 0.028416546, + -0.024656275, + -0.00353945, + 0.009779229, + 0.019558458, + -0.023369202, + -0.0035993871, + 0.019836063, + 0.02861844, + 0.003400648, + -0.0028706768, + -0.0105174035, + -0.030258827, + 0.017779268, + -0.031596374, + 0.0141451815, + 0.020580545, + 0.020984333, + 0.0360128, + -0.008977963, + 0.012662524, + -0.03333771, + 0.013526882, + -0.025716217, + -0.0013304483, + 0.036441825, + -0.006362808, + 0.034321938, + 0.018839212, + 0.017564757, + 0.0049053873, + -0.028366074, + 0.0011963783, + -0.012403848, + 0.035810906, + -0.039571177, + 0.021640487, + 0.007886475, + 0.01523036, + -0.0057034986, + 0.0015607334, + -0.01669409, + -0.0049716337, + -0.041665826, + -0.0055299965, + 0.0111987945, + 0.006681422, + -0.0016798192, + 0.012946437, + 0.016138883, + -0.008353354, + 0.017817125, + 0.0018959086, + 0.021514304, + 0.004731885, + -0.0024479618, + -0.00040891374, + -0.6856312, + -0.017981162, + 0.010132543, + -0.02200642, + 0.02161525, + 0.021526922, + 0.026725687, + 0.0070284265, + -0.01577295, + -0.017211443, + -0.005914856, + -0.0013501645, + -0.010088379, + -0.0015402286, + 0.0032902374, + -0.0035236771, + 0.007829692, + 0.01008207, + 0.0049905614, + 0.005022107, + -0.0075647067, + -0.009324968, + -0.015066322, + 0.001839126, + 0.01577295, + 0.009823393, + 0.014788718, + 0.0016861283, + -0.028896045, + 0.014902283, + -0.015735095, + 0.03470049, + -0.0020094737, + 0.008719287, + 0.03263108, + 0.0047129574, + -0.02114837, + 0.036896084, + 0.021791907, + 0.013829722, + -0.0024952807, + -0.0036151602, + 0.019343946, + -0.00020209092, + -0.010126234, + 0.006255552, + 0.009501625, + -0.010933809, + 0.010334437, + 0.0074069775, + 0.00669404, + -0.009451152, + -0.00892749, + 0.021034807, + 0.021299792, + 0.00046254176, + 0.036492296, + 0.020795057, + -0.010151471, + -0.0066435663, + -0.00815146, + 0.0025268267, + -0.012485867, + -0.021400739, + -0.015129413, + 0.002026824, + -0.027785629, + -0.01608841, + -0.0141451815, + -0.005340721, + -0.00081625016, + 0.017097877, + -0.02294018, + 0.023053743, + 0.0026277734, + -0.0019590005, + 0.03480144, + -0.008877017, + -0.010801316, + 0.013135713, + 0.015343926, + -0.018019019, + -0.012126244, + -0.018813975, + 0.009028437, + -0.015697239, + -0.01885183, + -0.019911772, + 0.004432199, + -0.027104238, + 0.020214614, + -0.0074069775, + -0.014864428, + -0.025135772, + -0.013299751, + 0.009817084, + -0.0067508225, + 0.02015152, + 0.016138883, + -0.021905473, + -0.017577376, + -0.008971654, + 0.0007425116, + 0.010397528, + 0.03210111, + 0.012302901, + -0.004485827, + 0.023508005, + 0.0039022279, + -0.026246188, + 0.02215784, + -0.0056877257, + -0.015066322, + 0.0061956146, + -0.004763431, + -0.02360895, + 0.014940138, + 0.0076404167, + 0.02977933, + -0.013690921, + 0.02016414, + 0.0032586914, + -0.00073304784, + -0.003369102, + 0.0151041765, + 0.0052965567, + -0.010700369, + -0.0050725807, + -0.0048202137, + 0.00042547533, + 0.0031608993, + 0.011671983, + 0.022069512, + 0.009552099, + 0.013186187, + 0.003378566, + 0.00619246, + -0.008612031, + 0.031192586, + -0.007192465, + -0.014637298, + 0.014536351, + -0.01138807, + 0.0065110736, + -0.00946377, + -0.031949688, + -0.037981264, + -0.018978013, + -0.025097918, + 0.01692122, + -0.005851764, + -0.00074448326, + 0.0019858144, + 0.015608911, + -0.01162151, + 0.011224031, + 0.0012571041, + -0.0008667236, + -0.008397519, + 0.013514264, + 0.023419676, + 0.015899133, + -0.0026987516, + 0.006580475, + -0.01530607, + -0.013842341, + -0.018372333, + 0.013413317, + -0.01261205, + -0.022031657, + 0.007810765, + -0.004078885, + -0.013211423, + -0.016214592, + -0.01838495, + 0.006977953, + -0.03333771, + -0.033135813, + -0.004583619, + -0.012996911, + 0.01806949, + 0.015470109, + -0.004763431, + -0.0027397615, + 0.016530052, + 0.0074889967, + 0.037829842, + 0.032429185, + 0.0043060156, + 0.0071483008, + -0.0014771367, + 0.0144480225, + 0.0012768203, + 0.022183077, + 0.011640437, + -0.009375442, + -0.00077997235, + 0.009154621, + -0.004138822, + 0.014889665, + 0.02476984, + 0.0024905489, + 0.013678302, + -0.020366034, + -0.0027413387, + -0.042902425, + 0.020138903, + 0.002561527, + -0.001892754, + 0.005946402, + -0.019356564, + -0.02208213, + -0.01660576, + -0.013375462, + 0.009665663, + -0.012018988, + -0.005662489, + 0.006422745, + 0.009552099, + -0.006971644, + 0.006031576, + 0.00011908577, + 0.029022228, + -0.00438488, + -0.014460641, + -0.012239809, + 0.0004830466, + 0.011160939, + -0.014864428, + -0.010132543, + -0.021198845, + 0.0073123397, + -0.008107296, + 0.009507935, + -0.0028690996, + 0.0105174035, + 0.018296622, + -0.020252468, + 0.0013951174, + -0.0013170413, + 0.019179907, + 0.026296662, + 0.0017381791, + -0.0076845814, + 0.021817144, + -0.0049116965, + 0.010858099, + -0.00034877934, + -0.020504834, + 0.014864428, + -0.007753982, + -0.0049337787, + -0.014889665, + -0.0005788673, + 0.013375462, + -0.01953322, + 0.02685187, + -0.0056025516, + 0.026145242, + 0.017741414, + 0.03321152, + 0.0060662767, + -0.0007535527, + -0.007817074, + 0.00984232, + -0.0016048977, + -0.020631019, + -0.008283953, + -0.005794982, + -0.025968585, + -0.006100977, + -0.009482698, + 0.029224122, + -0.0015694086, + 0.0007488208, + -0.007331267, + 0.0021593168, + -0.0016656235, + 0.012170408, + -0.009880176, + -0.0078486195, + -0.023381822, + 0.0052460833, + 0.012599433, + -0.000050769184, + -0.009438533, + -0.0303093, + 0.02100957, + -0.015507964, + 0.012971674, + 0.026372373, + 0.0016672008, + 0.0063501894, + -0.008567867, + -0.00488646, + -0.02839131, + 0.0025362903, + -0.0027902348, + 0.015722476, + -0.017060023, + 0.008826543, + -0.0193818, + -0.007974803, + -0.0010165666, + 0.008069442, + 0.022296643, + 0.00885178, + 0.0149275195, + -0.012403848, + -0.022801377, + -0.029501725, + -0.0076277987, + 0.008006349, + 0.009104147, + -0.015293452, + -0.0052681654, + -0.025489086, + -0.02476984, + 0.024429144, + 0.013287133, + -0.00066522416, + -0.0055489237, + -0.01276978, + -0.0008895944, + 0.085602954, + -0.018612081, + 0.0021041115, + -0.001769725, + 0.023331348, + -0.017425954, + -0.016201975, + 0.0061829966, + -0.008347045, + 0.026448082, + 0.011413307, + -0.002197172, + 0.0069211703, + 0.012492176, + 0.00043217881, + -0.0014211428, + 0.024164159, + -0.0116152, + 0.012340756, + -0.019507984, + -0.026725687, + 0.0029495417, + 0.014725626, + 0.007829692, + -0.0040410296, + 0.008990581, + 0.012795017, + 0.0006581263, + 0.021413356, + -0.009627809, + -0.004861223, + 0.013981143, + -0.002235027, + -0.019457512, + -0.00091246516, + -0.020138903, + -0.03439765, + -0.007400668, + 0.01238492, + -0.026220951, + 0.029426016, + 0.012151481, + 0.008984272, + -0.009571026, + 0.002984242, + 0.012006369, + -0.0014637298, + 0.0412368, + -0.013022147, + -0.010183017, + 0.030889746, + -0.017123114, + 0.0014353384, + 0.00438488, + 0.013148331, + 0.015810804, + 0.005933784, + 0.005523687, + 0.01755214, + -0.029804567, + -0.0149275195, + -0.025842402, + -0.015899133, + 0.002908532, + -0.002946387, + -0.03886455, + -0.015091559, + -0.00082413666, + -0.022220932, + -0.015318689, + 0.025993822, + -0.011299741, + -0.018359713, + 0.01515465, + 0.024403907, + 0.022952797, + 0.002925882, + -0.018965395, + -0.019634169, + 0.02016414, + -0.012996911, + -0.0021246164, + 0.015041085, + 0.008839161, + -0.0041230493, + -0.0027350294, + 0.023318728, + -0.027255658, + -0.00792433, + 0.022914942, + 0.004823368, + 0.0019558459, + 0.030359775, + 0.009451152, + -0.008984272, + 0.0043817256, + -0.001984237, + 0.009116765, + -0.01669409, + 0.0024448072, + 0.010933809, + -0.031066403, + -0.013577355, + -0.004548919, + -0.0061041317, + 0.0025063218, + 0.010302891, + -0.0005694035, + -0.04138822, + 0.005302866, + 0.016807655, + -0.017135734, + 0.000028194148, + -0.030208353, + 0.003277619, + 0.023861319, + -0.019331327, + 0.017577376, + 0.0023659426, + -0.03538188, + 0.027205184, + -0.036366113, + 0.025123155, + 0.010763461, + -0.007356504, + 0.004744503, + 0.008895944, + -0.0059211655, + -0.016164118, + 0.0039274646, + 0.0022097903, + 0.00082255935, + -0.022145221, + -0.012946437, + -0.01969726, + -0.013047384, + 0.019444892, + 0.0047728946, + 0.00004029496, + -0.011255577, + -0.0111987945, + 0.011911732, + 0.0030883437, + -0.0017634158, + -0.024731986, + -0.016416486, + 0.00276973, + -0.0144480225, + -0.013552119, + 0.022750903, + 0.016731946, + -0.0076593445, + -0.001903795, + 0.022107366, + 0.006839151, + -0.009873867, + -0.017981162, + -0.004100967, + 0.02161525, + 0.029602673, + 0.006681422, + -0.00030402362, + 0.02176667, + -0.009552099, + -0.016290303, + -0.011968515, + 0.0075836345, + -0.0053911945, + -0.021425975, + 0.01962155, + 0.01631554, + 0.027861338, + 0.015457491, + 0.022271406, + 0.0056372522, + 0.015962224, + 0.0049653244, + -0.0027239884, + -0.015205123, + -0.037527002, + -0.01808211, + 0.0024243025, + -0.019672023, + 0.00423346, + 0.021943329, + -0.0035552229, + 0.010883335, + 0.01953322, + 0.0077792187, + 0.001205842, + 0.02439129, + -0.013665684, + 0.042347215, + -0.0028596357, + -0.0072807935, + -0.0058044456, + -0.008914871, + -0.011495326, + 0.008952727, + 0.0023359738, + 0.018498516, + 0.020366034, + -0.021943329, + -0.008208243, + 0.0033943388, + 0.019583695, + -0.0014006379, + -0.0057413536, + 0.005302866, + -0.012037915, + -0.018675173, + -0.018801356, + -0.012719307, + -0.043381922, + 0.003608851, + 0.010788698, + -0.028643677, + 0.022435443, + -0.005239774, + -0.020580545, + -0.008895944, + -0.0040284116, + 0.011829712, + -0.0040599573, + 0.023735136, + 0.0051829913, + -0.02801276, + -0.0150284665, + 0.011047374, + -0.0146499155, + -0.01515465, + 0.010832862, + 0.0036624789, + -0.012700379, + -0.0034038026, + 0.0110978475, + 0.006801296, + 0.012479558, + -0.011690911, + -0.009173548, + 0.0035205225, + 0.017716177, + -0.017955925, + 0.0074637597, + -0.008580484, + 0.025728837, + -0.0068265325, + -0.021741435, + 0.0051672184, + -0.011123084, + -0.015255597, + -0.009564717, + -0.025817165, + 0.012252428, + 0.004848605, + -0.008119915, + 0.0035899235, + 0.0107950065, + -0.012933819, + -0.0073817405, + -0.009104147, + 0.047066484, + 0.0040820395, + 0.012334446, + 0.015533201, + 0.026347136, + 0.0041640587, + -0.011608891, + 0.010353364, + 0.026220951, + -0.0010496898, + 0.0015701972, + -0.0071735377, + 0.05130625, + 0.021590013, + -0.009741374, + -0.005186146, + -0.014952756, + -0.02215784, + -0.013766631, + 0.0145994425, + -0.00087382144, + -0.015419636, + -0.0034101119, + -0.027861338, + -0.010277654, + -0.027810866, + -0.01300953, + 0.010776079, + -0.0031198894, + -0.016353395, + -0.013678302, + -0.021993801, + 0.027987523, + 0.02099695, + 0.00009715151, + -0.005785518, + 0.010050524, + -0.025211483, + 0.018183056, + -0.023104217, + 0.022485917, + -0.013375462, + 0.008447992, + 0.011791857, + -0.018473279, + 0.010599422, + -0.00042271506, + -0.0283156, + -0.04555228, + 0.009804466, + -0.009198785, + 0.012391229, + -0.0063217985, + -0.018612081, + 0.010750842, + 0.009110456, + -0.015444873, + -0.021791907, + 0.010536331, + -0.0060284217, + -0.0019022177, + 0.021943329, + -0.0140947085, + -0.0032050635, + 0.019041106, + -0.016820274, + -0.00033596382, + -0.0263219, + -0.012795017, + 0.016037935, + 0.025640508, + 0.000056092555, + -0.021918092, + 0.000246058, + -0.015356544, + -0.017905453, + 0.0051262085, + -0.005555233, + 0.0014960644, + 0.03591185, + 0.025186246, + -0.003962165, + 0.0054448224, + -0.02677616, + -0.009501625, + -0.021451212, + -0.021261936, + -0.016227212, + -0.027659444, + 0.00777291, + 0.016832892, + -0.0067318953, + -0.019861298, + 0.00078825315, + 0.0122335, + -0.0035741504, + -0.018498516, + 0.011413307, + 0.015659384, + 0.016668854, + -0.0054826774, + -0.0046277833, + 0.02161525, + -0.0016009544, + 0.005952711, + -0.0057508177, + 0.003839136, + 0.0020394425, + -0.01261836, + 0.021123135, + 0.012056843, + 0.0065741655, + -0.019369183, + 0.009135692, + 0.008416446, + 0.0052366196, + 0.012403848, + -0.008485847, + 0.010990592, + -0.008365973, + 0.012933819, + 0.008372282, + 0.0073438855, + 0.007671963, + -0.008290263, + -0.01823353, + -0.0128518, + 0.0014605751, + -0.011356524, + -0.00039294362, + 0.020731965, + 0.00021451213, + -0.022675192, + -0.0139937615, + -0.01323666, + -0.025198866, + -0.016176738, + 0.0065741655, + 0.001552847, + -0.0047918223, + 0.011571036, + 0.0023817155, + 0.011854949, + -0.0071987743, + 0.002176667, + -0.0137161575, + 0.00022614466, + -0.027533261, + -0.01769094, + 0.002523672, + -0.02670045, + -0.022637337, + -0.024782458, + 0.00004091109, + -0.0012839182, + -0.004324943, + -0.028567966, + 0.027205184, + 0.010372292, + -0.0108707175, + 0.0072303205, + -0.043104317, + -0.015091559, + 0.009571026, + -0.005063117, + -0.008719287, + -0.016290303, + 0.010687751, + 0.0033943388, + -0.0044353534, + -0.0057665906, + 0.010151471, + 0.015836041, + 0.0056246337, + 0.04063112, + 0.22591911, + -0.0003475964, + -0.00011977584, + 0.039217863, + 0.016984312, + 0.021564778, + 0.0144732585, + 0.017034786, + 0.00296216, + 0.015205123, + -0.0037634259, + -0.0050315713, + -0.013438554, + 0.014372312, + 0.00046372472, + -0.035129514, + -0.030334538, + -0.00861834, + -0.0063186437, + 0.007501615, + -0.019608932, + -0.026044294, + -0.0071419915, + -0.008990581, + 0.0029590053, + 0.006555238, + -0.01815782, + 0.014283983, + 0.024214633, + -0.0010796584, + -0.0018848676, + -0.035482828, + 0.010731915, + -0.003416421, + -0.007015808, + -0.0043407157, + 0.005501605, + -0.020883385, + 0.025602652, + 0.02685187, + 0.00040043576, + -0.0035615321, + -0.024467, + 0.0043407157, + -0.013653065, + 0.017148351, + -0.0059211655, + -0.00569088, + 0.008119915, + 0.008397519, + -0.024000121, + -0.021400739, + 0.009375442, + 0.047344085, + -0.0052271555, + 0.010927499, + 0.015760332, + -0.0021514304, + 0.017160969, + -0.0044195806, + -0.027937049, + 0.037880316, + -0.020921241, + 0.028138943, + -0.0010110461, + -0.002069411, + -0.015268216, + 0.0010930655, + 0.00853632, + -0.015596293, + 0.01538178, + 0.010012669, + -0.0012878614, + -0.007009499, + -0.0059747933, + -0.014990612, + 0.031142112, + 0.00626817, + 0.030914983, + 0.013690921, + -0.02393703, + 0.03000646, + -0.022183077, + -0.0011695642, + 0.0112745045, + -0.04010115, + 0.012119935, + -0.024517473, + 0.013539501, + 0.0020993797, + 0.011123084, + 0.0071672285, + 0.00037657918, + -0.0039747832, + 0.01984868, + 0.018208293, + 0.0139180515, + 0.027028527, + -0.028643677, + 0.0072240112, + -0.037350345, + -0.029224122, + 0.017905453, + 0.0051293634, + -0.012530032, + 0.008719287, + 0.017148351, + 0.0015694086, + 0.021325028, + -0.008977963, + 0.025754072, + -0.012637287, + 0.0030015924, + 0.000056536166, + 0.016719326, + 0.0001789244, + -0.0056057065, + -0.025060063, + -0.003940083, + 0.0076277987, + -0.020908622, + 0.0043438706, + -0.01515465, + 0.010788698, + 0.014940138, + -0.023280874, + -0.018637318, + 0.0103092, + 0.0010347056, + -0.048429266, + 0.0006498455, + 0.005318639, + 0.039646886, + -0.0034511215, + -0.0142966015, + 0.03437241, + 0.01577295, + -0.0335396, + -0.0112492675, + 0.002411684, + -0.00091246516, + -0.025640508, + -0.0041262037, + -0.016984312, + -0.0012665679, + -0.010094688, + 0.0064732186, + 0.00037993092, + -0.029526962, + -0.017981162, + -0.019949628, + 0.0011963783, + -0.017943308, + -0.011583654, + 0.020366034, + -0.02099695, + -0.019823443, + -0.012586814, + 0.008813924, + 0.029754093, + -0.010176707, + 0.019672023, + 0.022321878, + 0.0039116917, + -0.019571077, + 0.013564737, + -0.16050553, + 0.027280895, + 0.011123084, + 0.005318639, + -0.012479558, + -0.022826614, + 0.006091513, + 0.006485837, + -0.013678302, + 0.024050593, + 0.025261957, + 0.0083849, + -0.016984312, + 0.000029845378, + -0.024277724, + -0.0014053698, + 0.0008194047, + -0.0069211703, + 0.018119965, + 0.013337607, + 0.013148331, + -0.014940138, + 0.015558437, + 0.0014755594, + -0.0068265325, + -0.01007576, + -0.011766621, + 0.030284064, + -0.001716097, + -0.0315459, + -0.0073880497, + 0.0019053724, + 0.0069653345, + 0.0048139044, + 0.014586824, + 0.001315464, + -0.0017350245, + 0.0075647067, + -0.0075647067, + 0.0049337787, + 0.0108959535, + 0.0024369208, + 0.017564757, + 0.013072621, + -0.02730613, + 0.014586824, + 0.02977933, + 0.028870808, + -0.009501625, + -0.012391229, + -0.019104198, + -0.021905473, + -0.006031576, + -0.013653065, + 0.03533141, + 0.02307898, + 0.0048517594, + 0.012176718, + -0.00013919629, + -0.0055836244, + -0.03061214, + -0.009981123, + 0.004608856, + 0.0053281025, + 0.019596312, + -0.009110456, + 0.008574176, + 0.0052839383, + -0.02376037, + 0.012662524, + -0.013337607, + -0.03147019, + -0.013123094, + -0.0034416576, + -0.003501595, + 0.008340736, + -0.017804505, + -0.00015043451, + -0.0049653244, + -0.021211464, + 0.0020189376, + 0.037754133, + -0.031899214, + -0.024681512, + -0.017022168, + 0.020075811, + -0.0057508177, + 0.006504765, + -0.008668813, + -0.009501625, + 0.008725596, + -0.043432396, + -0.0038265176, + -0.024530092, + 0.02116099, + 0.020340797, + 0.017589994, + -0.001494487, + -0.0027192566, + -0.009217712, + 0.005041035, + -0.007671963, + -0.012479558, + 0.0028517493, + 0.036189456, + 0.0139180515, + 0.0036214693, + 0.02715471, + 0.0315459, + 0.022359734, + -0.00892749, + 0.015987461, + 0.012946437, + 0.013123094, + 0.0027933894, + -0.009343895, + 0.018170439, + -0.015444873, + -0.0029369232, + 0.005362803, + 0.048429266, + 0.0051293634, + -0.018448042, + 0.012454322, + 0.00031723347, + 0.0013541077, + -0.094839595, + -0.010649896, + 0.023848701, + 0.01253634, + 0.0032003315, + 0.0055646966, + -0.0070725908, + 0.03447336, + 0.019924391, + 0.018965395, + -0.0041356673, + -0.013539501, + 0.0060820496, + -0.026574265, + 0.010712988, + 0.0063186437, + 0.01115463, + -0.020302942, + -0.032656316, + 0.016706709, + -0.0027192566, + -0.006416436, + -0.013627829, + -0.008826543, + 0.0021482757, + -0.016492197, + -0.04209485, + 0.026498556, + 0.004918006, + 0.013362844, + 0.028694151, + 0.0020410197, + -0.008088369, + -0.0077035087, + -0.0021088433, + -0.0151041765, + 0.0100631425, + -0.008119915, + 0.01947013, + -0.019419655, + -0.0011601005, + -0.02339444, + 0.0017949617, + -0.041943427, + 0.011564727, + 0.00072042947, + -0.01731239, + 0.015583674, + -0.009911722, + -0.000672322, + -0.005375421, + 0.0108454805, + -0.0056593344, + 0.00010163695, + 0.025653126, + -0.01885183, + 0.014258747, + 0.019495366, + -0.046057016, + 0.007993731, + 0.0044385083, + 0.0057034986, + -0.00003728824, + 0.029097939, + -0.005457441, + -0.005653025, + -0.024668893, + -0.005533151, + 0.0073880497, + -0.03384244, + -0.018044256, + 0.033135813, + 0.0011246114, + 0.023684662, + -0.017791888, + -0.006201924, + -0.04461852, + 0.00077129726, + 0.020933859, + -0.02276352, + -0.01130605, + -0.013766631, + 0.007892784, + -0.026372373, + 0.0033375563, + 0.019747734, + 0.007507924, + 0.009817084, + 0.009552099, + 0.00031683914, + 0.018031636, + 0.023899173, + -0.0145742055, + -0.024517473, + -0.007394359, + 0.012012679, + -0.025817165, + 0.004918006, + 0.008132533, + -0.018183056, + -0.022713048, + -0.023142071, + -0.043028608, + 0.01916729, + -0.010914882, + -0.02292756, + 0.008403827, + -0.0144732585, + -0.0050063343, + -0.0140694715, + -0.021842381, + 0.023747753, + 0.0058233733, + 0.026599502, + -0.0030331383, + -0.013564737, + -0.0107445335, + 0.009741374, + -0.0136404475, + -0.0018028482, + 0.009028437, + -0.00016206707, + -0.010731915, + 0.002053638, + 0.011779239, + -0.0017208288, + -0.031066403, + 0.0036403968, + -0.006230315, + 0.010933809, + -0.03793079, + -0.024101067, + 0.006107286, + -0.025325049, + 0.0063501894, + 0.05070057, + -0.021602632, + -0.024214633, + -0.009280804, + 0.007861238, + 0.020782439, + -0.02617048, + -0.034448124, + -0.044139024, + 0.0016577371, + -0.02876986, + 0.0068454603, + 0.012359683, + 0.0009960618, + -0.0006502399, + 0.0073249578, + 0.0064511364, + 0.008365973, + 0.021665724, + -0.0065678563, + -0.008763451, + 0.0039810925, + -0.034220994, + -0.0022287178, + -0.0009810774, + 0.018599462, + -0.005116745, + 0.022410206, + -0.018763501, + 0.0056246337, + 0.0034668944, + 0.026372373, + -0.0043123243, + 0.017943308, + 0.019192526, + -0.0027097927, + -0.04146393, + 0.004533146, + -0.009047364, + 0.038687892, + -0.00041443427, + 0.024744604, + 0.00400002, + 0.014725626, + -0.011091539, + -0.013665684, + 0.030485958, + -0.0018343941, + 0.02407583, + -0.020605782, + 0.024113687, + 0.021287173, + 0.010176707, + -0.023142071, + 0.0015047394, + 0.0017854979, + 0.017438574, + -0.031949688, + 0.0024668893, + 0.013564737, + 0.010555258, + -0.009716137, + 0.004924315, + 0.008656195, + -0.0105931135, + 0.0030788798, + 0.06647352, + -0.011665674, + 0.0014881778, + -0.029552199, + -0.035028566, + -0.02685187, + 0.009451152, + -0.0068517695, + -0.0145742055, + 0.0058454555, + 0.0077981465, + 0.007041045, + -0.0017870752, + -0.0038896094, + 0.021968564, + -0.0077666007, + 0.017968545, + -0.01870041, + -0.011634128, + -0.004290242, + 0.032959156, + -0.010271345, + 0.008277644, + 0.0015938566, + -0.0071356827, + 0.002107266, + 0.0074448325, + 0.01776665, + -0.01130605, + 0.0016261912, + 0.011318669, + 0.011690911, + -0.0019274545, + -0.008492156, + 0.0016766646, + -0.020681491, + -0.0071735377, + 0.00977292, + 0.018776119, + 0.013602592, + 0.0424734, + 0.0062429337, + -0.041337747, + 0.015369163, + -0.00036534097, + 0.016630998, + 0.007930639, + 0.031646848, + 0.015167269, + -0.011287123, + -0.00024802962, + -0.0009692478, + 0.026902344, + 0.0014361271, + -0.03131877, + -0.021325028, + -0.021375502, + 0.026448082, + -0.031268295, + -0.0062366244, + -0.0066120205, + 0.017034786, + 0.022599483, + -0.0034290394, + -0.015457491, + -0.018107347, + 0.012984293, + -0.01770356, + -0.0056120157, + -0.006763441, + 0.006388045, + -0.0030709933, + -0.024668893, + 0.00043967098, + 0.004362798, + 0.0038801457, + -0.009457461, + -0.0043344065, + 0.001630923, + 0.011148321, + 0.002599382, + 0.033438653, + -0.008403827, + -0.006580475, + 0.0074195955, + 0.01123665, + -0.019142052, + -0.013135713, + -0.02147645 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.00089398306, + -0.00462804, + 0.0042670527, + -0.0047607105, + -0.017598893, + 0.003273567, + -0.024374345, + -0.025522098, + 0.0054086363, + -0.024312638, + -0.018931769, + 0.029347945, + -0.00042616535, + -0.018746648, + -0.011675002, + -0.019425428, + 0.024892684, + -0.012687, + 0.013587926, + -0.008262594, + -0.0074048643, + 0.017352065, + -0.029372627, + 0.011428174, + -0.007238255, + -0.007355498, + 0.02142474, + -0.012582098, + 0.03068082, + -0.008873495, + 0.008237911, + -0.024053467, + -0.0022800812, + -0.018117234, + -0.01122454, + -0.00754062, + 0.004739113, + -0.0063033905, + 0.00008147279, + -0.012150148, + 0.02151113, + -0.0002720902, + 0.001740143, + -0.01875899, + 0.0031362686, + -0.0052574533, + 0.007546791, + 0.010224883, + -0.0011215283, + 0.020894058, + -0.0047175153, + -0.0028323606, + -0.008151521, + -0.032852914, + 0.011496051, + -0.0066952314, + -0.007694888, + 0.033124425, + -0.022732932, + -0.013921144, + 0.0149825085, + 0.0007686403, + -0.00968186, + -0.0025608488, + -0.012384635, + -0.0065162806, + 0.017870406, + 0.0114405155, + -0.005812818, + 0.024756929, + 0.00745423, + -0.00065023964, + 0.013180658, + -0.0019345208, + -0.0083798375, + -0.023029128, + -0.029965017, + 0.003248884, + 0.016586896, + -0.003949261, + 0.010718541, + -0.0034093228, + -0.03127321, + 0.02655878, + 0.024682881, + 0.0031779208, + -0.044676013, + 0.0041528945, + 0.0017771674, + -0.0043842965, + 0.01165649, + 0.03314911, + 0.021992447, + -0.01636475, + -0.0024096663, + 0.0055845017, + 0.020474449, + 0.026237901, + -0.0015565641, + -0.023868345, + 0.01336578, + 0.0058745258, + -0.029718189, + 0.012322928, + -0.03616042, + -0.023596834, + 0.009064788, + 0.006744597, + 0.010132322, + -0.024300296, + -0.021807324, + 0.031075746, + 0.035987638, + -0.03675281, + 0.016846066, + 0.0029403481, + 0.012421659, + -0.009848469, + -0.02673156, + -0.0016167287, + 0.016154945, + 0.032877598, + -0.0011654948, + -0.014143291, + 0.024868002, + 0.0033445302, + -0.011347954, + -0.032359257, + 0.0068001337, + -0.0042824796, + -0.0018357892, + 0.0005187262, + -0.011415832, + 0.016006848, + -0.008972227, + 0.015044216, + -0.02853341, + 0.03872744, + -0.02133835, + -0.033469986, + 0.012150148, + 0.020338694, + -0.02132601, + 0.0056184405, + -0.00847857, + 0.020104205, + 0.012477196, + 0.011767563, + 0.0057233428, + -0.023436395, + 0.028434679, + -0.028829604, + 0.03956666, + 0.009496738, + 0.017512504, + 0.017450796, + 0.0057480256, + -0.01508124, + -0.02981692, + 0.013847096, + -0.00797257, + 0.011162832, + 0.024386685, + -0.0065779877, + 0.014686313, + 0.02365854, + 0.0115947835, + 0.0005488084, + -0.0043380163, + -0.0047144303, + -0.010132322, + 0.050698638, + -0.018536843, + -0.0021767216, + -0.0032612255, + 0.023510443, + 0.015007191, + 0.011551588, + -0.024374345, + -0.010471712, + -0.0039184075, + 0.0011222997, + 0.03386491, + 0.0052481974, + 0.017672943, + 0.013723682, + 0.012847439, + -0.01756187, + -0.0005977885, + -0.012020563, + 0.015179971, + 0.034852225, + 0.01062598, + -0.004362699, + -0.68993586, + -0.02211586, + 0.007546791, + -0.001740143, + 0.013415146, + 0.03386491, + 0.029347945, + 0.0034648594, + -0.016636262, + 0.0011747509, + -0.00736784, + 0.000043002205, + 0.0029372629, + -0.014291388, + 0.007787449, + -0.029347945, + -0.014994849, + 0.009817616, + -0.017500162, + 0.032532036, + -0.0117613925, + -0.019770987, + -0.021498788, + -0.0033291036, + 0.026015757, + 0.025299953, + 0.006991426, + 0.0030745612, + -0.0033167622, + 0.0023587577, + -0.012822757, + -0.0028863542, + -0.0040911874, + -0.008083643, + 0.036283836, + -0.013205341, + -0.01122454, + 0.031075746, + 0.012032905, + 0.031421307, + 0.013995193, + 0.014427143, + -0.00021192567, + -0.026805608, + -0.0029681164, + -0.011113467, + -0.0043318453, + -0.015636604, + 0.016673286, + 0.0029804579, + 0.008614325, + 0.0013591012, + 0.009885494, + 0.02571956, + 0.0050846734, + -0.006068903, + 0.025423367, + 0.015883433, + -0.026435364, + 0.00608433, + -0.0023834407, + 0.011434345, + -0.0010189401, + -0.021548154, + 0.0048039057, + 0.0053839535, + -0.0068803527, + 0.010897492, + 0.009299275, + 0.0042115166, + -0.016006848, + 0.003940005, + -0.010070615, + 0.0067816214, + 0.000030082261, + -0.005371612, + 0.041442554, + 0.012051417, + -0.00924991, + 0.019561183, + 0.018438112, + 0.007392523, + -0.020412741, + -0.008336643, + 0.020671912, + -0.025546782, + -0.033198476, + -0.013958169, + 0.017500162, + -0.010564273, + 0.016241336, + 0.029273896, + -0.021005131, + -0.0051309536, + -0.011094955, + 0.0064484025, + -0.0091511775, + 0.012421659, + 0.0077689365, + -0.0028863542, + 0.0046372963, + -0.030039065, + -0.010317444, + 0.009928688, + 0.019598207, + 0.01884538, + -0.021412399, + 0.002713574, + -0.003427835, + -0.023485761, + 0.028928336, + 0.011045589, + -0.013526218, + 0.03403769, + -0.012921488, + -0.025324635, + 0.015871093, + 0.014710996, + 0.022918055, + -0.04507094, + 0.016031532, + 0.006929719, + 0.00012987437, + 0.0114405155, + -0.0063620126, + -0.022560153, + 0.0029881713, + 0.008077472, + -0.015463824, + -0.029520726, + 0.02742268, + 0.0027922508, + 0.019178597, + 0.007016109, + 0.008645179, + -0.008435374, + 0.016648604, + 0.00063095614, + 0.011687344, + -0.017278016, + -0.017919771, + 0.014945484, + -0.018129576, + 0.008330472, + 0.0024852576, + -0.0066705486, + -0.03401301, + 0.0024405199, + -0.00062671374, + 0.0061151837, + -0.019252647, + -0.008805618, + -0.020585522, + -0.0044922843, + -0.011002394, + 0.0048902957, + -0.0226342, + -0.009712714, + -0.0039369194, + 0.006090501, + 0.021622203, + 0.014661631, + -0.011804587, + 0.0000605984, + -0.0112862475, + -0.011064101, + -0.0070901574, + 0.034062374, + -0.029545408, + -0.014587582, + 0.007923204, + -0.0140692415, + -0.013575585, + -0.008342814, + -0.019203281, + 0.00086235814, + -0.016253676, + -0.024473077, + -0.008540276, + -0.0028385313, + 0.009700372, + -0.005896123, + 0.0033815545, + -0.010348298, + 0.032186475, + 0.002978915, + 0.02571956, + 0.027644826, + -0.013118951, + 0.033815548, + -0.023238933, + -0.013069585, + -0.006615012, + 0.019647572, + -0.0031239272, + 0.00030390796, + -0.008885837, + -0.00033244755, + -0.009527592, + 0.014686313, + 0.01875899, + 0.012551244, + 0.022239275, + -0.020462109, + 0.027274583, + -0.005704831, + 0.008645179, + -0.019166257, + 0.017105237, + 0.034383252, + 0.0016367835, + -0.009033934, + -0.0048810397, + 0.004985942, + 0.007978741, + -0.0023464162, + 0.006892694, + 0.015278703, + 0.0030637626, + -0.019351378, + -0.02621322, + 0.031248527, + 0.03512374, + -0.040010948, + -0.019474793, + -0.010440858, + 0.017364407, + 0.013081927, + 0.0011678088, + -0.017055871, + -0.034210473, + 0.010082956, + 0.0016738079, + 0.0014192656, + -0.0034586887, + -0.00031875627, + 0.013674316, + -0.015315727, + 0.01901816, + -0.0056523797, + 0.015488507, + 0.02870619, + 0.020980448, + -0.018820696, + 0.017290358, + -0.011773734, + 0.022128202, + 0.011002394, + -0.009237568, + 0.022955079, + -0.013242366, + 0.0046403813, + -0.017031187, + -0.005220429, + -0.000036108355, + -0.022239275, + 0.04635445, + -0.0031779208, + 0.012174831, + 0.012785732, + 0.011884807, + 0.0042115166, + -0.00123183, + -0.008151521, + 0.000019440178, + 0.011162832, + -0.019203281, + -0.0034586887, + -0.00033726843, + -0.012748708, + -0.00030545064, + -0.016130263, + -0.0017864235, + -0.030088432, + 0.009077129, + 0.0024220077, + 0.010730882, + -0.003292079, + -0.000076218035, + 0.025065465, + 0.02168391, + -0.0152910445, + 0.017389089, + 0.02981692, + -0.019931426, + -0.027447363, + -0.037394565, + 0.0059855985, + -0.005621526, + 0.004430577, + 0.035025008, + 0.023029128, + 0.0181666, + 0.012896805, + 0.0008515594, + -0.003616042, + 0.019067526, + 0.005991769, + 0.018907087, + -0.014809729, + -0.005828245, + -0.015562556, + -0.032680135, + -0.0056431238, + 0.030433992, + 0.026830291, + 0.029347945, + 0.009811445, + 0.0042886506, + -0.0020286243, + -0.022498446, + -0.020474449, + -0.009749738, + -0.007386352, + -0.011347954, + -0.0018990391, + 0.008768593, + -0.009367153, + 0.024682881, + 0.016673286, + -0.0021921482, + -0.009811445, + 0.0037425417, + -0.004985942, + 0.07557898, + -0.0059269764, + 0.004695918, + 0.0019545755, + 0.007256767, + -0.013032561, + -0.024374345, + -0.02210352, + 0.0014084668, + -0.0022847091, + 0.0007239026, + -0.021943081, + -0.000053849173, + -0.010348298, + 0.0033105914, + -0.0017077468, + 0.0032828231, + -0.014032218, + 0.016006848, + -0.017722309, + -0.015871093, + -0.0027475131, + 0.001075248, + -0.017537186, + -0.0079170335, + -0.0056091845, + 0.017598893, + 0.005741855, + 0.020165913, + -0.020116547, + 0.0181666, + 0.012582098, + -0.015735336, + -0.016920114, + 0.006584158, + -0.013513877, + -0.0025253673, + -0.0037302002, + 0.011212198, + -0.005158722, + 0.015611921, + 0.008015766, + 0.0018728136, + -0.0065162806, + 0.0041004433, + -0.0054456606, + 0.00009458557, + 0.0037147736, + -0.013526218, + -0.02125196, + 0.02544805, + -0.0022245445, + -0.012687, + 0.0042207725, + -0.0026318121, + 0.014636948, + -0.028113801, + 0.0029079518, + -0.02107918, + -0.006584158, + -0.0011770648, + -0.0140692415, + -0.0008330472, + -0.00090709585, + -0.031766865, + -0.010212542, + 0.003119299, + -0.016303042, + -0.0071580354, + 0.00762701, + 0.0003278195, + -0.019573525, + -0.017080553, + 0.025670195, + 0.03435857, + 0.014254363, + 0.0018234478, + -0.017450796, + -0.001894411, + 0.023214249, + -0.003986285, + -0.007083987, + 0.0116071245, + -0.003350701, + -0.0062262565, + 0.006522451, + 0.013180658, + -0.020585522, + -0.012909146, + 0.014994849, + 0.02425093, + -0.0010073701, + 0.01833938, + -0.0068433285, + -0.016130263, + -0.0021042156, + 0.0016228994, + 0.00805279, + -0.01695714, + -0.0067260847, + 0.017981479, + -0.020634888, + -0.016611578, + -0.030656137, + 0.02347342, + -0.009120325, + 0.020499133, + -0.006121354, + -0.01669797, + 0.006436061, + -0.009502909, + -0.0065779877, + 0.0041775773, + -0.018154258, + 0.0032334574, + 0.012699342, + -0.01620431, + 0.024300296, + -0.0026626657, + -0.043096308, + 0.009428861, + -0.032063063, + 0.032186475, + 0.027521411, + 0.010150835, + 0.011422003, + -0.019511817, + -0.0061336956, + -0.015031874, + 0.011946514, + 0.009052446, + 0.018104892, + -0.010983882, + -0.010558102, + -0.009897835, + -0.015179971, + 0.01585875, + 0.020165913, + 0.006349671, + -0.010595126, + -0.023818979, + 0.024954392, + 0.02707712, + -0.011335613, + -0.02038806, + -0.014155632, + 0.01482207, + 0.02262186, + -0.027768241, + 0.017068211, + -0.0026333549, + -0.0028431593, + -0.02836063, + 0.0028693848, + 0.02312786, + 0.0020656486, + -0.025818292, + -0.0054610875, + 0.015229337, + 0.024781613, + 0.028409995, + -0.005297563, + 0.017327381, + -0.0096139815, + -0.008453887, + 0.009965713, + 0.0054641725, + 0.01568597, + -0.018438112, + 0.02406581, + 0.027052436, + -0.0038998951, + 0.003214945, + 0.013871779, + -0.0049304054, + 0.021980105, + 0.00013459883, + -0.0038998951, + -0.0005333816, + -0.036826856, + -0.0030622198, + 0.029027067, + -0.012736366, + 0.004146724, + -0.0006857213, + -0.003099244, + -0.0060966713, + -0.0044151503, + 0.005192661, + 0.020807669, + 0.015537873, + -0.019425428, + 0.011730539, + 0.0018758989, + -0.002883269, + -0.012970854, + -0.032013696, + -0.0009680317, + 0.015155288, + -0.0026009586, + 0.03616042, + 0.023152541, + 0.0073740105, + -0.017376747, + -0.0041004433, + 0.02947136, + 0.01490846, + -0.02947136, + 0.022350349, + -0.0045046257, + -0.019758645, + -0.016611578, + -0.020104205, + -0.039640706, + 0.002232258, + 0.005424063, + -0.039023634, + 0.017450796, + -0.01585875, + -0.016241336, + -0.001154696, + 0.01473568, + 0.015389776, + -0.029249214, + 0.022041813, + 0.00642989, + -0.026978388, + -0.021646887, + 0.01800616, + -0.009589299, + -0.0064052073, + 0.016784359, + 0.021042155, + -0.014957826, + -0.0016275274, + -0.007009938, + 0.0102187125, + 0.015722996, + -0.030063748, + -0.0012248879, + 0.012008221, + 0.015500849, + -0.021992447, + 0.0052667097, + 0.0010305103, + 0.006152208, + -0.014538216, + -0.015389776, + 0.0074048643, + -0.013057244, + -0.02742268, + 0.019499475, + -0.02665751, + -0.0020671913, + 0.00874391, + -0.026435364, + 0.008768593, + -0.019511817, + -0.007738083, + -0.004695918, + -0.018672599, + 0.033889595, + 0.014933143, + 0.030113114, + 0.007324645, + -0.011181345, + -0.0059424033, + -0.009996567, + 0.011662661, + 0.028558092, + -0.0115701, + -0.009996567, + -0.015871093, + 0.035000324, + 0.0076516927, + 0.0058004768, + 0.0023541297, + -0.009552275, + -0.026978388, + -0.0007929375, + 0.020128889, + -0.011434345, + -0.024127515, + 0.018462794, + -0.030532723, + -0.0009965713, + -0.029940333, + 0.003582103, + 0.015895775, + -0.0019283501, + -0.019339036, + 0.003788822, + -0.01208844, + 0.0052142586, + 0.0060874154, + -0.009620152, + 0.018277673, + 0.010261907, + -0.024090491, + 0.012316757, + -0.009262251, + 0.036925588, + 0.00950908, + 0.011366466, + 0.020881716, + -0.01824065, + 0.025250586, + -0.00079910824, + -0.01851216, + -0.009157348, + 0.022214592, + -0.007694888, + 0.009453543, + -0.01671031, + 0.0050599906, + 0.01748782, + 0.024756929, + -0.005766538, + 0.00086081546, + 0.012699342, + -0.01669797, + -0.0066890605, + 0.021906056, + -0.013242366, + -0.0043441867, + -0.0088303005, + -0.012736366, + 0.002724373, + 0.0010567359, + -0.018129576, + -0.020857034, + 0.010878979, + -0.0035018837, + -0.02099279, + -0.007164206, + -0.020104205, + -0.01208227, + 0.012612952, + 0.008811789, + 0.0071271816, + 0.006460744, + 0.025818292, + 0.0006012595, + 0.01620431, + -0.029101117, + 0.0069790846, + 0.0077689365, + 0.00668289, + -0.014254363, + -0.016340068, + 0.0008322759, + 0.010274249, + 0.025768926, + -0.03307506, + -0.017709967, + 0.0046897475, + -0.022523127, + 0.0034000669, + -0.0014570613, + 0.011977368, + 0.020215278, + -0.010033591, + -0.011773734, + 0.0033105914, + 0.004720601, + 0.0074665714, + -0.0019345208, + 0.010996223, + -0.0018990391, + -0.002030167, + 0.011675002, + 0.010866638, + -0.017426113, + -0.018919427, + 0.0076516927, + 0.014427143, + 0.033124425, + 0.019005818, + -0.022436738, + 0.033445302, + -0.014883777, + 0.004038736, + 0.017919771, + 0.02870619, + 0.0020224536, + -0.008552618, + -0.02579361, + -0.0069544017, + 0.013982852, + -0.0060781594, + -0.014488851, + 0.0028693848, + 0.0134521695, + -0.013378121, + -0.016858408, + -0.0030884454, + -0.024645856, + -0.017290358, + -0.002540794, + 0.009101812, + -0.025744244, + 0.013686657, + 0.010311273, + -0.0028092202, + -0.00552588, + -0.008669862, + 0.0013459884, + 0.005707916, + -0.0100644445, + -0.0028308178, + -0.0017771674, + -0.008034278, + 0.0014439485, + -0.023954736, + 0.003341445, + 0.017092895, + -0.0143654365, + -0.03751798, + 0.031001698, + -0.00951525, + -0.018549185, + 0.013094268, + -0.020375717, + -0.021622203, + 0.013822413, + -0.0063805245, + -0.0028431593, + -0.010342127, + 0.008435374, + 0.0015149118, + -0.005004454, + -0.02373259, + -0.001538052, + 0.028212532, + -0.006744597, + 0.03147067, + 0.22056621, + 0.002096502, + 0.0037672247, + 0.027101804, + -0.017635917, + 0.033445302, + 0.0062108296, + -0.010249566, + -0.010582785, + 0.012045246, + 0.009194373, + 0.01191566, + -0.028089117, + 0.0032427134, + 0.013217682, + -0.007941716, + -0.012847439, + -0.015957482, + -0.022066494, + -0.028508727, + -0.016451139, + 0.0014177229, + -0.0116071245, + 0.0025917024, + 0.012069928, + -0.000014125164, + 0.0037086029, + 0.025571464, + 0.012921488, + -0.0021366118, + -0.01627836, + -0.00951525, + 0.015821727, + -0.0067137433, + -0.011082613, + -0.003915322, + 0.00057966204, + 0.014957826, + 0.013513877, + 0.023325322, + 0.020597864, + 0.009274593, + 0.015303385, + -0.026805608, + -0.016080897, + 0.006127525, + -0.016870748, + -0.01740143, + 0.0030406222, + 0.0022091179, + -0.02014123, + -0.024287954, + 0.017413773, + 0.04823035, + -0.004223858, + 0.005390124, + 0.027101804, + 0.005760367, + 0.0074912542, + -0.004257797, + -0.022325665, + 0.008731569, + -0.005982513, + 0.011650319, + -0.0016738079, + 0.015266362, + -0.02184435, + 0.01422968, + 0.011958855, + -0.016056214, + 0.02270825, + -0.008935203, + 0.015204654, + -0.0021288984, + 0.0034741154, + -0.0031686649, + 0.0106815165, + -0.004334931, + 0.032063063, + 0.014316071, + -0.0026379828, + 0.008355155, + 0.003230372, + -0.0032365427, + -0.0062509393, + -0.021646887, + 0.0039523463, + 0.011545417, + 0.028311264, + 0.0016861493, + 0.010638322, + -0.005967086, + -0.010576614, + -0.027620142, + 0.008262594, + 0.025966391, + 0.0055752457, + 0.023596834, + 0.009632494, + 0.0021474105, + -0.028138483, + -0.020536156, + 0.010514907, + -0.0007084758, + -0.0067199143, + 0.014044559, + 0.0041960897, + 0.004763796, + 0.020696595, + -0.024399027, + 0.020351036, + -0.024584148, + 0.022300983, + -0.0072135716, + 0.026410682, + -0.0057788794, + 0.005056905, + -0.02433732, + -0.0034864568, + 0.0039523463, + -0.0045601623, + -0.001086818, + 0.00711484, + -0.008645179, + -0.015969824, + -0.021523472, + -0.031914964, + 0.010298932, + -0.0122118555, + -0.020684253, + 0.003264311, + -0.015661288, + 0.04475006, + -0.0021304411, + -0.008441545, + 0.016191969, + -0.0053345873, + -0.01182927, + 0.006007196, + -0.004140553, + 0.01646348, + 0.0009742024, + 0.005680148, + -0.009546104, + -0.013550902, + -0.009194373, + -0.0054209777, + -0.015994506, + -0.043392505, + -0.008170034, + -0.01988206, + -0.010786419, + -0.019598207, + -0.009725055, + 0.012002051, + -0.014994849, + -0.0363332, + 0.0019345208, + 0.0028909824, + 0.030878283, + -0.009737397, + 0.020276986, + 0.013230024, + -0.009996567, + -0.008725398, + -0.018462794, + -0.15560088, + 0.019388402, + 0.0050846734, + -0.007904693, + -0.009836128, + -0.011724368, + 0.018796014, + 0.015019532, + -0.019339036, + 0.03016248, + 0.027546095, + -0.016722651, + -0.03727115, + -0.012489538, + 0.012810415, + -0.00027131886, + -0.0021258132, + 0.023522785, + 0.0035759322, + 0.008355155, + 0.0049211495, + -0.028780239, + 0.020116547, + 0.0011153576, + -0.011366466, + 0.0029372629, + -0.0031810063, + 0.027792923, + -0.015105923, + -0.0181666, + -0.007670205, + -0.014513534, + 0.011428174, + 0.029841602, + -0.0037980783, + -0.00024200793, + -0.023251273, + 0.0045138816, + -0.017981479, + 0.019770987, + -0.015611921, + 0.009021593, + -0.000009364549, + 0.0047853934, + -0.010039762, + 0.031643454, + 0.015797043, + 0.012822757, + -0.0021798068, + -0.013007878, + 0.0061645494, + -0.015624263, + -0.0114528565, + -0.017179284, + 0.046329767, + 0.03240862, + 0.0058251596, + 0.021449422, + 0.011699685, + 0.019203281, + -0.016241336, + -0.0036407248, + 0.018388746, + 0.0021690081, + 0.015611921, + -0.024028784, + 0.018203624, + 0.006676719, + -0.029101117, + 0.015241679, + -0.0034926275, + -0.009033934, + -0.012921488, + -0.021967763, + 0.0016290701, + 0.0055752457, + -0.020659572, + 0.015130606, + -0.006608841, + -0.026879657, + -0.0013668145, + 0.045712695, + -0.0009680317, + -0.018438112, + -0.0076455222, + 0.012748708, + 0.017981479, + -0.008410691, + -0.013155975, + -0.005735684, + 0.00014520476, + -0.043738063, + 0.023325322, + -0.037246466, + 0.016549872, + 0.010872809, + -0.016944798, + -0.0011894063, + -0.0029125798, + -0.0042732237, + -0.0017092895, + -0.0031285551, + -0.024275612, + -0.0019036671, + 0.010126152, + 0.021474106, + 0.017956795, + 0.01954884, + 0.04114636, + 0.025090149, + -0.008935203, + 0.015229337, + 0.013353438, + 0.028039752, + -0.0030344515, + 0.0047761374, + 0.023461077, + -0.0091511775, + -0.0076455222, + 0.01464929, + 0.03914705, + -0.01996845, + 0.010440858, + 0.014513534, + 0.009990396, + -0.020770645, + -0.09379494, + -0.027373314, + 0.0034556033, + 0.0012865951, + 0.007448059, + 0.0217703, + -0.0054364046, + 0.0115947835, + -0.004732942, + 0.014994849, + -0.00685567, + -0.020869376, + -0.017919771, + -0.012785732, + 0.025040783, + 0.0033599571, + 0.024004102, + -0.011724368, + -0.03830783, + 0.010089127, + -0.020178255, + -0.00951525, + -0.021153228, + 0.006152208, + -0.0014161803, + -0.010601297, + -0.04050461, + 0.016636262, + 0.010891321, + 0.0065101096, + -0.0041436385, + 0.010039762, + 0.01594514, + -0.022584835, + -0.014081583, + -0.013834755, + -0.0140569005, + -0.013513877, + 0.011175174, + -0.03418579, + -0.0018033929, + 0.00008282263, + 0.004393553, + -0.027348632, + -0.018055527, + 0.00847857, + -0.0024405199, + 0.020795327, + 0.0017200882, + -0.00968186, + -0.019215623, + 0.017253334, + -0.0030822747, + 0.0034432618, + 0.030656137, + -0.024522442, + 0.02082001, + 0.005535136, + -0.031569403, + 0.011070272, + -0.0015071984, + 0.00924991, + 0.018487478, + 0.02312786, + -0.017500162, + -0.006590329, + -0.016599238, + 0.0123661235, + 0.019647572, + -0.029890968, + -0.009286934, + 0.010095298, + -0.020289328, + 0.004779223, + -0.010514907, + 0.00056539226, + -0.03050804, + -0.015525532, + 0.020894058, + -0.008151521, + -0.009219056, + -0.007898522, + 0.0029295494, + -0.035469297, + -0.018055527, + 0.0250161, + 0.0053438437, + -0.027546095, + -0.0046156985, + -0.005896123, + 0.0012326014, + 0.031692818, + 0.02347342, + -0.033198476, + -0.026706876, + 0.023559809, + 0.000008370244, + 0.017092895, + -0.015463824, + -0.011835441, + -0.00745423, + -0.018610891, + -0.032951646, + 0.0167967, + -0.009743567, + -0.029150482, + 0.0025809037, + -0.008774764, + 0.009398007, + -0.018833037, + -0.008620496, + 0.022288641, + -0.021461764, + 0.0019391488, + 0.0022384287, + -0.009638665, + -0.0344573, + 0.020931082, + -0.00084307464, + 0.007293791, + -0.00736784, + -0.0066890605, + -0.005655465, + 0.012785732, + -0.00823174, + -0.008768593, + -0.010582785, + 0.004507711, + 0.006254025, + 0.02880492, + -0.019215623, + -0.018018503, + 0.027447363, + -0.012909146, + 0.011175174, + 0.02579361, + -0.02056084, + -0.024756929, + 0.0017000334, + 0.01054576, + 0.008281106, + -0.02406581, + -0.00720123, + -0.0317175, + 0.009206714, + -0.009953371, + -0.010101469, + 0.001460918, + -0.023707906, + -0.0044213207, + 0.0022785384, + 0.017524846, + 0.0137483645, + 0.023868345, + -0.028730873, + -0.007318474, + -0.0062509393, + -0.03102638, + 0.0008723856, + 0.0013297902, + -0.006701402, + -0.015821727, + 0.02665751, + -0.0067569385, + 0.001011998, + -0.014846752, + 0.020696595, + -0.0037949928, + -0.009089471, + -0.0039585168, + -0.004276309, + -0.02511483, + -0.017759332, + 0.008348985, + 0.019055184, + 0.0051463805, + 0.021918397, + -0.015537873, + -0.0072197425, + -0.021634545, + -0.009410348, + 0.007269108, + 0.002695062, + -0.006349671, + -0.035000324, + -0.00094334886, + 0.03699964, + 0.019561183, + -0.013847096, + 0.0007624696, + -0.0021875203, + -0.00075398484, + -0.039048318, + 0.007170377, + -0.0018280759, + -0.0008176204, + -0.013958169, + -0.0046588937, + -0.006272537, + -0.008367497, + 0.004810076, + 0.060522422, + 0.009058617, + 0.0031424393, + -0.025398685, + -0.03418579, + -0.0041498095, + 0.015179971, + -0.001009684, + -0.0023063067, + -0.0126746595, + -0.023448735, + 0.019993134, + -0.022905713, + -0.006374354, + 0.020523814, + 0.003119299, + 0.00066836615, + -0.01721631, + -0.01285978, + -0.024300296, + 0.03857934, + -0.008207058, + 0.02700307, + -0.00968186, + 0.016117921, + 0.02887897, + 0.002729001, + 0.0126746595, + -0.010638322, + 0.010144664, + 0.0044953697, + 0.026929023, + 0.0006228571, + 0.0015642776, + -0.0017231735, + -0.036456615, + 0.000027286153, + 0.011644149, + 0.015871093, + -0.0060565616, + 0.044700697, + -0.0012611409, + -0.04072675, + 0.02766951, + -0.0075961566, + -0.0006085873, + 0.024090491, + -0.0053932094, + -0.013575585, + -0.008095984, + 0.0005711773, + 0.01173671, + 0.018055527, + 0.00565855, + -0.025262928, + -0.0045601623, + -0.020782985, + 0.0075035957, + -0.033692133, + -0.0209064, + 0.014081583, + 0.013180658, + 0.015216996, + 0.0062355124, + 0.0067877923, + -0.017500162, + 0.017858064, + -0.0023541297, + 0.006368183, + -0.0011153576, + 0.0039369194, + 0.014587582, + -0.042355824, + -0.013020219, + 0.0028724703, + 0.0005954745, + -0.018018503, + -0.021227278, + 0.008632838, + 0.02031401, + 0.0004061105, + 0.041417874, + -0.016253676, + -0.03203838, + 0.014303729, + -0.0027274583, + -0.018314697, + -0.019092208, + -0.01714226 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + 0.013982197, + -0.018476475, + -0.005729884, + -0.023803027, + 0.0031706425, + 0.009507126, + -0.044174526, + -0.0043758387, + 0.01791309, + -0.02065319, + 0.010851568, + 0.010934795, + -0.016222933, + 0.019359965, + -0.024520062, + -0.0053873714, + 0.03178005, + -0.0010819557, + 0.010729928, + -0.022381758, + -0.045480553, + 0.0045486954, + -0.020665996, + 0.017695418, + -0.016619865, + 0.0010731529, + 0.015685158, + -0.015185793, + 0.026453499, + 0.010755536, + 0.02481456, + -0.012765798, + 0.017285684, + -0.037337076, + -0.040947862, + 0.017093621, + -0.0021639115, + 0.010064109, + -0.0013468429, + -0.020627582, + 0.008495593, + 0.0055666305, + -0.003665205, + -0.0038092525, + -0.007996229, + 0.013559658, + 0.013918176, + 0.010256172, + -0.008854112, + 0.010320193, + -0.0048271874, + 0.030858146, + -0.0041229557, + -0.0043150187, + 0.01831002, + -0.025621224, + -0.00086028286, + 0.01782346, + -0.020947687, + -0.016709493, + 0.012714581, + -0.0020694805, + 0.005134488, + -0.0097312, + -0.0075928965, + 0.010204955, + -0.0059027406, + -0.004638325, + -0.0038860778, + 0.0057522915, + 0.02932164, + 0.029372858, + 0.00069662905, + 0.0151473805, + 0.0032106556, + 0.013726113, + -0.0042541986, + -0.0020390705, + -0.0048303884, + -0.017503355, + 0.0042894105, + -0.012977066, + -0.026171805, + -0.0008050647, + 0.027196143, + 0.011869502, + -0.002901754, + 0.0011355734, + -0.031088622, + -0.012035958, + -0.005256128, + 0.029424075, + 0.032471478, + -0.0012075971, + -0.013598071, + 0.016427802, + 0.022368954, + 0.020000177, + 0.005729884, + -0.029065557, + 0.0048976103, + 0.014545582, + -0.03836141, + 0.0026472704, + -0.036824908, + -0.015531506, + 0.015557115, + -0.012573734, + 0.027477834, + -0.03211296, + -0.020269064, + 0.0089885555, + 0.011082044, + -0.020461127, + -0.0070487177, + -0.020025784, + 0.017157642, + -0.0084315725, + -0.017861873, + -0.015697962, + 0.014558387, + 0.037337076, + 0.016824732, + -0.023226837, + 0.027247358, + 0.0114149535, + -0.01256093, + -0.013329183, + 0.0060243807, + -0.0002958973, + 0.011037229, + 0.007829774, + 0.01009612, + 0.017554572, + -0.0070295115, + 0.010179347, + -0.009058978, + 0.03157518, + 0.007855383, + -0.029961852, + 0.01523701, + 0.02834852, + -0.0064757294, + -0.0077337427, + -0.004628722, + 0.030550845, + 0.02025626, + -0.016466213, + 0.0021383031, + 0.00906538, + 0.0049616313, + -0.024507258, + 0.019897742, + 0.013546854, + 0.022983557, + 0.0033098883, + -0.011645429, + -0.0093662795, + -0.020115415, + -0.016094891, + -0.0067926333, + 0.0061332164, + 0.028655821, + 0.002460009, + 0.030730104, + 0.019718483, + 0.009711993, + 0.019001449, + 0.0012700176, + 0.0035115546, + -0.001566115, + 0.035877395, + -0.010569875, + 0.014929709, + 0.0047215526, + 0.010544267, + 0.012048761, + 0.003950099, + -0.014251086, + 0.0031978514, + -0.019001449, + -0.0023671784, + 0.013406008, + 0.005432186, + 0.0010955603, + -0.009756808, + 0.010441833, + -0.020858059, + 0.012208814, + -0.013149924, + 0.014609603, + 0.018348433, + 0.0051024775, + -0.01654304, + -0.6912225, + -0.040282045, + 0.0114789745, + -0.0017381716, + 0.0023895856, + 0.03779803, + 0.005845122, + 0.012580137, + 0.0074264416, + -0.026069371, + 0.0063572903, + 0.008860514, + 0.013092305, + -0.0029545715, + 0.007080728, + -0.030192327, + -0.0099872835, + 0.015749179, + -0.0035819777, + 0.014327911, + -0.009071783, + -0.004180575, + -0.028655821, + -0.0047919755, + 0.020153826, + 0.018258803, + 0.010998816, + -0.0097376015, + -0.0056914715, + 0.020691603, + -0.0045358916, + -0.0046095154, + -0.017951502, + -0.020128218, + 0.038335804, + 0.0019030257, + -0.015172989, + 0.008194694, + -0.008041044, + 0.025185881, + -0.0027897172, + 0.015774786, + -0.0015805197, + -0.014686429, + -0.010627494, + -0.005720281, + 0.0057010744, + -0.0014436747, + 0.033214122, + -0.00071423483, + 0.020819645, + 0.003068209, + 0.023700593, + -0.005480202, + 0.0148400795, + -0.0010651503, + 0.030192327, + 0.0151473805, + 0.0063092746, + -0.007195966, + -0.019564833, + 0.012733787, + -0.029577725, + -0.009654375, + -0.012516115, + 0.00413576, + -0.032164175, + -0.017631397, + -0.0015269021, + -0.0019542426, + 0.006078799, + 0.007458452, + -0.011178075, + 0.029859418, + 0.01651743, + 0.0022791494, + 0.026120588, + -0.01788748, + 0.021395834, + 0.012554528, + 0.0018069941, + 0.003918088, + -0.017324096, + -0.009142206, + 0.027759528, + -0.021254988, + -0.029526507, + -0.02131901, + 0.019475203, + -0.011395747, + 0.033956766, + 0.019641658, + 0.00074744574, + -0.0029673756, + -0.006274063, + 0.014635212, + -0.014443149, + 0.0005897939, + 0.0031306294, + -0.0058003073, + 0.014468757, + -0.035288405, + -0.0016821531, + -0.0015725171, + 0.039846703, + 0.0045230873, + -0.026146198, + 0.033470206, + 0.019808114, + -0.017503355, + 0.019180706, + -0.011747863, + -0.0246353, + 0.0062484546, + 0.0101729445, + -0.024750538, + 0.046223197, + 0.009084587, + 0.011594213, + -0.003205854, + 0.009379084, + 0.0065525547, + -0.00052177155, + -0.014622408, + 0.0006009976, + -0.004820785, + 0.00044174524, + -0.016107697, + -0.027913177, + -0.0037356282, + 0.015531506, + -0.009475116, + 0.009968078, + 0.0053809695, + 0.0030345977, + -0.003841263, + 0.005976365, + -0.017938698, + 0.02578768, + -0.029961852, + -0.025736462, + -0.01073633, + -0.013879764, + -0.013585267, + -0.00032290618, + -0.009103794, + -0.03093497, + -0.0077721556, + -0.019231923, + 0.021447051, + -0.033700682, + -0.021639114, + -0.017144836, + 0.0021879193, + -0.006405306, + -0.0040877443, + -0.022817103, + 0.003543565, + -0.0017749836, + 0.02530112, + 0.008457181, + 0.003469941, + -0.01548029, + -0.00013364395, + -0.00906538, + -0.040077176, + -0.009411095, + 0.037337076, + -0.014481561, + -0.022343347, + -0.006213243, + -0.002821728, + 0.0007470456, + -0.023700593, + -0.024891384, + -0.011773471, + -0.025749266, + -0.023303661, + 0.00018245999, + -0.016248543, + 0.014929709, + 0.010268976, + 0.005598641, + -0.01921912, + 0.035288405, + -0.0067862314, + 0.019795308, + 0.03567253, + -0.0020822845, + 0.01937277, + -0.008405964, + -0.0072791935, + -0.007925806, + -0.011382943, + 0.016094891, + -0.0023031572, + -0.0036524008, + 0.006181232, + 0.0006033984, + -0.00037952478, + 0.013559658, + -0.0044174525, + 0.019078273, + -0.02040991, + 0.01970568, + -0.013265162, + 0.01256093, + -0.002040671, + 0.015505899, + 0.03613348, + 0.002983381, + -0.02259943, + 0.0027513045, + 0.0018566104, + 0.017785048, + -0.00103394, + -0.012330454, + 0.0147120375, + -0.010864372, + -0.014699233, + -0.005419382, + 0.0085532125, + 0.043841615, + -0.012746591, + -0.014558387, + -0.013341987, + 0.03925771, + 0.011357334, + 0.0023879851, + -0.008137075, + -0.028758256, + -0.0025624426, + -0.01243929, + 0.00018986243, + -0.016824732, + -0.0049168165, + 0.00927665, + -0.03129349, + 0.014430345, + 0.011440562, + 0.010640299, + 0.0422795, + 0.032036133, + -0.017925894, + 0.022548214, + -0.020448323, + 0.026299847, + 0.015621136, + -0.0206788, + 0.01426389, + -0.018911818, + -0.010185749, + -0.017644202, + 0.015672352, + 0.022676256, + 0.0028569393, + 0.039488185, + 0.003354703, + 0.0270681, + 0.01749055, + -0.016389389, + -0.011101251, + 0.01475045, + -0.017349705, + 0.003841263, + -0.0040557333, + -0.008700461, + 0.021639114, + -0.007311204, + -0.013393204, + -0.004823986, + 0.00094911206, + 0.016978383, + -0.003908485, + 0.0018149968, + -0.022215305, + -0.011626223, + 0.0031338304, + 0.022164088, + 0.010845166, + 0.00095231313, + -0.021088533, + 0.009199825, + 0.012087175, + 0.0089885555, + -0.021178164, + -0.025646832, + 0.021459855, + -0.0062452536, + 0.011216488, + 0.023162816, + 0.023777418, + 0.01402061, + 0.003482745, + -0.0008050647, + -0.02536514, + 0.0047759702, + -0.010134532, + 0.0033995179, + -0.002375181, + -0.00939829, + -0.015685158, + -0.026555931, + 0.0016949573, + 0.0011403749, + 0.027733918, + -0.009468714, + 0.006837448, + -0.02609498, + -0.011421355, + 0.008745275, + -0.0058131116, + 0.0014132647, + 0.0032490683, + -0.019027056, + -0.0012388073, + -0.029065557, + -0.010550669, + 0.024788952, + 0.022061653, + 0.016875949, + -0.01928314, + -0.01158781, + -0.0032490683, + 0.0684257, + 0.0055826358, + -0.009161413, + 0.010717124, + 0.010192151, + -0.016005263, + -0.016261347, + 0.0043182196, + -0.00802824, + -0.0028265293, + 0.0020038588, + 0.0015381058, + 0.007375225, + 0.0064149094, + -0.00031870478, + -0.014724841, + 0.008706863, + 0.00018716154, + 0.030345978, + -0.02162631, + -0.0047855736, + 0.010134532, + -0.009455909, + -0.0024664109, + -0.0061204126, + 0.0077145365, + 0.022189695, + 0.016402192, + 0.015493094, + -0.022176892, + 0.008642842, + 0.020537952, + 0.00650774, + -0.0121639995, + -0.009558342, + -0.01289384, + -0.0032202587, + 0.0047951764, + 0.00696549, + -0.02122938, + 0.015992459, + 0.0040877443, + 0.0065173428, + -0.021050122, + -0.0066197766, + 0.007291998, + -0.011549397, + 0.013457225, + -0.020064197, + 0.0030586056, + 0.022727473, + -0.010192151, + -0.01265056, + -0.007074326, + 0.011703048, + 0.0149041, + -0.012624951, + -0.008758079, + -0.008444376, + -0.018476475, + 0.004571103, + -0.017311292, + -0.008258715, + -0.0031050208, + -0.0093662795, + -0.013482833, + -0.004468669, + 0.004145363, + -0.011363736, + 0.0134700285, + 0.0013700505, + -0.01766981, + -0.013802938, + -0.0013628481, + 0.030909363, + 0.02627424, + 0.006779829, + -0.022868318, + 0.010499452, + 0.046760976, + -0.0020294674, + -0.0076377112, + -0.0142126735, + -0.0020134621, + 0.005483403, + 0.0008874918, + 0.033290945, + -0.013598071, + 0.003409121, + 0.002317562, + 0.031370316, + 0.0057522915, + 0.0072279763, + -0.0017877878, + -0.007381627, + -0.012087175, + 0.022164088, + 0.004820785, + -0.014302302, + -0.01548029, + 0.0033258935, + -0.023495726, + -0.0058131116, + 0.0009211029, + 0.007624907, + 0.01256093, + 0.025006622, + 0.0056914715, + -0.021254988, + 0.014635212, + 0.026812015, + -0.004551897, + 0.0024584082, + -0.008457181, + 0.0029177594, + 0.010550669, + -0.0016565446, + 0.013457225, + 0.0022599432, + -0.029654551, + 0.005044859, + -0.04437939, + 0.02366218, + 0.0010467442, + -0.0033418988, + -0.001234806, + 0.01161982, + -0.021088533, + -0.0038092525, + -0.00027769132, + -0.013943785, + 0.019628854, + -0.028630214, + -0.02658154, + -0.031703223, + -0.018937428, + 0.009948871, + 0.0069270777, + -0.0023975882, + -0.015006534, + -0.025083447, + 0.017785048, + 0.018258803, + -0.00016935568, + -0.031037405, + -0.022240913, + -0.0065813637, + 0.009539137, + 0.0028297305, + 0.012554528, + -0.0041709715, + 0.013572463, + -0.012945056, + 0.02186959, + 0.0034635388, + -0.012381671, + -0.026043763, + -0.017695418, + 0.018975839, + 0.010576277, + 0.033751898, + -0.006017979, + 0.0011875905, + 0.008886122, + -0.006779829, + -0.008169086, + -0.007925806, + -0.0134700285, + -0.019411182, + 0.013495637, + 0.014724841, + 0.0051568956, + 0.017208857, + -0.011818286, + 0.009654375, + 0.0051985094, + -0.0055346196, + -0.0143407155, + -0.028425347, + -0.022855515, + 0.0014692831, + 0.0015725171, + -0.019846525, + -0.012817014, + 0.010000088, + -0.0077145365, + 0.023623768, + 0.012938654, + 0.0025352335, + -0.0076953303, + 0.028220478, + 0.0068694586, + 0.03014111, + -0.009379084, + 0.0013644486, + 0.00019456397, + -0.025698049, + -0.0009363079, + 0.009097391, + 0.0130346855, + 0.013508442, + 0.0062068407, + 0.0019030257, + -0.020781232, + 0.016235739, + 0.017785048, + 0.021754352, + 0.0147760585, + -0.0026392678, + -0.023879852, + -0.023777418, + -0.03516036, + -0.024584083, + -0.032317825, + 0.003297084, + 0.011639027, + -0.0343665, + 0.021293402, + -0.0013892568, + -0.034929886, + 0.014814471, + 0.010140934, + 0.024007894, + -0.011735058, + 0.005621048, + 0.005496207, + -0.011062837, + -0.013329183, + -0.0008022638, + -0.016645472, + -0.004206183, + 0.033956766, + 0.01021776, + -0.003540364, + 0.017592985, + 0.005685069, + 0.00022887526, + 0.025915721, + -0.017708223, + -0.018079545, + 0.0075352774, + 0.015493094, + -0.021754352, + 0.019987373, + -0.014135848, + 0.013713309, + -0.024763342, + -0.029270424, + -0.004990441, + -0.00024067913, + -0.018604517, + 0.003260272, + -0.038207762, + 0.0041293576, + 0.006363692, + -0.007311204, + -0.0075288755, + -0.0048431926, + -0.01766981, + -0.018706951, + -0.006280465, + 0.0054065776, + -0.012016751, + 0.022663452, + 0.0018117958, + 0.0024744135, + -0.031728834, + -0.0028761458, + 0.004574304, + 0.027426617, + -0.0016309363, + -0.006219645, + -0.010749134, + 0.018002719, + 0.0298082, + -0.0058003073, + -0.0054513924, + -0.001447676, + -0.0054673976, + 0.0058195135, + 0.017746635, + -0.012644158, + -0.008930936, + 0.0139053725, + -0.018899014, + 0.005185705, + -0.015697962, + -0.019091077, + -0.006040386, + -0.01450717, + -0.014251086, + -0.0012083973, + 0.011536594, + 0.0027865162, + 0.0067350143, + -0.02503223, + 0.031242272, + 0.011318922, + -0.021843983, + 0.015377856, + -0.0051024775, + 0.009961676, + 0.0026728788, + 0.015224205, + 0.0059443545, + -0.019718483, + 0.03449454, + -0.009980882, + -0.028066829, + -0.015493094, + 0.006411708, + -0.008930936, + -0.0005221717, + 0.0000951813, + 0.002773712, + -0.013239553, + 0.02624863, + -0.0014812871, + -0.0015861215, + -0.0040013157, + -0.0234189, + -0.015313835, + 0.0026312652, + -0.02019224, + -0.0025112256, + 0.014878492, + -0.0018838194, + 0.008783688, + -0.040128395, + -0.0059443545, + -0.03129349, + 0.01037141, + -0.009660777, + -0.012176803, + -0.027247358, + 0.0011203684, + -0.008527604, + -0.004218987, + -0.009270248, + 0.0013148324, + -0.0058835344, + 0.012304846, + -0.007291998, + 0.014443149, + 0.0025832495, + -0.0008882921, + -0.012266433, + -0.0014036616, + -0.015249814, + 0.0041901777, + 0.0045839073, + -0.017132033, + 0.014161456, + -0.031395923, + -0.030345978, + 0.007266389, + -0.010198553, + -0.0011355734, + 0.011325324, + 0.014545582, + 0.03288121, + -0.0029545715, + -0.0016469415, + 0.022420172, + -0.0016901557, + -0.00083867577, + -0.038668714, + -0.018489279, + 0.0032426661, + -0.017785048, + 0.0041293576, + -0.0034763431, + -0.009942469, + -0.022522606, + 0.008277922, + 0.0034219252, + 0.007516071, + -0.0081818905, + 0.0069718924, + 0.011703048, + -0.001241208, + 0.023098795, + 0.032343436, + 0.013700505, + 0.005662662, + -0.010992414, + -0.010441833, + 0.010742732, + 0.036824908, + -0.0007582493, + -0.00068542536, + -0.0034219252, + -0.011805481, + 0.00988485, + -0.010723526, + 0.014238281, + 0.0054481914, + 0.011094848, + 0.005185705, + -0.0090525765, + -0.0049616313, + 0.017388117, + 0.0014820873, + -0.007202368, + -0.018758168, + 0.013764526, + -0.014443149, + -0.008476387, + 0.009142206, + -0.024366412, + -0.0065429513, + -0.021908004, + 0.00915501, + -0.042049024, + -0.0112292925, + -0.023610963, + -0.004641526, + -0.033828724, + 0.024609692, + 0.01718325, + -0.0170296, + -0.006178031, + -0.023982285, + -0.003902083, + -0.0021078931, + -0.013828547, + -0.02326525, + -0.038694322, + -0.03259952, + -0.0058419206, + 0.010544267, + -0.017119229, + -0.0060819997, + -0.0040589347, + 0.008521202, + 0.024379216, + 0.23068064, + 0.010909187, + -0.0053201495, + 0.03257391, + 0.0033611052, + 0.04962912, + 0.022970753, + -0.008540408, + 0.013201141, + 0.020909276, + 0.0037964482, + 0.0025256304, + 0.009379084, + 0.0043150187, + 0.0061428198, + -0.0041773734, + -0.028092436, + -0.0008682855, + -0.015800396, + 0.010019294, + 0.014635212, + -0.017797852, + 0.011280509, + 0.00383166, + 0.034725018, + -0.001922232, + -0.018169174, + -0.0018197984, + 0.023073187, + 0.0054705986, + -0.0062356503, + -0.011472573, + 0.0033354966, + -0.009097391, + -0.0070359134, + -0.005502609, + -0.01928314, + 0.008201096, + 0.020934884, + 0.026069371, + 0.012138391, + 0.012932252, + -0.032138567, + -0.021818373, + -0.0041261567, + 0.02348292, + -0.009404692, + -0.0061908355, + 0.019193511, + 0.0066261785, + -0.017759439, + -0.001922232, + 0.023777418, + 0.02350853, + 0.0011091647, + 0.023226837, + 0.022061653, + -0.011690244, + 0.029526507, + -0.014891297, + -0.014071827, + 0.023457313, + -0.018668538, + 0.0031882483, + 0.0077081346, + -0.0071575535, + -0.019808114, + 0.009475116, + 0.013457225, + -0.010569875, + 0.017746635, + 0.010992414, + 0.019628854, + 0.0056402544, + -0.006286867, + -0.003236264, + 0.024840167, + 0.008162684, + 0.026940057, + -0.017900286, + -0.0037420304, + -0.014404736, + -0.014404736, + 0.022868318, + -0.018719755, + -0.022804298, + 0.0076313093, + 0.0020566762, + 0.03569814, + -0.008674853, + -0.009263846, + -0.009583951, + 0.00976321, + -0.010032099, + 0.006238851, + 0.024776146, + -0.0134700285, + 0.022151284, + -0.02368779, + 0.0031738435, + -0.036517605, + -0.01700399, + 0.017900286, + -0.010787547, + -0.013649288, + 0.011114054, + 0.00480478, + 0.015531506, + 0.038873583, + -0.008828503, + 0.013457225, + -0.005112081, + 0.012003947, + -0.0023223637, + 0.01833563, + -0.00136845, + 0.0033835126, + -0.012618549, + -0.018450867, + -0.0139053725, + -0.00018806184, + -0.022036046, + -0.01441754, + 0.009628766, + -0.015710765, + -0.0037388294, + -0.0040877443, + 0.020077001, + 0.00031870478, + -0.040282045, + 0.03047402, + -0.0020022583, + 0.030909363, + -0.0023719799, + -0.009289455, + -0.00086748524, + -0.009526332, + -0.005243324, + 0.011504583, + -0.01012813, + -0.008636439, + -0.008918133, + 0.012445692, + -0.013738917, + 0.0056466567, + 0.0077977637, + 0.005105679, + -0.012887438, + -0.013585267, + -0.017119229, + 0.0010091318, + -0.02147266, + -0.00059219473, + 0.003473142, + 0.016146109, + -0.013111511, + -0.026376672, + -0.007618505, + -0.016389389, + 0.019539224, + -0.006824644, + 0.025864504, + -0.006472528, + -0.014225477, + -0.008905328, + 0.0014468757, + -0.16409875, + 0.024071915, + 0.004164569, + -0.004033326, + -0.013828547, + -0.0011675839, + 0.02578768, + 0.018233195, + -0.0010171344, + 0.028322913, + 0.015160184, + -0.008649244, + -0.0520107, + -0.024123132, + 0.008924535, + 0.019001449, + -0.0042285905, + -0.015224205, + 0.026402282, + 0.009961676, + -0.0029785794, + -0.029142382, + 0.012215217, + -0.0026408683, + 0.00465433, + 0.00016485421, + -0.00918702, + 0.030243544, + -0.0017877878, + -0.007080728, + -0.00465433, + -0.0052721333, + 0.0028057224, + 0.036287133, + 0.0072855954, + 0.005067266, + 0.00013964591, + 0.005172901, + 0.0010923592, + 0.003972506, + -0.008137075, + 0.024929797, + -0.006152423, + 0.009628766, + -0.019987373, + 0.022970753, + 0.03505793, + 0.021101339, + -0.0015829204, + -0.0073048016, + 0.008681254, + -0.03157518, + -0.023828635, + -0.008649244, + 0.01784907, + 0.0052049113, + 0.018566104, + 0.009808025, + -0.003850866, + 0.022586627, + 0.0036299936, + -0.0267608, + -0.0009651173, + 0.0026200614, + -0.0011043631, + -0.012810612, + 0.0030714099, + 0.008258715, + -0.031856876, + 0.014788862, + -0.013041088, + -0.0066005704, + 0.02323964, + -0.017349705, + 0.012477702, + 0.009910459, + -0.014571191, + 0.012035958, + -0.005377768, + -0.010838764, + 0.013329183, + 0.02618461, + 0.0016773515, + -0.014519975, + -0.016799124, + 0.014865688, + -0.013687701, + 0.005672265, + -0.006261259, + -0.028246088, + 0.00814988, + -0.039949134, + 0.0040013157, + -0.03877115, + 0.016094891, + 0.0133804, + -0.010448235, + -0.011158869, + -0.0011883908, + -0.021088533, + 0.011575006, + -0.010883578, + -0.012112782, + 0.01809235, + 0.024097523, + 0.024660908, + -0.00043574328, + 0.010397019, + 0.027042491, + 0.008233107, + -0.014699233, + 0.031523965, + 0.0142126735, + 0.03323973, + 0.014545582, + -0.00028869492, + 0.0083035305, + -0.034801845, + -0.0027080905, + 0.006779829, + 0.036773693, + 0.012170401, + -0.009692787, + 0.009219031, + -0.0030522035, + -0.024673713, + -0.095365755, + -0.022919536, + 0.012432888, + 0.01475045, + -0.0013924579, + 0.0151473805, + 0.010185749, + 0.03743951, + 0.00018466072, + 0.02934725, + -0.008322736, + -0.017349705, + -0.015019339, + 0.002871344, + 0.008476387, + -0.013201141, + 0.007996229, + -0.025454769, + -0.024981014, + 0.0053297523, + -0.004010919, + -0.012420083, + 0.0022039246, + -0.004270204, + -0.01629976, + -0.020269064, + -0.03920649, + 0.019936156, + 0.00498724, + -0.00471515, + 0.0152114015, + -0.0072407806, + 0.0048559965, + -0.010768341, + -0.017196054, + 0.013790134, + -0.014827276, + -0.00037292263, + 0.006101206, + -0.03144714, + 0.010268976, + 0.012003947, + 0.006510941, + -0.028578997, + -0.013508442, + 0.0040269243, + -0.013713309, + -0.011971937, + -0.009353476, + -0.01937277, + 0.010883578, + 0.037004165, + -0.0033835126, + -0.011178075, + 0.037516337, + -0.020333085, + 0.021280598, + 0.0206788, + -0.009455909, + 0.004817584, + 0.011088446, + 0.012368867, + 0.008508397, + 0.02551879, + -0.0053809695, + -0.015390661, + -0.027324185, + 0.003533962, + 0.012176803, + -0.041895375, + -0.0005985968, + 0.02092208, + -0.018745363, + 0.013226749, + -0.009603158, + -0.001101162, + -0.020755624, + -0.011523789, + 0.009558342, + -0.00032050538, + -0.026018154, + -0.020614779, + -0.006277264, + -0.02366218, + 0.0070423153, + 0.022253716, + -0.013341987, + -0.004388643, + 0.028604604, + -0.014494366, + 0.0005645856, + 0.04312458, + 0.013802938, + -0.012260031, + -0.0075352774, + 0.011901514, + 0.0122280205, + 0.018284412, + 0.00903337, + -0.019398378, + -0.021664724, + -0.0026504714, + -0.049321815, + 0.010115326, + -0.002378382, + -0.023252446, + -0.0032698752, + 0.009878448, + -0.01578759, + -0.004033326, + -0.005256128, + -0.00535216, + -0.0019750495, + -0.002357575, + -0.0050224513, + 0.00065141416, + -0.01402061, + 0.0027016883, + 0.018002719, + -0.0050288537, + 0.02722175, + 0.00053697656, + -0.0019126289, + 0.014571191, + 0.011101251, + 0.0007462454, + -0.016350977, + 0.01742653, + -0.03096058, + -0.01523701, + -0.016607061, + -0.014468757, + -0.0065493532, + -0.018194782, + 0.015006534, + 0.039283317, + -0.019257532, + -0.01903986, + -0.006155624, + 0.030243544, + 0.008822101, + -0.020179436, + -0.013687701, + -0.043508705, + 0.016632669, + -0.013303574, + -0.016325368, + 0.0188606, + -0.0016453409, + -0.012727384, + 0.005854725, + -0.0013548455, + 0.021050122, + 0.027119316, + -0.0002262744, + -0.009122999, + 0.00036051855, + -0.017144836, + 0.030089894, + 0.008834905, + 0.011120456, + -0.03190809, + 0.016607061, + -0.012490507, + -0.00034311283, + 0.011939926, + 0.008495593, + 0.008521202, + -0.017068012, + -0.014699233, + 0.0075736903, + 0.007618505, + -0.008265117, + -0.00918702, + 0.040256437, + 0.008591625, + 0.02323964, + 0.0109476, + -0.011991142, + 0.0037964482, + -0.0013764526, + 0.008124271, + 0.013239553, + -0.0077721556, + -0.019731287, + 0.02691445, + 0.020422716, + 0.031984918, + -0.038310196, + -0.0009251042, + 0.005364964, + -0.005006446, + -0.031370316, + -0.004567902, + -0.007701732, + -0.002986582, + -0.00413576, + 0.0041901777, + -0.0036620041, + 0.0020870862, + 0.015979653, + 0.035390835, + 0.013802938, + -0.0062100417, + -0.0079066, + -0.026530324, + -0.0088669155, + 0.0077209384, + -0.007804166, + -0.0036363956, + -0.012234422, + 0.0076313093, + 0.007080728, + -0.021575093, + -0.0007982625, + 0.022010436, + -0.0017189652, + -0.005726683, + -0.033316553, + -0.028809473, + -0.018783776, + 0.0065557556, + 0.0013556457, + 0.011722255, + -0.011658234, + -0.010397019, + 0.022253716, + 0.027016884, + 0.040154003, + -0.031523965, + -0.0037388294, + 0.018719755, + 0.011542995, + -0.0032506688, + 0.008469985, + -0.01937277, + -0.024443237, + -0.0075096693, + -0.019103881, + 0.02609498, + 0.016235739, + 0.054084983, + -0.004427056, + -0.03577496, + 0.017055208, + 0.001292425, + 0.007842579, + 0.013802938, + 0.0011843895, + -0.014481561, + -0.013713309, + 0.002469612, + 0.0009987283, + 0.021203771, + 0.0033451, + -0.016837535, + -0.0022279324, + -0.01912949, + 0.020000177, + -0.031088622, + -0.013028284, + 0.022304934, + 0.0052049113, + 0.012356062, + 0.0034571367, + -0.016184522, + -0.007151151, + -0.006818242, + 0.012388073, + -0.005006446, + -0.020909276, + 0.017260075, + -0.022420172, + -0.023201229, + -0.00021547085, + 0.01466082, + -0.018630126, + -0.015685158, + -0.025505986, + -0.006213243, + 0.014583996, + -0.00046975445, + 0.020819645, + -0.015838807, + -0.027452227, + -0.011542995, + -0.010064109, + -0.020025784, + 0.005979566, + -0.023841439 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + 0.015776122, + -0.007275396, + 0.0065414747, + -0.021902772, + -0.0065606204, + 0.0037717186, + -0.018214017, + -0.033211544, + 0.011832092, + -0.017550297, + 0.019464875, + 0.009681382, + -0.004658806, + -0.0013378114, + -0.016899342, + -0.00013262441, + 0.03305838, + 0.011570432, + 0.026446704, + -0.01652919, + -0.022221867, + 0.018214017, + -0.008934697, + 0.011653397, + -0.0208689, + -0.010172791, + 0.008028463, + -0.016656827, + 0.0024267274, + 0.015482553, + 0.010530178, + -0.018226782, + 0.012234153, + -0.025004387, + -0.035662204, + 0.015571901, + 0.0044737305, + -0.003557924, + 0.017014217, + -0.018635225, + -0.00065853505, + 0.009834548, + 0.003296265, + -0.007843387, + -0.008992135, + 0.012093751, + 0.019503167, + 0.00728816, + -0.01758859, + 0.011672543, + 0.0035898336, + 0.01914578, + -0.018111907, + -0.018775627, + 0.011142843, + -0.035253763, + 0.0039312667, + 0.017626882, + 0.005724588, + -0.008168866, + -0.012572395, + -0.016886577, + 0.0041227243, + -0.014001947, + 0.0044131023, + -0.0009174019, + -0.009579271, + 0.004349283, + 0.0002730268, + 0.0054725017, + 0.021290107, + 0.0379597, + 0.0063659716, + 0.01937553, + 0.025080971, + 0.009247411, + -0.013759433, + 0.023345087, + -0.004432248, + -0.003154267, + 0.0009947828, + -0.008724093, + -0.030786414, + -0.0048024, + 0.01441039, + -0.0017039743, + -0.009623945, + 0.004326946, + -0.034998484, + -0.0030425834, + -0.011232191, + 0.03070983, + 0.026650924, + -0.012029931, + 0.0006034909, + 0.014780542, + 0.011238572, + 0.029739777, + 0.015712302, + -0.03530482, + 0.014933708, + 0.004524786, + -0.04240152, + 0.002988337, + -0.024723582, + -0.020588094, + 0.002514479, + 0.004023805, + 0.026165899, + -0.020626387, + -0.022209104, + 0.02391946, + 0.046664644, + -0.023064282, + -0.0019257463, + -0.021073122, + 0.012840436, + -0.028310226, + -0.017971504, + -0.005960719, + 0.006480846, + 0.051106468, + 0.017933212, + -0.015201748, + 0.03706623, + -0.0000713978, + -0.008915551, + -0.028948419, + -0.0041993074, + 0.01569954, + -0.0063627805, + 0.017307784, + 0.0020741262, + 0.013504156, + 0.0073264516, + -0.0009923895, + -0.014423153, + 0.02726359, + -0.0059639104, + -0.01941382, + 0.0108620385, + 0.03229255, + -0.016056927, + 0.003905739, + -0.0065414747, + 0.03497296, + 0.015954817, + -0.0040269955, + -0.020396637, + -0.0055841855, + 0.0032611643, + -0.011181135, + 0.0031813902, + -0.0036121702, + 0.015405971, + 0.0052236067, + -0.0071413754, + 0.0053065717, + -0.027212534, + 0.0020055203, + -0.019464875, + -0.006420218, + 0.030097164, + -0.011876765, + 0.04352474, + 0.027799672, + 0.001588302, + -0.0028335752, + -0.016273912, + -0.0023230212, + 0.0007307306, + 0.025183082, + -0.012974456, + 0.032343604, + -0.017563062, + 0.012183097, + 0.007792332, + -0.0018348038, + -0.016337732, + 0.004320564, + -0.024940569, + -0.0033281746, + 0.016171802, + 0.004598178, + 0.0060245385, + -0.005089586, + 0.025489414, + -0.008602837, + 0.014895416, + -0.004853455, + 0.02375353, + 0.025999969, + -0.021583674, + -0.03351788, + -0.6812834, + -0.04395871, + 0.02003925, + -0.0035898336, + 0.0017981078, + 0.024685292, + 0.0067329323, + 0.015367678, + 0.005711824, + -0.01629944, + 0.011812946, + 0.0054405923, + 0.011104552, + -0.013555212, + -0.0060181567, + -0.022451617, + -0.0033600843, + 0.022221867, + -0.0021044402, + -0.0154697895, + 0.0006058841, + 0.006930772, + -0.01765241, + -0.0116916895, + 0.021992119, + 0.009030426, + 0.01746095, + -0.0006952311, + -0.01742266, + -0.0018332084, + -0.016822757, + 0.015112402, + -0.020779552, + -0.013006366, + 0.046894394, + -0.011410885, + -0.007039265, + 0.024723582, + 0.008832586, + 0.02637012, + -0.009757966, + -0.0017598162, + 0.012087368, + -0.030939579, + -0.013810488, + 0.010664199, + 0.015150693, + -0.006662731, + 0.03216491, + 0.001381687, + 0.01947764, + -0.031884104, + 0.005105541, + 0.009987715, + 0.007913589, + 0.0015372465, + 0.042350464, + 0.00076064584, + 0.0009461206, + 0.007275396, + 0.007103084, + 0.0021762368, + -0.0046619973, + -0.016184565, + -0.016618537, + -0.0009070313, + -0.038240504, + -0.01590376, + -0.018392712, + -0.0007746063, + -0.005290617, + 0.004151443, + -0.015814414, + 0.023855641, + 0.02024347, + -0.0051406417, + 0.030786414, + -0.009004898, + 0.00021519058, + -0.002160282, + 0.011091788, + -0.014448681, + -0.031118274, + -0.017282257, + 0.029688722, + -0.021711314, + -0.016248384, + -0.025349012, + 0.01606969, + -0.0045662685, + 0.025055444, + -0.0013354181, + -0.01606969, + -0.008085901, + -0.013810488, + 0.036096174, + 0.0021937871, + 0.002994719, + 0.0034781499, + 0.0059351916, + -0.0026054215, + -0.015993107, + -0.004515213, + -0.000008874867, + 0.02626801, + -0.012170333, + -0.027314644, + 0.028437864, + 0.011123697, + -0.015916524, + 0.025055444, + -0.01109817, + -0.00990475, + 0.017639644, + 0.011915057, + -0.027850727, + 0.04819631, + 0.0024458733, + 0.01868628, + -0.008628365, + 0.00659253, + 0.024774639, + -0.009151682, + -0.008309268, + -0.0017566252, + -0.013172296, + -0.008934697, + -0.012406465, + -0.04418846, + 0.0013856757, + 0.0032260637, + 0.00970691, + 0.016835522, + 0.006752078, + 0.008596455, + 0.0036313161, + 0.010976913, + -0.021660259, + 0.024455542, + -0.0058266986, + -0.0112768635, + -0.0010426472, + -0.02603826, + 0.01351692, + 0.0033632752, + -0.03425818, + -0.03461557, + -0.0061234585, + -0.012336263, + 0.015329387, + -0.023779057, + -0.0123235, + -0.03928714, + 0.009923896, + 0.015661247, + -0.01646537, + -0.022106992, + -0.0054565473, + -0.013338226, + 0.029790832, + 0.0166313, + 0.0011607129, + 0.0018092762, + -0.00075147185, + -0.01046636, + -0.021673022, + -0.008296505, + 0.04130383, + -0.00070959044, + -0.026421174, + -0.021162467, + 0.0010290856, + -0.003902548, + -0.00821354, + -0.0151379295, + -0.019898847, + -0.0062830066, + -0.015048582, + 0.0034015668, + -0.009445251, + 0.01848206, + 0.0170908, + 0.009949423, + -0.017333312, + 0.047430478, + 0.0069818273, + 0.01652919, + 0.0028511256, + 0.001578729, + -0.0018236354, + -0.012476666, + -0.01026852, + 0.0029197314, + -0.009260175, + 0.009898368, + 0.012042695, + 0.010638671, + 0.011244955, + 0.0023708856, + -0.0022400562, + 0.009521835, + -0.0113598285, + 0.01752477, + -0.014257223, + 0.00606283, + -0.026880674, + 0.017882157, + -0.010638671, + 0.00057198014, + 0.026395647, + 0.0043652374, + -0.024021572, + -0.0032005361, + -0.007613638, + 0.01613351, + -0.005884136, + -0.024276849, + 0.0029532365, + 0.002067744, + -0.012272445, + 0.0011591173, + 0.014767778, + 0.023523781, + -0.014129585, + -0.0037525727, + 0.0016337732, + 0.032343604, + 0.017614117, + -0.0070647923, + -0.018124672, + -0.023000462, + -0.0050544855, + -0.0120235495, + 0.010670581, + -0.032547824, + -0.0061234585, + 0.005724588, + -0.03203727, + 0.022234632, + 0.011934202, + -0.01129601, + 0.03515165, + 0.025591524, + 0.0048885555, + 0.003899357, + -0.0014000351, + 0.01636326, + 0.01165978, + -0.017805574, + 0.006669113, + -0.012527722, + 0.009426105, + -0.003385612, + 0.015597428, + 0.03926161, + -0.00837947, + 0.03670884, + 0.0015555945, + 0.017180147, + 0.023370614, + -0.026089314, + -0.0063053435, + 0.0058554173, + -0.0057596886, + 0.013038276, + -0.0008479985, + -0.005469311, + -0.0017837484, + 0.005105541, + -0.0093878135, + -0.017397132, + -0.0018348038, + 0.028744197, + -0.007281778, + 0.026778564, + -0.010453596, + -0.0053065717, + -0.0043460918, + 0.030811941, + 0.011404502, + -0.008060373, + -0.026063787, + 0.014793306, + -0.0011942179, + -0.0048119724, + -0.03014822, + -0.023038754, + 0.017767282, + -0.00062183896, + 0.009891986, + 0.00837947, + 0.009560126, + 0.029178167, + -0.0060851667, + 0.0076200203, + -0.0257064, + 0.0057564974, + 0.007881679, + 0.016567482, + 0.0023182346, + -0.0045694592, + -0.01825231, + -0.032088324, + -0.015890997, + 0.011876765, + 0.009828167, + -0.006783988, + 0.008385851, + -0.010096207, + -0.028718669, + -0.011468322, + -0.00058434514, + 0.0007937521, + -0.013721142, + -0.0054054917, + -0.002332594, + -0.029254751, + 0.004499258, + 0.034360293, + 0.02070297, + 0.0051853154, + -0.010108971, + -0.012042695, + -0.008838968, + 0.07724684, + 0.02497886, + 0.008053991, + 0.010108971, + -0.0027841155, + -0.011564051, + -0.028565502, + 0.011978876, + -0.013223352, + -0.0065542385, + 0.016618537, + -0.026051024, + 0.0017135473, + 0.0044801123, + 0.005089586, + -0.0066372035, + 0.007039265, + -0.0012899468, + 0.03382421, + -0.02014136, + 0.006088358, + 0.0017917259, + -0.014014711, + 0.012336263, + 0.003822774, + -0.0064457455, + 0.007556201, + -0.010211082, + 0.015712302, + -0.011512995, + 0.009036807, + 0.009732437, + -0.0075944923, + -0.006579766, + -0.017626882, + 0.002431514, + -0.0017837484, + 0.005625668, + 0.010153645, + -0.014703958, + 0.03607065, + 0.0044896854, + 0.012827672, + -0.0068797166, + -0.021417744, + 0.007026501, + -0.013989182, + 0.020549802, + -0.011978876, + -0.0181502, + 0.026319064, + 0.007383889, + -0.015278332, + 0.0059096636, + 0.010728018, + 0.003653653, + -0.010925858, + -0.018099144, + -0.007868915, + 0.0008759194, + 0.000975637, + -0.0073009236, + 0.002382054, + -0.005443783, + -0.015035818, + -0.008666656, + 0.003896166, + -0.0031430987, + -0.01798427, + -0.0034781499, + 0.014652903, + -0.01268727, + -0.021838952, + 0.008060373, + 0.027314644, + 0.008558163, + 0.017575825, + -0.024289612, + -0.01775452, + 0.041661214, + -0.00044035292, + -0.007722131, + -0.0038483017, + -0.003021842, + -0.0070839385, + 0.0011032756, + 0.025948912, + -0.02348549, + -0.01441039, + -0.010587616, + 0.03236913, + -0.0019034095, + 0.013121241, + -0.005303381, + -0.013759433, + -0.010345102, + 0.029637666, + 0.008487962, + -0.009681382, + 0.005281044, + 0.0036217433, + -0.024800166, + -0.00065853505, + -0.015405971, + 0.015814414, + 0.014269987, + 0.02848892, + 0.0034621952, + -0.017997032, + 0.013248879, + 0.0069562998, + -0.009394196, + -0.01252134, + -0.0038514927, + 0.004786445, + 0.006828661, + -0.0061170766, + 0.014346571, + -0.008724093, + -0.027161479, + -0.0015268759, + -0.040818803, + 0.027135951, + 0.0017247156, + 0.010651435, + 0.001729502, + 0.027620977, + -0.005702251, + -0.01318506, + 0.013338226, + -0.009170828, + 0.020651914, + -0.010657817, + -0.017346077, + -0.033900794, + -0.02547665, + 0.033441294, + 0.0023166393, + -0.016005872, + -0.004885365, + 0.01159596, + 0.012789381, + 0.00987284, + 0.002677218, + -0.035355873, + -0.023038754, + -0.005574613, + 0.0039504124, + -0.007115848, + 0.016950397, + -0.0096048, + 0.005542703, + -0.009477161, + 0.011059878, + -0.0012875537, + -0.012706416, + -0.031909633, + -0.025553234, + 0.030454552, + 0.016720647, + 0.017371604, + -0.0026644543, + 0.0038291558, + 0.0016704692, + -0.005641623, + 0.0028383618, + -0.008915551, + 0.0018140626, + -0.030122692, + 0.0145252645, + 0.013848781, + -0.0028479346, + 0.023932224, + -0.005549085, + 0.012463902, + 0.0134148095, + -0.004256745, + -0.000045870096, + -0.026421174, + -0.027391229, + 0.007626402, + -0.00006935359, + -0.0076583116, + -0.0018012987, + -0.00011936197, + -0.018558642, + 0.017537534, + 0.002914945, + -0.007971026, + 0.003727045, + 0.033313654, + -0.0010163218, + 0.03425818, + -0.0045726504, + -0.002209742, + -0.005303381, + -0.026880674, + -0.0035419692, + 0.013427573, + 0.0068988623, + 0.0072371047, + 0.005568231, + 0.011883147, + -0.02481293, + 0.015750594, + 0.012846818, + 0.03150119, + 0.008507108, + -0.009189974, + -0.01974568, + -0.030990634, + -0.035994064, + -0.03673437, + -0.03229255, + 0.01335099, + 0.0022384606, + -0.031577773, + 0.021507092, + -0.008168866, + -0.020460457, + 0.008066755, + 0.011532141, + 0.029101584, + 0.00083762786, + 0.008921933, + 0.021583674, + -0.008583691, + -0.008685802, + 0.008341177, + -0.011436412, + -0.006771224, + 0.019222362, + 0.019426584, + -0.020217942, + 0.024787402, + 0.012770235, + 0.011742745, + 0.02209423, + -0.0093878135, + -0.003309029, + -0.0052618985, + 0.010772692, + -0.020754024, + 0.011864001, + -0.026140371, + 0.005823508, + -0.037321504, + 0.002268775, + -0.002434705, + -0.010383395, + -0.014652903, + -0.005651196, + -0.03336471, + 0.015265568, + 0.021583674, + 0.008385851, + 0.0062830066, + -0.006930772, + -0.008475198, + -0.0032005361, + -0.010511032, + 0.03270099, + 0.00025767027, + 0.001538842, + 0.006506374, + -0.0012620259, + -0.010204701, + -0.0082773585, + -0.0032180864, + 0.025387304, + -0.0034302855, + -0.002262393, + -0.024098154, + 0.008207157, + 0.03862342, + -0.01652919, + -0.0007227532, + -0.002160282, + -0.0054342104, + 0.0027426328, + 0.006694641, + 0.0018810728, + -0.015201748, + 0.018622462, + -0.024098154, + -0.012240535, + -0.028029421, + -0.0035643058, + 0.008188011, + -0.015648484, + -0.005226798, + -0.028003894, + 0.014946472, + 0.000016914599, + -0.0038259649, + -0.017448187, + 0.030990634, + 0.005111923, + -0.018622462, + 0.019324472, + 0.000057537054, + 0.015890997, + 0.0022767521, + 0.014321043, + 0.0042312173, + -0.025157554, + 0.030633247, + 0.0021570912, + -0.035228234, + -0.027059369, + -0.008890023, + -0.011181135, + 0.0012492621, + -0.0050098123, + 0.0093048485, + -0.002249629, + 0.013146768, + -0.02063915, + 0.00058992935, + -0.0059032817, + -0.026242482, + 0.018137434, + 0.020575332, + -0.020881664, + -0.017601352, + 0.008972988, + -0.011149226, + 0.0013713164, + -0.027340172, + -0.008487962, + -0.012597922, + 0.018533114, + 0.013146768, + -0.019286182, + -0.003896166, + -0.012317118, + -0.012400083, + 0.0033441295, + -0.0022113374, + 0.014474209, + -0.0026836, + -0.0012333073, + -0.02454489, + 0.014269987, + -0.021456037, + 0.013861544, + 0.0016050545, + -0.019694624, + -0.017958742, + -0.0020980584, + 0.0042312173, + -0.004559886, + -0.0048119724, + -0.030403497, + -0.01835442, + 0.0027522058, + -0.0031925587, + -0.0028670805, + 0.0017853439, + 0.00814972, + 0.018226782, + -0.0056767236, + -0.015508081, + 0.020498747, + 0.0007259441, + -0.0016273912, + -0.018073615, + -0.01785663, + -0.008417761, + -0.009362286, + 0.013887072, + 0.0038706383, + 0.0044450117, + -0.008341177, + 0.02637012, + -0.016873814, + 0.0049268473, + -0.004176971, + -0.022898352, + -0.00070440513, + 0.021417744, + 0.020026485, + 0.031322494, + 0.010077062, + -0.008136956, + -0.023166392, + -0.0055714217, + 0.009489925, + 0.037117284, + -0.012527722, + 0.014946472, + 0.009400577, + -0.01030043, + 0.00141599, + -0.030888524, + 0.0074987635, + 0.011653397, + 0.021315634, + 0.0056224773, + -0.0075115273, + 0.011985258, + 0.02859103, + -0.0028543165, + -0.022834532, + -0.0015268759, + -0.0053735822, + -0.03504954, + 0.0013625413, + 0.009515452, + -0.028693141, + 0.0076710754, + -0.023702474, + -0.004145061, + -0.023498252, + -0.0075051454, + -0.024800166, + -0.008858114, + -0.03395185, + 0.028744197, + 0.024519362, + -0.009547362, + 0.00884535, + -0.02859103, + -0.0027442283, + -0.0069626817, + -0.009189974, + -0.009694146, + -0.026574342, + -0.0065606204, + -0.007868915, + 0.0007060006, + -0.03173094, + -0.0055937585, + 0.0065542385, + 0.006905244, + 0.020332817, + 0.23424223, + 0.008807058, + -0.013529684, + 0.032088324, + -0.018111907, + 0.025068207, + 0.023766294, + -0.01592929, + 0.02848892, + 0.036657784, + -0.021660259, + 0.00064337795, + 0.00088150357, + -0.0018348038, + 0.011966112, + -0.012974456, + -0.033798683, + -0.002329403, + -0.0015220895, + -0.009113391, + 0.01686105, + 0.0026197808, + 0.009151682, + 0.00028259968, + 0.028999474, + 0.015686775, + -0.006905244, + 0.0036664167, + 0.004508831, + 0.011800182, + -0.0012476667, + -0.0187501, + 0.0043620467, + -0.0060245385, + 0.0024953333, + -0.002938877, + -0.0067265504, + 0.0032085136, + 0.009400577, + 0.03859789, + 0.0060181567, + 0.0062893885, + -0.02487675, + -0.008558163, + 0.0048087817, + 0.008494344, + -0.015763357, + -0.0067265504, + 0.021979354, + 0.015061346, + -0.010153645, + -0.0061808955, + 0.04449479, + 0.023242977, + -0.0110279685, + 0.02186448, + 0.03361999, + -0.011244955, + 0.025731927, + -0.010377012, + -0.01507411, + 0.02365142, + -0.019886082, + 0.004582223, + 0.019158542, + -0.0016242003, + -0.015763357, + 0.005172551, + 0.021953827, + -0.022796242, + 0.01132792, + 0.0024634236, + 0.0077029853, + 0.0018092762, + -0.005721397, + -0.019656334, + 0.022745186, + -0.006078785, + 0.027901782, + 0.0065287105, + -0.01642708, + -0.008105046, + -0.007607256, + 0.018060852, + -0.006662731, + -0.008921933, + -0.0018332084, + 0.01569954, + 0.022847297, + -0.0068733348, + 0.0041099605, + -0.0029963145, + 0.0017406704, + 0.010313193, + 0.030403497, + 0.022540964, + -0.005354436, + 0.007371125, + -0.026089314, + -0.00093495223, + -0.03497296, + -0.035687733, + 0.0042950367, + -0.017218437, + -0.009081481, + 0.0072179586, + -0.0009501093, + 0.0015428307, + 0.0337221, + -0.00041961166, + 0.004078051, + -0.012010786, + 0.008341177, + -0.008309268, + 0.008992135, + -0.0061904686, + 0.013925363, + -0.013223352, + -0.01712909, + -0.018737337, + -0.0034366674, + -0.020651914, + 0.0017997032, + -0.006662731, + -0.00006332067, + -0.019835027, + -0.0027250827, + -0.002477783, + 0.00728816, + -0.04273338, + 0.036428034, + -0.0046619973, + 0.021481564, + -0.000063669686, + -0.005446974, + 0.011927821, + 0.00020252644, + -0.0076646935, + -0.0005001835, + -0.008143338, + 0.0016768512, + 0.0016816376, + 0.009853695, + -0.005226798, + 0.001403226, + -0.0066372035, + 0.0058873273, + -0.027799672, + -0.027110424, + -0.02431514, + -0.025349012, + -0.010428067, + -0.009368668, + -0.007026501, + 0.009349522, + 0.0030298196, + -0.021456037, + -0.008960225, + 0.0010043556, + 0.031118274, + -0.011398121, + -0.001446304, + 0.026497759, + -0.014818833, + 0.013376518, + 0.00299791, + -0.16266254, + 0.02408539, + 0.014065766, + -0.014959236, + -0.0050640586, + -0.002674027, + 0.016210092, + 0.020383872, + -0.020179652, + 0.028744197, + -0.0036504618, + 0.024685292, + -0.042478103, + -0.009132537, + -0.012527722, + 0.0009189974, + 0.00010350687, + -0.0010131308, + 0.017397132, + 0.003388803, + 0.007537055, + -0.020843372, + 0.022770714, + 0.02109865, + 0.015086874, + -0.0033441295, + -0.026319064, + 0.03259888, + 0.0074285623, + -0.0071732854, + -0.0070073553, + -0.0034621952, + -0.00026385277, + 0.024902277, + 0.016439842, + -0.0026118034, + 0.002345358, + 0.010638671, + -0.00022755556, + -0.0104153035, + 0.0022017646, + 0.028616559, + 0.009643091, + 0.012227771, + 0.0010809387, + 0.027391229, + 0.029076057, + 0.02109865, + 0.0035643058, + -0.0096048, + 0.023294032, + -0.033441294, + -0.013440337, + -0.007881679, + 0.022170812, + 0.020320054, + 0.016337732, + 0.00937505, + -0.008175247, + 0.009196356, + 0.00062582764, + -0.038674474, + -0.023511017, + 0.006496801, + 0.0010474337, + -0.0069562998, + 0.010868421, + 0.011864001, + -0.0044513936, + 0.0060979305, + -0.020447692, + -0.006254288, + -0.0058649904, + -0.021328397, + -0.0065478566, + 0.00088150357, + -0.01159596, + -0.0026756227, + -0.0035228233, + -0.013172296, + 0.010319575, + 0.02248991, + -0.015023055, + -0.008756003, + -0.008896406, + 0.008870877, + 0.004824736, + 0.008200776, + -0.024200264, + -0.0005699858, + 0.023345087, + -0.036223814, + 0.0036951355, + -0.039440304, + 0.008992135, + 0.01732055, + 0.0015276737, + -0.01109817, + 0.007792332, + 0.012215007, + 0.00017191314, + 0.0013186656, + -0.023779057, + 0.0096048, + 0.030326914, + 0.01848206, + -0.012208625, + 0.0062510967, + 0.030454552, + -0.0040429505, + -0.016835522, + 0.022349507, + -0.004690716, + 0.006745696, + 0.02302599, + 0.0102174645, + 0.013670086, + -0.028463392, + -0.0014853934, + 0.009566507, + 0.048911083, + -0.006145795, + -0.0062830066, + 0.019439347, + -0.0023230212, + -0.030939579, + -0.10011966, + -0.013644558, + 0.017792812, + 0.020779552, + 0.013644558, + 0.02703384, + 0.0050608674, + 0.017384367, + 0.0023437624, + 0.024136446, + 0.002243247, + -0.022809004, + -0.019554222, + 0.0104153035, + 0.005271471, + -0.013529684, + 0.018558642, + -0.023038754, + -0.05062144, + 0.0037653365, + -0.0039440305, + 0.0068860985, + -0.0034334764, + -0.01669512, + -0.0052395617, + 0.003468577, + -0.024174737, + 0.0058809454, + 0.01785663, + -0.0040876237, + 0.010664199, + -0.014844361, + 0.0041865436, + -0.006694641, + -0.008673038, + -0.00041402748, + -0.00477049, + 0.0012516553, + 0.027518867, + -0.030965107, + -0.0045726504, + 0.002219315, + 0.015316623, + -0.032879684, + -0.0041418704, + 0.010274901, + -0.00009637706, + 0.012234153, + 0.004167398, + -0.019260654, + 0.0060404935, + 0.020626387, + -0.03459004, + -0.009726056, + 0.04408635, + -0.029458972, + 0.01162787, + 0.017065272, + -0.027161479, + 0.021787897, + 0.004847073, + 0.017039744, + 0.00136653, + 0.029254751, + -0.026012732, + -0.016376022, + -0.049013194, + -0.0086092185, + 0.023013227, + -0.03147566, + 0.0034941046, + 0.01758859, + -0.01619733, + -0.0041227243, + -0.019822264, + 0.019184072, + -0.025183082, + -0.012999984, + 0.008430525, + -0.012208625, + -0.026421174, + -0.020383872, + 0.008073137, + -0.0056799143, + -0.0074221804, + 0.029561084, + -0.021979354, + -0.008468816, + 0.025553234, + -0.0029229224, + 0.013363753, + 0.03852131, + 0.013287171, + -0.019490404, + -0.0086092185, + 0.020958247, + 0.007313688, + 0.0028495302, + 0.019222362, + -0.0181502, + -0.01974568, + -0.007971026, + -0.035917483, + 0.014818833, + -0.014716722, + -0.024404487, + -0.011851237, + 0.01318506, + -0.011678926, + 0.003468577, + -0.011557668, + -0.004531168, + -0.011187517, + -0.0073392154, + -0.012597922, + -0.01596758, + -0.0054342104, + 0.002693173, + 0.01679723, + -0.0019768018, + 0.011851237, + -0.00924103, + -0.007186049, + -0.0015077301, + 0.00038271616, + 0.00804761, + -0.03328813, + 0.006669113, + -0.01642708, + -0.01904367, + -0.029458972, + -0.0020055203, + 0.024225792, + -0.026472231, + 0.01149385, + 0.026982784, + -0.01871181, + -0.031909633, + -0.012183097, + 0.021404982, + 0.008436907, + -0.020013722, + -0.023868404, + -0.023000462, + 0.017167382, + -0.011034351, + -0.019783972, + 0.030684302, + -0.0126681235, + -0.007715749, + 0.002080508, + 0.012700033, + 0.018545877, + 0.017665172, + 0.0027059368, + -0.0052427524, + -0.011640633, + -0.008634746, + 0.029127112, + 0.012138424, + 0.006866953, + -0.013836016, + 0.006298961, + -0.004687525, + 0.013453101, + 0.011672543, + -0.0032117045, + 0.01871181, + -0.0056767236, + -0.0031510761, + -0.0043046093, + -0.023893932, + -0.01424446, + -0.0040174224, + 0.050774608, + 0.016388787, + 0.012559631, + -0.0059575285, + -0.009623945, + -0.01825231, + -0.0120235495, + 0.017065272, + 0.004885365, + -0.0037015174, + -0.012431992, + -0.0010554111, + 0.027620977, + 0.023625892, + -0.05330185, + -0.008264595, + 0.018328892, + -0.0013824848, + -0.024723582, + 0.0127191795, + -0.0038642564, + 0.0084432885, + 0.013274407, + 0.0003234839, + -0.0015196962, + -0.0061106947, + -0.0029500455, + 0.022336742, + 0.006171323, + -0.017575825, + -0.0073328335, + -0.03441135, + -0.0100515345, + 0.024225792, + -0.0069690635, + -0.018290602, + -0.014423153, + 0.018226782, + 0.00917721, + -0.014550792, + 0.0035228233, + 0.01407853, + -0.0069818273, + -0.0019927565, + -0.03949136, + -0.010185555, + -0.013504156, + 0.013619031, + 0.011506613, + 0.005226798, + 0.009113391, + -0.0032675464, + 0.021341162, + 0.01063229, + 0.026421174, + -0.038368143, + 0.018456532, + 0.0074859997, + 0.0027282736, + 0.012904255, + -0.015316623, + 0.0023134483, + -0.024098154, + -0.011985258, + -0.016324967, + 0.017933212, + 0.0031143802, + 0.051131994, + -0.00884535, + -0.031756464, + 0.033313654, + -0.024187502, + 0.0015460217, + 0.012176716, + 0.00075386505, + -0.022847297, + -0.011812946, + -0.011181135, + 0.013733906, + 0.020166887, + -0.016580245, + -0.0046268967, + -0.00023393749, + -0.029790832, + 0.027416756, + -0.028054949, + -0.0013585526, + 0.028718669, + 0.0026421174, + 0.011181135, + 0.015457026, + -0.0187501, + -0.019056432, + 0.014486973, + 0.02610208, + 0.0031957496, + -0.0010290856, + 0.020064777, + -0.008749621, + -0.022004882, + -0.01149385, + 0.0010266925, + -0.036096174, + -0.015954817, + -0.014563556, + -0.000048811766, + 0.01457632, + 0.00848158, + 0.029867416, + -0.02003925, + -0.020115832, + 0.0057533067, + -0.012789381, + -0.007792332, + 0.007186049, + -0.0062064235 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.0068448135, + -0.0051383944, + -0.0014504561, + -0.018907761, + -0.00089547125, + 0.019851873, + -0.027302703, + -0.020311171, + 0.010346959, + -0.009843008, + 0.0014743779, + 0.009658013, + -0.0074189357, + 0.008356669, + -0.017351251, + -0.0048513333, + 0.030339172, + 0.021931471, + 0.024751049, + -0.006072938, + -0.031461902, + 0.013396187, + 0.0035117145, + 0.0038944627, + -0.020808743, + 0.00003924664, + 0.013919275, + -0.015833016, + 0.016700579, + 0.012975164, + 0.022110086, + -0.011641924, + 0.00745721, + -0.036080394, + -0.020515302, + 0.0104235085, + 0.0019631793, + -0.0057220855, + 0.018741902, + -0.012649828, + 0.005792256, + 0.0062834495, + 0.004120922, + 0.00004826714, + -0.008535285, + 0.016011633, + 0.01781055, + 0.0015860128, + -0.012949646, + 0.008771312, + 0.009211473, + 0.03044124, + -0.032967377, + -0.0052851145, + -0.0007722742, + -0.027149605, + -0.015896808, + 0.022696968, + -0.022071812, + -0.02068116, + -0.0024766997, + -0.010040761, + -0.0002523746, + -0.016955744, + 0.0021370107, + -0.0035404207, + -0.0214339, + 0.0032884448, + -0.0031050446, + 0.005039518, + 0.024865873, + 0.03449837, + 0.0023826074, + 0.0063982736, + 0.040724408, + 0.007297732, + 0.0017526677, + 0.02401107, + -0.012158634, + -0.0018627078, + -0.0026840216, + -0.01839743, + -0.01159727, + -0.011833298, + 0.026639273, + 0.0041560074, + -0.0019839115, + 0.010327822, + -0.002164122, + -0.01884397, + -0.004238936, + 0.026741339, + 0.027506836, + 0.0046344427, + -0.0018100799, + 0.021765614, + 0.022480076, + 0.015730951, + 0.03181913, + -0.03235498, + 0.005368043, + 0.031257767, + -0.034294236, + 0.0065322355, + -0.033043925, + -0.021025633, + 0.0036839512, + -0.010442646, + 0.021854922, + -0.017249186, + -0.015641643, + 0.021127699, + 0.037356224, + -0.01374066, + -0.0124648325, + -0.023207298, + 0.035340417, + -0.007973921, + -0.010429888, + -0.011928985, + -0.00053903705, + 0.046057366, + 0.022658693, + -0.040800955, + 0.026843406, + 0.0012192124, + -0.009466639, + -0.026792374, + 0.0031895682, + 0.007036187, + 0.005084172, + 0.016305072, + 0.006921363, + 0.020272896, + -0.011182626, + -0.004085837, + -0.031997748, + 0.01862708, + 0.0050076223, + -0.018639836, + 0.012834823, + 0.031436384, + -0.01728746, + -0.009670771, + -0.008528905, + 0.031997748, + 0.022403527, + -0.01041713, + -0.012866718, + -0.002889749, + 0.0034830084, + -0.008943549, + 0.0031576725, + 0.0024719154, + 0.009428363, + 0.003929548, + -0.0018961983, + 0.0045100492, + -0.032763243, + -0.0014791623, + -0.018193297, + 0.014085134, + 0.033069443, + -0.0029088862, + 0.037994135, + 0.01846122, + 0.002902507, + -0.0032262483, + -0.0022470509, + -0.007476348, + -0.0061175916, + 0.041183706, + -0.013574802, + 0.012254321, + 0.008892516, + 0.008809587, + 0.0025468701, + 0.0023810128, + -0.017376767, + -0.008866999, + -0.026562724, + -0.0024846736, + 0.011431413, + -0.0018355965, + 0.007431694, + -0.005077793, + 0.014633738, + -0.0060825064, + 0.005355285, + -0.015730951, + 0.030415723, + 0.0102193765, + 0.003588264, + -0.02845095, + -0.686293, + -0.036743827, + 0.018882243, + 0.0051479633, + 0.01838467, + 0.03153845, + 0.010538333, + 0.023526255, + 0.004691855, + -0.0103597175, + 0.010181102, + 0.011086939, + 0.016317831, + -0.009358193, + -0.009096649, + -0.015297169, + -0.008918033, + 0.0017367199, + 0.011807782, + 0.007042567, + 0.0010374071, + 0.009045616, + -0.019494642, + 0.005651915, + 0.02083426, + -0.0020955463, + 0.0068575717, + 0.0042580734, + -0.01071695, + 0.0031512934, + -0.020566335, + 0.010455404, + -0.028731631, + -0.009396468, + 0.04661873, + 0.0048609017, + -0.0054158866, + 0.017172635, + 0.008063229, + 0.012681724, + -0.002955135, + 0.0041910927, + 0.01351101, + -0.027532352, + -0.012209667, + 0.019737048, + 0.005103309, + 0.010289547, + 0.021127699, + 0.00010326227, + 0.023449706, + -0.005645536, + 0.023985554, + 0.0068256757, + 0.023577288, + 0.00052627875, + 0.031487416, + -0.0006279462, + -0.0037477426, + 0.0051798588, + -0.0006949272, + 0.006908605, + -0.026919955, + -0.022582144, + -0.022633176, + 0.01321757, + -0.027200637, + -0.029752292, + -0.008560801, + 0.0037477426, + -0.0014863388, + 0.014365816, + -0.008650109, + 0.015960598, + 0.02282455, + -0.0027079433, + 0.020579094, + 0.007010671, + 0.0022757568, + 0.00812702, + -0.0012120359, + -0.022275945, + -0.006012336, + -0.00029922137, + 0.031666033, + -0.033299092, + -0.030619854, + -0.028604047, + 0.015896808, + -0.017389527, + 0.035187315, + 0.023028683, + -0.01676437, + -0.0066598183, + -0.0072849737, + 0.014723047, + 0.008924412, + 0.007916508, + 0.0052627875, + -0.01041075, + 0.010149206, + -0.00554028, + -0.0011211332, + 0.010270409, + 0.017938131, + -0.00024021436, + -0.022071812, + 0.026384108, + 0.0140085835, + 0.0039104107, + 0.026715823, + -0.010302305, + -0.011673819, + 0.01884397, + 0.0087139, + -0.025695162, + 0.038300335, + 0.0013531743, + 0.011590891, + -0.00923699, + 0.014378574, + 0.023003167, + -0.0056965686, + -0.00075831986, + 0.0016027581, + -0.0012279837, + -0.011584512, + -0.009319918, + -0.037509322, + -0.0027669505, + 0.003463871, + 0.0012989517, + 0.016113698, + 0.005642346, + 0.0074189357, + -0.0043154857, + 0.005687, + -0.014952696, + 0.022441803, + -0.016483689, + -0.01491442, + -0.0062387954, + -0.01321757, + 0.0049533993, + -0.0012582847, + -0.019124651, + -0.04327606, + -0.007291353, + -0.012528623, + 0.018665353, + -0.016356105, + -0.009913178, + -0.029190928, + 0.014365816, + 0.016687822, + 0.000094241776, + -0.022722485, + -0.01034058, + 0.001082061, + 0.015207862, + 0.014518915, + -0.007667722, + -0.012062947, + -0.0030779333, + -0.008918033, + -0.033579774, + -0.0069723963, + 0.026613757, + -0.00900734, + -0.01610094, + 0.0017016346, + -0.012649828, + -0.016534721, + -0.013383429, + -0.018103989, + -0.016955744, + -0.024572434, + -0.025427237, + -0.0007714768, + -0.018282605, + 0.0021736908, + 0.025542062, + 0.010066277, + -0.020859776, + 0.04748629, + -0.019609466, + 0.012656206, + 0.026026877, + -0.012592415, + 0.015360961, + -0.0019169305, + -0.011571754, + -0.018129505, + -0.0020253758, + 0.020744951, + 0.008484252, + 0.002813199, + 0.008560801, + 0.012254321, + -0.012056568, + 0.015258894, + -0.00310345, + 0.015399235, + -0.026154459, + 0.0006363189, + -0.03628453, + 0.021063909, + -0.0022247238, + 0.014250991, + 0.01964774, + 0.010927461, + -0.014735805, + -0.003907221, + -0.012949646, + 0.0088478625, + -0.018269846, + -0.013970309, + 0.00812064, + 0.006455686, + -0.009071132, + 0.004104974, + 0.018333638, + 0.018639836, + -0.00820357, + -0.019890148, + 0.0028674218, + 0.029803324, + 0.016700579, + -0.0040124767, + -0.0060250945, + -0.021459416, + 0.0051830485, + -0.018869486, + 0.003884894, + -0.036105912, + -0.00048601045, + 0.0030492272, + -0.02681789, + 0.010200239, + 0.007922888, + -0.0099705905, + 0.035416964, + 0.018155022, + -0.01883121, + 0.020847017, + -0.008312015, + 0.027277187, + 0.021689063, + -0.013664111, + 0.013077229, + -0.0055785547, + -0.000964047, + -0.016164731, + 0.018218813, + 0.027685452, + -0.020183587, + 0.04401604, + 0.0021752855, + 0.031461902, + 0.008107882, + -0.0075592767, + -0.012362766, + 0.0032071108, + -0.021229766, + 0.023832453, + -0.006621544, + -0.012369146, + 0.0016059476, + -0.00893717, + -0.015909566, + -0.0080377115, + 0.0060155257, + 0.0020939515, + 0.006366378, + 0.003597833, + -0.011667441, + 0.00012050587, + -0.003170431, + 0.031946715, + 0.013051713, + 0.0058177724, + -0.03258463, + 0.012987922, + 0.0068256757, + -0.0063057765, + -0.0069851545, + -0.007980299, + 0.007202045, + -0.0038880836, + -0.006337672, + 0.003996529, + 0.020183587, + 0.006328103, + -0.009185957, + 0.011380379, + -0.017376767, + -0.002947161, + 0.005747602, + 0.0022725672, + 0.006627923, + 0.002889749, + -0.03005849, + -0.02607791, + -0.008650109, + -0.002468726, + 0.010174722, + -0.0073997984, + 0.010582987, + -0.026894439, + -0.026307559, + 0.018525012, + 0.0010206618, + 0.0066661974, + -0.0077059967, + -0.0037796383, + -0.0076613426, + -0.03258463, + -0.00088669994, + 0.036182463, + 0.010353338, + 0.00989404, + -0.021293558, + -0.022199394, + -0.0006634302, + 0.07399798, + 0.026613757, + 0.0062962077, + 0.010876427, + 0.02017083, + -0.008650109, + -0.021625273, + 0.0028163886, + -0.0074125566, + -0.010697812, + 0.0056551043, + 0.00080696074, + -0.0009217852, + 0.006749126, + 0.013051713, + -0.012656206, + 0.009000962, + -0.0047173714, + 0.025172072, + -0.026996505, + -0.008771312, + 0.029803324, + -0.0144296065, + 0.004101785, + 0.0028594478, + 0.005450972, + 0.0175809, + 0.0044334996, + 0.02415141, + -0.02046427, + 0.0068320553, + 0.019851873, + -0.0031799995, + -0.014633738, + -0.011514341, + 0.007572035, + -0.02643514, + -0.005827341, + 0.008624593, + -0.027455803, + 0.029956425, + 0.010461784, + 0.009173199, + -0.0098621445, + -0.011329346, + 0.012005535, + -0.0103597175, + 0.033299092, + -0.01787434, + -0.01779779, + 0.025491029, + -0.003243791, + -0.01011731, + -0.012719998, + 0.013804452, + 0.0068384344, + -0.025771711, + 0.007750651, + -0.010346959, + -0.0054605408, + -0.0017319355, + -0.0036807617, + -0.009932315, + -0.008662867, + -0.010130068, + -0.008886137, + 0.000897066, + -0.0037796383, + -0.016534721, + 0.015909566, + 0.008114262, + -0.012222425, + -0.016853679, + -0.0006737963, + 0.02327109, + 0.010997632, + 0.0102831675, + -0.006781022, + -0.008375806, + 0.045113254, + 0.007297732, + -0.014633738, + -0.0031353456, + 0.010997632, + -0.0001480159, + 0.000024307998, + 0.021165974, + -0.017134361, + -0.018218813, + 0.00037796382, + 0.041540936, + -0.00642698, + 0.027302703, + -0.009881282, + -0.009811112, + -0.0027605712, + 0.014314782, + 0.0039327377, + -0.022403527, + -0.010232135, + 0.010589367, + -0.018958794, + -0.0022326978, + -0.025746195, + 0.0068384344, + 0.0042931587, + 0.012834823, + -0.0123244915, + -0.02783855, + 0.007814442, + 0.021829404, + -0.011826918, + -0.0022805412, + -0.011935364, + -0.008044091, + 0.010761603, + 0.0061207814, + 0.012241563, + -0.003671193, + -0.0248276, + 0.017083326, + -0.05008898, + 0.0282213, + -0.0005131218, + -0.007316869, + -0.014059616, + 0.011514341, + -0.013919275, + -0.0032629282, + 0.02666479, + -0.008528905, + 0.018001923, + -0.022888342, + -0.013944793, + -0.055115737, + -0.028553015, + 0.025605854, + 0.017045053, + -0.015998874, + -0.010742466, + -0.0027111329, + 0.0152716525, + 0.0024495884, + -0.001299749, + -0.041540936, + -0.019966697, + -0.00088909216, + 0.026486175, + -0.014646498, + 0.026537208, + -0.007189287, + 0.021025633, + 0.0038434297, + 0.023092473, + 0.00081892166, + -0.0031720256, + -0.015628884, + -0.00967715, + 0.023539014, + 0.024176927, + 0.0008097516, + -0.0005513966, + 0.00092896173, + -0.0021019254, + -0.011354863, + -0.00093693566, + -0.009032857, + -0.0026329886, + -0.019252233, + 0.011106077, + 0.034728017, + 0.012094842, + 0.019494642, + -0.0066853347, + 0.015769225, + 0.009026478, + 0.0018037008, + -0.015692675, + -0.0350087, + -0.04557255, + 0.0024097187, + -0.0010804662, + -0.0140341, + -0.0010884402, + -0.0016019606, + 0.0027191069, + 0.018231573, + 0.0074189357, + 0.007973921, + 0.006359999, + 0.033732872, + -0.0015126527, + 0.04123474, + -0.009964211, + -0.0022183447, + -0.0026680739, + -0.022416286, + -0.0006211684, + 0.01321757, + -0.005205375, + 0.014250991, + 0.004101785, + 0.0107041905, + -0.02003049, + 0.019507399, + 0.0091604395, + 0.02407486, + 0.0011625976, + -0.00080735947, + -0.009753699, + -0.02503173, + -0.032839794, + -0.038581017, + -0.028731631, + 0.009154061, + 0.00036759774, + -0.030594338, + 0.02009428, + 0.0077059967, + -0.032227397, + 0.0049916743, + 0.014646498, + 0.023220057, + -0.0094092265, + 0.022620417, + 0.007948404, + -0.013179296, + -0.002318816, + -0.0034160276, + -0.01654748, + 0.012936888, + 0.033656325, + 0.017836066, + -0.009619738, + 0.0075018643, + 0.010927461, + 0.0059931986, + 0.011865194, + -0.013243088, + -0.011393137, + 0.009976969, + 0.0081461575, + -0.020885292, + 0.01248397, + -0.0109848725, + 0.019469125, + -0.021153217, + -0.009855766, + -0.00032713008, + -0.022786275, + -0.0023985554, + 0.0042899693, + -0.03796862, + 0.010244893, + 0.018346397, + 0.011316588, + -0.007170149, + 0.008331152, + -0.002674453, + -0.0027063487, + -0.014072374, + 0.0047747837, + -0.015463026, + 0.0023395482, + -0.00043736954, + 0.0077761672, + -0.019111892, + -0.004242126, + -0.000620371, + 0.025975844, + -0.0069405003, + -0.007061704, + -0.017236426, + 0.010072656, + 0.042663664, + -0.032023266, + -0.00023403457, + 0.0032820657, + -0.0012622717, + -0.009785595, + 0.002829147, + -0.00138507, + -0.010870049, + 0.026460657, + -0.012267079, + -0.011686577, + -0.016330589, + -0.016560238, + 0.003597833, + -0.0073615233, + -0.0038402402, + -0.016968504, + 0.01101039, + 0.013753418, + 0.0029854358, + -0.0022917048, + 0.015501302, + 0.0035467998, + -0.027557869, + 0.033069443, + -0.015526818, + 0.0055945027, + 0.0002005441, + 0.0109210815, + -0.0024830787, + 0.0011865194, + 0.029981941, + -0.0011171462, + -0.02060461, + -0.008484252, + 0.0047237505, + -0.0073934193, + -0.004924693, + -0.015386477, + -0.0053871805, + -0.0040316144, + 0.015488544, + -0.00960698, + -0.0084268395, + -0.016266799, + -0.014825113, + -0.008312015, + 0.014939938, + -0.014761321, + -0.006781022, + 0.01898431, + -0.0031225872, + -0.0002266587, + -0.021446656, + -0.01411065, + -0.010997632, + 0.007871854, + 0.00269678, + -0.0192012, + 0.0017335303, + -0.01802744, + 0.00080815685, + -0.0035340416, + 0.001234363, + 0.00827374, + 0.007055325, + 0.014455123, + -0.022403527, + 0.023475222, + -0.007839958, + 0.002172096, + -0.009485776, + -0.0022709726, + -0.026486175, + 0.0021035203, + -0.008554422, + 0.0052723563, + 0.0060538, + -0.02748132, + -0.026103426, + 0.012834823, + -0.012126738, + 0.008733038, + 0.006729989, + -0.0047747837, + 0.014238233, + 0.0014791623, + -0.0174278, + 0.030160557, + -0.009587842, + 0.0054701096, + -0.023615563, + 0.0021083045, + -0.010876427, + -0.019609466, + -0.009473017, + 0.019992214, + -0.00055418746, + -0.01801468, + 0.019290509, + -0.0042740214, + -0.0015293979, + -0.0127455145, + 0.0035053354, + -0.0016761181, + 0.016164731, + 0.00325017, + 0.027149605, + -0.0048927977, + 0.01093384, + -0.007725134, + 0.0004397617, + 0.007929266, + 0.02260766, + -0.008535285, + -0.0068001593, + 0.011992777, + -0.010334201, + -0.011055043, + -0.0282213, + 0.023615563, + -0.0123244915, + 0.013370669, + 0.019583948, + -0.016662303, + -0.00036361077, + 0.031206734, + -0.0077889254, + -0.016011633, + -0.018001923, + 0.0029312132, + -0.019979455, + -0.0069787754, + 0.005058655, + -0.016368864, + 0.003907221, + -0.025529305, + -0.0073551442, + -0.03102812, + -0.015105795, + -0.019367058, + 0.004934262, + -0.026358591, + 0.023947278, + 0.028374398, + -0.025172072, + 0.00048800395, + -0.028348882, + -0.0021912334, + -0.011980019, + -0.007316869, + -0.007042567, + -0.041796103, + -0.026741339, + -0.010161964, + -0.007935646, + -0.020221863, + 0.00089547125, + -0.0025532492, + 0.00060801144, + 0.021063909, + 0.22862825, + -0.003073149, + -0.01684092, + 0.034779053, + -0.003604212, + 0.023960037, + 0.03457492, + -0.0062962077, + 0.013536528, + 0.042357467, + -0.008280119, + 0.007750651, + 0.00032573464, + 0.00043338258, + 0.02208457, + -0.025886536, + -0.015424752, + -0.02009428, + -0.013345153, + -0.010174722, + 0.020477029, + -0.015539576, + 0.009351814, + 0.00812064, + 0.04003546, + 0.0021098994, + -0.017312976, + 0.0074125566, + 0.019175684, + 0.003833861, + -0.004602547, + -0.002666479, + 0.0013834753, + -0.012069326, + -0.014544431, + 0.012968784, + 0.006324914, + 0.012579657, + 0.026741339, + 0.037560355, + 0.004937452, + 0.016713338, + -0.022722485, + -0.0052755456, + -0.008222707, + 0.016802644, + -0.020489786, + 0.010225756, + 0.022773517, + 0.0047684046, + -0.015539576, + 0.0052627875, + 0.019048102, + 0.017274702, + -0.002747813, + 0.021663547, + 0.033401158, + -0.0027286755, + 0.021012876, + -0.019660499, + -0.008554422, + 0.017555384, + -0.019086376, + 0.008784071, + 0.001584418, + -0.016419897, + -0.0070808413, + -0.00531701, + 0.016891953, + -0.00901372, + 0.015093037, + 0.010519196, + 0.019443607, + 0.015871292, + -0.0076932386, + -0.013893759, + 0.031130185, + 0.0025054058, + 0.02319454, + -0.0009520861, + -0.008452356, + -0.002039729, + -0.02282455, + 0.0016585755, + -0.0050171907, + -0.0246745, + 0.015029245, + 0.0038944627, + 0.022288702, + -0.015169586, + 0.0015604963, + -0.0029790567, + 0.011252796, + -0.012822065, + 0.020196347, + 0.025427237, + -0.009256127, + 0.02165079, + -0.026090669, + 0.012388282, + -0.031640515, + -0.026639273, + 0.007329628, + -0.016534721, + -0.0077889254, + 0.008803208, + 0.0025819554, + 0.011214522, + 0.020961842, + 0.008280119, + -0.015679916, + -0.0018643026, + 0.010308685, + -0.017517108, + 0.019979455, + -0.005878374, + 0.004663149, + -0.019711532, + -0.004883229, + -0.021114942, + -0.012975164, + -0.027608903, + -0.0075082434, + 0.00812064, + -0.008752175, + -0.002688806, + 0.006235606, + 0.008752175, + 0.0014145735, + -0.05016553, + 0.01721091, + 0.0058975117, + 0.023666596, + -0.011118835, + -0.011795023, + 0.0043091066, + -0.01100401, + 0.008918033, + -0.003374563, + 0.0071446327, + -0.0126051735, + -0.017517108, + 0.017759515, + -0.016777128, + 0.0026935902, + -0.003175215, + 0.0002242665, + -0.020400478, + -0.03212533, + -0.03102812, + -0.00849063, + -0.023615563, + 0.0009401252, + -0.015935082, + 0.029777808, + 0.0025213538, + -0.018282605, + -0.016572997, + -0.007603931, + 0.029497126, + -0.0052723563, + 0.017096085, + 0.024049344, + -0.02267145, + -0.0077953045, + -0.008241844, + -0.16259143, + 0.030415723, + 0.0077953045, + -0.0041336804, + -0.002865827, + 0.0018643026, + 0.021076666, + 0.021012876, + -0.009651633, + 0.026307559, + 0.0032820657, + 0.00269678, + -0.037943102, + -0.012694482, + -0.004219799, + 0.021548722, + -0.010608504, + -0.0030492272, + 0.015705435, + 0.006921363, + 0.012496728, + -0.028017167, + 0.012611553, + 0.013421703, + 0.009804733, + 0.0072403196, + -0.01624128, + 0.035799712, + -0.0020492976, + -0.009262506, + -0.0050044325, + 0.0016952555, + 0.017376767, + 0.02202078, + 0.011584512, + 0.011590891, + -0.0031130186, + 0.0033426674, + -0.0032724969, + -0.00035902578, + 0.0028355261, + 0.02282455, + -0.00879045, + 0.00864373, + -0.005342527, + 0.013791692, + 0.035672132, + 0.013459978, + 0.0064046527, + -0.0064461175, + 0.003588264, + -0.04291883, + -0.018601561, + -0.013855484, + 0.020859776, + 0.022786275, + 0.030568821, + 0.009740941, + -0.017912615, + 0.01566716, + 0.0107807405, + -0.036667276, + -0.010008865, + 0.020732194, + -0.006044232, + -0.017976407, + 0.014786839, + 0.00065904454, + 0.0012120359, + 0.0020620557, + -0.019775324, + -0.010015245, + 0.0039486852, + -0.032763243, + 0.010895565, + 0.012075705, + 0.0043122964, + -0.008471493, + -0.00908389, + -0.011954501, + -0.004277211, + 0.026179975, + -0.011705715, + -0.0012822064, + -0.007954783, + 0.01824433, + -0.0051575317, + -0.0072530783, + -0.026052393, + -0.020362204, + 0.025593095, + -0.050114494, + -0.0028195784, + -0.038096204, + 0.011980019, + 0.018333638, + 0.0024719154, + -0.0046280636, + 0.0059644924, + -0.004242126, + 0.01654748, + -0.0053808014, + -0.016598513, + 0.0119034685, + 0.015781984, + 0.017402284, + -0.009396468, + 0.0012917751, + 0.02985436, + 0.009294402, + -0.005753981, + 0.027966134, + 0.0062451744, + 0.025733436, + 0.01152072, + 0.0056901895, + -0.00019575974, + -0.02842543, + -0.0010023218, + -0.0070808413, + 0.042229883, + -0.0016888763, + -0.0055626067, + 0.013408945, + -0.0041847136, + -0.0017749947, + -0.10655709, + 0.0007662938, + 0.017121602, + 0.015424752, + -0.0019073618, + 0.0068256757, + -0.007750651, + 0.016483689, + 0.012126738, + 0.03021159, + -0.0033649944, + -0.017721241, + -0.014774079, + -0.0019568, + 0.00091700087, + -0.010736086, + 0.005533901, + -0.032303948, + -0.030339172, + 0.0032007317, + -0.012203288, + -0.0057444125, + 0.0047396985, + -0.024470367, + -0.0068129175, + 0.0072403196, + -0.03352874, + 0.01640714, + 0.009058374, + -0.0028482843, + 0.010755224, + -0.009536809, + 0.022531109, + -0.008637351, + -0.015335444, + -0.0077889254, + -0.014901662, + -0.016151974, + 0.007935646, + -0.024393817, + -0.003996529, + 0.0029806516, + 0.0012327681, + -0.024100378, + -0.016853679, + 0.010551091, + 0.0017494782, + 0.006468444, + -0.001757452, + -0.02165079, + 0.005789066, + 0.024164168, + -0.011208143, + -0.0063185347, + 0.039933395, + -0.0059836297, + 0.008822345, + 0.01661127, + -0.016483689, + -0.0008021764, + -0.0065705106, + 0.023169024, + -0.013689627, + 0.034166653, + -0.017096085, + -0.012739135, + -0.03738174, + 0.009702667, + 0.018550528, + -0.021816647, + 0.0059995777, + 0.02267145, + -0.017848823, + 0.020119796, + -0.008248223, + 0.00480349, + -0.019532915, + -0.024521401, + 0.015360961, + -0.027864067, + -0.032252915, + -0.031181218, + 0.009517672, + -0.022301462, + -0.007202045, + 0.025886536, + -0.003964633, + -0.011909848, + 0.027787518, + -0.0026473417, + 0.0074061775, + 0.042459533, + 0.007438073, + -0.03633556, + -0.016330589, + 0.02586102, + -0.0011251202, + -0.0131665375, + -0.008044091, + -0.014455123, + -0.021727338, + -0.005827341, + -0.03694796, + 0.023717629, + -0.02903783, + -0.026282042, + 0.0070999786, + 0.012509487, + 0.0015373719, + -0.0097218035, + -0.019545674, + -0.0066917143, + -0.02681789, + 0.008229086, + -0.010397992, + -0.017976407, + -0.017261943, + -0.000629541, + 0.021905955, + -0.0025660077, + 0.018333638, + -0.00036101925, + 0.0056997584, + 0.0064588757, + 0.015705435, + 0.0021816646, + -0.033707358, + 0.012490349, + -0.032329462, + -0.011074181, + -0.023590047, + 0.00063033844, + 0.014174441, + -0.0127455145, + 0.0214339, + 0.029650226, + -0.021000117, + -0.022403527, + -0.010850911, + 0.026792374, + 0.011412275, + -0.017172635, + -0.022556627, + -0.026116185, + 0.014557189, + -0.016662303, + -0.016828163, + 0.020451512, + 0.0005513966, + -0.0059517343, + 0.007170149, + -0.0019631793, + 0.008439598, + 0.023449706, + 0.027659936, + -0.014442365, + -0.0039773914, + -0.0018196487, + 0.023015924, + 0.021140458, + -0.007846338, + -0.0097218035, + 0.00635043, + -0.006506719, + 0.01129745, + 0.021063909, + -0.0029503505, + 0.0072530783, + -0.0098302495, + 0.0060538, + 0.010621262, + -0.031283285, + -0.010825395, + -0.008694763, + 0.033350125, + 0.0012104411, + 0.02982884, + 0.0012064541, + -0.00450686, + -0.0080377115, + -0.009740941, + 0.019456366, + 0.009664392, + -0.00020572715, + -0.019915665, + 0.00034307793, + 0.025873777, + 0.025758952, + -0.03590178, + -0.019507399, + 0.016203007, + -0.0044494476, + -0.023181781, + 0.01374066, + -0.010965736, + 0.014340298, + 0.002792467, + 0.0015868102, + 0.008152536, + -0.005776308, + -0.0036935199, + 0.039703745, + 0.0006375149, + -0.0041336804, + -0.012082084, + -0.020349445, + -0.019596707, + 0.0004202256, + -0.018920518, + -0.009524051, + -0.010378855, + 0.00017632332, + -0.010908323, + 0.0041464386, + -0.009587842, + 0.02459795, + -0.011386759, + 0.007170149, + -0.04358226, + -0.016509205, + -0.022913858, + 0.014723047, + 0.0017909425, + 0.00539356, + 0.008024953, + -0.0044526374, + 0.025057247, + 0.017478833, + 0.031742584, + -0.011724853, + -0.0053138207, + 0.024534158, + 0.006334482, + -0.015195102, + 0.015067521, + -0.02038772, + -0.021599757, + -0.008114262, + -0.015718192, + 0.02888473, + -0.00021489715, + 0.047818005, + -0.0028977226, + -0.01839743, + 0.029292995, + -0.0052500293, + -0.0002661296, + 0.0073997984, + 0.012962406, + -0.012598794, + -0.011801402, + -0.012994301, + -0.0012391473, + 0.025771711, + -0.0017032294, + -0.009868524, + -0.00010655151, + -0.032635663, + 0.033273574, + -0.039627194, + -0.011788644, + 0.009728183, + 0.0049661575, + 0.024661742, + 0.00901372, + -0.016458172, + -0.0004052745, + 0.010378855, + 0.015781984, + -0.019188443, + -0.008254603, + 0.013983067, + -0.01130383, + -0.037203122, + -0.0096006, + 0.007839958, + -0.027762001, + -0.014939938, + -0.026409624, + -0.0013148995, + 0.01411065, + 0.0121841505, + 0.010551091, + -0.029114379, + -0.032967377, + -0.0073551442, + -0.0044079833, + -0.023730388, + -0.0034830084, + -0.022046296 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 46, + "total_tokens": 46 + } +} +327 34451 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 131 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["What colors are all of the pieces of furniture next to the desk and the desk itself?"]}HTTP/2.0 200 OK +Content-Length: 33489 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:43:11 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 130 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-canary-6d6cf5db5-p5xqq +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999979 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_5bc06206341e4ca9ab6eca4ade4945e1 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.010940914, + 0.00037101895, + 0.0019054401, + -0.018620905, + -0.012196111, + 0.010196854, + -0.024728665, + -0.0048946193, + 0.019022051, + 0.0058942474, + 0.0070329825, + -0.0033191538, + -0.022502957, + 0.0068453504, + -0.005832782, + 0.0009373536, + 0.010552709, + 0.016097572, + 0.026281487, + -0.020885436, + -0.032816272, + 0.009122821, + -0.003642658, + -0.0032479828, + -0.021040717, + 0.008708735, + 0.030823486, + -0.004545235, + 0.009433384, + 0.01748217, + 0.03421381, + -0.010170974, + 0.0015277489, + -0.039596923, + -0.012558435, + 0.02888246, + 0.00837229, + 0.0072982563, + 0.01519176, + -0.007815863, + -0.0021076303, + 0.009562786, + 0.00030207212, + 0.00009371514, + -0.0046228757, + 0.0040761535, + 0.011186778, + 0.016226973, + -0.015748188, + 0.0040082177, + 0.021959469, + 0.036517162, + -0.02049723, + -0.017805675, + 0.009291043, + -0.018426802, + 0.0032415127, + 0.041434426, + -0.035973676, + -0.011549102, + 0.009724538, + 0.002754639, + -0.0017954487, + -0.001341734, + -0.004102034, + -0.015049418, + -0.01288841, + 0.0018569145, + -0.0029940319, + 0.0110250255, + 0.034343213, + 0.055849776, + 0.015101179, + 0.01589053, + 0.033152718, + -0.0014484903, + 0.0087928455, + 0.0023809914, + -0.0065024355, + -0.0027853716, + 0.00987335, + 0.0012762243, + -0.027873127, + -0.0019572007, + 0.023175845, + 0.00016347074, + 0.02357699, + 0.027588444, + -0.007912914, + -0.0021302756, + -0.015372923, + 0.028494256, + 0.009769829, + -0.011251478, + -0.0077058715, + 0.01586465, + 0.019229094, + 0.022671178, + 0.004791098, + -0.02968475, + 0.015579965, + 0.017715093, + -0.03856171, + 0.0033417991, + -0.019034991, + -0.027484922, + -0.000926031, + -0.020717213, + 0.020354887, + -0.014907076, + -0.034472615, + 0.028261332, + 0.023318186, + -0.016201094, + -0.002047782, + -0.01818094, + 0.035559587, + -0.018698547, + -0.009815119, + -0.016421076, + 0.0045064143, + 0.043634254, + 0.026126204, + -0.026993196, + 0.028753059, + 0.002591269, + -0.008864017, + -0.0067030084, + -0.026372068, + -0.016472837, + 0.007692931, + 0.022671178, + 0.009316923, + 0.027536683, + -0.006596252, + 0.0040308633, + -0.016252855, + 0.021687726, + 0.00646685, + -0.008171718, + 0.011736735, + 0.015424684, + -0.009252222, + -0.0074858884, + 0.00986688, + 0.034162052, + 0.012364333, + -0.011283829, + -0.021739487, + -0.0035132563, + 0.01445417, + 0.00044684028, + 0.015411743, + 0.0130372215, + 0.0069488715, + 0.017145727, + -0.03623248, + -0.018336222, + -0.030849367, + -0.012726658, + -0.023357008, + -0.010119214, + 0.025957981, + -0.0077705723, + 0.028649537, + 0.020238427, + 0.027226118, + 0.012364333, + -0.0064215595, + -0.003500316, + -0.012435504, + 0.019940803, + -0.020303128, + 0.0072335554, + 0.004037333, + 0.0078029227, + 0.017249247, + -0.0077899825, + -0.008876957, + -0.0038917563, + 0.0061336407, + -0.020290187, + 0.01749511, + -0.009232812, + -0.0095174955, + -0.023939315, + 0.0104103675, + -0.01666694, + 0.0027061133, + -0.006631837, + 0.030487042, + 0.005842487, + -0.0058133714, + -0.011245009, + -0.65384096, + -0.046429332, + 0.023887554, + -0.02202417, + 0.012344923, + 0.03035764, + 0.02357699, + 0.030849367, + 0.00004443129, + -0.02348641, + 0.012830179, + 0.0069553414, + 0.027743725, + -0.017702153, + -0.0037300042, + -0.024625145, + 0.022425316, + 0.014285948, + -0.011490871, + 0.0017356004, + -0.0060527646, + 0.020885436, + 0.00063164206, + -0.006389209, + 0.02820957, + 0.009045179, + 0.017702153, + -0.008488752, + -0.009679248, + 0.015308222, + -0.024366342, + 0.015321162, + -0.020354887, + -0.005528688, + 0.037552375, + -0.00085647753, + -0.0212607, + 0.015359983, + 0.0062953928, + 0.024819247, + -0.0097439485, + 0.008482282, + 0.008495222, + -0.01589053, + 0.0074729486, + 0.00025597276, + 0.018944409, + 0.0017792735, + 0.0377853, + -0.014492991, + 0.00914223, + -0.017081026, + -0.0031638716, + 0.014156546, + 0.03284215, + 0.0013207061, + 0.04461771, + 0.019306734, + 0.005751906, + 0.006282453, + 0.003338564, + -0.001672517, + -0.035326667, + -0.008132897, + -0.031366974, + 0.0043737777, + -0.038173504, + -0.03470554, + -0.023046443, + -0.02346053, + 0.010462128, + 0.011122077, + -0.01900911, + 0.020393709, + 0.028468376, + 0.0073306067, + 0.02952947, + 0.0032091623, + 0.011458521, + -0.012260811, + -0.0056645595, + -0.0049916706, + -0.03108229, + -0.0145447515, + 0.029348306, + -0.016615178, + -0.019280855, + -0.01667988, + 0.016511658, + 0.005020786, + 0.013496598, + 0.018646786, + 0.00041812926, + -0.006165991, + -0.00142908, + 0.026941435, + -0.004781393, + 0.0017339828, + -0.00045411912, + -0.001118516, + 0.006123936, + -0.012435504, + -0.0060074744, + 0.0031800468, + 0.024081657, + -0.015722306, + -0.027484922, + 0.03411029, + 0.01977258, + -0.00685829, + 0.008728145, + -0.04182263, + -0.015994051, + 0.0071947346, + 0.009362213, + -0.032221023, + 0.045989364, + 0.0014808407, + 0.0024553973, + -0.0042023202, + 0.017663334, + 0.0045064143, + -0.007945265, + -0.009232812, + 0.024482803, + 0.0016102424, + 0.0017792735, + -0.02509099, + -0.018439744, + 0.017986838, + 0.019086752, + 0.0007299065, + 0.008119957, + -0.00094058865, + -0.009426914, + -0.013276615, + 0.009595136, + -0.011070316, + 0.023887554, + -0.023952255, + -0.021674786, + -0.009051649, + 0.0006474129, + 0.0032318076, + -0.004878444, + -0.016563417, + -0.030150598, + -0.0001479021, + -0.028546017, + -0.0063374485, + -0.03403265, + -0.014648273, + -0.04016629, + 0.0066835983, + 0.025686238, + 0.001750158, + -0.03328212, + 0.00026648663, + -0.0035035512, + 0.016485777, + 0.0033029786, + -0.012551965, + 0.0028533076, + 0.005839252, + -0.008139367, + -0.021571264, + -0.020587811, + 0.023796974, + -0.0003390729, + -0.02505217, + -0.0032512178, + -0.008779906, + -0.0055675083, + -0.0077770427, + -0.024599263, + -0.004923735, + -0.0044158334, + -0.014790615, + -0.00012242615, + -0.0073370766, + -0.00047595563, + 0.008074666, + -0.0029244786, + 0.010772692, + 0.032945674, + 0.000028913193, + 0.016861042, + 0.018413862, + -0.017042205, + 0.006243632, + 0.002578329, + -0.0057195555, + -0.014609452, + -0.017728034, + 0.0074664783, + 0.0052569443, + -0.005463987, + -0.0063180383, + 0.01062388, + -0.0060333544, + 0.025401555, + -0.0032835682, + 0.018802067, + -0.028261332, + 0.013406017, + -0.02511687, + 0.011542632, + -0.008954598, + -0.008391701, + 0.028623657, + 0.017792735, + -0.042935487, + 0.0024246646, + -0.019345555, + 0.017960956, + -0.01291429, + -0.020950137, + 0.016861042, + -0.019707879, + 0.0038141152, + 0.005011081, + 0.0037720597, + 0.02958123, + -0.006227457, + -0.015023538, + -0.01065623, + 0.023227606, + 0.024547504, + 0.0013902596, + -0.013418957, + -0.018879708, + -0.012299632, + -0.0061142305, + 0.013444837, + -0.017676273, + 0.00681947, + 0.0050434317, + -0.017844494, + -0.0035164913, + 0.009756888, + -0.006696538, + 0.03266099, + 0.0021852714, + -0.005451047, + 0.029814152, + -0.0038335256, + 0.007660581, + 0.028313093, + -0.027510803, + 0.01138088, + 0.0070847436, + -0.00042823877, + -0.01749511, + 0.02197241, + 0.018672666, + -0.0107468115, + 0.045212954, + -0.012351393, + 0.01290135, + 0.012610196, + -0.0020332243, + -0.017236307, + 0.012707247, + -0.021623025, + 0.014324768, + -0.009808649, + -0.025621537, + -0.00493991, + 0.012331982, + -0.012293162, + 0.000027598957, + 0.010843863, + 0.012991931, + 0.0070265126, + 0.009316923, + -0.00681947, + 0.0012835031, + -0.018620905, + 0.025699178, + 0.0076864613, + -0.006140111, + -0.020898376, + 0.021726547, + 0.00683241, + -0.0080681965, + -0.008268769, + -0.021687726, + 0.01440241, + -0.012759008, + 0.009718068, + 0.016511658, + 0.027459042, + 0.020419588, + -0.0082364185, + -0.00569691, + -0.030538803, + 0.007938795, + 0.0078029227, + 0.021765366, + 0.0044352436, + -0.009899231, + -0.0009575726, + -0.041356783, + -0.013690701, + 0.017042205, + 0.010953855, + 0.004710222, + -0.015631726, + -0.026203845, + -0.04927617, + -0.012564906, + 0.00022584641, + -0.01220258, + -0.0042929016, + -0.00569691, + -0.008398171, + -0.044255383, + -0.009957462, + 0.04557528, + 0.0258674, + -0.017365709, + -0.028390734, + -0.008689324, + 0.0007481036, + 0.07049805, + 0.02743316, + -0.013393076, + 0.01587759, + -0.00081765704, + -0.010455658, + -0.0034841408, + -0.0019620534, + 0.008022905, + -0.008935188, + 0.003068438, + 0.002510393, + 0.0032593054, + -0.0079582045, + 0.0036361879, + -0.0070071025, + -0.005628974, + -0.019358495, + 0.011743205, + -0.03113405, + -0.02127364, + 0.017637452, + -0.005758376, + 0.020846615, + -0.0070912135, + 0.028002528, + 0.014117726, + 0.00058109453, + 0.01667988, + -0.026061503, + 0.0099121705, + 0.023072325, + -0.012739598, + 0.0050369613, + -0.027717846, + -0.030487042, + -0.010889154, + 0.021713607, + 0.0070847436, + -0.003581192, + 0.022412375, + 0.0019749936, + -0.0024780426, + -0.02274882, + -0.0035456067, + 0.025401555, + -0.016175212, + 0.011704384, + -0.0076799914, + -0.015554085, + 0.007505299, + -0.007117094, + -0.0017275128, + -0.0069359313, + 0.0052342988, + -0.011173837, + -0.033825606, + -0.014040085, + -0.003869111, + -0.022127692, + 0.0061271708, + 0.014040085, + 0.009750418, + 0.00084596366, + -0.018310342, + -0.032790393, + -0.013975384, + 0.0027837541, + -0.008482282, + -0.02192065, + -0.020794854, + -0.0036232478, + -0.0073241363, + -0.004244376, + 0.03364444, + 0.02655323, + 0.025336854, + -0.023589931, + 0.005011081, + 0.033592682, + 0.0008322147, + -0.010229205, + 0.006690068, + 0.0056225043, + 0.010138623, + -0.0012592403, + 0.035896033, + -0.009996282, + -0.0048428588, + 0.006224222, + 0.030668205, + -0.0019539658, + 0.021480683, + -0.015735248, + -0.007867624, + -0.0036620682, + 0.01290782, + 0.016589299, + -0.025453316, + -0.024443982, + 0.013574239, + -0.023991076, + 0.0052342988, + -0.017158667, + -0.009938051, + 0.0038270555, + 0.008508163, + -0.0028436026, + -0.011982598, + 0.013794222, + 0.011866136, + -0.0057195555, + -0.016654, + -0.005848957, + 0.008844607, + 0.008113487, + 0.009614547, + 0.024172239, + -0.021403043, + -0.0019086752, + 0.033049196, + -0.046843417, + 0.030823486, + -0.0040632137, + -0.030927008, + -0.0005730069, + 0.008993419, + -0.0039014614, + 0.004930205, + 0.0082881795, + -0.018413862, + 0.03656892, + -0.0041376194, + -0.011924367, + -0.032428067, + -0.010073923, + 0.015450563, + 0.014764735, + -0.018620905, + 0.0010384487, + -0.011898487, + 0.01366482, + -0.008139367, + -0.018659726, + -0.03871699, + -0.029891795, + -0.0028565426, + 0.017158667, + -0.004260551, + 0.026035624, + -0.0045937607, + 0.0068906406, + -0.011963188, + 0.0023098204, + -0.022412375, + -0.012060239, + -0.01441535, + -0.012681367, + 0.021519504, + 0.010520359, + 0.008935188, + 0.0019151452, + 0.0070200423, + 0.009724538, + 0.0039273417, + 0.0085146325, + -0.016239913, + -0.0073758974, + 0.0008872104, + 0.016188154, + 0.010403897, + 0.008669915, + 0.010733872, + 0.012713717, + 0.008728145, + 0.036931247, + -0.017922137, + -0.0110250255, + -0.019552598, + -0.032324545, + 0.013781281, + -0.014285948, + -0.017378649, + -0.0008221052, + -0.0053604655, + -0.000670867, + 0.005454282, + 0.0033547392, + 0.0011872606, + -0.016343435, + 0.036206596, + 0.0006227457, + 0.033722084, + -0.019707879, + 0.01441535, + 0.0075829397, + -0.019863162, + -0.014764735, + -0.0065380214, + -0.004344662, + 0.0041635, + 0.018931469, + 0.008967538, + -0.020303128, + 0.0007489124, + -0.008087606, + 0.013354256, + 0.0043964228, + -0.016356375, + -0.021830067, + -0.030927008, + -0.017210428, + -0.017365709, + -0.032143384, + 0.012571376, + -0.004402893, + -0.045471758, + 0.010552709, + 0.007136504, + -0.035430185, + -0.009996282, + -0.010830923, + 0.026165025, + 0.012978991, + 0.0032835682, + 0.017106906, + -0.010319786, + 0.0036103076, + -0.023978136, + -0.027795486, + 0.00456788, + 0.026734393, + 0.03737121, + -0.028494256, + 0.027303759, + 0.010073923, + -0.015411743, + 0.0009624252, + -0.025530957, + -0.00835288, + -0.007822333, + 0.017042205, + -0.025919162, + 0.011225598, + -0.011613803, + 0.0046714013, + -0.011050906, + -0.019086752, + 0.02120894, + -0.003788235, + -0.002358346, + 0.020160785, + -0.0438413, + 0.03258335, + 0.021687726, + 0.00911635, + -0.019565538, + 0.0020639573, + -0.003642658, + 0.0013465865, + -0.0009041944, + 0.017275129, + -0.00454847, + 0.009659837, + 0.0063406834, + 0.011911427, + -0.022334734, + -0.013354256, + 0.0005232681, + 0.026385007, + -0.018517384, + 0.0066447775, + -0.009672778, + 0.017986838, + 0.048189197, + -0.014182427, + -0.0044417134, + -0.0016708996, + -0.02355111, + 0.0037526495, + 0.003720299, + -0.016175212, + -0.00014274626, + 0.02129952, + -0.017689213, + -0.008909307, + -0.013858923, + -0.011989068, + 0.004474064, + -0.019358495, + -0.02199829, + -0.010086863, + 0.0142083075, + 0.009633957, + 0.004855799, + -0.021040717, + 0.00906459, + -0.008443461, + -0.02494865, + 0.035093743, + -0.0069359313, + 0.007667051, + -0.014868256, + 0.021428922, + -0.0076799914, + -0.023085264, + 0.04404834, + 0.0065768417, + -0.029011862, + -0.013910683, + 0.016796341, + -0.012972521, + 0.0029180085, + -0.013231324, + -0.0015689956, + -0.006677128, + 0.012325512, + -0.001672517, + 0.0044546537, + 0.0034776707, + -0.012733128, + 0.0047619827, + 0.0027869893, + -0.0049043247, + 0.02114424, + -0.0004650374, + 0.007751162, + 0.018245641, + -0.024379281, + -0.014855316, + -0.012810769, + 0.007518239, + -0.0084564015, + -0.006922991, + -0.010805042, + -0.0054995725, + -0.0052116537, + -0.007738222, + -0.004655226, + -0.004014688, + 0.007447068, + 0.02503923, + -0.00015700066, + 0.027148478, + -0.011037965, + 0.005017551, + -0.018491503, + -0.04026981, + -0.03721593, + -0.007207675, + 0.007000632, + 0.0034582606, + 0.009808649, + -0.044565946, + -0.03405853, + 0.020380769, + -0.002689938, + -0.02048429, + 0.025207452, + 0.007964675, + 0.030202357, + -0.0056580896, + -0.024676906, + 0.03263511, + 0.008081136, + -0.006961812, + -0.019966682, + -0.011102666, + 0.0030797606, + -0.024806308, + 0.00606247, + 0.0038497008, + -0.0074988287, + -0.030098837, + 0.042210836, + 0.0031881344, + -0.013910683, + -0.019177333, + 0.0018763248, + 0.0010344048, + 0.0024634849, + 0.014078906, + 0.039648682, + 0.01744335, + -0.012448444, + -0.02052311, + -0.00058271206, + 0.0056030937, + 0.033980887, + -0.016369315, + -0.0035973673, + 0.009336333, + -0.012241402, + -0.011665564, + -0.014842375, + 0.00986688, + 0.013975384, + 0.025065111, + 0.011710854, + -0.014298889, + 0.008281709, + 0.018491503, + -0.007712342, + -0.027096717, + -0.012480794, + -0.017766854, + -0.032764513, + -0.02582858, + 0.014518871, + -0.021066597, + 0.0048202137, + -0.009756888, + -0.006288923, + -0.013380136, + -0.031004649, + -0.02743316, + -0.010242145, + -0.009401034, + 0.01891853, + 0.019190272, + -0.0030393226, + 0.008249358, + -0.032039862, + -0.020096084, + -0.018789127, + -0.015411743, + -0.01371658, + -0.04459183, + -0.014687094, + 0.0060980553, + -0.012196111, + -0.01515294, + 0.0024133418, + 0.007343547, + 0.025142752, + 0.022826461, + 0.23830618, + 0.0027449336, + -0.0038464656, + 0.029814152, + 0.0019572007, + 0.032945674, + 0.028338974, + 0.004490239, + 0.029193025, + 0.04707634, + -0.0068647605, + 0.003869111, + 0.0036264828, + 0.006974752, + 0.01965612, + -0.011982598, + -0.047024578, + -0.015748188, + -0.008113487, + 0.018543264, + 0.014078906, + 0.00759588, + 0.0093492735, + -0.0057486705, + 0.026294427, + 0.010973264, + -0.0060948203, + 0.00028124652, + 0.0006882553, + 0.0050466666, + 0.0014218013, + -0.017948017, + 0.0050434317, + 0.004389953, + -0.000111103494, + -0.0033806195, + -0.011814375, + -0.004639051, + 0.03273863, + 0.023732273, + 0.0105268285, + -0.0125907855, + -0.041434426, + -0.0070718033, + -0.0036717735, + 0.008210538, + -0.01890559, + 0.0015277489, + 0.02045841, + 0.0027724316, + -0.020005504, + -0.006327743, + 0.017003383, + 0.027950767, + -0.0020186666, + 0.019099692, + 0.016472837, + -0.021079538, + 0.018491503, + -0.0033320938, + -0.018387983, + 0.038354665, + -0.01444123, + 0.010824453, + 0.0060074744, + -0.011296769, + 0.0018569145, + -0.002000874, + 0.032479826, + -0.016861042, + 0.021027777, + 0.017016325, + 0.00170325, + 0.0070718033, + 0.016576359, + -0.006159521, + 0.020393709, + -0.0101321535, + 0.018620905, + -0.0005256944, + -0.0002980283, + -0.025414495, + -0.026294427, + 0.025634477, + -0.005528688, + -0.019345555, + 0.008721675, + -0.004389953, + 0.022955863, + -0.007925854, + -0.002916391, + 0.017365709, + -0.0039952775, + 0.014273008, + 0.015722306, + 0.016628118, + 0.0019636708, + 0.01586465, + -0.020212546, + 0.0048105083, + -0.02808017, + 0.005389581, + -0.008327, + 0.0052828244, + -0.021674786, + 0.017184546, + -0.013218384, + -0.0066383076, + 0.013302496, + 0.00023393401, + -0.003108876, + -0.013470718, + 0.011199717, + -0.021066597, + 0.019280855, + 0.007880564, + 0.0038529357, + -0.012597256, + -0.0227747, + -0.009511026, + -0.00913576, + -0.02743316, + -0.0156058455, + 0.009316923, + 0.0007266714, + -0.018064478, + 0.005897483, + 0.015062358, + 0.008948128, + -0.034317333, + 0.015463504, + -0.020665452, + 0.023253486, + -0.016058752, + -0.007997026, + 0.010067453, + -0.0034388504, + -0.011212658, + 0.008449932, + -0.000091642694, + -0.0069424016, + -0.0095174955, + 0.011329119, + -0.018167999, + 0.0075635295, + -0.0077641024, + -0.019565538, + -0.023369947, + -0.014091846, + -0.023149965, + -0.0051307776, + -0.0024101068, + -0.0048913844, + -0.005302235, + 0.0061271708, + -0.005444577, + 0.00906459, + -0.02278764, + 0.0003433189, + 0.021403043, + -0.0025217158, + 0.004344662, + 0.013250735, + -0.0039014614, + -0.022813521, + 0.01603287, + -0.16356376, + 0.022554718, + 0.018387983, + -0.0018536794, + -0.0009373536, + 0.010817982, + 0.014661213, + 0.038949914, + -0.019707879, + 0.025246272, + 0.010999145, + -0.011367939, + -0.027769607, + -0.01890559, + 0.004477299, + 0.013897743, + -0.006897111, + 0.0027805192, + 0.012416094, + 0.017236307, + 0.009672778, + -0.024832187, + 0.004085859, + 0.013263674, + 0.008475812, + -0.010921504, + -0.026993196, + 0.026708512, + 0.016162273, + 0.0020186666, + -0.008941658, + -0.00571632, + 0.010824453, + 0.0035326665, + 0.0049916706, + 0.013457777, + 0.0036038375, + 0.003788235, + -0.012616666, + -0.005687205, + -0.00841111, + 0.024146358, + -0.00571632, + 0.01821976, + -0.014234188, + -0.00050062285, + 0.029943554, + 0.016925743, + 0.0009737478, + -0.020406649, + 0.010313316, + -0.03046116, + -0.0061045256, + -0.002875953, + 0.011012085, + 0.014932957, + 0.03335976, + 0.008385231, + 0.004771688, + 0.012733128, + 0.017986838, + -0.035714872, + 0.007647641, + 0.004609936, + 0.0142083075, + -0.013153683, + 0.007673521, + 0.0047425725, + -0.012759008, + -0.004859034, + -0.014570632, + -0.011691444, + 0.021079538, + -0.01371658, + 0.006813, + 0.030150598, + -0.012319042, + -0.014182427, + 0.0046681664, + 0.012959581, + -0.0058295466, + 0.0394934, + -0.0154376235, + -0.003196222, + 0.0085146325, + 0.0020623396, + -0.01906087, + -0.0030182947, + -0.032298665, + -0.0079582045, + 0.01215082, + -0.03346328, + 0.0030328524, + -0.029814152, + 0.02193359, + 0.011102666, + -0.008553453, + -0.005020786, + 0.007162384, + -0.0154893845, + 0.006690068, + -0.016265795, + -0.013845982, + 0.017262187, + 0.028571896, + 0.0064053843, + -0.01811624, + 0.016912803, + 0.03423969, + 0.0052342988, + -0.016912803, + 0.024780426, + 0.01220258, + 0.030176478, + 0.024081657, + 0.011697914, + 0.0049754954, + -0.02952947, + 0.00042015116, + 0.017210428, + 0.038949914, + -0.008145837, + -0.030512922, + 0.022929981, + -0.007130034, + -0.009769829, + -0.10212383, + 0.009841, + 0.012500205, + 0.014273008, + 0.0032560704, + 0.019410256, + 0.009433384, + 0.021726547, + 0.00757, + 0.03568899, + -0.0010578589, + -0.013418957, + -0.0050499015, + 0.009038709, + -0.011290299, + -0.014803555, + -0.008974008, + -0.027226118, + -0.021778308, + 0.012836649, + 0.0009915406, + -0.022981742, + 0.004102034, + -0.0073758974, + 0.012765478, + -0.011704384, + -0.02808017, + 0.008003496, + 0.01666694, + 0.011581453, + 0.019474957, + -0.014130666, + -0.01603287, + -0.0035294315, + -0.01366482, + -0.008993419, + -0.01752099, + -0.032013983, + 0.012778418, + -0.045627043, + 0.009316923, + 0.005451047, + 0.002000874, + -0.047412783, + 0.0005968654, + -0.003568252, + -0.02268412, + 0.0038205853, + -0.0015350278, + -0.009310452, + 0.012002008, + 0.013535419, + -0.006677128, + -0.01140029, + 0.045989364, + -0.004205555, + 0.011633214, + 0.030719966, + -0.00837229, + -0.0033288589, + -0.0020380768, + 0.017999778, + 0.0067288885, + 0.028649537, + 0.0013740844, + -0.01827152, + -0.028364854, + 0.0013069572, + 0.019306734, + -0.036775965, + -0.0042087906, + 0.0068712304, + -0.023512289, + 0.0109150335, + -0.02122188, + 0.00030106117, + -0.0228394, + -0.0062759826, + 0.023434648, + -0.007447068, + -0.02968475, + -0.029296545, + -0.004412598, + -0.006146581, + 0.011335589, + 0.027691964, + -0.023253486, + 0.0020041089, + 0.0052828244, + -0.008605214, + 0.0011541015, + 0.052821778, + 0.015204701, + -0.030538803, + 0.0015131911, + 0.011329119, + -0.0003821394, + 0.00026385815, + 0.010293906, + -0.0089610685, + -0.024055777, + -0.0014412114, + -0.051165435, + 0.017909195, + -0.003632953, + -0.022205332, + 0.0068259398, + 0.008831667, + 0.012875469, + -0.020096084, + -0.006324508, + 0.013833042, + -0.019462017, + 0.0062533375, + -0.015722306, + -0.0019410256, + 0.0011904957, + 0.019358495, + 0.029348306, + 0.006651248, + 0.009174581, + -0.012021419, + -0.007453538, + 0.008132897, + 0.0125325555, + 0.013004871, + -0.019850222, + 0.01436359, + -0.017896255, + -0.014803555, + -0.02494865, + -0.012196111, + 0.031651657, + -0.0071688546, + 0.011574983, + 0.047179863, + -0.022218272, + -0.019992564, + -0.020587811, + 0.035404306, + 0.021610085, + -0.029917674, + -0.017805675, + -0.029374188, + -0.00052933383, + -0.022502957, + 0.004037333, + 0.03423969, + 0.010462128, + -0.010151564, + 0.016809281, + -0.008838137, + 0.016226973, + 0.028934222, + 0.017624512, + -0.012377273, + -0.015851708, + -0.0061174654, + 0.022929981, + -0.009562786, + 0.008217008, + -0.025660358, + 0.0019992564, + 0.005059607, + 0.022619419, + 0.009653367, + 0.010798573, + 0.0060462947, + 0.015579965, + 0.0045387647, + 0.0041343844, + 0.00032754807, + -0.023227606, + 0.009569256, + 0.022606477, + -0.0020170491, + 0.018866768, + -0.014014205, + -0.0069359313, + 0.005975124, + -0.014583572, + 0.019940803, + 0.007304726, + -0.008799316, + -0.021648906, + 0.010073923, + 0.043323692, + -0.0100803925, + -0.032039862, + 0.015476444, + -0.005693675, + -0.0059298333, + -0.03038352, + 0.0051728333, + -0.021131298, + -0.0024084894, + -0.0005022404, + -0.010319786, + -0.017663334, + -0.0011775555, + 0.010824453, + 0.03719005, + 0.0006716757, + -0.009970401, + 0.0009041944, + -0.036646564, + -0.017236307, + 0.020743093, + -0.01441535, + -0.018090358, + -0.02127364, + 0.01673164, + 0.0017081025, + 0.004037333, + -0.0069294614, + 0.010397427, + -0.0035035512, + 0.013406017, + -0.028157812, + -0.020846615, + -0.022619419, + 0.016058752, + 0.013897743, + 0.010274495, + 0.001939408, + 0.011555572, + 0.028701298, + 0.024883948, + 0.029141264, + -0.019254973, + 0.009808649, + 0.021648906, + 0.010093333, + -0.010966795, + 0.008449932, + -0.0061692265, + -0.01827152, + -0.022347674, + -0.0022386494, + 0.021532444, + -0.0040114527, + 0.059680067, + 0.00533135, + -0.009989812, + 0.028390734, + -0.0008010774, + 0.0020801325, + 0.024016956, + -0.0064377347, + -0.0046843416, + -0.020872494, + -0.004250846, + 0.010753281, + 0.026242666, + -0.004736102, + -0.014945897, + 0.0066447775, + -0.036284238, + 0.021687726, + -0.033670325, + -0.0037364743, + 0.006586547, + -0.017948017, + 0.01590347, + 0.0029066857, + -0.026837913, + -0.010287436, + 0.009569256, + -0.0020801325, + -0.0066835983, + -0.024793366, + 0.023214666, + -0.016899863, + -0.038820513, + -0.0100803925, + -0.0028516902, + -0.023033503, + -0.025543896, + -0.019138511, + -0.00007218189, + 0.0039920425, + 0.00161833, + 0.00091389957, + -0.032298665, + 0.0037300042, + -0.0062371623, + -0.0058004316, + -0.01604581, + 0.0069359313, + -0.03030588 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 18, + "total_tokens": 18 + } +} +1079 1730 +POST https://api.openai.com/v1/chat/completions HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 877 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the house is blue.\u003c/content\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors are all of the pieces of furniture next to the desk and the desk itself?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 904 +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:43:14 GMT +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 1005 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +X-Content-Type-Options: nosniff +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999845 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_442a06b118034bedb002db787053ef83 + +{ + "id": "chatcmpl-ERDnN3ELOURceGRK0fvLKMU4OKYAT", + "object": "chat.completion", + "created": 1790156593, + "model": "gpt-4.1-nano-2025-04-14", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The desk is orange. The chair beside the desk is beige, and the lamp beside the desk is black.", + "refusal": null, + "annotations": [] + }, + "logprobs": null, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 144, + "completion_tokens": 22, + "total_tokens": 166, + "prompt_tokens_details": { + "cached_tokens": 0, + "audio_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } + }, + "service_tier": "default", + "system_fingerprint": "fp_d3d6c52e18" +} diff --git a/vectorstores/inmemory/testdata/TestInMemoryStoreRest.httprr b/vectorstores/inmemory/testdata/TestInMemoryStoreRest.httprr new file mode 100644 index 000000000..ed054bfb2 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestInMemoryStoreRest.httprr @@ -0,0 +1,4721 @@ +httprr trace v1 +256 67812 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 61 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["tokyo","potato"]}HTTP/2.0 200 OK +Content-Length: 66856 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:30 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 104 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-qpwjk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999998 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_45c7554365f44d10a7bba667ad60c53a + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + -0.008533556, + 0.0014080032, + -0.010539479, + -0.014651955, + -0.010988966, + 0.012142874, + -0.036978744, + 0.00235981, + -0.014812965, + -0.038239993, + 0.0062223845, + -0.015269161, + 0.011740348, + -0.02619104, + -0.015228909, + -0.01734888, + 0.022621974, + -0.01937493, + 0.017093947, + -0.01806001, + -0.009070258, + 0.015618018, + -0.004125894, + -0.027371783, + -0.012498439, + -0.014504362, + 0.007305851, + -0.0207301, + 0.01004303, + -0.020864276, + 0.01631573, + -0.013820067, + -0.010646819, + -0.017254958, + 0.0031111923, + -0.004622343, + -0.010606566, + -0.008741528, + 0.0027019572, + -0.0042097536, + 0.005702455, + -0.016235225, + -0.0030893888, + -0.012578945, + -0.023977146, + 0.0073729386, + -0.01140491, + 0.012968053, + -0.0033761887, + 0.014168924, + 0.010807829, + 0.018999238, + -0.0352613, + -0.0080706505, + -0.02373563, + -0.0012956313, + -0.030779839, + -0.0047934167, + 0.0034449536, + 0.0035858378, + -0.002752273, + -0.006460546, + -0.01745622, + 0.011847689, + 0.018100264, + -0.018140515, + -0.011136559, + 0.02836468, + -0.017697737, + -0.0014717365, + 0.022943996, + 0.020649595, + -0.0025107574, + 0.00168474, + 0.036549382, + -0.01200199, + 0.0014599962, + -0.00029015433, + 0.008305457, + 0.0134510845, + 0.021763252, + -0.042372596, + 0.004920883, + -0.0032285957, + 0.009157471, + 0.010982257, + -0.010707198, + 0.032604624, + 0.0072387634, + -0.004162792, + 0.010136953, + 0.008540265, + 0.010901752, + 0.011069471, + -0.02836468, + -0.0015295997, + -0.007654707, + 0.048866685, + -0.02313184, + -0.013196152, + -0.006688644, + 0.0035221046, + 0.0070643355, + -0.00834571, + -0.032336272, + 0.00905684, + 0.015336249, + -0.0129278, + 0.0025057257, + -0.0144238565, + -0.00014235172, + 0.031504385, + -0.0054039145, + -0.05342865, + -0.02346728, + -0.018905316, + -0.0015648208, + -0.018650383, + -0.008828742, + -0.012800334, + 0.009479493, + 0.010660237, + 0.026445974, + 0.0047397465, + 0.025775095, + -0.0072119283, + -0.0086408965, + -0.0103717595, + 0.0003601771, + -0.010519352, + 0.03469776, + 0.01069378, + 0.0101101175, + 0.015953457, + -0.028820878, + 0.015483842, + -0.01615472, + 0.009613669, + -0.019254172, + -0.009076967, + 0.0037502027, + 0.010982257, + -0.008842159, + 0.010579731, + 0.0066651637, + 0.021427812, + 0.029116064, + 0.005746062, + 0.0036428624, + -0.004830315, + -0.0010306349, + -0.011740348, + 0.021146044, + -0.000048035847, + 0.0046693045, + 0.006950286, + 0.029760106, + 0.008969626, + 0.00024507978, + 0.0132632395, + -0.000092088354, + 0.0027002802, + 0.03475143, + -0.019683532, + 0.0006000157, + 0.023037918, + 0.0075540757, + 0.020985033, + 0.0032185325, + -0.0101101175, + -0.013444376, + 0.01418234, + -0.038535178, + 0.01042543, + 0.002062947, + 0.023588037, + 0.01718787, + 0.015779028, + -0.024191827, + -0.009123928, + -0.0011388138, + 0.0026583504, + 0.03359752, + 0.020864276, + -0.011331113, + 0.0046625957, + 0.029116064, + 0.018194186, + -0.0019438663, + -0.008251788, + 0.022353623, + 0.031584892, + 0.0312092, + 0.005907072, + -0.67409724, + -0.028337847, + 0.014370186, + -0.00327388, + 0.026123952, + 0.01129086, + 0.014799547, + 0.0065444056, + -0.013303492, + 0.013706018, + -0.03378537, + 0.014276263, + -0.014115253, + -0.014262846, + -0.010707198, + -0.00095683837, + 0.012773499, + -0.009217851, + 0.0007991823, + 0.01025771, + -0.0012327366, + 0.016932936, + -0.0148398, + 0.0017694383, + 0.013323618, + -0.01718787, + 0.00943924, + -0.01140491, + -0.009727717, + 0.023936894, + -0.034295235, + 0.04086983, + 0.0069435774, + -0.015872952, + 0.035824835, + -0.012116039, + -0.024849286, + 0.026553314, + 0.025077384, + 0.040011108, + -0.004266778, + 0.0004216043, + -0.0020277258, + 0.0064202934, + 0.0042131077, + 0.004595508, + 0.03268513, + -0.03104819, + 0.0066752266, + -0.014101836, + 0.015779028, + -0.037032414, + -0.021964515, + -0.01877114, + -0.0018616838, + 0.0050550587, + 0.010921879, + -0.022621974, + -0.0007715086, + -0.00048345077, + -0.011720222, + -0.0025476555, + -0.021011868, + -0.020220235, + -0.008245079, + 0.008587226, + -0.011988573, + -0.018261272, + 0.0036529256, + -0.021722998, + 0.010083282, + 0.015000811, + -0.010318089, + -0.0022273117, + 0.013873737, + 0.015524095, + 0.031799573, + -0.03126287, + -0.001854975, + -0.008218244, + 0.0069368687, + 0.011592755, + -0.017805077, + 0.0018868417, + 0.02341361, + -0.02946492, + -0.035798, + -0.010660237, + 0.020891111, + -0.018382031, + 0.0048739216, + -0.003475143, + -0.001501926, + 0.001458319, + 0.00017883067, + 0.005222778, + -0.0006138525, + -0.012592362, + 0.0035321678, + -0.0051255007, + -0.016409652, + -0.008976335, + 0.013390706, + 0.0005387981, + -0.0105126435, + -0.002769045, + -0.016396236, + 0.017308628, + 0.028901383, + -0.0122435065, + 0.01391399, + -0.010687072, + -0.014638538, + -0.00867444, + 0.021561988, + -0.024151573, + 0.021374144, + 0.009533163, + 0.026754577, + 0.010391885, + 0.0063263704, + -0.003683115, + 0.018194186, + 0.014772712, + 0.01233072, + 0.023574619, + 0.014973976, + -0.0062123216, + -0.0068831984, + 0.0053066374, + -0.01074745, + 0.012498439, + 0.016409652, + -0.016181555, + 0.016033962, + -0.009975942, + -0.000742577, + -0.005424041, + 0.01227705, + -0.042855624, + -0.040950336, + -0.013732853, + -0.0014901856, + 0.0012042243, + 0.013565134, + -0.028176837, + -0.017885583, + 0.0066047846, + -0.01679876, + 0.007715086, + -0.006889907, + -0.004135957, + -0.025989776, + 0.013303492, + -0.008305457, + -0.015067899, + -0.0033543853, + -0.0015681752, + -0.013981078, + 0.009123928, + 0.006661809, + 0.0064639, + -0.036737226, + 0.0028461958, + 0.0015623049, + -0.025721425, + 0.010264419, + 0.015966874, + -0.00055724726, + -0.017992923, + -0.017214704, + -0.019267589, + -0.017979505, + 0.0027355012, + 0.020394662, + 0.006956995, + 0.0052999286, + -0.013008306, + -0.0012218348, + 0.006393458, + 0.006074792, + -0.022474382, + -0.0044378517, + 0.004830315, + 0.025949525, + -0.029062394, + 0.007943184, + 0.019764038, + -0.0070710443, + 0.0040554516, + -0.01293451, + 0.019790873, + 0.003022301, + 0.0042365887, + 0.018543042, + -0.010338215, + 0.013350453, + 0.009419113, + -0.020394662, + 0.018046593, + 0.033758532, + -0.026043447, + 0.0045217113, + -0.01004303, + 0.012679576, + -0.02384297, + -0.0043674097, + -0.020287322, + 0.025493328, + 0.010049738, + 0.0030960976, + -0.017120782, + -0.0055582165, + 0.012954636, + -0.0036696976, + 0.04282879, + 0.006990539, + 0.019401764, + -0.026123952, + -0.0081847, + 0.017590396, + -0.033463348, + -0.009855184, + -0.017550144, + -0.012800334, + 0.010143661, + 0.001518698, + 0.03236311, + 0.01806001, + -0.006651746, + -0.02941125, + -0.021360725, + -0.004068869, + 0.023990564, + -0.0112237735, + -0.035610154, + 0.00096606294, + -0.027197355, + 0.034724597, + 0.008573809, + 0.020824024, + 0.01795267, + 0.035180792, + -0.024621187, + 0.007319269, + 0.006722188, + 0.03612002, + 0.013498046, + -0.0084262155, + 0.022554886, + -0.011586047, + -0.003938048, + -0.00496449, + 0.0010440524, + 0.011344531, + -0.029169735, + 0.01681218, + -0.0015061189, + 0.016543828, + 0.02700951, + 0.0045082937, + 0.0021702873, + 0.011867815, + 0.0019992136, + 0.0035053326, + -0.0006184648, + 0.026620401, + 0.015014228, + -0.0021652556, + 0.008298749, + -0.01729521, + 0.009144054, + -0.007218637, + -0.005313346, + 0.017483056, + -0.017415969, + -0.022554886, + -0.013873737, + 0.014933723, + 0.013229695, + -0.0137127265, + -0.051335514, + -0.0033543853, + 0.008318875, + -0.0014591576, + -0.030189468, + -0.0013761366, + -0.022138942, + -0.015457007, + 0.02078377, + 0.010613275, + 0.023668543, + 0.013940825, + -0.02085086, + -0.017845329, + -0.006651746, + 0.019240754, + -0.0155375125, + -0.0032537538, + -0.008446342, + 0.0064538373, + -0.012397808, + -0.009405696, + 0.0112707345, + 0.013498046, + 0.0134510845, + 0.009211142, + -0.0055414443, + -0.00785597, + 0.00012274954, + 0.002577845, + -0.013571843, + -0.017375715, + 0.01309552, + 0.010344924, + -0.0066148476, + -0.010217457, + 0.0024151574, + 0.02407107, + -0.007319269, + -0.017590396, + -0.0019891504, + -0.02204502, + -0.004588799, + 0.06606797, + 0.00845976, + 0.013524882, + -0.0010541156, + 0.006265992, + 0.0022558242, + -0.020287322, + 0.00009701511, + 0.012847295, + 0.007507114, + 0.0054609394, + -0.0066819354, + 0.0010390208, + 0.0070643355, + 0.00046835604, + -0.002802589, + -0.011559212, + -0.019388346, + 0.022782985, + -0.023386775, + 0.00089226646, + 0.0036864693, + 0.008285332, + 0.02252805, + 0.0006360753, + -0.0050550587, + 0.019093161, + 0.021400979, + 0.015483842, + -0.02400398, + -0.0009954139, + 0.012921092, + -0.015631435, + 0.012592362, + -0.010734033, + 0.002760659, + 0.004102413, + 0.0155375125, + 0.005021515, + -0.009975942, + 0.012216671, + 0.01932126, + 0.0026801538, + -0.0056991004, + 0.021977931, + -0.025198141, + -0.015148404, + 0.018247856, + -0.016731674, + -0.029947951, + 0.03389271, + 0.0076681245, + -0.04014528, + -0.020864276, + -0.014075001, + 0.013115646, + -0.020917946, + -0.018690635, + -0.000033255586, + 0.02280982, + 0.007996854, + -0.050181605, + 0.006658455, + -0.009727717, + -0.028176837, + -0.030457819, + -0.01167997, + -0.0046022166, + -0.028337847, + -0.002445347, + -0.007647998, + -0.021790087, + -0.024862703, + 0.024044234, + 0.019442016, + -0.024232078, + 0.004457978, + -0.00992898, + 0.00055389287, + 0.03617369, + -0.030350478, + -0.013430959, + -0.021105792, + -0.008204826, + -0.02476878, + 0.0201934, + 0.02941125, + -0.03410739, + -0.009606959, + -0.0005840823, + 0.011378075, + -0.0016713225, + 0.011284152, + 0.020649595, + 0.0148263825, + -0.011451871, + 0.0111768115, + 0.029706435, + -0.0045116483, + -0.01663775, + 0.0151349865, + -0.00943924, + 0.0016193294, + 0.012062369, + 0.00774863, + 0.02117288, + 0.01626206, + 0.019240754, + -0.011304278, + 0.00041321834, + 0.041943233, + -0.014558032, + 0.0118879415, + 0.017724572, + -0.0072320546, + 0.021454647, + 0.007339395, + 0.029438084, + 0.01893215, + -0.01462512, + 0.0055246726, + -0.023266016, + 0.016355982, + 0.017147617, + 0.011384783, + -0.003934694, + 0.019079743, + -0.007715086, + -0.008157865, + 0.00466595, + -0.0055615706, + 0.011995282, + -0.015054481, + -0.018019758, + -0.023588037, + 0.0018214312, + -0.027854815, + 0.013397414, + 0.0056957463, + -0.03628103, + -0.010063156, + -0.004987971, + 0.008741528, + -0.002576168, + -0.026553314, + -0.023990564, + -0.00035933853, + 0.012485022, + 0.0029669537, + 0.019442016, + -0.0009232945, + 0.013061976, + -0.015255744, + -0.00216861, + -0.018261272, + -0.032497283, + -0.022957413, + -0.023655124, + 0.008097486, + 0.015872952, + 0.024030816, + 0.011035928, + -0.0023279435, + -0.010948714, + -0.0067725037, + 0.013209569, + -0.004920883, + 0.025453076, + -0.017845329, + 0.023400191, + 0.014987393, + 0.01271312, + -0.022460964, + 0.0015857856, + -0.02798899, + 0.02199135, + -0.0037300764, + 0.0035724202, + -0.012565527, + -0.029706435, + -0.0009107156, + -0.014142089, + -0.0051422725, + -0.0002387903, + -0.0015388242, + 0.0019522522, + 0.0049745534, + -0.006732251, + 0.03142388, + -0.0039850096, + 0.010385177, + -0.012404516, + 0.0031413818, + -0.004300322, + 0.0005509578, + 0.004327157, + -0.011814144, + -0.0040889955, + -0.0030105608, + 0.02668749, + 0.02264881, + -0.009452658, + -0.0010356664, + 0.0003169894, + 0.011908067, + 0.035744328, + -0.00009811577, + -0.014772712, + -0.0043774727, + -0.014034748, + -0.025385987, + -0.018341778, + 0.00033921222, + -0.019723786, + -0.022514634, + 0.012907675, + -0.017067112, + 0.022501215, + -0.02951859, + -0.02635205, + 0.021951096, + 0.0090434225, + 0.022729315, + 0.016355982, + 0.010251001, + -0.00025430432, + -0.001171519, + -0.009835058, + -0.005182525, + -0.013981078, + -0.001215126, + 0.016396236, + 0.030484654, + -0.020609343, + -0.028928218, + -0.010009485, + 0.0024705047, + 0.0022776276, + -0.008419507, + 0.014222593, + 0.0005153174, + 0.009566707, + -0.024057651, + -0.0011497155, + -0.025882436, + 0.038481507, + -0.014772712, + 0.0047062025, + -0.002480568, + -0.030618828, + -0.0054106233, + 0.018153934, + -0.010029612, + 0.009311774, + 0.013833485, + -0.016959772, + 0.0020478521, + -0.018462537, + -0.018194186, + 0.02046175, + 0.0029568905, + 0.026647236, + 0.009513036, + -0.008285332, + 0.013779814, + 0.010599857, + -0.013632222, + 0.0006297858, + 0.004833669, + 0.024419924, + -0.007943184, + -0.009526454, + -0.018797975, + -0.0017006734, + 0.00094090507, + 0.0022776276, + 0.009298356, + -0.013176025, + -0.02003239, + -0.005746062, + 0.009700882, + 0.006269346, + -0.004572027, + -0.007044209, + -0.025278646, + -0.030350478, + -0.009117219, + 0.0016620979, + 0.012169709, + -0.01663775, + -0.009224559, + -0.0037233676, + -0.02946492, + 0.01745622, + -0.011693387, + -0.0042097536, + 0.009935689, + 0.027251026, + -0.016906101, + 0.009620377, + -0.007547367, + 0.019455435, + -0.025090802, + -0.006044602, + -0.0030742942, + -0.01674509, + 0.013887155, + -0.01358526, + -0.0122904675, + -0.021253385, + 0.012357555, + 0.0021971224, + 0.0062794094, + 0.021843757, + 0.042962965, + -0.020354409, + -0.0024654733, + -0.025761679, + -0.025520163, + 0.009452658, + -0.009996068, + 0.02008606, + 0.024916373, + -0.001707382, + 0.0012134488, + 0.013061976, + -0.012082496, + -0.00878849, + -0.010391885, + -0.03115553, + -0.008647605, + 0.0130015975, + -0.014142089, + -0.007815718, + -0.017469639, + 0.0012578944, + -0.0071716756, + 0.0097545525, + 0.008151156, + 0.0011295893, + 0.0004297806, + 0.025171306, + 0.011492124, + 0.012022117, + -0.013310201, + -0.024352837, + 0.011310987, + -0.007654707, + -0.026902169, + -0.03459042, + -0.0025979714, + 0.01544359, + 0.0014096803, + -0.02085086, + -0.022675645, + 0.010727324, + -0.02836468, + -0.0049376553, + -0.010821247, + 0.026110535, + 0.017670901, + -0.010848082, + 0.0077888826, + 0.006651746, + 0.019737203, + 0.008037107, + 0.004048743, + 0.01042543, + 0.034134224, + -0.031128695, + 0.03252412, + 0.0111768115, + -0.019160248, + -0.008748237, + 0.008828742, + -0.002343038, + 0.005712518, + 0.013591969, + -0.008251788, + -0.008567099, + -0.011357948, + 0.0051020198, + -0.025560416, + 0.018757721, + 0.006198904, + -0.046854053, + 0.026365468, + 0.013155899, + -0.010861499, + 0.00041133148, + 0.0111768115, + -0.0046894304, + -0.0024252206, + 0.0062928265, + -0.030243138, + -0.0018063365, + 0.0004939332, + -0.023708794, + 0.029760106, + -0.011753766, + 0.0111768115, + 0.02307817, + 0.021481482, + -0.0052730935, + -0.02471511, + -0.003683115, + -0.011384783, + -0.008694567, + 0.025520163, + -0.0027623363, + -0.027452288, + -0.004042034, + 0.02199135, + -0.042426266, + 0.011304278, + 0.009828349, + -0.0056018233, + -0.018086845, + 0.0098015135, + 0.025493328, + -0.02984061, + -0.0151349865, + 0.009117219, + -0.015738776, + -0.009311774, + -0.010244292, + 0.028472021, + -0.026392303, + 0.018408867, + 0.0017207996, + -0.002237375, + -0.03874986, + -0.01467879, + 0.0053871428, + -0.0077687562, + -0.008466468, + 0.21124576, + -0.019656697, + -0.00076354196, + 0.04103084, + -0.009996068, + 0.03775696, + 0.027251026, + 0.0010784349, + -0.011344531, + 0.0022055083, + -0.038320497, + 0.0075339493, + 0.01544359, + -0.0013962629, + -0.00020388373, + -0.01871747, + -0.024191827, + -0.02782798, + -0.041379698, + 0.0017358944, + 0.009197724, + 0.0018683926, + 0.0033208414, + -0.014544615, + 0.018784557, + 0.011250608, + -0.005222778, + -0.008868994, + 0.017563561, + 0.018891897, + 0.0015430172, + 0.0030172695, + -0.0014792839, + 0.014866635, + -0.0057661883, + -0.0026633819, + -0.005642076, + -0.008137738, + 0.031772736, + 0.023762465, + -0.0022541468, + 0.0028965117, + -0.005947325, + -0.009009879, + -0.007446735, + 0.023091588, + -0.007929767, + 0.0031279642, + -0.011921485, + 0.030296808, + -0.037354436, + -0.015121569, + 0.040574644, + 0.02471511, + 0.011592755, + -0.013732853, + 0.03322183, + 0.00682282, + -0.009915562, + -0.008104195, + -0.020126311, + 0.02291716, + -0.010358342, + 0.02352095, + 0.005216069, + -0.0038810237, + -0.01478613, + 0.0061888406, + -0.0007912156, + -0.010324798, + 0.017254958, + -0.011431745, + -0.009070258, + -0.021092374, + -0.033517018, + -0.023547783, + 0.032711964, + 0.005598469, + 0.011398201, + 0.0348051, + -0.005088602, + 0.009486201, + 0.02580193, + 0.004535129, + 0.00022180872, + -0.01937493, + 0.017415969, + 0.010130243, + 0.015309414, + -0.00709117, + -0.008761655, + -0.024205243, + -0.008976335, + -0.017872164, + -0.009781388, + 0.01200199, + -0.005940616, + 0.016074214, + -0.010848082, + -0.014061583, + -0.009499619, + -0.028015826, + 0.011438454, + -0.0069368687, + 0.0058299215, + 0.007829135, + -0.00030021748, + -0.0067792125, + -0.00050525425, + -0.030967684, + 0.0037233676, + -0.037569113, + 0.0070643355, + 0.01615472, + 0.0077016684, + -0.0020881048, + -0.016248642, + -0.025949525, + 0.018140515, + -0.019401764, + 0.02307817, + -0.017872164, + -0.009519746, + -0.006363269, + -0.004726329, + -0.008889121, + -0.0062794094, + -0.014303098, + 0.0056823287, + -0.041621212, + 0.003022301, + -0.0030742942, + 0.022514634, + -0.0012444769, + -0.0064639, + 0.018556459, + 0.0053670164, + -0.010707198, + -0.017268375, + 0.026164206, + 0.008969626, + -0.008385963, + 0.019683532, + 0.0026617048, + -0.0051758164, + -0.020904528, + 0.0063431426, + 0.021105792, + -0.016074214, + 0.010861499, + -0.021548571, + -0.021065539, + -0.0011471998, + -0.014061583, + 0.030162632, + -0.007882806, + -0.022943996, + -0.01985796, + 0.0033225187, + 0.0111768115, + -0.030243138, + -0.009204433, + 0.049725406, + -0.02193768, + -0.027532794, + -0.011539085, + -0.17464271, + 0.028981889, + 0.019133413, + -0.022165777, + 0.026767993, + 0.010807829, + -0.0056991004, + -0.018247856, + -0.0051925885, + 0.016758509, + 0.05173804, + 0.013075394, + -0.008600644, + -0.011243899, + 0.0037032412, + -0.007876096, + -0.0034784975, + 0.0049477182, + 0.028981889, + 0.013692601, + 0.0470419, + -0.03137021, + 0.0148263825, + -0.00062517356, + -0.0007048402, + 0.024084486, + -0.00038973763, + -0.00087381736, + 0.016275477, + -0.010633402, + -0.023333104, + -0.013216278, + 0.03501978, + 0.022353623, + 0.009989359, + 0.013659056, + -0.008627479, + -0.018207602, + -0.019348094, + 0.03595901, + 0.005779606, + 0.010666945, + -0.003039073, + -0.012672868, + 0.0124313515, + 0.03088718, + 0.008278623, + -0.003917922, + -0.025761679, + -0.008775072, + 0.021454647, + -0.016610915, + -0.0030172695, + 0.01936151, + 0.00867444, + -0.0107742855, + 0.008627479, + 0.0098954365, + 0.0017845329, + -0.013752979, + -0.03469776, + -0.012283759, + 0.021602241, + 0.0018415574, + -0.015067899, + 0.0014172278, + -0.01222338, + -0.010546187, + -0.019281005, + 0.017805077, + 0.0009258103, + -0.016194971, + 0.021199714, + -0.043177646, + 0.019240754, + 0.005024869, + -0.009647212, + 0.024191827, + 0.019670116, + -0.0005023192, + -0.022474382, + 0.052999288, + -0.0148263825, + -0.0047665816, + 0.0010633401, + 0.009955815, + 0.0043841815, + -0.011438454, + -0.029277075, + -0.021696163, + 0.02199135, + -0.025520163, + -0.014638538, + -0.0109151695, + -0.0012620875, + 0.010687072, + -0.007876096, + 0.023695378, + -0.021951096, + 0.004692785, + 0.011834271, + -0.009700882, + -0.010163788, + 0.043231316, + 0.026003195, + 0.023910059, + 0.018301526, + 0.026016612, + 0.01930784, + 0.008057233, + -0.020837441, + 0.002262533, + 0.015175239, + 0.02629838, + -0.024876121, + 0.0036965325, + 0.013122355, + -0.01320286, + 0.009519746, + 0.007574202, + 0.037086084, + -0.015819281, + 0.0041393116, + 0.023883224, + -0.008936082, + -0.026445974, + -0.07358179, + 0.0043674097, + 0.006765795, + 0.022393877, + -0.0055951145, + 0.039501242, + 0.0112707345, + 0.011310987, + -0.0024067715, + 0.018449118, + -0.0077352123, + -0.018019758, + 0.00911051, + -0.01985796, + 0.024809033, + -0.0033208414, + -0.0022876908, + -0.002638224, + -0.0043170936, + 0.023091588, + -0.014973976, + -0.016839014, + 0.004830315, + -0.010479099, + -0.01473246, + 0.0066752266, + -0.010713906, + 0.017831912, + 0.015725357, + 0.0072991424, + 0.0033493536, + 0.004387536, + 0.00965392, + -0.026982674, + -0.013310201, + 0.013954243, + -0.010700489, + 0.008278623, + 0.03365119, + -0.051469687, + -0.0030189466, + 0.012760081, + -0.0061687143, + -0.0034717887, + -0.009828349, + -0.013383997, + -0.028579362, + 0.00679263, + -0.00336948, + -0.015966874, + -0.018838227, + -0.0043170936, + 0.0026650592, + -0.008271914, + 0.017415969, + -0.005625304, + 0.004927592, + 0.0253189, + -0.03464409, + 0.01681218, + 0.0035824834, + -0.0038072274, + -0.014920305, + 0.02925024, + 0.008667732, + 0.011411618, + -0.018435702, + -0.033114493, + 0.031853244, + -0.018757721, + -0.015577765, + 0.021239968, + -0.020810606, + 0.00534689, + -0.027693804, + -0.010633402, + -0.00274221, + -0.017120782, + 0.018972402, + -0.024057651, + -0.014236011, + -0.028391516, + 0.0015069576, + 0.007050918, + 0.0030357186, + 0.0041762097, + 0.010942005, + -0.0034248272, + 0.018314943, + -0.016476741, + 0.005407269, + 0.008164573, + 0.0094929105, + -0.029438084, + -0.006276055, + 0.022380458, + 0.002037789, + -0.015000811, + 0.002542624, + 0.0071783843, + -0.013457794, + -0.022340206, + -0.07546025, + 0.028659867, + 0.0013124032, + -0.008292041, + 0.020502003, + 0.005128855, + 0.018704053, + 0.0069704126, + 0.0116732605, + -0.022541469, + -0.045082938, + 0.009459366, + -0.013457794, + -0.0042466517, + -0.032953482, + -0.024809033, + 0.024996879, + 0.020743519, + 0.008681149, + 0.015913203, + 0.011357948, + 0.0013442698, + 0.024272332, + 0.010391885, + -0.03410739, + 0.0077620475, + -0.0030055293, + 0.026593566, + -0.024970043, + -0.015779028, + 0.0258556, + -0.027479123, + -0.007963311, + 0.009157471, + 0.0001614298, + -0.0061620055, + 0.0016956418, + 0.0126929935, + 0.009432531, + 0.031450715, + -0.020555673, + -0.0069435774, + 0.012283759, + -0.011257317, + 0.00649409, + 0.0001541969, + 0.0020797187, + 0.0052294866, + 0.017120782, + 0.016329147, + -0.010526061, + 0.03349018, + -0.008258496, + -0.0069033247, + -0.0057628336, + -0.026284963, + 0.017000025, + 0.0105126435, + -0.008493303, + -0.0113176955, + 0.023252599, + 0.004424434, + 0.016825596, + 0.010948714, + 0.012404516, + -0.007822426, + -0.02286349, + -0.0028428414, + 0.012491731, + -0.035529647, + -0.02930391, + 0.007970019, + 0.009808223, + 0.014397021, + 0.008714693, + 0.0009325191, + 0.0090903845, + -0.0067456686, + -0.03357069, + 0.023923475, + 0.005085248, + -0.000054613585, + -0.053348143, + 0.0060546654, + 0.01255211, + -0.01816735, + -0.0072052195, + -0.012458187, + -0.01953594, + 0.026835082, + -0.005447522, + -0.0075674932, + 0.0049846163, + 0.0030524905, + 0.0028327783, + 0.018757721, + -0.008325584, + -0.022031602, + 0.026794828, + 0.028418351, + 0.01871747, + -0.0074936966, + -0.011633008, + -0.0070106653, + -0.012833878, + -0.009747843, + -0.019884795, + -0.022018185, + 0.009975942, + 0.01462512, + 0.02286349, + 0.015792446, + -0.0005379595, + 0.018596712, + -0.01031138, + 0.006520925, + -0.017831912, + -0.036254197, + -0.01936151, + 0.018891897, + 0.03378537, + 0.021213133, + 0.026942423, + -0.005997641, + 0.016047379, + -0.0019203855, + 0.008942791, + -0.02613737, + 0.0029417959, + -0.0035153958, + 0.01626206, + 0.00976797, + -0.017899, + -0.0025308838, + -0.00878849, + 0.0038273535, + 0.0076681245, + 0.02836468, + -0.003978301, + 0.05291878, + -0.01135124, + 0.0014675435, + -0.0017375716, + 0.0059607425, + 0.02122655, + -0.004655887, + 0.016718255, + -0.025412822, + -0.014705625, + 0.0030575222, + -0.011163394, + 0.00698383, + -0.014598285, + -0.02471511, + -0.0051355637, + -0.020354409, + 0.019442016, + -0.010398595, + 0.015685106, + 0.037783794, + -0.003874315, + 0.02658015, + 0.018395448, + -0.013571843, + 0.0013308524, + 0.021535153, + 0.011612882, + 0.009305065, + -0.02389664, + 0.016825596, + -0.00226421, + -0.018650383, + -0.0112707345, + 0.0061519425, + -0.015054481, + -0.02613737, + 0.009996068, + 0.0024587645, + 0.014665373, + 0.0005983385, + 0.019227337, + -0.020985033, + -0.024299167, + 0.01734888, + -0.005806441, + -0.003579129, + -0.0024621189, + -0.01948227 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + -0.0023426407, + -0.031335898, + 0.0022720497, + -0.026686734, + -0.028682984, + -0.00530911, + -0.026870599, + -0.019752385, + -0.0106050875, + -0.029996308, + 0.00056267704, + 0.0222083, + -0.0049840626, + 0.026581667, + -0.0053452267, + 0.035197068, + 0.029602312, + -0.01461729, + 0.047857508, + -0.021302108, + -0.0134090325, + -0.0044160504, + 0.014288959, + -0.009574128, + -0.032911886, + -0.012995336, + 0.00978426, + -0.026213937, + 0.004136969, + -0.007400578, + 0.021105109, + -0.027474727, + -0.020855578, + -0.017769266, + -0.035249602, + -0.023744889, + -0.0021932502, + -0.013776763, + 0.02797379, + 0.004202635, + 0.0021308674, + 0.002152209, + -0.008549736, + -0.001971627, + -0.018439062, + -0.00013943802, + -0.025045078, + -0.027789924, + -0.018373396, + 0.012719538, + 0.027474727, + 0.023298359, + -0.0069080815, + -0.0013042943, + 0.0061036707, + 0.010053491, + -0.00037819613, + 0.023652956, + -0.020632312, + -0.016955007, + -0.005542225, + 0.017716734, + -0.033647347, + 0.02127584, + -0.017743, + -0.0037298386, + 0.0028794617, + -0.005433876, + -0.004402917, + 0.009226098, + 0.006317086, + 0.034277745, + 0.017756134, + -0.00803754, + 0.01660041, + -0.010342423, + -0.015050687, + -0.0052565774, + 0.0033407665, + -0.0009373846, + 0.015431551, + -0.019030057, + 0.0026627635, + 0.008457803, + 0.016022546, + 0.005085845, + -0.024953146, + 0.010020658, + -0.014288959, + -0.01737527, + -0.0010490172, + 0.020120116, + 0.014013162, + 0.01900379, + -0.029339647, + 0.029365914, + 0.018727994, + 0.03333215, + -0.023311492, + -0.027264595, + -0.017349003, + 0.010086324, + -0.004924963, + -0.018741125, + -0.008090072, + 0.00020397555, + 0.010683887, + -0.0021686254, + 0.02078991, + -0.010316156, + -0.009002833, + 0.04554606, + 0.007853675, + -0.020225182, + 0.00070837385, + -0.0048658634, + 0.019108856, + -0.01900379, + -0.014879955, + -0.008884633, + 0.012995336, + -0.00022716392, + 0.018911859, + -0.038060114, + 0.017073205, + -0.0011089375, + -0.01372423, + 0.0060150214, + -0.005584908, + -0.0035689566, + 0.03459294, + 0.010513155, + -0.0036214895, + 0.0058804057, + -0.025439076, + -0.0046721483, + -0.035722397, + -0.02321956, + -0.017769266, + -0.020225182, + 0.012883703, + 0.021420306, + -0.028998183, + -0.018990658, + -0.006986881, + 0.03779745, + 0.030075109, + 0.010184824, + -0.010046924, + -0.0034474742, + 0.016574143, + 0.0023853239, + 0.028814318, + -0.020120116, + -0.00037388678, + -0.009212964, + -0.01073642, + 0.013934362, + 0.006796449, + 0.009035666, + -0.021341506, + -0.0041074194, + 0.008142605, + -0.018767392, + 0.0055586416, + 0.036562927, + 0.019332122, + -0.003058402, + 0.0013830938, + -0.013402466, + -0.0034080744, + 0.031073233, + -0.021105109, + 0.02090811, + 0.017861199, + -0.009245797, + -0.0013822729, + 0.0054732757, + 0.010506588, + 0.008930599, + -0.02585934, + 0.0026315718, + 0.025347143, + 0.04210515, + -0.0068752486, + 0.005689974, + 0.004136969, + 0.0015530051, + -0.01879366, + -0.009061932, + 0.022457832, + 0.010204524, + 0.01826833, + 0.005259861, + -0.68965244, + -0.025990672, + 0.018058198, + -0.015168887, + 0.030180173, + 0.036195196, + 0.010092891, + -0.0030239273, + -0.011596646, + -0.015195153, + 0.0041862186, + 0.016206412, + 0.001814028, + -0.0022720497, + 0.00007690125, + -0.025439076, + 0.024782414, + 0.0021998168, + -0.010762686, + 0.008641669, + -0.023810554, + 0.018977525, + -0.008956866, + 0.004094286, + 0.005253294, + 0.005447009, + 0.01110415, + 0.0052368776, + -0.005906672, + 0.017427802, + -0.016666075, + -0.012450307, + 0.012601339, + -0.03170363, + 0.049564827, + -0.01021109, + -0.012003777, + 0.030784303, + -0.00087746425, + 0.024138886, + -0.008733601, + -0.025439076, + 0.031440966, + -0.0063761855, + -0.019621054, + 0.0054371594, + 0.019634185, + 0.00038743042, + -0.005200761, + -0.032544155, + -0.0007428486, + 0.009902459, + -0.005978905, + -0.009160431, + 0.016390277, + 0.00076501095, + 0.0013280984, + -0.015405284, + -0.018412795, + 0.0074071446, + -0.025097612, + 0.009521595, + -0.019358387, + -0.035144538, + -0.0070656803, + -0.012332108, + -0.022313366, + 0.0037692385, + 0.01815013, + -0.010591954, + 0.01461729, + 0.018583527, + 0.014551624, + -0.023561023, + 0.009534729, + 0.021341506, + 0.003276742, + 0.009928726, + 0.002127584, + -0.002217875, + -0.010769253, + 0.013947495, + -0.004698415, + -0.005647291, + 0.046228986, + -0.011819911, + -0.025058212, + 0.0057293735, + 0.0082805045, + 0.00012035378, + 0.004087719, + 0.035985064, + -0.007249546, + -0.016350877, + -0.027343394, + -0.0061857537, + -0.042683013, + -0.017309604, + 0.005689974, + -0.00069277815, + -0.008057239, + -0.003624773, + 0.0071116467, + 0.014525358, + 0.0057392237, + 0.03422521, + -0.022523498, + 0.0128180375, + 0.024900613, + -0.037666116, + 0.0131266685, + -0.0015513634, + -0.006986881, + -0.026647333, + 0.015694216, + -0.029707378, + 0.008884633, + 0.009876193, + -0.0008076939, + -0.021341506, + 0.020697977, + 0.007945607, + 0.016902473, + -0.0039925035, + 0.0010375256, + -0.00066487, + -0.013750497, + -0.03356855, + -0.029576045, + -0.012936236, + -0.012844304, + -0.0046754316, + 0.011734545, + -0.010526287, + 0.009823659, + 0.009863059, + 0.014945622, + -0.002255633, + 0.006954048, + 0.0028860283, + -0.008582569, + -0.0005680124, + 0.0054273093, + 0.008030973, + 0.0019962518, + -0.030784303, + -0.012194209, + -0.004402917, + -0.0036641725, + 0.013205468, + 0.014748623, + -0.010112591, + -0.013803029, + 0.013829296, + 0.020409048, + -0.014604157, + -0.009613528, + -0.010257056, + -0.013711097, + -0.00807694, + 0.007190446, + 0.025688607, + 0.000911939, + 0.008411837, + -0.004274868, + -0.034330275, + -0.021643572, + 0.013047868, + -0.04375994, + -0.021091975, + 0.02057978, + -0.0046425983, + 0.01021109, + -0.0060544214, + -0.015694216, + 0.027711125, + -0.0036313394, + -0.005847573, + 0.015076954, + 0.0075056436, + -0.017926866, + -0.007807708, + -0.009928726, + 0.0013092194, + 0.0067077996, + 0.0017237371, + -0.011767378, + 0.025018813, + -0.004297851, + 0.014013162, + 0.00086186855, + -0.0019190939, + 0.0057720565, + 0.0046951314, + -0.0002177244, + -0.008208272, + -0.0060609877, + 0.011012217, + 0.002759621, + 0.023823688, + 0.027553527, + -0.015720483, + -0.0015439759, + -0.0079718735, + -0.0010859544, + -0.038401578, + -0.00080974604, + 0.0074071446, + 0.014446558, + 0.0019601353, + -0.0013691398, + -0.024257084, + -0.014788022, + -0.0069606146, + 0.01956852, + 0.04052916, + 0.0108020855, + -0.0051843445, + -0.006189037, + 0.012719538, + 0.017191404, + 0.0030025858, + -0.0013198901, + 0.0072167125, + -0.022667963, + 0.018530995, + 0.016350877, + 0.046544183, + 0.022195166, + -0.016022546, + -0.0040122033, + 0.0026775382, + 0.010506588, + 0.0088124005, + 0.003211076, + 0.0043438175, + 0.01684994, + -0.01244374, + 0.02537341, + 0.006287536, + -0.022287099, + 0.01465669, + 0.0062481365, + -0.011839611, + -0.0076632425, + 0.01067732, + 0.016429678, + 0.0017434369, + -0.013067569, + -0.0049807793, + -0.011458747, + 0.031519763, + -0.023600424, + -0.02570174, + -0.0070262807, + -0.031493496, + -0.003966237, + 0.0358012, + 0.035958797, + 0.022418432, + 0.029129514, + 0.000092496964, + -0.007380878, + 0.003509857, + -0.00067513034, + 0.00530911, + 0.0028794617, + -0.014288959, + 0.0012886986, + 0.021840569, + -0.017349003, + 0.0057096737, + 0.008221405, + -0.004619615, + -0.009580695, + -0.0028088705, + -0.0050168955, + 0.03309575, + -0.012614472, + -0.008661368, + -0.028446587, + -0.017834933, + 0.020146383, + 0.008608836, + -0.0036083562, + -0.000045068544, + -0.01945032, + 0.011990643, + -0.022733629, + 0.0031240683, + 0.0046327487, + 0.020277714, + 0.0051350947, + 0.007945607, + -0.010933418, + 0.010151991, + 0.0049052634, + -0.013310534, + 0.010848052, + 0.008576002, + 0.0044226167, + -0.013369633, + -0.013474699, + -0.010060058, + 0.034067612, + -0.0017352287, + 0.017230805, + -0.014709223, + 0.009823659, + -0.008694202, + 0.0015743466, + 0.0043733674, + 0.012548806, + -0.010197957, + -0.010394955, + 0.0056078914, + -0.012476573, + 0.017966265, + 0.036510393, + 0.00623172, + -0.015720483, + -0.003050194, + -0.01469609, + -0.0022966745, + 0.04938096, + 0.041107025, + 0.006796449, + 0.0012386282, + 0.016863074, + 0.006106954, + -0.030994434, + -0.0002626647, + 0.024401551, + 0.0027054464, + 0.010500021, + 0.0003295621, + 0.026056338, + -0.0005347689, + 0.007939041, + 0.010591954, + 0.00623172, + -0.0046327487, + -0.009580695, + -0.009639794, + 0.020435313, + 0.00081426057, + 0.019016923, + 0.011025351, + 0.0071444795, + 0.0026808216, + 0.03832278, + 0.02071111, + 0.030994434, + 0.014091961, + -0.02366609, + -0.0018780526, + 0.00038127424, + -0.017467203, + -0.00443575, + -0.025951272, + 0.022024434, + 0.010999084, + -0.00577534, + 0.012634172, + 0.02789499, + -0.004225618, + -0.0038710209, + -0.0063105193, + 0.016258944, + -0.01822893, + 0.0026069472, + 0.03191376, + 0.00013092194, + -0.010046924, + 0.0049840626, + 0.016088212, + -0.01388183, + 0.0004998837, + -0.006366336, + 0.00036690975, + -0.003020644, + 0.0057819067, + -0.0061200876, + 0.0027136547, + -0.010953118, + -0.022681097, + 0.00014025884, + -0.00042149477, + -0.010545988, + -0.0068358486, + -0.010920284, + -0.0119775105, + -0.020238316, + 0.018452195, + -0.011767378, + 0.0035656733, + -0.028577918, + -0.0076501095, + 0.030626703, + 0.019673586, + 0.0043733674, + 0.00484288, + 0.009534729, + 0.034277745, + 0.005138378, + -0.024349017, + -0.019594787, + -0.011622913, + -0.0046819984, + -0.001624417, + 0.023088226, + -0.008339604, + -0.0047148312, + 0.0011606496, + 0.034698006, + -0.012640739, + -0.0054502925, + -0.0050267456, + 0.009712027, + -0.0053222436, + 0.0088518, + 0.00033366625, + -0.0064517017, + -0.012765504, + 0.004885563, + -0.012923103, + -0.00050603994, + -0.010303022, + 0.0035394067, + 0.0051843445, + 0.010683887, + 0.018517861, + -0.011439048, + 0.0030813853, + 0.029208314, + -0.0068424153, + -0.007847108, + -0.004698415, + 0.005272994, + 0.01692874, + 0.007032847, + 0.006940915, + -0.025544142, + 0.001823878, + -0.011544113, + -0.021052575, + 0.014026294, + 0.01469609, + -0.0013830938, + 0.0010424505, + 0.023324626, + -0.03167736, + -0.02789499, + 0.002137434, + 0.017283337, + 0.009022532, + 0.002245783, + -0.0023442823, + -0.021814303, + -0.0010793877, + 0.015562884, + 0.018570393, + 0.006402452, + -0.021853702, + -0.01822893, + -0.018045064, + -0.00757131, + -0.014394025, + -0.020803044, + -0.03475054, + 0.00398922, + 0.012548806, + 0.01199721, + 0.01737527, + 0.0058869724, + 0.0057884734, + -0.012023477, + 0.0075581768, + 0.008208272, + -0.03369988, + -0.035144538, + 0.000012607393, + 0.019831184, + 0.013566632, + 0.026699867, + 0.0034080744, + 0.005857423, + 0.022155767, + -0.011583513, + -0.0043372507, + 0.026122004, + 0.0024493483, + -0.011242049, + 0.0058311564, + 0.036431592, + 0.035092004, + 0.0021505672, + -0.0021719087, + -0.024060085, + 0.0052631437, + -0.0040351865, + 0.0057523567, + -0.039005708, + -0.017243937, + 0.0048691467, + 0.000645991, + -0.012161375, + 0.015234552, + 0.009968125, + -0.022589164, + 0.010053491, + -0.016836807, + 0.012975636, + -0.0049479464, + 0.0125685055, + -0.0058541396, + 0.013750497, + -0.0055290917, + 0.022707364, + -0.013474699, + 0.0017697033, + 0.019305855, + -0.0056111747, + 0.002170267, + 0.0068555484, + 0.0054273093, + -0.033148285, + -0.0021669837, + -0.010644487, + 0.03065297, + -0.011800212, + -0.012660438, + 0.0040122033, + -0.045493525, + 0.00001976398, + -0.0041139857, + -0.015470951, + -0.02191937, + 0.00799814, + 0.015484083, + -0.020553512, + 0.026607934, + -0.023626689, + -0.013251434, + 0.009863059, + 0.00006607659, + 0.03438281, + 0.024454083, + 0.04218395, + -0.004402917, + -0.003660889, + -0.02975991, + 0.010414655, + 0.012233608, + 0.00044488834, + -0.0010145424, + 0.0014947263, + -0.004488283, + -0.028525386, + 0.014459692, + -0.0017976115, + 0.020330248, + -0.04129089, + 0.0132777, + -0.00492168, + 0.020566646, + -0.018754259, + -0.03348975, + -0.015773015, + 0.024073219, + -0.010165124, + 0.0077157756, + -0.026082605, + -0.023324626, + -0.029943775, + 0.029812442, + 0.0012591489, + 0.011714846, + 0.007518777, + -0.017939998, + -0.0004896234, + -0.0044587334, + -0.019791786, + 0.013231734, + -0.00057827274, + 0.021249574, + -0.011130417, + 0.023600424, + -0.010033791, + 0.004796914, + -0.012962502, + 0.0024690481, + -0.002418157, + 0.022667963, + -0.014131361, + -0.021157641, + -0.009140732, + 0.010447488, + 0.007814275, + -0.003143768, + -0.017270204, + -0.001106475, + 0.004819897, + -0.021788036, + 0.010710153, + -0.010086324, + -0.036431592, + -0.014144494, + -0.0013239942, + -0.017559135, + -0.019699853, + -0.006940915, + 0.0067570494, + -0.015300219, + -0.013606031, + 0.00023414096, + 0.008687635, + 0.023902487, + 0.010526287, + -0.002749771, + 0.009101332, + 0.014879955, + -0.030968167, + 0.033936277, + -0.009147298, + 0.004491566, + -0.010427789, + 0.0017073206, + -0.024624815, + -0.008746735, + 0.018977525, + -0.020067582, + -0.029365914, + 0.0017729867, + -0.0046327487, + 0.0034803073, + 0.020290848, + -0.011517847, + 0.054056395, + -0.007479377, + -0.0037068555, + -0.025833072, + -0.0033588249, + -0.0030452688, + -0.018517861, + 0.025885606, + 0.01240434, + 0.01628521, + -0.005200761, + -0.0011836328, + 0.010985951, + 0.00032730485, + -0.044810597, + -0.041264623, + -0.00039153456, + 0.036195196, + 0.00053846266, + 0.0071379133, + -0.000006310109, + -0.0039925035, + -0.015050687, + 0.00929833, + -0.01558915, + -0.0111369835, + -0.008004706, + 0.01290997, + -0.0024985978, + -0.007840541, + -0.007833974, + -0.02139404, + -0.012699838, + -0.0016465794, + -0.022470964, + -0.005640724, + -0.009180131, + 0.034855604, + 0.0036773058, + -0.015746748, + -0.0050989785, + 0.0016638167, + -0.033516016, + -0.013008469, + 0.004928246, + -0.008306771, + 0.008201705, + -0.019870585, + 0.0047509475, + 0.021459706, + -0.022759896, + 0.017060071, + -0.0039925035, + 0.0012484782, + 0.016009413, + -0.019292722, + 0.0033456916, + -0.009403396, + -0.028315254, + -0.02123644, + 0.019699853, + 0.0028679701, + -0.00032525277, + 0.011931544, + 0.005072712, + -0.025570408, + -0.020448446, + 0.017585402, + -0.0102964565, + 0.007866807, + 0.012627605, + -0.023193292, + 0.008983132, + -0.0026003805, + 0.0068424153, + -0.019634185, + 0.0044948496, + -0.0011507997, + 0.0037790884, + 0.014144494, + -0.034803074, + -0.012397774, + -0.0050365957, + -0.027553527, + 0.0059526386, + 0.001956852, + -0.0077289087, + 0.022300232, + -0.0100731915, + -0.030600438, + 0.0025987388, + -0.013645431, + -0.021853702, + -0.01285087, + 0.025504742, + 0.0070262807, + 0.0033653914, + -0.013566632, + 0.03309575, + -0.02102631, + 0.0049479464, + -0.012647305, + -0.03333215, + 0.0037922217, + 0.008050673, + 0.0063630524, + 0.0030288522, + 0.0071510463, + -0.0015644965, + 0.008818967, + -0.010710153, + -0.012391207, + 0.015300219, + -0.013290834, + -0.019266456, + 0.014827422, + -0.016955007, + -0.024677347, + -0.012581639, + 0.017204538, + 0.0029516944, + 0.010670753, + 0.19762892, + -0.009475629, + 0.020671712, + 0.045178328, + 0.005253294, + 0.022116367, + 0.031230832, + -0.0069737476, + -0.0019749103, + 0.012975636, + -0.011800212, + 0.014078828, + -0.016337745, + -0.0019732686, + -0.024940012, + -0.016232679, + -0.014105095, + -0.013829296, + -0.020028183, + -0.018439062, + 0.0017729867, + -0.019778652, + -0.007472811, + -0.009488762, + 0.032622956, + -0.009915592, + -0.0031618262, + 0.0053419434, + 0.03309575, + -0.010782386, + -0.008273938, + -0.0088124005, + 0.0037167054, + 0.0006455806, + -0.0111107165, + 0.0045572324, + 0.0038874375, + -0.010552554, + 0.024230817, + 0.02776366, + -0.009981259, + -0.0026627635, + 0.013225167, + -0.0011286373, + -0.0071970127, + 0.007499077, + 0.0064090188, + -0.023626689, + 0.01729647, + 0.021157641, + -0.0112223495, + 0.013973762, + 0.014958754, + 0.021249574, + -0.01729647, + 0.0091210315, + 0.009291763, + 0.014538491, + -0.012936236, + -0.001738512, + -0.0046425983, + 0.031887494, + -0.018320862, + 0.016981272, + 0.00010403984, + 0.014078828, + -0.025425943, + 0.0027711126, + -0.008674501, + -0.03876931, + 0.013290834, + -0.03362108, + 0.0001390276, + 0.012653871, + -0.017532868, + -0.03220269, + 0.01937152, + 0.018005665, + 0.0004867505, + 0.03690439, + -0.018570393, + -0.016626675, + 0.004619615, + 0.010782386, + -0.036247727, + -0.024585415, + 0.026489735, + -0.010408089, + -0.003585373, + 0.002313091, + 0.021971902, + -0.008825534, + 0.004957796, + -0.021735504, + 0.008267371, + 0.027185796, + 0.0010481963, + 0.03372615, + -0.0009480554, + -0.0073020784, + -0.015457817, + -0.03527587, + 0.021656705, + -0.0026036638, + -0.018977525, + 0.0033686748, + -0.0015382301, + 0.020553512, + 0.00583444, + -0.027422193, + 0.0015218136, + -0.019292722, + 0.0011926619, + -0.0006858011, + 0.01558915, + 0.006235003, + 0.008306771, + -0.027474727, + -0.0019076023, + -0.0025560558, + 0.023652956, + -0.017598534, + -0.017283337, + 0.011307715, + -0.036641724, + -0.010092891, + -0.020041317, + 0.023232693, + -0.013028169, + -0.037639853, + 0.020028183, + -0.022103235, + -0.0055225254, + 0.010624787, + 0.004534249, + 0.035827465, + -0.0013075777, + -0.011156683, + -0.016836807, + 0.0055126753, + 0.007032847, + -0.01636401, + 0.004179652, + 0.019174524, + 0.0041730856, + -0.0061332206, + -0.0034507574, + 0.007019714, + -0.006136504, + -0.022983162, + -0.011288015, + -0.023075094, + 0.0057687736, + -0.0030222856, + -0.0069737476, + -0.018005665, + -0.04938096, + -0.039688636, + 0.0019141689, + 0.010756119, + -0.026502868, + 0.0020126682, + 0.01993625, + -0.0028400621, + -0.017651068, + -0.0040056366, + -0.16978645, + 0.014236427, + 0.0061824704, + -0.013487833, + 0.009672628, + 0.016061947, + 0.011747679, + 0.009915592, + 0.0091210315, + 0.011990643, + 0.022379031, + 0.0077420417, + -0.021788036, + -0.029418446, + 0.010440921, + -0.01013229, + -0.01993625, + 0.023206426, + 0.020540379, + 0.013382766, + 0.03288562, + -0.015195153, + 0.020330248, + 0.0033309166, + 0.011760811, + 0.010631354, + 0.008510336, + 0.0027776791, + -0.010165124, + -0.012936236, + -0.01558915, + -0.004711548, + 0.015602283, + 0.017322736, + 0.0005343585, + 0.0016375502, + -0.00022552226, + -0.013428733, + -0.0015152469, + 0.015457817, + 0.023285225, + 0.048908167, + -0.0025560558, + -0.00716418, + -0.0114456145, + 0.020514112, + 0.020737378, + -0.01201691, + 0.017243937, + -0.009928726, + 0.033962544, + -0.005128528, + -0.009449363, + 0.0024542732, + 0.03178243, + 0.0012041535, + -0.007774875, + 0.005712957, + -0.0123715075, + 0.01834713, + -0.013934362, + -0.0034277742, + 0.011366814, + 0.005108828, + 0.0019749103, + -0.015733615, + -0.0077354754, + 0.0026036638, + -0.01989685, + -0.0050398787, + -0.011596646, + -0.03028524, + 0.016350877, + -0.01506382, + -0.00076501095, + 0.025609808, + -0.019765519, + 0.02335089, + -0.011268316, + 0.00041061878, + 0.0006706158, + 0.013251434, + -0.0039334036, + -0.006454985, + -0.0019683435, + -0.004317551, + -0.0048133307, + 0.0035689566, + -0.005942789, + -0.015667949, + 0.028131388, + -0.011826478, + -0.014551624, + -0.006967181, + 0.019384654, + 0.021052575, + -0.012752371, + 0.003660889, + -0.001600613, + -0.017861199, + -0.010316156, + -0.0021834003, + -0.020120116, + 0.010125724, + 0.051508546, + 0.016416544, + 0.023048827, + 0.011872444, + 0.034067612, + 0.02057978, + -0.00710508, + 0.002982886, + 0.03593253, + 0.04168489, + 0.011800212, + -0.0015997922, + 0.008779568, + -0.0035656733, + 0.014958754, + 0.007807708, + 0.025281478, + -0.0016375502, + 0.002812154, + 0.009199831, + -0.0007190446, + -0.003903854, + -0.10065311, + -0.03414641, + 0.016692342, + 0.019739252, + 0.00049906294, + 0.018465329, + 0.0016153879, + 0.008667935, + 0.006415585, + 0.021157641, + -0.012358374, + -0.045046996, + -0.0049052634, + -0.017637935, + 0.011071317, + 0.014065694, + -0.009147298, + 0.004288001, + -0.0099878255, + 0.013973762, + -0.0043996335, + -0.012049743, + -0.0056735575, + -0.014499092, + 0.007177313, + 0.011150116, + -0.013789897, + 0.02090811, + 0.008136039, + 0.00753191, + 0.0023344324, + -0.00795874, + 0.013487833, + -0.021617305, + 0.0021505672, + 0.007820841, + -0.031152032, + -0.0038743042, + 0.013540365, + -0.0051974775, + 0.0037462553, + 0.0010884168, + 0.003424491, + -0.027474727, + 0.017440936, + -0.029287113, + -0.024506615, + -0.0010284964, + 0.0103818225, + -0.0017450786, + -0.00669795, + -0.0018485028, + -0.02480868, + 0.010151991, + -0.011097583, + -0.021302108, + 0.017427802, + 0.012194209, + -0.011872444, + 0.0006677429, + -0.027290862, + -0.010197957, + -0.007879941, + 0.019988783, + -0.0045999154, + 0.002616797, + -0.020198915, + -0.043628607, + 0.0179006, + -0.022260834, + -0.014840555, + -0.01595688, + 0.0007682942, + 0.025911873, + -0.034356542, + -0.008989699, + -0.025189545, + -0.024821814, + 0.005942789, + -0.02082931, + -0.01432836, + -0.020172648, + 0.020894976, + -0.008838667, + 0.029260848, + 0.014013162, + 0.005870556, + 0.012010343, + 0.0077683083, + -0.018727994, + 0.0041993516, + 0.008858367, + 0.010467188, + -0.01432836, + 0.011905277, + 0.024992546, + -0.009823659, + 0.023626689, + 0.02797379, + -0.011005651, + -0.016508477, + -0.0049085463, + -0.045782458, + 0.023193292, + -0.002820362, + -0.0059592053, + 0.025110746, + -0.006921215, + 0.013947495, + -0.008530036, + -0.007630409, + 0.012141676, + -0.014013162, + -0.0013239942, + -0.0026479885, + -0.0102964565, + -0.024086352, + -0.031729896, + 0.02290436, + 0.001462714, + 0.026699867, + 0.008917467, + 0.0082805045, + 0.017716734, + 0.022457832, + 0.023403425, + -0.018517861, + 0.0017089621, + -0.005085845, + 0.018202664, + -0.014302093, + -0.032334026, + 0.025767406, + -0.018806793, + 0.00445545, + 0.02752726, + -0.009863059, + -0.005660424, + -0.0013469774, + 0.013776763, + 0.0022720497, + -0.0025675474, + -0.006862115, + -0.023075094, + 0.029602312, + -0.016981272, + -0.013947495, + -0.0030304939, + -0.019673586, + 0.001951927, + 0.01937152, + -0.006674967, + 0.02147284, + 0.017848067, + 0.00978426, + -0.0010432714, + -0.010756119, + -0.041028224, + 0.022195166, + 0.019844318, + 0.0062547033, + -0.02480868, + 0.018452195, + 0.010335856, + 0.01289027, + -0.014354626, + 0.000795792, + -0.010099458, + 0.0017056789, + -0.014827422, + 0.011557247, + -0.034960672, + -0.0002417336, + -0.002503523, + 0.011583513, + 0.0035295568, + 0.03333215, + 0.016114479, + 0.010401522, + -0.0060544214, + -0.012332108, + 0.02046158, + 0.004777214, + 0.0020241598, + -0.030941902, + 0.018373396, + 0.018557262, + 0.014236427, + -0.030810568, + 0.015694216, + -0.004793631, + 0.008654802, + -0.010723286, + 0.015681082, + 0.0017631368, + -0.0265948, + 0.0057359403, + 0.027133264, + -0.0049413797, + -0.016324611, + 0.004432467, + 0.014433425, + 0.024165152, + -0.011859311, + -0.025596675, + -0.0223265, + -0.0041107023, + 0.0041533853, + -0.027553527, + -0.028709251, + -0.0060150214, + 0.0066487, + 0.028840583, + 0.014814289, + 0.015208286, + 0.023955021, + -0.015260818, + 0.012857437, + -0.028157655, + -0.024178285, + -0.00094969705, + 0.013527232, + 0.04136969, + 0.011360249, + 0.031020701, + -0.015641682, + 0.009948425, + 0.002730071, + 0.0058442894, + -0.018176397, + 0.0088715, + -0.005049729, + -0.0047607976, + -0.010079757, + -0.013947495, + -0.02589874, + -0.017624801, + -0.002687388, + 0.024060085, + 0.029628579, + -0.036142662, + 0.04257795, + 0.00073012576, + -0.0071116467, + -0.009212964, + 0.033016954, + 0.022562897, + 0.02768486, + -0.0065896004, + -0.017874332, + -0.041317157, + -0.00935743, + 0.0028285705, + 0.012962502, + -0.020435313, + -0.0046852813, + 0.012712971, + -0.005617741, + -0.0020931093, + -0.013133235, + -0.0037561052, + 0.024388418, + 0.0015447967, + 0.014288959, + 0.0055684918, + -0.013527232, + -0.0011754245, + 0.019988783, + -0.030311506, + -0.018530995, + -0.024020687, + 0.0074202777, + -0.0035722398, + -0.046228986, + -0.022733629, + 0.0033686748, + -0.017401537, + -0.005128528, + 0.0031043685, + 0.011498147, + -0.00010896481, + -0.0060478547, + 0.010316156, + -0.016981272, + -0.02574114, + 0.009580695, + -0.0068424153, + 0.008969999, + -0.019082591, + -0.0052467273 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 4, + "total_tokens": 4 + } +} +247 34475 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 52 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["japan"]}HTTP/2.0 200 OK +Content-Length: 33520 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:31 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 94 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-9qscs +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999998 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_80638aa6b37a4549a6b7d8b7b0b3428b + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.0025093954, + -0.014704405, + -0.0073522027, + -0.02217393, + -0.008075691, + 0.017116033, + -0.024598593, + 0.0051230774, + 0.014808692, + -0.039342105, + -0.0152910175, + 0.011536702, + 0.005507634, + -0.023177689, + 0.0012546977, + -0.0012180345, + 0.019983914, + -0.018875869, + 0.02467681, + -0.017037818, + -0.009405345, + 0.026501823, + 0.0047776285, + -0.0016522902, + 0.008303817, + 0.0038748977, + 0.0046766005, + -0.019006226, + 0.008773107, + -0.005448973, + 0.00782801, + -0.007977922, + -0.0087079285, + -0.027140578, + 0.0075477404, + -0.009196771, + -0.011621434, + -0.01291198, + -0.0018624929, + -0.012527424, + 0.019579802, + -0.009066413, + -0.012436173, + -0.00083307043, + -0.010213565, + 0.022108752, + -0.014743513, + 0.005768351, + -0.008492837, + 0.026058605, + 0.02089642, + 0.03381492, + -0.030243104, + -0.014274224, + -0.026827719, + -0.005315356, + -0.03334563, + -0.0094379345, + -0.0065146512, + 0.00045136528, + 0.0052729896, + 0.021678569, + -0.03459707, + 0.012768586, + 0.012827247, + -0.012468763, + -0.00036948404, + 0.012560013, + -0.016672814, + -0.008544981, + 0.030634178, + 0.027922727, + 0.006045362, + 0.003698914, + 0.024624664, + -0.006325632, + -0.0067069298, + -0.008584088, + 0.0030406052, + 0.013765827, + 0.019162657, + -0.031259898, + 0.0016294776, + -0.0118625965, + 0.007899707, + 0.0049307994, + -0.034232065, + 0.03449278, + 0.006967646, + -0.0044680275, + 0.011100002, + 0.01160188, + 0.011504112, + 0.02024463, + -0.028887378, + -0.014443689, + -0.0041095424, + 0.043617856, + -0.006182238, + -0.025719674, + -0.017142104, + 0.0192148, + -0.008773107, + -0.012879391, + -0.024116268, + 0.010037581, + 0.0064788028, + -0.010115797, + 0.016359955, + -0.0086362315, + -0.009118557, + 0.0281313, + 0.006100764, + -0.053290434, + -0.010721963, + -0.018980155, + 0.011256431, + 0.0030520116, + -0.008942573, + -0.01930605, + 0.017572286, + 0.023490548, + 0.016425135, + 0.000037987196, + 0.026749505, + 0.003094378, + -0.008193013, + -0.017702645, + 0.000025320554, + -0.0077497954, + 0.022916973, + 0.0109175, + 0.0000014878531, + 0.016751029, + -0.017441928, + 0.0029949797, + -0.0130293025, + -0.00095080014, + -0.018380508, + -0.016894424, + 0.0015748901, + 0.0033925723, + -0.0026055346, + 0.007065415, + 0.011113037, + 0.018302292, + 0.014795656, + -0.00048925064, + -0.005377276, + 0.001883676, + -0.0040965066, + -0.020049091, + 0.028835235, + 0.00043425578, + 0.023894658, + 0.011269467, + 0.0125926025, + 0.01319225, + 0.011784382, + 0.0039596306, + -0.0012579567, + -0.006032326, + 0.01753318, + -0.012116795, + -0.009333648, + 0.024533415, + 0.013896185, + 0.00623764, + 0.00089621264, + -0.0038879334, + -0.02420752, + 0.01800247, + -0.03746495, + 0.01565602, + -0.0050839703, + 0.0017158398, + 0.0050285677, + 0.015760306, + -0.024194483, + -0.0127751045, + -0.011425897, + 0.021639463, + 0.01977534, + 0.006693894, + -0.005813976, + -0.002207942, + 0.011947329, + 0.008740517, + 0.0064788028, + -0.016829245, + 0.014482797, + 0.038820673, + 0.022890901, + 0.016021024, + -0.6841199, + -0.04638145, + 0.011191252, + 0.007638991, + 0.03477957, + 0.021078922, + 0.017076924, + 0.008883912, + -0.01001151, + 0.019136585, + -0.024155376, + 0.012735996, + -0.008747036, + -0.011184734, + 0.0005059528, + -0.0062930426, + 0.011210806, + -0.030373462, + -0.0038716388, + -0.0065113925, + -0.015369233, + 0.008003994, + -0.015173695, + 0.0005088044, + -0.0022600854, + -0.0021036556, + 0.00041205416, + 0.001955373, + -0.0053674993, + 0.034883857, + -0.04270535, + 0.033554204, + 0.01827622, + -0.0109696435, + 0.03384099, + -0.025067883, + -0.02199143, + 0.03728245, + 0.020453202, + 0.029956317, + -0.0021199503, + -0.010278745, + -0.0013483927, + -0.009183736, + -0.004164945, + -0.0027081918, + 0.024807166, + -0.018419614, + 0.0036174401, + -0.015864594, + 0.012234118, + -0.01565602, + -0.01755925, + -0.012762069, + 0.00075567025, + 0.019345157, + -0.0024458459, + -0.02495056, + 0.003200294, + -0.003995479, + -0.019123549, + 0.0070849685, + -0.016920496, + -0.005282766, + -0.0075216684, + -0.003175852, + -0.034075636, + 0.0024491048, + 0.013179215, + -0.018315328, + -0.0013964623, + 0.009744276, + -0.0033632417, + -0.0030520116, + 0.010682855, + 0.022186967, + 0.013987436, + -0.026149856, + -0.019801412, + -0.019996949, + 0.008512391, + 0.0064136237, + -0.009359719, + 0.0025631683, + 0.018758547, + 0.002545244, + -0.021261424, + 0.0027407813, + 0.013739755, + -0.019201763, + 0.006980682, + 0.0020107753, + 0.006377775, + -0.0051882565, + -0.01035696, + 0.01793729, + -0.0003220255, + -0.026723431, + 0.009568293, + -0.0011919629, + -0.017911218, + -0.0056836177, + 0.001955373, + -0.0027163392, + -0.0020841018, + -0.0026674548, + -0.014730478, + 0.008303817, + 0.034883857, + -0.030712394, + 0.022486791, + -0.011621434, + -0.022369469, + 0.0036826194, + 0.028704876, + -0.026540931, + 0.012898944, + -0.0028825458, + 0.016320847, + -0.00063997734, + 0.011875632, + 0.0023937025, + 0.018719438, + 0.0024458459, + 0.00901427, + 0.021469997, + 0.004132355, + -0.02595432, + -0.007762831, + 0.004494099, + -0.011882151, + 0.014000472, + 0.021417852, + -0.019671053, + 0.025120026, + -0.007801939, + 0.0061137998, + 0.0053414274, + 0.01493905, + -0.046511807, + -0.03003453, + -0.01619049, + 0.0016042207, + -0.0010070171, + 0.0077563133, + -0.015864594, + -0.0023822961, + 0.002483324, + -0.0003623551, + 0.010122315, + 0.024559487, + -0.005093747, + -0.021039814, + 0.021548212, + -0.00034157923, + -0.015369233, + -0.008883912, + -0.007912743, + 0.012312332, + -0.012416619, + 0.026905933, + -0.0012408472, + -0.02940881, + -0.0028890637, + 0.014039579, + -0.01254046, + 0.004634234, + 0.030686323, + -0.019540695, + -0.026254144, + -0.0030552705, + -0.001484454, + -0.009581328, + 0.016555492, + 0.008388551, + 0.0100441, + 0.0013451338, + -0.011934293, + 0.0042529367, + -0.0031514096, + 0.0043702587, + -0.022447683, + -0.00667434, + -0.004226865, + 0.032015976, + -0.01840658, + 0.0151997665, + 0.014352438, + 0.0028108489, + 0.00033180238, + -0.031025253, + 0.024572521, + 0.011465005, + 0.0118625965, + 0.0082712285, + -0.013479038, + 0.015369233, + 0.016751029, + -0.0077823848, + 0.022421611, + 0.024259662, + -0.011627952, + 0.007938814, + -0.016086202, + 0.014978158, + -0.021065885, + -0.013439931, + -0.025628423, + 0.025432887, + 0.013700647, + 0.011412861, + -0.024220554, + -0.0029314302, + -0.008649267, + -0.0011691501, + 0.028652733, + 0.010389549, + 0.0063484446, + -0.006045362, + 0.0018869351, + 0.003241031, + -0.020596597, + 0.0032068118, + -0.01603406, + 0.0030291989, + 0.015551734, + -0.019605875, + 0.014052615, + 0.01849783, + -0.017324606, + -0.025524138, + -0.020414095, + -0.011660541, + 0.020974636, + 0.015017265, + -0.0011194511, + 0.016451206, + -0.024898417, + 0.035692077, + 0.022695364, + -0.0006326447, + 0.0111521445, + 0.008101762, + 0.011869115, + 0.013557253, + -0.009340165, + 0.050605055, + -0.00006920187, + -0.02313858, + 0.019253908, + -0.006693894, + -0.0071175583, + -0.006602643, + 0.010207048, + 0.009900706, + -0.029904172, + 0.015147624, + 0.0011830007, + 0.038221028, + 0.03796031, + 0.007990958, + -0.003946595, + 0.009385791, + -0.0017875369, + 0.0027733708, + -0.0049307994, + 0.021065885, + 0.014248152, + -0.0020726954, + 0.00001147636, + -0.015030301, + 0.0014518645, + 0.000006034159, + -0.023699122, + 0.02685379, + -0.014821728, + -0.0035196715, + 0.0008807326, + 0.021235352, + 0.01771568, + -0.0077823848, + -0.05034434, + 0.018654259, + 0.001085232, + -0.007502115, + -0.021626426, + -0.00355552, + -0.012853319, + -0.021900179, + 0.027088435, + 0.02747951, + 0.028470233, + -0.0023154877, + -0.023047332, + -0.014091722, + 0.0065570176, + 0.024989668, + -0.019436408, + -0.011908222, + 0.0027489287, + 0.014404582, + -0.021183208, + 0.006902467, + 0.010780623, + 0.017846039, + -0.006961128, + 0.0072283624, + -0.010415621, + 0.0035848506, + 0.0033893134, + -0.011223841, + -0.009301058, + -0.003848826, + 0.008427658, + 0.0046114214, + -0.004481063, + -0.019449444, + 0.01254046, + 0.013948328, + -0.00661242, + -0.013009749, + -0.012879391, + -0.010715445, + 0.0023839257, + 0.06450124, + -0.010982679, + 0.0016384397, + 0.0041258372, + 0.0022503086, + -0.010154904, + -0.02098767, + -0.015642984, + -0.0008636231, + 0.0041844985, + -0.0038390493, + 0.008968645, + 0.011047858, + 0.014052615, + -0.0012832136, + 0.0020678071, + -0.009431416, + -0.018354435, + 0.006902467, + -0.015903702, + 0.012846801, + -0.007606401, + 0.01469137, + 0.013042338, + 0.0036923962, + 0.004142132, + 0.0134138595, + 0.027427366, + 0.018302292, + -0.017833002, + 0.0059769237, + -0.0020238112, + -0.025067883, + 0.012455727, + -0.014991194, + 0.009718204, + 0.020388024, + 0.032693837, + 0.0020759543, + -0.006322373, + 0.0149260145, + 0.015108516, + 0.009033823, + -0.004601645, + 0.008962126, + -0.031859547, + -0.031233827, + 0.018145863, + -0.02651486, + -0.012077688, + 0.04364393, + 0.0017679832, + -0.02891345, + -0.024285734, + -0.0070849685, + 0.031129539, + -0.021978393, + -0.00019716678, + 0.0013980918, + -0.004132355, + -0.0012326998, + -0.04544287, + 0.0045462423, + -0.00973124, + -0.020596597, + -0.041844983, + -0.015512627, + -0.029643456, + -0.02732308, + -0.013622433, + -0.019045334, + -0.03000846, + -0.01937123, + 0.008003994, + 0.025185205, + -0.01755925, + 0.008303817, + -0.00589545, + -0.0012791399, + 0.021013742, + -0.022017501, + -0.016633706, + -0.030217033, + -0.008127834, + -0.0043246336, + 0.022069644, + 0.025902176, + -0.028548447, + -0.0074630072, + 0.0019407078, + 0.025237348, + -0.0033990901, + 0.015577805, + 0.017415857, + 0.005963888, + 0.0006827511, + 0.02152214, + 0.03206812, + -0.0046928953, + -0.010220083, + 0.02380341, + -0.01637299, + 0.0038748977, + 0.007925779, + 0.0011520407, + 0.020661775, + 0.0048884326, + 0.01191474, + -0.005533706, + -0.0075086327, + 0.02548503, + -0.014899943, + 0.007489079, + 0.017428892, + -0.0049829422, + 0.02049231, + -0.0085254265, + 0.008095245, + 0.008023548, + 0.0009874634, + 0.021821965, + -0.019970877, + 0.013387788, + 0.021065885, + 0.0015431152, + 0.021039814, + 0.0071175583, + -0.0025810925, + -0.0054848217, + -0.0073587205, + -0.019879626, + 0.018967118, + -0.01469137, + -0.011373754, + -0.022538934, + 0.006746037, + -0.009046859, + 0.008740517, + -0.010233119, + -0.027010221, + -0.0075086327, + -0.011249913, + 0.006635233, + 0.0038586028, + -0.023972875, + -0.019736232, + 0.00017058593, + 0.010832767, + 0.00268212, + 0.01699871, + -0.004793923, + 0.0009565033, + -0.01203858, + -0.0009842045, + -0.026019499, + -0.044895366, + -0.041375693, + -0.023646979, + 0.019879626, + 0.021795891, + 0.030686323, + 0.015421376, + 0.004934058, + -0.0016604377, + -0.017598357, + 0.018132826, + 0.0021199503, + 0.02906988, + -0.0064983563, + 0.0020564008, + 0.026215035, + 0.018354435, + -0.020309808, + -0.009529185, + -0.010383031, + 0.027297009, + -0.00421057, + 0.010024546, + -0.010220083, + -0.0255111, + 0.00866882, + -0.01977534, + -0.0029737966, + -0.0006033141, + 0.008473284, + -0.0075998832, + 0.009053377, + -0.0023562245, + 0.011119555, + -0.002264974, + 0.0042627132, + -0.023034295, + 0.0009100632, + -0.01874551, + -0.001924413, + -0.012064652, + -0.0008945832, + -0.006739519, + 0.014248152, + 0.014143866, + 0.023281975, + 0.010083207, + 0.00097198336, + -0.01406565, + 0.00302594, + 0.028548447, + -0.016490312, + -0.026827719, + 0.00031428548, + -0.01578638, + -0.02017945, + -0.018419614, + -0.0022226074, + -0.022213038, + -0.020596597, + 0.017363712, + -0.0065830895, + 0.030164888, + -0.00044403263, + -0.019671053, + -0.002872769, + 0.012221082, + 0.03939425, + 0.0039661485, + 0.019019263, + 0.0006118688, + -0.0033697595, + -0.026905933, + -0.01699871, + -0.014417618, + 0.00066197524, + 0.010304816, + 0.020453202, + -0.022695364, + -0.043748215, + -0.0058596013, + 0.008968645, + -0.00627023, + -0.009379273, + 0.02192625, + 0.010780623, + 0.009952849, + -0.020726955, + -0.010845803, + -0.00988767, + 0.03000846, + -0.0034544924, + -0.00010561052, + -0.0100441, + -0.018823724, + -0.021013742, + 0.021887142, + -0.011627952, + 0.014847799, + 0.0034773052, + -0.017194247, + 0.0036435118, + -0.009379273, + -0.013309573, + 0.009548739, + -0.0070132716, + 0.009868116, + 0.0077302414, + -0.010532943, + 0.003852085, + 0.011386789, + -0.014326367, + -0.0016302923, + -0.019814447, + 0.022447683, + -0.012885909, + -0.023125546, + -0.018888904, + 0.01619049, + 0.024572521, + -0.006733001, + -0.00027538172, + 0.010402584, + -0.022578042, + -0.0009662802, + 0.020270701, + 0.008812215, + -0.024976632, + -0.007058897, + -0.0165946, + -0.021561246, + -0.021821965, + -0.0005246918, + -0.0050578984, + -0.0025419851, + -0.0067525553, + -0.0033795366, + -0.024585558, + 0.010487318, + -0.011856079, + -0.013479038, + 0.0013019526, + 0.02293001, + -0.019345157, + 0.00842114, + -0.0014665298, + 0.020361952, + -0.023646979, + 0.0022405316, + 0.00024381059, + -0.016777102, + 0.020401059, + -0.01603406, + -0.002385555, + -0.03081668, + 0.00014868983, + 0.019253908, + 0.017363712, + 0.028235588, + 0.02239554, + -0.024168411, + 0.0036141812, + -0.042679276, + -0.025054848, + 0.013909221, + 0.009164182, + 0.017963361, + -0.004705931, + -0.00552067, + 0.002941207, + 0.010839284, + -0.013179215, + -0.0152910175, + -0.012501352, + -0.030451678, + -0.017846039, + 0.01406565, + -0.011158663, + 0.0018282739, + -0.017102996, + 0.0046733418, + -0.0024474752, + 0.018941047, + 0.0018820466, + 0.0068568415, + 0.004780887, + 0.032667767, + 0.00645599, + 0.0007678913, + -0.0021557987, + -0.019658018, + 0.01908444, + -0.019188728, + -0.01771568, + -0.025915211, + -0.017663537, + 0.037908167, + 0.010910982, + -0.015043337, + -0.024689844, + 0.008590606, + -0.025654495, + -0.02058356, + -0.009620436, + 0.031624902, + 0.016816208, + 0.0005605403, + 0.011627952, + -0.0022014242, + 0.0071827373, + 0.0030650473, + -0.0010583457, + -0.00007072951, + 0.021730714, + -0.028000943, + 0.021939287, + 0.0002782333, + -0.034388494, + -0.010982679, + 0.023295011, + 0.0004073694, + 0.001618886, + 0.007847564, + -0.003421903, + -0.017324606, + -0.000569095, + 0.0009622065, + -0.019384265, + 0.0054880804, + 0.008206049, + -0.044738937, + 0.013544218, + -0.0026299767, + -0.011556255, + -0.017819967, + 0.009483559, + -0.0063386676, + 0.0012579567, + -0.00047865903, + -0.008994716, + 0.0024882122, + -0.00073489436, + -0.03256348, + 0.019970877, + -0.008395068, + 0.0047352617, + 0.038664244, + 0.0077367597, + -0.0008571052, + -0.021391781, + -0.006605902, + -0.020388024, + -0.013290019, + 0.0235818, + -0.0100766895, + -0.018914975, + -0.016855316, + 0.0069350568, + -0.031624902, + 0.0130293025, + 0.0024588816, + 0.0134138595, + -0.028027015, + 0.021339638, + 0.018576045, + -0.039263893, + 0.0015919995, + 0.023555728, + -0.023125546, + 0.0056836177, + -0.013335644, + 0.010689373, + -0.029200237, + 0.022630185, + 0.0071827373, + -0.0064853206, + -0.025328599, + 0.007697652, + -0.006416883, + -0.027583797, + -0.004230124, + 0.18563008, + -0.017767824, + 0.015877629, + 0.038247097, + -0.00052917283, + 0.03587458, + 0.02860059, + -0.0005393571, + -0.0031025254, + 0.008166942, + -0.040776048, + 0.020766063, + 0.014274224, + -0.0005866119, + -0.001288102, + -0.043331068, + -0.029956317, + -0.011465005, + -0.036656726, + 0.009431416, + 0.009314094, + -0.0054750447, + -0.013922256, + -0.00910552, + 0.013557253, + -0.0019977395, + -0.006462508, + 0.009222843, + 0.023881624, + 0.016737994, + 0.0025941283, + 0.008153906, + 0.004748298, + -0.0010208677, + -0.019488553, + -0.014417618, + -0.0043148566, + -0.0037477985, + 0.012468763, + 0.019006226, + 0.0023122288, + 0.008225603, + 0.0069220206, + -0.0042333826, + -0.013557253, + 0.019188728, + 0.003786906, + -0.0077432776, + -0.008968645, + 0.026032533, + -0.03066025, + -0.017089961, + 0.03496207, + 0.03285027, + 0.014547976, + -0.008219085, + 0.02826166, + 0.0053186147, + -0.0005430234, + -0.010734999, + -0.017102996, + 0.01619049, + -0.012677335, + 0.025185205, + -0.011673577, + 0.0043539642, + -0.035222787, + -0.0038129776, + -0.0016262187, + -0.016555492, + 0.014508869, + -0.018198006, + -0.01818497, + -0.013896185, + -0.030399533, + -0.02747951, + 0.037099946, + 0.015499591, + 0.00826471, + 0.038507815, + 0.0039074873, + 0.0065928665, + -0.0036206993, + 0.011908222, + 0.00110723, + -0.021131065, + 0.008336407, + -0.008916501, + 0.01437851, + 0.0008265525, + -0.0017370231, + -0.01883676, + -0.003770611, + -0.020674812, + -0.0057716095, + 0.008492837, + 0.0000075172384, + 0.016724957, + -0.014182973, + 0.002862992, + -0.010995715, + -0.010734999, + 0.0026348652, + 0.007899707, + 0.010669819, + 0.01469137, + -0.018237114, + 0.004376777, + -0.002167205, + -0.010891428, + -0.011921258, + -0.028079158, + -0.000112433954, + 0.005892191, + -0.017259426, + 0.004494099, + -0.0050024963, + -0.015538698, + 0.018615153, + -0.026619146, + 0.015369233, + -0.021874107, + -0.011556255, + -0.011621434, + -0.021874107, + -0.013726719, + 0.0004872138, + -0.01930605, + 0.0010477541, + -0.0331892, + 0.0016359955, + -0.012403583, + 0.026958076, + -0.026723431, + 0.00095161493, + 0.01774175, + 0.017324606, + 0.0038586028, + -0.0072544343, + 0.033137057, + 0.0047352617, + -0.011249913, + 0.025850032, + 0.006746037, + -0.000620831, + -0.005892191, + 0.0043050796, + 0.025250385, + -0.009985439, + 0.0099658845, + -0.00941838, + -0.016777102, + 0.0014388287, + -0.005735761, + 0.04082819, + -0.010220083, + -0.0333717, + -0.015825486, + 0.013283501, + 0.021483032, + -0.03558779, + -0.0043050796, + 0.061685503, + -0.010311334, + -0.027114507, + 0.004503876, + -0.16800566, + 0.0165946, + 0.02064874, + -0.022408575, + 0.021848036, + 0.022486791, + -0.01780693, + -0.0060160314, + 0.004376777, + 0.016021024, + 0.047919676, + 0.03384099, + -0.0165946, + -0.013622433, + 0.01493905, + -0.008655785, + -0.01927998, + 0.0030080157, + 0.01968409, + 0.014052615, + 0.036917444, + -0.012664299, + 0.0035066358, + 0.00017160436, + -0.016490312, + 0.023242868, + 0.0023464477, + 0.01381797, + -0.0085254265, + 0.015695129, + -0.021065885, + -0.0100766895, + 0.02875702, + 0.018719438, + 0.0030585295, + 0.0019635204, + -0.021913214, + -0.020322844, + -0.0151997665, + 0.01646424, + 0.0065081334, + 0.011334646, + 0.00227638, + -0.014287259, + 0.0017582063, + 0.024051089, + 0.014717441, + -0.024663772, + -0.014143866, + -0.011686613, + 0.014613155, + -0.012520906, + -0.011438932, + 0.028704876, + 0.014313331, + -0.0050187907, + 0.008603642, + 0.008290782, + 0.004787405, + 0.024363948, + -0.039316036, + -0.02255197, + 0.017037818, + -0.0062148273, + -0.02622807, + -0.00458535, + -0.0074434537, + 0.0033958312, + -0.010187494, + -0.0026967854, + 0.004138873, + -0.020192485, + 0.0047189672, + -0.034883857, + 0.011373754, + 0.005667323, + 0.0068177343, + 0.02398591, + -0.01325743, + -0.014600119, + -0.036448155, + 0.02860059, + -0.009359719, + -0.0040867296, + -0.013778863, + 0.032302763, + 0.015916737, + 0.005533706, + -0.038455673, + -0.01755925, + 0.027349152, + -0.01827622, + 0.005025309, + -0.009744276, + 0.0024230331, + 0.022617148, + -0.010369996, + 0.028704876, + -0.02938274, + 0.013231358, + 0.008303817, + -0.007573812, + -0.013583325, + 0.02685379, + 0.019723197, + 0.0009499854, + 0.023373226, + 0.024898417, + 0.03782995, + 0.012612157, + -0.018224077, + 0.008199532, + 0.028339874, + 0.010363477, + -0.008355961, + 0.008975162, + 0.014000472, + -0.0047352617, + 0.025693603, + 0.013987436, + 0.019983914, + -0.007104522, + 0.0057487967, + 0.010930535, + -0.007176219, + -0.016177453, + -0.08222996, + 0.0022454201, + -0.0041128015, + 0.020036057, + 0.005009014, + 0.045234296, + 0.01297716, + 0.0062017916, + -0.010207048, + 0.024246626, + -0.0002056197, + -0.019592838, + -0.017389785, + -0.024624664, + 0.0153822685, + 0.0021085439, + -0.018628187, + -0.013374752, + -0.010559015, + 0.010461246, + -0.018980155, + -0.008734, + 0.0034642692, + -0.0076455087, + -0.018054612, + 0.006967646, + -0.010389549, + 0.012879391, + 0.0076194373, + -0.0019570026, + -0.0033665006, + -0.0016213302, + -0.0050350856, + -0.032433122, + -0.013426895, + -0.005292543, + -0.02264322, + 0.0077563133, + 0.036630657, + -0.045651443, + 0.00988767, + -0.00011620212, + -0.0008090356, + -0.020374987, + 0.0062083094, + -0.014587083, + -0.019423373, + 0.013400824, + 0.008303817, + -0.023321083, + -0.035379216, + -0.0057781273, + -0.0025501323, + 0.0017859074, + 0.027714154, + -0.009522667, + 0.017285498, + 0.0073522027, + -0.034988143, + 0.02217393, + 0.009464006, + -0.005729243, + -0.009196771, + 0.027297009, + 0.015343161, + 0.009548739, + -0.016216561, + -0.041740697, + 0.02940881, + -0.015225839, + -0.017911218, + 0.028313803, + -0.02423359, + -0.0068503236, + -0.025563244, + -0.009274987, + -0.016021024, + -0.003135115, + 0.015017265, + -0.023868587, + -0.011510629, + -0.021874107, + 0.010780623, + -0.0065342053, + 0.0018804171, + 0.021600354, + 0.008414622, + -0.0066580456, + 0.0119538475, + -0.009705168, + 0.026553966, + 0.024064125, + 0.023099475, + -0.015095481, + 0.0010941942, + 0.048310753, + -0.0067786267, + -0.009457488, + -0.000286177, + -0.0026593073, + 0.0049307994, + -0.019762304, + -0.06820341, + 0.019175692, + -0.0050383448, + -0.011465005, + 0.028053086, + 0.0034088672, + 0.012768586, + -0.005807458, + 0.014912979, + -0.01690746, + -0.048258606, + 0.015017265, + -0.0078084567, + -0.014600119, + -0.03863817, + -0.025198242, + 0.024168411, + 0.016307812, + 0.00085140206, + -0.005282766, + 0.01995784, + 0.011549737, + 0.024168411, + 0.030399533, + -0.038455673, + 0.00552067, + -0.0038423082, + 0.021417852, + -0.026671289, + -0.011393307, + 0.003500118, + -0.024624664, + -0.0027798887, + 0.01800247, + 0.0021590579, + -0.005729243, + 0.010956607, + -0.0007507818, + 0.021887142, + 0.047293957, + -0.018015504, + -0.009718204, + 0.022069644, + -0.0038455671, + -0.0054750447, + 0.012625192, + -0.0032638435, + -0.0014184603, + -0.0040541403, + 0.01493905, + 0.011575809, + 0.019501587, + -0.0017142104, + -0.008382033, + -0.0048558433, + -0.039811395, + 0.012058134, + 0.008499355, + -0.010050618, + -0.0014828246, + 0.023047332, + -0.0030357167, + 0.029591313, + 0.0014673446, + 0.0013394306, + 0.00056257716, + -0.017116033, + -0.0051133004, + 0.0025615387, + -0.026188964, + -0.025719674, + 0.011940812, + -0.0028809165, + 0.021222316, + 0.008219085, + -0.014965122, + -0.00057276135, + -0.010669819, + -0.016021024, + 0.025367707, + -0.005312097, + -0.0044354377, + -0.044530362, + 0.017194247, + 0.01665978, + -0.017507108, + -0.016777102, + -0.00029615755, + -0.00558259, + 0.020844277, + 0.00012546977, + -0.0015357826, + 0.025993425, + 0.00421057, + 0.00033689447, + 0.009959367, + -0.008688374, + -0.028027015, + 0.037882093, + 0.0016115534, + 0.023373226, + -0.0038846745, + -0.0022812686, + -0.0151997665, + -0.02488538, + -0.009118557, + -0.018954083, + -0.011614916, + -0.00008422362, + 0.016607635, + 0.03034739, + 0.025185205, + -0.010891428, + 0.025367707, + -0.011308574, + -0.0107871415, + -0.015212802, + -0.022604113, + -0.018445686, + 0.02158732, + 0.024116268, + 0.014495833, + 0.016555492, + -0.020205522, + 0.019423373, + -0.0072479164, + 0.00997892, + -0.028704876, + 0.009529185, + -0.012931534, + 0.014339402, + 0.017324606, + -0.006693894, + -0.018875869, + -0.03736066, + 0.013791898, + 0.011693131, + 0.018797653, + -0.01643817, + 0.041688554, + -0.0020629186, + -0.006843806, + 0.003019422, + 0.0024230331, + 0.028027015, + -0.009027306, + 0.016151382, + -0.0038032006, + -0.015017265, + -0.007632473, + 0.0007255249, + -0.013452967, + 0.00648858, + -0.031833474, + -0.0048330305, + -0.024038054, + 0.030634178, + 0.00049454643, + -0.0013418748, + 0.037126016, + -0.0116083985, + 0.03642208, + 0.008179978, + -0.020518381, + -0.012181974, + 0.026723431, + 0.00048151062, + 0.010141868, + -0.007990958, + 0.01175831, + 0.001750059, + -0.022812687, + -0.0014608266, + 0.009040342, + -0.0059736646, + -0.014196008, + 0.0030210514, + 0.008883912, + 0.03081668, + 0.00083673676, + 0.027427366, + -0.0183414, + -0.017050853, + 0.004295303, + 0.00973124, + 0.008193013, + 0.0003967778, + -0.020283736 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 2, + "total_tokens": 2 + } +} diff --git a/vectorstores/inmemory/testdata/TestInMemoryStoreRestWithScoreThreshold.httprr b/vectorstores/inmemory/testdata/TestInMemoryStoreRestWithScoreThreshold.httprr new file mode 100644 index 000000000..1ab17adb0 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestInMemoryStoreRestWithScoreThreshold.httprr @@ -0,0 +1,18646 @@ +httprr trace v1 +334 334599 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 138 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Tokyo","Yokohama","Osaka","Nagoya","Sapporo","Fukuoka","Dublin","Paris","London ","New York"]}HTTP/2.0 200 OK +Content-Length: 333642 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:32 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 173 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999984 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_3a3d3b8ba3c14abaa5f6083ab421c14e + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.001070031, + 0.008037085, + -0.008887224, + -0.008638722, + -0.010875242, + 0.014713947, + -0.029375577, + 0.013065985, + -0.011051809, + -0.035548896, + 0.001566218, + -0.02474559, + 0.016296513, + -0.027125979, + -0.007997848, + -0.021070372, + 0.021711247, + -0.01803603, + 0.0024016432, + -0.02207746, + -0.011306851, + 0.012686692, + -0.0024065478, + -0.019016959, + -0.008344443, + -0.011803855, + 0.0013651273, + -0.015302505, + 0.008965698, + -0.020010969, + 0.019043118, + -0.019095434, + -0.010522107, + -0.022875283, + 0.008828368, + -0.004652877, + -0.015328663, + -0.0060261786, + -0.0023493269, + -0.0118496325, + 0.009122647, + -0.008207113, + 0.0015155366, + -0.017251285, + -0.018323768, + 0.01607417, + -0.016649649, + 0.016571173, + -0.00018801155, + 0.012255083, + 0.015119398, + 0.020311786, + -0.032331448, + -0.0067684157, + -0.026602816, + -0.016388068, + -0.028486202, + -0.0007291578, + 0.000018967197, + 0.0041558724, + -0.0033645893, + -0.0059934813, + -0.015982617, + 0.0117123015, + 0.014269259, + -0.011346088, + -0.011241456, + 0.028616993, + -0.015302505, + 0.0038223565, + 0.013242552, + 0.017395156, + -0.0010079053, + -0.0024752128, + 0.031625178, + -0.008010927, + -0.0015245284, + 0.004652877, + 0.011856171, + 0.009848535, + 0.01523711, + -0.035601214, + 0.004365138, + 0.0026583197, + 0.013190236, + 0.007605476, + -0.008743354, + 0.0360459, + -0.002671399, + -0.00082071126, + 0.009534637, + 0.003756961, + 0.00992047, + 0.01062674, + -0.024850221, + -0.016113406, + -0.006454518, + 0.043344017, + -0.01857227, + -0.013196776, + -0.0015964633, + 0.009815837, + -0.0037242635, + -0.011529195, + -0.025883468, + 0.011568432, + 0.014321575, + -0.016440384, + 0.008906842, + -0.008710656, + -0.0019765736, + 0.027989198, + -0.013085604, + -0.059065055, + -0.017722132, + -0.012961352, + 0.005476858, + -0.01662349, + -0.010234368, + -0.014753184, + 0.018807694, + 0.019265462, + 0.011856171, + 0.002682843, + 0.02725677, + 0.00033167689, + -0.006483946, + -0.019330857, + 0.00050926604, + -0.009613113, + 0.026995188, + 0.011744999, + -0.0058986577, + 0.015629482, + -0.021004977, + 0.013903045, + -0.016440384, + 0.01131993, + -0.01103873, + -0.006441439, + 0.0063368063, + 0.0090637915, + -0.01286326, + 0.013347185, + 0.0097242845, + 0.02502025, + 0.023136863, + -0.0030392476, + 0.015851825, + -0.005967323, + 0.003730803, + -0.0050256304, + 0.016976625, + 0.0071804062, + 0.009580415, + 0.0035738542, + 0.03225297, + 0.018611507, + 0.0059280857, + 0.010548265, + 0.006931904, + 0.004237617, + 0.031389754, + -0.021345032, + 0.0030081847, + 0.0127063105, + 0.012032739, + 0.014413129, + -0.00033699026, + -0.011588051, + -0.018336847, + 0.019448569, + -0.04049278, + 0.018624587, + 0.005208737, + 0.017578263, + 0.011006032, + 0.009292675, + -0.019854018, + -0.007971689, + -0.0023803897, + 0.00003410264, + 0.02683824, + 0.009927009, + -0.007919373, + 0.005771137, + 0.027779931, + 0.01551177, + -0.0011803856, + -0.014504682, + 0.025870388, + 0.035548896, + 0.031180488, + 0.0071346294, + -0.67843723, + -0.03280229, + 0.0011599495, + 0.004224538, + 0.020468736, + 0.005329719, + 0.018245295, + 0.015498691, + -0.012830562, + 0.013562989, + -0.027230611, + 0.017996792, + -0.01789216, + -0.012601678, + -0.008749894, + 0.0048032864, + 0.015263268, + -0.0027139059, + -0.004208189, + 0.0105548045, + 0.0047771283, + 0.017813684, + -0.008409838, + -0.0052348953, + 0.013236013, + -0.010567884, + 0.007697029, + -0.004306282, + -0.009416926, + 0.02362079, + -0.029794108, + 0.049700443, + 0.0050485185, + -0.01508016, + 0.039917305, + -0.015694877, + -0.02305839, + 0.017565183, + 0.02054721, + 0.031258963, + 0.0014574982, + 0.003841975, + 0.0028806638, + -0.0026027337, + 0.005336258, + 0.002027255, + 0.022208251, + -0.023280734, + 0.008991856, + -0.008220192, + 0.021828959, + -0.036229007, + -0.016675808, + -0.01634883, + -0.0004142385, + 0.0098354565, + 0.0035967426, + -0.0034332543, + -0.0009694856, + -0.009534637, + -0.015851825, + -0.0092011215, + -0.027779931, + -0.021279637, + -0.012366255, + 0.012405492, + -0.010437093, + -0.023306891, + -0.0006384218, + -0.01968399, + 0.004554784, + 0.021397348, + -0.0070365365, + -0.009586954, + 0.017656736, + 0.006235444, + 0.0259881, + -0.031991392, + -0.0034169054, + -0.007618555, + 0.004201649, + 0.012183148, + -0.01969707, + -0.0053035603, + 0.015681798, + -0.040178884, + -0.035967425, + 0.002808729, + 0.026602816, + -0.012882878, + 0.0046430677, + 0.0036719472, + 0.0063923923, + 0.00908995, + -0.011810395, + 0.011882329, + -0.0016970086, + -0.008050164, + 0.006748797, + -0.0071346294, + -0.014216943, + -0.015446375, + 0.009750443, + 0.0036261706, + -0.015302505, + -0.004280124, + -0.014910133, + 0.017238207, + 0.021894353, + -0.014923212, + 0.006107923, + -0.010240907, + -0.017722132, + 0.00039257627, + 0.018493796, + -0.023019154, + 0.017839843, + -0.00011781375, + 0.022391358, + 0.0090637915, + 0.007363513, + 0.0019733037, + 0.016374988, + 0.022574464, + 0.017251285, + 0.015106319, + 0.006078495, + 0.0010798402, + -0.00642509, + 0.0061733183, + -0.001871941, + 0.014426208, + 0.010574424, + -0.006467597, + 0.023176102, + -0.009488861, + -0.009181503, + -0.0059346254, + 0.018493796, + -0.036385957, + -0.033587035, + -0.012425111, + -0.0015277981, + -0.003521538, + 0.012085055, + -0.026419709, + -0.016937388, + 0.0007418282, + -0.019827861, + 0.00503217, + -0.008213652, + 0.0026615895, + -0.029794108, + 0.01914775, + -0.0060065603, + -0.013484515, + -0.00008174415, + -0.0026632245, + -0.021057293, + 0.0029525987, + 0.019043118, + 0.0080697825, + -0.03832166, + -0.0014574982, + 0.0060686856, + -0.012071976, + 0.012804404, + 0.017447472, + -0.0054833977, + -0.008867606, + -0.02151506, + -0.019265462, + -0.02388237, + 0.003953147, + 0.018925406, + 0.0033090033, + 0.010541726, + -0.013628385, + -0.0012694866, + 0.002153141, + 0.011091046, + -0.020730317, + -0.013602227, + 0.011758079, + 0.02027255, + -0.01971015, + 0.011267614, + 0.017944476, + -0.00084196473, + 0.0032043706, + -0.0073308153, + 0.015877984, + 0.008030545, + -0.000106778294, + 0.0120981345, + -0.012909036, + 0.009730823, + -0.003897561, + -0.021828959, + 0.015825668, + 0.032933082, + -0.01523711, + 0.0024572292, + -0.00950194, + 0.016322672, + -0.012124293, + -0.00656569, + -0.018951563, + 0.031206647, + 0.014596236, + 0.014648552, + -0.015210952, + -0.0068861274, + 0.01857227, + -0.006931904, + 0.03288077, + 0.006833811, + 0.023019154, + -0.019396253, + -0.0068665086, + 0.021201164, + -0.034214832, + -0.016257277, + -0.018415323, + -0.012765166, + 0.016741201, + -0.0011983692, + 0.033456247, + 0.0073308153, + -0.0059738625, + -0.034450255, + -0.013406041, + 0.001732976, + 0.021188084, + -0.01522403, + -0.029009365, + 0.00009017401, + -0.024640957, + 0.030081848, + 0.012562441, + 0.023267655, + 0.010253986, + 0.028957048, + -0.019670913, + -0.000803545, + 0.001984748, + 0.035862792, + 0.014269259, + -0.009632731, + 0.01886001, + -0.016688885, + -0.009096489, + -0.005699202, + -0.004064319, + 0.0011893774, + -0.03382246, + 0.021619692, + -0.00048596898, + 0.014831658, + 0.038504764, + -0.0002630118, + 0.0009237089, + 0.0055128257, + 0.005270863, + -0.0011632192, + -0.0044926587, + 0.02725677, + 0.012941734, + -0.007906294, + -0.008298666, + -0.015315584, + 0.006369504, + -0.012967892, + -0.0045318957, + 0.019893257, + -0.016701965, + -0.025831152, + -0.0170551, + 0.01285672, + 0.01647962, + -0.007389671, + -0.04444266, + -0.005100835, + 0.0046365284, + 0.0043945657, + -0.024654036, + -0.01076407, + -0.013039826, + -0.01131339, + 0.019801702, + 0.009966247, + 0.023816975, + 0.001081475, + -0.01789216, + -0.017866002, + -0.009789679, + 0.02207746, + -0.013334106, + -0.011908487, + -0.01048941, + 0.015197872, + -0.008148257, + -0.00030837982, + 0.005431081, + 0.026210444, + 0.011267614, + 0.005355877, + -0.011143362, + -0.0051891184, + -0.0034365242, + 0.017565183, + -0.011091046, + -0.006304109, + 0.010528646, + 0.012549362, + -0.009874693, + -0.0146093145, + 0.008056703, + 0.02417011, + -0.0012057262, + -0.017709052, + 0.006680132, + -0.026668211, + -0.0089526195, + 0.08569403, + 0.0059607835, + 0.01145726, + -0.005633807, + 0.0029362498, + 0.0073308153, + -0.016008774, + 0.0008820194, + 0.0099727865, + 0.008056703, + 0.0038452449, + -0.009233819, + -0.0020174456, + 0.011130284, + -0.0024294362, + -0.00656569, + -0.01676736, + -0.027361402, + 0.02418319, + -0.01969707, + 0.00038338007, + 0.00628776, + 0.0027972849, + 0.012130832, + -0.000813763, + -0.0035476962, + 0.024797905, + 0.018101424, + 0.01913467, + -0.025778836, + 0.0021040945, + 0.019644754, + -0.018402243, + 0.017133573, + -0.008226731, + -0.00004115307, + 0.009966247, + 0.0212404, + 0.0062092855, + -0.01160113, + 0.007513922, + 0.015394058, + 0.00824635, + 0.00038481058, + 0.014138469, + -0.019592438, + -0.018101424, + 0.02024639, + -0.019500885, + -0.018506875, + 0.032776136, + 0.006944983, + -0.041042104, + -0.017656736, + -0.017473629, + 0.008900303, + -0.009547717, + -0.013615306, + -0.0027694919, + 0.010038181, + 0.0066016577, + -0.042114586, + 0.005257784, + -0.011921567, + -0.024614798, + -0.037903126, + -0.002767857, + -0.016741201, + -0.03633364, + -0.0063923923, + -0.005558602, + -0.029401736, + -0.022796808, + 0.024300901, + 0.01607417, + -0.03047422, + 0.008095941, + -0.01621804, + -0.0010790228, + 0.036935277, + -0.026027337, + -0.011398404, + -0.012117753, + -0.008710656, + -0.031886756, + 0.025268752, + 0.031651337, + -0.03280229, + -0.0027760314, + -0.00006381153, + 0.0148055, + -0.00684689, + 0.0153679, + 0.0212404, + 0.0027466035, + -0.011359167, + 0.010155893, + 0.032357603, + -0.016034933, + -0.01313138, + 0.023660026, + -0.014033835, + 0.008462154, + 0.015812589, + 0.015119398, + 0.011346088, + 0.012922116, + 0.018820774, + -0.010777148, + 0.0012743913, + 0.02934942, + -0.018402243, + 0.0084294565, + 0.013484515, + -0.013824571, + 0.021920511, + 0.010280144, + 0.021397348, + 0.011928107, + -0.019762466, + 0.0070299967, + -0.023293814, + 0.015681798, + 0.02989874, + 0.0058855787, + -0.014334654, + 0.0138376495, + -0.009070331, + -0.0061242715, + 0.00097193796, + -0.009259977, + 0.013772255, + -0.02178972, + -0.008050164, + -0.022836046, + 0.001999462, + -0.033482403, + 0.0128436405, + 0.0031079126, + -0.031075856, + -0.007415829, + 0.007481225, + 0.01160113, + -0.0012327018, + -0.03675217, + -0.021985907, + 0.0017297062, + 0.010665976, + -0.0066310856, + 0.017826764, + 0.005404923, + 0.020442577, + -0.01061366, + 0.0062975693, + -0.030918907, + -0.02628892, + -0.025124881, + -0.028172305, + 0.0058299927, + 0.008847987, + 0.031520545, + 0.011189139, + 0.005404923, + -0.011640367, + -0.007997848, + 0.002779301, + 0.004253966, + 0.020939581, + -0.013445278, + 0.02516412, + 0.012366255, + 0.01816682, + -0.02751835, + 0.007487764, + -0.02780609, + 0.023568474, + -0.0027482384, + -0.011195679, + -0.009652349, + -0.02516412, + -0.00907687, + -0.019213146, + 0.005195658, + 0.0005362416, + -0.0025929245, + -0.0032763055, + -0.00060163694, + -0.0124578085, + 0.023555394, + 0.007991308, + 0.007605476, + -0.009338452, + 0.0002950964, + -0.0023918338, + -0.006346616, + 0.005257784, + -0.012680152, + -0.005404923, + -0.0026926524, + 0.025961943, + 0.018820774, + -0.014334654, + -0.0045482446, + 0.002601099, + 0.012130832, + 0.03944646, + 0.0059084673, + -0.015302505, + 0.007278499, + -0.012215846, + -0.026053496, + -0.011751539, + 0.007383132, + -0.01940933, + -0.02359463, + 0.010090498, + -0.006676862, + 0.028303094, + -0.0248633, + -0.015642561, + 0.019893257, + 0.011862711, + 0.032043707, + 0.015681798, + 0.010665976, + 0.008913382, + -0.0071346294, + -0.004737891, + 0.004201649, + -0.015982617, + -0.0070692343, + 0.023110706, + 0.020913424, + -0.011496497, + -0.037301492, + -0.016322672, + 0.004247426, + -0.0016087248, + -0.0010675786, + 0.023856213, + 0.0015899237, + 0.00489157, + -0.026184287, + -0.0014599506, + -0.022875283, + 0.036569063, + -0.015276347, + -0.002754778, + -0.0008574961, + -0.019108513, + -0.0015980981, + 0.014269259, + -0.003802738, + 0.003662138, + 0.015027844, + -0.012621297, + 0.0031226266, + -0.018258374, + -0.00531337, + 0.013942283, + 0.00043201784, + 0.024810985, + 0.009325373, + -0.0010871972, + 0.012804404, + 0.005467049, + -0.011267614, + 0.0054016532, + -0.00014376752, + 0.023686185, + -0.004260505, + -0.011594591, + -0.021358112, + -0.0018523225, + 0.003202736, + 0.009214201, + 0.005215277, + -0.007291578, + -0.01774829, + -0.0049209977, + 0.008409838, + 0.007468146, + -0.0029248057, + -0.011758079, + -0.025216436, + -0.024797905, + -0.022260567, + -0.0061831274, + 0.025948863, + -0.018768458, + 0.0013634925, + 0.0025880197, + -0.018977722, + 0.023960846, + -0.013347185, + -0.0044795796, + 0.017852923, + 0.027884565, + -0.024379376, + 0.011431102, + 0.0070496155, + 0.021763563, + -0.020507973, + -0.0012531378, + 0.00030286208, + -0.011404944, + 0.012928654, + -0.0138376495, + -0.0099727865, + -0.030500377, + 0.006451248, + 0.012124293, + 0.0069384435, + 0.025595728, + 0.033717826, + -0.026158128, + -0.0028888383, + -0.020298708, + -0.015564086, + 0.0181799, + -0.0051466115, + 0.014504682, + 0.020442577, + -0.012464348, + -0.0010021833, + 0.013536831, + -0.013458357, + -0.0059411647, + -0.0073308153, + -0.027701458, + -0.0069580623, + 0.0068534296, + -0.0110779675, + -0.012078515, + -0.02054721, + 0.0036261706, + -0.010947176, + 0.008900303, + 0.010430554, + 0.0046201795, + 0.0011158077, + 0.015446375, + 0.01453084, + 0.012281241, + -0.0113264695, + -0.029113997, + 0.006160239, + -0.0033367963, + -0.029584844, + -0.03897561, + -0.005100835, + 0.020926502, + 0.0034201753, + -0.014897054, + -0.020141758, + 0.011208758, + -0.021449665, + -0.007389671, + -0.013536831, + 0.018846931, + 0.012202767, + -0.012340097, + 0.007808201, + 0.0061275414, + 0.014779342, + 0.00823981, + -0.0034790311, + 0.018336847, + 0.038766347, + -0.036569063, + 0.032226812, + 0.006408741, + -0.016610412, + -0.010502488, + 0.005493207, + 0.005646886, + -0.002699192, + 0.0068534296, + -0.01702894, + -0.010136275, + -0.012111213, + 0.0022724874, + -0.026642054, + 0.017996792, + 0.007605476, + -0.03591511, + 0.026158128, + 0.017695975, + -0.01494937, + 0.005656695, + 0.0059346254, + -0.00475097, + -0.0011787507, + 0.004162412, + -0.025791915, + -0.0034005567, + -0.000193938, + -0.031991392, + 0.01984094, + -0.012261623, + 0.014713947, + 0.0045318957, + 0.00922074, + -0.01075753, + -0.019854018, + 0.0005378765, + -0.015642561, + -0.014413129, + 0.026040416, + -0.0013667622, + -0.025621887, + -0.0122354645, + 0.017983712, + -0.045619775, + 0.009214201, + 0.008834908, + -0.007808201, + -0.024928696, + 0.008167876, + 0.023581553, + -0.026380472, + -0.016937388, + 0.009998945, + -0.022862203, + -0.0003002054, + -0.011888869, + 0.027570667, + -0.031102015, + 0.015616402, + -0.0011501402, + -0.0022463293, + -0.031625178, + -0.0061177323, + 0.011391865, + -0.008043624, + -0.008468694, + 0.23981772, + -0.023542315, + -0.0048000165, + 0.038949452, + -0.0032223545, + 0.039629564, + 0.030134164, + -0.0012049088, + -0.014687789, + 0.00032452427, + -0.03131128, + 0.001627526, + 0.020834949, + -0.0019160829, + -0.0029591382, + -0.025098724, + -0.021292716, + -0.03301156, + -0.038190868, + -0.0060294485, + 0.020141758, + -0.00258475, + -0.002694287, + -0.01341912, + 0.014269259, + 0.012693232, + -0.011287232, + -0.0056665046, + 0.020442577, + 0.019867098, + 0.0048588724, + 0.008017466, + -0.00517277, + 0.02122732, + 0.00013763671, + -0.009600033, + -0.015040924, + -0.0046626865, + 0.02725677, + 0.023673106, + -0.004567863, + 0.0020861106, + -0.010796768, + -0.010247447, + 0.00038848908, + 0.021894353, + -0.007873597, + 0.008364062, + -0.011980423, + 0.034162514, + -0.032933082, + -0.01048941, + 0.030788116, + 0.01662349, + 0.0094234655, + -0.013602227, + 0.036412116, + 0.015250188, + -0.009573875, + -0.017172812, + -0.020861108, + 0.010417474, + -0.010012023, + 0.027230611, + 0.0048163654, + 0.0001181203, + -0.023411525, + 0.012869799, + 0.0062092855, + -0.00083624263, + 0.014923212, + -0.011470339, + -0.0033940172, + -0.01734284, + -0.02893089, + -0.016597332, + 0.032226812, + -0.0033874775, + 0.02177664, + 0.037118383, + -0.008403298, + 0.006833811, + 0.022718335, + 0.0007839264, + 0.009279596, + -0.016793517, + 0.023503078, + 0.0156033235, + 0.0077885827, + -0.008468694, + -0.01369378, + -0.018140662, + -0.014596236, + -0.020390261, + -0.0070757736, + 0.014700868, + 0.0005292934, + 0.008978778, + -7.4080634e-7, + -0.016793517, + -0.008187494, + -0.001349596, + 0.015904142, + -0.009586954, + 0.004257235, + 0.0059869415, + -0.000112091664, + -0.0023264384, + -0.006052337, + -0.03060501, + -0.006232174, + -0.03479031, + 0.008972238, + 0.016989704, + 0.0020713967, + -0.0068926667, + -0.008861066, + -0.023660026, + 0.017368997, + -0.02263986, + 0.014910133, + -0.02024639, + -0.015001686, + 0.00115341, + -0.0036850262, + -0.011025651, + -0.0018212596, + -0.01607417, + 0.0069711413, + -0.035732005, + 0.010541726, + 0.0032730359, + 0.014230021, + 0.0020223502, + -0.0090637915, + 0.021266557, + 0.011542274, + -0.008004387, + -0.014779342, + 0.014975528, + 0.018807694, + -0.012745548, + 0.018075267, + -0.0004217998, + -0.0018572271, + -0.011548813, + 0.0101951305, + 0.012085055, + -0.013458357, + 0.008677959, + -0.0100578, + -0.024000082, + -0.0058365325, + -0.01675428, + 0.031128172, + -0.0050550583, + -0.0127063105, + -0.020298708, + -0.00038276697, + 0.01704202, + -0.029506369, + -0.016231118, + 0.046927683, + -0.017277444, + -0.030029532, + -0.0043520587, + -0.16908614, + 0.027884565, + 0.020848028, + -0.021148847, + 0.019357014, + 0.012948274, + -0.0101951305, + -0.019644754, + -0.0063793133, + 0.023372287, + 0.053101, + 0.018611507, + -0.007952071, + -0.014190785, + 0.0032615915, + -0.019082354, + 0.00040769894, + -0.006382583, + 0.025674203, + 0.01229432, + 0.044364184, + -0.02976795, + 0.002838157, + 0.0011722111, + -0.0028659499, + 0.026053496, + -0.014556998, + 0.009881233, + 0.023136863, + -0.015917221, + -0.02390853, + -0.017447472, + 0.037223015, + 0.0265505, + 0.009979326, + 0.008887224, + 0.00011883556, + -0.01760442, + -0.019880177, + 0.027989198, + 0.006464327, + 0.013916125, + -0.0006760241, + -0.0034496032, + 0.008128638, + 0.027282927, + 0.0042703142, + -0.0068272715, + -0.016244197, + -0.011287232, + 0.031651337, + -0.015694877, + -0.007154248, + 0.018650746, + 0.0056959325, + -0.0024425152, + 0.0062289042, + 0.0106202, + 0.004165682, + -0.012653994, + -0.032906923, + 0.0010160798, + 0.019016959, + -0.0011010937, + -0.012183148, + -0.0034430637, + -0.007873597, + -0.0070757736, + -0.017172812, + 0.020586446, + 0.0003275897, + -0.011915027, + 0.017578263, + -0.03295924, + 0.015446375, + 0.00017779352, + -0.0087041175, + 0.025556492, + 0.011686143, + 0.0088414475, + -0.022208251, + 0.042951647, + -0.014190785, + -0.013680701, + -0.0022872014, + 0.010999493, + -0.0076774107, + -0.0022103619, + -0.03175597, + -0.01956628, + 0.007363513, + -0.018467639, + -0.007814741, + -0.011673065, + 0.000020998028, + 0.008854526, + -0.007952071, + 0.02934942, + -0.021972828, + 0.003253417, + 0.006735718, + -0.008697578, + -0.010077419, + 0.033796303, + 0.024784826, + 0.025922704, + 0.019827861, + 0.019278541, + 0.01104527, + 0.011012572, + -0.029297104, + -0.005084486, + 0.012915576, + 0.028747782, + -0.032906923, + 0.002151506, + 0.01940933, + -0.0082921265, + 0.018323768, + 0.01257552, + 0.044808872, + -0.0100839585, + 0.002180934, + 0.025648044, + -0.016374988, + -0.023660026, + -0.07219643, + -0.000642509, + 0.0045318957, + 0.018546114, + -0.004384756, + 0.042402327, + 0.0056501557, + 0.01691123, + 0.00377331, + 0.013432199, + -0.0024212617, + -0.017238207, + 0.0048523326, + -0.016322672, + 0.028041514, + -0.00335478, + 0.0059313555, + -0.002205457, + -0.0023362478, + 0.023960846, + -0.018389164, + -0.016414225, + 0.0028446964, + -0.008965698, + -0.014844738, + 0.008847987, + -0.026785923, + 0.011398404, + 0.01508016, + 0.007853978, + -0.003701375, + -0.0012931925, + 0.0024555943, + -0.029140154, + -0.02109653, + 0.024536325, + -0.019618597, + 0.013183696, + 0.033299297, + -0.045096613, + -0.010783688, + 0.0100839585, + 0.003004915, + -0.011071428, + -0.013615306, + -0.0029575033, + -0.028538518, + 0.005421272, + 0.0048163654, + -0.018768458, + -0.0122354645, + -0.0019226224, + -0.00081049325, + 0.0025455127, + 0.014779342, + -0.0028005545, + 0.0037536914, + 0.01565564, + -0.030003373, + 0.0070823133, + 0.010594042, + -0.0046201795, + -0.018768458, + 0.026458947, + 0.01551177, + 0.008762973, + -0.019200066, + -0.026668211, + 0.025765756, + -0.022992995, + -0.021384269, + 0.013098682, + -0.016871992, + 0.00684689, + -0.018506875, + -0.014046915, + -0.0028561407, + -0.003212545, + 0.014897054, + -0.02362079, + -0.011346088, + -0.030526536, + -0.0023934687, + 0.007376592, + -0.0024931966, + 0.014910133, + 0.012058897, + -0.0058071045, + 0.013301408, + -0.01916083, + 0.014883975, + 0.009403847, + 0.0030997382, + -0.0159303, + -0.007572778, + 0.026432788, + 0.0051662303, + -0.009698126, + 0.005143342, + 0.018977722, + -0.015524849, + -0.024078557, + -0.09129187, + 0.027910722, + 0.007520462, + -0.008409838, + 0.016545016, + -0.006807653, + 0.022312883, + 0.0057907556, + 0.01732976, + -0.018088346, + -0.04852333, + 0.00049904804, + -0.00922728, + -0.011411483, + -0.033796303, + -0.025543412, + 0.014203863, + 0.016466541, + 0.0056926627, + 0.011588051, + 0.0013250727, + 0.0027318895, + 0.016453462, + 0.010587502, + -0.027466035, + 0.011431102, + -0.006189667, + 0.023764659, + -0.031808283, + -0.013013668, + 0.022129776, + -0.031494386, + -0.0011166251, + 0.01857227, + -0.0063368063, + -0.0127063105, + 0.005473588, + 0.01354991, + 0.0070169177, + 0.0405451, + -0.019749386, + -0.005002742, + 0.009070331, + -0.010796768, + 0.0069515225, + -0.0056795836, + 0.017525947, + 0.000104734696, + 0.016832756, + 0.022129776, + -0.009815837, + 0.038949452, + -0.0104436325, + -0.003032708, + -0.0049733142, + -0.016139565, + 0.0040904772, + 0.0019651293, + -0.0077493456, + -0.008782592, + 0.023450762, + 0.0040479703, + 0.011803855, + 0.01047633, + 0.021959748, + -0.0068141925, + -0.02025947, + 0.007167327, + 0.008115559, + -0.03452873, + -0.026079653, + 0.010234368, + 0.016701965, + 0.014687789, + 0.00076512527, + -0.0061536995, + 0.014386971, + -0.008220192, + -0.034345623, + 0.01914775, + 0.004708463, + 0.0035411566, + -0.05367648, + 0.004093747, + 0.014713947, + -0.01789216, + -0.0079324525, + -0.010744452, + -0.01732976, + 0.0265505, + -0.00036396584, + -0.005503016, + 0.00740275, + 0.004404375, + 0.004021812, + 0.012902496, + -0.006245253, + -0.026066575, + 0.030866591, + 0.02403932, + 0.0088414475, + -0.016191881, + -0.012183148, + -0.0079324525, + -0.020730317, + -0.0019749387, + -0.019030038, + -0.02151506, + 0.018363006, + 0.025281832, + 0.015459454, + 0.02097882, + -0.0052054673, + 0.011097586, + -0.0037536914, + -0.002738429, + -0.013746097, + -0.028538518, + -0.011012572, + 0.013562989, + 0.024130873, + 0.029218629, + 0.01620496, + -0.013876887, + 0.010672516, + -0.005198928, + 0.009998945, + -0.027753774, + 0.0010896495, + -0.0051368023, + 0.011496497, + 0.009279596, + -0.010999493, + 0.0015384249, + -0.0023362478, + 0.012497046, + 0.0037406124, + 0.019030038, + -0.0026109081, + 0.024300901, + 0.0005570864, + 0.0034921102, + -0.0027155406, + 0.004355328, + 0.025674203, + -0.006820732, + 0.0254257, + -0.029846424, + -0.022718335, + -0.00642836, + -0.0077885827, + -0.002543878, + -0.00188502, + -0.023777738, + -0.007598936, + -0.020782633, + 0.019631675, + -0.004361868, + 0.014570077, + 0.03983883, + -0.0085929455, + 0.026485104, + 0.023843134, + -0.014831658, + 0.00089101127, + 0.014844738, + 0.015106319, + 0.007716648, + -0.01634883, + 0.01872922, + -0.0015220761, + -0.022535227, + -0.01341912, + 0.0077755037, + -0.013641464, + -0.021410428, + 0.0014215307, + 0.0059444346, + 0.008468694, + 0.002136792, + 0.014190785, + -0.021292716, + -0.026890555, + 0.009796219, + -0.004149333, + -0.011476879, + -0.0071869455, + -0.017643657 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.0026680413, + -0.0026349186, + 0.008843787, + -0.0049684197, + -0.033255287, + 0.01970144, + -0.02827362, + 0.0020668625, + -0.012116319, + -0.035746124, + 0.00008668857, + -0.0036931918, + 0.016720388, + -0.018151293, + -0.036779553, + -0.024100147, + 0.012487294, + -0.023715923, + 0.009870593, + -0.023212455, + 0.0044020195, + 0.0038091217, + -0.010128952, + -0.015819447, + -0.011096137, + 0.008585429, + 0.0054586367, + -0.017488837, + 0.006253584, + -0.018800499, + 0.020045916, + 0.0018300345, + -0.00961886, + 0.0020685187, + 0.003918427, + -0.00977785, + -0.0061608404, + -0.0112153785, + -0.0011576418, + 0.00024324554, + 0.001564224, + 0.0026713535, + -0.0020635503, + -0.01999292, + -0.0040476057, + 0.013348487, + 0.003825683, + -0.0020536133, + -0.01968819, + 0.028538601, + 0.0107715335, + 0.020655377, + -0.008201204, + -0.005057851, + -0.021092597, + 0.014905258, + -0.020483138, + 0.005163844, + -0.012467421, + -0.006396012, + 0.007333387, + 0.0032874376, + -0.023980904, + 0.011573105, + 0.0063893874, + -0.017038366, + -0.016786633, + 0.011261751, + -0.021145593, + -0.0028286867, + 0.019012485, + 0.0014847293, + -0.020112162, + -0.014229554, + 0.036938544, + 0.013474354, + -0.014706521, + -0.0053957035, + -0.0013091785, + 0.0020171783, + 0.022364512, + -0.023119712, + 0.0028253745, + -0.004888925, + 0.03428872, + 0.0007568559, + -0.010976895, + 0.018230787, + 0.0062204613, + -0.019197972, + 0.024762603, + 0.019423207, + 0.009532741, + -0.004322525, + -0.016495153, + -0.026643978, + -0.0054188897, + 0.01938346, + 0.012898017, + -0.029678026, + -0.018959489, + 0.02571654, + 0.001242933, + -0.01968819, + -0.019303966, + -0.00054611213, + -0.002073487, + -0.020098913, + -0.0015857539, + 0.0011071295, + 0.007823604, + 0.020509636, + -0.0027690658, + -0.05079712, + -0.015845945, + -0.010890775, + 0.005670623, + -0.0001018526, + -0.026723472, + -0.022470506, + 0.011374368, + 0.023543684, + 0.004216532, + -0.0033785251, + 0.028035134, + 0.0016669048, + -0.005034665, + -0.011619477, + -0.0076447413, + -0.001836659, + 0.006134342, + 0.01217594, + 0.027293185, + 0.0031350728, + -0.024020651, + 0.012003701, + -0.013938073, + 0.0210396, + -0.026259754, + -0.01909198, + 0.007260517, + 0.01926422, + -0.00810846, + -0.00009802278, + 0.016362661, + 0.024325382, + 0.03439471, + 0.023517186, + 0.0013373329, + 0.000698477, + -0.007638117, + -0.0040608547, + 0.014335547, + -0.002936336, + -0.0014648556, + 0.0055944403, + 0.015103995, + 0.004206595, + -0.012527042, + 0.025358813, + -0.004832616, + 0.005283086, + 0.030790951, + -0.027902644, + 0.016349413, + 0.01457403, + 0.016813131, + 0.005978665, + -0.0018234099, + -0.022814982, + -0.018866746, + 0.017793566, + -0.027160693, + 0.010619168, + -0.010692039, + 0.01233493, + 0.027213689, + 0.007836854, + -0.026948707, + -0.01909198, + -0.009645359, + 0.0157797, + 0.02045664, + 0.011705596, + 0.01923772, + 0.0017356345, + 0.020006169, + 0.016932374, + 0.021596063, + -0.009711604, + 0.015090746, + 0.046583902, + 0.005081037, + -0.0046703145, + -0.67114735, + -0.04674289, + -0.011785091, + 0.018204289, + 0.023331698, + 0.024444625, + 0.023291951, + -0.006409261, + -0.020072415, + 0.012228937, + -0.02314621, + 0.024550617, + -0.028247122, + -0.0026581045, + 0.0068895416, + -0.016627643, + 0.0049087983, + -0.025001086, + 0.02253675, + 0.01759483, + -0.0065285033, + 0.010764909, + -0.007187647, + 0.0074791275, + 0.039296884, + -0.011314747, + -0.007532124, + -0.008459562, + -0.008664924, + 0.036011104, + -0.040038835, + 0.04030382, + 0.0029048692, + -0.002283817, + 0.056017272, + -0.0071942713, + -0.005922356, + 0.028538601, + 0.023358196, + 0.048544772, + 0.0044682655, + -0.015753202, + 0.0071942713, + 0.0063893874, + 0.0056805597, + -0.0021413888, + 0.030737955, + -0.04239718, + 0.0058263, + -0.022059783, + 0.013328614, + -0.0066113104, + -0.021079348, + -0.00080488395, + 0.00025173326, + 0.013885076, + 0.009420123, + -0.006574875, + -0.011751968, + -0.006184026, + -0.020032667, + -0.0040177954, + -0.030631963, + -0.024736105, + -0.011314747, + 0.020628877, + -0.019515952, + -0.006442384, + -0.00007613068, + -0.0038389321, + -0.0058428613, + 0.022351263, + 0.0051174723, + -0.0035607007, + 0.034050234, + 0.027452175, + 0.0285651, + -0.017011868, + -0.0056772474, + -0.003221192, + 0.010705288, + 0.019356962, + 0.0058196755, + -0.010665541, + 0.019462956, + -0.022642743, + -0.0330698, + -0.0065814997, + 0.006005163, + -0.017846562, + 0.020642126, + 0.0068630436, + -0.0076646153, + 0.0013820487, + -0.0013174593, + 0.03094994, + -0.0033851499, + 0.0034878305, + 0.03847544, + -0.0048690513, + -0.019476205, + -0.006313205, + -0.0025073958, + -0.012427674, + -0.004892237, + -0.023676176, + -0.0035010795, + 0.005919044, + 0.015925441, + -0.014004318, + 0.021543067, + 0.0009845751, + -0.02074812, + -0.009327379, + 0.0072075203, + -0.027929142, + 0.019052232, + -0.0060217245, + 0.03895241, + -0.017846562, + 0.0018499081, + -0.0044583282, + 0.03243384, + 0.011539983, + 0.007863352, + 0.024245888, + 0.007724236, + -0.012990761, + -0.007287015, + -0.0064854436, + -0.01849577, + 0.01850902, + 0.003128448, + -0.011944081, + 0.01909198, + 0.011639351, + -0.010115702, + 0.0068895416, + 0.0023301886, + -0.028671093, + -0.026524736, + -0.020549383, + -0.0056639984, + 0.010393933, + 0.0025587361, + -0.012984136, + -0.0021182029, + -0.010506551, + -0.012566789, + 0.028618095, + -0.0010731786, + -0.016296417, + -0.03145341, + 0.021715306, + -0.02510708, + -0.028220622, + -0.0107715335, + -0.014295799, + -0.005875984, + 0.018389776, + 0.008313822, + 0.006690805, + -0.018654758, + 0.018588513, + 0.016468655, + -0.024378378, + 0.003766062, + -0.0077308607, + -0.0026796341, + -0.02525282, + -0.01864151, + -0.00969173, + -0.012209062, + -0.0038157462, + 0.022642743, + -0.0051174723, + 0.011169007, + 0.0025421747, + 0.0051505947, + 0.0003231543, + 0.008221078, + -0.030843949, + -0.011937456, + 0.015117245, + 0.031479906, + -0.010095828, + 0.012646284, + 0.026378995, + -0.021278085, + 0.0107847825, + -0.012725779, + 0.022073032, + 0.0032857815, + 0.0023401256, + 0.016468655, + -0.03198337, + 0.0032973744, + 0.013911574, + 0.002522301, + 0.018866746, + 0.024921592, + -0.0016834661, + 0.0042695287, + -0.013818831, + 0.022218771, + -0.012189189, + -0.004368897, + -0.012944389, + 0.02660423, + 0.012507168, + 0.009519491, + -0.012884768, + -0.02674997, + 0.0050975983, + 0.00072000676, + 0.026167009, + -0.012401175, + 0.016945623, + -0.001420968, + 0.0029711148, + 0.021649059, + -0.00916839, + 0.012056698, + -0.033599764, + -0.008936531, + 0.004491451, + 0.027584665, + 0.03656757, + 0.016667392, + -0.010307814, + -0.03622309, + -0.009433373, + -0.005498384, + 0.0051108473, + -0.00234675, + -0.015686957, + 0.0079494715, + -0.02058913, + 0.041708227, + 0.024431374, + 0.033043303, + 0.0039846725, + 0.033043303, + -0.018893244, + -0.0012893048, + 0.016587896, + 0.0360376, + 0.009651983, + -0.005452012, + 0.0044583282, + -0.025067333, + 0.001219747, + -0.016402408, + 0.0009696699, + -0.00857218, + -0.030287486, + 0.0003328841, + 0.0038588059, + 0.019476205, + 0.022642743, + 0.012520417, + 0.011891084, + 0.000675291, + 0.0030506095, + 0.015488219, + -0.007684489, + 0.014534283, + 0.001232168, + 0.011526734, + -0.0042629037, + -0.01142074, + 0.003941613, + -0.0026200132, + -0.014097062, + -0.0057699913, + -0.0008044699, + 0.013222621, + -0.012997385, + 0.0055480683, + 0.0066113104, + -0.021728555, + -0.037786487, + 0.004984981, + -0.005044602, + -0.0042099073, + -0.01623017, + -0.025809282, + 0.014865511, + -0.01503775, + 0.03428872, + 0.01697212, + 0.017409341, + 0.0009547646, + -0.02224527, + -0.011983828, + 0.0074195066, + 0.027425675, + -0.005498384, + -0.01457403, + -0.009307506, + 0.010254818, + -0.019436456, + 0.0064821313, + 0.010148825, + 0.018310282, + -0.003138385, + 0.005495072, + -0.0072472678, + -0.00424303, + -0.0048624263, + 0.014680023, + -0.003138385, + 0.00909552, + 0.002237445, + 0.0062038996, + -0.002726006, + -0.015647208, + -0.015289483, + 0.027293185, + -0.010599295, + -0.019621944, + -0.0051207845, + -0.020615628, + -0.0069491626, + 0.086331256, + -0.011765217, + 0.017846562, + 0.005991914, + 0.0093605025, + -0.0071015274, + -0.01742259, + -0.0047001247, + 0.0070087835, + 0.0079627205, + 0.0017372906, + -0.016481904, + 0.018601762, + 0.012725779, + 0.015859194, + -0.01986043, + -0.031347416, + -0.023821915, + 0.030711457, + -0.025491305, + -0.018760752, + 0.0019045608, + 0.0047796196, + 0.0050412896, + 0.005591128, + 0.005746805, + 0.0065947487, + 0.020469889, + 0.03712403, + -0.014415041, + 0.0054321387, + 0.010817905, + -0.010407182, + -0.00043887706, + -0.0044351425, + -0.008989527, + 0.017515335, + 0.003660069, + -0.006849794, + -0.017064866, + 0.016071182, + 0.0088504115, + 0.007379759, + -0.029121563, + 0.010075955, + -0.0056639984, + 0.0073863836, + 0.010281316, + -0.014746269, + -0.0180188, + 0.030658461, + -0.001954245, + -0.028061634, + -0.025411809, + -0.01746234, + 0.01670714, + -0.014600528, + 0.008565555, + 0.0053923912, + 0.011222003, + 0.011758593, + -0.021172091, + 0.0116724735, + -0.023093214, + -0.026034517, + -0.023093214, + -0.0022655993, + -0.021013102, + -0.036620565, + -0.0058362368, + 0.008631801, + 0.001326568, + -0.013116627, + 0.009837471, + 0.012606536, + -0.008201204, + 0.016998619, + -0.016998619, + 0.008671548, + 0.029810516, + -0.010195197, + -0.010148825, + -0.017170858, + -0.018005552, + -0.0058561102, + 0.008002467, + 0.020801116, + -0.037389014, + 0.00015919644, + -0.0018581889, + 0.041072268, + -0.005018104, + 0.0041635353, + -0.0003494455, + 0.003424897, + -0.027531669, + 0.012162691, + 0.014216304, + -0.011937456, + -0.009506242, + 0.017382843, + -0.013792332, + 0.016919125, + 0.012864894, + 0.006571563, + 0.012096445, + 0.018985987, + 0.01835003, + 0.01307688, + 0.013050382, + 0.024259137, + -0.032062866, + -0.017926058, + 0.02451087, + -0.031903878, + 0.02930705, + 0.007929597, + 0.023424441, + -0.008115085, + -0.0108974, + 0.0046636895, + -0.031055935, + 0.020827614, + 0.029837016, + 0.003941613, + 0.017528584, + -0.008042215, + -0.015978437, + 0.0018697819, + 0.002027115, + -0.016773384, + 0.0072340188, + -0.0016876064, + -0.0089034075, + -0.035004172, + -0.000004062718, + -0.0069822855, + 0.008585429, + 0.0079494715, + -0.031850882, + -0.012407799, + -0.00698891, + 0.008505934, + -0.010486677, + -0.022920975, + -0.023490688, + -0.009744727, + 0.02343769, + -0.0011692347, + 0.013646592, + 0.013911574, + 0.020072415, + -0.009088895, + -0.004415269, + -0.017833313, + -0.030049002, + -0.024457874, + -0.014256052, + 0.010042832, + 0.028432608, + 0.018972738, + -0.009685106, + 0.016680641, + -0.0021463572, + -0.0009199857, + 0.0027193816, + -0.0058693597, + 0.024643362, + -0.0059057944, + 0.007412882, + 0.019356962, + 0.0300755, + -0.022682492, + 0.0061608404, + -0.027041452, + 0.01015545, + 0.0006504489, + 0.0066874926, + 0.0018118169, + -0.034209225, + -0.0045113247, + -0.0057534296, + -0.013739336, + -0.0035607007, + -0.003660069, + -0.007406257, + -0.0040939776, + -0.01939671, + 0.016415657, + -0.0022407572, + 0.00096470147, + -0.014401792, + 0.004166848, + -0.00033681744, + 0.010102453, + -0.013633343, + -0.008598678, + -0.0034911428, + 0.009042524, + 0.019423207, + 0.03145341, + -0.010480053, + 0.009724853, + -0.00043887706, + 0.0203109, + 0.015554465, + 0.011467112, + -0.01179834, + 0.018469272, + -0.029731022, + -0.01518349, + -0.017369594, + 0.0054884474, + -0.020337397, + -0.027478673, + 0.02615376, + -0.009512867, + 0.015660457, + -0.026617479, + -0.011149134, + 0.018774, + -0.0064688823, + 0.024471123, + -0.0063761384, + 0.028777085, + 0.016468655, + -0.011175632, + 0.006386075, + -0.007273766, + -0.027584665, + -0.014865511, + 0.020403642, + -0.004382146, + -0.0050081667, + -0.033043303, + 0.0015203364, + 0.021927292, + -0.002500771, + -0.020814365, + 0.027902644, + 0.00037387357, + -0.004832616, + -0.003481206, + 0.009320755, + -0.008704671, + 0.00835357, + -0.007452629, + -0.00894978, + -0.008254201, + -0.012507168, + -0.009665232, + 0.016905876, + -0.020403642, + 0.0093605025, + 0.016243419, + -0.021437073, + -0.0026316063, + -0.008989527, + -0.013275617, + 0.015382227, + -0.004408644, + 0.03818396, + 0.0028568413, + 0.0049352967, + 0.014666774, + 0.015249736, + -0.0066113104, + -0.002866778, + 0.003931676, + 0.021423824, + -0.013951322, + -0.013924824, + 0.017356345, + -0.014083813, + 0.00034385602, + -0.0045179497, + 0.006323142, + -0.0145077845, + -0.036620565, + -0.006551689, + 0.0135405995, + 0.014812514, + 0.003448083, + -0.014309048, + -0.016852878, + -0.029890012, + -0.018813748, + 0.00023827712, + 0.0032973744, + -0.022497004, + -0.013487603, + 0.002191073, + -0.012407799, + 0.013898325, + -0.015236487, + -0.013964571, + 0.012732403, + 0.0076182433, + -0.01759483, + 0.01894624, + 0.0066510574, + 0.01788631, + -0.022497004, + -0.0078037307, + -0.0038323076, + -0.007154524, + 0.016495153, + 0.00008156489, + -0.024444625, + -0.009029275, + 0.011334621, + 0.02194054, + -0.002485866, + 0.013229245, + 0.03296381, + -0.0247891, + -0.0029893324, + -0.019277468, + -0.022033283, + 0.0026481675, + 0.008512558, + 0.018204289, + 0.001989024, + -0.020337397, + 0.0026912272, + 0.023782168, + -0.035984606, + 0.0012172628, + -0.013169624, + -0.027425675, + 0.005296335, + 0.0136068445, + -0.020695124, + -0.013182873, + -0.02163581, + -0.010029583, + -0.0130835045, + 0.009552615, + 0.0048061176, + -0.0020105538, + 0.005968728, + 0.010837779, + -0.014057315, + 0.028697591, + -0.0070286575, + -0.014017567, + 0.008399941, + -0.008187955, + -0.027041452, + -0.008247577, + -0.0010913962, + 0.04088678, + -0.0012214031, + -0.025173325, + -0.025968272, + 0.0070750294, + -0.0391114, + -0.010652292, + -0.013355112, + 0.017753819, + 0.00326922, + -0.0021463572, + 0.0041039144, + 0.018734254, + 0.0021331082, + 0.02538531, + 0.0032377534, + 0.001243761, + 0.026484989, + -0.01862826, + 0.026935458, + 0.010890775, + -0.023119712, + 0.0069822855, + 0.0165349, + 0.004905486, + 0.00336362, + 0.016110929, + -0.0030506095, + -0.008426439, + 0.01015545, + -0.009857344, + -0.012434298, + -0.0010922243, + 0.01224881, + -0.047140364, + 0.016574647, + 0.0038521811, + -0.013129877, + 0.01774057, + -0.007154524, + 0.005316209, + -0.0037726865, + 0.006882917, + -0.010996768, + -0.0088636605, + -0.0121428175, + -0.011334621, + 0.01697212, + 0.0015948627, + -0.021331081, + 0.021238336, + 0.01637591, + -0.0038223707, + -0.016905876, + 0.0069822855, + -0.0031317605, + 0.008075338, + 0.0016768415, + -0.018323531, + -0.010321063, + -0.014004318, + 0.004971732, + -0.032142363, + -0.0030737955, + 0.009380376, + -0.016309666, + -0.019515952, + 0.018548766, + 0.025981521, + -0.013885076, + -0.0038687426, + 0.0026117326, + -0.007684489, + 0.016998619, + -0.024219388, + 0.006256896, + -0.029439542, + 0.0029810518, + 0.0026730096, + -0.00819458, + -0.027266687, + 0.010427057, + 0.0020238028, + -0.020178407, + -0.008711295, + 0.23572832, + -0.0058594225, + -0.0018267222, + 0.022351263, + -0.001126175, + 0.023623178, + 0.025663543, + -0.008234328, + -0.008081962, + 0.008022341, + 0.00052292616, + -0.005339395, + 0.010062706, + -0.0154352235, + -0.0070617804, + -0.03216886, + -0.016733637, + -0.02178155, + -0.036620565, + 0.016004935, + 0.020946857, + -0.014945006, + -0.011937456, + -0.006382763, + 0.022894477, + 0.002653136, + -0.011447239, + 0.013494227, + 0.01605793, + 0.023490688, + -0.005852798, + 0.0043258374, + -0.0037230023, + 0.009757976, + 0.000064278924, + 0.008181331, + -0.00014149645, + 0.0024924905, + 0.027452175, + 0.03219536, + -0.007929597, + -0.015196739, + -0.0165349, + -0.004312588, + -0.010115702, + 0.016124178, + 0.0040177954, + -0.006299956, + -0.015395476, + 0.01922447, + -0.03407673, + -0.026855964, + 0.03023449, + 0.022126028, + 0.017170858, + -0.006445696, + 0.023252204, + -0.0023070027, + -0.00518703, + -0.016428906, + -0.011513484, + 0.02255, + -0.01788631, + 0.025133578, + -0.02044339, + 0.017091364, + -0.009281008, + -0.0157797, + 0.011838088, + -0.0041072266, + 0.015209988, + -0.0021331082, + -0.0002641543, + -0.01367309, + -0.026869213, + -0.025001086, + 0.032831315, + 0.008969653, + 0.015991686, + 0.026617479, + -0.030446475, + 0.016919125, + 0.01862826, + -0.008525807, + -0.003742876, + -0.03110893, + 0.0054884474, + 0.0054553244, + 0.009479744, + -0.0013795645, + 0.0008218594, + -0.02706795, + -0.016587896, + -0.028300118, + 0.006111156, + 0.0015799574, + -0.007856728, + 0.006170777, + -0.010572797, + 0.016322915, + -0.004888925, + 0.006929289, + 0.010612544, + -0.000272642, + 0.003471269, + -0.008963029, + -0.0144812865, + 0.0068299207, + -0.016733637, + -0.020204905, + -0.006326454, + -0.01894624, + 0.014083813, + -0.00036186655, + -0.0012487294, + 0.01789956, + 0.008307197, + 0.006326454, + 0.014242803, + -0.026683725, + 0.009486369, + -0.028141128, + -0.011910957, + 0.0108974, + -0.0032129113, + -0.0054453877, + -0.019330464, + -0.0012594943, + -0.0006641121, + -0.0315859, + 0.013964571, + 0.0011270031, + 0.02194054, + -0.004193346, + 0.0074923765, + 0.0029247429, + -0.009221386, + -0.010837779, + -0.020814365, + 0.0058826087, + 0.023861663, + -0.0103144385, + 0.015011251, + 0.0130967535, + -0.021410575, + -0.026710223, + 0.021529818, + 0.0068166717, + -0.024444625, + -0.002995957, + -0.017674325, + -0.024550617, + -0.016640892, + -0.014110311, + 0.021728555, + -0.0032410657, + -0.015156992, + -0.0024428063, + -0.0064125736, + 0.022523502, + -0.039482374, + -0.013414732, + 0.028538601, + -0.027478673, + -0.020536134, + -0.012262059, + -0.17170858, + 0.018204289, + 0.033546768, + -0.020496387, + 0.025146827, + 0.0210661, + 0.010380684, + -0.011301498, + -0.022046532, + -0.00048400686, + 0.035110164, + -0.0033470585, + -0.03667356, + -0.017475588, + -0.006634496, + -0.008088587, + -0.02162256, + 0.0055050086, + 0.015050999, + 0.00061028753, + 0.026087515, + -0.026670476, + 0.01609768, + -0.0046206303, + -0.021331081, + 0.023106463, + -0.015408725, + 0.003706441, + 0.0016627643, + -0.003411648, + -0.005587816, + -0.017912809, + 0.014521034, + 0.020827614, + -0.0021297957, + 0.014229554, + -0.008134959, + -0.008081962, + -0.018363278, + 0.0072936397, + -0.01593869, + 0.004859114, + 0.015488219, + -0.01262641, + -0.0017240415, + 0.0144680375, + 0.008671548, + -0.0055348193, + -0.0010516488, + -0.042768154, + 0.008896783, + -0.017541833, + 0.0036865673, + 0.022430757, + 0.0015004626, + 0.017237103, + -0.0053658932, + 0.016905876, + 0.023689425, + -0.0017372906, + -0.03142691, + -0.005011479, + 0.015806198, + -0.0093340045, + -0.0130437575, + -0.007412882, + -0.013368361, + -0.0027972201, + -0.02959853, + 0.007333387, + 0.007903099, + -0.016561398, + 0.009857344, + -0.040674794, + 0.014640276, + -0.0103011895, + 0.006492068, + 0.022470506, + 0.012401175, + -0.018151293, + -0.03216886, + 0.029360047, + -0.01970144, + -0.005061163, + -0.0056308755, + 0.045311987, + 0.010009709, + -0.00073035766, + -0.031347416, + -0.0028121255, + 0.015329231, + -0.014269301, + -0.009393625, + -0.013321989, + -0.005554693, + 0.012845021, + -0.011539983, + 0.031320915, + -0.0016486872, + 0.01233493, + -0.0008334524, + -0.008062089, + -0.01819104, + 0.013633343, + 0.024736105, + 0.018972738, + 0.019873679, + 0.014547532, + 0.024563866, + -0.0035441392, + -0.023623178, + -0.011374368, + 0.0144812865, + 0.015315982, + -0.00095145236, + 0.011977203, + 0.0233052, + -0.009439997, + 0.024524119, + 0.007903099, + 0.048465274, + -0.012527042, + -0.004772995, + 0.016760135, + -0.0017025118, + -0.028194124, + -0.05591128, + 0.010440306, + 0.012765526, + -0.013845329, + 0.0011990452, + 0.03852844, + 0.02195379, + 0.035136662, + -0.0041734725, + 0.013335238, + -0.0077639837, + -0.0037329393, + 0.0030953253, + -0.011380993, + 0.036726557, + -0.01608443, + 0.0054288264, + 0.0030853886, + -0.024391627, + 0.004951858, + -0.005389079, + -0.02239101, + -0.01669389, + -0.008433064, + -0.020006169, + 0.015739953, + -0.03094994, + 0.026710223, + 0.01730335, + 0.0052897106, + 0.0103144385, + 0.00045999285, + -0.0017356345, + -0.020377144, + 0.00003317455, + 0.014322298, + -0.02391466, + -0.0026034517, + 0.03410323, + -0.023397943, + -0.0036302586, + -0.009400249, + 0.01323587, + -0.011851337, + -0.009274383, + -0.009890467, + -0.01608443, + 0.009413498, + 0.022814982, + -0.017714072, + -0.024285635, + 0.008274075, + -0.0053460193, + -0.008929906, + 0.030737955, + -0.025650294, + -0.0004691016, + 0.009016025, + -0.052122034, + 0.02150332, + -0.008843787, + 0.002003929, + -0.007823604, + 0.025425058, + 0.032672327, + -0.0042595915, + -0.017078115, + -0.043086134, + 0.01997967, + -0.0039681112, + -0.009453246, + 0.031294417, + -0.006150903, + 0.0054321387, + -0.010208446, + -0.017555082, + -0.037177026, + -0.013169624, + 0.0023898098, + -0.016163925, + -0.004739872, + -0.02358343, + -0.0135538485, + 0.013315364, + -0.016269919, + 0.028750587, + -0.0063463277, + -0.006710679, + 0.016508402, + -0.01143399, + 0.0063562645, + 0.028856581, + 0.030472973, + -0.01059267, + -0.010195197, + 0.016839629, + 0.021158842, + 0.010566172, + -0.00064258225, + 0.017621327, + -0.007406257, + -0.027293185, + -0.08818613, + 0.026034517, + 0.017117862, + -0.01850902, + 0.012440923, + -0.009989835, + 0.023941157, + -0.0027773464, + 0.026405493, + -0.005173781, + -0.042900644, + 0.020986604, + -0.022510253, + -0.015064248, + -0.031506404, + -0.016654141, + 0.031506404, + 0.016627643, + 0.008346945, + 0.016150676, + 0.017992303, + -0.012434298, + 0.028538601, + 0.0028634658, + -0.018548766, + 0.011440614, + -0.04642491, + 0.039906345, + -0.0036799428, + -0.002321908, + 0.012560165, + -0.031029437, + 0.0036136971, + 0.013752585, + -0.0037826234, + 0.01081128, + -0.010393933, + -0.012646284, + 0.001006105, + 0.044861514, + -0.032990307, + 0.0028982447, + 0.0064721946, + -0.00492536, + -0.0026829466, + -0.0062668333, + 0.019515952, + 0.00480943, + 0.0070087835, + 0.0145077845, + -0.017661076, + 0.01983393, + -0.0046239425, + -0.015302732, + -0.0032394095, + -0.043987073, + 0.028247122, + -0.004915423, + 0.00058130507, + -0.0029181184, + 0.014521034, + 0.016269919, + 0.020231403, + 0.0050247284, + 0.0016735293, + -0.008724544, + -0.009188264, + -0.0046206303, + 0.016163925, + -0.026392244, + -0.037309516, + 0.012401175, + -0.004537823, + 0.037230022, + -0.0021397327, + -0.023543684, + -0.0052599, + 0.0043755216, + -0.021755053, + 0.014587279, + -0.00061898225, + 0.009002776, + -0.04014483, + 0.012189189, + 0.009797723, + -0.013726087, + -0.00473656, + -0.005352644, + -0.0077109872, + 0.020072415, + -0.02538531, + 0.012712529, + 0.01805855, + 0.0011245189, + 0.00097546633, + 0.01833678, + -0.0023335011, + -0.027982138, + 0.022377761, + 0.023106463, + 0.02314621, + -0.011520108, + 0.002545487, + -0.014640276, + -0.0075387484, + 0.012613161, + -0.022920975, + 0.009877218, + 0.009651983, + 0.009088895, + 0.02255, + 0.0034282093, + 0.0011924207, + 0.020655377, + 0.026061017, + -0.008512558, + -0.017647825, + -0.024881845, + -0.017064866, + 0.008797415, + 0.020377144, + 0.0144415395, + 0.013739336, + 0.0011468768, + 0.017184107, + -0.016481904, + 0.005425514, + -0.018866746, + -0.0009936839, + -0.008009092, + 0.0039482373, + 0.001657796, + -0.009380376, + -0.0073068887, + -0.025226321, + 0.0070551555, + 0.012315055, + 0.006303268, + 0.008333696, + 0.049366217, + 0.0051572192, + 0.009969962, + 0.019025734, + 0.008068713, + 0.0105198, + 0.008028965, + -0.00046123494, + -0.034050234, + -0.02420614, + 0.009022649, + -0.014534283, + 0.0055845035, + -0.010102453, + -0.018615011, + -0.026551234, + -0.0011063014, + 0.009221386, + -0.00037242443, + 0.008101836, + 0.037044536, + -0.0073400117, + 0.023225704, + 0.014256052, + -0.0008479436, + 0.007896475, + 0.0300755, + -0.0018300345, + -0.0004927016, + -0.019476205, + 0.0144547885, + 0.007393008, + -0.028512103, + -0.02225852, + -0.018707756, + -0.0028319992, + -0.016998619, + 0.01789956, + 0.004938609, + 0.0031582587, + 0.0019857117, + 0.018668009, + -0.022165775, + -0.02538531, + 0.031188425, + -0.020072415, + -0.000031751304, + 0.0067636753, + -0.017700823 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + -0.0044841906, + 0.00023355159, + -0.00082493754, + 0.010029372, + -0.015641283, + 0.02653146, + -0.026091048, + -0.0066962577, + -0.008347801, + -0.021913812, + 0.017136013, + -0.013826254, + 0.012485, + -0.010282942, + -0.008074212, + -0.017709883, + 0.03384496, + -0.008374493, + 0.026838413, + -0.0343521, + 0.0005384198, + -0.005495135, + -0.010082755, + -0.006906454, + -0.009889241, + 0.006275865, + -0.0017316182, + -0.020539194, + 0.0030695351, + -0.032296848, + 0.02372884, + 0.010356344, + 0.0012778608, + -0.019031117, + -0.019645024, + -0.009628998, + -0.009955971, + -0.008194324, + -0.011243841, + -0.017136013, + 0.016748985, + -0.009228624, + -0.015441096, + -0.004170564, + -0.014333394, + 0.01742962, + 0.0025173523, + 0.016655564, + -0.028106265, + 0.012311505, + 0.0062091355, + 0.024329402, + -0.027705891, + -0.0017182723, + -0.014159899, + 0.0021203146, + -0.0042840033, + 0.002655815, + 0.0074269404, + -0.0026708292, + 0.024436168, + 0.011877766, + -0.018951043, + -0.003623386, + 0.014053132, + 0.000584296, + -0.0009575615, + 0.030054752, + -0.012992141, + -0.009115185, + 0.01901777, + 0.02137998, + -0.012731898, + 0.008234361, + 0.015040722, + -0.019458184, + -0.049539626, + 0.0010468116, + 0.00804752, + 0.001294543, + -0.003364811, + -0.019538257, + 0.012311505, + -0.0006247505, + 0.008094231, + 0.010643279, + -0.005154817, + 0.04406785, + -0.021019643, + -0.01533433, + 0.018283753, + 0.0029227312, + 0.005051387, + -0.009268661, + -0.03878291, + 0.004617648, + -0.016108386, + 0.027652508, + -0.007306828, + -0.032697223, + -0.010923541, + 0.008287745, + -0.016775677, + -0.014546927, + -0.02984122, + 0.010342998, + 0.012411598, + 0.007453632, + 0.015894853, + -0.0026674927, + 0.0011010289, + 0.012131336, + -0.009115185, + -0.05519825, + -0.015347675, + -0.037234794, + 0.0069932016, + 0.00059430534, + -0.019524911, + -0.019645024, + 0.012698533, + 0.018884314, + 0.016882444, + -0.026704956, + 0.0056219203, + -0.014573619, + -0.017202742, + -0.0058688177, + -0.0016457045, + -0.002824306, + 0.02853333, + 0.038996443, + 0.00025794937, + -0.013973057, + -0.021046335, + 0.008594698, + -0.035419766, + 0.006225818, + -0.011010289, + -0.029654378, + 0.0069798557, + 0.0028109602, + -0.0038435918, + 0.0027308853, + -0.009989335, + 0.0036734329, + 0.032136697, + 0.00459763, + 0.009849204, + 0.015027376, + 0.017976798, + 0.0032113343, + 0.0075470526, + -0.0009950965, + 0.0076938565, + 0.00986255, + 0.022287494, + 0.023328466, + -0.003823573, + -0.024382785, + -0.01211799, + -0.010509822, + 0.021460054, + -0.014400124, + -0.0030361705, + 0.016375303, + 0.005671967, + 0.054130584, + 0.0027909414, + -0.0036801056, + -0.0069398186, + 0.018043527, + -0.023995757, + 0.004791144, + 0.025637291, + 0.009362082, + 0.006886435, + 0.009302026, + -0.023982411, + 0.014533581, + -0.019564949, + 0.0028209696, + 0.010129466, + 0.012431617, + -0.008995072, + 0.019378109, + 0.018016836, + -0.0007114982, + 0.0057420325, + 0.000746948, + 0.013285749, + 0.029067162, + 0.0017449639, + 0.001951824, + -0.6700662, + -0.04406785, + -0.027999498, + 0.0029260677, + 0.04081147, + 0.030214902, + 0.018497285, + 0.027225442, + -0.00887496, + -0.010710008, + -0.046656933, + 0.0064393505, + -0.017202742, + 0.007867352, + 0.01377287, + -0.025357028, + 0.010296288, + -0.012171374, + 0.008868287, + 0.0120979715, + 0.011851074, + 0.007827315, + -0.0036200495, + -0.0065928274, + 0.018790893, + -0.0070065474, + -0.005805425, + -0.026718302, + -0.012284813, + 0.044841904, + -0.032136697, + 0.033417895, + -0.0017699874, + -0.008534642, + 0.044735137, + -0.024836542, + -0.025637291, + 0.03445887, + -0.011704271, + 0.049165946, + 0.003446554, + -0.006559463, + -0.010449765, + -0.017376238, + -0.00474777, + 0.010463111, + 0.022541065, + -0.023061551, + -0.014266665, + -0.010663298, + 0.008914998, + -0.013892983, + -0.0017533051, + -0.011670906, + 0.007894044, + 0.010349671, + 0.014653694, + -0.0001789172, + 0.015307638, + -0.019044463, + -0.008307763, + 0.0056519485, + -0.03795547, + -0.028239723, + -0.002780932, + -0.0026441375, + -0.037848704, + -0.0026825068, + 0.015214218, + -0.018924352, + -0.007860679, + 0.014159899, + -0.000095297386, + 0.020539194, + 0.0252903, + 0.031949855, + 0.01616177, + -0.0070198933, + -0.019364763, + -0.0009900919, + 0.008307763, + -0.017603116, + -0.0030661987, + -0.008768193, + 0.02172697, + -0.03331113, + -0.02853333, + 0.00665622, + 0.008200997, + -0.024676394, + 0.01809691, + 0.010423074, + -0.0063359207, + 0.0023521981, + -0.002750904, + 0.005331649, + -0.011090363, + 0.023501962, + 0.014720422, + -0.032110006, + 0.00526492, + 0.0029010442, + 0.007867352, + -0.0027559088, + -0.02039239, + -0.001042641, + -0.01839052, + 0.02503673, + 0.010556531, + -0.016188461, + 0.008074212, + -0.025570562, + -0.012224757, + -0.020045398, + 0.009468849, + -0.018857623, + 0.011036981, + 0.01717605, + 0.022767942, + -0.0057687243, + 0.010950233, + 0.006212472, + 0.027132021, + -0.0018750855, + 0.008728156, + 0.011750981, + -0.006182444, + -0.010423074, + -0.010289615, + 0.010903522, + -0.0013429216, + -0.00019737193, + 0.004237293, + -0.007780604, + 0.0038169, + -0.030294977, + -0.004974649, + 0.0071199867, + 0.02952092, + -0.02554387, + -0.043881007, + -0.025276953, + -0.0075337067, + 0.0035599933, + -0.021620203, + -0.009415465, + 0.012872029, + 0.015240909, + -0.012565075, + 0.019938633, + 0.0068130335, + -0.021873774, + -0.03961035, + 0.019524911, + 0.0120045515, + -0.008788212, + -0.029600995, + -0.007046585, + -0.02137998, + 0.008608044, + -0.0043073585, + -0.0043073585, + -0.033551354, + -0.009135203, + 0.005611911, + -0.015494479, + -0.004220611, + 0.011777673, + -0.0011744308, + -0.02653146, + -0.015187526, + -0.013706141, + -0.013826254, + 0.012992141, + 0.009555596, + -0.0010735032, + 0.012458309, + -0.0045309006, + 0.0138529455, + 0.010850139, + 0.005184845, + -0.031042341, + -0.021620203, + -0.0060890233, + 0.027225442, + 0.009201933, + -0.0022821326, + 0.02439613, + -0.014253319, + 0.011203803, + -0.031949855, + 0.015761396, + -0.0017266135, + -0.009021764, + 0.0138529455, + -0.01730951, + -0.0013103912, + 0.0044041155, + 0.015214218, + 0.008834923, + 0.026424693, + -0.0035966944, + 0.007059931, + -0.015240909, + 0.018337136, + -0.01975179, + -0.00028776893, + -0.0042339563, + 0.024169253, + 0.029627686, + 0.002655815, + -0.025677329, + 0.0011719285, + -0.005855472, + 0.011003616, + 0.012077954, + 0.025410412, + 0.019925287, + -0.004340723, + -0.014733768, + 0.023074897, + -0.011410663, + 0.006662893, + -0.023301775, + 0.0069198, + 0.021500092, + 0.023288429, + 0.022541065, + 0.026731648, + 0.0040537883, + -0.014013095, + -0.007473651, + -0.012204738, + -0.0050180224, + 0.0084812585, + -0.013919674, + 0.0036300588, + -0.0036367318, + 0.030561892, + -0.016415339, + 0.010783411, + -0.0015197535, + 0.016535452, + -0.011497411, + 0.005695322, + -0.016121732, + 0.04745768, + 0.0112571865, + -0.0069464915, + 0.020419082, + -0.025490487, + -0.003860274, + -0.01800349, + 0.028159648, + 0.002388899, + -0.031789705, + -0.00402376, + 0.009422138, + 0.007974118, + 0.0256106, + 0.014800497, + -0.0078339875, + 0.0018350482, + 0.024062486, + -0.016455377, + -0.00021686933, + 0.018110257, + 0.026051011, + -0.007914063, + -0.034832552, + -0.02531699, + -0.020218894, + 0.003519956, + 0.009535577, + 0.0043073585, + -0.009689054, + -0.015894853, + -0.011417336, + 0.014119862, + 0.0057553784, + -0.002882694, + -0.040250946, + 0.030001368, + 0.01492061, + -0.01016283, + -0.0077405665, + -0.009388774, + 0.008868287, + -0.01673564, + 0.01965837, + 0.026357964, + 0.020699343, + -0.004304022, + -0.018857623, + -0.0133991875, + 0.0074002487, + 0.02589086, + -0.041345302, + 0.013946366, + -0.019898595, + 0.0014004754, + -0.025930898, + -0.00903511, + -0.009188587, + 0.020218894, + 0.0027342218, + 0.00001191869, + -0.01673564, + -0.013459244, + -0.008427876, + 0.022180727, + -0.02885363, + -0.0024656374, + 0.009462176, + -0.0058621448, + 0.0050847516, + -0.006205799, + -0.016108386, + 0.016708948, + -0.0024089178, + -0.015828125, + 0.009095166, + -0.022848018, + -0.005925537, + 0.10890177, + -0.0012027906, + -0.003973713, + 0.021073025, + 0.0057854066, + 0.023328466, + -0.0040904894, + -0.0011410663, + 0.006352603, + 0.008307763, + -0.022287494, + 0.003483255, + -0.0039837225, + 0.0037368254, + 0.009849204, + -0.0012711879, + -0.013479263, + -0.052876078, + 0.030108135, + -0.009555596, + -0.012304832, + 0.017296163, + 0.0029911285, + 0.02045912, + 0.007960772, + -0.012985468, + 0.01689579, + 0.008794885, + 0.031896472, + -0.009849204, + -0.000403085, + 0.002167025, + 0.014119862, + 0.013292422, + -0.01730951, + -0.008274399, + 0.036914498, + -0.0035366383, + 0.008454567, + -0.003947022, + 0.01988525, + 0.00045792793, + -0.0020435764, + -0.003947022, + -0.002173698, + -0.0062825377, + -0.015000684, + 0.024489552, + -0.036700964, + -0.019858558, + 0.01418659, + 0.00031904815, + -0.03750171, + -0.009395447, + -0.026918488, + 0.024916617, + -0.0057120044, + -0.007974118, + 0.002056922, + 0.023635421, + 0.009642344, + -0.013879637, + -0.013372497, + -0.020525848, + -0.0013304099, + -0.043747548, + 0.0009709073, + -0.013205674, + -0.018884314, + -0.01476046, + 0.0102429055, + -0.011203803, + -0.025076767, + 0.02007209, + 0.015454442, + -0.009261988, + 0.016642218, + -0.02360873, + -0.007900717, + 0.020552538, + -0.013639413, + -0.0133991875, + -0.017349547, + -0.015908198, + -0.011784346, + 0.009689054, + 0.0130255055, + 0.0038736197, + -0.017669845, + 0.017189397, + 0.038596068, + -0.011951168, + 0.006522762, + -0.0035166196, + -0.011710944, + -0.009075147, + 0.008241034, + 0.017829996, + -0.018857623, + -0.0023488617, + 0.021927157, + -0.021940503, + -0.0069398186, + 0.021126408, + -0.0017850014, + -0.0021853754, + 0.010129466, + -0.003298082, + -0.010102774, + -0.001996866, + 0.02888032, + -0.0093153715, + 0.014360086, + 0.001457195, + 0.003616713, + 0.0082076695, + 0.00006532146, + 0.023114935, + 0.00850795, + 0.010189522, + -0.0147871515, + -0.0016231835, + 0.015427751, + 0.015027376, + 0.024195943, + -0.018817585, + 0.002757577, + -0.010896849, + 0.009101839, + 0.0016657233, + 0.008234361, + 0.018377174, + -0.019858558, + -0.016708948, + -0.0015189194, + 0.0044841906, + -0.0138396, + 0.023755532, + 0.003653414, + -0.029814528, + -0.008434549, + 0.005485126, + 0.018764202, + -0.015921544, + -0.039556965, + -0.028132956, + 0.0036033674, + 0.035286307, + 0.0026674927, + 0.008174306, + 0.009322044, + 0.028773556, + -0.007607109, + -0.010022699, + -0.011070345, + -0.006032304, + -0.015227563, + -0.013419206, + 0.012331524, + 0.005501808, + 0.020565884, + 0.00030507674, + 0.010816774, + 0.0043006856, + -0.0049946676, + 0.005395042, + -0.001981852, + 0.006886435, + 0.010409728, + 0.029067162, + 0.008174306, + 0.022073962, + -0.005131462, + -0.0011961177, + -0.030108135, + 0.0061323973, + -0.0135193, + -0.015521171, + -0.021099716, + -0.030268285, + -0.0015614592, + -0.00871481, + -0.010563204, + 0.009382101, + 0.0015005689, + 0.02595759, + 0.025223572, + -0.00041726494, + 0.013692795, + -0.008267726, + 0.009769129, + -0.011504084, + -0.023341812, + 0.008654755, + 0.00018559009, + -0.005014686, + -0.020886185, + 0.008788212, + 0.0062892106, + 0.008788212, + 0.010036045, + 0.0009784143, + -0.009949298, + 0.014680386, + -0.0007957436, + 0.041211843, + -0.00928868, + -0.008354474, + 0.015667975, + -0.0346724, + -0.016014965, + -0.007653819, + 0.0065861545, + -0.04409454, + -0.020832801, + 0.013145617, + -0.010249578, + 0.02255441, + -0.017736575, + -0.019645024, + 0.01959164, + 0.016535452, + 0.025717366, + -0.015828125, + 0.023061551, + 0.0083878385, + -0.010796756, + 0.011370625, + 0.015948236, + -0.01689579, + -0.023208354, + 0.018937698, + 0.018363828, + -0.020485811, + -0.020218894, + 0.002595759, + 0.009622325, + -0.03451225, + 0.006365949, + 0.027252134, + 0.029787837, + 0.0010835126, + 0.00572535, + 0.009582288, + -0.0054817894, + 0.023929028, + -0.015788088, + -0.020525848, + -0.01666891, + -0.004577611, + -0.015107451, + 0.006833052, + -0.002046913, + 0.0031095725, + 0.020552538, + -0.009322044, + -0.011010289, + -0.019898595, + 0.010016026, + 0.0069998745, + -0.02917393, + 0.023101589, + 0.0022737915, + 0.007053258, + 0.0107033355, + 0.0034699093, + -0.008628063, + 0.0013821248, + 0.014400124, + 0.024703085, + -0.0071333325, + 0.0059989393, + 0.002167025, + -0.011644214, + 0.0122781405, + 0.009248642, + -0.0009875896, + -0.00830109, + -0.0054250695, + -0.008781539, + 0.0106165875, + 0.0048678825, + 0.011070345, + -0.012138009, + -0.03002806, + -0.014707076, + -0.007994137, + -0.015467788, + 0.00079032185, + -0.011944495, + -0.0170159, + -0.020605922, + -0.0046710316, + 0.022207418, + 0.014013095, + -0.021446709, + 0.009141876, + 0.0044474895, + -0.0107033355, + 0.006646211, + -0.01717605, + 0.010509822, + 0.0018584033, + 0.0006201629, + -0.0147871515, + -0.025757402, + 0.027999498, + -0.023982411, + -0.0018250388, + -0.029387463, + -0.01377287, + 0.023501962, + -0.002078609, + 0.019217959, + 0.025850823, + -0.017189397, + 0.008527969, + -0.03333782, + -0.014627002, + 0.0028142966, + 0.010563204, + -0.0020902867, + 0.026291234, + -0.007366884, + 0.01517418, + 0.018977735, + 0.015454442, + 0.0035633298, + -0.010716681, + -0.013906329, + -0.009789147, + -0.00836782, + 0.00007934498, + -0.0073001552, + -0.017149359, + 0.0040137507, + -0.00944883, + -0.0053516678, + 0.01924465, + -0.0072134077, + 0.0067262854, + 0.013652759, + 0.022701213, + -0.0010526504, + -0.006803024, + -0.020685997, + -0.0127452435, + -0.006752977, + -0.02379557, + -0.006065668, + -0.0152676, + 0.02519688, + 0.027412282, + -0.040678013, + -0.02338185, + 0.026891796, + -0.031576175, + 0.003166292, + -0.02214069, + 0.015361021, + 0.014453506, + -0.00045167207, + -0.00036429876, + 0.010603242, + -0.010262924, + 0.009048455, + -0.029307388, + -0.003750171, + 0.022260802, + -0.017616462, + 0.008588025, + 0.00816096, + -0.014293357, + 0.0039236667, + 0.007580417, + -0.0014705409, + 0.01492061, + -0.006676239, + 0.00314961, + 0.0003401095, + 0.00036617552, + 0.01492061, + -0.0083878385, + 0.023942374, + 0.0071533513, + -0.0349927, + 0.012291486, + 0.010783411, + -0.016588835, + 0.008354474, + 0.013425879, + 0.0014421811, + -0.02080611, + 0.00541506, + -0.02089953, + 0.014573619, + -0.0012745244, + -0.0081075765, + 0.016415339, + -0.012972122, + -0.00024001596, + 0.031389333, + 0.000569282, + -0.0065394444, + -0.022474336, + 0.010543185, + -0.012391579, + 0.0085746795, + 0.013279076, + 0.0031712968, + -0.009201933, + -0.022113997, + 0.008354474, + -0.027492357, + -0.020178856, + 0.0065561268, + -0.0019801839, + -0.021793699, + 0.02519688, + 0.0011026971, + -0.0019234641, + -0.0062224814, + -0.011003616, + 0.00190845, + -0.006722949, + -0.025770748, + -0.003373152, + -0.03878291, + -0.018030182, + 0.0060756775, + -0.01393302, + -0.00020310647, + 0.0008024165, + 0.024556281, + -0.020525848, + 0.009155222, + 0.25111467, + -0.007520361, + -0.0110770175, + 0.028293107, + -0.0070799496, + 0.029414153, + 0.03387165, + -0.013158963, + -0.0097024, + 0.019831866, + -0.015107451, + -0.0027275488, + 0.01409317, + -0.0038402553, + 0.0082944175, + -0.011097036, + -0.019364763, + -0.04062463, + -0.0030862174, + -0.009375428, + 0.034378793, + -0.008914998, + -0.0014580291, + -0.0066495473, + 0.0050680693, + 0.013973057, + -0.0041238535, + 0.008434549, + 0.020152165, + 0.023261737, + 0.010683317, + 0.019578295, + 0.0003943268, + 0.03331113, + 0.0043507325, + 0.0070132203, + -0.0011886107, + -0.007787277, + 0.024943309, + 0.008321109, + 0.0021136417, + -0.012144682, + -0.0077472394, + -0.0011585826, + 0.0095022125, + 0.028613405, + -0.011270532, + -0.0061857803, + -0.003194652, + 0.02262114, + -0.029707761, + -0.004017087, + 0.01682906, + 0.023021514, + 0.011250514, + 0.0014229964, + 0.009048455, + -0.020619268, + -0.01915123, + -0.010509822, + 0.0008983395, + 0.024316056, + 0.003623386, + 0.024075832, + 0.0000784066, + -0.010823447, + -0.028266415, + 0.024502898, + -0.004871219, + 0.004140536, + -0.0005375857, + -0.003446554, + -0.0011844402, + -0.029787837, + -0.029013779, + -0.0026925162, + 0.03864945, + 0.00074152625, + 0.018150294, + 0.015881507, + -0.016175115, + 0.009835858, + -0.0013862954, + 0.0008512121, + -0.006893108, + -0.040384404, + 0.0027108665, + 0.0037835357, + 0.016281882, + -0.004387433, + 0.0052315556, + -0.021433363, + -0.0017166041, + -0.0077072023, + 0.0048478637, + -0.019351417, + -0.00092920166, + 0.006395977, + 0.000065217195, + 0.0056686304, + -0.0197251, + 0.004771125, + 0.0048512, + -0.022354223, + -0.01285201, + 0.0060890233, + 0.010556531, + 0.013679449, + 0.013138944, + -0.011710944, + -0.016014965, + -0.01682906, + 0.0060022757, + -0.010496476, + 0.00040663, + -0.0013270734, + -0.025930898, + -0.016975863, + 0.03267053, + -0.033898342, + 0.012158028, + -0.025010038, + -0.0071533513, + 0.0053516678, + -0.018457249, + 0.002078609, + -0.016081695, + 0.00060598296, + 0.009268661, + -0.031816397, + 0.030401744, + -0.016175115, + 0.014400124, + 0.0045142183, + -0.015881507, + 0.007320174, + 0.003947022, + -0.0033247736, + -0.0014446834, + -0.02137998, + 0.009969316, + -0.0074002487, + 0.008094231, + 0.00402376, + -0.0145068895, + -0.019231305, + 0.0069264728, + 0.017963452, + -0.013205674, + 0.0132990945, + -0.022380915, + -0.013158963, + 0.0022654503, + -0.016748985, + 0.015761396, + 0.00092836755, + 0.00026274554, + -0.008374493, + 0.011270532, + 0.027332207, + -0.015601246, + 0.0141332075, + 0.011744308, + -0.00578207, + -0.02188712, + -0.015734704, + -0.17306839, + 0.032910753, + 0.010896849, + -0.01632192, + 0.015187526, + 0.013499281, + 0.011824383, + -0.021633549, + 0.012358215, + 0.009328717, + 0.025263608, + 0.031202491, + -0.018777547, + -0.014733768, + 0.01151743, + -0.012358215, + -0.0040137507, + 0.0055451817, + 0.030161519, + 0.010489803, + 0.02166024, + -0.02057923, + 0.0009500545, + 0.0071600243, + -0.029814528, + 0.033925034, + 0.011183784, + 0.025877515, + -0.016855752, + -0.009015091, + -0.02751905, + -0.026344618, + 0.0120912995, + 0.032056622, + -0.0010001012, + 0.008601371, + 0.00053299806, + -0.024102524, + -0.012658495, + 0.022567756, + 0.003750171, + 0.020138819, + 0.00028568364, + -0.008654755, + 0.014653694, + 0.017629808, + 0.0013787885, + 0.0023021514, + -0.011791019, + -0.017789958, + 0.0256106, + -0.013919674, + 0.020298969, + 0.0006706267, + 0.0032380258, + 0.020032052, + 0.0141332075, + -0.0009216946, + 0.015948236, + -0.0214734, + -0.019551603, + -0.008601371, + 0.018403865, + -0.016415339, + -0.020672651, + 0.0063792947, + -0.016522106, + -0.0026257872, + -0.043267097, + 0.026998563, + -0.010029372, + -0.013225692, + 0.0026357963, + -0.012978795, + 0.0013103912, + -0.019338071, + -0.00022375076, + 0.030161519, + 0.0041805734, + -0.017629808, + -0.018684126, + 0.025490487, + -0.018363828, + -0.018564014, + 0.0025006703, + -0.008120922, + 0.0034231988, + 0.022954784, + -0.007053258, + -0.021913812, + 0.027572433, + -0.025410412, + 0.007954099, + -0.010756719, + 0.026264545, + 0.006576145, + -0.0031846426, + 0.021967195, + -0.004017087, + -0.010583223, + -0.00066520495, + -0.011550794, + -0.014280011, + 0.012838664, + 0.026704956, + -0.0019551604, + 0.008227688, + 0.0010217882, + 0.012298159, + -0.005361677, + -0.028426563, + 0.00093587453, + 0.015227563, + 0.021046335, + -0.026224507, + -0.00464434, + 0.016188461, + 0.0017583098, + 0.019578295, + -0.023341812, + 0.05207533, + -0.008314436, + 0.016628873, + 0.009775802, + 0.00029152242, + -0.01616177, + -0.06897112, + -0.021713624, + 0.002854334, + 0.005641939, + -0.011684252, + 0.029013779, + 0.007954099, + 0.01867078, + 0.008441222, + 0.02681172, + -0.0026891797, + -0.024489552, + -0.0020902867, + -0.0011427345, + 0.026838413, + -0.001641534, + 0.011010289, + -0.02853333, + 0.0060990327, + 0.026931833, + -0.000014557875, + -0.0046543493, + 0.008868287, + -0.011604177, + -0.015054068, + -0.0009208605, + -0.02554387, + 0.022420952, + 0.022848018, + 0.0031112407, + 0.001441347, + -0.0032430305, + 0.0025540534, + -0.028319798, + 0.0074002487, + 0.019271342, + -0.038729526, + -0.0016440363, + 0.020258931, + -0.024449514, + -0.0020102118, + -0.011584158, + 0.017216088, + -0.02137998, + -0.010196195, + 0.005962238, + -0.01800349, + -0.009622325, + 0.01593489, + -0.025637291, + -0.026357964, + -0.023195008, + 0.00068063603, + 0.01022956, + 0.008521296, + -0.017456312, + -0.018483939, + 0.0012545056, + -0.009635671, + -0.003166292, + 0.014560273, + 0.010850139, + -0.013879637, + 0.011303897, + 0.022594448, + 0.0028960395, + -0.021206483, + -0.02710533, + 0.009528904, + -0.0049713124, + 0.0068597435, + 0.010963579, + -0.007473651, + 0.0005559362, + -0.009008418, + -0.03680773, + -0.01800349, + -0.01119713, + 0.012725225, + -0.016775677, + 0.0028293105, + -0.03477917, + -0.0007181711, + -0.0019551604, + 0.025156843, + 0.015294292, + -0.0060623316, + 0.010302961, + -0.0016673915, + -0.034058493, + -0.006065668, + 0.036220513, + 0.008541315, + -0.03186978, + -0.014693731, + 0.032296848, + 0.0152676, + -0.014933956, + 0.005805425, + 0.014480198, + 0.00052590814, + -0.01816364, + -0.08295752, + 0.012698533, + 0.010356344, + -0.0037001243, + 0.014693731, + -0.0086681, + 0.015601246, + -0.018817585, + -0.0021837072, + -0.0061757714, + -0.017950106, + -0.00036054527, + -0.0054050507, + 0.0076938565, + -0.028960396, + -0.018523976, + 0.025050076, + -0.0014563609, + 0.015120797, + 0.012618458, + 0.0058821635, + 0.00526492, + 0.033097595, + -0.001323737, + -0.009755783, + 0.008354474, + -0.014266665, + 0.031202491, + -0.021193137, + -0.007867352, + -0.00056761375, + -0.029067162, + -0.013639413, + 0.016348612, + -0.0053082937, + -0.01896439, + -0.01068999, + 0.0024222636, + 0.0003165458, + 0.02602432, + -0.017029246, + -0.009615652, + 0.029654378, + -0.01476046, + -0.010082755, + 0.0061390703, + -0.0007736396, + -0.004941284, + 0.01616177, + 0.016762331, + -0.00049963355, + 0.01717605, + 0.015347675, + -0.0141332075, + 0.017042592, + -0.054504268, + 0.009055128, + 0.010649952, + -0.018203678, + 0.013178982, + 0.019645024, + 0.010790084, + 0.0025173523, + 0.011984533, + -0.0012294822, + -0.0143200485, + -0.0038502647, + -0.0014229964, + 0.007053258, + -0.02968107, + -0.04118515, + 0.014360086, + 0.015067413, + 0.020152165, + 0.020138819, + 0.0033531333, + 0.009842531, + -0.024409477, + -0.030081443, + 0.03248369, + -0.0012670173, + 0.0070866225, + -0.026785031, + 0.019137884, + 0.004814499, + -0.007046585, + -0.014907264, + -0.006913127, + -0.0058855, + 0.032777295, + -0.0077005294, + 0.0027792638, + 0.01581478, + 0.0042339563, + 0.023008168, + -0.002046913, + -0.008721483, + -0.027625816, + 0.025917552, + 0.01823037, + 0.016642218, + -0.0007899048, + -0.002382226, + -0.024649702, + -0.0068664164, + 0.00015358102, + -0.03931674, + -0.0052849385, + 0.01533433, + 0.0031079042, + 0.013352478, + 0.019965325, + -0.0037835357, + 0.03400511, + 0.008868287, + -0.0012895383, + -0.011343934, + -0.037741937, + -0.020685997, + 0.028907012, + 0.023275083, + 0.007653819, + 0.021913812, + -0.006676239, + -0.006906454, + 0.0069264728, + 0.008120922, + -0.017002555, + -0.00598893, + -0.007813969, + 0.013332459, + -0.0058888365, + -0.02738559, + 0.004200592, + -0.00804752, + -0.023848953, + 0.00183338, + 0.005975584, + -0.012444963, + 0.03632728, + 0.016989209, + 0.023421887, + -0.0036467412, + 0.0042172745, + 0.02039239, + 0.008060866, + 0.013652759, + -0.016855752, + -0.015921544, + 0.00862139, + -0.002714203, + -0.000095245254, + -0.01119713, + -0.020312315, + -0.011630869, + 0.006072341, + 0.024129216, + -0.012885374, + -0.0032380258, + 0.042679884, + 0.025076767, + 0.014773806, + 0.0105164945, + -0.006786342, + -0.008694792, + 0.023208354, + 0.0077605853, + 0.0095022125, + -0.008881633, + 0.022594448, + 0.012938757, + -0.017296163, + -0.008834923, + 0.014533581, + -0.010676644, + 0.0013871295, + -0.009942625, + 0.012771935, + 0.012605113, + -0.014853881, + 0.0077472394, + -0.016108386, + -0.040838163, + 0.0040270966, + 0.0019551604, + -0.0047677886, + 0.0013337464, + -0.013759525 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + -0.0010213737, + 0.008644082, + 0.0023587057, + 0.009380755, + -0.0029162795, + 0.0086643575, + -0.018856129, + 0.0043659713, + -0.0068497085, + -0.04287573, + -0.0075086593, + -0.010408043, + 0.021775788, + -0.019937484, + -0.0062008956, + -0.013003294, + 0.023168033, + -0.006413787, + 0.010455352, + -0.025371293, + -0.013476388, + 0.023438372, + -0.016044606, + -0.009150967, + 0.0061704824, + 0.005903523, + 0.007907409, + -0.021383796, + 0.013523697, + -0.0016980654, + 0.0190724, + -0.0030886205, + 0.0021998817, + -0.004203768, + 0.0023468784, + -0.013625074, + -0.015490412, + -0.005937315, + -0.0011193715, + -0.011164991, + 0.02591197, + -0.02397905, + -0.010833826, + -0.008637324, + -0.0030210358, + 0.0026172171, + -0.016977275, + 0.017409816, + -0.024695447, + 0.010536454, + 0.0074951425, + 0.0034941286, + -0.03752302, + -0.012422066, + -0.019829348, + -0.00043676607, + -0.028196333, + 0.0045011407, + -0.006494889, + -0.014706429, + 0.011678635, + 0.000102855454, + -0.0281693, + 0.016409563, + -0.0037779843, + 0.00011837881, + -0.008157472, + 0.011901665, + -0.04260539, + -0.021140492, + 0.022843625, + 0.01858579, + -0.011219059, + -0.021478415, + 0.018639859, + -0.006626679, + -0.024560276, + 0.007522176, + 0.00737349, + 0.0059001436, + 0.016842104, + -0.018639859, + 0.01726113, + 0.004882994, + 0.024695447, + 0.0069071557, + -0.010921686, + 0.022613838, + 0.008191264, + -0.026425615, + 0.03173777, + 0.0031545155, + 0.011746219, + -0.0048221676, + -0.03033201, + -0.011556982, + -0.015517445, + 0.019194052, + -0.0077722394, + -0.010556729, + -0.01770719, + 0.011151474, + -0.004264594, + -0.015612064, + -0.016788037, + 0.00671116, + 0.008704908, + 0.0002832221, + 0.010293148, + 0.005704148, + 0.0093537215, + 0.024763031, + -0.016450115, + -0.052526824, + -0.02185689, + -0.016869139, + 0.03522514, + 0.0117259445, + -0.013260117, + -0.03381938, + 0.0075356932, + 0.036144294, + -0.007893892, + -0.0050046463, + 0.031818874, + 0.012307173, + -0.0087387, + -0.01046211, + -0.004720791, + -0.012090902, + 0.005271606, + 0.014760497, + 0.010867618, + 0.020762017, + -0.009664611, + 0.024735996, + -0.022938244, + 0.022897694, + -0.034278955, + -0.018707443, + 0.02203261, + 0.019045366, + -0.025155023, + 0.011935457, + 0.010313424, + 0.02662837, + 0.024465658, + 0.022438118, + 0.00737349, + 0.0055216695, + 0.018072147, + -0.016612317, + 0.020032102, + -0.014314438, + 0.0032085832, + 0.016990792, + 0.026141759, + 0.018964265, + -0.005197263, + 0.003558334, + 0.003761088, + 0.009286136, + 0.015598547, + -0.008927938, + -0.011219059, + 0.019613078, + 0.006728056, + 0.013834586, + 0.0060150377, + -0.021613585, + -0.013226325, + 0.020964772, + -0.0014032272, + 0.009772747, + 0.008252091, + 0.010313424, + 0.03222438, + 0.01761257, + -0.021208076, + 0.0067922617, + -0.0031359298, + -0.0132466, + 0.006227929, + 0.008434569, + -0.013239841, + -0.002096815, + 0.009941708, + 0.008015544, + 0.006643575, + 0.002061333, + 0.008488637, + 0.0397398, + 0.018031595, + 0.0026510095, + -0.67217034, + -0.051850975, + 0.0032254795, + 0.0016161189, + 0.020910705, + 0.0067719864, + 0.0150713865, + 0.006079243, + -0.0040415647, + -0.001850131, + -0.0314404, + 0.0071504605, + -0.007988511, + -0.0019126468, + -0.0027067668, + -0.0028317985, + -0.0006935879, + -0.012030075, + 0.014976768, + 0.012178762, + -0.006379995, + 0.0045856214, + -0.005704148, + 0.0048593394, + 0.021154009, + -0.015341725, + -0.0040753568, + -0.019275155, + -0.008718425, + 0.032602854, + -0.031007856, + 0.0381448, + 0.009475374, + 0.005268227, + 0.047011912, + -0.009948467, + -0.022776041, + 0.026236378, + 0.011279885, + 0.03425192, + -0.022654388, + -0.016585283, + 0.0058021457, + -0.025046887, + -0.011928698, + 0.012070626, + 0.017855875, + -0.04498437, + -0.0045450707, + -0.018991299, + 0.020248374, + -0.013219566, + -0.011894906, + -0.01942384, + 0.004626172, + 0.0143279545, + 0.02207316, + -0.014963251, + 0.006809158, + -0.00710991, + -0.021559516, + -0.0066570924, + -0.029548027, + -0.02287066, + -0.014638844, + -0.0017403058, + -0.029277688, + -0.0031883079, + 0.006278618, + -0.008427811, + 0.010259356, + 0.023789812, + -0.013571006, + 0.010293148, + 0.019923966, + 0.017274648, + 0.008988764, + 0.0015966883, + -0.007974993, + -0.01695024, + -0.007332939, + -0.003612402, + -0.0157202, + 0.0077114133, + 0.028764045, + -0.035684716, + -0.020910705, + 0.005548703, + 0.023032863, + -0.027790826, + 0.005656839, + 0.012253105, + -0.005224297, + 0.018004563, + -0.008157472, + 0.0095835095, + 0.0065861284, + -0.00096223707, + 0.014652361, + -0.011847597, + -0.017761257, + -0.011104165, + 0.0052918815, + -0.015544479, + -0.024965785, + -0.0029754161, + -0.0053662243, + 0.0087387, + 0.025939004, + -0.012895159, + 0.007718172, + -0.011577258, + -0.030223874, + -0.008725184, + 0.0097254375, + -0.027980063, + 0.017936977, + 0.0012925572, + 0.016531216, + 0.003686745, + 0.0035110246, + -0.0069747404, + 0.031467434, + 0.0033268565, + 0.00020835093, + 0.014598293, + -0.0020495057, + -0.014963251, + -0.010773, + 0.00238405, + 0.00037657344, + 0.002578356, + -0.006565853, + -0.008535947, + 0.026587818, + -0.017639605, + -0.018788544, + -0.0031646532, + 0.030602349, + -0.042443186, + -0.041037425, + -0.0081507135, + 0.004230802, + 0.0074072825, + 0.0111244405, + -0.023816846, + -0.022127228, + 0.02697981, + -0.0029720368, + 0.032467686, + 0.002101884, + -0.0038523274, + -0.037712257, + 0.022329982, + -0.0035346793, + -0.0032660302, + -0.022248881, + -0.011164991, + 0.0025749768, + 0.012624821, + 0.012205795, + 0.010326941, + -0.040577848, + 0.0012410239, + 0.008840078, + -0.015206556, + 0.014152234, + 0.014963251, + 0.002318155, + -0.018423587, + -0.003717158, + -0.005788629, + -0.009651094, + 0.015422827, + 0.015084904, + -0.01125961, + 0.009995776, + -0.0045247953, + -0.0035786096, + 0.006839571, + 0.0065489565, + -0.023965532, + -0.012983019, + 0.006545577, + 0.026371546, + -0.007055842, + 0.0077114133, + 0.014179269, + -0.0062448257, + 0.002874039, + -0.027358284, + 0.02437104, + -0.0007628622, + 0.0025935625, + 0.015949987, + -0.023384303, + 0.005359466, + 0.0055824956, + -0.0035313002, + 0.023478922, + 0.021924473, + -0.010739207, + 0.010489144, + -0.009319929, + 0.0051905042, + -0.02193799, + -0.0058021457, + -0.007359973, + 0.02176227, + 0.0281693, + 0.020342993, + -0.025966039, + -0.010658106, + 0.0064475797, + 0.022478668, + 0.03738785, + 0.015652616, + 0.009394272, + -0.005592633, + -0.002441497, + 0.0030869308, + -0.030304976, + 0.015220073, + -0.018558756, + -0.003541438, + 0.0019278533, + 0.006177241, + 0.038334038, + 0.015449861, + -0.0040145307, + -0.022059644, + -0.011333953, + -0.0077992734, + 0.008988764, + 0.012895159, + -0.019910451, + 0.0059542116, + -0.013787277, + 0.035792854, + 0.007927684, + 0.0147875305, + -0.0036968826, + 0.03676607, + -0.010705415, + -0.0039706007, + -0.009401031, + 0.040172342, + 0.015179521, + -0.0058798683, + 0.018328968, + -0.025438879, + -0.015990539, + -0.017964011, + 0.0067652278, + 0.014341472, + -0.035522513, + 0.009319929, + 0.0031714116, + 0.019369774, + 0.04211878, + 0.02397905, + -0.0010357354, + 0.0062718596, + 0.009968742, + 0.008137197, + -0.00023802483, + 0.032467686, + 0.0049776128, + -0.008143956, + -0.0061130356, + -0.02022134, + -0.0086643575, + -0.01593647, + -0.014706429, + -0.004095632, + -0.012604545, + -0.0014632086, + -0.018639859, + 0.026141759, + 0.0043423166, + -0.008731943, + -0.037279718, + 0.027561037, + -0.009529442, + -0.0007624398, + -0.013064121, + -0.009745712, + -0.009455099, + -0.026141759, + 0.021356763, + 0.009211794, + 0.016260877, + -0.008285883, + 0.00073878514, + -0.009042832, + 0.007130185, + 0.019315705, + -0.037144545, + -0.016923208, + -0.019234603, + 0.016801555, + -0.022708457, + 0.0029382445, + -0.0014311059, + 0.012435583, + -0.006596266, + 0.01774774, + -0.025709217, + -0.012834333, + 0.000044669257, + 0.022911211, + -0.012124694, + -0.0027135254, + 0.009482132, + 0.011252851, + 0.0013778829, + -0.00489989, + 0.0038219143, + 0.012401791, + -0.013908929, + -0.0052479515, + -0.021505449, + -0.024046633, + -0.00043148603, + 0.084778234, + -0.0034180959, + 0.00657937, + 0.002101884, + 0.011043339, + 0.008995523, + -0.004305145, + 0.0067517105, + 0.0062448257, + 0.016409563, + -0.011502914, + -0.018991299, + 0.012023317, + 0.001227507, + 0.0063833743, + -0.012124694, + -0.013537214, + -0.019194052, + 0.026033623, + -0.0063056517, + 0.00865084, + 0.012340965, + -0.001894061, + 0.018518206, + -0.0064002704, + -0.004115908, + 0.013097913, + 0.010049844, + 0.0013128327, + -0.025411844, + 0.012793782, + 0.0005677114, + -0.015409309, + -0.0016718763, + -0.020113204, + -0.0016271014, + 0.018085664, + 0.020586297, + -0.008157472, + -0.012199037, + 0.010212047, + 0.0063124103, + 0.0051195403, + -0.005082369, + -0.0018687168, + -0.0077384473, + 0.0021255387, + 0.012489651, + -0.027304215, + 0.004798513, + 0.03541438, + -0.0046025175, + -0.037279718, + -0.014909183, + -0.00094618567, + 0.01333446, + -0.012003041, + -0.0038557067, + 0.0017943736, + 0.014841598, + -0.00017962744, + -0.021559516, + 0.01457126, + -0.009421306, + -0.03400862, + -0.044524796, + -0.0015468446, + -0.014855116, + -0.03827997, + -0.021248627, + 0.016004056, + -0.013179015, + -0.029602095, + 0.009752471, + 0.017369267, + -0.004538312, + 0.026168793, + -0.010056602, + -0.0101850135, + 0.02662837, + -0.01607164, + -0.03417082, + -0.02392498, + -0.027817858, + 0.00040402974, + 0.009968742, + 0.020559262, + -0.017098928, + 0.002115401, + -0.016720453, + 0.040415645, + -0.011827321, + 0.014733463, + 0.0009689955, + -0.014368505, + -0.020829601, + 0.013239841, + 0.020599814, + -0.02949396, + -0.004896511, + 0.013354735, + -0.021708203, + 0.0019041987, + -0.013800794, + -0.0059069023, + 0.007846583, + 0.01690969, + 0.000936048, + -0.0072923885, + 0.00485596, + 0.029034384, + -0.036495734, + 0.00984709, + 0.013030329, + -0.020424094, + 0.03354904, + 0.013990032, + 0.0348737, + 0.007691138, + -0.00083382614, + 0.008421052, + -0.011002788, + 0.022154262, + 0.015963504, + 0.00047478246, + 0.006802399, + -0.0013381769, + -0.00034827236, + 0.006423925, + -0.0026594577, + -0.011131199, + 0.013388528, + -0.019491425, + -0.022235364, + -0.022194812, + -0.0075694853, + -0.0083805015, + 0.010563487, + 0.0037847427, + -0.03611726, + -0.01461181, + -0.016004056, + 0.011543466, + -0.008576497, + -0.020464644, + -0.016896173, + 0.006140069, + 0.015868885, + -0.0076505872, + 0.01377376, + 0.02012672, + 0.024398074, + -0.01426037, + -0.0075289346, + -0.024492692, + -0.030304976, + -0.021018839, + -0.030791586, + 0.002321534, + 0.017869392, + 0.034900736, + 0.0057751117, + -0.0041902508, + -0.01642308, + -0.0014648982, + 0.011151474, + -0.014733463, + 0.02397905, + -0.006298893, + 0.0135304555, + 0.027871927, + 0.018991299, + -0.015517445, + -0.004967475, + -0.037063446, + 0.028250402, + 0.0006534595, + -0.011408296, + -0.0067483317, + -0.03346794, + -0.0020106446, + -0.0037374336, + -0.015125454, + 0.008583256, + -0.0038962576, + -0.00024013685, + 0.021600068, + -0.004291628, + 0.015747232, + -0.013935964, + 0.020059137, + -0.009198276, + -0.0097254375, + -0.010252598, + 0.0026391821, + 0.0025935625, + -0.026817605, + 0.0026459408, + 0.01337501, + -0.001041649, + 0.024425108, + -0.0143279545, + -0.005612909, + -0.01037425, + 0.006386753, + 0.028412605, + -0.009421306, + -0.013706176, + 0.00036094448, + -0.027817858, + -0.037333783, + -0.006292135, + 0.0106107965, + -0.01284785, + -0.014017065, + 0.0043997634, + -0.0048863734, + 0.018315451, + -0.011604291, + -0.0026915604, + 0.026344514, + -0.004176734, + 0.021748753, + -0.016801555, + 0.015963504, + 0.0100092925, + -0.014733463, + -0.0010450283, + -0.00079707697, + -0.016152741, + -0.018883163, + 0.009637577, + 0.019491425, + -0.011469122, + -0.02675002, + -0.0045856214, + 0.009002281, + -0.014422573, + -0.0040246686, + 0.04322717, + 0.019085918, + -0.0059846244, + -0.015287657, + 0.0037982597, + -0.010725691, + 0.020897187, + -0.0024347384, + -0.009914674, + -0.0074951425, + -0.013949481, + 0.0018822337, + -0.0016144293, + -0.009157726, + 0.013746726, + 0.018612824, + -0.015017319, + 0.005646701, + -0.014165752, + 0.018815579, + 0.0039266706, + -0.012949227, + 0.016058123, + 0.010401284, + 0.0079209255, + 0.020194305, + 0.018247867, + -0.0013145222, + 0.016531216, + 0.008306159, + 0.029710231, + -0.013537214, + -0.019045366, + -0.001580637, + 0.0036326773, + 0.015436344, + -0.005822421, + 0.004578863, + 0.0014370196, + -0.03757709, + -0.0011261299, + 0.015476895, + 0.0034518882, + 0.004420039, + 0.0047444454, + -0.024479175, + -0.022965278, + 0.0041091493, + 0.00016452649, + -0.01006336, + -0.0015400861, + -0.0075019007, + -0.007434316, + -0.004825547, + 0.019045366, + -0.01205035, + -0.014706429, + 0.021546, + 0.016693419, + -0.008495396, + 0.000274774, + 0.009630819, + 0.0057818703, + -0.0016085156, + 0.0047714794, + -0.014138717, + -0.006238067, + 0.014246853, + -0.009542959, + 0.00042916278, + -0.020464644, + 0.005400017, + 0.043416407, + 0.025817353, + 0.013456112, + 0.025749767, + -0.030169807, + -0.0017960632, + -0.030791586, + -0.026087692, + 0.018288417, + 0.024884684, + 0.02666892, + 0.004626172, + -0.016301427, + 0.021126974, + 0.02339782, + -0.019477908, + -0.006940948, + -0.022221847, + -0.04182141, + -0.01108389, + 0.0039942553, + -0.01841007, + -0.024384556, + -0.018802062, + -0.0140981665, + -0.005136437, + 0.007630312, + 0.00067120045, + 0.0045315535, + 0.0056872517, + 0.022681423, + -0.00035650926, + 0.010577004, + -0.031197093, + -0.0070085325, + 0.0064171664, + -0.019545494, + -0.036090225, + -0.019207569, + -0.016517699, + 0.014679395, + -0.0015721889, + -0.020694433, + -0.016450115, + 0.013618316, + -0.034143787, + -0.0062177917, + -0.027142012, + 0.01258427, + 0.019761764, + 0.0005677114, + 0.010955479, + -0.0077722394, + -0.008704908, + 0.011685393, + -0.01443609, + 0.0073802485, + 0.012151727, + -0.023641124, + 0.0256957, + 0.019180536, + -0.021464897, + -0.008258849, + 0.012523443, + 0.005704148, + -0.0072721126, + -0.007420799, + -0.01103658, + 0.00084692065, + 0.009820056, + -0.013091154, + -0.008745459, + 0.022667905, + 0.017950494, + -0.045633186, + 0.0010264425, + -0.0039773593, + -0.006940948, + -0.0042882487, + -0.01258427, + 0.009907916, + 0.005815663, + 0.010806792, + -0.02710146, + -0.0134425955, + -0.0033674072, + -0.010766242, + 0.013037087, + 0.0039874967, + 0.004220664, + 0.009617302, + 0.0071369433, + -0.0021508827, + -0.0138143115, + -0.002586804, + -0.030899722, + -0.01108389, + 0.012077385, + -0.00856298, + -0.012509926, + -0.014246853, + 0.010340458, + -0.037982598, + -0.015355242, + 0.0033606489, + -0.0014370196, + -0.035117008, + 0.020802569, + 0.013037087, + -0.023330236, + -0.0050012674, + 0.0038388106, + -0.009455099, + -0.0063056517, + -0.021478415, + 0.008968488, + -0.03133226, + -0.010441835, + -0.0039976346, + 0.0031156542, + -0.024087185, + -0.00856298, + -0.0029720368, + -0.011185266, + -0.013449354, + 0.21756864, + -0.00763707, + -0.0062887557, + 0.021708203, + -0.014909183, + 0.035171073, + 0.028601842, + -0.00057911634, + -0.0031122752, + 0.0024431867, + -0.015341725, + -0.011320436, + 0.007359973, + -0.0031511362, + 0.0016693419, + -0.03576582, + -0.022911211, + -0.027898962, + -0.028574808, + -0.02057278, + 0.032062177, + -0.009441582, + 0.014517192, + -0.007745206, + 0.026506716, + 0.0058697304, + -0.018018078, + 0.015963504, + 0.02039706, + 0.025601082, + 0.017517952, + 0.014517192, + -0.0041699754, + 0.015625581, + -0.0023722227, + 0.012854609, + 0.0024617724, + -0.0026037002, + 0.024776548, + 0.014814565, + 0.009178001, + -0.019045366, + -0.021140492, + -0.0015882403, + -0.017842358, + 0.018747993, + -0.009279378, + 0.0015890851, + -0.0298454, + 0.025790319, + -0.038712513, + -0.0055655995, + 0.020315958, + 0.031467434, + 0.014287404, + -0.00543043, + 0.020099688, + -0.009015798, + -0.0016668075, + -0.002608769, + -0.014354989, + 0.026479682, + -0.012550477, + 0.037766326, + -0.007170736, + -0.00026062346, + -0.014409056, + -0.0023384304, + 0.011685393, + -0.002529357, + 0.027479935, + 0.0027287318, + -0.00018659711, + -0.034143787, + -0.021532483, + -0.021518966, + 0.04206471, + 0.024289938, + 0.016747486, + 0.01682859, + 0.003832052, + 0.004737687, + 0.006940948, + 0.015368759, + -0.013577765, + -0.014314438, + -0.008225057, + 0.00068767427, + 0.01002281, + -0.015571513, + 0.011759737, + -0.005285123, + -0.0027912478, + -0.015787784, + 0.00012355327, + 0.010347216, + 0.0007434316, + 0.007954719, + -0.006467855, + 0.015044352, + -0.025574047, + 0.0073261806, + 0.005893385, + -0.0051330575, + -0.006961223, + 0.004071978, + -0.0019836107, + 0.0030092085, + -0.006900397, + 0.0013770381, + -0.0077384473, + -0.010928445, + -0.00042219312, + -0.0039976346, + 0.00008706809, + -0.005974487, + -0.005589254, + -0.020478161, + 0.024492692, + -0.033873446, + 0.020586297, + -0.014706429, + -0.014652361, + 0.014409056, + -0.014503675, + -0.015463377, + -0.006481372, + -0.019045366, + -0.018612824, + -0.036847174, + 0.026722988, + -0.025628116, + 0.020613331, + -0.0030058292, + 0.0028571428, + 0.0086643575, + -0.012604545, + 0.006025175, + -0.005014784, + -0.0082926415, + 0.010745966, + -0.012719439, + 0.02631748, + 0.005427051, + -0.001880544, + 0.003448509, + 0.018139731, + 0.015260624, + -0.010712174, + 0.015449861, + -0.0066030244, + -0.025925487, + -0.0037272957, + 0.015882403, + 0.023289684, + 0.00018469628, + -0.013483146, + -0.021708203, + 0.010299907, + 0.019139985, + -0.033062432, + -0.013800794, + 0.04790403, + 0.0032085832, + -0.019450875, + -0.014300921, + -0.1757202, + 0.015030836, + 0.024722481, + -0.026966292, + 0.025925487, + 0.028764045, + 0.00441328, + -0.017112443, + -0.0037779843, + 0.008394019, + 0.03452226, + 0.017896427, + -0.01695024, + -0.008914421, + -0.0024448761, + -0.0035448172, + -0.000100849036, + 0.017017825, + 0.017044859, + 0.0065185437, + 0.025803836, + -0.015706683, + 0.008218299, + -0.0038962576, + -0.02635803, + 0.03262989, + -0.010293148, + 0.0052378136, + 0.0043456955, + -0.0033217876, + -0.0095362, + 0.0011050097, + 0.013767002, + 0.02887218, + 0.01673397, + 0.019748246, + -0.00251584, + -0.011861114, + -0.014354989, + 0.018139731, + -0.009022556, + 0.0003429923, + 0.009860607, + -0.0033302356, + -0.011793529, + 0.018639859, + 0.0145577425, + -0.0044605895, + 0.0056061503, + -0.009637577, + 0.03284616, + -0.025668666, + 0.016666384, + 0.01854524, + 0.016166259, + 0.018626342, + 0.023168033, + 0.004582242, + 0.005143195, + -0.019329222, + -0.019045366, + 0.0078601, + 0.0034603362, + -0.005345949, + -0.017342232, + -0.02715553, + -0.009326687, + 0.021532483, + -0.016490664, + 0.008164231, + 0.0027354904, + -0.008860353, + 0.014354989, + -0.028115232, + 0.022830108, + -0.008975247, + 0.0056230463, + 0.02914252, + 0.012158486, + -0.0022133987, + -0.029061418, + 0.03395455, + -0.014449608, + -0.009117175, + 0.009428064, + 0.01337501, + 0.012753231, + 0.004132804, + -0.035468448, + -0.016544733, + 0.022329982, + -0.019194052, + 0.014530709, + -0.02697981, + -0.0038388106, + 0.01068514, + -0.017909944, + 0.03235955, + -0.014909183, + -0.0005427896, + -0.0040314267, + -0.015963504, + -0.021789305, + 0.020937737, + 0.010806792, + 0.016409563, + 0.0035617133, + 0.019937484, + 0.018247867, + -0.008576497, + -0.0068497085, + 0.0029281068, + 0.009651094, + 0.008319676, + -0.023843879, + 0.015612064, + 0.02573625, + -0.009373996, + 0.016842104, + -0.0056940103, + 0.032305483, + -0.0004671792, + 0.006927431, + 0.011185266, + -0.0074410746, + -0.028358538, + -0.07585706, + 0.0118678715, + -0.0029855538, + 0.008542705, + -0.010941962, + 0.04387598, + 0.016517699, + 0.03711751, + -0.0091239335, + 0.022897694, + -0.0053628455, + -0.009245586, + 0.00033665626, + -0.0074681086, + 0.03290023, + -0.010408043, + -0.0016921518, + -0.007346456, + -0.0029179691, + 0.022681423, + -0.0060217963, + -0.027033877, + -0.0016262566, + 0.0027321111, + -0.018396553, + 0.010421559, + -0.023735743, + 0.02962913, + 0.023127481, + 0.011665118, + -0.0046329307, + -0.007846583, + 0.020288924, + -0.025817353, + -0.039820902, + 0.0140981665, + -0.024830615, + 0.0025682184, + 0.026898708, + -0.029926501, + -0.0070220493, + 0.00010385866, + 0.00242798, + -0.007968235, + -0.015774267, + -0.005558841, + -0.014125201, + 0.01527414, + 0.0140981665, + -0.009009039, + -0.016679902, + -0.012104418, + 0.014882149, + -0.021600068, + 0.028493706, + 0.0030210358, + 0.010299907, + 0.016436597, + -0.046768606, + 0.002816592, + 0.00927262, + 0.012597786, + -0.015747232, + 0.013523697, + 0.031115992, + 0.0241007, + -0.022492185, + -0.029791333, + 0.023262652, + -0.008880628, + 0.00037087098, + 0.016341979, + -0.006106277, + -0.0062346878, + -0.01757202, + -0.021072907, + -0.016896173, + -0.011671877, + 0.016382528, + -0.018004563, + 0.0012942469, + -0.034900736, + 0.005568979, + 0.0059001436, + -0.0054676016, + 0.026939258, + 0.015368759, + -0.008238574, + 0.015517445, + -0.016666384, + -0.003585368, + 0.009907916, + 0.022478668, + -0.030413112, + -0.022140745, + 0.0314404, + 0.019613078, + 0.00095463375, + 0.010036327, + 0.0097795045, + -0.005041818, + -0.027520487, + -0.095267385, + 0.01872096, + 0.012530202, + -0.0006243136, + 0.0061434484, + -0.017544987, + 0.04038861, + -0.008556222, + 0.0122733805, + -0.011300161, + -0.057906564, + 0.006538819, + -0.013652108, + -0.014273887, + -0.024654895, + -0.027953029, + 0.03903692, + 0.012003041, + 0.006089381, + 0.0076573454, + 0.016869139, + 0.011009546, + 0.007312664, + -0.0008621272, + -0.026777055, + 0.010225564, + -0.0082994, + 0.024560276, + -0.009549717, + 0.0006733125, + -0.009029315, + -0.046173863, + 0.017680155, + 0.026303962, + -0.007332939, + -0.019491425, + -0.006873363, + 0.013449354, + 0.010779758, + 0.03682014, + -0.04509251, + 0.012111177, + 0.022248881, + -0.0052209175, + -0.004122666, + -0.01099603, + 0.019018332, + 0.008116921, + 0.026020106, + 0.009211794, + 0.0027963165, + 0.02406015, + 0.0051905042, + -0.0050350595, + -0.0035110246, + -0.03773929, + 0.023614092, + -0.009063107, + -0.004686998, + 0.007988511, + 0.014030582, + 0.004247698, + 0.01143533, + 0.012016558, + 0.025155023, + -0.011225818, + -0.014814565, + 0.0043152827, + 0.020545747, + -0.016815072, + -0.018856129, + 0.01218552, + -0.003818535, + 0.0134425955, + 0.009029315, + -0.0029940018, + 0.010766242, + -0.0063495818, + -0.028115232, + 0.021478415, + -0.00014330067, + -0.0018129593, + -0.031494465, + 0.01823435, + 0.026858157, + -0.012908677, + -0.024019599, + -0.02962913, + 0.000034927558, + 0.02269494, + -0.015220073, + 0.0045011407, + 0.010543212, + 0.010455352, + -0.005058714, + 0.013429078, + -0.010786517, + -0.019085918, + 0.03184591, + 0.02485765, + 0.0052918815, + -0.001196249, + -0.005663597, + -0.03208921, + -0.009279378, + 0.014463124, + -0.033630144, + -0.018707443, + 0.026479682, + 0.015787784, + 0.009259103, + 0.020153755, + 0.00041374503, + 0.019951, + 0.0064205457, + 0.010103911, + -0.007576244, + -0.03249472, + -0.02357354, + 0.018612824, + 0.0134425955, + 0.024438625, + 0.0031207232, + -0.014706429, + 0.0024178424, + -0.011678635, + 0.014368505, + -0.024006082, + 0.006450959, + -0.013949481, + 0.004071978, + 0.010097153, + -0.000086487285, + 0.0026374925, + -0.0042443187, + -0.0023519474, + 0.0017293233, + 0.010441835, + -0.024127735, + 0.034414124, + 0.005200642, + 0.014030582, + 0.0091239335, + -0.01509842, + 0.0265743, + -0.0047782375, + 0.008535947, + 0.004997888, + -0.04025344, + -0.0056433217, + -0.0014277266, + 0.0011117682, + -0.02843964, + -0.028277434, + -0.0074816253, + -0.011266368, + 0.019356256, + -0.005288502, + -0.013050604, + 0.038712513, + -0.00058840925, + 0.008319676, + 0.021424348, + -0.02339782, + 0.0021069527, + 0.020640366, + 0.005751457, + 0.008657599, + -0.038712513, + 0.00944834, + 0.018802062, + -0.018666891, + -0.013821069, + -0.008867112, + -0.0101512205, + -0.016652867, + -0.004247698, + -0.0066030244, + 0.01319929, + -0.009772747, + 0.020451128, + -0.024654895, + -0.0011007857, + 0.039793868, + -0.0051330575, + -0.0133006675, + 0.010570246, + -0.022586804 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.019221356, + 0.0036138783, + -0.007965014, + -0.0067472225, + -0.024066191, + 0.013718256, + -0.00505548, + -0.01043351, + 0.0065530343, + -0.04420912, + 0.015508738, + 0.0044893716, + 0.012171331, + -0.031412434, + -0.014574001, + -0.018997546, + 0.02109083, + -0.020788029, + -0.0024273545, + -0.024145182, + 0.0010812012, + -0.012987581, + -0.014258034, + -0.014073719, + -0.020603715, + 0.013757751, + 0.0028387704, + -0.028753042, + 0.009880567, + -0.0032534779, + 0.02904268, + -0.0067735533, + -0.009307876, + -0.030490864, + -0.008037423, + -0.019642645, + -0.035230376, + -0.00874835, + -0.020630045, + -0.028489737, + 0.009742331, + -0.017575692, + -0.0019023876, + 0.0013996373, + -0.007563472, + 0.008491627, + -0.006510247, + -0.010644155, + -0.004374175, + 0.00862328, + 0.011348499, + 0.012809849, + -0.034809086, + -0.009900315, + 0.0029523212, + 0.010736313, + -0.019274017, + -0.006329224, + -0.0033538633, + -0.011809285, + 0.0025985036, + 0.0050521884, + -0.032544654, + 0.013810413, + -0.009413199, + -0.0071750954, + -0.029569292, + -0.005197007, + -0.020235086, + -0.004663812, + 0.026054153, + 0.030543525, + -0.0048382524, + -0.030227557, + 0.010525667, + 0.0027087631, + -0.01702275, + 0.005789446, + -0.0062436494, + -0.0027169914, + 0.029937921, + -0.025567036, + 0.018233957, + 0.002512929, + 0.035572674, + 0.016956922, + -0.011282673, + 0.012842762, + -0.0035348863, + -0.015324424, + 0.018984381, + 0.012934919, + 0.0049139527, + 0.015495572, + -0.023486918, + -0.030675178, + 0.0009191034, + 0.04434077, + -0.0020291037, + -0.036020294, + -0.006832797, + 0.012625535, + 0.0066682305, + -0.0084258, + -0.008807594, + 0.02128831, + 0.01811547, + 0.0011494963, + 0.015008456, + -0.0037027441, + 0.0133759575, + 0.031149128, + -0.0011708899, + -0.04426178, + -0.018444603, + -0.019432, + 0.03243933, + -0.009465859, + -0.014429183, + -0.026804576, + 0.016127508, + 0.027673487, + 0.01209234, + -0.0064641684, + 0.023895042, + -0.005187133, + -0.014442348, + -0.0035381778, + 0.021696435, + -0.01092721, + 0.028805703, + -0.000857391, + 0.0066254437, + -0.0017197189, + -0.021577947, + 0.018273454, + -0.017615188, + -0.0025902751, + -0.0048119216, + -0.013744586, + 0.014416017, + 0.015087448, + -0.013836743, + 0.025145747, + -0.0012210828, + 0.018839562, + 0.019589985, + -0.00042129, + 0.01957682, + -0.0073989057, + 0.013468115, + -0.030464534, + 0.009860819, + 0.005628171, + 0.0079321, + -0.00002769344, + 0.021617442, + 0.028042115, + -0.002312158, + 0.014284364, + -0.004792174, + 0.003060935, + 0.0158642, + -0.024158347, + -0.0265676, + 0.009274962, + 0.018984381, + 0.00787944, + 0.0052200463, + -0.0061909882, + -0.013468115, + 0.01179612, + -0.025619699, + 0.014968961, + -0.0010984808, + 0.020156093, + -0.00038343974, + 0.0022232921, + -0.016180169, + -0.019050207, + -0.0072475043, + -0.018997546, + 0.01516644, + 0.020932848, + 0.0061547835, + -0.028621389, + 0.0019451749, + 0.009090648, + 0.008978743, + -0.014218537, + 0.013784082, + 0.04183936, + 0.014942629, + 0.014600332, + -0.6736427, + -0.040312186, + 0.000431164, + -0.013277218, + 0.028753042, + 0.015126944, + 0.022446858, + -0.0015321132, + -0.009228884, + 0.01224374, + -0.016193334, + 0.014310694, + 0.0010392369, + -0.0006257637, + 0.0054274, + -0.024053026, + 0.0031086593, + -0.0096830875, + 0.016469806, + -0.0012836179, + -0.0061909882, + 0.013290383, + -0.017430874, + 0.008307312, + 0.026620261, + -0.024105687, + 0.002277599, + -0.02446115, + -0.01273744, + 0.04162872, + -0.012941502, + 0.048658993, + 0.03451945, + -0.004943575, + 0.042787265, + -0.014863637, + -0.0048777484, + 0.03754747, + 0.022762826, + 0.05397778, + -0.005786155, + -0.012691361, + 0.006177823, + -0.009005073, + -0.0030197934, + -0.01288884, + 0.032228686, + -0.032886952, + 0.014679323, + -0.015535069, + 0.0120660085, + -0.02446115, + -0.0158642, + 0.010861383, + -0.0043215137, + 0.0062173186, + 0.019945448, + -0.011223429, + -0.0026445822, + 0.0011503191, + 0.0012432992, + 0.014955794, + -0.002351654, + -0.0156008955, + -0.0024849528, + 0.0016341445, + -0.038548034, + -0.01729922, + 0.0031432183, + -0.015679887, + 0.016588293, + 0.028147439, + -0.007517393, + 0.0014317278, + 0.011032532, + 0.027726147, + 0.009623843, + -0.008320478, + -0.008537705, + -0.02218355, + -0.003992381, + 0.018181296, + -0.0136919245, + -0.017259724, + 0.00014378989, + -0.038416382, + -0.032965943, + 0.025619699, + 0.009900315, + -0.0071750954, + 0.018971216, + 0.014613497, + 0.0022035441, + 0.022565346, + -0.0030428327, + 0.0129809985, + -0.003179423, + 0.004854709, + 0.0069578676, + -0.03157042, + -0.010229448, + -0.0031942339, + -0.005940847, + -0.011453822, + 0.0127440225, + -0.014613497, + -0.030490864, + -0.0042392304, + 0.038442712, + -0.014889969, + 0.028963687, + -0.010604659, + -0.023855546, + -0.0016423727, + 0.013639264, + -0.02047206, + 0.02572502, + -0.010630989, + 0.03451945, + -0.019668976, + 0.013277218, + 0.0069578676, + 0.0246323, + 0.0053319517, + -0.0029572584, + 0.014982126, + 0.0022232921, + -0.00054841756, + -0.0065267035, + -0.012987581, + 0.00051015586, + 0.018233957, + -0.016733112, + -0.012711109, + 0.012474134, + -0.0064115073, + 0.0027350937, + 0.0014638181, + 0.023565909, + -0.013106069, + -0.048237704, + -0.020985508, + -0.006230484, + 0.0039594676, + -0.0100451335, + -0.021920245, + -0.0016917427, + 0.0023993782, + -0.010703399, + 0.008438965, + -0.004344553, + -0.0032370212, + -0.013560272, + 0.013955231, + -0.016680451, + -0.0035546343, + 0.011677632, + -0.009847654, + -0.020564217, + 0.00579932, + 0.009873984, + 0.014468678, + -0.030701509, + -0.00308562, + 0.003531595, + -0.010005637, + 0.005644628, + 0.003531595, + 0.02215722, + -0.015653556, + -0.023631737, + -0.027647156, + -0.017154401, + 0.02954296, + -0.0027844636, + -0.008735185, + 0.005206881, + -0.0034460204, + 0.016746277, + -0.0069578676, + -0.0033193044, + -0.0032567692, + -0.03615195, + 0.009873984, + 0.027594496, + -0.012869093, + 0.013836743, + 0.014982126, + -0.004713182, + 0.0073594097, + -0.017694179, + 0.0340455, + 0.01095354, + 0.0028683925, + 0.010933792, + -0.013744586, + 0.017351883, + 0.011901442, + -0.0020373322, + 0.01980063, + 0.022065064, + -0.0078070303, + 0.006520121, + -0.033360902, + 0.026027823, + -0.022012403, + 0.0010589848, + -0.008195407, + 0.009821323, + -0.009834488, + 0.0116249705, + -0.012632118, + -0.01452134, + -0.0033176588, + -0.005197007, + 0.02091968, + 0.0053286604, + 0.009992472, + 0.0051015588, + 0.009511938, + 0.01918186, + -0.029569292, + 0.018892223, + -0.022828652, + -0.004433419, + -0.0027449676, + 0.014402851, + 0.029727275, + 0.0025688815, + 0.0005064531, + -0.036494248, + -0.01578521, + -0.006990781, + -0.002958904, + 0.0004784768, + -0.011434074, + 0.0011700671, + -0.023500083, + 0.01727289, + 0.004453167, + 0.02322361, + -0.0053681564, + 0.019458331, + -0.0119936, + 0.009103813, + -0.01107861, + 0.035651665, + -0.00025980923, + -0.017825833, + 0.028674051, + -0.01937934, + -0.018892223, + -0.008188824, + 0.008616697, + 0.0037850274, + -0.01105228, + 0.004301766, + 0.0143238595, + -0.0011338625, + 0.036072955, + 0.016311822, + 0.0018233957, + 0.0014885032, + -0.0079781795, + 0.0073396615, + -0.007293583, + 0.017786337, + -0.009228884, + 0.003521721, + -0.005177259, + -0.012829597, + 0.0031958795, + -0.007984762, + -0.0055590533, + 0.0055623446, + -0.009228884, + -0.01606168, + -0.0040285857, + 0.013389123, + -0.000023720704, + 0.0019534032, + -0.04347186, + 0.012039678, + -0.009097231, + -0.008702272, + -0.014495009, + -0.022736495, + -0.0049304096, + -0.018523594, + 0.030569855, + 0.010170204, + 0.009841071, + -0.007451567, + -0.0072540874, + -0.012072591, + -0.010163621, + 0.018826397, + -0.028937357, + -0.019023877, + 0.0033867767, + 0.008346808, + -0.007945266, + 0.015324424, + -0.02044573, + 0.03625727, + -0.009037987, + -0.0035447604, + -0.018944884, + -0.0015938256, + -0.003943011, + 0.01030844, + -0.0061514922, + -0.01338254, + 0.016509302, + -0.004170113, + -0.0028058572, + -0.025145747, + 0.0059210993, + 0.013310131, + 0.0017081993, + -0.0181418, + -0.01606168, + -0.023855546, + -0.021275144, + 0.075937524, + -0.008853673, + 0.018523594, + 0.011822451, + 0.014797811, + 0.0104400925, + -0.0120660085, + -0.0158642, + -0.003531595, + -0.011124689, + 0.0035941303, + 0.0005315495, + 0.0029572584, + 0.00066978525, + 0.0017213646, + -0.0223547, + -0.0074054883, + -0.016272327, + 0.007234339, + -0.015113778, + 0.013547107, + 0.006753805, + -0.008629862, + 0.038100414, + 0.008234903, + 0.017430874, + 0.008511375, + 0.035704326, + 0.02577768, + -0.0127769355, + -0.0035447604, + 0.03675755, + -0.020063937, + 0.008991908, + -0.0012013348, + -0.0007475429, + 0.032623645, + 0.013955231, + -0.018813232, + 0.0032386668, + 0.005424109, + 0.017983817, + 0.02039307, + -0.009314459, + 0.014863637, + -0.014863637, + 0.00021023359, + 0.010512502, + -0.0061416184, + -0.000029621953, + 0.036915537, + 0.022762826, + -0.026909899, + -0.0143238595, + -0.016088013, + 0.034782756, + 0.009360537, + -0.0057137455, + 0.01105228, + 0.0040252944, + -0.0022446858, + -0.02292081, + 0.0073659923, + -0.0129020065, + -0.028884696, + -0.033913843, + -0.0063983416, + -0.019708473, + -0.026778245, + 0.000012953176, + 0.0053615733, + -0.017615188, + -0.02215722, + 0.009933229, + 0.022473188, + -0.0034558945, + 0.020287747, + -0.032807957, + -0.0036731223, + 0.021893915, + 0.009426364, + -0.03117546, + -0.011894859, + -0.0052233376, + -0.0068525453, + 0.018918553, + 0.025409052, + -0.02091968, + -0.018497264, + -0.0029128254, + 0.0265676, + 0.0075766374, + 0.008169076, + -0.0016563609, + -0.023355264, + 0.0060428786, + 0.018273454, + 0.026449112, + -0.013422036, + -0.016733112, + 0.025330061, + 0.00009375143, + 0.007392323, + -0.0031168878, + 0.01682527, + -0.0012646929, + 0.015614061, + 0.0040779556, + -0.008307312, + 0.00032584148, + 0.04834303, + -0.021670105, + 0.010920627, + -0.00078292465, + -0.022565346, + 0.020748531, + 0.016193334, + 0.03375586, + -0.0074384017, + -0.010473006, + 0.003551343, + -0.022710163, + 0.025119416, + 0.023210445, + 0.006971033, + -0.03154409, + 0.008195407, + -0.009827905, + -0.007155347, + -0.016640956, + -0.019524159, + 0.015311258, + -0.00916964, + -0.020458896, + -0.046947505, + -0.0056117144, + -0.02342109, + 0.0168516, + -0.01273744, + -0.02064321, + -0.0018579547, + -0.00014049857, + 0.004779008, + 0.006088957, + -0.010301857, + -0.016719947, + 0.0117500415, + 0.0037586966, + -0.00025919208, + 0.0028058572, + 0.014639827, + 0.020063937, + -0.0021130326, + 0.008906334, + -0.0034756425, + -0.035388358, + -0.020880185, + -0.011256342, + 0.009577765, + 0.00864961, + 0.020735366, + 0.02544855, + 0.018049642, + -0.010986453, + -0.01244122, + 0.0024635592, + -0.021235649, + -0.00031411613, + -0.016311822, + 0.00914331, + 0.01625916, + 0.027857801, + -0.022762826, + -0.007997927, + -0.008366556, + 0.024987763, + -0.011190516, + -0.014481843, + -0.011651302, + -0.03907465, + -0.0026248342, + -0.0064049247, + 0.0016004083, + -0.0037652794, + 0.006289728, + -0.002081765, + 0.022091394, + -0.014402851, + -0.009742331, + -0.013448367, + 0.019142365, + 0.003380194, + 0.019484662, + 0.008491627, + -0.0032633517, + -0.010038551, + -0.023763388, + 0.004351136, + -0.0047987564, + 0.0002133192, + 0.008109832, + -0.021051334, + 0.00520359, + -0.0019484663, + 0.0052990383, + 0.03446679, + 0.008188824, + -0.013797248, + 0.008873421, + -0.012566291, + -0.031149128, + -0.017088575, + -0.015324424, + -0.025659194, + 0.007813613, + 0.03117546, + -0.0018694743, + 0.040233195, + -0.023263106, + -0.016088013, + 0.014942629, + -0.008208572, + 0.022460023, + 0.006911789, + 0.04581529, + 0.010604659, + -0.0048876223, + -0.021340972, + -0.011987017, + -0.015442912, + -0.0077280384, + -0.006148201, + 0.0102097, + 0.0019369465, + -0.03615195, + 0.008465296, + 0.02485611, + -0.010288692, + -0.008807594, + 0.024553308, + 0.0030494155, + -0.0042820177, + -0.018707909, + -0.016561963, + -0.0036764136, + 0.022446858, + -0.02668609, + -0.01296125, + -0.0052002985, + -0.0128230145, + -0.008445548, + 0.010492754, + -0.025066756, + 0.0035645084, + 0.023236776, + -0.02698889, + 0.008866838, + -0.019142365, + -0.014192207, + 0.0008812531, + -0.001876057, + 0.029148001, + 0.0027729438, + 0.00617124, + -0.013428618, + 0.014810977, + -0.002777881, + 0.0064246724, + -0.020630045, + 0.025830343, + -0.012276654, + -0.020287747, + -0.006898624, + -0.008175659, + 0.009966142, + 0.0054043606, + -0.0045157024, + -0.006421381, + -0.021788592, + -0.0028700382, + 0.036915537, + 0.0102097, + -0.018220792, + -0.01679894, + -0.005325369, + -0.019366175, + -0.010946957, + -0.0041371994, + -0.019313512, + -0.023486918, + -0.018457768, + -0.010881131, + 0.00308562, + 0.014508175, + -0.0045025367, + -0.005980343, + 0.02109083, + 0.011493318, + -0.027568163, + 0.018879058, + 0.02059055, + 0.023881877, + -0.004897496, + 0.020261416, + -0.005851981, + -0.01477148, + 0.011605223, + 0.0025639446, + -0.00039681073, + -0.027647156, + 0.020090267, + 0.019247686, + 0.0168516, + 0.023355264, + 0.029305985, + -0.026370121, + 0.0015855973, + -0.031149128, + -0.02213089, + 0.00021599341, + 0.010525667, + 0.004867874, + 0.02448748, + -0.030569855, + 0.014824142, + 0.028331753, + -0.020340407, + 0.007675377, + -0.027594496, + -0.01283618, + 0.007102686, + -0.0035184298, + -0.007971597, + -0.023131454, + -0.016469806, + 0.005516266, + -0.0032057536, + 0.004963323, + 0.00080267264, + 0.0005689883, + 0.0024668504, + 0.03035921, + -0.0150479525, + 0.0008861901, + -0.010551997, + -0.019129198, + -0.01117735, + 0.0018612461, + -0.03199171, + -0.023802884, + -0.01169738, + 0.01679894, + 0.008544288, + -0.028911026, + -0.04170771, + -0.00034332665, + -0.022249378, + -0.0010556935, + -0.021512121, + 0.0074054883, + 0.02213089, + -0.008735185, + 0.010940375, + 0.018576255, + 0.006230484, + 0.0126189515, + -0.015350754, + -0.024303166, + 0.007971597, + -0.016575128, + 0.04299791, + 0.000023245004, + -0.022960305, + -0.022051899, + 0.030464534, + 0.013402288, + 0.0052792905, + 0.0038278145, + -0.03199171, + 0.006760388, + -0.010328188, + -0.0028338335, + -0.005578801, + 0.0009520167, + 0.006760388, + -0.038916662, + 0.008261234, + 0.0013222911, + -0.012803267, + -0.005697289, + 0.009873984, + 0.0014193852, + 0.012079174, + 0.025790848, + -0.016548797, + -0.026383286, + 0.0045157024, + -0.019221356, + 0.005489935, + 0.0000777062, + -0.0070961034, + 0.009617261, + -0.01276377, + -0.018036477, + -0.023078792, + 0.014731985, + -0.025685525, + -0.013797248, + 0.011302421, + 0.0033571546, + -0.014258034, + -0.01918186, + 0.003913389, + -0.022723328, + 0.008307312, + 0.0013247596, + -0.03401917, + -0.0030905572, + 0.017417708, + 0.010802139, + -0.013520776, + -0.02342109, + 0.004973197, + 0.0084521305, + 0.011565727, + -0.007168513, + 0.019919118, + -0.024842944, + 0.0022578512, + -0.008656193, + -0.017773172, + -0.046921175, + -0.016351318, + 0.0039561763, + 0.00021002788, + 0.0056413366, + 0.23507982, + 0.0023549453, + -0.0056512104, + 0.03420348, + 0.009439529, + 0.035309367, + 0.012507047, + -0.006059335, + -0.011256342, + 0.01982696, + -0.0229998, + -0.0013823578, + -0.003281454, + -0.0046572294, + 0.012467551, + -0.024948267, + -0.023039296, + -0.022644337, + -0.03243933, + -0.013560272, + 0.017338717, + -0.005226629, + 0.001489326, + -0.010604659, + -0.003130053, + 0.020801194, + -0.026054153, + -0.0023944413, + 0.023328934, + 0.028805703, + 0.0076687946, + 0.011940938, + -0.0018447894, + 0.0073462445, + 0.009854237, + -0.002988526, + 0.02361857, + -0.0013510901, + 0.00052249833, + 0.005358282, + -0.023763388, + -0.0008664421, + 0.011835616, + -0.006352263, + 0.0051838416, + 0.0012745669, + 0.008801011, + 0.0067373486, + -0.0062864367, + 0.024290001, + -0.017365048, + 0.005888186, + 0.03249199, + 0.027752478, + 0.00022319319, + -0.00453545, + 0.029648283, + -0.019432, + -0.0073594097, + 0.00091334357, + -0.014705654, + 0.030885823, + -0.021841254, + 0.017259724, + -0.021393633, + -0.0061284527, + -0.030069573, + -0.000862328, + -0.0015066054, + -0.025935665, + 0.007997927, + -0.030517194, + -0.02109083, + -0.005907934, + -0.032281347, + -0.023434255, + 0.017509865, + 0.010802139, + 0.012842762, + 0.02909534, + -0.015074283, + 0.006421381, + -0.00007791191, + 0.009709418, + -0.00083147176, + -0.019537324, + 0.007675377, + 0.0021821505, + 0.0040680817, + -0.0112760905, + 0.0030773918, + -0.02059055, + -0.0009799929, + -0.030464534, + -0.0019846708, + -0.0014531213, + -0.011190516, + 0.014705654, + 0.0034756425, + 0.0046901423, + -0.010380849, + -0.001915553, + 0.020735366, + 0.010894296, + -0.0070171114, + -0.0100451335, + 0.026580766, + -0.00047971107, + -0.0022216465, + -0.022288874, + -0.009505356, + -0.031860057, + 0.007622716, + -0.010644155, + -0.0027416763, + 0.0155219035, + -0.010881131, + -0.014982126, + 0.009702835, + -0.01053225, + 0.030464534, + -0.02693623, + -0.015693052, + -0.00041018176, + -0.017549362, + -0.013250887, + 0.017259724, + -0.019695308, + -0.0037652794, + -0.042050008, + 0.017391378, + 0.010466424, + 0.022499518, + -0.009340789, + 0.013244304, + 0.016509302, + 0.000004605931, + -0.011842199, + -0.0069183717, + 0.00055623444, + 0.009149892, + -0.00929471, + 0.01937934, + 0.016298657, + -0.011769789, + -0.013211391, + 0.01603535, + 0.0007997927, + -0.013171895, + 0.020998674, + -0.0025392596, + -0.035520013, + -0.015943194, + -0.009538269, + 0.039522268, + -0.0030823287, + -0.023328934, + 0.00369287, + 0.014810977, + 0.013626099, + -0.03209703, + -0.0029967541, + 0.016601458, + -0.032176025, + -0.03828473, + -0.008583784, + -0.17030647, + -0.007965014, + 0.009380285, + -0.031149128, + 0.013955231, + 0.0028042116, + 0.005878312, + 0.0029556127, + -0.010380849, + -0.0013659012, + 0.032413, + 0.017207064, + -0.010973288, + -0.035441022, + 0.0050719366, + -0.020169258, + -0.019432, + 0.006599113, + 0.024803448, + 0.0019747969, + 0.021577947, + -0.011124689, + 0.0027153457, + -0.0005368979, + -0.0026561017, + 0.03157042, + -0.009755497, + -0.008017675, + -0.0067735533, + -0.015666721, + -0.017259724, + 0.0035381778, + 0.015153275, + 0.024092522, + -0.004301766, + -0.0013823578, + -0.024579639, + -0.00919597, + -0.004522285, + 0.013560272, + -0.010848218, + 0.00803084, + 0.0009824614, + -0.01157231, + -0.0059869257, + 0.010802139, + 0.011282673, + -0.008866838, + -0.006056044, + -0.006572782, + 0.017970651, + -0.011842199, + 0.0012564645, + 0.019010711, + 0.022446858, + 0.00192049, + 0.0036237522, + 0.018102305, + 0.0132969655, + 0.0091301445, + -0.01876057, + -0.009505356, + 0.013981562, + -0.0026890151, + -0.020182423, + -0.011756624, + 0.008366556, + 0.022315204, + -0.02317095, + 0.01980063, + 0.0051476373, + 0.003712618, + -0.01747037, + -0.009452694, + 0.01960315, + -0.00079362147, + -0.009176223, + 0.03580965, + 0.0105980765, + -0.013211391, + -0.020774864, + 0.044525087, + -0.021275144, + 0.005977052, + 0.0022051898, + 0.026093649, + 0.0030066282, + -0.0076095504, + -0.01606168, + -0.021591112, + 0.01231615, + -0.008419218, + -0.0066089868, + -0.006984198, + 0.0009939811, + 0.0013988145, + -0.021670105, + 0.03831106, + -0.0012054489, + -0.000015813803, + -0.00014574412, + -0.014429183, + -0.007221174, + 0.022065064, + 0.01253996, + 0.018800067, + 0.016772607, + 0.016970087, + 0.0046802685, + 0.00016559495, + -0.027410181, + -0.009643591, + 0.011223429, + 0.006500373, + -0.012230575, + 0.0136919245, + 0.019037042, + -0.015298093, + 0.021591112, + 0.006483916, + 0.02128831, + -0.0132969655, + 0.013125816, + -0.0001234248, + -0.014363356, + -0.013448367, + -0.058822617, + -0.009472442, + 0.009419781, + 0.01727289, + -0.010782391, + 0.04839569, + 0.02091968, + 0.028358083, + -0.0082151545, + -0.003041187, + 0.0043708836, + -0.029990582, + 0.0022627881, + -0.00020848507, + 0.045393996, + 0.0010836698, + 0.011710545, + -0.00028531702, + 0.004094412, + 0.01957682, + -0.009841071, + -0.0037455314, + -0.014350191, + -0.013705091, + -0.0076292986, + 0.0022315204, + -0.0174967, + 0.008564035, + 0.015772045, + 0.01851043, + 0.02698889, + -0.0068130493, + 0.0005599372, + -0.013033659, + -0.004252396, + 0.005878312, + -0.022367865, + 0.005684124, + 0.0379161, + -0.029964251, + -0.0014539441, + 0.0057664067, + 0.0010647447, + -0.013705091, + -0.016601458, + -0.0008664421, + -0.021472625, + 0.019010711, + 0.03754747, + -0.020656375, + -0.019682143, + -0.003771862, + 0.00010809956, + -0.0084258, + 0.028647719, + -0.0015600895, + 0.020208754, + 0.00874835, + -0.025040423, + 0.007602968, + 0.01918186, + 0.006780136, + -0.0116710495, + 0.003972633, + 0.021419963, + 0.0015806603, + -0.015930029, + -0.026383286, + 0.020300912, + -0.0024997636, + -0.01305999, + -0.00023512426, + -0.010492754, + 0.0063983416, + -0.0106770685, + -0.034756426, + -0.020774864, + -0.006158075, + -0.0008236549, + -0.021999236, + 0.010670486, + -0.041102104, + -0.004637481, + 0.0011009492, + 0.0013025431, + 0.020551052, + 0.012263489, + -0.013277218, + 0.016088013, + -0.01288884, + 0.020169258, + 0.0053944867, + 0.03425614, + -0.03167574, + -0.009222302, + 0.029305985, + 0.005486644, + 0.02213089, + 0.0052134637, + 0.02086702, + -0.01519277, + -0.031781062, + -0.09600146, + 0.007221174, + 0.016522467, + -0.0017065536, + 0.007129017, + -0.017378213, + 0.020959178, + -0.0049995272, + 0.010512502, + -0.02059055, + -0.037758116, + 0.009261797, + -0.004005546, + -0.01980063, + -0.03151776, + -0.0017888368, + 0.028121108, + 0.01600902, + 0.017773172, + 0.02294714, + 0.015574564, + 0.0032732259, + 0.008392886, + -0.00049411063, + -0.03633626, + 0.011565727, + 0.0028535814, + 0.03170207, + -0.01224374, + 0.013053407, + 0.0015288219, + -0.026778245, + 0.015877366, + 0.03154409, + -0.014982126, + -0.010196535, + 0.004933701, + 0.014587166, + 0.018721074, + 0.03580965, + -0.034861747, + 0.0108350525, + 0.02002444, + -0.0059968, + -0.015679887, + 0.005233212, + 0.015574564, + 0.018233957, + 0.035362028, + -0.007793865, + 0.013402288, + 0.030622516, + -0.004170113, + -0.006559617, + -0.0077280384, + -0.03654691, + 0.010762643, + -0.0021969615, + -0.0050686453, + -0.010453258, + 0.02361857, + 0.01045984, + 0.01732555, + 0.007352827, + 0.014982126, + -0.007352827, + -0.017694179, + 0.007155347, + 0.01876057, + -0.0053418255, + -0.03459844, + 0.006161366, + 0.014337026, + 0.02901635, + 0.019853292, + -0.013448367, + -0.01598269, + -0.0099200625, + -0.019432, + 0.019339845, + 0.0040483335, + -0.019168695, + -0.0340455, + 0.021314641, + 0.028963687, + -0.010315022, + -0.012553126, + -0.015205936, + -0.009235467, + 0.034756426, + -0.005726911, + -0.009933229, + 0.012164748, + -0.00612187, + 0.019932283, + 0.03246566, + 0.006589239, + -0.01789166, + 0.035888642, + -0.0072870003, + 0.0023138036, + 0.016167004, + 0.013112651, + -0.0021574656, + -0.02339476, + 0.013560272, + -0.014113215, + -0.0217096, + 0.00916964, + 0.0014917945, + 0.006602404, + 0.008346808, + 0.009064318, + 0.028121108, + 0.0064345463, + 0.0040252944, + -0.016127508, + -0.02954296, + -0.01603535, + -0.0060922485, + 0.013836743, + 0.013586602, + 0.013652429, + -0.005506392, + 0.014995291, + -0.00966334, + 0.008208572, + -0.030648848, + 0.007826778, + 0.001890868, + 0.0050324406, + 0.0070566074, + -0.000534018, + -0.007115851, + -0.019129198, + 0.0075108106, + 0.012052843, + 0.011677632, + -0.0062568146, + 0.03617828, + 0.018194461, + -0.00322221, + 0.0031168878, + -0.0024717874, + 0.019260852, + 0.0057400763, + 0.012204245, + -0.0030839744, + -0.032202356, + 0.027410181, + -0.0021969615, + 0.013270635, + -0.014402851, + -0.01224374, + -0.026409617, + -0.0015329361, + 0.016693616, + -0.0034163985, + 0.0076095504, + 0.025514375, + -0.006266689, + 0.02002444, + 0.0073594097, + -0.011164185, + -0.009926646, + 0.026554435, + 0.0021327806, + 0.009518521, + -0.0156008955, + 0.013547107, + 0.0011050634, + -0.0252774, + -0.024763953, + 0.009623843, + 0.00852454, + -0.0008680878, + 0.006342389, + 0.007945266, + 0.008616697, + -0.0037586966, + 0.020801194, + -0.016601458, + -0.014271199, + 0.019168695, + -0.01851043, + 0.004301766, + 0.0047822995, + -0.003248541 + ] + }, + { + "object": "embedding", + "index": 5, + "embedding": [ + 0.0021845475, + 0.008128393, + 0.0016116065, + -0.0032902234, + -0.03658782, + 0.004707499, + -0.017878445, + -0.0045868796, + 0.010058301, + -0.03318368, + -0.004885077, + 0.0063559613, + 0.019768145, + -0.014166054, + -0.02752798, + -0.01904443, + 0.02173826, + -0.025544465, + -0.0021460163, + -0.026670244, + -0.00603431, + 0.033022854, + -0.012115528, + -0.020331034, + 0.0038229583, + 0.005575287, + -0.002809422, + -0.015680496, + -0.0014516185, + -0.011733566, + 0.01049387, + 0.0016526504, + 0.009689742, + -0.021537228, + 0.0055250293, + -0.02439188, + -0.014233065, + -0.009863969, + -0.016993904, + -0.020331034, + 0.019392885, + -0.018722778, + -0.008249013, + -0.00634926, + -0.007458287, + 0.01150573, + 0.0060008047, + 0.005149769, + -0.011840784, + 0.013227904, + 0.023560949, + 0.014005228, + -0.017865043, + -0.0012363467, + -0.000084129795, + -0.009046439, + -0.023467133, + -0.013817598, + -0.01125109, + -0.0092072645, + 0.0038665151, + 0.005173223, + -0.018092878, + -0.0010579309, + -0.0025363537, + -0.009488709, + -0.006342559, + 0.008007774, + -0.03224553, + -0.011780474, + 0.010949542, + 0.021698052, + -0.008604169, + -0.0045734774, + 0.038732164, + 0.003682236, + -0.031655837, + -0.00010491357, + 0.011793876, + -0.00007125118, + 0.021255782, + -0.018856801, + 0.0066709113, + 0.015613484, + 0.0046203854, + 0.015626887, + -0.016136168, + 0.025785703, + -0.008222208, + -0.00311097, + 0.010916037, + 0.008966027, + -0.00591034, + 0.004627086, + -0.030127993, + -0.025343433, + 0.0064765806, + 0.018883605, + -0.0061549293, + -0.043128062, + -0.0096562365, + 0.02161764, + -0.011874289, + -0.018012466, + -0.030020777, + 0.014045435, + 0.010835624, + -0.01521142, + 0.0017339009, + 0.011137172, + 0.0020287477, + 0.03181666, + -0.006838438, + -0.039080616, + -0.032272335, + -0.018374324, + 0.014460901, + -0.011512431, + -0.019567113, + -0.026817666, + 0.017784629, + 0.017302154, + -0.00015025047, + 0.001991892, + 0.018709376, + -0.003588421, + -0.017597, + -0.0056523494, + 0.0057461644, + 0.002444214, + 0.020974336, + 0.02299806, + 0.017865043, + 0.0012505865, + -0.014809356, + 0.015546474, + -0.021322792, + 0.010574282, + -0.0115928445, + -0.012209343, + 0.021135163, + 0.017985662, + -0.013790794, + 0.0056422977, + 0.0020320984, + 0.017717618, + 0.027259937, + 0.02180527, + 0.018803192, + -0.0025631578, + 0.008456745, + -0.005022449, + 0.006278899, + 0.008470148, + 0.016417611, + 0.0046203854, + 0.0141124455, + 0.01740937, + 0.0044160024, + 0.0034778533, + 0.009783557, + -0.003551565, + 0.009763453, + 0.008510354, + 0.0048281183, + 0.013650072, + 0.022555789, + 0.018937213, + 0.017114524, + 0.00068392756, + -0.014702139, + 0.03004758, + -0.0020220468, + 0.02445889, + 0.017422773, + 0.010373251, + 0.013710381, + 0.00414796, + -0.023668166, + -0.0054144613, + -0.033290897, + -0.0002041731, + 0.007310863, + 0.007994372, + 0.0028931852, + -0.007310863, + 0.0182269, + 0.00855056, + 0.006406219, + -0.013026873, + 0.0058734845, + 0.038303293, + 0.03229914, + 0.025115596, + -0.6776118, + -0.042752802, + -0.007404678, + -0.0079005575, + 0.019218657, + 0.028224891, + 0.010225827, + 0.012276353, + 0.004741004, + -0.005776319, + -0.018977419, + 0.032593984, + 0.0061448775, + 0.0013418884, + 0.008872212, + -0.015801115, + -0.013274812, + -0.015787711, + 0.006881995, + 0.006272198, + -0.0101990225, + 0.024445489, + -0.0063593118, + 0.0055149775, + 0.02238156, + -0.030127993, + 0.013650072, + -0.013965022, + -0.013375328, + 0.016055755, + -0.030181602, + 0.036346585, + 0.0028747574, + -0.016953697, + 0.051705427, + -0.008148496, + -0.010708304, + 0.024043426, + 0.008899016, + 0.045808487, + 0.00094987615, + -0.028064065, + 0.023614557, + -0.018561954, + -0.024525901, + 0.007518596, + 0.020156806, + -0.01941969, + 0.010400055, + -0.013670175, + -0.0028077466, + -0.029216649, + -0.02708571, + -0.011425318, + 0.010507272, + -0.0069356035, + 0.0069356035, + -0.007257255, + -0.0017523288, + 0.003129398, + -0.005990753, + 0.020625882, + -0.039482683, + -0.012678417, + -0.0042216717, + -0.0014733969, + -0.04393219, + 0.0018210147, + 0.018025868, + 0.008188703, + -0.0077062263, + 0.007679422, + -0.009642834, + 0.008919119, + 0.038169272, + 0.022220735, + 0.01754339, + -0.026201168, + -0.016833078, + -0.011948001, + 0.010916037, + -0.003608524, + -0.013180997, + -0.0049755415, + 0.005129666, + -0.015305235, + -0.023172287, + 0.0044294046, + 0.009750051, + -0.022033105, + 0.017717618, + 0.009863969, + 0.012953161, + 0.018066075, + -0.016296992, + 0.01584132, + -0.019727938, + 0.0044160024, + 0.02218053, + -0.027032102, + -0.00004824244, + -0.013100584, + -0.0007304162, + -0.0108289225, + -0.012805738, + -0.0069222013, + -0.024793945, + 0.00204215, + 0.0119413, + -0.02439188, + 0.0043020844, + -0.012336663, + -0.02376198, + -0.0043858476, + 0.019821754, + -0.03211151, + 0.0099711865, + -0.0062185894, + 0.00798097, + -0.00011171934, + 0.0141124455, + -0.01011861, + 0.038624946, + -0.008537158, + -0.00072622806, + 0.030690882, + 0.01062119, + -0.003323729, + -0.009629432, + 0.0056221946, + -0.007217048, + 0.018883605, + 0.012497488, + -0.0067144684, + 0.0038162572, + -0.0101521155, + 0.0037123905, + -0.00008203571, + 0.01539905, + -0.041519806, + -0.0439858, + -0.0067647262, + 0.019513505, + -0.000016072088, + -0.0036286274, + -0.023426928, + -0.017020708, + 0.0007655968, + -0.011432019, + 0.037499167, + -0.0029266907, + -0.011170677, + -0.03280842, + 0.01998258, + 0.0015110904, + -0.013469143, + 0.0014717217, + -0.012939759, + -0.0008837031, + -0.012329962, + 0.0088923145, + 0.0014859614, + -0.029136235, + 0.019768145, + 0.00710313, + -0.00066549965, + 0.013643371, + 0.0067044166, + 0.010440261, + -0.026335191, + -0.018709376, + -0.011988208, + 0.004657241, + 0.01766401, + 0.013221203, + 0.004784561, + 0.0005616331, + -0.0073510697, + -0.0053206463, + -0.025450649, + 0.010567581, + -0.03776721, + -0.02502178, + 0.0024676677, + 0.014621726, + -0.008852108, + 0.004013939, + 0.017141327, + -0.016859882, + 0.0012489113, + -0.017422773, + 0.012236147, + 0.01326141, + 0.005866783, + 0.021644443, + -0.008429941, + 0.00035390005, + 0.010279436, + 0.006895397, + 0.019245462, + 0.014715541, + -0.010373251, + 0.014099043, + -0.018334117, + 0.029297061, + -0.04141259, + -0.006868593, + -0.0132145025, + 0.02520941, + 0.019299071, + 0.0025028482, + -0.010949542, + -0.013938217, + -0.0076191123, + 0.01609596, + 0.015787711, + 0.01614957, + 0.010822222, + -0.004486364, + -0.0038899689, + 0.019634124, + -0.020880522, + 0.013382029, + 0.003796154, + -0.0065469416, + 0.004117805, + 0.0009054816, + 0.023239298, + 0.02224754, + 0.0017925352, + -0.005776319, + -0.010259332, + -0.01017892, + 0.017865043, + 0.005769618, + -0.014594922, + 0.012651613, + -0.010574282, + 0.038356904, + 0.0021644444, + 0.019701134, + 0.0047477055, + 0.027849631, + -0.010534076, + -0.011083564, + -0.0082155075, + 0.033961, + -0.008376333, + 0.0031578774, + 0.0065770964, + -0.018159889, + -0.0060376604, + -0.008751593, + 0.0012732026, + 0.009756752, + -0.017516587, + -0.0041446094, + 0.007585607, + 0.004298734, + 0.045594055, + 0.0017439525, + -0.00090799446, + 0.0010947867, + -0.011867588, + 0.005990753, + 0.008832005, + 0.011318101, + 0.0036889368, + -0.013790794, + -0.0055551836, + -0.026817666, + -0.0124036735, + -0.007404678, + -0.0033170278, + 0.014715541, + -0.018937213, + 0.0024592914, + -0.0026502716, + 0.02275682, + 0.01143872, + -0.014889769, + -0.03640019, + 0.01766401, + -0.005762917, + 0.0034678017, + -0.022783626, + -0.028439324, + 0.003665483, + -0.02841252, + 0.018468138, + 0.011204183, + 0.009482008, + 0.002784293, + -0.010922737, + -0.016176375, + 0.0056925556, + 0.018829996, + -0.03607854, + -0.019513505, + -0.0049688406, + -0.008074785, + -0.006248744, + -0.002023722, + 0.0007999398, + 0.019660927, + 0.003601823, + -0.006587148, + -0.0037291434, + 0.013040274, + -0.00077941775, + 0.019526906, + -0.020786706, + -0.0026201168, + 0.02067949, + 0.003953629, + 0.007954165, + -0.02110836, + -0.0017690815, + 0.031629033, + -0.00032311704, + -0.010815521, + 0.005096161, + -0.024365077, + -0.005119615, + 0.087596335, + 0.0031059443, + 0.013368627, + -0.0042317235, + 0.02570529, + 0.016873285, + -0.006077867, + -0.0048917783, + -0.0030054282, + -0.009287678, + -0.0118608875, + -0.010788716, + 0.009173759, + 0.00867788, + 0.00052980304, + -0.005166522, + -0.008302621, + -0.039080616, + 0.009167058, + -0.0068618916, + -0.003400791, + 0.011659855, + -0.00041232497, + 0.01288615, + -0.013053677, + 0.0100516, + 0.011840784, + 0.033961, + 0.017315555, + -0.011740268, + 0.014876367, + 0.018092878, + 0.0031059443, + -0.0031662537, + -0.006523488, + -0.0013779068, + 0.014795954, + 0.014246467, + -0.0049688406, + -0.0072639557, + 0.013616567, + -0.0015680495, + 0.01137841, + 0.008731489, + 0.021443412, + 0.00008318746, + -0.0087113865, + 0.019969177, + -0.012015012, + 0.0125712, + 0.029243452, + 0.009274276, + -0.026214572, + -0.01665885, + -0.01206862, + 0.020398045, + 0.005618844, + -0.0099711865, + 0.022019703, + 0.026201168, + -0.00515312, + -0.02357435, + -0.004342291, + -0.020639284, + -0.0070294184, + -0.041787848, + 0.0106815, + -0.032888833, + -0.011914495, + -0.019808352, + 0.00760571, + -0.022904243, + -0.0061113723, + 0.02067949, + 0.016511427, + 0.00597065, + 0.02350734, + -0.021765063, + -0.0059572477, + 0.012041816, + 0.009602628, + -0.024485696, + -0.027447566, + -0.01716813, + -0.006406219, + 0.014635129, + 0.017650608, + -0.016484622, + 0.007954165, + 0.009696443, + 0.027688805, + -0.00591034, + 0.015452659, + 0.0073510697, + -0.016189776, + -0.017489783, + 0.010078403, + 0.002017021, + -0.016645448, + -0.014018631, + 0.025249617, + -0.01986196, + -0.008751593, + 0.005317296, + 0.004915232, + -0.016390808, + 0.01728875, + -0.0008204618, + -0.0126717165, + 0.006309054, + 0.021885682, + -0.025812507, + 0.006881995, + 0.019098038, + -0.019151647, + 0.046424985, + -0.00057335995, + 0.022716613, + -0.006121424, + -0.001206192, + 0.01087583, + 0.0007924011, + 0.016109362, + 0.0066508083, + -0.011961403, + -0.008704685, + 0.0055015753, + -0.017462978, + 0.003268445, + -0.0023805539, + -0.00848355, + 0.026321787, + -0.012242848, + -0.03425585, + -0.027608393, + 0.00521678, + -0.017771227, + 0.019071234, + -0.011043357, + -0.02771561, + -0.035220806, + -0.009039738, + 0.012001609, + -0.009220667, + -0.018762985, + -0.021349598, + 0.007833546, + 0.0063392087, + 0.014313477, + 0.011974805, + 0.008161899, + 0.01628359, + -0.02776922, + -0.0029618712, + -0.03294244, + -0.035864107, + -0.022515582, + -0.014795954, + 0.01614957, + 0.009575823, + 0.026268179, + 0.029752733, + 0.007880454, + -0.012946459, + -0.007310863, + 0.0058835363, + -0.0008506166, + 0.009401596, + -0.015760908, + 0.0108289225, + 0.026831068, + 0.029377474, + -0.0030071035, + -0.026335191, + -0.017556794, + 0.020719696, + -0.016940296, + -0.00037693497, + -0.00993098, + -0.019272266, + 0.0018109631, + -0.0045801788, + -0.005297193, + -0.017114524, + 0.0058801854, + 0.008885614, + 0.00006428835, + -0.005045903, + 0.010641293, + -0.010406756, + 0.020974336, + -0.010601087, + -0.015693897, + -0.023172287, + -0.012162435, + 0.011686659, + -0.017449576, + 0.01182068, + 0.0118608875, + 0.010728407, + 0.023091873, + -0.012048517, + -0.01275883, + 0.0040809494, + 0.011043357, + 0.018950615, + 0.0060008047, + -0.017838238, + 0.005002346, + -0.037070297, + -0.023614557, + -0.015613484, + -0.009240771, + -0.026254777, + -0.011076862, + 0.021014543, + 0.0022565841, + 0.02105475, + -0.0073443684, + -0.008664479, + 0.018628964, + 0.008510354, + 0.012979965, + -0.020625882, + 0.02790324, + 0.018267106, + 0.0036889368, + -0.01413925, + -0.01991557, + -0.011887691, + -0.017985662, + 0.02275682, + 0.027876435, + -0.006875294, + -0.023520742, + 0.013871207, + 0.024097035, + -0.02570529, + -0.008249013, + 0.019768145, + 0.027822826, + 0.0019416339, + -0.01991557, + 0.0091603575, + -0.017516587, + 0.021952692, + -0.017503185, + -0.0017154729, + -0.015881527, + -0.010172218, + -0.018508345, + 0.015667092, + -0.023735177, + 0.0015018765, + 0.02652282, + -0.020960934, + 0.011545937, + -0.0008259064, + 0.004623736, + 0.0044093016, + -0.0105139725, + 0.02432487, + 0.01691349, + 0.0034644513, + -0.0037928035, + 0.013341823, + -0.0003802855, + 0.0005612143, + -0.0040273406, + 0.026227973, + -0.006228641, + -0.015988745, + -0.0039502787, + -0.00892582, + -0.0016291967, + -0.0063325074, + 0.0035616166, + 0.0010470416, + -0.016457818, + -0.007330966, + 0.02790324, + -0.0056791534, + -0.0029434434, + -0.017597, + -0.0056925556, + -0.019111441, + -0.004657241, + -0.0054613687, + 0.007592308, + -0.013274812, + -0.020880522, + -0.01923206, + 0.0074515855, + 0.027018698, + -0.008496952, + -0.018937213, + 0.013321719, + 0.011827381, + -0.02790324, + 0.007424781, + 0.010272735, + 0.0055015753, + -0.03256718, + 0.00086527516, + -0.01388461, + -0.010266033, + 0.0063559613, + -0.025504258, + -0.00911345, + -0.02972593, + -0.022676408, + 0.03739195, + 0.008952624, + 0.022207333, + 0.0257723, + -0.022864038, + -0.00070947537, + -0.01558668, + -0.010004692, + 0.008336126, + 0.007987671, + 0.011365009, + 0.024445489, + -0.016833078, + 0.01647122, + 0.0067345714, + 0.00049755414, + -0.0037123905, + -0.024539305, + -0.0327012, + 0.0025179256, + 0.0063593118, + -0.027930044, + -0.01206862, + -0.02047846, + -0.02117537, + -0.0027641898, + -0.0024224354, + 0.008838707, + -0.0005004859, + 0.0133485235, + 0.035408434, + 0.0018746232, + 0.016806275, + -0.01640421, + -0.015975341, + 0.0025815857, + -0.013804196, + -0.01628359, + -0.01125109, + -0.0025514308, + 0.02067949, + 0.009917578, + -0.017275348, + -0.019808352, + 0.019473298, + -0.037847623, + 0.0066005504, + -0.02180527, + 0.021094956, + 0.011948001, + -0.0072438526, + 0.004720901, + 0.027983652, + -0.0069557065, + 0.030556861, + -0.015077399, + -0.009723247, + 0.013026873, + -0.026281582, + 0.04846211, + 0.00021862228, + -0.01175367, + -0.0022214034, + 0.008282518, + 0.020371241, + 0.004312136, + 0.0030188302, + -0.021832073, + -0.0019466598, + -0.0020723047, + -0.0124505805, + -0.018990822, + 0.019580515, + 0.012350065, + -0.04631777, + 0.01439389, + -0.0005499062, + -0.007699525, + -0.0063023525, + -0.0008162736, + -0.0059036394, + -0.00081376074, + 0.022971256, + -0.013341823, + -0.012638211, + 0.0069289026, + -0.027259937, + 0.008604169, + 0.0017112847, + 0.0043255384, + 0.0028730822, + 0.0019081286, + -0.013703681, + -0.027930044, + 0.0004301247, + -0.029699124, + -0.0032918989, + 0.011539236, + -0.0010261007, + -0.009488709, + -0.0106479945, + 0.011217585, + -0.037365146, + -0.018079476, + 0.0029501445, + -0.029645517, + -0.02570529, + 0.018789789, + 0.0027156072, + -0.021537228, + -0.011545937, + -0.0066742618, + 0.0038363603, + -0.012725324, + -0.017382566, + 0.011338204, + -0.027018698, + 0.0024040076, + -0.0073376675, + -0.017690815, + -0.0257723, + 0.005890237, + 0.005437915, + -0.004436106, + 0.0010269384, + 0.23652083, + -0.010527375, + -0.0022599346, + 0.01998258, + -0.0075521017, + 0.017529989, + 0.028358912, + -0.0007073813, + 0.0017389266, + 0.02256919, + -0.017811434, + -0.000539017, + 0.018722778, + -0.004543323, + -0.0062018367, + -0.021832073, + -0.032888833, + -0.02551766, + -0.031012535, + -0.0015412453, + 0.02483415, + -0.015546474, + 0.005632246, + -0.002117537, + 0.0099711865, + -0.011994909, + -0.0017623804, + 0.01162635, + 0.011043357, + 0.024793945, + 0.0027072306, + 0.009327884, + -0.007699525, + 0.0038732162, + -0.006362662, + 0.008999532, + 0.007987671, + -0.012041816, + 0.029886754, + -0.0038330099, + -0.0036889368, + -0.0151042035, + -0.018722778, + 0.0059170416, + -0.0044897143, + 0.0076526175, + 0.007934063, + 0.0074515855, + -0.009736649, + 0.021041349, + -0.040367223, + -0.0007986833, + 0.014045435, + 0.026080549, + 0.012209343, + -0.021523824, + 0.030771296, + 0.0031729548, + -0.015063996, + -0.006121424, + 0.004456209, + 0.030396037, + -0.010728407, + 0.036855865, + -0.02407023, + -0.0011333178, + -0.009917578, + 0.0038531132, + 0.029779539, + -0.012732026, + 0.022515582, + 0.0124036735, + 0.004342291, + -0.021188771, + -0.010741809, + -0.023453731, + 0.027501175, + 0.0157207, + 0.016940296, + 0.041707437, + -0.009012934, + -0.012819139, + 0.008992831, + 0.007585607, + 0.0005260337, + -0.034095023, + 0.012209343, + -0.000043975746, + 0.0129866665, + -0.031575423, + 0.0037425454, + -0.0032835223, + -0.011257791, + -0.020076394, + 0.0021711455, + 0.009951083, + 0.009602628, + 0.01590833, + -0.01118408, + 0.021041349, + -0.015827918, + 0.0021610938, + 0.004895129, + -0.005739463, + -0.017141327, + -0.005990753, + -0.006888696, + 0.011177379, + -0.009461906, + -0.013871207, + 0.0011500705, + -0.03602493, + -0.0048281183, + -0.017570196, + 0.0071366355, + 0.008041279, + -0.02047846, + -0.011793876, + 0.034523893, + -0.021979498, + 0.019848557, + -0.027608393, + -0.013650072, + -0.012524293, + -0.017462978, + -0.010312941, + 0.009977887, + -0.01640421, + 0.0032282386, + -0.048220873, + 0.028305303, + -0.0032667697, + 0.020652685, + -0.0063258065, + -0.0022766872, + 0.02110836, + 0.006543591, + -0.006881995, + 0.012356766, + -0.0020387995, + 0.008986129, + -0.018159889, + 0.035435237, + 0.03640019, + -0.021161968, + 0.0021577433, + 0.02413724, + -0.0026754006, + -0.018508345, + 0.008912418, + -0.0100516, + -0.02149702, + -0.013341823, + -0.02110836, + 0.011351606, + 0.0046203854, + 0.0015035517, + -0.003930175, + 0.003638679, + 0.0019014275, + -0.04135898, + 0.0067647262, + 0.026429005, + -0.0075655035, + -0.036158953, + -0.02752798, + -0.17454937, + 0.027045503, + -0.00021548115, + -0.014487705, + 0.011545937, + 0.034389872, + 0.0079474645, + -0.022287747, + -0.00810829, + 0.015506268, + 0.031253774, + 0.019526906, + -0.005488173, + -0.014889769, + -0.0019684383, + -0.026040344, + -0.028921802, + 0.017556794, + 0.026683645, + 0.013408833, + 0.03042284, + -0.022153724, + -0.0005792234, + -0.016390808, + -0.001614957, + 0.024619717, + -0.009997991, + 0.012892852, + 0.0012313209, + 0.0013779068, + -0.017395968, + -0.019553712, + 0.026965091, + 0.014702139, + -0.004184816, + 0.0040440937, + -0.0077464324, + -0.009951083, + -0.00018270875, + 0.014742346, + -0.012651613, + 0.018923812, + 0.012236147, + 0.0163506, + -0.0012857671, + 0.019098038, + 0.005297193, + -0.0065134363, + -0.010185621, + -0.005380956, + 0.02092073, + -0.00760571, + 0.009066543, + 0.020652685, + 0.020009384, + 0.00019412152, + 0.007813443, + 0.005166522, + 0.012745428, + -0.008369632, + -0.025263019, + -0.016015548, + -0.00033044632, + -0.010507272, + -0.0046940967, + -0.00396033, + -0.021912487, + 0.022033105, + -0.017395968, + 0.010594386, + 0.0061683315, + -0.009924279, + 0.01049387, + -0.016551634, + -0.0039234743, + 0.0008112478, + -0.011425318, + 0.020826913, + 0.0021711455, + -0.015814517, + -0.03310327, + 0.026348593, + -0.03626617, + -0.009187162, + 0.00358172, + 0.03130738, + 0.0019198555, + 0.0101990225, + -0.025624877, + -0.003638679, + 0.022528984, + -0.013375328, + 0.0037525971, + -0.0045600757, + 0.011036656, + 0.022528984, + -0.01363667, + 0.037123907, + -0.025785703, + 0.004858273, + -0.01017892, + -0.005538431, + -0.012021713, + -0.00083763327, + 0.029109431, + 0.0007630839, + 0.020384643, + 0.035810497, + 0.027983652, + -0.012289755, + -0.015131007, + 0.0031913829, + 0.00848355, + -0.0030623872, + -0.016498026, + 0.016256787, + 0.019928971, + -0.013596463, + 0.016632047, + -0.00798097, + 0.029431082, + -0.0092072645, + 0.010473766, + 0.010353147, + -0.02236816, + 0.0056791534, + -0.053930182, + 0.023292907, + 0.005193326, + 0.018977419, + -0.012685118, + 0.037123907, + 0.02112176, + 0.032325942, + -0.00810829, + 0.016136168, + -0.012953161, + -0.011807279, + -0.0028496285, + -0.0005783858, + 0.03444348, + -0.005166522, + 0.0056724525, + 0.004154661, + 0.0010076729, + 0.024432087, + -0.007753134, + -0.011572741, + 0.00078402477, + -0.004111104, + -0.024177447, + 0.019017626, + -0.021403205, + 0.027742414, + 0.0327012, + 0.02187228, + 0.021537228, + 0.0018025868, + 0.014045435, + -0.013562958, + -0.01495678, + 0.014501107, + -0.01017892, + -0.0038531132, + 0.023453731, + -0.033666156, + 0.003085841, + -0.016605241, + -0.019580515, + -0.020947533, + -0.008597468, + 0.016270189, + -0.034148633, + 0.011492329, + 0.014192858, + -0.0033790127, + -0.033773374, + -0.028948605, + -0.013308317, + -0.011425318, + 0.027849631, + -0.010500571, + 0.01074851, + 0.00010899703, + -0.035730086, + -0.0031511763, + -0.0070629236, + 0.0074180802, + -0.041895065, + 0.018535148, + 0.022917647, + 0.008443343, + -0.012557798, + -0.03575689, + 0.01665885, + -0.0011483952, + -0.013234606, + -0.0036621327, + -0.026750656, + -0.00055535085, + -0.019098038, + -0.031226968, + -0.038169272, + 0.003281847, + -0.0016962073, + -0.0050291503, + 0.011445421, + -0.035542455, + -0.020076394, + -0.010292837, + 0.001948335, + 0.042029087, + 0.011137172, + -0.014621726, + 0.008818603, + -0.011579443, + 0.006530189, + 0.008691283, + 0.029752733, + -0.01991557, + -0.016605241, + 0.029002214, + 0.01149903, + 0.023413526, + 0.0010034847, + 0.010279436, + -0.010266033, + -0.026388798, + -0.090973675, + 0.015988745, + 0.026804265, + 0.007585607, + 0.0006826711, + -0.0219929, + 0.009957785, + -0.009012934, + 0.008141795, + 0.00849025, + -0.025343433, + 0.014192858, + -0.0069356035, + -0.016551634, + -0.032272335, + -0.010835624, + 0.011545937, + 0.0033086515, + 0.0074113794, + 0.01747638, + 0.0026301686, + 0.025383638, + 0.028680563, + -0.0072304504, + -0.022354757, + 0.000009966527, + -0.021322792, + 0.036239367, + -0.014755747, + -0.0073376675, + -0.0059672995, + -0.033773374, + -0.01232326, + 0.01659184, + -0.012624809, + -0.014246467, + 0.0035917715, + 0.020759903, + 0.0031277225, + 0.032325942, + -0.01614957, + 0.008778397, + 0.016310396, + 0.0015378947, + -0.010225827, + 0.01439389, + -0.0000051010556, + 0.002992026, + 0.02533003, + 0.0033203783, + 0.0011911145, + 0.020143405, + 0.0033220535, + -0.0050258, + 0.0014566443, + -0.025892919, + 0.013831001, + -0.006637406, + -0.006215239, + 0.0076727206, + 0.009173759, + 0.0076124114, + 0.023601156, + 0.010849026, + 0.005618844, + -0.013911413, + -0.005833278, + 0.010929439, + 0.027849631, + -0.022354757, + -0.039884746, + 0.023976415, + 0.004034042, + 0.014916574, + 0.015063996, + -0.0003350533, + 0.000020050846, + 0.0048917783, + -0.015827918, + 0.035783693, + 0.0075789057, + -0.010567581, + -0.03235275, + 0.01703411, + 0.023896001, + -0.019768145, + 0.0000081931, + -0.0039871344, + -0.0046739937, + 0.04449508, + -0.018829996, + -0.0013829325, + 0.008195404, + -0.001062119, + -0.005096161, + 0.031387795, + -0.0018310663, + -0.028734172, + 0.043262083, + 0.023078471, + 0.014568117, + 0.004117805, + 0.003876567, + -0.017704217, + -0.027474372, + 0.012631509, + -0.014434096, + -0.0064497762, + -0.002224754, + 0.022609398, + 0.0141124455, + 0.016377406, + -0.0017204988, + 0.025115596, + 0.0129866665, + -0.0076526175, + -0.00091469556, + -0.020706294, + -0.010889232, + 0.016377406, + 0.008758293, + 0.00515312, + 0.012055218, + -0.016444417, + -0.005367554, + 0.0009951083, + 0.010225827, + -0.024298066, + -0.0003149501, + 0.011358307, + 0.018401127, + 0.016766068, + -0.023735177, + -0.008979429, + -0.009079944, + -0.0037324938, + 0.0028211488, + 0.0018293911, + -0.038383707, + 0.022354757, + 0.019004224, + 0.0039938353, + -0.004278631, + -0.002697179, + 0.0152382245, + -0.0045466735, + 0.002638545, + -0.012658314, + -0.02533003, + 0.010346446, + -0.025933126, + -0.0059538973, + -0.01791865, + -0.014246467, + -0.012618108, + 0.009106749, + 0.006701066, + 0.006255445, + -0.0057729683, + 0.024847554, + -0.0074850908, + 0.025745496, + 0.014782552, + -0.023453731, + -0.0073778736, + 0.00993098, + -0.0039569796, + 0.011874289, + -0.014554716, + 0.021416608, + 0.000161035, + -0.016243385, + -0.019392885, + 0.02520941, + -0.01143872, + -0.026991894, + 0.00013747656, + -0.003538163, + 0.014125847, + -0.015988745, + 0.011666556, + -0.016189776, + -0.00792066, + 0.027688805, + -0.003926825, + 0.007826845, + -0.0019064533, + -0.012839243 + ] + }, + { + "object": "embedding", + "index": 6, + "embedding": [ + -0.0131454775, + -0.007023479, + -0.007137846, + -0.028793573, + -0.03425628, + 0.0073396703, + -0.032803144, + 0.013912409, + -0.007124391, + -0.025228014, + 0.000104275794, + -0.007595314, + 0.018890737, + -0.0022755668, + -0.0018584637, + 0.0096404655, + 0.019994043, + -0.006337277, + 0.004726048, + -0.005577073, + -0.044078387, + 0.001702891, + 0.012815831, + -0.005116241, + 0.0020535602, + -0.00840261, + 0.011147418, + -0.0054458873, + -0.010407397, + -0.012217086, + -0.007992235, + -0.008557342, + -0.004463677, + -0.010817773, + -0.0130109275, + -0.0073733074, + -0.00095698267, + -0.006098452, + 0.027246255, + -0.01677831, + 0.015917195, + -0.011066689, + 0.0026657602, + -0.01789507, + 0.008294971, + 0.0343101, + 0.00424167, + 0.020895522, + -0.008624617, + 0.0009553008, + -0.00075095386, + 0.056295473, + -0.024420718, + -0.011618341, + -0.018688913, + -0.0019139653, + -0.011584704, + 0.004816869, + -0.009034993, + -0.023653787, + -0.013737494, + -0.020020952, + -0.026721513, + 0.003582378, + 0.0043156724, + 0.008079692, + 0.0014716341, + 0.008079692, + 0.002578303, + 0.0019072378, + 0.020693699, + 0.017706702, + 0.0112550575, + 0.005775533, + 0.013461668, + -0.01710123, + -0.0072051208, + -0.002921404, + 0.012129629, + 0.011678888, + 0.01691286, + -0.023842156, + -0.024286168, + 0.029520141, + 0.04106448, + 0.021245351, + -0.010003748, + 0.04701156, + -0.009526098, + -0.009230089, + 0.001309334, + 0.01614593, + 0.0010965776, + 0.032534048, + -0.009660647, + -0.006313731, + -0.0038682956, + 0.03880405, + -0.01683213, + -0.0013900636, + 0.004460313, + 0.01183362, + -0.008469885, + -0.020518785, + -0.004039846, + -0.004167668, + -0.0129369255, + 0.0053517027, + 0.010508309, + 0.0006235524, + 0.02938559, + 0.026748423, + 0.022429386, + -0.047872677, + -0.010071023, + -0.018096896, + -0.0019358296, + -0.01813726, + -0.009647192, + -0.0047327755, + 0.024689816, + -0.0039187516, + -0.006414643, + -0.027663358, + 0.021164622, + 0.015580822, + -0.00594372, + -0.004779868, + 0.0035790142, + 0.0028877666, + 0.010999414, + 0.0112550575, + -0.000038788072, + -0.0018315538, + -0.034229368, + 0.013239662, + -0.026398594, + 0.014975349, + -0.029681599, + -0.009620283, + -0.00480005, + 0.015190628, + -0.032238036, + -0.0005697326, + 0.019576939, + 0.014719705, + 0.014127688, + -0.0027111706, + 0.021339536, + -0.01305802, + 0.013502033, + -0.03207658, + 0.01119451, + -0.0048673246, + 0.010858137, + 0.0038279307, + 0.007292578, + 0.023411596, + -0.009479006, + 0.009115722, + -0.004359401, + -0.015123353, + 0.0048101414, + -0.013286754, + 0.022617755, + 0.008624617, + 0.00739349, + 0.013044565, + 0.0025127102, + -0.007783683, + 0.008557342, + 0.022402477, + -0.02401707, + 0.02018241, + 0.032964606, + 0.01364331, + 0.0067510167, + -0.01903874, + -0.030569626, + -0.031134732, + -0.014612066, + 0.005476161, + 0.016119018, + 0.018352538, + -0.0049110535, + 0.016374663, + -0.0024925277, + -0.011187783, + 0.011853803, + -0.012930198, + 0.014558246, + 0.004463677, + 0.004103757, + -0.0125870975, + -0.6824346, + -0.027770998, + -0.01186053, + -0.011450155, + -0.011820165, + 0.025241468, + 0.014100778, + 0.0026489415, + -0.011389608, + -0.0132194795, + -0.0073800352, + 0.018554363, + 0.007595314, + 0.0053113378, + -0.012963835, + -0.0022335202, + 0.0064684628, + 0.016859042, + -0.0034747384, + 0.024864731, + -0.014961895, + 0.020720609, + 0.0075751315, + -0.004742867, + 0.012714919, + 0.006656832, + 0.0018197808, + -0.011954715, + -0.010952322, + 0.004921145, + -0.030650355, + 0.0035151034, + 0.0072185756, + -0.018904192, + 0.043970745, + 0.0144775165, + -0.019711489, + 0.01462552, + 0.012573642, + 0.03657053, + 0.015917195, + 0.0054257046, + 0.024676362, + -0.0050893314, + -0.010938867, + 0.010501581, + 0.013858589, + 0.0002537518, + 0.017303053, + -0.01949621, + -0.0076020416, + -0.03172675, + -0.017854707, + -0.01079759, + 0.007050389, + -0.003632834, + 0.01792198, + 0.006290185, + 0.007736591, + 0.014517881, + 0.0085909795, + 0.0049245083, + -0.02973542, + -0.014033503, + 0.0170205, + -0.008765894, + -0.015378998, + -0.0075145843, + 0.009384821, + 0.01358949, + 0.00038619884, + 0.017477969, + 0.0042248513, + -0.009613555, + 0.031296194, + 0.012149812, + 0.010030658, + 0.002450481, + 0.0040196637, + -0.0056073465, + 0.011766345, + -0.008860079, + -0.025308743, + 0.0060513597, + 0.037458554, + -0.024985826, + 0.0025244833, + -0.005758715, + 0.009021537, + 0.002909631, + 0.01903874, + 0.037862204, + -0.0052642454, + -0.011954715, + -0.022954129, + 0.02508001, + -0.01680522, + 0.0006550874, + 0.0201555, + -0.021218441, + 0.010602494, + -0.003266187, + -0.00032207766, + -0.005829353, + 0.007178211, + 0.022456296, + -0.017558698, + 0.015190628, + 0.014100778, + -0.022563936, + -0.009660647, + -0.0058259894, + -0.028820483, + -0.010030658, + -0.013132022, + -0.026358228, + 0.011685616, + -0.011187783, + 0.01745106, + -0.011322333, + 0.009748105, + -0.0151098985, + 0.022375567, + -0.005122969, + -0.010804318, + -0.0015313404, + -0.011699071, + -0.014329512, + 0.0045410427, + 0.0022402476, + -0.008227697, + 0.02976233, + 0.026842607, + -0.005499707, + 0.035251945, + 0.009458823, + -0.01130215, + -0.011732709, + -0.0056342566, + -0.028793573, + -0.013690402, + -0.0047966866, + 0.006949477, + -0.01568846, + -0.0065996484, + -0.03910006, + -0.013286754, + -0.015217538, + -0.01130215, + 0.014571701, + -0.006132089, + -0.013676947, + -0.025564387, + -0.009135905, + -0.0075011295, + -0.010467944, + 0.009674102, + -0.017303053, + -0.014316057, + -0.012196904, + 0.027905548, + 0.007709681, + -0.021352991, + -0.011403062, + -0.011154146, + -0.014046958, + 0.018446723, + 0.0028120826, + -0.013481851, + -0.015621186, + -0.0059100827, + 0.00023293866, + 0.0025648482, + 0.0011251695, + 0.020411145, + -0.010420851, + 0.013461668, + -0.0031097732, + -0.0031013638, + -0.0023478873, + -0.009956656, + -0.010817773, + -0.026923336, + -0.020855159, + 0.018783098, + -0.0074203997, + 0.015163718, + 0.016737947, + -0.019940222, + 0.0030727722, + 0.008503523, + 0.005516526, + 0.0010427579, + -0.0035420132, + -0.0060513597, + 0.012910016, + -0.0022654757, + -0.00003250735, + 0.0034848296, + 0.013468396, + 0.026075676, + 0.0067409254, + 0.014531336, + 0.028255375, + 0.0007866936, + -0.026210224, + -0.000914095, + -0.012903288, + 0.04830324, + 0.008046054, + 0.010111388, + -0.017383784, + -0.026936792, + 0.012775466, + -0.0061690905, + 0.033368252, + 0.011974897, + -0.0019005104, + -0.00808642, + -0.0031602292, + 0.013730767, + -0.01584992, + -0.006895657, + 0.018877283, + -0.027851727, + -0.0058461716, + 0.0052137896, + 0.023129044, + 0.0063843695, + -0.032507136, + -0.011820165, + 0.008046054, + -0.0014724751, + 0.016105564, + -0.006697197, + -0.0020064681, + 0.0010721906, + -0.010259393, + 0.03412173, + -0.0027548992, + 0.01917329, + 0.022308292, + 0.027824817, + -0.02146063, + -0.0172896, + -0.011059961, + 0.024030523, + 0.0036025604, + -0.012573642, + 0.009909564, + -0.019509664, + -0.0019795583, + -0.00085817295, + -0.011100326, + 0.017666338, + -0.028336106, + 0.011228148, + 0.007918233, + 0.0108312275, + 0.027932458, + 0.012842741, + -0.009795197, + 0.015123353, + -0.000015347041, + -0.017007045, + 0.020747518, + 0.010145025, + 0.008934081, + -0.009465551, + -0.012439093, + 0.011880713, + -0.000118887016, + -0.009721194, + 0.005015329, + 0.015136808, + -0.000084251056, + -0.010124843, + -0.009304091, + 0.013105112, + 0.029116493, + -0.01789507, + -0.021689365, + 0.0021141076, + 0.032910787, + -0.00962701, + -0.034686837, + -0.01481389, + 0.0020905614, + -0.0096001, + 0.0035487406, + -0.0001552574, + 0.03234568, + -0.004941327, + -0.0047159567, + -0.0045645884, + -0.0053416113, + 0.033475894, + -0.034283187, + -0.02154136, + 0.007090754, + 0.006054723, + -0.008368974, + -0.0035285582, + -0.025941126, + 0.04970255, + -0.0037606559, + -0.018971467, + 0.00011405165, + 0.0009670739, + -0.009620283, + -0.006629922, + 0.0003853579, + -0.012466002, + 0.013656765, + 0.0006336436, + 0.015177174, + -0.009331001, + 0.01478698, + 0.024716726, + -0.021608636, + -0.009526098, + -0.0069629317, + -0.021877734, + 0.011584704, + 0.096014455, + 0.020115137, + 0.022833034, + -0.00030084405, + 0.030677265, + 0.004904326, + -0.015634641, + -0.009801924, + 0.012008535, + 0.010481399, + -0.007649134, + -0.038050573, + 0.0012521504, + 0.01079759, + -0.012910016, + -0.0036765626, + -0.022927219, + -0.0065458287, + 0.021285716, + -0.011638524, + -0.0060849967, + -0.0024302986, + 0.0022637937, + 0.003468011, + 0.014208417, + -0.010461217, + 0.029331772, + 0.0075751315, + 0.011557794, + 0.010441034, + 0.0061455444, + 0.014181508, + 0.0076424065, + 0.011826893, + -0.0037202912, + -0.01130215, + 0.022644665, + -0.005092695, + 0.014221872, + -0.017625973, + 0.019106016, + 0.003834658, + 0.009028265, + -0.0023747971, + 0.0315922, + -0.025833486, + -0.012714919, + 0.016751401, + -0.0034646473, + -0.017464513, + 0.026519688, + 0.016024834, + -0.024003614, + -0.017356874, + -0.0019543301, + 0.011181056, + 0.0068250187, + -0.00026510438, + -0.0001514732, + 0.017114684, + -0.019765308, + -0.028712844, + 0.0039591165, + -0.01566155, + -0.012324726, + -0.028389925, + 0.002159518, + -0.011880713, + -0.013172387, + -0.025456747, + -0.0022419295, + -0.019859493, + -0.007548222, + 0.008927354, + 0.018043075, + -0.0060244496, + 0.020626424, + 0.014692795, + 0.013690402, + 0.027797908, + 0.0032207766, + -0.014221872, + -0.008490068, + -0.012647645, + -0.01584992, + 0.01693977, + 0.024743635, + -0.017733611, + -0.010737043, + 0.024649452, + 0.016253568, + 0.0005579596, + 0.015473182, + -0.007871141, + -0.012788922, + 0.0016473893, + 0.007036934, + 0.021675909, + -0.018769642, + -0.009546281, + 0.04098375, + -0.009822107, + 0.003126592, + -0.0014968622, + 0.025779666, + -0.008994628, + 0.005193607, + 0.0051633334, + -0.014168053, + -0.023209773, + 0.044751134, + -0.031242372, + 0.025187649, + 0.025201105, + 0.0051263324, + 0.018702367, + -0.004726048, + 0.024743635, + -0.018769642, + 0.0058058067, + -0.01802962, + -0.03248023, + 0.0063070036, + 0.037216365, + -0.012277634, + 0.015405907, + 0.022617755, + -0.014006593, + -0.0020047862, + -0.008348791, + 0.021070438, + 0.028416835, + -0.014046958, + -0.012136357, + -0.00019478129, + -0.0039927536, + -0.0050489665, + 0.011557794, + -0.019590395, + -0.005082604, + -0.010723588, + -0.00507924, + 0.01704741, + -0.010071023, + -0.025672028, + -0.020572605, + -0.00022473956, + -0.0038582042, + 0.0015616141, + 0.03425628, + -0.0029819512, + 0.012815831, + -0.0046184086, + 0.00070680486, + -0.037862204, + -0.010649585, + 0.0037942934, + -0.034283187, + 0.002781809, + 0.021366445, + 0.027905548, + -0.0016145929, + 0.019711489, + -0.0048875073, + -0.006771199, + -0.00039986402, + 0.0074203997, + -0.00041079617, + -0.018635092, + 0.010441034, + 0.01922711, + 0.011470337, + -0.010615949, + -0.005778897, + -0.015553911, + 0.012042172, + 0.0047495943, + -0.008220969, + -0.0033418708, + -0.025228014, + -0.018460179, + -0.017114684, + 0.014571701, + 0.0043257633, + -0.0040196637, + 0.0049245083, + 0.029224131, + -0.004534315, + 0.033314433, + -0.005139787, + 0.014181508, + -0.0036799263, + 0.005957175, + 0.019240566, + -0.0011066688, + -0.012062354, + 0.002120835, + 0.005183516, + 0.012190176, + 0.038238943, + 0.01590374, + -0.0019795583, + -0.018608183, + 0.023048313, + -0.0031854573, + 0.018123806, + 0.0056208014, + -0.0056611663, + 0.01843327, + -0.021285716, + -0.0025766212, + -0.016213203, + -0.023236683, + -0.01933475, + -0.011295423, + 0.011793256, + 0.0017222324, + 0.024339987, + -0.011059961, + -0.009048448, + -0.010676496, + 0.009162814, + 0.013939318, + 0.0007496925, + 0.022792669, + 0.023707606, + -0.012082537, + -0.016576488, + -0.010911957, + 0.009297364, + -0.021837369, + 0.012230542, + 0.035870872, + -0.005462706, + -0.00909554, + -0.0059134467, + 0.003239277, + -0.0001609337, + -0.014235327, + 0.026506234, + 0.012546732, + 0.0048202327, + -0.0028793574, + 0.0012672872, + 0.002388252, + 0.026519688, + -0.026869517, + -0.0116721615, + -0.02736735, + -0.006744289, + -0.0014977031, + 0.005640984, + -0.022052648, + 0.03883096, + -0.0025093465, + -0.010286302, + 0.004265216, + -0.019792218, + -0.0004406493, + -0.0035016483, + 0.008584253, + 0.0039187516, + -0.004140758, + -0.008624617, + -0.0015128399, + -0.0059672664, + -0.006172454, + 0.018998377, + -0.015096444, + 0.021070438, + -0.010932139, + -0.005893264, + 0.0008152853, + -0.025833486, + 0.006566011, + 0.018917646, + 0.013515488, + -0.0024656178, + -0.015230993, + -0.010555401, + 0.0015355451, + 0.009061903, + -0.010609221, + 0.008947535, + -0.013071475, + -0.009916292, + -0.00256653, + -0.021137713, + 0.018796552, + -0.0023344322, + -0.020101681, + -0.013125295, + -0.008436248, + 0.029116493, + -0.015015714, + 0.009976839, + 0.021985373, + 0.012990746, + -0.0046520457, + 0.011160874, + 0.0006151431, + -0.0057856245, + -0.011140691, + 0.0047933226, + -0.008712074, + -0.0099902935, + 0.028955033, + -0.027636448, + -0.002921404, + -0.0034141913, + 0.009337729, + 0.0067812903, + 0.0065021003, + -0.0019021922, + 0.032614775, + -0.0035588318, + 0.0018567818, + -0.0031669566, + -0.011477064, + 0.020464964, + -0.0068889298, + -0.002312568, + 0.006730834, + -0.004369492, + 0.009727922, + 0.017706702, + -0.012876378, + -0.0044704042, + -0.016415028, + -0.019698033, + -0.0034326918, + 0.015594277, + -0.016065199, + -0.025577843, + -0.012883106, + 0.00928391, + -0.0071042087, + 0.02962778, + -0.015944105, + -0.0077029536, + -0.0011739436, + 0.003177048, + 0.010387214, + -0.0055266167, + -0.006592921, + -0.032641686, + -0.015836466, + 0.0037438374, + -0.029816149, + -0.006710652, + -0.01829872, + 0.023546146, + 0.0071983933, + -0.026465869, + -0.005116241, + 0.01486771, + -0.017975802, + 0.015352087, + 0.00008703665, + 0.01707432, + 0.020559149, + 0.008712074, + 0.015500092, + 0.022779215, + 0.009801924, + 0.021164622, + -0.03923461, + -0.012560187, + 0.018635092, + -0.015163718, + 0.0077164085, + 0.006340641, + -0.030246707, + -0.0015860011, + 0.01677831, + 0.010938867, + 0.0038178395, + -0.0014884528, + -0.024703272, + -0.00784423, + -0.02704443, + -0.014141142, + -0.02499928, + 0.012614007, + -0.00073623756, + -0.019267475, + -0.0015304995, + 0.010595766, + -0.017868161, + -0.012614007, + -0.005462706, + -0.0030626808, + 0.00079215964, + 0.0024336623, + -0.0018180988, + 0.016078655, + 0.017639427, + -0.050913494, + -0.0043762196, + 0.004080211, + 0.0028154464, + 0.0015473182, + -0.007857685, + -0.010030658, + -0.007063844, + -0.004964873, + -0.025968036, + -0.009337729, + -0.0027616266, + -0.017545242, + 0.0024740272, + -0.028847393, + -0.0017045728, + -0.03401409, + 0.0032813237, + -0.026479324, + 0.0007740796, + -0.012143084, + 0.011066689, + 0.01481389, + -0.027582629, + -0.017787432, + -0.0137105845, + -0.01590374, + -0.016334299, + 0.0070571164, + 0.007265668, + -0.014423696, + -0.016267024, + 0.00970774, + -0.025362564, + -0.03396027, + 0.00035130008, + 0.0040331185, + -0.0065727388, + 0.004127303, + 0.23917502, + -0.022119923, + 0.004927872, + 0.021527905, + 0.0017693248, + 0.015056078, + 0.0343101, + -0.018608183, + -0.010737043, + -0.00068998616, + -0.019603848, + 0.010528491, + -0.005398795, + 0.007904777, + -0.013912409, + -0.014881165, + -0.035817053, + -0.037593104, + -0.019092562, + -0.013246389, + 0.0009098904, + -0.008839896, + -0.006158999, + -0.008079692, + 0.028524475, + 0.0099902935, + -0.015163718, + -0.014046958, + 0.020908978, + 0.022079557, + 0.0055333446, + 0.0032527319, + -0.0054088864, + 0.03662435, + 0.00041668268, + -0.006438189, + -0.0123045435, + -0.027609538, + 0.007050389, + 0.012943653, + -0.025120374, + -0.004100393, + -0.02390943, + -0.008153694, + -0.010178663, + 0.016240114, + -0.0063843695, + -0.0023478873, + 0.019846037, + 0.014100778, + -0.019671123, + -0.010676496, + 0.03891169, + 0.031672932, + 0.0010461217, + -0.012398728, + 0.010017203, + 0.01486771, + 0.009230089, + -0.010017203, + -0.018648548, + 0.01712814, + 0.00797878, + 0.019321295, + -0.01710123, + -0.0034579197, + -0.044159114, + 0.022119923, + 0.00068115635, + 0.005462706, + 0.007232031, + -0.013602945, + -0.009808652, + -0.01313875, + -0.032318767, + -0.014585156, + 0.023330867, + 0.010609221, + 0.00792496, + 0.035440315, + -0.0043728556, + 0.0065727388, + 0.016119018, + -0.009734649, + -0.0036361977, + -0.02148754, + 0.023425052, + -0.0016532758, + -0.008476613, + -0.0063473685, + 0.0029129947, + 0.004204669, + -0.021649, + -0.013925863, + 0.024864731, + 0.013313664, + 0.0054862523, + 0.03406791, + 0.001156284, + 0.0027246254, + -0.024434172, + 0.031107822, + 0.000033584794, + -0.010992686, + -0.015271358, + 0.00368329, + 0.012614007, + -0.0041104844, + -0.010488126, + -0.012640917, + -0.009815379, + -0.03172675, + -0.00281881, + -0.0016448665, + 0.006394461, + 0.01031994, + 0.012990746, + -0.0030794996, + 0.0033855995, + -0.012741829, + -0.006895657, + 0.0025143921, + -0.0054896157, + 0.0096404655, + -0.0048706885, + 0.0001105828, + -0.0038043845, + 0.016132474, + 0.00092334533, + -0.03686654, + 0.014329512, + -0.014746615, + 0.017989255, + -0.004164304, + -0.034659926, + 0.04109139, + 0.0022856581, + -0.01571537, + -0.019819127, + -0.0067779263, + 0.015029169, + -0.015096444, + 0.0066097397, + -0.0019896494, + -0.024905095, + -0.006138817, + 0.01925402, + 0.000007647242, + -0.0005571186, + -0.008617889, + -0.0030895907, + -0.011584704, + -0.0065391012, + -0.041925594, + 0.022981038, + -0.019294385, + -0.0076625887, + -0.026627328, + -0.017733611, + 0.017881617, + -0.044051476, + -0.0055568907, + 0.021931553, + -0.014692795, + -0.020962797, + 0.013925863, + -0.17523715, + 0.02031696, + 0.019119471, + -0.020088227, + 0.0010208937, + 0.0092906365, + 0.010447761, + 0.0028675843, + 0.0021443812, + 0.0018887373, + 0.012533277, + -0.0027347167, + -0.024461083, + 0.0055568907, + 0.0012311271, + -0.024784, + -0.0048740525, + -0.00027057045, + 0.0037101998, + -0.007090754, + 0.0117461635, + -0.036139973, + 0.010030658, + -0.023317412, + -0.0060244496, + 0.010938867, + -0.013562581, + 0.021635545, + -0.017168505, + -0.01598447, + -0.0063440045, + -0.0011974897, + 0.028820483, + 0.0030172705, + 0.0072723953, + 0.010017203, + -0.009532825, + -0.009230089, + -0.006350732, + 0.030784905, + 0.012291089, + 0.016253568, + -0.003811112, + 0.008409338, + 0.005038875, + 0.029089581, + 0.025281833, + 0.0006916681, + 0.007911505, + 0.004507405, + 0.028147737, + -0.01819108, + 0.0026523052, + -0.008812986, + -0.009775015, + -0.0043661282, + 0.0012269224, + 0.017370328, + 0.0007459083, + -0.014800435, + -0.034740657, + -0.029869968, + -0.007837503, + -0.010447761, + 0.0036092878, + -0.027582629, + -0.019698033, + 0.0075549493, + -0.0135693075, + 0.0100642955, + -0.016253568, + -0.033583533, + -0.0055871643, + -0.0037572922, + 0.0058259894, + 0.014100778, + -0.0054929797, + 0.005321429, + 0.00027288301, + -0.00070554344, + -0.014316057, + 0.030219797, + -0.0029264495, + -0.005536708, + -0.0049312357, + 0.0045645884, + -0.005015329, + 0.020586058, + -0.009849017, + -0.017383784, + 0.0044502215, + -0.02047842, + -0.006428098, + -0.0012101037, + 0.011342515, + 0.022927219, + -0.0052507906, + 0.022671575, + -0.005859627, + -0.0067846538, + 0.0068014725, + -0.0071042087, + -0.015863376, + 0.022631211, + 0.028766664, + 0.030327436, + 0.01481389, + -0.0040499372, + 0.0057217134, + 0.014437151, + -0.024380352, + -0.025174195, + 0.015190628, + 0.035063576, + -0.020411145, + 0.0042853984, + 0.029358681, + -0.014612066, + 0.016482303, + -0.0029634507, + 0.057264227, + -0.0015725462, + 0.005499707, + 0.015325177, + -0.015607731, + -0.001993013, + -0.09219325, + -0.022456296, + 0.022254473, + 0.009297364, + -0.006798109, + 0.017410694, + -0.0016179567, + -0.0022133377, + 0.0012656053, + 0.013105112, + -0.010656313, + -0.003060999, + 0.026761876, + -0.018756187, + 0.04327109, + 0.0029029034, + -0.017612517, + -0.0064617353, + -0.020693699, + 0.023115588, + -0.0070436615, + 0.0045780437, + -0.0024992554, + -0.008059509, + -0.0021141076, + -0.0038481131, + -0.019846037, + 0.018554363, + 0.007945143, + 0.020868612, + 0.0007084867, + -0.00006837843, + 0.014033503, + -0.006418007, + -0.0012000125, + 0.012802376, + -0.014221872, + 0.015378998, + 0.024313077, + -0.015096444, + -0.014854254, + 0.0013042883, + 0.0204246, + -0.007783683, + -0.005577073, + -0.00027162163, + -0.0058461716, + 0.006969659, + 0.006387733, + -0.013858589, + -0.013367483, + -0.008974445, + 0.001727278, + -0.0038481131, + 0.0042853984, + -0.010723588, + 0.027770998, + 0.016159384, + -0.035063576, + -0.010925412, + -0.0032964605, + 0.007124391, + -0.021608636, + 0.016051745, + 0.017558698, + 0.0012075809, + -0.02992379, + -0.00017806773, + 0.0039523887, + -0.028981943, + -0.012842741, + 0.0074809473, + -0.007353125, + -0.007736591, + -0.01568846, + 0.00011720515, + -0.0069629317, + 0.009196452, + 0.006175818, + -0.0023462053, + -0.035225034, + -0.023155954, + -0.0025446657, + -0.02641205, + 0.02595458, + 0.035386495, + 0.0014623839, + -0.015405907, + 0.016374663, + -0.017222324, + -0.0121699935, + 0.010387214, + 0.021191532, + -0.022981038, + -0.018123806, + 0.021352991, + 0.022994494, + -0.004524224, + -0.017666338, + 0.024609087, + -0.024299623, + 0.0057250774, + -0.08847969, + 0.011006142, + 0.009189725, + -0.00853716, + 0.0039086603, + -0.028120827, + 0.017706702, + -0.0034511923, + 0.012768739, + 0.0062060915, + -0.026802242, + -0.0137778595, + 0.008187331, + 0.0024185255, + -0.03643598, + -0.026990611, + 0.022227563, + 0.01590374, + 0.016576488, + 0.017773977, + -0.013347302, + 0.0047933226, + -0.0010007112, + 0.0072051208, + -0.021016618, + 0.006734198, + 0.009055175, + 0.017208869, + -0.004480495, + 0.0034781022, + 0.029035762, + -0.03654362, + -0.01077068, + 0.015419362, + -0.011981625, + -0.03215731, + -0.015271358, + 0.030354347, + -0.0047529577, + 0.044239845, + -0.0046049533, + -0.006172454, + 0.028578294, + 0.005001874, + -0.005751987, + -0.021420266, + 0.016576488, + 0.011692343, + 0.026654238, + 0.008826441, + -0.003912024, + 0.026290955, + -0.016697582, + 0.0027919002, + -0.01617284, + -0.011927805, + 0.013239662, + 0.016267024, + -0.0005323111, + -0.023734516, + 0.024891641, + -0.00015820067, + -0.004742867, + 0.019711489, + 0.03624761, + -0.00006328027, + -0.015325177, + -0.0032039578, + -0.00022852376, + -0.01462552, + -0.024757091, + 0.0038043845, + 0.029331772, + 0.0055299806, + 0.010642858, + -0.00077702285, + 0.011174329, + 0.0024084344, + -0.020088227, + 0.017181959, + 0.01856782, + -0.014100778, + -0.032883875, + 0.02606222, + 0.032722417, + 0.0004662978, + -0.0058663543, + -0.006552556, + -0.00731276, + 0.03248023, + 0.0101988455, + 0.015971014, + 0.0021763367, + -0.011288695, + 0.011470337, + 0.017060865, + -0.00092418626, + -0.03584396, + -0.006996569, + 0.03673199, + -0.0008644799, + -0.004379583, + -0.008705347, + -0.026802242, + -0.04087611, + 0.008638072, + -0.015446272, + -0.03178057, + 0.008335336, + 0.02595458, + 0.010461217, + -0.0017390511, + -0.00077954563, + 0.018984921, + 0.0014321102, + 0.0042080325, + 0.010367032, + -0.018608183, + -0.016441938, + 0.0003891421, + 0.01566155, + 0.03616688, + 0.00851025, + -0.026317865, + 0.02063988, + -0.0029701781, + 0.013979684, + -0.019778762, + 0.0040331185, + 0.013925863, + 0.006606376, + -0.018608183, + -0.008066237, + -0.021649, + -0.0040331185, + -0.0031854573, + -0.016509213, + 0.018258354, + -0.018527454, + 0.037377827, + 0.010145025, + -0.028551385, + -0.005338248, + 0.0074136723, + 0.023317412, + 0.0075751315, + 0.03624761, + -0.02273885, + -0.0121699935, + 0.02497237, + 0.000634905, + 0.0033469165, + -0.0294125, + -0.023223227, + 0.0053819763, + -0.018608183, + -0.0026321227, + -0.01726269, + -0.007783683, + 0.03802366, + -0.0033485985, + 0.0053819763, + 0.0104141245, + -0.024649452, + -0.007063844, + 0.023317412, + 0.015056078, + 0.0021948372, + -0.021770094, + 0.014437151, + 0.010367032, + -0.0074002175, + -0.025376018, + 0.022644665, + 0.0027885365, + -0.01699359, + -0.014840799, + 0.030300526, + -0.0006176659, + -0.028928123, + 0.023815244, + -0.02957396, + -0.033395164, + 0.025066555, + -0.015917195, + -0.022510115, + -0.02404398, + -0.01063613 + ] + }, + { + "object": "embedding", + "index": 7, + "embedding": [ + 0.024549589, + -0.006144328, + -0.0028832944, + -0.013314444, + -0.0069968407, + 0.013993681, + -0.026268475, + -0.008857813, + -0.020072164, + -0.013064927, + 0.022997046, + 0.018325554, + 0.0039887885, + -0.021319743, + -0.0155808795, + -0.009024157, + 0.04932097, + -0.0061477935, + 0.014118439, + -0.011817348, + -0.004775456, + -0.005073489, + 0.0033060852, + 0.0011115585, + 0.008712262, + -0.009516258, + 0.008746917, + -0.013238203, + -0.0026129854, + -0.013737234, + -0.003250637, + -0.0150541235, + -0.025783306, + -0.0341005, + -0.020987056, + -0.01412537, + -0.01635715, + -0.0047823875, + 0.0049002143, + -0.0023201508, + 0.012392621, + -0.009620222, + -0.004837835, + 0.0061270003, + -0.009661809, + 0.038453165, + -0.0066468255, + -0.013245134, + -0.025603099, + 0.0003155769, + 0.02205443, + 0.0023704006, + -0.020113751, + -0.02108409, + -0.026074408, + -0.026254613, + -0.018256243, + 0.03276975, + 0.0028763635, + -0.018588932, + -0.0022144532, + -0.0104658045, + 0.0045952504, + 0.013210478, + 0.0078112325, + -0.01461054, + -0.009620222, + 0.005371522, + -0.017064113, + -0.0048828865, + 0.011172766, + 0.005461625, + 0.0011860667, + -0.02136133, + 0.022484152, + -0.0065393946, + -0.0055967793, + 0.0025783305, + -0.01183121, + 0.005752727, + 0.026434818, + -0.014305576, + -0.007617165, + 0.021444501, + -0.0032610337, + 0.0035937214, + -0.005260626, + 0.02991418, + -0.012344104, + 0.007825094, + 0.015123433, + 0.019046377, + -0.016066048, + -0.0027931915, + -0.031910308, + -0.0038848233, + -0.011706453, + 0.04502375, + 0.016897768, + -0.0039160126, + 0.014035267, + 0.006414637, + -0.022373255, + -0.022109877, + -0.006972582, + -0.0012137907, + -0.00049383345, + 0.0022387118, + 0.008365712, + 0.010382632, + -0.0013385486, + 0.033296507, + 0.01935134, + -0.05838671, + 0.00013656229, + -0.040144328, + -0.010410356, + 0.0024812967, + -0.011644074, + -0.036484763, + 0.023149528, + 0.033989605, + 0.010548976, + 0.0018107228, + 0.027973501, + -0.0084072985, + -0.010590562, + -0.03493222, + 0.0013082256, + 0.01926817, + 0.01092325, + 0.011789625, + 0.029110184, + 0.014915504, + -0.0037947204, + 0.005943329, + -0.027848743, + 0.013155031, + -0.022345532, + -0.015622465, + -0.007894404, + 0.03166079, + -0.020127613, + 0.0046160435, + 0.011054939, + 0.013064927, + 0.005874019, + 0.012697585, + 0.017868107, + -0.0040061157, + 0.03263113, + -0.011914383, + 0.007021099, + -0.0015586078, + 0.005655693, + 0.025007034, + -0.004896749, + 0.031078586, + 0.005558659, + 0.0073329937, + 0.005246764, + 0.006525533, + 0.012725309, + 0.0008650749, + 0.019947406, + 0.002574865, + 0.0043006833, + 0.02922108, + 0.007346856, + -0.010514321, + 0.0050076446, + 0.023856489, + -0.034849048, + 0.018769138, + 0.006986444, + 0.03590256, + 0.016856182, + -0.013681786, + -0.026753645, + -0.0056348997, + -0.00897564, + 0.014776884, + 0.020432577, + 0.01996127, + -0.01447192, + 0.022151463, + 0.022802977, + -0.0017474773, + -0.008116197, + -0.01962858, + -0.0022560393, + 0.0153175015, + 0.02999735, + -0.014291714, + -0.66404486, + -0.0057042097, + -0.010278667, + 0.011359903, + 0.0086984, + 0.016523495, + 0.010847009, + 0.013064927, + -0.019531546, + -0.013155031, + -0.006109673, + -0.012572827, + -0.004751198, + -0.000104181534, + -0.0065844464, + -0.023468353, + 0.005063093, + -0.01718887, + 0.009446948, + 0.017216595, + 0.0065324637, + 0.013300582, + 0.007755785, + -0.0040234434, + 0.00036907554, + 0.011477729, + 0.012468862, + -0.023343595, + -0.003002854, + 0.012115381, + -0.02247029, + 0.033712365, + -0.023204975, + -0.02894384, + 0.013016411, + 0.011456937, + -0.010313322, + 0.038591787, + 0.024826828, + 0.050651718, + -0.0024067883, + 0.005867088, + 0.010874732, + 0.0046437676, + -0.017507697, + -0.011117318, + 0.027266538, + -0.014291714, + 0.0006905005, + 0.0030704313, + 0.01064601, + -0.040809706, + -0.00018410459, + 0.013758027, + 0.03069045, + 0.0009781368, + 0.03673428, + 0.009211293, + 0.0022543066, + 0.008920192, + 0.0025384773, + -0.027807156, + -0.003569463, + -0.0084696775, + -0.006882479, + 0.0020637042, + -0.0155808795, + -0.011297524, + -0.0020637042, + -0.019739477, + -0.011630211, + 0.03437774, + -0.018006727, + -0.006702273, + 0.0109994905, + 0.0060576904, + 0.011678728, + -0.010119255, + -0.014929365, + -0.0026112527, + -0.021278158, + -0.01732749, + -0.034571808, + 0.009571706, + 0.007076547, + -0.01691163, + -0.031300377, + 0.017590867, + 0.0293597, + -0.015539293, + 0.016897768, + 0.021735603, + 0.009828152, + -0.0075686476, + -0.0016062583, + 0.0058636228, + -0.007880542, + -0.014028336, + 0.0028226483, + -0.0059052086, + 0.010174702, + -0.004924473, + 0.0062725516, + 0.010410356, + 0.02894384, + -0.002160738, + -0.016246255, + 0.020765264, + 0.025797168, + -0.013536235, + -0.0020844971, + -0.012004485, + -0.01940679, + -0.006546326, + -0.0024691673, + -0.028777495, + 0.023981247, + -0.0029370096, + 0.032326166, + -0.0023149527, + 0.008656814, + -0.014804607, + 0.010611355, + -0.021042503, + 0.0034187138, + 0.02366242, + 0.0004886352, + -0.01774335, + -0.0007715065, + 0.008372643, + 0.0007702069, + 0.016371014, + 0.0069829784, + -0.010687596, + -0.0006029967, + 0.012018347, + 0.020155337, + -0.011560901, + 0.012441138, + -0.008656814, + -0.01663439, + -0.013771889, + -0.01002222, + 0.004914076, + -0.006764652, + -0.034072775, + -0.014097646, + -0.009446948, + -0.035375804, + -0.00031406077, + -0.0009971971, + 0.011886658, + -0.01642646, + 0.013695648, + 0.010237081, + -0.011581695, + 0.016759148, + -0.014499644, + -0.029831007, + -0.0019285496, + 0.015636327, + -0.0038986853, + -0.012565896, + -0.00078017026, + 0.0029768627, + -0.0051947813, + 0.0058705537, + 0.019365203, + 0.004775456, + -0.037760068, + 0.01231638, + -0.013071858, + -0.01454123, + 0.021042503, + 0.006511671, + 0.009578637, + 0.013203547, + -0.007956783, + -0.002713485, + 0.008733055, + 0.019794924, + -0.017632455, + -0.02852798, + -0.0075270617, + 0.010555907, + -0.005378453, + 0.011505454, + 0.017798798, + -0.02380104, + 0.011713384, + 0.0137233725, + 0.010521252, + -0.010250943, + -0.003437774, + -0.0049903174, + 0.0011427479, + 0.00028265468, + 0.021319743, + -0.011983693, + 0.03193803, + 0.020072164, + 0.0014355825, + 0.02156926, + 0.0067854454, + 0.018783, + -0.039229438, + -0.010292529, + -0.007838957, + 0.03179941, + 0.019254306, + 0.00025428092, + -0.019808786, + -0.015081847, + 0.0009486801, + -0.000596932, + 0.02037713, + -0.0029959232, + 0.0058948123, + -0.004584854, + -0.0042209765, + 0.016509634, + -0.012011416, + -0.015830396, + 0.012940169, + -0.020501886, + 0.0144580575, + 0.029831007, + 0.03451636, + 0.012891653, + -0.035569873, + -0.019171136, + 0.008691469, + -0.005960657, + -0.003912547, + -0.0027308124, + -0.0006081949, + 0.023191113, + -0.02330201, + 0.01551157, + 0.009550912, + 0.033241056, + 0.017798798, + 0.026351647, + -0.008199369, + -0.00897564, + -0.022400979, + 0.0058151055, + 0.012718378, + -0.0095370505, + 0.01488778, + -0.011935175, + 0.015969016, + 0.008019162, + 0.01260055, + 0.0018211192, + 0.0033355418, + 0.019794924, + 0.007173581, + 0.018450312, + 0.02525655, + -0.008871675, + -0.011318317, + -0.0052710227, + 0.013425339, + 0.00077627157, + -0.008441953, + 0.007242891, + -0.028417084, + -0.016925493, + -0.019101825, + -0.014763022, + -0.010244012, + 0.024799105, + -0.004896749, + -0.003957599, + -0.02999735, + -0.01635715, + -0.008317195, + 0.0023028234, + 0.0029647336, + -0.017369077, + -0.045633677, + 0.003624911, + 0.021056365, + -0.01134604, + -0.010680665, + -0.023884213, + -0.0038189788, + -0.0040996843, + 0.0023738663, + 0.0056660892, + 0.020862298, + -0.011124249, + -0.004307614, + 0.009641016, + -0.028236877, + 0.032326166, + -0.011713384, + 0.002968199, + -0.0034412395, + -0.0065775155, + -0.02357925, + -0.0079429215, + -0.027141782, + 0.027918052, + 0.036512487, + -0.018796861, + -0.04216818, + -0.02400897, + -0.026393233, + 0.007845888, + 0.0068027726, + 0.0016487107, + 0.005142799, + -0.00723596, + -0.007915198, + -0.012642137, + -0.0012510448, + 0.032464787, + 0.0090726735, + -0.02073754, + -0.02407828, + -0.036318418, + -0.01064601, + 0.10180247, + 0.03263113, + 0.0059537254, + 0.007270615, + -0.004165529, + 0.007388442, + -0.008642952, + -0.0019285496, + 0.021804914, + 0.0007793039, + 0.012787688, + 0.01190052, + 0.009308328, + 0.0040303743, + 0.012954032, + 0.011401488, + -0.014527367, + -0.033435125, + -0.0033961881, + -0.010146978, + -0.0069344616, + -0.01990582, + -0.013508512, + 0.041585978, + -0.013792682, + 0.0012822343, + 0.021832637, + 0.023094079, + 0.0012250536, + -0.025658548, + -0.014236266, + 0.008005301, + -0.00995291, + 0.003860565, + -0.022997046, + 0.00967567, + 0.025298135, + 0.0008516461, + 0.019642442, + 0.0016209867, + 0.013155031, + 0.014596677, + -0.005343798, + -0.0053195395, + 0.027945776, + -0.0026667006, + -0.017979003, + 0.012489655, + -0.002444909, + -0.02366242, + 0.030939966, + -0.008039955, + -0.03598573, + -0.0012302519, + 0.0023218838, + 0.013023342, + 0.02080685, + 0.0056660892, + -0.023260422, + 0.001045714, + -0.001802059, + -0.035514425, + 0.007818163, + -0.01071532, + -0.010840078, + -0.03346285, + 0.007242891, + -0.0065671187, + -0.03199348, + -0.0011748038, + 0.0046056467, + -0.023981247, + -0.012143105, + 0.016343288, + 0.004969524, + -0.006206707, + 0.02567241, + -0.012753033, + -0.021333605, + 0.019600857, + -0.021181123, + -0.016176945, + -0.0052329022, + -0.008601367, + -0.021139538, + 0.03437774, + 0.006123535, + -0.01822852, + -0.014970952, + 0.011637143, + 0.026102131, + -0.01642646, + 0.007326063, + -0.0018332484, + -0.016246255, + -0.0017700031, + 0.016828459, + 0.019517684, + -0.022525737, + -0.019642442, + 0.034904495, + -0.029831007, + -0.017424524, + -0.008296402, + 0.029331975, + 0.019157274, + 0.00608888, + -0.0068027726, + -0.017369077, + 0.0017301498, + 0.03742738, + -0.019988993, + -0.00855978, + 0.008733055, + -0.002181531, + 0.014555092, + -0.014305576, + 0.019697892, + 0.015497707, + -0.035514425, + -0.023856489, + -0.00904495, + 0.0023010906, + 0.037676893, + -0.005052696, + -0.008289471, + -0.0018869637, + -0.011082663, + 0.009377638, + -0.00290582, + 0.0047962493, + 0.0347936, + 0.0077904398, + -0.012364897, + -0.024535727, + 0.0086706765, + -0.012856998, + 0.009100398, + -0.009211293, + -0.011644074, + -0.012545103, + 0.009051881, + -0.005364591, + -0.0059537254, + -0.023704007, + -0.04183549, + 0.015386811, + -0.013543166, + -0.0147214355, + 0.021208849, + -0.011228214, + 0.015816534, + -0.0047789216, + 0.016163083, + -0.03897992, + -0.022345532, + -0.007908267, + -0.005295281, + 0.0054928144, + 0.023066355, + 0.028472532, + -0.0062240344, + 0.003562532, + -0.0013342168, + 0.0066191014, + 0.003992254, + 0.027252676, + -0.0055136075, + -0.014707574, + 0.023676282, + 0.011997554, + -0.004182856, + -0.015691776, + -0.00038142139, + -0.012863928, + 0.015705638, + 0.020418715, + -0.01649577, + -0.0056452965, + -0.020307818, + -0.010361839, + -0.009966772, + -0.035514425, + 0.002479564, + -0.0061547244, + -0.008504332, + 0.025353584, + 0.0025020896, + 0.005101213, + -0.014596677, + 0.0327143, + -0.0045536645, + 0.00046914179, + 0.020058302, + 0.0014052595, + 0.0046576294, + 0.0047096116, + -0.0016556417, + -0.005122006, + 0.013889716, + 0.012489655, + -0.008913261, + -0.015123433, + -0.0011626746, + 0.008379574, + 0.020224646, + 0.010535114, + -0.013619407, + 0.019171136, + -0.025062481, + -0.011657936, + -0.010535114, + -0.013813475, + -0.018076038, + -0.018394863, + 0.023426767, + -0.029692387, + 0.017979003, + -0.013064927, + -0.03124493, + 0.0075339926, + 0.00883702, + 0.017105699, + 0.004217511, + 0.025020896, + 0.018020589, + 0.00018702859, + -0.014638264, + 0.017147284, + 0.006310672, + -0.023898074, + 0.028555704, + 0.017687902, + -0.0035937214, + -0.012170829, + -0.009516258, + 0.004363062, + -0.018810723, + -0.0033736622, + 0.03590256, + 0.017992865, + 0.00876771, + -0.0078112325, + -0.009141983, + -0.01781266, + 0.028583428, + -0.02219305, + -0.00995291, + -0.0096687395, + -0.02330201, + -0.012399552, + 0.018672103, + -0.02219305, + 0.004706146, + 0.007845888, + -0.021319743, + 0.011124249, + -0.018519621, + -0.013570891, + 0.011373765, + 0.016412599, + 0.017272042, + -0.027613088, + -0.0058151055, + 0.0076379576, + 0.0058497605, + -0.013459994, + -0.006615636, + -0.008053818, + 0.028500255, + -0.007478545, + 0.0007112935, + 0.0098836, + -0.02032168, + 0.03046866, + -0.0027931915, + -0.011852004, + -0.01892162, + -0.0068201004, + -0.01836714, + 0.0045536645, + 0.020224646, + -0.008199369, + -0.009550912, + -0.017563144, + -0.008989502, + -0.007915198, + -0.0048586284, + 0.010528183, + 0.0038155133, + -0.010036082, + -0.011145041, + -0.0073953727, + 0.014943227, + -0.0062794825, + -0.0019302825, + 0.008920192, + 0.028028948, + -0.02776557, + 0.0074369586, + 0.006650291, + 0.0018956275, + -0.029193355, + 0.009862808, + -0.008448884, + -0.010410356, + 0.019448375, + 0.018311692, + -0.020335542, + 0.008227092, + -0.0038536338, + 0.007984508, + 0.009876669, + 0.009446948, + 0.031965755, + 0.0014693711, + -0.020820713, + -0.0013515443, + -0.021070229, + 0.011845073, + -0.016038325, + 0.00828254, + 0.02344063, + -0.013557028, + 0.01711956, + 0.0024414433, + 0.019226583, + 0.037593722, + -0.016412599, + -0.012787688, + -0.00476506, + 0.0005271889, + -0.011470798, + -0.04632678, + -0.01705025, + -0.003583325, + -0.021680156, + 0.042057283, + -0.003583325, + 0.00042603965, + 0.012863928, + 0.019670166, + 0.01962858, + 0.009585568, + -0.0030271125, + -0.01795128, + -0.014638264, + -0.0061616553, + 0.0054165735, + -0.0100014275, + -0.007457752, + 0.026102131, + 0.01064601, + -0.02581103, + -0.006632963, + 0.0020810317, + -0.022373255, + 0.01962858, + -0.02227622, + 0.02073754, + 0.022096016, + 0.012392621, + 0.0016166548, + 0.00959943, + 0.013217409, + 0.0040130466, + -0.022165326, + -0.03102314, + -0.0034065845, + -0.029886454, + -0.0050007137, + -0.025824891, + -0.016870044, + -0.010957905, + 0.03041321, + -0.0050353687, + 0.0116648665, + 0.012080726, + -0.011172766, + 0.0035729285, + 0.0022629702, + 0.0014962287, + -0.00049340026, + 0.014139232, + 0.026975436, + -0.027280401, + 0.006137397, + 0.030219143, + 0.010902457, + -0.01677301, + -0.010978698, + 0.010084599, + -0.014104577, + 0.011041077, + -0.014305576, + 0.01935134, + 0.006650291, + -0.030357763, + 0.009294466, + -0.018173072, + -0.025492204, + 0.009661809, + -0.012496586, + -0.0017509429, + -0.012753033, + 0.013148099, + -0.029193355, + -0.011519316, + 0.023329733, + -0.006813169, + 0.0028347773, + -0.013626338, + -0.015691776, + -0.017424524, + 0.006868617, + -0.0036907555, + -0.014527367, + 0.0008711396, + 0.028444808, + 0.024161452, + -0.015594741, + -0.00765182, + 0.0016963613, + -0.027543778, + 0.014513506, + -0.014527367, + 0.0014832332, + -0.023482215, + -0.0013567425, + -0.00055924477, + -0.022913873, + -0.017105699, + -0.007478545, + -0.00821323, + -0.00849047, + 0.0015170218, + 0.20615555, + -0.010361839, + 0.005316074, + 0.03498767, + 0.006359189, + 0.020002855, + 0.010569769, + 0.022622772, + -0.0043388037, + 0.012822343, + -0.024410969, + 0.0005024972, + 0.014832332, + 0.013494649, + 0.01767404, + -0.011470798, + -0.022844562, + -0.037593722, + -0.026628887, + 0.025575375, + 0.013688717, + 0.0070938743, + -0.014132301, + -0.016537357, + 0.0015768016, + 0.008393437, + -0.02414759, + -0.017992865, + 0.02894384, + 0.011096525, + 0.00946081, + 0.011359903, + -0.025436755, + -0.00009031954, + -0.00029478394, + 0.019850373, + -0.0025696668, + 0.032880645, + 0.019947406, + 0.0016833657, + -0.0060854144, + -0.0077141984, + -0.014665987, + 0.0013550097, + -0.0038813578, + -0.011158904, + -0.0043388037, + 0.008455815, + -0.0034741617, + 0.027557641, + -0.033157885, + -0.008739986, + 0.020488024, + 0.026310062, + 0.0031154826, + -0.02324656, + 0.035597596, + 0.030108247, + 0.0028295792, + -0.015456121, + -0.02269208, + 0.01948996, + -0.0048482316, + 0.010722251, + -0.0019770667, + 0.020404853, + -0.023204975, + -0.003694221, + 0.012288656, + -0.0045536645, + -0.00062812155, + -0.013709511, + -0.0017492102, + 0.0068720826, + -0.02547834, + -0.017771075, + 0.027931914, + -0.01120742, + 0.0008572776, + 0.022345532, + 0.0006632097, + -0.0056452965, + -0.0043318723, + 0.003203853, + 0.0029907248, + -0.028153706, + 0.03645704, + 0.013356029, + -0.023981247, + 0.00026294467, + -0.0057735196, + -0.0056868824, + 0.0048413007, + -0.012337173, + 0.0003433009, + 0.005402711, + 0.0015308837, + 0.041696873, + -0.02310794, + -0.009821221, + -0.016662115, + -0.02484069, + 0.021527674, + -0.0028191826, + 0.009232087, + 0.008150851, + -0.008296402, + 0.017881969, + -0.006979513, + -0.014943227, + -0.015705638, + -0.012413414, + 0.020931609, + -0.014790745, + 0.022082154, + 0.0040823566, + -0.005364591, + -0.011997554, + 0.0015048925, + -0.0125936195, + 0.017244319, + 0.0049972483, + 0.0010630415, + -0.0035365408, + 0.016398737, + -0.012579758, + -0.026115993, + 0.009627153, + -0.002236979, + -0.036346145, + 0.011699521, + -0.0011574763, + 0.01260055, + 0.011110387, + -0.039201714, + 0.007014168, + 0.0024466417, + 0.007173581, + -0.006736928, + 0.018214658, + 0.0016556417, + -0.021236572, + -0.0068304967, + 0.01467985, + 0.0013541434, + 0.006276017, + 0.024119867, + -0.0045813886, + -0.0063661197, + -0.010978698, + -0.012572827, + 0.00010591428, + -0.023080217, + -0.020501886, + 0.0293597, + 0.006234431, + -0.021860361, + -0.026129855, + 0.0113321785, + 0.0115955565, + -0.018048314, + -0.0001495579, + 0.025464479, + 0.007686475, + -0.0003125446, + -0.010424218, + -0.17987321, + 0.017105699, + 0.016967079, + -0.01537295, + 0.025228826, + 0.020723678, + 0.021194985, + -0.0026805627, + -0.013411477, + 0.0053126086, + 0.02129202, + -0.0075339926, + -0.027613088, + -0.008462747, + -0.020917745, + 0.0026476404, + 0.0013913974, + 0.013563959, + 0.018200796, + 0.009828152, + 0.02380104, + -0.03396188, + 0.023856489, + -0.000010633394, + -0.011865865, + 0.00019287663, + -0.011366834, + 0.00932219, + -0.0020255835, + -0.033379678, + -0.01635715, + 0.000749414, + 0.041336462, + 0.02533972, + 0.008532057, + 0.03227072, + 0.0011921313, + 0.0057146065, + -0.015622465, + 0.010375701, + 0.00849047, + 0.006352258, + -0.0023946592, + -0.009433086, + -0.007901335, + 0.01621853, + 0.012704516, + -0.0065948428, + -0.0037704618, + 0.003167465, + -0.007048823, + -0.02636551, + -0.010743044, + -0.002940475, + 0.0076587508, + 0.013203547, + 0.0054512285, + 0.0013784019, + -0.0005761391, + 0.008871675, + -0.035874836, + -0.00025428092, + 0.017784936, + -0.021139538, + -0.011443075, + -0.011810417, + -0.02477138, + -0.013709511, + -0.021319743, + 0.016592804, + -0.012607482, + -0.015650189, + -0.0017076242, + -0.039700747, + -0.016010601, + 0.020765264, + -0.025921926, + 0.0051289373, + -0.008227092, + 0.0037704618, + -0.0067923763, + 0.046520844, + -0.013619407, + -0.0029040873, + 0.0058324332, + -0.005385384, + 0.0034568342, + 0.020418715, + -0.010847009, + -0.016939355, + 0.007346856, + -0.010382632, + -0.006546326, + -0.0097380495, + 0.023288148, + 0.016925493, + -0.016232394, + 0.027640812, + -0.013959026, + -0.016925493, + -0.00084731425, + -0.005551728, + -0.02136133, + 0.014090715, + 0.044053413, + 0.01447192, + -0.00060559576, + -0.0019372134, + 0.013605545, + -0.0006012639, + -0.019018654, + 0.0021018246, + 0.030856794, + 0.010763837, + -0.016010601, + 0.013515443, + 0.012323311, + -0.009135053, + 0.025145654, + -0.01760473, + 0.04410886, + -0.0073607177, + 0.0047026807, + 0.013113445, + 0.015109572, + -0.013418408, + -0.13895261, + -0.031272653, + 0.012129243, + 0.038647234, + 0.0032229132, + 0.02122271, + 0.008573642, + 0.0056314343, + 0.012940169, + 0.020862298, + -0.022816839, + -0.02212374, + 0.005447763, + 0.020973194, + 0.018741414, + -0.009377638, + -0.0021936602, + -0.023620835, + -0.012011416, + 0.022719806, + -0.0068998067, + -0.0014633066, + 0.0105767, + 0.006068087, + 0.008441953, + 0.008726124, + -0.020474162, + 0.021264296, + 0.012448069, + 0.0005076955, + 0.0013558761, + -0.023288148, + 0.019642442, + -0.036900625, + -0.0150264, + 0.024341658, + -0.009398431, + 0.000066169356, + 0.026102131, + -0.035375804, + 0.003411783, + -0.0036283764, + 0.024438692, + -0.02136133, + -0.007977577, + 0.0022733668, + -0.015650189, + 0.020224646, + 0.013903578, + -0.02073754, + -0.030302314, + 0.003527877, + -0.00959943, + -0.009356845, + 0.01940679, + -0.015469983, + -0.0005536133, + 0.024161452, + -0.004245235, + -0.0033060852, + 0.0023513404, + -0.009051881, + -0.0055274693, + 0.0034499033, + 0.0066260323, + 0.005343798, + -0.013321375, + -0.009211293, + 0.010458873, + -0.0014451126, + 0.0025367446, + 0.014901642, + -0.005420039, + 0.026670473, + -0.031050863, + -0.0069552544, + -0.015761085, + -0.0037600654, + 0.010950974, + -0.03069045, + -0.010978698, + -0.0155808795, + 0.006262155, + -0.0010517787, + 0.020196922, + 0.020890022, + 0.024854552, + 0.006137397, + 0.0030323109, + -0.0071943738, + 0.008608297, + -0.0058601573, + 0.023814902, + -0.0197672, + 0.008344919, + -0.00723596, + 0.012205484, + -0.021056365, + -0.007277546, + 0.02665661, + -0.02832005, + -0.02366242, + -0.10518479, + 0.017701764, + -0.0063487925, + -0.0024709, + 0.0029266132, + -0.002706554, + -0.0002720416, + -0.008109265, + 0.0049348692, + -0.037732344, + -0.03276975, + 0.013155031, + -0.0077141984, + 0.0068270313, + -0.031189483, + -0.014804607, + 0.026947713, + 0.018034453, + -0.0025280807, + -0.0100014275, + 0.00006822699, + 0.0013818673, + 0.012198553, + 0.016800735, + -0.024064418, + -0.005586383, + 0.011775763, + -0.0067750486, + -0.014160025, + 0.0057908474, + 0.0016253185, + -0.024549589, + 0.0033615332, + 0.040948324, + -0.004120477, + -0.01585812, + -0.03742738, + 0.01474916, + 0.012884722, + 0.0204603, + -0.023745593, + -0.026698196, + 0.025755582, + -0.017285904, + 0.014166956, + 0.021070229, + 0.0013264194, + 0.02400897, + 0.020903884, + 0.008220161, + -0.005822037, + 0.022068292, + 0.009897462, + -0.01843645, + -0.021264296, + -0.020931609, + 0.01642646, + 0.027640812, + 0.013965957, + -0.020987056, + 0.031633068, + 0.011962899, + 0.017355215, + -0.005402711, + 0.003238508, + -0.02170788, + -0.020557335, + -0.01405606, + -0.006255224, + -0.026060546, + -0.015733361, + -0.011644074, + 0.020432577, + 0.0064596883, + 0.034682706, + -0.006553257, + -0.00090622774, + -0.0044843545, + 0.0063765165, + 0.03160534, + -0.004879421, + 0.012829274, + -0.0456614, + 0.020820713, + 0.013563959, + 0.0033961881, + -0.014430334, + -0.016066048, + -0.021305881, + 0.020141475, + 0.019753339, + 0.010084599, + 0.02463276, + -0.010819285, + -0.003086026, + 0.01426399, + 0.019309755, + -0.019711753, + 0.0016504434, + 0.014638264, + 0.003673428, + -0.011290593, + -0.025977373, + -0.0016920294, + -0.018685965, + -0.013945164, + -0.026850678, + -0.022442566, + -0.0065740496, + 0.013702579, + 0.0093360515, + 0.021097952, + 0.008663745, + 0.02991418, + -0.0045605954, + 0.0057908474, + 0.00723596, + -0.014652126, + -0.026864542, + 0.017577006, + 0.046160433, + 0.019434514, + 0.028555704, + 0.0032575682, + 0.014180818, + 0.003694221, + -0.005489349, + -0.03681745, + 0.01767404, + -0.0073329937, + 0.0022491082, + -0.013861992, + -0.016454184, + -0.0030548365, + -0.008587504, + 0.0012934972, + 0.0026961574, + 0.018783, + -0.032242995, + 0.049431864, + -0.018519621, + -0.015885843, + -0.0016253185, + -0.005343798, + 0.017646316, + 0.00240159, + 0.018186934, + -0.032326166, + -0.005752727, + 0.007915198, + 0.0013454796, + 0.013758027, + -0.009065743, + -0.010535114, + -0.0056452965, + -0.040976048, + 0.0027117522, + -0.019850373, + 0.001718887, + 0.03415595, + 0.01495709, + 0.015899705, + 0.012552034, + -0.025686271, + -0.020474162, + 0.011498523, + 0.0055136075, + 0.00008230558, + -0.012053003, + 0.013314444, + -0.009751911, + -0.038924474, + -0.03096769, + -0.0020238508, + -0.0019891958, + -0.011165835, + -0.003458567, + 0.0043041487, + 0.014638264, + -0.0064388956, + 0.0429999, + -0.011290593, + -0.029526044, + 0.0103964945, + -0.0064354297, + -0.007346856, + -0.013584753, + -0.0008802365 + ] + }, + { + "object": "embedding", + "index": 8, + "embedding": [ + 0.009350771, + 0.009786559, + -0.01786732, + -0.019336548, + -0.015128078, + 0.021042347, + -0.0039781244, + 0.0101414155, + -0.0073212427, + -0.022760598, + -0.0052387975, + -0.017605845, + -0.0019626035, + 0.0015789543, + -0.0068294243, + -0.010309505, + 0.024877284, + -0.01834046, + 0.0199342, + -0.016559953, + -0.017232312, + 0.0049928883, + 0.010365535, + -0.020320185, + -0.01778016, + -0.009294741, + 0.020594107, + -0.017369274, + 0.01035931, + -0.012401288, + 0.0040870714, + -0.012606732, + -0.014517974, + -0.007065995, + -0.007651197, + 0.0016030782, + -0.010570978, + 0.0049493094, + 0.022013532, + -0.0120153045, + 0.010620782, + 0.007993601, + -0.0017664988, + -0.012899333, + -0.0125258, + 0.026396317, + 0.00578042, + 0.011237112, + -0.019423705, + 0.009051945, + 0.0015486047, + 0.024105316, + -0.026744947, + -0.0077508055, + -0.020145869, + 0.0050738202, + -0.003922094, + 0.0116417715, + 0.0064683426, + 0.0032559608, + -0.017070448, + -0.022038434, + -0.026744947, + 0.0040995223, + 0.0028481875, + 0.006848101, + -0.0024575344, + 0.02769123, + 0.011511035, + 0.014343659, + 0.026495926, + 0.0036699597, + 0.00774458, + 0.010919608, + 0.020195672, + 0.009649597, + -0.008118113, + 0.0014038607, + -0.015464257, + -0.0052387975, + 0.0093943495, + -0.025549643, + -0.011666674, + 0.019510863, + 0.011498584, + -0.00097429805, + -0.0026707593, + 0.030505178, + 0.0049306327, + 0.008746893, + -0.009425477, + 0.01035931, + -0.011897019, + 0.0026349626, + -0.017356824, + 0.007956249, + -0.008846502, + 0.043429412, + -0.021465685, + -0.015078274, + 0.0199342, + -0.01926184, + -0.024566006, + -0.006985063, + -0.02071862, + -0.0132853165, + -0.0037415535, + 0.01093206, + 0.0101414155, + -0.006356283, + -0.010440242, + 0.017443981, + 0.02482748, + -0.052543614, + 0.02017077, + -0.022810403, + -0.008566352, + -0.03314481, + -0.016522601, + -0.027591622, + 0.021814315, + 0.01790467, + 0.009356996, + -0.0040652817, + 0.031177538, + -0.013472083, + 0.0033337802, + -0.00677962, + -0.0057586306, + 0.0029633602, + 0.012637859, + 0.007912669, + 0.020320185, + 0.0034147121, + -0.030032037, + 0.014206697, + -0.014331208, + 0.029783014, + -0.0082737515, + -0.02928497, + -0.007850414, + 0.024640713, + -0.014704741, + 0.0032995397, + 0.0018754458, + 0.023818942, + -0.009313418, + -0.016908584, + 0.0019750546, + -0.00842939, + 0.019373901, + -0.0027719245, + 0.010197445, + -0.01810389, + 0.0039999136, + 0.0049991137, + 0.016211323, + 0.028986145, + -0.012488446, + 0.0039968006, + 0.0029898188, + 0.0067920713, + 0.023756685, + -0.0108947065, + 0.019734982, + -0.0012334364, + 0.020133417, + 0.02084313, + 0.01778016, + -0.013297767, + -0.002745466, + 0.004955535, + -0.043653533, + 0.015190333, + 0.02711848, + 0.036406998, + 0.008037181, + -0.003869177, + -0.012475995, + 0.0006050453, + -0.027143383, + 0.011125051, + 0.027641427, + 0.036382094, + -0.032024212, + -0.003925207, + 0.029608699, + -0.013721105, + 0.022710793, + -0.014493072, + 0.007346145, + 0.018016731, + 0.013982577, + -0.022486674, + -0.6984565, + -0.0059111565, + -0.009139102, + 0.017717905, + 0.010104062, + 0.01458023, + 0.009020817, + 0.0046069045, + -0.028388493, + 0.011430103, + -0.03292069, + 0.0051423013, + -0.001163399, + 0.013111001, + -0.005506496, + -0.006767169, + 0.0018380926, + 0.008958561, + 0.017693004, + -0.009008366, + 0.0046753855, + 0.03053008, + -0.00859748, + -0.012183394, + 0.023582371, + 0.0059329458, + 0.020569205, + -0.024279632, + 0.003336893, + 0.006935259, + -0.025699057, + 0.021702254, + 0.0033835846, + 0.012899333, + 0.04965496, + -0.011149954, + -0.023246191, + 0.017356824, + 0.012799724, + 0.030928515, + 0.0009065952, + 0.0019812803, + 0.009525086, + -0.016074361, + 0.0025664815, + 0.006848101, + 0.014268952, + 0.0048403624, + 0.008248849, + -0.011766283, + 0.0003920149, + -0.024429044, + -0.02482748, + -0.006848101, + -0.0125258, + 0.00035641255, + 0.019971553, + -0.009506409, + -0.00035193792, + 0.003772681, + -0.008995915, + 0.0022552041, + -0.010346858, + -0.022138044, + 0.011336721, + 0.019759884, + 0.008342233, + -0.0015447137, + 0.0029135558, + -0.006331381, + 0.0007684659, + 0.037652105, + -0.0044979574, + -0.009774108, + -0.014107089, + -0.008759344, + 0.02893634, + -0.03282108, + 0.0012847972, + -0.008989689, + 0.023171484, + 0.011654223, + -0.04532198, + 0.005627894, + 0.04009252, + -0.013297767, + -0.012233199, + -0.006673786, + 0.013982577, + 0.002146257, + 0.016983291, + 0.01697084, + -0.030032037, + -0.0020310846, + -0.0023299109, + 0.022723245, + 0.0016871231, + 0.01013519, + -0.0021431444, + -0.0039625606, + -0.0022396403, + -0.020606559, + -0.0058862544, + -0.008323556, + -0.0045882277, + 0.0023999482, + -0.010813775, + 0.030305961, + 0.023495212, + -0.033294223, + -0.017269665, + -0.009537538, + -0.0069663865, + 0.0025836017, + 0.017157607, + -0.025649251, + 0.008547676, + 0.022312358, + 0.025923176, + -0.0051018354, + 0.022598734, + 0.0012972483, + 0.025275718, + -0.014654936, + -0.010857353, + 0.008342233, + -0.0014287629, + -0.019797238, + -0.0106705865, + 0.007190506, + 0.0012995829, + 0.004575777, + 0.031725384, + -0.0058955927, + 0.040715072, + 0.018850954, + 0.023246191, + -0.010981864, + 0.00096495973, + -0.014156893, + -0.023183934, + -0.0084231645, + -0.0054753684, + -0.00407462, + 0.0051516397, + -0.038125247, + 0.0007918117, + 0.0003772292, + -0.03961938, + 0.0066613345, + -0.013945224, + 0.0020559868, + -0.02644612, + -0.009942198, + -0.010041807, + -0.004491732, + -0.0077757076, + 0.0044761677, + -0.01548916, + -0.006617756, + -0.0025649252, + 0.011535938, + -0.026371416, + -0.01179741, + 0.00016799248, + 0.004052831, + 0.013272865, + 0.014978665, + -0.00979901, + -0.0050738202, + -0.014293855, + -0.0068294243, + -0.011909471, + 0.0050738202, + 0.024976892, + -0.0064060874, + -0.005089384, + -0.008441841, + -0.0009680725, + 0.017307019, + 0.017282117, + -0.02061901, + -0.017369274, + -0.004404574, + 0.03406619, + -0.0075702644, + 0.0083484575, + 0.01926184, + -0.0064870194, + 0.0054442403, + -0.0014684508, + -0.0066675604, + 0.009668274, + 0.010048032, + 0.00016653337, + 0.013945224, + 0.0010521173, + -0.015053371, + 0.024690518, + 0.015289942, + 0.021889022, + 0.004270725, + 0.025213463, + 0.004874603, + 0.010956962, + -0.012314131, + 0.00037158732, + -0.021889022, + 0.028687319, + 0.0036326065, + 0.0273426, + -0.014667387, + -0.023868745, + 0.004980437, + -0.0076636476, + 0.040266834, + 0.0014559997, + 0.0114923585, + -0.02380649, + -0.016223773, + 0.0016559954, + -0.029434383, + -0.0012023087, + 0.011430103, + -0.03620778, + 0.024080414, + 0.0064496663, + 0.01947351, + -0.0015003567, + -0.013297767, + -0.025400229, + -0.0068605524, + -0.0023143468, + 0.015426904, + -0.03361795, + -0.0060574566, + 0.0071407016, + -0.019523313, + 0.026222002, + -0.010184994, + 0.00831733, + 0.0011462787, + 0.02096764, + -0.0153771, + 0.013272865, + -0.0068543265, + 0.03155107, + 0.011809861, + -0.014119539, + -0.0030007134, + -0.0018956789, + 0.009562439, + -0.0059329458, + -0.0047967834, + 0.010633233, + -0.021677352, + 0.017356824, + -0.0060792463, + 0.011093924, + 0.0062255464, + 0.0035796892, + -0.007651197, + 0.019099977, + 0.0071407016, + -0.0102908285, + 0.007134476, + 0.027641427, + 0.011000541, + -0.023208838, + -0.004146214, + 0.0007427855, + -0.017431531, + -0.003361795, + -0.008448066, + 0.027990056, + -0.017443981, + -0.0068543265, + -0.019448608, + 0.009649597, + 0.018191047, + 0.004924407, + -0.026396317, + -0.0057461793, + 0.019585568, + -0.010770195, + -0.031775188, + -0.026645338, + 0.008217721, + -0.005696375, + 0.02654573, + 0.015862692, + 0.03394168, + -0.0057150517, + -0.006574177, + -0.013472083, + -0.014368561, + 0.04245823, + -0.008522773, + 0.0058208858, + -0.009562439, + -0.011542163, + -0.022723245, + -0.000067702815, + -0.007153153, + 0.029783014, + -0.0033960356, + -0.00814924, + -0.009220035, + -0.0070535443, + -0.0041306503, + 0.014841703, + 0.007781933, + -0.0066800113, + 0.023507664, + 0.015825339, + 0.017929574, + -0.0080434065, + 0.015651023, + 0.008242624, + -0.0030972094, + -0.006574177, + -0.019884396, + -0.022511575, + -0.0117911855, + 0.09965855, + 0.0028326237, + -0.0015307063, + -0.0024948877, + 0.0051236246, + -0.007041093, + -0.0038505006, + 0.0007828625, + 0.0066800113, + 0.023731783, + 0.010116513, + -0.028438296, + -0.0016108601, + 0.023756685, + -0.0039625606, + -0.0019236938, + -0.017095352, + 0.00017830354, + 0.0058582393, + -0.0060201036, + 0.023818942, + -0.025823567, + 0.020980092, + 0.02517611, + -0.0072527616, + 0.0016917923, + 0.009637146, + 0.001219429, + 0.0041368757, + -0.0035392232, + -0.013347572, + 0.010004453, + -0.01037176, + 0.011890794, + 0.002588271, + -0.0022489787, + 0.027865546, + 0.011753832, + 0.022822853, + -0.009307192, + 0.0006536824, + 0.008292428, + 0.01778016, + -0.012164718, + 0.036954843, + -0.033792265, + -0.00032878667, + 0.013833164, + -0.020195672, + -0.007893993, + 0.025524741, + 0.006399862, + -0.021465685, + 0.0066239815, + -0.0041711163, + 0.011822313, + -0.00900214, + -0.010975638, + -0.012096236, + 0.0102908285, + -0.004379672, + -0.039818596, + 0.004224033, + -0.002849744, + -0.0055625257, + -0.021141956, + -0.018203499, + 0.016485248, + -0.016522601, + -0.0048528137, + 0.0091142, + -0.039818596, + -0.008553901, + 0.011977951, + 0.0041648904, + -0.019909298, + 0.021428332, + -0.011324269, + 0.0012295455, + 0.031775188, + -0.0114176525, + -0.0058831414, + -0.023632174, + -0.008267526, + -0.036157973, + 0.015314844, + 0.025524741, + -0.01400748, + -0.024553556, + 0.004507296, + 0.0072714384, + 0.0050177905, + 0.015887594, + 0.015464257, + -0.005643458, + -0.0055251727, + -0.006393636, + 0.02359482, + -0.009736755, + -0.012787272, + 0.014231599, + -0.02597298, + 0.009954649, + 0.0043734466, + 0.019996455, + 0.029982232, + 0.0109694125, + 0.013833164, + -0.033194613, + -0.00785664, + 0.021814315, + -0.038897216, + 0.030853808, + 0.022237653, + -0.015078274, + 0.022225201, + 0.0072527616, + 0.022088239, + 0.012158493, + 0.0033804718, + -0.010458918, + -0.02050695, + 0.008852727, + 0.010514948, + -0.004423251, + 0.009556214, + -0.0075951666, + -0.019311646, + -0.02277305, + 0.006010765, + -0.007893993, + 0.008914983, + -0.020071162, + -0.004765656, + -0.026969068, + 0.00054084434, + -0.00535397, + 0.010284603, + -0.009232486, + -0.013260414, + -0.007875317, + -0.0017073561, + 0.011286916, + -0.0073087914, + -0.042856663, + -0.017057998, + 0.006960161, + -0.000019102214, + -0.017356824, + 0.017630748, + -0.007999827, + 0.029907525, + -0.008410714, + 0.0017166944, + -0.008360909, + -0.015028469, + -0.0077757076, + -0.02689436, + 0.0070908973, + 0.01844007, + 0.027741035, + 0.00053033873, + 0.018751346, + -0.02119176, + -0.013322669, + -0.0052387975, + 0.0037104257, + 0.0031625775, + -0.015514062, + 0.012849528, + 0.019162232, + -0.008006053, + -0.004376559, + 0.026794752, + -0.013907871, + 0.020220576, + -0.023781588, + -0.011187307, + -0.0057866457, + -0.009761657, + -0.027492013, + -0.032621864, + -0.00024357451, + 0.006290915, + -0.011112601, + -0.0005914269, + 0.019660275, + 0.0031485702, + 0.0007330581, + 0.00010777977, + 0.009549988, + -0.004625581, + 0.028039861, + 0.007346145, + -0.01548916, + -0.018203499, + -0.011573291, + -0.009276064, + -0.013036294, + 0.022524027, + 0.0061664036, + -0.0070099654, + 0.0016155293, + 0.011604419, + 0.010278378, + 0.028562807, + 0.0222003, + 0.00700374, + 0.01571328, + -0.01834046, + -0.017892221, + -0.012283003, + -0.008410714, + -0.027890448, + -0.00450107, + 0.012538251, + -0.004245823, + 0.027267894, + -0.026047686, + -0.017518688, + 0.014754545, + 0.0027781501, + 0.012426191, + 0.00889008, + 0.032422647, + 0.009861265, + 0.017307019, + -0.022648538, + 0.02858771, + -0.0069539356, + -0.0079002185, + 0.023408055, + 0.032995395, + 0.0012217636, + -0.024528652, + -0.01719496, + 0.009257387, + 0.0062255464, + 0.00246376, + 0.029110655, + -0.0037353279, + -0.0050831586, + -0.01800428, + -0.012550701, + -0.02836359, + 0.015128078, + -0.006574177, + 0.0053633084, + -0.016734269, + -0.018539678, + -0.0115670655, + -0.0070099654, + -0.00752046, + 0.013845615, + -0.0060325544, + -0.014742094, + -0.0069228075, + 0.004009252, + -0.015887594, + 0.022760598, + 0.017493786, + 0.0069103567, + -0.013609044, + -0.0013330452, + 0.018203499, + 0.018415166, + -0.006110374, + 0.00037431097, + 0.0033991484, + 0.011847215, + -0.009593567, + -0.016771622, + 0.0033804718, + 0.0059889755, + 0.015563866, + 0.0032839759, + 0.008964787, + -0.0018536565, + 0.00350187, + -0.0046598217, + 0.0058582393, + 0.02084313, + -0.0011244894, + -0.012837077, + -0.02516366, + -0.014268952, + -0.011075247, + -0.009020817, + 0.030505178, + -0.010353084, + -0.0032466224, + -0.006785846, + -0.018066537, + 0.00837336, + -0.00063578394, + 0.0064434404, + 0.014194246, + 0.018938113, + -0.015140529, + 0.022262555, + 0.020519402, + 0.0159623, + -0.010346858, + 0.004958648, + -0.0040559433, + -0.0060574566, + 0.01765565, + -0.019062623, + -0.011523486, + -0.029982232, + -0.005064482, + 0.002423294, + -0.008753118, + -0.00046963966, + 0.034589138, + -0.0058551263, + -0.007128251, + -0.00635317, + -0.017443981, + 0.032646764, + -0.015140529, + 0.010321956, + 0.008585028, + -0.01685878, + -0.004834137, + 0.030380666, + -0.00046069044, + -0.0012388837, + -0.0025291282, + -0.019299194, + 0.011106375, + 0.021490587, + 0.0011844102, + -0.025997883, + -0.0056341197, + -0.014069735, + -0.0046971748, + 0.024541104, + -0.0033151035, + 0.0054847063, + 0.0122394245, + 0.020295281, + 0.04646748, + -0.00635317, + -0.015277491, + -0.025076501, + -0.0006015434, + -0.0042084693, + -0.036307387, + -0.017008193, + -0.01572573, + 0.013521887, + -0.0023345798, + -0.009817687, + -0.025524741, + 0.006505696, + -0.030256156, + -0.0058177733, + -0.007881542, + 0.014505523, + 0.014941311, + 0.0233458, + 0.007134476, + 0.008560127, + 0.009332094, + 0.024478849, + -0.004336093, + -0.006244223, + 0.028388493, + -0.022872658, + 0.0170829, + -0.017232312, + -0.018191047, + 0.011878342, + 0.01355924, + 0.0010980307, + 0.016460344, + 0.008684637, + -0.04046605, + -0.013086099, + -0.0120153045, + 0.013658849, + -0.008279976, + 0.01790467, + 0.000060066795, + -0.021278918, + 0.0008404488, + 0.018763797, + -0.010054258, + 0.0010139858, + 0.0055936533, + -0.00020719397, + -0.019050172, + 0.01628603, + -0.027716134, + -0.0043454315, + 0.022735696, + -0.030380666, + 0.0307542, + -0.009288515, + 0.0027190074, + 0.012656536, + -0.013833164, + -0.0033835846, + -0.010415339, + 0.004230259, + -0.01948596, + -0.02198863, + 0.025375327, + -0.018763797, + -0.001550161, + 0.011461231, + 0.011249563, + -0.03792603, + -0.0017353711, + 0.00535397, + -0.0075764903, + -0.0054131127, + 0.012027755, + 0.024167571, + -0.012787272, + -0.0068294243, + -0.0053352932, + -0.016547503, + -0.008778021, + -0.008242624, + 0.008435615, + -0.005024016, + -0.008553901, + 0.011934373, + -0.009039493, + -0.033767365, + -0.0041368757, + 0.0011104819, + 0.015078274, + -0.006505696, + 0.21395957, + -0.017394178, + -0.003489419, + 0.029758113, + 0.0016855667, + 0.028114568, + 0.032173626, + 0.0016248677, + -0.0023968355, + 0.0039999136, + -0.04044115, + 0.015588769, + -0.010340633, + -0.002331467, + -0.0099982275, + -0.009898619, + -0.02243687, + -0.05174674, + -0.012812175, + -0.016236225, + -0.010508723, + -0.006549275, + 0.0019221375, + -0.009531312, + 0.024105316, + 0.014704741, + -0.009008366, + -0.008634833, + 0.017244764, + 0.003405374, + 0.0043454315, + -0.0018178596, + -0.017406628, + 0.004553987, + -0.0028995483, + -0.0056683603, + -0.014804349, + -0.008279976, + 0.009693176, + 0.031177538, + -0.010602105, + -0.0055220597, + -0.000547459, + -0.008641059, + -0.016086813, + 0.016323382, + -0.009817687, + -0.0069663865, + -0.009556214, + 0.03212382, + -0.035410907, + -0.0040995223, + 0.01435611, + 0.02711848, + -0.0016077474, + -0.024902185, + 0.03543581, + 0.011915696, + -0.0056901495, + -0.0244913, + -0.019411255, + 0.003694862, + -0.01179741, + -0.004102635, + 0.0036077043, + 0.009792784, + -0.03394168, + -0.008186594, + 0.00842939, + 0.0027081128, + -0.0008957005, + -0.0020715506, + -0.013571692, + 0.00535397, + -0.021689804, + -0.047314152, + 0.023980806, + 0.00572439, + -0.0010684595, + 0.025948077, + 0.0018629947, + 0.003392923, + 0.02095519, + 0.007047319, + 0.008435615, + -0.023308447, + 0.008329781, + 0.012146041, + -0.009693176, + -0.015302394, + -0.0052823764, + -0.03259696, + -0.0018738895, + -0.008354683, + 0.015551415, + 0.007931346, + 0.019423705, + 0.026072588, + -0.014393464, + -0.006216208, + -0.016721819, + -0.013982577, + 0.018290656, + 0.008921208, + -0.002182054, + 0.0056652473, + 0.009680725, + -0.002339249, + -0.02699397, + -0.023420505, + 0.003349344, + -0.019075075, + -0.0031828107, + -0.006069908, + 0.005659022, + 0.011517261, + 0.008143015, + -0.009027042, + 0.01122466, + -0.018215949, + 0.0035610127, + -0.01697084, + 0.009076847, + 0.002182054, + 0.00963092, + -0.012861979, + -0.014443268, + 0.005627894, + -0.018938113, + -0.04360373, + 0.0030100518, + -0.0075702644, + 0.007165604, + -0.018626835, + -0.023706881, + 0.0069477097, + 0.008821599, + -0.009300967, + -0.013086099, + -0.0044730552, + 0.011349171, + -0.0005221677, + 0.014156893, + -0.0065679518, + -0.021241564, + -0.009325868, + 0.0029400142, + 0.0028248418, + -0.018315557, + 0.00768855, + -0.0060885847, + -0.0020388665, + -0.008099436, + -0.03040557, + 0.038324464, + -0.0067609437, + 0.0004435702, + -0.02644612, + 0.011012992, + 0.025076501, + -0.021428332, + -0.017580943, + 0.034140896, + -0.009780333, + -0.00870954, + 0.01719496, + -0.15857711, + 0.022001082, + 0.016522601, + 0.0043734466, + 0.017008193, + -0.003498757, + 0.0074021746, + 0.004507296, + -0.012283003, + -0.002568038, + 0.029434383, + 0.00074084004, + -0.026969068, + -0.019236939, + -0.020220576, + -0.02050695, + -0.0022567606, + 0.00067975186, + 0.0091142, + 0.008130563, + 0.024404142, + -0.026097491, + 0.02323374, + -0.007153153, + -0.002684767, + -0.010676812, + -0.017693004, + 0.018888308, + -0.018601933, + -0.015215236, + -0.022050885, + 0.0029804804, + 0.02004626, + -0.00027548044, + -0.0044574915, + 0.019535765, + 0.0029726985, + -0.006960161, + -0.016086813, + 0.0050395797, + 0.017580943, + 0.014281403, + -0.009145328, + 0.0018209723, + -0.00044084652, + 0.02574886, + 0.008006053, + -0.010639459, + -0.004189793, + 0.011915696, + 0.020033808, + -0.008441841, + 0.013521887, + -0.0015447137, + -0.0007704114, + 0.0067982967, + 0.005939171, + -0.011069022, + -0.0035454486, + -0.008883855, + -0.021963729, + -0.005587428, + 0.0009276064, + -0.01469229, + 0.00012460821, + -0.007962474, + -0.019286742, + 0.0041804546, + -0.009232486, + 0.01695839, + -0.009294741, + -0.024155121, + 0.020096064, + -0.014903958, + 0.02439169, + 0.011131277, + -0.013609044, + 0.021590196, + 0.017344372, + 0.0010015348, + 0.0061165993, + 0.05772327, + -0.012077561, + 0.033792265, + -0.0030380667, + -0.0035298849, + -0.0046878364, + 0.006823199, + -0.02312168, + -0.0040279287, + 0.017892221, + -0.009039493, + -0.023457859, + -0.008852727, + 0.00086146, + 0.019336548, + -0.0011190419, + 0.018016731, + -0.018191047, + -0.010832451, + 0.016310932, + 0.0018443181, + -0.020755973, + 0.014667387, + 0.052792635, + 0.025599448, + 0.019236939, + -0.00009931692, + 0.010303279, + 0.0273426, + -0.033294223, + -0.017605845, + -0.00025446923, + 0.026122393, + -0.020071162, + -0.009973326, + 0.020282831, + -0.028438296, + 0.018850954, + -0.011511035, + 0.05184635, + 0.006574177, + -0.00450107, + 0.009294741, + -0.02232481, + -0.009076847, + -0.073063016, + -0.030828906, + 0.00889008, + 0.011025443, + -0.01309855, + 0.018502325, + -0.0023034522, + -0.014991116, + 0.013073647, + 0.008591254, + -0.017506236, + -0.011872117, + 0.012812175, + -0.005481594, + 0.04350412, + -0.00046730507, + -0.0043018525, + -0.014854154, + 0.0006136054, + 0.0027999396, + -0.016609758, + 0.009736755, + 0.0008567908, + -0.0020217462, + -0.021714706, + 0.0005034911, + -0.029484188, + 0.003990575, + 0.0054566916, + 0.02232481, + -0.007389724, + -0.023408055, + -0.0009618469, + -0.009942198, + -0.0033835846, + 0.0066924626, + -0.013360023, + 0.006371847, + 0.023632174, + -0.021328723, + -0.0153895505, + 0.008877629, + 0.01019122, + -0.022872658, + -0.008784246, + -0.014679839, + -0.0061290506, + 0.021839216, + 0.0045664385, + -0.008678412, + 0.0042489353, + -0.0012591168, + -0.015738182, + -0.019734982, + 0.00837336, + -0.016833877, + 0.008553901, + 0.022710793, + -0.006371847, + 0.017232312, + -0.016846329, + 0.00013355743, + -0.028438296, + 0.035933856, + -0.0053477446, + 0.005546962, + -0.024242278, + -0.0027236766, + 0.0188136, + -0.016945938, + -0.0092449365, + -0.012656536, + -0.025026698, + 0.0032279459, + -0.017580943, + 0.0039594476, + -0.0024668728, + 0.0066924626, + 0.0025991658, + -0.01604946, + -0.010377986, + -0.02562435, + 0.0010007566, + -0.011398976, + 0.028089665, + 0.012563153, + 0.0077881585, + -0.0025820455, + -0.0061197123, + -0.009960874, + 0.0018738895, + 0.0074208514, + 0.025948077, + -0.014829252, + -0.010060484, + 0.035037376, + -0.0010894707, + -0.012774821, + 0.014966214, + 0.013360023, + -0.020195672, + -0.020369988, + -0.08611176, + 0.015165431, + 0.0094690565, + -0.01150481, + 0.02117931, + 0.0109694125, + 0.017481335, + -0.0013789586, + -0.005929833, + 0.007221634, + -0.04908221, + -0.008622382, + -0.0153895505, + 0.016024556, + -0.012220748, + -0.012283003, + 0.021503037, + 0.025823567, + -0.009437929, + 0.021789413, + 0.007701001, + -0.0096184695, + 0.00214937, + 0.00050504744, + -0.013584143, + 0.004939971, + -0.010508723, + 0.02744221, + -0.027018871, + -0.008952335, + 0.030106742, + -0.034265406, + -0.0049773245, + 0.02368198, + 0.009805236, + -0.021390978, + 0.00883405, + 0.0035454486, + -0.003486306, + 0.019984005, + -0.006586628, + -0.020681266, + 0.016759172, + -0.013633947, + -0.0070535443, + -0.014791898, + 0.0159623, + 0.012812175, + 0.00876557, + 0.021042347, + 0.0016731157, + 0.035037376, + -0.007234085, + -0.008759344, + -0.011069022, + -0.016896132, + 0.016659562, + 0.017929574, + 0.009724304, + -0.027765937, + 0.014430817, + -0.015787985, + -0.0064683426, + 0.016659562, + 0.02756672, + -0.022387065, + -0.017506236, + 0.005136076, + 0.018987916, + -0.027392404, + -0.01733192, + -0.012594281, + 0.022287456, + 0.009431703, + 0.021602646, + 0.013945224, + 0.020245478, + -0.008124338, + -0.03907153, + 0.026520828, + 0.00017139707, + 0.0072527616, + -0.031376753, + 0.0097678825, + 0.024989344, + -0.0009073734, + -0.020980092, + -0.020942738, + -0.007109574, + 0.02836359, + -0.0076138433, + -0.0033244418, + 0.01799183, + -0.0011307149, + 0.0013875187, + 0.0076823244, + -0.007277664, + 0.0027548042, + -0.00780061, + 0.03658131, + 0.01832801, + 0.0019174683, + -0.023719331, + -0.02836359, + -0.016896132, + 0.026969068, + 0.012270552, + -0.023669528, + -0.006561726, + 0.029085753, + 0.01662221, + -0.00046224683, + 0.0034489527, + 0.021764511, + -0.005789758, + 0.0082737515, + -0.0028404056, + -0.011517261, + -0.027516916, + 0.003402261, + 0.03269657, + 0.019909298, + 0.022710793, + -0.010209897, + 0.017805062, + 0.0077508055, + 0.005257474, + -0.031600874, + -0.004230259, + 0.0016653336, + -0.0009065952, + 0.006200644, + -0.016572405, + -0.024092864, + -0.007427077, + -0.011031669, + 0.022872658, + 0.011704028, + -0.016024556, + 0.043354705, + -0.008080759, + -0.010745293, + 0.0069228075, + -0.01606191, + 0.027940253, + 0.0056092176, + 0.01926184, + -0.027168285, + -0.03259696, + -0.00313145, + 0.0011571734, + -0.0026707593, + -0.034614038, + -0.0025633688, + -0.004448153, + -0.018527227, + 0.009176455, + -0.015787985, + 0.016149068, + 0.021664903, + 0.007551588, + -0.013708653, + 0.012924234, + -0.011436329, + 0.008385811, + 0.017170057, + 0.0210797, + -0.010900932, + -0.020008907, + 0.012924234, + 0.007862865, + -0.020183222, + -0.008958561, + 0.018489873, + -0.029608699, + -0.0074208514, + -0.013061197, + 0.02597298, + 0.009419252, + -0.018016731, + 0.02676985, + -0.02244932, + -0.05433657, + 0.0012054214, + 0.0016824539, + -0.009960874, + 0.0033711335, + -0.017344372 + ] + }, + { + "object": "embedding", + "index": 9, + "embedding": [ + -0.008189119, + -0.0015157744, + 0.0074148276, + -0.034777507, + -0.021128977, + 0.0044751437, + -0.019960977, + 0.020341562, + -0.017729968, + -0.0353287, + 0.022835044, + -0.0058432776, + 0.012998914, + 0.0019521337, + -0.010229837, + -0.01561707, + 0.016115766, + -0.011404398, + 0.008445029, + -0.0051181996, + -0.008208805, + 0.027297063, + -0.010879455, + -0.008215366, + 0.0019783808, + 0.0065093, + -0.002918358, + -0.016535722, + 0.0061976146, + -0.024475493, + 0.013307318, + -0.028793152, + -0.024449244, + -0.037244745, + 0.011791544, + -0.011798106, + -0.015984531, + -0.008733748, + 0.006151682, + -0.009494917, + 0.012887363, + -0.011023814, + -0.003313706, + -0.010026421, + -0.021404572, + 0.015722059, + -0.0073098387, + -0.003343234, + -0.028688164, + 0.006670064, + 0.021535808, + 0.022441337, + -0.0248692, + 0.0019258866, + -0.025590997, + -0.013806015, + -0.015577699, + -0.0004457919, + -0.017323136, + -0.010761342, + -0.0062993225, + -0.01956727, + -0.015630193, + 0.024081785, + 0.0025951895, + -0.018438641, + -0.0024196615, + 0.0134385545, + 0.0038714586, + 0.02171954, + 0.030525466, + -0.0061352775, + 0.012847993, + -0.0032087173, + 0.014212846, + 0.0012319769, + -0.019829743, + 0.013333566, + -0.0075263777, + 0.0059023337, + 0.004183144, + -0.042940382, + -0.030079264, + 0.026247177, + 0.017415002, + 0.009199635, + -0.031549107, + 0.023950549, + -0.006975187, + -0.0041929865, + 0.022034505, + 0.021916393, + 0.022467583, + 0.0011507747, + -0.032756478, + 0.014147229, + -0.0021407853, + 0.037717193, + -0.014186599, + -0.012231184, + 0.011955589, + -0.005836716, + -0.010846646, + -0.02040718, + -0.0014239093, + 0.008930602, + -0.02175891, + -0.034357555, + 0.013543543, + -0.016378239, + -0.013451678, + 0.014750914, + 0.0056398623, + -0.041234314, + -0.002867504, + -0.023071269, + 0.003335032, + -0.0158008, + -0.025840346, + -0.038609598, + 0.020538416, + 0.021772033, + 0.010754781, + -0.020367809, + 0.037795935, + 0.0056004915, + -0.00057210645, + -0.019304799, + -0.008504085, + 0.0029298412, + 0.021207718, + -0.0065093, + -0.0076576136, + 0.0034711892, + -0.013327004, + 0.023058144, + -0.033412658, + 0.009711456, + -0.018123675, + -0.035197463, + 0.0015379206, + 0.028241962, + -0.0060926257, + 0.020748394, + -0.007040805, + 0.020039719, + 0.0023310774, + 0.004842604, + 0.013195768, + -0.025407268, + 0.018661743, + -0.022808796, + 0.0075066923, + 0.0073229624, + 0.0025361334, + 0.012559274, + 0.012847993, + 0.019409787, + 0.007972579, + 0.0030331893, + -0.0024311447, + -0.007106423, + 0.030997915, + -0.034278814, + 0.020328438, + 0.016207632, + 0.012008083, + -0.0034908745, + 0.0060335696, + -0.016430732, + -0.010347949, + 0.020275945, + -0.018254912, + 0.02077464, + 0.013792891, + 0.009914871, + 0.0066208504, + 0.022716932, + -0.022231359, + -0.0051542893, + 0.007244221, + 0.008655006, + 0.007841344, + 0.028688164, + 0.0038124025, + 0.0062665134, + 0.025761604, + -0.017139407, + -0.00019572601, + -0.02282192, + -0.004406245, + 0.02398992, + 0.023635583, + -0.010846646, + -0.6702479, + -0.016666956, + -0.011286286, + -0.0068701985, + 0.017454373, + 0.0113847125, + 0.022401966, + 0.017651226, + -0.02165392, + -0.013117027, + -0.011732488, + 0.0056004915, + 0.0064469627, + -0.012933296, + -0.013963498, + -0.0033547173, + 0.01459343, + -0.0063583786, + -0.029370591, + 0.0076641757, + -0.013451678, + -0.0011868646, + -0.0036253913, + -0.004334065, + 0.024436122, + 0.0033924475, + 0.0030594366, + -0.0072639063, + -0.010525118, + 0.0064141536, + -0.03566991, + 0.016614463, + 0.018044934, + -0.0039042674, + 0.047271166, + 0.0016666957, + -0.023740571, + -0.0036549193, + 0.024344256, + 0.009389928, + 0.0054397276, + -0.0039436384, + 0.009055276, + -0.010420129, + -0.001067932, + 0.008864984, + 0.014068487, + -0.006830828, + 0.015564576, + 0.018569877, + 0.017861204, + 0.0023720886, + -0.013215453, + -0.005255997, + 0.007165479, + -0.0031102905, + 0.008733748, + 0.0010654713, + 0.019659135, + -0.009245568, + -0.004215953, + -0.005095233, + -0.036116116, + -0.008727186, + -0.01232305, + 0.014094734, + -0.010288893, + 0.0016552126, + -0.00054914015, + -0.009265253, + 0.008438467, + 0.035092477, + -0.018189294, + -0.001996426, + 0.01748062, + 0.019002955, + 0.015498958, + -0.006817704, + 0.006214019, + -0.0067783333, + 0.018373024, + 0.004275009, + -0.008536894, + 0.014107858, + 0.011620938, + -0.027218321, + -0.033412658, + 0.008641883, + 0.0015239767, + -0.0006393648, + 0.01057105, + 0.024724841, + -0.01700817, + 0.001861909, + -0.014002869, + 0.01085977, + 0.013884757, + 0.020827135, + 0.013832262, + -0.008943725, + -0.011030376, + -0.024987312, + -0.011305971, + 0.0008915838, + 0.0012877521, + 0.008038198, + 0.009245568, + 0.01155532, + 0.025039807, + -0.043622807, + 0.004199548, + -0.02128646, + -0.048583522, + -0.008674691, + 0.025722234, + -0.029239355, + 0.022428213, + -0.0057875025, + 0.016338868, + -0.014882149, + -0.0033727621, + -0.007447636, + 0.012054016, + -0.008333478, + 0.018228665, + 0.009501478, + 0.008661568, + -0.017205024, + -0.009258691, + 0.001945572, + -0.0033104252, + 0.018386148, + 0.014724666, + 0.001847145, + 0.023740571, + 0.0032497286, + 0.005416761, + -0.0147377895, + 0.0049508736, + -0.019331045, + -0.023228751, + -0.0043110987, + -0.012716757, + -0.008976534, + -0.0056234575, + -0.020538416, + -0.012382106, + -0.023058144, + -0.041890495, + 0.011647184, + -0.021496437, + -0.010282331, + -0.0408931, + 0.009711456, + -0.00541348, + -0.015328351, + 0.004275009, + -0.02194264, + 0.0049279076, + -0.0041503347, + 0.021181472, + 0.021968886, + -0.03162785, + -0.003251369, + 0.022362594, + -0.0034875935, + 0.023136886, + 0.016430732, + -0.0013189206, + -0.010708848, + -0.00113355, + -0.009567096, + 0.0021342235, + 0.0020948527, + 0.032231532, + 0.016443856, + -0.006243547, + -0.0026690098, + -0.0036221105, + -0.0005782581, + 0.00039739866, + -0.02161455, + -0.01389788, + 0.00892404, + 0.009718017, + 0.005160851, + 0.01631262, + 0.019751001, + -0.022769425, + 0.00041236775, + -0.016811317, + 0.0034318184, + -0.014829655, + 0.005761255, + -0.0048918175, + -0.00039657843, + -0.0082481755, + 0.005964671, + 0.0003272695, + 0.022113247, + 0.025315402, + -0.010892578, + 0.0017733249, + -0.005679233, + -0.006670064, + -0.031549107, + 0.012624892, + -0.02161455, + 0.021010865, + 0.0066339737, + 0.014291587, + -0.024344256, + 0.0053445813, + 0.015236486, + 0.021955764, + 0.04047315, + -0.01013141, + 0.0011868646, + 0.014396576, + 0.01013141, + -0.010807275, + -0.022953156, + -0.0036811666, + 0.0059056147, + -0.012099949, + 0.015669564, + 0.006177929, + 0.027769513, + -0.004809795, + -0.023556842, + -0.022283852, + 0.008385973, + 0.010052669, + 0.008169434, + -0.01645698, + -0.0076379282, + 0.011719365, + -0.028556928, + 0.019698506, + -0.0035597733, + 0.02556475, + -0.010741657, + 0.033780117, + 0.0023671673, + -0.005446289, + -0.00314474, + 0.032940205, + 0.005767817, + -0.024987312, + 0.02673275, + -0.014252217, + -0.00438984, + 0.00043758965, + -0.004685121, + 0.010183904, + -0.016443856, + 0.03262524, + -0.008490962, + 0.005797345, + 0.037061013, + -0.0019586955, + -0.0102495225, + 0.014803408, + 0.002326156, + 0.00047942108, + -0.018438641, + 0.029738052, + -0.010623544, + -0.007677299, + -0.010374197, + -0.010052669, + -0.01232305, + 0.031286635, + -0.021877022, + 0.011588128, + -0.028530682, + -0.004078155, + -0.013248262, + -0.0003565925, + -0.00917995, + -0.014422824, + -0.023097515, + 0.014449071, + 0.009173389, + -0.0076116812, + -0.017454373, + -0.0017536395, + 0.0048196376, + -0.008359726, + 0.051234487, + 0.0031004478, + 0.03236277, + -0.0054955026, + -0.00259683, + -0.0030692792, + -0.0050394577, + 0.029318096, + -0.017834956, + -0.010223275, + -0.017401878, + 0.018281158, + -0.010649792, + -0.008162872, + 0.0011745611, + 0.05141822, + 0.007139232, + 0.00053642667, + -0.0068964455, + -0.005922019, + -0.009501478, + 0.008930602, + 0.0059909183, + -0.005101795, + -0.0030988073, + -0.011102555, + -0.018858597, + -0.006975187, + 0.009875501, + 0.015643317, + -0.009534287, + -0.005236312, + -0.030840432, + -0.017992439, + -0.016155137, + 0.10467374, + -0.0028100885, + -0.0047376156, + 0.004537481, + 0.0029052345, + 0.014278464, + 0.00071441534, + 0.005823592, + 0.015971407, + -0.0052428734, + 0.009823006, + -0.033727624, + 0.016391361, + 0.0060795024, + -0.0020981338, + -0.008353164, + -0.0046916828, + -0.033045195, + 0.019790372, + -0.012841431, + 0.009527725, + -0.0100854775, + 0.011673432, + 0.02658839, + -0.0066799065, + -0.007769164, + 0.03968573, + 0.012441162, + 0.021811403, + -0.008733748, + -0.005987637, + 0.022467583, + 0.0029462455, + 0.01872736, + 0.00003957582, + -0.020656528, + 0.030919174, + 0.006889884, + 0.0063911877, + -0.011811229, + 0.025105424, + -0.007112985, + -0.0027608748, + -0.017113158, + 0.011483139, + -0.0010613702, + -0.02333374, + 0.013208891, + -0.029711803, + -0.0043110987, + 0.048216064, + -0.008792805, + -0.0054659746, + -0.00009171133, + -0.0024295042, + 0.015315227, + -0.0067061535, + -0.021168347, + 0.005003368, + -0.0070736143, + -0.016653834, + -0.023976795, + -0.0074082655, + -0.011679994, + -0.018792978, + -0.03698227, + -0.012375544, + -0.0032661331, + -0.042546675, + -0.030892927, + 0.01085977, + -0.029921781, + -0.004048627, + -0.0011286286, + 0.024173649, + -0.025932211, + 0.020249696, + 0.004275009, + 0.009737702, + 0.022743179, + -0.0014255497, + -0.029134367, + 0.0066372547, + 0.011732488, + 0.0022277292, + 0.022913786, + 0.026772121, + -0.031470366, + -0.0019111226, + 0.02040718, + 0.0015830329, + -0.007237659, + 0.021732662, + 0.012664263, + -0.009055276, + -0.023202505, + 0.006758648, + 0.025761604, + -0.010991005, + -0.016522598, + 0.022152618, + -0.02552538, + 0.007906962, + -0.008353164, + 0.015577699, + 0.014094734, + 0.009639275, + 0.023254998, + -0.025000436, + -0.0029380433, + 0.028005738, + -0.03013176, + 0.0069555016, + 0.009632714, + -0.01846489, + 0.026798368, + 0.008910917, + 0.009015905, + -0.01085977, + -0.00917995, + 0.025814097, + -0.025735356, + 0.01375352, + 0.03734973, + 0.001441134, + -0.00081612315, + -0.006128716, + 0.0008440108, + -0.019803494, + -0.0051444466, + -0.010485747, + 0.0017290327, + -0.012697072, + -0.018911092, + -0.028136974, + -0.00943586, + -0.011942466, + 0.011470016, + -0.007920085, + -0.022835044, + -0.0024114593, + -0.004911503, + 0.0072639063, + -0.0034547846, + -0.031732835, + -0.012979229, + 0.017401878, + 0.0037369418, + -0.027165828, + 0.012218061, + -0.017113158, + 0.007828221, + -0.022677561, + 0.0014435947, + -0.0143572055, + -0.018766731, + -0.028399445, + -0.013504173, + 0.017821833, + 0.010420129, + 0.027218321, + 0.0017257519, + 0.013235139, + 0.0030348299, + -0.017821833, + 0.0018635496, + -0.009711456, + 0.0151708685, + 0.001002314, + 0.016876934, + 0.027060838, + 0.013543543, + -0.015538328, + 0.0014362127, + -0.016063273, + 0.018609248, + 0.011804667, + -0.018123675, + -0.017100036, + -0.019029204, + -0.016719451, + 0.0028871894, + -0.012080263, + 0.0030331893, + -0.019396663, + -0.015288981, + 0.022664437, + -0.01210651, + -0.0021899987, + 0.006624131, + 0.009737702, + -0.01938354, + 0.010964758, + 0.020197202, + -0.016194507, + -0.013622285, + -0.015498958, + -0.0038681778, + 0.008425344, + 0.023753695, + 0.018661743, + 0.0017798867, + -0.016404485, + -0.0034219758, + -0.0004466121, + 0.015328351, + -0.00079233665, + -0.016653834, + 0.017953068, + -0.02779576, + -0.015420216, + -0.0022687404, + 0.0033990094, + -0.018058058, + -0.010452938, + 0.012585521, + -0.022362594, + 0.017467497, + -0.02750704, + -0.009514602, + -0.011076309, + -0.010964758, + 0.019737877, + -0.0053773904, + 0.018596124, + 0.013418869, + -0.013005476, + -0.013287633, + 0.017310012, + 0.0036910092, + -0.022585696, + 0.021824528, + 0.0021850774, + -0.010918826, + -0.022191988, + -0.0039305147, + -0.0026903355, + 0.009980489, + -0.0065617943, + 0.035984877, + 0.023740571, + 0.0031709871, + -0.03178533, + -0.02194264, + 0.0073360857, + 0.013235139, + -0.0086812535, + 0.008576265, + -0.0071851644, + -0.0023130325, + -0.01729689, + 0.007040805, + -0.02640466, + 0.019803494, + 0.009927995, + -0.025669739, + -0.009941118, + -0.012099949, + 0.0030988073, + -0.00097442645, + 0.0050525814, + 0.019357292, + 0.018819226, + 0.012401791, + -0.003946919, + -0.00030655882, + -0.032494005, + 0.01784808, + -0.019987226, + 0.020932123, + -0.014186599, + -0.013701026, + -0.002252336, + 0.0045834132, + 0.02644403, + 0.028583175, + 0.004527638, + -0.01960664, + -0.014580307, + 0.0027789199, + 0.024396751, + 0.0030610769, + -0.003269414, + -0.00837285, + -0.021640796, + -0.014514688, + -0.014790284, + 0.0089502875, + 0.012821746, + -0.007493569, + -0.0086812535, + -0.007966018, + -0.0052166265, + 0.020604033, + -0.0020472798, + -0.0138716325, + 0.03616861, + 0.027034592, + -0.004970559, + -0.0028691445, + -0.002472156, + 0.013300757, + -0.034226317, + -0.001879954, + -0.007854467, + -0.007966018, + 0.013648531, + -0.012598645, + -0.00035741273, + -0.011699679, + 0.015774554, + 0.012972667, + 0.016247002, + 0.01225087, + 0.023727447, + -0.010426691, + 0.0062960414, + -0.014659048, + 0.0017241114, + 0.024527987, + -0.0075132544, + 0.006059817, + 0.009225883, + -0.008175995, + 0.03010551, + 0.013182645, + 0.00976395, + 0.012152443, + -0.020131584, + -0.011371589, + -0.012231184, + 0.014711542, + -0.011896533, + -0.008149749, + -0.013701026, + -0.014449071, + -0.0053445813, + 0.015945159, + 0.015302104, + -0.014829655, + -0.021050235, + 0.032756478, + 0.03921328, + 0.012624892, + -0.0059023337, + -0.020354686, + -0.00859595, + 0.002677212, + -0.05448914, + -0.013556667, + -0.0030249872, + 0.030840432, + 0.009376803, + -0.018294282, + -0.031732835, + 0.0062173, + -0.024659222, + -0.006082783, + -0.007493569, + 0.023097515, + 0.01524961, + -0.008116939, + -0.012664263, + -0.0021785158, + 0.0041044024, + 0.022690684, + -0.00010550135, + 0.0061943335, + 0.030158006, + -0.031207893, + 0.02458048, + 0.0014304711, + -0.009494917, + 0.010229837, + 0.0137666445, + -0.00025611502, + 0.00021407854, + 0.0013952014, + -0.017493743, + -0.013609161, + -0.016732575, + 0.0004293874, + -0.011515949, + 0.021522684, + 0.033622634, + -0.037244745, + 0.0027198638, + 0.021667045, + -0.026129065, + 0.0036713239, + 0.008497523, + 0.0007603479, + 0.0069883107, + 0.00015574008, + -0.028530682, + -0.0068242657, + -0.005446289, + -0.041129325, + 0.015682688, + 0.012598645, + -0.012565835, + 0.0076969843, + -0.0027756388, + 0.0055906484, + -0.010557927, + -0.0067192772, + -0.037979666, + -0.007880715, + 0.020997742, + -0.026877109, + -0.008280984, + -0.010741657, + 0.012565835, + -0.034357555, + 0.0047310535, + 0.0003309605, + -0.012821746, + -0.014514688, + -0.0020128305, + 0.016470103, + -0.007106423, + -0.0027297065, + 0.0062533896, + -0.021312708, + -0.001503471, + -0.006528985, + 0.01758561, + -0.010518556, + 0.024436122, + 0.013464802, + -0.007040805, + -0.042494178, + -0.004524357, + 0.013622285, + 0.0016265047, + 0.0060106036, + 0.23475474, + 0.018110553, + 0.0013000554, + 0.031207893, + -0.0067783333, + 0.030525466, + 0.025249785, + -0.005735008, + -0.00994768, + -0.010098601, + -0.018058058, + -0.007749479, + -0.0077626025, + -0.0012992353, + -0.0091668265, + -0.015669564, + -0.020958371, + -0.039160788, + -0.01027577, + -0.022428213, + 0.0016256846, + 0.005928581, + -0.0018291001, + -0.020302191, + 0.033333912, + 0.004567009, + -0.016509473, + 0.013884757, + 0.03228403, + 0.0059154574, + -0.003167706, + 0.009475231, + 0.014606554, + 0.008609074, + -0.012185251, + -0.012185251, + -0.022428213, + -0.0034711892, + 0.015538328, + 0.01872736, + 0.0007808535, + -0.008904355, + 0.005794064, + -0.0053905137, + -0.0031168521, + 0.040210675, + 0.0006287019, + -0.004143773, + 0.018412394, + 0.019449158, + -0.023635583, + -0.009639275, + 0.00980332, + 0.039475754, + 0.013687903, + 0.0080841305, + 0.026024075, + 0.013195768, + 0.0033891667, + 0.0019833022, + -0.017782463, + 0.0065913224, + -0.014435947, + 0.006204176, + -0.003992852, + 0.0025295718, + -0.029134367, + 0.03514497, + 0.005767817, + 0.0020948527, + 0.0146852955, + -0.016811317, + -0.011975274, + -0.010026421, + -0.02051217, + -0.032494005, + 0.027822006, + 0.037953418, + 0.0037763126, + 0.0183599, + -0.022178864, + 0.015288981, + 0.018766731, + -0.00076198834, + 0.011417522, + -0.03404259, + 0.004970559, + 0.008451591, + 0.0037172565, + 0.00175528, + 0.007565749, + 0.0043832785, + -0.014015992, + -0.0038124025, + 0.010544803, + 0.0057186037, + 0.0035466498, + 0.012847993, + -0.01408161, + 0.008405658, + -0.010702286, + -0.005397076, + 0.02519729, + -0.0023655267, + -0.0050985143, + 0.0011097634, + 0.008891231, + 0.015498958, + -0.027008345, + -0.037323486, + -0.01013141, + -0.010439814, + -0.008766557, + -0.0012631454, + 0.029081872, + 0.003628672, + 0.032572746, + -0.0126839485, + 0.012172128, + -0.01608952, + 0.00057374686, + -0.01923918, + -0.018858597, + 0.012933296, + 0.0071917265, + -0.011837477, + -0.018569877, + 0.0038353687, + 0.0082481755, + -0.031732835, + 0.0022392122, + 0.010354511, + -0.00057989854, + -0.0061221537, + -0.006496176, + 0.027926996, + 0.0037402227, + -0.021076484, + -0.010761342, + -0.0017175496, + 0.026929604, + 0.006410873, + 0.011305971, + 0.017572485, + -0.006666783, + -0.0040748743, + 0.022979403, + 0.0016404486, + 0.0028428973, + -0.012368982, + -0.013366375, + -0.017165653, + -0.0035433688, + -0.018884843, + 0.01803181, + -0.019002955, + -0.023451852, + -0.023963673, + -0.014908397, + 0.03616861, + -0.014580307, + 0.0073820185, + 0.033963848, + -0.013431992, + -0.030525466, + -0.0007845445, + -0.16934678, + 0.0274283, + 0.039108295, + -0.00028092682, + 0.010052669, + 0.01989536, + -0.005587368, + -0.012204937, + -0.0038386495, + 0.017113158, + 0.039187036, + 0.0019980664, + -0.025171041, + -0.016522598, + 0.0012483813, + -0.026982097, + -0.008313793, + -0.0037369418, + 0.010931949, + -0.002874066, + 0.016443856, + -0.013806015, + 0.022178864, + -0.027585782, + -0.006597884, + 0.017165653, + 0.0010728533, + 0.02220511, + -0.0019997067, + -0.018609248, + -0.02761203, + -0.010630107, + 0.016076395, + 0.0048918175, + 0.022021381, + 0.021312708, + 0.0015379206, + -0.012565835, + -0.0076707373, + 0.008359726, + 0.009029029, + 0.019331045, + 0.015328351, + 0.008490962, + -0.0035204026, + 0.024698593, + 0.03517122, + 0.0027854815, + 0.0061024684, + -0.014606554, + 0.016037025, + -0.021496437, + -0.003533526, + 0.014475318, + 0.0012811903, + 0.011634061, + -0.0018192574, + -0.0011614376, + 0.0073492094, + -0.016627586, + -0.021995135, + 0.0008579546, + -0.005426604, + -0.0054692556, + -0.022795673, + -0.022323223, + -0.0050985143, + 0.009593343, + -0.026220929, + 0.018163046, + 0.0044849864, + -0.03632609, + 0.013327004, + -0.024947941, + 0.026247177, + 0.018819226, + -0.015000261, + 0.014934643, + -0.009914871, + -0.001301696, + -0.020105338, + 0.027533289, + -0.020840257, + -0.022520078, + 0.010662915, + 0.009396489, + -0.008497523, + 0.0026050322, + -0.0071326704, + -0.016693205, + -0.014317835, + -0.02542039, + 0.0056693903, + -0.03262524, + 0.0063419743, + 0.007867591, + -0.010872893, + -0.002897032, + -0.011424083, + 0.008477838, + 0.027848255, + 0.0021457067, + -0.030420478, + 0.02845194, + 0.029606815, + 0.010833522, + -0.009448984, + 0.014619677, + 0.012408352, + -0.012460847, + -0.028294457, + -0.01129941, + 0.021023989, + 0.0042782896, + -0.009134018, + 0.0009826287, + 0.012939858, + -0.006981749, + 0.004176582, + -0.0014723026, + 0.05496159, + -0.0007816737, + -0.0076969843, + 0.039738227, + -0.00015850834, + -0.013543543, + -0.07690423, + -0.027218321, + 0.02106336, + 0.016194507, + -0.013674779, + 0.04433148, + -0.0055808057, + 0.01762498, + 0.0036188294, + 0.019436033, + 0.0068439515, + -0.018084304, + 0.01371415, + -0.013976621, + 0.0427829, + 0.019081697, + 0.008792805, + -0.028294457, + -0.008182557, + 0.016601339, + -0.017126283, + 0.0041240877, + -0.011634061, + -0.016483227, + 0.000017788614, + -0.0018012126, + -0.029475579, + 0.01755936, + 0.011889971, + 0.011876848, + -0.010807275, + -0.020604033, + -0.01960664, + -0.00281665, + -0.014147229, + 0.009849253, + -0.034173824, + 0.010879455, + 0.020131584, + -0.04015818, + -0.007565749, + 0.00208501, + 0.0046687163, + -0.021850774, + -0.010492309, + -0.004078155, + 0.015735183, + -0.0130186, + 0.023793066, + -0.009527725, + -0.0022687404, + -0.0022917066, + -0.008504085, + 0.015525205, + -0.016443856, + -0.016430732, + -0.01024296, + 0.011430645, + -0.020787764, + -0.0067652096, + -0.00917995, + -0.0043078177, + -0.025945334, + 0.010800713, + 0.016194507, + 0.014882149, + -0.031339128, + -0.026181558, + 0.012605207, + -0.0169688, + -0.016942553, + 0.009081523, + -0.02695585, + -0.00071277487, + -0.023071269, + -0.010518556, + -0.013556667, + -0.0156039465, + 0.024737963, + -0.029239355, + -0.027926996, + -0.028845647, + 0.008746872, + 0.013136712, + 0.023924302, + 0.025879717, + 0.0012024487, + -0.015813924, + -0.0068045803, + -0.024265515, + 0.015315227, + 0.031207893, + -0.0020308753, + -0.025066053, + -0.008707501, + 0.024186773, + 0.0031939533, + -0.006378064, + 0.007447636, + 0.0158008, + -0.012710195, + -0.010072354, + -0.08887294, + 0.013648531, + -0.0027854815, + -0.019094821, + 0.030289242, + -0.014882149, + 0.0027379086, + -0.021352079, + -0.001368134, + 0.012027768, + -0.047271166, + -0.007985704, + 0.0021243808, + 0.0117062405, + -0.020302191, + -0.02490857, + 0.031207893, + 0.012172128, + 0.009665523, + 0.010439814, + 0.014816531, + 0.0035630541, + 0.014514688, + -0.008307232, + -0.020879628, + -0.00073902204, + -0.010945072, + 0.017375631, + 0.0015805722, + -0.0052133454, + 0.009560534, + -0.039187036, + 0.005613615, + 0.0446202, + -0.00075952767, + -0.021575179, + 0.013412307, + 0.024698593, + 0.03446254, + 0.008641883, + -0.009672085, + -0.008602512, + 0.008202243, + -0.020695899, + -0.009744264, + 0.0073229624, + 0.009927995, + -0.002040718, + 0.016470103, + 0.031654093, + 0.0014271903, + 0.03923953, + 0.00039145202, + -0.02304502, + -0.0092193205, + -0.023254998, + 0.017716844, + 0.0036713239, + -0.007723232, + 0.011017253, + 0.023963673, + 0.0125199035, + 0.011640623, + 0.024173649, + 0.023766818, + -0.011056623, + -0.02545976, + 0.0020472798, + 0.021863898, + -0.015341475, + -0.00015502238, + 0.0011679993, + 0.023071269, + 0.0009777073, + 0.028268209, + -0.0183599, + 0.015905788, + -0.0027149424, + -0.029974276, + 0.02212637, + 0.0020718866, + 0.000023261047, + -0.01758561, + 0.020761516, + 0.01254615, + -0.0006791457, + -0.023018774, + 0.00318247, + -0.005954828, + 0.0167457, + -0.004212672, + -0.010649792, + 0.012847993, + -0.0031217735, + 0.010557927, + 0.011279725, + 0.010945072, + -0.005108357, + 0.017782463, + 0.01758561, + 0.008792805, + -0.023018774, + -0.0044423346, + -0.016338868, + -0.016010778, + 0.030315489, + -0.0005606233, + -0.015367722, + -0.012093387, + 0.011050061, + 0.023386234, + 0.026654009, + 0.009613029, + 0.02538102, + -0.026378412, + 0.01700817, + -0.0138191385, + -0.029055625, + -0.03244151, + 0.015695812, + 0.013464802, + 0.023359988, + 0.0060040415, + -0.0077035464, + 0.012716757, + 0.015236486, + -0.0066208504, + -0.008622197, + 0.008038198, + -0.0068964455, + 0.023622459, + 0.007578872, + -0.020564662, + 0.006027008, + -0.013622285, + 0.013661656, + -0.008182557, + -0.0034908745, + -0.017073788, + 0.024186773, + -0.0037336608, + 0.00961959, + 0.0058465586, + 0.012198376, + 0.031837825, + 0.012992352, + 0.022401966, + -0.027664524, + -0.019659135, + 0.009724579, + 0.01729689, + 0.006975187, + -0.012480533, + -0.016706329, + 0.0034022902, + 0.002165392, + 0.017533114, + -0.014278464, + 0.012040893, + 0.039370764, + 0.005219907, + 0.029606815, + -0.01733626, + -0.022730054, + -0.005105076, + 0.017310012, + 0.010991005, + -0.0013927408, + -0.026798368, + 0.0107875895, + 0.00032644926, + -0.016286373, + -0.023241876, + 0.012237746, + -0.014068487, + -0.02431801, + 0.0028806275, + 0.026535895, + 0.018648619, + -0.007723232, + 0.024790458, + -0.020052843, + -0.0042651664, + 0.013477925, + -0.014029116, + -0.007355771, + 0.0037795934, + -0.013340128 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 24, + "total_tokens": 24 + } +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:34 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 93 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-w85sk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_b56738fd1bd44b29aa74f58173fa82f4 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:35 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 91 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-p6w2b +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_f5cb3b86e3ac4af0bda8e35ec8b97d74 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} diff --git a/vectorstores/inmemory/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr b/vectorstores/inmemory/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr new file mode 100644 index 000000000..0af1b8fa2 --- /dev/null +++ b/vectorstores/inmemory/testdata/TestSimilaritySearchWithInvalidScoreThreshold.httprr @@ -0,0 +1,18646 @@ +httprr trace v1 +334 334599 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 138 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Tokyo","Yokohama","Osaka","Nagoya","Sapporo","Fukuoka","Dublin","Paris","London ","New York"]}HTTP/2.0 200 OK +Content-Length: 333642 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:36 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 190 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-w85sk +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999984 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_40ca5b13f8b84f13af1b3ecc6320390e + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.001070031, + 0.008037085, + -0.008887224, + -0.008638722, + -0.010875242, + 0.014713947, + -0.029375577, + 0.013065985, + -0.011051809, + -0.035548896, + 0.001566218, + -0.02474559, + 0.016296513, + -0.027125979, + -0.007997848, + -0.021070372, + 0.021711247, + -0.01803603, + 0.0024016432, + -0.02207746, + -0.011306851, + 0.012686692, + -0.0024065478, + -0.019016959, + -0.008344443, + -0.011803855, + 0.0013651273, + -0.015302505, + 0.008965698, + -0.020010969, + 0.019043118, + -0.019095434, + -0.010522107, + -0.022875283, + 0.008828368, + -0.004652877, + -0.015328663, + -0.0060261786, + -0.0023493269, + -0.0118496325, + 0.009122647, + -0.008207113, + 0.0015155366, + -0.017251285, + -0.018323768, + 0.01607417, + -0.016649649, + 0.016571173, + -0.00018801155, + 0.012255083, + 0.015119398, + 0.020311786, + -0.032331448, + -0.0067684157, + -0.026602816, + -0.016388068, + -0.028486202, + -0.0007291578, + 0.000018967197, + 0.0041558724, + -0.0033645893, + -0.0059934813, + -0.015982617, + 0.0117123015, + 0.014269259, + -0.011346088, + -0.011241456, + 0.028616993, + -0.015302505, + 0.0038223565, + 0.013242552, + 0.017395156, + -0.0010079053, + -0.0024752128, + 0.031625178, + -0.008010927, + -0.0015245284, + 0.004652877, + 0.011856171, + 0.009848535, + 0.01523711, + -0.035601214, + 0.004365138, + 0.0026583197, + 0.013190236, + 0.007605476, + -0.008743354, + 0.0360459, + -0.002671399, + -0.00082071126, + 0.009534637, + 0.003756961, + 0.00992047, + 0.01062674, + -0.024850221, + -0.016113406, + -0.006454518, + 0.043344017, + -0.01857227, + -0.013196776, + -0.0015964633, + 0.009815837, + -0.0037242635, + -0.011529195, + -0.025883468, + 0.011568432, + 0.014321575, + -0.016440384, + 0.008906842, + -0.008710656, + -0.0019765736, + 0.027989198, + -0.013085604, + -0.059065055, + -0.017722132, + -0.012961352, + 0.005476858, + -0.01662349, + -0.010234368, + -0.014753184, + 0.018807694, + 0.019265462, + 0.011856171, + 0.002682843, + 0.02725677, + 0.00033167689, + -0.006483946, + -0.019330857, + 0.00050926604, + -0.009613113, + 0.026995188, + 0.011744999, + -0.0058986577, + 0.015629482, + -0.021004977, + 0.013903045, + -0.016440384, + 0.01131993, + -0.01103873, + -0.006441439, + 0.0063368063, + 0.0090637915, + -0.01286326, + 0.013347185, + 0.0097242845, + 0.02502025, + 0.023136863, + -0.0030392476, + 0.015851825, + -0.005967323, + 0.003730803, + -0.0050256304, + 0.016976625, + 0.0071804062, + 0.009580415, + 0.0035738542, + 0.03225297, + 0.018611507, + 0.0059280857, + 0.010548265, + 0.006931904, + 0.004237617, + 0.031389754, + -0.021345032, + 0.0030081847, + 0.0127063105, + 0.012032739, + 0.014413129, + -0.00033699026, + -0.011588051, + -0.018336847, + 0.019448569, + -0.04049278, + 0.018624587, + 0.005208737, + 0.017578263, + 0.011006032, + 0.009292675, + -0.019854018, + -0.007971689, + -0.0023803897, + 0.00003410264, + 0.02683824, + 0.009927009, + -0.007919373, + 0.005771137, + 0.027779931, + 0.01551177, + -0.0011803856, + -0.014504682, + 0.025870388, + 0.035548896, + 0.031180488, + 0.0071346294, + -0.67843723, + -0.03280229, + 0.0011599495, + 0.004224538, + 0.020468736, + 0.005329719, + 0.018245295, + 0.015498691, + -0.012830562, + 0.013562989, + -0.027230611, + 0.017996792, + -0.01789216, + -0.012601678, + -0.008749894, + 0.0048032864, + 0.015263268, + -0.0027139059, + -0.004208189, + 0.0105548045, + 0.0047771283, + 0.017813684, + -0.008409838, + -0.0052348953, + 0.013236013, + -0.010567884, + 0.007697029, + -0.004306282, + -0.009416926, + 0.02362079, + -0.029794108, + 0.049700443, + 0.0050485185, + -0.01508016, + 0.039917305, + -0.015694877, + -0.02305839, + 0.017565183, + 0.02054721, + 0.031258963, + 0.0014574982, + 0.003841975, + 0.0028806638, + -0.0026027337, + 0.005336258, + 0.002027255, + 0.022208251, + -0.023280734, + 0.008991856, + -0.008220192, + 0.021828959, + -0.036229007, + -0.016675808, + -0.01634883, + -0.0004142385, + 0.0098354565, + 0.0035967426, + -0.0034332543, + -0.0009694856, + -0.009534637, + -0.015851825, + -0.0092011215, + -0.027779931, + -0.021279637, + -0.012366255, + 0.012405492, + -0.010437093, + -0.023306891, + -0.0006384218, + -0.01968399, + 0.004554784, + 0.021397348, + -0.0070365365, + -0.009586954, + 0.017656736, + 0.006235444, + 0.0259881, + -0.031991392, + -0.0034169054, + -0.007618555, + 0.004201649, + 0.012183148, + -0.01969707, + -0.0053035603, + 0.015681798, + -0.040178884, + -0.035967425, + 0.002808729, + 0.026602816, + -0.012882878, + 0.0046430677, + 0.0036719472, + 0.0063923923, + 0.00908995, + -0.011810395, + 0.011882329, + -0.0016970086, + -0.008050164, + 0.006748797, + -0.0071346294, + -0.014216943, + -0.015446375, + 0.009750443, + 0.0036261706, + -0.015302505, + -0.004280124, + -0.014910133, + 0.017238207, + 0.021894353, + -0.014923212, + 0.006107923, + -0.010240907, + -0.017722132, + 0.00039257627, + 0.018493796, + -0.023019154, + 0.017839843, + -0.00011781375, + 0.022391358, + 0.0090637915, + 0.007363513, + 0.0019733037, + 0.016374988, + 0.022574464, + 0.017251285, + 0.015106319, + 0.006078495, + 0.0010798402, + -0.00642509, + 0.0061733183, + -0.001871941, + 0.014426208, + 0.010574424, + -0.006467597, + 0.023176102, + -0.009488861, + -0.009181503, + -0.0059346254, + 0.018493796, + -0.036385957, + -0.033587035, + -0.012425111, + -0.0015277981, + -0.003521538, + 0.012085055, + -0.026419709, + -0.016937388, + 0.0007418282, + -0.019827861, + 0.00503217, + -0.008213652, + 0.0026615895, + -0.029794108, + 0.01914775, + -0.0060065603, + -0.013484515, + -0.00008174415, + -0.0026632245, + -0.021057293, + 0.0029525987, + 0.019043118, + 0.0080697825, + -0.03832166, + -0.0014574982, + 0.0060686856, + -0.012071976, + 0.012804404, + 0.017447472, + -0.0054833977, + -0.008867606, + -0.02151506, + -0.019265462, + -0.02388237, + 0.003953147, + 0.018925406, + 0.0033090033, + 0.010541726, + -0.013628385, + -0.0012694866, + 0.002153141, + 0.011091046, + -0.020730317, + -0.013602227, + 0.011758079, + 0.02027255, + -0.01971015, + 0.011267614, + 0.017944476, + -0.00084196473, + 0.0032043706, + -0.0073308153, + 0.015877984, + 0.008030545, + -0.000106778294, + 0.0120981345, + -0.012909036, + 0.009730823, + -0.003897561, + -0.021828959, + 0.015825668, + 0.032933082, + -0.01523711, + 0.0024572292, + -0.00950194, + 0.016322672, + -0.012124293, + -0.00656569, + -0.018951563, + 0.031206647, + 0.014596236, + 0.014648552, + -0.015210952, + -0.0068861274, + 0.01857227, + -0.006931904, + 0.03288077, + 0.006833811, + 0.023019154, + -0.019396253, + -0.0068665086, + 0.021201164, + -0.034214832, + -0.016257277, + -0.018415323, + -0.012765166, + 0.016741201, + -0.0011983692, + 0.033456247, + 0.0073308153, + -0.0059738625, + -0.034450255, + -0.013406041, + 0.001732976, + 0.021188084, + -0.01522403, + -0.029009365, + 0.00009017401, + -0.024640957, + 0.030081848, + 0.012562441, + 0.023267655, + 0.010253986, + 0.028957048, + -0.019670913, + -0.000803545, + 0.001984748, + 0.035862792, + 0.014269259, + -0.009632731, + 0.01886001, + -0.016688885, + -0.009096489, + -0.005699202, + -0.004064319, + 0.0011893774, + -0.03382246, + 0.021619692, + -0.00048596898, + 0.014831658, + 0.038504764, + -0.0002630118, + 0.0009237089, + 0.0055128257, + 0.005270863, + -0.0011632192, + -0.0044926587, + 0.02725677, + 0.012941734, + -0.007906294, + -0.008298666, + -0.015315584, + 0.006369504, + -0.012967892, + -0.0045318957, + 0.019893257, + -0.016701965, + -0.025831152, + -0.0170551, + 0.01285672, + 0.01647962, + -0.007389671, + -0.04444266, + -0.005100835, + 0.0046365284, + 0.0043945657, + -0.024654036, + -0.01076407, + -0.013039826, + -0.01131339, + 0.019801702, + 0.009966247, + 0.023816975, + 0.001081475, + -0.01789216, + -0.017866002, + -0.009789679, + 0.02207746, + -0.013334106, + -0.011908487, + -0.01048941, + 0.015197872, + -0.008148257, + -0.00030837982, + 0.005431081, + 0.026210444, + 0.011267614, + 0.005355877, + -0.011143362, + -0.0051891184, + -0.0034365242, + 0.017565183, + -0.011091046, + -0.006304109, + 0.010528646, + 0.012549362, + -0.009874693, + -0.0146093145, + 0.008056703, + 0.02417011, + -0.0012057262, + -0.017709052, + 0.006680132, + -0.026668211, + -0.0089526195, + 0.08569403, + 0.0059607835, + 0.01145726, + -0.005633807, + 0.0029362498, + 0.0073308153, + -0.016008774, + 0.0008820194, + 0.0099727865, + 0.008056703, + 0.0038452449, + -0.009233819, + -0.0020174456, + 0.011130284, + -0.0024294362, + -0.00656569, + -0.01676736, + -0.027361402, + 0.02418319, + -0.01969707, + 0.00038338007, + 0.00628776, + 0.0027972849, + 0.012130832, + -0.000813763, + -0.0035476962, + 0.024797905, + 0.018101424, + 0.01913467, + -0.025778836, + 0.0021040945, + 0.019644754, + -0.018402243, + 0.017133573, + -0.008226731, + -0.00004115307, + 0.009966247, + 0.0212404, + 0.0062092855, + -0.01160113, + 0.007513922, + 0.015394058, + 0.00824635, + 0.00038481058, + 0.014138469, + -0.019592438, + -0.018101424, + 0.02024639, + -0.019500885, + -0.018506875, + 0.032776136, + 0.006944983, + -0.041042104, + -0.017656736, + -0.017473629, + 0.008900303, + -0.009547717, + -0.013615306, + -0.0027694919, + 0.010038181, + 0.0066016577, + -0.042114586, + 0.005257784, + -0.011921567, + -0.024614798, + -0.037903126, + -0.002767857, + -0.016741201, + -0.03633364, + -0.0063923923, + -0.005558602, + -0.029401736, + -0.022796808, + 0.024300901, + 0.01607417, + -0.03047422, + 0.008095941, + -0.01621804, + -0.0010790228, + 0.036935277, + -0.026027337, + -0.011398404, + -0.012117753, + -0.008710656, + -0.031886756, + 0.025268752, + 0.031651337, + -0.03280229, + -0.0027760314, + -0.00006381153, + 0.0148055, + -0.00684689, + 0.0153679, + 0.0212404, + 0.0027466035, + -0.011359167, + 0.010155893, + 0.032357603, + -0.016034933, + -0.01313138, + 0.023660026, + -0.014033835, + 0.008462154, + 0.015812589, + 0.015119398, + 0.011346088, + 0.012922116, + 0.018820774, + -0.010777148, + 0.0012743913, + 0.02934942, + -0.018402243, + 0.0084294565, + 0.013484515, + -0.013824571, + 0.021920511, + 0.010280144, + 0.021397348, + 0.011928107, + -0.019762466, + 0.0070299967, + -0.023293814, + 0.015681798, + 0.02989874, + 0.0058855787, + -0.014334654, + 0.0138376495, + -0.009070331, + -0.0061242715, + 0.00097193796, + -0.009259977, + 0.013772255, + -0.02178972, + -0.008050164, + -0.022836046, + 0.001999462, + -0.033482403, + 0.0128436405, + 0.0031079126, + -0.031075856, + -0.007415829, + 0.007481225, + 0.01160113, + -0.0012327018, + -0.03675217, + -0.021985907, + 0.0017297062, + 0.010665976, + -0.0066310856, + 0.017826764, + 0.005404923, + 0.020442577, + -0.01061366, + 0.0062975693, + -0.030918907, + -0.02628892, + -0.025124881, + -0.028172305, + 0.0058299927, + 0.008847987, + 0.031520545, + 0.011189139, + 0.005404923, + -0.011640367, + -0.007997848, + 0.002779301, + 0.004253966, + 0.020939581, + -0.013445278, + 0.02516412, + 0.012366255, + 0.01816682, + -0.02751835, + 0.007487764, + -0.02780609, + 0.023568474, + -0.0027482384, + -0.011195679, + -0.009652349, + -0.02516412, + -0.00907687, + -0.019213146, + 0.005195658, + 0.0005362416, + -0.0025929245, + -0.0032763055, + -0.00060163694, + -0.0124578085, + 0.023555394, + 0.007991308, + 0.007605476, + -0.009338452, + 0.0002950964, + -0.0023918338, + -0.006346616, + 0.005257784, + -0.012680152, + -0.005404923, + -0.0026926524, + 0.025961943, + 0.018820774, + -0.014334654, + -0.0045482446, + 0.002601099, + 0.012130832, + 0.03944646, + 0.0059084673, + -0.015302505, + 0.007278499, + -0.012215846, + -0.026053496, + -0.011751539, + 0.007383132, + -0.01940933, + -0.02359463, + 0.010090498, + -0.006676862, + 0.028303094, + -0.0248633, + -0.015642561, + 0.019893257, + 0.011862711, + 0.032043707, + 0.015681798, + 0.010665976, + 0.008913382, + -0.0071346294, + -0.004737891, + 0.004201649, + -0.015982617, + -0.0070692343, + 0.023110706, + 0.020913424, + -0.011496497, + -0.037301492, + -0.016322672, + 0.004247426, + -0.0016087248, + -0.0010675786, + 0.023856213, + 0.0015899237, + 0.00489157, + -0.026184287, + -0.0014599506, + -0.022875283, + 0.036569063, + -0.015276347, + -0.002754778, + -0.0008574961, + -0.019108513, + -0.0015980981, + 0.014269259, + -0.003802738, + 0.003662138, + 0.015027844, + -0.012621297, + 0.0031226266, + -0.018258374, + -0.00531337, + 0.013942283, + 0.00043201784, + 0.024810985, + 0.009325373, + -0.0010871972, + 0.012804404, + 0.005467049, + -0.011267614, + 0.0054016532, + -0.00014376752, + 0.023686185, + -0.004260505, + -0.011594591, + -0.021358112, + -0.0018523225, + 0.003202736, + 0.009214201, + 0.005215277, + -0.007291578, + -0.01774829, + -0.0049209977, + 0.008409838, + 0.007468146, + -0.0029248057, + -0.011758079, + -0.025216436, + -0.024797905, + -0.022260567, + -0.0061831274, + 0.025948863, + -0.018768458, + 0.0013634925, + 0.0025880197, + -0.018977722, + 0.023960846, + -0.013347185, + -0.0044795796, + 0.017852923, + 0.027884565, + -0.024379376, + 0.011431102, + 0.0070496155, + 0.021763563, + -0.020507973, + -0.0012531378, + 0.00030286208, + -0.011404944, + 0.012928654, + -0.0138376495, + -0.0099727865, + -0.030500377, + 0.006451248, + 0.012124293, + 0.0069384435, + 0.025595728, + 0.033717826, + -0.026158128, + -0.0028888383, + -0.020298708, + -0.015564086, + 0.0181799, + -0.0051466115, + 0.014504682, + 0.020442577, + -0.012464348, + -0.0010021833, + 0.013536831, + -0.013458357, + -0.0059411647, + -0.0073308153, + -0.027701458, + -0.0069580623, + 0.0068534296, + -0.0110779675, + -0.012078515, + -0.02054721, + 0.0036261706, + -0.010947176, + 0.008900303, + 0.010430554, + 0.0046201795, + 0.0011158077, + 0.015446375, + 0.01453084, + 0.012281241, + -0.0113264695, + -0.029113997, + 0.006160239, + -0.0033367963, + -0.029584844, + -0.03897561, + -0.005100835, + 0.020926502, + 0.0034201753, + -0.014897054, + -0.020141758, + 0.011208758, + -0.021449665, + -0.007389671, + -0.013536831, + 0.018846931, + 0.012202767, + -0.012340097, + 0.007808201, + 0.0061275414, + 0.014779342, + 0.00823981, + -0.0034790311, + 0.018336847, + 0.038766347, + -0.036569063, + 0.032226812, + 0.006408741, + -0.016610412, + -0.010502488, + 0.005493207, + 0.005646886, + -0.002699192, + 0.0068534296, + -0.01702894, + -0.010136275, + -0.012111213, + 0.0022724874, + -0.026642054, + 0.017996792, + 0.007605476, + -0.03591511, + 0.026158128, + 0.017695975, + -0.01494937, + 0.005656695, + 0.0059346254, + -0.00475097, + -0.0011787507, + 0.004162412, + -0.025791915, + -0.0034005567, + -0.000193938, + -0.031991392, + 0.01984094, + -0.012261623, + 0.014713947, + 0.0045318957, + 0.00922074, + -0.01075753, + -0.019854018, + 0.0005378765, + -0.015642561, + -0.014413129, + 0.026040416, + -0.0013667622, + -0.025621887, + -0.0122354645, + 0.017983712, + -0.045619775, + 0.009214201, + 0.008834908, + -0.007808201, + -0.024928696, + 0.008167876, + 0.023581553, + -0.026380472, + -0.016937388, + 0.009998945, + -0.022862203, + -0.0003002054, + -0.011888869, + 0.027570667, + -0.031102015, + 0.015616402, + -0.0011501402, + -0.0022463293, + -0.031625178, + -0.0061177323, + 0.011391865, + -0.008043624, + -0.008468694, + 0.23981772, + -0.023542315, + -0.0048000165, + 0.038949452, + -0.0032223545, + 0.039629564, + 0.030134164, + -0.0012049088, + -0.014687789, + 0.00032452427, + -0.03131128, + 0.001627526, + 0.020834949, + -0.0019160829, + -0.0029591382, + -0.025098724, + -0.021292716, + -0.03301156, + -0.038190868, + -0.0060294485, + 0.020141758, + -0.00258475, + -0.002694287, + -0.01341912, + 0.014269259, + 0.012693232, + -0.011287232, + -0.0056665046, + 0.020442577, + 0.019867098, + 0.0048588724, + 0.008017466, + -0.00517277, + 0.02122732, + 0.00013763671, + -0.009600033, + -0.015040924, + -0.0046626865, + 0.02725677, + 0.023673106, + -0.004567863, + 0.0020861106, + -0.010796768, + -0.010247447, + 0.00038848908, + 0.021894353, + -0.007873597, + 0.008364062, + -0.011980423, + 0.034162514, + -0.032933082, + -0.01048941, + 0.030788116, + 0.01662349, + 0.0094234655, + -0.013602227, + 0.036412116, + 0.015250188, + -0.009573875, + -0.017172812, + -0.020861108, + 0.010417474, + -0.010012023, + 0.027230611, + 0.0048163654, + 0.0001181203, + -0.023411525, + 0.012869799, + 0.0062092855, + -0.00083624263, + 0.014923212, + -0.011470339, + -0.0033940172, + -0.01734284, + -0.02893089, + -0.016597332, + 0.032226812, + -0.0033874775, + 0.02177664, + 0.037118383, + -0.008403298, + 0.006833811, + 0.022718335, + 0.0007839264, + 0.009279596, + -0.016793517, + 0.023503078, + 0.0156033235, + 0.0077885827, + -0.008468694, + -0.01369378, + -0.018140662, + -0.014596236, + -0.020390261, + -0.0070757736, + 0.014700868, + 0.0005292934, + 0.008978778, + -7.4080634e-7, + -0.016793517, + -0.008187494, + -0.001349596, + 0.015904142, + -0.009586954, + 0.004257235, + 0.0059869415, + -0.000112091664, + -0.0023264384, + -0.006052337, + -0.03060501, + -0.006232174, + -0.03479031, + 0.008972238, + 0.016989704, + 0.0020713967, + -0.0068926667, + -0.008861066, + -0.023660026, + 0.017368997, + -0.02263986, + 0.014910133, + -0.02024639, + -0.015001686, + 0.00115341, + -0.0036850262, + -0.011025651, + -0.0018212596, + -0.01607417, + 0.0069711413, + -0.035732005, + 0.010541726, + 0.0032730359, + 0.014230021, + 0.0020223502, + -0.0090637915, + 0.021266557, + 0.011542274, + -0.008004387, + -0.014779342, + 0.014975528, + 0.018807694, + -0.012745548, + 0.018075267, + -0.0004217998, + -0.0018572271, + -0.011548813, + 0.0101951305, + 0.012085055, + -0.013458357, + 0.008677959, + -0.0100578, + -0.024000082, + -0.0058365325, + -0.01675428, + 0.031128172, + -0.0050550583, + -0.0127063105, + -0.020298708, + -0.00038276697, + 0.01704202, + -0.029506369, + -0.016231118, + 0.046927683, + -0.017277444, + -0.030029532, + -0.0043520587, + -0.16908614, + 0.027884565, + 0.020848028, + -0.021148847, + 0.019357014, + 0.012948274, + -0.0101951305, + -0.019644754, + -0.0063793133, + 0.023372287, + 0.053101, + 0.018611507, + -0.007952071, + -0.014190785, + 0.0032615915, + -0.019082354, + 0.00040769894, + -0.006382583, + 0.025674203, + 0.01229432, + 0.044364184, + -0.02976795, + 0.002838157, + 0.0011722111, + -0.0028659499, + 0.026053496, + -0.014556998, + 0.009881233, + 0.023136863, + -0.015917221, + -0.02390853, + -0.017447472, + 0.037223015, + 0.0265505, + 0.009979326, + 0.008887224, + 0.00011883556, + -0.01760442, + -0.019880177, + 0.027989198, + 0.006464327, + 0.013916125, + -0.0006760241, + -0.0034496032, + 0.008128638, + 0.027282927, + 0.0042703142, + -0.0068272715, + -0.016244197, + -0.011287232, + 0.031651337, + -0.015694877, + -0.007154248, + 0.018650746, + 0.0056959325, + -0.0024425152, + 0.0062289042, + 0.0106202, + 0.004165682, + -0.012653994, + -0.032906923, + 0.0010160798, + 0.019016959, + -0.0011010937, + -0.012183148, + -0.0034430637, + -0.007873597, + -0.0070757736, + -0.017172812, + 0.020586446, + 0.0003275897, + -0.011915027, + 0.017578263, + -0.03295924, + 0.015446375, + 0.00017779352, + -0.0087041175, + 0.025556492, + 0.011686143, + 0.0088414475, + -0.022208251, + 0.042951647, + -0.014190785, + -0.013680701, + -0.0022872014, + 0.010999493, + -0.0076774107, + -0.0022103619, + -0.03175597, + -0.01956628, + 0.007363513, + -0.018467639, + -0.007814741, + -0.011673065, + 0.000020998028, + 0.008854526, + -0.007952071, + 0.02934942, + -0.021972828, + 0.003253417, + 0.006735718, + -0.008697578, + -0.010077419, + 0.033796303, + 0.024784826, + 0.025922704, + 0.019827861, + 0.019278541, + 0.01104527, + 0.011012572, + -0.029297104, + -0.005084486, + 0.012915576, + 0.028747782, + -0.032906923, + 0.002151506, + 0.01940933, + -0.0082921265, + 0.018323768, + 0.01257552, + 0.044808872, + -0.0100839585, + 0.002180934, + 0.025648044, + -0.016374988, + -0.023660026, + -0.07219643, + -0.000642509, + 0.0045318957, + 0.018546114, + -0.004384756, + 0.042402327, + 0.0056501557, + 0.01691123, + 0.00377331, + 0.013432199, + -0.0024212617, + -0.017238207, + 0.0048523326, + -0.016322672, + 0.028041514, + -0.00335478, + 0.0059313555, + -0.002205457, + -0.0023362478, + 0.023960846, + -0.018389164, + -0.016414225, + 0.0028446964, + -0.008965698, + -0.014844738, + 0.008847987, + -0.026785923, + 0.011398404, + 0.01508016, + 0.007853978, + -0.003701375, + -0.0012931925, + 0.0024555943, + -0.029140154, + -0.02109653, + 0.024536325, + -0.019618597, + 0.013183696, + 0.033299297, + -0.045096613, + -0.010783688, + 0.0100839585, + 0.003004915, + -0.011071428, + -0.013615306, + -0.0029575033, + -0.028538518, + 0.005421272, + 0.0048163654, + -0.018768458, + -0.0122354645, + -0.0019226224, + -0.00081049325, + 0.0025455127, + 0.014779342, + -0.0028005545, + 0.0037536914, + 0.01565564, + -0.030003373, + 0.0070823133, + 0.010594042, + -0.0046201795, + -0.018768458, + 0.026458947, + 0.01551177, + 0.008762973, + -0.019200066, + -0.026668211, + 0.025765756, + -0.022992995, + -0.021384269, + 0.013098682, + -0.016871992, + 0.00684689, + -0.018506875, + -0.014046915, + -0.0028561407, + -0.003212545, + 0.014897054, + -0.02362079, + -0.011346088, + -0.030526536, + -0.0023934687, + 0.007376592, + -0.0024931966, + 0.014910133, + 0.012058897, + -0.0058071045, + 0.013301408, + -0.01916083, + 0.014883975, + 0.009403847, + 0.0030997382, + -0.0159303, + -0.007572778, + 0.026432788, + 0.0051662303, + -0.009698126, + 0.005143342, + 0.018977722, + -0.015524849, + -0.024078557, + -0.09129187, + 0.027910722, + 0.007520462, + -0.008409838, + 0.016545016, + -0.006807653, + 0.022312883, + 0.0057907556, + 0.01732976, + -0.018088346, + -0.04852333, + 0.00049904804, + -0.00922728, + -0.011411483, + -0.033796303, + -0.025543412, + 0.014203863, + 0.016466541, + 0.0056926627, + 0.011588051, + 0.0013250727, + 0.0027318895, + 0.016453462, + 0.010587502, + -0.027466035, + 0.011431102, + -0.006189667, + 0.023764659, + -0.031808283, + -0.013013668, + 0.022129776, + -0.031494386, + -0.0011166251, + 0.01857227, + -0.0063368063, + -0.0127063105, + 0.005473588, + 0.01354991, + 0.0070169177, + 0.0405451, + -0.019749386, + -0.005002742, + 0.009070331, + -0.010796768, + 0.0069515225, + -0.0056795836, + 0.017525947, + 0.000104734696, + 0.016832756, + 0.022129776, + -0.009815837, + 0.038949452, + -0.0104436325, + -0.003032708, + -0.0049733142, + -0.016139565, + 0.0040904772, + 0.0019651293, + -0.0077493456, + -0.008782592, + 0.023450762, + 0.0040479703, + 0.011803855, + 0.01047633, + 0.021959748, + -0.0068141925, + -0.02025947, + 0.007167327, + 0.008115559, + -0.03452873, + -0.026079653, + 0.010234368, + 0.016701965, + 0.014687789, + 0.00076512527, + -0.0061536995, + 0.014386971, + -0.008220192, + -0.034345623, + 0.01914775, + 0.004708463, + 0.0035411566, + -0.05367648, + 0.004093747, + 0.014713947, + -0.01789216, + -0.0079324525, + -0.010744452, + -0.01732976, + 0.0265505, + -0.00036396584, + -0.005503016, + 0.00740275, + 0.004404375, + 0.004021812, + 0.012902496, + -0.006245253, + -0.026066575, + 0.030866591, + 0.02403932, + 0.0088414475, + -0.016191881, + -0.012183148, + -0.0079324525, + -0.020730317, + -0.0019749387, + -0.019030038, + -0.02151506, + 0.018363006, + 0.025281832, + 0.015459454, + 0.02097882, + -0.0052054673, + 0.011097586, + -0.0037536914, + -0.002738429, + -0.013746097, + -0.028538518, + -0.011012572, + 0.013562989, + 0.024130873, + 0.029218629, + 0.01620496, + -0.013876887, + 0.010672516, + -0.005198928, + 0.009998945, + -0.027753774, + 0.0010896495, + -0.0051368023, + 0.011496497, + 0.009279596, + -0.010999493, + 0.0015384249, + -0.0023362478, + 0.012497046, + 0.0037406124, + 0.019030038, + -0.0026109081, + 0.024300901, + 0.0005570864, + 0.0034921102, + -0.0027155406, + 0.004355328, + 0.025674203, + -0.006820732, + 0.0254257, + -0.029846424, + -0.022718335, + -0.00642836, + -0.0077885827, + -0.002543878, + -0.00188502, + -0.023777738, + -0.007598936, + -0.020782633, + 0.019631675, + -0.004361868, + 0.014570077, + 0.03983883, + -0.0085929455, + 0.026485104, + 0.023843134, + -0.014831658, + 0.00089101127, + 0.014844738, + 0.015106319, + 0.007716648, + -0.01634883, + 0.01872922, + -0.0015220761, + -0.022535227, + -0.01341912, + 0.0077755037, + -0.013641464, + -0.021410428, + 0.0014215307, + 0.0059444346, + 0.008468694, + 0.002136792, + 0.014190785, + -0.021292716, + -0.026890555, + 0.009796219, + -0.004149333, + -0.011476879, + -0.0071869455, + -0.017643657 + ] + }, + { + "object": "embedding", + "index": 1, + "embedding": [ + 0.0026680413, + -0.0026349186, + 0.008843787, + -0.0049684197, + -0.033255287, + 0.01970144, + -0.02827362, + 0.0020668625, + -0.012116319, + -0.035746124, + 0.00008668857, + -0.0036931918, + 0.016720388, + -0.018151293, + -0.036779553, + -0.024100147, + 0.012487294, + -0.023715923, + 0.009870593, + -0.023212455, + 0.0044020195, + 0.0038091217, + -0.010128952, + -0.015819447, + -0.011096137, + 0.008585429, + 0.0054586367, + -0.017488837, + 0.006253584, + -0.018800499, + 0.020045916, + 0.0018300345, + -0.00961886, + 0.0020685187, + 0.003918427, + -0.00977785, + -0.0061608404, + -0.0112153785, + -0.0011576418, + 0.00024324554, + 0.001564224, + 0.0026713535, + -0.0020635503, + -0.01999292, + -0.0040476057, + 0.013348487, + 0.003825683, + -0.0020536133, + -0.01968819, + 0.028538601, + 0.0107715335, + 0.020655377, + -0.008201204, + -0.005057851, + -0.021092597, + 0.014905258, + -0.020483138, + 0.005163844, + -0.012467421, + -0.006396012, + 0.007333387, + 0.0032874376, + -0.023980904, + 0.011573105, + 0.0063893874, + -0.017038366, + -0.016786633, + 0.011261751, + -0.021145593, + -0.0028286867, + 0.019012485, + 0.0014847293, + -0.020112162, + -0.014229554, + 0.036938544, + 0.013474354, + -0.014706521, + -0.0053957035, + -0.0013091785, + 0.0020171783, + 0.022364512, + -0.023119712, + 0.0028253745, + -0.004888925, + 0.03428872, + 0.0007568559, + -0.010976895, + 0.018230787, + 0.0062204613, + -0.019197972, + 0.024762603, + 0.019423207, + 0.009532741, + -0.004322525, + -0.016495153, + -0.026643978, + -0.0054188897, + 0.01938346, + 0.012898017, + -0.029678026, + -0.018959489, + 0.02571654, + 0.001242933, + -0.01968819, + -0.019303966, + -0.00054611213, + -0.002073487, + -0.020098913, + -0.0015857539, + 0.0011071295, + 0.007823604, + 0.020509636, + -0.0027690658, + -0.05079712, + -0.015845945, + -0.010890775, + 0.005670623, + -0.0001018526, + -0.026723472, + -0.022470506, + 0.011374368, + 0.023543684, + 0.004216532, + -0.0033785251, + 0.028035134, + 0.0016669048, + -0.005034665, + -0.011619477, + -0.0076447413, + -0.001836659, + 0.006134342, + 0.01217594, + 0.027293185, + 0.0031350728, + -0.024020651, + 0.012003701, + -0.013938073, + 0.0210396, + -0.026259754, + -0.01909198, + 0.007260517, + 0.01926422, + -0.00810846, + -0.00009802278, + 0.016362661, + 0.024325382, + 0.03439471, + 0.023517186, + 0.0013373329, + 0.000698477, + -0.007638117, + -0.0040608547, + 0.014335547, + -0.002936336, + -0.0014648556, + 0.0055944403, + 0.015103995, + 0.004206595, + -0.012527042, + 0.025358813, + -0.004832616, + 0.005283086, + 0.030790951, + -0.027902644, + 0.016349413, + 0.01457403, + 0.016813131, + 0.005978665, + -0.0018234099, + -0.022814982, + -0.018866746, + 0.017793566, + -0.027160693, + 0.010619168, + -0.010692039, + 0.01233493, + 0.027213689, + 0.007836854, + -0.026948707, + -0.01909198, + -0.009645359, + 0.0157797, + 0.02045664, + 0.011705596, + 0.01923772, + 0.0017356345, + 0.020006169, + 0.016932374, + 0.021596063, + -0.009711604, + 0.015090746, + 0.046583902, + 0.005081037, + -0.0046703145, + -0.67114735, + -0.04674289, + -0.011785091, + 0.018204289, + 0.023331698, + 0.024444625, + 0.023291951, + -0.006409261, + -0.020072415, + 0.012228937, + -0.02314621, + 0.024550617, + -0.028247122, + -0.0026581045, + 0.0068895416, + -0.016627643, + 0.0049087983, + -0.025001086, + 0.02253675, + 0.01759483, + -0.0065285033, + 0.010764909, + -0.007187647, + 0.0074791275, + 0.039296884, + -0.011314747, + -0.007532124, + -0.008459562, + -0.008664924, + 0.036011104, + -0.040038835, + 0.04030382, + 0.0029048692, + -0.002283817, + 0.056017272, + -0.0071942713, + -0.005922356, + 0.028538601, + 0.023358196, + 0.048544772, + 0.0044682655, + -0.015753202, + 0.0071942713, + 0.0063893874, + 0.0056805597, + -0.0021413888, + 0.030737955, + -0.04239718, + 0.0058263, + -0.022059783, + 0.013328614, + -0.0066113104, + -0.021079348, + -0.00080488395, + 0.00025173326, + 0.013885076, + 0.009420123, + -0.006574875, + -0.011751968, + -0.006184026, + -0.020032667, + -0.0040177954, + -0.030631963, + -0.024736105, + -0.011314747, + 0.020628877, + -0.019515952, + -0.006442384, + -0.00007613068, + -0.0038389321, + -0.0058428613, + 0.022351263, + 0.0051174723, + -0.0035607007, + 0.034050234, + 0.027452175, + 0.0285651, + -0.017011868, + -0.0056772474, + -0.003221192, + 0.010705288, + 0.019356962, + 0.0058196755, + -0.010665541, + 0.019462956, + -0.022642743, + -0.0330698, + -0.0065814997, + 0.006005163, + -0.017846562, + 0.020642126, + 0.0068630436, + -0.0076646153, + 0.0013820487, + -0.0013174593, + 0.03094994, + -0.0033851499, + 0.0034878305, + 0.03847544, + -0.0048690513, + -0.019476205, + -0.006313205, + -0.0025073958, + -0.012427674, + -0.004892237, + -0.023676176, + -0.0035010795, + 0.005919044, + 0.015925441, + -0.014004318, + 0.021543067, + 0.0009845751, + -0.02074812, + -0.009327379, + 0.0072075203, + -0.027929142, + 0.019052232, + -0.0060217245, + 0.03895241, + -0.017846562, + 0.0018499081, + -0.0044583282, + 0.03243384, + 0.011539983, + 0.007863352, + 0.024245888, + 0.007724236, + -0.012990761, + -0.007287015, + -0.0064854436, + -0.01849577, + 0.01850902, + 0.003128448, + -0.011944081, + 0.01909198, + 0.011639351, + -0.010115702, + 0.0068895416, + 0.0023301886, + -0.028671093, + -0.026524736, + -0.020549383, + -0.0056639984, + 0.010393933, + 0.0025587361, + -0.012984136, + -0.0021182029, + -0.010506551, + -0.012566789, + 0.028618095, + -0.0010731786, + -0.016296417, + -0.03145341, + 0.021715306, + -0.02510708, + -0.028220622, + -0.0107715335, + -0.014295799, + -0.005875984, + 0.018389776, + 0.008313822, + 0.006690805, + -0.018654758, + 0.018588513, + 0.016468655, + -0.024378378, + 0.003766062, + -0.0077308607, + -0.0026796341, + -0.02525282, + -0.01864151, + -0.00969173, + -0.012209062, + -0.0038157462, + 0.022642743, + -0.0051174723, + 0.011169007, + 0.0025421747, + 0.0051505947, + 0.0003231543, + 0.008221078, + -0.030843949, + -0.011937456, + 0.015117245, + 0.031479906, + -0.010095828, + 0.012646284, + 0.026378995, + -0.021278085, + 0.0107847825, + -0.012725779, + 0.022073032, + 0.0032857815, + 0.0023401256, + 0.016468655, + -0.03198337, + 0.0032973744, + 0.013911574, + 0.002522301, + 0.018866746, + 0.024921592, + -0.0016834661, + 0.0042695287, + -0.013818831, + 0.022218771, + -0.012189189, + -0.004368897, + -0.012944389, + 0.02660423, + 0.012507168, + 0.009519491, + -0.012884768, + -0.02674997, + 0.0050975983, + 0.00072000676, + 0.026167009, + -0.012401175, + 0.016945623, + -0.001420968, + 0.0029711148, + 0.021649059, + -0.00916839, + 0.012056698, + -0.033599764, + -0.008936531, + 0.004491451, + 0.027584665, + 0.03656757, + 0.016667392, + -0.010307814, + -0.03622309, + -0.009433373, + -0.005498384, + 0.0051108473, + -0.00234675, + -0.015686957, + 0.0079494715, + -0.02058913, + 0.041708227, + 0.024431374, + 0.033043303, + 0.0039846725, + 0.033043303, + -0.018893244, + -0.0012893048, + 0.016587896, + 0.0360376, + 0.009651983, + -0.005452012, + 0.0044583282, + -0.025067333, + 0.001219747, + -0.016402408, + 0.0009696699, + -0.00857218, + -0.030287486, + 0.0003328841, + 0.0038588059, + 0.019476205, + 0.022642743, + 0.012520417, + 0.011891084, + 0.000675291, + 0.0030506095, + 0.015488219, + -0.007684489, + 0.014534283, + 0.001232168, + 0.011526734, + -0.0042629037, + -0.01142074, + 0.003941613, + -0.0026200132, + -0.014097062, + -0.0057699913, + -0.0008044699, + 0.013222621, + -0.012997385, + 0.0055480683, + 0.0066113104, + -0.021728555, + -0.037786487, + 0.004984981, + -0.005044602, + -0.0042099073, + -0.01623017, + -0.025809282, + 0.014865511, + -0.01503775, + 0.03428872, + 0.01697212, + 0.017409341, + 0.0009547646, + -0.02224527, + -0.011983828, + 0.0074195066, + 0.027425675, + -0.005498384, + -0.01457403, + -0.009307506, + 0.010254818, + -0.019436456, + 0.0064821313, + 0.010148825, + 0.018310282, + -0.003138385, + 0.005495072, + -0.0072472678, + -0.00424303, + -0.0048624263, + 0.014680023, + -0.003138385, + 0.00909552, + 0.002237445, + 0.0062038996, + -0.002726006, + -0.015647208, + -0.015289483, + 0.027293185, + -0.010599295, + -0.019621944, + -0.0051207845, + -0.020615628, + -0.0069491626, + 0.086331256, + -0.011765217, + 0.017846562, + 0.005991914, + 0.0093605025, + -0.0071015274, + -0.01742259, + -0.0047001247, + 0.0070087835, + 0.0079627205, + 0.0017372906, + -0.016481904, + 0.018601762, + 0.012725779, + 0.015859194, + -0.01986043, + -0.031347416, + -0.023821915, + 0.030711457, + -0.025491305, + -0.018760752, + 0.0019045608, + 0.0047796196, + 0.0050412896, + 0.005591128, + 0.005746805, + 0.0065947487, + 0.020469889, + 0.03712403, + -0.014415041, + 0.0054321387, + 0.010817905, + -0.010407182, + -0.00043887706, + -0.0044351425, + -0.008989527, + 0.017515335, + 0.003660069, + -0.006849794, + -0.017064866, + 0.016071182, + 0.0088504115, + 0.007379759, + -0.029121563, + 0.010075955, + -0.0056639984, + 0.0073863836, + 0.010281316, + -0.014746269, + -0.0180188, + 0.030658461, + -0.001954245, + -0.028061634, + -0.025411809, + -0.01746234, + 0.01670714, + -0.014600528, + 0.008565555, + 0.0053923912, + 0.011222003, + 0.011758593, + -0.021172091, + 0.0116724735, + -0.023093214, + -0.026034517, + -0.023093214, + -0.0022655993, + -0.021013102, + -0.036620565, + -0.0058362368, + 0.008631801, + 0.001326568, + -0.013116627, + 0.009837471, + 0.012606536, + -0.008201204, + 0.016998619, + -0.016998619, + 0.008671548, + 0.029810516, + -0.010195197, + -0.010148825, + -0.017170858, + -0.018005552, + -0.0058561102, + 0.008002467, + 0.020801116, + -0.037389014, + 0.00015919644, + -0.0018581889, + 0.041072268, + -0.005018104, + 0.0041635353, + -0.0003494455, + 0.003424897, + -0.027531669, + 0.012162691, + 0.014216304, + -0.011937456, + -0.009506242, + 0.017382843, + -0.013792332, + 0.016919125, + 0.012864894, + 0.006571563, + 0.012096445, + 0.018985987, + 0.01835003, + 0.01307688, + 0.013050382, + 0.024259137, + -0.032062866, + -0.017926058, + 0.02451087, + -0.031903878, + 0.02930705, + 0.007929597, + 0.023424441, + -0.008115085, + -0.0108974, + 0.0046636895, + -0.031055935, + 0.020827614, + 0.029837016, + 0.003941613, + 0.017528584, + -0.008042215, + -0.015978437, + 0.0018697819, + 0.002027115, + -0.016773384, + 0.0072340188, + -0.0016876064, + -0.0089034075, + -0.035004172, + -0.000004062718, + -0.0069822855, + 0.008585429, + 0.0079494715, + -0.031850882, + -0.012407799, + -0.00698891, + 0.008505934, + -0.010486677, + -0.022920975, + -0.023490688, + -0.009744727, + 0.02343769, + -0.0011692347, + 0.013646592, + 0.013911574, + 0.020072415, + -0.009088895, + -0.004415269, + -0.017833313, + -0.030049002, + -0.024457874, + -0.014256052, + 0.010042832, + 0.028432608, + 0.018972738, + -0.009685106, + 0.016680641, + -0.0021463572, + -0.0009199857, + 0.0027193816, + -0.0058693597, + 0.024643362, + -0.0059057944, + 0.007412882, + 0.019356962, + 0.0300755, + -0.022682492, + 0.0061608404, + -0.027041452, + 0.01015545, + 0.0006504489, + 0.0066874926, + 0.0018118169, + -0.034209225, + -0.0045113247, + -0.0057534296, + -0.013739336, + -0.0035607007, + -0.003660069, + -0.007406257, + -0.0040939776, + -0.01939671, + 0.016415657, + -0.0022407572, + 0.00096470147, + -0.014401792, + 0.004166848, + -0.00033681744, + 0.010102453, + -0.013633343, + -0.008598678, + -0.0034911428, + 0.009042524, + 0.019423207, + 0.03145341, + -0.010480053, + 0.009724853, + -0.00043887706, + 0.0203109, + 0.015554465, + 0.011467112, + -0.01179834, + 0.018469272, + -0.029731022, + -0.01518349, + -0.017369594, + 0.0054884474, + -0.020337397, + -0.027478673, + 0.02615376, + -0.009512867, + 0.015660457, + -0.026617479, + -0.011149134, + 0.018774, + -0.0064688823, + 0.024471123, + -0.0063761384, + 0.028777085, + 0.016468655, + -0.011175632, + 0.006386075, + -0.007273766, + -0.027584665, + -0.014865511, + 0.020403642, + -0.004382146, + -0.0050081667, + -0.033043303, + 0.0015203364, + 0.021927292, + -0.002500771, + -0.020814365, + 0.027902644, + 0.00037387357, + -0.004832616, + -0.003481206, + 0.009320755, + -0.008704671, + 0.00835357, + -0.007452629, + -0.00894978, + -0.008254201, + -0.012507168, + -0.009665232, + 0.016905876, + -0.020403642, + 0.0093605025, + 0.016243419, + -0.021437073, + -0.0026316063, + -0.008989527, + -0.013275617, + 0.015382227, + -0.004408644, + 0.03818396, + 0.0028568413, + 0.0049352967, + 0.014666774, + 0.015249736, + -0.0066113104, + -0.002866778, + 0.003931676, + 0.021423824, + -0.013951322, + -0.013924824, + 0.017356345, + -0.014083813, + 0.00034385602, + -0.0045179497, + 0.006323142, + -0.0145077845, + -0.036620565, + -0.006551689, + 0.0135405995, + 0.014812514, + 0.003448083, + -0.014309048, + -0.016852878, + -0.029890012, + -0.018813748, + 0.00023827712, + 0.0032973744, + -0.022497004, + -0.013487603, + 0.002191073, + -0.012407799, + 0.013898325, + -0.015236487, + -0.013964571, + 0.012732403, + 0.0076182433, + -0.01759483, + 0.01894624, + 0.0066510574, + 0.01788631, + -0.022497004, + -0.0078037307, + -0.0038323076, + -0.007154524, + 0.016495153, + 0.00008156489, + -0.024444625, + -0.009029275, + 0.011334621, + 0.02194054, + -0.002485866, + 0.013229245, + 0.03296381, + -0.0247891, + -0.0029893324, + -0.019277468, + -0.022033283, + 0.0026481675, + 0.008512558, + 0.018204289, + 0.001989024, + -0.020337397, + 0.0026912272, + 0.023782168, + -0.035984606, + 0.0012172628, + -0.013169624, + -0.027425675, + 0.005296335, + 0.0136068445, + -0.020695124, + -0.013182873, + -0.02163581, + -0.010029583, + -0.0130835045, + 0.009552615, + 0.0048061176, + -0.0020105538, + 0.005968728, + 0.010837779, + -0.014057315, + 0.028697591, + -0.0070286575, + -0.014017567, + 0.008399941, + -0.008187955, + -0.027041452, + -0.008247577, + -0.0010913962, + 0.04088678, + -0.0012214031, + -0.025173325, + -0.025968272, + 0.0070750294, + -0.0391114, + -0.010652292, + -0.013355112, + 0.017753819, + 0.00326922, + -0.0021463572, + 0.0041039144, + 0.018734254, + 0.0021331082, + 0.02538531, + 0.0032377534, + 0.001243761, + 0.026484989, + -0.01862826, + 0.026935458, + 0.010890775, + -0.023119712, + 0.0069822855, + 0.0165349, + 0.004905486, + 0.00336362, + 0.016110929, + -0.0030506095, + -0.008426439, + 0.01015545, + -0.009857344, + -0.012434298, + -0.0010922243, + 0.01224881, + -0.047140364, + 0.016574647, + 0.0038521811, + -0.013129877, + 0.01774057, + -0.007154524, + 0.005316209, + -0.0037726865, + 0.006882917, + -0.010996768, + -0.0088636605, + -0.0121428175, + -0.011334621, + 0.01697212, + 0.0015948627, + -0.021331081, + 0.021238336, + 0.01637591, + -0.0038223707, + -0.016905876, + 0.0069822855, + -0.0031317605, + 0.008075338, + 0.0016768415, + -0.018323531, + -0.010321063, + -0.014004318, + 0.004971732, + -0.032142363, + -0.0030737955, + 0.009380376, + -0.016309666, + -0.019515952, + 0.018548766, + 0.025981521, + -0.013885076, + -0.0038687426, + 0.0026117326, + -0.007684489, + 0.016998619, + -0.024219388, + 0.006256896, + -0.029439542, + 0.0029810518, + 0.0026730096, + -0.00819458, + -0.027266687, + 0.010427057, + 0.0020238028, + -0.020178407, + -0.008711295, + 0.23572832, + -0.0058594225, + -0.0018267222, + 0.022351263, + -0.001126175, + 0.023623178, + 0.025663543, + -0.008234328, + -0.008081962, + 0.008022341, + 0.00052292616, + -0.005339395, + 0.010062706, + -0.0154352235, + -0.0070617804, + -0.03216886, + -0.016733637, + -0.02178155, + -0.036620565, + 0.016004935, + 0.020946857, + -0.014945006, + -0.011937456, + -0.006382763, + 0.022894477, + 0.002653136, + -0.011447239, + 0.013494227, + 0.01605793, + 0.023490688, + -0.005852798, + 0.0043258374, + -0.0037230023, + 0.009757976, + 0.000064278924, + 0.008181331, + -0.00014149645, + 0.0024924905, + 0.027452175, + 0.03219536, + -0.007929597, + -0.015196739, + -0.0165349, + -0.004312588, + -0.010115702, + 0.016124178, + 0.0040177954, + -0.006299956, + -0.015395476, + 0.01922447, + -0.03407673, + -0.026855964, + 0.03023449, + 0.022126028, + 0.017170858, + -0.006445696, + 0.023252204, + -0.0023070027, + -0.00518703, + -0.016428906, + -0.011513484, + 0.02255, + -0.01788631, + 0.025133578, + -0.02044339, + 0.017091364, + -0.009281008, + -0.0157797, + 0.011838088, + -0.0041072266, + 0.015209988, + -0.0021331082, + -0.0002641543, + -0.01367309, + -0.026869213, + -0.025001086, + 0.032831315, + 0.008969653, + 0.015991686, + 0.026617479, + -0.030446475, + 0.016919125, + 0.01862826, + -0.008525807, + -0.003742876, + -0.03110893, + 0.0054884474, + 0.0054553244, + 0.009479744, + -0.0013795645, + 0.0008218594, + -0.02706795, + -0.016587896, + -0.028300118, + 0.006111156, + 0.0015799574, + -0.007856728, + 0.006170777, + -0.010572797, + 0.016322915, + -0.004888925, + 0.006929289, + 0.010612544, + -0.000272642, + 0.003471269, + -0.008963029, + -0.0144812865, + 0.0068299207, + -0.016733637, + -0.020204905, + -0.006326454, + -0.01894624, + 0.014083813, + -0.00036186655, + -0.0012487294, + 0.01789956, + 0.008307197, + 0.006326454, + 0.014242803, + -0.026683725, + 0.009486369, + -0.028141128, + -0.011910957, + 0.0108974, + -0.0032129113, + -0.0054453877, + -0.019330464, + -0.0012594943, + -0.0006641121, + -0.0315859, + 0.013964571, + 0.0011270031, + 0.02194054, + -0.004193346, + 0.0074923765, + 0.0029247429, + -0.009221386, + -0.010837779, + -0.020814365, + 0.0058826087, + 0.023861663, + -0.0103144385, + 0.015011251, + 0.0130967535, + -0.021410575, + -0.026710223, + 0.021529818, + 0.0068166717, + -0.024444625, + -0.002995957, + -0.017674325, + -0.024550617, + -0.016640892, + -0.014110311, + 0.021728555, + -0.0032410657, + -0.015156992, + -0.0024428063, + -0.0064125736, + 0.022523502, + -0.039482374, + -0.013414732, + 0.028538601, + -0.027478673, + -0.020536134, + -0.012262059, + -0.17170858, + 0.018204289, + 0.033546768, + -0.020496387, + 0.025146827, + 0.0210661, + 0.010380684, + -0.011301498, + -0.022046532, + -0.00048400686, + 0.035110164, + -0.0033470585, + -0.03667356, + -0.017475588, + -0.006634496, + -0.008088587, + -0.02162256, + 0.0055050086, + 0.015050999, + 0.00061028753, + 0.026087515, + -0.026670476, + 0.01609768, + -0.0046206303, + -0.021331081, + 0.023106463, + -0.015408725, + 0.003706441, + 0.0016627643, + -0.003411648, + -0.005587816, + -0.017912809, + 0.014521034, + 0.020827614, + -0.0021297957, + 0.014229554, + -0.008134959, + -0.008081962, + -0.018363278, + 0.0072936397, + -0.01593869, + 0.004859114, + 0.015488219, + -0.01262641, + -0.0017240415, + 0.0144680375, + 0.008671548, + -0.0055348193, + -0.0010516488, + -0.042768154, + 0.008896783, + -0.017541833, + 0.0036865673, + 0.022430757, + 0.0015004626, + 0.017237103, + -0.0053658932, + 0.016905876, + 0.023689425, + -0.0017372906, + -0.03142691, + -0.005011479, + 0.015806198, + -0.0093340045, + -0.0130437575, + -0.007412882, + -0.013368361, + -0.0027972201, + -0.02959853, + 0.007333387, + 0.007903099, + -0.016561398, + 0.009857344, + -0.040674794, + 0.014640276, + -0.0103011895, + 0.006492068, + 0.022470506, + 0.012401175, + -0.018151293, + -0.03216886, + 0.029360047, + -0.01970144, + -0.005061163, + -0.0056308755, + 0.045311987, + 0.010009709, + -0.00073035766, + -0.031347416, + -0.0028121255, + 0.015329231, + -0.014269301, + -0.009393625, + -0.013321989, + -0.005554693, + 0.012845021, + -0.011539983, + 0.031320915, + -0.0016486872, + 0.01233493, + -0.0008334524, + -0.008062089, + -0.01819104, + 0.013633343, + 0.024736105, + 0.018972738, + 0.019873679, + 0.014547532, + 0.024563866, + -0.0035441392, + -0.023623178, + -0.011374368, + 0.0144812865, + 0.015315982, + -0.00095145236, + 0.011977203, + 0.0233052, + -0.009439997, + 0.024524119, + 0.007903099, + 0.048465274, + -0.012527042, + -0.004772995, + 0.016760135, + -0.0017025118, + -0.028194124, + -0.05591128, + 0.010440306, + 0.012765526, + -0.013845329, + 0.0011990452, + 0.03852844, + 0.02195379, + 0.035136662, + -0.0041734725, + 0.013335238, + -0.0077639837, + -0.0037329393, + 0.0030953253, + -0.011380993, + 0.036726557, + -0.01608443, + 0.0054288264, + 0.0030853886, + -0.024391627, + 0.004951858, + -0.005389079, + -0.02239101, + -0.01669389, + -0.008433064, + -0.020006169, + 0.015739953, + -0.03094994, + 0.026710223, + 0.01730335, + 0.0052897106, + 0.0103144385, + 0.00045999285, + -0.0017356345, + -0.020377144, + 0.00003317455, + 0.014322298, + -0.02391466, + -0.0026034517, + 0.03410323, + -0.023397943, + -0.0036302586, + -0.009400249, + 0.01323587, + -0.011851337, + -0.009274383, + -0.009890467, + -0.01608443, + 0.009413498, + 0.022814982, + -0.017714072, + -0.024285635, + 0.008274075, + -0.0053460193, + -0.008929906, + 0.030737955, + -0.025650294, + -0.0004691016, + 0.009016025, + -0.052122034, + 0.02150332, + -0.008843787, + 0.002003929, + -0.007823604, + 0.025425058, + 0.032672327, + -0.0042595915, + -0.017078115, + -0.043086134, + 0.01997967, + -0.0039681112, + -0.009453246, + 0.031294417, + -0.006150903, + 0.0054321387, + -0.010208446, + -0.017555082, + -0.037177026, + -0.013169624, + 0.0023898098, + -0.016163925, + -0.004739872, + -0.02358343, + -0.0135538485, + 0.013315364, + -0.016269919, + 0.028750587, + -0.0063463277, + -0.006710679, + 0.016508402, + -0.01143399, + 0.0063562645, + 0.028856581, + 0.030472973, + -0.01059267, + -0.010195197, + 0.016839629, + 0.021158842, + 0.010566172, + -0.00064258225, + 0.017621327, + -0.007406257, + -0.027293185, + -0.08818613, + 0.026034517, + 0.017117862, + -0.01850902, + 0.012440923, + -0.009989835, + 0.023941157, + -0.0027773464, + 0.026405493, + -0.005173781, + -0.042900644, + 0.020986604, + -0.022510253, + -0.015064248, + -0.031506404, + -0.016654141, + 0.031506404, + 0.016627643, + 0.008346945, + 0.016150676, + 0.017992303, + -0.012434298, + 0.028538601, + 0.0028634658, + -0.018548766, + 0.011440614, + -0.04642491, + 0.039906345, + -0.0036799428, + -0.002321908, + 0.012560165, + -0.031029437, + 0.0036136971, + 0.013752585, + -0.0037826234, + 0.01081128, + -0.010393933, + -0.012646284, + 0.001006105, + 0.044861514, + -0.032990307, + 0.0028982447, + 0.0064721946, + -0.00492536, + -0.0026829466, + -0.0062668333, + 0.019515952, + 0.00480943, + 0.0070087835, + 0.0145077845, + -0.017661076, + 0.01983393, + -0.0046239425, + -0.015302732, + -0.0032394095, + -0.043987073, + 0.028247122, + -0.004915423, + 0.00058130507, + -0.0029181184, + 0.014521034, + 0.016269919, + 0.020231403, + 0.0050247284, + 0.0016735293, + -0.008724544, + -0.009188264, + -0.0046206303, + 0.016163925, + -0.026392244, + -0.037309516, + 0.012401175, + -0.004537823, + 0.037230022, + -0.0021397327, + -0.023543684, + -0.0052599, + 0.0043755216, + -0.021755053, + 0.014587279, + -0.00061898225, + 0.009002776, + -0.04014483, + 0.012189189, + 0.009797723, + -0.013726087, + -0.00473656, + -0.005352644, + -0.0077109872, + 0.020072415, + -0.02538531, + 0.012712529, + 0.01805855, + 0.0011245189, + 0.00097546633, + 0.01833678, + -0.0023335011, + -0.027982138, + 0.022377761, + 0.023106463, + 0.02314621, + -0.011520108, + 0.002545487, + -0.014640276, + -0.0075387484, + 0.012613161, + -0.022920975, + 0.009877218, + 0.009651983, + 0.009088895, + 0.02255, + 0.0034282093, + 0.0011924207, + 0.020655377, + 0.026061017, + -0.008512558, + -0.017647825, + -0.024881845, + -0.017064866, + 0.008797415, + 0.020377144, + 0.0144415395, + 0.013739336, + 0.0011468768, + 0.017184107, + -0.016481904, + 0.005425514, + -0.018866746, + -0.0009936839, + -0.008009092, + 0.0039482373, + 0.001657796, + -0.009380376, + -0.0073068887, + -0.025226321, + 0.0070551555, + 0.012315055, + 0.006303268, + 0.008333696, + 0.049366217, + 0.0051572192, + 0.009969962, + 0.019025734, + 0.008068713, + 0.0105198, + 0.008028965, + -0.00046123494, + -0.034050234, + -0.02420614, + 0.009022649, + -0.014534283, + 0.0055845035, + -0.010102453, + -0.018615011, + -0.026551234, + -0.0011063014, + 0.009221386, + -0.00037242443, + 0.008101836, + 0.037044536, + -0.0073400117, + 0.023225704, + 0.014256052, + -0.0008479436, + 0.007896475, + 0.0300755, + -0.0018300345, + -0.0004927016, + -0.019476205, + 0.0144547885, + 0.007393008, + -0.028512103, + -0.02225852, + -0.018707756, + -0.0028319992, + -0.016998619, + 0.01789956, + 0.004938609, + 0.0031582587, + 0.0019857117, + 0.018668009, + -0.022165775, + -0.02538531, + 0.031188425, + -0.020072415, + -0.000031751304, + 0.0067636753, + -0.017700823 + ] + }, + { + "object": "embedding", + "index": 2, + "embedding": [ + -0.0044841906, + 0.00023355159, + -0.00082493754, + 0.010029372, + -0.015641283, + 0.02653146, + -0.026091048, + -0.0066962577, + -0.008347801, + -0.021913812, + 0.017136013, + -0.013826254, + 0.012485, + -0.010282942, + -0.008074212, + -0.017709883, + 0.03384496, + -0.008374493, + 0.026838413, + -0.0343521, + 0.0005384198, + -0.005495135, + -0.010082755, + -0.006906454, + -0.009889241, + 0.006275865, + -0.0017316182, + -0.020539194, + 0.0030695351, + -0.032296848, + 0.02372884, + 0.010356344, + 0.0012778608, + -0.019031117, + -0.019645024, + -0.009628998, + -0.009955971, + -0.008194324, + -0.011243841, + -0.017136013, + 0.016748985, + -0.009228624, + -0.015441096, + -0.004170564, + -0.014333394, + 0.01742962, + 0.0025173523, + 0.016655564, + -0.028106265, + 0.012311505, + 0.0062091355, + 0.024329402, + -0.027705891, + -0.0017182723, + -0.014159899, + 0.0021203146, + -0.0042840033, + 0.002655815, + 0.0074269404, + -0.0026708292, + 0.024436168, + 0.011877766, + -0.018951043, + -0.003623386, + 0.014053132, + 0.000584296, + -0.0009575615, + 0.030054752, + -0.012992141, + -0.009115185, + 0.01901777, + 0.02137998, + -0.012731898, + 0.008234361, + 0.015040722, + -0.019458184, + -0.049539626, + 0.0010468116, + 0.00804752, + 0.001294543, + -0.003364811, + -0.019538257, + 0.012311505, + -0.0006247505, + 0.008094231, + 0.010643279, + -0.005154817, + 0.04406785, + -0.021019643, + -0.01533433, + 0.018283753, + 0.0029227312, + 0.005051387, + -0.009268661, + -0.03878291, + 0.004617648, + -0.016108386, + 0.027652508, + -0.007306828, + -0.032697223, + -0.010923541, + 0.008287745, + -0.016775677, + -0.014546927, + -0.02984122, + 0.010342998, + 0.012411598, + 0.007453632, + 0.015894853, + -0.0026674927, + 0.0011010289, + 0.012131336, + -0.009115185, + -0.05519825, + -0.015347675, + -0.037234794, + 0.0069932016, + 0.00059430534, + -0.019524911, + -0.019645024, + 0.012698533, + 0.018884314, + 0.016882444, + -0.026704956, + 0.0056219203, + -0.014573619, + -0.017202742, + -0.0058688177, + -0.0016457045, + -0.002824306, + 0.02853333, + 0.038996443, + 0.00025794937, + -0.013973057, + -0.021046335, + 0.008594698, + -0.035419766, + 0.006225818, + -0.011010289, + -0.029654378, + 0.0069798557, + 0.0028109602, + -0.0038435918, + 0.0027308853, + -0.009989335, + 0.0036734329, + 0.032136697, + 0.00459763, + 0.009849204, + 0.015027376, + 0.017976798, + 0.0032113343, + 0.0075470526, + -0.0009950965, + 0.0076938565, + 0.00986255, + 0.022287494, + 0.023328466, + -0.003823573, + -0.024382785, + -0.01211799, + -0.010509822, + 0.021460054, + -0.014400124, + -0.0030361705, + 0.016375303, + 0.005671967, + 0.054130584, + 0.0027909414, + -0.0036801056, + -0.0069398186, + 0.018043527, + -0.023995757, + 0.004791144, + 0.025637291, + 0.009362082, + 0.006886435, + 0.009302026, + -0.023982411, + 0.014533581, + -0.019564949, + 0.0028209696, + 0.010129466, + 0.012431617, + -0.008995072, + 0.019378109, + 0.018016836, + -0.0007114982, + 0.0057420325, + 0.000746948, + 0.013285749, + 0.029067162, + 0.0017449639, + 0.001951824, + -0.6700662, + -0.04406785, + -0.027999498, + 0.0029260677, + 0.04081147, + 0.030214902, + 0.018497285, + 0.027225442, + -0.00887496, + -0.010710008, + -0.046656933, + 0.0064393505, + -0.017202742, + 0.007867352, + 0.01377287, + -0.025357028, + 0.010296288, + -0.012171374, + 0.008868287, + 0.0120979715, + 0.011851074, + 0.007827315, + -0.0036200495, + -0.0065928274, + 0.018790893, + -0.0070065474, + -0.005805425, + -0.026718302, + -0.012284813, + 0.044841904, + -0.032136697, + 0.033417895, + -0.0017699874, + -0.008534642, + 0.044735137, + -0.024836542, + -0.025637291, + 0.03445887, + -0.011704271, + 0.049165946, + 0.003446554, + -0.006559463, + -0.010449765, + -0.017376238, + -0.00474777, + 0.010463111, + 0.022541065, + -0.023061551, + -0.014266665, + -0.010663298, + 0.008914998, + -0.013892983, + -0.0017533051, + -0.011670906, + 0.007894044, + 0.010349671, + 0.014653694, + -0.0001789172, + 0.015307638, + -0.019044463, + -0.008307763, + 0.0056519485, + -0.03795547, + -0.028239723, + -0.002780932, + -0.0026441375, + -0.037848704, + -0.0026825068, + 0.015214218, + -0.018924352, + -0.007860679, + 0.014159899, + -0.000095297386, + 0.020539194, + 0.0252903, + 0.031949855, + 0.01616177, + -0.0070198933, + -0.019364763, + -0.0009900919, + 0.008307763, + -0.017603116, + -0.0030661987, + -0.008768193, + 0.02172697, + -0.03331113, + -0.02853333, + 0.00665622, + 0.008200997, + -0.024676394, + 0.01809691, + 0.010423074, + -0.0063359207, + 0.0023521981, + -0.002750904, + 0.005331649, + -0.011090363, + 0.023501962, + 0.014720422, + -0.032110006, + 0.00526492, + 0.0029010442, + 0.007867352, + -0.0027559088, + -0.02039239, + -0.001042641, + -0.01839052, + 0.02503673, + 0.010556531, + -0.016188461, + 0.008074212, + -0.025570562, + -0.012224757, + -0.020045398, + 0.009468849, + -0.018857623, + 0.011036981, + 0.01717605, + 0.022767942, + -0.0057687243, + 0.010950233, + 0.006212472, + 0.027132021, + -0.0018750855, + 0.008728156, + 0.011750981, + -0.006182444, + -0.010423074, + -0.010289615, + 0.010903522, + -0.0013429216, + -0.00019737193, + 0.004237293, + -0.007780604, + 0.0038169, + -0.030294977, + -0.004974649, + 0.0071199867, + 0.02952092, + -0.02554387, + -0.043881007, + -0.025276953, + -0.0075337067, + 0.0035599933, + -0.021620203, + -0.009415465, + 0.012872029, + 0.015240909, + -0.012565075, + 0.019938633, + 0.0068130335, + -0.021873774, + -0.03961035, + 0.019524911, + 0.0120045515, + -0.008788212, + -0.029600995, + -0.007046585, + -0.02137998, + 0.008608044, + -0.0043073585, + -0.0043073585, + -0.033551354, + -0.009135203, + 0.005611911, + -0.015494479, + -0.004220611, + 0.011777673, + -0.0011744308, + -0.02653146, + -0.015187526, + -0.013706141, + -0.013826254, + 0.012992141, + 0.009555596, + -0.0010735032, + 0.012458309, + -0.0045309006, + 0.0138529455, + 0.010850139, + 0.005184845, + -0.031042341, + -0.021620203, + -0.0060890233, + 0.027225442, + 0.009201933, + -0.0022821326, + 0.02439613, + -0.014253319, + 0.011203803, + -0.031949855, + 0.015761396, + -0.0017266135, + -0.009021764, + 0.0138529455, + -0.01730951, + -0.0013103912, + 0.0044041155, + 0.015214218, + 0.008834923, + 0.026424693, + -0.0035966944, + 0.007059931, + -0.015240909, + 0.018337136, + -0.01975179, + -0.00028776893, + -0.0042339563, + 0.024169253, + 0.029627686, + 0.002655815, + -0.025677329, + 0.0011719285, + -0.005855472, + 0.011003616, + 0.012077954, + 0.025410412, + 0.019925287, + -0.004340723, + -0.014733768, + 0.023074897, + -0.011410663, + 0.006662893, + -0.023301775, + 0.0069198, + 0.021500092, + 0.023288429, + 0.022541065, + 0.026731648, + 0.0040537883, + -0.014013095, + -0.007473651, + -0.012204738, + -0.0050180224, + 0.0084812585, + -0.013919674, + 0.0036300588, + -0.0036367318, + 0.030561892, + -0.016415339, + 0.010783411, + -0.0015197535, + 0.016535452, + -0.011497411, + 0.005695322, + -0.016121732, + 0.04745768, + 0.0112571865, + -0.0069464915, + 0.020419082, + -0.025490487, + -0.003860274, + -0.01800349, + 0.028159648, + 0.002388899, + -0.031789705, + -0.00402376, + 0.009422138, + 0.007974118, + 0.0256106, + 0.014800497, + -0.0078339875, + 0.0018350482, + 0.024062486, + -0.016455377, + -0.00021686933, + 0.018110257, + 0.026051011, + -0.007914063, + -0.034832552, + -0.02531699, + -0.020218894, + 0.003519956, + 0.009535577, + 0.0043073585, + -0.009689054, + -0.015894853, + -0.011417336, + 0.014119862, + 0.0057553784, + -0.002882694, + -0.040250946, + 0.030001368, + 0.01492061, + -0.01016283, + -0.0077405665, + -0.009388774, + 0.008868287, + -0.01673564, + 0.01965837, + 0.026357964, + 0.020699343, + -0.004304022, + -0.018857623, + -0.0133991875, + 0.0074002487, + 0.02589086, + -0.041345302, + 0.013946366, + -0.019898595, + 0.0014004754, + -0.025930898, + -0.00903511, + -0.009188587, + 0.020218894, + 0.0027342218, + 0.00001191869, + -0.01673564, + -0.013459244, + -0.008427876, + 0.022180727, + -0.02885363, + -0.0024656374, + 0.009462176, + -0.0058621448, + 0.0050847516, + -0.006205799, + -0.016108386, + 0.016708948, + -0.0024089178, + -0.015828125, + 0.009095166, + -0.022848018, + -0.005925537, + 0.10890177, + -0.0012027906, + -0.003973713, + 0.021073025, + 0.0057854066, + 0.023328466, + -0.0040904894, + -0.0011410663, + 0.006352603, + 0.008307763, + -0.022287494, + 0.003483255, + -0.0039837225, + 0.0037368254, + 0.009849204, + -0.0012711879, + -0.013479263, + -0.052876078, + 0.030108135, + -0.009555596, + -0.012304832, + 0.017296163, + 0.0029911285, + 0.02045912, + 0.007960772, + -0.012985468, + 0.01689579, + 0.008794885, + 0.031896472, + -0.009849204, + -0.000403085, + 0.002167025, + 0.014119862, + 0.013292422, + -0.01730951, + -0.008274399, + 0.036914498, + -0.0035366383, + 0.008454567, + -0.003947022, + 0.01988525, + 0.00045792793, + -0.0020435764, + -0.003947022, + -0.002173698, + -0.0062825377, + -0.015000684, + 0.024489552, + -0.036700964, + -0.019858558, + 0.01418659, + 0.00031904815, + -0.03750171, + -0.009395447, + -0.026918488, + 0.024916617, + -0.0057120044, + -0.007974118, + 0.002056922, + 0.023635421, + 0.009642344, + -0.013879637, + -0.013372497, + -0.020525848, + -0.0013304099, + -0.043747548, + 0.0009709073, + -0.013205674, + -0.018884314, + -0.01476046, + 0.0102429055, + -0.011203803, + -0.025076767, + 0.02007209, + 0.015454442, + -0.009261988, + 0.016642218, + -0.02360873, + -0.007900717, + 0.020552538, + -0.013639413, + -0.0133991875, + -0.017349547, + -0.015908198, + -0.011784346, + 0.009689054, + 0.0130255055, + 0.0038736197, + -0.017669845, + 0.017189397, + 0.038596068, + -0.011951168, + 0.006522762, + -0.0035166196, + -0.011710944, + -0.009075147, + 0.008241034, + 0.017829996, + -0.018857623, + -0.0023488617, + 0.021927157, + -0.021940503, + -0.0069398186, + 0.021126408, + -0.0017850014, + -0.0021853754, + 0.010129466, + -0.003298082, + -0.010102774, + -0.001996866, + 0.02888032, + -0.0093153715, + 0.014360086, + 0.001457195, + 0.003616713, + 0.0082076695, + 0.00006532146, + 0.023114935, + 0.00850795, + 0.010189522, + -0.0147871515, + -0.0016231835, + 0.015427751, + 0.015027376, + 0.024195943, + -0.018817585, + 0.002757577, + -0.010896849, + 0.009101839, + 0.0016657233, + 0.008234361, + 0.018377174, + -0.019858558, + -0.016708948, + -0.0015189194, + 0.0044841906, + -0.0138396, + 0.023755532, + 0.003653414, + -0.029814528, + -0.008434549, + 0.005485126, + 0.018764202, + -0.015921544, + -0.039556965, + -0.028132956, + 0.0036033674, + 0.035286307, + 0.0026674927, + 0.008174306, + 0.009322044, + 0.028773556, + -0.007607109, + -0.010022699, + -0.011070345, + -0.006032304, + -0.015227563, + -0.013419206, + 0.012331524, + 0.005501808, + 0.020565884, + 0.00030507674, + 0.010816774, + 0.0043006856, + -0.0049946676, + 0.005395042, + -0.001981852, + 0.006886435, + 0.010409728, + 0.029067162, + 0.008174306, + 0.022073962, + -0.005131462, + -0.0011961177, + -0.030108135, + 0.0061323973, + -0.0135193, + -0.015521171, + -0.021099716, + -0.030268285, + -0.0015614592, + -0.00871481, + -0.010563204, + 0.009382101, + 0.0015005689, + 0.02595759, + 0.025223572, + -0.00041726494, + 0.013692795, + -0.008267726, + 0.009769129, + -0.011504084, + -0.023341812, + 0.008654755, + 0.00018559009, + -0.005014686, + -0.020886185, + 0.008788212, + 0.0062892106, + 0.008788212, + 0.010036045, + 0.0009784143, + -0.009949298, + 0.014680386, + -0.0007957436, + 0.041211843, + -0.00928868, + -0.008354474, + 0.015667975, + -0.0346724, + -0.016014965, + -0.007653819, + 0.0065861545, + -0.04409454, + -0.020832801, + 0.013145617, + -0.010249578, + 0.02255441, + -0.017736575, + -0.019645024, + 0.01959164, + 0.016535452, + 0.025717366, + -0.015828125, + 0.023061551, + 0.0083878385, + -0.010796756, + 0.011370625, + 0.015948236, + -0.01689579, + -0.023208354, + 0.018937698, + 0.018363828, + -0.020485811, + -0.020218894, + 0.002595759, + 0.009622325, + -0.03451225, + 0.006365949, + 0.027252134, + 0.029787837, + 0.0010835126, + 0.00572535, + 0.009582288, + -0.0054817894, + 0.023929028, + -0.015788088, + -0.020525848, + -0.01666891, + -0.004577611, + -0.015107451, + 0.006833052, + -0.002046913, + 0.0031095725, + 0.020552538, + -0.009322044, + -0.011010289, + -0.019898595, + 0.010016026, + 0.0069998745, + -0.02917393, + 0.023101589, + 0.0022737915, + 0.007053258, + 0.0107033355, + 0.0034699093, + -0.008628063, + 0.0013821248, + 0.014400124, + 0.024703085, + -0.0071333325, + 0.0059989393, + 0.002167025, + -0.011644214, + 0.0122781405, + 0.009248642, + -0.0009875896, + -0.00830109, + -0.0054250695, + -0.008781539, + 0.0106165875, + 0.0048678825, + 0.011070345, + -0.012138009, + -0.03002806, + -0.014707076, + -0.007994137, + -0.015467788, + 0.00079032185, + -0.011944495, + -0.0170159, + -0.020605922, + -0.0046710316, + 0.022207418, + 0.014013095, + -0.021446709, + 0.009141876, + 0.0044474895, + -0.0107033355, + 0.006646211, + -0.01717605, + 0.010509822, + 0.0018584033, + 0.0006201629, + -0.0147871515, + -0.025757402, + 0.027999498, + -0.023982411, + -0.0018250388, + -0.029387463, + -0.01377287, + 0.023501962, + -0.002078609, + 0.019217959, + 0.025850823, + -0.017189397, + 0.008527969, + -0.03333782, + -0.014627002, + 0.0028142966, + 0.010563204, + -0.0020902867, + 0.026291234, + -0.007366884, + 0.01517418, + 0.018977735, + 0.015454442, + 0.0035633298, + -0.010716681, + -0.013906329, + -0.009789147, + -0.00836782, + 0.00007934498, + -0.0073001552, + -0.017149359, + 0.0040137507, + -0.00944883, + -0.0053516678, + 0.01924465, + -0.0072134077, + 0.0067262854, + 0.013652759, + 0.022701213, + -0.0010526504, + -0.006803024, + -0.020685997, + -0.0127452435, + -0.006752977, + -0.02379557, + -0.006065668, + -0.0152676, + 0.02519688, + 0.027412282, + -0.040678013, + -0.02338185, + 0.026891796, + -0.031576175, + 0.003166292, + -0.02214069, + 0.015361021, + 0.014453506, + -0.00045167207, + -0.00036429876, + 0.010603242, + -0.010262924, + 0.009048455, + -0.029307388, + -0.003750171, + 0.022260802, + -0.017616462, + 0.008588025, + 0.00816096, + -0.014293357, + 0.0039236667, + 0.007580417, + -0.0014705409, + 0.01492061, + -0.006676239, + 0.00314961, + 0.0003401095, + 0.00036617552, + 0.01492061, + -0.0083878385, + 0.023942374, + 0.0071533513, + -0.0349927, + 0.012291486, + 0.010783411, + -0.016588835, + 0.008354474, + 0.013425879, + 0.0014421811, + -0.02080611, + 0.00541506, + -0.02089953, + 0.014573619, + -0.0012745244, + -0.0081075765, + 0.016415339, + -0.012972122, + -0.00024001596, + 0.031389333, + 0.000569282, + -0.0065394444, + -0.022474336, + 0.010543185, + -0.012391579, + 0.0085746795, + 0.013279076, + 0.0031712968, + -0.009201933, + -0.022113997, + 0.008354474, + -0.027492357, + -0.020178856, + 0.0065561268, + -0.0019801839, + -0.021793699, + 0.02519688, + 0.0011026971, + -0.0019234641, + -0.0062224814, + -0.011003616, + 0.00190845, + -0.006722949, + -0.025770748, + -0.003373152, + -0.03878291, + -0.018030182, + 0.0060756775, + -0.01393302, + -0.00020310647, + 0.0008024165, + 0.024556281, + -0.020525848, + 0.009155222, + 0.25111467, + -0.007520361, + -0.0110770175, + 0.028293107, + -0.0070799496, + 0.029414153, + 0.03387165, + -0.013158963, + -0.0097024, + 0.019831866, + -0.015107451, + -0.0027275488, + 0.01409317, + -0.0038402553, + 0.0082944175, + -0.011097036, + -0.019364763, + -0.04062463, + -0.0030862174, + -0.009375428, + 0.034378793, + -0.008914998, + -0.0014580291, + -0.0066495473, + 0.0050680693, + 0.013973057, + -0.0041238535, + 0.008434549, + 0.020152165, + 0.023261737, + 0.010683317, + 0.019578295, + 0.0003943268, + 0.03331113, + 0.0043507325, + 0.0070132203, + -0.0011886107, + -0.007787277, + 0.024943309, + 0.008321109, + 0.0021136417, + -0.012144682, + -0.0077472394, + -0.0011585826, + 0.0095022125, + 0.028613405, + -0.011270532, + -0.0061857803, + -0.003194652, + 0.02262114, + -0.029707761, + -0.004017087, + 0.01682906, + 0.023021514, + 0.011250514, + 0.0014229964, + 0.009048455, + -0.020619268, + -0.01915123, + -0.010509822, + 0.0008983395, + 0.024316056, + 0.003623386, + 0.024075832, + 0.0000784066, + -0.010823447, + -0.028266415, + 0.024502898, + -0.004871219, + 0.004140536, + -0.0005375857, + -0.003446554, + -0.0011844402, + -0.029787837, + -0.029013779, + -0.0026925162, + 0.03864945, + 0.00074152625, + 0.018150294, + 0.015881507, + -0.016175115, + 0.009835858, + -0.0013862954, + 0.0008512121, + -0.006893108, + -0.040384404, + 0.0027108665, + 0.0037835357, + 0.016281882, + -0.004387433, + 0.0052315556, + -0.021433363, + -0.0017166041, + -0.0077072023, + 0.0048478637, + -0.019351417, + -0.00092920166, + 0.006395977, + 0.000065217195, + 0.0056686304, + -0.0197251, + 0.004771125, + 0.0048512, + -0.022354223, + -0.01285201, + 0.0060890233, + 0.010556531, + 0.013679449, + 0.013138944, + -0.011710944, + -0.016014965, + -0.01682906, + 0.0060022757, + -0.010496476, + 0.00040663, + -0.0013270734, + -0.025930898, + -0.016975863, + 0.03267053, + -0.033898342, + 0.012158028, + -0.025010038, + -0.0071533513, + 0.0053516678, + -0.018457249, + 0.002078609, + -0.016081695, + 0.00060598296, + 0.009268661, + -0.031816397, + 0.030401744, + -0.016175115, + 0.014400124, + 0.0045142183, + -0.015881507, + 0.007320174, + 0.003947022, + -0.0033247736, + -0.0014446834, + -0.02137998, + 0.009969316, + -0.0074002487, + 0.008094231, + 0.00402376, + -0.0145068895, + -0.019231305, + 0.0069264728, + 0.017963452, + -0.013205674, + 0.0132990945, + -0.022380915, + -0.013158963, + 0.0022654503, + -0.016748985, + 0.015761396, + 0.00092836755, + 0.00026274554, + -0.008374493, + 0.011270532, + 0.027332207, + -0.015601246, + 0.0141332075, + 0.011744308, + -0.00578207, + -0.02188712, + -0.015734704, + -0.17306839, + 0.032910753, + 0.010896849, + -0.01632192, + 0.015187526, + 0.013499281, + 0.011824383, + -0.021633549, + 0.012358215, + 0.009328717, + 0.025263608, + 0.031202491, + -0.018777547, + -0.014733768, + 0.01151743, + -0.012358215, + -0.0040137507, + 0.0055451817, + 0.030161519, + 0.010489803, + 0.02166024, + -0.02057923, + 0.0009500545, + 0.0071600243, + -0.029814528, + 0.033925034, + 0.011183784, + 0.025877515, + -0.016855752, + -0.009015091, + -0.02751905, + -0.026344618, + 0.0120912995, + 0.032056622, + -0.0010001012, + 0.008601371, + 0.00053299806, + -0.024102524, + -0.012658495, + 0.022567756, + 0.003750171, + 0.020138819, + 0.00028568364, + -0.008654755, + 0.014653694, + 0.017629808, + 0.0013787885, + 0.0023021514, + -0.011791019, + -0.017789958, + 0.0256106, + -0.013919674, + 0.020298969, + 0.0006706267, + 0.0032380258, + 0.020032052, + 0.0141332075, + -0.0009216946, + 0.015948236, + -0.0214734, + -0.019551603, + -0.008601371, + 0.018403865, + -0.016415339, + -0.020672651, + 0.0063792947, + -0.016522106, + -0.0026257872, + -0.043267097, + 0.026998563, + -0.010029372, + -0.013225692, + 0.0026357963, + -0.012978795, + 0.0013103912, + -0.019338071, + -0.00022375076, + 0.030161519, + 0.0041805734, + -0.017629808, + -0.018684126, + 0.025490487, + -0.018363828, + -0.018564014, + 0.0025006703, + -0.008120922, + 0.0034231988, + 0.022954784, + -0.007053258, + -0.021913812, + 0.027572433, + -0.025410412, + 0.007954099, + -0.010756719, + 0.026264545, + 0.006576145, + -0.0031846426, + 0.021967195, + -0.004017087, + -0.010583223, + -0.00066520495, + -0.011550794, + -0.014280011, + 0.012838664, + 0.026704956, + -0.0019551604, + 0.008227688, + 0.0010217882, + 0.012298159, + -0.005361677, + -0.028426563, + 0.00093587453, + 0.015227563, + 0.021046335, + -0.026224507, + -0.00464434, + 0.016188461, + 0.0017583098, + 0.019578295, + -0.023341812, + 0.05207533, + -0.008314436, + 0.016628873, + 0.009775802, + 0.00029152242, + -0.01616177, + -0.06897112, + -0.021713624, + 0.002854334, + 0.005641939, + -0.011684252, + 0.029013779, + 0.007954099, + 0.01867078, + 0.008441222, + 0.02681172, + -0.0026891797, + -0.024489552, + -0.0020902867, + -0.0011427345, + 0.026838413, + -0.001641534, + 0.011010289, + -0.02853333, + 0.0060990327, + 0.026931833, + -0.000014557875, + -0.0046543493, + 0.008868287, + -0.011604177, + -0.015054068, + -0.0009208605, + -0.02554387, + 0.022420952, + 0.022848018, + 0.0031112407, + 0.001441347, + -0.0032430305, + 0.0025540534, + -0.028319798, + 0.0074002487, + 0.019271342, + -0.038729526, + -0.0016440363, + 0.020258931, + -0.024449514, + -0.0020102118, + -0.011584158, + 0.017216088, + -0.02137998, + -0.010196195, + 0.005962238, + -0.01800349, + -0.009622325, + 0.01593489, + -0.025637291, + -0.026357964, + -0.023195008, + 0.00068063603, + 0.01022956, + 0.008521296, + -0.017456312, + -0.018483939, + 0.0012545056, + -0.009635671, + -0.003166292, + 0.014560273, + 0.010850139, + -0.013879637, + 0.011303897, + 0.022594448, + 0.0028960395, + -0.021206483, + -0.02710533, + 0.009528904, + -0.0049713124, + 0.0068597435, + 0.010963579, + -0.007473651, + 0.0005559362, + -0.009008418, + -0.03680773, + -0.01800349, + -0.01119713, + 0.012725225, + -0.016775677, + 0.0028293105, + -0.03477917, + -0.0007181711, + -0.0019551604, + 0.025156843, + 0.015294292, + -0.0060623316, + 0.010302961, + -0.0016673915, + -0.034058493, + -0.006065668, + 0.036220513, + 0.008541315, + -0.03186978, + -0.014693731, + 0.032296848, + 0.0152676, + -0.014933956, + 0.005805425, + 0.014480198, + 0.00052590814, + -0.01816364, + -0.08295752, + 0.012698533, + 0.010356344, + -0.0037001243, + 0.014693731, + -0.0086681, + 0.015601246, + -0.018817585, + -0.0021837072, + -0.0061757714, + -0.017950106, + -0.00036054527, + -0.0054050507, + 0.0076938565, + -0.028960396, + -0.018523976, + 0.025050076, + -0.0014563609, + 0.015120797, + 0.012618458, + 0.0058821635, + 0.00526492, + 0.033097595, + -0.001323737, + -0.009755783, + 0.008354474, + -0.014266665, + 0.031202491, + -0.021193137, + -0.007867352, + -0.00056761375, + -0.029067162, + -0.013639413, + 0.016348612, + -0.0053082937, + -0.01896439, + -0.01068999, + 0.0024222636, + 0.0003165458, + 0.02602432, + -0.017029246, + -0.009615652, + 0.029654378, + -0.01476046, + -0.010082755, + 0.0061390703, + -0.0007736396, + -0.004941284, + 0.01616177, + 0.016762331, + -0.00049963355, + 0.01717605, + 0.015347675, + -0.0141332075, + 0.017042592, + -0.054504268, + 0.009055128, + 0.010649952, + -0.018203678, + 0.013178982, + 0.019645024, + 0.010790084, + 0.0025173523, + 0.011984533, + -0.0012294822, + -0.0143200485, + -0.0038502647, + -0.0014229964, + 0.007053258, + -0.02968107, + -0.04118515, + 0.014360086, + 0.015067413, + 0.020152165, + 0.020138819, + 0.0033531333, + 0.009842531, + -0.024409477, + -0.030081443, + 0.03248369, + -0.0012670173, + 0.0070866225, + -0.026785031, + 0.019137884, + 0.004814499, + -0.007046585, + -0.014907264, + -0.006913127, + -0.0058855, + 0.032777295, + -0.0077005294, + 0.0027792638, + 0.01581478, + 0.0042339563, + 0.023008168, + -0.002046913, + -0.008721483, + -0.027625816, + 0.025917552, + 0.01823037, + 0.016642218, + -0.0007899048, + -0.002382226, + -0.024649702, + -0.0068664164, + 0.00015358102, + -0.03931674, + -0.0052849385, + 0.01533433, + 0.0031079042, + 0.013352478, + 0.019965325, + -0.0037835357, + 0.03400511, + 0.008868287, + -0.0012895383, + -0.011343934, + -0.037741937, + -0.020685997, + 0.028907012, + 0.023275083, + 0.007653819, + 0.021913812, + -0.006676239, + -0.006906454, + 0.0069264728, + 0.008120922, + -0.017002555, + -0.00598893, + -0.007813969, + 0.013332459, + -0.0058888365, + -0.02738559, + 0.004200592, + -0.00804752, + -0.023848953, + 0.00183338, + 0.005975584, + -0.012444963, + 0.03632728, + 0.016989209, + 0.023421887, + -0.0036467412, + 0.0042172745, + 0.02039239, + 0.008060866, + 0.013652759, + -0.016855752, + -0.015921544, + 0.00862139, + -0.002714203, + -0.000095245254, + -0.01119713, + -0.020312315, + -0.011630869, + 0.006072341, + 0.024129216, + -0.012885374, + -0.0032380258, + 0.042679884, + 0.025076767, + 0.014773806, + 0.0105164945, + -0.006786342, + -0.008694792, + 0.023208354, + 0.0077605853, + 0.0095022125, + -0.008881633, + 0.022594448, + 0.012938757, + -0.017296163, + -0.008834923, + 0.014533581, + -0.010676644, + 0.0013871295, + -0.009942625, + 0.012771935, + 0.012605113, + -0.014853881, + 0.0077472394, + -0.016108386, + -0.040838163, + 0.0040270966, + 0.0019551604, + -0.0047677886, + 0.0013337464, + -0.013759525 + ] + }, + { + "object": "embedding", + "index": 3, + "embedding": [ + -0.0010213737, + 0.008644082, + 0.0023587057, + 0.009380755, + -0.0029162795, + 0.0086643575, + -0.018856129, + 0.0043659713, + -0.0068497085, + -0.04287573, + -0.0075086593, + -0.010408043, + 0.021775788, + -0.019937484, + -0.0062008956, + -0.013003294, + 0.023168033, + -0.006413787, + 0.010455352, + -0.025371293, + -0.013476388, + 0.023438372, + -0.016044606, + -0.009150967, + 0.0061704824, + 0.005903523, + 0.007907409, + -0.021383796, + 0.013523697, + -0.0016980654, + 0.0190724, + -0.0030886205, + 0.0021998817, + -0.004203768, + 0.0023468784, + -0.013625074, + -0.015490412, + -0.005937315, + -0.0011193715, + -0.011164991, + 0.02591197, + -0.02397905, + -0.010833826, + -0.008637324, + -0.0030210358, + 0.0026172171, + -0.016977275, + 0.017409816, + -0.024695447, + 0.010536454, + 0.0074951425, + 0.0034941286, + -0.03752302, + -0.012422066, + -0.019829348, + -0.00043676607, + -0.028196333, + 0.0045011407, + -0.006494889, + -0.014706429, + 0.011678635, + 0.000102855454, + -0.0281693, + 0.016409563, + -0.0037779843, + 0.00011837881, + -0.008157472, + 0.011901665, + -0.04260539, + -0.021140492, + 0.022843625, + 0.01858579, + -0.011219059, + -0.021478415, + 0.018639859, + -0.006626679, + -0.024560276, + 0.007522176, + 0.00737349, + 0.0059001436, + 0.016842104, + -0.018639859, + 0.01726113, + 0.004882994, + 0.024695447, + 0.0069071557, + -0.010921686, + 0.022613838, + 0.008191264, + -0.026425615, + 0.03173777, + 0.0031545155, + 0.011746219, + -0.0048221676, + -0.03033201, + -0.011556982, + -0.015517445, + 0.019194052, + -0.0077722394, + -0.010556729, + -0.01770719, + 0.011151474, + -0.004264594, + -0.015612064, + -0.016788037, + 0.00671116, + 0.008704908, + 0.0002832221, + 0.010293148, + 0.005704148, + 0.0093537215, + 0.024763031, + -0.016450115, + -0.052526824, + -0.02185689, + -0.016869139, + 0.03522514, + 0.0117259445, + -0.013260117, + -0.03381938, + 0.0075356932, + 0.036144294, + -0.007893892, + -0.0050046463, + 0.031818874, + 0.012307173, + -0.0087387, + -0.01046211, + -0.004720791, + -0.012090902, + 0.005271606, + 0.014760497, + 0.010867618, + 0.020762017, + -0.009664611, + 0.024735996, + -0.022938244, + 0.022897694, + -0.034278955, + -0.018707443, + 0.02203261, + 0.019045366, + -0.025155023, + 0.011935457, + 0.010313424, + 0.02662837, + 0.024465658, + 0.022438118, + 0.00737349, + 0.0055216695, + 0.018072147, + -0.016612317, + 0.020032102, + -0.014314438, + 0.0032085832, + 0.016990792, + 0.026141759, + 0.018964265, + -0.005197263, + 0.003558334, + 0.003761088, + 0.009286136, + 0.015598547, + -0.008927938, + -0.011219059, + 0.019613078, + 0.006728056, + 0.013834586, + 0.0060150377, + -0.021613585, + -0.013226325, + 0.020964772, + -0.0014032272, + 0.009772747, + 0.008252091, + 0.010313424, + 0.03222438, + 0.01761257, + -0.021208076, + 0.0067922617, + -0.0031359298, + -0.0132466, + 0.006227929, + 0.008434569, + -0.013239841, + -0.002096815, + 0.009941708, + 0.008015544, + 0.006643575, + 0.002061333, + 0.008488637, + 0.0397398, + 0.018031595, + 0.0026510095, + -0.67217034, + -0.051850975, + 0.0032254795, + 0.0016161189, + 0.020910705, + 0.0067719864, + 0.0150713865, + 0.006079243, + -0.0040415647, + -0.001850131, + -0.0314404, + 0.0071504605, + -0.007988511, + -0.0019126468, + -0.0027067668, + -0.0028317985, + -0.0006935879, + -0.012030075, + 0.014976768, + 0.012178762, + -0.006379995, + 0.0045856214, + -0.005704148, + 0.0048593394, + 0.021154009, + -0.015341725, + -0.0040753568, + -0.019275155, + -0.008718425, + 0.032602854, + -0.031007856, + 0.0381448, + 0.009475374, + 0.005268227, + 0.047011912, + -0.009948467, + -0.022776041, + 0.026236378, + 0.011279885, + 0.03425192, + -0.022654388, + -0.016585283, + 0.0058021457, + -0.025046887, + -0.011928698, + 0.012070626, + 0.017855875, + -0.04498437, + -0.0045450707, + -0.018991299, + 0.020248374, + -0.013219566, + -0.011894906, + -0.01942384, + 0.004626172, + 0.0143279545, + 0.02207316, + -0.014963251, + 0.006809158, + -0.00710991, + -0.021559516, + -0.0066570924, + -0.029548027, + -0.02287066, + -0.014638844, + -0.0017403058, + -0.029277688, + -0.0031883079, + 0.006278618, + -0.008427811, + 0.010259356, + 0.023789812, + -0.013571006, + 0.010293148, + 0.019923966, + 0.017274648, + 0.008988764, + 0.0015966883, + -0.007974993, + -0.01695024, + -0.007332939, + -0.003612402, + -0.0157202, + 0.0077114133, + 0.028764045, + -0.035684716, + -0.020910705, + 0.005548703, + 0.023032863, + -0.027790826, + 0.005656839, + 0.012253105, + -0.005224297, + 0.018004563, + -0.008157472, + 0.0095835095, + 0.0065861284, + -0.00096223707, + 0.014652361, + -0.011847597, + -0.017761257, + -0.011104165, + 0.0052918815, + -0.015544479, + -0.024965785, + -0.0029754161, + -0.0053662243, + 0.0087387, + 0.025939004, + -0.012895159, + 0.007718172, + -0.011577258, + -0.030223874, + -0.008725184, + 0.0097254375, + -0.027980063, + 0.017936977, + 0.0012925572, + 0.016531216, + 0.003686745, + 0.0035110246, + -0.0069747404, + 0.031467434, + 0.0033268565, + 0.00020835093, + 0.014598293, + -0.0020495057, + -0.014963251, + -0.010773, + 0.00238405, + 0.00037657344, + 0.002578356, + -0.006565853, + -0.008535947, + 0.026587818, + -0.017639605, + -0.018788544, + -0.0031646532, + 0.030602349, + -0.042443186, + -0.041037425, + -0.0081507135, + 0.004230802, + 0.0074072825, + 0.0111244405, + -0.023816846, + -0.022127228, + 0.02697981, + -0.0029720368, + 0.032467686, + 0.002101884, + -0.0038523274, + -0.037712257, + 0.022329982, + -0.0035346793, + -0.0032660302, + -0.022248881, + -0.011164991, + 0.0025749768, + 0.012624821, + 0.012205795, + 0.010326941, + -0.040577848, + 0.0012410239, + 0.008840078, + -0.015206556, + 0.014152234, + 0.014963251, + 0.002318155, + -0.018423587, + -0.003717158, + -0.005788629, + -0.009651094, + 0.015422827, + 0.015084904, + -0.01125961, + 0.009995776, + -0.0045247953, + -0.0035786096, + 0.006839571, + 0.0065489565, + -0.023965532, + -0.012983019, + 0.006545577, + 0.026371546, + -0.007055842, + 0.0077114133, + 0.014179269, + -0.0062448257, + 0.002874039, + -0.027358284, + 0.02437104, + -0.0007628622, + 0.0025935625, + 0.015949987, + -0.023384303, + 0.005359466, + 0.0055824956, + -0.0035313002, + 0.023478922, + 0.021924473, + -0.010739207, + 0.010489144, + -0.009319929, + 0.0051905042, + -0.02193799, + -0.0058021457, + -0.007359973, + 0.02176227, + 0.0281693, + 0.020342993, + -0.025966039, + -0.010658106, + 0.0064475797, + 0.022478668, + 0.03738785, + 0.015652616, + 0.009394272, + -0.005592633, + -0.002441497, + 0.0030869308, + -0.030304976, + 0.015220073, + -0.018558756, + -0.003541438, + 0.0019278533, + 0.006177241, + 0.038334038, + 0.015449861, + -0.0040145307, + -0.022059644, + -0.011333953, + -0.0077992734, + 0.008988764, + 0.012895159, + -0.019910451, + 0.0059542116, + -0.013787277, + 0.035792854, + 0.007927684, + 0.0147875305, + -0.0036968826, + 0.03676607, + -0.010705415, + -0.0039706007, + -0.009401031, + 0.040172342, + 0.015179521, + -0.0058798683, + 0.018328968, + -0.025438879, + -0.015990539, + -0.017964011, + 0.0067652278, + 0.014341472, + -0.035522513, + 0.009319929, + 0.0031714116, + 0.019369774, + 0.04211878, + 0.02397905, + -0.0010357354, + 0.0062718596, + 0.009968742, + 0.008137197, + -0.00023802483, + 0.032467686, + 0.0049776128, + -0.008143956, + -0.0061130356, + -0.02022134, + -0.0086643575, + -0.01593647, + -0.014706429, + -0.004095632, + -0.012604545, + -0.0014632086, + -0.018639859, + 0.026141759, + 0.0043423166, + -0.008731943, + -0.037279718, + 0.027561037, + -0.009529442, + -0.0007624398, + -0.013064121, + -0.009745712, + -0.009455099, + -0.026141759, + 0.021356763, + 0.009211794, + 0.016260877, + -0.008285883, + 0.00073878514, + -0.009042832, + 0.007130185, + 0.019315705, + -0.037144545, + -0.016923208, + -0.019234603, + 0.016801555, + -0.022708457, + 0.0029382445, + -0.0014311059, + 0.012435583, + -0.006596266, + 0.01774774, + -0.025709217, + -0.012834333, + 0.000044669257, + 0.022911211, + -0.012124694, + -0.0027135254, + 0.009482132, + 0.011252851, + 0.0013778829, + -0.00489989, + 0.0038219143, + 0.012401791, + -0.013908929, + -0.0052479515, + -0.021505449, + -0.024046633, + -0.00043148603, + 0.084778234, + -0.0034180959, + 0.00657937, + 0.002101884, + 0.011043339, + 0.008995523, + -0.004305145, + 0.0067517105, + 0.0062448257, + 0.016409563, + -0.011502914, + -0.018991299, + 0.012023317, + 0.001227507, + 0.0063833743, + -0.012124694, + -0.013537214, + -0.019194052, + 0.026033623, + -0.0063056517, + 0.00865084, + 0.012340965, + -0.001894061, + 0.018518206, + -0.0064002704, + -0.004115908, + 0.013097913, + 0.010049844, + 0.0013128327, + -0.025411844, + 0.012793782, + 0.0005677114, + -0.015409309, + -0.0016718763, + -0.020113204, + -0.0016271014, + 0.018085664, + 0.020586297, + -0.008157472, + -0.012199037, + 0.010212047, + 0.0063124103, + 0.0051195403, + -0.005082369, + -0.0018687168, + -0.0077384473, + 0.0021255387, + 0.012489651, + -0.027304215, + 0.004798513, + 0.03541438, + -0.0046025175, + -0.037279718, + -0.014909183, + -0.00094618567, + 0.01333446, + -0.012003041, + -0.0038557067, + 0.0017943736, + 0.014841598, + -0.00017962744, + -0.021559516, + 0.01457126, + -0.009421306, + -0.03400862, + -0.044524796, + -0.0015468446, + -0.014855116, + -0.03827997, + -0.021248627, + 0.016004056, + -0.013179015, + -0.029602095, + 0.009752471, + 0.017369267, + -0.004538312, + 0.026168793, + -0.010056602, + -0.0101850135, + 0.02662837, + -0.01607164, + -0.03417082, + -0.02392498, + -0.027817858, + 0.00040402974, + 0.009968742, + 0.020559262, + -0.017098928, + 0.002115401, + -0.016720453, + 0.040415645, + -0.011827321, + 0.014733463, + 0.0009689955, + -0.014368505, + -0.020829601, + 0.013239841, + 0.020599814, + -0.02949396, + -0.004896511, + 0.013354735, + -0.021708203, + 0.0019041987, + -0.013800794, + -0.0059069023, + 0.007846583, + 0.01690969, + 0.000936048, + -0.0072923885, + 0.00485596, + 0.029034384, + -0.036495734, + 0.00984709, + 0.013030329, + -0.020424094, + 0.03354904, + 0.013990032, + 0.0348737, + 0.007691138, + -0.00083382614, + 0.008421052, + -0.011002788, + 0.022154262, + 0.015963504, + 0.00047478246, + 0.006802399, + -0.0013381769, + -0.00034827236, + 0.006423925, + -0.0026594577, + -0.011131199, + 0.013388528, + -0.019491425, + -0.022235364, + -0.022194812, + -0.0075694853, + -0.0083805015, + 0.010563487, + 0.0037847427, + -0.03611726, + -0.01461181, + -0.016004056, + 0.011543466, + -0.008576497, + -0.020464644, + -0.016896173, + 0.006140069, + 0.015868885, + -0.0076505872, + 0.01377376, + 0.02012672, + 0.024398074, + -0.01426037, + -0.0075289346, + -0.024492692, + -0.030304976, + -0.021018839, + -0.030791586, + 0.002321534, + 0.017869392, + 0.034900736, + 0.0057751117, + -0.0041902508, + -0.01642308, + -0.0014648982, + 0.011151474, + -0.014733463, + 0.02397905, + -0.006298893, + 0.0135304555, + 0.027871927, + 0.018991299, + -0.015517445, + -0.004967475, + -0.037063446, + 0.028250402, + 0.0006534595, + -0.011408296, + -0.0067483317, + -0.03346794, + -0.0020106446, + -0.0037374336, + -0.015125454, + 0.008583256, + -0.0038962576, + -0.00024013685, + 0.021600068, + -0.004291628, + 0.015747232, + -0.013935964, + 0.020059137, + -0.009198276, + -0.0097254375, + -0.010252598, + 0.0026391821, + 0.0025935625, + -0.026817605, + 0.0026459408, + 0.01337501, + -0.001041649, + 0.024425108, + -0.0143279545, + -0.005612909, + -0.01037425, + 0.006386753, + 0.028412605, + -0.009421306, + -0.013706176, + 0.00036094448, + -0.027817858, + -0.037333783, + -0.006292135, + 0.0106107965, + -0.01284785, + -0.014017065, + 0.0043997634, + -0.0048863734, + 0.018315451, + -0.011604291, + -0.0026915604, + 0.026344514, + -0.004176734, + 0.021748753, + -0.016801555, + 0.015963504, + 0.0100092925, + -0.014733463, + -0.0010450283, + -0.00079707697, + -0.016152741, + -0.018883163, + 0.009637577, + 0.019491425, + -0.011469122, + -0.02675002, + -0.0045856214, + 0.009002281, + -0.014422573, + -0.0040246686, + 0.04322717, + 0.019085918, + -0.0059846244, + -0.015287657, + 0.0037982597, + -0.010725691, + 0.020897187, + -0.0024347384, + -0.009914674, + -0.0074951425, + -0.013949481, + 0.0018822337, + -0.0016144293, + -0.009157726, + 0.013746726, + 0.018612824, + -0.015017319, + 0.005646701, + -0.014165752, + 0.018815579, + 0.0039266706, + -0.012949227, + 0.016058123, + 0.010401284, + 0.0079209255, + 0.020194305, + 0.018247867, + -0.0013145222, + 0.016531216, + 0.008306159, + 0.029710231, + -0.013537214, + -0.019045366, + -0.001580637, + 0.0036326773, + 0.015436344, + -0.005822421, + 0.004578863, + 0.0014370196, + -0.03757709, + -0.0011261299, + 0.015476895, + 0.0034518882, + 0.004420039, + 0.0047444454, + -0.024479175, + -0.022965278, + 0.0041091493, + 0.00016452649, + -0.01006336, + -0.0015400861, + -0.0075019007, + -0.007434316, + -0.004825547, + 0.019045366, + -0.01205035, + -0.014706429, + 0.021546, + 0.016693419, + -0.008495396, + 0.000274774, + 0.009630819, + 0.0057818703, + -0.0016085156, + 0.0047714794, + -0.014138717, + -0.006238067, + 0.014246853, + -0.009542959, + 0.00042916278, + -0.020464644, + 0.005400017, + 0.043416407, + 0.025817353, + 0.013456112, + 0.025749767, + -0.030169807, + -0.0017960632, + -0.030791586, + -0.026087692, + 0.018288417, + 0.024884684, + 0.02666892, + 0.004626172, + -0.016301427, + 0.021126974, + 0.02339782, + -0.019477908, + -0.006940948, + -0.022221847, + -0.04182141, + -0.01108389, + 0.0039942553, + -0.01841007, + -0.024384556, + -0.018802062, + -0.0140981665, + -0.005136437, + 0.007630312, + 0.00067120045, + 0.0045315535, + 0.0056872517, + 0.022681423, + -0.00035650926, + 0.010577004, + -0.031197093, + -0.0070085325, + 0.0064171664, + -0.019545494, + -0.036090225, + -0.019207569, + -0.016517699, + 0.014679395, + -0.0015721889, + -0.020694433, + -0.016450115, + 0.013618316, + -0.034143787, + -0.0062177917, + -0.027142012, + 0.01258427, + 0.019761764, + 0.0005677114, + 0.010955479, + -0.0077722394, + -0.008704908, + 0.011685393, + -0.01443609, + 0.0073802485, + 0.012151727, + -0.023641124, + 0.0256957, + 0.019180536, + -0.021464897, + -0.008258849, + 0.012523443, + 0.005704148, + -0.0072721126, + -0.007420799, + -0.01103658, + 0.00084692065, + 0.009820056, + -0.013091154, + -0.008745459, + 0.022667905, + 0.017950494, + -0.045633186, + 0.0010264425, + -0.0039773593, + -0.006940948, + -0.0042882487, + -0.01258427, + 0.009907916, + 0.005815663, + 0.010806792, + -0.02710146, + -0.0134425955, + -0.0033674072, + -0.010766242, + 0.013037087, + 0.0039874967, + 0.004220664, + 0.009617302, + 0.0071369433, + -0.0021508827, + -0.0138143115, + -0.002586804, + -0.030899722, + -0.01108389, + 0.012077385, + -0.00856298, + -0.012509926, + -0.014246853, + 0.010340458, + -0.037982598, + -0.015355242, + 0.0033606489, + -0.0014370196, + -0.035117008, + 0.020802569, + 0.013037087, + -0.023330236, + -0.0050012674, + 0.0038388106, + -0.009455099, + -0.0063056517, + -0.021478415, + 0.008968488, + -0.03133226, + -0.010441835, + -0.0039976346, + 0.0031156542, + -0.024087185, + -0.00856298, + -0.0029720368, + -0.011185266, + -0.013449354, + 0.21756864, + -0.00763707, + -0.0062887557, + 0.021708203, + -0.014909183, + 0.035171073, + 0.028601842, + -0.00057911634, + -0.0031122752, + 0.0024431867, + -0.015341725, + -0.011320436, + 0.007359973, + -0.0031511362, + 0.0016693419, + -0.03576582, + -0.022911211, + -0.027898962, + -0.028574808, + -0.02057278, + 0.032062177, + -0.009441582, + 0.014517192, + -0.007745206, + 0.026506716, + 0.0058697304, + -0.018018078, + 0.015963504, + 0.02039706, + 0.025601082, + 0.017517952, + 0.014517192, + -0.0041699754, + 0.015625581, + -0.0023722227, + 0.012854609, + 0.0024617724, + -0.0026037002, + 0.024776548, + 0.014814565, + 0.009178001, + -0.019045366, + -0.021140492, + -0.0015882403, + -0.017842358, + 0.018747993, + -0.009279378, + 0.0015890851, + -0.0298454, + 0.025790319, + -0.038712513, + -0.0055655995, + 0.020315958, + 0.031467434, + 0.014287404, + -0.00543043, + 0.020099688, + -0.009015798, + -0.0016668075, + -0.002608769, + -0.014354989, + 0.026479682, + -0.012550477, + 0.037766326, + -0.007170736, + -0.00026062346, + -0.014409056, + -0.0023384304, + 0.011685393, + -0.002529357, + 0.027479935, + 0.0027287318, + -0.00018659711, + -0.034143787, + -0.021532483, + -0.021518966, + 0.04206471, + 0.024289938, + 0.016747486, + 0.01682859, + 0.003832052, + 0.004737687, + 0.006940948, + 0.015368759, + -0.013577765, + -0.014314438, + -0.008225057, + 0.00068767427, + 0.01002281, + -0.015571513, + 0.011759737, + -0.005285123, + -0.0027912478, + -0.015787784, + 0.00012355327, + 0.010347216, + 0.0007434316, + 0.007954719, + -0.006467855, + 0.015044352, + -0.025574047, + 0.0073261806, + 0.005893385, + -0.0051330575, + -0.006961223, + 0.004071978, + -0.0019836107, + 0.0030092085, + -0.006900397, + 0.0013770381, + -0.0077384473, + -0.010928445, + -0.00042219312, + -0.0039976346, + 0.00008706809, + -0.005974487, + -0.005589254, + -0.020478161, + 0.024492692, + -0.033873446, + 0.020586297, + -0.014706429, + -0.014652361, + 0.014409056, + -0.014503675, + -0.015463377, + -0.006481372, + -0.019045366, + -0.018612824, + -0.036847174, + 0.026722988, + -0.025628116, + 0.020613331, + -0.0030058292, + 0.0028571428, + 0.0086643575, + -0.012604545, + 0.006025175, + -0.005014784, + -0.0082926415, + 0.010745966, + -0.012719439, + 0.02631748, + 0.005427051, + -0.001880544, + 0.003448509, + 0.018139731, + 0.015260624, + -0.010712174, + 0.015449861, + -0.0066030244, + -0.025925487, + -0.0037272957, + 0.015882403, + 0.023289684, + 0.00018469628, + -0.013483146, + -0.021708203, + 0.010299907, + 0.019139985, + -0.033062432, + -0.013800794, + 0.04790403, + 0.0032085832, + -0.019450875, + -0.014300921, + -0.1757202, + 0.015030836, + 0.024722481, + -0.026966292, + 0.025925487, + 0.028764045, + 0.00441328, + -0.017112443, + -0.0037779843, + 0.008394019, + 0.03452226, + 0.017896427, + -0.01695024, + -0.008914421, + -0.0024448761, + -0.0035448172, + -0.000100849036, + 0.017017825, + 0.017044859, + 0.0065185437, + 0.025803836, + -0.015706683, + 0.008218299, + -0.0038962576, + -0.02635803, + 0.03262989, + -0.010293148, + 0.0052378136, + 0.0043456955, + -0.0033217876, + -0.0095362, + 0.0011050097, + 0.013767002, + 0.02887218, + 0.01673397, + 0.019748246, + -0.00251584, + -0.011861114, + -0.014354989, + 0.018139731, + -0.009022556, + 0.0003429923, + 0.009860607, + -0.0033302356, + -0.011793529, + 0.018639859, + 0.0145577425, + -0.0044605895, + 0.0056061503, + -0.009637577, + 0.03284616, + -0.025668666, + 0.016666384, + 0.01854524, + 0.016166259, + 0.018626342, + 0.023168033, + 0.004582242, + 0.005143195, + -0.019329222, + -0.019045366, + 0.0078601, + 0.0034603362, + -0.005345949, + -0.017342232, + -0.02715553, + -0.009326687, + 0.021532483, + -0.016490664, + 0.008164231, + 0.0027354904, + -0.008860353, + 0.014354989, + -0.028115232, + 0.022830108, + -0.008975247, + 0.0056230463, + 0.02914252, + 0.012158486, + -0.0022133987, + -0.029061418, + 0.03395455, + -0.014449608, + -0.009117175, + 0.009428064, + 0.01337501, + 0.012753231, + 0.004132804, + -0.035468448, + -0.016544733, + 0.022329982, + -0.019194052, + 0.014530709, + -0.02697981, + -0.0038388106, + 0.01068514, + -0.017909944, + 0.03235955, + -0.014909183, + -0.0005427896, + -0.0040314267, + -0.015963504, + -0.021789305, + 0.020937737, + 0.010806792, + 0.016409563, + 0.0035617133, + 0.019937484, + 0.018247867, + -0.008576497, + -0.0068497085, + 0.0029281068, + 0.009651094, + 0.008319676, + -0.023843879, + 0.015612064, + 0.02573625, + -0.009373996, + 0.016842104, + -0.0056940103, + 0.032305483, + -0.0004671792, + 0.006927431, + 0.011185266, + -0.0074410746, + -0.028358538, + -0.07585706, + 0.0118678715, + -0.0029855538, + 0.008542705, + -0.010941962, + 0.04387598, + 0.016517699, + 0.03711751, + -0.0091239335, + 0.022897694, + -0.0053628455, + -0.009245586, + 0.00033665626, + -0.0074681086, + 0.03290023, + -0.010408043, + -0.0016921518, + -0.007346456, + -0.0029179691, + 0.022681423, + -0.0060217963, + -0.027033877, + -0.0016262566, + 0.0027321111, + -0.018396553, + 0.010421559, + -0.023735743, + 0.02962913, + 0.023127481, + 0.011665118, + -0.0046329307, + -0.007846583, + 0.020288924, + -0.025817353, + -0.039820902, + 0.0140981665, + -0.024830615, + 0.0025682184, + 0.026898708, + -0.029926501, + -0.0070220493, + 0.00010385866, + 0.00242798, + -0.007968235, + -0.015774267, + -0.005558841, + -0.014125201, + 0.01527414, + 0.0140981665, + -0.009009039, + -0.016679902, + -0.012104418, + 0.014882149, + -0.021600068, + 0.028493706, + 0.0030210358, + 0.010299907, + 0.016436597, + -0.046768606, + 0.002816592, + 0.00927262, + 0.012597786, + -0.015747232, + 0.013523697, + 0.031115992, + 0.0241007, + -0.022492185, + -0.029791333, + 0.023262652, + -0.008880628, + 0.00037087098, + 0.016341979, + -0.006106277, + -0.0062346878, + -0.01757202, + -0.021072907, + -0.016896173, + -0.011671877, + 0.016382528, + -0.018004563, + 0.0012942469, + -0.034900736, + 0.005568979, + 0.0059001436, + -0.0054676016, + 0.026939258, + 0.015368759, + -0.008238574, + 0.015517445, + -0.016666384, + -0.003585368, + 0.009907916, + 0.022478668, + -0.030413112, + -0.022140745, + 0.0314404, + 0.019613078, + 0.00095463375, + 0.010036327, + 0.0097795045, + -0.005041818, + -0.027520487, + -0.095267385, + 0.01872096, + 0.012530202, + -0.0006243136, + 0.0061434484, + -0.017544987, + 0.04038861, + -0.008556222, + 0.0122733805, + -0.011300161, + -0.057906564, + 0.006538819, + -0.013652108, + -0.014273887, + -0.024654895, + -0.027953029, + 0.03903692, + 0.012003041, + 0.006089381, + 0.0076573454, + 0.016869139, + 0.011009546, + 0.007312664, + -0.0008621272, + -0.026777055, + 0.010225564, + -0.0082994, + 0.024560276, + -0.009549717, + 0.0006733125, + -0.009029315, + -0.046173863, + 0.017680155, + 0.026303962, + -0.007332939, + -0.019491425, + -0.006873363, + 0.013449354, + 0.010779758, + 0.03682014, + -0.04509251, + 0.012111177, + 0.022248881, + -0.0052209175, + -0.004122666, + -0.01099603, + 0.019018332, + 0.008116921, + 0.026020106, + 0.009211794, + 0.0027963165, + 0.02406015, + 0.0051905042, + -0.0050350595, + -0.0035110246, + -0.03773929, + 0.023614092, + -0.009063107, + -0.004686998, + 0.007988511, + 0.014030582, + 0.004247698, + 0.01143533, + 0.012016558, + 0.025155023, + -0.011225818, + -0.014814565, + 0.0043152827, + 0.020545747, + -0.016815072, + -0.018856129, + 0.01218552, + -0.003818535, + 0.0134425955, + 0.009029315, + -0.0029940018, + 0.010766242, + -0.0063495818, + -0.028115232, + 0.021478415, + -0.00014330067, + -0.0018129593, + -0.031494465, + 0.01823435, + 0.026858157, + -0.012908677, + -0.024019599, + -0.02962913, + 0.000034927558, + 0.02269494, + -0.015220073, + 0.0045011407, + 0.010543212, + 0.010455352, + -0.005058714, + 0.013429078, + -0.010786517, + -0.019085918, + 0.03184591, + 0.02485765, + 0.0052918815, + -0.001196249, + -0.005663597, + -0.03208921, + -0.009279378, + 0.014463124, + -0.033630144, + -0.018707443, + 0.026479682, + 0.015787784, + 0.009259103, + 0.020153755, + 0.00041374503, + 0.019951, + 0.0064205457, + 0.010103911, + -0.007576244, + -0.03249472, + -0.02357354, + 0.018612824, + 0.0134425955, + 0.024438625, + 0.0031207232, + -0.014706429, + 0.0024178424, + -0.011678635, + 0.014368505, + -0.024006082, + 0.006450959, + -0.013949481, + 0.004071978, + 0.010097153, + -0.000086487285, + 0.0026374925, + -0.0042443187, + -0.0023519474, + 0.0017293233, + 0.010441835, + -0.024127735, + 0.034414124, + 0.005200642, + 0.014030582, + 0.0091239335, + -0.01509842, + 0.0265743, + -0.0047782375, + 0.008535947, + 0.004997888, + -0.04025344, + -0.0056433217, + -0.0014277266, + 0.0011117682, + -0.02843964, + -0.028277434, + -0.0074816253, + -0.011266368, + 0.019356256, + -0.005288502, + -0.013050604, + 0.038712513, + -0.00058840925, + 0.008319676, + 0.021424348, + -0.02339782, + 0.0021069527, + 0.020640366, + 0.005751457, + 0.008657599, + -0.038712513, + 0.00944834, + 0.018802062, + -0.018666891, + -0.013821069, + -0.008867112, + -0.0101512205, + -0.016652867, + -0.004247698, + -0.0066030244, + 0.01319929, + -0.009772747, + 0.020451128, + -0.024654895, + -0.0011007857, + 0.039793868, + -0.0051330575, + -0.0133006675, + 0.010570246, + -0.022586804 + ] + }, + { + "object": "embedding", + "index": 4, + "embedding": [ + 0.019221356, + 0.0036138783, + -0.007965014, + -0.0067472225, + -0.024066191, + 0.013718256, + -0.00505548, + -0.01043351, + 0.0065530343, + -0.04420912, + 0.015508738, + 0.0044893716, + 0.012171331, + -0.031412434, + -0.014574001, + -0.018997546, + 0.02109083, + -0.020788029, + -0.0024273545, + -0.024145182, + 0.0010812012, + -0.012987581, + -0.014258034, + -0.014073719, + -0.020603715, + 0.013757751, + 0.0028387704, + -0.028753042, + 0.009880567, + -0.0032534779, + 0.02904268, + -0.0067735533, + -0.009307876, + -0.030490864, + -0.008037423, + -0.019642645, + -0.035230376, + -0.00874835, + -0.020630045, + -0.028489737, + 0.009742331, + -0.017575692, + -0.0019023876, + 0.0013996373, + -0.007563472, + 0.008491627, + -0.006510247, + -0.010644155, + -0.004374175, + 0.00862328, + 0.011348499, + 0.012809849, + -0.034809086, + -0.009900315, + 0.0029523212, + 0.010736313, + -0.019274017, + -0.006329224, + -0.0033538633, + -0.011809285, + 0.0025985036, + 0.0050521884, + -0.032544654, + 0.013810413, + -0.009413199, + -0.0071750954, + -0.029569292, + -0.005197007, + -0.020235086, + -0.004663812, + 0.026054153, + 0.030543525, + -0.0048382524, + -0.030227557, + 0.010525667, + 0.0027087631, + -0.01702275, + 0.005789446, + -0.0062436494, + -0.0027169914, + 0.029937921, + -0.025567036, + 0.018233957, + 0.002512929, + 0.035572674, + 0.016956922, + -0.011282673, + 0.012842762, + -0.0035348863, + -0.015324424, + 0.018984381, + 0.012934919, + 0.0049139527, + 0.015495572, + -0.023486918, + -0.030675178, + 0.0009191034, + 0.04434077, + -0.0020291037, + -0.036020294, + -0.006832797, + 0.012625535, + 0.0066682305, + -0.0084258, + -0.008807594, + 0.02128831, + 0.01811547, + 0.0011494963, + 0.015008456, + -0.0037027441, + 0.0133759575, + 0.031149128, + -0.0011708899, + -0.04426178, + -0.018444603, + -0.019432, + 0.03243933, + -0.009465859, + -0.014429183, + -0.026804576, + 0.016127508, + 0.027673487, + 0.01209234, + -0.0064641684, + 0.023895042, + -0.005187133, + -0.014442348, + -0.0035381778, + 0.021696435, + -0.01092721, + 0.028805703, + -0.000857391, + 0.0066254437, + -0.0017197189, + -0.021577947, + 0.018273454, + -0.017615188, + -0.0025902751, + -0.0048119216, + -0.013744586, + 0.014416017, + 0.015087448, + -0.013836743, + 0.025145747, + -0.0012210828, + 0.018839562, + 0.019589985, + -0.00042129, + 0.01957682, + -0.0073989057, + 0.013468115, + -0.030464534, + 0.009860819, + 0.005628171, + 0.0079321, + -0.00002769344, + 0.021617442, + 0.028042115, + -0.002312158, + 0.014284364, + -0.004792174, + 0.003060935, + 0.0158642, + -0.024158347, + -0.0265676, + 0.009274962, + 0.018984381, + 0.00787944, + 0.0052200463, + -0.0061909882, + -0.013468115, + 0.01179612, + -0.025619699, + 0.014968961, + -0.0010984808, + 0.020156093, + -0.00038343974, + 0.0022232921, + -0.016180169, + -0.019050207, + -0.0072475043, + -0.018997546, + 0.01516644, + 0.020932848, + 0.0061547835, + -0.028621389, + 0.0019451749, + 0.009090648, + 0.008978743, + -0.014218537, + 0.013784082, + 0.04183936, + 0.014942629, + 0.014600332, + -0.6736427, + -0.040312186, + 0.000431164, + -0.013277218, + 0.028753042, + 0.015126944, + 0.022446858, + -0.0015321132, + -0.009228884, + 0.01224374, + -0.016193334, + 0.014310694, + 0.0010392369, + -0.0006257637, + 0.0054274, + -0.024053026, + 0.0031086593, + -0.0096830875, + 0.016469806, + -0.0012836179, + -0.0061909882, + 0.013290383, + -0.017430874, + 0.008307312, + 0.026620261, + -0.024105687, + 0.002277599, + -0.02446115, + -0.01273744, + 0.04162872, + -0.012941502, + 0.048658993, + 0.03451945, + -0.004943575, + 0.042787265, + -0.014863637, + -0.0048777484, + 0.03754747, + 0.022762826, + 0.05397778, + -0.005786155, + -0.012691361, + 0.006177823, + -0.009005073, + -0.0030197934, + -0.01288884, + 0.032228686, + -0.032886952, + 0.014679323, + -0.015535069, + 0.0120660085, + -0.02446115, + -0.0158642, + 0.010861383, + -0.0043215137, + 0.0062173186, + 0.019945448, + -0.011223429, + -0.0026445822, + 0.0011503191, + 0.0012432992, + 0.014955794, + -0.002351654, + -0.0156008955, + -0.0024849528, + 0.0016341445, + -0.038548034, + -0.01729922, + 0.0031432183, + -0.015679887, + 0.016588293, + 0.028147439, + -0.007517393, + 0.0014317278, + 0.011032532, + 0.027726147, + 0.009623843, + -0.008320478, + -0.008537705, + -0.02218355, + -0.003992381, + 0.018181296, + -0.0136919245, + -0.017259724, + 0.00014378989, + -0.038416382, + -0.032965943, + 0.025619699, + 0.009900315, + -0.0071750954, + 0.018971216, + 0.014613497, + 0.0022035441, + 0.022565346, + -0.0030428327, + 0.0129809985, + -0.003179423, + 0.004854709, + 0.0069578676, + -0.03157042, + -0.010229448, + -0.0031942339, + -0.005940847, + -0.011453822, + 0.0127440225, + -0.014613497, + -0.030490864, + -0.0042392304, + 0.038442712, + -0.014889969, + 0.028963687, + -0.010604659, + -0.023855546, + -0.0016423727, + 0.013639264, + -0.02047206, + 0.02572502, + -0.010630989, + 0.03451945, + -0.019668976, + 0.013277218, + 0.0069578676, + 0.0246323, + 0.0053319517, + -0.0029572584, + 0.014982126, + 0.0022232921, + -0.00054841756, + -0.0065267035, + -0.012987581, + 0.00051015586, + 0.018233957, + -0.016733112, + -0.012711109, + 0.012474134, + -0.0064115073, + 0.0027350937, + 0.0014638181, + 0.023565909, + -0.013106069, + -0.048237704, + -0.020985508, + -0.006230484, + 0.0039594676, + -0.0100451335, + -0.021920245, + -0.0016917427, + 0.0023993782, + -0.010703399, + 0.008438965, + -0.004344553, + -0.0032370212, + -0.013560272, + 0.013955231, + -0.016680451, + -0.0035546343, + 0.011677632, + -0.009847654, + -0.020564217, + 0.00579932, + 0.009873984, + 0.014468678, + -0.030701509, + -0.00308562, + 0.003531595, + -0.010005637, + 0.005644628, + 0.003531595, + 0.02215722, + -0.015653556, + -0.023631737, + -0.027647156, + -0.017154401, + 0.02954296, + -0.0027844636, + -0.008735185, + 0.005206881, + -0.0034460204, + 0.016746277, + -0.0069578676, + -0.0033193044, + -0.0032567692, + -0.03615195, + 0.009873984, + 0.027594496, + -0.012869093, + 0.013836743, + 0.014982126, + -0.004713182, + 0.0073594097, + -0.017694179, + 0.0340455, + 0.01095354, + 0.0028683925, + 0.010933792, + -0.013744586, + 0.017351883, + 0.011901442, + -0.0020373322, + 0.01980063, + 0.022065064, + -0.0078070303, + 0.006520121, + -0.033360902, + 0.026027823, + -0.022012403, + 0.0010589848, + -0.008195407, + 0.009821323, + -0.009834488, + 0.0116249705, + -0.012632118, + -0.01452134, + -0.0033176588, + -0.005197007, + 0.02091968, + 0.0053286604, + 0.009992472, + 0.0051015588, + 0.009511938, + 0.01918186, + -0.029569292, + 0.018892223, + -0.022828652, + -0.004433419, + -0.0027449676, + 0.014402851, + 0.029727275, + 0.0025688815, + 0.0005064531, + -0.036494248, + -0.01578521, + -0.006990781, + -0.002958904, + 0.0004784768, + -0.011434074, + 0.0011700671, + -0.023500083, + 0.01727289, + 0.004453167, + 0.02322361, + -0.0053681564, + 0.019458331, + -0.0119936, + 0.009103813, + -0.01107861, + 0.035651665, + -0.00025980923, + -0.017825833, + 0.028674051, + -0.01937934, + -0.018892223, + -0.008188824, + 0.008616697, + 0.0037850274, + -0.01105228, + 0.004301766, + 0.0143238595, + -0.0011338625, + 0.036072955, + 0.016311822, + 0.0018233957, + 0.0014885032, + -0.0079781795, + 0.0073396615, + -0.007293583, + 0.017786337, + -0.009228884, + 0.003521721, + -0.005177259, + -0.012829597, + 0.0031958795, + -0.007984762, + -0.0055590533, + 0.0055623446, + -0.009228884, + -0.01606168, + -0.0040285857, + 0.013389123, + -0.000023720704, + 0.0019534032, + -0.04347186, + 0.012039678, + -0.009097231, + -0.008702272, + -0.014495009, + -0.022736495, + -0.0049304096, + -0.018523594, + 0.030569855, + 0.010170204, + 0.009841071, + -0.007451567, + -0.0072540874, + -0.012072591, + -0.010163621, + 0.018826397, + -0.028937357, + -0.019023877, + 0.0033867767, + 0.008346808, + -0.007945266, + 0.015324424, + -0.02044573, + 0.03625727, + -0.009037987, + -0.0035447604, + -0.018944884, + -0.0015938256, + -0.003943011, + 0.01030844, + -0.0061514922, + -0.01338254, + 0.016509302, + -0.004170113, + -0.0028058572, + -0.025145747, + 0.0059210993, + 0.013310131, + 0.0017081993, + -0.0181418, + -0.01606168, + -0.023855546, + -0.021275144, + 0.075937524, + -0.008853673, + 0.018523594, + 0.011822451, + 0.014797811, + 0.0104400925, + -0.0120660085, + -0.0158642, + -0.003531595, + -0.011124689, + 0.0035941303, + 0.0005315495, + 0.0029572584, + 0.00066978525, + 0.0017213646, + -0.0223547, + -0.0074054883, + -0.016272327, + 0.007234339, + -0.015113778, + 0.013547107, + 0.006753805, + -0.008629862, + 0.038100414, + 0.008234903, + 0.017430874, + 0.008511375, + 0.035704326, + 0.02577768, + -0.0127769355, + -0.0035447604, + 0.03675755, + -0.020063937, + 0.008991908, + -0.0012013348, + -0.0007475429, + 0.032623645, + 0.013955231, + -0.018813232, + 0.0032386668, + 0.005424109, + 0.017983817, + 0.02039307, + -0.009314459, + 0.014863637, + -0.014863637, + 0.00021023359, + 0.010512502, + -0.0061416184, + -0.000029621953, + 0.036915537, + 0.022762826, + -0.026909899, + -0.0143238595, + -0.016088013, + 0.034782756, + 0.009360537, + -0.0057137455, + 0.01105228, + 0.0040252944, + -0.0022446858, + -0.02292081, + 0.0073659923, + -0.0129020065, + -0.028884696, + -0.033913843, + -0.0063983416, + -0.019708473, + -0.026778245, + 0.000012953176, + 0.0053615733, + -0.017615188, + -0.02215722, + 0.009933229, + 0.022473188, + -0.0034558945, + 0.020287747, + -0.032807957, + -0.0036731223, + 0.021893915, + 0.009426364, + -0.03117546, + -0.011894859, + -0.0052233376, + -0.0068525453, + 0.018918553, + 0.025409052, + -0.02091968, + -0.018497264, + -0.0029128254, + 0.0265676, + 0.0075766374, + 0.008169076, + -0.0016563609, + -0.023355264, + 0.0060428786, + 0.018273454, + 0.026449112, + -0.013422036, + -0.016733112, + 0.025330061, + 0.00009375143, + 0.007392323, + -0.0031168878, + 0.01682527, + -0.0012646929, + 0.015614061, + 0.0040779556, + -0.008307312, + 0.00032584148, + 0.04834303, + -0.021670105, + 0.010920627, + -0.00078292465, + -0.022565346, + 0.020748531, + 0.016193334, + 0.03375586, + -0.0074384017, + -0.010473006, + 0.003551343, + -0.022710163, + 0.025119416, + 0.023210445, + 0.006971033, + -0.03154409, + 0.008195407, + -0.009827905, + -0.007155347, + -0.016640956, + -0.019524159, + 0.015311258, + -0.00916964, + -0.020458896, + -0.046947505, + -0.0056117144, + -0.02342109, + 0.0168516, + -0.01273744, + -0.02064321, + -0.0018579547, + -0.00014049857, + 0.004779008, + 0.006088957, + -0.010301857, + -0.016719947, + 0.0117500415, + 0.0037586966, + -0.00025919208, + 0.0028058572, + 0.014639827, + 0.020063937, + -0.0021130326, + 0.008906334, + -0.0034756425, + -0.035388358, + -0.020880185, + -0.011256342, + 0.009577765, + 0.00864961, + 0.020735366, + 0.02544855, + 0.018049642, + -0.010986453, + -0.01244122, + 0.0024635592, + -0.021235649, + -0.00031411613, + -0.016311822, + 0.00914331, + 0.01625916, + 0.027857801, + -0.022762826, + -0.007997927, + -0.008366556, + 0.024987763, + -0.011190516, + -0.014481843, + -0.011651302, + -0.03907465, + -0.0026248342, + -0.0064049247, + 0.0016004083, + -0.0037652794, + 0.006289728, + -0.002081765, + 0.022091394, + -0.014402851, + -0.009742331, + -0.013448367, + 0.019142365, + 0.003380194, + 0.019484662, + 0.008491627, + -0.0032633517, + -0.010038551, + -0.023763388, + 0.004351136, + -0.0047987564, + 0.0002133192, + 0.008109832, + -0.021051334, + 0.00520359, + -0.0019484663, + 0.0052990383, + 0.03446679, + 0.008188824, + -0.013797248, + 0.008873421, + -0.012566291, + -0.031149128, + -0.017088575, + -0.015324424, + -0.025659194, + 0.007813613, + 0.03117546, + -0.0018694743, + 0.040233195, + -0.023263106, + -0.016088013, + 0.014942629, + -0.008208572, + 0.022460023, + 0.006911789, + 0.04581529, + 0.010604659, + -0.0048876223, + -0.021340972, + -0.011987017, + -0.015442912, + -0.0077280384, + -0.006148201, + 0.0102097, + 0.0019369465, + -0.03615195, + 0.008465296, + 0.02485611, + -0.010288692, + -0.008807594, + 0.024553308, + 0.0030494155, + -0.0042820177, + -0.018707909, + -0.016561963, + -0.0036764136, + 0.022446858, + -0.02668609, + -0.01296125, + -0.0052002985, + -0.0128230145, + -0.008445548, + 0.010492754, + -0.025066756, + 0.0035645084, + 0.023236776, + -0.02698889, + 0.008866838, + -0.019142365, + -0.014192207, + 0.0008812531, + -0.001876057, + 0.029148001, + 0.0027729438, + 0.00617124, + -0.013428618, + 0.014810977, + -0.002777881, + 0.0064246724, + -0.020630045, + 0.025830343, + -0.012276654, + -0.020287747, + -0.006898624, + -0.008175659, + 0.009966142, + 0.0054043606, + -0.0045157024, + -0.006421381, + -0.021788592, + -0.0028700382, + 0.036915537, + 0.0102097, + -0.018220792, + -0.01679894, + -0.005325369, + -0.019366175, + -0.010946957, + -0.0041371994, + -0.019313512, + -0.023486918, + -0.018457768, + -0.010881131, + 0.00308562, + 0.014508175, + -0.0045025367, + -0.005980343, + 0.02109083, + 0.011493318, + -0.027568163, + 0.018879058, + 0.02059055, + 0.023881877, + -0.004897496, + 0.020261416, + -0.005851981, + -0.01477148, + 0.011605223, + 0.0025639446, + -0.00039681073, + -0.027647156, + 0.020090267, + 0.019247686, + 0.0168516, + 0.023355264, + 0.029305985, + -0.026370121, + 0.0015855973, + -0.031149128, + -0.02213089, + 0.00021599341, + 0.010525667, + 0.004867874, + 0.02448748, + -0.030569855, + 0.014824142, + 0.028331753, + -0.020340407, + 0.007675377, + -0.027594496, + -0.01283618, + 0.007102686, + -0.0035184298, + -0.007971597, + -0.023131454, + -0.016469806, + 0.005516266, + -0.0032057536, + 0.004963323, + 0.00080267264, + 0.0005689883, + 0.0024668504, + 0.03035921, + -0.0150479525, + 0.0008861901, + -0.010551997, + -0.019129198, + -0.01117735, + 0.0018612461, + -0.03199171, + -0.023802884, + -0.01169738, + 0.01679894, + 0.008544288, + -0.028911026, + -0.04170771, + -0.00034332665, + -0.022249378, + -0.0010556935, + -0.021512121, + 0.0074054883, + 0.02213089, + -0.008735185, + 0.010940375, + 0.018576255, + 0.006230484, + 0.0126189515, + -0.015350754, + -0.024303166, + 0.007971597, + -0.016575128, + 0.04299791, + 0.000023245004, + -0.022960305, + -0.022051899, + 0.030464534, + 0.013402288, + 0.0052792905, + 0.0038278145, + -0.03199171, + 0.006760388, + -0.010328188, + -0.0028338335, + -0.005578801, + 0.0009520167, + 0.006760388, + -0.038916662, + 0.008261234, + 0.0013222911, + -0.012803267, + -0.005697289, + 0.009873984, + 0.0014193852, + 0.012079174, + 0.025790848, + -0.016548797, + -0.026383286, + 0.0045157024, + -0.019221356, + 0.005489935, + 0.0000777062, + -0.0070961034, + 0.009617261, + -0.01276377, + -0.018036477, + -0.023078792, + 0.014731985, + -0.025685525, + -0.013797248, + 0.011302421, + 0.0033571546, + -0.014258034, + -0.01918186, + 0.003913389, + -0.022723328, + 0.008307312, + 0.0013247596, + -0.03401917, + -0.0030905572, + 0.017417708, + 0.010802139, + -0.013520776, + -0.02342109, + 0.004973197, + 0.0084521305, + 0.011565727, + -0.007168513, + 0.019919118, + -0.024842944, + 0.0022578512, + -0.008656193, + -0.017773172, + -0.046921175, + -0.016351318, + 0.0039561763, + 0.00021002788, + 0.0056413366, + 0.23507982, + 0.0023549453, + -0.0056512104, + 0.03420348, + 0.009439529, + 0.035309367, + 0.012507047, + -0.006059335, + -0.011256342, + 0.01982696, + -0.0229998, + -0.0013823578, + -0.003281454, + -0.0046572294, + 0.012467551, + -0.024948267, + -0.023039296, + -0.022644337, + -0.03243933, + -0.013560272, + 0.017338717, + -0.005226629, + 0.001489326, + -0.010604659, + -0.003130053, + 0.020801194, + -0.026054153, + -0.0023944413, + 0.023328934, + 0.028805703, + 0.0076687946, + 0.011940938, + -0.0018447894, + 0.0073462445, + 0.009854237, + -0.002988526, + 0.02361857, + -0.0013510901, + 0.00052249833, + 0.005358282, + -0.023763388, + -0.0008664421, + 0.011835616, + -0.006352263, + 0.0051838416, + 0.0012745669, + 0.008801011, + 0.0067373486, + -0.0062864367, + 0.024290001, + -0.017365048, + 0.005888186, + 0.03249199, + 0.027752478, + 0.00022319319, + -0.00453545, + 0.029648283, + -0.019432, + -0.0073594097, + 0.00091334357, + -0.014705654, + 0.030885823, + -0.021841254, + 0.017259724, + -0.021393633, + -0.0061284527, + -0.030069573, + -0.000862328, + -0.0015066054, + -0.025935665, + 0.007997927, + -0.030517194, + -0.02109083, + -0.005907934, + -0.032281347, + -0.023434255, + 0.017509865, + 0.010802139, + 0.012842762, + 0.02909534, + -0.015074283, + 0.006421381, + -0.00007791191, + 0.009709418, + -0.00083147176, + -0.019537324, + 0.007675377, + 0.0021821505, + 0.0040680817, + -0.0112760905, + 0.0030773918, + -0.02059055, + -0.0009799929, + -0.030464534, + -0.0019846708, + -0.0014531213, + -0.011190516, + 0.014705654, + 0.0034756425, + 0.0046901423, + -0.010380849, + -0.001915553, + 0.020735366, + 0.010894296, + -0.0070171114, + -0.0100451335, + 0.026580766, + -0.00047971107, + -0.0022216465, + -0.022288874, + -0.009505356, + -0.031860057, + 0.007622716, + -0.010644155, + -0.0027416763, + 0.0155219035, + -0.010881131, + -0.014982126, + 0.009702835, + -0.01053225, + 0.030464534, + -0.02693623, + -0.015693052, + -0.00041018176, + -0.017549362, + -0.013250887, + 0.017259724, + -0.019695308, + -0.0037652794, + -0.042050008, + 0.017391378, + 0.010466424, + 0.022499518, + -0.009340789, + 0.013244304, + 0.016509302, + 0.000004605931, + -0.011842199, + -0.0069183717, + 0.00055623444, + 0.009149892, + -0.00929471, + 0.01937934, + 0.016298657, + -0.011769789, + -0.013211391, + 0.01603535, + 0.0007997927, + -0.013171895, + 0.020998674, + -0.0025392596, + -0.035520013, + -0.015943194, + -0.009538269, + 0.039522268, + -0.0030823287, + -0.023328934, + 0.00369287, + 0.014810977, + 0.013626099, + -0.03209703, + -0.0029967541, + 0.016601458, + -0.032176025, + -0.03828473, + -0.008583784, + -0.17030647, + -0.007965014, + 0.009380285, + -0.031149128, + 0.013955231, + 0.0028042116, + 0.005878312, + 0.0029556127, + -0.010380849, + -0.0013659012, + 0.032413, + 0.017207064, + -0.010973288, + -0.035441022, + 0.0050719366, + -0.020169258, + -0.019432, + 0.006599113, + 0.024803448, + 0.0019747969, + 0.021577947, + -0.011124689, + 0.0027153457, + -0.0005368979, + -0.0026561017, + 0.03157042, + -0.009755497, + -0.008017675, + -0.0067735533, + -0.015666721, + -0.017259724, + 0.0035381778, + 0.015153275, + 0.024092522, + -0.004301766, + -0.0013823578, + -0.024579639, + -0.00919597, + -0.004522285, + 0.013560272, + -0.010848218, + 0.00803084, + 0.0009824614, + -0.01157231, + -0.0059869257, + 0.010802139, + 0.011282673, + -0.008866838, + -0.006056044, + -0.006572782, + 0.017970651, + -0.011842199, + 0.0012564645, + 0.019010711, + 0.022446858, + 0.00192049, + 0.0036237522, + 0.018102305, + 0.0132969655, + 0.0091301445, + -0.01876057, + -0.009505356, + 0.013981562, + -0.0026890151, + -0.020182423, + -0.011756624, + 0.008366556, + 0.022315204, + -0.02317095, + 0.01980063, + 0.0051476373, + 0.003712618, + -0.01747037, + -0.009452694, + 0.01960315, + -0.00079362147, + -0.009176223, + 0.03580965, + 0.0105980765, + -0.013211391, + -0.020774864, + 0.044525087, + -0.021275144, + 0.005977052, + 0.0022051898, + 0.026093649, + 0.0030066282, + -0.0076095504, + -0.01606168, + -0.021591112, + 0.01231615, + -0.008419218, + -0.0066089868, + -0.006984198, + 0.0009939811, + 0.0013988145, + -0.021670105, + 0.03831106, + -0.0012054489, + -0.000015813803, + -0.00014574412, + -0.014429183, + -0.007221174, + 0.022065064, + 0.01253996, + 0.018800067, + 0.016772607, + 0.016970087, + 0.0046802685, + 0.00016559495, + -0.027410181, + -0.009643591, + 0.011223429, + 0.006500373, + -0.012230575, + 0.0136919245, + 0.019037042, + -0.015298093, + 0.021591112, + 0.006483916, + 0.02128831, + -0.0132969655, + 0.013125816, + -0.0001234248, + -0.014363356, + -0.013448367, + -0.058822617, + -0.009472442, + 0.009419781, + 0.01727289, + -0.010782391, + 0.04839569, + 0.02091968, + 0.028358083, + -0.0082151545, + -0.003041187, + 0.0043708836, + -0.029990582, + 0.0022627881, + -0.00020848507, + 0.045393996, + 0.0010836698, + 0.011710545, + -0.00028531702, + 0.004094412, + 0.01957682, + -0.009841071, + -0.0037455314, + -0.014350191, + -0.013705091, + -0.0076292986, + 0.0022315204, + -0.0174967, + 0.008564035, + 0.015772045, + 0.01851043, + 0.02698889, + -0.0068130493, + 0.0005599372, + -0.013033659, + -0.004252396, + 0.005878312, + -0.022367865, + 0.005684124, + 0.0379161, + -0.029964251, + -0.0014539441, + 0.0057664067, + 0.0010647447, + -0.013705091, + -0.016601458, + -0.0008664421, + -0.021472625, + 0.019010711, + 0.03754747, + -0.020656375, + -0.019682143, + -0.003771862, + 0.00010809956, + -0.0084258, + 0.028647719, + -0.0015600895, + 0.020208754, + 0.00874835, + -0.025040423, + 0.007602968, + 0.01918186, + 0.006780136, + -0.0116710495, + 0.003972633, + 0.021419963, + 0.0015806603, + -0.015930029, + -0.026383286, + 0.020300912, + -0.0024997636, + -0.01305999, + -0.00023512426, + -0.010492754, + 0.0063983416, + -0.0106770685, + -0.034756426, + -0.020774864, + -0.006158075, + -0.0008236549, + -0.021999236, + 0.010670486, + -0.041102104, + -0.004637481, + 0.0011009492, + 0.0013025431, + 0.020551052, + 0.012263489, + -0.013277218, + 0.016088013, + -0.01288884, + 0.020169258, + 0.0053944867, + 0.03425614, + -0.03167574, + -0.009222302, + 0.029305985, + 0.005486644, + 0.02213089, + 0.0052134637, + 0.02086702, + -0.01519277, + -0.031781062, + -0.09600146, + 0.007221174, + 0.016522467, + -0.0017065536, + 0.007129017, + -0.017378213, + 0.020959178, + -0.0049995272, + 0.010512502, + -0.02059055, + -0.037758116, + 0.009261797, + -0.004005546, + -0.01980063, + -0.03151776, + -0.0017888368, + 0.028121108, + 0.01600902, + 0.017773172, + 0.02294714, + 0.015574564, + 0.0032732259, + 0.008392886, + -0.00049411063, + -0.03633626, + 0.011565727, + 0.0028535814, + 0.03170207, + -0.01224374, + 0.013053407, + 0.0015288219, + -0.026778245, + 0.015877366, + 0.03154409, + -0.014982126, + -0.010196535, + 0.004933701, + 0.014587166, + 0.018721074, + 0.03580965, + -0.034861747, + 0.0108350525, + 0.02002444, + -0.0059968, + -0.015679887, + 0.005233212, + 0.015574564, + 0.018233957, + 0.035362028, + -0.007793865, + 0.013402288, + 0.030622516, + -0.004170113, + -0.006559617, + -0.0077280384, + -0.03654691, + 0.010762643, + -0.0021969615, + -0.0050686453, + -0.010453258, + 0.02361857, + 0.01045984, + 0.01732555, + 0.007352827, + 0.014982126, + -0.007352827, + -0.017694179, + 0.007155347, + 0.01876057, + -0.0053418255, + -0.03459844, + 0.006161366, + 0.014337026, + 0.02901635, + 0.019853292, + -0.013448367, + -0.01598269, + -0.0099200625, + -0.019432, + 0.019339845, + 0.0040483335, + -0.019168695, + -0.0340455, + 0.021314641, + 0.028963687, + -0.010315022, + -0.012553126, + -0.015205936, + -0.009235467, + 0.034756426, + -0.005726911, + -0.009933229, + 0.012164748, + -0.00612187, + 0.019932283, + 0.03246566, + 0.006589239, + -0.01789166, + 0.035888642, + -0.0072870003, + 0.0023138036, + 0.016167004, + 0.013112651, + -0.0021574656, + -0.02339476, + 0.013560272, + -0.014113215, + -0.0217096, + 0.00916964, + 0.0014917945, + 0.006602404, + 0.008346808, + 0.009064318, + 0.028121108, + 0.0064345463, + 0.0040252944, + -0.016127508, + -0.02954296, + -0.01603535, + -0.0060922485, + 0.013836743, + 0.013586602, + 0.013652429, + -0.005506392, + 0.014995291, + -0.00966334, + 0.008208572, + -0.030648848, + 0.007826778, + 0.001890868, + 0.0050324406, + 0.0070566074, + -0.000534018, + -0.007115851, + -0.019129198, + 0.0075108106, + 0.012052843, + 0.011677632, + -0.0062568146, + 0.03617828, + 0.018194461, + -0.00322221, + 0.0031168878, + -0.0024717874, + 0.019260852, + 0.0057400763, + 0.012204245, + -0.0030839744, + -0.032202356, + 0.027410181, + -0.0021969615, + 0.013270635, + -0.014402851, + -0.01224374, + -0.026409617, + -0.0015329361, + 0.016693616, + -0.0034163985, + 0.0076095504, + 0.025514375, + -0.006266689, + 0.02002444, + 0.0073594097, + -0.011164185, + -0.009926646, + 0.026554435, + 0.0021327806, + 0.009518521, + -0.0156008955, + 0.013547107, + 0.0011050634, + -0.0252774, + -0.024763953, + 0.009623843, + 0.00852454, + -0.0008680878, + 0.006342389, + 0.007945266, + 0.008616697, + -0.0037586966, + 0.020801194, + -0.016601458, + -0.014271199, + 0.019168695, + -0.01851043, + 0.004301766, + 0.0047822995, + -0.003248541 + ] + }, + { + "object": "embedding", + "index": 5, + "embedding": [ + 0.0021845475, + 0.008128393, + 0.0016116065, + -0.0032902234, + -0.03658782, + 0.004707499, + -0.017878445, + -0.0045868796, + 0.010058301, + -0.03318368, + -0.004885077, + 0.0063559613, + 0.019768145, + -0.014166054, + -0.02752798, + -0.01904443, + 0.02173826, + -0.025544465, + -0.0021460163, + -0.026670244, + -0.00603431, + 0.033022854, + -0.012115528, + -0.020331034, + 0.0038229583, + 0.005575287, + -0.002809422, + -0.015680496, + -0.0014516185, + -0.011733566, + 0.01049387, + 0.0016526504, + 0.009689742, + -0.021537228, + 0.0055250293, + -0.02439188, + -0.014233065, + -0.009863969, + -0.016993904, + -0.020331034, + 0.019392885, + -0.018722778, + -0.008249013, + -0.00634926, + -0.007458287, + 0.01150573, + 0.0060008047, + 0.005149769, + -0.011840784, + 0.013227904, + 0.023560949, + 0.014005228, + -0.017865043, + -0.0012363467, + -0.000084129795, + -0.009046439, + -0.023467133, + -0.013817598, + -0.01125109, + -0.0092072645, + 0.0038665151, + 0.005173223, + -0.018092878, + -0.0010579309, + -0.0025363537, + -0.009488709, + -0.006342559, + 0.008007774, + -0.03224553, + -0.011780474, + 0.010949542, + 0.021698052, + -0.008604169, + -0.0045734774, + 0.038732164, + 0.003682236, + -0.031655837, + -0.00010491357, + 0.011793876, + -0.00007125118, + 0.021255782, + -0.018856801, + 0.0066709113, + 0.015613484, + 0.0046203854, + 0.015626887, + -0.016136168, + 0.025785703, + -0.008222208, + -0.00311097, + 0.010916037, + 0.008966027, + -0.00591034, + 0.004627086, + -0.030127993, + -0.025343433, + 0.0064765806, + 0.018883605, + -0.0061549293, + -0.043128062, + -0.0096562365, + 0.02161764, + -0.011874289, + -0.018012466, + -0.030020777, + 0.014045435, + 0.010835624, + -0.01521142, + 0.0017339009, + 0.011137172, + 0.0020287477, + 0.03181666, + -0.006838438, + -0.039080616, + -0.032272335, + -0.018374324, + 0.014460901, + -0.011512431, + -0.019567113, + -0.026817666, + 0.017784629, + 0.017302154, + -0.00015025047, + 0.001991892, + 0.018709376, + -0.003588421, + -0.017597, + -0.0056523494, + 0.0057461644, + 0.002444214, + 0.020974336, + 0.02299806, + 0.017865043, + 0.0012505865, + -0.014809356, + 0.015546474, + -0.021322792, + 0.010574282, + -0.0115928445, + -0.012209343, + 0.021135163, + 0.017985662, + -0.013790794, + 0.0056422977, + 0.0020320984, + 0.017717618, + 0.027259937, + 0.02180527, + 0.018803192, + -0.0025631578, + 0.008456745, + -0.005022449, + 0.006278899, + 0.008470148, + 0.016417611, + 0.0046203854, + 0.0141124455, + 0.01740937, + 0.0044160024, + 0.0034778533, + 0.009783557, + -0.003551565, + 0.009763453, + 0.008510354, + 0.0048281183, + 0.013650072, + 0.022555789, + 0.018937213, + 0.017114524, + 0.00068392756, + -0.014702139, + 0.03004758, + -0.0020220468, + 0.02445889, + 0.017422773, + 0.010373251, + 0.013710381, + 0.00414796, + -0.023668166, + -0.0054144613, + -0.033290897, + -0.0002041731, + 0.007310863, + 0.007994372, + 0.0028931852, + -0.007310863, + 0.0182269, + 0.00855056, + 0.006406219, + -0.013026873, + 0.0058734845, + 0.038303293, + 0.03229914, + 0.025115596, + -0.6776118, + -0.042752802, + -0.007404678, + -0.0079005575, + 0.019218657, + 0.028224891, + 0.010225827, + 0.012276353, + 0.004741004, + -0.005776319, + -0.018977419, + 0.032593984, + 0.0061448775, + 0.0013418884, + 0.008872212, + -0.015801115, + -0.013274812, + -0.015787711, + 0.006881995, + 0.006272198, + -0.0101990225, + 0.024445489, + -0.0063593118, + 0.0055149775, + 0.02238156, + -0.030127993, + 0.013650072, + -0.013965022, + -0.013375328, + 0.016055755, + -0.030181602, + 0.036346585, + 0.0028747574, + -0.016953697, + 0.051705427, + -0.008148496, + -0.010708304, + 0.024043426, + 0.008899016, + 0.045808487, + 0.00094987615, + -0.028064065, + 0.023614557, + -0.018561954, + -0.024525901, + 0.007518596, + 0.020156806, + -0.01941969, + 0.010400055, + -0.013670175, + -0.0028077466, + -0.029216649, + -0.02708571, + -0.011425318, + 0.010507272, + -0.0069356035, + 0.0069356035, + -0.007257255, + -0.0017523288, + 0.003129398, + -0.005990753, + 0.020625882, + -0.039482683, + -0.012678417, + -0.0042216717, + -0.0014733969, + -0.04393219, + 0.0018210147, + 0.018025868, + 0.008188703, + -0.0077062263, + 0.007679422, + -0.009642834, + 0.008919119, + 0.038169272, + 0.022220735, + 0.01754339, + -0.026201168, + -0.016833078, + -0.011948001, + 0.010916037, + -0.003608524, + -0.013180997, + -0.0049755415, + 0.005129666, + -0.015305235, + -0.023172287, + 0.0044294046, + 0.009750051, + -0.022033105, + 0.017717618, + 0.009863969, + 0.012953161, + 0.018066075, + -0.016296992, + 0.01584132, + -0.019727938, + 0.0044160024, + 0.02218053, + -0.027032102, + -0.00004824244, + -0.013100584, + -0.0007304162, + -0.0108289225, + -0.012805738, + -0.0069222013, + -0.024793945, + 0.00204215, + 0.0119413, + -0.02439188, + 0.0043020844, + -0.012336663, + -0.02376198, + -0.0043858476, + 0.019821754, + -0.03211151, + 0.0099711865, + -0.0062185894, + 0.00798097, + -0.00011171934, + 0.0141124455, + -0.01011861, + 0.038624946, + -0.008537158, + -0.00072622806, + 0.030690882, + 0.01062119, + -0.003323729, + -0.009629432, + 0.0056221946, + -0.007217048, + 0.018883605, + 0.012497488, + -0.0067144684, + 0.0038162572, + -0.0101521155, + 0.0037123905, + -0.00008203571, + 0.01539905, + -0.041519806, + -0.0439858, + -0.0067647262, + 0.019513505, + -0.000016072088, + -0.0036286274, + -0.023426928, + -0.017020708, + 0.0007655968, + -0.011432019, + 0.037499167, + -0.0029266907, + -0.011170677, + -0.03280842, + 0.01998258, + 0.0015110904, + -0.013469143, + 0.0014717217, + -0.012939759, + -0.0008837031, + -0.012329962, + 0.0088923145, + 0.0014859614, + -0.029136235, + 0.019768145, + 0.00710313, + -0.00066549965, + 0.013643371, + 0.0067044166, + 0.010440261, + -0.026335191, + -0.018709376, + -0.011988208, + 0.004657241, + 0.01766401, + 0.013221203, + 0.004784561, + 0.0005616331, + -0.0073510697, + -0.0053206463, + -0.025450649, + 0.010567581, + -0.03776721, + -0.02502178, + 0.0024676677, + 0.014621726, + -0.008852108, + 0.004013939, + 0.017141327, + -0.016859882, + 0.0012489113, + -0.017422773, + 0.012236147, + 0.01326141, + 0.005866783, + 0.021644443, + -0.008429941, + 0.00035390005, + 0.010279436, + 0.006895397, + 0.019245462, + 0.014715541, + -0.010373251, + 0.014099043, + -0.018334117, + 0.029297061, + -0.04141259, + -0.006868593, + -0.0132145025, + 0.02520941, + 0.019299071, + 0.0025028482, + -0.010949542, + -0.013938217, + -0.0076191123, + 0.01609596, + 0.015787711, + 0.01614957, + 0.010822222, + -0.004486364, + -0.0038899689, + 0.019634124, + -0.020880522, + 0.013382029, + 0.003796154, + -0.0065469416, + 0.004117805, + 0.0009054816, + 0.023239298, + 0.02224754, + 0.0017925352, + -0.005776319, + -0.010259332, + -0.01017892, + 0.017865043, + 0.005769618, + -0.014594922, + 0.012651613, + -0.010574282, + 0.038356904, + 0.0021644444, + 0.019701134, + 0.0047477055, + 0.027849631, + -0.010534076, + -0.011083564, + -0.0082155075, + 0.033961, + -0.008376333, + 0.0031578774, + 0.0065770964, + -0.018159889, + -0.0060376604, + -0.008751593, + 0.0012732026, + 0.009756752, + -0.017516587, + -0.0041446094, + 0.007585607, + 0.004298734, + 0.045594055, + 0.0017439525, + -0.00090799446, + 0.0010947867, + -0.011867588, + 0.005990753, + 0.008832005, + 0.011318101, + 0.0036889368, + -0.013790794, + -0.0055551836, + -0.026817666, + -0.0124036735, + -0.007404678, + -0.0033170278, + 0.014715541, + -0.018937213, + 0.0024592914, + -0.0026502716, + 0.02275682, + 0.01143872, + -0.014889769, + -0.03640019, + 0.01766401, + -0.005762917, + 0.0034678017, + -0.022783626, + -0.028439324, + 0.003665483, + -0.02841252, + 0.018468138, + 0.011204183, + 0.009482008, + 0.002784293, + -0.010922737, + -0.016176375, + 0.0056925556, + 0.018829996, + -0.03607854, + -0.019513505, + -0.0049688406, + -0.008074785, + -0.006248744, + -0.002023722, + 0.0007999398, + 0.019660927, + 0.003601823, + -0.006587148, + -0.0037291434, + 0.013040274, + -0.00077941775, + 0.019526906, + -0.020786706, + -0.0026201168, + 0.02067949, + 0.003953629, + 0.007954165, + -0.02110836, + -0.0017690815, + 0.031629033, + -0.00032311704, + -0.010815521, + 0.005096161, + -0.024365077, + -0.005119615, + 0.087596335, + 0.0031059443, + 0.013368627, + -0.0042317235, + 0.02570529, + 0.016873285, + -0.006077867, + -0.0048917783, + -0.0030054282, + -0.009287678, + -0.0118608875, + -0.010788716, + 0.009173759, + 0.00867788, + 0.00052980304, + -0.005166522, + -0.008302621, + -0.039080616, + 0.009167058, + -0.0068618916, + -0.003400791, + 0.011659855, + -0.00041232497, + 0.01288615, + -0.013053677, + 0.0100516, + 0.011840784, + 0.033961, + 0.017315555, + -0.011740268, + 0.014876367, + 0.018092878, + 0.0031059443, + -0.0031662537, + -0.006523488, + -0.0013779068, + 0.014795954, + 0.014246467, + -0.0049688406, + -0.0072639557, + 0.013616567, + -0.0015680495, + 0.01137841, + 0.008731489, + 0.021443412, + 0.00008318746, + -0.0087113865, + 0.019969177, + -0.012015012, + 0.0125712, + 0.029243452, + 0.009274276, + -0.026214572, + -0.01665885, + -0.01206862, + 0.020398045, + 0.005618844, + -0.0099711865, + 0.022019703, + 0.026201168, + -0.00515312, + -0.02357435, + -0.004342291, + -0.020639284, + -0.0070294184, + -0.041787848, + 0.0106815, + -0.032888833, + -0.011914495, + -0.019808352, + 0.00760571, + -0.022904243, + -0.0061113723, + 0.02067949, + 0.016511427, + 0.00597065, + 0.02350734, + -0.021765063, + -0.0059572477, + 0.012041816, + 0.009602628, + -0.024485696, + -0.027447566, + -0.01716813, + -0.006406219, + 0.014635129, + 0.017650608, + -0.016484622, + 0.007954165, + 0.009696443, + 0.027688805, + -0.00591034, + 0.015452659, + 0.0073510697, + -0.016189776, + -0.017489783, + 0.010078403, + 0.002017021, + -0.016645448, + -0.014018631, + 0.025249617, + -0.01986196, + -0.008751593, + 0.005317296, + 0.004915232, + -0.016390808, + 0.01728875, + -0.0008204618, + -0.0126717165, + 0.006309054, + 0.021885682, + -0.025812507, + 0.006881995, + 0.019098038, + -0.019151647, + 0.046424985, + -0.00057335995, + 0.022716613, + -0.006121424, + -0.001206192, + 0.01087583, + 0.0007924011, + 0.016109362, + 0.0066508083, + -0.011961403, + -0.008704685, + 0.0055015753, + -0.017462978, + 0.003268445, + -0.0023805539, + -0.00848355, + 0.026321787, + -0.012242848, + -0.03425585, + -0.027608393, + 0.00521678, + -0.017771227, + 0.019071234, + -0.011043357, + -0.02771561, + -0.035220806, + -0.009039738, + 0.012001609, + -0.009220667, + -0.018762985, + -0.021349598, + 0.007833546, + 0.0063392087, + 0.014313477, + 0.011974805, + 0.008161899, + 0.01628359, + -0.02776922, + -0.0029618712, + -0.03294244, + -0.035864107, + -0.022515582, + -0.014795954, + 0.01614957, + 0.009575823, + 0.026268179, + 0.029752733, + 0.007880454, + -0.012946459, + -0.007310863, + 0.0058835363, + -0.0008506166, + 0.009401596, + -0.015760908, + 0.0108289225, + 0.026831068, + 0.029377474, + -0.0030071035, + -0.026335191, + -0.017556794, + 0.020719696, + -0.016940296, + -0.00037693497, + -0.00993098, + -0.019272266, + 0.0018109631, + -0.0045801788, + -0.005297193, + -0.017114524, + 0.0058801854, + 0.008885614, + 0.00006428835, + -0.005045903, + 0.010641293, + -0.010406756, + 0.020974336, + -0.010601087, + -0.015693897, + -0.023172287, + -0.012162435, + 0.011686659, + -0.017449576, + 0.01182068, + 0.0118608875, + 0.010728407, + 0.023091873, + -0.012048517, + -0.01275883, + 0.0040809494, + 0.011043357, + 0.018950615, + 0.0060008047, + -0.017838238, + 0.005002346, + -0.037070297, + -0.023614557, + -0.015613484, + -0.009240771, + -0.026254777, + -0.011076862, + 0.021014543, + 0.0022565841, + 0.02105475, + -0.0073443684, + -0.008664479, + 0.018628964, + 0.008510354, + 0.012979965, + -0.020625882, + 0.02790324, + 0.018267106, + 0.0036889368, + -0.01413925, + -0.01991557, + -0.011887691, + -0.017985662, + 0.02275682, + 0.027876435, + -0.006875294, + -0.023520742, + 0.013871207, + 0.024097035, + -0.02570529, + -0.008249013, + 0.019768145, + 0.027822826, + 0.0019416339, + -0.01991557, + 0.0091603575, + -0.017516587, + 0.021952692, + -0.017503185, + -0.0017154729, + -0.015881527, + -0.010172218, + -0.018508345, + 0.015667092, + -0.023735177, + 0.0015018765, + 0.02652282, + -0.020960934, + 0.011545937, + -0.0008259064, + 0.004623736, + 0.0044093016, + -0.0105139725, + 0.02432487, + 0.01691349, + 0.0034644513, + -0.0037928035, + 0.013341823, + -0.0003802855, + 0.0005612143, + -0.0040273406, + 0.026227973, + -0.006228641, + -0.015988745, + -0.0039502787, + -0.00892582, + -0.0016291967, + -0.0063325074, + 0.0035616166, + 0.0010470416, + -0.016457818, + -0.007330966, + 0.02790324, + -0.0056791534, + -0.0029434434, + -0.017597, + -0.0056925556, + -0.019111441, + -0.004657241, + -0.0054613687, + 0.007592308, + -0.013274812, + -0.020880522, + -0.01923206, + 0.0074515855, + 0.027018698, + -0.008496952, + -0.018937213, + 0.013321719, + 0.011827381, + -0.02790324, + 0.007424781, + 0.010272735, + 0.0055015753, + -0.03256718, + 0.00086527516, + -0.01388461, + -0.010266033, + 0.0063559613, + -0.025504258, + -0.00911345, + -0.02972593, + -0.022676408, + 0.03739195, + 0.008952624, + 0.022207333, + 0.0257723, + -0.022864038, + -0.00070947537, + -0.01558668, + -0.010004692, + 0.008336126, + 0.007987671, + 0.011365009, + 0.024445489, + -0.016833078, + 0.01647122, + 0.0067345714, + 0.00049755414, + -0.0037123905, + -0.024539305, + -0.0327012, + 0.0025179256, + 0.0063593118, + -0.027930044, + -0.01206862, + -0.02047846, + -0.02117537, + -0.0027641898, + -0.0024224354, + 0.008838707, + -0.0005004859, + 0.0133485235, + 0.035408434, + 0.0018746232, + 0.016806275, + -0.01640421, + -0.015975341, + 0.0025815857, + -0.013804196, + -0.01628359, + -0.01125109, + -0.0025514308, + 0.02067949, + 0.009917578, + -0.017275348, + -0.019808352, + 0.019473298, + -0.037847623, + 0.0066005504, + -0.02180527, + 0.021094956, + 0.011948001, + -0.0072438526, + 0.004720901, + 0.027983652, + -0.0069557065, + 0.030556861, + -0.015077399, + -0.009723247, + 0.013026873, + -0.026281582, + 0.04846211, + 0.00021862228, + -0.01175367, + -0.0022214034, + 0.008282518, + 0.020371241, + 0.004312136, + 0.0030188302, + -0.021832073, + -0.0019466598, + -0.0020723047, + -0.0124505805, + -0.018990822, + 0.019580515, + 0.012350065, + -0.04631777, + 0.01439389, + -0.0005499062, + -0.007699525, + -0.0063023525, + -0.0008162736, + -0.0059036394, + -0.00081376074, + 0.022971256, + -0.013341823, + -0.012638211, + 0.0069289026, + -0.027259937, + 0.008604169, + 0.0017112847, + 0.0043255384, + 0.0028730822, + 0.0019081286, + -0.013703681, + -0.027930044, + 0.0004301247, + -0.029699124, + -0.0032918989, + 0.011539236, + -0.0010261007, + -0.009488709, + -0.0106479945, + 0.011217585, + -0.037365146, + -0.018079476, + 0.0029501445, + -0.029645517, + -0.02570529, + 0.018789789, + 0.0027156072, + -0.021537228, + -0.011545937, + -0.0066742618, + 0.0038363603, + -0.012725324, + -0.017382566, + 0.011338204, + -0.027018698, + 0.0024040076, + -0.0073376675, + -0.017690815, + -0.0257723, + 0.005890237, + 0.005437915, + -0.004436106, + 0.0010269384, + 0.23652083, + -0.010527375, + -0.0022599346, + 0.01998258, + -0.0075521017, + 0.017529989, + 0.028358912, + -0.0007073813, + 0.0017389266, + 0.02256919, + -0.017811434, + -0.000539017, + 0.018722778, + -0.004543323, + -0.0062018367, + -0.021832073, + -0.032888833, + -0.02551766, + -0.031012535, + -0.0015412453, + 0.02483415, + -0.015546474, + 0.005632246, + -0.002117537, + 0.0099711865, + -0.011994909, + -0.0017623804, + 0.01162635, + 0.011043357, + 0.024793945, + 0.0027072306, + 0.009327884, + -0.007699525, + 0.0038732162, + -0.006362662, + 0.008999532, + 0.007987671, + -0.012041816, + 0.029886754, + -0.0038330099, + -0.0036889368, + -0.0151042035, + -0.018722778, + 0.0059170416, + -0.0044897143, + 0.0076526175, + 0.007934063, + 0.0074515855, + -0.009736649, + 0.021041349, + -0.040367223, + -0.0007986833, + 0.014045435, + 0.026080549, + 0.012209343, + -0.021523824, + 0.030771296, + 0.0031729548, + -0.015063996, + -0.006121424, + 0.004456209, + 0.030396037, + -0.010728407, + 0.036855865, + -0.02407023, + -0.0011333178, + -0.009917578, + 0.0038531132, + 0.029779539, + -0.012732026, + 0.022515582, + 0.0124036735, + 0.004342291, + -0.021188771, + -0.010741809, + -0.023453731, + 0.027501175, + 0.0157207, + 0.016940296, + 0.041707437, + -0.009012934, + -0.012819139, + 0.008992831, + 0.007585607, + 0.0005260337, + -0.034095023, + 0.012209343, + -0.000043975746, + 0.0129866665, + -0.031575423, + 0.0037425454, + -0.0032835223, + -0.011257791, + -0.020076394, + 0.0021711455, + 0.009951083, + 0.009602628, + 0.01590833, + -0.01118408, + 0.021041349, + -0.015827918, + 0.0021610938, + 0.004895129, + -0.005739463, + -0.017141327, + -0.005990753, + -0.006888696, + 0.011177379, + -0.009461906, + -0.013871207, + 0.0011500705, + -0.03602493, + -0.0048281183, + -0.017570196, + 0.0071366355, + 0.008041279, + -0.02047846, + -0.011793876, + 0.034523893, + -0.021979498, + 0.019848557, + -0.027608393, + -0.013650072, + -0.012524293, + -0.017462978, + -0.010312941, + 0.009977887, + -0.01640421, + 0.0032282386, + -0.048220873, + 0.028305303, + -0.0032667697, + 0.020652685, + -0.0063258065, + -0.0022766872, + 0.02110836, + 0.006543591, + -0.006881995, + 0.012356766, + -0.0020387995, + 0.008986129, + -0.018159889, + 0.035435237, + 0.03640019, + -0.021161968, + 0.0021577433, + 0.02413724, + -0.0026754006, + -0.018508345, + 0.008912418, + -0.0100516, + -0.02149702, + -0.013341823, + -0.02110836, + 0.011351606, + 0.0046203854, + 0.0015035517, + -0.003930175, + 0.003638679, + 0.0019014275, + -0.04135898, + 0.0067647262, + 0.026429005, + -0.0075655035, + -0.036158953, + -0.02752798, + -0.17454937, + 0.027045503, + -0.00021548115, + -0.014487705, + 0.011545937, + 0.034389872, + 0.0079474645, + -0.022287747, + -0.00810829, + 0.015506268, + 0.031253774, + 0.019526906, + -0.005488173, + -0.014889769, + -0.0019684383, + -0.026040344, + -0.028921802, + 0.017556794, + 0.026683645, + 0.013408833, + 0.03042284, + -0.022153724, + -0.0005792234, + -0.016390808, + -0.001614957, + 0.024619717, + -0.009997991, + 0.012892852, + 0.0012313209, + 0.0013779068, + -0.017395968, + -0.019553712, + 0.026965091, + 0.014702139, + -0.004184816, + 0.0040440937, + -0.0077464324, + -0.009951083, + -0.00018270875, + 0.014742346, + -0.012651613, + 0.018923812, + 0.012236147, + 0.0163506, + -0.0012857671, + 0.019098038, + 0.005297193, + -0.0065134363, + -0.010185621, + -0.005380956, + 0.02092073, + -0.00760571, + 0.009066543, + 0.020652685, + 0.020009384, + 0.00019412152, + 0.007813443, + 0.005166522, + 0.012745428, + -0.008369632, + -0.025263019, + -0.016015548, + -0.00033044632, + -0.010507272, + -0.0046940967, + -0.00396033, + -0.021912487, + 0.022033105, + -0.017395968, + 0.010594386, + 0.0061683315, + -0.009924279, + 0.01049387, + -0.016551634, + -0.0039234743, + 0.0008112478, + -0.011425318, + 0.020826913, + 0.0021711455, + -0.015814517, + -0.03310327, + 0.026348593, + -0.03626617, + -0.009187162, + 0.00358172, + 0.03130738, + 0.0019198555, + 0.0101990225, + -0.025624877, + -0.003638679, + 0.022528984, + -0.013375328, + 0.0037525971, + -0.0045600757, + 0.011036656, + 0.022528984, + -0.01363667, + 0.037123907, + -0.025785703, + 0.004858273, + -0.01017892, + -0.005538431, + -0.012021713, + -0.00083763327, + 0.029109431, + 0.0007630839, + 0.020384643, + 0.035810497, + 0.027983652, + -0.012289755, + -0.015131007, + 0.0031913829, + 0.00848355, + -0.0030623872, + -0.016498026, + 0.016256787, + 0.019928971, + -0.013596463, + 0.016632047, + -0.00798097, + 0.029431082, + -0.0092072645, + 0.010473766, + 0.010353147, + -0.02236816, + 0.0056791534, + -0.053930182, + 0.023292907, + 0.005193326, + 0.018977419, + -0.012685118, + 0.037123907, + 0.02112176, + 0.032325942, + -0.00810829, + 0.016136168, + -0.012953161, + -0.011807279, + -0.0028496285, + -0.0005783858, + 0.03444348, + -0.005166522, + 0.0056724525, + 0.004154661, + 0.0010076729, + 0.024432087, + -0.007753134, + -0.011572741, + 0.00078402477, + -0.004111104, + -0.024177447, + 0.019017626, + -0.021403205, + 0.027742414, + 0.0327012, + 0.02187228, + 0.021537228, + 0.0018025868, + 0.014045435, + -0.013562958, + -0.01495678, + 0.014501107, + -0.01017892, + -0.0038531132, + 0.023453731, + -0.033666156, + 0.003085841, + -0.016605241, + -0.019580515, + -0.020947533, + -0.008597468, + 0.016270189, + -0.034148633, + 0.011492329, + 0.014192858, + -0.0033790127, + -0.033773374, + -0.028948605, + -0.013308317, + -0.011425318, + 0.027849631, + -0.010500571, + 0.01074851, + 0.00010899703, + -0.035730086, + -0.0031511763, + -0.0070629236, + 0.0074180802, + -0.041895065, + 0.018535148, + 0.022917647, + 0.008443343, + -0.012557798, + -0.03575689, + 0.01665885, + -0.0011483952, + -0.013234606, + -0.0036621327, + -0.026750656, + -0.00055535085, + -0.019098038, + -0.031226968, + -0.038169272, + 0.003281847, + -0.0016962073, + -0.0050291503, + 0.011445421, + -0.035542455, + -0.020076394, + -0.010292837, + 0.001948335, + 0.042029087, + 0.011137172, + -0.014621726, + 0.008818603, + -0.011579443, + 0.006530189, + 0.008691283, + 0.029752733, + -0.01991557, + -0.016605241, + 0.029002214, + 0.01149903, + 0.023413526, + 0.0010034847, + 0.010279436, + -0.010266033, + -0.026388798, + -0.090973675, + 0.015988745, + 0.026804265, + 0.007585607, + 0.0006826711, + -0.0219929, + 0.009957785, + -0.009012934, + 0.008141795, + 0.00849025, + -0.025343433, + 0.014192858, + -0.0069356035, + -0.016551634, + -0.032272335, + -0.010835624, + 0.011545937, + 0.0033086515, + 0.0074113794, + 0.01747638, + 0.0026301686, + 0.025383638, + 0.028680563, + -0.0072304504, + -0.022354757, + 0.000009966527, + -0.021322792, + 0.036239367, + -0.014755747, + -0.0073376675, + -0.0059672995, + -0.033773374, + -0.01232326, + 0.01659184, + -0.012624809, + -0.014246467, + 0.0035917715, + 0.020759903, + 0.0031277225, + 0.032325942, + -0.01614957, + 0.008778397, + 0.016310396, + 0.0015378947, + -0.010225827, + 0.01439389, + -0.0000051010556, + 0.002992026, + 0.02533003, + 0.0033203783, + 0.0011911145, + 0.020143405, + 0.0033220535, + -0.0050258, + 0.0014566443, + -0.025892919, + 0.013831001, + -0.006637406, + -0.006215239, + 0.0076727206, + 0.009173759, + 0.0076124114, + 0.023601156, + 0.010849026, + 0.005618844, + -0.013911413, + -0.005833278, + 0.010929439, + 0.027849631, + -0.022354757, + -0.039884746, + 0.023976415, + 0.004034042, + 0.014916574, + 0.015063996, + -0.0003350533, + 0.000020050846, + 0.0048917783, + -0.015827918, + 0.035783693, + 0.0075789057, + -0.010567581, + -0.03235275, + 0.01703411, + 0.023896001, + -0.019768145, + 0.0000081931, + -0.0039871344, + -0.0046739937, + 0.04449508, + -0.018829996, + -0.0013829325, + 0.008195404, + -0.001062119, + -0.005096161, + 0.031387795, + -0.0018310663, + -0.028734172, + 0.043262083, + 0.023078471, + 0.014568117, + 0.004117805, + 0.003876567, + -0.017704217, + -0.027474372, + 0.012631509, + -0.014434096, + -0.0064497762, + -0.002224754, + 0.022609398, + 0.0141124455, + 0.016377406, + -0.0017204988, + 0.025115596, + 0.0129866665, + -0.0076526175, + -0.00091469556, + -0.020706294, + -0.010889232, + 0.016377406, + 0.008758293, + 0.00515312, + 0.012055218, + -0.016444417, + -0.005367554, + 0.0009951083, + 0.010225827, + -0.024298066, + -0.0003149501, + 0.011358307, + 0.018401127, + 0.016766068, + -0.023735177, + -0.008979429, + -0.009079944, + -0.0037324938, + 0.0028211488, + 0.0018293911, + -0.038383707, + 0.022354757, + 0.019004224, + 0.0039938353, + -0.004278631, + -0.002697179, + 0.0152382245, + -0.0045466735, + 0.002638545, + -0.012658314, + -0.02533003, + 0.010346446, + -0.025933126, + -0.0059538973, + -0.01791865, + -0.014246467, + -0.012618108, + 0.009106749, + 0.006701066, + 0.006255445, + -0.0057729683, + 0.024847554, + -0.0074850908, + 0.025745496, + 0.014782552, + -0.023453731, + -0.0073778736, + 0.00993098, + -0.0039569796, + 0.011874289, + -0.014554716, + 0.021416608, + 0.000161035, + -0.016243385, + -0.019392885, + 0.02520941, + -0.01143872, + -0.026991894, + 0.00013747656, + -0.003538163, + 0.014125847, + -0.015988745, + 0.011666556, + -0.016189776, + -0.00792066, + 0.027688805, + -0.003926825, + 0.007826845, + -0.0019064533, + -0.012839243 + ] + }, + { + "object": "embedding", + "index": 6, + "embedding": [ + -0.0131454775, + -0.007023479, + -0.007137846, + -0.028793573, + -0.03425628, + 0.0073396703, + -0.032803144, + 0.013912409, + -0.007124391, + -0.025228014, + 0.000104275794, + -0.007595314, + 0.018890737, + -0.0022755668, + -0.0018584637, + 0.0096404655, + 0.019994043, + -0.006337277, + 0.004726048, + -0.005577073, + -0.044078387, + 0.001702891, + 0.012815831, + -0.005116241, + 0.0020535602, + -0.00840261, + 0.011147418, + -0.0054458873, + -0.010407397, + -0.012217086, + -0.007992235, + -0.008557342, + -0.004463677, + -0.010817773, + -0.0130109275, + -0.0073733074, + -0.00095698267, + -0.006098452, + 0.027246255, + -0.01677831, + 0.015917195, + -0.011066689, + 0.0026657602, + -0.01789507, + 0.008294971, + 0.0343101, + 0.00424167, + 0.020895522, + -0.008624617, + 0.0009553008, + -0.00075095386, + 0.056295473, + -0.024420718, + -0.011618341, + -0.018688913, + -0.0019139653, + -0.011584704, + 0.004816869, + -0.009034993, + -0.023653787, + -0.013737494, + -0.020020952, + -0.026721513, + 0.003582378, + 0.0043156724, + 0.008079692, + 0.0014716341, + 0.008079692, + 0.002578303, + 0.0019072378, + 0.020693699, + 0.017706702, + 0.0112550575, + 0.005775533, + 0.013461668, + -0.01710123, + -0.0072051208, + -0.002921404, + 0.012129629, + 0.011678888, + 0.01691286, + -0.023842156, + -0.024286168, + 0.029520141, + 0.04106448, + 0.021245351, + -0.010003748, + 0.04701156, + -0.009526098, + -0.009230089, + 0.001309334, + 0.01614593, + 0.0010965776, + 0.032534048, + -0.009660647, + -0.006313731, + -0.0038682956, + 0.03880405, + -0.01683213, + -0.0013900636, + 0.004460313, + 0.01183362, + -0.008469885, + -0.020518785, + -0.004039846, + -0.004167668, + -0.0129369255, + 0.0053517027, + 0.010508309, + 0.0006235524, + 0.02938559, + 0.026748423, + 0.022429386, + -0.047872677, + -0.010071023, + -0.018096896, + -0.0019358296, + -0.01813726, + -0.009647192, + -0.0047327755, + 0.024689816, + -0.0039187516, + -0.006414643, + -0.027663358, + 0.021164622, + 0.015580822, + -0.00594372, + -0.004779868, + 0.0035790142, + 0.0028877666, + 0.010999414, + 0.0112550575, + -0.000038788072, + -0.0018315538, + -0.034229368, + 0.013239662, + -0.026398594, + 0.014975349, + -0.029681599, + -0.009620283, + -0.00480005, + 0.015190628, + -0.032238036, + -0.0005697326, + 0.019576939, + 0.014719705, + 0.014127688, + -0.0027111706, + 0.021339536, + -0.01305802, + 0.013502033, + -0.03207658, + 0.01119451, + -0.0048673246, + 0.010858137, + 0.0038279307, + 0.007292578, + 0.023411596, + -0.009479006, + 0.009115722, + -0.004359401, + -0.015123353, + 0.0048101414, + -0.013286754, + 0.022617755, + 0.008624617, + 0.00739349, + 0.013044565, + 0.0025127102, + -0.007783683, + 0.008557342, + 0.022402477, + -0.02401707, + 0.02018241, + 0.032964606, + 0.01364331, + 0.0067510167, + -0.01903874, + -0.030569626, + -0.031134732, + -0.014612066, + 0.005476161, + 0.016119018, + 0.018352538, + -0.0049110535, + 0.016374663, + -0.0024925277, + -0.011187783, + 0.011853803, + -0.012930198, + 0.014558246, + 0.004463677, + 0.004103757, + -0.0125870975, + -0.6824346, + -0.027770998, + -0.01186053, + -0.011450155, + -0.011820165, + 0.025241468, + 0.014100778, + 0.0026489415, + -0.011389608, + -0.0132194795, + -0.0073800352, + 0.018554363, + 0.007595314, + 0.0053113378, + -0.012963835, + -0.0022335202, + 0.0064684628, + 0.016859042, + -0.0034747384, + 0.024864731, + -0.014961895, + 0.020720609, + 0.0075751315, + -0.004742867, + 0.012714919, + 0.006656832, + 0.0018197808, + -0.011954715, + -0.010952322, + 0.004921145, + -0.030650355, + 0.0035151034, + 0.0072185756, + -0.018904192, + 0.043970745, + 0.0144775165, + -0.019711489, + 0.01462552, + 0.012573642, + 0.03657053, + 0.015917195, + 0.0054257046, + 0.024676362, + -0.0050893314, + -0.010938867, + 0.010501581, + 0.013858589, + 0.0002537518, + 0.017303053, + -0.01949621, + -0.0076020416, + -0.03172675, + -0.017854707, + -0.01079759, + 0.007050389, + -0.003632834, + 0.01792198, + 0.006290185, + 0.007736591, + 0.014517881, + 0.0085909795, + 0.0049245083, + -0.02973542, + -0.014033503, + 0.0170205, + -0.008765894, + -0.015378998, + -0.0075145843, + 0.009384821, + 0.01358949, + 0.00038619884, + 0.017477969, + 0.0042248513, + -0.009613555, + 0.031296194, + 0.012149812, + 0.010030658, + 0.002450481, + 0.0040196637, + -0.0056073465, + 0.011766345, + -0.008860079, + -0.025308743, + 0.0060513597, + 0.037458554, + -0.024985826, + 0.0025244833, + -0.005758715, + 0.009021537, + 0.002909631, + 0.01903874, + 0.037862204, + -0.0052642454, + -0.011954715, + -0.022954129, + 0.02508001, + -0.01680522, + 0.0006550874, + 0.0201555, + -0.021218441, + 0.010602494, + -0.003266187, + -0.00032207766, + -0.005829353, + 0.007178211, + 0.022456296, + -0.017558698, + 0.015190628, + 0.014100778, + -0.022563936, + -0.009660647, + -0.0058259894, + -0.028820483, + -0.010030658, + -0.013132022, + -0.026358228, + 0.011685616, + -0.011187783, + 0.01745106, + -0.011322333, + 0.009748105, + -0.0151098985, + 0.022375567, + -0.005122969, + -0.010804318, + -0.0015313404, + -0.011699071, + -0.014329512, + 0.0045410427, + 0.0022402476, + -0.008227697, + 0.02976233, + 0.026842607, + -0.005499707, + 0.035251945, + 0.009458823, + -0.01130215, + -0.011732709, + -0.0056342566, + -0.028793573, + -0.013690402, + -0.0047966866, + 0.006949477, + -0.01568846, + -0.0065996484, + -0.03910006, + -0.013286754, + -0.015217538, + -0.01130215, + 0.014571701, + -0.006132089, + -0.013676947, + -0.025564387, + -0.009135905, + -0.0075011295, + -0.010467944, + 0.009674102, + -0.017303053, + -0.014316057, + -0.012196904, + 0.027905548, + 0.007709681, + -0.021352991, + -0.011403062, + -0.011154146, + -0.014046958, + 0.018446723, + 0.0028120826, + -0.013481851, + -0.015621186, + -0.0059100827, + 0.00023293866, + 0.0025648482, + 0.0011251695, + 0.020411145, + -0.010420851, + 0.013461668, + -0.0031097732, + -0.0031013638, + -0.0023478873, + -0.009956656, + -0.010817773, + -0.026923336, + -0.020855159, + 0.018783098, + -0.0074203997, + 0.015163718, + 0.016737947, + -0.019940222, + 0.0030727722, + 0.008503523, + 0.005516526, + 0.0010427579, + -0.0035420132, + -0.0060513597, + 0.012910016, + -0.0022654757, + -0.00003250735, + 0.0034848296, + 0.013468396, + 0.026075676, + 0.0067409254, + 0.014531336, + 0.028255375, + 0.0007866936, + -0.026210224, + -0.000914095, + -0.012903288, + 0.04830324, + 0.008046054, + 0.010111388, + -0.017383784, + -0.026936792, + 0.012775466, + -0.0061690905, + 0.033368252, + 0.011974897, + -0.0019005104, + -0.00808642, + -0.0031602292, + 0.013730767, + -0.01584992, + -0.006895657, + 0.018877283, + -0.027851727, + -0.0058461716, + 0.0052137896, + 0.023129044, + 0.0063843695, + -0.032507136, + -0.011820165, + 0.008046054, + -0.0014724751, + 0.016105564, + -0.006697197, + -0.0020064681, + 0.0010721906, + -0.010259393, + 0.03412173, + -0.0027548992, + 0.01917329, + 0.022308292, + 0.027824817, + -0.02146063, + -0.0172896, + -0.011059961, + 0.024030523, + 0.0036025604, + -0.012573642, + 0.009909564, + -0.019509664, + -0.0019795583, + -0.00085817295, + -0.011100326, + 0.017666338, + -0.028336106, + 0.011228148, + 0.007918233, + 0.0108312275, + 0.027932458, + 0.012842741, + -0.009795197, + 0.015123353, + -0.000015347041, + -0.017007045, + 0.020747518, + 0.010145025, + 0.008934081, + -0.009465551, + -0.012439093, + 0.011880713, + -0.000118887016, + -0.009721194, + 0.005015329, + 0.015136808, + -0.000084251056, + -0.010124843, + -0.009304091, + 0.013105112, + 0.029116493, + -0.01789507, + -0.021689365, + 0.0021141076, + 0.032910787, + -0.00962701, + -0.034686837, + -0.01481389, + 0.0020905614, + -0.0096001, + 0.0035487406, + -0.0001552574, + 0.03234568, + -0.004941327, + -0.0047159567, + -0.0045645884, + -0.0053416113, + 0.033475894, + -0.034283187, + -0.02154136, + 0.007090754, + 0.006054723, + -0.008368974, + -0.0035285582, + -0.025941126, + 0.04970255, + -0.0037606559, + -0.018971467, + 0.00011405165, + 0.0009670739, + -0.009620283, + -0.006629922, + 0.0003853579, + -0.012466002, + 0.013656765, + 0.0006336436, + 0.015177174, + -0.009331001, + 0.01478698, + 0.024716726, + -0.021608636, + -0.009526098, + -0.0069629317, + -0.021877734, + 0.011584704, + 0.096014455, + 0.020115137, + 0.022833034, + -0.00030084405, + 0.030677265, + 0.004904326, + -0.015634641, + -0.009801924, + 0.012008535, + 0.010481399, + -0.007649134, + -0.038050573, + 0.0012521504, + 0.01079759, + -0.012910016, + -0.0036765626, + -0.022927219, + -0.0065458287, + 0.021285716, + -0.011638524, + -0.0060849967, + -0.0024302986, + 0.0022637937, + 0.003468011, + 0.014208417, + -0.010461217, + 0.029331772, + 0.0075751315, + 0.011557794, + 0.010441034, + 0.0061455444, + 0.014181508, + 0.0076424065, + 0.011826893, + -0.0037202912, + -0.01130215, + 0.022644665, + -0.005092695, + 0.014221872, + -0.017625973, + 0.019106016, + 0.003834658, + 0.009028265, + -0.0023747971, + 0.0315922, + -0.025833486, + -0.012714919, + 0.016751401, + -0.0034646473, + -0.017464513, + 0.026519688, + 0.016024834, + -0.024003614, + -0.017356874, + -0.0019543301, + 0.011181056, + 0.0068250187, + -0.00026510438, + -0.0001514732, + 0.017114684, + -0.019765308, + -0.028712844, + 0.0039591165, + -0.01566155, + -0.012324726, + -0.028389925, + 0.002159518, + -0.011880713, + -0.013172387, + -0.025456747, + -0.0022419295, + -0.019859493, + -0.007548222, + 0.008927354, + 0.018043075, + -0.0060244496, + 0.020626424, + 0.014692795, + 0.013690402, + 0.027797908, + 0.0032207766, + -0.014221872, + -0.008490068, + -0.012647645, + -0.01584992, + 0.01693977, + 0.024743635, + -0.017733611, + -0.010737043, + 0.024649452, + 0.016253568, + 0.0005579596, + 0.015473182, + -0.007871141, + -0.012788922, + 0.0016473893, + 0.007036934, + 0.021675909, + -0.018769642, + -0.009546281, + 0.04098375, + -0.009822107, + 0.003126592, + -0.0014968622, + 0.025779666, + -0.008994628, + 0.005193607, + 0.0051633334, + -0.014168053, + -0.023209773, + 0.044751134, + -0.031242372, + 0.025187649, + 0.025201105, + 0.0051263324, + 0.018702367, + -0.004726048, + 0.024743635, + -0.018769642, + 0.0058058067, + -0.01802962, + -0.03248023, + 0.0063070036, + 0.037216365, + -0.012277634, + 0.015405907, + 0.022617755, + -0.014006593, + -0.0020047862, + -0.008348791, + 0.021070438, + 0.028416835, + -0.014046958, + -0.012136357, + -0.00019478129, + -0.0039927536, + -0.0050489665, + 0.011557794, + -0.019590395, + -0.005082604, + -0.010723588, + -0.00507924, + 0.01704741, + -0.010071023, + -0.025672028, + -0.020572605, + -0.00022473956, + -0.0038582042, + 0.0015616141, + 0.03425628, + -0.0029819512, + 0.012815831, + -0.0046184086, + 0.00070680486, + -0.037862204, + -0.010649585, + 0.0037942934, + -0.034283187, + 0.002781809, + 0.021366445, + 0.027905548, + -0.0016145929, + 0.019711489, + -0.0048875073, + -0.006771199, + -0.00039986402, + 0.0074203997, + -0.00041079617, + -0.018635092, + 0.010441034, + 0.01922711, + 0.011470337, + -0.010615949, + -0.005778897, + -0.015553911, + 0.012042172, + 0.0047495943, + -0.008220969, + -0.0033418708, + -0.025228014, + -0.018460179, + -0.017114684, + 0.014571701, + 0.0043257633, + -0.0040196637, + 0.0049245083, + 0.029224131, + -0.004534315, + 0.033314433, + -0.005139787, + 0.014181508, + -0.0036799263, + 0.005957175, + 0.019240566, + -0.0011066688, + -0.012062354, + 0.002120835, + 0.005183516, + 0.012190176, + 0.038238943, + 0.01590374, + -0.0019795583, + -0.018608183, + 0.023048313, + -0.0031854573, + 0.018123806, + 0.0056208014, + -0.0056611663, + 0.01843327, + -0.021285716, + -0.0025766212, + -0.016213203, + -0.023236683, + -0.01933475, + -0.011295423, + 0.011793256, + 0.0017222324, + 0.024339987, + -0.011059961, + -0.009048448, + -0.010676496, + 0.009162814, + 0.013939318, + 0.0007496925, + 0.022792669, + 0.023707606, + -0.012082537, + -0.016576488, + -0.010911957, + 0.009297364, + -0.021837369, + 0.012230542, + 0.035870872, + -0.005462706, + -0.00909554, + -0.0059134467, + 0.003239277, + -0.0001609337, + -0.014235327, + 0.026506234, + 0.012546732, + 0.0048202327, + -0.0028793574, + 0.0012672872, + 0.002388252, + 0.026519688, + -0.026869517, + -0.0116721615, + -0.02736735, + -0.006744289, + -0.0014977031, + 0.005640984, + -0.022052648, + 0.03883096, + -0.0025093465, + -0.010286302, + 0.004265216, + -0.019792218, + -0.0004406493, + -0.0035016483, + 0.008584253, + 0.0039187516, + -0.004140758, + -0.008624617, + -0.0015128399, + -0.0059672664, + -0.006172454, + 0.018998377, + -0.015096444, + 0.021070438, + -0.010932139, + -0.005893264, + 0.0008152853, + -0.025833486, + 0.006566011, + 0.018917646, + 0.013515488, + -0.0024656178, + -0.015230993, + -0.010555401, + 0.0015355451, + 0.009061903, + -0.010609221, + 0.008947535, + -0.013071475, + -0.009916292, + -0.00256653, + -0.021137713, + 0.018796552, + -0.0023344322, + -0.020101681, + -0.013125295, + -0.008436248, + 0.029116493, + -0.015015714, + 0.009976839, + 0.021985373, + 0.012990746, + -0.0046520457, + 0.011160874, + 0.0006151431, + -0.0057856245, + -0.011140691, + 0.0047933226, + -0.008712074, + -0.0099902935, + 0.028955033, + -0.027636448, + -0.002921404, + -0.0034141913, + 0.009337729, + 0.0067812903, + 0.0065021003, + -0.0019021922, + 0.032614775, + -0.0035588318, + 0.0018567818, + -0.0031669566, + -0.011477064, + 0.020464964, + -0.0068889298, + -0.002312568, + 0.006730834, + -0.004369492, + 0.009727922, + 0.017706702, + -0.012876378, + -0.0044704042, + -0.016415028, + -0.019698033, + -0.0034326918, + 0.015594277, + -0.016065199, + -0.025577843, + -0.012883106, + 0.00928391, + -0.0071042087, + 0.02962778, + -0.015944105, + -0.0077029536, + -0.0011739436, + 0.003177048, + 0.010387214, + -0.0055266167, + -0.006592921, + -0.032641686, + -0.015836466, + 0.0037438374, + -0.029816149, + -0.006710652, + -0.01829872, + 0.023546146, + 0.0071983933, + -0.026465869, + -0.005116241, + 0.01486771, + -0.017975802, + 0.015352087, + 0.00008703665, + 0.01707432, + 0.020559149, + 0.008712074, + 0.015500092, + 0.022779215, + 0.009801924, + 0.021164622, + -0.03923461, + -0.012560187, + 0.018635092, + -0.015163718, + 0.0077164085, + 0.006340641, + -0.030246707, + -0.0015860011, + 0.01677831, + 0.010938867, + 0.0038178395, + -0.0014884528, + -0.024703272, + -0.00784423, + -0.02704443, + -0.014141142, + -0.02499928, + 0.012614007, + -0.00073623756, + -0.019267475, + -0.0015304995, + 0.010595766, + -0.017868161, + -0.012614007, + -0.005462706, + -0.0030626808, + 0.00079215964, + 0.0024336623, + -0.0018180988, + 0.016078655, + 0.017639427, + -0.050913494, + -0.0043762196, + 0.004080211, + 0.0028154464, + 0.0015473182, + -0.007857685, + -0.010030658, + -0.007063844, + -0.004964873, + -0.025968036, + -0.009337729, + -0.0027616266, + -0.017545242, + 0.0024740272, + -0.028847393, + -0.0017045728, + -0.03401409, + 0.0032813237, + -0.026479324, + 0.0007740796, + -0.012143084, + 0.011066689, + 0.01481389, + -0.027582629, + -0.017787432, + -0.0137105845, + -0.01590374, + -0.016334299, + 0.0070571164, + 0.007265668, + -0.014423696, + -0.016267024, + 0.00970774, + -0.025362564, + -0.03396027, + 0.00035130008, + 0.0040331185, + -0.0065727388, + 0.004127303, + 0.23917502, + -0.022119923, + 0.004927872, + 0.021527905, + 0.0017693248, + 0.015056078, + 0.0343101, + -0.018608183, + -0.010737043, + -0.00068998616, + -0.019603848, + 0.010528491, + -0.005398795, + 0.007904777, + -0.013912409, + -0.014881165, + -0.035817053, + -0.037593104, + -0.019092562, + -0.013246389, + 0.0009098904, + -0.008839896, + -0.006158999, + -0.008079692, + 0.028524475, + 0.0099902935, + -0.015163718, + -0.014046958, + 0.020908978, + 0.022079557, + 0.0055333446, + 0.0032527319, + -0.0054088864, + 0.03662435, + 0.00041668268, + -0.006438189, + -0.0123045435, + -0.027609538, + 0.007050389, + 0.012943653, + -0.025120374, + -0.004100393, + -0.02390943, + -0.008153694, + -0.010178663, + 0.016240114, + -0.0063843695, + -0.0023478873, + 0.019846037, + 0.014100778, + -0.019671123, + -0.010676496, + 0.03891169, + 0.031672932, + 0.0010461217, + -0.012398728, + 0.010017203, + 0.01486771, + 0.009230089, + -0.010017203, + -0.018648548, + 0.01712814, + 0.00797878, + 0.019321295, + -0.01710123, + -0.0034579197, + -0.044159114, + 0.022119923, + 0.00068115635, + 0.005462706, + 0.007232031, + -0.013602945, + -0.009808652, + -0.01313875, + -0.032318767, + -0.014585156, + 0.023330867, + 0.010609221, + 0.00792496, + 0.035440315, + -0.0043728556, + 0.0065727388, + 0.016119018, + -0.009734649, + -0.0036361977, + -0.02148754, + 0.023425052, + -0.0016532758, + -0.008476613, + -0.0063473685, + 0.0029129947, + 0.004204669, + -0.021649, + -0.013925863, + 0.024864731, + 0.013313664, + 0.0054862523, + 0.03406791, + 0.001156284, + 0.0027246254, + -0.024434172, + 0.031107822, + 0.000033584794, + -0.010992686, + -0.015271358, + 0.00368329, + 0.012614007, + -0.0041104844, + -0.010488126, + -0.012640917, + -0.009815379, + -0.03172675, + -0.00281881, + -0.0016448665, + 0.006394461, + 0.01031994, + 0.012990746, + -0.0030794996, + 0.0033855995, + -0.012741829, + -0.006895657, + 0.0025143921, + -0.0054896157, + 0.0096404655, + -0.0048706885, + 0.0001105828, + -0.0038043845, + 0.016132474, + 0.00092334533, + -0.03686654, + 0.014329512, + -0.014746615, + 0.017989255, + -0.004164304, + -0.034659926, + 0.04109139, + 0.0022856581, + -0.01571537, + -0.019819127, + -0.0067779263, + 0.015029169, + -0.015096444, + 0.0066097397, + -0.0019896494, + -0.024905095, + -0.006138817, + 0.01925402, + 0.000007647242, + -0.0005571186, + -0.008617889, + -0.0030895907, + -0.011584704, + -0.0065391012, + -0.041925594, + 0.022981038, + -0.019294385, + -0.0076625887, + -0.026627328, + -0.017733611, + 0.017881617, + -0.044051476, + -0.0055568907, + 0.021931553, + -0.014692795, + -0.020962797, + 0.013925863, + -0.17523715, + 0.02031696, + 0.019119471, + -0.020088227, + 0.0010208937, + 0.0092906365, + 0.010447761, + 0.0028675843, + 0.0021443812, + 0.0018887373, + 0.012533277, + -0.0027347167, + -0.024461083, + 0.0055568907, + 0.0012311271, + -0.024784, + -0.0048740525, + -0.00027057045, + 0.0037101998, + -0.007090754, + 0.0117461635, + -0.036139973, + 0.010030658, + -0.023317412, + -0.0060244496, + 0.010938867, + -0.013562581, + 0.021635545, + -0.017168505, + -0.01598447, + -0.0063440045, + -0.0011974897, + 0.028820483, + 0.0030172705, + 0.0072723953, + 0.010017203, + -0.009532825, + -0.009230089, + -0.006350732, + 0.030784905, + 0.012291089, + 0.016253568, + -0.003811112, + 0.008409338, + 0.005038875, + 0.029089581, + 0.025281833, + 0.0006916681, + 0.007911505, + 0.004507405, + 0.028147737, + -0.01819108, + 0.0026523052, + -0.008812986, + -0.009775015, + -0.0043661282, + 0.0012269224, + 0.017370328, + 0.0007459083, + -0.014800435, + -0.034740657, + -0.029869968, + -0.007837503, + -0.010447761, + 0.0036092878, + -0.027582629, + -0.019698033, + 0.0075549493, + -0.0135693075, + 0.0100642955, + -0.016253568, + -0.033583533, + -0.0055871643, + -0.0037572922, + 0.0058259894, + 0.014100778, + -0.0054929797, + 0.005321429, + 0.00027288301, + -0.00070554344, + -0.014316057, + 0.030219797, + -0.0029264495, + -0.005536708, + -0.0049312357, + 0.0045645884, + -0.005015329, + 0.020586058, + -0.009849017, + -0.017383784, + 0.0044502215, + -0.02047842, + -0.006428098, + -0.0012101037, + 0.011342515, + 0.022927219, + -0.0052507906, + 0.022671575, + -0.005859627, + -0.0067846538, + 0.0068014725, + -0.0071042087, + -0.015863376, + 0.022631211, + 0.028766664, + 0.030327436, + 0.01481389, + -0.0040499372, + 0.0057217134, + 0.014437151, + -0.024380352, + -0.025174195, + 0.015190628, + 0.035063576, + -0.020411145, + 0.0042853984, + 0.029358681, + -0.014612066, + 0.016482303, + -0.0029634507, + 0.057264227, + -0.0015725462, + 0.005499707, + 0.015325177, + -0.015607731, + -0.001993013, + -0.09219325, + -0.022456296, + 0.022254473, + 0.009297364, + -0.006798109, + 0.017410694, + -0.0016179567, + -0.0022133377, + 0.0012656053, + 0.013105112, + -0.010656313, + -0.003060999, + 0.026761876, + -0.018756187, + 0.04327109, + 0.0029029034, + -0.017612517, + -0.0064617353, + -0.020693699, + 0.023115588, + -0.0070436615, + 0.0045780437, + -0.0024992554, + -0.008059509, + -0.0021141076, + -0.0038481131, + -0.019846037, + 0.018554363, + 0.007945143, + 0.020868612, + 0.0007084867, + -0.00006837843, + 0.014033503, + -0.006418007, + -0.0012000125, + 0.012802376, + -0.014221872, + 0.015378998, + 0.024313077, + -0.015096444, + -0.014854254, + 0.0013042883, + 0.0204246, + -0.007783683, + -0.005577073, + -0.00027162163, + -0.0058461716, + 0.006969659, + 0.006387733, + -0.013858589, + -0.013367483, + -0.008974445, + 0.001727278, + -0.0038481131, + 0.0042853984, + -0.010723588, + 0.027770998, + 0.016159384, + -0.035063576, + -0.010925412, + -0.0032964605, + 0.007124391, + -0.021608636, + 0.016051745, + 0.017558698, + 0.0012075809, + -0.02992379, + -0.00017806773, + 0.0039523887, + -0.028981943, + -0.012842741, + 0.0074809473, + -0.007353125, + -0.007736591, + -0.01568846, + 0.00011720515, + -0.0069629317, + 0.009196452, + 0.006175818, + -0.0023462053, + -0.035225034, + -0.023155954, + -0.0025446657, + -0.02641205, + 0.02595458, + 0.035386495, + 0.0014623839, + -0.015405907, + 0.016374663, + -0.017222324, + -0.0121699935, + 0.010387214, + 0.021191532, + -0.022981038, + -0.018123806, + 0.021352991, + 0.022994494, + -0.004524224, + -0.017666338, + 0.024609087, + -0.024299623, + 0.0057250774, + -0.08847969, + 0.011006142, + 0.009189725, + -0.00853716, + 0.0039086603, + -0.028120827, + 0.017706702, + -0.0034511923, + 0.012768739, + 0.0062060915, + -0.026802242, + -0.0137778595, + 0.008187331, + 0.0024185255, + -0.03643598, + -0.026990611, + 0.022227563, + 0.01590374, + 0.016576488, + 0.017773977, + -0.013347302, + 0.0047933226, + -0.0010007112, + 0.0072051208, + -0.021016618, + 0.006734198, + 0.009055175, + 0.017208869, + -0.004480495, + 0.0034781022, + 0.029035762, + -0.03654362, + -0.01077068, + 0.015419362, + -0.011981625, + -0.03215731, + -0.015271358, + 0.030354347, + -0.0047529577, + 0.044239845, + -0.0046049533, + -0.006172454, + 0.028578294, + 0.005001874, + -0.005751987, + -0.021420266, + 0.016576488, + 0.011692343, + 0.026654238, + 0.008826441, + -0.003912024, + 0.026290955, + -0.016697582, + 0.0027919002, + -0.01617284, + -0.011927805, + 0.013239662, + 0.016267024, + -0.0005323111, + -0.023734516, + 0.024891641, + -0.00015820067, + -0.004742867, + 0.019711489, + 0.03624761, + -0.00006328027, + -0.015325177, + -0.0032039578, + -0.00022852376, + -0.01462552, + -0.024757091, + 0.0038043845, + 0.029331772, + 0.0055299806, + 0.010642858, + -0.00077702285, + 0.011174329, + 0.0024084344, + -0.020088227, + 0.017181959, + 0.01856782, + -0.014100778, + -0.032883875, + 0.02606222, + 0.032722417, + 0.0004662978, + -0.0058663543, + -0.006552556, + -0.00731276, + 0.03248023, + 0.0101988455, + 0.015971014, + 0.0021763367, + -0.011288695, + 0.011470337, + 0.017060865, + -0.00092418626, + -0.03584396, + -0.006996569, + 0.03673199, + -0.0008644799, + -0.004379583, + -0.008705347, + -0.026802242, + -0.04087611, + 0.008638072, + -0.015446272, + -0.03178057, + 0.008335336, + 0.02595458, + 0.010461217, + -0.0017390511, + -0.00077954563, + 0.018984921, + 0.0014321102, + 0.0042080325, + 0.010367032, + -0.018608183, + -0.016441938, + 0.0003891421, + 0.01566155, + 0.03616688, + 0.00851025, + -0.026317865, + 0.02063988, + -0.0029701781, + 0.013979684, + -0.019778762, + 0.0040331185, + 0.013925863, + 0.006606376, + -0.018608183, + -0.008066237, + -0.021649, + -0.0040331185, + -0.0031854573, + -0.016509213, + 0.018258354, + -0.018527454, + 0.037377827, + 0.010145025, + -0.028551385, + -0.005338248, + 0.0074136723, + 0.023317412, + 0.0075751315, + 0.03624761, + -0.02273885, + -0.0121699935, + 0.02497237, + 0.000634905, + 0.0033469165, + -0.0294125, + -0.023223227, + 0.0053819763, + -0.018608183, + -0.0026321227, + -0.01726269, + -0.007783683, + 0.03802366, + -0.0033485985, + 0.0053819763, + 0.0104141245, + -0.024649452, + -0.007063844, + 0.023317412, + 0.015056078, + 0.0021948372, + -0.021770094, + 0.014437151, + 0.010367032, + -0.0074002175, + -0.025376018, + 0.022644665, + 0.0027885365, + -0.01699359, + -0.014840799, + 0.030300526, + -0.0006176659, + -0.028928123, + 0.023815244, + -0.02957396, + -0.033395164, + 0.025066555, + -0.015917195, + -0.022510115, + -0.02404398, + -0.01063613 + ] + }, + { + "object": "embedding", + "index": 7, + "embedding": [ + 0.024549589, + -0.006144328, + -0.0028832944, + -0.013314444, + -0.0069968407, + 0.013993681, + -0.026268475, + -0.008857813, + -0.020072164, + -0.013064927, + 0.022997046, + 0.018325554, + 0.0039887885, + -0.021319743, + -0.0155808795, + -0.009024157, + 0.04932097, + -0.0061477935, + 0.014118439, + -0.011817348, + -0.004775456, + -0.005073489, + 0.0033060852, + 0.0011115585, + 0.008712262, + -0.009516258, + 0.008746917, + -0.013238203, + -0.0026129854, + -0.013737234, + -0.003250637, + -0.0150541235, + -0.025783306, + -0.0341005, + -0.020987056, + -0.01412537, + -0.01635715, + -0.0047823875, + 0.0049002143, + -0.0023201508, + 0.012392621, + -0.009620222, + -0.004837835, + 0.0061270003, + -0.009661809, + 0.038453165, + -0.0066468255, + -0.013245134, + -0.025603099, + 0.0003155769, + 0.02205443, + 0.0023704006, + -0.020113751, + -0.02108409, + -0.026074408, + -0.026254613, + -0.018256243, + 0.03276975, + 0.0028763635, + -0.018588932, + -0.0022144532, + -0.0104658045, + 0.0045952504, + 0.013210478, + 0.0078112325, + -0.01461054, + -0.009620222, + 0.005371522, + -0.017064113, + -0.0048828865, + 0.011172766, + 0.005461625, + 0.0011860667, + -0.02136133, + 0.022484152, + -0.0065393946, + -0.0055967793, + 0.0025783305, + -0.01183121, + 0.005752727, + 0.026434818, + -0.014305576, + -0.007617165, + 0.021444501, + -0.0032610337, + 0.0035937214, + -0.005260626, + 0.02991418, + -0.012344104, + 0.007825094, + 0.015123433, + 0.019046377, + -0.016066048, + -0.0027931915, + -0.031910308, + -0.0038848233, + -0.011706453, + 0.04502375, + 0.016897768, + -0.0039160126, + 0.014035267, + 0.006414637, + -0.022373255, + -0.022109877, + -0.006972582, + -0.0012137907, + -0.00049383345, + 0.0022387118, + 0.008365712, + 0.010382632, + -0.0013385486, + 0.033296507, + 0.01935134, + -0.05838671, + 0.00013656229, + -0.040144328, + -0.010410356, + 0.0024812967, + -0.011644074, + -0.036484763, + 0.023149528, + 0.033989605, + 0.010548976, + 0.0018107228, + 0.027973501, + -0.0084072985, + -0.010590562, + -0.03493222, + 0.0013082256, + 0.01926817, + 0.01092325, + 0.011789625, + 0.029110184, + 0.014915504, + -0.0037947204, + 0.005943329, + -0.027848743, + 0.013155031, + -0.022345532, + -0.015622465, + -0.007894404, + 0.03166079, + -0.020127613, + 0.0046160435, + 0.011054939, + 0.013064927, + 0.005874019, + 0.012697585, + 0.017868107, + -0.0040061157, + 0.03263113, + -0.011914383, + 0.007021099, + -0.0015586078, + 0.005655693, + 0.025007034, + -0.004896749, + 0.031078586, + 0.005558659, + 0.0073329937, + 0.005246764, + 0.006525533, + 0.012725309, + 0.0008650749, + 0.019947406, + 0.002574865, + 0.0043006833, + 0.02922108, + 0.007346856, + -0.010514321, + 0.0050076446, + 0.023856489, + -0.034849048, + 0.018769138, + 0.006986444, + 0.03590256, + 0.016856182, + -0.013681786, + -0.026753645, + -0.0056348997, + -0.00897564, + 0.014776884, + 0.020432577, + 0.01996127, + -0.01447192, + 0.022151463, + 0.022802977, + -0.0017474773, + -0.008116197, + -0.01962858, + -0.0022560393, + 0.0153175015, + 0.02999735, + -0.014291714, + -0.66404486, + -0.0057042097, + -0.010278667, + 0.011359903, + 0.0086984, + 0.016523495, + 0.010847009, + 0.013064927, + -0.019531546, + -0.013155031, + -0.006109673, + -0.012572827, + -0.004751198, + -0.000104181534, + -0.0065844464, + -0.023468353, + 0.005063093, + -0.01718887, + 0.009446948, + 0.017216595, + 0.0065324637, + 0.013300582, + 0.007755785, + -0.0040234434, + 0.00036907554, + 0.011477729, + 0.012468862, + -0.023343595, + -0.003002854, + 0.012115381, + -0.02247029, + 0.033712365, + -0.023204975, + -0.02894384, + 0.013016411, + 0.011456937, + -0.010313322, + 0.038591787, + 0.024826828, + 0.050651718, + -0.0024067883, + 0.005867088, + 0.010874732, + 0.0046437676, + -0.017507697, + -0.011117318, + 0.027266538, + -0.014291714, + 0.0006905005, + 0.0030704313, + 0.01064601, + -0.040809706, + -0.00018410459, + 0.013758027, + 0.03069045, + 0.0009781368, + 0.03673428, + 0.009211293, + 0.0022543066, + 0.008920192, + 0.0025384773, + -0.027807156, + -0.003569463, + -0.0084696775, + -0.006882479, + 0.0020637042, + -0.0155808795, + -0.011297524, + -0.0020637042, + -0.019739477, + -0.011630211, + 0.03437774, + -0.018006727, + -0.006702273, + 0.0109994905, + 0.0060576904, + 0.011678728, + -0.010119255, + -0.014929365, + -0.0026112527, + -0.021278158, + -0.01732749, + -0.034571808, + 0.009571706, + 0.007076547, + -0.01691163, + -0.031300377, + 0.017590867, + 0.0293597, + -0.015539293, + 0.016897768, + 0.021735603, + 0.009828152, + -0.0075686476, + -0.0016062583, + 0.0058636228, + -0.007880542, + -0.014028336, + 0.0028226483, + -0.0059052086, + 0.010174702, + -0.004924473, + 0.0062725516, + 0.010410356, + 0.02894384, + -0.002160738, + -0.016246255, + 0.020765264, + 0.025797168, + -0.013536235, + -0.0020844971, + -0.012004485, + -0.01940679, + -0.006546326, + -0.0024691673, + -0.028777495, + 0.023981247, + -0.0029370096, + 0.032326166, + -0.0023149527, + 0.008656814, + -0.014804607, + 0.010611355, + -0.021042503, + 0.0034187138, + 0.02366242, + 0.0004886352, + -0.01774335, + -0.0007715065, + 0.008372643, + 0.0007702069, + 0.016371014, + 0.0069829784, + -0.010687596, + -0.0006029967, + 0.012018347, + 0.020155337, + -0.011560901, + 0.012441138, + -0.008656814, + -0.01663439, + -0.013771889, + -0.01002222, + 0.004914076, + -0.006764652, + -0.034072775, + -0.014097646, + -0.009446948, + -0.035375804, + -0.00031406077, + -0.0009971971, + 0.011886658, + -0.01642646, + 0.013695648, + 0.010237081, + -0.011581695, + 0.016759148, + -0.014499644, + -0.029831007, + -0.0019285496, + 0.015636327, + -0.0038986853, + -0.012565896, + -0.00078017026, + 0.0029768627, + -0.0051947813, + 0.0058705537, + 0.019365203, + 0.004775456, + -0.037760068, + 0.01231638, + -0.013071858, + -0.01454123, + 0.021042503, + 0.006511671, + 0.009578637, + 0.013203547, + -0.007956783, + -0.002713485, + 0.008733055, + 0.019794924, + -0.017632455, + -0.02852798, + -0.0075270617, + 0.010555907, + -0.005378453, + 0.011505454, + 0.017798798, + -0.02380104, + 0.011713384, + 0.0137233725, + 0.010521252, + -0.010250943, + -0.003437774, + -0.0049903174, + 0.0011427479, + 0.00028265468, + 0.021319743, + -0.011983693, + 0.03193803, + 0.020072164, + 0.0014355825, + 0.02156926, + 0.0067854454, + 0.018783, + -0.039229438, + -0.010292529, + -0.007838957, + 0.03179941, + 0.019254306, + 0.00025428092, + -0.019808786, + -0.015081847, + 0.0009486801, + -0.000596932, + 0.02037713, + -0.0029959232, + 0.0058948123, + -0.004584854, + -0.0042209765, + 0.016509634, + -0.012011416, + -0.015830396, + 0.012940169, + -0.020501886, + 0.0144580575, + 0.029831007, + 0.03451636, + 0.012891653, + -0.035569873, + -0.019171136, + 0.008691469, + -0.005960657, + -0.003912547, + -0.0027308124, + -0.0006081949, + 0.023191113, + -0.02330201, + 0.01551157, + 0.009550912, + 0.033241056, + 0.017798798, + 0.026351647, + -0.008199369, + -0.00897564, + -0.022400979, + 0.0058151055, + 0.012718378, + -0.0095370505, + 0.01488778, + -0.011935175, + 0.015969016, + 0.008019162, + 0.01260055, + 0.0018211192, + 0.0033355418, + 0.019794924, + 0.007173581, + 0.018450312, + 0.02525655, + -0.008871675, + -0.011318317, + -0.0052710227, + 0.013425339, + 0.00077627157, + -0.008441953, + 0.007242891, + -0.028417084, + -0.016925493, + -0.019101825, + -0.014763022, + -0.010244012, + 0.024799105, + -0.004896749, + -0.003957599, + -0.02999735, + -0.01635715, + -0.008317195, + 0.0023028234, + 0.0029647336, + -0.017369077, + -0.045633677, + 0.003624911, + 0.021056365, + -0.01134604, + -0.010680665, + -0.023884213, + -0.0038189788, + -0.0040996843, + 0.0023738663, + 0.0056660892, + 0.020862298, + -0.011124249, + -0.004307614, + 0.009641016, + -0.028236877, + 0.032326166, + -0.011713384, + 0.002968199, + -0.0034412395, + -0.0065775155, + -0.02357925, + -0.0079429215, + -0.027141782, + 0.027918052, + 0.036512487, + -0.018796861, + -0.04216818, + -0.02400897, + -0.026393233, + 0.007845888, + 0.0068027726, + 0.0016487107, + 0.005142799, + -0.00723596, + -0.007915198, + -0.012642137, + -0.0012510448, + 0.032464787, + 0.0090726735, + -0.02073754, + -0.02407828, + -0.036318418, + -0.01064601, + 0.10180247, + 0.03263113, + 0.0059537254, + 0.007270615, + -0.004165529, + 0.007388442, + -0.008642952, + -0.0019285496, + 0.021804914, + 0.0007793039, + 0.012787688, + 0.01190052, + 0.009308328, + 0.0040303743, + 0.012954032, + 0.011401488, + -0.014527367, + -0.033435125, + -0.0033961881, + -0.010146978, + -0.0069344616, + -0.01990582, + -0.013508512, + 0.041585978, + -0.013792682, + 0.0012822343, + 0.021832637, + 0.023094079, + 0.0012250536, + -0.025658548, + -0.014236266, + 0.008005301, + -0.00995291, + 0.003860565, + -0.022997046, + 0.00967567, + 0.025298135, + 0.0008516461, + 0.019642442, + 0.0016209867, + 0.013155031, + 0.014596677, + -0.005343798, + -0.0053195395, + 0.027945776, + -0.0026667006, + -0.017979003, + 0.012489655, + -0.002444909, + -0.02366242, + 0.030939966, + -0.008039955, + -0.03598573, + -0.0012302519, + 0.0023218838, + 0.013023342, + 0.02080685, + 0.0056660892, + -0.023260422, + 0.001045714, + -0.001802059, + -0.035514425, + 0.007818163, + -0.01071532, + -0.010840078, + -0.03346285, + 0.007242891, + -0.0065671187, + -0.03199348, + -0.0011748038, + 0.0046056467, + -0.023981247, + -0.012143105, + 0.016343288, + 0.004969524, + -0.006206707, + 0.02567241, + -0.012753033, + -0.021333605, + 0.019600857, + -0.021181123, + -0.016176945, + -0.0052329022, + -0.008601367, + -0.021139538, + 0.03437774, + 0.006123535, + -0.01822852, + -0.014970952, + 0.011637143, + 0.026102131, + -0.01642646, + 0.007326063, + -0.0018332484, + -0.016246255, + -0.0017700031, + 0.016828459, + 0.019517684, + -0.022525737, + -0.019642442, + 0.034904495, + -0.029831007, + -0.017424524, + -0.008296402, + 0.029331975, + 0.019157274, + 0.00608888, + -0.0068027726, + -0.017369077, + 0.0017301498, + 0.03742738, + -0.019988993, + -0.00855978, + 0.008733055, + -0.002181531, + 0.014555092, + -0.014305576, + 0.019697892, + 0.015497707, + -0.035514425, + -0.023856489, + -0.00904495, + 0.0023010906, + 0.037676893, + -0.005052696, + -0.008289471, + -0.0018869637, + -0.011082663, + 0.009377638, + -0.00290582, + 0.0047962493, + 0.0347936, + 0.0077904398, + -0.012364897, + -0.024535727, + 0.0086706765, + -0.012856998, + 0.009100398, + -0.009211293, + -0.011644074, + -0.012545103, + 0.009051881, + -0.005364591, + -0.0059537254, + -0.023704007, + -0.04183549, + 0.015386811, + -0.013543166, + -0.0147214355, + 0.021208849, + -0.011228214, + 0.015816534, + -0.0047789216, + 0.016163083, + -0.03897992, + -0.022345532, + -0.007908267, + -0.005295281, + 0.0054928144, + 0.023066355, + 0.028472532, + -0.0062240344, + 0.003562532, + -0.0013342168, + 0.0066191014, + 0.003992254, + 0.027252676, + -0.0055136075, + -0.014707574, + 0.023676282, + 0.011997554, + -0.004182856, + -0.015691776, + -0.00038142139, + -0.012863928, + 0.015705638, + 0.020418715, + -0.01649577, + -0.0056452965, + -0.020307818, + -0.010361839, + -0.009966772, + -0.035514425, + 0.002479564, + -0.0061547244, + -0.008504332, + 0.025353584, + 0.0025020896, + 0.005101213, + -0.014596677, + 0.0327143, + -0.0045536645, + 0.00046914179, + 0.020058302, + 0.0014052595, + 0.0046576294, + 0.0047096116, + -0.0016556417, + -0.005122006, + 0.013889716, + 0.012489655, + -0.008913261, + -0.015123433, + -0.0011626746, + 0.008379574, + 0.020224646, + 0.010535114, + -0.013619407, + 0.019171136, + -0.025062481, + -0.011657936, + -0.010535114, + -0.013813475, + -0.018076038, + -0.018394863, + 0.023426767, + -0.029692387, + 0.017979003, + -0.013064927, + -0.03124493, + 0.0075339926, + 0.00883702, + 0.017105699, + 0.004217511, + 0.025020896, + 0.018020589, + 0.00018702859, + -0.014638264, + 0.017147284, + 0.006310672, + -0.023898074, + 0.028555704, + 0.017687902, + -0.0035937214, + -0.012170829, + -0.009516258, + 0.004363062, + -0.018810723, + -0.0033736622, + 0.03590256, + 0.017992865, + 0.00876771, + -0.0078112325, + -0.009141983, + -0.01781266, + 0.028583428, + -0.02219305, + -0.00995291, + -0.0096687395, + -0.02330201, + -0.012399552, + 0.018672103, + -0.02219305, + 0.004706146, + 0.007845888, + -0.021319743, + 0.011124249, + -0.018519621, + -0.013570891, + 0.011373765, + 0.016412599, + 0.017272042, + -0.027613088, + -0.0058151055, + 0.0076379576, + 0.0058497605, + -0.013459994, + -0.006615636, + -0.008053818, + 0.028500255, + -0.007478545, + 0.0007112935, + 0.0098836, + -0.02032168, + 0.03046866, + -0.0027931915, + -0.011852004, + -0.01892162, + -0.0068201004, + -0.01836714, + 0.0045536645, + 0.020224646, + -0.008199369, + -0.009550912, + -0.017563144, + -0.008989502, + -0.007915198, + -0.0048586284, + 0.010528183, + 0.0038155133, + -0.010036082, + -0.011145041, + -0.0073953727, + 0.014943227, + -0.0062794825, + -0.0019302825, + 0.008920192, + 0.028028948, + -0.02776557, + 0.0074369586, + 0.006650291, + 0.0018956275, + -0.029193355, + 0.009862808, + -0.008448884, + -0.010410356, + 0.019448375, + 0.018311692, + -0.020335542, + 0.008227092, + -0.0038536338, + 0.007984508, + 0.009876669, + 0.009446948, + 0.031965755, + 0.0014693711, + -0.020820713, + -0.0013515443, + -0.021070229, + 0.011845073, + -0.016038325, + 0.00828254, + 0.02344063, + -0.013557028, + 0.01711956, + 0.0024414433, + 0.019226583, + 0.037593722, + -0.016412599, + -0.012787688, + -0.00476506, + 0.0005271889, + -0.011470798, + -0.04632678, + -0.01705025, + -0.003583325, + -0.021680156, + 0.042057283, + -0.003583325, + 0.00042603965, + 0.012863928, + 0.019670166, + 0.01962858, + 0.009585568, + -0.0030271125, + -0.01795128, + -0.014638264, + -0.0061616553, + 0.0054165735, + -0.0100014275, + -0.007457752, + 0.026102131, + 0.01064601, + -0.02581103, + -0.006632963, + 0.0020810317, + -0.022373255, + 0.01962858, + -0.02227622, + 0.02073754, + 0.022096016, + 0.012392621, + 0.0016166548, + 0.00959943, + 0.013217409, + 0.0040130466, + -0.022165326, + -0.03102314, + -0.0034065845, + -0.029886454, + -0.0050007137, + -0.025824891, + -0.016870044, + -0.010957905, + 0.03041321, + -0.0050353687, + 0.0116648665, + 0.012080726, + -0.011172766, + 0.0035729285, + 0.0022629702, + 0.0014962287, + -0.00049340026, + 0.014139232, + 0.026975436, + -0.027280401, + 0.006137397, + 0.030219143, + 0.010902457, + -0.01677301, + -0.010978698, + 0.010084599, + -0.014104577, + 0.011041077, + -0.014305576, + 0.01935134, + 0.006650291, + -0.030357763, + 0.009294466, + -0.018173072, + -0.025492204, + 0.009661809, + -0.012496586, + -0.0017509429, + -0.012753033, + 0.013148099, + -0.029193355, + -0.011519316, + 0.023329733, + -0.006813169, + 0.0028347773, + -0.013626338, + -0.015691776, + -0.017424524, + 0.006868617, + -0.0036907555, + -0.014527367, + 0.0008711396, + 0.028444808, + 0.024161452, + -0.015594741, + -0.00765182, + 0.0016963613, + -0.027543778, + 0.014513506, + -0.014527367, + 0.0014832332, + -0.023482215, + -0.0013567425, + -0.00055924477, + -0.022913873, + -0.017105699, + -0.007478545, + -0.00821323, + -0.00849047, + 0.0015170218, + 0.20615555, + -0.010361839, + 0.005316074, + 0.03498767, + 0.006359189, + 0.020002855, + 0.010569769, + 0.022622772, + -0.0043388037, + 0.012822343, + -0.024410969, + 0.0005024972, + 0.014832332, + 0.013494649, + 0.01767404, + -0.011470798, + -0.022844562, + -0.037593722, + -0.026628887, + 0.025575375, + 0.013688717, + 0.0070938743, + -0.014132301, + -0.016537357, + 0.0015768016, + 0.008393437, + -0.02414759, + -0.017992865, + 0.02894384, + 0.011096525, + 0.00946081, + 0.011359903, + -0.025436755, + -0.00009031954, + -0.00029478394, + 0.019850373, + -0.0025696668, + 0.032880645, + 0.019947406, + 0.0016833657, + -0.0060854144, + -0.0077141984, + -0.014665987, + 0.0013550097, + -0.0038813578, + -0.011158904, + -0.0043388037, + 0.008455815, + -0.0034741617, + 0.027557641, + -0.033157885, + -0.008739986, + 0.020488024, + 0.026310062, + 0.0031154826, + -0.02324656, + 0.035597596, + 0.030108247, + 0.0028295792, + -0.015456121, + -0.02269208, + 0.01948996, + -0.0048482316, + 0.010722251, + -0.0019770667, + 0.020404853, + -0.023204975, + -0.003694221, + 0.012288656, + -0.0045536645, + -0.00062812155, + -0.013709511, + -0.0017492102, + 0.0068720826, + -0.02547834, + -0.017771075, + 0.027931914, + -0.01120742, + 0.0008572776, + 0.022345532, + 0.0006632097, + -0.0056452965, + -0.0043318723, + 0.003203853, + 0.0029907248, + -0.028153706, + 0.03645704, + 0.013356029, + -0.023981247, + 0.00026294467, + -0.0057735196, + -0.0056868824, + 0.0048413007, + -0.012337173, + 0.0003433009, + 0.005402711, + 0.0015308837, + 0.041696873, + -0.02310794, + -0.009821221, + -0.016662115, + -0.02484069, + 0.021527674, + -0.0028191826, + 0.009232087, + 0.008150851, + -0.008296402, + 0.017881969, + -0.006979513, + -0.014943227, + -0.015705638, + -0.012413414, + 0.020931609, + -0.014790745, + 0.022082154, + 0.0040823566, + -0.005364591, + -0.011997554, + 0.0015048925, + -0.0125936195, + 0.017244319, + 0.0049972483, + 0.0010630415, + -0.0035365408, + 0.016398737, + -0.012579758, + -0.026115993, + 0.009627153, + -0.002236979, + -0.036346145, + 0.011699521, + -0.0011574763, + 0.01260055, + 0.011110387, + -0.039201714, + 0.007014168, + 0.0024466417, + 0.007173581, + -0.006736928, + 0.018214658, + 0.0016556417, + -0.021236572, + -0.0068304967, + 0.01467985, + 0.0013541434, + 0.006276017, + 0.024119867, + -0.0045813886, + -0.0063661197, + -0.010978698, + -0.012572827, + 0.00010591428, + -0.023080217, + -0.020501886, + 0.0293597, + 0.006234431, + -0.021860361, + -0.026129855, + 0.0113321785, + 0.0115955565, + -0.018048314, + -0.0001495579, + 0.025464479, + 0.007686475, + -0.0003125446, + -0.010424218, + -0.17987321, + 0.017105699, + 0.016967079, + -0.01537295, + 0.025228826, + 0.020723678, + 0.021194985, + -0.0026805627, + -0.013411477, + 0.0053126086, + 0.02129202, + -0.0075339926, + -0.027613088, + -0.008462747, + -0.020917745, + 0.0026476404, + 0.0013913974, + 0.013563959, + 0.018200796, + 0.009828152, + 0.02380104, + -0.03396188, + 0.023856489, + -0.000010633394, + -0.011865865, + 0.00019287663, + -0.011366834, + 0.00932219, + -0.0020255835, + -0.033379678, + -0.01635715, + 0.000749414, + 0.041336462, + 0.02533972, + 0.008532057, + 0.03227072, + 0.0011921313, + 0.0057146065, + -0.015622465, + 0.010375701, + 0.00849047, + 0.006352258, + -0.0023946592, + -0.009433086, + -0.007901335, + 0.01621853, + 0.012704516, + -0.0065948428, + -0.0037704618, + 0.003167465, + -0.007048823, + -0.02636551, + -0.010743044, + -0.002940475, + 0.0076587508, + 0.013203547, + 0.0054512285, + 0.0013784019, + -0.0005761391, + 0.008871675, + -0.035874836, + -0.00025428092, + 0.017784936, + -0.021139538, + -0.011443075, + -0.011810417, + -0.02477138, + -0.013709511, + -0.021319743, + 0.016592804, + -0.012607482, + -0.015650189, + -0.0017076242, + -0.039700747, + -0.016010601, + 0.020765264, + -0.025921926, + 0.0051289373, + -0.008227092, + 0.0037704618, + -0.0067923763, + 0.046520844, + -0.013619407, + -0.0029040873, + 0.0058324332, + -0.005385384, + 0.0034568342, + 0.020418715, + -0.010847009, + -0.016939355, + 0.007346856, + -0.010382632, + -0.006546326, + -0.0097380495, + 0.023288148, + 0.016925493, + -0.016232394, + 0.027640812, + -0.013959026, + -0.016925493, + -0.00084731425, + -0.005551728, + -0.02136133, + 0.014090715, + 0.044053413, + 0.01447192, + -0.00060559576, + -0.0019372134, + 0.013605545, + -0.0006012639, + -0.019018654, + 0.0021018246, + 0.030856794, + 0.010763837, + -0.016010601, + 0.013515443, + 0.012323311, + -0.009135053, + 0.025145654, + -0.01760473, + 0.04410886, + -0.0073607177, + 0.0047026807, + 0.013113445, + 0.015109572, + -0.013418408, + -0.13895261, + -0.031272653, + 0.012129243, + 0.038647234, + 0.0032229132, + 0.02122271, + 0.008573642, + 0.0056314343, + 0.012940169, + 0.020862298, + -0.022816839, + -0.02212374, + 0.005447763, + 0.020973194, + 0.018741414, + -0.009377638, + -0.0021936602, + -0.023620835, + -0.012011416, + 0.022719806, + -0.0068998067, + -0.0014633066, + 0.0105767, + 0.006068087, + 0.008441953, + 0.008726124, + -0.020474162, + 0.021264296, + 0.012448069, + 0.0005076955, + 0.0013558761, + -0.023288148, + 0.019642442, + -0.036900625, + -0.0150264, + 0.024341658, + -0.009398431, + 0.000066169356, + 0.026102131, + -0.035375804, + 0.003411783, + -0.0036283764, + 0.024438692, + -0.02136133, + -0.007977577, + 0.0022733668, + -0.015650189, + 0.020224646, + 0.013903578, + -0.02073754, + -0.030302314, + 0.003527877, + -0.00959943, + -0.009356845, + 0.01940679, + -0.015469983, + -0.0005536133, + 0.024161452, + -0.004245235, + -0.0033060852, + 0.0023513404, + -0.009051881, + -0.0055274693, + 0.0034499033, + 0.0066260323, + 0.005343798, + -0.013321375, + -0.009211293, + 0.010458873, + -0.0014451126, + 0.0025367446, + 0.014901642, + -0.005420039, + 0.026670473, + -0.031050863, + -0.0069552544, + -0.015761085, + -0.0037600654, + 0.010950974, + -0.03069045, + -0.010978698, + -0.0155808795, + 0.006262155, + -0.0010517787, + 0.020196922, + 0.020890022, + 0.024854552, + 0.006137397, + 0.0030323109, + -0.0071943738, + 0.008608297, + -0.0058601573, + 0.023814902, + -0.0197672, + 0.008344919, + -0.00723596, + 0.012205484, + -0.021056365, + -0.007277546, + 0.02665661, + -0.02832005, + -0.02366242, + -0.10518479, + 0.017701764, + -0.0063487925, + -0.0024709, + 0.0029266132, + -0.002706554, + -0.0002720416, + -0.008109265, + 0.0049348692, + -0.037732344, + -0.03276975, + 0.013155031, + -0.0077141984, + 0.0068270313, + -0.031189483, + -0.014804607, + 0.026947713, + 0.018034453, + -0.0025280807, + -0.0100014275, + 0.00006822699, + 0.0013818673, + 0.012198553, + 0.016800735, + -0.024064418, + -0.005586383, + 0.011775763, + -0.0067750486, + -0.014160025, + 0.0057908474, + 0.0016253185, + -0.024549589, + 0.0033615332, + 0.040948324, + -0.004120477, + -0.01585812, + -0.03742738, + 0.01474916, + 0.012884722, + 0.0204603, + -0.023745593, + -0.026698196, + 0.025755582, + -0.017285904, + 0.014166956, + 0.021070229, + 0.0013264194, + 0.02400897, + 0.020903884, + 0.008220161, + -0.005822037, + 0.022068292, + 0.009897462, + -0.01843645, + -0.021264296, + -0.020931609, + 0.01642646, + 0.027640812, + 0.013965957, + -0.020987056, + 0.031633068, + 0.011962899, + 0.017355215, + -0.005402711, + 0.003238508, + -0.02170788, + -0.020557335, + -0.01405606, + -0.006255224, + -0.026060546, + -0.015733361, + -0.011644074, + 0.020432577, + 0.0064596883, + 0.034682706, + -0.006553257, + -0.00090622774, + -0.0044843545, + 0.0063765165, + 0.03160534, + -0.004879421, + 0.012829274, + -0.0456614, + 0.020820713, + 0.013563959, + 0.0033961881, + -0.014430334, + -0.016066048, + -0.021305881, + 0.020141475, + 0.019753339, + 0.010084599, + 0.02463276, + -0.010819285, + -0.003086026, + 0.01426399, + 0.019309755, + -0.019711753, + 0.0016504434, + 0.014638264, + 0.003673428, + -0.011290593, + -0.025977373, + -0.0016920294, + -0.018685965, + -0.013945164, + -0.026850678, + -0.022442566, + -0.0065740496, + 0.013702579, + 0.0093360515, + 0.021097952, + 0.008663745, + 0.02991418, + -0.0045605954, + 0.0057908474, + 0.00723596, + -0.014652126, + -0.026864542, + 0.017577006, + 0.046160433, + 0.019434514, + 0.028555704, + 0.0032575682, + 0.014180818, + 0.003694221, + -0.005489349, + -0.03681745, + 0.01767404, + -0.0073329937, + 0.0022491082, + -0.013861992, + -0.016454184, + -0.0030548365, + -0.008587504, + 0.0012934972, + 0.0026961574, + 0.018783, + -0.032242995, + 0.049431864, + -0.018519621, + -0.015885843, + -0.0016253185, + -0.005343798, + 0.017646316, + 0.00240159, + 0.018186934, + -0.032326166, + -0.005752727, + 0.007915198, + 0.0013454796, + 0.013758027, + -0.009065743, + -0.010535114, + -0.0056452965, + -0.040976048, + 0.0027117522, + -0.019850373, + 0.001718887, + 0.03415595, + 0.01495709, + 0.015899705, + 0.012552034, + -0.025686271, + -0.020474162, + 0.011498523, + 0.0055136075, + 0.00008230558, + -0.012053003, + 0.013314444, + -0.009751911, + -0.038924474, + -0.03096769, + -0.0020238508, + -0.0019891958, + -0.011165835, + -0.003458567, + 0.0043041487, + 0.014638264, + -0.0064388956, + 0.0429999, + -0.011290593, + -0.029526044, + 0.0103964945, + -0.0064354297, + -0.007346856, + -0.013584753, + -0.0008802365 + ] + }, + { + "object": "embedding", + "index": 8, + "embedding": [ + 0.009350771, + 0.009786559, + -0.01786732, + -0.019336548, + -0.015128078, + 0.021042347, + -0.0039781244, + 0.0101414155, + -0.0073212427, + -0.022760598, + -0.0052387975, + -0.017605845, + -0.0019626035, + 0.0015789543, + -0.0068294243, + -0.010309505, + 0.024877284, + -0.01834046, + 0.0199342, + -0.016559953, + -0.017232312, + 0.0049928883, + 0.010365535, + -0.020320185, + -0.01778016, + -0.009294741, + 0.020594107, + -0.017369274, + 0.01035931, + -0.012401288, + 0.0040870714, + -0.012606732, + -0.014517974, + -0.007065995, + -0.007651197, + 0.0016030782, + -0.010570978, + 0.0049493094, + 0.022013532, + -0.0120153045, + 0.010620782, + 0.007993601, + -0.0017664988, + -0.012899333, + -0.0125258, + 0.026396317, + 0.00578042, + 0.011237112, + -0.019423705, + 0.009051945, + 0.0015486047, + 0.024105316, + -0.026744947, + -0.0077508055, + -0.020145869, + 0.0050738202, + -0.003922094, + 0.0116417715, + 0.0064683426, + 0.0032559608, + -0.017070448, + -0.022038434, + -0.026744947, + 0.0040995223, + 0.0028481875, + 0.006848101, + -0.0024575344, + 0.02769123, + 0.011511035, + 0.014343659, + 0.026495926, + 0.0036699597, + 0.00774458, + 0.010919608, + 0.020195672, + 0.009649597, + -0.008118113, + 0.0014038607, + -0.015464257, + -0.0052387975, + 0.0093943495, + -0.025549643, + -0.011666674, + 0.019510863, + 0.011498584, + -0.00097429805, + -0.0026707593, + 0.030505178, + 0.0049306327, + 0.008746893, + -0.009425477, + 0.01035931, + -0.011897019, + 0.0026349626, + -0.017356824, + 0.007956249, + -0.008846502, + 0.043429412, + -0.021465685, + -0.015078274, + 0.0199342, + -0.01926184, + -0.024566006, + -0.006985063, + -0.02071862, + -0.0132853165, + -0.0037415535, + 0.01093206, + 0.0101414155, + -0.006356283, + -0.010440242, + 0.017443981, + 0.02482748, + -0.052543614, + 0.02017077, + -0.022810403, + -0.008566352, + -0.03314481, + -0.016522601, + -0.027591622, + 0.021814315, + 0.01790467, + 0.009356996, + -0.0040652817, + 0.031177538, + -0.013472083, + 0.0033337802, + -0.00677962, + -0.0057586306, + 0.0029633602, + 0.012637859, + 0.007912669, + 0.020320185, + 0.0034147121, + -0.030032037, + 0.014206697, + -0.014331208, + 0.029783014, + -0.0082737515, + -0.02928497, + -0.007850414, + 0.024640713, + -0.014704741, + 0.0032995397, + 0.0018754458, + 0.023818942, + -0.009313418, + -0.016908584, + 0.0019750546, + -0.00842939, + 0.019373901, + -0.0027719245, + 0.010197445, + -0.01810389, + 0.0039999136, + 0.0049991137, + 0.016211323, + 0.028986145, + -0.012488446, + 0.0039968006, + 0.0029898188, + 0.0067920713, + 0.023756685, + -0.0108947065, + 0.019734982, + -0.0012334364, + 0.020133417, + 0.02084313, + 0.01778016, + -0.013297767, + -0.002745466, + 0.004955535, + -0.043653533, + 0.015190333, + 0.02711848, + 0.036406998, + 0.008037181, + -0.003869177, + -0.012475995, + 0.0006050453, + -0.027143383, + 0.011125051, + 0.027641427, + 0.036382094, + -0.032024212, + -0.003925207, + 0.029608699, + -0.013721105, + 0.022710793, + -0.014493072, + 0.007346145, + 0.018016731, + 0.013982577, + -0.022486674, + -0.6984565, + -0.0059111565, + -0.009139102, + 0.017717905, + 0.010104062, + 0.01458023, + 0.009020817, + 0.0046069045, + -0.028388493, + 0.011430103, + -0.03292069, + 0.0051423013, + -0.001163399, + 0.013111001, + -0.005506496, + -0.006767169, + 0.0018380926, + 0.008958561, + 0.017693004, + -0.009008366, + 0.0046753855, + 0.03053008, + -0.00859748, + -0.012183394, + 0.023582371, + 0.0059329458, + 0.020569205, + -0.024279632, + 0.003336893, + 0.006935259, + -0.025699057, + 0.021702254, + 0.0033835846, + 0.012899333, + 0.04965496, + -0.011149954, + -0.023246191, + 0.017356824, + 0.012799724, + 0.030928515, + 0.0009065952, + 0.0019812803, + 0.009525086, + -0.016074361, + 0.0025664815, + 0.006848101, + 0.014268952, + 0.0048403624, + 0.008248849, + -0.011766283, + 0.0003920149, + -0.024429044, + -0.02482748, + -0.006848101, + -0.0125258, + 0.00035641255, + 0.019971553, + -0.009506409, + -0.00035193792, + 0.003772681, + -0.008995915, + 0.0022552041, + -0.010346858, + -0.022138044, + 0.011336721, + 0.019759884, + 0.008342233, + -0.0015447137, + 0.0029135558, + -0.006331381, + 0.0007684659, + 0.037652105, + -0.0044979574, + -0.009774108, + -0.014107089, + -0.008759344, + 0.02893634, + -0.03282108, + 0.0012847972, + -0.008989689, + 0.023171484, + 0.011654223, + -0.04532198, + 0.005627894, + 0.04009252, + -0.013297767, + -0.012233199, + -0.006673786, + 0.013982577, + 0.002146257, + 0.016983291, + 0.01697084, + -0.030032037, + -0.0020310846, + -0.0023299109, + 0.022723245, + 0.0016871231, + 0.01013519, + -0.0021431444, + -0.0039625606, + -0.0022396403, + -0.020606559, + -0.0058862544, + -0.008323556, + -0.0045882277, + 0.0023999482, + -0.010813775, + 0.030305961, + 0.023495212, + -0.033294223, + -0.017269665, + -0.009537538, + -0.0069663865, + 0.0025836017, + 0.017157607, + -0.025649251, + 0.008547676, + 0.022312358, + 0.025923176, + -0.0051018354, + 0.022598734, + 0.0012972483, + 0.025275718, + -0.014654936, + -0.010857353, + 0.008342233, + -0.0014287629, + -0.019797238, + -0.0106705865, + 0.007190506, + 0.0012995829, + 0.004575777, + 0.031725384, + -0.0058955927, + 0.040715072, + 0.018850954, + 0.023246191, + -0.010981864, + 0.00096495973, + -0.014156893, + -0.023183934, + -0.0084231645, + -0.0054753684, + -0.00407462, + 0.0051516397, + -0.038125247, + 0.0007918117, + 0.0003772292, + -0.03961938, + 0.0066613345, + -0.013945224, + 0.0020559868, + -0.02644612, + -0.009942198, + -0.010041807, + -0.004491732, + -0.0077757076, + 0.0044761677, + -0.01548916, + -0.006617756, + -0.0025649252, + 0.011535938, + -0.026371416, + -0.01179741, + 0.00016799248, + 0.004052831, + 0.013272865, + 0.014978665, + -0.00979901, + -0.0050738202, + -0.014293855, + -0.0068294243, + -0.011909471, + 0.0050738202, + 0.024976892, + -0.0064060874, + -0.005089384, + -0.008441841, + -0.0009680725, + 0.017307019, + 0.017282117, + -0.02061901, + -0.017369274, + -0.004404574, + 0.03406619, + -0.0075702644, + 0.0083484575, + 0.01926184, + -0.0064870194, + 0.0054442403, + -0.0014684508, + -0.0066675604, + 0.009668274, + 0.010048032, + 0.00016653337, + 0.013945224, + 0.0010521173, + -0.015053371, + 0.024690518, + 0.015289942, + 0.021889022, + 0.004270725, + 0.025213463, + 0.004874603, + 0.010956962, + -0.012314131, + 0.00037158732, + -0.021889022, + 0.028687319, + 0.0036326065, + 0.0273426, + -0.014667387, + -0.023868745, + 0.004980437, + -0.0076636476, + 0.040266834, + 0.0014559997, + 0.0114923585, + -0.02380649, + -0.016223773, + 0.0016559954, + -0.029434383, + -0.0012023087, + 0.011430103, + -0.03620778, + 0.024080414, + 0.0064496663, + 0.01947351, + -0.0015003567, + -0.013297767, + -0.025400229, + -0.0068605524, + -0.0023143468, + 0.015426904, + -0.03361795, + -0.0060574566, + 0.0071407016, + -0.019523313, + 0.026222002, + -0.010184994, + 0.00831733, + 0.0011462787, + 0.02096764, + -0.0153771, + 0.013272865, + -0.0068543265, + 0.03155107, + 0.011809861, + -0.014119539, + -0.0030007134, + -0.0018956789, + 0.009562439, + -0.0059329458, + -0.0047967834, + 0.010633233, + -0.021677352, + 0.017356824, + -0.0060792463, + 0.011093924, + 0.0062255464, + 0.0035796892, + -0.007651197, + 0.019099977, + 0.0071407016, + -0.0102908285, + 0.007134476, + 0.027641427, + 0.011000541, + -0.023208838, + -0.004146214, + 0.0007427855, + -0.017431531, + -0.003361795, + -0.008448066, + 0.027990056, + -0.017443981, + -0.0068543265, + -0.019448608, + 0.009649597, + 0.018191047, + 0.004924407, + -0.026396317, + -0.0057461793, + 0.019585568, + -0.010770195, + -0.031775188, + -0.026645338, + 0.008217721, + -0.005696375, + 0.02654573, + 0.015862692, + 0.03394168, + -0.0057150517, + -0.006574177, + -0.013472083, + -0.014368561, + 0.04245823, + -0.008522773, + 0.0058208858, + -0.009562439, + -0.011542163, + -0.022723245, + -0.000067702815, + -0.007153153, + 0.029783014, + -0.0033960356, + -0.00814924, + -0.009220035, + -0.0070535443, + -0.0041306503, + 0.014841703, + 0.007781933, + -0.0066800113, + 0.023507664, + 0.015825339, + 0.017929574, + -0.0080434065, + 0.015651023, + 0.008242624, + -0.0030972094, + -0.006574177, + -0.019884396, + -0.022511575, + -0.0117911855, + 0.09965855, + 0.0028326237, + -0.0015307063, + -0.0024948877, + 0.0051236246, + -0.007041093, + -0.0038505006, + 0.0007828625, + 0.0066800113, + 0.023731783, + 0.010116513, + -0.028438296, + -0.0016108601, + 0.023756685, + -0.0039625606, + -0.0019236938, + -0.017095352, + 0.00017830354, + 0.0058582393, + -0.0060201036, + 0.023818942, + -0.025823567, + 0.020980092, + 0.02517611, + -0.0072527616, + 0.0016917923, + 0.009637146, + 0.001219429, + 0.0041368757, + -0.0035392232, + -0.013347572, + 0.010004453, + -0.01037176, + 0.011890794, + 0.002588271, + -0.0022489787, + 0.027865546, + 0.011753832, + 0.022822853, + -0.009307192, + 0.0006536824, + 0.008292428, + 0.01778016, + -0.012164718, + 0.036954843, + -0.033792265, + -0.00032878667, + 0.013833164, + -0.020195672, + -0.007893993, + 0.025524741, + 0.006399862, + -0.021465685, + 0.0066239815, + -0.0041711163, + 0.011822313, + -0.00900214, + -0.010975638, + -0.012096236, + 0.0102908285, + -0.004379672, + -0.039818596, + 0.004224033, + -0.002849744, + -0.0055625257, + -0.021141956, + -0.018203499, + 0.016485248, + -0.016522601, + -0.0048528137, + 0.0091142, + -0.039818596, + -0.008553901, + 0.011977951, + 0.0041648904, + -0.019909298, + 0.021428332, + -0.011324269, + 0.0012295455, + 0.031775188, + -0.0114176525, + -0.0058831414, + -0.023632174, + -0.008267526, + -0.036157973, + 0.015314844, + 0.025524741, + -0.01400748, + -0.024553556, + 0.004507296, + 0.0072714384, + 0.0050177905, + 0.015887594, + 0.015464257, + -0.005643458, + -0.0055251727, + -0.006393636, + 0.02359482, + -0.009736755, + -0.012787272, + 0.014231599, + -0.02597298, + 0.009954649, + 0.0043734466, + 0.019996455, + 0.029982232, + 0.0109694125, + 0.013833164, + -0.033194613, + -0.00785664, + 0.021814315, + -0.038897216, + 0.030853808, + 0.022237653, + -0.015078274, + 0.022225201, + 0.0072527616, + 0.022088239, + 0.012158493, + 0.0033804718, + -0.010458918, + -0.02050695, + 0.008852727, + 0.010514948, + -0.004423251, + 0.009556214, + -0.0075951666, + -0.019311646, + -0.02277305, + 0.006010765, + -0.007893993, + 0.008914983, + -0.020071162, + -0.004765656, + -0.026969068, + 0.00054084434, + -0.00535397, + 0.010284603, + -0.009232486, + -0.013260414, + -0.007875317, + -0.0017073561, + 0.011286916, + -0.0073087914, + -0.042856663, + -0.017057998, + 0.006960161, + -0.000019102214, + -0.017356824, + 0.017630748, + -0.007999827, + 0.029907525, + -0.008410714, + 0.0017166944, + -0.008360909, + -0.015028469, + -0.0077757076, + -0.02689436, + 0.0070908973, + 0.01844007, + 0.027741035, + 0.00053033873, + 0.018751346, + -0.02119176, + -0.013322669, + -0.0052387975, + 0.0037104257, + 0.0031625775, + -0.015514062, + 0.012849528, + 0.019162232, + -0.008006053, + -0.004376559, + 0.026794752, + -0.013907871, + 0.020220576, + -0.023781588, + -0.011187307, + -0.0057866457, + -0.009761657, + -0.027492013, + -0.032621864, + -0.00024357451, + 0.006290915, + -0.011112601, + -0.0005914269, + 0.019660275, + 0.0031485702, + 0.0007330581, + 0.00010777977, + 0.009549988, + -0.004625581, + 0.028039861, + 0.007346145, + -0.01548916, + -0.018203499, + -0.011573291, + -0.009276064, + -0.013036294, + 0.022524027, + 0.0061664036, + -0.0070099654, + 0.0016155293, + 0.011604419, + 0.010278378, + 0.028562807, + 0.0222003, + 0.00700374, + 0.01571328, + -0.01834046, + -0.017892221, + -0.012283003, + -0.008410714, + -0.027890448, + -0.00450107, + 0.012538251, + -0.004245823, + 0.027267894, + -0.026047686, + -0.017518688, + 0.014754545, + 0.0027781501, + 0.012426191, + 0.00889008, + 0.032422647, + 0.009861265, + 0.017307019, + -0.022648538, + 0.02858771, + -0.0069539356, + -0.0079002185, + 0.023408055, + 0.032995395, + 0.0012217636, + -0.024528652, + -0.01719496, + 0.009257387, + 0.0062255464, + 0.00246376, + 0.029110655, + -0.0037353279, + -0.0050831586, + -0.01800428, + -0.012550701, + -0.02836359, + 0.015128078, + -0.006574177, + 0.0053633084, + -0.016734269, + -0.018539678, + -0.0115670655, + -0.0070099654, + -0.00752046, + 0.013845615, + -0.0060325544, + -0.014742094, + -0.0069228075, + 0.004009252, + -0.015887594, + 0.022760598, + 0.017493786, + 0.0069103567, + -0.013609044, + -0.0013330452, + 0.018203499, + 0.018415166, + -0.006110374, + 0.00037431097, + 0.0033991484, + 0.011847215, + -0.009593567, + -0.016771622, + 0.0033804718, + 0.0059889755, + 0.015563866, + 0.0032839759, + 0.008964787, + -0.0018536565, + 0.00350187, + -0.0046598217, + 0.0058582393, + 0.02084313, + -0.0011244894, + -0.012837077, + -0.02516366, + -0.014268952, + -0.011075247, + -0.009020817, + 0.030505178, + -0.010353084, + -0.0032466224, + -0.006785846, + -0.018066537, + 0.00837336, + -0.00063578394, + 0.0064434404, + 0.014194246, + 0.018938113, + -0.015140529, + 0.022262555, + 0.020519402, + 0.0159623, + -0.010346858, + 0.004958648, + -0.0040559433, + -0.0060574566, + 0.01765565, + -0.019062623, + -0.011523486, + -0.029982232, + -0.005064482, + 0.002423294, + -0.008753118, + -0.00046963966, + 0.034589138, + -0.0058551263, + -0.007128251, + -0.00635317, + -0.017443981, + 0.032646764, + -0.015140529, + 0.010321956, + 0.008585028, + -0.01685878, + -0.004834137, + 0.030380666, + -0.00046069044, + -0.0012388837, + -0.0025291282, + -0.019299194, + 0.011106375, + 0.021490587, + 0.0011844102, + -0.025997883, + -0.0056341197, + -0.014069735, + -0.0046971748, + 0.024541104, + -0.0033151035, + 0.0054847063, + 0.0122394245, + 0.020295281, + 0.04646748, + -0.00635317, + -0.015277491, + -0.025076501, + -0.0006015434, + -0.0042084693, + -0.036307387, + -0.017008193, + -0.01572573, + 0.013521887, + -0.0023345798, + -0.009817687, + -0.025524741, + 0.006505696, + -0.030256156, + -0.0058177733, + -0.007881542, + 0.014505523, + 0.014941311, + 0.0233458, + 0.007134476, + 0.008560127, + 0.009332094, + 0.024478849, + -0.004336093, + -0.006244223, + 0.028388493, + -0.022872658, + 0.0170829, + -0.017232312, + -0.018191047, + 0.011878342, + 0.01355924, + 0.0010980307, + 0.016460344, + 0.008684637, + -0.04046605, + -0.013086099, + -0.0120153045, + 0.013658849, + -0.008279976, + 0.01790467, + 0.000060066795, + -0.021278918, + 0.0008404488, + 0.018763797, + -0.010054258, + 0.0010139858, + 0.0055936533, + -0.00020719397, + -0.019050172, + 0.01628603, + -0.027716134, + -0.0043454315, + 0.022735696, + -0.030380666, + 0.0307542, + -0.009288515, + 0.0027190074, + 0.012656536, + -0.013833164, + -0.0033835846, + -0.010415339, + 0.004230259, + -0.01948596, + -0.02198863, + 0.025375327, + -0.018763797, + -0.001550161, + 0.011461231, + 0.011249563, + -0.03792603, + -0.0017353711, + 0.00535397, + -0.0075764903, + -0.0054131127, + 0.012027755, + 0.024167571, + -0.012787272, + -0.0068294243, + -0.0053352932, + -0.016547503, + -0.008778021, + -0.008242624, + 0.008435615, + -0.005024016, + -0.008553901, + 0.011934373, + -0.009039493, + -0.033767365, + -0.0041368757, + 0.0011104819, + 0.015078274, + -0.006505696, + 0.21395957, + -0.017394178, + -0.003489419, + 0.029758113, + 0.0016855667, + 0.028114568, + 0.032173626, + 0.0016248677, + -0.0023968355, + 0.0039999136, + -0.04044115, + 0.015588769, + -0.010340633, + -0.002331467, + -0.0099982275, + -0.009898619, + -0.02243687, + -0.05174674, + -0.012812175, + -0.016236225, + -0.010508723, + -0.006549275, + 0.0019221375, + -0.009531312, + 0.024105316, + 0.014704741, + -0.009008366, + -0.008634833, + 0.017244764, + 0.003405374, + 0.0043454315, + -0.0018178596, + -0.017406628, + 0.004553987, + -0.0028995483, + -0.0056683603, + -0.014804349, + -0.008279976, + 0.009693176, + 0.031177538, + -0.010602105, + -0.0055220597, + -0.000547459, + -0.008641059, + -0.016086813, + 0.016323382, + -0.009817687, + -0.0069663865, + -0.009556214, + 0.03212382, + -0.035410907, + -0.0040995223, + 0.01435611, + 0.02711848, + -0.0016077474, + -0.024902185, + 0.03543581, + 0.011915696, + -0.0056901495, + -0.0244913, + -0.019411255, + 0.003694862, + -0.01179741, + -0.004102635, + 0.0036077043, + 0.009792784, + -0.03394168, + -0.008186594, + 0.00842939, + 0.0027081128, + -0.0008957005, + -0.0020715506, + -0.013571692, + 0.00535397, + -0.021689804, + -0.047314152, + 0.023980806, + 0.00572439, + -0.0010684595, + 0.025948077, + 0.0018629947, + 0.003392923, + 0.02095519, + 0.007047319, + 0.008435615, + -0.023308447, + 0.008329781, + 0.012146041, + -0.009693176, + -0.015302394, + -0.0052823764, + -0.03259696, + -0.0018738895, + -0.008354683, + 0.015551415, + 0.007931346, + 0.019423705, + 0.026072588, + -0.014393464, + -0.006216208, + -0.016721819, + -0.013982577, + 0.018290656, + 0.008921208, + -0.002182054, + 0.0056652473, + 0.009680725, + -0.002339249, + -0.02699397, + -0.023420505, + 0.003349344, + -0.019075075, + -0.0031828107, + -0.006069908, + 0.005659022, + 0.011517261, + 0.008143015, + -0.009027042, + 0.01122466, + -0.018215949, + 0.0035610127, + -0.01697084, + 0.009076847, + 0.002182054, + 0.00963092, + -0.012861979, + -0.014443268, + 0.005627894, + -0.018938113, + -0.04360373, + 0.0030100518, + -0.0075702644, + 0.007165604, + -0.018626835, + -0.023706881, + 0.0069477097, + 0.008821599, + -0.009300967, + -0.013086099, + -0.0044730552, + 0.011349171, + -0.0005221677, + 0.014156893, + -0.0065679518, + -0.021241564, + -0.009325868, + 0.0029400142, + 0.0028248418, + -0.018315557, + 0.00768855, + -0.0060885847, + -0.0020388665, + -0.008099436, + -0.03040557, + 0.038324464, + -0.0067609437, + 0.0004435702, + -0.02644612, + 0.011012992, + 0.025076501, + -0.021428332, + -0.017580943, + 0.034140896, + -0.009780333, + -0.00870954, + 0.01719496, + -0.15857711, + 0.022001082, + 0.016522601, + 0.0043734466, + 0.017008193, + -0.003498757, + 0.0074021746, + 0.004507296, + -0.012283003, + -0.002568038, + 0.029434383, + 0.00074084004, + -0.026969068, + -0.019236939, + -0.020220576, + -0.02050695, + -0.0022567606, + 0.00067975186, + 0.0091142, + 0.008130563, + 0.024404142, + -0.026097491, + 0.02323374, + -0.007153153, + -0.002684767, + -0.010676812, + -0.017693004, + 0.018888308, + -0.018601933, + -0.015215236, + -0.022050885, + 0.0029804804, + 0.02004626, + -0.00027548044, + -0.0044574915, + 0.019535765, + 0.0029726985, + -0.006960161, + -0.016086813, + 0.0050395797, + 0.017580943, + 0.014281403, + -0.009145328, + 0.0018209723, + -0.00044084652, + 0.02574886, + 0.008006053, + -0.010639459, + -0.004189793, + 0.011915696, + 0.020033808, + -0.008441841, + 0.013521887, + -0.0015447137, + -0.0007704114, + 0.0067982967, + 0.005939171, + -0.011069022, + -0.0035454486, + -0.008883855, + -0.021963729, + -0.005587428, + 0.0009276064, + -0.01469229, + 0.00012460821, + -0.007962474, + -0.019286742, + 0.0041804546, + -0.009232486, + 0.01695839, + -0.009294741, + -0.024155121, + 0.020096064, + -0.014903958, + 0.02439169, + 0.011131277, + -0.013609044, + 0.021590196, + 0.017344372, + 0.0010015348, + 0.0061165993, + 0.05772327, + -0.012077561, + 0.033792265, + -0.0030380667, + -0.0035298849, + -0.0046878364, + 0.006823199, + -0.02312168, + -0.0040279287, + 0.017892221, + -0.009039493, + -0.023457859, + -0.008852727, + 0.00086146, + 0.019336548, + -0.0011190419, + 0.018016731, + -0.018191047, + -0.010832451, + 0.016310932, + 0.0018443181, + -0.020755973, + 0.014667387, + 0.052792635, + 0.025599448, + 0.019236939, + -0.00009931692, + 0.010303279, + 0.0273426, + -0.033294223, + -0.017605845, + -0.00025446923, + 0.026122393, + -0.020071162, + -0.009973326, + 0.020282831, + -0.028438296, + 0.018850954, + -0.011511035, + 0.05184635, + 0.006574177, + -0.00450107, + 0.009294741, + -0.02232481, + -0.009076847, + -0.073063016, + -0.030828906, + 0.00889008, + 0.011025443, + -0.01309855, + 0.018502325, + -0.0023034522, + -0.014991116, + 0.013073647, + 0.008591254, + -0.017506236, + -0.011872117, + 0.012812175, + -0.005481594, + 0.04350412, + -0.00046730507, + -0.0043018525, + -0.014854154, + 0.0006136054, + 0.0027999396, + -0.016609758, + 0.009736755, + 0.0008567908, + -0.0020217462, + -0.021714706, + 0.0005034911, + -0.029484188, + 0.003990575, + 0.0054566916, + 0.02232481, + -0.007389724, + -0.023408055, + -0.0009618469, + -0.009942198, + -0.0033835846, + 0.0066924626, + -0.013360023, + 0.006371847, + 0.023632174, + -0.021328723, + -0.0153895505, + 0.008877629, + 0.01019122, + -0.022872658, + -0.008784246, + -0.014679839, + -0.0061290506, + 0.021839216, + 0.0045664385, + -0.008678412, + 0.0042489353, + -0.0012591168, + -0.015738182, + -0.019734982, + 0.00837336, + -0.016833877, + 0.008553901, + 0.022710793, + -0.006371847, + 0.017232312, + -0.016846329, + 0.00013355743, + -0.028438296, + 0.035933856, + -0.0053477446, + 0.005546962, + -0.024242278, + -0.0027236766, + 0.0188136, + -0.016945938, + -0.0092449365, + -0.012656536, + -0.025026698, + 0.0032279459, + -0.017580943, + 0.0039594476, + -0.0024668728, + 0.0066924626, + 0.0025991658, + -0.01604946, + -0.010377986, + -0.02562435, + 0.0010007566, + -0.011398976, + 0.028089665, + 0.012563153, + 0.0077881585, + -0.0025820455, + -0.0061197123, + -0.009960874, + 0.0018738895, + 0.0074208514, + 0.025948077, + -0.014829252, + -0.010060484, + 0.035037376, + -0.0010894707, + -0.012774821, + 0.014966214, + 0.013360023, + -0.020195672, + -0.020369988, + -0.08611176, + 0.015165431, + 0.0094690565, + -0.01150481, + 0.02117931, + 0.0109694125, + 0.017481335, + -0.0013789586, + -0.005929833, + 0.007221634, + -0.04908221, + -0.008622382, + -0.0153895505, + 0.016024556, + -0.012220748, + -0.012283003, + 0.021503037, + 0.025823567, + -0.009437929, + 0.021789413, + 0.007701001, + -0.0096184695, + 0.00214937, + 0.00050504744, + -0.013584143, + 0.004939971, + -0.010508723, + 0.02744221, + -0.027018871, + -0.008952335, + 0.030106742, + -0.034265406, + -0.0049773245, + 0.02368198, + 0.009805236, + -0.021390978, + 0.00883405, + 0.0035454486, + -0.003486306, + 0.019984005, + -0.006586628, + -0.020681266, + 0.016759172, + -0.013633947, + -0.0070535443, + -0.014791898, + 0.0159623, + 0.012812175, + 0.00876557, + 0.021042347, + 0.0016731157, + 0.035037376, + -0.007234085, + -0.008759344, + -0.011069022, + -0.016896132, + 0.016659562, + 0.017929574, + 0.009724304, + -0.027765937, + 0.014430817, + -0.015787985, + -0.0064683426, + 0.016659562, + 0.02756672, + -0.022387065, + -0.017506236, + 0.005136076, + 0.018987916, + -0.027392404, + -0.01733192, + -0.012594281, + 0.022287456, + 0.009431703, + 0.021602646, + 0.013945224, + 0.020245478, + -0.008124338, + -0.03907153, + 0.026520828, + 0.00017139707, + 0.0072527616, + -0.031376753, + 0.0097678825, + 0.024989344, + -0.0009073734, + -0.020980092, + -0.020942738, + -0.007109574, + 0.02836359, + -0.0076138433, + -0.0033244418, + 0.01799183, + -0.0011307149, + 0.0013875187, + 0.0076823244, + -0.007277664, + 0.0027548042, + -0.00780061, + 0.03658131, + 0.01832801, + 0.0019174683, + -0.023719331, + -0.02836359, + -0.016896132, + 0.026969068, + 0.012270552, + -0.023669528, + -0.006561726, + 0.029085753, + 0.01662221, + -0.00046224683, + 0.0034489527, + 0.021764511, + -0.005789758, + 0.0082737515, + -0.0028404056, + -0.011517261, + -0.027516916, + 0.003402261, + 0.03269657, + 0.019909298, + 0.022710793, + -0.010209897, + 0.017805062, + 0.0077508055, + 0.005257474, + -0.031600874, + -0.004230259, + 0.0016653336, + -0.0009065952, + 0.006200644, + -0.016572405, + -0.024092864, + -0.007427077, + -0.011031669, + 0.022872658, + 0.011704028, + -0.016024556, + 0.043354705, + -0.008080759, + -0.010745293, + 0.0069228075, + -0.01606191, + 0.027940253, + 0.0056092176, + 0.01926184, + -0.027168285, + -0.03259696, + -0.00313145, + 0.0011571734, + -0.0026707593, + -0.034614038, + -0.0025633688, + -0.004448153, + -0.018527227, + 0.009176455, + -0.015787985, + 0.016149068, + 0.021664903, + 0.007551588, + -0.013708653, + 0.012924234, + -0.011436329, + 0.008385811, + 0.017170057, + 0.0210797, + -0.010900932, + -0.020008907, + 0.012924234, + 0.007862865, + -0.020183222, + -0.008958561, + 0.018489873, + -0.029608699, + -0.0074208514, + -0.013061197, + 0.02597298, + 0.009419252, + -0.018016731, + 0.02676985, + -0.02244932, + -0.05433657, + 0.0012054214, + 0.0016824539, + -0.009960874, + 0.0033711335, + -0.017344372 + ] + }, + { + "object": "embedding", + "index": 9, + "embedding": [ + -0.008189119, + -0.0015157744, + 0.0074148276, + -0.034777507, + -0.021128977, + 0.0044751437, + -0.019960977, + 0.020341562, + -0.017729968, + -0.0353287, + 0.022835044, + -0.0058432776, + 0.012998914, + 0.0019521337, + -0.010229837, + -0.01561707, + 0.016115766, + -0.011404398, + 0.008445029, + -0.0051181996, + -0.008208805, + 0.027297063, + -0.010879455, + -0.008215366, + 0.0019783808, + 0.0065093, + -0.002918358, + -0.016535722, + 0.0061976146, + -0.024475493, + 0.013307318, + -0.028793152, + -0.024449244, + -0.037244745, + 0.011791544, + -0.011798106, + -0.015984531, + -0.008733748, + 0.006151682, + -0.009494917, + 0.012887363, + -0.011023814, + -0.003313706, + -0.010026421, + -0.021404572, + 0.015722059, + -0.0073098387, + -0.003343234, + -0.028688164, + 0.006670064, + 0.021535808, + 0.022441337, + -0.0248692, + 0.0019258866, + -0.025590997, + -0.013806015, + -0.015577699, + -0.0004457919, + -0.017323136, + -0.010761342, + -0.0062993225, + -0.01956727, + -0.015630193, + 0.024081785, + 0.0025951895, + -0.018438641, + -0.0024196615, + 0.0134385545, + 0.0038714586, + 0.02171954, + 0.030525466, + -0.0061352775, + 0.012847993, + -0.0032087173, + 0.014212846, + 0.0012319769, + -0.019829743, + 0.013333566, + -0.0075263777, + 0.0059023337, + 0.004183144, + -0.042940382, + -0.030079264, + 0.026247177, + 0.017415002, + 0.009199635, + -0.031549107, + 0.023950549, + -0.006975187, + -0.0041929865, + 0.022034505, + 0.021916393, + 0.022467583, + 0.0011507747, + -0.032756478, + 0.014147229, + -0.0021407853, + 0.037717193, + -0.014186599, + -0.012231184, + 0.011955589, + -0.005836716, + -0.010846646, + -0.02040718, + -0.0014239093, + 0.008930602, + -0.02175891, + -0.034357555, + 0.013543543, + -0.016378239, + -0.013451678, + 0.014750914, + 0.0056398623, + -0.041234314, + -0.002867504, + -0.023071269, + 0.003335032, + -0.0158008, + -0.025840346, + -0.038609598, + 0.020538416, + 0.021772033, + 0.010754781, + -0.020367809, + 0.037795935, + 0.0056004915, + -0.00057210645, + -0.019304799, + -0.008504085, + 0.0029298412, + 0.021207718, + -0.0065093, + -0.0076576136, + 0.0034711892, + -0.013327004, + 0.023058144, + -0.033412658, + 0.009711456, + -0.018123675, + -0.035197463, + 0.0015379206, + 0.028241962, + -0.0060926257, + 0.020748394, + -0.007040805, + 0.020039719, + 0.0023310774, + 0.004842604, + 0.013195768, + -0.025407268, + 0.018661743, + -0.022808796, + 0.0075066923, + 0.0073229624, + 0.0025361334, + 0.012559274, + 0.012847993, + 0.019409787, + 0.007972579, + 0.0030331893, + -0.0024311447, + -0.007106423, + 0.030997915, + -0.034278814, + 0.020328438, + 0.016207632, + 0.012008083, + -0.0034908745, + 0.0060335696, + -0.016430732, + -0.010347949, + 0.020275945, + -0.018254912, + 0.02077464, + 0.013792891, + 0.009914871, + 0.0066208504, + 0.022716932, + -0.022231359, + -0.0051542893, + 0.007244221, + 0.008655006, + 0.007841344, + 0.028688164, + 0.0038124025, + 0.0062665134, + 0.025761604, + -0.017139407, + -0.00019572601, + -0.02282192, + -0.004406245, + 0.02398992, + 0.023635583, + -0.010846646, + -0.6702479, + -0.016666956, + -0.011286286, + -0.0068701985, + 0.017454373, + 0.0113847125, + 0.022401966, + 0.017651226, + -0.02165392, + -0.013117027, + -0.011732488, + 0.0056004915, + 0.0064469627, + -0.012933296, + -0.013963498, + -0.0033547173, + 0.01459343, + -0.0063583786, + -0.029370591, + 0.0076641757, + -0.013451678, + -0.0011868646, + -0.0036253913, + -0.004334065, + 0.024436122, + 0.0033924475, + 0.0030594366, + -0.0072639063, + -0.010525118, + 0.0064141536, + -0.03566991, + 0.016614463, + 0.018044934, + -0.0039042674, + 0.047271166, + 0.0016666957, + -0.023740571, + -0.0036549193, + 0.024344256, + 0.009389928, + 0.0054397276, + -0.0039436384, + 0.009055276, + -0.010420129, + -0.001067932, + 0.008864984, + 0.014068487, + -0.006830828, + 0.015564576, + 0.018569877, + 0.017861204, + 0.0023720886, + -0.013215453, + -0.005255997, + 0.007165479, + -0.0031102905, + 0.008733748, + 0.0010654713, + 0.019659135, + -0.009245568, + -0.004215953, + -0.005095233, + -0.036116116, + -0.008727186, + -0.01232305, + 0.014094734, + -0.010288893, + 0.0016552126, + -0.00054914015, + -0.009265253, + 0.008438467, + 0.035092477, + -0.018189294, + -0.001996426, + 0.01748062, + 0.019002955, + 0.015498958, + -0.006817704, + 0.006214019, + -0.0067783333, + 0.018373024, + 0.004275009, + -0.008536894, + 0.014107858, + 0.011620938, + -0.027218321, + -0.033412658, + 0.008641883, + 0.0015239767, + -0.0006393648, + 0.01057105, + 0.024724841, + -0.01700817, + 0.001861909, + -0.014002869, + 0.01085977, + 0.013884757, + 0.020827135, + 0.013832262, + -0.008943725, + -0.011030376, + -0.024987312, + -0.011305971, + 0.0008915838, + 0.0012877521, + 0.008038198, + 0.009245568, + 0.01155532, + 0.025039807, + -0.043622807, + 0.004199548, + -0.02128646, + -0.048583522, + -0.008674691, + 0.025722234, + -0.029239355, + 0.022428213, + -0.0057875025, + 0.016338868, + -0.014882149, + -0.0033727621, + -0.007447636, + 0.012054016, + -0.008333478, + 0.018228665, + 0.009501478, + 0.008661568, + -0.017205024, + -0.009258691, + 0.001945572, + -0.0033104252, + 0.018386148, + 0.014724666, + 0.001847145, + 0.023740571, + 0.0032497286, + 0.005416761, + -0.0147377895, + 0.0049508736, + -0.019331045, + -0.023228751, + -0.0043110987, + -0.012716757, + -0.008976534, + -0.0056234575, + -0.020538416, + -0.012382106, + -0.023058144, + -0.041890495, + 0.011647184, + -0.021496437, + -0.010282331, + -0.0408931, + 0.009711456, + -0.00541348, + -0.015328351, + 0.004275009, + -0.02194264, + 0.0049279076, + -0.0041503347, + 0.021181472, + 0.021968886, + -0.03162785, + -0.003251369, + 0.022362594, + -0.0034875935, + 0.023136886, + 0.016430732, + -0.0013189206, + -0.010708848, + -0.00113355, + -0.009567096, + 0.0021342235, + 0.0020948527, + 0.032231532, + 0.016443856, + -0.006243547, + -0.0026690098, + -0.0036221105, + -0.0005782581, + 0.00039739866, + -0.02161455, + -0.01389788, + 0.00892404, + 0.009718017, + 0.005160851, + 0.01631262, + 0.019751001, + -0.022769425, + 0.00041236775, + -0.016811317, + 0.0034318184, + -0.014829655, + 0.005761255, + -0.0048918175, + -0.00039657843, + -0.0082481755, + 0.005964671, + 0.0003272695, + 0.022113247, + 0.025315402, + -0.010892578, + 0.0017733249, + -0.005679233, + -0.006670064, + -0.031549107, + 0.012624892, + -0.02161455, + 0.021010865, + 0.0066339737, + 0.014291587, + -0.024344256, + 0.0053445813, + 0.015236486, + 0.021955764, + 0.04047315, + -0.01013141, + 0.0011868646, + 0.014396576, + 0.01013141, + -0.010807275, + -0.022953156, + -0.0036811666, + 0.0059056147, + -0.012099949, + 0.015669564, + 0.006177929, + 0.027769513, + -0.004809795, + -0.023556842, + -0.022283852, + 0.008385973, + 0.010052669, + 0.008169434, + -0.01645698, + -0.0076379282, + 0.011719365, + -0.028556928, + 0.019698506, + -0.0035597733, + 0.02556475, + -0.010741657, + 0.033780117, + 0.0023671673, + -0.005446289, + -0.00314474, + 0.032940205, + 0.005767817, + -0.024987312, + 0.02673275, + -0.014252217, + -0.00438984, + 0.00043758965, + -0.004685121, + 0.010183904, + -0.016443856, + 0.03262524, + -0.008490962, + 0.005797345, + 0.037061013, + -0.0019586955, + -0.0102495225, + 0.014803408, + 0.002326156, + 0.00047942108, + -0.018438641, + 0.029738052, + -0.010623544, + -0.007677299, + -0.010374197, + -0.010052669, + -0.01232305, + 0.031286635, + -0.021877022, + 0.011588128, + -0.028530682, + -0.004078155, + -0.013248262, + -0.0003565925, + -0.00917995, + -0.014422824, + -0.023097515, + 0.014449071, + 0.009173389, + -0.0076116812, + -0.017454373, + -0.0017536395, + 0.0048196376, + -0.008359726, + 0.051234487, + 0.0031004478, + 0.03236277, + -0.0054955026, + -0.00259683, + -0.0030692792, + -0.0050394577, + 0.029318096, + -0.017834956, + -0.010223275, + -0.017401878, + 0.018281158, + -0.010649792, + -0.008162872, + 0.0011745611, + 0.05141822, + 0.007139232, + 0.00053642667, + -0.0068964455, + -0.005922019, + -0.009501478, + 0.008930602, + 0.0059909183, + -0.005101795, + -0.0030988073, + -0.011102555, + -0.018858597, + -0.006975187, + 0.009875501, + 0.015643317, + -0.009534287, + -0.005236312, + -0.030840432, + -0.017992439, + -0.016155137, + 0.10467374, + -0.0028100885, + -0.0047376156, + 0.004537481, + 0.0029052345, + 0.014278464, + 0.00071441534, + 0.005823592, + 0.015971407, + -0.0052428734, + 0.009823006, + -0.033727624, + 0.016391361, + 0.0060795024, + -0.0020981338, + -0.008353164, + -0.0046916828, + -0.033045195, + 0.019790372, + -0.012841431, + 0.009527725, + -0.0100854775, + 0.011673432, + 0.02658839, + -0.0066799065, + -0.007769164, + 0.03968573, + 0.012441162, + 0.021811403, + -0.008733748, + -0.005987637, + 0.022467583, + 0.0029462455, + 0.01872736, + 0.00003957582, + -0.020656528, + 0.030919174, + 0.006889884, + 0.0063911877, + -0.011811229, + 0.025105424, + -0.007112985, + -0.0027608748, + -0.017113158, + 0.011483139, + -0.0010613702, + -0.02333374, + 0.013208891, + -0.029711803, + -0.0043110987, + 0.048216064, + -0.008792805, + -0.0054659746, + -0.00009171133, + -0.0024295042, + 0.015315227, + -0.0067061535, + -0.021168347, + 0.005003368, + -0.0070736143, + -0.016653834, + -0.023976795, + -0.0074082655, + -0.011679994, + -0.018792978, + -0.03698227, + -0.012375544, + -0.0032661331, + -0.042546675, + -0.030892927, + 0.01085977, + -0.029921781, + -0.004048627, + -0.0011286286, + 0.024173649, + -0.025932211, + 0.020249696, + 0.004275009, + 0.009737702, + 0.022743179, + -0.0014255497, + -0.029134367, + 0.0066372547, + 0.011732488, + 0.0022277292, + 0.022913786, + 0.026772121, + -0.031470366, + -0.0019111226, + 0.02040718, + 0.0015830329, + -0.007237659, + 0.021732662, + 0.012664263, + -0.009055276, + -0.023202505, + 0.006758648, + 0.025761604, + -0.010991005, + -0.016522598, + 0.022152618, + -0.02552538, + 0.007906962, + -0.008353164, + 0.015577699, + 0.014094734, + 0.009639275, + 0.023254998, + -0.025000436, + -0.0029380433, + 0.028005738, + -0.03013176, + 0.0069555016, + 0.009632714, + -0.01846489, + 0.026798368, + 0.008910917, + 0.009015905, + -0.01085977, + -0.00917995, + 0.025814097, + -0.025735356, + 0.01375352, + 0.03734973, + 0.001441134, + -0.00081612315, + -0.006128716, + 0.0008440108, + -0.019803494, + -0.0051444466, + -0.010485747, + 0.0017290327, + -0.012697072, + -0.018911092, + -0.028136974, + -0.00943586, + -0.011942466, + 0.011470016, + -0.007920085, + -0.022835044, + -0.0024114593, + -0.004911503, + 0.0072639063, + -0.0034547846, + -0.031732835, + -0.012979229, + 0.017401878, + 0.0037369418, + -0.027165828, + 0.012218061, + -0.017113158, + 0.007828221, + -0.022677561, + 0.0014435947, + -0.0143572055, + -0.018766731, + -0.028399445, + -0.013504173, + 0.017821833, + 0.010420129, + 0.027218321, + 0.0017257519, + 0.013235139, + 0.0030348299, + -0.017821833, + 0.0018635496, + -0.009711456, + 0.0151708685, + 0.001002314, + 0.016876934, + 0.027060838, + 0.013543543, + -0.015538328, + 0.0014362127, + -0.016063273, + 0.018609248, + 0.011804667, + -0.018123675, + -0.017100036, + -0.019029204, + -0.016719451, + 0.0028871894, + -0.012080263, + 0.0030331893, + -0.019396663, + -0.015288981, + 0.022664437, + -0.01210651, + -0.0021899987, + 0.006624131, + 0.009737702, + -0.01938354, + 0.010964758, + 0.020197202, + -0.016194507, + -0.013622285, + -0.015498958, + -0.0038681778, + 0.008425344, + 0.023753695, + 0.018661743, + 0.0017798867, + -0.016404485, + -0.0034219758, + -0.0004466121, + 0.015328351, + -0.00079233665, + -0.016653834, + 0.017953068, + -0.02779576, + -0.015420216, + -0.0022687404, + 0.0033990094, + -0.018058058, + -0.010452938, + 0.012585521, + -0.022362594, + 0.017467497, + -0.02750704, + -0.009514602, + -0.011076309, + -0.010964758, + 0.019737877, + -0.0053773904, + 0.018596124, + 0.013418869, + -0.013005476, + -0.013287633, + 0.017310012, + 0.0036910092, + -0.022585696, + 0.021824528, + 0.0021850774, + -0.010918826, + -0.022191988, + -0.0039305147, + -0.0026903355, + 0.009980489, + -0.0065617943, + 0.035984877, + 0.023740571, + 0.0031709871, + -0.03178533, + -0.02194264, + 0.0073360857, + 0.013235139, + -0.0086812535, + 0.008576265, + -0.0071851644, + -0.0023130325, + -0.01729689, + 0.007040805, + -0.02640466, + 0.019803494, + 0.009927995, + -0.025669739, + -0.009941118, + -0.012099949, + 0.0030988073, + -0.00097442645, + 0.0050525814, + 0.019357292, + 0.018819226, + 0.012401791, + -0.003946919, + -0.00030655882, + -0.032494005, + 0.01784808, + -0.019987226, + 0.020932123, + -0.014186599, + -0.013701026, + -0.002252336, + 0.0045834132, + 0.02644403, + 0.028583175, + 0.004527638, + -0.01960664, + -0.014580307, + 0.0027789199, + 0.024396751, + 0.0030610769, + -0.003269414, + -0.00837285, + -0.021640796, + -0.014514688, + -0.014790284, + 0.0089502875, + 0.012821746, + -0.007493569, + -0.0086812535, + -0.007966018, + -0.0052166265, + 0.020604033, + -0.0020472798, + -0.0138716325, + 0.03616861, + 0.027034592, + -0.004970559, + -0.0028691445, + -0.002472156, + 0.013300757, + -0.034226317, + -0.001879954, + -0.007854467, + -0.007966018, + 0.013648531, + -0.012598645, + -0.00035741273, + -0.011699679, + 0.015774554, + 0.012972667, + 0.016247002, + 0.01225087, + 0.023727447, + -0.010426691, + 0.0062960414, + -0.014659048, + 0.0017241114, + 0.024527987, + -0.0075132544, + 0.006059817, + 0.009225883, + -0.008175995, + 0.03010551, + 0.013182645, + 0.00976395, + 0.012152443, + -0.020131584, + -0.011371589, + -0.012231184, + 0.014711542, + -0.011896533, + -0.008149749, + -0.013701026, + -0.014449071, + -0.0053445813, + 0.015945159, + 0.015302104, + -0.014829655, + -0.021050235, + 0.032756478, + 0.03921328, + 0.012624892, + -0.0059023337, + -0.020354686, + -0.00859595, + 0.002677212, + -0.05448914, + -0.013556667, + -0.0030249872, + 0.030840432, + 0.009376803, + -0.018294282, + -0.031732835, + 0.0062173, + -0.024659222, + -0.006082783, + -0.007493569, + 0.023097515, + 0.01524961, + -0.008116939, + -0.012664263, + -0.0021785158, + 0.0041044024, + 0.022690684, + -0.00010550135, + 0.0061943335, + 0.030158006, + -0.031207893, + 0.02458048, + 0.0014304711, + -0.009494917, + 0.010229837, + 0.0137666445, + -0.00025611502, + 0.00021407854, + 0.0013952014, + -0.017493743, + -0.013609161, + -0.016732575, + 0.0004293874, + -0.011515949, + 0.021522684, + 0.033622634, + -0.037244745, + 0.0027198638, + 0.021667045, + -0.026129065, + 0.0036713239, + 0.008497523, + 0.0007603479, + 0.0069883107, + 0.00015574008, + -0.028530682, + -0.0068242657, + -0.005446289, + -0.041129325, + 0.015682688, + 0.012598645, + -0.012565835, + 0.0076969843, + -0.0027756388, + 0.0055906484, + -0.010557927, + -0.0067192772, + -0.037979666, + -0.007880715, + 0.020997742, + -0.026877109, + -0.008280984, + -0.010741657, + 0.012565835, + -0.034357555, + 0.0047310535, + 0.0003309605, + -0.012821746, + -0.014514688, + -0.0020128305, + 0.016470103, + -0.007106423, + -0.0027297065, + 0.0062533896, + -0.021312708, + -0.001503471, + -0.006528985, + 0.01758561, + -0.010518556, + 0.024436122, + 0.013464802, + -0.007040805, + -0.042494178, + -0.004524357, + 0.013622285, + 0.0016265047, + 0.0060106036, + 0.23475474, + 0.018110553, + 0.0013000554, + 0.031207893, + -0.0067783333, + 0.030525466, + 0.025249785, + -0.005735008, + -0.00994768, + -0.010098601, + -0.018058058, + -0.007749479, + -0.0077626025, + -0.0012992353, + -0.0091668265, + -0.015669564, + -0.020958371, + -0.039160788, + -0.01027577, + -0.022428213, + 0.0016256846, + 0.005928581, + -0.0018291001, + -0.020302191, + 0.033333912, + 0.004567009, + -0.016509473, + 0.013884757, + 0.03228403, + 0.0059154574, + -0.003167706, + 0.009475231, + 0.014606554, + 0.008609074, + -0.012185251, + -0.012185251, + -0.022428213, + -0.0034711892, + 0.015538328, + 0.01872736, + 0.0007808535, + -0.008904355, + 0.005794064, + -0.0053905137, + -0.0031168521, + 0.040210675, + 0.0006287019, + -0.004143773, + 0.018412394, + 0.019449158, + -0.023635583, + -0.009639275, + 0.00980332, + 0.039475754, + 0.013687903, + 0.0080841305, + 0.026024075, + 0.013195768, + 0.0033891667, + 0.0019833022, + -0.017782463, + 0.0065913224, + -0.014435947, + 0.006204176, + -0.003992852, + 0.0025295718, + -0.029134367, + 0.03514497, + 0.005767817, + 0.0020948527, + 0.0146852955, + -0.016811317, + -0.011975274, + -0.010026421, + -0.02051217, + -0.032494005, + 0.027822006, + 0.037953418, + 0.0037763126, + 0.0183599, + -0.022178864, + 0.015288981, + 0.018766731, + -0.00076198834, + 0.011417522, + -0.03404259, + 0.004970559, + 0.008451591, + 0.0037172565, + 0.00175528, + 0.007565749, + 0.0043832785, + -0.014015992, + -0.0038124025, + 0.010544803, + 0.0057186037, + 0.0035466498, + 0.012847993, + -0.01408161, + 0.008405658, + -0.010702286, + -0.005397076, + 0.02519729, + -0.0023655267, + -0.0050985143, + 0.0011097634, + 0.008891231, + 0.015498958, + -0.027008345, + -0.037323486, + -0.01013141, + -0.010439814, + -0.008766557, + -0.0012631454, + 0.029081872, + 0.003628672, + 0.032572746, + -0.0126839485, + 0.012172128, + -0.01608952, + 0.00057374686, + -0.01923918, + -0.018858597, + 0.012933296, + 0.0071917265, + -0.011837477, + -0.018569877, + 0.0038353687, + 0.0082481755, + -0.031732835, + 0.0022392122, + 0.010354511, + -0.00057989854, + -0.0061221537, + -0.006496176, + 0.027926996, + 0.0037402227, + -0.021076484, + -0.010761342, + -0.0017175496, + 0.026929604, + 0.006410873, + 0.011305971, + 0.017572485, + -0.006666783, + -0.0040748743, + 0.022979403, + 0.0016404486, + 0.0028428973, + -0.012368982, + -0.013366375, + -0.017165653, + -0.0035433688, + -0.018884843, + 0.01803181, + -0.019002955, + -0.023451852, + -0.023963673, + -0.014908397, + 0.03616861, + -0.014580307, + 0.0073820185, + 0.033963848, + -0.013431992, + -0.030525466, + -0.0007845445, + -0.16934678, + 0.0274283, + 0.039108295, + -0.00028092682, + 0.010052669, + 0.01989536, + -0.005587368, + -0.012204937, + -0.0038386495, + 0.017113158, + 0.039187036, + 0.0019980664, + -0.025171041, + -0.016522598, + 0.0012483813, + -0.026982097, + -0.008313793, + -0.0037369418, + 0.010931949, + -0.002874066, + 0.016443856, + -0.013806015, + 0.022178864, + -0.027585782, + -0.006597884, + 0.017165653, + 0.0010728533, + 0.02220511, + -0.0019997067, + -0.018609248, + -0.02761203, + -0.010630107, + 0.016076395, + 0.0048918175, + 0.022021381, + 0.021312708, + 0.0015379206, + -0.012565835, + -0.0076707373, + 0.008359726, + 0.009029029, + 0.019331045, + 0.015328351, + 0.008490962, + -0.0035204026, + 0.024698593, + 0.03517122, + 0.0027854815, + 0.0061024684, + -0.014606554, + 0.016037025, + -0.021496437, + -0.003533526, + 0.014475318, + 0.0012811903, + 0.011634061, + -0.0018192574, + -0.0011614376, + 0.0073492094, + -0.016627586, + -0.021995135, + 0.0008579546, + -0.005426604, + -0.0054692556, + -0.022795673, + -0.022323223, + -0.0050985143, + 0.009593343, + -0.026220929, + 0.018163046, + 0.0044849864, + -0.03632609, + 0.013327004, + -0.024947941, + 0.026247177, + 0.018819226, + -0.015000261, + 0.014934643, + -0.009914871, + -0.001301696, + -0.020105338, + 0.027533289, + -0.020840257, + -0.022520078, + 0.010662915, + 0.009396489, + -0.008497523, + 0.0026050322, + -0.0071326704, + -0.016693205, + -0.014317835, + -0.02542039, + 0.0056693903, + -0.03262524, + 0.0063419743, + 0.007867591, + -0.010872893, + -0.002897032, + -0.011424083, + 0.008477838, + 0.027848255, + 0.0021457067, + -0.030420478, + 0.02845194, + 0.029606815, + 0.010833522, + -0.009448984, + 0.014619677, + 0.012408352, + -0.012460847, + -0.028294457, + -0.01129941, + 0.021023989, + 0.0042782896, + -0.009134018, + 0.0009826287, + 0.012939858, + -0.006981749, + 0.004176582, + -0.0014723026, + 0.05496159, + -0.0007816737, + -0.0076969843, + 0.039738227, + -0.00015850834, + -0.013543543, + -0.07690423, + -0.027218321, + 0.02106336, + 0.016194507, + -0.013674779, + 0.04433148, + -0.0055808057, + 0.01762498, + 0.0036188294, + 0.019436033, + 0.0068439515, + -0.018084304, + 0.01371415, + -0.013976621, + 0.0427829, + 0.019081697, + 0.008792805, + -0.028294457, + -0.008182557, + 0.016601339, + -0.017126283, + 0.0041240877, + -0.011634061, + -0.016483227, + 0.000017788614, + -0.0018012126, + -0.029475579, + 0.01755936, + 0.011889971, + 0.011876848, + -0.010807275, + -0.020604033, + -0.01960664, + -0.00281665, + -0.014147229, + 0.009849253, + -0.034173824, + 0.010879455, + 0.020131584, + -0.04015818, + -0.007565749, + 0.00208501, + 0.0046687163, + -0.021850774, + -0.010492309, + -0.004078155, + 0.015735183, + -0.0130186, + 0.023793066, + -0.009527725, + -0.0022687404, + -0.0022917066, + -0.008504085, + 0.015525205, + -0.016443856, + -0.016430732, + -0.01024296, + 0.011430645, + -0.020787764, + -0.0067652096, + -0.00917995, + -0.0043078177, + -0.025945334, + 0.010800713, + 0.016194507, + 0.014882149, + -0.031339128, + -0.026181558, + 0.012605207, + -0.0169688, + -0.016942553, + 0.009081523, + -0.02695585, + -0.00071277487, + -0.023071269, + -0.010518556, + -0.013556667, + -0.0156039465, + 0.024737963, + -0.029239355, + -0.027926996, + -0.028845647, + 0.008746872, + 0.013136712, + 0.023924302, + 0.025879717, + 0.0012024487, + -0.015813924, + -0.0068045803, + -0.024265515, + 0.015315227, + 0.031207893, + -0.0020308753, + -0.025066053, + -0.008707501, + 0.024186773, + 0.0031939533, + -0.006378064, + 0.007447636, + 0.0158008, + -0.012710195, + -0.010072354, + -0.08887294, + 0.013648531, + -0.0027854815, + -0.019094821, + 0.030289242, + -0.014882149, + 0.0027379086, + -0.021352079, + -0.001368134, + 0.012027768, + -0.047271166, + -0.007985704, + 0.0021243808, + 0.0117062405, + -0.020302191, + -0.02490857, + 0.031207893, + 0.012172128, + 0.009665523, + 0.010439814, + 0.014816531, + 0.0035630541, + 0.014514688, + -0.008307232, + -0.020879628, + -0.00073902204, + -0.010945072, + 0.017375631, + 0.0015805722, + -0.0052133454, + 0.009560534, + -0.039187036, + 0.005613615, + 0.0446202, + -0.00075952767, + -0.021575179, + 0.013412307, + 0.024698593, + 0.03446254, + 0.008641883, + -0.009672085, + -0.008602512, + 0.008202243, + -0.020695899, + -0.009744264, + 0.0073229624, + 0.009927995, + -0.002040718, + 0.016470103, + 0.031654093, + 0.0014271903, + 0.03923953, + 0.00039145202, + -0.02304502, + -0.0092193205, + -0.023254998, + 0.017716844, + 0.0036713239, + -0.007723232, + 0.011017253, + 0.023963673, + 0.0125199035, + 0.011640623, + 0.024173649, + 0.023766818, + -0.011056623, + -0.02545976, + 0.0020472798, + 0.021863898, + -0.015341475, + -0.00015502238, + 0.0011679993, + 0.023071269, + 0.0009777073, + 0.028268209, + -0.0183599, + 0.015905788, + -0.0027149424, + -0.029974276, + 0.02212637, + 0.0020718866, + 0.000023261047, + -0.01758561, + 0.020761516, + 0.01254615, + -0.0006791457, + -0.023018774, + 0.00318247, + -0.005954828, + 0.0167457, + -0.004212672, + -0.010649792, + 0.012847993, + -0.0031217735, + 0.010557927, + 0.011279725, + 0.010945072, + -0.005108357, + 0.017782463, + 0.01758561, + 0.008792805, + -0.023018774, + -0.0044423346, + -0.016338868, + -0.016010778, + 0.030315489, + -0.0005606233, + -0.015367722, + -0.012093387, + 0.011050061, + 0.023386234, + 0.026654009, + 0.009613029, + 0.02538102, + -0.026378412, + 0.01700817, + -0.0138191385, + -0.029055625, + -0.03244151, + 0.015695812, + 0.013464802, + 0.023359988, + 0.0060040415, + -0.0077035464, + 0.012716757, + 0.015236486, + -0.0066208504, + -0.008622197, + 0.008038198, + -0.0068964455, + 0.023622459, + 0.007578872, + -0.020564662, + 0.006027008, + -0.013622285, + 0.013661656, + -0.008182557, + -0.0034908745, + -0.017073788, + 0.024186773, + -0.0037336608, + 0.00961959, + 0.0058465586, + 0.012198376, + 0.031837825, + 0.012992352, + 0.022401966, + -0.027664524, + -0.019659135, + 0.009724579, + 0.01729689, + 0.006975187, + -0.012480533, + -0.016706329, + 0.0034022902, + 0.002165392, + 0.017533114, + -0.014278464, + 0.012040893, + 0.039370764, + 0.005219907, + 0.029606815, + -0.01733626, + -0.022730054, + -0.005105076, + 0.017310012, + 0.010991005, + -0.0013927408, + -0.026798368, + 0.0107875895, + 0.00032644926, + -0.016286373, + -0.023241876, + 0.012237746, + -0.014068487, + -0.02431801, + 0.0028806275, + 0.026535895, + 0.018648619, + -0.007723232, + 0.024790458, + -0.020052843, + -0.0042651664, + 0.013477925, + -0.014029116, + -0.007355771, + 0.0037795934, + -0.013340128 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 24, + "total_tokens": 24 + } +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:37 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 63 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6fbb69b6c9-ft5fh +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_6fab12ac1bd04d0cbcd2ec9fbbf90e00 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} +276 34131 +POST https://api.openai.com/v1/embeddings HTTP/1.1 +Host: api.openai.com +User-Agent: langchaingo-httprr +Content-Length: 81 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"text-embedding-ada-002","input":["Which of these are cities in Japan"]}HTTP/2.0 200 OK +Content-Length: 33176 +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Content-Type: application/json +Date: Wed, 23 Sep 2026 09:27:39 GMT +Openai-Model: text-embedding-ada-002-v2 +Openai-Organization: lcgo-tst +Openai-Processing-Ms: 84 +Openai-Project: proj_lcgo-tst +Openai-Version: 2020-10-01 +Server: cloudflare +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Via: envoy-router-6659cb4779-vrl5c +X-Content-Type-Options: nosniff +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 10000 +X-Ratelimit-Limit-Tokens: 10000000 +X-Ratelimit-Remaining-Requests: 9999 +X-Ratelimit-Remaining-Tokens: 9999992 +X-Ratelimit-Reset-Requests: 6ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_ba5941ab9ba94a649609062108c8a8f0 + +{ + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [ + 0.01976611, + 0.003909019, + 0.00026493086, + 0.013577655, + -0.01501591, + 0.02332876, + -0.03802799, + -0.0021227456, + -0.00035028602, + -0.048372872, + -0.011829318, + 0.01184911, + 0.011684173, + -0.009757702, + -0.011994255, + -0.010377868, + 0.024252411, + -0.0069867526, + 0.011479651, + -0.02113839, + -0.01522703, + 0.01448811, + 0.0046908227, + -0.03370003, + 0.0010646716, + 0.029029, + 0.008860443, + -0.02335515, + -0.00997542, + 0.0027725995, + 0.011459858, + 0.0018753394, + -0.0049679177, + -0.0051130624, + -0.0041498276, + -0.0030942275, + -0.008490982, + -0.00704613, + -0.019700136, + 0.0027247677, + 0.04235595, + -0.0035428575, + -0.009361853, + -0.0066304877, + -0.00332514, + 0.004621549, + -0.025373986, + 0.022734985, + -0.01638819, + 0.018697316, + 0.019198725, + 0.015161055, + -0.034623682, + -0.000048347305, + -0.025849005, + 0.0034537914, + -0.020808516, + 0.01659931, + -0.023051666, + 0.00027874438, + 0.013696411, + 0.005456133, + -0.018987605, + 0.012317533, + 0.0068745953, + -0.0089726, + -0.0012155893, + 0.008359033, + -0.014606865, + -0.0076596974, + 0.03055962, + 0.011961267, + -0.007323225, + -0.01274637, + 0.014303381, + -0.03417505, + -0.012416495, + -0.013709606, + 0.012581433, + 0.028685931, + 0.008847248, + -0.019964036, + 0.0048326687, + -0.025123281, + 0.02113839, + 0.004601756, + -0.0093156705, + 0.029767921, + -0.00026080743, + 0.0018225594, + 0.01419782, + 0.029847091, + -0.000028090919, + 0.017298644, + -0.027445601, + -0.01884246, + 0.0014283587, + 0.02016196, + -0.008807663, + -0.012073426, + 0.0079104025, + 0.013267573, + 0.002462517, + -0.01050322, + -0.008279863, + 0.02280096, + 0.005898165, + -0.021784946, + 0.005848684, + -0.008570152, + -0.0017714287, + 0.026469171, + 0.0040607615, + -0.07478926, + -0.03190551, + -0.02707614, + 0.02937207, + -0.0074749677, + -0.01498952, + -0.015847195, + 0.0002001929, + 0.04048226, + 0.012614421, + -0.011354297, + 0.04449354, + 0.0095004, + -0.012845333, + -0.02340793, + -0.014474915, + -0.01396031, + 0.03005821, + -0.0021079013, + 0.0064094714, + 0.0050998675, + -0.0072638476, + 0.01462006, + -0.0018374037, + -0.0062907166, + -0.014633255, + -0.01828827, + 0.006795425, + -0.0054891203, + 0.00635999, + 0.01509508, + 0.0269178, + 0.010232722, + 0.03422783, + 0.00786422, + 0.007738868, + -0.020914076, + -0.00094179314, + -0.015583295, + 0.0009648844, + 0.0063072103, + 0.0038100563, + 0.00910455, + 0.016216656, + 0.01388114, + 0.0028765101, + -0.012944295, + -0.010015005, + 0.0124098975, + 0.02435797, + -0.010588988, + -0.013122428, + 0.020095985, + 0.01831466, + 0.024846185, + 0.0025235438, + 0.000048218448, + -0.03116659, + 0.0075013577, + -0.04488939, + 0.012053633, + 0.014276991, + -0.005977335, + 0.01411865, + 0.01467284, + -0.03179995, + 0.008194095, + 0.004925034, + -0.00480298, + 0.019607771, + 0.001966055, + 0.013999895, + 0.0018291569, + 0.0166257, + 0.0006869647, + 0.010325087, + -0.01931748, + 0.03557372, + 0.02773589, + 0.02997904, + 0.011440065, + -0.6232262, + -0.039321102, + -0.0020996544, + 0.0044533126, + 0.03211663, + 0.00934206, + 0.0321958, + 0.0057761115, + 0.0035824426, + 0.02995265, + -0.010965046, + 0.01562288, + -0.027419211, + -0.004525885, + -0.010364673, + -0.006267625, + 0.008583347, + -0.01348529, + 0.003813355, + 0.02053142, + -0.0069867526, + 0.0002610136, + -0.011255335, + -0.014316576, + 0.012396703, + -0.01129492, + -0.023658635, + -0.009012185, + -0.012053633, + 0.04631445, + -0.03222219, + 0.04312126, + 0.020544615, + -0.00504049, + 0.031008251, + 0.0021128494, + -0.031034641, + 0.02240511, + 0.0139867, + 0.024846185, + -0.02675946, + 0.00467103, + 0.013524875, + -0.0013821763, + 0.0008584997, + 0.01364363, + 0.04053504, + -0.023394736, + 0.005307689, + -0.0017301944, + 0.02372461, + -0.0314041, + -0.03731546, + -0.009467413, + 0.013577655, + 0.010694548, + 0.019013995, + -0.012647408, + -0.0070659225, + -0.021362705, + -0.022787765, + 0.0038661351, + -0.0179452, + -0.010094175, + -0.013999895, + 0.013313755, + -0.008174303, + -0.008596542, + 0.00725725, + -0.03546816, + 0.0045324825, + 0.0076465025, + -0.011195958, + 0.009724715, + 0.020848101, + 0.03955861, + 0.019805696, + -0.007323225, + -0.01359085, + -0.013366535, + 0.012027243, + -0.00069191284, + -0.02055781, + -0.03346252, + -0.00032451455, + -0.03528343, + -0.015002715, + 0.011228945, + 0.01712711, + -0.01572844, + 0.0032624637, + -0.0027725995, + -0.014817986, + 0.0055089127, + -0.010008408, + 0.015385371, + -0.002027082, + 0.002172227, + 0.004938229, + -0.019462625, + -0.022471085, + -0.009876458, + 0.008352435, + -0.0015083535, + -0.014211015, + -0.029873481, + -0.01783964, + 0.0081677055, + 0.02562469, + -0.017166695, + 0.010932058, + 0.002040277, + -0.017826445, + -0.00665028, + 0.02615249, + -0.02251067, + 0.02127034, + -0.0051526474, + 0.01517425, + 0.0087218955, + 0.0057200324, + 0.017536156, + 0.021758555, + 0.0011067307, + 0.02720809, + 0.0155041255, + -0.006442459, + -0.005423145, + -0.006478745, + 0.010015005, + -0.011479651, + 0.014554085, + 0.01789242, + -0.018961215, + 0.004502794, + 0.022154406, + -0.0005183161, + -0.006082895, + 0.02789423, + -0.01717989, + -0.02997904, + -0.01981889, + 0.01799798, + -0.017087525, + 0.00038079947, + -0.024291996, + -0.0008609738, + -0.00134589, + -0.03288194, + 0.006224741, + 0.011156373, + -0.017391011, + -0.02047864, + 0.01274637, + -0.009249696, + -0.0057728128, + -0.0023272682, + -0.00054594316, + 0.007296835, + 0.00947401, + 0.03623347, + 0.0008782922, + -0.019581381, + 0.0032162813, + 0.013551265, + -0.020650174, + 0.04280458, + 0.012178985, + -0.0020617188, + -0.022009261, + -0.020571005, + -0.012832138, + 0.0011809525, + 0.008741688, + -0.00841841, + -0.0055880826, + 0.008979198, + -0.010707743, + 0.00030101094, + 0.006867998, + 0.0138151655, + -0.01712711, + -0.02483299, + -0.0051625436, + 0.034623682, + -0.01356446, + 0.01704794, + -0.00024369516, + 0.007217665, + 0.0145145, + -0.02578303, + 0.014211015, + 0.0043378565, + 0.0043411553, + 0.02836925, + 0.0020831607, + 0.01419782, + 0.016111095, + -0.024661455, + 0.0060169203, + 0.015768025, + -0.0032756587, + 0.001594121, + -0.024608675, + 0.03736824, + -0.01462006, + -0.0101535525, + -0.023130836, + 0.024107266, + 0.01026571, + 0.022048846, + -0.01754935, + -0.00477659, + 0.017536156, + -0.0068152174, + 0.027419211, + 0.00022575821, + 0.014844376, + -0.0153062, + -0.004130035, + 0.019739721, + -0.019911256, + 0.009810483, + -0.012277948, + -0.019607771, + 0.0021920195, + -0.010285502, + 0.030955471, + -0.0008094308, + -0.008128121, + -0.02784145, + -0.017166695, + -0.0061323764, + 0.0031173187, + -0.0060433103, + -0.008655921, + 0.022629425, + -0.011341102, + 0.02726087, + 0.0069867526, + 0.015240225, + 0.010443843, + 0.018473001, + -0.00828646, + 0.01158521, + 0.006769035, + 0.04525885, + 0.017615326, + 0.007006545, + 0.02121756, + -0.03042767, + -0.017496571, + -0.00248066, + 0.016282631, + 0.005291195, + -0.02551913, + 0.02496494, + 0.0060268166, + 0.01361724, + 0.03356808, + 0.0044038314, + -0.006867998, + -0.0024790107, + -0.00921011, + 0.0009269488, + 0.0059278538, + 0.0129311, + 0.02026752, + -0.021837726, + -0.01765491, + -0.025585106, + -0.0042191013, + -0.015556905, + 0.0017202982, + 0.00556829, + -0.0023322164, + -0.0058519826, + -0.0043510515, + 0.01604512, + 0.03005821, + 0.0064721475, + -0.059588622, + 0.01359085, + 0.02728726, + -0.019634161, + -0.020465445, + -0.010892473, + -0.0066700727, + -0.017470181, + 0.0065843053, + 0.020861296, + 0.018776486, + 0.0073562125, + -0.009724715, + -0.01702155, + 0.0066073965, + 0.03000543, + -0.02134951, + -0.019383455, + -0.017061135, + -0.0003364725, + -0.027445601, + -0.0031222668, + 0.0030315514, + 0.03137771, + -0.024872575, + -0.00035234774, + -0.010621975, + 0.012686993, + -0.006867998, + -0.009388243, + -0.012614421, + -0.006953765, + 0.011802928, + 0.021798141, + -0.02565108, + -0.019964036, + 0.008253473, + 0.021494655, + -0.0036715087, + -0.014791595, + -0.01607151, + -0.022576645, + -0.0025433362, + 0.11579932, + -0.00944762, + 0.007824635, + -0.019330675, + 0.01704794, + 0.006953765, + -0.00266539, + 0.0059707374, + -0.010325087, + 0.01118936, + -0.01683682, + -0.010509818, + 0.012522055, + 0.005518809, + 0.019172335, + -0.013472095, + -0.04201288, + -0.04095728, + 0.0087218955, + -0.013359938, + 0.001095185, + -0.015108275, + 0.028553981, + 0.007857623, + -0.02013557, + 0.022497475, + 0.02567747, + 0.01652014, + 0.015213835, + -0.012343923, + -0.0012188881, + 0.0055484977, + -0.01947582, + 0.01797159, + -0.016374996, + 0.011070605, + 0.011090398, + 0.03676127, + 0.0011826019, + -0.0011380687, + -0.005888269, + 0.007171483, + -0.0002983307, + -0.01401309, + 0.008675713, + -0.03198468, + 0.0035560525, + 0.0101667475, + -0.0071648853, + -0.0145145, + 0.028659541, + -0.014316576, + -0.032565262, + -0.03528343, + -0.019409845, + 0.012211973, + -0.003786965, + -0.0033944137, + 0.009269488, + -0.0155041255, + -0.00009179803, + -0.0072638476, + 0.0057068374, + -0.0032690612, + -0.02174536, + -0.03884608, + 0.011987657, + -0.03108742, + -0.05140772, + -0.0044698063, + 0.0005814047, + -0.016981965, + -0.02897622, + 0.020095985, + 0.03148327, + -0.012000852, + 0.02430519, + -0.024846185, + 0.008906625, + 0.01797159, + -0.0168896, + -0.03396393, + -0.024291996, + -0.01417143, + -0.01937026, + 0.02464826, + 0.013577655, + -0.02274818, + -0.01301027, + -0.010015005, + 0.0060795965, + -0.0027890932, + 0.008273265, + 0.01997723, + -0.0030233045, + -0.009559778, + 0.01079351, + 0.019660551, + -0.00749476, + -0.02916095, + 0.03855579, + -0.0018308063, + -0.00847119, + -0.008405215, + 0.0070791175, + 0.010668158, + 0.014554085, + -0.002942485, + -0.00002896715, + 0.002726417, + 0.02491216, + -0.02945124, + 0.02272179, + 0.007903805, + -0.01351168, + 0.03676127, + 0.014329771, + 0.020439055, + -0.0035560525, + -0.0134589, + 0.010285502, + -0.0067756325, + 0.023473905, + 0.03211663, + -0.02997904, + 0.008900028, + -0.009348658, + 0.00041997212, + 0.0007108806, + -0.01411865, + -0.016031925, + 0.037104342, + -0.0069603627, + -0.029794311, + -0.01889524, + -0.009638947, + -0.01016015, + 0.018670926, + -0.017325036, + -0.0129311, + -0.020966856, + -0.0070263376, + 0.020940466, + -0.008345838, + -0.05219942, + -0.02335515, + 0.01142687, + 0.014580475, + 0.011255335, + 0.010041395, + 0.015385371, + 0.0050206976, + -0.012614421, + -0.0030084602, + -0.04436159, + -0.02810535, + -0.015438151, + -0.016850015, + -0.001156212, + 0.0197925, + 0.04953403, + 0.024041291, + 0.02905539, + 0.0017301944, + -0.010542805, + -0.00078798895, + -0.0046380428, + 0.0321958, + -0.008405215, + -0.002916095, + 0.018327855, + 0.02171897, + -0.024199631, + -0.006138974, + -0.012080023, + 0.04892706, + 0.002335515, + -0.009790691, + -0.011209153, + -0.05204108, + -0.0013368184, + -0.00847119, + 0.0042388937, + -0.011433467, + 0.011420272, + -0.0033234907, + 0.0031849432, + -0.0126935905, + 0.005106465, + -0.009177122, + 0.008728493, + 0.0012708434, + 0.010780315, + 0.009863263, + 0.0027462095, + -0.008352435, + -0.017417401, + -0.01517425, + -0.0004362597, + 0.023051666, + 0.01649375, + 0.0009162278, + -0.006000426, + 0.01229774, + -0.0029457838, + 0.012865125, + -0.00760032, + -0.01681043, + -0.016506946, + -0.0023190214, + -0.024252411, + 0.0047502, + 0.0025565312, + -0.03288194, + -0.016374996, + -0.009487205, + -0.010938656, + 0.028738711, + -0.02549274, + -0.020821711, + 0.01287832, + 0.00020472867, + 0.02288013, + 0.0121130105, + 0.012383508, + 0.0064754463, + 0.005782709, + -0.010430648, + -0.026086515, + -0.024978135, + 0.0008403566, + 0.015715245, + 0.02615249, + -0.01799798, + -0.031008251, + -0.005657356, + 0.0107209375, + -0.003496675, + -0.0033218414, + 0.03607513, + 0.03435978, + -0.0145145, + -0.0056672525, + 0.012950893, + -0.01612429, + 0.032433312, + -0.010298697, + -0.012634213, + 0.00533078, + 0.0022893324, + -0.0017747275, + 0.0031371112, + -0.015424956, + -0.0041498276, + 0.000092983515, + -0.016256241, + 0.01781325, + -0.022682205, + 0.0014473266, + 0.012522055, + 0.0019165737, + 0.013867945, + 0.0040442673, + 0.0068482053, + 0.01385475, + 0.0115720155, + -0.000658513, + -0.010984838, + 0.0010069434, + 0.03182634, + -0.009150732, + -0.016823625, + -0.00353626, + 0.0004201783, + 0.011908487, + -0.0035329612, + 0.009935835, + 0.01182272, + -0.02881788, + 0.0074617728, + 0.04441437, + -0.0058915676, + -0.007949987, + -0.014686035, + -0.022655815, + -0.020544615, + 0.0075277477, + 0.0015075288, + -0.0025532325, + -0.02161341, + -0.0155173205, + 0.017588936, + -0.002805587, + 0.015372176, + -0.013894335, + -0.01295749, + 0.011888695, + 0.0093024755, + -0.013221391, + 0.008556957, + -0.00007540736, + 0.02277457, + -0.022207186, + -0.01596595, + -0.013359938, + -0.013947115, + 0.012330728, + -0.0076069175, + -0.013452303, + -0.02934568, + -0.006719554, + 0.03048045, + 0.03132493, + 0.03169439, + 0.018354245, + -0.025453156, + -0.011888695, + -0.015715245, + -0.02997904, + 0.022391915, + 0.0002653432, + 0.018143125, + 0.02470104, + -0.01005459, + 0.02372461, + 0.009935835, + -0.00009071563, + -0.011816123, + 0.009638947, + -0.02884427, + -0.016823625, + -0.0032377231, + -0.023843365, + -0.016902795, + -0.004473105, + -0.00046965954, + -0.006086194, + -0.006557915, + 0.012106413, + 0.0069207777, + 0.008708701, + 0.041590642, + -0.0095861675, + 0.013656825, + -0.010727535, + -0.01440894, + 0.009559778, + -0.0049943076, + -0.023658635, + -0.013762386, + -0.015794415, + 0.027577551, + 0.005746423, + -0.008570152, + -0.02335515, + -0.0017499869, + -0.02100644, + -0.03222219, + -0.00361543, + 0.016638895, + 0.012416495, + -0.001147965, + 0.004288375, + 0.010648365, + 0.008253473, + 0.0168896, + -0.01514786, + 0.009533388, + 0.0074023954, + -0.037236292, + 0.02245789, + 0.01778686, + -0.0050239963, + -0.011156373, + 0.0048590587, + 0.008847248, + 0.017219475, + 0.020689761, + -0.022959301, + -0.02282735, + -0.0034867788, + -0.011882097, + -0.02953041, + 0.02330237, + 0.006482044, + -0.03348891, + 0.01762852, + 0.01778686, + -0.017747276, + 0.0016939081, + 0.01058239, + -0.0018786382, + -0.005000905, + 0.0010770418, + 0.00042471406, + -0.015213835, + 0.0107473275, + -0.02778867, + 0.018380634, + -0.0027445601, + -0.011308115, + 0.01905358, + -0.025176061, + -0.021705775, + -0.017509766, + -0.00675584, + -0.009850068, + -0.014079065, + -0.002444374, + -0.011380687, + -0.012812345, + -0.001224661, + -0.01021293, + -0.03734185, + 0.0047996813, + -0.0006828413, + -0.014606865, + -0.023473905, + 0.022009261, + 0.011750148, + -0.013775581, + -0.012574836, + 0.02129673, + -0.03319862, + 0.0031024744, + -0.0232232, + 0.013293963, + -0.04095728, + 0.021811336, + -0.0077058803, + -0.021468265, + -0.028501201, + 0.00498771, + 0.01118936, + -0.03019016, + -0.016084705, + 0.22104265, + -0.01018654, + -0.0043609478, + 0.03446534, + -0.0044665076, + 0.03420144, + 0.028659541, + -0.009361853, + -0.015952755, + 0.010391063, + -0.03288194, + -0.009546583, + 0.0064358613, + 0.011149775, + -0.003346582, + -0.04438798, + -0.026139295, + -0.02997904, + 0.0036781062, + 0.020729346, + -0.0038760314, + 0.0017565844, + -0.008088535, + -0.0043906365, + -0.004331259, + 0.03731546, + -0.014831181, + 0.010602183, + 0.023579465, + 0.009236501, + 0.013735996, + 0.017852835, + 0.0051493486, + 0.022497475, + 0.0020518226, + -0.014356161, + -0.0068482053, + 0.0036451188, + 0.01778686, + 0.016612506, + -0.007639905, + -0.0013153766, + -0.01140048, + 0.019251505, + -0.014276991, + 0.00757393, + -0.0073430175, + 0.011756745, + -0.0077916477, + 0.00994903, + -0.03016377, + -0.014606865, + 0.0398489, + 0.022734985, + 0.01913275, + -0.023025276, + 0.02802618, + 0.0003393589, + -0.015319395, + -0.015688855, + 0.0027033256, + 0.03040128, + -0.01459367, + 0.03277638, + -0.011096995, + 0.0061191814, + -0.03119298, + -0.0035296625, + 0.01572844, + -0.008708701, + -0.00947401, + -0.0028402237, + 0.0023371645, + -0.0190008, + -0.021996066, + -0.00841841, + 0.043701842, + 0.02235233, + 0.023091251, + 0.014263796, + -0.0061587663, + -0.015029105, + 0.023064861, + 0.024978135, + 0.01599234, + -0.02319681, + 0.006310509, + 0.0042289975, + -0.0035197663, + -0.011756745, + -0.017773665, + -0.0271817, + 0.0009904497, + -0.026429586, + -0.0056639537, + -0.0061818575, + 0.0017038044, + 0.0036220276, + 0.0068152174, + -0.019489015, + 0.0041894126, + 0.013524875, + 0.00902538, + -0.0017169995, + -0.012106413, + 0.006376484, + -0.0048194737, + -0.012917905, + -0.008662518, + -0.015609685, + 0.002441075, + -0.03119298, + 0.010173345, + -0.0049976064, + 0.0010250866, + -0.00031358743, + -0.00709891, + -0.02720809, + 0.01396031, + -0.014831181, + 0.014422135, + -0.013129026, + -0.023526685, + 0.0066568777, + -0.009817081, + -0.02124395, + -0.0037209901, + -0.03042767, + 0.009902848, + -0.028606761, + 0.03063879, + -0.0154909305, + 0.01617707, + -0.012502262, + 0.009355255, + 0.022787765, + 0.005835489, + -0.008266668, + 0.017377816, + -0.007917, + 0.005558394, + 0.008425008, + 0.02359266, + 0.0066733714, + -0.007798245, + -0.00796978, + 0.00477659, + 0.022814155, + -0.026495561, + 0.0019578082, + -0.011670978, + -0.018829266, + 0.00833924, + -0.0037308864, + 0.05404672, + 0.002734664, + 0.0038166537, + -0.01462006, + 0.021969676, + 0.03591679, + -0.04042948, + -0.0063171065, + 0.03372642, + -0.018512586, + -0.03639181, + 0.0058156964, + -0.16657369, + 0.02388295, + 0.03887247, + -0.03069157, + 0.018802876, + 0.020742541, + 0.0072110677, + -0.030902691, + -0.001330221, + -0.0039881887, + 0.057266302, + 0.017404206, + -0.02668029, + -0.02264262, + -0.016137484, + -0.021705775, + -0.018195905, + 0.01393392, + 0.021824531, + 0.00335153, + 0.037104342, + -0.011123385, + -0.01227135, + 0.0043180636, + -0.02681224, + 0.03005821, + -0.0025268425, + -0.009744507, + 0.026587926, + -0.00997542, + -0.0015355682, + -0.02055781, + 0.01615068, + 0.0277095, + 0.015345785, + 0.0077322703, + -0.009012185, + -0.007903805, + -0.01818271, + -0.0024361268, + 0.00039420064, + -0.0028996014, + 0.004647939, + 0.01947582, + 0.01462006, + 0.005818995, + 0.007870818, + -0.020755736, + -0.0066964626, + -0.0069207777, + 0.03029572, + -0.012040438, + -0.0007537644, + 0.015741635, + -0.0008040703, + 0.0022596437, + 0.0138019705, + 0.03507231, + 0.006237936, + -0.010509818, + -0.029715141, + -0.0008189147, + 0.016559726, + -0.011941475, + -0.0056309663, + -0.0060169203, + -0.008088535, + 0.025954565, + -0.03119298, + 0.01403948, + -0.009434425, + -0.012198778, + 0.021824531, + -0.02884427, + -0.0005323358, + 0.01221857, + -0.0037539776, + 0.01638819, + 0.002792392, + -0.00027915672, + -0.030876301, + 0.0591136, + -0.021125196, + -0.0030266033, + -0.0074749677, + 0.02396212, + 0.0057266303, + 0.012845333, + -0.0398489, + 0.001264246, + 0.029794311, + -0.01947582, + -0.005861879, + 0.004915138, + 0.010015005, + 0.0108199, + -0.00955318, + 0.023869755, + -0.021257145, + -0.026535146, + 0.0059410487, + -0.016981965, + -0.0059806337, + 0.02050503, + 0.03285555, + 0.00878787, + 0.0047172126, + 0.030902691, + 0.00913094, + 0.010932058, + -0.0065513174, + 0.0013277469, + 0.011921682, + 0.012937698, + -0.01572844, + -0.00045935094, + 0.02142868, + 0.009196915, + 0.0543634, + 0.013551265, + 0.010984838, + -0.0054000537, + 0.013346743, + 0.0024377762, + -0.0016279331, + -0.002739612, + -0.087720364, + 0.03794882, + -0.0071780803, + 0.015055495, + -0.008873638, + 0.05370365, + 0.03449173, + 0.021837726, + 0.010371271, + 0.010509818, + -0.00625443, + -0.015688855, + -0.0030513438, + -0.003892525, + 0.004258686, + -0.02908178, + -0.0017433894, + 0.009823678, + 0.0056045763, + 0.03182634, + -0.00424879, + -0.01580761, + 0.004393935, + -0.03019016, + -0.012528652, + -0.0033449326, + -0.019660551, + 0.007323225, + 0.02364544, + 0.009256293, + 0.0026505457, + -0.018908435, + -0.009144135, + -0.011591808, + -0.00596414, + 0.03346252, + -0.02731365, + 0.00014906227, + 0.03581123, + -0.03596957, + -0.0015421656, + 0.0074155903, + 0.006613994, + -0.010391063, + -0.00971152, + -0.022761375, + -0.039426662, + -0.012752968, + -0.0039552012, + -0.019304285, + -0.02134951, + -0.013498485, + 0.0021392393, + -0.012970685, + 0.010272307, + -0.0057233316, + 0.0010283854, + 0.008246875, + -0.03876691, + 0.0028517693, + 0.013722801, + -0.0077454653, + -0.02910817, + 0.026086515, + 0.04214483, + 0.0046182503, + -0.016005535, + -0.019700136, + 0.014738815, + -0.0364182, + -0.02493855, + 0.023421125, + -0.03111381, + -0.009177122, + -0.02211482, + -0.02900261, + 0.0039881887, + 0.0072638476, + 0.015820805, + -0.015715245, + 0.0035956376, + -0.01902719, + -0.009751105, + -0.007686088, + 0.0012931101, + 0.017879225, + 0.01351168, + -0.01501591, + 0.014474915, + -0.03055962, + 0.030929081, + 0.007376005, + 0.029029, + -0.01287832, + -0.012654006, + 0.016638895, + 0.005241714, + 0.01058239, + 0.02016196, + 0.01918553, + -0.016533336, + -0.02459548, + -0.0865592, + 0.012673798, + -0.005660655, + -0.009520193, + 0.0069999476, + -0.0101799425, + 0.01422421, + -0.0045951586, + 0.023896145, + -0.00778505, + -0.028685931, + 0.02261623, + -0.00899899, + -0.019779306, + -0.02583581, + 0.000015501548, + 0.013722801, + 0.018855656, + 0.025228841, + -0.011149775, + -0.0092892805, + 0.0047567976, + 0.02132312, + 0.0022266563, + -0.04499495, + 0.0070263376, + -0.00899899, + 0.03106103, + -0.03005821, + 0.0013928972, + 0.006953765, + -0.045813043, + 0.0057068374, + -0.00079664815, + -0.0084448, + -0.014580475, + -0.014131845, + 0.018697316, + 0.02390934, + 0.037183512, + -0.023117641, + -0.009638947, + 0.01356446, + -0.01475201, + -0.011011228, + -0.009137537, + 0.01403948, + 0.0072242627, + 0.02343432, + 0.009348658, + 0.0031255656, + 0.021072416, + 0.008279863, + -0.0115588205, + 0.005142751, + -0.048452042, + 0.007844428, + -0.0013862997, + -0.00683501, + 0.0033680238, + 0.020676566, + 0.025532326, + 0.024291996, + 0.00567385, + 0.010259112, + -0.028791491, + -0.010173345, + 0.0132477805, + 0.019013995, + -0.017668106, + -0.029715141, + 0.0129311, + 0.002124395, + 0.022576645, + -0.00038244884, + -0.01641458, + 0.026799046, + -0.02277457, + -0.03385837, + 0.009454218, + 0.003922214, + -0.0029886675, + -0.05547178, + 0.017325036, + 0.021098806, + -0.03063879, + -0.021679385, + -0.01158521, + -0.016929185, + 0.0279734, + 0.00261261, + -0.007844428, + 0.017509766, + -0.0015363928, + 0.000819327, + 0.020755736, + -0.017984785, + -0.02734004, + 0.01776047, + 0.017298644, + 0.010377868, + -0.016955575, + -0.017113915, + -0.02119117, + -0.00849758, + 0.02039947, + -0.019660551, + -0.024687845, + 0.010727535, + 0.023341956, + -0.0047963825, + 0.02908178, + -0.00881426, + 0.01612429, + 0.008504177, + -0.004245491, + -0.012997075, + -0.017470181, + -0.0068877903, + 0.015979145, + 0.02258984, + 0.019713331, + 0.0018934825, + -0.0068745953, + 0.03834467, + 0.00960596, + 0.010813302, + -0.017298644, + 0.019660551, + -0.00083252206, + 0.0095861675, + -0.0023338657, + -0.021916896, + -0.0017054537, + -0.00839202, + -0.0095861675, + 0.009091355, + 0.0049547227, + -0.01419782, + 0.057319082, + 0.018433416, + 0.009282683, + -0.014250601, + -0.00833924, + 0.04127396, + 0.009005588, + 0.014079065, + -0.0055748876, + -0.029794311, + 0.012805748, + -0.005192233, + -0.012416495, + -0.03533621, + -0.020795321, + -0.008009365, + -0.021916896, + 0.0054957177, + 0.0084513975, + 0.0029787712, + 0.03195829, + -0.0072506526, + 0.03063879, + 0.01517425, + -0.02892344, + -0.0039123176, + 0.03868774, + -0.012997075, + 0.021969676, + -0.028633151, + 0.021098806, + 0.0149631305, + -0.017219475, + -0.024226021, + 0.00781144, + -0.01348529, + -0.011103593, + -0.017298644, + 0.00799617, + 0.02807896, + 0.0024691145, + -0.006313808, + -0.01673126, + -0.01562288, + -0.0024790107, + -0.0059311525, + -0.01367002, + -0.0055122115, + -0.010457038 + ] + } + ], + "model": "text-embedding-ada-002-v2", + "usage": { + "prompt_tokens": 7, + "total_tokens": 7 + } +} diff --git a/vectorstores/mongovector/mongovector_test.go b/vectorstores/mongovector/mongovector_test.go index 442444c87..72657a478 100644 --- a/vectorstores/mongovector/mongovector_test.go +++ b/vectorstores/mongovector/mongovector_test.go @@ -12,7 +12,6 @@ import ( "flag" "fmt" "math" - "net/http" "os" "strings" "sync" @@ -20,7 +19,6 @@ import ( "time" "github.com/vxcontrol/langchaingo/embeddings" - "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/internal/testutil/testctr" "github.com/vxcontrol/langchaingo/schema" "github.com/vxcontrol/langchaingo/vectorstores" @@ -28,7 +26,9 @@ import ( "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/modules/mongodb" + "github.com/testcontainers/testcontainers-go/wait" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" @@ -106,7 +106,7 @@ func cleanName(name string) string { // This uses sync.Once to ensure the MongoDB Atlas Local container is only // created once and shared across all tests for efficiency. // The container includes both MongoDB and Atlas Search capabilities. -func setupTestEnv(t *testing.T, _ ...*http.Client) *testEnv { +func setupTestEnv(t *testing.T) *testEnv { t.Helper() if testing.Short() { @@ -120,9 +120,15 @@ func setupTestEnv(t *testing.T, _ ...*http.Client) *testEnv { } ctx := t.Context() + // Atlas Local restarts mongod while it wires up search, so the first + // "Waiting for connections" the module waits for comes before the + // restarts, and a search index created then fails with + // InterruptedAtShutdown. The image's healthcheck passes only once + // mongod and mongot are both up for good. container, err := mongodb.Run(ctx, "mongodb/mongodb-atlas-local:7.0.5", mongodb.WithUsername("admin"), mongodb.WithPassword("password"), + testcontainers.WithAdditionalWaitStrategyAndDeadline(2*time.Minute, wait.ForHealthCheck()), ) if err != nil { setupErr = fmt.Errorf("failed to start MongoDB container: %w", err) @@ -371,15 +377,10 @@ func TestNew(t *testing.T) { // TestStore_AddDocuments verifies document insertion functionality. // Each subtest gets its own collection to enable parallel execution. func TestStore_AddDocuments(t *testing.T) { - httprr.SkipIfNoCredentialsAndRecordingMissing(t, "MONGODB_URI") - rr := httprr.OpenForTest(t, http.DefaultTransport) - - if !rr.Recording() { - t.Parallel() - } + t.Parallel() // Set up shared test environment for all subtests - env := setupTestEnv(t, rr.Client()) + env := setupTestEnv(t) ctx := t.Context() tests := []struct { diff --git a/vectorstores/redisvector/redis_vector_test.go b/vectorstores/redisvector/redis_vector_test.go index ece273b9a..d7da462e3 100644 --- a/vectorstores/redisvector/redis_vector_test.go +++ b/vectorstores/redisvector/redis_vector_test.go @@ -3,6 +3,7 @@ package redisvector_test import ( "context" _ "embed" + "errors" "log" "net/http" "os" @@ -75,6 +76,22 @@ func getTestURIs(t *testing.T) string { return uri } +// dropIndexOnCleanup drops the index and its documents when the test ends, whatever its +// outcome, so a failed run does not leave the index behind on a shared REDIS_URL. +// The store is bound now: tests reassign their store variables, possibly to nil. +func dropIndexOnCleanup(t *testing.T, store *redisvector.Store, index string) { + t.Helper() + t.Cleanup(func() { + ctx := context.Background() //nolint:usetesting + err := store.DropIndex(ctx, index, true) + // A test that failed before it created the index has nothing to drop. + if t.Failed() && errors.Is(err, redisvector.ErrNotExistedIndex) { + return + } + require.NoError(t, err) + }) +} + //go:embed testdata/schema.json var jsonSchemaData string @@ -132,7 +149,7 @@ func testInvalidRedisVectorConfigs(t *testing.T, ctx context.Context, redisURL s redisvector.WithIndexName(index, false), redisvector.WithEmbedder(e), ) - assert.Equal(t, "redis index name does not exist", err.Error()) + assert.EqualError(t, err, "redis index name does not exist") } func testValidRedisVectorConfigs(t *testing.T, ctx context.Context, redisURL string, e *embeddings.EmbedderImpl, index string) { @@ -165,13 +182,14 @@ func testValidRedisVectorConfigs(t *testing.T, ctx context.Context, redisURL str assert.Equal(t, redisvector.ErrEmptySchemaContent, err) // Test with schema files - _, err = redisvector.New(ctx, + store, err := redisvector.New(ctx, redisvector.WithConnectionURL(redisURL), redisvector.WithIndexName(index, true), redisvector.WithEmbedder(e), redisvector.WithIndexSchema(redisvector.YAMLSchemaFormat, "./testdata/schema.yml", nil), ) require.NoError(t, err) + dropIndexOnCleanup(t, store, index) _, err = redisvector.New(ctx, redisvector.WithConnectionURL(redisURL), @@ -221,7 +239,7 @@ func TestAddDocuments(t *testing.T) { redisvector.WithIndexName(index, false), redisvector.WithEmbedder(e), ) - assert.Equal(t, "redis index name does not exist", err.Error()) + assert.EqualError(t, err, "redis index name does not exist") vector, err := redisvector.New(ctx, redisvector.WithConnectionURL(redisURL), @@ -229,9 +247,10 @@ func TestAddDocuments(t *testing.T) { redisvector.WithEmbedder(e), ) require.NoError(t, err) + dropIndexOnCleanup(t, vector, index) err = vector.DropIndex(ctx, index, false) - assert.Equal(t, "redis index name does not exist", err.Error()) + assert.EqualError(t, err, "redis index name does not exist") //nolint: dupl data := []schema.Document{ @@ -285,13 +304,7 @@ func TestAddDocuments(t *testing.T) { redisvector.WithIndexSchema(redisvector.YAMLSchemaFormat, "./testdata/schema.yml", nil), ) require.NoError(t, err) - t.Cleanup(func() { - ctx := context.Background() //nolint:usetesting - err = vector.DropIndex(ctx, index, true) - require.NoError(t, err) - err = vector.DropIndex(ctx, newIndex, true) - require.NoError(t, err) - }) + dropIndexOnCleanup(t, vector, newIndex) } func TestSimilaritySearch(t *testing.T) { @@ -316,6 +329,7 @@ func TestSimilaritySearch(t *testing.T) { redisvector.WithEmbedder(e), ) require.NoError(t, err) + dropIndexOnCleanup(t, store, index) //nolint: dupl data := []schema.Document{ @@ -384,22 +398,21 @@ func TestSimilaritySearch(t *testing.T) { require.NoError(t, err) assert.Len(t, docs, 2) assert.Len(t, docs[0].Metadata, 3) - - t.Cleanup(func() { - ctx := context.Background() //nolint:usetesting - err = store.DropIndex(ctx, index, true) - require.NoError(t, err) - }) } func TestRedisVectorAsRetriever(t *testing.T) { httprr.SkipIfNoCredentialsAndRecordingMissing(t, "OPENAI_API_KEY") - t.Parallel() + + rr := httprr.OpenForTest(t, http.DefaultTransport) + defer rr.Close() + if !rr.Recording() { + t.Parallel() + } ctx := t.Context() redisURL := getTestURIs(t) - llm, e := createOpenAILLMAndEmbedder(t) + llm, e := createOpenAILLMAndEmbedder(t, rr) index := "test_redis_vector_as_retriever" store, err := redisvector.New(ctx, @@ -408,15 +421,17 @@ func TestRedisVectorAsRetriever(t *testing.T) { redisvector.WithEmbedder(e), ) require.NoError(t, err) + dropIndexOnCleanup(t, store, index) + // Fixed ids keep the document keys, which reach the LLM prompt, stable for httprr replay. _, err = store.AddDocuments( ctx, []schema.Document{ - {PageContent: "The color of the house is blue."}, - {PageContent: "The color of the car is red."}, - {PageContent: "The color of the desk is orange."}, - {PageContent: "The color of the lamp beside the desk is black."}, - {PageContent: "The color of the chair beside the desk is beige."}, + {PageContent: "The color of the house is blue.", Metadata: map[string]any{"ids": "house"}}, + {PageContent: "The color of the car is red.", Metadata: map[string]any{"ids": "car"}}, + {PageContent: "The color of the desk is orange.", Metadata: map[string]any{"ids": "desk"}}, + {PageContent: "The color of the lamp beside the desk is black.", Metadata: map[string]any{"ids": "lamp"}}, + {PageContent: "The color of the chair beside the desk is beige.", Metadata: map[string]any{"ids": "chair"}}, }, ) require.NoError(t, err) @@ -445,12 +460,6 @@ func TestRedisVectorAsRetriever(t *testing.T) { // The LLM should provide some response (not error) - exact content may vary require.NotEmpty(t, result, "expected non-empty result from LLM for furniture question") - - t.Cleanup(func() { - ctx := context.Background() //nolint:usetesting - err = store.DropIndex(ctx, index, true) - require.NoError(t, err) - }) } func TestRedisVectorAsRetrieverWithMetadataFilters(t *testing.T) { @@ -466,7 +475,9 @@ func TestRedisVectorAsRetrieverWithMetadataFilters(t *testing.T) { redisURL := getTestURIs(t) e := createOpenAIEmbedder(t, rr) - index := "test_redis_vector_as_retriever_with_metadata_filters" + // Not prefixed by the retriever test's index name: on a shared REDIS_URL that + // index would also match these keys and change the prompt it replays. + index := "test_redis_vector_metadata_filters" store, err := redisvector.New(ctx, redisvector.WithConnectionURL(redisURL), @@ -474,6 +485,7 @@ func TestRedisVectorAsRetrieverWithMetadataFilters(t *testing.T) { redisvector.WithEmbedder(e), ) require.NoError(t, err) + dropIndexOnCleanup(t, store, index) _, err = store.AddDocuments( ctx, @@ -511,11 +523,6 @@ func TestRedisVectorAsRetrieverWithMetadataFilters(t *testing.T) { }, ) require.NoError(t, err) - t.Cleanup(func() { - ctx := context.Background() //nolint:usetesting - err = store.DropIndex(ctx, index, true) - require.NoError(t, err) - }) // Test that retrieval with filters works correctly (without LLM dependency) docs, err := store.SimilaritySearch(ctx, "lamp", 5, @@ -550,14 +557,25 @@ func createOpenAIEmbedder(t *testing.T, rr *httprr.RecordReplay) *embeddings.Emb } // createOpenAILLMAndEmbedder creates both LLM and embedder with httprr support for chain tests. -func createOpenAILLMAndEmbedder(t *testing.T) (*openai.LLM, *embeddings.EmbedderImpl) { +func createOpenAILLMAndEmbedder(t *testing.T, rr *httprr.RecordReplay) (*openai.LLM, *embeddings.EmbedderImpl) { t.Helper() - llmOpts := []openai.Option{} + llmOpts := []openai.Option{ + openai.WithModel("gpt-4.1-nano"), + openai.WithHTTPClient(rr.Client()), + } embeddingOpts := []openai.Option{ openai.WithEmbeddingModel("text-embedding-ada-002"), + openai.WithHTTPClient(rr.Client()), } + // Only add fake token when NOT recording (i.e., during replay) + if !rr.Recording() { + llmOpts = append(llmOpts, openai.WithToken("test-api-key")) + embeddingOpts = append(embeddingOpts, openai.WithToken("test-api-key")) + } + // When recording, openai.New() will read OPENAI_API_KEY from environment + llm, err := openai.New(llmOpts...) require.NoError(t, err) embeddingLLM, err := openai.New(embeddingOpts...) diff --git a/vectorstores/redisvector/testdata/TestRedisVectorAsRetriever.httprr b/vectorstores/redisvector/testdata/TestRedisVectorAsRetriever.httprr index 4228b8a6a..301dde1f5 100644 --- a/vectorstores/redisvector/testdata/TestRedisVectorAsRetriever.httprr +++ b/vectorstores/redisvector/testdata/TestRedisVectorAsRetriever.httprr @@ -1,36 +1,40 @@ httprr trace v1 -442 167817 +441 168112 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com -User-Agent: langchaingo-httprr +User-Agent: langchaingo-httprr Content-Length: 245 Authorization: Bearer test-api-key Content-Type: application/json {"model":"text-embedding-ada-002","input":["The color of the house is blue.","The color of the car is red.","The color of the desk is orange.","The color of the lamp beside the desk is black.","The color of the chair beside the desk is beige."]}HTTP/2.0 200 OK -Content-Length: 166988 +Content-Length: 167155 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Sat, 21 Jun 2025 17:14:10 GMT +Date: Wed, 23 Sep 2026 09:28:34 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 46 +Openai-Processing-Ms: 147 +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-8bc5ddcc7-8twjs +Via: envoy-router-6fbb69b6c9-qpwjk X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 50 +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 -X-Ratelimit-Limit-Tokens: 5000000 +X-Ratelimit-Limit-Tokens: 10000000 X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 4999953 +X-Ratelimit-Remaining-Tokens: 9999954 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_3b262756db465c4edf09fa378aa87584 +X-Request-Id: req_2becf4f79f1741b59660bba80ec1f63a { "object": "list", @@ -39,7710 +43,7710 @@ X-Request-Id: req_3b262756db465c4edf09fa378aa87584 "object": "embedding", "index": 0, "embedding": [ - 0.0046253884, - 0.008682857, - -0.008102317, - -0.005773848, - -0.01662111, - 0.023284698, - -0.0021738696, - 0.0004985071, - 0.034176134, - -0.009572598, - -0.021214947, - 0.019321883, - 0.008070767, - -0.01718903, - -0.008077077, - -0.009742974, - 0.019612152, - -0.024319574, - 0.01804722, - -0.0013038485, - -0.034857634, - 0.028067842, - -0.00035830197, - -0.0025382845, - -0.0055498355, - -0.0052911164, - 0.016696833, - -0.013579586, - 0.017050205, - 0.007849909, - -0.004199449, - -0.015018315, - -0.011749622, - -0.009648321, - -0.010146827, - -0.0058495705, - -0.0009970142, - 0.0023884168, - -0.0072251977, - -0.000027410002, - 0.017592883, - -0.002426278, - 0.005600317, - -0.031046264, - -0.005773848, - 0.0059000524, - 0.0017353095, - 0.014412534, - -0.022691539, - 0.008279004, - 0.005310047, - 0.026326222, - -0.0006846585, - -0.034327578, - 0.006237649, - -0.01109336, - 0.0061682365, - 0.015535752, - 0.0026203173, - -0.004814695, - 0.010102657, - -0.021782868, - -0.011888447, - -0.012323853, - -0.029607534, - -0.010449719, - -0.017908394, - -0.010437097, - 0.0056728846, - 0.022540092, - 0.01925878, - 0.024748668, - 0.013895096, - -0.0015065642, - 0.012885462, - 0.013440761, - -0.023423523, - -0.01224182, - 0.0013022709, - 0.010941915, - 0.0065184534, - -0.004423462, - -0.03326746, - 0.007464986, - 0.029203681, - 0.017719088, - -0.015901744, - 0.014917351, - -0.03990581, - 0.0029815773, - 0.024420537, - 0.04172315, - 0.016848277, - -0.008928956, - -0.009010989, - -0.014210607, - 0.012020962, - 0.029834703, - 0.006941238, - -0.02622526, - -0.0006353599, - 0.011320529, - -0.047982886, - 0.0075975005, - -0.030112352, - 0.0017274218, - -0.0023379351, - -0.004322498, - 0.02738634, - -0.029531812, - -0.025278727, - 0.027588265, - 0.02478653, - -0.03155108, - -0.00096230797, - -0.00007237029, - 0.00061721803, - -0.011856897, - -0.0102982735, - 0.016520146, - 0.009894419, - 0.021770246, - 0.014728045, - 0.017643364, - -0.004931434, - 0.0055025085, - -0.021934312, - -0.044121034, - -0.0052974266, - -0.0022464371, - 0.009484255, - 0.021530459, - 0.015826022, - 0.0018189199, - -0.02568258, - -0.003931265, - -0.026023332, - 0.028421214, - -0.024622465, - -0.003615754, - 0.009780835, - 0.01953643, - -0.02336042, - -0.0035558068, - 0.019750977, - 0.02854742, - 0.0033885862, - -0.0028522178, - -0.0105002, - -0.030213315, - 0.017731708, - -0.031601563, - 0.014147505, - 0.020634407, - 0.020949919, - 0.035968233, - -0.008992058, - 0.012677224, - -0.033368424, - 0.013554345, - -0.02568258, - -0.0013227791, - 0.036397327, - -0.0063859387, - 0.034302335, - 0.018829685, - 0.017630745, - 0.0049061934, - -0.028421214, - 0.0011997299, - -0.012462677, - 0.035842028, - -0.039577678, - 0.021631422, - 0.007856219, - 0.015283344, - -0.005729676, - 0.0015538908, - -0.016684212, - -0.0050292425, - -0.041622188, - -0.0054646474, - 0.0112448055, - 0.0067203804, - -0.0016611645, - 0.013036907, - 0.016141534, - -0.008373657, - 0.01779481, - 0.0019467018, - 0.021505218, - 0.004697956, - -0.0024578292, - -0.00038768392, - -0.6857438, - -0.017933635, - 0.010134207, - -0.022022655, - 0.021568319, - 0.021543078, - 0.026780559, - 0.0070106504, - -0.015800782, - -0.017302614, - -0.005950534, - -0.0013787823, - -0.010052174, - -0.0014623926, - 0.0032718473, - -0.0034832393, - 0.007856219, - 0.010071105, - 0.005070259, - 0.0050639487, - -0.0075722598, - -0.00933281, - -0.0151066575, - 0.0018567812, - 0.015788162, - 0.009831317, - 0.014791147, - 0.0016674746, - -0.02887555, - 0.014904731, - -0.015699819, - 0.03470619, - -0.0019798304, - 0.008739649, - 0.032560717, - 0.004707421, - -0.021139225, - 0.036851663, - 0.021845968, - 0.013819374, - -0.0025556376, - -0.0036630805, - 0.019334503, - -0.00015903717, - -0.010102657, - 0.0062628896, - 0.009591529, - -0.0108977435, - 0.010310894, - 0.00728199, - 0.0066825193, - -0.009496876, - -0.008992058, - 0.0210004, - 0.021341152, - 0.00041371357, - 0.03649829, - 0.020773232, - -0.010172069, - -0.006650968, - -0.008058147, - 0.0024956905, - -0.012462677, - -0.021467356, - -0.0151066575, - 0.002009804, - -0.027739711, - -0.016091052, - -0.0141601255, - -0.005366839, - -0.0008116516, - 0.017138548, - -0.022994429, - 0.02301967, - 0.002621895, - -0.0019498569, - 0.034781914, - -0.008865854, - -0.010809401, - 0.0131757315, - 0.015371687, - -0.018034598, - -0.012121926, - -0.018867547, - 0.008998369, - -0.01572506, - -0.018892787, - -0.019889802, - 0.004436082, - -0.027058208, - 0.020243173, - -0.0074145044, - -0.014904731, - -0.025139902, - -0.013289316, - 0.009787146, - -0.0068150335, - 0.020154832, - 0.016141534, - -0.02187121, - -0.017542401, - -0.0089857485, - 0.0007256749, - 0.010418167, - 0.032131623, - 0.012222889, - -0.0044423924, - 0.023549728, - 0.003931265, - -0.026326222, - 0.022110999, - -0.005679195, - -0.015030935, - 0.0062471144, - -0.004694801, - -0.023574969, - 0.014904731, - 0.007641672, - 0.029859943, - -0.013630067, - 0.020180073, - 0.0032813125, - -0.00070871616, - -0.0033033981, - 0.01516976, - 0.0052753408, - -0.010714747, - -0.005127051, - -0.0047452827, - 0.00049890147, - 0.0031708837, - 0.011686521, - 0.022035275, - 0.0095852185, - 0.013276695, - 0.0033633453, - 0.006187167, - -0.008613445, - 0.03117247, - -0.007206267, - -0.014614461, - 0.01456398, - -0.011396251, - 0.006512143, - -0.009477945, - -0.031954937, - -0.038088467, - -0.019044233, - -0.02510204, - 0.016949242, - -0.005865346, - -0.00078838266, - 0.002027157, - 0.015624096, - -0.011642349, - 0.011143842, - 0.0012801852, - -0.0008305822, - -0.00844307, - 0.013453381, - 0.023436144, - 0.015952228, - -0.0027102379, - 0.0065878658, - -0.015308585, - -0.013806754, - -0.01837535, - 0.013352417, - -0.012595192, - -0.021921692, - 0.007856219, - -0.0040764, - -0.013226214, - -0.016192015, - -0.018299628, - 0.0070169605, - -0.033343185, - -0.033166498, - -0.004578062, - -0.012961185, - 0.01808508, - 0.015510512, - -0.0048020747, - -0.0027622972, - 0.016469665, - 0.0075091575, - 0.037886538, - 0.032434512, - 0.004231, - 0.0071557853, - -0.0014395181, - 0.0144503955, - 0.0012722973, - 0.022237202, - 0.011585557, - -0.009370672, - -0.0007461831, - 0.009181364, - -0.0041300366, - 0.01486687, - 0.024698187, - 0.0025161987, - 0.013630067, - -0.020369379, - -0.0028159341, - -0.04290947, - 0.02014221, - 0.0025603704, - -0.0018567812, - 0.005890587, - -0.019347124, - -0.022047896, - -0.016595868, - -0.013352417, - 0.009698803, - -0.01196417, - -0.0056192474, - 0.00641749, - 0.009528426, - -0.00700434, - 0.006048342, - 0.00009879433, - 0.029001754, - -0.0043887557, - -0.014387294, - -0.012311232, - 0.0005340021, - 0.011181704, - -0.014841629, - -0.010134207, - -0.021214947, - 0.00728199, - -0.008121248, - 0.009503186, - -0.0029200525, - 0.010538061, - 0.018223904, - -0.020243173, - 0.0013945578, - -0.0013188352, - 0.019220918, - 0.026300982, - 0.0017305769, - -0.0077173947, - 0.021757625, - -0.0048557115, - 0.010891434, - -0.0004089809, - -0.020482963, - 0.014791147, - -0.007730015, - -0.0049408996, - -0.01485425, - -0.00059592107, - 0.013352417, - -0.019485949, - 0.02683104, - -0.0055498355, - 0.026124295, - 0.017693847, - 0.03321698, - 0.0061335303, - -0.00073080196, - -0.007818358, - 0.009774525, - -0.0015830755, - -0.020634407, - -0.008304245, - -0.0057012807, - -0.02597285, - -0.0061398405, - -0.009496876, - 0.029228922, - -0.0016375012, - 0.0007162095, - -0.0073703327, - 0.0021107674, - -0.0016532767, - 0.012197648, - -0.00990704, - -0.007856219, - -0.023309939, - 0.0052374797, - 0.012651984, - -0.000042224223, - -0.009421153, - -0.03033952, - 0.021076122, - -0.015523132, - 0.012986425, - 0.026275741, - 0.0016422338, - 0.0063196816, - -0.008525102, - -0.0049061934, - -0.028421214, - 0.0025493274, - -0.0027938483, - 0.015737679, - -0.017024964, - 0.008846924, - -0.019359743, - -0.0079824235, - -0.001026199, - 0.008064456, - 0.022287684, - 0.0088910945, - 0.014892111, - -0.012405885, - -0.02277988, - -0.02948133, - -0.0076038106, - 0.007976114, - 0.009118263, - -0.015295965, - -0.00524379, - -0.025493274, - -0.024736049, - 0.024471018, - 0.013289316, - -0.000604992, - -0.0055498355, - -0.012784499, - -0.00092523545, - 0.08546557, - -0.018640378, - 0.0020855265, - -0.0017447749, - 0.02332256, - -0.017378336, - -0.016229877, - 0.0061903223, - -0.008316865, - 0.02650291, - 0.011427802, - -0.0021565165, - 0.0069159972, - 0.012487918, - 0.0004294891, - -0.0014387293, - 0.024168128, - -0.011585557, - 0.012330162, - -0.01951119, - -0.026755318, - 0.0028459076, - 0.014664942, - 0.0078057377, - -0.0040101423, - 0.0089478865, - 0.012778188, - 0.0006629671, - 0.021404253, - -0.009667251, - -0.0047957646, - 0.014021301, - -0.0021928002, - -0.019422846, - -0.0009157701, - -0.020217933, - -0.03437806, - -0.0073955734, - 0.012386954, - -0.02622526, - 0.029380368, - 0.0122102685, - 0.0089857485, - -0.009572598, - 0.0029815773, - 0.012065134, - -0.0014521385, - 0.041243576, - -0.012999046, - -0.010153138, - 0.030844338, - -0.017176408, - 0.0015049865, - 0.0043572043, - 0.013100009, - 0.01576292, - 0.0059284484, - 0.005511974, - 0.017555023, - -0.029809462, - -0.014955212, - -0.025846645, - -0.015914366, - 0.0029689567, - -0.0029736895, - -0.03882045, - -0.015068796, - -0.00081007404, - -0.022237202, - -0.015308585, - 0.025998091, - -0.011282667, - -0.018287007, - 0.015094037, - 0.024395296, - 0.02301967, - 0.0029200525, - -0.01896851, - -0.019650014, - 0.02011697, - -0.013074769, - -0.0021155, - 0.014980454, - 0.008815372, - -0.0041300366, - -0.002770185, - 0.0233478, - -0.027285375, - -0.007812048, - 0.022906085, - 0.0048336256, - 0.0019403915, - 0.030390002, - 0.009471634, - -0.008973127, - 0.004410841, - -0.0020397773, - 0.009193985, - -0.01662111, - 0.0024452088, - 0.010954536, - -0.031121988, - -0.013529104, - -0.004496029, - -0.0060798936, - 0.0025367069, - 0.010323514, - -0.0006215563, - -0.04142026, - 0.005310047, - 0.016860899, - -0.01721427, - 0.00005812301, - -0.030087112, - 0.0032245205, - 0.023890479, - -0.019410225, - 0.017529782, - 0.0023679086, - -0.035362452, - 0.027159171, - -0.036271125, - 0.02506418, - 0.010765229, - -0.007338782, - 0.0047168867, - 0.008802752, - -0.005950534, - -0.016166775, - 0.0039785914, - 0.0022353942, - 0.0009307569, - -0.022199342, - -0.012948564, - -0.019675255, - -0.013074769, - 0.019435467, - 0.004713732, - 0.00013073979, - -0.011320529, - -0.011257426, - 0.011869517, - 0.0030525671, - -0.0017148013, - -0.024660325, - -0.016419183, - 0.002713393, - -0.014399914, - -0.013491242, - 0.02275464, - 0.016797796, - -0.007641672, - -0.0019151507, - 0.02213624, - 0.006802413, - -0.009869179, - -0.017971497, - -0.004025918, - 0.02159356, - 0.029658018, - 0.00670145, - -0.00021198383, - 0.021732384, - -0.0095852185, - -0.0163056, - -0.011989411, - 0.0075911903, - -0.0053415983, - -0.021391634, - 0.019650014, - 0.016393943, - 0.027891155, - 0.01546003, - 0.022312924, - 0.005650799, - 0.015952228, - 0.0049945363, - -0.0027228585, - -0.015207621, - -0.037558407, - -0.018122941, - 0.0024105026, - -0.019738358, - 0.0042373105, - 0.021909071, - -0.0036094438, - 0.010922984, - 0.01956167, - 0.0077994275, - 0.0011807992, - 0.024471018, - -0.013731031, - 0.04232893, - -0.002812779, - -0.0073072305, - -0.0058053993, - -0.0089100255, - -0.011566627, - 0.008979438, - 0.0023474004, - 0.018476313, - 0.020369379, - -0.021934312, - -0.008260073, - 0.003382276, - 0.019523809, - -0.0013637955, - -0.0057265214, - 0.00524379, - -0.012046203, - -0.01869086, - -0.018817065, - -0.012683535, - -0.04338905, - 0.003615754, - 0.010828331, - -0.0285979, - 0.022489611, - -0.0051964633, - -0.020533444, - -0.008859544, - -0.0040416936, - 0.011856897, - -0.0040132976, - 0.023675932, - 0.0051144306, - -0.02796688, - -0.015094037, - 0.011036568, - -0.0145766, - -0.015081417, - 0.010859882, - 0.0036346847, - -0.012664604, - -0.0034075167, - 0.011124912, - 0.0068781357, - 0.0124816075, - -0.011699141, - -0.009156124, - 0.0035558068, - 0.017681226, - -0.017971497, - 0.0074586757, - -0.008531412, - 0.025720442, - -0.006846585, - -0.021719765, - 0.005098655, - -0.01109336, - -0.015295965, - -0.0095852185, - -0.025834026, - 0.012292301, - 0.004899883, - -0.008096008, - 0.0035968234, - 0.010758919, - -0.012879152, - -0.0072567486, - -0.009143503, - 0.047023732, - 0.0040921755, - 0.012355404, - 0.015560994, - 0.026376704, - 0.0042026043, - -0.011617108, - 0.010310894, - 0.026174778, - -0.001064849, - 0.0015578347, - -0.007149475, - 0.05133992, - 0.02160618, - -0.009761904, - -0.005155447, - -0.014929972, - -0.0221741, - -0.013768892, - 0.0145766, - -0.0008936844, - -0.015346446, - -0.0034043617, - -0.027790193, - -0.010254102, - -0.027764952, - -0.013024286, - 0.01077785, - -0.0030572999, - -0.016368702, - -0.01370579, - -0.022010034, - 0.02796688, - 0.02097516, - 0.000101259255, - -0.0057864683, - 0.010077416, - -0.025240865, - 0.018186044, - -0.023133254, - 0.02243913, - -0.013352417, - 0.008424139, - 0.011755933, - -0.01840059, - 0.010620094, - -0.00042160132, - -0.02826977, - -0.045685966, - 0.009837627, - -0.009200295, - 0.012424816, - -0.0063070613, - -0.018539416, - 0.01077785, - 0.009093022, - -0.01544741, - -0.021795487, - 0.0105696125, - -0.0059726196, - -0.0019041077, - 0.021909071, - -0.0141601255, - -0.0031393326, - 0.01898113, - -0.016797796, - -0.00031531363, - -0.026351463, - -0.012765568, - 0.01604057, - 0.025632098, - -0.000017587263, - -0.021959553, - 0.00019009526, - -0.015422169, - -0.017908394, - 0.00510812, - -0.0055498355, - 0.0015278611, - 0.03589251, - 0.025278727, - -0.0039217994, - 0.0054078554, - -0.02683104, - -0.009541047, - -0.021517837, - -0.021265429, - -0.016229877, - -0.027739711, - 0.007767876, - 0.016797796, - -0.00670145, - -0.01985194, - 0.00078838266, - 0.012166097, - -0.0035968234, - -0.018501554, - 0.011402561, - 0.015624096, - 0.016671592, - -0.005429941, - -0.004672715, - 0.021644043, - -0.0016035837, - 0.0059726196, - -0.0057580722, - 0.0038082155, - 0.0020902592, - -0.012563641, - 0.021139225, - 0.012052514, - 0.006556315, - -0.019321883, - 0.009168744, - 0.008367347, - 0.0052027735, - 0.012399575, - -0.00846831, - 0.010998707, - -0.008379967, - 0.012872841, - 0.0082916245, - 0.007351402, - 0.007723705, - -0.008329486, - -0.018223904, - -0.0128665315, - 0.0014521385, - -0.01137732, - -0.00033069478, - 0.020659648, - 0.00020725117, - -0.022628436, - -0.014033921, - -0.013226214, - -0.025329208, - -0.016204635, - 0.006594176, - 0.0015562571, - -0.0048336256, - 0.011528765, - 0.0023474004, - 0.011831656, - -0.007199957, - 0.0021675592, - -0.01369317, - 0.00019689847, - -0.027537784, - -0.017668605, - 0.002479915, - -0.026629113, - -0.022666298, - -0.02481177, - 0.00005743283, - -0.0013346107, - -0.004344584, - -0.028623141, - 0.027184412, - 0.010373996, - -0.010872503, - 0.0072504384, - -0.043060917, - -0.0151066575, - 0.00962939, - -0.005082879, - -0.00875227, - -0.016217256, - 0.010702127, - 0.0033633453, - -0.004404531, - -0.005723366, - 0.010146827, - 0.015813403, - 0.0056318683, - 0.04056207, - 0.2257543, - -0.0003164968, - -0.0001546989, - 0.039173823, - 0.017012343, - 0.021479977, - 0.0144503955, - 0.017062824, - 0.0029216302, - 0.015245482, - -0.0037577339, - -0.0050923447, - -0.013390279, - 0.014412534, - 0.00047247746, - -0.035185765, - -0.03031428, - -0.008682857, - -0.0063733184, - 0.007496537, - -0.019574292, - -0.025998091, - -0.0070989933, - -0.008922646, - 0.002961069, - 0.0065878658, - -0.018173423, - 0.01427371, - 0.02423123, - -0.0010743144, - -0.0018457383, - -0.035463415, - 0.010733678, - -0.0034043617, - -0.007035891, - -0.0043288083, - 0.0055151293, - -0.020861575, - 0.025707822, - 0.026881522, - 0.00041450234, - -0.003615754, - -0.024445778, - 0.0043635145, - -0.013592206, - 0.017239511, - -0.0059568444, - -0.005717056, - 0.008070767, - 0.008392587, - -0.023978822, - -0.021404253, - 0.009402222, - 0.04727614, - -0.0052090837, - 0.010935605, - 0.015687197, - -0.0021423185, - 0.017163789, - -0.0044518574, - -0.027941639, - 0.0378613, - -0.020886816, - 0.028093083, - -0.0010411857, - -0.0021265429, - -0.015220242, - 0.0010885124, - 0.008537723, - -0.015586235, - 0.015359066, - 0.010001693, - -0.0013566965, - -0.007054822, - -0.0059883953, - -0.014955212, - 0.031147229, - 0.006316527, - 0.03089482, - 0.013731031, - -0.023865238, - 0.03006187, - -0.022249823, - -0.0011918421, - 0.011320529, - -0.040057253, - 0.012128236, - -0.02450888, - 0.0135417245, - 0.0020792163, - 0.011124912, - 0.007237818, - 0.00039064183, - -0.004016453, - 0.01981408, - 0.018211285, - 0.013920337, - 0.02710869, - -0.0285979, - 0.00729461, - -0.037306, - -0.029203681, - 0.017870532, - 0.005098655, - -0.01255102, - 0.008657617, - 0.017163789, - 0.0015980623, - 0.021366393, - -0.009004679, - 0.025783544, - -0.012689845, - 0.0029342505, - 0.00006901799, - 0.016696833, - 0.00012324641, - -0.0056318683, - -0.025013698, - -0.00394073, - 0.007610121, - -0.020874195, - 0.0044139964, - -0.015195001, - 0.010859882, - 0.014942592, - -0.02329732, - -0.018602518, - 0.0102982735, - 0.0010806245, - -0.048487704, - 0.0006424589, - 0.0052595655, - 0.039527196, - -0.0034012066, - -0.01429895, - 0.034352817, - 0.015674578, - -0.033444148, - -0.011251116, - 0.0024310108, - -0.00087712007, - -0.025632098, - -0.004142657, - -0.016961861, - -0.0012478452, - -0.010121587, - 0.006512143, - 0.00045630752, - -0.029506572, - -0.018009357, - -0.019978145, - 0.001195786, - -0.017908394, - -0.011585557, - 0.02043248, - -0.02102564, - -0.01983932, - -0.012563641, - 0.008815372, - 0.0297085, - -0.010159449, - 0.019624773, - 0.022325546, - 0.004003832, - -0.019574292, - 0.013554345, - -0.16053191, - 0.027209653, - 0.01108074, - 0.005423631, - -0.012487918, - -0.022868223, - 0.006180857, - 0.006467972, - -0.013655309, - 0.024054544, - 0.025215624, - 0.008398898, - -0.017012343, - 0.0000755747, - -0.024344815, - -0.0013677394, - 0.00087238743, - -0.0068655154, - 0.018135563, - 0.013226214, - 0.013200972, - -0.014942592, - 0.015649337, - 0.00145766, - -0.006890756, - -0.010115277, - -0.011749622, - 0.03031428, - -0.0017952565, - -0.03152584, - -0.007351402, - 0.0018520484, - 0.00700434, - 0.00481785, - 0.01458922, - 0.0012636208, - -0.001751085, - 0.0075659496, - -0.00757857, - 0.0049061934, - 0.010891434, - 0.0024357436, - 0.01750454, - 0.013074769, - -0.027335858, - 0.0145766, - 0.02973374, - 0.02887555, - -0.009484255, - -0.012342784, - -0.019183058, - -0.021984793, - -0.006013636, - -0.013680549, - 0.035362452, - 0.02305753, - 0.0048336256, - 0.012185028, - -0.00016219229, - -0.0055876966, - -0.030667651, - -0.009982762, - 0.0045938375, - 0.005344753, - 0.019574292, - -0.009086711, - 0.008556654, - 0.0053415983, - -0.023739034, - 0.012633054, - -0.013365039, - -0.031475358, - -0.013150491, - -0.003382276, - -0.0035147904, - 0.008361037, - -0.017845292, - -0.00014730412, - -0.00495352, - -0.021164466, - 0.0020760612, - 0.037735093, - -0.031879213, - -0.024660325, - -0.017037584, - 0.020104349, - -0.005751762, - 0.006562625, - -0.008670237, - -0.009465325, - 0.008689168, - -0.04349001, - -0.0038492319, - -0.024534121, - 0.021177087, - 0.020407239, - 0.017655985, - -0.001510508, - -0.0027212808, - -0.009168744, - 0.005048173, - -0.0076984637, - -0.012513159, - 0.0028774587, - 0.03617016, - 0.013882476, - 0.0035810478, - 0.027159171, - 0.031652045, - 0.022363408, - -0.008954197, - 0.015977468, - 0.012917013, - 0.01312525, - 0.002741789, - -0.009351741, - 0.018198663, - -0.015409549, - -0.0029484485, - 0.0053415983, - 0.04841198, - 0.0051207407, - -0.018488934, - 0.012450057, - 0.00034508997, - 0.0013472312, - -0.094855174, - -0.010714747, - 0.023865238, - 0.0125005385, - 0.0032213654, - 0.00554037, - -0.0071116136, - 0.034504265, - 0.019902423, - 0.01893065, - -0.0041836733, - -0.013491242, - 0.006124065, - -0.026578631, - 0.010714747, - 0.0063196816, - 0.011150152, - -0.020243173, - -0.032636438, - 0.016671592, - -0.0028112014, - -0.0064616613, - -0.013655309, - -0.008859544, - 0.0020776386, - -0.016482284, - -0.042127006, - 0.02652815, - 0.0049345894, - 0.013377659, - 0.028648382, - 0.002083949, - -0.008064456, - -0.007723705, - -0.0021107674, - -0.0151066575, - 0.010077416, - -0.008133869, - 0.019460708, - -0.019448087, - -0.0012194493, - -0.023373041, - 0.001822075, - -0.041925076, - 0.0115350755, - 0.00072725245, - -0.017289992, - 0.015586235, - -0.009888109, - -0.0007449999, - -0.0054047005, - 0.010847262, - -0.0056539536, - 0.00008375826, - 0.025632098, - -0.018804444, - 0.01427371, - 0.019485949, - -0.04603934, - 0.0080013545, - 0.004461323, - 0.0056539536, - -0.000086026, - 0.02912796, - -0.0053920797, - -0.0056129373, - -0.024647705, - -0.0055561457, - 0.0073577124, - -0.03382276, - -0.01808508, - 0.033116017, - 0.0011484594, - 0.023663312, - -0.017744329, - -0.006288131, - -0.04467633, - 0.0007591979, - 0.020899437, - -0.022805123, - -0.011314218, - -0.013781512, - 0.007919322, - -0.026351463, - 0.0033444148, - 0.019738358, - 0.0075091575, - 0.009837627, - 0.009496876, - 0.00032477896, - 0.018021978, - 0.02392834, - -0.014614461, - -0.024534121, - -0.007433435, - 0.012020962, - -0.025821405, - 0.0048904177, - 0.008058147, - -0.018122941, - -0.022691539, - -0.023221597, - -0.043010436, - 0.019132577, - -0.0108977435, - -0.022880845, - 0.008335796, - -0.014475636, - -0.005026087, - -0.014071782, - -0.021845968, - 0.023701172, - 0.00583064, - 0.026629113, - -0.0030478344, - -0.013604826, - -0.01077785, - 0.009749284, - -0.013604826, - -0.0018504709, - 0.009029919, - -0.00016100911, - -0.010809401, - 0.0019750977, - 0.011806414, - -0.0018110321, - -0.031071505, - 0.0036378398, - -0.0062471144, - 0.010941915, - -0.03793702, - -0.024193369, - 0.0061145998, - -0.025316589, - 0.006357543, - 0.05073414, - -0.021656662, - -0.024256472, - -0.009263397, - 0.00786253, - 0.020773232, - -0.026174778, - -0.03445378, - -0.04407055, - 0.0016390787, - -0.028749345, - 0.006903377, - 0.012361714, - 0.0010064795, - -0.0006988565, - 0.0073072305, - 0.006467972, - 0.008316865, - 0.021568319, - -0.006512143, - -0.008802752, - 0.0039817467, - -0.034251854, - -0.0022353942, - -0.0010033244, - 0.018589897, - -0.005155447, - 0.022401268, - -0.018804444, - 0.005511974, - 0.003467464, - 0.026376704, - -0.004344584, - 0.017883154, - 0.019145196, - -0.0026739542, - -0.04139502, - 0.004590682, - -0.009074091, - 0.038643766, - -0.0004290947, - 0.02476129, - 0.0039912118, - 0.014765906, - -0.011112291, - -0.013667929, - 0.030465724, - -0.0017810586, - 0.024054544, - -0.020609166, - 0.024079785, - 0.02129067, - 0.010172069, - -0.023108013, - 0.0014371518, - 0.0017826362, - 0.01750454, - -0.031879213, - 0.0025177763, - 0.013566965, - 0.010645335, - -0.009806076, - 0.004985071, - 0.008689168, - -0.0105885435, - 0.0030951612, - 0.06653492, - -0.01166759, - 0.0015562571, - -0.029557053, - -0.03500908, - -0.02683104, - 0.009440084, - -0.006941238, - -0.01458922, - 0.005881122, - 0.00786253, - 0.0070800628, - -0.0017637055, - -0.0039028688, - 0.02187121, - -0.007730015, - 0.018021978, - -0.018728722, - -0.011654969, - -0.0043035676, - 0.033040293, - -0.010273032, - 0.008266384, - 0.0016248807, - -0.007117924, - 0.0021375858, - 0.007471296, - 0.017782189, - -0.011307907, - 0.0016501215, - 0.011352079, - 0.011686521, - -0.001941969, - -0.00845569, - 0.0016611645, - -0.020747991, - -0.007117924, - 0.009761904, - 0.018766584, - 0.013554345, - 0.042404655, - 0.006243959, - -0.04134454, - 0.015359066, - -0.0003677673, - 0.01660849, - 0.0079824235, - 0.031652045, - 0.015207621, - -0.011295287, - -0.0002675926, - -0.0009244467, - 0.026906762, - 0.00149631, - -0.031349156, - -0.02127805, - -0.02131591, - 0.026452428, - -0.03122295, - -0.0062029427, - -0.006613107, - 0.017024964, - 0.022590574, - -0.0034043617, - -0.015510512, - -0.01808508, - 0.012948564, - -0.017655985, - -0.005578231, - -0.006802413, - 0.006316527, - -0.0030872733, - -0.024647705, - 0.00048352033, - 0.0043635145, - 0.0039028688, - -0.009471634, - -0.0043319636, - 0.0016816726, - 0.011105981, - 0.0025367069, - 0.033418905, - -0.008436759, - -0.006619417, - 0.0073892632, - 0.011232185, - -0.019132577, - -0.01311263, - -0.021479977 + 0.0045962376, + 0.00861834, + -0.008126223, + -0.0057255807, + -0.016656235, + 0.023255637, + -0.0021608942, + 0.0004629361, + 0.03417052, + -0.009558408, + -0.021224082, + 0.019343946, + 0.008006349, + -0.017110497, + -0.008088369, + -0.009735065, + 0.019672023, + -0.024353435, + 0.018031636, + -0.0012744544, + -0.03485191, + 0.028063232, + -0.0003330064, + -0.0025457542, + -0.0055268416, + -0.005293402, + 0.01669409, + -0.013539501, + 0.017047405, + 0.007836002, + -0.0042019137, + -0.01500323, + -0.011741384, + -0.009659355, + -0.010170398, + -0.0058580735, + -0.0010071029, + 0.0023943337, + -0.007186156, + 0.000008675122, + 0.01755214, + -0.0024795078, + 0.0055457694, + -0.030965455, + -0.0057445085, + 0.005832837, + 0.0017397564, + 0.0144227855, + -0.022713048, + 0.008290263, + 0.0053501846, + 0.026296662, + -0.0006660128, + -0.03437241, + 0.0062997164, + -0.011110466, + 0.0062050787, + 0.015596293, + 0.0025773, + -0.004785513, + 0.010145161, + -0.02176667, + -0.011899114, + -0.012328138, + -0.029602673, + -0.010511094, + -0.017905453, + -0.010498475, + 0.005618325, + 0.022511154, + 0.019268235, + 0.024782458, + 0.0139180515, + -0.001563888, + 0.012782399, + 0.013451172, + -0.023444913, + -0.012290282, + 0.0012602587, + 0.010908572, + 0.006561547, + -0.004507909, + -0.033287235, + 0.007507924, + 0.029224122, + 0.017791888, + -0.015911752, + 0.014902283, + -0.039899256, + 0.0029921287, + 0.024429144, + 0.041716296, + 0.016845511, + -0.008959035, + -0.009053674, + -0.014183037, + 0.011993751, + 0.029880276, + 0.006914861, + -0.026220951, + -0.00060213235, + 0.011318669, + -0.048025478, + 0.00761518, + -0.03015788, + 0.0017019013, + -0.0023186237, + -0.004255542, + 0.027432315, + -0.029577436, + -0.025337666, + 0.027508024, + 0.024782458, + -0.031520665, + -0.00094085647, + -0.00008300515, + 0.0006277634, + -0.011854949, + -0.0102397995, + 0.01654267, + 0.009911722, + 0.021817144, + 0.014637298, + 0.017640468, + -0.004946397, + 0.005485832, + -0.021968564, + -0.044113785, + -0.005362803, + -0.0021640488, + 0.009413296, + 0.021526922, + 0.015836041, + 0.0018312394, + -0.025640508, + -0.0038643728, + -0.026094768, + 0.028416546, + -0.024656275, + -0.00353945, + 0.009779229, + 0.019558458, + -0.023369202, + -0.0035993871, + 0.019836063, + 0.02861844, + 0.003400648, + -0.0028706768, + -0.0105174035, + -0.030258827, + 0.017779268, + -0.031596374, + 0.0141451815, + 0.020580545, + 0.020984333, + 0.0360128, + -0.008977963, + 0.012662524, + -0.03333771, + 0.013526882, + -0.025716217, + -0.0013304483, + 0.036441825, + -0.006362808, + 0.034321938, + 0.018839212, + 0.017564757, + 0.0049053873, + -0.028366074, + 0.0011963783, + -0.012403848, + 0.035810906, + -0.039571177, + 0.021640487, + 0.007886475, + 0.01523036, + -0.0057034986, + 0.0015607334, + -0.01669409, + -0.0049716337, + -0.041665826, + -0.0055299965, + 0.0111987945, + 0.006681422, + -0.0016798192, + 0.012946437, + 0.016138883, + -0.008353354, + 0.017817125, + 0.0018959086, + 0.021514304, + 0.004731885, + -0.0024479618, + -0.00040891374, + -0.6856312, + -0.017981162, + 0.010132543, + -0.02200642, + 0.02161525, + 0.021526922, + 0.026725687, + 0.0070284265, + -0.01577295, + -0.017211443, + -0.005914856, + -0.0013501645, + -0.010088379, + -0.0015402286, + 0.0032902374, + -0.0035236771, + 0.007829692, + 0.01008207, + 0.0049905614, + 0.005022107, + -0.0075647067, + -0.009324968, + -0.015066322, + 0.001839126, + 0.01577295, + 0.009823393, + 0.014788718, + 0.0016861283, + -0.028896045, + 0.014902283, + -0.015735095, + 0.03470049, + -0.0020094737, + 0.008719287, + 0.03263108, + 0.0047129574, + -0.02114837, + 0.036896084, + 0.021791907, + 0.013829722, + -0.0024952807, + -0.0036151602, + 0.019343946, + -0.00020209092, + -0.010126234, + 0.006255552, + 0.009501625, + -0.010933809, + 0.010334437, + 0.0074069775, + 0.00669404, + -0.009451152, + -0.00892749, + 0.021034807, + 0.021299792, + 0.00046254176, + 0.036492296, + 0.020795057, + -0.010151471, + -0.0066435663, + -0.00815146, + 0.0025268267, + -0.012485867, + -0.021400739, + -0.015129413, + 0.002026824, + -0.027785629, + -0.01608841, + -0.0141451815, + -0.005340721, + -0.00081625016, + 0.017097877, + -0.02294018, + 0.023053743, + 0.0026277734, + -0.0019590005, + 0.03480144, + -0.008877017, + -0.010801316, + 0.013135713, + 0.015343926, + -0.018019019, + -0.012126244, + -0.018813975, + 0.009028437, + -0.015697239, + -0.01885183, + -0.019911772, + 0.004432199, + -0.027104238, + 0.020214614, + -0.0074069775, + -0.014864428, + -0.025135772, + -0.013299751, + 0.009817084, + -0.0067508225, + 0.02015152, + 0.016138883, + -0.021905473, + -0.017577376, + -0.008971654, + 0.0007425116, + 0.010397528, + 0.03210111, + 0.012302901, + -0.004485827, + 0.023508005, + 0.0039022279, + -0.026246188, + 0.02215784, + -0.0056877257, + -0.015066322, + 0.0061956146, + -0.004763431, + -0.02360895, + 0.014940138, + 0.0076404167, + 0.02977933, + -0.013690921, + 0.02016414, + 0.0032586914, + -0.00073304784, + -0.003369102, + 0.0151041765, + 0.0052965567, + -0.010700369, + -0.0050725807, + -0.0048202137, + 0.00042547533, + 0.0031608993, + 0.011671983, + 0.022069512, + 0.009552099, + 0.013186187, + 0.003378566, + 0.00619246, + -0.008612031, + 0.031192586, + -0.007192465, + -0.014637298, + 0.014536351, + -0.01138807, + 0.0065110736, + -0.00946377, + -0.031949688, + -0.037981264, + -0.018978013, + -0.025097918, + 0.01692122, + -0.005851764, + -0.00074448326, + 0.0019858144, + 0.015608911, + -0.01162151, + 0.011224031, + 0.0012571041, + -0.0008667236, + -0.008397519, + 0.013514264, + 0.023419676, + 0.015899133, + -0.0026987516, + 0.006580475, + -0.01530607, + -0.013842341, + -0.018372333, + 0.013413317, + -0.01261205, + -0.022031657, + 0.007810765, + -0.004078885, + -0.013211423, + -0.016214592, + -0.01838495, + 0.006977953, + -0.03333771, + -0.033135813, + -0.004583619, + -0.012996911, + 0.01806949, + 0.015470109, + -0.004763431, + -0.0027397615, + 0.016530052, + 0.0074889967, + 0.037829842, + 0.032429185, + 0.0043060156, + 0.0071483008, + -0.0014771367, + 0.0144480225, + 0.0012768203, + 0.022183077, + 0.011640437, + -0.009375442, + -0.00077997235, + 0.009154621, + -0.004138822, + 0.014889665, + 0.02476984, + 0.0024905489, + 0.013678302, + -0.020366034, + -0.0027413387, + -0.042902425, + 0.020138903, + 0.002561527, + -0.001892754, + 0.005946402, + -0.019356564, + -0.02208213, + -0.01660576, + -0.013375462, + 0.009665663, + -0.012018988, + -0.005662489, + 0.006422745, + 0.009552099, + -0.006971644, + 0.006031576, + 0.00011908577, + 0.029022228, + -0.00438488, + -0.014460641, + -0.012239809, + 0.0004830466, + 0.011160939, + -0.014864428, + -0.010132543, + -0.021198845, + 0.0073123397, + -0.008107296, + 0.009507935, + -0.0028690996, + 0.0105174035, + 0.018296622, + -0.020252468, + 0.0013951174, + -0.0013170413, + 0.019179907, + 0.026296662, + 0.0017381791, + -0.0076845814, + 0.021817144, + -0.0049116965, + 0.010858099, + -0.00034877934, + -0.020504834, + 0.014864428, + -0.007753982, + -0.0049337787, + -0.014889665, + -0.0005788673, + 0.013375462, + -0.01953322, + 0.02685187, + -0.0056025516, + 0.026145242, + 0.017741414, + 0.03321152, + 0.0060662767, + -0.0007535527, + -0.007817074, + 0.00984232, + -0.0016048977, + -0.020631019, + -0.008283953, + -0.005794982, + -0.025968585, + -0.006100977, + -0.009482698, + 0.029224122, + -0.0015694086, + 0.0007488208, + -0.007331267, + 0.0021593168, + -0.0016656235, + 0.012170408, + -0.009880176, + -0.0078486195, + -0.023381822, + 0.0052460833, + 0.012599433, + -0.000050769184, + -0.009438533, + -0.0303093, + 0.02100957, + -0.015507964, + 0.012971674, + 0.026372373, + 0.0016672008, + 0.0063501894, + -0.008567867, + -0.00488646, + -0.02839131, + 0.0025362903, + -0.0027902348, + 0.015722476, + -0.017060023, + 0.008826543, + -0.0193818, + -0.007974803, + -0.0010165666, + 0.008069442, + 0.022296643, + 0.00885178, + 0.0149275195, + -0.012403848, + -0.022801377, + -0.029501725, + -0.0076277987, + 0.008006349, + 0.009104147, + -0.015293452, + -0.0052681654, + -0.025489086, + -0.02476984, + 0.024429144, + 0.013287133, + -0.00066522416, + -0.0055489237, + -0.01276978, + -0.0008895944, + 0.085602954, + -0.018612081, + 0.0021041115, + -0.001769725, + 0.023331348, + -0.017425954, + -0.016201975, + 0.0061829966, + -0.008347045, + 0.026448082, + 0.011413307, + -0.002197172, + 0.0069211703, + 0.012492176, + 0.00043217881, + -0.0014211428, + 0.024164159, + -0.0116152, + 0.012340756, + -0.019507984, + -0.026725687, + 0.0029495417, + 0.014725626, + 0.007829692, + -0.0040410296, + 0.008990581, + 0.012795017, + 0.0006581263, + 0.021413356, + -0.009627809, + -0.004861223, + 0.013981143, + -0.002235027, + -0.019457512, + -0.00091246516, + -0.020138903, + -0.03439765, + -0.007400668, + 0.01238492, + -0.026220951, + 0.029426016, + 0.012151481, + 0.008984272, + -0.009571026, + 0.002984242, + 0.012006369, + -0.0014637298, + 0.0412368, + -0.013022147, + -0.010183017, + 0.030889746, + -0.017123114, + 0.0014353384, + 0.00438488, + 0.013148331, + 0.015810804, + 0.005933784, + 0.005523687, + 0.01755214, + -0.029804567, + -0.0149275195, + -0.025842402, + -0.015899133, + 0.002908532, + -0.002946387, + -0.03886455, + -0.015091559, + -0.00082413666, + -0.022220932, + -0.015318689, + 0.025993822, + -0.011299741, + -0.018359713, + 0.01515465, + 0.024403907, + 0.022952797, + 0.002925882, + -0.018965395, + -0.019634169, + 0.02016414, + -0.012996911, + -0.0021246164, + 0.015041085, + 0.008839161, + -0.0041230493, + -0.0027350294, + 0.023318728, + -0.027255658, + -0.00792433, + 0.022914942, + 0.004823368, + 0.0019558459, + 0.030359775, + 0.009451152, + -0.008984272, + 0.0043817256, + -0.001984237, + 0.009116765, + -0.01669409, + 0.0024448072, + 0.010933809, + -0.031066403, + -0.013577355, + -0.004548919, + -0.0061041317, + 0.0025063218, + 0.010302891, + -0.0005694035, + -0.04138822, + 0.005302866, + 0.016807655, + -0.017135734, + 0.000028194148, + -0.030208353, + 0.003277619, + 0.023861319, + -0.019331327, + 0.017577376, + 0.0023659426, + -0.03538188, + 0.027205184, + -0.036366113, + 0.025123155, + 0.010763461, + -0.007356504, + 0.004744503, + 0.008895944, + -0.0059211655, + -0.016164118, + 0.0039274646, + 0.0022097903, + 0.00082255935, + -0.022145221, + -0.012946437, + -0.01969726, + -0.013047384, + 0.019444892, + 0.0047728946, + 0.00004029496, + -0.011255577, + -0.0111987945, + 0.011911732, + 0.0030883437, + -0.0017634158, + -0.024731986, + -0.016416486, + 0.00276973, + -0.0144480225, + -0.013552119, + 0.022750903, + 0.016731946, + -0.0076593445, + -0.001903795, + 0.022107366, + 0.006839151, + -0.009873867, + -0.017981162, + -0.004100967, + 0.02161525, + 0.029602673, + 0.006681422, + -0.00030402362, + 0.02176667, + -0.009552099, + -0.016290303, + -0.011968515, + 0.0075836345, + -0.0053911945, + -0.021425975, + 0.01962155, + 0.01631554, + 0.027861338, + 0.015457491, + 0.022271406, + 0.0056372522, + 0.015962224, + 0.0049653244, + -0.0027239884, + -0.015205123, + -0.037527002, + -0.01808211, + 0.0024243025, + -0.019672023, + 0.00423346, + 0.021943329, + -0.0035552229, + 0.010883335, + 0.01953322, + 0.0077792187, + 0.001205842, + 0.02439129, + -0.013665684, + 0.042347215, + -0.0028596357, + -0.0072807935, + -0.0058044456, + -0.008914871, + -0.011495326, + 0.008952727, + 0.0023359738, + 0.018498516, + 0.020366034, + -0.021943329, + -0.008208243, + 0.0033943388, + 0.019583695, + -0.0014006379, + -0.0057413536, + 0.005302866, + -0.012037915, + -0.018675173, + -0.018801356, + -0.012719307, + -0.043381922, + 0.003608851, + 0.010788698, + -0.028643677, + 0.022435443, + -0.005239774, + -0.020580545, + -0.008895944, + -0.0040284116, + 0.011829712, + -0.0040599573, + 0.023735136, + 0.0051829913, + -0.02801276, + -0.0150284665, + 0.011047374, + -0.0146499155, + -0.01515465, + 0.010832862, + 0.0036624789, + -0.012700379, + -0.0034038026, + 0.0110978475, + 0.006801296, + 0.012479558, + -0.011690911, + -0.009173548, + 0.0035205225, + 0.017716177, + -0.017955925, + 0.0074637597, + -0.008580484, + 0.025728837, + -0.0068265325, + -0.021741435, + 0.0051672184, + -0.011123084, + -0.015255597, + -0.009564717, + -0.025817165, + 0.012252428, + 0.004848605, + -0.008119915, + 0.0035899235, + 0.0107950065, + -0.012933819, + -0.0073817405, + -0.009104147, + 0.047066484, + 0.0040820395, + 0.012334446, + 0.015533201, + 0.026347136, + 0.0041640587, + -0.011608891, + 0.010353364, + 0.026220951, + -0.0010496898, + 0.0015701972, + -0.0071735377, + 0.05130625, + 0.021590013, + -0.009741374, + -0.005186146, + -0.014952756, + -0.02215784, + -0.013766631, + 0.0145994425, + -0.00087382144, + -0.015419636, + -0.0034101119, + -0.027861338, + -0.010277654, + -0.027810866, + -0.01300953, + 0.010776079, + -0.0031198894, + -0.016353395, + -0.013678302, + -0.021993801, + 0.027987523, + 0.02099695, + 0.00009715151, + -0.005785518, + 0.010050524, + -0.025211483, + 0.018183056, + -0.023104217, + 0.022485917, + -0.013375462, + 0.008447992, + 0.011791857, + -0.018473279, + 0.010599422, + -0.00042271506, + -0.0283156, + -0.04555228, + 0.009804466, + -0.009198785, + 0.012391229, + -0.0063217985, + -0.018612081, + 0.010750842, + 0.009110456, + -0.015444873, + -0.021791907, + 0.010536331, + -0.0060284217, + -0.0019022177, + 0.021943329, + -0.0140947085, + -0.0032050635, + 0.019041106, + -0.016820274, + -0.00033596382, + -0.0263219, + -0.012795017, + 0.016037935, + 0.025640508, + 0.000056092555, + -0.021918092, + 0.000246058, + -0.015356544, + -0.017905453, + 0.0051262085, + -0.005555233, + 0.0014960644, + 0.03591185, + 0.025186246, + -0.003962165, + 0.0054448224, + -0.02677616, + -0.009501625, + -0.021451212, + -0.021261936, + -0.016227212, + -0.027659444, + 0.00777291, + 0.016832892, + -0.0067318953, + -0.019861298, + 0.00078825315, + 0.0122335, + -0.0035741504, + -0.018498516, + 0.011413307, + 0.015659384, + 0.016668854, + -0.0054826774, + -0.0046277833, + 0.02161525, + -0.0016009544, + 0.005952711, + -0.0057508177, + 0.003839136, + 0.0020394425, + -0.01261836, + 0.021123135, + 0.012056843, + 0.0065741655, + -0.019369183, + 0.009135692, + 0.008416446, + 0.0052366196, + 0.012403848, + -0.008485847, + 0.010990592, + -0.008365973, + 0.012933819, + 0.008372282, + 0.0073438855, + 0.007671963, + -0.008290263, + -0.01823353, + -0.0128518, + 0.0014605751, + -0.011356524, + -0.00039294362, + 0.020731965, + 0.00021451213, + -0.022675192, + -0.0139937615, + -0.01323666, + -0.025198866, + -0.016176738, + 0.0065741655, + 0.001552847, + -0.0047918223, + 0.011571036, + 0.0023817155, + 0.011854949, + -0.0071987743, + 0.002176667, + -0.0137161575, + 0.00022614466, + -0.027533261, + -0.01769094, + 0.002523672, + -0.02670045, + -0.022637337, + -0.024782458, + 0.00004091109, + -0.0012839182, + -0.004324943, + -0.028567966, + 0.027205184, + 0.010372292, + -0.0108707175, + 0.0072303205, + -0.043104317, + -0.015091559, + 0.009571026, + -0.005063117, + -0.008719287, + -0.016290303, + 0.010687751, + 0.0033943388, + -0.0044353534, + -0.0057665906, + 0.010151471, + 0.015836041, + 0.0056246337, + 0.04063112, + 0.22591911, + -0.0003475964, + -0.00011977584, + 0.039217863, + 0.016984312, + 0.021564778, + 0.0144732585, + 0.017034786, + 0.00296216, + 0.015205123, + -0.0037634259, + -0.0050315713, + -0.013438554, + 0.014372312, + 0.00046372472, + -0.035129514, + -0.030334538, + -0.00861834, + -0.0063186437, + 0.007501615, + -0.019608932, + -0.026044294, + -0.0071419915, + -0.008990581, + 0.0029590053, + 0.006555238, + -0.01815782, + 0.014283983, + 0.024214633, + -0.0010796584, + -0.0018848676, + -0.035482828, + 0.010731915, + -0.003416421, + -0.007015808, + -0.0043407157, + 0.005501605, + -0.020883385, + 0.025602652, + 0.02685187, + 0.00040043576, + -0.0035615321, + -0.024467, + 0.0043407157, + -0.013653065, + 0.017148351, + -0.0059211655, + -0.00569088, + 0.008119915, + 0.008397519, + -0.024000121, + -0.021400739, + 0.009375442, + 0.047344085, + -0.0052271555, + 0.010927499, + 0.015760332, + -0.0021514304, + 0.017160969, + -0.0044195806, + -0.027937049, + 0.037880316, + -0.020921241, + 0.028138943, + -0.0010110461, + -0.002069411, + -0.015268216, + 0.0010930655, + 0.00853632, + -0.015596293, + 0.01538178, + 0.010012669, + -0.0012878614, + -0.007009499, + -0.0059747933, + -0.014990612, + 0.031142112, + 0.00626817, + 0.030914983, + 0.013690921, + -0.02393703, + 0.03000646, + -0.022183077, + -0.0011695642, + 0.0112745045, + -0.04010115, + 0.012119935, + -0.024517473, + 0.013539501, + 0.0020993797, + 0.011123084, + 0.0071672285, + 0.00037657918, + -0.0039747832, + 0.01984868, + 0.018208293, + 0.0139180515, + 0.027028527, + -0.028643677, + 0.0072240112, + -0.037350345, + -0.029224122, + 0.017905453, + 0.0051293634, + -0.012530032, + 0.008719287, + 0.017148351, + 0.0015694086, + 0.021325028, + -0.008977963, + 0.025754072, + -0.012637287, + 0.0030015924, + 0.000056536166, + 0.016719326, + 0.0001789244, + -0.0056057065, + -0.025060063, + -0.003940083, + 0.0076277987, + -0.020908622, + 0.0043438706, + -0.01515465, + 0.010788698, + 0.014940138, + -0.023280874, + -0.018637318, + 0.0103092, + 0.0010347056, + -0.048429266, + 0.0006498455, + 0.005318639, + 0.039646886, + -0.0034511215, + -0.0142966015, + 0.03437241, + 0.01577295, + -0.0335396, + -0.0112492675, + 0.002411684, + -0.00091246516, + -0.025640508, + -0.0041262037, + -0.016984312, + -0.0012665679, + -0.010094688, + 0.0064732186, + 0.00037993092, + -0.029526962, + -0.017981162, + -0.019949628, + 0.0011963783, + -0.017943308, + -0.011583654, + 0.020366034, + -0.02099695, + -0.019823443, + -0.012586814, + 0.008813924, + 0.029754093, + -0.010176707, + 0.019672023, + 0.022321878, + 0.0039116917, + -0.019571077, + 0.013564737, + -0.16050553, + 0.027280895, + 0.011123084, + 0.005318639, + -0.012479558, + -0.022826614, + 0.006091513, + 0.006485837, + -0.013678302, + 0.024050593, + 0.025261957, + 0.0083849, + -0.016984312, + 0.000029845378, + -0.024277724, + -0.0014053698, + 0.0008194047, + -0.0069211703, + 0.018119965, + 0.013337607, + 0.013148331, + -0.014940138, + 0.015558437, + 0.0014755594, + -0.0068265325, + -0.01007576, + -0.011766621, + 0.030284064, + -0.001716097, + -0.0315459, + -0.0073880497, + 0.0019053724, + 0.0069653345, + 0.0048139044, + 0.014586824, + 0.001315464, + -0.0017350245, + 0.0075647067, + -0.0075647067, + 0.0049337787, + 0.0108959535, + 0.0024369208, + 0.017564757, + 0.013072621, + -0.02730613, + 0.014586824, + 0.02977933, + 0.028870808, + -0.009501625, + -0.012391229, + -0.019104198, + -0.021905473, + -0.006031576, + -0.013653065, + 0.03533141, + 0.02307898, + 0.0048517594, + 0.012176718, + -0.00013919629, + -0.0055836244, + -0.03061214, + -0.009981123, + 0.004608856, + 0.0053281025, + 0.019596312, + -0.009110456, + 0.008574176, + 0.0052839383, + -0.02376037, + 0.012662524, + -0.013337607, + -0.03147019, + -0.013123094, + -0.0034416576, + -0.003501595, + 0.008340736, + -0.017804505, + -0.00015043451, + -0.0049653244, + -0.021211464, + 0.0020189376, + 0.037754133, + -0.031899214, + -0.024681512, + -0.017022168, + 0.020075811, + -0.0057508177, + 0.006504765, + -0.008668813, + -0.009501625, + 0.008725596, + -0.043432396, + -0.0038265176, + -0.024530092, + 0.02116099, + 0.020340797, + 0.017589994, + -0.001494487, + -0.0027192566, + -0.009217712, + 0.005041035, + -0.007671963, + -0.012479558, + 0.0028517493, + 0.036189456, + 0.0139180515, + 0.0036214693, + 0.02715471, + 0.0315459, + 0.022359734, + -0.00892749, + 0.015987461, + 0.012946437, + 0.013123094, + 0.0027933894, + -0.009343895, + 0.018170439, + -0.015444873, + -0.0029369232, + 0.005362803, + 0.048429266, + 0.0051293634, + -0.018448042, + 0.012454322, + 0.00031723347, + 0.0013541077, + -0.094839595, + -0.010649896, + 0.023848701, + 0.01253634, + 0.0032003315, + 0.0055646966, + -0.0070725908, + 0.03447336, + 0.019924391, + 0.018965395, + -0.0041356673, + -0.013539501, + 0.0060820496, + -0.026574265, + 0.010712988, + 0.0063186437, + 0.01115463, + -0.020302942, + -0.032656316, + 0.016706709, + -0.0027192566, + -0.006416436, + -0.013627829, + -0.008826543, + 0.0021482757, + -0.016492197, + -0.04209485, + 0.026498556, + 0.004918006, + 0.013362844, + 0.028694151, + 0.0020410197, + -0.008088369, + -0.0077035087, + -0.0021088433, + -0.0151041765, + 0.0100631425, + -0.008119915, + 0.01947013, + -0.019419655, + -0.0011601005, + -0.02339444, + 0.0017949617, + -0.041943427, + 0.011564727, + 0.00072042947, + -0.01731239, + 0.015583674, + -0.009911722, + -0.000672322, + -0.005375421, + 0.0108454805, + -0.0056593344, + 0.00010163695, + 0.025653126, + -0.01885183, + 0.014258747, + 0.019495366, + -0.046057016, + 0.007993731, + 0.0044385083, + 0.0057034986, + -0.00003728824, + 0.029097939, + -0.005457441, + -0.005653025, + -0.024668893, + -0.005533151, + 0.0073880497, + -0.03384244, + -0.018044256, + 0.033135813, + 0.0011246114, + 0.023684662, + -0.017791888, + -0.006201924, + -0.04461852, + 0.00077129726, + 0.020933859, + -0.02276352, + -0.01130605, + -0.013766631, + 0.007892784, + -0.026372373, + 0.0033375563, + 0.019747734, + 0.007507924, + 0.009817084, + 0.009552099, + 0.00031683914, + 0.018031636, + 0.023899173, + -0.0145742055, + -0.024517473, + -0.007394359, + 0.012012679, + -0.025817165, + 0.004918006, + 0.008132533, + -0.018183056, + -0.022713048, + -0.023142071, + -0.043028608, + 0.01916729, + -0.010914882, + -0.02292756, + 0.008403827, + -0.0144732585, + -0.0050063343, + -0.0140694715, + -0.021842381, + 0.023747753, + 0.0058233733, + 0.026599502, + -0.0030331383, + -0.013564737, + -0.0107445335, + 0.009741374, + -0.0136404475, + -0.0018028482, + 0.009028437, + -0.00016206707, + -0.010731915, + 0.002053638, + 0.011779239, + -0.0017208288, + -0.031066403, + 0.0036403968, + -0.006230315, + 0.010933809, + -0.03793079, + -0.024101067, + 0.006107286, + -0.025325049, + 0.0063501894, + 0.05070057, + -0.021602632, + -0.024214633, + -0.009280804, + 0.007861238, + 0.020782439, + -0.02617048, + -0.034448124, + -0.044139024, + 0.0016577371, + -0.02876986, + 0.0068454603, + 0.012359683, + 0.0009960618, + -0.0006502399, + 0.0073249578, + 0.0064511364, + 0.008365973, + 0.021665724, + -0.0065678563, + -0.008763451, + 0.0039810925, + -0.034220994, + -0.0022287178, + -0.0009810774, + 0.018599462, + -0.005116745, + 0.022410206, + -0.018763501, + 0.0056246337, + 0.0034668944, + 0.026372373, + -0.0043123243, + 0.017943308, + 0.019192526, + -0.0027097927, + -0.04146393, + 0.004533146, + -0.009047364, + 0.038687892, + -0.00041443427, + 0.024744604, + 0.00400002, + 0.014725626, + -0.011091539, + -0.013665684, + 0.030485958, + -0.0018343941, + 0.02407583, + -0.020605782, + 0.024113687, + 0.021287173, + 0.010176707, + -0.023142071, + 0.0015047394, + 0.0017854979, + 0.017438574, + -0.031949688, + 0.0024668893, + 0.013564737, + 0.010555258, + -0.009716137, + 0.004924315, + 0.008656195, + -0.0105931135, + 0.0030788798, + 0.06647352, + -0.011665674, + 0.0014881778, + -0.029552199, + -0.035028566, + -0.02685187, + 0.009451152, + -0.0068517695, + -0.0145742055, + 0.0058454555, + 0.0077981465, + 0.007041045, + -0.0017870752, + -0.0038896094, + 0.021968564, + -0.0077666007, + 0.017968545, + -0.01870041, + -0.011634128, + -0.004290242, + 0.032959156, + -0.010271345, + 0.008277644, + 0.0015938566, + -0.0071356827, + 0.002107266, + 0.0074448325, + 0.01776665, + -0.01130605, + 0.0016261912, + 0.011318669, + 0.011690911, + -0.0019274545, + -0.008492156, + 0.0016766646, + -0.020681491, + -0.0071735377, + 0.00977292, + 0.018776119, + 0.013602592, + 0.0424734, + 0.0062429337, + -0.041337747, + 0.015369163, + -0.00036534097, + 0.016630998, + 0.007930639, + 0.031646848, + 0.015167269, + -0.011287123, + -0.00024802962, + -0.0009692478, + 0.026902344, + 0.0014361271, + -0.03131877, + -0.021325028, + -0.021375502, + 0.026448082, + -0.031268295, + -0.0062366244, + -0.0066120205, + 0.017034786, + 0.022599483, + -0.0034290394, + -0.015457491, + -0.018107347, + 0.012984293, + -0.01770356, + -0.0056120157, + -0.006763441, + 0.006388045, + -0.0030709933, + -0.024668893, + 0.00043967098, + 0.004362798, + 0.0038801457, + -0.009457461, + -0.0043344065, + 0.001630923, + 0.011148321, + 0.002599382, + 0.033438653, + -0.008403827, + -0.006580475, + 0.0074195955, + 0.01123665, + -0.019142052, + -0.013135713, + -0.02147645 ] }, { "object": "embedding", "index": 1, "embedding": [ - 0.00088795146, - -0.0046256795, - 0.004239949, - -0.0047645424, - -0.017552279, - 0.003292595, - -0.024390507, - -0.025501411, - 0.0053909686, - -0.024378164, - -0.018934736, - 0.029352544, - -0.00045130463, - -0.01876193, - -0.011676832, - -0.019416127, - 0.024896586, - -0.012713675, - 0.013577712, - -0.008282404, - -0.0074307113, - 0.017317753, - -0.029352544, - 0.011442307, - -0.0072517325, - -0.0073751663, - 0.021403411, - -0.012516181, - 0.030636255, - -0.008899572, - 0.008282404, - -0.02410661, - -0.0022495799, - -0.018107729, - -0.011226299, - -0.00753563, - 0.0047244267, - -0.006332151, - 0.000060125734, - -0.012084164, - 0.021465128, - -0.00030356986, - 0.0016894994, - -0.01876193, - 0.0031228736, - -0.005270621, - 0.007529458, - 0.010207971, - -0.001134819, - 0.020909676, - -0.004712083, - -0.0028235468, - -0.008214516, - -0.032833375, - 0.011510196, - -0.006720967, - -0.0077146087, - 0.03310493, - -0.022724152, - -0.013948013, - 0.014947826, - 0.00077647535, - -0.009664862, - -0.002542735, - -0.012337202, - -0.006517302, - 0.017885549, - 0.011460823, - -0.005838416, - 0.024736121, - 0.0074862563, - -0.00063799816, - 0.013182724, - -0.0019456244, - -0.008362636, - -0.023057424, - -0.029994398, - 0.0033018526, - 0.016564809, - -0.003980738, - 0.0107140485, - -0.0034252864, - -0.03127811, - 0.026538255, - 0.024674404, - 0.0031691613, - -0.044683013, - 0.004178232, - 0.0017959609, - -0.0044281855, - 0.011676832, - 0.033055555, - 0.021958863, - -0.016404344, - -0.002405415, - 0.005566862, - 0.020465314, - 0.026217327, - -0.0014997199, - -0.023859743, - 0.013330844, - 0.00583533, - -0.029722845, - 0.012324859, - -0.036166087, - -0.0235635, - 0.009047694, - 0.006764169, - 0.010152426, - -0.02432879, - -0.021749025, - 0.03105593, - 0.03591922, - -0.03675857, - 0.016885735, - 0.0029670387, - 0.012479152, - -0.009782124, - -0.026711062, - -0.001616982, - 0.016145132, - 0.032858063, - -0.001114761, - -0.014170193, - 0.024822526, - 0.0033635695, - -0.0113250455, - -0.032389015, - 0.006764169, - -0.004314009, - -0.0018761929, - 0.0005253649, - -0.011368248, - 0.015972326, - -0.008967461, - 0.015046573, - -0.02853788, - 0.03873351, - -0.02136638, - -0.03349992, - 0.01218291, - 0.02034188, - -0.02132935, - 0.005616235, - -0.0085231, - 0.0201197, - 0.012485323, - 0.011757064, - 0.005681038, - -0.023464754, - 0.028488507, - -0.028834121, - 0.039523482, - 0.009455024, - 0.017502904, - 0.017416501, - 0.0057242396, - -0.01507126, - -0.029821591, - 0.013812236, - -0.007979992, - 0.01115841, - 0.024341134, - -0.006603705, - 0.014713302, - 0.023662249, - 0.011584257, - 0.0005986536, - -0.0042954944, - -0.0047028256, - -0.010152426, - 0.05070658, - -0.018539747, - -0.0022048352, - -0.0032463074, - 0.023526471, - 0.015058916, - 0.011615115, - -0.024353478, - -0.010485697, - -0.0039591375, - 0.0011386763, - 0.033845533, - 0.0052366764, - 0.017638681, - 0.013738176, - 0.012837109, - -0.017490562, - -0.0006298978, - -0.011991588, - 0.01521938, - 0.03490706, - 0.01064616, - -0.0043880697, - -0.690044, - -0.022144014, - 0.007554145, - -0.0017188148, - 0.013392561, - 0.03387022, - 0.029352544, - 0.003453059, - -0.016651211, - 0.0011641345, - -0.0073504793, - 0.000075892465, - 0.0028914353, - -0.014293627, - 0.0077948407, - -0.029352544, - -0.015058916, - 0.009794467, - -0.017515248, - 0.03251245, - -0.011738549, - -0.019761741, - -0.021539187, - -0.003292595, - 0.025995146, - 0.025303917, - 0.00698635, - 0.0030611567, - -0.003258651, - 0.002366842, - -0.012787736, - -0.002877549, - -0.004098, - -0.008029365, - 0.036240146, - -0.013219753, - -0.0112695005, - 0.031080617, - 0.012016275, - 0.031450916, - 0.013960356, - 0.014392374, - -0.00020250848, - -0.026809808, - -0.003017955, - -0.011096694, - -0.0043294383, - -0.015676085, - 0.016663555, - 0.0030009828, - 0.008640362, - 0.001340799, - 0.009887042, - 0.025723591, - 0.005076213, - -0.00603591, - 0.025452038, - 0.015824206, - -0.026439507, - 0.006091455, - -0.0023791853, - 0.011392934, - -0.0010437865, - -0.021563875, - 0.004789229, - 0.0053847968, - -0.006850573, - 0.010886856, - 0.009257531, - 0.004196747, - -0.015997013, - 0.0039437083, - -0.010053678, - 0.0067703407, - 0.000020588363, - -0.0053724535, - 0.041399676, - 0.012047133, - -0.009232844, - 0.01957659, - 0.018441001, - 0.0073751663, - -0.020415941, - -0.0083317775, - 0.020662809, - -0.025575472, - -0.0331543, - -0.013935669, - 0.01745353, - -0.01060913, - 0.016268566, - 0.029253798, - -0.021008423, - -0.0051718736, - -0.011072007, - 0.006455585, - -0.009152612, - 0.0124297775, - 0.0077763256, - -0.0028142894, - 0.0046380227, - -0.030043773, - -0.010331404, - 0.009954931, - 0.019650651, - 0.018848332, - -0.021428097, - 0.002741772, - -0.0033882563, - -0.023501784, - 0.028982243, - 0.01108435, - -0.013553025, - 0.034043025, - -0.0128741395, - -0.02527923, - 0.01587358, - 0.0147009585, - 0.022896959, - -0.045053314, - 0.0160217, - 0.006930805, - 0.00013182338, - 0.011466995, - -0.006387696, - -0.022551345, - 0.0030102404, - 0.008072566, - -0.015416875, - -0.029500665, - 0.027426977, - 0.0027973172, - 0.019230977, - 0.0070172083, - 0.00867122, - -0.008467555, - 0.016638868, - 0.00064031256, - 0.01167066, - -0.017305411, - -0.017897893, - 0.014898453, - -0.018120073, - 0.008350292, - 0.0024717606, - -0.006653079, - -0.034043025, - 0.0024239302, - -0.0006538131, - 0.0061315713, - -0.019230977, - -0.008757624, - -0.020625778, - -0.004530018, - -0.011016461, - 0.004850946, - -0.022613062, - -0.009689549, - -0.003980738, - 0.0060883695, - 0.021563875, - 0.014626899, - -0.011806438, - 0.000023131772, - -0.011306531, - -0.011041149, - -0.007115955, - 0.034067713, - -0.029550038, - -0.0145898685, - 0.007949133, - -0.014071447, - -0.013553025, - -0.008350292, - -0.019193947, - 0.0008524643, - -0.016231537, - -0.024476912, - -0.008590989, - -0.0028065748, - 0.009714236, - -0.0059433347, - 0.0033419686, - -0.0103252325, - 0.03216683, - 0.0029840106, - 0.025723591, - 0.027575098, - -0.013121007, - 0.033746786, - -0.023205543, - -0.01302226, - -0.0065975334, - 0.019675339, - -0.0031305882, - 0.00030569138, - -0.0088872295, - -0.00032073486, - -0.009529085, - 0.014688616, - 0.01876193, - 0.012491494, - 0.022230417, - -0.02045297, - 0.02725417, - -0.005739669, - 0.008621847, - -0.019206291, - 0.017058544, - 0.034363955, - 0.0016524692, - -0.009041522, - -0.004872547, - 0.004989809, - 0.008023193, - -0.0022989535, - 0.006936976, - 0.015281097, - 0.003053442, - -0.019366754, - -0.0262667, - 0.031253424, - 0.03512924, - -0.039967846, - -0.019514874, - -0.010405464, - 0.017354785, - 0.01309632, - 0.0012127365, - -0.017021513, - -0.03416646, - 0.010084537, - 0.0017049286, - 0.0013978871, - -0.003453059, - -0.00036316522, - 0.013688802, - -0.015281097, - 0.01902114, - -0.0056501795, - 0.015490934, - 0.028710688, - 0.020971393, - -0.018786615, - 0.017256036, - -0.011757064, - 0.022144014, - 0.010967088, - -0.009214329, - 0.022921646, - -0.013219753, - 0.0046287654, - -0.017058544, - -0.0051780455, - -0.000034763954, - -0.02220573, - 0.0463864, - -0.0031475604, - 0.012195254, - 0.012800079, - 0.011861983, - 0.0042337775, - -0.0011973073, - -0.008152799, - 0.00004204462, - 0.011146067, - -0.019206291, - -0.0034592305, - -0.00033153532, - -0.012787736, - -0.00032247065, - -0.016120447, - -0.0017851605, - -0.030068459, - 0.009066208, - 0.0024223872, - 0.010726392, - -0.003233964, - -0.000114947674, - 0.02505705, - 0.02166262, - -0.015281097, - 0.017416501, - 0.029846279, - -0.019922206, - -0.027451664, - -0.037375737, - 0.0059649358, - -0.0056069777, - 0.004384984, - 0.035030495, - 0.022995707, - 0.018120073, - 0.0128741395, - 0.0008516928, - -0.003628952, - 0.0190952, - 0.0060112234, - 0.01894708, - -0.014824392, - -0.005841502, - -0.015564995, - -0.032685254, - -0.0056563513, - 0.030414075, - 0.026834495, - 0.029278483, - 0.009850012, - 0.0042708074, - -0.0020273991, - -0.022514315, - -0.020477658, - -0.009763609, - -0.0074060243, - -0.011349733, - -0.001893165, - 0.008757624, - -0.009393307, - 0.024625031, - 0.016725272, - -0.0021539188, - -0.009856184, - 0.0037030121, - -0.0049589504, - 0.07559083, - -0.0058847037, - 0.0046873963, - 0.0019857404, - 0.007239389, - -0.013034604, - -0.02436582, - -0.022106983, - 0.0013438849, - -0.002328269, - 0.0007247875, - -0.021934176, - -0.00004491349, - -0.010343747, - 0.003295681, - -0.0016925852, - 0.003289509, - -0.0140344165, - 0.0160217, - -0.017700398, - -0.01583655, - -0.0027309714, - 0.0011170753, - -0.017539935, - -0.007912103, - -0.005600806, - 0.017663369, - 0.005752012, - 0.02015673, - -0.0201197, - 0.018194133, - 0.012577898, - -0.01576249, - -0.016885735, - 0.0065543316, - -0.013540681, - -0.0025134196, - -0.003709184, - 0.01123247, - -0.005227419, - 0.015602025, - 0.008004678, - 0.0018900791, - -0.006529645, - 0.0041442877, - -0.0054588574, - 0.00010896885, - 0.003706098, - -0.013565368, - -0.021279978, - 0.02542735, - -0.0021755197, - -0.012664302, - 0.004159717, - -0.0026383963, - 0.014639242, - -0.028068833, - 0.0029068645, - -0.021082483, - -0.0066098766, - -0.0011973073, - -0.014071447, - -0.0008594074, - -0.0009404108, - -0.031796534, - -0.010201799, - 0.0030935581, - -0.016317941, - -0.0071529853, - 0.007634377, - 0.00035236476, - -0.019601278, - -0.0170462, - 0.025674218, - 0.03438864, - 0.01423191, - 0.0018206477, - -0.017465875, - -0.0018977937, - 0.0231932, - -0.004036283, - -0.00706041, - 0.011615115, - -0.0033789987, - -0.006190202, - 0.0064864433, - 0.013145694, - -0.020613436, - -0.012849453, - 0.014935482, - 0.02425473, - -0.0009890129, - 0.018329911, - -0.006856744, - -0.016108103, - -0.0021246034, - 0.001596924, - 0.008054052, - -0.016996827, - -0.006745654, - 0.017996639, - -0.020625778, - -0.016638868, - -0.030660942, - 0.023427725, - -0.009097067, - 0.02045297, - -0.006119228, - -0.016712928, - 0.006387696, - -0.009516741, - -0.006591362, - 0.0041936613, - -0.018120073, - 0.003233964, - 0.012688989, - -0.01616982, - 0.024291761, - -0.0026229671, - -0.04312775, - 0.009405651, - -0.032018714, - 0.03219152, - 0.027525725, - 0.010158597, - 0.011405278, - -0.0194655, - -0.006119228, - -0.014984856, - 0.011942214, - 0.009078552, - 0.018120073, - -0.010985603, - -0.0105474135, - -0.009899386, - -0.015157663, - 0.015848892, - 0.020132042, - 0.0063383225, - -0.010578272, - -0.023810368, - 0.024970645, - 0.027056675, - -0.011337389, - -0.020428285, - -0.014207223, - 0.014824392, - 0.022674778, - -0.027772592, - 0.017095573, - -0.0026167952, - -0.002879092, - -0.028340386, - 0.0028883496, - 0.023057424, - 0.0020181416, - -0.025797652, - -0.005477372, - 0.01525641, - 0.024760809, - 0.028389761, - -0.005289136, - 0.017280724, - -0.009596974, - -0.008442868, - 0.009893214, - 0.005498973, - 0.015725458, - -0.018441001, - 0.024007862, - 0.027081363, - -0.00391285, - 0.0032216206, - 0.013873952, - -0.0049003195, - 0.021958863, - 0.00013056975, - -0.003903592, - -0.0005373225, - -0.036832627, - -0.003038013, - 0.02900693, - -0.012775392, - 0.0041689747, - -0.00072787335, - -0.0031321312, - -0.006116142, - -0.0043695546, - 0.0051718736, - 0.020810928, - 0.015515622, - -0.019403784, - 0.011732377, - 0.0018700212, - -0.002920751, - -0.01302226, - -0.032018714, - -0.0010422437, - 0.015207037, - -0.0025921087, - 0.0361414, - 0.02315617, - 0.0073689944, - -0.017367128, - -0.004098, - 0.029426605, - 0.014886109, - -0.02945129, - 0.022341507, - -0.00453619, - -0.019761741, - -0.016601838, - -0.02008267, - -0.039622232, - 0.0022017495, - 0.0053909686, - -0.03895569, - 0.017441187, - -0.01583655, - -0.016268566, - -0.0011379048, - 0.014762675, - 0.0153675005, - -0.029253798, - 0.022008236, - 0.0064370697, - -0.02703199, - -0.021600904, - 0.01803367, - -0.009566115, - -0.006467928, - 0.016836362, - 0.02107014, - -0.014984856, - -0.0016262395, - -0.0070233797, - 0.010245001, - 0.015713116, - -0.030043773, - -0.0011942214, - 0.012053305, - 0.015515622, - -0.021995893, - 0.005221247, - 0.0010121567, - 0.006150086, - -0.014491121, - -0.015416875, - 0.007412196, - -0.013046946, - -0.027426977, - 0.019527217, - -0.026637001, - -0.0020459143, - 0.008769968, - -0.026439507, - 0.008745281, - -0.019477844, - -0.0077639823, - -0.004715169, - -0.018675525, - 0.03394428, - 0.0149231395, - 0.030043773, - 0.0073504793, - -0.011183097, - -0.0059495065, - -0.010028992, - 0.011621287, - 0.028562568, - -0.011584257, - -0.01002282, - -0.015861236, - 0.035055183, - 0.0076467204, - 0.005779785, - 0.0023483268, - -0.009522913, - -0.027007302, - -0.0007807184, - 0.02015673, - -0.011497853, - -0.02410661, - 0.018441001, - -0.030562194, - -0.0009913272, - -0.02992034, - 0.0035610634, - 0.015935296, - -0.0018376198, - -0.01935441, - 0.0038017593, - -0.012090335, - 0.0052335905, - 0.006106884, - -0.009627832, - 0.01825585, - 0.010275859, - -0.024131296, - 0.01233103, - -0.009288389, - 0.036882002, - 0.009479712, - 0.011343561, - 0.02084796, - -0.018206477, - 0.0252422, - -0.0007915189, - -0.018465688, - -0.009115581, - 0.02220573, - -0.0077022654, - 0.00943651, - -0.01674996, - 0.0050576977, - 0.017502904, - 0.024785494, - -0.005764356, - 0.0008462926, - 0.012713675, - -0.01674996, - -0.0066901087, - 0.021872459, - -0.01320741, - -0.0043510394, - -0.008837856, - -0.012750706, - 0.0027726304, - 0.0010900742, - -0.018107729, - -0.02084796, - 0.010905371, - -0.0035209474, - -0.021008423, - -0.0071529853, - -0.020095013, - -0.012102678, - 0.012614928, - 0.008819341, - 0.0071653286, - 0.00651113, - 0.025797652, - 0.0006133114, - 0.016145132, - -0.029080989, - 0.00698635, - 0.0077824974, - 0.006653079, - -0.014244254, - -0.016330283, - 0.00088486564, - 0.010288202, - 0.025797652, - -0.033055555, - -0.01773743, - 0.004715169, - -0.022514315, - 0.0033573979, - -0.0014974056, - 0.012003931, - 0.020206103, - -0.010041335, - -0.011744721, - 0.0033111102, - 0.004749113, - 0.007418368, - -0.001956425, - 0.010979432, - -0.0018977937, - -0.0020459143, - 0.011689175, - 0.01083131, - -0.017416501, - -0.018885363, - 0.007628205, - 0.014429404, - 0.0331543, - 0.018996453, - -0.022427911, - 0.033450544, - -0.014836736, - 0.004057884, - 0.017860861, - 0.028686002, - 0.0020165988, - -0.008547787, - -0.025772965, - -0.006936976, - 0.013960356, - -0.006057511, - -0.014466435, - 0.0028466906, - 0.013429591, - -0.013380217, - -0.016898079, - -0.003118245, - -0.024649719, - -0.017305411, - -0.0025535356, - 0.009121753, - -0.025772965, - 0.0136517715, - 0.010349919, - -0.0028281757, - -0.0055267457, - -0.008689735, - 0.0013284556, - 0.0057088104, - -0.010028992, - -0.0028713774, - -0.0017481303, - -0.00801085, - 0.0014503464, - -0.023983177, - 0.003332711, - 0.017144946, - -0.0143676875, - -0.03749917, - 0.030957183, - -0.009485883, - -0.018552091, - 0.01309632, - -0.020366568, - -0.021600904, - 0.013787549, - -0.0064123827, - -0.0028636628, - -0.010319061, - 0.008467555, - 0.0014835193, - -0.0049836375, - -0.023723966, - -0.0015436932, - 0.02816758, - -0.006702452, - 0.031549666, - 0.22060078, - 0.002110717, - 0.0037894158, - 0.02710605, - -0.017626338, - 0.03340117, - 0.006233404, - -0.010257344, - -0.010596787, - 0.012053305, - 0.009171127, - 0.011861983, - -0.028093519, - 0.0032185349, - 0.013182724, - -0.007912103, - -0.012861796, - -0.015959984, - -0.022032922, - -0.028488507, - -0.016515434, - 0.0014017444, - -0.011608943, - 0.002582851, - 0.012084164, - 0.0000014977189, - 0.0036999264, - 0.025550785, - 0.012935856, - -0.002170891, - -0.016293254, - -0.009504398, - 0.015787175, - -0.0066839373, - -0.011109036, - -0.0039467937, - 0.0005396369, - 0.014935482, - 0.013491308, - 0.023304291, - 0.020613436, - 0.009282217, - 0.015305784, - -0.026809808, - -0.016108103, - 0.006153172, - -0.016811676, - -0.017428845, - 0.0030025258, - 0.0022048352, - -0.020144386, - -0.02432879, - 0.017441187, - 0.04821322, - -0.0042276056, - 0.005400226, - 0.02710605, - 0.0058013857, - 0.0075171147, - -0.0043078377, - -0.022341507, - 0.008745281, - -0.0059865364, - 0.011676832, - -0.0016709843, - 0.01525641, - -0.02183543, - 0.014281284, - 0.011936042, - -0.0160217, - 0.022711808, - -0.008936603, - 0.015207037, - -0.0020968306, - 0.0034623165, - -0.0032216206, - 0.010707877, - -0.0043479535, - 0.032068085, - 0.014305971, - -0.0026522826, - 0.008387323, - 0.0032679082, - -0.003258651, - -0.0062766057, - -0.021674965, - 0.003962223, - 0.011547226, - 0.028266327, - 0.0016555551, - 0.010633817, - -0.005977279, - -0.010584443, - -0.027649159, - 0.0082762325, - 0.025945773, - 0.005539089, - 0.023600532, - 0.00962166, - 0.0021338607, - -0.028142894, - -0.020490002, - 0.010504211, - -0.0006842858, - -0.006702452, - 0.01400973, - 0.0041658888, - 0.0047738, - 0.020687494, - -0.024415195, - 0.020304851, - -0.024563314, - 0.022292133, - -0.0072085303, - 0.026390133, - -0.005776699, - 0.0050546117, - -0.024316447, - -0.003490089, - 0.0039560515, - -0.0045855637, - -0.0010283573, - 0.00713447, - -0.00867122, - -0.015997013, - -0.021526845, - -0.03189528, - 0.010288202, - -0.012189082, - -0.020687494, - 0.003258651, - -0.015676085, - 0.044757076, - -0.002132318, - -0.008442868, - 0.01620685, - -0.0053755394, - -0.011812609, - 0.0060081375, - -0.0041350303, - 0.016429031, - 0.0010291288, - 0.005637836, - -0.009522913, - -0.013553025, - -0.009208157, - -0.0054125697, - -0.016009357, - -0.043399304, - -0.008189829, - -0.019835802, - -0.010757251, - -0.019564249, - -0.009708064, - 0.011997759, - -0.015009543, - -0.03628952, - 0.0019163089, - 0.0029145791, - 0.03083375, - -0.009708064, - 0.020243134, - 0.013195067, - -0.009954931, - -0.008695907, - -0.018453345, - -0.15562525, - 0.019366754, - 0.0050576977, - -0.007905931, - -0.009819154, - -0.011750892, - 0.018798959, - 0.014997199, - -0.019329725, - 0.03014252, - 0.027525725, - -0.016712928, - -0.037252303, - -0.012460636, - 0.012824765, - -0.00025863227, - -0.0020783157, - 0.023501784, - 0.003607351, - 0.008362636, - 0.0048787184, - -0.028784748, - 0.020095013, - 0.0011710776, - -0.011362076, - 0.0029824679, - -0.003153732, - 0.027797278, - -0.015120633, - -0.018194133, - -0.0076467204, - -0.014466435, - 0.011466995, - 0.029846279, - -0.003826446, - -0.000231824, - -0.02323023, - 0.0044991598, - -0.018008983, - 0.019712368, - -0.015639056, - 0.009016835, - -0.000023396962, - 0.0047861435, - -0.010016648, - 0.031648412, - 0.015811862, - 0.012787736, - -0.002229522, - -0.012948199, - 0.006171687, - -0.015626712, - -0.011448479, - -0.01715729, - 0.04631234, - 0.032364327, - 0.005779785, - 0.021452785, - 0.011750892, - 0.019230977, - -0.016194507, - -0.0036474671, - 0.018428657, - 0.002190949, - 0.015614368, - -0.023983177, - 0.018231163, - 0.006628392, - -0.029105676, - 0.015244067, - -0.003453059, - -0.009066208, - -0.01291117, - -0.021971205, - 0.0016339541, - 0.0055884626, - -0.020662809, - 0.015170007, - -0.0065975334, - -0.026908556, - -0.0013739718, - 0.04571986, - -0.00094503956, - -0.01836694, - -0.0076837502, - 0.012787736, - 0.018021327, - -0.008412009, - -0.013108663, - -0.005736583, - 0.00015448504, - -0.04364617, - 0.023304291, - -0.03720293, - 0.016527778, - 0.0108251395, - -0.01693511, - -0.0011541055, - -0.0029130364, - -0.004236863, - -0.0017311582, - -0.0031336742, - -0.02425473, - -0.0019008797, - 0.010146254, - 0.021465128, - 0.017947266, - 0.019527217, - 0.041103438, - 0.025081737, - -0.008905744, - 0.015231724, - 0.0133185005, - 0.027994772, - -0.0030426418, - 0.004749113, - 0.023464754, - -0.00914644, - -0.0076590637, - 0.014614555, - 0.03915318, - -0.019996267, - 0.010436323, - 0.014491121, - 0.00998579, - -0.02073687, - -0.09376027, - -0.027377604, - 0.0034654024, - 0.0013029975, - 0.007455398, - 0.021786055, - -0.005443428, - 0.011608943, - -0.0047460273, - 0.015021887, - -0.006862916, - -0.020773899, - -0.017934922, - -0.012800079, - 0.024982989, - 0.0033635695, - 0.024020206, - -0.011689175, - -0.03826446, - 0.010103052, - -0.02015673, - -0.009529085, - -0.021131856, - 0.006150086, - -0.0013978871, - -0.0106029585, - -0.04048627, - 0.016700584, - 0.010868341, - 0.00654816, - -0.0041566314, - 0.010053678, - 0.015959984, - -0.022588374, - -0.014022073, - -0.013849266, - -0.014096133, - -0.013515995, - 0.011146067, - -0.034215834, - -0.0017867034, - 0.000072131596, - 0.004403499, - -0.027352918, - -0.018095387, - 0.008455211, - -0.0024470738, - 0.020773899, - 0.0017496733, - -0.009646347, - -0.019206291, - 0.017219007, - -0.0030935581, - 0.0034222004, - 0.030710315, - -0.024513941, - 0.020823272, - 0.0055113165, - -0.031549666, - 0.011022633, - -0.001449575, - 0.009257531, - 0.018552091, - 0.02315617, - -0.017502904, - -0.00658519, - -0.016564809, - 0.012306344, - 0.019613622, - -0.029895652, - -0.0092760455, - 0.01009688, - -0.020329537, - 0.004789229, - -0.010553585, - 0.00057820993, - -0.030488133, - -0.015540308, - 0.020909676, - -0.008171313, - -0.009263703, - -0.007868901, - 0.0029346372, - -0.03545017, - -0.018058356, - 0.024995333, - 0.005304565, - -0.027501037, - -0.0046071643, - -0.005878532, - 0.0011780207, - 0.03174716, - 0.02345241, - -0.033203676, - -0.026711062, - 0.023551159, - -0.000015573867, - 0.01708323, - -0.015453905, - -0.011763236, - -0.007467741, - -0.018589122, - -0.032907434, - 0.016848706, - -0.00973275, - -0.029204423, - 0.0025982803, - -0.008763796, - 0.009387136, - -0.018848332, - -0.008603332, - 0.022292133, - -0.021526845, - 0.0019085943, - 0.002229522, - -0.009646347, - -0.03448739, - 0.02095905, - -0.0008640362, - 0.0072455606, - -0.0074368827, - -0.006603705, - -0.0055884626, - 0.012775392, - -0.008208344, - -0.008769968, - -0.0105721, - 0.0045022457, - 0.0062426613, - 0.028809436, - -0.019218633, - -0.01803367, - 0.027426977, - -0.01291117, - 0.011201612, - 0.025797652, - -0.020539375, - -0.024723778, - 0.0017404158, - 0.010528898, - 0.008294747, - -0.023983177, - -0.007202359, - -0.031697784, - 0.009195814, - -0.009973446, - -0.01009688, - 0.001419488, - -0.023723966, - -0.004397327, - 0.0023128397, - 0.017552279, - 0.013762862, - 0.023872085, - -0.028784748, - -0.007276419, - -0.0062241466, - -0.031006556, - 0.0008617218, - 0.0013778291, - -0.0067333104, - -0.015861236, - 0.026612315, - -0.006764169, - 0.0010098423, - -0.014824392, - 0.020662809, - -0.0037832442, - -0.009060036, - -0.0039313645, - -0.0042924085, - -0.02513111, - -0.017762115, - 0.008300919, - 0.019045826, - 0.005147187, - 0.021921832, - -0.015564995, - -0.007239389, - -0.021600904, - -0.009393307, - 0.007276419, - 0.0026939414, - -0.006332151, - -0.034981124, - -0.0009342391, - 0.037005436, - 0.019564249, - -0.013812236, - 0.00076220336, - -0.0022110068, - -0.0007595032, - -0.039005063, - 0.007196187, - -0.001834534, - -0.00082700606, - -0.013898639, - -0.004650366, - -0.0062611764, - -0.008381151, - 0.0047768857, - 0.06048253, - 0.009047694, - 0.0030981868, - -0.02535329, - -0.03424052, - -0.004125773, - 0.015157663, - -0.0010075279, - -0.002266552, - -0.012639615, - -0.023440067, - 0.019996267, - -0.022847585, - -0.0063630096, - 0.020539375, - 0.0031305882, - 0.00065227016, - -0.01719432, - -0.012837109, - -0.024267074, - 0.0385607, - -0.008189829, - 0.027081363, - -0.009689549, - 0.01605873, - 0.028834121, - 0.002704742, - 0.012633444, - -0.010689362, - 0.01013391, - 0.004530018, - 0.026933242, - 0.0006198688, - 0.0015537222, - -0.0017388728, - -0.036536388, - 0.000044310786, - 0.011683004, - 0.015861236, - -0.0060636825, - 0.0447077, - -0.0012682817, - -0.040733136, - 0.027673844, - -0.0076467204, - -0.00060366816, - 0.02410661, - -0.0053940546, - -0.013602398, - -0.008115768, - 0.00060521107, - 0.011726205, - 0.018046012, - 0.005640922, - -0.025254544, - -0.0045423615, - -0.020810928, - 0.007541802, - -0.033672724, - -0.020897333, - 0.01408379, - 0.01320741, - 0.01521938, - 0.0062704342, - 0.006801199, - -0.017515248, - 0.017811488, - -0.0023745566, - 0.006369181, - -0.0011409906, - 0.0039406223, - 0.014602211, - -0.04233777, - -0.012997573, - 0.0029130364, - 0.0006260405, - -0.018008983, - -0.021242946, - 0.0086095035, - 0.020280164, - 0.0004285465, - 0.04144905, - -0.016256224, - -0.0320434, - 0.014318314, - -0.002703199, - -0.018329911, - -0.019082857, - -0.017107917 + 0.00089398306, + -0.00462804, + 0.0042670527, + -0.0047607105, + -0.017598893, + 0.003273567, + -0.024374345, + -0.025522098, + 0.0054086363, + -0.024312638, + -0.018931769, + 0.029347945, + -0.00042616535, + -0.018746648, + -0.011675002, + -0.019425428, + 0.024892684, + -0.012687, + 0.013587926, + -0.008262594, + -0.0074048643, + 0.017352065, + -0.029372627, + 0.011428174, + -0.007238255, + -0.007355498, + 0.02142474, + -0.012582098, + 0.03068082, + -0.008873495, + 0.008237911, + -0.024053467, + -0.0022800812, + -0.018117234, + -0.01122454, + -0.00754062, + 0.004739113, + -0.0063033905, + 0.00008147279, + -0.012150148, + 0.02151113, + -0.0002720902, + 0.001740143, + -0.01875899, + 0.0031362686, + -0.0052574533, + 0.007546791, + 0.010224883, + -0.0011215283, + 0.020894058, + -0.0047175153, + -0.0028323606, + -0.008151521, + -0.032852914, + 0.011496051, + -0.0066952314, + -0.007694888, + 0.033124425, + -0.022732932, + -0.013921144, + 0.0149825085, + 0.0007686403, + -0.00968186, + -0.0025608488, + -0.012384635, + -0.0065162806, + 0.017870406, + 0.0114405155, + -0.005812818, + 0.024756929, + 0.00745423, + -0.00065023964, + 0.013180658, + -0.0019345208, + -0.0083798375, + -0.023029128, + -0.029965017, + 0.003248884, + 0.016586896, + -0.003949261, + 0.010718541, + -0.0034093228, + -0.03127321, + 0.02655878, + 0.024682881, + 0.0031779208, + -0.044676013, + 0.0041528945, + 0.0017771674, + -0.0043842965, + 0.01165649, + 0.03314911, + 0.021992447, + -0.01636475, + -0.0024096663, + 0.0055845017, + 0.020474449, + 0.026237901, + -0.0015565641, + -0.023868345, + 0.01336578, + 0.0058745258, + -0.029718189, + 0.012322928, + -0.03616042, + -0.023596834, + 0.009064788, + 0.006744597, + 0.010132322, + -0.024300296, + -0.021807324, + 0.031075746, + 0.035987638, + -0.03675281, + 0.016846066, + 0.0029403481, + 0.012421659, + -0.009848469, + -0.02673156, + -0.0016167287, + 0.016154945, + 0.032877598, + -0.0011654948, + -0.014143291, + 0.024868002, + 0.0033445302, + -0.011347954, + -0.032359257, + 0.0068001337, + -0.0042824796, + -0.0018357892, + 0.0005187262, + -0.011415832, + 0.016006848, + -0.008972227, + 0.015044216, + -0.02853341, + 0.03872744, + -0.02133835, + -0.033469986, + 0.012150148, + 0.020338694, + -0.02132601, + 0.0056184405, + -0.00847857, + 0.020104205, + 0.012477196, + 0.011767563, + 0.0057233428, + -0.023436395, + 0.028434679, + -0.028829604, + 0.03956666, + 0.009496738, + 0.017512504, + 0.017450796, + 0.0057480256, + -0.01508124, + -0.02981692, + 0.013847096, + -0.00797257, + 0.011162832, + 0.024386685, + -0.0065779877, + 0.014686313, + 0.02365854, + 0.0115947835, + 0.0005488084, + -0.0043380163, + -0.0047144303, + -0.010132322, + 0.050698638, + -0.018536843, + -0.0021767216, + -0.0032612255, + 0.023510443, + 0.015007191, + 0.011551588, + -0.024374345, + -0.010471712, + -0.0039184075, + 0.0011222997, + 0.03386491, + 0.0052481974, + 0.017672943, + 0.013723682, + 0.012847439, + -0.01756187, + -0.0005977885, + -0.012020563, + 0.015179971, + 0.034852225, + 0.01062598, + -0.004362699, + -0.68993586, + -0.02211586, + 0.007546791, + -0.001740143, + 0.013415146, + 0.03386491, + 0.029347945, + 0.0034648594, + -0.016636262, + 0.0011747509, + -0.00736784, + 0.000043002205, + 0.0029372629, + -0.014291388, + 0.007787449, + -0.029347945, + -0.014994849, + 0.009817616, + -0.017500162, + 0.032532036, + -0.0117613925, + -0.019770987, + -0.021498788, + -0.0033291036, + 0.026015757, + 0.025299953, + 0.006991426, + 0.0030745612, + -0.0033167622, + 0.0023587577, + -0.012822757, + -0.0028863542, + -0.0040911874, + -0.008083643, + 0.036283836, + -0.013205341, + -0.01122454, + 0.031075746, + 0.012032905, + 0.031421307, + 0.013995193, + 0.014427143, + -0.00021192567, + -0.026805608, + -0.0029681164, + -0.011113467, + -0.0043318453, + -0.015636604, + 0.016673286, + 0.0029804579, + 0.008614325, + 0.0013591012, + 0.009885494, + 0.02571956, + 0.0050846734, + -0.006068903, + 0.025423367, + 0.015883433, + -0.026435364, + 0.00608433, + -0.0023834407, + 0.011434345, + -0.0010189401, + -0.021548154, + 0.0048039057, + 0.0053839535, + -0.0068803527, + 0.010897492, + 0.009299275, + 0.0042115166, + -0.016006848, + 0.003940005, + -0.010070615, + 0.0067816214, + 0.000030082261, + -0.005371612, + 0.041442554, + 0.012051417, + -0.00924991, + 0.019561183, + 0.018438112, + 0.007392523, + -0.020412741, + -0.008336643, + 0.020671912, + -0.025546782, + -0.033198476, + -0.013958169, + 0.017500162, + -0.010564273, + 0.016241336, + 0.029273896, + -0.021005131, + -0.0051309536, + -0.011094955, + 0.0064484025, + -0.0091511775, + 0.012421659, + 0.0077689365, + -0.0028863542, + 0.0046372963, + -0.030039065, + -0.010317444, + 0.009928688, + 0.019598207, + 0.01884538, + -0.021412399, + 0.002713574, + -0.003427835, + -0.023485761, + 0.028928336, + 0.011045589, + -0.013526218, + 0.03403769, + -0.012921488, + -0.025324635, + 0.015871093, + 0.014710996, + 0.022918055, + -0.04507094, + 0.016031532, + 0.006929719, + 0.00012987437, + 0.0114405155, + -0.0063620126, + -0.022560153, + 0.0029881713, + 0.008077472, + -0.015463824, + -0.029520726, + 0.02742268, + 0.0027922508, + 0.019178597, + 0.007016109, + 0.008645179, + -0.008435374, + 0.016648604, + 0.00063095614, + 0.011687344, + -0.017278016, + -0.017919771, + 0.014945484, + -0.018129576, + 0.008330472, + 0.0024852576, + -0.0066705486, + -0.03401301, + 0.0024405199, + -0.00062671374, + 0.0061151837, + -0.019252647, + -0.008805618, + -0.020585522, + -0.0044922843, + -0.011002394, + 0.0048902957, + -0.0226342, + -0.009712714, + -0.0039369194, + 0.006090501, + 0.021622203, + 0.014661631, + -0.011804587, + 0.0000605984, + -0.0112862475, + -0.011064101, + -0.0070901574, + 0.034062374, + -0.029545408, + -0.014587582, + 0.007923204, + -0.0140692415, + -0.013575585, + -0.008342814, + -0.019203281, + 0.00086235814, + -0.016253676, + -0.024473077, + -0.008540276, + -0.0028385313, + 0.009700372, + -0.005896123, + 0.0033815545, + -0.010348298, + 0.032186475, + 0.002978915, + 0.02571956, + 0.027644826, + -0.013118951, + 0.033815548, + -0.023238933, + -0.013069585, + -0.006615012, + 0.019647572, + -0.0031239272, + 0.00030390796, + -0.008885837, + -0.00033244755, + -0.009527592, + 0.014686313, + 0.01875899, + 0.012551244, + 0.022239275, + -0.020462109, + 0.027274583, + -0.005704831, + 0.008645179, + -0.019166257, + 0.017105237, + 0.034383252, + 0.0016367835, + -0.009033934, + -0.0048810397, + 0.004985942, + 0.007978741, + -0.0023464162, + 0.006892694, + 0.015278703, + 0.0030637626, + -0.019351378, + -0.02621322, + 0.031248527, + 0.03512374, + -0.040010948, + -0.019474793, + -0.010440858, + 0.017364407, + 0.013081927, + 0.0011678088, + -0.017055871, + -0.034210473, + 0.010082956, + 0.0016738079, + 0.0014192656, + -0.0034586887, + -0.00031875627, + 0.013674316, + -0.015315727, + 0.01901816, + -0.0056523797, + 0.015488507, + 0.02870619, + 0.020980448, + -0.018820696, + 0.017290358, + -0.011773734, + 0.022128202, + 0.011002394, + -0.009237568, + 0.022955079, + -0.013242366, + 0.0046403813, + -0.017031187, + -0.005220429, + -0.000036108355, + -0.022239275, + 0.04635445, + -0.0031779208, + 0.012174831, + 0.012785732, + 0.011884807, + 0.0042115166, + -0.00123183, + -0.008151521, + 0.000019440178, + 0.011162832, + -0.019203281, + -0.0034586887, + -0.00033726843, + -0.012748708, + -0.00030545064, + -0.016130263, + -0.0017864235, + -0.030088432, + 0.009077129, + 0.0024220077, + 0.010730882, + -0.003292079, + -0.000076218035, + 0.025065465, + 0.02168391, + -0.0152910445, + 0.017389089, + 0.02981692, + -0.019931426, + -0.027447363, + -0.037394565, + 0.0059855985, + -0.005621526, + 0.004430577, + 0.035025008, + 0.023029128, + 0.0181666, + 0.012896805, + 0.0008515594, + -0.003616042, + 0.019067526, + 0.005991769, + 0.018907087, + -0.014809729, + -0.005828245, + -0.015562556, + -0.032680135, + -0.0056431238, + 0.030433992, + 0.026830291, + 0.029347945, + 0.009811445, + 0.0042886506, + -0.0020286243, + -0.022498446, + -0.020474449, + -0.009749738, + -0.007386352, + -0.011347954, + -0.0018990391, + 0.008768593, + -0.009367153, + 0.024682881, + 0.016673286, + -0.0021921482, + -0.009811445, + 0.0037425417, + -0.004985942, + 0.07557898, + -0.0059269764, + 0.004695918, + 0.0019545755, + 0.007256767, + -0.013032561, + -0.024374345, + -0.02210352, + 0.0014084668, + -0.0022847091, + 0.0007239026, + -0.021943081, + -0.000053849173, + -0.010348298, + 0.0033105914, + -0.0017077468, + 0.0032828231, + -0.014032218, + 0.016006848, + -0.017722309, + -0.015871093, + -0.0027475131, + 0.001075248, + -0.017537186, + -0.0079170335, + -0.0056091845, + 0.017598893, + 0.005741855, + 0.020165913, + -0.020116547, + 0.0181666, + 0.012582098, + -0.015735336, + -0.016920114, + 0.006584158, + -0.013513877, + -0.0025253673, + -0.0037302002, + 0.011212198, + -0.005158722, + 0.015611921, + 0.008015766, + 0.0018728136, + -0.0065162806, + 0.0041004433, + -0.0054456606, + 0.00009458557, + 0.0037147736, + -0.013526218, + -0.02125196, + 0.02544805, + -0.0022245445, + -0.012687, + 0.0042207725, + -0.0026318121, + 0.014636948, + -0.028113801, + 0.0029079518, + -0.02107918, + -0.006584158, + -0.0011770648, + -0.0140692415, + -0.0008330472, + -0.00090709585, + -0.031766865, + -0.010212542, + 0.003119299, + -0.016303042, + -0.0071580354, + 0.00762701, + 0.0003278195, + -0.019573525, + -0.017080553, + 0.025670195, + 0.03435857, + 0.014254363, + 0.0018234478, + -0.017450796, + -0.001894411, + 0.023214249, + -0.003986285, + -0.007083987, + 0.0116071245, + -0.003350701, + -0.0062262565, + 0.006522451, + 0.013180658, + -0.020585522, + -0.012909146, + 0.014994849, + 0.02425093, + -0.0010073701, + 0.01833938, + -0.0068433285, + -0.016130263, + -0.0021042156, + 0.0016228994, + 0.00805279, + -0.01695714, + -0.0067260847, + 0.017981479, + -0.020634888, + -0.016611578, + -0.030656137, + 0.02347342, + -0.009120325, + 0.020499133, + -0.006121354, + -0.01669797, + 0.006436061, + -0.009502909, + -0.0065779877, + 0.0041775773, + -0.018154258, + 0.0032334574, + 0.012699342, + -0.01620431, + 0.024300296, + -0.0026626657, + -0.043096308, + 0.009428861, + -0.032063063, + 0.032186475, + 0.027521411, + 0.010150835, + 0.011422003, + -0.019511817, + -0.0061336956, + -0.015031874, + 0.011946514, + 0.009052446, + 0.018104892, + -0.010983882, + -0.010558102, + -0.009897835, + -0.015179971, + 0.01585875, + 0.020165913, + 0.006349671, + -0.010595126, + -0.023818979, + 0.024954392, + 0.02707712, + -0.011335613, + -0.02038806, + -0.014155632, + 0.01482207, + 0.02262186, + -0.027768241, + 0.017068211, + -0.0026333549, + -0.0028431593, + -0.02836063, + 0.0028693848, + 0.02312786, + 0.0020656486, + -0.025818292, + -0.0054610875, + 0.015229337, + 0.024781613, + 0.028409995, + -0.005297563, + 0.017327381, + -0.0096139815, + -0.008453887, + 0.009965713, + 0.0054641725, + 0.01568597, + -0.018438112, + 0.02406581, + 0.027052436, + -0.0038998951, + 0.003214945, + 0.013871779, + -0.0049304054, + 0.021980105, + 0.00013459883, + -0.0038998951, + -0.0005333816, + -0.036826856, + -0.0030622198, + 0.029027067, + -0.012736366, + 0.004146724, + -0.0006857213, + -0.003099244, + -0.0060966713, + -0.0044151503, + 0.005192661, + 0.020807669, + 0.015537873, + -0.019425428, + 0.011730539, + 0.0018758989, + -0.002883269, + -0.012970854, + -0.032013696, + -0.0009680317, + 0.015155288, + -0.0026009586, + 0.03616042, + 0.023152541, + 0.0073740105, + -0.017376747, + -0.0041004433, + 0.02947136, + 0.01490846, + -0.02947136, + 0.022350349, + -0.0045046257, + -0.019758645, + -0.016611578, + -0.020104205, + -0.039640706, + 0.002232258, + 0.005424063, + -0.039023634, + 0.017450796, + -0.01585875, + -0.016241336, + -0.001154696, + 0.01473568, + 0.015389776, + -0.029249214, + 0.022041813, + 0.00642989, + -0.026978388, + -0.021646887, + 0.01800616, + -0.009589299, + -0.0064052073, + 0.016784359, + 0.021042155, + -0.014957826, + -0.0016275274, + -0.007009938, + 0.0102187125, + 0.015722996, + -0.030063748, + -0.0012248879, + 0.012008221, + 0.015500849, + -0.021992447, + 0.0052667097, + 0.0010305103, + 0.006152208, + -0.014538216, + -0.015389776, + 0.0074048643, + -0.013057244, + -0.02742268, + 0.019499475, + -0.02665751, + -0.0020671913, + 0.00874391, + -0.026435364, + 0.008768593, + -0.019511817, + -0.007738083, + -0.004695918, + -0.018672599, + 0.033889595, + 0.014933143, + 0.030113114, + 0.007324645, + -0.011181345, + -0.0059424033, + -0.009996567, + 0.011662661, + 0.028558092, + -0.0115701, + -0.009996567, + -0.015871093, + 0.035000324, + 0.0076516927, + 0.0058004768, + 0.0023541297, + -0.009552275, + -0.026978388, + -0.0007929375, + 0.020128889, + -0.011434345, + -0.024127515, + 0.018462794, + -0.030532723, + -0.0009965713, + -0.029940333, + 0.003582103, + 0.015895775, + -0.0019283501, + -0.019339036, + 0.003788822, + -0.01208844, + 0.0052142586, + 0.0060874154, + -0.009620152, + 0.018277673, + 0.010261907, + -0.024090491, + 0.012316757, + -0.009262251, + 0.036925588, + 0.00950908, + 0.011366466, + 0.020881716, + -0.01824065, + 0.025250586, + -0.00079910824, + -0.01851216, + -0.009157348, + 0.022214592, + -0.007694888, + 0.009453543, + -0.01671031, + 0.0050599906, + 0.01748782, + 0.024756929, + -0.005766538, + 0.00086081546, + 0.012699342, + -0.01669797, + -0.0066890605, + 0.021906056, + -0.013242366, + -0.0043441867, + -0.0088303005, + -0.012736366, + 0.002724373, + 0.0010567359, + -0.018129576, + -0.020857034, + 0.010878979, + -0.0035018837, + -0.02099279, + -0.007164206, + -0.020104205, + -0.01208227, + 0.012612952, + 0.008811789, + 0.0071271816, + 0.006460744, + 0.025818292, + 0.0006012595, + 0.01620431, + -0.029101117, + 0.0069790846, + 0.0077689365, + 0.00668289, + -0.014254363, + -0.016340068, + 0.0008322759, + 0.010274249, + 0.025768926, + -0.03307506, + -0.017709967, + 0.0046897475, + -0.022523127, + 0.0034000669, + -0.0014570613, + 0.011977368, + 0.020215278, + -0.010033591, + -0.011773734, + 0.0033105914, + 0.004720601, + 0.0074665714, + -0.0019345208, + 0.010996223, + -0.0018990391, + -0.002030167, + 0.011675002, + 0.010866638, + -0.017426113, + -0.018919427, + 0.0076516927, + 0.014427143, + 0.033124425, + 0.019005818, + -0.022436738, + 0.033445302, + -0.014883777, + 0.004038736, + 0.017919771, + 0.02870619, + 0.0020224536, + -0.008552618, + -0.02579361, + -0.0069544017, + 0.013982852, + -0.0060781594, + -0.014488851, + 0.0028693848, + 0.0134521695, + -0.013378121, + -0.016858408, + -0.0030884454, + -0.024645856, + -0.017290358, + -0.002540794, + 0.009101812, + -0.025744244, + 0.013686657, + 0.010311273, + -0.0028092202, + -0.00552588, + -0.008669862, + 0.0013459884, + 0.005707916, + -0.0100644445, + -0.0028308178, + -0.0017771674, + -0.008034278, + 0.0014439485, + -0.023954736, + 0.003341445, + 0.017092895, + -0.0143654365, + -0.03751798, + 0.031001698, + -0.00951525, + -0.018549185, + 0.013094268, + -0.020375717, + -0.021622203, + 0.013822413, + -0.0063805245, + -0.0028431593, + -0.010342127, + 0.008435374, + 0.0015149118, + -0.005004454, + -0.02373259, + -0.001538052, + 0.028212532, + -0.006744597, + 0.03147067, + 0.22056621, + 0.002096502, + 0.0037672247, + 0.027101804, + -0.017635917, + 0.033445302, + 0.0062108296, + -0.010249566, + -0.010582785, + 0.012045246, + 0.009194373, + 0.01191566, + -0.028089117, + 0.0032427134, + 0.013217682, + -0.007941716, + -0.012847439, + -0.015957482, + -0.022066494, + -0.028508727, + -0.016451139, + 0.0014177229, + -0.0116071245, + 0.0025917024, + 0.012069928, + -0.000014125164, + 0.0037086029, + 0.025571464, + 0.012921488, + -0.0021366118, + -0.01627836, + -0.00951525, + 0.015821727, + -0.0067137433, + -0.011082613, + -0.003915322, + 0.00057966204, + 0.014957826, + 0.013513877, + 0.023325322, + 0.020597864, + 0.009274593, + 0.015303385, + -0.026805608, + -0.016080897, + 0.006127525, + -0.016870748, + -0.01740143, + 0.0030406222, + 0.0022091179, + -0.02014123, + -0.024287954, + 0.017413773, + 0.04823035, + -0.004223858, + 0.005390124, + 0.027101804, + 0.005760367, + 0.0074912542, + -0.004257797, + -0.022325665, + 0.008731569, + -0.005982513, + 0.011650319, + -0.0016738079, + 0.015266362, + -0.02184435, + 0.01422968, + 0.011958855, + -0.016056214, + 0.02270825, + -0.008935203, + 0.015204654, + -0.0021288984, + 0.0034741154, + -0.0031686649, + 0.0106815165, + -0.004334931, + 0.032063063, + 0.014316071, + -0.0026379828, + 0.008355155, + 0.003230372, + -0.0032365427, + -0.0062509393, + -0.021646887, + 0.0039523463, + 0.011545417, + 0.028311264, + 0.0016861493, + 0.010638322, + -0.005967086, + -0.010576614, + -0.027620142, + 0.008262594, + 0.025966391, + 0.0055752457, + 0.023596834, + 0.009632494, + 0.0021474105, + -0.028138483, + -0.020536156, + 0.010514907, + -0.0007084758, + -0.0067199143, + 0.014044559, + 0.0041960897, + 0.004763796, + 0.020696595, + -0.024399027, + 0.020351036, + -0.024584148, + 0.022300983, + -0.0072135716, + 0.026410682, + -0.0057788794, + 0.005056905, + -0.02433732, + -0.0034864568, + 0.0039523463, + -0.0045601623, + -0.001086818, + 0.00711484, + -0.008645179, + -0.015969824, + -0.021523472, + -0.031914964, + 0.010298932, + -0.0122118555, + -0.020684253, + 0.003264311, + -0.015661288, + 0.04475006, + -0.0021304411, + -0.008441545, + 0.016191969, + -0.0053345873, + -0.01182927, + 0.006007196, + -0.004140553, + 0.01646348, + 0.0009742024, + 0.005680148, + -0.009546104, + -0.013550902, + -0.009194373, + -0.0054209777, + -0.015994506, + -0.043392505, + -0.008170034, + -0.01988206, + -0.010786419, + -0.019598207, + -0.009725055, + 0.012002051, + -0.014994849, + -0.0363332, + 0.0019345208, + 0.0028909824, + 0.030878283, + -0.009737397, + 0.020276986, + 0.013230024, + -0.009996567, + -0.008725398, + -0.018462794, + -0.15560088, + 0.019388402, + 0.0050846734, + -0.007904693, + -0.009836128, + -0.011724368, + 0.018796014, + 0.015019532, + -0.019339036, + 0.03016248, + 0.027546095, + -0.016722651, + -0.03727115, + -0.012489538, + 0.012810415, + -0.00027131886, + -0.0021258132, + 0.023522785, + 0.0035759322, + 0.008355155, + 0.0049211495, + -0.028780239, + 0.020116547, + 0.0011153576, + -0.011366466, + 0.0029372629, + -0.0031810063, + 0.027792923, + -0.015105923, + -0.0181666, + -0.007670205, + -0.014513534, + 0.011428174, + 0.029841602, + -0.0037980783, + -0.00024200793, + -0.023251273, + 0.0045138816, + -0.017981479, + 0.019770987, + -0.015611921, + 0.009021593, + -0.000009364549, + 0.0047853934, + -0.010039762, + 0.031643454, + 0.015797043, + 0.012822757, + -0.0021798068, + -0.013007878, + 0.0061645494, + -0.015624263, + -0.0114528565, + -0.017179284, + 0.046329767, + 0.03240862, + 0.0058251596, + 0.021449422, + 0.011699685, + 0.019203281, + -0.016241336, + -0.0036407248, + 0.018388746, + 0.0021690081, + 0.015611921, + -0.024028784, + 0.018203624, + 0.006676719, + -0.029101117, + 0.015241679, + -0.0034926275, + -0.009033934, + -0.012921488, + -0.021967763, + 0.0016290701, + 0.0055752457, + -0.020659572, + 0.015130606, + -0.006608841, + -0.026879657, + -0.0013668145, + 0.045712695, + -0.0009680317, + -0.018438112, + -0.0076455222, + 0.012748708, + 0.017981479, + -0.008410691, + -0.013155975, + -0.005735684, + 0.00014520476, + -0.043738063, + 0.023325322, + -0.037246466, + 0.016549872, + 0.010872809, + -0.016944798, + -0.0011894063, + -0.0029125798, + -0.0042732237, + -0.0017092895, + -0.0031285551, + -0.024275612, + -0.0019036671, + 0.010126152, + 0.021474106, + 0.017956795, + 0.01954884, + 0.04114636, + 0.025090149, + -0.008935203, + 0.015229337, + 0.013353438, + 0.028039752, + -0.0030344515, + 0.0047761374, + 0.023461077, + -0.0091511775, + -0.0076455222, + 0.01464929, + 0.03914705, + -0.01996845, + 0.010440858, + 0.014513534, + 0.009990396, + -0.020770645, + -0.09379494, + -0.027373314, + 0.0034556033, + 0.0012865951, + 0.007448059, + 0.0217703, + -0.0054364046, + 0.0115947835, + -0.004732942, + 0.014994849, + -0.00685567, + -0.020869376, + -0.017919771, + -0.012785732, + 0.025040783, + 0.0033599571, + 0.024004102, + -0.011724368, + -0.03830783, + 0.010089127, + -0.020178255, + -0.00951525, + -0.021153228, + 0.006152208, + -0.0014161803, + -0.010601297, + -0.04050461, + 0.016636262, + 0.010891321, + 0.0065101096, + -0.0041436385, + 0.010039762, + 0.01594514, + -0.022584835, + -0.014081583, + -0.013834755, + -0.0140569005, + -0.013513877, + 0.011175174, + -0.03418579, + -0.0018033929, + 0.00008282263, + 0.004393553, + -0.027348632, + -0.018055527, + 0.00847857, + -0.0024405199, + 0.020795327, + 0.0017200882, + -0.00968186, + -0.019215623, + 0.017253334, + -0.0030822747, + 0.0034432618, + 0.030656137, + -0.024522442, + 0.02082001, + 0.005535136, + -0.031569403, + 0.011070272, + -0.0015071984, + 0.00924991, + 0.018487478, + 0.02312786, + -0.017500162, + -0.006590329, + -0.016599238, + 0.0123661235, + 0.019647572, + -0.029890968, + -0.009286934, + 0.010095298, + -0.020289328, + 0.004779223, + -0.010514907, + 0.00056539226, + -0.03050804, + -0.015525532, + 0.020894058, + -0.008151521, + -0.009219056, + -0.007898522, + 0.0029295494, + -0.035469297, + -0.018055527, + 0.0250161, + 0.0053438437, + -0.027546095, + -0.0046156985, + -0.005896123, + 0.0012326014, + 0.031692818, + 0.02347342, + -0.033198476, + -0.026706876, + 0.023559809, + 0.000008370244, + 0.017092895, + -0.015463824, + -0.011835441, + -0.00745423, + -0.018610891, + -0.032951646, + 0.0167967, + -0.009743567, + -0.029150482, + 0.0025809037, + -0.008774764, + 0.009398007, + -0.018833037, + -0.008620496, + 0.022288641, + -0.021461764, + 0.0019391488, + 0.0022384287, + -0.009638665, + -0.0344573, + 0.020931082, + -0.00084307464, + 0.007293791, + -0.00736784, + -0.0066890605, + -0.005655465, + 0.012785732, + -0.00823174, + -0.008768593, + -0.010582785, + 0.004507711, + 0.006254025, + 0.02880492, + -0.019215623, + -0.018018503, + 0.027447363, + -0.012909146, + 0.011175174, + 0.02579361, + -0.02056084, + -0.024756929, + 0.0017000334, + 0.01054576, + 0.008281106, + -0.02406581, + -0.00720123, + -0.0317175, + 0.009206714, + -0.009953371, + -0.010101469, + 0.001460918, + -0.023707906, + -0.0044213207, + 0.0022785384, + 0.017524846, + 0.0137483645, + 0.023868345, + -0.028730873, + -0.007318474, + -0.0062509393, + -0.03102638, + 0.0008723856, + 0.0013297902, + -0.006701402, + -0.015821727, + 0.02665751, + -0.0067569385, + 0.001011998, + -0.014846752, + 0.020696595, + -0.0037949928, + -0.009089471, + -0.0039585168, + -0.004276309, + -0.02511483, + -0.017759332, + 0.008348985, + 0.019055184, + 0.0051463805, + 0.021918397, + -0.015537873, + -0.0072197425, + -0.021634545, + -0.009410348, + 0.007269108, + 0.002695062, + -0.006349671, + -0.035000324, + -0.00094334886, + 0.03699964, + 0.019561183, + -0.013847096, + 0.0007624696, + -0.0021875203, + -0.00075398484, + -0.039048318, + 0.007170377, + -0.0018280759, + -0.0008176204, + -0.013958169, + -0.0046588937, + -0.006272537, + -0.008367497, + 0.004810076, + 0.060522422, + 0.009058617, + 0.0031424393, + -0.025398685, + -0.03418579, + -0.0041498095, + 0.015179971, + -0.001009684, + -0.0023063067, + -0.0126746595, + -0.023448735, + 0.019993134, + -0.022905713, + -0.006374354, + 0.020523814, + 0.003119299, + 0.00066836615, + -0.01721631, + -0.01285978, + -0.024300296, + 0.03857934, + -0.008207058, + 0.02700307, + -0.00968186, + 0.016117921, + 0.02887897, + 0.002729001, + 0.0126746595, + -0.010638322, + 0.010144664, + 0.0044953697, + 0.026929023, + 0.0006228571, + 0.0015642776, + -0.0017231735, + -0.036456615, + 0.000027286153, + 0.011644149, + 0.015871093, + -0.0060565616, + 0.044700697, + -0.0012611409, + -0.04072675, + 0.02766951, + -0.0075961566, + -0.0006085873, + 0.024090491, + -0.0053932094, + -0.013575585, + -0.008095984, + 0.0005711773, + 0.01173671, + 0.018055527, + 0.00565855, + -0.025262928, + -0.0045601623, + -0.020782985, + 0.0075035957, + -0.033692133, + -0.0209064, + 0.014081583, + 0.013180658, + 0.015216996, + 0.0062355124, + 0.0067877923, + -0.017500162, + 0.017858064, + -0.0023541297, + 0.006368183, + -0.0011153576, + 0.0039369194, + 0.014587582, + -0.042355824, + -0.013020219, + 0.0028724703, + 0.0005954745, + -0.018018503, + -0.021227278, + 0.008632838, + 0.02031401, + 0.0004061105, + 0.041417874, + -0.016253676, + -0.03203838, + 0.014303729, + -0.0027274583, + -0.018314697, + -0.019092208, + -0.01714226 ] }, { "object": "embedding", "index": 2, "embedding": [ - 0.013970954, - -0.01845293, - -0.0057561356, - -0.023792882, - 0.0032142159, - 0.009553008, - -0.044179462, - -0.0043090982, - 0.017966313, - -0.020668304, - 0.01085278, - 0.010968031, - -0.016263165, - 0.01936213, - -0.024535608, - -0.0054295915, - 0.031732377, - -0.001121294, - 0.01069271, - -0.022435483, - -0.045460027, - 0.0045620096, - -0.020578666, - 0.017671784, - -0.016634528, - 0.0010764742, - 0.01568691, - -0.015174684, - 0.026482066, - 0.010814364, - 0.02485575, - -0.012741612, - 0.017326033, - -0.037315637, - -0.040901218, - 0.017108336, - -0.0021545491, - 0.010071636, - -0.001343792, - -0.02070672, - 0.008509348, - 0.005573655, - -0.0036816217, - -0.0038801092, - -0.008022734, - 0.013561173, - 0.01389412, - 0.010225304, - -0.008829489, - 0.0103021385, - -0.0048053167, - 0.030861594, - -0.004152229, - -0.004270681, - 0.018248038, - -0.025611281, - -0.0008419709, - 0.017851064, - -0.020860389, - -0.016698556, - 0.012735209, - -0.002127337, - 0.005147868, - -0.0096874675, - -0.0076129534, - 0.010206096, - -0.005893796, - -0.004619635, - -0.0038128796, - 0.005730524, - 0.029324917, - 0.029350528, - 0.00071751606, - 0.015161878, - 0.0031902052, - 0.013714842, - -0.004277084, - -0.0019736695, - -0.004853338, - -0.0174797, - 0.0043347096, - -0.0129401, - -0.026136313, - -0.0008147589, - 0.027224792, - 0.011851621, - -0.0028348488, - 0.0011429035, - -0.031066485, - -0.012050108, - -0.0052695214, - 0.029478585, - 0.032423884, - -0.0012269404, - -0.013625202, - 0.016416831, - 0.022320231, - 0.020002412, - 0.005704913, - -0.029068805, - 0.0048629423, - 0.014547208, - -0.038314477, - 0.0026523683, - -0.0367778, - -0.015533242, - 0.015584465, - -0.012594348, - 0.027404072, - -0.032116547, - -0.020258524, - 0.008957546, - 0.011070477, - -0.02047622, - -0.0070174914, - -0.02006644, - 0.017133947, - -0.008406904, - -0.017902287, - -0.0156613, - 0.014560014, - 0.03736686, - 0.016813807, - -0.023165405, - 0.027224792, - 0.01144184, - -0.012511111, - -0.013356283, - 0.0059354147, - -0.0002983314, - 0.01107688, - 0.007817844, - 0.01010365, - 0.0174797, - -0.0070751165, - 0.010186887, - -0.009104811, - 0.031578712, - 0.007933094, - -0.02999081, - 0.015238713, - 0.028351689, - -0.006377209, - -0.0076833847, - -0.004587621, - 0.030528648, - 0.020258524, - -0.016468054, - 0.0021369413, - 0.009008768, - 0.0049749915, - -0.024458773, - 0.019951189, - 0.013548368, - 0.023011737, - 0.0033678836, - -0.011723564, - -0.009328909, - -0.020117661, - -0.016083885, - -0.006844615, - 0.006143506, - 0.028633414, - 0.002458683, - 0.030707927, - 0.01968227, - 0.009757899, - 0.01897796, - 0.0012709599, - 0.003527954, - -0.0015830974, - 0.035907015, - -0.010571057, - 0.014944183, - 0.004760497, - 0.010551848, - 0.011998885, - 0.0040081656, - -0.014227067, - 0.0032142159, - -0.01895235, - -0.002322623, - 0.013433117, - 0.005509627, - 0.0010404583, - -0.009796315, - 0.010410986, - -0.020886, - 0.0121973725, - -0.013125782, - 0.014585625, - 0.018337678, - 0.005048624, - -0.016532082, - -0.69129974, - -0.040235322, - 0.011461048, - -0.0017623763, - 0.0024346726, - 0.037802253, - 0.0058489763, - 0.012632765, - 0.0073632435, - -0.026059479, - 0.0064508417, - 0.008848698, - 0.013093768, - -0.0028732657, - 0.0070110885, - -0.030195702, - -0.0099755945, - 0.015725328, - -0.003572774, - 0.014406346, - -0.008995962, - -0.004158632, - -0.028633414, - -0.0048181224, - 0.020117661, - 0.018286455, - 0.011000046, - -0.009706676, - -0.005666496, - 0.020668304, - -0.0045748153, - -0.004619635, - -0.017902287, - -0.020156078, - 0.038314477, - 0.0019560617, - -0.015174684, - 0.008221221, - -0.008003525, - 0.025163084, - -0.002817241, - 0.01577655, - -0.0015670903, - -0.01468807, - -0.01069271, - -0.0057401285, - 0.00572092, - -0.0014222265, - 0.03316661, - -0.0006919048, - 0.02077075, - 0.0029725095, - 0.023690436, - -0.005503224, - 0.014854544, - -0.001069271, - 0.03017009, - 0.015123462, - 0.0062331455, - -0.00719677, - -0.019631047, - 0.012709599, - -0.02958103, - -0.009706676, - -0.0124854995, - 0.0041714376, - -0.032116547, - -0.017658979, - -0.001482253, - -0.001916044, - 0.006111492, - 0.0074720914, - -0.011217741, - 0.029837143, - 0.016442442, - 0.0022601956, - 0.026059479, - -0.01786387, - 0.021359809, - 0.012530319, - 0.0017767827, - 0.003940936, - -0.017313227, - -0.009136825, - 0.027813852, - -0.021270169, - -0.02955542, - -0.021282975, - 0.019413352, - -0.0114162285, - 0.033909336, - 0.019631047, - 0.0007503305, - -0.0029484988, - -0.006284368, - 0.014649653, - -0.014495986, - 0.0005634482, - 0.0030861595, - -0.005832969, - 0.014470374, - -0.035241123, - -0.0016487263, - -0.0015878995, - 0.039851155, - 0.004504384, - -0.02608509, - 0.033422723, - 0.019848743, - -0.017518116, - 0.019221267, - -0.011774787, - -0.024650859, - 0.006252354, - 0.01014847, - -0.024727693, - 0.046202753, - 0.009098408, - 0.011646731, - -0.0031389827, - 0.009354521, - 0.0065436824, - -0.0005442397, - -0.014611236, - 0.0005570454, - -0.004830928, - 0.0004133821, - -0.016122302, - -0.027916297, - -0.003761657, - 0.015494825, - -0.009508189, - 0.009949983, - 0.005346355, - 0.0030269334, - -0.003832088, - 0.00597063, - -0.017966313, - 0.025790561, - -0.029939588, - -0.025752144, - -0.0107567385, - -0.013881315, - -0.013561173, - -0.00034635258, - -0.009053588, - -0.030938428, - -0.007766621, - -0.019234072, - 0.021436643, - -0.03370445, - -0.02167995, - -0.017146753, - 0.002181761, - -0.0064508417, - -0.004072194, - -0.022755625, - 0.003550364, - -0.0017895884, - 0.02526553, - 0.008426112, - 0.0035151485, - -0.015456408, - -0.0001341591, - -0.009079199, - -0.040004823, - -0.009437758, - 0.037290026, - -0.014431957, - -0.022320231, - -0.006229944, - -0.0028268453, - 0.00075713353, - -0.023690436, - -0.024932582, - -0.011755578, - -0.025790561, - -0.023255045, - 0.00021469458, - -0.016301582, - 0.014956988, - 0.010295736, - 0.005618475, - -0.019259684, - 0.035266735, - -0.006767781, - 0.019746298, - 0.03572774, - -0.0021321392, - 0.019374935, - -0.008387695, - -0.0072928127, - -0.007958706, - -0.011377812, - 0.016083885, - -0.0023242238, - -0.0036239964, - 0.0061371033, - 0.00057625386, - -0.00040177698, - 0.013522757, - -0.004408342, - 0.019054793, - -0.020399386, - 0.019746298, - -0.0132666435, - 0.012562334, - -0.0020232913, - 0.015520437, - 0.036111906, - 0.0029933185, - -0.022576345, - 0.0028044353, - 0.0018968355, - 0.017735813, - -0.0010268523, - -0.012299818, - 0.014713681, - -0.010859183, - -0.014662459, - -0.0054039806, - 0.008554168, - 0.043820903, - -0.012741612, - -0.01448318, - -0.013381895, - 0.039236482, - 0.011429034, - 0.0023946548, - -0.008150791, - -0.028684635, - -0.0025483225, - -0.012466291, - 0.00020459012, - -0.01686503, - -0.0049077617, - 0.009284089, - -0.031245764, - 0.014444763, - 0.011422631, - 0.010641487, - 0.042284228, - 0.0320141, - -0.017915092, - 0.022537928, - -0.020412192, - 0.026328398, - 0.015584465, - -0.02070672, - 0.014316707, - -0.018913932, - -0.010167679, - -0.017658979, - 0.01568691, - 0.022627568, - 0.002844453, - 0.039492596, - 0.0033166609, - 0.027019903, - 0.0174797, - -0.016442442, - -0.011089685, - 0.014726487, - -0.017351644, - 0.0038000739, - -0.003982554, - -0.008720641, - 0.021513477, - -0.0072928127, - -0.013381895, - -0.004830928, - 0.00090519874, - 0.01700589, - -0.0039345333, - 0.0018200018, - -0.02217937, - -0.011621119, - 0.003114972, - 0.022192176, - 0.010865586, - 0.0009100009, - -0.021090891, - 0.009181645, - 0.012082122, - 0.008995962, - -0.02115492, - -0.025688116, - 0.021500671, - -0.006258757, - 0.011230547, - 0.023165405, - 0.023728853, - 0.013996566, - 0.003543961, - -0.00079835166, - -0.02535517, - 0.0047733025, - -0.010071636, - 0.003387092, - -0.0023962555, - -0.009373729, - -0.015635688, - -0.026558898, - 0.0017159559, - 0.0011068876, - 0.027737018, - -0.009437758, - 0.006883032, - -0.026021061, - -0.011448243, - 0.008714238, - -0.005845775, - 0.0014358325, - 0.0032126151, - -0.019029181, - -0.0012445482, - -0.029043194, - -0.010590265, - 0.02476611, - 0.022000091, - 0.01689064, - -0.01927249, - -0.011582702, - -0.0033102583, - 0.06848457, - 0.005596065, - -0.00919445, - 0.01073753, - 0.010167679, - -0.01600705, - -0.016199136, - 0.004254674, - -0.008016331, - -0.0028428524, - 0.002013687, - 0.0015430797, - 0.0073568407, - 0.006383612, - -0.0003105368, - -0.014662459, - 0.008675822, - 0.0002072913, - 0.030323757, - -0.021641534, - -0.004824525, - 0.010154873, - -0.009437758, - -0.002458683, - -0.006117895, - 0.0077218013, - 0.022192176, - 0.016416831, - 0.015443603, - -0.022166565, - 0.008631002, - 0.020501832, - 0.0064572445, - -0.012184568, - -0.009597828, - -0.012844058, - -0.0032238201, - 0.004786108, - 0.006908643, - -0.021167723, - 0.01600705, - 0.0041234163, - 0.0065276753, - -0.021052474, - -0.0066333218, - 0.00728641, - -0.011569897, - 0.0134715345, - -0.020104855, - 0.0029997213, - 0.022806846, - -0.010244513, - -0.012664779, - -0.0070366994, - 0.011697953, - 0.0149826, - -0.012677585, - -0.008797475, - -0.00844532, - -0.01850415, - 0.004571614, - -0.017236393, - -0.0082084155, - -0.0030685517, - -0.009341715, - -0.01348434, - -0.004430752, - 0.0041650347, - -0.011352201, - 0.013433117, - 0.0013886117, - -0.017607756, - -0.013817286, - -0.0013654014, - 0.030912817, - 0.026302787, - 0.0067805867, - -0.022870874, - 0.010551848, - 0.046714976, - -0.0019960792, - -0.0075745364, - -0.01418865, - -0.0020344963, - 0.0055128285, - 0.00090119697, - 0.033294667, - -0.01359959, - 0.0033966962, - 0.0023434323, - 0.03134821, - 0.0057337256, - 0.00719677, - -0.0017591749, - -0.0073696463, - -0.012165359, - 0.022204982, - 0.0048021153, - -0.014329513, - -0.015443603, - 0.0033262651, - -0.02347274, - -0.005832969, - 0.000917204, - 0.007580939, - 0.012536722, - 0.025035027, - 0.0057113157, - -0.021282975, - 0.0146240415, - 0.026815012, - -0.0045556067, - 0.002469888, - -0.008477334, - 0.0029324917, - 0.010558251, - -0.0016967474, - 0.013497146, - 0.0022649977, - -0.029683476, - 0.0051062494, - -0.044409964, - 0.02367763, - 0.0010540644, - -0.0032942512, - -0.001237345, - 0.0115763, - -0.021116503, - -0.0038416923, - -0.0002971309, - -0.01389412, - 0.01959263, - -0.028633414, - -0.02658451, - -0.031732377, - -0.01897796, - 0.0100140115, - 0.0069278516, - -0.0023802484, - -0.014995405, - -0.025099056, - 0.017851064, - 0.018248038, - -0.00019708682, - -0.031066485, - -0.022243397, - -0.006562891, - 0.009559411, - 0.0028252446, - 0.012594348, - -0.004142625, - 0.01359959, - -0.012901683, - 0.021872034, - 0.0034191061, - -0.012325429, - -0.026021061, - -0.017697396, - 0.018990766, - 0.010539043, - 0.03373006, - -0.0059770327, - 0.0011597108, - 0.008899921, - -0.0067805867, - -0.008131582, - -0.007888275, - -0.013445923, - -0.019400546, - 0.013573979, - 0.014662459, - 0.005119055, - 0.017249199, - -0.0118260095, - 0.009661856, - 0.005215097, - -0.005487217, - -0.014342317, - -0.028454134, - -0.022819651, - 0.0014934578, - 0.0015790956, - -0.019823132, - -0.012869669, - 0.009962789, - -0.007728204, - 0.023639213, - 0.012920892, - 0.002540319, - -0.0077218013, - 0.02819802, - 0.006806198, - 0.030118868, - -0.009386535, - 0.0014198255, - 0.00016757382, - -0.02567531, - -0.00092040544, - 0.009059991, - 0.012978517, - 0.0135099515, - 0.006188326, - 0.0019064398, - -0.020821972, - 0.016173525, - 0.01777423, - 0.021731172, - 0.01477771, - -0.0026299586, - -0.02390813, - -0.023728853, - -0.035138678, - -0.024599636, - -0.03232144, - 0.003300654, - 0.011640328, - -0.03437034, - 0.021282975, - -0.0013926134, - -0.03498501, - 0.014739293, - 0.01019329, - 0.024048993, - -0.01173637, - 0.0055864607, - 0.0054904185, - -0.011089685, - -0.013369089, - -0.0007779427, - -0.016634528, - -0.004213056, - 0.033909336, - 0.010225304, - -0.0035183497, - 0.017556533, - 0.0056088706, - 0.00025171088, - 0.025905812, - -0.017748618, - -0.01809437, - 0.007561731, - 0.015558854, - -0.021769589, - 0.019938383, - -0.014111816, - 0.013766064, - -0.02476611, - -0.029299306, - -0.004962186, - -0.00021209342, - -0.018632207, - 0.003278244, - -0.03818642, - 0.004174639, - 0.0063676047, - -0.0073248264, - -0.00753612, - -0.0048661437, - -0.017697396, - -0.01868343, - -0.0062555554, - 0.005384772, - -0.012005288, - 0.022691596, - 0.0018328073, - 0.00247469, - -0.031681154, - -0.0027868275, - 0.0046004266, - 0.027429683, - -0.0016519277, - -0.0062203403, - -0.01078235, - 0.018017536, - 0.029811531, - -0.0057721427, - -0.0054616057, - -0.0013830093, - -0.0054616057, - 0.0057721427, - 0.017697396, - -0.012626362, - -0.008957546, - 0.013868509, - -0.018901126, - 0.005141465, - -0.015750939, - -0.019080404, - -0.0060218526, - -0.014444763, - -0.014239873, - -0.001137301, - 0.01153148, - 0.0027884282, - 0.0067613786, - -0.025009416, - 0.031271376, - 0.011313784, - -0.021859229, - 0.015392381, - -0.005087041, - 0.009917969, - 0.0026683754, - 0.015238713, - 0.005938616, - -0.019733492, - 0.03452401, - -0.010007609, - -0.028095577, - -0.015456408, - 0.0063740076, - -0.008906323, - -0.0004774103, - 0.00006838012, - 0.0028156403, - -0.013228227, - 0.026302787, - -0.001500661, - -0.0015534844, - -0.00399536, - -0.023447128, - -0.015353964, - 0.0026555697, - -0.020156078, - -0.0025195098, - 0.014880154, - -0.0018392102, - 0.008759058, - -0.04015849, - -0.006031457, - -0.0313226, - 0.010391777, - -0.009700273, - -0.012120539, - -0.027224792, - 0.0010764742, - -0.008502945, - -0.004238667, - -0.009271284, - 0.00131658, - -0.005861782, - 0.012293415, - -0.0072607985, - 0.0144575685, - 0.0026043472, - -0.0008939938, - -0.012229387, - -0.001403018, - -0.015264324, - 0.004113812, - 0.0045460025, - -0.017159559, - 0.014163039, - -0.03137382, - -0.030349368, - 0.0071839644, - -0.010231707, - -0.001139702, - 0.011300978, - 0.014495986, - 0.032884885, - -0.0029789123, - -0.0016583304, - 0.022409871, - -0.001666334, - -0.0008419709, - -0.038647424, - -0.018465735, - 0.0032814455, - -0.017748618, - 0.004097805, - -0.003550364, - -0.009937177, - -0.022499511, - 0.008272444, - 0.003441516, - 0.007568134, - -0.008118777, - 0.0069726715, - 0.011755578, - -0.0013037743, - 0.023126988, - 0.03232144, - 0.01368923, - 0.0056440863, - -0.01098724, - -0.010417389, - 0.010731127, - 0.03675219, - -0.00078154425, - -0.00071791623, - -0.003371085, - -0.011832412, - 0.00989876, - -0.010686307, - 0.01418865, - 0.0054359944, - 0.011108894, - 0.005141465, - -0.009053588, - -0.0050070058, - 0.017300421, - 0.0014798519, - -0.007235187, - -0.018734653, - 0.01377887, - -0.014444763, - -0.008522154, - 0.0091112135, - -0.024369135, - -0.0065756966, - -0.021897646, - 0.009175242, - -0.042028114, - -0.011256158, - -0.023626408, - -0.004661253, - -0.03380689, - 0.024625247, - 0.017197976, - -0.016954668, - -0.0061242976, - -0.02397216, - -0.0038993177, - -0.0020777152, - -0.013791676, - -0.02326785, - -0.038673036, - -0.032628775, - -0.005781747, - 0.010558251, - -0.017082725, - -0.006105089, - -0.004056187, - 0.008598988, - 0.024394745, - 0.23070642, - 0.010916809, - -0.005282327, - 0.032603163, - 0.0033774879, - 0.049634665, - 0.022960514, - -0.008554168, - 0.013177005, - 0.020873195, - 0.0037744627, - 0.0025499233, - 0.009290492, - 0.0043187025, - 0.006181923, - -0.004213056, - -0.028069966, - -0.00090519874, - -0.015789356, - 0.009962789, - 0.014598431, - -0.017748618, - 0.01123695, - 0.003864102, - 0.03475451, - -0.0019080405, - -0.01818401, - -0.0018135989, - 0.023101376, - 0.0055288356, - -0.006181923, - -0.011467451, - 0.003387092, - -0.0091112135, - -0.006998283, - -0.00547121, - -0.01927249, - 0.008214818, - 0.020924417, - 0.026046673, - 0.012133345, - 0.012959309, - -0.032116547, - -0.021756783, - -0.0041234163, - 0.023511156, - -0.009431355, - -0.0061627147, - 0.019170044, - 0.0065885023, - -0.017812647, - -0.0019720688, - 0.02376727, - 0.023434322, - 0.0011132904, - 0.023229433, - 0.022000091, - -0.011665938, - 0.029529808, - -0.0148673495, - -0.014060594, - 0.023434322, - -0.018619401, - 0.003219018, - 0.007638565, - -0.0071583535, - -0.01979752, - 0.009501786, - 0.013445923, - -0.010596667, - 0.017761424, - 0.010974434, - 0.01959263, - 0.0055992664, - -0.006281167, - -0.0032398272, - 0.024830138, - 0.008214818, - 0.026943069, - -0.017889481, - -0.0037168374, - -0.014380734, - -0.01439354, - 0.022896485, - -0.018721847, - -0.022781234, - 0.007670579, - 0.00199768, - 0.035702128, - -0.008663016, - -0.009213659, - -0.009546605, - 0.009783509, - -0.010007609, - 0.006194729, - 0.02476611, - -0.0135099515, - 0.022115342, - -0.023639213, - 0.0032238201, - -0.036521688, - -0.01698028, - 0.017915092, - -0.010801558, - -0.013663619, - 0.011096088, - 0.004821324, - 0.015558854, - 0.03890354, - -0.008893518, - 0.0134715345, - -0.005103048, - 0.0119924825, - -0.0023194216, - 0.018324872, - -0.0014286293, - 0.0033742865, - -0.012575139, - -0.018440124, - -0.013855703, - -0.00021789598, - -0.022076925, - -0.0144191515, - 0.009629842, - -0.01568691, - -0.0037296428, - -0.0040882006, - 0.02006644, - 0.0004145826, - -0.040312156, - 0.030426202, - -0.0019944785, - 0.030912817, - -0.0023962555, - -0.009296895, - -0.0008867906, - -0.009514591, - -0.0052343057, - 0.011525077, - -0.0101804845, - -0.008624599, - -0.008938338, - 0.012434278, - -0.013727647, - 0.0055832593, - 0.007779427, - 0.005064631, - -0.012863266, - -0.013586785, - -0.017146753, - 0.0010228505, - -0.021462254, - -0.0005478413, - 0.003479933, - 0.016109496, - -0.0131001705, - -0.026405232, - -0.0076449676, - -0.016378414, - 0.019502992, - -0.006812601, - 0.0258802, - -0.006466849, - -0.014214261, - -0.008899921, - 0.0013718043, - -0.16421954, - 0.024061799, - 0.0041330205, - -0.00399536, - -0.01380448, - -0.0011453045, - 0.025777755, - 0.018196816, - -0.001012446, - 0.028326077, - 0.015161878, - -0.008675822, - -0.052067734, - -0.024113022, - 0.008867906, - 0.01895235, - -0.0042290627, - -0.015225907, - 0.026405232, - 0.00994358, - -0.0029629052, - -0.029196862, - 0.012184568, - -0.0026187536, - 0.004645246, - 0.00016997487, - -0.009188048, - 0.030221313, - -0.0018376095, - -0.007132742, - -0.004651649, - -0.0052855285, - 0.0027884282, - 0.036316797, - 0.007305618, - 0.0050198114, - 0.00006597906, - 0.005112652, - 0.0010940819, - 0.003940936, - -0.00808036, - 0.024894167, - -0.0061082905, - 0.009617036, - -0.020015217, - 0.022934902, - 0.035061844, - 0.021103697, - -0.0015814967, - -0.0073248264, - 0.008650211, - -0.031578712, - -0.023818493, - -0.008669419, - 0.017876675, - 0.005275924, - 0.018555373, - 0.009809121, - -0.003924929, - 0.02265318, - 0.0036656146, - -0.026712567, - -0.00096122344, - 0.0026251564, - -0.0011220942, - -0.012792835, - 0.0030685517, - 0.00824043, - -0.031937268, - 0.014764904, - -0.013055351, - -0.006601308, - 0.023229433, - -0.017326033, - 0.012453486, - 0.00994358, - -0.01457282, - 0.012011691, - -0.005282327, - -0.010871989, - 0.013343478, - 0.026187535, - 0.0016103094, - -0.014470374, - -0.016762584, - 0.014931377, - -0.013625202, - 0.0056953086, - -0.006281167, - -0.028326077, - 0.008131582, - -0.03992799, - 0.0040209712, - -0.038698647, - 0.016083885, - 0.0133947, - -0.010455806, - -0.01114731, - -0.0012029299, - -0.02106528, - 0.011569897, - -0.010884794, - -0.012094928, - 0.018107176, - 0.024074605, - 0.024663664, - -0.00044579638, - 0.010391777, - 0.027122347, - 0.008169999, - -0.014700876, - 0.03152749, - 0.014227067, - 0.033269055, - 0.01457282, - -0.00027712208, - 0.008310861, - -0.03475451, - -0.0026843825, - 0.0067165587, - 0.036880247, - 0.012120539, - -0.009783509, - 0.009226465, - -0.003082958, - -0.02467647, - -0.09542763, - -0.022909291, - 0.012453486, - 0.014764904, - -0.0013670021, - 0.0152002955, - 0.010161276, - 0.03736686, - 0.00013615997, - 0.029350528, - -0.008368487, - -0.017313227, - -0.014969794, - 0.0028668628, - 0.008509348, - -0.013177005, - 0.007958706, - -0.025483225, - -0.024932582, - 0.0052951323, - -0.0040689926, - -0.012472694, - 0.0021881638, - -0.004261077, - -0.016288776, - -0.020322552, - -0.039287705, - 0.019951189, - 0.0049365745, - -0.004683663, - 0.015174684, - -0.007235187, - 0.004955783, - -0.010795156, - -0.017249199, - 0.013817286, - -0.01489296, - -0.00031834023, - 0.006117895, - -0.031450655, - 0.010250916, - 0.012037302, - 0.006508467, - -0.028607802, - -0.0134715345, - 0.004049784, - -0.0136764245, - -0.011979677, - -0.009367326, - -0.019400546, - 0.010833573, - 0.03695708, - -0.0033902933, - -0.0112497555, - 0.037494916, - -0.020360969, - 0.021218946, - 0.020604277, - -0.009520994, - 0.004821324, - 0.011038463, - 0.012408666, - 0.008483737, - 0.025521642, - -0.0053783692, - -0.015417991, - -0.027301626, - 0.0035375583, - 0.012203775, - -0.04192567, - -0.0006326787, - 0.020860389, - -0.018721847, - 0.0132666435, - -0.0096042305, - -0.001121294, - -0.020719526, - -0.011563494, - 0.0095658135, - -0.00031753987, - -0.026008256, - -0.020629887, - -0.0062619583, - -0.023639213, - 0.007030297, - 0.022192176, - -0.013305061, - -0.0044051404, - 0.028582191, - -0.014508791, - 0.0006098687, - 0.043078177, - 0.013727647, - -0.012242192, - -0.007523314, - 0.011890038, - 0.01223579, - 0.018235233, - 0.009027977, - -0.019336518, - -0.021667145, - -0.0026667747, - -0.049301717, - 0.01014847, - -0.0023642415, - -0.023255045, - -0.0032398272, - 0.009841135, - -0.015802162, - -0.004043381, - -0.0052631185, - -0.0053655636, - -0.0020120863, - -0.002356238, - -0.0050038043, - 0.0006578898, - -0.01398376, - 0.0026971882, - 0.017979119, - -0.005064631, - 0.027276015, - 0.00056785013, - -0.0019032384, - 0.014598431, - 0.011140907, - 0.00077994354, - -0.01639122, - 0.017454088, - -0.030938428, - -0.015213101, - -0.016621722, - -0.014508791, - -0.006466849, - -0.018209621, - 0.015021017, - 0.039313316, - -0.019246878, - -0.019054793, - -0.0061371033, - 0.030221313, - 0.008778267, - -0.020168884, - -0.013702036, - -0.043539178, - 0.016672945, - -0.013317866, - -0.016314387, - 0.018785875, - -0.0016311185, - -0.012696793, - 0.0059098033, - -0.0013686029, - 0.021039668, - 0.027147958, - -0.0002479092, - -0.009143228, - 0.00036055883, - -0.017121142, - 0.03014448, - 0.008867906, - 0.011134504, - -0.03196288, - 0.01659611, - -0.012472694, - -0.00033014544, - 0.011870829, - 0.008470931, - 0.008477334, - -0.017069919, - -0.014662459, - 0.007580939, - 0.0075553283, - -0.00824043, - -0.00919445, - 0.040260933, - 0.008598988, - 0.023293462, - 0.010955226, - -0.011947663, - 0.0038032753, - -0.0014670462, - 0.008125179, - 0.0132666435, - -0.0077538155, - -0.019784715, - 0.026866235, - 0.020424997, - 0.031937268, - -0.038237642, - -0.0009452164, - 0.0053591607, - -0.004962186, - -0.03137382, - -0.004485176, - -0.007728204, - -0.0029484988, - -0.0041842433, - 0.0041938475, - -0.0036079893, - 0.0020809167, - 0.015968634, - 0.035446014, - 0.013766064, - -0.0061691175, - -0.007869067, - -0.02658451, - -0.008848698, - 0.0076833847, - -0.0077922326, - -0.003636802, - -0.0121973725, - 0.007625759, - 0.007087922, - -0.021539088, - -0.00081916084, - 0.022000091, - -0.0016855425, - -0.005688906, - -0.033320278, - -0.028812692, - -0.018837098, - 0.0065436824, - 0.0014254279, - 0.0117043555, - -0.011653134, - -0.0103469575, - 0.022204982, - 0.027122347, - 0.040056046, - -0.03152749, - -0.0037744627, - 0.018657818, - 0.011512271, - -0.003300654, - 0.008477334, - -0.01938774, - -0.024369135, - -0.007523314, - -0.018990766, - 0.026110701, - 0.016199136, - 0.05409103, - -0.004430752, - -0.035778962, - 0.017108336, - 0.0012277408, - 0.007843455, - 0.01377887, - 0.0011893238, - -0.014406346, - -0.013727647, - 0.0025099057, - 0.0010092446, - 0.021167723, - 0.0034159047, - -0.016877836, - -0.002252192, - -0.019157238, - 0.019963995, - -0.031015262, - -0.013010531, - 0.022320231, - 0.0052311043, - 0.012325429, - 0.003457523, - -0.016224748, - -0.0071647563, - -0.0068318094, - 0.0124022635, - -0.005026214, - -0.020860389, - 0.017300421, - -0.022409871, - -0.02326785, - -0.00021449449, - 0.014636847, - -0.018657818, - -0.015674105, - -0.025483225, - -0.006226743, - 0.014560014, - -0.0005030216, - 0.020847583, - -0.015840577, - -0.027404072, - -0.011563494, - -0.0100588305, - -0.019912772, - 0.006002644, - -0.023805687 + 0.013982197, + -0.018476475, + -0.005729884, + -0.023803027, + 0.0031706425, + 0.009507126, + -0.044174526, + -0.0043758387, + 0.01791309, + -0.02065319, + 0.010851568, + 0.010934795, + -0.016222933, + 0.019359965, + -0.024520062, + -0.0053873714, + 0.03178005, + -0.0010819557, + 0.010729928, + -0.022381758, + -0.045480553, + 0.0045486954, + -0.020665996, + 0.017695418, + -0.016619865, + 0.0010731529, + 0.015685158, + -0.015185793, + 0.026453499, + 0.010755536, + 0.02481456, + -0.012765798, + 0.017285684, + -0.037337076, + -0.040947862, + 0.017093621, + -0.0021639115, + 0.010064109, + -0.0013468429, + -0.020627582, + 0.008495593, + 0.0055666305, + -0.003665205, + -0.0038092525, + -0.007996229, + 0.013559658, + 0.013918176, + 0.010256172, + -0.008854112, + 0.010320193, + -0.0048271874, + 0.030858146, + -0.0041229557, + -0.0043150187, + 0.01831002, + -0.025621224, + -0.00086028286, + 0.01782346, + -0.020947687, + -0.016709493, + 0.012714581, + -0.0020694805, + 0.005134488, + -0.0097312, + -0.0075928965, + 0.010204955, + -0.0059027406, + -0.004638325, + -0.0038860778, + 0.0057522915, + 0.02932164, + 0.029372858, + 0.00069662905, + 0.0151473805, + 0.0032106556, + 0.013726113, + -0.0042541986, + -0.0020390705, + -0.0048303884, + -0.017503355, + 0.0042894105, + -0.012977066, + -0.026171805, + -0.0008050647, + 0.027196143, + 0.011869502, + -0.002901754, + 0.0011355734, + -0.031088622, + -0.012035958, + -0.005256128, + 0.029424075, + 0.032471478, + -0.0012075971, + -0.013598071, + 0.016427802, + 0.022368954, + 0.020000177, + 0.005729884, + -0.029065557, + 0.0048976103, + 0.014545582, + -0.03836141, + 0.0026472704, + -0.036824908, + -0.015531506, + 0.015557115, + -0.012573734, + 0.027477834, + -0.03211296, + -0.020269064, + 0.0089885555, + 0.011082044, + -0.020461127, + -0.0070487177, + -0.020025784, + 0.017157642, + -0.0084315725, + -0.017861873, + -0.015697962, + 0.014558387, + 0.037337076, + 0.016824732, + -0.023226837, + 0.027247358, + 0.0114149535, + -0.01256093, + -0.013329183, + 0.0060243807, + -0.0002958973, + 0.011037229, + 0.007829774, + 0.01009612, + 0.017554572, + -0.0070295115, + 0.010179347, + -0.009058978, + 0.03157518, + 0.007855383, + -0.029961852, + 0.01523701, + 0.02834852, + -0.0064757294, + -0.0077337427, + -0.004628722, + 0.030550845, + 0.02025626, + -0.016466213, + 0.0021383031, + 0.00906538, + 0.0049616313, + -0.024507258, + 0.019897742, + 0.013546854, + 0.022983557, + 0.0033098883, + -0.011645429, + -0.0093662795, + -0.020115415, + -0.016094891, + -0.0067926333, + 0.0061332164, + 0.028655821, + 0.002460009, + 0.030730104, + 0.019718483, + 0.009711993, + 0.019001449, + 0.0012700176, + 0.0035115546, + -0.001566115, + 0.035877395, + -0.010569875, + 0.014929709, + 0.0047215526, + 0.010544267, + 0.012048761, + 0.003950099, + -0.014251086, + 0.0031978514, + -0.019001449, + -0.0023671784, + 0.013406008, + 0.005432186, + 0.0010955603, + -0.009756808, + 0.010441833, + -0.020858059, + 0.012208814, + -0.013149924, + 0.014609603, + 0.018348433, + 0.0051024775, + -0.01654304, + -0.6912225, + -0.040282045, + 0.0114789745, + -0.0017381716, + 0.0023895856, + 0.03779803, + 0.005845122, + 0.012580137, + 0.0074264416, + -0.026069371, + 0.0063572903, + 0.008860514, + 0.013092305, + -0.0029545715, + 0.007080728, + -0.030192327, + -0.0099872835, + 0.015749179, + -0.0035819777, + 0.014327911, + -0.009071783, + -0.004180575, + -0.028655821, + -0.0047919755, + 0.020153826, + 0.018258803, + 0.010998816, + -0.0097376015, + -0.0056914715, + 0.020691603, + -0.0045358916, + -0.0046095154, + -0.017951502, + -0.020128218, + 0.038335804, + 0.0019030257, + -0.015172989, + 0.008194694, + -0.008041044, + 0.025185881, + -0.0027897172, + 0.015774786, + -0.0015805197, + -0.014686429, + -0.010627494, + -0.005720281, + 0.0057010744, + -0.0014436747, + 0.033214122, + -0.00071423483, + 0.020819645, + 0.003068209, + 0.023700593, + -0.005480202, + 0.0148400795, + -0.0010651503, + 0.030192327, + 0.0151473805, + 0.0063092746, + -0.007195966, + -0.019564833, + 0.012733787, + -0.029577725, + -0.009654375, + -0.012516115, + 0.00413576, + -0.032164175, + -0.017631397, + -0.0015269021, + -0.0019542426, + 0.006078799, + 0.007458452, + -0.011178075, + 0.029859418, + 0.01651743, + 0.0022791494, + 0.026120588, + -0.01788748, + 0.021395834, + 0.012554528, + 0.0018069941, + 0.003918088, + -0.017324096, + -0.009142206, + 0.027759528, + -0.021254988, + -0.029526507, + -0.02131901, + 0.019475203, + -0.011395747, + 0.033956766, + 0.019641658, + 0.00074744574, + -0.0029673756, + -0.006274063, + 0.014635212, + -0.014443149, + 0.0005897939, + 0.0031306294, + -0.0058003073, + 0.014468757, + -0.035288405, + -0.0016821531, + -0.0015725171, + 0.039846703, + 0.0045230873, + -0.026146198, + 0.033470206, + 0.019808114, + -0.017503355, + 0.019180706, + -0.011747863, + -0.0246353, + 0.0062484546, + 0.0101729445, + -0.024750538, + 0.046223197, + 0.009084587, + 0.011594213, + -0.003205854, + 0.009379084, + 0.0065525547, + -0.00052177155, + -0.014622408, + 0.0006009976, + -0.004820785, + 0.00044174524, + -0.016107697, + -0.027913177, + -0.0037356282, + 0.015531506, + -0.009475116, + 0.009968078, + 0.0053809695, + 0.0030345977, + -0.003841263, + 0.005976365, + -0.017938698, + 0.02578768, + -0.029961852, + -0.025736462, + -0.01073633, + -0.013879764, + -0.013585267, + -0.00032290618, + -0.009103794, + -0.03093497, + -0.0077721556, + -0.019231923, + 0.021447051, + -0.033700682, + -0.021639114, + -0.017144836, + 0.0021879193, + -0.006405306, + -0.0040877443, + -0.022817103, + 0.003543565, + -0.0017749836, + 0.02530112, + 0.008457181, + 0.003469941, + -0.01548029, + -0.00013364395, + -0.00906538, + -0.040077176, + -0.009411095, + 0.037337076, + -0.014481561, + -0.022343347, + -0.006213243, + -0.002821728, + 0.0007470456, + -0.023700593, + -0.024891384, + -0.011773471, + -0.025749266, + -0.023303661, + 0.00018245999, + -0.016248543, + 0.014929709, + 0.010268976, + 0.005598641, + -0.01921912, + 0.035288405, + -0.0067862314, + 0.019795308, + 0.03567253, + -0.0020822845, + 0.01937277, + -0.008405964, + -0.0072791935, + -0.007925806, + -0.011382943, + 0.016094891, + -0.0023031572, + -0.0036524008, + 0.006181232, + 0.0006033984, + -0.00037952478, + 0.013559658, + -0.0044174525, + 0.019078273, + -0.02040991, + 0.01970568, + -0.013265162, + 0.01256093, + -0.002040671, + 0.015505899, + 0.03613348, + 0.002983381, + -0.02259943, + 0.0027513045, + 0.0018566104, + 0.017785048, + -0.00103394, + -0.012330454, + 0.0147120375, + -0.010864372, + -0.014699233, + -0.005419382, + 0.0085532125, + 0.043841615, + -0.012746591, + -0.014558387, + -0.013341987, + 0.03925771, + 0.011357334, + 0.0023879851, + -0.008137075, + -0.028758256, + -0.0025624426, + -0.01243929, + 0.00018986243, + -0.016824732, + -0.0049168165, + 0.00927665, + -0.03129349, + 0.014430345, + 0.011440562, + 0.010640299, + 0.0422795, + 0.032036133, + -0.017925894, + 0.022548214, + -0.020448323, + 0.026299847, + 0.015621136, + -0.0206788, + 0.01426389, + -0.018911818, + -0.010185749, + -0.017644202, + 0.015672352, + 0.022676256, + 0.0028569393, + 0.039488185, + 0.003354703, + 0.0270681, + 0.01749055, + -0.016389389, + -0.011101251, + 0.01475045, + -0.017349705, + 0.003841263, + -0.0040557333, + -0.008700461, + 0.021639114, + -0.007311204, + -0.013393204, + -0.004823986, + 0.00094911206, + 0.016978383, + -0.003908485, + 0.0018149968, + -0.022215305, + -0.011626223, + 0.0031338304, + 0.022164088, + 0.010845166, + 0.00095231313, + -0.021088533, + 0.009199825, + 0.012087175, + 0.0089885555, + -0.021178164, + -0.025646832, + 0.021459855, + -0.0062452536, + 0.011216488, + 0.023162816, + 0.023777418, + 0.01402061, + 0.003482745, + -0.0008050647, + -0.02536514, + 0.0047759702, + -0.010134532, + 0.0033995179, + -0.002375181, + -0.00939829, + -0.015685158, + -0.026555931, + 0.0016949573, + 0.0011403749, + 0.027733918, + -0.009468714, + 0.006837448, + -0.02609498, + -0.011421355, + 0.008745275, + -0.0058131116, + 0.0014132647, + 0.0032490683, + -0.019027056, + -0.0012388073, + -0.029065557, + -0.010550669, + 0.024788952, + 0.022061653, + 0.016875949, + -0.01928314, + -0.01158781, + -0.0032490683, + 0.0684257, + 0.0055826358, + -0.009161413, + 0.010717124, + 0.010192151, + -0.016005263, + -0.016261347, + 0.0043182196, + -0.00802824, + -0.0028265293, + 0.0020038588, + 0.0015381058, + 0.007375225, + 0.0064149094, + -0.00031870478, + -0.014724841, + 0.008706863, + 0.00018716154, + 0.030345978, + -0.02162631, + -0.0047855736, + 0.010134532, + -0.009455909, + -0.0024664109, + -0.0061204126, + 0.0077145365, + 0.022189695, + 0.016402192, + 0.015493094, + -0.022176892, + 0.008642842, + 0.020537952, + 0.00650774, + -0.0121639995, + -0.009558342, + -0.01289384, + -0.0032202587, + 0.0047951764, + 0.00696549, + -0.02122938, + 0.015992459, + 0.0040877443, + 0.0065173428, + -0.021050122, + -0.0066197766, + 0.007291998, + -0.011549397, + 0.013457225, + -0.020064197, + 0.0030586056, + 0.022727473, + -0.010192151, + -0.01265056, + -0.007074326, + 0.011703048, + 0.0149041, + -0.012624951, + -0.008758079, + -0.008444376, + -0.018476475, + 0.004571103, + -0.017311292, + -0.008258715, + -0.0031050208, + -0.0093662795, + -0.013482833, + -0.004468669, + 0.004145363, + -0.011363736, + 0.0134700285, + 0.0013700505, + -0.01766981, + -0.013802938, + -0.0013628481, + 0.030909363, + 0.02627424, + 0.006779829, + -0.022868318, + 0.010499452, + 0.046760976, + -0.0020294674, + -0.0076377112, + -0.0142126735, + -0.0020134621, + 0.005483403, + 0.0008874918, + 0.033290945, + -0.013598071, + 0.003409121, + 0.002317562, + 0.031370316, + 0.0057522915, + 0.0072279763, + -0.0017877878, + -0.007381627, + -0.012087175, + 0.022164088, + 0.004820785, + -0.014302302, + -0.01548029, + 0.0033258935, + -0.023495726, + -0.0058131116, + 0.0009211029, + 0.007624907, + 0.01256093, + 0.025006622, + 0.0056914715, + -0.021254988, + 0.014635212, + 0.026812015, + -0.004551897, + 0.0024584082, + -0.008457181, + 0.0029177594, + 0.010550669, + -0.0016565446, + 0.013457225, + 0.0022599432, + -0.029654551, + 0.005044859, + -0.04437939, + 0.02366218, + 0.0010467442, + -0.0033418988, + -0.001234806, + 0.01161982, + -0.021088533, + -0.0038092525, + -0.00027769132, + -0.013943785, + 0.019628854, + -0.028630214, + -0.02658154, + -0.031703223, + -0.018937428, + 0.009948871, + 0.0069270777, + -0.0023975882, + -0.015006534, + -0.025083447, + 0.017785048, + 0.018258803, + -0.00016935568, + -0.031037405, + -0.022240913, + -0.0065813637, + 0.009539137, + 0.0028297305, + 0.012554528, + -0.0041709715, + 0.013572463, + -0.012945056, + 0.02186959, + 0.0034635388, + -0.012381671, + -0.026043763, + -0.017695418, + 0.018975839, + 0.010576277, + 0.033751898, + -0.006017979, + 0.0011875905, + 0.008886122, + -0.006779829, + -0.008169086, + -0.007925806, + -0.0134700285, + -0.019411182, + 0.013495637, + 0.014724841, + 0.0051568956, + 0.017208857, + -0.011818286, + 0.009654375, + 0.0051985094, + -0.0055346196, + -0.0143407155, + -0.028425347, + -0.022855515, + 0.0014692831, + 0.0015725171, + -0.019846525, + -0.012817014, + 0.010000088, + -0.0077145365, + 0.023623768, + 0.012938654, + 0.0025352335, + -0.0076953303, + 0.028220478, + 0.0068694586, + 0.03014111, + -0.009379084, + 0.0013644486, + 0.00019456397, + -0.025698049, + -0.0009363079, + 0.009097391, + 0.0130346855, + 0.013508442, + 0.0062068407, + 0.0019030257, + -0.020781232, + 0.016235739, + 0.017785048, + 0.021754352, + 0.0147760585, + -0.0026392678, + -0.023879852, + -0.023777418, + -0.03516036, + -0.024584083, + -0.032317825, + 0.003297084, + 0.011639027, + -0.0343665, + 0.021293402, + -0.0013892568, + -0.034929886, + 0.014814471, + 0.010140934, + 0.024007894, + -0.011735058, + 0.005621048, + 0.005496207, + -0.011062837, + -0.013329183, + -0.0008022638, + -0.016645472, + -0.004206183, + 0.033956766, + 0.01021776, + -0.003540364, + 0.017592985, + 0.005685069, + 0.00022887526, + 0.025915721, + -0.017708223, + -0.018079545, + 0.0075352774, + 0.015493094, + -0.021754352, + 0.019987373, + -0.014135848, + 0.013713309, + -0.024763342, + -0.029270424, + -0.004990441, + -0.00024067913, + -0.018604517, + 0.003260272, + -0.038207762, + 0.0041293576, + 0.006363692, + -0.007311204, + -0.0075288755, + -0.0048431926, + -0.01766981, + -0.018706951, + -0.006280465, + 0.0054065776, + -0.012016751, + 0.022663452, + 0.0018117958, + 0.0024744135, + -0.031728834, + -0.0028761458, + 0.004574304, + 0.027426617, + -0.0016309363, + -0.006219645, + -0.010749134, + 0.018002719, + 0.0298082, + -0.0058003073, + -0.0054513924, + -0.001447676, + -0.0054673976, + 0.0058195135, + 0.017746635, + -0.012644158, + -0.008930936, + 0.0139053725, + -0.018899014, + 0.005185705, + -0.015697962, + -0.019091077, + -0.006040386, + -0.01450717, + -0.014251086, + -0.0012083973, + 0.011536594, + 0.0027865162, + 0.0067350143, + -0.02503223, + 0.031242272, + 0.011318922, + -0.021843983, + 0.015377856, + -0.0051024775, + 0.009961676, + 0.0026728788, + 0.015224205, + 0.0059443545, + -0.019718483, + 0.03449454, + -0.009980882, + -0.028066829, + -0.015493094, + 0.006411708, + -0.008930936, + -0.0005221717, + 0.0000951813, + 0.002773712, + -0.013239553, + 0.02624863, + -0.0014812871, + -0.0015861215, + -0.0040013157, + -0.0234189, + -0.015313835, + 0.0026312652, + -0.02019224, + -0.0025112256, + 0.014878492, + -0.0018838194, + 0.008783688, + -0.040128395, + -0.0059443545, + -0.03129349, + 0.01037141, + -0.009660777, + -0.012176803, + -0.027247358, + 0.0011203684, + -0.008527604, + -0.004218987, + -0.009270248, + 0.0013148324, + -0.0058835344, + 0.012304846, + -0.007291998, + 0.014443149, + 0.0025832495, + -0.0008882921, + -0.012266433, + -0.0014036616, + -0.015249814, + 0.0041901777, + 0.0045839073, + -0.017132033, + 0.014161456, + -0.031395923, + -0.030345978, + 0.007266389, + -0.010198553, + -0.0011355734, + 0.011325324, + 0.014545582, + 0.03288121, + -0.0029545715, + -0.0016469415, + 0.022420172, + -0.0016901557, + -0.00083867577, + -0.038668714, + -0.018489279, + 0.0032426661, + -0.017785048, + 0.0041293576, + -0.0034763431, + -0.009942469, + -0.022522606, + 0.008277922, + 0.0034219252, + 0.007516071, + -0.0081818905, + 0.0069718924, + 0.011703048, + -0.001241208, + 0.023098795, + 0.032343436, + 0.013700505, + 0.005662662, + -0.010992414, + -0.010441833, + 0.010742732, + 0.036824908, + -0.0007582493, + -0.00068542536, + -0.0034219252, + -0.011805481, + 0.00988485, + -0.010723526, + 0.014238281, + 0.0054481914, + 0.011094848, + 0.005185705, + -0.0090525765, + -0.0049616313, + 0.017388117, + 0.0014820873, + -0.007202368, + -0.018758168, + 0.013764526, + -0.014443149, + -0.008476387, + 0.009142206, + -0.024366412, + -0.0065429513, + -0.021908004, + 0.00915501, + -0.042049024, + -0.0112292925, + -0.023610963, + -0.004641526, + -0.033828724, + 0.024609692, + 0.01718325, + -0.0170296, + -0.006178031, + -0.023982285, + -0.003902083, + -0.0021078931, + -0.013828547, + -0.02326525, + -0.038694322, + -0.03259952, + -0.0058419206, + 0.010544267, + -0.017119229, + -0.0060819997, + -0.0040589347, + 0.008521202, + 0.024379216, + 0.23068064, + 0.010909187, + -0.0053201495, + 0.03257391, + 0.0033611052, + 0.04962912, + 0.022970753, + -0.008540408, + 0.013201141, + 0.020909276, + 0.0037964482, + 0.0025256304, + 0.009379084, + 0.0043150187, + 0.0061428198, + -0.0041773734, + -0.028092436, + -0.0008682855, + -0.015800396, + 0.010019294, + 0.014635212, + -0.017797852, + 0.011280509, + 0.00383166, + 0.034725018, + -0.001922232, + -0.018169174, + -0.0018197984, + 0.023073187, + 0.0054705986, + -0.0062356503, + -0.011472573, + 0.0033354966, + -0.009097391, + -0.0070359134, + -0.005502609, + -0.01928314, + 0.008201096, + 0.020934884, + 0.026069371, + 0.012138391, + 0.012932252, + -0.032138567, + -0.021818373, + -0.0041261567, + 0.02348292, + -0.009404692, + -0.0061908355, + 0.019193511, + 0.0066261785, + -0.017759439, + -0.001922232, + 0.023777418, + 0.02350853, + 0.0011091647, + 0.023226837, + 0.022061653, + -0.011690244, + 0.029526507, + -0.014891297, + -0.014071827, + 0.023457313, + -0.018668538, + 0.0031882483, + 0.0077081346, + -0.0071575535, + -0.019808114, + 0.009475116, + 0.013457225, + -0.010569875, + 0.017746635, + 0.010992414, + 0.019628854, + 0.0056402544, + -0.006286867, + -0.003236264, + 0.024840167, + 0.008162684, + 0.026940057, + -0.017900286, + -0.0037420304, + -0.014404736, + -0.014404736, + 0.022868318, + -0.018719755, + -0.022804298, + 0.0076313093, + 0.0020566762, + 0.03569814, + -0.008674853, + -0.009263846, + -0.009583951, + 0.00976321, + -0.010032099, + 0.006238851, + 0.024776146, + -0.0134700285, + 0.022151284, + -0.02368779, + 0.0031738435, + -0.036517605, + -0.01700399, + 0.017900286, + -0.010787547, + -0.013649288, + 0.011114054, + 0.00480478, + 0.015531506, + 0.038873583, + -0.008828503, + 0.013457225, + -0.005112081, + 0.012003947, + -0.0023223637, + 0.01833563, + -0.00136845, + 0.0033835126, + -0.012618549, + -0.018450867, + -0.0139053725, + -0.00018806184, + -0.022036046, + -0.01441754, + 0.009628766, + -0.015710765, + -0.0037388294, + -0.0040877443, + 0.020077001, + 0.00031870478, + -0.040282045, + 0.03047402, + -0.0020022583, + 0.030909363, + -0.0023719799, + -0.009289455, + -0.00086748524, + -0.009526332, + -0.005243324, + 0.011504583, + -0.01012813, + -0.008636439, + -0.008918133, + 0.012445692, + -0.013738917, + 0.0056466567, + 0.0077977637, + 0.005105679, + -0.012887438, + -0.013585267, + -0.017119229, + 0.0010091318, + -0.02147266, + -0.00059219473, + 0.003473142, + 0.016146109, + -0.013111511, + -0.026376672, + -0.007618505, + -0.016389389, + 0.019539224, + -0.006824644, + 0.025864504, + -0.006472528, + -0.014225477, + -0.008905328, + 0.0014468757, + -0.16409875, + 0.024071915, + 0.004164569, + -0.004033326, + -0.013828547, + -0.0011675839, + 0.02578768, + 0.018233195, + -0.0010171344, + 0.028322913, + 0.015160184, + -0.008649244, + -0.0520107, + -0.024123132, + 0.008924535, + 0.019001449, + -0.0042285905, + -0.015224205, + 0.026402282, + 0.009961676, + -0.0029785794, + -0.029142382, + 0.012215217, + -0.0026408683, + 0.00465433, + 0.00016485421, + -0.00918702, + 0.030243544, + -0.0017877878, + -0.007080728, + -0.00465433, + -0.0052721333, + 0.0028057224, + 0.036287133, + 0.0072855954, + 0.005067266, + 0.00013964591, + 0.005172901, + 0.0010923592, + 0.003972506, + -0.008137075, + 0.024929797, + -0.006152423, + 0.009628766, + -0.019987373, + 0.022970753, + 0.03505793, + 0.021101339, + -0.0015829204, + -0.0073048016, + 0.008681254, + -0.03157518, + -0.023828635, + -0.008649244, + 0.01784907, + 0.0052049113, + 0.018566104, + 0.009808025, + -0.003850866, + 0.022586627, + 0.0036299936, + -0.0267608, + -0.0009651173, + 0.0026200614, + -0.0011043631, + -0.012810612, + 0.0030714099, + 0.008258715, + -0.031856876, + 0.014788862, + -0.013041088, + -0.0066005704, + 0.02323964, + -0.017349705, + 0.012477702, + 0.009910459, + -0.014571191, + 0.012035958, + -0.005377768, + -0.010838764, + 0.013329183, + 0.02618461, + 0.0016773515, + -0.014519975, + -0.016799124, + 0.014865688, + -0.013687701, + 0.005672265, + -0.006261259, + -0.028246088, + 0.00814988, + -0.039949134, + 0.0040013157, + -0.03877115, + 0.016094891, + 0.0133804, + -0.010448235, + -0.011158869, + -0.0011883908, + -0.021088533, + 0.011575006, + -0.010883578, + -0.012112782, + 0.01809235, + 0.024097523, + 0.024660908, + -0.00043574328, + 0.010397019, + 0.027042491, + 0.008233107, + -0.014699233, + 0.031523965, + 0.0142126735, + 0.03323973, + 0.014545582, + -0.00028869492, + 0.0083035305, + -0.034801845, + -0.0027080905, + 0.006779829, + 0.036773693, + 0.012170401, + -0.009692787, + 0.009219031, + -0.0030522035, + -0.024673713, + -0.095365755, + -0.022919536, + 0.012432888, + 0.01475045, + -0.0013924579, + 0.0151473805, + 0.010185749, + 0.03743951, + 0.00018466072, + 0.02934725, + -0.008322736, + -0.017349705, + -0.015019339, + 0.002871344, + 0.008476387, + -0.013201141, + 0.007996229, + -0.025454769, + -0.024981014, + 0.0053297523, + -0.004010919, + -0.012420083, + 0.0022039246, + -0.004270204, + -0.01629976, + -0.020269064, + -0.03920649, + 0.019936156, + 0.00498724, + -0.00471515, + 0.0152114015, + -0.0072407806, + 0.0048559965, + -0.010768341, + -0.017196054, + 0.013790134, + -0.014827276, + -0.00037292263, + 0.006101206, + -0.03144714, + 0.010268976, + 0.012003947, + 0.006510941, + -0.028578997, + -0.013508442, + 0.0040269243, + -0.013713309, + -0.011971937, + -0.009353476, + -0.01937277, + 0.010883578, + 0.037004165, + -0.0033835126, + -0.011178075, + 0.037516337, + -0.020333085, + 0.021280598, + 0.0206788, + -0.009455909, + 0.004817584, + 0.011088446, + 0.012368867, + 0.008508397, + 0.02551879, + -0.0053809695, + -0.015390661, + -0.027324185, + 0.003533962, + 0.012176803, + -0.041895375, + -0.0005985968, + 0.02092208, + -0.018745363, + 0.013226749, + -0.009603158, + -0.001101162, + -0.020755624, + -0.011523789, + 0.009558342, + -0.00032050538, + -0.026018154, + -0.020614779, + -0.006277264, + -0.02366218, + 0.0070423153, + 0.022253716, + -0.013341987, + -0.004388643, + 0.028604604, + -0.014494366, + 0.0005645856, + 0.04312458, + 0.013802938, + -0.012260031, + -0.0075352774, + 0.011901514, + 0.0122280205, + 0.018284412, + 0.00903337, + -0.019398378, + -0.021664724, + -0.0026504714, + -0.049321815, + 0.010115326, + -0.002378382, + -0.023252446, + -0.0032698752, + 0.009878448, + -0.01578759, + -0.004033326, + -0.005256128, + -0.00535216, + -0.0019750495, + -0.002357575, + -0.0050224513, + 0.00065141416, + -0.01402061, + 0.0027016883, + 0.018002719, + -0.0050288537, + 0.02722175, + 0.00053697656, + -0.0019126289, + 0.014571191, + 0.011101251, + 0.0007462454, + -0.016350977, + 0.01742653, + -0.03096058, + -0.01523701, + -0.016607061, + -0.014468757, + -0.0065493532, + -0.018194782, + 0.015006534, + 0.039283317, + -0.019257532, + -0.01903986, + -0.006155624, + 0.030243544, + 0.008822101, + -0.020179436, + -0.013687701, + -0.043508705, + 0.016632669, + -0.013303574, + -0.016325368, + 0.0188606, + -0.0016453409, + -0.012727384, + 0.005854725, + -0.0013548455, + 0.021050122, + 0.027119316, + -0.0002262744, + -0.009122999, + 0.00036051855, + -0.017144836, + 0.030089894, + 0.008834905, + 0.011120456, + -0.03190809, + 0.016607061, + -0.012490507, + -0.00034311283, + 0.011939926, + 0.008495593, + 0.008521202, + -0.017068012, + -0.014699233, + 0.0075736903, + 0.007618505, + -0.008265117, + -0.00918702, + 0.040256437, + 0.008591625, + 0.02323964, + 0.0109476, + -0.011991142, + 0.0037964482, + -0.0013764526, + 0.008124271, + 0.013239553, + -0.0077721556, + -0.019731287, + 0.02691445, + 0.020422716, + 0.031984918, + -0.038310196, + -0.0009251042, + 0.005364964, + -0.005006446, + -0.031370316, + -0.004567902, + -0.007701732, + -0.002986582, + -0.00413576, + 0.0041901777, + -0.0036620041, + 0.0020870862, + 0.015979653, + 0.035390835, + 0.013802938, + -0.0062100417, + -0.0079066, + -0.026530324, + -0.0088669155, + 0.0077209384, + -0.007804166, + -0.0036363956, + -0.012234422, + 0.0076313093, + 0.007080728, + -0.021575093, + -0.0007982625, + 0.022010436, + -0.0017189652, + -0.005726683, + -0.033316553, + -0.028809473, + -0.018783776, + 0.0065557556, + 0.0013556457, + 0.011722255, + -0.011658234, + -0.010397019, + 0.022253716, + 0.027016884, + 0.040154003, + -0.031523965, + -0.0037388294, + 0.018719755, + 0.011542995, + -0.0032506688, + 0.008469985, + -0.01937277, + -0.024443237, + -0.0075096693, + -0.019103881, + 0.02609498, + 0.016235739, + 0.054084983, + -0.004427056, + -0.03577496, + 0.017055208, + 0.001292425, + 0.007842579, + 0.013802938, + 0.0011843895, + -0.014481561, + -0.013713309, + 0.002469612, + 0.0009987283, + 0.021203771, + 0.0033451, + -0.016837535, + -0.0022279324, + -0.01912949, + 0.020000177, + -0.031088622, + -0.013028284, + 0.022304934, + 0.0052049113, + 0.012356062, + 0.0034571367, + -0.016184522, + -0.007151151, + -0.006818242, + 0.012388073, + -0.005006446, + -0.020909276, + 0.017260075, + -0.022420172, + -0.023201229, + -0.00021547085, + 0.01466082, + -0.018630126, + -0.015685158, + -0.025505986, + -0.006213243, + 0.014583996, + -0.00046975445, + 0.020819645, + -0.015838807, + -0.027452227, + -0.011542995, + -0.010064109, + -0.020025784, + 0.005979566, + -0.023841439 ] }, { "object": "embedding", "index": 3, "embedding": [ - 0.015762007, - -0.007306679, - 0.0065185786, - -0.021875368, - -0.006547295, - 0.0036756743, - -0.018263508, - -0.033208698, - 0.011818314, - -0.017523266, - 0.019463206, - 0.00966779, - -0.004639263, - -0.0013520546, - -0.016859604, - -0.00011915231, - 0.03313212, - 0.011582203, - 0.026444435, - -0.016527772, - -0.022309301, - 0.01822522, - -0.008921168, - 0.011575822, - -0.020841584, - -0.0101783, - 0.008015012, - -0.016680924, - 0.00242971, - 0.015481226, - 0.010548419, - -0.018212456, - 0.012258629, - -0.025040532, - -0.035735723, - 0.015672667, - 0.004543542, - -0.0035193306, - 0.017063808, - -0.018659152, - -0.00063654257, - 0.009833706, - 0.0033119358, - -0.007868241, - -0.009004126, - 0.012118239, - 0.019463206, - 0.0072620097, - -0.017574318, - 0.011652398, - 0.0035799537, - 0.019220714, - -0.018123116, - -0.018761255, - 0.011148269, - -0.03530179, - 0.003927739, - 0.017650895, - 0.005704953, - -0.008180928, - -0.012615986, - -0.016923418, - 0.004154278, - -0.014026271, - 0.004422296, - -0.0009101442, - -0.009514636, - 0.004339338, - 0.0002763935, - 0.0054656514, - 0.021288281, - 0.037956443, - 0.0063494723, - 0.01938663, - 0.025104346, - 0.009265763, - -0.013796542, - 0.023394136, - -0.004479728, - -0.0031539965, - 0.0010090555, - -0.008768015, - -0.030707197, - -0.0048243226, - 0.014421917, - -0.001675112, - -0.009680552, - 0.0043457192, - -0.03496996, - -0.003086992, - -0.011282278, - 0.030732721, - 0.026623113, - -0.01207995, - 0.0006249763, - 0.0147665115, - 0.011307804, - 0.029762752, - 0.015762007, - -0.03535284, - 0.014932428, - 0.004575449, - -0.04242341, - 0.0029737228, - -0.024721462, - -0.020611854, - 0.0024855472, - 0.0040298407, - 0.026163654, - -0.020586329, - -0.022232724, - 0.023955697, - 0.04668617, - -0.023011252, - -0.0019399392, - -0.02104579, - 0.012845716, - -0.028282272, - -0.017957201, - -0.005950636, - 0.0065090065, - 0.051102083, - 0.018008253, - -0.015187683, - 0.03706305, - -0.00012403805, - -0.00888288, - -0.028996987, - -0.004214901, - 0.015698193, - -0.0062665143, - 0.017255249, - 0.0020867109, - 0.013490235, - 0.007332205, - -0.0010369741, - -0.014434679, - 0.027286777, - -0.0059027756, - -0.019373868, - 0.010835581, - 0.032289777, - -0.016068313, - 0.0039085946, - -0.0065728207, - 0.03499548, - 0.015978973, - -0.0040170783, - -0.020382125, - -0.0056570927, - 0.003248122, - -0.011199321, - 0.0031763315, - -0.0035831444, - 0.015442938, - 0.0052965446, - -0.0071790516, - 0.0052582566, - -0.027159149, - 0.0019702509, - -0.019399393, - -0.0063973325, - 0.03017116, - -0.011894891, - 0.04354653, - 0.027848339, - 0.00163124, - -0.0027838766, - -0.01628528, - -0.0022941057, - 0.0006632646, - 0.025206449, - -0.012973344, - 0.032366354, - -0.017612606, - 0.012188435, - 0.007791664, - -0.001767642, - -0.016387383, - 0.0043074307, - -0.024912905, - -0.0033246984, - 0.016221466, - 0.0046009743, - 0.005992115, - -0.005117866, - 0.025512753, - -0.008640387, - 0.014906902, - -0.004817941, - 0.023802545, - 0.025984976, - -0.021594588, - -0.033566054, - -0.681225, - -0.043903887, - 0.020088581, - -0.0036022884, - 0.0018027396, - 0.024644887, - 0.006732355, - 0.015417412, - 0.005714525, - -0.016310805, - 0.01184384, - 0.005449698, - 0.011078075, - -0.0135668125, - -0.00606231, - -0.02243693, - -0.003350224, - 0.022168912, - -0.0020994737, - -0.015519514, - 0.0005643532, - 0.006936559, - -0.017663658, - -0.011716212, - 0.02197747, - 0.009004126, - 0.017446691, - -0.0006552879, - -0.017459454, - -0.0018665534, - -0.016808553, - 0.015098343, - -0.02082882, - -0.013005251, - 0.046941426, - -0.011377999, - -0.0070386613, - 0.024734225, - 0.008844592, - 0.026342332, - -0.009699697, - -0.0017325444, - 0.012009756, - -0.030885875, - -0.013796542, - 0.010714335, - 0.015136631, - -0.006668541, - 0.032213204, - 0.0013911406, - 0.019514257, - -0.031855844, - 0.005066815, - 0.009986858, - 0.007842715, - 0.001494838, - 0.04234683, - 0.00076536665, - 0.0009994835, - 0.0072556282, - 0.0070769493, - 0.0022271012, - -0.004639263, - -0.016259754, - -0.016629875, - -0.0009189186, - -0.038237225, - -0.015902396, - -0.018378371, - -0.0007386446, - -0.005334833, - 0.0041510873, - -0.015787533, - 0.023815308, - 0.020241736, - -0.0051274383, - 0.030758247, - -0.00902327, - 0.00022574129, - -0.0021664782, - 0.011097218, - -0.014409154, - -0.031166656, - -0.017280774, - 0.029711701, - -0.021709451, - -0.01628528, - -0.025436178, - 0.016081076, - -0.004591402, - 0.02498948, - -0.0013392919, - -0.01605555, - -0.008117114, - -0.013809305, - 0.036118604, - 0.0021999804, - 0.0030502991, - 0.0034363726, - 0.005982543, - -0.002641891, - -0.015978973, - -0.0044765375, - 0.000027793898, - 0.026265757, - -0.012182053, - -0.02743993, - 0.028333323, - 0.011167414, - -0.015978973, - 0.025091583, - -0.011129125, - -0.009865612, - 0.017638132, - 0.011952323, - -0.027873864, - 0.048243225, - 0.0024392821, - 0.01869744, - -0.0086914385, - 0.0065728207, - 0.024810802, - -0.009093465, - -0.008314937, - -0.0017867861, - -0.013132879, - -0.008908405, - -0.012418164, - -0.044159144, - 0.0014070941, - 0.0032417406, - 0.009642264, - 0.016770264, - 0.006713211, - 0.008640387, - 0.0035671908, - 0.011007879, - -0.021632874, - 0.024453444, - -0.005807055, - -0.011314185, - -0.0010377718, - -0.026023265, - 0.0136051, - 0.003382131, - -0.03422972, - -0.03466365, - -0.006148459, - -0.012341587, - 0.01531531, - -0.023751494, - -0.012360731, - -0.03928377, - 0.009916663, - 0.0156216165, - -0.01651501, - -0.022092335, - -0.0054146, - -0.013311557, - 0.02983933, - 0.016591586, - 0.0011183367, - 0.0017692373, - -0.00073226326, - -0.010420792, - -0.021683926, - -0.008314937, - 0.041249234, - -0.00075459806, - -0.026393384, - -0.021135127, - 0.0009843278, - -0.0039564553, - -0.008155403, - -0.015136631, - -0.019909903, - -0.0062633236, - -0.015034529, - 0.0034299912, - -0.009489111, - 0.018506, - 0.017153148, - 0.0098911375, - -0.017344588, - 0.047400884, - 0.007019517, - 0.016489483, - 0.0028572625, - 0.0014844683, - -0.0017867861, - -0.012507503, - -0.010280401, - 0.0029513878, - -0.00930405, - 0.009935807, - 0.012073569, - 0.0106569035, - 0.011186558, - 0.002415352, - -0.0023020825, - 0.009450822, - -0.011326948, - 0.017561555, - -0.014294289, - 0.0060591195, - -0.026852844, - 0.017918913, - -0.010644141, - 0.0005276603, - 0.026367858, - 0.0043648635, - -0.024032274, - -0.0032082384, - -0.007606604, - 0.016157651, - -0.0058549154, - -0.024313055, - 0.0029274577, - 0.0020165157, - -0.012309681, - 0.0012124621, - 0.014792037, - 0.023572814, - -0.014128373, - -0.0037554416, - 0.0016089053, - 0.03234083, - 0.01762537, - -0.0070258984, - -0.018110353, - -0.02304954, - -0.0051051034, - -0.012067188, - 0.010650522, - -0.032493982, - -0.006087836, - 0.0056889993, - -0.032085575, - 0.02225825, - 0.011920416, - -0.011295041, - 0.03512311, - 0.025640382, - 0.0048658014, - 0.003895832, - -0.0013815686, - 0.016349094, - 0.011735356, - -0.01781681, - 0.0066047274, - -0.012564936, - 0.009431679, - -0.0033470334, - 0.015698193, - 0.03928377, - -0.008385132, - 0.036807794, - 0.0015562589, - 0.017102096, - 0.023330322, - -0.026125366, - -0.006311184, - 0.0058038644, - -0.005749623, - 0.013024394, - -0.000879035, - -0.005468842, - -0.0018107163, - 0.005108294, - -0.009374246, - -0.017408403, - -0.0018043349, - 0.028741732, - -0.0073002977, - 0.026750742, - -0.010433555, - -0.0052582566, - -0.004377626, - 0.030783772, - 0.01142905, - -0.00809797, - -0.026125366, - 0.014830325, - -0.0011326948, - -0.0047956062, - -0.03017116, - -0.023036778, - 0.01776576, - -0.0006201903, - 0.0099039, - 0.008359606, - 0.0095912125, - 0.029226717, - -0.0060814545, - 0.007606604, - -0.025742484, - 0.0057783388, - 0.007944817, - 0.016604349, - 0.002332394, - -0.00458183, - -0.018263508, - -0.0321111, - -0.01591516, - 0.011882128, - 0.00980818, - -0.0067834063, - 0.008417039, - -0.010159155, - -0.028716207, - -0.011448194, - -0.0005743241, - 0.0007697539, - -0.013758253, - -0.0054114093, - -0.002354729, - -0.029252242, - 0.0044956817, - 0.034408398, - 0.020739483, - 0.005200824, - -0.010095342, - -0.012060806, - -0.008819066, - 0.077240214, - 0.024963954, - 0.008059681, - 0.010031528, - -0.0028173788, - -0.011543915, - -0.028537527, - 0.0119459415, - -0.013183929, - -0.0066047274, - 0.016578823, - -0.026074314, - 0.0017500932, - 0.004511635, - 0.0051274383, - -0.006649397, - 0.0070258984, - -0.0013265292, - 0.033744734, - -0.020114107, - 0.006103789, - 0.0017947629, - -0.014051797, - 0.012341587, - 0.00379373, - -0.0064483834, - 0.007536409, - -0.010191062, - 0.015723718, - -0.011550296, - 0.008997745, - 0.009750747, - -0.0075300275, - -0.0065792017, - -0.017574318, - 0.0024536403, - -0.0017883815, - 0.0056092325, - 0.010088961, - -0.014626121, - 0.03604203, - 0.004482919, - 0.012813809, - -0.006885508, - -0.021415908, - 0.007051424, - -0.0140007455, - 0.020560803, - -0.0119459415, - -0.018161405, - 0.026291283, - 0.0073641115, - -0.015238733, - 0.0058868225, - 0.010739861, - 0.0036150513, - -0.010950447, - -0.018072065, - -0.007900148, - 0.0008917977, - 0.0009835301, - -0.0072301026, - 0.0024185427, - -0.005468842, - -0.014957952, - -0.008665913, - 0.0038990227, - -0.0031348525, - -0.018021015, - -0.003442754, - 0.014626121, - -0.012673419, - -0.021875368, - 0.008015012, - 0.027312303, - 0.008582955, - 0.017612606, - -0.02428753, - -0.017778521, - 0.041632116, - -0.00041279546, - -0.007740613, - -0.0038830691, - -0.0029960575, - -0.00703228, - 0.0010904182, - 0.025946688, - -0.02345795, - -0.014434679, - -0.010567564, - 0.032366354, - -0.0018617674, - 0.013037157, - -0.005312498, - -0.01374549, - -0.010337834, - 0.02966065, - 0.008499997, - -0.009648645, - 0.0052454937, - 0.003586335, - -0.024772514, - -0.0006927785, - -0.015442938, - 0.015800295, - 0.014307052, - 0.028512003, - 0.0034523262, - -0.017944438, - 0.013222218, - 0.007019517, - -0.009425297, - -0.012571317, - -0.0038320182, - 0.004798797, - 0.0067834063, - -0.006043166, - 0.014396391, - -0.008729727, - -0.027159149, - -0.0015961424, - -0.04089188, - 0.027133625, - 0.0017006375, - 0.010650522, - 0.0017197817, - 0.02766966, - -0.0057113343, - -0.013222218, - 0.013349845, - -0.009144517, - 0.020624617, - -0.0107015725, - -0.017319063, - -0.033897884, - -0.025512753, - 0.033489477, - 0.002327608, - -0.015991736, - -0.004881755, - 0.011658779, - 0.012781902, - 0.0098911375, - 0.0027073, - -0.035378367, - -0.02304954, - -0.005570944, - 0.0039532646, - -0.007083331, - 0.016999993, - -0.009629501, - 0.0055517997, - -0.009463585, - 0.011122744, - -0.0013448757, - -0.012698945, - -0.03193242, - -0.02558933, - 0.030477466, - 0.016744738, - 0.01739564, - -0.0026642259, - 0.0038064925, - 0.0016783028, - -0.0056794276, - 0.0028078067, - -0.008921168, - 0.0018250744, - -0.030094584, - 0.014472968, - 0.0139114065, - -0.0028492857, - 0.02396846, - -0.005570944, - 0.012462834, - 0.013388134, - -0.0042117103, - -0.00005783125, - -0.02646996, - -0.027414404, - 0.007695943, - -0.00009796414, - -0.0076767993, - -0.001896865, - -0.0001806728, - -0.018531526, - 0.017561555, - 0.0029099088, - -0.007938435, - 0.0036948186, - 0.0333108, - -0.0009859231, - 0.034255244, - -0.004553114, - -0.002235078, - -0.0052774004, - -0.026878368, - -0.0035416654, - 0.013439184, - 0.006834457, - 0.0071981954, - 0.005542228, - 0.011914035, - -0.024823565, - 0.015749244, - 0.012903148, - 0.031447437, - 0.008551048, - -0.009233856, - -0.019769512, - -0.030987978, - -0.036016505, - -0.03665464, - -0.032238726, - 0.013337082, - 0.0022462455, - -0.03160059, - 0.02151801, - -0.00818731, - -0.020458702, - 0.008040538, - 0.01152477, - 0.029099088, - 0.0008559025, - 0.00888288, - 0.021632874, - -0.008595718, - -0.0086914385, - 0.008308556, - -0.011422669, - -0.006834457, - 0.019233476, - 0.01943768, - -0.020203447, - 0.02479804, - 0.012718089, - 0.011760882, - 0.022079572, - -0.009361483, - -0.0033151265, - -0.005290163, - 0.010759005, - -0.020777771, - 0.011869365, - -0.026112603, - 0.0058868225, - -0.037318304, - 0.002281343, - -0.0024281146, - -0.010382504, - -0.014651647, - -0.005676237, - -0.033387374, - 0.015289784, - 0.02160735, - 0.008378751, - 0.006260133, - -0.006885508, - -0.008429802, - -0.003225787, - -0.010510132, - 0.032698188, - 0.0002821766, - 0.0015626402, - 0.006454765, - -0.001293027, - -0.010159155, - -0.008231979, - -0.0031938802, - 0.02539789, - -0.0034906145, - -0.0021920037, - -0.024045037, - 0.008168166, - 0.038620107, - -0.01651501, - -0.00074024, - -0.0021489295, - -0.005449698, - 0.0027168721, - 0.0067068296, - 0.001869744, - -0.015200445, - 0.01864639, - -0.0240578, - -0.012265011, - -0.028052542, - -0.0036054791, - 0.008168166, - -0.015647141, - -0.00522954, - -0.028001491, - 0.014957952, - 0.000028915625, - -0.003822446, - -0.017408403, - 0.031039027, - 0.0050795777, - -0.0186081, - 0.019361105, - 0.00008520138, - 0.015864108, - 0.002271771, - 0.014358103, - 0.0042499984, - -0.02516816, - 0.030554043, - 0.0021026644, - -0.03525074, - -0.027057048, - -0.008895642, - -0.011186558, - 0.0012475597, - -0.005060434, - 0.009367865, - -0.002179241, - 0.013209455, - -0.020624617, - 0.00056515087, - -0.0059283013, - -0.026316807, - 0.018148642, - 0.020688431, - -0.020879872, - -0.017599843, - 0.00902327, - -0.011154651, - 0.0013783779, - -0.027363354, - -0.008499997, - -0.012667038, - 0.01859534, - 0.013196692, - -0.019271765, - -0.003914976, - -0.012303299, - -0.01239902, - 0.0033693681, - -0.0021680736, - 0.014421917, - -0.002739207, - -0.001256334, - -0.024542784, - 0.014332578, - -0.02146696, - 0.013898644, - 0.0015841774, - -0.019667411, - -0.017969964, - -0.002081925, - 0.0042212824, - -0.00458183, - -0.0047956062, - -0.03040089, - -0.018391134, - 0.0027376118, - -0.0031874988, - -0.0027998302, - 0.0018011442, - 0.008174547, - 0.018314559, - -0.005666665, - -0.015493989, - 0.020509753, - 0.00075539574, - -0.0015610448, - -0.018084828, - -0.017842336, - -0.008423421, - -0.009310432, - 0.013898644, - 0.0038862599, - 0.0044765375, - -0.008308556, - 0.026444435, - -0.016948942, - 0.004891327, - -0.0041351337, - -0.022934677, - -0.00070873194, - 0.021415908, - 0.020063056, - 0.03137086, - 0.010063435, - -0.00809797, - -0.02313888, - -0.0055517997, - 0.0095018735, - 0.037139628, - -0.012526647, - 0.015009004, - 0.009406153, - -0.010331453, - 0.0014262382, - -0.030936927, - 0.007504502, - 0.011665161, - 0.02132657, - 0.0055996603, - -0.007523646, - 0.011971467, - 0.028563052, - -0.0028795972, - -0.022845337, - -0.0014748962, - -0.0053284517, - -0.035046533, - 0.001356043, - 0.009533781, - -0.02869068, - 0.007638511, - -0.02368768, - -0.004205329, - -0.023445187, - -0.007523646, - -0.024810802, - -0.008831829, - -0.033897884, - 0.028792782, - 0.024530021, - -0.009508255, - 0.008870117, - -0.028563052, - -0.0028078067, - -0.006981229, - -0.00916366, - -0.009661408, - -0.026572064, - -0.006560058, - -0.007849096, - 0.0007195005, - -0.031728216, - -0.005529465, - 0.0065217693, - 0.0069110338, - 0.020343836, - 0.23422214, - 0.008774396, - -0.013579574, - 0.032085575, - -0.018110353, - 0.025040532, - 0.023840832, - -0.01596621, - 0.028486477, - 0.03665464, - -0.021671163, - 0.0006126124, - 0.0008319723, - -0.0018521952, - 0.011977849, - -0.012960581, - -0.03377026, - -0.0023658962, - -0.0015107915, - -0.009099847, - 0.016846841, - 0.0026913467, - 0.00916366, - 0.00029075157, - 0.028996987, - 0.015698193, - -0.0069301776, - 0.003618242, - 0.0044861096, - 0.011792788, - -0.001253941, - -0.01869744, - 0.0043840073, - -0.0060176407, - 0.002512668, - -0.0028891694, - -0.006694067, - 0.003211429, - 0.009387009, - 0.03859458, - 0.0060591195, - 0.0063239466, - -0.024874616, - -0.008551048, - 0.0047924155, - 0.00851276, - -0.015800295, - -0.006719592, - 0.021900894, - 0.015034529, - -0.010140011, - -0.0061803656, - 0.044490974, - 0.023189932, - -0.01096959, - 0.02183708, - 0.033566054, - -0.011250371, - 0.025716959, - -0.010344216, - -0.01508558, - 0.023623865, - -0.01993543, - 0.0046265, - 0.019144138, - -0.0016065122, - -0.015787533, - 0.0051657264, - 0.02193918, - -0.02276876, - 0.011320567, - 0.0024392821, - 0.007721469, - 0.0017979536, - -0.005727288, - -0.019629123, - 0.022692185, - -0.006103789, - 0.027873864, - 0.006499435, - -0.016412906, - -0.008104351, - -0.0075683156, - 0.018059302, - -0.0066749225, - -0.008965838, - -0.0018362418, - 0.015723718, - 0.0228581, - -0.00684722, - 0.0040968456, - -0.0029593646, - 0.0017054236, - 0.010242114, - 0.030324314, - 0.022564556, - -0.00536674, - 0.0073832558, - -0.026074314, - -0.0009683743, - -0.03496996, - -0.035659146, - 0.0042340453, - -0.017268011, - -0.009106228, - 0.007204577, - -0.0009986858, - 0.0015506751, - 0.033693682, - -0.0003832816, - 0.0039915526, - -0.012022519, - 0.008359606, - -0.0083021745, - 0.0090360325, - -0.006173984, - 0.013936932, - -0.013260506, - -0.017102096, - -0.018722966, - -0.0034268005, - -0.020701194, - 0.0017788095, - -0.0067068296, - -0.00006735346, - -0.019820563, - -0.002743993, - -0.0024967145, - 0.0073002977, - -0.04275524, - 0.036475964, - -0.0046711694, - 0.021403145, - -0.000051948413, - -0.0054337443, - 0.01193956, - 0.0001487659, - -0.0076512736, - -0.000465043, - -0.0080915885, - 0.001670326, - 0.0016910655, - 0.009865612, - -0.00522954, - 0.0014206545, - -0.0066238716, - 0.005845343, - -0.027822813, - -0.027159149, - -0.024274766, - -0.025334075, - -0.010471843, - -0.009380627, - -0.0070578055, - 0.009361483, - 0.003080611, - -0.021441434, - -0.008991363, - 0.0010018765, - 0.031064553, - -0.01138438, - -0.0014254405, - 0.026546538, - -0.0148048, - 0.013400896, - 0.0030088203, - -0.16254649, - 0.02410885, - 0.014090085, - -0.01494519, - -0.005063624, - -0.0026642259, - 0.016208703, - 0.02040765, - -0.020165158, - 0.028741732, - -0.0036310048, - 0.024644887, - -0.04247446, - -0.009131754, - -0.012552173, - 0.0009683743, - 0.000106090425, - -0.0009891138, - 0.017370114, - 0.0033757496, - 0.007536409, - -0.020879872, - 0.022743234, - 0.021058552, - 0.015060055, - -0.0032736475, - -0.026342332, - 0.032596085, - 0.0074470695, - -0.0071981954, - -0.0069939913, - -0.0034906145, - -0.0002753964, - 0.024874616, - 0.016489483, - -0.0025764818, - 0.0023307987, - 0.010593089, - -0.00024448658, - -0.01041441, - 0.00222072, - 0.028563052, - 0.009565688, - 0.012220341, - 0.0010920136, - 0.02749098, - 0.029099088, - 0.02114789, - 0.0035831444, - -0.009616738, - 0.023330322, - -0.033438426, - -0.013515761, - -0.007842715, - 0.022130623, - 0.02031831, - 0.016349094, - 0.009374246, - -0.008155403, - 0.009138135, - 0.00064292393, - -0.038645633, - -0.023445187, - 0.0064675277, - 0.0010417601, - -0.006981229, - 0.010803675, - 0.011894891, - -0.0044637746, - 0.006024022, - -0.020471465, - -0.006234607, - -0.0058868225, - -0.021313807, - -0.006515388, - 0.0008957861, - -0.011594966, - -0.0026482723, - -0.003503377, - -0.013183929, - 0.010229351, - 0.02248798, - -0.015034529, - -0.00874887, - -0.008831829, - 0.00888288, - 0.004853039, - 0.008263886, - -0.02424924, - -0.00064611464, - 0.023317559, - -0.036246233, - 0.003752251, - -0.03943692, - 0.008997745, - 0.017331826, - 0.0015762006, - -0.011084456, - 0.007887385, - 0.012182053, - 0.00020639773, - 0.0013105758, - -0.023853594, - 0.009559306, - 0.030298788, - 0.018493237, - -0.012233104, - 0.0062282262, - 0.03045194, - -0.004084083, - -0.016872367, - 0.022360353, - -0.0046935044, - 0.006815313, - 0.02294744, - 0.010242114, - 0.013681677, - -0.028486477, - -0.0014254405, - 0.009514636, - 0.048881363, - -0.0061293147, - -0.0062760864, - 0.019475969, - -0.0023148453, - -0.0309114, - -0.10006002, - -0.013707202, - 0.017829573, - 0.020739483, - 0.0136561515, - 0.027031522, - 0.005038099, - 0.017433928, - 0.0023212268, - 0.02410885, - 0.0021951944, - -0.022794286, - -0.019488731, - 0.010427173, - 0.005306117, - -0.013490235, - 0.018518763, - -0.023011252, - -0.05066815, - 0.0037650138, - -0.0039213574, - 0.006872745, - -0.003442754, - -0.016757501, - -0.005344405, - 0.0034363726, - -0.024210952, - 0.005880441, - 0.017880624, - -0.004080892, - 0.0107015725, - -0.0148558505, - 0.0041957567, - -0.006694067, - -0.008678676, - -0.0004000327, - -0.004808369, - 0.0012850502, - 0.02743993, - -0.030962452, - -0.00458183, - 0.0022175293, - 0.015277022, - -0.03285134, - -0.0041670403, - 0.010293164, - -0.000098911376, - 0.012239485, - 0.0042117103, - -0.019271765, - 0.0060591195, - 0.020662906, - -0.0346126, - -0.009712459, - 0.044108093, - -0.029507497, - 0.01161411, - 0.017012756, - -0.0271081, - 0.021824317, - 0.0048147505, - 0.017038282, - 0.0012986107, - 0.02920119, - -0.026023265, - -0.01637462, - -0.04895794, - -0.008595718, - 0.023024015, - -0.031498488, - 0.0034714702, - 0.017561555, - -0.01619594, - -0.0041127987, - -0.0198078, - 0.01920795, - -0.025193686, - -0.01299887, - 0.008423421, - -0.012239485, - -0.02641891, - -0.020394888, - 0.008021394, - -0.0056889993, - -0.0074598324, - 0.029558549, - -0.021964706, - -0.008436183, - 0.025576567, - -0.00289236, - 0.013375371, - 0.038620107, - 0.013298794, - -0.019501494, - -0.008634006, - 0.020943686, - 0.007338586, - 0.0028604532, - 0.019220714, - -0.018148642, - -0.019743986, - -0.007925672, - -0.035914402, - 0.014868613, - -0.014779274, - -0.02437687, - -0.011805551, - 0.013158403, - -0.011741738, - 0.0034523262, - -0.011512008, - -0.004470156, - -0.011205702, - -0.0073641115, - -0.012615986, - -0.015953448, - -0.0053731212, - 0.0026897513, - 0.016770264, - -0.0019686555, - 0.011907654, - -0.009240237, - -0.0072173397, - -0.0014725032, - 0.00040521758, - 0.008015012, - -0.03325975, - 0.0067068296, - -0.01642567, - -0.019080324, - -0.029456446, - -0.002018111, - 0.024210952, - -0.02646996, - 0.011480101, - 0.027057048, - -0.018684678, - -0.031983472, - -0.012226722, - 0.021415908, - 0.008359606, - -0.020024767, - -0.02387912, - -0.022998491, - 0.017102096, - -0.011033405, - -0.019820563, - 0.030707197, - -0.012673419, - -0.0076640365, - 0.0020579947, - 0.012730852, - 0.018557051, - 0.017727472, - 0.0027918534, - -0.005251875, - -0.011665161, - -0.00855743, - 0.02915014, - 0.012131002, - 0.0068408386, - -0.0138220675, - 0.006343091, - -0.0046328814, - 0.01346471, - 0.011652398, - -0.0032082384, - 0.018659152, - -0.005682618, - -0.0031444246, - -0.0043552914, - -0.023866357, - -0.014281526, - -0.0040649385, - 0.050693676, - 0.016361857, - 0.01258408, - -0.005982543, - -0.009648645, - -0.01822522, - -0.0120289, - 0.017089333, - 0.0048626107, - -0.0037299162, - -0.012405401, - -0.001066488, - 0.027644135, - 0.023623865, - -0.053297278, - -0.008257505, - 0.01827627, - -0.001346471, - -0.024772514, - 0.01272447, - -0.003895832, - 0.008506378, - 0.01323498, - 0.00028018243, - -0.0015115892, - -0.00606231, - -0.0029162902, - 0.022373116, - 0.0061676027, - -0.01762537, - -0.007370493, - -0.034408398, - -0.010076198, - 0.02424924, - -0.0069939913, - -0.018340083, - -0.014396391, - 0.018250745, - 0.009182804, - -0.014549544, - 0.0035320933, - 0.01406456, - -0.0070450427, - -0.0019925856, - -0.039462447, - -0.010140011, - -0.013541287, - 0.013617863, - 0.011512008, - 0.0051657264, - 0.00911261, - -0.0032927915, - 0.021415908, - 0.010682428, - 0.026495486, - -0.038390376, - 0.018493237, - 0.007440688, - 0.002743993, - 0.012884004, - -0.015302547, - 0.0022510316, - -0.024083326, - -0.01198423, - -0.016349094, - 0.017957201, - 0.0031268757, - 0.051204186, - -0.008844592, - -0.031804793, - 0.033336323, - -0.024210952, - 0.001543496, - 0.01216929, - 0.00072628073, - -0.0228581, - -0.011850221, - -0.011148269, - 0.01369444, - 0.020165158, - -0.016591586, - -0.004636072, - -0.00023970056, - -0.029788278, - 0.02743993, - -0.028078068, - -0.0013289222, - 0.028716207, - 0.0026131747, - 0.011205702, - 0.015468463, - -0.01869744, - -0.019067561, - 0.014485731, - 0.026074314, - 0.0031986663, - -0.0010465462, - 0.020012004, - -0.008755252, - -0.022015758, - -0.011537533, - 0.0010170323, - -0.036118604, - -0.015953448, - -0.014498494, - -0.000036892347, - 0.014626121, - 0.008499997, - 0.029864855, - -0.020063056, - -0.020152396, - 0.0057432414, - -0.012788284, - -0.007791664, - 0.0071981954, - -0.0062505607 + 0.01577385, + -0.0072296807, + 0.0065341513, + -0.021912377, + -0.006553294, + 0.0037105556, + -0.01824968, + -0.033232283, + 0.011862292, + -0.017496722, + 0.019436548, + 0.009731036, + -0.0045847534, + -0.0013471901, + -0.016896907, + -0.00010548602, + 0.03307914, + 0.011607052, + 0.026468417, + -0.016514046, + -0.022308, + 0.018185869, + -0.008920648, + 0.011626194, + -0.020878654, + -0.010196849, + 0.008014545, + -0.016654428, + 0.0024199968, + 0.015505847, + 0.010509518, + -0.018236918, + 0.012238772, + -0.025102882, + -0.035759162, + 0.015595181, + 0.0045209434, + -0.0034936012, + 0.017062813, + -0.018619778, + -0.0006265351, + 0.009845894, + 0.0032798375, + -0.007835876, + -0.008984458, + 0.012130294, + 0.019538643, + 0.0072871097, + -0.017586054, + 0.011638957, + 0.003598888, + 0.019181307, + -0.018096536, + -0.018734636, + 0.011192286, + -0.035248682, + 0.0039466526, + 0.017675389, + 0.0057237633, + -0.008180451, + -0.0126024885, + -0.016922431, + 0.0041348925, + -0.014050977, + 0.004409276, + -0.000938008, + -0.009539605, + 0.004303989, + 0.00019840944, + 0.0054972377, + 0.021325326, + 0.038005278, + 0.006368245, + 0.019359974, + 0.025077358, + 0.009265222, + -0.013770213, + 0.023418296, + -0.004466705, + -0.0031474316, + 0.0009906513, + -0.008735598, + -0.03073093, + -0.0048080888, + 0.0144338375, + -0.0017388244, + -0.009628939, + 0.00431037, + -0.034993444, + -0.0030772407, + -0.011262477, + 0.03073093, + 0.026596038, + -0.012111152, + 0.00066123187, + 0.014803936, + 0.011313525, + 0.029709969, + 0.015735563, + -0.035350777, + 0.014931556, + 0.004524134, + -0.042446457, + 0.0029831207, + -0.024745544, + -0.02059789, + 0.0024790212, + 0.003978558, + 0.026162129, + -0.020559605, + -0.022256952, + 0.023903253, + 0.046683446, + -0.023035435, + -0.0019318499, + -0.021044562, + 0.012870491, + -0.028306147, + -0.017981678, + -0.006052385, + 0.0065245796, + 0.051175676, + 0.01799444, + -0.015225083, + 0.037060887, + -0.0001232332, + -0.008914267, + -0.028969772, + -0.0042178454, + 0.015684515, + -0.0063395305, + 0.01730529, + 0.0020706367, + 0.01350221, + 0.007274348, + -0.0010265445, + -0.0144338375, + 0.02731071, + -0.005950289, + -0.019411024, + 0.010815807, + 0.032313418, + -0.016067376, + 0.0039307005, + -0.006546913, + 0.034993444, + 0.015978042, + -0.003972177, + -0.020380937, + -0.005615286, + 0.0032479325, + -0.011256096, + 0.003187313, + -0.0035765544, + 0.015416513, + 0.0052515687, + -0.0071722516, + 0.005302617, + -0.027234137, + 0.001990874, + -0.019436548, + -0.006451198, + 0.030143877, + -0.011875054, + 0.04354399, + 0.027872238, + 0.0016104067, + -0.002837953, + -0.016258806, + -0.002268448, + 0.0006664164, + 0.025166692, + -0.012985349, + 0.032313418, + -0.017586054, + 0.0121941045, + 0.0077848285, + -0.0018106108, + -0.016360901, + 0.004367799, + -0.02491145, + -0.003314933, + 0.016207758, + 0.004587944, + 0.006033242, + -0.00506971, + 0.02547298, + -0.008646265, + 0.014880508, + -0.004852756, + 0.023801155, + 0.025945174, + -0.02160609, + -0.033538572, + -0.68118525, + -0.043952376, + 0.020074647, + -0.0036339834, + 0.0017978487, + 0.02464345, + 0.0067192004, + 0.015442037, + 0.0057173823, + -0.01629709, + 0.011811243, + 0.005442999, + 0.011077428, + -0.013566021, + -0.0060491944, + -0.02243562, + -0.0033851243, + 0.022205904, + -0.002155185, + -0.015480323, + 0.0005595345, + 0.0069297734, + -0.017649865, + -0.011696386, + 0.021963425, + 0.009029125, + 0.017445672, + -0.00071148225, + -0.017394625, + -0.0018536826, + -0.016845858, + 0.015122986, + -0.020827606, + -0.013023635, + 0.04696421, + -0.011415621, + -0.007070156, + 0.024758307, + 0.008799409, + 0.026417369, + -0.009635321, + -0.0017547769, + 0.01204096, + -0.030935122, + -0.013808499, + 0.010694568, + 0.015071939, + -0.006680914, + 0.0321858, + 0.0014157859, + 0.019500358, + -0.03187951, + 0.0051048053, + 0.00994799, + 0.007893305, + 0.0015099058, + 0.04234436, + 0.00076292915, + 0.0009435914, + 0.007210538, + 0.007133966, + 0.0022174, + -0.004664516, + -0.016194995, + -0.016628904, + -0.0009108887, + -0.038209468, + -0.015850421, + -0.018415585, + -0.00071227987, + -0.0053377124, + 0.0041859406, + -0.015850421, + 0.02382668, + 0.02027884, + -0.005152663, + 0.030756453, + -0.009029125, + 0.00024207945, + -0.0021583757, + 0.011141238, + -0.014446599, + -0.03111379, + -0.017318053, + 0.029633395, + -0.021695424, + -0.016246043, + -0.025421932, + 0.016105661, + -0.0045751818, + 0.025000785, + -0.0013774999, + -0.016105661, + -0.0081357835, + -0.013795737, + 0.03614202, + 0.002204638, + 0.0030086448, + 0.0034457438, + 0.0059470986, + -0.0026305702, + -0.015978042, + -0.0045177527, + -0.0000015173586, + 0.026264224, + -0.012213247, + -0.027361758, + 0.028408242, + 0.0111795245, + -0.015926993, + 0.025077358, + -0.0111795245, + -0.009916085, + 0.017662628, + 0.011989912, + -0.027846714, + 0.04821489, + 0.0024247826, + 0.018709112, + -0.008678169, + 0.0065915803, + 0.024822118, + -0.009156745, + -0.008295309, + -0.0017834915, + -0.013195923, + -0.008907885, + -0.012442963, + -0.044207618, + 0.0014556672, + 0.0031649794, + 0.009750179, + 0.01679481, + 0.006757486, + 0.008646265, + 0.0035574113, + 0.010949808, + -0.021618852, + 0.024439257, + -0.005797145, + -0.011332668, + -0.0010289374, + -0.026008984, + 0.013578783, + 0.0033978862, + -0.034253243, + -0.03461058, + -0.006119386, + -0.012328105, + 0.015352703, + -0.023813918, + -0.012315343, + -0.039255954, + 0.009903323, + 0.015620705, + -0.016526807, + -0.02211657, + -0.005430237, + -0.013285256, + 0.029837588, + 0.016628904, + 0.0011182715, + 0.001812206, + -0.0007577446, + -0.0104329465, + -0.0216699, + -0.008295309, + 0.0413234, + -0.0007465778, + -0.026442893, + -0.021133894, + 0.0010066038, + -0.0039275098, + -0.008212356, + -0.015161272, + -0.019972552, + -0.0062629585, + -0.015071939, + 0.0034010767, + -0.009437509, + 0.01850492, + 0.017164908, + 0.009986276, + -0.017407387, + 0.04739812, + 0.006999965, + 0.016501283, + 0.0028507148, + 0.0015226678, + -0.0018473015, + -0.012525917, + -0.010254278, + 0.002959192, + -0.0092779845, + 0.009928847, + 0.012149437, + 0.010656281, + 0.011211429, + 0.0023817108, + -0.0021950663, + 0.00944389, + -0.011351812, + 0.017535007, + -0.014280694, + 0.00602048, + -0.026876802, + 0.017905105, + -0.010694568, + 0.0005623262, + 0.026442893, + 0.004367799, + -0.023979824, + -0.0032096466, + -0.007574255, + 0.016143948, + -0.00589286, + -0.024311636, + 0.002935263, + 0.0020339459, + -0.0123344865, + 0.0011836768, + 0.014791174, + 0.023520391, + -0.014076501, + -0.0037616035, + 0.0016383235, + 0.032338943, + 0.01761158, + -0.0070254887, + -0.018173108, + -0.023035435, + -0.005101615, + -0.012034579, + 0.010700949, + -0.032543134, + -0.006077909, + 0.0056408104, + -0.0320837, + 0.022308, + 0.011938864, + -0.011319906, + 0.03517211, + 0.025613362, + 0.0048878514, + 0.0039370814, + -0.0013487854, + 0.016335377, + 0.011709148, + -0.017854057, + 0.006617104, + -0.012525917, + 0.009424747, + -0.0034010767, + 0.015658991, + 0.039255954, + -0.0083655, + 0.036780123, + 0.0015936565, + 0.017101098, + 0.023405533, + -0.026085556, + -0.0063714352, + 0.0058450024, + -0.0057684304, + 0.013049159, + -0.0009427938, + -0.0054717134, + -0.0018058249, + 0.0050984244, + -0.009386461, + -0.017420148, + -0.0018329442, + 0.02876558, + -0.007299872, + 0.02674918, + -0.010471232, + -0.0052707116, + -0.004361418, + 0.0308075, + 0.011422003, + -0.008097498, + -0.026111081, + 0.014816698, + -0.0011900578, + -0.0047729933, + -0.030118352, + -0.023048198, + 0.0177392, + -0.0006349102, + 0.009979894, + 0.008378262, + 0.009533225, + 0.029199488, + -0.0060842903, + 0.0076189223, + -0.02579203, + 0.0057716207, + 0.007880543, + 0.01660338, + 0.002325877, + -0.004568801, + -0.018275203, + -0.032134753, + -0.015875945, + 0.011824006, + 0.009845894, + -0.006744724, + 0.008422929, + -0.01013942, + -0.028740056, + -0.011492194, + -0.0005914396, + 0.00079363777, + -0.013770213, + -0.005430237, + -0.002332258, + -0.029250536, + 0.004530515, + 0.034431912, + 0.020802082, + 0.005232426, + -0.010113896, + -0.012034579, + -0.00880579, + 0.077235706, + 0.0249625, + 0.008052831, + 0.010094753, + -0.002775738, + -0.011562385, + -0.028586911, + 0.011983531, + -0.01324697, + -0.0065915803, + 0.01660338, + -0.026060032, + 0.001767539, + 0.004485848, + 0.005165425, + -0.006680914, + 0.0071148225, + -0.0013128922, + 0.033793814, + -0.020138457, + 0.0061321477, + 0.0017563722, + -0.0140254535, + 0.0123344865, + 0.0037296985, + -0.006483103, + 0.007529588, + -0.010228754, + 0.015710039, + -0.011568765, + 0.00899722, + 0.009737416, + -0.007567874, + -0.006572437, + -0.017573293, + 0.0024471162, + -0.0017946583, + 0.0056248577, + 0.010145801, + -0.014650792, + 0.03606545, + 0.004460324, + 0.012787538, + -0.0068851067, + -0.02142742, + 0.007076537, + -0.014012692, + 0.020546842, + -0.011989912, + -0.018173108, + 0.026315272, + 0.007357301, + -0.015263368, + 0.0059215743, + 0.010720092, + 0.0035893165, + -0.010956189, + -0.01807101, + -0.007861401, + 0.00093880564, + 0.000978687, + -0.007331777, + 0.0024423304, + -0.005494047, + -0.015033652, + -0.008659027, + 0.0038636997, + -0.0031043598, + -0.017981678, + -0.0034616962, + 0.014625268, + -0.012659918, + -0.021874093, + 0.0079954015, + 0.027285187, + 0.008544168, + 0.017624341, + -0.024311636, + -0.01781577, + 0.041655213, + -0.0004343073, + -0.0077401614, + -0.0038668902, + -0.0029879066, + -0.0070382506, + 0.0010345208, + 0.025957936, + -0.023494868, + -0.014408314, + -0.010560567, + 0.03236447, + -0.0018935638, + 0.013068303, + -0.005293045, + -0.013770213, + -0.010343612, + 0.029607872, + 0.0084612155, + -0.009679987, + 0.005293045, + 0.003605269, + -0.024783831, + -0.00066163065, + -0.015442037, + 0.015799373, + 0.01425517, + 0.02851034, + 0.0034553153, + -0.017968915, + 0.013195923, + 0.0070127267, + -0.009450272, + -0.012557821, + -0.0038987952, + 0.004734707, + 0.0068276776, + -0.006065147, + 0.014357266, + -0.008722836, + -0.027157566, + -0.0015202749, + -0.040838443, + 0.027157566, + 0.0017005383, + 0.010675425, + 0.0017101099, + 0.027616998, + -0.005755668, + -0.013259732, + 0.013323543, + -0.009131221, + 0.020648938, + -0.010649901, + -0.017330814, + -0.033946957, + -0.025485741, + 0.033538572, + 0.0022923767, + -0.01604185, + -0.0048814705, + 0.011626194, + 0.012762014, + 0.009839512, + 0.0026911898, + -0.03529973, + -0.023035435, + -0.0055801906, + 0.0040072724, + -0.007070156, + 0.016935192, + -0.00957151, + 0.0055546667, + -0.009456652, + 0.011071047, + -0.001292154, + -0.012666299, + -0.031905036, + -0.025562314, + 0.03047569, + 0.016743762, + 0.017356338, + -0.0026401416, + 0.0038828426, + 0.0016718238, + -0.005666334, + 0.0028826199, + -0.00893341, + 0.0018361347, + -0.030118352, + 0.014497648, + 0.0138850715, + -0.0028491195, + 0.023941537, + -0.005545095, + 0.012436583, + 0.013400114, + -0.0042306078, + -0.00003614242, + -0.026442893, + -0.027412806, + 0.007638065, + -0.0001354967, + -0.0076827323, + -0.0018808017, + -0.0001483584, + -0.018594254, + 0.01754777, + 0.0029225012, + -0.008008163, + 0.0037616035, + 0.03338543, + -0.0009826751, + 0.034304295, + -0.0045528486, + -0.002211019, + -0.0052770926, + -0.026902325, + -0.0035223158, + 0.013463925, + 0.0068787253, + 0.007236062, + 0.005570619, + 0.011906959, + -0.024860403, + 0.01577385, + 0.01286411, + 0.03149665, + 0.008537787, + -0.009207793, + -0.01976836, + -0.031011693, + -0.036014404, + -0.03662698, + -0.03226237, + 0.013336305, + 0.0022317572, + -0.031598747, + 0.021542279, + -0.008225118, + -0.020457508, + 0.008040069, + 0.011530479, + 0.029122915, + 0.0008414953, + 0.008907885, + 0.02160609, + -0.008595216, + -0.008659027, + 0.008320833, + -0.011402859, + -0.0067766295, + 0.019270642, + 0.019500358, + -0.020227792, + 0.024809355, + 0.012723728, + 0.011760196, + 0.022091046, + -0.009373699, + -0.0033532192, + -0.005289855, + 0.010777521, + -0.020776559, + 0.011868672, + -0.026136605, + 0.005848193, + -0.037290603, + 0.0022923767, + -0.0024168063, + -0.010420185, + -0.014663554, + -0.0056535723, + -0.03338543, + 0.015327179, + 0.021631613, + 0.008391025, + 0.006250196, + -0.0068978686, + -0.008384643, + -0.0032176226, + -0.010483994, + 0.032721803, + 0.00030868122, + 0.0015354297, + 0.006476722, + -0.00128338, + -0.010196849, + -0.008257023, + -0.003212837, + 0.025370883, + -0.0034489343, + -0.0022174, + -0.024132969, + 0.008148545, + 0.038617853, + -0.01653957, + -0.0007577446, + -0.002136042, + -0.0054334276, + 0.0027214994, + 0.006680914, + 0.0018345395, + -0.015199559, + 0.018607017, + -0.024069158, + -0.012245152, + -0.028050907, + -0.0036084594, + 0.008193213, + -0.015607943, + -0.005248378, + -0.028050907, + 0.014982604, + 0.00004454242, + -0.0038381757, + -0.017394625, + 0.031037217, + 0.005107996, + -0.018594254, + 0.01939826, + 0.00013669314, + 0.015901469, + 0.002268448, + 0.014318979, + 0.004240179, + -0.02515393, + 0.030654358, + 0.0021583757, + -0.03529973, + -0.027080994, + -0.008907885, + -0.0111795245, + 0.0012618441, + -0.005031424, + 0.009335414, + -0.0021902807, + 0.013157636, + -0.020636177, + 0.0005794752, + -0.005924765, + -0.026340798, + 0.018147584, + 0.020623414, + -0.020891417, + -0.017522246, + 0.0090099815, + -0.011173143, + 0.0013695236, + -0.027361758, + -0.008499501, + -0.012647156, + 0.01863254, + 0.013221446, + -0.01933445, + -0.0039434624, + -0.012321725, + -0.012423821, + 0.0033276952, + -0.0021934712, + 0.014370028, + -0.0026991658, + -0.0012474868, + -0.024579639, + 0.0142934555, + -0.021465708, + 0.013936119, + 0.0016135972, + -0.019755598, + -0.017968915, + -0.002136042, + 0.0042050835, + -0.004594325, + -0.004811279, + -0.030424641, + -0.018351777, + 0.0027023565, + -0.003225599, + -0.0027932858, + 0.0017850867, + 0.0081357835, + 0.018262442, + -0.0056535723, + -0.015480323, + 0.020546842, + 0.0007437861, + -0.0015936565, + -0.018045487, + -0.017841296, + -0.008403786, + -0.009297127, + 0.013936119, + 0.0038892238, + 0.004556039, + -0.008327214, + 0.026442893, + -0.016922431, + 0.004916566, + -0.004125321, + -0.022997148, + -0.00071307755, + 0.02142742, + 0.0200236, + 0.031343505, + 0.010069229, + -0.008129403, + -0.02313753, + -0.005545095, + 0.009469414, + 0.037111938, + -0.012513154, + 0.0149698425, + 0.009431128, + -0.01033085, + 0.0013926547, + -0.03098617, + 0.0075423503, + 0.011683623, + 0.021312563, + 0.005596143, + -0.0074849213, + 0.011989912, + 0.028586911, + -0.0028507148, + -0.022780195, + -0.0014907627, + -0.005360046, + -0.03504449, + 0.0014046192, + 0.009533225, + -0.028740056, + 0.0076061604, + -0.023673536, + -0.004169988, + -0.02344382, + -0.007523207, + -0.024796592, + -0.00880579, + -0.03392143, + 0.028791104, + 0.024554115, + -0.009552367, + 0.0088696, + -0.028535863, + -0.0027470235, + -0.007006346, + -0.009156745, + -0.00969275, + -0.026570512, + -0.006623485, + -0.007861401, + 0.0006995179, + -0.031649794, + -0.005564238, + 0.006540532, + 0.0069170115, + 0.020368174, + 0.23420848, + 0.008754741, + -0.013591545, + 0.032134753, + -0.01812206, + 0.025077358, + 0.02376287, + -0.015875945, + 0.028484816, + 0.036652505, + -0.021657137, + 0.0006440829, + 0.00089174573, + -0.0018345395, + 0.011989912, + -0.013030016, + -0.03376829, + -0.002338639, + -0.0014357265, + -0.0090801725, + 0.01685862, + 0.002649713, + 0.009169507, + 0.00033121413, + 0.028995296, + 0.015697276, + -0.0069042495, + 0.0036116499, + 0.004476276, + 0.01178572, + -0.0012068079, + -0.018721875, + 0.004364609, + -0.0060619568, + 0.002522093, + -0.0029065486, + -0.0067383433, + 0.003219218, + 0.009386461, + 0.038617853, + 0.006058766, + 0.0062629585, + -0.024873165, + -0.008550549, + 0.004785755, + 0.00849312, + -0.015735563, + -0.0067383433, + 0.021950664, + 0.015046414, + -0.010152182, + -0.0061449097, + 0.044513904, + 0.023214104, + -0.011007237, + 0.021823043, + 0.033615146, + -0.011268858, + 0.025715457, + -0.010349994, + -0.0151102245, + 0.023673536, + -0.019883217, + 0.004594325, + 0.019155784, + -0.0015721206, + -0.015799373, + 0.0051399013, + 0.021912377, + -0.022780195, + 0.011332668, + 0.0024550925, + 0.0077146376, + 0.0018042297, + -0.0057173823, + -0.019653501, + 0.022716384, + -0.006128957, + 0.027897762, + 0.006508627, + -0.016360901, + -0.008129403, + -0.007644446, + 0.01799444, + -0.006700057, + -0.008914267, + -0.0018329442, + 0.015684515, + 0.022831243, + -0.0068659633, + 0.0041029872, + -0.0029575967, + 0.0016925621, + 0.010273421, + 0.030373594, + 0.022550479, + -0.005360046, + 0.007363682, + -0.026111081, + -0.000995437, + -0.034942392, + -0.035657067, + 0.004214655, + -0.017190432, + -0.00912484, + 0.007248824, + -0.0009746988, + 0.0015107034, + 0.033666193, + -0.0004159619, + 0.0040710825, + -0.011996293, + 0.0083335955, + -0.008308071, + 0.009003601, + -0.0061576716, + 0.013961643, + -0.013234208, + -0.017101098, + -0.018747399, + -0.0034648867, + -0.020687224, + 0.0017866819, + -0.006700057, + -0.000046710964, + -0.019857693, + -0.0027342616, + -0.0025045453, + 0.007261586, + -0.042778272, + 0.036473837, + -0.0046868497, + 0.02136361, + -0.00008260413, + -0.005417475, + 0.011906959, + 0.00017288541, + -0.0077210185, + -0.00047059925, + -0.008129403, + 0.001628752, + 0.0017404197, + 0.00988418, + -0.0052579497, + 0.0014756079, + -0.0066745332, + 0.005886479, + -0.02782119, + -0.02718309, + -0.024298875, + -0.025396409, + -0.010401041, + -0.009405605, + -0.0070573934, + 0.009354556, + 0.0030836216, + -0.021478469, + -0.008952552, + 0.00095156766, + 0.03111379, + -0.0113773355, + -0.0014588577, + 0.026468417, + -0.014803936, + 0.013310781, + 0.0030469308, + -0.16253701, + 0.024069158, + 0.014140312, + -0.014918794, + -0.0050473763, + -0.0026832134, + 0.016182235, + 0.020444747, + -0.020189505, + 0.028714532, + -0.0036403644, + 0.024630686, + -0.042446457, + -0.009137602, + -0.012557821, + 0.0009013172, + 0.00013061124, + -0.0009866632, + 0.017407387, + 0.0033564097, + 0.007491302, + -0.02091694, + 0.022767432, + 0.021057323, + 0.0151102245, + -0.0032559088, + -0.026315272, + 0.03256866, + 0.0074721593, + -0.007191395, + -0.0070191077, + -0.0034712679, + -0.00025763316, + 0.02491145, + 0.016488522, + -0.0026018557, + 0.0023242817, + 0.010547805, + -0.00024566878, + -0.010381898, + 0.002238138, + 0.028612435, + 0.009609796, + 0.012181343, + 0.001036116, + 0.02743833, + 0.029097391, + 0.02117218, + 0.0035510303, + -0.009597034, + 0.023265151, + -0.03338543, + -0.013425639, + -0.0078550195, + 0.022154856, + 0.020317126, + 0.016399188, + 0.009297127, + -0.00817407, + 0.009214174, + 0.00066721404, + -0.03864338, + -0.023456581, + 0.006377816, + 0.0010608424, + -0.0069808215, + 0.01083495, + 0.011906959, + -0.004473086, + 0.006052385, + -0.020508556, + -0.006259768, + -0.0058450024, + -0.02136361, + -0.006559675, + 0.0008973291, + -0.01159429, + -0.0026066413, + -0.0035382684, + -0.013183161, + 0.010318088, + 0.02249943, + -0.015008128, + -0.008786647, + -0.008844076, + 0.008927029, + 0.004903804, + 0.00823788, + -0.024235064, + -0.0005890467, + 0.023290675, + -0.036218595, + 0.0037296985, + -0.03946015, + 0.008971696, + 0.017343577, + 0.0015737158, + -0.011077428, + 0.007848638, + 0.012200485, + 0.00022393346, + 0.0013184756, + -0.023839442, + 0.00957151, + 0.030322544, + 0.018466635, + -0.012238772, + 0.0062151006, + 0.030450165, + -0.0040742727, + -0.01685862, + 0.022359049, + -0.0046964213, + 0.0067638676, + 0.022984387, + 0.010190468, + 0.013731927, + -0.02851034, + -0.0014429052, + 0.009597034, + 0.048878513, + -0.0061672432, + -0.0062852916, + 0.019500358, + -0.0023099245, + -0.030960646, + -0.099952094, + -0.013668117, + 0.01780301, + 0.020751035, + 0.013706403, + 0.02700442, + 0.004986757, + 0.0173691, + 0.0023418295, + 0.02414573, + 0.0021870902, + -0.022805719, + -0.019500358, + 0.0103627555, + 0.005315379, + -0.013463925, + 0.018594254, + -0.023022672, + -0.05063967, + 0.0037775561, + -0.003924319, + 0.0068532014, + -0.0034234102, + -0.016743762, + -0.005296236, + 0.0034457438, + -0.024184017, + 0.0058577643, + 0.01786682, + -0.0040327962, + 0.010662663, + -0.014791174, + 0.0041923216, + -0.0066681523, + -0.008665407, + -0.00039263134, + -0.0047602314, + 0.0012658322, + 0.027514901, + -0.030935122, + -0.0045975153, + 0.0022237808, + 0.015263368, + -0.032823898, + -0.004138083, + 0.010273421, + -0.00010468839, + 0.012296201, + 0.0042497506, + -0.019245116, + 0.006077909, + 0.020636177, + -0.034636106, + -0.009711892, + 0.04410552, + -0.029480252, + 0.011613432, + 0.01703729, + -0.027080994, + 0.021810282, + 0.0048176604, + 0.01703729, + 0.0013152851, + 0.029250536, + -0.02598346, + -0.016386425, + -0.049006134, + -0.008595216, + 0.023022672, + -0.031471126, + 0.0034776488, + 0.017535007, + -0.016156709, + -0.0040774634, + -0.019819407, + 0.019181307, + -0.025192216, + -0.013010873, + 0.00842931, + -0.012219628, + -0.026417369, + -0.020380937, + 0.0081357835, + -0.005666334, + -0.0074147303, + 0.029556824, + -0.021950664, + -0.008442072, + 0.025549551, + -0.002971954, + 0.0133490665, + 0.038617853, + 0.013285256, + -0.019525882, + -0.008614359, + 0.020967988, + 0.007331777, + 0.0028570958, + 0.019206831, + -0.018134821, + -0.019755598, + -0.0079252105, + -0.035886783, + 0.014778412, + -0.014791174, + -0.02445202, + -0.0118559105, + 0.013157636, + -0.011709148, + 0.0034680772, + -0.011543241, + -0.004476276, + -0.011224192, + -0.007344539, + -0.012634394, + -0.015978042, + -0.005369617, + 0.0027103326, + 0.016756523, + -0.001984493, + 0.011875054, + -0.009226936, + -0.007248824, + -0.0014915604, + 0.0003704972, + 0.008033688, + -0.033232283, + 0.0067192004, + -0.016462998, + -0.01906645, + -0.029454729, + -0.0020052313, + 0.024184017, + -0.02649394, + 0.011485812, + 0.026978897, + -0.018709112, + -0.03193056, + -0.012162199, + 0.021376373, + 0.008435691, + -0.020074647, + -0.02389049, + -0.022984387, + 0.017152147, + -0.0109817125, + -0.01976836, + 0.030781977, + -0.01260887, + -0.0076508275, + 0.002065851, + 0.012787538, + 0.01850492, + 0.017700912, + 0.0027645712, + -0.0052834735, + -0.01159429, + -0.008563311, + 0.029148439, + 0.012149437, + 0.0067766295, + -0.013821261, + 0.0063522924, + -0.0046868497, + 0.013476687, + 0.011664481, + -0.0032463372, + 0.018658064, + -0.005666334, + -0.0031266934, + -0.0043199416, + -0.023877729, + -0.01425517, + -0.0040264153, + 0.050792817, + 0.01634814, + 0.012564203, + -0.005950289, + -0.009654463, + -0.018262442, + -0.012015436, + 0.01703729, + 0.0048240414, + -0.0037233175, + -0.01236001, + -0.0010496756, + 0.027642522, + 0.023596963, + -0.053243123, + -0.008231499, + 0.018262442, + -0.0013639402, + -0.024809355, + 0.012755632, + -0.0038605093, + 0.008505883, + 0.0132086845, + 0.00033719634, + -0.001473215, + -0.006103433, + -0.0029496204, + 0.022333525, + 0.0062246723, + -0.017586054, + -0.007382825, + -0.03440639, + -0.010113896, + 0.024247827, + -0.0069425358, + -0.018339014, + -0.0144338375, + 0.018275203, + 0.009112078, + -0.014523172, + 0.0035382684, + 0.014114787, + -0.0070382506, + -0.0020291603, + -0.039434623, + -0.01013942, + -0.013527735, + 0.01362983, + 0.011492194, + 0.005190949, + 0.009099316, + -0.0032622898, + 0.021376373, + 0.010656281, + 0.02649394, + -0.038388137, + 0.018466635, + 0.007465778, + 0.0027613807, + 0.012876872, + -0.015352703, + 0.00228121, + -0.024120206, + -0.011996293, + -0.016360901, + 0.017956154, + 0.0031346697, + 0.0512012, + -0.008856838, + -0.031726368, + 0.033308856, + -0.024158493, + 0.0015027272, + 0.0121941045, + 0.0007314229, + -0.022831243, + -0.0118559105, + -0.0111795245, + 0.013706403, + 0.020176744, + -0.016590618, + -0.0045751818, + -0.00020319519, + -0.029812064, + 0.027463853, + -0.02807643, + -0.0013352257, + 0.028714532, + 0.002611427, + 0.011236954, + 0.015442037, + -0.018709112, + -0.019053686, + 0.014459361, + 0.026111081, + 0.0031665748, + -0.0010576519, + 0.019998075, + -0.008754741, + -0.022027235, + -0.011504956, + 0.0010209611, + -0.0361165, + -0.01596528, + -0.014459361, + -0.00003359999, + 0.014625268, + 0.0084612155, + 0.029888637, + -0.020036362, + -0.020100173, + 0.005685477, + -0.012781157, + -0.0077848285, + 0.007185014, + -0.006240625 ] }, { "object": "embedding", "index": 4, "embedding": [ - 0.0068770517, - -0.005129081, - -0.0014808308, - -0.018895945, - -0.0009433618, - 0.019852862, - -0.027329583, - -0.020312183, - 0.010353854, - -0.009811601, - 0.0014904, - 0.009658494, - -0.0073937876, - 0.008388982, - -0.017377634, - -0.0047814013, - 0.030340685, - 0.021932565, - 0.024790559, - -0.006066861, - -0.031437952, - 0.01344789, - 0.00350551, - 0.0038978467, - -0.020771503, - 0.000071370145, - 0.013881693, - -0.015833806, - 0.016752448, - 0.012950292, - 0.022072911, - -0.011661642, - 0.0074894796, - -0.03613323, - -0.020503566, - 0.010449546, - 0.0019473284, - -0.005786165, - 0.018717319, - -0.012688735, - 0.005798924, - 0.00630928, - 0.004127507, - 0.000023511779, - -0.008567607, - 0.015999671, - 0.017811436, - 0.0016163943, - -0.012918395, - 0.008810027, - 0.00923107, - 0.030493792, - -0.03299454, - -0.0053236545, - -0.0007499846, - -0.027227512, - -0.015923118, - 0.02268534, - -0.02208567, - -0.020656673, - -0.0024832026, - -0.010105056, - -0.0002422199, - -0.016943831, - 0.0021913426, - -0.003495941, - -0.021409448, - 0.0032886087, - -0.0030605432, - 0.0050429585, - 0.024867114, - 0.03447457, - 0.002315742, - 0.006395403, - 0.04072644, - 0.00724706, - 0.0017431859, - 0.023999507, - -0.012140102, - -0.0018675852, - -0.00268894, - -0.01846214, - -0.011629745, - -0.011827508, - 0.026640601, - 0.004172163, - -0.0019919847, - 0.01029006, - -0.0021546606, - -0.018870426, - -0.004220009, - 0.02676819, - 0.027482688, - 0.004650622, - -0.0018245239, - 0.02174118, - 0.022493957, - 0.015731735, - 0.031846236, - -0.032382112, - 0.0053938287, - 0.031284843, - -0.03424491, - 0.00654532, - -0.03299454, - -0.021039441, - 0.0036586171, - -0.010487823, - 0.021830494, - -0.017237285, - -0.0155658685, - 0.021115994, - 0.037358083, - -0.013728586, - -0.012471833, - -0.023195695, - 0.035393212, - -0.00794242, - -0.010379372, - -0.011961477, - -0.0005334819, - 0.04605966, - 0.022621546, - -0.040828507, - 0.026793709, - 0.0011801991, - -0.00946711, - -0.026793709, - 0.0031769683, - 0.0070429174, - 0.005109943, - 0.016293127, - 0.006928087, - 0.02023563, - -0.011202321, - -0.0040158667, - -0.031973824, - 0.018653525, - 0.004988733, - -0.01857697, - 0.01286098, - 0.031437952, - -0.017275563, - -0.009664874, - -0.0085165715, - 0.031999342, - 0.022404643, - -0.010436787, - -0.012931154, - -0.002912221, - 0.0035023205, - -0.008886579, - 0.003180158, - 0.0024624693, - 0.009384178, - 0.0039201747, - -0.0018867236, - 0.004456049, - -0.032815915, - -0.0015199049, - -0.018219722, - 0.014085835, - 0.033096608, - -0.0029170054, - 0.03802155, - 0.018436624, - 0.0029010568, - -0.0032184348, - -0.002256732, - -0.0074575823, - -0.0061402246, - 0.04128783, - -0.013588238, - 0.012267691, - 0.008841923, - 0.008829165, - 0.0025438075, - 0.0023651826, - -0.017352115, - -0.008918477, - -0.026589565, - -0.0025166948, - 0.011393705, - -0.0018835339, - 0.0074384436, - -0.005071666, - 0.014685504, - -0.0060732407, - 0.0054002083, - -0.015757252, - 0.030417237, - 0.010245403, - 0.0036075814, - -0.028452367, - -0.6863272, - -0.036796693, - 0.018883185, - 0.0051641683, - 0.018423865, - 0.031514503, - 0.010564377, - 0.023540186, - 0.0046570017, - -0.010392131, - 0.010200747, - 0.011074733, - 0.016318643, - -0.009384178, - -0.009077963, - -0.015336208, - -0.008835544, - 0.0016873657, - 0.011821128, - 0.007087574, - 0.0010071563, - 0.009084343, - -0.01953389, - 0.00561073, - 0.020745985, - -0.002057374, - 0.0068323957, - 0.0043444084, - -0.010691965, - 0.0031594248, - -0.020516325, - 0.010436787, - -0.028784098, - -0.0093459, - 0.046672087, - 0.0048228675, - -0.005412967, - 0.017147973, - 0.008146564, - 0.012644079, - -0.0029201952, - 0.0041913013, - 0.0134861665, - -0.027559243, - -0.012254932, - 0.019686997, - 0.0051003736, - 0.010302818, - 0.021103235, - 0.0001587886, - 0.023489151, - -0.005684094, - 0.023961231, - 0.0068579135, - 0.02350191, - 0.0005055718, - 0.031488985, - -0.00064552104, - -0.0037574987, - 0.0052598603, - -0.0007049297, - 0.006870672, - -0.026921296, - -0.022583269, - -0.022647062, - 0.013243747, - -0.027201993, - -0.029728258, - -0.008522951, - 0.0037511191, - -0.0014800334, - 0.014366531, - -0.008663299, - 0.015948636, - 0.02278741, - -0.0027383808, - 0.020605637, - 0.0070429174, - 0.0022647062, - 0.008089148, - -0.0011786042, - -0.022226019, - -0.006012636, - -0.00023683724, - 0.03169313, - -0.03330075, - -0.030621381, - -0.028579956, - 0.015923118, - -0.017352115, - 0.035112515, - 0.02302983, - -0.016765205, - -0.0066792886, - -0.0072534396, - 0.014774816, - 0.008899339, - 0.007878626, - 0.005310896, - -0.010424028, - 0.010066779, - -0.0055565047, - -0.0011307583, - 0.010283681, - 0.017964544, - -0.00018211348, - -0.02208567, - 0.026385423, - 0.014009282, - 0.0038691391, - 0.026717154, - -0.010258162, - -0.011648884, - 0.018857667, - 0.008765371, - -0.025670923, - 0.03835328, - 0.0013612161, - 0.011610607, - -0.009218312, - 0.0144303255, - 0.02304259, - -0.0056745247, - -0.0007272578, - 0.0016458993, - -0.0012232604, - -0.011604227, - -0.009256588, - -0.037511192, - -0.0027527346, - 0.003435336, - 0.0012511705, - 0.016088983, - 0.0055565047, - 0.0074065463, - -0.004232768, - 0.0056872834, - -0.014978959, - 0.022481197, - -0.01649727, - -0.014940682, - -0.0061785015, - -0.013230988, - 0.004969595, - -0.0012105014, - -0.019125605, - -0.043303736, - -0.0072789574, - -0.0125420075, - 0.018640766, - -0.01636968, - -0.009894534, - -0.029141348, - 0.014404808, - 0.016650375, - 0.00013506501, - -0.022710858, - -0.01029006, - 0.0010478253, - 0.015208619, - 0.014506879, - -0.007623448, - -0.012076307, - -0.003074897, - -0.008899339, - -0.033632483, - -0.0069599845, - 0.02653853, - -0.009007789, - -0.016101742, - 0.0017320218, - -0.012605802, - -0.016535545, - -0.013371336, - -0.018041097, - -0.016905554, - -0.024573658, - -0.025428506, - -0.0007563641, - -0.018245239, - 0.0022583269, - 0.025581611, - 0.0100348815, - -0.020848056, - 0.04748866, - -0.019623201, - 0.012669596, - 0.026002657, - -0.012599423, - 0.015336208, - -0.0018915082, - -0.011616986, - -0.018130409, - -0.001996769, - 0.020733226, - 0.008440018, - 0.002816529, - 0.008580366, - 0.01227407, - -0.012025272, - 0.015259655, - -0.0031004148, - 0.015425521, - -0.026155762, - 0.0006566851, - -0.036311854, - 0.021090476, - -0.0022758704, - 0.014251701, - 0.01964872, - 0.010953523, - -0.014749299, - -0.003936123, - -0.012924775, - 0.008861062, - -0.018206963, - -0.013983764, - 0.008114666, - 0.006487905, - -0.009071584, - 0.00408923, - 0.018309034, - 0.018628007, - -0.0082358755, - -0.019916655, - 0.0028005803, - 0.029779293, - 0.016688652, - -0.0040190564, - -0.0060572918, - -0.021447726, - 0.005154599, - -0.018857667, - 0.0038691391, - -0.03610771, - -0.00048204753, - 0.0030764919, - -0.026819225, - 0.010207127, - 0.007929661, - -0.00993919, - 0.03541873, - 0.018155927, - -0.018832149, - 0.020835297, - -0.008350706, - 0.027278546, - 0.021639109, - -0.013690309, - 0.012994949, - -0.00561392, - -0.0009928026, - -0.01612726, - 0.01823248, - 0.027686832, - -0.020184593, - 0.044043753, - 0.0021546606, - 0.03146347, - 0.008121045, - -0.007585171, - -0.012337864, - 0.0032120552, - -0.021179788, - 0.02385916, - -0.0066218735, - -0.0123889, - 0.0015677509, - -0.008950374, - -0.015935877, - -0.00806363, - 0.0059775487, - 0.0021100044, - 0.006334798, - 0.0035852534, - -0.011655263, - 0.00012459872, - -0.0031689939, - 0.03192279, - 0.013026846, - 0.00584677, - -0.032662805, - 0.013001328, - 0.006851534, - -0.006328419, - -0.0069982614, - -0.008025354, - 0.0072534396, - -0.0038404316, - -0.006382644, - 0.00397121, - 0.020159075, - 0.0063379877, - -0.0091800345, - 0.011368188, - -0.017352115, - -0.0029536874, - 0.0058180625, - 0.0022838446, - 0.006615494, - 0.002877134, - -0.03005999, - -0.02607921, - -0.008695196, - -0.0024050542, - 0.010156091, - -0.0073937876, - 0.010589894, - -0.02689578, - -0.026257833, - 0.018538695, - 0.0010071563, - 0.0067048064, - -0.0077446573, - -0.0037319807, - -0.0076553454, - -0.032560736, - -0.0009026928, - 0.03610771, - 0.010328337, - 0.009849877, - -0.021243583, - -0.0222005, - -0.00068619003, - 0.07405271, - 0.026564049, - 0.0062486753, - 0.010928005, - 0.0201208, - -0.008631402, - -0.02162635, - 0.002784632, - -0.00736827, - -0.010698345, - 0.005645817, - 0.0008412905, - -0.00095053867, - 0.0067749806, - 0.013077881, - -0.012688735, - 0.008886579, - -0.00467614, - 0.025186086, - -0.026997851, - -0.008778129, - 0.029753774, - -0.014404808, - 0.0041083684, - 0.0029217901, - 0.005409777, - 0.017569017, - 0.0044018235, - 0.024139855, - -0.02046529, - 0.006813257, - 0.01986562, - -0.0031721836, - -0.01460895, - -0.011521295, - 0.0075596534, - -0.026487494, - -0.0058595287, - 0.008663299, - -0.027431654, - 0.029957918, - 0.010481443, - 0.009186414, - -0.009837119, - -0.01133629, - 0.011942338, - -0.010341096, - 0.03332627, - -0.017849714, - -0.017760402, - 0.025466781, - -0.0032535216, - -0.010105056, - -0.01273977, - 0.013843416, - 0.006889811, - -0.025772996, - 0.007789314, - -0.010328337, - -0.0054448643, - -0.0017384014, - -0.0036873247, - -0.009913672, - -0.00865054, - -0.010130573, - -0.008918477, - 0.0009274132, - -0.0038212931, - -0.0166121, - 0.015935877, - 0.008152942, - -0.012203896, - -0.01684176, - -0.0006196045, - 0.023233972, - 0.011010938, - 0.010245403, - -0.0068004983, - -0.008331567, - 0.0451155, - 0.0073108547, - -0.0146217095, - -0.0031402863, - 0.011010938, - -0.00013446693, - 0.000114032744, - 0.021230824, - -0.017135214, - -0.018283516, - 0.00034568668, - 0.041543007, - -0.0064145415, - 0.027278546, - -0.009862636, - -0.009798842, - -0.0028356675, - 0.014328254, - 0.0039425027, - -0.022417402, - -0.010232645, - 0.010583514, - -0.01894698, - -0.0021881529, - -0.025785754, - 0.0068387752, - 0.0042838035, - 0.012816324, - -0.012331485, - -0.027814422, - 0.007840349, - 0.021817734, - -0.01181475, - -0.0023300957, - -0.011884923, - -0.008038113, - 0.010781278, - 0.006111517, - 0.0122613115, - -0.0036777554, - -0.024841595, - 0.017033143, - -0.050091475, - 0.02817167, - -0.0004844398, - -0.007349131, - -0.014111353, - 0.0114575, - -0.013932728, - -0.003237573, - 0.026640601, - -0.008497433, - 0.01800282, - -0.022876723, - -0.013894452, - -0.05506745, - -0.02852892, - 0.02559437, - 0.01695659, - -0.015974153, - -0.010711104, - -0.00268894, - 0.015234137, - 0.0024927717, - -0.0012934344, - -0.04151749, - -0.019967692, - -0.0008779724, - 0.026513012, - -0.014672745, - 0.02653853, - -0.0072151627, - 0.020962887, - 0.0038595698, - 0.023170179, - 0.0008652135, - -0.0031307172, - -0.015604145, - -0.009684011, - 0.023540186, - 0.024190892, - 0.00080221635, - -0.00058132777, - 0.0008731878, - -0.0021100044, - -0.0114064645, - -0.0010079538, - -0.009052446, - -0.0025996277, - -0.019202158, - 0.011068353, - 0.03472975, - 0.0120699275, - 0.019457337, - -0.006685668, - 0.015744492, - 0.008982272, - 0.001835688, - -0.015744492, - -0.035010446, - -0.04560034, - 0.0024002697, - -0.0011004559, - -0.013996523, - -0.0011650479, - -0.0016195839, - 0.0027495448, - 0.018270757, - 0.0073810285, - 0.007987076, - 0.0063188495, - 0.033709038, - -0.0015087409, - 0.041211274, - -0.00993281, - -0.0022200502, - -0.0026713966, - -0.022430161, - -0.00062040193, - 0.013179952, - -0.005224773, - 0.014200665, - 0.0041083684, - 0.010711104, - -0.020018728, - 0.019495612, - 0.0092246905, - 0.024050543, - 0.0012065143, - -0.0007946408, - -0.009779704, - -0.02500746, - -0.032866947, - -0.038633976, - -0.028784098, - 0.009122619, - 0.00036422696, - -0.030544827, - 0.020095281, - 0.0076872422, - -0.03228004, - 0.0050206305, - 0.014634469, - 0.023233972, - -0.00935228, - 0.022698099, - 0.00794242, - -0.013269265, - -0.0023013882, - -0.0034193876, - -0.016548304, - 0.012912015, - 0.033658, - 0.017798677, - -0.009632976, - 0.0074767205, - 0.010889729, - 0.005987118, - 0.011859406, - -0.013230988, - -0.0113618085, - 0.010009364, - 0.008172081, - -0.020822538, - 0.012471833, - -0.0109790405, - 0.019508371, - -0.021128753, - -0.009837119, - -0.0003379117, - -0.02280017, - -0.0024289773, - 0.004232768, - -0.037970513, - 0.01017523, - 0.01834731, - 0.011310773, - -0.007144989, - 0.008337947, - -0.0026857504, - -0.0027208372, - -0.014060318, - 0.004771832, - -0.015412762, - 0.0023556135, - -0.00040210498, - 0.007751037, - -0.019036291, - -0.0042646653, - -0.00062319293, - 0.02596438, - -0.006921708, - -0.007087574, - -0.017211767, - 0.010124194, - 0.042640273, - -0.031999342, - -0.00024720386, - 0.0032917985, - -0.001263132, - -0.009792462, - 0.0028835135, - -0.0014282003, - -0.010928005, - 0.02643646, - -0.0122613115, - -0.011750955, - -0.016305884, - -0.016561063, - 0.0035501663, - -0.007342752, - -0.0038531905, - -0.016982108, - 0.011036456, - 0.013779622, - 0.002958472, - -0.002326906, - 0.015502074, - 0.0035246485, - -0.027482688, - 0.033045575, - -0.0155658685, - 0.005550125, - 0.00023105586, - 0.010953523, - -0.002489582, - 0.001163453, - 0.030008953, - -0.001133948, - -0.02058012, - -0.008446397, - 0.0047271755, - -0.0074639614, - -0.004969595, - -0.015323449, - -0.005409777, - -0.003987159, - 0.015489315, - -0.009575561, - -0.008376224, - -0.016216572, - -0.014876887, - -0.008344326, - 0.014927923, - -0.014774816, - -0.0068196366, - 0.018959738, - -0.003145071, - -0.00021112007, - -0.02139669, - -0.014098594, - -0.0109918, - 0.007846729, - 0.0026394993, - -0.019214917, - 0.0017750831, - -0.017990062, - 0.0008444803, - -0.0035501663, - 0.001239209, - 0.0083251875, - 0.007068435, - 0.014404808, - -0.022353608, - 0.023527427, - -0.007872246, - 0.0021466864, - -0.009447972, - -0.0022391884, - -0.026513012, - 0.0021291429, - -0.008567607, - 0.005272619, - 0.0060413433, - -0.027482688, - -0.026040932, - 0.012829083, - -0.012133722, - 0.008714335, - 0.0067622215, - -0.0047973497, - 0.01426446, - 0.0014744514, - -0.017415911, - 0.030136542, - -0.00958194, - 0.005527797, - -0.023578463, - 0.0021020302, - -0.010947144, - -0.019597683, - -0.009486249, - 0.02000597, - -0.0005761445, - -0.01800282, - 0.019304229, - -0.00421044, - -0.0014935897, - -0.01273977, - 0.003543787, - -0.0016618478, - 0.01614002, - 0.0033045574, - 0.027150957, - -0.0048420057, - 0.01098542, - -0.007725519, - 0.00044496695, - 0.007923283, - 0.022583269, - -0.008503812, - -0.006787739, - 0.012031651, - -0.01029006, - -0.011042835, - -0.028222706, - 0.023603981, - -0.012280449, - 0.013358577, - 0.019610442, - -0.016688652, - -0.00034867704, - 0.031284843, - -0.0077956934, - -0.016063467, - -0.018028338, - 0.0029871794, - -0.019954933, - -0.0069599845, - 0.0050652865, - -0.016382439, - 0.0039010362, - -0.025568852, - -0.007387408, - -0.031004148, - -0.0150937885, - -0.019355264, - 0.0049408874, - -0.026359905, - 0.023948472, - 0.028350295, - -0.02513505, - 0.0004641053, - -0.028350295, - -0.0022009118, - -0.011948718, - -0.007272578, - -0.007004641, - -0.041823704, - -0.026691636, - -0.010207127, - -0.007897764, - -0.02023563, - 0.0009561207, - -0.0025629457, - 0.0005761445, - 0.021077717, - 0.22863965, - -0.003027051, - -0.01684176, - 0.034780785, - -0.0035597356, - 0.023910195, - 0.034576643, - -0.0063411775, - 0.013498926, - 0.042283025, - -0.008286911, - 0.0077318987, - 0.0002669403, - 0.0004170568, - 0.022136707, - -0.025887826, - -0.015400003, - -0.020133559, - -0.013384095, - -0.010232645, - 0.02047805, - -0.0155658685, - 0.0093459, - 0.008121045, - 0.03998642, - 0.0021514709, - -0.01731384, - 0.0073746494, - 0.019112846, - 0.0038372418, - -0.004596397, - -0.0026985093, - 0.0013811518, - -0.012050789, - -0.01449412, - 0.012988569, - 0.0062997113, - 0.012535628, - 0.026742673, - 0.037587743, - 0.004950457, - 0.016701411, - -0.022710858, - -0.005288568, - -0.008146564, - 0.016790723, - -0.02047805, - 0.010219886, - 0.02280017, - 0.004736745, - -0.015502074, - 0.005237532, - 0.01906181, - 0.017288322, - -0.0027511397, - 0.021639109, - 0.033377305, - -0.0026921297, - 0.021013923, - -0.019686997, - -0.00854209, - 0.017505223, - -0.019087328, - 0.008790888, - 0.0015860918, - -0.016395198, - -0.0070939534, - -0.0053204647, - 0.016854519, - -0.009033307, - 0.015055512, - 0.010526099, - 0.01939354, - 0.01591036, - -0.0077191396, - -0.013907211, - 0.031131737, - 0.002465659, - 0.023208454, - -0.0009760565, - -0.008459156, - -0.0020717278, - -0.022838447, - 0.0016586581, - -0.0049153697, - -0.024714006, - 0.015068271, - 0.0038755185, - 0.02232809, - -0.015144825, - 0.0015701432, - -0.002932954, - 0.011253358, - -0.012841841, - 0.020184593, - 0.025415746, - -0.009243829, - 0.021664627, - -0.02606645, - 0.012401659, - -0.031642094, - -0.02666612, - 0.0072917165, - -0.016510028, - -0.0077829342, - 0.008797267, - 0.002583679, - 0.011266116, - 0.020950127, - 0.008267772, - -0.015718976, - -0.0018931031, - 0.010258162, - -0.017517982, - 0.02000597, - -0.005926513, - 0.0046857093, - -0.019699754, - -0.004889852, - -0.021115994, - -0.012969431, - -0.027559243, - -0.0075022383, - 0.008121045, - -0.008733473, - -0.002759114, - 0.0062486753, - 0.008790888, - 0.001432985, - -0.05014251, - 0.017122455, - 0.0058850464, - 0.023680534, - -0.011093871, - -0.011757335, - 0.0043220804, - -0.011010938, - 0.008937616, - -0.0033268854, - 0.0071577476, - -0.01261856, - -0.017517982, - 0.017747642, - -0.016803483, - 0.0027160526, - -0.003145071, - 0.000113434675, - -0.020439772, - -0.032075897, - -0.031080702, - -0.008484675, - -0.023655016, - 0.00093618495, - -0.015948636, - 0.02980481, - 0.0025198844, - -0.018245239, - -0.016561063, - -0.0075724125, - 0.029447561, - -0.005285378, - 0.017096937, - 0.024012266, - -0.022659821, - -0.0077829342, - -0.008229496, - -0.16259953, - 0.030391721, - 0.0077574165, - -0.004175353, - -0.0028324777, - 0.0018580161, - 0.021115994, - 0.020962887, - -0.009626596, - 0.02630887, - 0.0032822292, - 0.0027383808, - -0.037944995, - -0.012675975, - -0.00421044, - 0.021575315, - -0.010609033, - -0.0030493792, - 0.015680699, - 0.0069153286, - 0.012490972, - -0.027967528, - 0.012656838, - 0.013460648, - 0.009830739, - 0.007189645, - -0.016216572, - 0.035827015, - -0.0020812969, - -0.009275727, - -0.004979164, - 0.0016793914, - 0.017403152, - 0.02197084, - 0.011597848, - 0.011546812, - -0.0031418812, - 0.0033619725, - -0.0032694703, - -0.00032794382, - 0.0027973908, - 0.02280017, - -0.008778129, - 0.008637781, - -0.0053045163, - 0.013779622, - 0.035699427, - 0.013460648, - 0.006369885, - -0.006417731, - 0.0036299096, - -0.042844415, - -0.018615248, - -0.013843416, - 0.020860815, - 0.022761893, - 0.030595863, - 0.009754186, - -0.017926266, - 0.01566794, - 0.010781278, - -0.036643587, - -0.010022122, - 0.020707708, - -0.0060381535, - -0.018015578, - 0.014787575, - 0.0006758234, - 0.0012431962, - 0.0020892713, - -0.019776309, - -0.009971087, - 0.003936123, - -0.03271384, - 0.010857832, - 0.012108204, - 0.004350788, - -0.008465536, - -0.009058825, - -0.012018892, - -0.004274234, - 0.026232317, - -0.011712678, - -0.0012567525, - -0.007961559, - 0.018257998, - -0.0051801167, - -0.007272578, - -0.026040932, - -0.0203377, - 0.025619889, - -0.05014251, - -0.002853211, - -0.0380981, - 0.011942338, - 0.018360069, - 0.0024337617, - -0.0046123452, - 0.0059934976, - -0.0042614755, - 0.016471751, - -0.005409777, - -0.016561063, - 0.011916821, - 0.015795529, - 0.01742867, - -0.009358659, - 0.0012942317, - 0.02983033, - 0.009294865, - -0.0057415087, - 0.027993046, - 0.006242296, - 0.025734719, - 0.011534054, - 0.00573194, - -0.00025816855, - -0.028375814, - -0.0009912077, - -0.0070748148, - 0.04223199, - -0.001730427, - -0.005553315, - 0.013409613, - -0.004184922, - -0.0017734884, - -0.106562406, - 0.00072047964, - 0.017147973, - 0.015387244, - -0.0018851288, - 0.006864293, - -0.007751037, - 0.01649727, - 0.012076307, - 0.030213095, - -0.0033109367, - -0.017722124, - -0.014774816, - -0.0019265952, - 0.00088195957, - -0.010781278, - 0.0055437456, - -0.032305557, - -0.030340685, - 0.0031753734, - -0.012254932, - -0.0057255602, - 0.004749504, - -0.024471587, - -0.006806878, - 0.0072661983, - -0.033504896, - 0.016433474, - 0.009071584, - -0.0028564006, - 0.010768519, - -0.009550043, - 0.022506716, - -0.008676058, - -0.015336208, - -0.0077701756, - -0.014978959, - -0.01612726, - 0.007936041, - -0.024446068, - -0.003993538, - 0.002944118, - 0.0012208681, - -0.024076061, - -0.016905554, - 0.010487823, - 0.0017080989, - 0.0064591975, - -0.0016889606, - -0.021639109, - 0.0057415087, - 0.024178132, - -0.011132148, - -0.0063411775, - 0.03998642, - -0.0060732407, - 0.008822786, - 0.0166121, - -0.01648451, - -0.00081098813, - -0.006583597, - 0.023131901, - -0.013613756, - 0.034117322, - -0.01707142, - -0.01273977, - -0.037358083, - 0.009671253, - 0.018551454, - -0.021792216, - 0.00596479, - 0.022659821, - -0.017862473, - 0.02010804, - -0.008261394, - 0.004864334, - -0.019457337, - -0.024535382, - 0.015361726, - -0.027916493, - -0.032229003, - -0.031157255, - 0.009428834, - -0.02232809, - -0.0071960245, - 0.02583679, - -0.0039680204, - -0.011955097, - 0.027814422, - -0.0026490684, - 0.0074767205, - 0.04243613, - 0.0074639614, - -0.036337372, - -0.016344162, - 0.025875067, - -0.0011554786, - -0.013192711, - -0.008082769, - -0.014417566, - -0.021753939, - -0.005834011, - -0.036975317, - 0.02374433, - -0.029013759, - -0.026206799, - 0.007087574, - 0.012427177, - 0.0014951846, - -0.009722289, - -0.019508371, - -0.0066920477, - -0.026844744, - 0.008210357, - -0.010379372, - -0.017977303, - -0.017326597, - -0.0006826016, - 0.021945324, - -0.0025788944, - 0.01834731, - -0.00036103724, - 0.0057191807, - 0.0064719566, - 0.015693458, - 0.0021530658, - -0.03376007, - 0.012484592, - -0.032203484, - -0.01110663, - -0.023591222, - 0.000672235, - 0.014200665, - -0.012727011, - 0.021473244, - 0.029677222, - -0.020988405, - -0.022417402, - -0.010883349, - 0.02676819, - 0.0114064645, - -0.01718625, - -0.022532232, - -0.026091969, - 0.014532397, - -0.0166121, - -0.016854519, - 0.020439772, - 0.0005538164, - -0.0059679793, - 0.007189645, - -0.0019393541, - 0.008459156, - 0.023425356, - 0.027661314, - -0.014455844, - -0.0040031075, - -0.0018532315, - 0.022991553, - 0.021128753, - -0.007846729, - -0.00970315, - 0.006347557, - -0.0065293717, - 0.011298014, - 0.021026682, - -0.0029393337, - 0.0072343014, - -0.009805221, - 0.0060828095, - 0.010640929, - -0.03133588, - -0.010832313, - -0.008682437, - 0.033402823, - 0.0012272475, - 0.02983033, - 0.0012184758, - -0.004548551, - -0.008006215, - -0.009741426, - 0.0194063, - 0.009645735, - -0.00017573404, - -0.019942174, - 0.00036043918, - 0.025913343, - 0.025772996, - -0.035852533, - -0.019495612, - 0.016152779, - -0.0044018235, - -0.023170179, - 0.013766862, - -0.011036456, - 0.014328254, - 0.0028245035, - 0.0015438279, - 0.008095528, - -0.0057478882, - -0.0036905142, - 0.039654687, - 0.0006219968, - -0.0041211275, - -0.012108204, - -0.02036322, - -0.019610442, - 0.00041466454, - -0.018972497, - -0.009505387, - -0.010379372, - 0.00020892713, - -0.010921625, - 0.0041434555, - -0.009569181, - 0.024611935, - -0.011374567, - 0.0071832654, - -0.04360995, - -0.016510028, - -0.022915, - 0.014711021, - 0.0017846524, - 0.00537469, - 0.008057251, - -0.004452859, - 0.025032979, - 0.017466946, - 0.03176968, - -0.011738196, - -0.0053140856, - 0.024573658, - 0.0063156597, - -0.015208619, - 0.015042753, - -0.020427013, - -0.02161359, - -0.00807001, - -0.015718976, - 0.028860651, - -0.00019287881, - 0.04779487, - -0.0029010568, - -0.018398346, - 0.029294454, - -0.0052758087, - -0.00022527447, - 0.0074193054, - 0.012886498, - -0.012561145, - -0.011789232, - -0.0130140865, - -0.0012248552, - 0.025734719, - -0.0016921503, - -0.009849877, - -0.000100326884, - -0.032637287, - 0.03330075, - -0.03962917, - -0.011795611, - 0.009715909, - 0.004979164, - 0.024714006, - 0.009039687, - -0.016433474, - -0.0004090825, - 0.010430408, - 0.015706217, - -0.01916388, - -0.008248635, - 0.013983764, - -0.011317152, - -0.037204977, - -0.009664874, - 0.00783397, - -0.027814422, - -0.014978959, - -0.026461976, - -0.001298219, - 0.014098594, - 0.012216655, - 0.010545238, - -0.029090311, - -0.03296902, - -0.0073555107, - -0.0043794955, - -0.02373157, - -0.0035469767, - -0.022034636 + 0.006868671, + -0.005114832, + -0.0014453228, + -0.01894146, + -0.0009566394, + 0.019796059, + -0.027321622, + -0.020331776, + 0.010363594, + -0.009776855, + 0.0014493087, + 0.009668436, + -0.0074171443, + 0.008392916, + -0.017372573, + -0.0047576865, + 0.030357357, + 0.021938931, + 0.024796093, + -0.0060714716, + -0.031377774, + 0.013520503, + 0.0034949228, + 0.0038935225, + -0.020752698, + 0.00006497176, + 0.013941425, + -0.015790928, + 0.016785832, + 0.0129784085, + 0.022079239, + -0.011664623, + 0.007468165, + -0.036071684, + -0.02051035, + 0.0104528805, + 0.0019148733, + -0.005797235, + 0.018660847, + -0.012672284, + 0.0058355005, + 0.0063201976, + 0.0041007944, + 0.000064324035, + -0.008590622, + 0.016058788, + 0.017806249, + 0.0016836853, + -0.012933765, + 0.008826593, + 0.009190116, + 0.03048491, + -0.032959417, + -0.0052934047, + -0.00075255637, + -0.02719407, + -0.01589297, + 0.022653222, + -0.022091992, + -0.02061239, + -0.002448997, + -0.010025581, + -0.00020358483, + -0.01690063, + 0.0022034594, + -0.0035013002, + -0.021364948, + 0.0033131612, + -0.0030453021, + 0.005006413, + 0.024821604, + 0.03446453, + 0.002297529, + 0.006431806, + 0.040714573, + 0.0072768372, + 0.0016597694, + 0.023941496, + -0.01212381, + -0.0018431253, + -0.002724828, + -0.018469518, + -0.011651868, + -0.011824063, + 0.02658182, + 0.0041805143, + -0.0021014179, + 0.01029344, + -0.0021540332, + -0.018852174, + -0.004215591, + 0.026785905, + 0.027449174, + 0.0045791143, + -0.0018510973, + 0.021722093, + 0.022512915, + 0.015714398, + 0.03178594, + -0.032398187, + 0.005338048, + 0.03127573, + -0.034260448, + 0.006505148, + -0.033010438, + -0.021033311, + 0.0036894393, + -0.010446503, + 0.021862399, + -0.017181244, + -0.015561335, + 0.021109844, + 0.0373472, + -0.013762852, + -0.012506466, + -0.02318894, + 0.03530637, + -0.007927352, + -0.010395481, + -0.011951615, + -0.00053930545, + 0.046046246, + 0.022640467, + -0.040791105, + 0.026760394, + 0.0011989881, + -0.009477108, + -0.026811413, + 0.0031696653, + 0.007104642, + 0.005067, + 0.016288381, + 0.00695158, + 0.02024249, + -0.011135283, + -0.004014697, + -0.03199002, + 0.018686356, + 0.004945826, + -0.018635336, + 0.012825346, + 0.031377774, + -0.017308796, + -0.009668436, + -0.008494958, + 0.031913493, + 0.022423629, + -0.010350838, + -0.012908255, + -0.002881079, + 0.0034853562, + -0.008909502, + 0.0031537213, + 0.0024904513, + 0.00944522, + 0.0039541097, + -0.0018654469, + 0.004454751, + -0.032755334, + -0.0014859799, + -0.018188905, + 0.014081732, + 0.03308697, + -0.0028842678, + 0.038010474, + 0.018507784, + 0.0028954286, + -0.003252574, + -0.002217809, + -0.0074745426, + -0.006125681, + 0.041275803, + -0.013584279, + 0.012225851, + 0.00880746, + 0.008794705, + 0.0025701711, + 0.002401165, + -0.017347062, + -0.008877614, + -0.026556311, + -0.0025127728, + 0.011384009, + -0.0018813908, + 0.007391634, + -0.00504149, + 0.014617451, + -0.0060140733, + 0.005382691, + -0.015790928, + 0.030357357, + 0.010287062, + 0.0035618874, + -0.028418569, + -0.6865355, + -0.036811486, + 0.018852174, + 0.0051275874, + 0.018456763, + 0.031505324, + 0.010554922, + 0.023571596, + 0.0046779667, + -0.010344461, + 0.010242419, + 0.011039619, + 0.016301136, + -0.009355933, + -0.009037054, + -0.015306231, + -0.008839348, + 0.001682091, + 0.011773042, + 0.007053621, + 0.0009598282, + 0.0090944525, + -0.019515444, + 0.0056409836, + 0.020739943, + -0.002053586, + 0.0067921397, + 0.004330388, + -0.010650585, + 0.0031919868, + -0.02051035, + 0.010414614, + -0.028801223, + -0.009387822, + 0.046684004, + 0.0048565394, + -0.00541139, + 0.017155733, + 0.008105924, + 0.012640395, + -0.0029018063, + 0.0041422485, + 0.013482238, + -0.027576726, + -0.012270495, + 0.019681262, + 0.005035112, + 0.010274308, + 0.021160863, + 0.00012944527, + 0.023507819, + -0.00565055, + 0.024005271, + 0.006868671, + 0.023507819, + 0.00048669032, + 0.031403285, + -0.0006281932, + -0.003759593, + 0.0052360063, + -0.00068718597, + 0.006881426, + -0.026887946, + -0.0226022, + -0.022653222, + 0.01321438, + -0.02719407, + -0.029719599, + -0.008507714, + 0.0037978585, + -0.0015370006, + 0.0143368365, + -0.008654398, + 0.015943991, + 0.022768019, + -0.0027391776, + 0.02053586, + 0.007008978, + 0.0022879627, + 0.0080804145, + -0.0011128905, + -0.02215577, + -0.0060045067, + -0.00022819836, + 0.031709407, + -0.03324003, + -0.03053593, + -0.028622651, + 0.015905725, + -0.017347062, + 0.0351278, + 0.023035876, + -0.016798588, + -0.006747497, + -0.0072066835, + 0.014681227, + 0.0089669, + 0.007863576, + 0.005302971, + -0.010414614, + 0.010057469, + -0.005574019, + -0.0011304289, + 0.010338083, + 0.01798482, + -0.00018833838, + -0.022079239, + 0.026352227, + 0.014017956, + 0.0038425017, + 0.026683861, + -0.010287062, + -0.011664623, + 0.018775644, + 0.008775572, + -0.025676202, + 0.038316596, + 0.0013560364, + 0.011581714, + -0.00926027, + 0.014413367, + 0.023074143, + -0.0057111373, + -0.00073222775, + 0.0015314203, + -0.0012555892, + -0.011639113, + -0.009253892, + -0.037500266, + -0.0027487439, + 0.003443902, + 0.0011862329, + 0.016071543, + 0.005586774, + 0.0073661236, + -0.004292122, + 0.005685627, + -0.014974596, + 0.022487404, + -0.016479708, + -0.01491082, + -0.006170324, + -0.01321438, + 0.0050191684, + -0.0012173237, + -0.01913279, + -0.04326561, + -0.0072704596, + -0.012538354, + 0.018711867, + -0.016326645, + -0.009847009, + -0.02918388, + 0.0143368365, + 0.016632771, + 0.00010742264, + -0.022729753, + -0.010338083, + 0.0010435341, + 0.015191434, + 0.014579184, + -0.007659493, + -0.012047279, + -0.0031186445, + -0.00894139, + -0.033571664, + -0.006919692, + 0.02650529, + -0.009011543, + -0.016097052, + 0.0017187622, + -0.012659528, + -0.01658175, + -0.013341931, + -0.018061353, + -0.016913384, + -0.024579255, + -0.025421098, + -0.00076571014, + -0.01825268, + 0.002225781, + 0.025561405, + 0.010070224, + -0.020841984, + 0.047525845, + -0.019668506, + 0.012659528, + 0.025969572, + -0.012544732, + 0.015331741, + -0.0019356004, + -0.011613603, + -0.018137883, + -0.0020312644, + 0.020778209, + 0.008450315, + 0.0028061422, + 0.008603377, + 0.012308761, + -0.012034524, + 0.015242455, + -0.0031409662, + 0.015408272, + -0.026148144, + 0.0006250044, + -0.036301278, + 0.021084333, + -0.002337389, + 0.01422204, + 0.019655751, + 0.010880179, + -0.014783268, + -0.0039285994, + -0.012940142, + 0.008871236, + -0.018214414, + -0.013992446, + 0.008112302, + 0.006505148, + -0.009107207, + 0.004091228, + 0.018341966, + 0.018609826, + -0.008233476, + -0.019872589, + 0.0027870096, + 0.029770618, + 0.016658282, + -0.004008319, + -0.005991752, + -0.021428723, + 0.005178608, + -0.01886493, + 0.003852068, + -0.036148217, + -0.0004815085, + 0.0030453021, + -0.026760394, + 0.010261552, + 0.0079082195, + -0.0099362945, + 0.035408415, + 0.018150639, + -0.018775644, + 0.020829229, + -0.0082972525, + 0.027245091, + 0.021709338, + -0.013724587, + 0.012972031, + -0.005618662, + -0.0009725834, + -0.016122563, + 0.01825268, + 0.027653256, + -0.02016596, + 0.044056434, + 0.0021205507, + 0.031454302, + 0.008125057, + -0.0075383186, + -0.012359781, + 0.0031792317, + -0.021237396, + 0.023788434, + -0.0066837207, + -0.012372537, + 0.0015808466, + -0.008973278, + -0.01599501, + -0.008086792, + 0.0059758076, + 0.0020886627, + 0.0063106315, + 0.0035714537, + -0.01159447, + 0.000062032086, + -0.0031776372, + 0.031887982, + 0.013035807, + 0.005845067, + -0.032704312, + 0.012965653, + 0.0068304054, + -0.0063393307, + -0.006983468, + -0.007952862, + 0.0073342356, + -0.0038775785, + -0.0063393307, + 0.0039572986, + 0.020178715, + 0.0063425195, + -0.009183738, + 0.011371254, + -0.017385326, + -0.0029512327, + 0.005746214, + 0.0022991234, + 0.0066709653, + 0.0028874567, + -0.030025722, + -0.026084369, + -0.008705419, + -0.0023517385, + 0.010121245, + -0.0073788785, + 0.010599565, + -0.026887946, + -0.026275696, + 0.018469518, + 0.001002877, + 0.0066837207, + -0.0077168914, + -0.0037245161, + -0.0076658707, + -0.032576762, + -0.000911199, + 0.036122706, + 0.0103891045, + 0.0098725185, + -0.021186374, + -0.02218128, + -0.00062380865, + 0.073980115, + 0.0265308, + 0.0063265753, + 0.010867423, + 0.02016596, + -0.008692663, + -0.021709338, + 0.0028460023, + -0.007391634, + -0.010701606, + 0.005589963, + 0.00090242986, + -0.00088249985, + 0.006779385, + 0.0130421845, + -0.012697794, + 0.0089669, + -0.004690722, + 0.02520426, + -0.026964476, + -0.008730929, + 0.029719599, + -0.014375102, + 0.0041326825, + 0.0029097782, + 0.0053890687, + 0.017602166, + 0.0043814084, + 0.024183845, + -0.020497594, + 0.006773007, + 0.019808814, + -0.0031409662, + -0.014668471, + -0.011466918, + 0.0075829616, + -0.02650529, + -0.005765347, + 0.008705419, + -0.027423663, + 0.02989817, + 0.01047839, + 0.00912634, + -0.009802366, + -0.011313856, + 0.011945237, + -0.010376349, + 0.033316564, + -0.01783176, + -0.017780738, + 0.02549763, + -0.0032430077, + -0.010140378, + -0.012799836, + 0.013826628, + 0.0068559158, + -0.025790999, + 0.0077998, + -0.010325328, + -0.0053986353, + -0.0016900629, + -0.0037149498, + -0.009898029, + -0.008673531, + -0.010159511, + -0.008960523, + 0.0009263458, + -0.0037882922, + -0.016568994, + 0.01591848, + 0.0080804145, + -0.012168453, + -0.016913384, + -0.00061902544, + 0.02321445, + 0.011001353, + 0.010261552, + -0.006728364, + -0.0083610285, + 0.04510236, + 0.007315103, + -0.014745003, + -0.003101106, + 0.011020486, + -0.00013691901, + 0.000087542474, + 0.02119913, + -0.017066447, + -0.01822717, + 0.00038923268, + 0.041581925, + -0.006431806, + 0.027245091, + -0.009847009, + -0.009776855, + -0.002804548, + 0.014285815, + 0.0038967112, + -0.022423629, + -0.010280685, + 0.010586809, + -0.018877685, + -0.002181138, + -0.025765488, + 0.006811273, + 0.004327199, + 0.012825346, + -0.012327894, + -0.02783183, + 0.007844443, + 0.021862399, + -0.011817685, + -0.0023740602, + -0.0119643705, + -0.008048526, + 0.010682474, + 0.0061224923, + 0.01228325, + -0.0036894393, + -0.024745073, + 0.017066447, + -0.050076883, + 0.028188976, + -0.00046994913, + -0.0072768372, + -0.014081732, + 0.01146054, + -0.013877649, + -0.003268518, + 0.026683861, + -0.008494958, + 0.0179338, + -0.02287006, + -0.013915915, + -0.05505141, + -0.02852061, + 0.025637936, + 0.017002672, + -0.015982255, + -0.010695228, + -0.0026482968, + 0.015178679, + 0.002504801, + -0.0012810996, + -0.041479886, + -0.019961877, + -0.0008179267, + 0.02650529, + -0.014655716, + 0.02650529, + -0.007219439, + 0.021033311, + 0.0038169913, + 0.023099653, + 0.0008434371, + -0.0031298052, + -0.015637865, + -0.009719457, + 0.023520574, + 0.024132824, + 0.0008243043, + -0.0006098576, + 0.0008769195, + -0.0020631524, + -0.011390387, + -0.0009446814, + -0.009030676, + -0.0026036536, + -0.019196564, + 0.011065129, + 0.034668613, + 0.012111055, + 0.019426158, + -0.0066900984, + 0.015765417, + 0.008973278, + 0.0018431253, + -0.015765417, + -0.035025757, + -0.045536038, + 0.0023724658, + -0.0010762194, + -0.013992446, + -0.0011407925, + -0.001626287, + 0.002793387, + 0.018239925, + 0.007391634, + 0.007920975, + 0.006297876, + 0.033673707, + -0.0014827912, + 0.041250292, + -0.010019204, + -0.0022050538, + -0.002672213, + -0.022372607, + -0.0006509134, + 0.013163358, + -0.0052360063, + 0.014234794, + 0.0041263048, + 0.0106697185, + -0.020076673, + 0.019489935, + 0.009241137, + 0.024069048, + 0.0011790581, + -0.0008099547, + -0.009783233, + -0.025012933, + -0.032806356, + -0.038648233, + -0.028826734, + 0.009100829, + 0.00036073278, + -0.030561442, + 0.020076673, + 0.007659493, + -0.032194104, + 0.005009602, + 0.014668471, + 0.02326547, + -0.009406954, + 0.022653222, + 0.007901842, + -0.013201624, + -0.0022927457, + -0.0034375244, + -0.016517974, + 0.012869989, + 0.033648197, + 0.01783176, + -0.009623793, + 0.0075128083, + 0.010912067, + 0.0060108844, + 0.0118559515, + -0.013188869, + -0.011345743, + 0.009961805, + 0.008144191, + -0.020893006, + 0.012487333, + -0.010988598, + 0.019489935, + -0.021148108, + -0.0098725185, + -0.0003443902, + -0.022742508, + -0.0024745073, + 0.0042347237, + -0.037933942, + 0.010216909, + 0.018354721, + 0.011256457, + -0.0071939286, + 0.008431182, + -0.002705695, + -0.0028141143, + -0.013992446, + 0.004805519, + -0.015446538, + 0.0023118786, + -0.00040497736, + 0.007755157, + -0.019081768, + -0.004263423, + -0.00060826325, + 0.025995081, + -0.0069388244, + -0.0070344885, + -0.01724502, + 0.01010849, + 0.042653363, + -0.03196451, + -0.00028141143, + 0.0033354827, + -0.0013042184, + -0.009770477, + 0.0028619464, + -0.0014341619, + -0.0109503325, + 0.026479779, + -0.01228325, + -0.011753909, + -0.016275626, + -0.016543485, + 0.0035714537, + -0.0073023476, + -0.0038138025, + -0.01702818, + 0.011045996, + 0.013775608, + 0.003000659, + -0.0023246338, + 0.015510314, + 0.0034949228, + -0.027474685, + 0.03303595, + -0.015523069, + 0.005586774, + 0.00025012135, + 0.010912067, + -0.0024474026, + 0.0011288346, + 0.029949192, + -0.0010969465, + -0.02056137, + -0.008418427, + 0.004703477, + -0.0074745426, + -0.004942637, + -0.015370007, + -0.005417768, + -0.00397962, + 0.015535824, + -0.009566395, + -0.008341895, + -0.016211849, + -0.014885309, + -0.008329141, + 0.014961841, + -0.0148342885, + -0.0067857625, + 0.01894146, + -0.0031537213, + -0.00018235939, + -0.021415967, + -0.014107242, + -0.011020486, + 0.007901842, + 0.0026865625, + -0.019222075, + 0.0017745661, + -0.017997576, + 0.0008031785, + -0.0034534682, + 0.0012611697, + 0.008265365, + 0.007072754, + 0.014362346, + -0.022347096, + 0.023507819, + -0.007838066, + 0.0021349003, + -0.009457975, + -0.0022895571, + -0.02650529, + 0.0021380892, + -0.008552357, + 0.0052551394, + 0.0060682828, + -0.027551215, + -0.026058858, + 0.012844479, + -0.0121365655, + 0.0087500615, + 0.0067347414, + -0.0048087076, + 0.01424755, + 0.0014230012, + -0.017359817, + 0.030178785, + -0.0095919045, + 0.0055357534, + -0.023584351, + 0.002146061, + -0.010918445, + -0.01955371, + -0.009477108, + 0.020000141, + -0.0004902777, + -0.018010331, + 0.019273095, + -0.0042442903, + -0.0014859799, + -0.012697794, + 0.0035140554, + -0.0016932518, + 0.016109807, + 0.0032908395, + 0.027092028, + -0.0048597283, + 0.010912067, + -0.0077168914, + 0.00039501235, + 0.007952862, + 0.0226022, + -0.008520468, + -0.0067921397, + 0.012040902, + -0.010318951, + -0.01109064, + -0.028239995, + 0.023622615, + -0.012315138, + 0.013380197, + 0.019617485, + -0.016734812, + -0.00037986558, + 0.03125022, + -0.0078061777, + -0.016033277, + -0.018010331, + 0.0029671765, + -0.020038407, + -0.006919692, + 0.005035112, + -0.016364912, + 0.0038743897, + -0.025561405, + -0.0073788785, + -0.030995118, + -0.015102148, + -0.019349627, + 0.004897994, + -0.026352227, + 0.02397976, + 0.028342037, + -0.025140485, + 0.00045320793, + -0.028316528, + -0.0022736131, + -0.011932482, + -0.0072768372, + -0.0070344885, + -0.04186254, + -0.026734883, + -0.010159511, + -0.007882709, + -0.020255245, + 0.00096939463, + -0.0025558216, + 0.00058992766, + 0.021148108, + 0.22857304, + -0.0031298052, + -0.016862364, + 0.034770653, + -0.0035618874, + 0.02387772, + 0.03456657, + -0.0063106315, + 0.013533259, + 0.042296216, + -0.008310008, + 0.0077615343, + 0.00030014562, + 0.00043806114, + 0.022130258, + -0.02589304, + -0.015421027, + -0.020114938, + -0.013316421, + -0.010248797, + 0.020433819, + -0.015586845, + 0.00928578, + 0.008067659, + 0.03997477, + 0.002058369, + -0.017308796, + 0.0074043893, + 0.01913279, + 0.0038425017, + -0.004591869, + -0.0027343943, + 0.0013329176, + -0.012015391, + -0.014489898, + 0.01294652, + 0.00636803, + 0.012557487, + 0.026709372, + 0.037576795, + 0.0048852386, + 0.016734812, + -0.022716997, + -0.00530616, + -0.008246232, + 0.016824098, + -0.020459328, + 0.010216909, + 0.022806283, + 0.00472261, + -0.0154592935, + 0.0052487617, + 0.019107278, + 0.01727053, + -0.002700912, + 0.02164556, + 0.033393092, + -0.0027184503, + 0.021007802, + -0.019668506, + -0.008501336, + 0.017500123, + -0.019107278, + 0.00880746, + 0.0015808466, + -0.016364912, + -0.007059999, + -0.005338048, + 0.016824098, + -0.008998788, + 0.015012861, + 0.010548544, + 0.019451668, + 0.0159695, + -0.007755157, + -0.01395418, + 0.031097159, + 0.002433053, + 0.02323996, + -0.0010124433, + -0.008386539, + -0.0020950404, + -0.022780774, + 0.0016549862, + -0.0049490146, + -0.024643032, + 0.015025617, + 0.0038456905, + 0.022283321, + -0.015165923, + 0.0015593222, + -0.0029735542, + 0.011205437, + -0.012863612, + 0.020178715, + 0.025446609, + -0.009234759, + 0.021632805, + -0.026071614, + 0.012340648, + -0.03165839, + -0.026632842, + 0.0072768372, + -0.016466953, + -0.007787045, + 0.008839348, + 0.002525528, + 0.011224569, + 0.020905761, + 0.008271743, + -0.015714398, + -0.0018463141, + 0.010312573, + -0.017500123, + 0.020038407, + -0.005905654, + 0.00472261, + -0.019694017, + -0.004869295, + -0.021071577, + -0.01292101, + -0.027602237, + -0.0075128083, + 0.008086792, + -0.008673531, + -0.0028109255, + 0.006205401, + 0.00880746, + 0.0014652527, + -0.050102394, + 0.017155733, + 0.0059120315, + 0.023686392, + -0.011109772, + -0.011741155, + 0.004343143, + -0.010994975, + 0.008935012, + -0.003284462, + 0.007155663, + -0.012595752, + -0.017500123, + 0.017729716, + -0.016811343, + 0.0027072895, + -0.003164882, + 0.00008684492, + -0.020446572, + -0.032041043, + -0.031046137, + -0.008418427, + -0.023673637, + 0.0009072131, + -0.015943991, + 0.02982164, + 0.0024840736, + -0.018239925, + -0.016568994, + -0.007563829, + 0.029438984, + -0.005309349, + 0.017117469, + 0.023992516, + -0.022678731, + -0.0077487794, + -0.008227099, + -0.16255218, + 0.030459398, + 0.007767912, + -0.0041454374, + -0.0028794846, + 0.0018766077, + 0.021071577, + 0.020995047, + -0.00963017, + 0.026275696, + 0.003284462, + 0.002740772, + -0.037933942, + -0.012710549, + -0.00421878, + 0.02156903, + -0.010625076, + -0.003048491, + 0.015676131, + 0.006932447, + 0.012563865, + -0.027984891, + 0.012640395, + 0.013482238, + 0.009802366, + 0.007251327, + -0.016250115, + 0.03584209, + -0.002053586, + -0.009247514, + -0.004971336, + 0.0017028182, + 0.017372573, + 0.021964442, + 0.011607225, + 0.011575337, + -0.003128211, + 0.0033673707, + -0.0032605461, + -0.0003272504, + 0.0027870096, + 0.022768019, + -0.008762817, + 0.008635265, + -0.0052519506, + 0.013762852, + 0.03566352, + 0.013456728, + 0.006380785, + -0.006428617, + 0.0036894393, + -0.042780913, + -0.01862258, + -0.013864894, + 0.020867495, + 0.022780774, + 0.03058695, + 0.0097640995, + -0.0179338, + 0.015701642, + 0.010790893, + -0.03655638, + -0.010019204, + 0.020688921, + -0.006030017, + -0.017997576, + 0.014796023, + 0.000645333, + 0.001262764, + 0.0020806908, + -0.019745037, + -0.009968183, + 0.004014697, + -0.032729823, + 0.010880179, + 0.012149321, + 0.004330388, + -0.0084694475, + -0.009075319, + -0.011970748, + -0.0042761783, + 0.026173655, + -0.0117475325, + -0.0012492116, + -0.007927352, + 0.018239925, + -0.005175419, + -0.007283215, + -0.026084369, + -0.020357287, + 0.02562518, + -0.050051376, + -0.0028460023, + -0.038061492, + 0.0119643705, + 0.018316457, + 0.00245378, + -0.004595058, + 0.0060045067, + -0.0042857444, + 0.016517974, + -0.005449656, + -0.01658175, + 0.011881461, + 0.015727151, + 0.017372573, + -0.009394199, + 0.0012763165, + 0.029745108, + 0.009273025, + -0.0057749134, + 0.027984891, + 0.006202212, + 0.025739977, + 0.011511561, + 0.005762158, + -0.00026506884, + -0.028367547, + -0.00096620584, + -0.0070982645, + 0.042245198, + -0.0016868742, + -0.005513432, + 0.013494994, + -0.004196458, + -0.0017586221, + -0.10663341, + 0.00070592016, + 0.017194, + 0.015370007, + -0.0019005237, + 0.006836783, + -0.007723269, + 0.016441442, + 0.0120983, + 0.030306337, + -0.003332294, + -0.017755227, + -0.014796023, + -0.0019722716, + 0.0008960523, + -0.0106697185, + 0.005551697, + -0.032296147, + -0.03043389, + 0.003199959, + -0.012225851, + -0.005717515, + 0.004735365, + -0.02443895, + -0.006779385, + 0.0072768372, + -0.033495136, + 0.016377667, + 0.0090944525, + -0.0028300583, + 0.010765382, + -0.009528128, + 0.022449138, + -0.008628887, + -0.015344496, + -0.007812555, + -0.01491082, + -0.016122563, + 0.007965618, + -0.024451703, + -0.0039987527, + 0.0029464494, + 0.0012356592, + -0.024056293, + -0.016887875, + 0.010459257, + 0.0016964406, + 0.0064158617, + -0.0017044125, + -0.021594541, + 0.0057749134, + 0.024145579, + -0.011148038, + -0.0063552745, + 0.03994926, + -0.0060746605, + 0.00878195, + 0.01660726, + -0.016492464, + -0.00078045833, + -0.0065944344, + 0.023176184, + -0.0136353, + 0.034158405, + -0.017066447, + -0.012716927, + -0.037321694, + 0.009706701, + 0.018495029, + -0.02181138, + 0.0059471084, + 0.022704242, + -0.017870024, + 0.020076673, + -0.0082526095, + 0.0049362592, + -0.019489935, + -0.02454099, + 0.015395517, + -0.02788285, + -0.032219615, + -0.03114818, + 0.00947073, + -0.022283321, + -0.0071429075, + 0.02589304, + -0.003982809, + -0.01191335, + 0.02780632, + -0.0026706185, + 0.0074298996, + 0.04247479, + 0.007487298, + -0.03632679, + -0.016390422, + 0.02591855, + -0.0011256457, + -0.0131506035, + -0.008067659, + -0.014451633, + -0.021798624, + -0.0057430253, + -0.036939036, + 0.023762923, + -0.028979797, + -0.026199166, + 0.007085509, + 0.0124618225, + 0.0014955463, + -0.009725834, + -0.019528199, + -0.0066582104, + -0.026811413, + 0.0081888335, + -0.010459257, + -0.017921045, + -0.017347062, + -0.0006728364, + 0.021926176, + -0.0026275697, + 0.018354721, + -0.00033781328, + 0.0056728716, + 0.006457316, + 0.015676131, + 0.002165194, + -0.03372473, + 0.012493711, + -0.032194104, + -0.011103394, + -0.023609862, + 0.0006425428, + 0.014171018, + -0.012729682, + 0.02146699, + 0.029566536, + -0.020918515, + -0.022359852, + -0.0108865565, + 0.026734883, + 0.011358499, + -0.01724502, + -0.022487404, + -0.026007837, + 0.0145536745, + -0.016645527, + -0.016824098, + 0.02051035, + 0.0005568439, + -0.0059439195, + 0.007213061, + -0.0018845797, + 0.00843756, + 0.023418533, + 0.027678767, + -0.014464388, + -0.003947732, + -0.0018399365, + 0.022933835, + 0.021097088, + -0.007876331, + -0.009623793, + 0.0063552745, + -0.006537036, + 0.011371254, + 0.020995047, + -0.0029719598, + 0.007219439, + -0.009853386, + 0.0061129257, + 0.010574054, + -0.03127573, + -0.010803648, + -0.008718174, + 0.03336758, + 0.0012308761, + 0.02984715, + 0.0012165265, + -0.004499394, + -0.007965618, + -0.009783233, + 0.019489935, + 0.009668436, + -0.000117586926, + -0.019936366, + 0.0003408028, + 0.02589304, + 0.025752733, + -0.03584209, + -0.01947718, + 0.016097052, + -0.0044483733, + -0.02321445, + 0.013750098, + -0.011007731, + 0.014349591, + 0.0028874567, + 0.0015210566, + 0.008105924, + -0.0057430253, + -0.0037053833, + 0.03966865, + 0.0006297876, + -0.0041613816, + -0.0120983, + -0.020382797, + -0.019591976, + 0.00040597384, + -0.01894146, + -0.009560017, + -0.010325328, + 0.0001715972, + -0.010867423, + 0.0041103605, + -0.009636547, + 0.02454099, + -0.0113393655, + 0.007187551, + -0.043546226, + -0.016492464, + -0.02294659, + 0.014681227, + 0.0017793493, + 0.005414579, + 0.00811868, + -0.0044451845, + 0.025038442, + 0.017474614, + 0.03181145, + -0.011715644, + -0.0052934047, + 0.0245665, + 0.006336142, + -0.015216945, + 0.0150511265, + -0.020357287, + -0.021607297, + -0.0080804145, + -0.015676131, + 0.028852245, + -0.00020318622, + 0.04770442, + -0.0029209391, + -0.018418498, + 0.02928592, + -0.005290216, + -0.00029655822, + 0.007391634, + 0.012908255, + -0.0126340175, + -0.011766665, + -0.012997541, + -0.0012452257, + 0.025688957, + -0.0016996294, + -0.009802366, + -0.00012725298, + -0.03265329, + 0.033316564, + -0.039719667, + -0.011766665, + 0.0096556805, + 0.0049362592, + 0.024655787, + 0.008979656, + -0.016454197, + -0.00039182356, + 0.010408237, + 0.015688887, + -0.019158298, + -0.008246232, + 0.014005201, + -0.0113011, + -0.03721965, + -0.0096556805, + 0.0077742897, + -0.02783183, + -0.015012861, + -0.026377738, + -0.0013456728, + 0.014171018, + 0.012187586, + 0.010580432, + -0.029081838, + -0.032882884, + -0.0073852562, + -0.004355898, + -0.023762923, + -0.0035140554, + -0.022053728 ] } ], @@ -7752,10 +7756,10 @@ X-Request-Id: req_3b262756db465c4edf09fa378aa87584 "total_tokens": 46 } } -266 34339 +265 34463 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com -User-Agent: langchaingo-httprr +User-Agent: langchaingo-httprr Content-Length: 70 Authorization: Bearer test-api-key Content-Type: application/json @@ -7764,26 +7768,30 @@ Content-Type: application/json Content-Length: 33508 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Sat, 21 Jun 2025 17:14:12 GMT +Date: Wed, 23 Sep 2026 09:28:35 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 107 +Openai-Processing-Ms: 95 +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-5db75cfb77-8szn6 +Via: envoy-router-6659cb4779-vrl5c X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 110 +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 -X-Ratelimit-Limit-Tokens: 5000000 +X-Ratelimit-Limit-Tokens: 10000000 X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 4999994 +X-Ratelimit-Remaining-Tokens: 9999995 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_1f744a5a1f16e4f6c51a41dbd96033fd +X-Request-Id: req_c7d55a7a89e14ba88aaf235c02bff3eb { "object": "list", @@ -9337,40 +9345,43 @@ X-Request-Id: req_1f744a5a1f16e4f6c51a41dbd96033fd "total_tokens": 6 } } -1403 1563 +1439 1666 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com -User-Agent: langchaingo-httprr -Content-Length: 1199 +User-Agent: langchaingo-httprr +Content-Length: 1236 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:62641a9e-76b9-4de8-a2d7-90dfc10a5599\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:a8e98e8e-f54b-4ca6-be29-0ce9b9788a7c\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:fb0c8fe3-b926-447e-a1c5-cadccbd9cf8d\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the desk?\nHelpful Answer:"}],"temperature":0}HTTP/2.0 200 OK +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:desk\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003edesk\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:chair\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003echair\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:lamp\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003elamp\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What color is the desk?\nHelpful Answer:"}]}HTTP/2.0 200 OK Content-Length: 841 Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Sat, 21 Jun 2025 17:14:13 GMT +Date: Wed, 23 Sep 2026 09:28:37 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 128 +Openai-Processing-Ms: 536 +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 133 -X-Ratelimit-Limit-Requests: 10000 -X-Ratelimit-Limit-Tokens: 10000000 -X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 9999789 -X-Ratelimit-Reset-Requests: 6ms -X-Ratelimit-Reset-Tokens: 1ms -X-Request-Id: req_99bd6c151a70fff65f4e4a78899c109d +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999795 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_576b9a3d23264b6cbc5d5ac7bd86e941 { - "id": "chatcmpl-Bkw571Ko7stWSFGNqfDCjqhFakMn8", + "id": "chatcmpl-ERDZEWSZNVOV6E2Jqj8q4pQZVUSbL", "object": "chat.completion", - "created": 1750526053, + "created": 1790155716, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { @@ -9386,9 +9397,9 @@ X-Request-Id: req_99bd6c151a70fff65f4e4a78899c109d } ], "usage": { - "prompt_tokens": 262, + "prompt_tokens": 222, "completion_tokens": 8, - "total_tokens": 270, + "total_tokens": 230, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 @@ -9401,40 +9412,44 @@ X-Request-Id: req_99bd6c151a70fff65f4e4a78899c109d } }, "service_tier": "default", - "system_fingerprint": "fp_38343a2f8f" + "system_fingerprint": "fp_1e72310be1" } -300 34355 +327 34445 POST https://api.openai.com/v1/embeddings HTTP/1.1 Host: api.openai.com -User-Agent: langchaingo-httprr -Content-Length: 103 +User-Agent: langchaingo-httprr +Content-Length: 131 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"text-embedding-ada-002","input":["What colors is each piece of furniture next to the desk?"]}HTTP/2.0 200 OK -Content-Length: 33526 +{"model":"text-embedding-ada-002","input":["What colors are all of the pieces of furniture next to the desk and the desk itself?"]}HTTP/2.0 200 OK +Content-Length: 33489 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Sat, 21 Jun 2025 17:14:14 GMT +Date: Wed, 23 Sep 2026 09:28:38 GMT Openai-Model: text-embedding-ada-002-v2 Openai-Organization: lcgo-tst -Openai-Processing-Ms: 36 +Openai-Processing-Ms: 133 +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -Via: envoy-router-5db75cfb77-xhcs8 +Via: envoy-router-6fbb69b6c9-p6w2b X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 38 +X-Engine-Geography: EU +X-Openai-Proxy-Wasm: v0.1 X-Ratelimit-Limit-Requests: 10000 -X-Ratelimit-Limit-Tokens: 5000000 +X-Ratelimit-Limit-Tokens: 10000000 X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 4999986 +X-Ratelimit-Remaining-Tokens: 9999979 X-Ratelimit-Reset-Requests: 6ms X-Ratelimit-Reset-Tokens: 0s -X-Request-Id: req_fa5400edab2c93b46f878d029ad6d7e2 +X-Request-Id: req_cdb0e99bdac34301a6e44d10e35bae9b { "object": "list", @@ -9443,1592 +9458,1595 @@ X-Request-Id: req_fa5400edab2c93b46f878d029ad6d7e2 "object": "embedding", "index": 0, "embedding": [ - 0.014166317, - -0.00021363195, - 0.0033157628, - -0.017779376, - -0.004656039, - 0.015452982, - -0.025863275, - -0.0043083797, - 0.022250215, - 0.0040939357, - 0.0071221483, - 0.00007061836, - -0.018949073, - 0.011696959, - -0.008129386, - 0.004600804, - 0.010611741, - 0.008850698, - 0.02750085, - -0.02530442, - -0.036312558, - 0.007375582, - 0.0011794433, - -0.008174875, - -0.01988483, - 0.011027632, - 0.026799032, - -0.002869004, - 0.006049927, - 0.014946113, - 0.033245355, - -0.0075705317, - 0.0054910723, - -0.032439563, - -0.016635675, - 0.02750085, - 0.005585298, - 0.006517805, - 0.017233519, - -0.015543958, - 0.0016554445, - 0.008246356, - 0.0017285505, - 0.009065143, - -0.006868714, - 0.009091136, - 0.0045293225, - 0.014816147, - -0.01792234, - -0.0005815988, - 0.019105032, - 0.02634415, - -0.019858837, - -0.016570691, - 0.0106572285, - -0.020261731, - 0.002869004, - 0.03529882, - -0.036468517, - -0.012054366, - 0.007531542, - 0.004454592, - -0.00014692273, - 0.0014353143, - -0.00014905499, - -0.016258772, - -0.008512787, - 0.0020307219, - 0.002438491, - 0.00699868, - 0.038547978, - 0.056353346, - 0.015271029, - 0.021678364, - 0.029684281, - -0.0011656344, - 0.0078239655, - 0.0035968148, - -0.0025050987, - -0.0023783816, - 0.009026153, - -0.008174875, - -0.024355667, - -0.0020128516, - 0.029450342, - -0.004753514, - 0.021977285, - 0.022562133, - -0.0027065463, - 0.0004280762, - -0.01603783, - 0.03392118, - 0.010527262, - -0.019079039, - -0.013698438, - 0.01800032, - 0.020924559, - 0.02465459, - 0.011924399, - -0.038885888, - 0.023718832, - 0.016947594, - -0.043746624, - 0.0068102293, - -0.018715134, - -0.027240917, - -0.005442335, - -0.017038569, - 0.024251694, - -0.018507188, - -0.038547978, - 0.041719154, - 0.027578829, - -0.010299822, - -0.010462279, - -0.01257423, - 0.028774519, - -0.017064562, - -0.011281067, - -0.0120088775, - 0.0060889167, - 0.039873634, - 0.02903445, - -0.03680643, - 0.03015216, - -0.00074324425, - -0.011378542, - -0.009091136, - -0.024953512, - -0.014686181, - 0.01395837, - 0.016089816, - 0.0063098595, - 0.030983943, - -0.017363485, - 0.006582788, - -0.011430528, - 0.022549137, - 0.00201935, - -0.0078564575, - 0.015349009, - 0.011469518, - -0.0077394876, - -0.0084608, - 0.010455782, - 0.03207566, - 0.012177833, - -0.008096894, - -0.029008457, - -0.0033141382, - 0.015907863, - 0.0025570851, - 0.008122887, - 0.0071221483, - 0.006803731, - 0.01735049, - -0.027578829, - -0.021522405, - -0.03176374, - -0.013880391, - -0.021743346, - -0.010650731, - 0.028488593, - -0.0013768295, - 0.033505287, - 0.021522405, - 0.019481935, - 0.014140324, - -0.013321537, - 0.0014426248, - -0.009974906, - 0.016024834, - -0.025057485, - 0.008902685, - 0.0073885787, - 0.007141643, - 0.01627177, - -0.006469068, - -0.010774199, - -0.0036195589, - 0.008798712, - -0.015349009, - 0.016596684, - -0.0052506346, - -0.007596525, - -0.018793114, - 0.007771979, - -0.015751904, - 0.0076355147, - -0.0030509566, - 0.029814247, - 0.0071286466, - -0.013425509, - -0.012795173, - -0.6541979, - -0.048139483, - 0.025473377, - -0.020352708, - 0.008766221, - 0.025889268, - 0.025863275, - 0.0334533, - 0.008532281, - -0.022198228, - 0.019247996, - 0.009468039, - 0.0280727, - -0.019780857, - 0.006764741, - -0.026487112, - 0.026747046, - 0.010618239, - 0.0031029433, - 0.007914942, - -0.007141643, - 0.018546177, - -0.00096012536, - -0.0066152797, - 0.02492752, - 0.00630661, - 0.016986582, - -0.010579249, - -0.0169216, - 0.013211065, - -0.0149071235, - 0.012327295, - -0.012658709, - -0.0040127067, - 0.042836864, - -0.0002205364, - -0.01888409, - 0.015387999, - 0.012951133, - 0.024082739, - -0.009786455, - 0.0030249634, - 0.008148882, - -0.013334533, - -0.00016824531, - -0.0075835283, - 0.018624157, - -0.006764741, - 0.041485213, - -0.015478975, - 0.008675245, - -0.017389478, - -0.007596525, - 0.015582948, - 0.02822866, - 0.0038794912, - 0.045514166, - 0.02072961, - 0.010358307, - 0.00853878, - 0.0012687951, - -0.005608042, - -0.035350807, - -0.0077199927, - -0.028904485, - 0.0017626666, - -0.03360926, - -0.03857397, - -0.015985843, - -0.024979506, - 0.005439086, - 0.010826185, - -0.0226921, - 0.01523204, - 0.028358627, - 0.01407534, - 0.025824286, - -0.004815248, - 0.0057704994, - -0.004841241, - -0.003231285, - -0.0045488174, - -0.032803472, - -0.01415332, - 0.023978766, - -0.0150370905, - -0.027526842, - -0.016362745, - 0.015297023, - 0.0052018976, - 0.010221842, - 0.0111186085, - -0.0014052596, - -0.013042109, - 0.0075900266, - 0.024199707, - -0.0074080736, - -0.0034181112, - -0.0021314458, - -0.009390058, - 0.010033391, - -0.0096694855, - -0.006140903, - 0.005569052, - 0.016193788, - -0.016869614, - -0.022523144, - 0.032387577, - 0.017207526, - -0.009929419, - 0.0031825474, - -0.036182594, - -0.020976545, - 0.012639213, - 0.012275308, - -0.03233559, - 0.04067942, - 0.0052896244, - -0.0005686022, - -0.008863695, - 0.020170756, - 0.010039889, - -0.008701238, - -0.009370564, - 0.021626377, - 0.0030022194, - 0.0004272639, - -0.017935336, - -0.017896347, - 0.01792234, - 0.009578509, - 0.006095415, - 0.015297023, - -0.0023475145, - -0.013042109, - -0.009429049, - 0.013763421, - -0.01511507, - 0.012736688, - -0.016258772, - -0.030126167, - -0.011573491, - -0.0053058704, - 0.012021874, - -0.0029908472, - -0.012327295, - -0.029684281, - -0.0047242716, - -0.018559175, - -0.01211285, - -0.032387577, - -0.01395837, - -0.048789315, - 0.0036682962, - 0.023445904, - -0.0010567877, - -0.03119189, - 0.0007895447, - -0.009649991, - 0.013776418, - 0.0013053481, - -0.008395817, - 0.0009487533, - 0.0015035466, - -0.0107871955, - -0.021093516, - -0.011066622, - 0.025837282, - -0.0026106962, - -0.021795332, - -0.008909184, - -0.010039889, - -0.009227601, - -0.0060174353, - -0.019442944, - -0.007966928, - -0.0037755184, - -0.017688401, - 0.005634035, - -0.008311339, - -0.0045098276, - 0.012990123, - -0.0017821616, - 0.004958211, - 0.03249155, - 0.0051401635, - 0.013659448, - 0.016674664, - -0.015894867, - 0.0067712395, - 0.0057672504, - -0.008174875, - -0.01126807, - -0.018988064, - 0.0069012055, - 0.009325075, - -0.006979185, - -0.0070311716, - 0.01122908, - -0.006888209, - 0.033947174, - -0.0075835283, - 0.016934596, - -0.03431108, - 0.014348269, - -0.01919601, - 0.010293324, - -0.016336752, - -0.004490332, - 0.029528322, - 0.012970627, - -0.039249793, - 0.0036942894, - -0.019455941, - 0.009636994, - -0.012405274, - -0.024147721, - 0.018637154, - -0.010826185, - 0.007531542, - -0.00032126022, - 0.003954222, - 0.035740707, - -0.002014476, - -0.018988064, - -0.01134605, - 0.023523884, - 0.020924559, - 0.005776998, - -0.017467458, - -0.016206786, - -0.014387259, - -0.009974906, - 0.011599484, - -0.011073121, - 0.0004491957, - -0.0032394077, - -0.020001799, - -0.006582788, - 0.012528743, - -0.003600064, - 0.030827984, - 0.0016237653, - -0.0020680872, - 0.026136205, - 0.0017805371, - 0.0106897205, - 0.03880791, - -0.022822065, - 0.014569212, - 0.00076152076, - 0.0012972252, - -0.017103553, - 0.023601864, - 0.0149071235, - -0.007642013, - 0.05170056, - -0.017051566, - 0.007836962, - 0.016687661, - -0.0063326033, - -0.020131765, - 0.010585748, - -0.019858837, - 0.013711435, - -0.011521504, - -0.025252433, - -0.0015011097, - 0.013042109, - -0.017584428, - -0.0032832713, - 0.012704196, - 0.0054780757, - 0.0045520663, - 0.0059816944, - -0.0072716093, - 0.0026285665, - -0.018221263, - 0.030022195, - 0.014023353, - -0.0008179748, - -0.0169216, - 0.026201187, - 0.0039672186, - -0.009006659, - -0.00900016, - -0.026903005, - 0.0116124805, - -0.008720732, - 0.00026703993, - 0.017129546, - 0.026747046, - 0.020001799, - -0.0041751643, - -0.011592986, - -0.032621518, - 0.011047128, - 0.004708026, - 0.02449863, - 0.007596525, - -0.008668746, - 0.0038145082, - -0.035402793, - -0.020989543, - 0.017909342, - 0.017688401, - 0.0025505868, - -0.0117099555, - -0.025395397, - -0.04530622, - -0.009870933, - -0.0049127224, - -0.014582208, - -0.006764741, - -0.0100658825, - -0.0087792175, - -0.040367503, - -0.011508508, - 0.048139483, - 0.025993241, - -0.020027792, - -0.02669506, - -0.022900045, - -0.0007521794, - 0.069973804, - 0.030334113, - -0.0050004497, - 0.015543958, - 0.0026204437, - -0.010475276, - 0.0005352983, - 0.0013987613, - 0.011885409, - -0.0059134625, - -0.0017480454, - 0.001147764, - 0.0016107687, - -0.013334533, - -0.0022776579, - -0.0044708373, - -0.006618529, - -0.023224961, - 0.017038569, - -0.03023014, - -0.022406174, - 0.019157019, - -0.0019332473, - 0.021249475, - -0.008298342, - 0.02822866, - 0.01707756, - 0.0061246576, - 0.022211224, - -0.029086437, - 0.005971947, - 0.02134045, - -0.01411433, - 0.00711565, - -0.020742606, - -0.030698018, - -0.012827665, - 0.01857217, - 0.011625477, - -0.006391088, - 0.0207686, - 0.006199388, - -0.0048477394, - -0.024212705, - -0.0023328934, - 0.02534341, - -0.013698438, - 0.016362745, - -0.004444844, - -0.01696059, - 0.008265851, - -0.0074275685, - 0.006823226, - -0.0077004978, - 0.009123628, - -0.010871673, - -0.027136944, - -0.008311339, - -0.007745986, - -0.022146242, - 0.0034798451, - 0.014933117, - 0.012957631, - -0.0037430266, - -0.024056746, - -0.037794173, - -0.013971367, - -0.002415747, - -0.0110861175, - -0.019910824, - -0.026370144, - -0.008740228, - -0.010286826, - -0.0044513424, - 0.035714712, - 0.027604822, - 0.025538359, - -0.023224961, - 0.005439086, - 0.030983943, - 0.0008216301, - -0.017701397, - 0.004792504, - 0.009714974, - 0.0022630366, - -0.001904005, - 0.035506766, - -0.005507318, - -0.0069921818, - 0.009377061, - 0.028956471, - -0.0006616092, - 0.02361486, - -0.010449283, - -0.010247835, - -0.0041589187, - 0.013464499, - 0.0139193805, - -0.029632295, - -0.023043009, - 0.015985843, - -0.020482674, - 0.010618239, - -0.021236477, - -0.0076290164, - -0.00018296806, - 0.015284026, - -0.001544161, - -0.0028007717, - 0.012457261, - 0.010559754, - -0.008987163, - -0.009598005, - -0.010442785, - 0.013828404, - 0.008519284, - 0.009968408, - 0.023263952, - -0.022783076, - -0.0067452462, - 0.034077138, - -0.040185552, - 0.029736267, - -0.0022484155, - -0.028644552, - -0.0030265881, - 0.0014491233, - -0.020573651, - 0.004379861, - 0.010943155, - -0.014140324, - 0.033479296, - -0.010007398, - -0.008428308, - -0.034077138, - -0.011170596, - 0.017493451, - 0.016596684, - -0.01688261, - -0.0003344599, - -0.0075185453, - 0.011326555, - -0.0037982624, - -0.019312978, - -0.033713233, - -0.027760781, - -0.0038502489, - 0.011326555, - -0.0019105033, - 0.022588126, - -0.0011786311, - 0.011489012, - -0.023237959, - 0.011521504, - -0.02049567, - -0.016856616, - -0.016284766, - -0.006979185, - 0.024212705, - 0.012047867, - 0.00980595, - 0.000011435503, - 0.0016164547, - 0.0057087657, - -0.0016318882, - 0.0033303841, - -0.021288464, - -0.0032101653, - -0.0014783656, - 0.016206786, - 0.0125352405, - 0.010605242, - 0.011995881, - 0.017597424, - 0.0103258155, - 0.032933436, - -0.013503489, - -0.010150361, - -0.018520184, - -0.030334113, - 0.012678203, - -0.012099854, - -0.0153360125, - -0.0077329893, - -0.0051564095, - 0.0044513424, - 0.0005214894, - 0.0072586127, - 0.00008874255, - -0.016973587, - 0.034259092, - 0.0063845897, - 0.039405756, - -0.021002539, - 0.009162618, - -0.0007720805, - -0.022913042, - -0.017532442, - -0.0010112996, - -0.005487823, - 0.0029437346, - 0.022627117, - 0.01172945, - -0.022133244, - -0.0024774808, - -0.010273829, - 0.0144782355, - 0.0031208135, - -0.015855877, - -0.023796812, - -0.029242396, - -0.026552096, - -0.012769179, - -0.029788254, - 0.010176354, - -0.004080939, - -0.049257193, - 0.010579249, - -0.0014613075, - -0.030983943, - -0.006618529, - -0.010026893, - 0.034207106, - 0.007849959, - 0.005302621, - 0.014673185, - -0.0072976025, - -0.0032848958, - -0.027604822, - -0.02799472, - 0.0066672666, - 0.02638314, - 0.039041847, - -0.025213445, - 0.025330413, - 0.008616759, - -0.008850698, - 0.00703767, - -0.024888529, - -0.0039249794, - -0.0071221483, - 0.019403955, - -0.02742287, - 0.006592536, - -0.014296283, - 0.0075705317, - -0.010507768, - -0.017545437, - 0.024511626, - -0.004139424, - -0.0058517284, - 0.016089816, - -0.03761222, - 0.036286566, - 0.021847319, - 0.0110861175, - -0.018793114, - 0.0024937266, - -0.0048444904, - -0.0016180793, - 0.0006567355, - 0.025928259, - -0.0010275453, - 0.0010584123, - 0.0023556375, - 0.010007398, - -0.027162937, - -0.009377061, - -0.00024124977, - 0.02661708, - -0.014972107, - 0.003580569, - -0.010748206, - 0.015595945, - 0.0484514, - -0.006534051, - -0.0024417401, - -0.003245906, - -0.01941695, - 0.00321179, - 0.0031776738, - -0.016440725, - -0.002553836, - 0.023692839, - -0.017948333, - -0.0012143718, - -0.014582208, - -0.005695769, - 0.007531542, - -0.019183012, - -0.023211965, - -0.0066672666, - 0.026851019, - 0.0068752123, - 0.0007672068, - -0.011638474, - 0.016258772, - -0.0077004978, - -0.020859577, - 0.036494512, - -0.004987453, - 0.011437026, - -0.017337492, - 0.020872572, - -0.007726491, - -0.02257513, - 0.03950973, - -0.0026561844, - -0.023822805, - -0.0107222125, - 0.011521504, - -0.019351969, - 0.0022435416, - -0.010527262, - -0.0024953512, - -0.0079214405, - 0.014790154, - -0.00080903963, - 0.0008675244, - 0.006072671, - -0.010793693, - 0.00059621996, - 0.0100658825, - 0.000061886254, - 0.028046707, - -0.0008399066, - 0.0054715774, - 0.024134725, - -0.027838761, - -0.013776418, - -0.017792374, - 0.011482514, - -0.0024352418, - -0.012281806, - -0.007817468, - -0.006280617, - -0.0067062564, - -0.01403635, - 0.0044091037, - 0.0041426728, - 0.011014636, - 0.023172975, - -0.0053351126, - 0.02257513, - -0.018910084, - 0.0029583557, - -0.013776418, - -0.039041847, - -0.034908924, - -0.009974906, - 0.0033368825, - 0.00014499355, - 0.012834163, - -0.045098275, - -0.031139903, - 0.01788335, - -0.002907994, - -0.020677624, - 0.024550617, - 0.004773009, - 0.029242396, - -0.0073820804, - -0.020248735, - 0.028514586, - 0.006933697, - -0.007843461, - -0.014257293, - -0.0076680062, - -0.0010145487, - -0.019468937, - 0.0039899624, - 0.009675984, - -0.007492552, - -0.03217963, - 0.039587706, - 0.002596075, - -0.013016116, - -0.011599484, - 0.00027272597, - 0.004350619, - -0.003746276, - 0.015790895, - 0.033375323, - 0.016531702, - -0.013302041, - -0.020820586, - -0.004880231, - 0.005234389, - 0.030022195, - -0.020352708, - -0.0003710129, - 0.0148421405, - -0.011755443, - -0.012606722, - -0.01880611, - 0.0098644355, - 0.010852179, - 0.029736267, - 0.008291844, - -0.009935916, - 0.0066282763, - 0.020326715, - -0.0010121118, - -0.026954992, - -0.011917901, - -0.015349009, - -0.029892227, - -0.023471897, - 0.014816147, - -0.022393178, - 0.0017594175, - -0.013880391, - -0.0024271188, - -0.012294803, - -0.020001799, - -0.025122467, - -0.007973427, - -0.0049939514, - 0.017038569, - 0.011255073, - -0.0055203144, - 0.0036260572, - -0.02799472, - -0.024043748, - -0.020924559, - -0.018052306, - -0.0048704837, - -0.047567632, - -0.01688261, - 0.0072781076, - -0.011917901, - -0.016063822, - 0.0011835048, - 0.003057455, - 0.026825026, - 0.022263212, - 0.23560274, - -0.00076436374, - -0.0016513831, - 0.028410614, - -0.0010291699, - 0.03457101, - 0.024342671, - 0.0046982784, - 0.030905964, - 0.045202248, - -0.008376322, - -0.00041284578, - 0.0069012055, - 0.0076290164, - 0.017363485, - -0.018026313, - -0.048243456, - -0.015634935, - -0.011456521, - 0.016765641, - 0.012275308, - 0.01180743, - 0.016492711, - -0.0038632455, - 0.025889268, - 0.0115474975, - -0.00753804, - -0.0039282287, - 0.008200868, - 0.008993662, - -0.00016712843, - -0.011073121, - 0.0007619269, - 0.006072671, - -0.0007724866, - -0.005146662, - -0.016635675, - 0.0017431717, - 0.029398356, - 0.024667585, - 0.013685442, - -0.016687661, - -0.03810609, - -0.0044285986, - -0.00094794104, - 0.007992921, - -0.018520184, - 0.0010965898, - 0.015816888, - -0.0033011416, - -0.020443683, - -0.0142313, - 0.019377962, - 0.03319337, - -0.0014101333, - 0.01788335, - 0.016869614, - -0.019066043, - 0.021574391, - 0.0036195589, - -0.020300722, - 0.03142583, - -0.009403055, - 0.01315258, - 0.0075640334, - -0.010351809, - 0.009520025, - -0.0020177253, - 0.04169316, - -0.0144132525, - 0.018624157, - 0.01627177, - 0.004818497, - 0.007070162, - 0.017675404, - -0.0059979404, - 0.031555794, - -0.00761602, - 0.01395837, - 0.0066477717, - -0.0063585965, - -0.022068262, - -0.022146242, - 0.02669506, - -0.0067257513, - -0.025538359, - 0.012606722, - -0.003203667, - 0.026240177, - -0.010748206, - -0.004353868, - 0.004987453, - -0.007836962, - 0.011521504, - 0.0072131245, - 0.025798293, - -0.00201935, - 0.01603783, - -0.018715134, - 0.004435097, - -0.027968727, - -0.001544161, - -0.006371593, - 0.0017512946, - -0.024745565, - 0.018208265, - -0.009968408, - -0.001915377, - 0.018442204, - 0.006007688, - -0.009182112, - -0.018091297, - 0.011982884, - -0.019871833, - 0.018559175, - 0.011255073, - 0.0017009327, - -0.018143283, - -0.022133244, - -0.008213865, - -0.0067777378, - -0.030438086, - -0.006738748, - 0.0043246257, - 0.005110921, - -0.016180793, - 0.004119929, - 0.01965089, - 0.009630496, - -0.030801991, - 0.0129316375, - -0.02585028, - 0.0253824, - -0.019260991, - -0.017610421, - 0.0062838662, - -0.0009495656, - -0.013516486, - 0.013165576, - -0.0037950133, - -0.006342351, - -0.0076680062, - 0.016778637, - -0.022991022, - 0.015699917, - -0.008311339, - -0.01680463, - -0.021119509, - -0.017597424, - -0.021353448, - -0.009942415, - -0.0021639373, - -0.0052863755, - -0.004685282, - 0.0027406623, - -0.0050004497, - 0.0069921818, - -0.030542059, - 0.0019186261, - 0.021197489, - -0.00473077, - 0.010059385, - 0.0060044387, - -0.004984204, - -0.014777157, - 0.010182852, - -0.16469318, - 0.0257723, - 0.026747046, - -0.0013955121, - -0.0028316388, - 0.009585008, - 0.023081997, - 0.038054105, - -0.019234998, - 0.02903445, - 0.009662988, - -0.012710695, - -0.033557273, - -0.011774939, - 0.0015799017, - 0.022406174, - -0.01288615, - 0.0018877592, - 0.011969888, - 0.021288464, - 0.011391538, - -0.028930478, - 0.008772719, - 0.012951133, - 0.008545278, - -0.0016928099, - -0.02750085, - 0.022874052, - 0.012398776, - 0.00036552997, - -0.0082853455, - -0.0069921818, - 0.014543219, - 0.005864725, - 0.008980664, - 0.013880391, - 0.0010762827, - 0.0027309149, - -0.011060124, - -0.0040094573, - -0.0014312528, - 0.029008457, - -0.006433327, - 0.019559914, - -0.00996191, - -0.0018682642, - 0.02642213, - 0.012210325, - -0.001324843, - -0.014530222, - -0.00005523564, - -0.029658288, - -0.00842181, - -0.00061084115, - 0.012028373, - 0.008987163, - 0.03329734, - 0.014062343, - 0.00665427, - 0.0035285824, - 0.016024834, - -0.03880791, - 0.0051856516, - 0.00071115885, - 0.007791474, - -0.007882451, - 0.005906964, - 0.009071642, - -0.008993662, - -0.0029664787, - -0.012795173, - -0.0059946915, - 0.020378701, - -0.0130746, - 0.003153305, - 0.030853977, - -0.008993662, - -0.0088442005, - 0.0016424479, - 0.008408814, - -0.0034213604, - 0.040445484, - -0.014218303, - -0.0035480775, - 0.0020469679, - 0.0035870674, - -0.020378701, - 0.0031484314, - -0.033167377, - -0.004285636, - 0.014738168, - -0.034363065, - -0.00016205161, - -0.029892227, - 0.021223482, - 0.015751904, - -0.010397296, - -0.010715714, - 0.009812448, - -0.008824705, - 0.0071091517, - -0.022874052, - -0.019403955, - 0.016089816, - 0.027968727, - 0.011502009, - -0.016089816, - 0.01311359, - 0.035506766, - 0.003453852, - -0.015128067, - 0.0284626, - 0.013607462, - 0.028592566, - 0.02569432, - 0.0073820804, - 0.0082853455, - -0.027630815, - 0.006365095, - 0.017636415, - 0.033739228, - -0.013945374, - -0.022133244, - 0.019598903, - -0.002792649, - -0.015946854, - -0.10090576, - 0.005949203, - 0.0075705317, - 0.016830623, - -0.00024876345, - 0.019299982, - 0.01315258, - 0.025031492, - 0.0017789125, - 0.033531282, - -0.00017504823, - -0.015452982, - -0.0063553476, - -0.0015766525, - -0.017948333, - -0.012840661, - -0.004516326, - -0.024108732, - -0.019442944, - 0.011833423, - -0.0009926169, - -0.01580389, - 0.0043213763, - -0.0036260572, - 0.011112111, - -0.010813189, - -0.03176374, - 0.005091426, - 0.016414732, - 0.013776418, - 0.02373183, - -0.012275308, - -0.0056242878, - -0.0051596584, - -0.021249475, - -0.010202347, - -0.012580729, - -0.02677304, - 0.016752644, - -0.04764561, - 0.011534501, - 0.009377061, - 0.0016221408, - -0.04611201, - -0.0017951583, - -0.0056015435, - -0.025369404, - 0.0047015273, - -0.004058195, - -0.012775678, - 0.007434067, - 0.009409553, - -0.013516486, - -0.009403055, - 0.04208306, - 0.0005921585, - 0.012892648, - 0.027448863, - -0.012060864, - -0.004305131, - -0.0021281966, - 0.01338652, - 0.0052246414, - 0.030931957, - 0.0017837862, - -0.018325236, - -0.026240177, - 0.0041589187, - 0.012340291, - -0.026721053, - -0.008246356, - 0.01072871, - -0.023069002, - 0.010260832, - -0.022432167, - -0.0018780117, - -0.022471158, - -0.0014873007, - 0.021405434, - -0.0022646612, - -0.03233559, - -0.037040368, - 0.0036163097, - -0.014608202, - 0.00938356, - 0.025070481, - -0.025252433, - 0.009578509, - 0.007096155, - -0.010897666, - 0.004415602, - 0.053702038, - 0.009773458, - -0.02549937, - -0.0027552836, - 0.015310019, - -0.0042628916, - 0.0024352418, - 0.015011097, - -0.017415471, - -0.021366443, - -0.0067257513, - -0.05261032, - 0.015478975, - -0.0014759287, - -0.018442204, - 0.0070311716, - 0.0084608, - 0.0013865769, - -0.014504229, - -0.0037105351, - 0.008928678, - -0.009630496, - 0.0029810998, - -0.021197489, - 0.003245906, - 0.009513526, - 0.009708475, - 0.027968727, - 0.010007398, - 0.010969148, - -0.015504968, - -0.010202347, - -0.00006980607, - 0.010169855, - 0.009097635, - -0.0142313, - 0.016050827, - -0.014218303, - -0.01857217, - -0.02353688, - -0.012223322, - 0.032517545, - -0.00021708418, - 0.0009625622, - 0.04515026, - -0.02380981, - -0.017753383, - -0.024407653, - 0.02919041, - 0.023263952, - -0.035012897, - -0.015777897, - -0.032907445, - -0.00669326, - -0.030568052, - 0.0035643233, - 0.03145182, - 0.008720732, - -0.0029486082, - 0.013880391, - -0.009429049, - 0.011242077, - 0.030074181, - 0.022913042, - -0.015894867, - -0.025668327, - -0.010871673, - 0.015894867, - -0.006049927, - 0.0066282763, - -0.033505287, - 0.004665787, - 0.004370114, - 0.01672665, - 0.010741707, - 0.011599484, - -0.005279877, - 0.01803931, - 0.002092456, - 0.003065578, - 0.00014072904, - -0.024810549, - 0.013581469, - 0.023120988, - -0.009565513, - 0.020716613, - -0.013178573, - -0.004519575, - 0.003522084, - -0.017337492, - 0.021431427, - 0.016986582, - -0.011378542, - -0.022588126, - 0.017779376, - 0.043434706, - -0.00796043, - -0.03126987, - 0.008343831, - -0.0066672666, - -0.0036325555, - -0.032933436, - 0.0047892546, - -0.02196429, - -0.0030866973, - -0.0007619269, - -0.006215634, - -0.023601864, - -0.0022435416, - 0.007291104, - 0.029736267, - -0.004837992, - -0.010449283, - -0.0010502894, - -0.030724011, - -0.012873153, - 0.007070162, - -0.0121063525, - -0.0110536255, - -0.01664867, - 0.00892218, - 0.003310889, - 0.004019205, - -0.004727521, - 0.011742447, - -0.009338072, - 0.013672445, - -0.030568052, - -0.02053466, - -0.026552096, - 0.012782176, - 0.011826925, - 0.009721472, - 0.0003257278, - 0.0041426728, - 0.025031492, - 0.024589606, - 0.026851019, - -0.029528322, - 0.01588187, - 0.028722532, - 0.010117869, - -0.0035545758, - 0.009286085, - -0.007687501, - -0.00942255, - -0.011995881, - -0.0020957051, - 0.022133244, - -0.003119189, - 0.06435926, - 0.00039700614, - -0.009533022, - 0.028410614, - -0.0037560235, - -0.002573331, - 0.02622718, - 0.0043733628, - -0.008155379, - -0.022497151, - -0.004184912, - 0.012496251, - 0.023211965, - -0.0030184651, - -0.014777157, - 0.0033791214, - -0.034207106, - 0.020196749, - -0.027578829, - 0.0017480454, - 0.00492247, - -0.020209745, - 0.016440725, - 0.00761602, - -0.021574391, - -0.0110536255, - 0.005968698, - -0.0015734034, - -0.006007688, - -0.024355667, - 0.023939775, - -0.018416211, - -0.03217963, - -0.009955412, - -0.0035903165, - -0.017168537, - -0.033167377, - -0.022315199, - -0.002899871, - 0.011398036, - 0.003876242, - 0.0046885307, - -0.026331153, - 0.0035903165, - -0.014283286, - -0.009948913, - -0.008415312, - 0.010566252, - -0.025070481 + 0.010940914, + 0.00037101895, + 0.0019054401, + -0.018620905, + -0.012196111, + 0.010196854, + -0.024728665, + -0.0048946193, + 0.019022051, + 0.0058942474, + 0.0070329825, + -0.0033191538, + -0.022502957, + 0.0068453504, + -0.005832782, + 0.0009373536, + 0.010552709, + 0.016097572, + 0.026281487, + -0.020885436, + -0.032816272, + 0.009122821, + -0.003642658, + -0.0032479828, + -0.021040717, + 0.008708735, + 0.030823486, + -0.004545235, + 0.009433384, + 0.01748217, + 0.03421381, + -0.010170974, + 0.0015277489, + -0.039596923, + -0.012558435, + 0.02888246, + 0.00837229, + 0.0072982563, + 0.01519176, + -0.007815863, + -0.0021076303, + 0.009562786, + 0.00030207212, + 0.00009371514, + -0.0046228757, + 0.0040761535, + 0.011186778, + 0.016226973, + -0.015748188, + 0.0040082177, + 0.021959469, + 0.036517162, + -0.02049723, + -0.017805675, + 0.009291043, + -0.018426802, + 0.0032415127, + 0.041434426, + -0.035973676, + -0.011549102, + 0.009724538, + 0.002754639, + -0.0017954487, + -0.001341734, + -0.004102034, + -0.015049418, + -0.01288841, + 0.0018569145, + -0.0029940319, + 0.0110250255, + 0.034343213, + 0.055849776, + 0.015101179, + 0.01589053, + 0.033152718, + -0.0014484903, + 0.0087928455, + 0.0023809914, + -0.0065024355, + -0.0027853716, + 0.00987335, + 0.0012762243, + -0.027873127, + -0.0019572007, + 0.023175845, + 0.00016347074, + 0.02357699, + 0.027588444, + -0.007912914, + -0.0021302756, + -0.015372923, + 0.028494256, + 0.009769829, + -0.011251478, + -0.0077058715, + 0.01586465, + 0.019229094, + 0.022671178, + 0.004791098, + -0.02968475, + 0.015579965, + 0.017715093, + -0.03856171, + 0.0033417991, + -0.019034991, + -0.027484922, + -0.000926031, + -0.020717213, + 0.020354887, + -0.014907076, + -0.034472615, + 0.028261332, + 0.023318186, + -0.016201094, + -0.002047782, + -0.01818094, + 0.035559587, + -0.018698547, + -0.009815119, + -0.016421076, + 0.0045064143, + 0.043634254, + 0.026126204, + -0.026993196, + 0.028753059, + 0.002591269, + -0.008864017, + -0.0067030084, + -0.026372068, + -0.016472837, + 0.007692931, + 0.022671178, + 0.009316923, + 0.027536683, + -0.006596252, + 0.0040308633, + -0.016252855, + 0.021687726, + 0.00646685, + -0.008171718, + 0.011736735, + 0.015424684, + -0.009252222, + -0.0074858884, + 0.00986688, + 0.034162052, + 0.012364333, + -0.011283829, + -0.021739487, + -0.0035132563, + 0.01445417, + 0.00044684028, + 0.015411743, + 0.0130372215, + 0.0069488715, + 0.017145727, + -0.03623248, + -0.018336222, + -0.030849367, + -0.012726658, + -0.023357008, + -0.010119214, + 0.025957981, + -0.0077705723, + 0.028649537, + 0.020238427, + 0.027226118, + 0.012364333, + -0.0064215595, + -0.003500316, + -0.012435504, + 0.019940803, + -0.020303128, + 0.0072335554, + 0.004037333, + 0.0078029227, + 0.017249247, + -0.0077899825, + -0.008876957, + -0.0038917563, + 0.0061336407, + -0.020290187, + 0.01749511, + -0.009232812, + -0.0095174955, + -0.023939315, + 0.0104103675, + -0.01666694, + 0.0027061133, + -0.006631837, + 0.030487042, + 0.005842487, + -0.0058133714, + -0.011245009, + -0.65384096, + -0.046429332, + 0.023887554, + -0.02202417, + 0.012344923, + 0.03035764, + 0.02357699, + 0.030849367, + 0.00004443129, + -0.02348641, + 0.012830179, + 0.0069553414, + 0.027743725, + -0.017702153, + -0.0037300042, + -0.024625145, + 0.022425316, + 0.014285948, + -0.011490871, + 0.0017356004, + -0.0060527646, + 0.020885436, + 0.00063164206, + -0.006389209, + 0.02820957, + 0.009045179, + 0.017702153, + -0.008488752, + -0.009679248, + 0.015308222, + -0.024366342, + 0.015321162, + -0.020354887, + -0.005528688, + 0.037552375, + -0.00085647753, + -0.0212607, + 0.015359983, + 0.0062953928, + 0.024819247, + -0.0097439485, + 0.008482282, + 0.008495222, + -0.01589053, + 0.0074729486, + 0.00025597276, + 0.018944409, + 0.0017792735, + 0.0377853, + -0.014492991, + 0.00914223, + -0.017081026, + -0.0031638716, + 0.014156546, + 0.03284215, + 0.0013207061, + 0.04461771, + 0.019306734, + 0.005751906, + 0.006282453, + 0.003338564, + -0.001672517, + -0.035326667, + -0.008132897, + -0.031366974, + 0.0043737777, + -0.038173504, + -0.03470554, + -0.023046443, + -0.02346053, + 0.010462128, + 0.011122077, + -0.01900911, + 0.020393709, + 0.028468376, + 0.0073306067, + 0.02952947, + 0.0032091623, + 0.011458521, + -0.012260811, + -0.0056645595, + -0.0049916706, + -0.03108229, + -0.0145447515, + 0.029348306, + -0.016615178, + -0.019280855, + -0.01667988, + 0.016511658, + 0.005020786, + 0.013496598, + 0.018646786, + 0.00041812926, + -0.006165991, + -0.00142908, + 0.026941435, + -0.004781393, + 0.0017339828, + -0.00045411912, + -0.001118516, + 0.006123936, + -0.012435504, + -0.0060074744, + 0.0031800468, + 0.024081657, + -0.015722306, + -0.027484922, + 0.03411029, + 0.01977258, + -0.00685829, + 0.008728145, + -0.04182263, + -0.015994051, + 0.0071947346, + 0.009362213, + -0.032221023, + 0.045989364, + 0.0014808407, + 0.0024553973, + -0.0042023202, + 0.017663334, + 0.0045064143, + -0.007945265, + -0.009232812, + 0.024482803, + 0.0016102424, + 0.0017792735, + -0.02509099, + -0.018439744, + 0.017986838, + 0.019086752, + 0.0007299065, + 0.008119957, + -0.00094058865, + -0.009426914, + -0.013276615, + 0.009595136, + -0.011070316, + 0.023887554, + -0.023952255, + -0.021674786, + -0.009051649, + 0.0006474129, + 0.0032318076, + -0.004878444, + -0.016563417, + -0.030150598, + -0.0001479021, + -0.028546017, + -0.0063374485, + -0.03403265, + -0.014648273, + -0.04016629, + 0.0066835983, + 0.025686238, + 0.001750158, + -0.03328212, + 0.00026648663, + -0.0035035512, + 0.016485777, + 0.0033029786, + -0.012551965, + 0.0028533076, + 0.005839252, + -0.008139367, + -0.021571264, + -0.020587811, + 0.023796974, + -0.0003390729, + -0.02505217, + -0.0032512178, + -0.008779906, + -0.0055675083, + -0.0077770427, + -0.024599263, + -0.004923735, + -0.0044158334, + -0.014790615, + -0.00012242615, + -0.0073370766, + -0.00047595563, + 0.008074666, + -0.0029244786, + 0.010772692, + 0.032945674, + 0.000028913193, + 0.016861042, + 0.018413862, + -0.017042205, + 0.006243632, + 0.002578329, + -0.0057195555, + -0.014609452, + -0.017728034, + 0.0074664783, + 0.0052569443, + -0.005463987, + -0.0063180383, + 0.01062388, + -0.0060333544, + 0.025401555, + -0.0032835682, + 0.018802067, + -0.028261332, + 0.013406017, + -0.02511687, + 0.011542632, + -0.008954598, + -0.008391701, + 0.028623657, + 0.017792735, + -0.042935487, + 0.0024246646, + -0.019345555, + 0.017960956, + -0.01291429, + -0.020950137, + 0.016861042, + -0.019707879, + 0.0038141152, + 0.005011081, + 0.0037720597, + 0.02958123, + -0.006227457, + -0.015023538, + -0.01065623, + 0.023227606, + 0.024547504, + 0.0013902596, + -0.013418957, + -0.018879708, + -0.012299632, + -0.0061142305, + 0.013444837, + -0.017676273, + 0.00681947, + 0.0050434317, + -0.017844494, + -0.0035164913, + 0.009756888, + -0.006696538, + 0.03266099, + 0.0021852714, + -0.005451047, + 0.029814152, + -0.0038335256, + 0.007660581, + 0.028313093, + -0.027510803, + 0.01138088, + 0.0070847436, + -0.00042823877, + -0.01749511, + 0.02197241, + 0.018672666, + -0.0107468115, + 0.045212954, + -0.012351393, + 0.01290135, + 0.012610196, + -0.0020332243, + -0.017236307, + 0.012707247, + -0.021623025, + 0.014324768, + -0.009808649, + -0.025621537, + -0.00493991, + 0.012331982, + -0.012293162, + 0.000027598957, + 0.010843863, + 0.012991931, + 0.0070265126, + 0.009316923, + -0.00681947, + 0.0012835031, + -0.018620905, + 0.025699178, + 0.0076864613, + -0.006140111, + -0.020898376, + 0.021726547, + 0.00683241, + -0.0080681965, + -0.008268769, + -0.021687726, + 0.01440241, + -0.012759008, + 0.009718068, + 0.016511658, + 0.027459042, + 0.020419588, + -0.0082364185, + -0.00569691, + -0.030538803, + 0.007938795, + 0.0078029227, + 0.021765366, + 0.0044352436, + -0.009899231, + -0.0009575726, + -0.041356783, + -0.013690701, + 0.017042205, + 0.010953855, + 0.004710222, + -0.015631726, + -0.026203845, + -0.04927617, + -0.012564906, + 0.00022584641, + -0.01220258, + -0.0042929016, + -0.00569691, + -0.008398171, + -0.044255383, + -0.009957462, + 0.04557528, + 0.0258674, + -0.017365709, + -0.028390734, + -0.008689324, + 0.0007481036, + 0.07049805, + 0.02743316, + -0.013393076, + 0.01587759, + -0.00081765704, + -0.010455658, + -0.0034841408, + -0.0019620534, + 0.008022905, + -0.008935188, + 0.003068438, + 0.002510393, + 0.0032593054, + -0.0079582045, + 0.0036361879, + -0.0070071025, + -0.005628974, + -0.019358495, + 0.011743205, + -0.03113405, + -0.02127364, + 0.017637452, + -0.005758376, + 0.020846615, + -0.0070912135, + 0.028002528, + 0.014117726, + 0.00058109453, + 0.01667988, + -0.026061503, + 0.0099121705, + 0.023072325, + -0.012739598, + 0.0050369613, + -0.027717846, + -0.030487042, + -0.010889154, + 0.021713607, + 0.0070847436, + -0.003581192, + 0.022412375, + 0.0019749936, + -0.0024780426, + -0.02274882, + -0.0035456067, + 0.025401555, + -0.016175212, + 0.011704384, + -0.0076799914, + -0.015554085, + 0.007505299, + -0.007117094, + -0.0017275128, + -0.0069359313, + 0.0052342988, + -0.011173837, + -0.033825606, + -0.014040085, + -0.003869111, + -0.022127692, + 0.0061271708, + 0.014040085, + 0.009750418, + 0.00084596366, + -0.018310342, + -0.032790393, + -0.013975384, + 0.0027837541, + -0.008482282, + -0.02192065, + -0.020794854, + -0.0036232478, + -0.0073241363, + -0.004244376, + 0.03364444, + 0.02655323, + 0.025336854, + -0.023589931, + 0.005011081, + 0.033592682, + 0.0008322147, + -0.010229205, + 0.006690068, + 0.0056225043, + 0.010138623, + -0.0012592403, + 0.035896033, + -0.009996282, + -0.0048428588, + 0.006224222, + 0.030668205, + -0.0019539658, + 0.021480683, + -0.015735248, + -0.007867624, + -0.0036620682, + 0.01290782, + 0.016589299, + -0.025453316, + -0.024443982, + 0.013574239, + -0.023991076, + 0.0052342988, + -0.017158667, + -0.009938051, + 0.0038270555, + 0.008508163, + -0.0028436026, + -0.011982598, + 0.013794222, + 0.011866136, + -0.0057195555, + -0.016654, + -0.005848957, + 0.008844607, + 0.008113487, + 0.009614547, + 0.024172239, + -0.021403043, + -0.0019086752, + 0.033049196, + -0.046843417, + 0.030823486, + -0.0040632137, + -0.030927008, + -0.0005730069, + 0.008993419, + -0.0039014614, + 0.004930205, + 0.0082881795, + -0.018413862, + 0.03656892, + -0.0041376194, + -0.011924367, + -0.032428067, + -0.010073923, + 0.015450563, + 0.014764735, + -0.018620905, + 0.0010384487, + -0.011898487, + 0.01366482, + -0.008139367, + -0.018659726, + -0.03871699, + -0.029891795, + -0.0028565426, + 0.017158667, + -0.004260551, + 0.026035624, + -0.0045937607, + 0.0068906406, + -0.011963188, + 0.0023098204, + -0.022412375, + -0.012060239, + -0.01441535, + -0.012681367, + 0.021519504, + 0.010520359, + 0.008935188, + 0.0019151452, + 0.0070200423, + 0.009724538, + 0.0039273417, + 0.0085146325, + -0.016239913, + -0.0073758974, + 0.0008872104, + 0.016188154, + 0.010403897, + 0.008669915, + 0.010733872, + 0.012713717, + 0.008728145, + 0.036931247, + -0.017922137, + -0.0110250255, + -0.019552598, + -0.032324545, + 0.013781281, + -0.014285948, + -0.017378649, + -0.0008221052, + -0.0053604655, + -0.000670867, + 0.005454282, + 0.0033547392, + 0.0011872606, + -0.016343435, + 0.036206596, + 0.0006227457, + 0.033722084, + -0.019707879, + 0.01441535, + 0.0075829397, + -0.019863162, + -0.014764735, + -0.0065380214, + -0.004344662, + 0.0041635, + 0.018931469, + 0.008967538, + -0.020303128, + 0.0007489124, + -0.008087606, + 0.013354256, + 0.0043964228, + -0.016356375, + -0.021830067, + -0.030927008, + -0.017210428, + -0.017365709, + -0.032143384, + 0.012571376, + -0.004402893, + -0.045471758, + 0.010552709, + 0.007136504, + -0.035430185, + -0.009996282, + -0.010830923, + 0.026165025, + 0.012978991, + 0.0032835682, + 0.017106906, + -0.010319786, + 0.0036103076, + -0.023978136, + -0.027795486, + 0.00456788, + 0.026734393, + 0.03737121, + -0.028494256, + 0.027303759, + 0.010073923, + -0.015411743, + 0.0009624252, + -0.025530957, + -0.00835288, + -0.007822333, + 0.017042205, + -0.025919162, + 0.011225598, + -0.011613803, + 0.0046714013, + -0.011050906, + -0.019086752, + 0.02120894, + -0.003788235, + -0.002358346, + 0.020160785, + -0.0438413, + 0.03258335, + 0.021687726, + 0.00911635, + -0.019565538, + 0.0020639573, + -0.003642658, + 0.0013465865, + -0.0009041944, + 0.017275129, + -0.00454847, + 0.009659837, + 0.0063406834, + 0.011911427, + -0.022334734, + -0.013354256, + 0.0005232681, + 0.026385007, + -0.018517384, + 0.0066447775, + -0.009672778, + 0.017986838, + 0.048189197, + -0.014182427, + -0.0044417134, + -0.0016708996, + -0.02355111, + 0.0037526495, + 0.003720299, + -0.016175212, + -0.00014274626, + 0.02129952, + -0.017689213, + -0.008909307, + -0.013858923, + -0.011989068, + 0.004474064, + -0.019358495, + -0.02199829, + -0.010086863, + 0.0142083075, + 0.009633957, + 0.004855799, + -0.021040717, + 0.00906459, + -0.008443461, + -0.02494865, + 0.035093743, + -0.0069359313, + 0.007667051, + -0.014868256, + 0.021428922, + -0.0076799914, + -0.023085264, + 0.04404834, + 0.0065768417, + -0.029011862, + -0.013910683, + 0.016796341, + -0.012972521, + 0.0029180085, + -0.013231324, + -0.0015689956, + -0.006677128, + 0.012325512, + -0.001672517, + 0.0044546537, + 0.0034776707, + -0.012733128, + 0.0047619827, + 0.0027869893, + -0.0049043247, + 0.02114424, + -0.0004650374, + 0.007751162, + 0.018245641, + -0.024379281, + -0.014855316, + -0.012810769, + 0.007518239, + -0.0084564015, + -0.006922991, + -0.010805042, + -0.0054995725, + -0.0052116537, + -0.007738222, + -0.004655226, + -0.004014688, + 0.007447068, + 0.02503923, + -0.00015700066, + 0.027148478, + -0.011037965, + 0.005017551, + -0.018491503, + -0.04026981, + -0.03721593, + -0.007207675, + 0.007000632, + 0.0034582606, + 0.009808649, + -0.044565946, + -0.03405853, + 0.020380769, + -0.002689938, + -0.02048429, + 0.025207452, + 0.007964675, + 0.030202357, + -0.0056580896, + -0.024676906, + 0.03263511, + 0.008081136, + -0.006961812, + -0.019966682, + -0.011102666, + 0.0030797606, + -0.024806308, + 0.00606247, + 0.0038497008, + -0.0074988287, + -0.030098837, + 0.042210836, + 0.0031881344, + -0.013910683, + -0.019177333, + 0.0018763248, + 0.0010344048, + 0.0024634849, + 0.014078906, + 0.039648682, + 0.01744335, + -0.012448444, + -0.02052311, + -0.00058271206, + 0.0056030937, + 0.033980887, + -0.016369315, + -0.0035973673, + 0.009336333, + -0.012241402, + -0.011665564, + -0.014842375, + 0.00986688, + 0.013975384, + 0.025065111, + 0.011710854, + -0.014298889, + 0.008281709, + 0.018491503, + -0.007712342, + -0.027096717, + -0.012480794, + -0.017766854, + -0.032764513, + -0.02582858, + 0.014518871, + -0.021066597, + 0.0048202137, + -0.009756888, + -0.006288923, + -0.013380136, + -0.031004649, + -0.02743316, + -0.010242145, + -0.009401034, + 0.01891853, + 0.019190272, + -0.0030393226, + 0.008249358, + -0.032039862, + -0.020096084, + -0.018789127, + -0.015411743, + -0.01371658, + -0.04459183, + -0.014687094, + 0.0060980553, + -0.012196111, + -0.01515294, + 0.0024133418, + 0.007343547, + 0.025142752, + 0.022826461, + 0.23830618, + 0.0027449336, + -0.0038464656, + 0.029814152, + 0.0019572007, + 0.032945674, + 0.028338974, + 0.004490239, + 0.029193025, + 0.04707634, + -0.0068647605, + 0.003869111, + 0.0036264828, + 0.006974752, + 0.01965612, + -0.011982598, + -0.047024578, + -0.015748188, + -0.008113487, + 0.018543264, + 0.014078906, + 0.00759588, + 0.0093492735, + -0.0057486705, + 0.026294427, + 0.010973264, + -0.0060948203, + 0.00028124652, + 0.0006882553, + 0.0050466666, + 0.0014218013, + -0.017948017, + 0.0050434317, + 0.004389953, + -0.000111103494, + -0.0033806195, + -0.011814375, + -0.004639051, + 0.03273863, + 0.023732273, + 0.0105268285, + -0.0125907855, + -0.041434426, + -0.0070718033, + -0.0036717735, + 0.008210538, + -0.01890559, + 0.0015277489, + 0.02045841, + 0.0027724316, + -0.020005504, + -0.006327743, + 0.017003383, + 0.027950767, + -0.0020186666, + 0.019099692, + 0.016472837, + -0.021079538, + 0.018491503, + -0.0033320938, + -0.018387983, + 0.038354665, + -0.01444123, + 0.010824453, + 0.0060074744, + -0.011296769, + 0.0018569145, + -0.002000874, + 0.032479826, + -0.016861042, + 0.021027777, + 0.017016325, + 0.00170325, + 0.0070718033, + 0.016576359, + -0.006159521, + 0.020393709, + -0.0101321535, + 0.018620905, + -0.0005256944, + -0.0002980283, + -0.025414495, + -0.026294427, + 0.025634477, + -0.005528688, + -0.019345555, + 0.008721675, + -0.004389953, + 0.022955863, + -0.007925854, + -0.002916391, + 0.017365709, + -0.0039952775, + 0.014273008, + 0.015722306, + 0.016628118, + 0.0019636708, + 0.01586465, + -0.020212546, + 0.0048105083, + -0.02808017, + 0.005389581, + -0.008327, + 0.0052828244, + -0.021674786, + 0.017184546, + -0.013218384, + -0.0066383076, + 0.013302496, + 0.00023393401, + -0.003108876, + -0.013470718, + 0.011199717, + -0.021066597, + 0.019280855, + 0.007880564, + 0.0038529357, + -0.012597256, + -0.0227747, + -0.009511026, + -0.00913576, + -0.02743316, + -0.0156058455, + 0.009316923, + 0.0007266714, + -0.018064478, + 0.005897483, + 0.015062358, + 0.008948128, + -0.034317333, + 0.015463504, + -0.020665452, + 0.023253486, + -0.016058752, + -0.007997026, + 0.010067453, + -0.0034388504, + -0.011212658, + 0.008449932, + -0.000091642694, + -0.0069424016, + -0.0095174955, + 0.011329119, + -0.018167999, + 0.0075635295, + -0.0077641024, + -0.019565538, + -0.023369947, + -0.014091846, + -0.023149965, + -0.0051307776, + -0.0024101068, + -0.0048913844, + -0.005302235, + 0.0061271708, + -0.005444577, + 0.00906459, + -0.02278764, + 0.0003433189, + 0.021403043, + -0.0025217158, + 0.004344662, + 0.013250735, + -0.0039014614, + -0.022813521, + 0.01603287, + -0.16356376, + 0.022554718, + 0.018387983, + -0.0018536794, + -0.0009373536, + 0.010817982, + 0.014661213, + 0.038949914, + -0.019707879, + 0.025246272, + 0.010999145, + -0.011367939, + -0.027769607, + -0.01890559, + 0.004477299, + 0.013897743, + -0.006897111, + 0.0027805192, + 0.012416094, + 0.017236307, + 0.009672778, + -0.024832187, + 0.004085859, + 0.013263674, + 0.008475812, + -0.010921504, + -0.026993196, + 0.026708512, + 0.016162273, + 0.0020186666, + -0.008941658, + -0.00571632, + 0.010824453, + 0.0035326665, + 0.0049916706, + 0.013457777, + 0.0036038375, + 0.003788235, + -0.012616666, + -0.005687205, + -0.00841111, + 0.024146358, + -0.00571632, + 0.01821976, + -0.014234188, + -0.00050062285, + 0.029943554, + 0.016925743, + 0.0009737478, + -0.020406649, + 0.010313316, + -0.03046116, + -0.0061045256, + -0.002875953, + 0.011012085, + 0.014932957, + 0.03335976, + 0.008385231, + 0.004771688, + 0.012733128, + 0.017986838, + -0.035714872, + 0.007647641, + 0.004609936, + 0.0142083075, + -0.013153683, + 0.007673521, + 0.0047425725, + -0.012759008, + -0.004859034, + -0.014570632, + -0.011691444, + 0.021079538, + -0.01371658, + 0.006813, + 0.030150598, + -0.012319042, + -0.014182427, + 0.0046681664, + 0.012959581, + -0.0058295466, + 0.0394934, + -0.0154376235, + -0.003196222, + 0.0085146325, + 0.0020623396, + -0.01906087, + -0.0030182947, + -0.032298665, + -0.0079582045, + 0.01215082, + -0.03346328, + 0.0030328524, + -0.029814152, + 0.02193359, + 0.011102666, + -0.008553453, + -0.005020786, + 0.007162384, + -0.0154893845, + 0.006690068, + -0.016265795, + -0.013845982, + 0.017262187, + 0.028571896, + 0.0064053843, + -0.01811624, + 0.016912803, + 0.03423969, + 0.0052342988, + -0.016912803, + 0.024780426, + 0.01220258, + 0.030176478, + 0.024081657, + 0.011697914, + 0.0049754954, + -0.02952947, + 0.00042015116, + 0.017210428, + 0.038949914, + -0.008145837, + -0.030512922, + 0.022929981, + -0.007130034, + -0.009769829, + -0.10212383, + 0.009841, + 0.012500205, + 0.014273008, + 0.0032560704, + 0.019410256, + 0.009433384, + 0.021726547, + 0.00757, + 0.03568899, + -0.0010578589, + -0.013418957, + -0.0050499015, + 0.009038709, + -0.011290299, + -0.014803555, + -0.008974008, + -0.027226118, + -0.021778308, + 0.012836649, + 0.0009915406, + -0.022981742, + 0.004102034, + -0.0073758974, + 0.012765478, + -0.011704384, + -0.02808017, + 0.008003496, + 0.01666694, + 0.011581453, + 0.019474957, + -0.014130666, + -0.01603287, + -0.0035294315, + -0.01366482, + -0.008993419, + -0.01752099, + -0.032013983, + 0.012778418, + -0.045627043, + 0.009316923, + 0.005451047, + 0.002000874, + -0.047412783, + 0.0005968654, + -0.003568252, + -0.02268412, + 0.0038205853, + -0.0015350278, + -0.009310452, + 0.012002008, + 0.013535419, + -0.006677128, + -0.01140029, + 0.045989364, + -0.004205555, + 0.011633214, + 0.030719966, + -0.00837229, + -0.0033288589, + -0.0020380768, + 0.017999778, + 0.0067288885, + 0.028649537, + 0.0013740844, + -0.01827152, + -0.028364854, + 0.0013069572, + 0.019306734, + -0.036775965, + -0.0042087906, + 0.0068712304, + -0.023512289, + 0.0109150335, + -0.02122188, + 0.00030106117, + -0.0228394, + -0.0062759826, + 0.023434648, + -0.007447068, + -0.02968475, + -0.029296545, + -0.004412598, + -0.006146581, + 0.011335589, + 0.027691964, + -0.023253486, + 0.0020041089, + 0.0052828244, + -0.008605214, + 0.0011541015, + 0.052821778, + 0.015204701, + -0.030538803, + 0.0015131911, + 0.011329119, + -0.0003821394, + 0.00026385815, + 0.010293906, + -0.0089610685, + -0.024055777, + -0.0014412114, + -0.051165435, + 0.017909195, + -0.003632953, + -0.022205332, + 0.0068259398, + 0.008831667, + 0.012875469, + -0.020096084, + -0.006324508, + 0.013833042, + -0.019462017, + 0.0062533375, + -0.015722306, + -0.0019410256, + 0.0011904957, + 0.019358495, + 0.029348306, + 0.006651248, + 0.009174581, + -0.012021419, + -0.007453538, + 0.008132897, + 0.0125325555, + 0.013004871, + -0.019850222, + 0.01436359, + -0.017896255, + -0.014803555, + -0.02494865, + -0.012196111, + 0.031651657, + -0.0071688546, + 0.011574983, + 0.047179863, + -0.022218272, + -0.019992564, + -0.020587811, + 0.035404306, + 0.021610085, + -0.029917674, + -0.017805675, + -0.029374188, + -0.00052933383, + -0.022502957, + 0.004037333, + 0.03423969, + 0.010462128, + -0.010151564, + 0.016809281, + -0.008838137, + 0.016226973, + 0.028934222, + 0.017624512, + -0.012377273, + -0.015851708, + -0.0061174654, + 0.022929981, + -0.009562786, + 0.008217008, + -0.025660358, + 0.0019992564, + 0.005059607, + 0.022619419, + 0.009653367, + 0.010798573, + 0.0060462947, + 0.015579965, + 0.0045387647, + 0.0041343844, + 0.00032754807, + -0.023227606, + 0.009569256, + 0.022606477, + -0.0020170491, + 0.018866768, + -0.014014205, + -0.0069359313, + 0.005975124, + -0.014583572, + 0.019940803, + 0.007304726, + -0.008799316, + -0.021648906, + 0.010073923, + 0.043323692, + -0.0100803925, + -0.032039862, + 0.015476444, + -0.005693675, + -0.0059298333, + -0.03038352, + 0.0051728333, + -0.021131298, + -0.0024084894, + -0.0005022404, + -0.010319786, + -0.017663334, + -0.0011775555, + 0.010824453, + 0.03719005, + 0.0006716757, + -0.009970401, + 0.0009041944, + -0.036646564, + -0.017236307, + 0.020743093, + -0.01441535, + -0.018090358, + -0.02127364, + 0.01673164, + 0.0017081025, + 0.004037333, + -0.0069294614, + 0.010397427, + -0.0035035512, + 0.013406017, + -0.028157812, + -0.020846615, + -0.022619419, + 0.016058752, + 0.013897743, + 0.010274495, + 0.001939408, + 0.011555572, + 0.028701298, + 0.024883948, + 0.029141264, + -0.019254973, + 0.009808649, + 0.021648906, + 0.010093333, + -0.010966795, + 0.008449932, + -0.0061692265, + -0.01827152, + -0.022347674, + -0.0022386494, + 0.021532444, + -0.0040114527, + 0.059680067, + 0.00533135, + -0.009989812, + 0.028390734, + -0.0008010774, + 0.0020801325, + 0.024016956, + -0.0064377347, + -0.0046843416, + -0.020872494, + -0.004250846, + 0.010753281, + 0.026242666, + -0.004736102, + -0.014945897, + 0.0066447775, + -0.036284238, + 0.021687726, + -0.033670325, + -0.0037364743, + 0.006586547, + -0.017948017, + 0.01590347, + 0.0029066857, + -0.026837913, + -0.010287436, + 0.009569256, + -0.0020801325, + -0.0066835983, + -0.024793366, + 0.023214666, + -0.016899863, + -0.038820513, + -0.0100803925, + -0.0028516902, + -0.023033503, + -0.025543896, + -0.019138511, + -0.00007218189, + 0.0039920425, + 0.00161833, + 0.00091389957, + -0.032298665, + 0.0037300042, + -0.0062371623, + -0.0058004316, + -0.01604581, + 0.0069359313, + -0.03030588 ] } ], "model": "text-embedding-ada-002-v2", "usage": { - "prompt_tokens": 12, - "total_tokens": 12 + "prompt_tokens": 18, + "total_tokens": 18 } } -1725 1606 +1808 1689 POST https://api.openai.com/v1/chat/completions HTTP/1.1 Host: api.openai.com -User-Agent: langchaingo-httprr -Content-Length: 1521 +User-Agent: langchaingo-httprr +Content-Length: 1605 Authorization: Bearer test-api-key Content-Type: application/json -{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:a8e98e8e-f54b-4ca6-be29-0ce9b9788a7c\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:62641a9e-76b9-4de8-a2d7-90dfc10a5599\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:fb0c8fe3-b926-447e-a1c5-cadccbd9cf8d\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the house is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:670985af-d931-4812-89c8-ea35dc0f9be8\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors is each piece of furniture next to the desk?\nHelpful Answer:"}],"temperature":0}HTTP/2.0 200 OK -Content-Length: 884 +{"model":"gpt-4.1-nano","messages":[{"role":"user","content":"Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the chair beside the desk is beige.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:chair\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003echair\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the desk is orange.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:desk\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003edesk\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the lamp beside the desk is black.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:lamp\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003elamp\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\n\n\u003cdocument\u003e\n\u003ccontent\u003eThe color of the house is blue.\u003c/content\u003e\n\n\u003cmetadata\u003e\n\n\u003ckv key=\"id\"\u003edoc:test_redis_vector_as_retriever:house\u003c/kv\u003e\n\n\u003ckv key=\"ids\"\u003ehouse\u003c/kv\u003e\n\n\u003c/metadata\u003e\n\n\u003c/document\u003e\n\n\nQuestion: What colors are all of the pieces of furniture next to the desk and the desk itself?\nHelpful Answer:"}]}HTTP/2.0 200 OK +Content-Length: 864 Access-Control-Expose-Headers: X-Request-ID +Access-Control-Expose-Headers: CF-Ray +Access-Control-Expose-Headers: CF-Ray Alt-Svc: h3=":443"; ma=86400 Cf-Cache-Status: DYNAMIC Content-Type: application/json -Date: Sat, 21 Jun 2025 17:14:16 GMT +Date: Wed, 23 Sep 2026 09:28:40 GMT Openai-Organization: lcgo-tst -Openai-Processing-Ms: 159 +Openai-Processing-Ms: 600 +Openai-Project: proj_lcgo-tst Openai-Version: 2020-10-01 Server: cloudflare Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff -X-Envoy-Upstream-Service-Time: 181 -X-Ratelimit-Limit-Requests: 10000 -X-Ratelimit-Limit-Tokens: 10000000 -X-Ratelimit-Remaining-Requests: 9999 -X-Ratelimit-Remaining-Tokens: 9999734 -X-Ratelimit-Reset-Requests: 6ms -X-Ratelimit-Reset-Tokens: 1ms -X-Request-Id: req_5f33061040abc8cd66ac10e78d4cb770 +X-Openai-Proxy-Wasm: v0.1 +X-Ratelimit-Limit-Requests: 30000 +X-Ratelimit-Limit-Tokens: 150000000 +X-Ratelimit-Remaining-Requests: 29999 +X-Ratelimit-Remaining-Tokens: 149999732 +X-Ratelimit-Reset-Requests: 2ms +X-Ratelimit-Reset-Tokens: 0s +X-Request-Id: req_e9b7cfd75711460dac7358c4d219b256 { - "id": "chatcmpl-Bkw5AVKFLxpgYG3Xgr5BckvCnbqh0", + "id": "chatcmpl-ERDZHyI9TV76TTWCcS7IMnPgZf7Bo", "object": "chat.completion", - "created": 1750526056, + "created": 1790155719, "model": "gpt-4.1-nano-2025-04-14", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "The chair beside the desk is beige, and the lamp beside the desk is black.", + "content": "The desk is orange, and the chair next to it is beige.", "refusal": null, "annotations": [] }, @@ -11037,9 +11055,9 @@ X-Request-Id: req_5f33061040abc8cd66ac10e78d4cb770 } ], "usage": { - "prompt_tokens": 332, - "completion_tokens": 17, - "total_tokens": 349, + "prompt_tokens": 288, + "completion_tokens": 14, + "total_tokens": 302, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 @@ -11052,5 +11070,5 @@ X-Request-Id: req_5f33061040abc8cd66ac10e78d4cb770 } }, "service_tier": "default", - "system_fingerprint": "fp_38343a2f8f" + "system_fingerprint": "fp_6afed20c8d" } From 25e16cadb5cf6e5342c0cfa11aa9dc01244371fb Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Wed, 23 Sep 2026 18:14:17 +0300 Subject: [PATCH 616/618] feat(tests): add lateBodyTransport to handle request body reading in RoundTrip and implement TestRecordLeavesTheTransportItsOwnBody to ensure body integrity during transport --- internal/httprr/rr.go | 15 +++++++++- internal/httprr/rr_test.go | 53 +++++++++++++++++++++++++++++++++ internal/httprr/rr_unit_test.go | 2 +- llms/googleai/llmtest_test.go | 2 +- 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/internal/httprr/rr.go b/internal/httprr/rr.go index 01d49cf45..3716c5fa2 100644 --- a/internal/httprr/rr.go +++ b/internal/httprr/rr.go @@ -474,7 +474,20 @@ func (rr *RecordReplay) RoundTrip(req *http.Request) (*http.Response, error) { if rr.real == nil { return nil, fmt.Errorf("httprr: no transport configured") } - resp, err := rr.real.RoundTrip(req) + // The transport may still read the request body after RoundTrip returns: + // when the response comes first, RoundTrip ends while the transport's write + // loop reads the body on. Give it a body of its own, so rereading req below + // for the recording does not race with that read. The shallow copy shares + // the header map and the URL, so what the transport adds there in place is + // recorded; a field it reassigns on its own copy is not, as in replay. + realReq := req + if body, ok := req.Body.(*Body); ok { + data := body.Data + realReq = req.WithContext(req.Context()) + realReq.Body = &Body{Data: data} + realReq.GetBody = func() (io.ReadCloser, error) { return &Body{Data: data}, nil } + } + resp, err := rr.real.RoundTrip(realReq) if err != nil { return nil, err } diff --git a/internal/httprr/rr_test.go b/internal/httprr/rr_test.go index 7a3eb32fc..38517b21f 100644 --- a/internal/httprr/rr_test.go +++ b/internal/httprr/rr_test.go @@ -75,6 +75,59 @@ func doRefresh(b *bytes.Buffer) error { return nil } +// lateBodyTransport answers at once and leaves the request body to be read +// afterwards, as net/http's transport does when the response arrives before its +// write loop has sent the whole body. +type lateBodyTransport struct { + body chan io.ReadCloser +} + +func (l lateBodyTransport) RoundTrip(req *http.Request) (*http.Response, error) { + l.body <- req.Body + return &http.Response{ + StatusCode: http.StatusOK, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: http.Header{}, + Body: io.NopCloser(strings.NewReader("early")), + Request: req, + }, nil +} + +// TestRecordLeavesTheTransportItsOwnBody pins that recording never touches the +// body the transport may still be sending after RoundTrip returns. The recorder +// used to reread that same body for the cassette, which raced with the +// transport's write loop under -race and left it a drained body. +func TestRecordLeavesTheTransportItsOwnBody(t *testing.T) { + t.Parallel() + + transport := lateBodyTransport{body: make(chan io.ReadCloser, 1)} + rr, err := create(t.TempDir()+"/rr", transport) + if err != nil { + t.Fatal(err) + } + defer rr.Close() + + req, err := http.NewRequestWithContext(t.Context(), http.MethodPost, "http://example.invalid/", strings.NewReader("payload")) + if err != nil { + t.Fatal(err) + } + resp, err := rr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + + sent, err := io.ReadAll(<-transport.body) + if err != nil { + t.Fatal(err) + } + if string(sent) != "payload" { + t.Fatalf("transport sent %q, want %q", sent, "payload") + } +} + func TestRecordReplay(t *testing.T) { t.Parallel() dir := t.TempDir() diff --git a/internal/httprr/rr_unit_test.go b/internal/httprr/rr_unit_test.go index 8fb6aa3ef..42a6f5b96 100644 --- a/internal/httprr/rr_unit_test.go +++ b/internal/httprr/rr_unit_test.go @@ -159,7 +159,7 @@ func TestScrubReqResp(t *testing.T) { } func TestRecordingFlag(t *testing.T) { - t.Parallel() + // Cannot run in parallel because it modifies global record flag tests := []struct { name string diff --git a/llms/googleai/llmtest_test.go b/llms/googleai/llmtest_test.go index 1f77d536d..aa9a14f14 100644 --- a/llms/googleai/llmtest_test.go +++ b/llms/googleai/llmtest_test.go @@ -17,7 +17,7 @@ func TestLLM(t *testing.T) { ctx := context.Background() llm, err := New(ctx, WithAPIKey(os.Getenv("GOOGLE_API_KEY")), - WithDefaultModel("gemini-3.8-flash"), + WithDefaultModel("gemini-3.5-flash"), ) if err != nil { t.Fatalf("Failed to create Google AI LLM: %v", err) From e4b60959fe4ce70981e69892e2d72f292dac1846 Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Thu, 24 Sep 2026 20:45:18 +0300 Subject: [PATCH 617/618] feat(ollama): implement structured output fallback for cloud models - Added `WithCloudStructuredOutputFallback()` option to allow schema-constrained output for Ollama Cloud, which ignores the format field. - Updated `GenerateContent` to inject schema instructions into user messages when using the fallback. - Enhanced validation logic to ensure responses conform to the provided schema, with local validation for cloud responses. - Introduced tests for structured output fallback scenarios, including both streaming and non-streaming cases. - Updated documentation to reflect changes in handling structured outputs for cloud models. --- .../models/llms/Integrations/ollama.mdx | 5 +- llms/ollama/README.md | 5 +- llms/ollama/ollama_cloud_test.go | 61 +- llms/ollama/ollama_test.go | 55 ++ llms/ollama/ollamallm.go | 115 +++- llms/ollama/options.go | 44 +- llms/ollama/partial_stream_test.go | 87 +++ .../ollama/structured_output_fallback_test.go | 562 ++++++++++++++++++ ...ucturedOutputFallback-non-streaming.httprr | 24 + ...dStructuredOutputFallback-streaming.httprr | 69 +++ llms/ollama/warnings.go | 17 +- llms/ollama/warnings_test.go | 27 +- 12 files changed, 1040 insertions(+), 31 deletions(-) create mode 100644 llms/ollama/structured_output_fallback_test.go create mode 100644 llms/ollama/testdata/TestCloudStructuredOutputFallback-non-streaming.httprr create mode 100644 llms/ollama/testdata/TestCloudStructuredOutputFallback-streaming.httprr diff --git a/docs/docs/modules/model_io/models/llms/Integrations/ollama.mdx b/docs/docs/modules/model_io/models/llms/Integrations/ollama.mdx index 8906cd825..7d3f32535 100644 --- a/docs/docs/modules/model_io/models/llms/Integrations/ollama.mdx +++ b/docs/docs/modules/model_io/models/llms/Integrations/ollama.mdx @@ -28,7 +28,10 @@ llm, err = ollama.New( ``` Ollama supports schema-constrained output through its native `format` field, wired -up by the provider-neutral `llms.WithStructuredOutput` option. +up by the provider-neutral `llms.WithStructuredOutput` option. Ollama Cloud ignores +that field, so a schema there is refused unless the client sets +`ollama.WithCloudStructuredOutputFallback()`: the schema then travels in the prompt +and the answer is validated locally. For a full walkthrough, see the [Ollama quickstart](/docs/getting-started/guide-ollama). diff --git a/llms/ollama/README.md b/llms/ollama/README.md index 2833f734c..dcc13782a 100644 --- a/llms/ollama/README.md +++ b/llms/ollama/README.md @@ -582,7 +582,8 @@ HTTPRR_RECORD=. HTTPRR_DEBUG=true go test -v -run TestCloud - Cloud model generation - Cloud streaming - Cloud tool calling - - Cloud JSON mode is dropped with a warning; a schema is refused before the request + - Cloud JSON mode is dropped with a warning; a schema is refused before the request, unless + `WithCloudStructuredOutputFallback()` moves it into the prompt (recorded against gpt-oss:120b) - Various options (temperature, seed) - Uses `httprr.SkipIfNoCredentialsAndRecordingMissing("OLLAMA_API_KEY")` to skip when no credentials @@ -962,7 +963,7 @@ Models ending in `-cloud` are automatically routed to Ollama's cloud infrastruct | Reasoning | ✅ | ✅ | DeepSeek R1, QwQ, etc. | | Vision (Images) | ✅ | ❌ | llama3.2-vision, etc. | | JSON Mode | ✅ | ❌ | Cloud (ollama.com, or a `-cloud` model on a local server): dropped with a warning — Ollama Cloud does not support structured outputs | -| Structured Output (JSON Schema) | ✅ | ❌ | Cloud: `ErrStructuredOutputUnsupported` before the request | +| Structured Output (JSON Schema) | ✅ | ❌ | Cloud: `ErrStructuredOutputUnsupported` before the request; with `WithCloudStructuredOutputFallback()` the schema is appended to the last user message, a `WarningSubstitute` is reported, a single ```` ```json ```` or ```` ``` ```` fence around the whole answer is removed from the final content (streamed chunks still carry it) and the answer is validated locally (`ErrStructuredOutputValidation` on mismatch) | | Embeddings | ✅ | ❌ | nomic-embed-text, etc. | | Auto Model Pull | ✅ | ❌ | Local only | | Custom Templates | ✅ | ❌ | Local only | diff --git a/llms/ollama/ollama_cloud_test.go b/llms/ollama/ollama_cloud_test.go index 3aa7362ec..a55536c81 100644 --- a/llms/ollama/ollama_cloud_test.go +++ b/llms/ollama/ollama_cloud_test.go @@ -36,7 +36,7 @@ func (t *removeTimestampTransport) RoundTrip(req *http.Request) (*http.Response, } // newCloudTestClient creates a test client configured for Ollama Cloud -func newCloudTestClient(t *testing.T) *LLM { +func newCloudTestClient(t *testing.T, extra ...Option) *LLM { t.Helper() // Check for required credentials and skip if not available @@ -90,12 +90,12 @@ func newCloudTestClient(t *testing.T) *LLM { cloudModel = envModel } - opts := []Option{ + opts := append([]Option{ WithServerURL(serverURL), WithAPIKey(apiKey), WithHTTPClient(wrappedClient), WithModel(cloudModel), - } + }, extra...) c, err := New(opts...) require.NoError(t, err) @@ -324,6 +324,61 @@ func TestCloudRefusesAStructuredOutputSchema(t *testing.T) { } } +func TestCloudStructuredOutputFallback(t *testing.T) { + schema := json.RawMessage(`{"type":"object","properties":{` + + `"city":{"type":"string"},` + + `"population_millions":{"type":"number"},` + + `"landmarks":{"type":"array","minItems":2,"maxItems":3,"items":{"type":"object","properties":{` + + `"name":{"type":"string"},"kind":{"type":"string","enum":["museum","monument","park","church","other"]}},` + + `"required":["name","kind"],"additionalProperties":false}}},` + + `"required":["city","population_millions","landmarks"],"additionalProperties":false}`) + + for _, stream := range []bool{false, true} { + name := "non-streaming" + if stream { + name = "streaming" + } + t.Run(name, func(t *testing.T) { + llm := newCloudTestClient(t, WithCloudStructuredOutputFallback()) + + opts := []llms.CallOption{llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "city", Schema: schema})} + var streamed strings.Builder + if stream { + opts = append(opts, llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + streamed.WriteString(chunk.Content) + } + return nil + })) + } + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeSystem, "You are a travel guide. Answer in Markdown with headings."), + llms.TextParts(llms.ChatMessageTypeHuman, "Describe Paris briefly."), + }, opts...) + require.NoError(t, err, "the answer must validate against the schema") + require.Len(t, resp.Choices, 1) + + var answer struct { + City string `json:"city"` + Landmarks []struct { + Name string `json:"name"` + } `json:"landmarks"` + } + require.NoError(t, json.Unmarshal([]byte(resp.Choices[0].Content), &answer)) + assert.Equal(t, "Paris", answer.City) + assert.NotEmpty(t, answer.Landmarks) + if stream { + assert.Equal(t, resp.Choices[0].Content, unwrapFencedJSON(strings.TrimSpace(streamed.String()))) + } + + require.Len(t, resp.Warnings, 1) + assert.Equal(t, llms.WarningSubstitute, resp.Warnings[0].Kind) + assert.Equal(t, "WithStructuredOutput", resp.Warnings[0].Option) + }) + } +} + func TestCloudWithOptions(t *testing.T) { ctx := context.Background() diff --git a/llms/ollama/ollama_test.go b/llms/ollama/ollama_test.go index 0c7ac3b92..db77d52ca 100644 --- a/llms/ollama/ollama_test.go +++ b/llms/ollama/ollama_test.go @@ -578,6 +578,15 @@ func TestValidateStructuredOutput(t *testing.T) { require.NoError(t, llm.validateStructuredOutput(opts, mk(`{"answer":`, "length"))) }) + t.Run("a load or unload with no answer fails the schema", func(t *testing.T) { + t.Parallel() + for _, reason := range []string{"load", "unload"} { + var ve *llms.ErrStructuredOutputValidation + require.ErrorAs(t, llm.validateStructuredOutput(opts, mk("", reason)), &ve, reason) + assert.Equal(t, reason, ve.StopReason) + } + }) + t.Run("no schema is a no-op", func(t *testing.T) { t.Parallel() require.NoError(t, llm.validateStructuredOutput(applyOpts(), mk(`not json`, "stop"))) @@ -650,3 +659,49 @@ func TestTheCloudDropWarningReachesTheResponse(t *testing.T) { assert.Equal(t, want, drops, model) } } + +func TestALoadOnlyAnswerToASchemaRequestIsNotASuccess(t *testing.T) { + t.Parallel() + + schema := llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "answer", Schema: json.RawMessage(ollamaSOSchema)}) + for _, tc := range []struct { + name string + messages []llms.MessageContent + opts []llms.CallOption + fails bool + }{ + { + name: "a schema request the server only loaded the model for", + messages: []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, + opts: []llms.CallOption{schema}, + fails: true, + }, + {name: "a request without messages still just loads the model", opts: []llms.CallOption{schema}}, + {name: "a request without a schema is left as it was", messages: []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + _, _ = io.WriteString(w, `{"model":"llama3","message":{"role":"assistant","content":""},`+ + `"done":true,"done_reason":"load"}`+"\n") + })) + t.Cleanup(srv.Close) + llm, err := New(WithServerURL(srv.URL), WithModel("llama3")) + require.NoError(t, err) + + resp, err := llm.GenerateContent(t.Context(), tc.messages, tc.opts...) + require.NotNil(t, resp, "the response comes back either way") + assert.Equal(t, "load", resp.Choices[0].StopReason) + if !tc.fails { + require.NoError(t, err) + return + } + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + assert.Equal(t, "load", validation.StopReason) + }) + } +} diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index c4f8293c7..9bcb926b2 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -158,11 +158,15 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten if err != nil { return nil, err } + emulated := o.emulatesStructuredOutput(model, opts) + if emulated { + req.Messages = injectStructuredOutputPrompt(req.Messages, opts.StructuredOutput.Schema, len(opts.Tools) > 0) + } warn := &llms.Warnings{} reportOllamaOptions(warn, model, opts) if o.servesCloud(model) { - reportOllamaCloudFormat(warn, model, opts, o.options.format) + reportOllamaCloudFormat(warn, model, opts, o.options.format, emulated) } if err := o.processTools(req, opts.Tools); err != nil { @@ -181,15 +185,21 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten response = o.createContentResponse(resp) response.Warnings = warn.List() + if emulated { + unwrapFencedAnswers(response) + } if err = llms.CheckTruncation(response, opts); err != nil { return response, err } // When a schema was requested, validate the final response against it; the - // response is returned alongside the typed error so usage is preserved. - if err = o.validateStructuredOutput(opts, response); err != nil { - return response, err + // response is returned alongside the typed error so usage is preserved. A + // request without messages only loads the model and is left alone, as before. + if len(req.Messages) > 0 { + if err = o.validateStructuredOutput(opts, response); err != nil { + return response, err + } } return response, nil @@ -205,7 +215,7 @@ func (o *LLM) validateStructuredOutput(opts llms.CallOptions, resp *llms.Content } model := o.getModel(opts) for i, choice := range resp.Choices { - if choice.StopReason != "" && choice.StopReason != "stop" { + if choice.StopReason != "" && choice.StopReason != "stop" && !loadedOnly(choice.StopReason) { continue } // A tool-call turn is an intermediate step, not the final schema-typed @@ -220,6 +230,52 @@ func (o *LLM) validateStructuredOutput(opts llms.CallOptions, resp *llms.Content return nil } +// loadedOnly reports a done reason that says the server loaded or unloaded the +// model and generated nothing: no final answer, so a requested schema is not met. +func loadedOnly(doneReason string) bool { + return doneReason == "load" || doneReason == "unload" +} + +// unwrapFencedAnswers strips the Markdown code fence a model put around its whole +// answer despite the prompt instruction. It runs only for an emulated schema, +// where nothing on the server constrains the output. +func unwrapFencedAnswers(resp *llms.ContentResponse) { + for _, choice := range resp.Choices { + if len(choice.ToolCalls) == 0 && (choice.StopReason == "" || choice.StopReason == "stop") { + choice.Content = unwrapFencedJSON(choice.Content) + } + } +} + +// unwrapFencedJSON returns the body of a text that is exactly one Markdown code +// fence, untagged or tagged json. Anything else, such as prose around the fence +// or a second fence, is returned unchanged for validation to judge. +func unwrapFencedJSON(text string) string { + trimmed := strings.TrimSpace(text) + if len(trimmed) < 6 || !strings.HasPrefix(trimmed, "```") || !strings.HasSuffix(trimmed, "```") { + return text + } + header, body, ok := strings.Cut(trimmed[3:len(trimmed)-3], "\n") + if !ok || containsFenceLine(body) { + return text + } + if tag := strings.TrimSpace(header); tag != "" && !strings.EqualFold(tag, "json") { + return text + } + return strings.TrimSpace(body) +} + +// containsFenceLine reports a line that opens or closes a code fence. A JSON +// string cannot hold a raw newline, so backticks inside one never start a line. +func containsFenceLine(body string) bool { + for line := range strings.Lines(body) { + if strings.HasPrefix(strings.TrimSpace(line), "```") { + return true + } + } + return false +} + // getModel determines which model to use based on options and defaults. func (o *LLM) getModel(opts llms.CallOptions) string { if model := opts.GetModel(); model != "" { @@ -388,12 +444,17 @@ func (o *LLM) createChatRequest(model string, messages []api.Message, opts llms. // resolveFormat picks the Ollama `format` field. A per-call structured-output // schema is sent as the native JSON Schema (Ollama constrains generation to it); // otherwise the legacy string mode is preserved unchanged — the client-level -// format, or "json" for JSONMode. Ollama Cloud always gets the empty format. +// format, or "json" for JSONMode. Ollama Cloud always gets the empty format: it +// ignores the field, so a schema there is refused, unless +// WithCloudStructuredOutputFallback moves it into the prompt instead. func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { if so := opts.StructuredOutput; so != nil { if err := opts.ValidateStructuredOutput(); err != nil { return nil, err } + if o.emulatesStructuredOutput(o.getModel(opts), opts) { + return json.RawMessage(`""`), nil + } if o.servesCloud(o.getModel(opts)) { return nil, &llms.ErrStructuredOutputUnsupported{ Provider: providerOllama, @@ -415,6 +476,41 @@ func (o *LLM) resolveFormat(opts llms.CallOptions) (json.RawMessage, error) { const ollamaCloudFormatReason = "Ollama Cloud does not support structured outputs" +// emulatesStructuredOutput reports whether a structured-output call travels as a +// prompt instruction: the model runs on Ollama Cloud, which ignores the format +// field, and the client opted in with WithCloudStructuredOutputFallback. +func (o *LLM) emulatesStructuredOutput(model string, opts llms.CallOptions) bool { + return opts.StructuredOutput != nil && o.options.cloudStructuredOutputFallback && o.servesCloud(model) +} + +const ( + structuredOutputInstruction = "Reply with exactly one JSON value that validates against the JSON Schema below. " + + "This overrides any earlier instruction about format or style: no Markdown, no code fences, " + + "no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser." + structuredOutputToolsNote = "You may still call the tools you are offered; this applies to your final answer." +) + +// injectStructuredOutputPrompt appends the schema instruction to the last user +// message. Ollama Cloud does not answer a conversation without a user turn, so +// when there is none the instruction becomes that turn. +func injectStructuredOutputPrompt(messages []api.Message, schema json.RawMessage, withTools bool) []api.Message { + instruction := structuredOutputInstruction + if withTools { + instruction += " " + structuredOutputToolsNote + } + instruction += "\nJSON Schema:\n" + string(schema) + for i := len(messages) - 1; i >= 0; i-- { + if messages[i].Role == "user" { + if messages[i].Content != "" { + messages[i].Content += "\n\n" + } + messages[i].Content += instruction + return messages + } + } + return append(messages, api.Message{Role: "user", Content: instruction}) +} + // servesCloud reports whether the model runs on Ollama Cloud: reached at // ollama.com, or a cloud model a local server offloads, tagged "-cloud". func (o *LLM) servesCloud(model string) bool { @@ -457,6 +553,7 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca streamedResponse strings.Builder streamedThinking strings.Builder streamedToolCalls []api.ToolCall + finished bool ) splitter := reasoning.NewChunkContentSplitter() @@ -493,6 +590,7 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca streamedToolCalls = append(streamedToolCalls, response.Message.ToolCalls...) } + finished = finished || response.Done if req.Stream == nil || !*req.Stream || response.Done { resp = response resp.Message = api.Message{ @@ -506,7 +604,10 @@ func (o *LLM) handleChat(ctx context.Context, req *api.ChatRequest, opts llms.Ca } err := o.client.Chat(ctx, req, fn) - if err != nil { + // A stream the server closed without its final frame, as Ollama up to 0.34.0 + // does when it stops a model repeating itself, still delivered an answer: + // keep the text that arrived instead of an empty one. + if err != nil || !finished { resp.Message = api.Message{ Role: "assistant", Content: streamedResponse.String(), diff --git a/llms/ollama/options.go b/llms/ollama/options.go index 1995165a2..7b5a5c37f 100644 --- a/llms/ollama/options.go +++ b/llms/ollama/options.go @@ -10,18 +10,19 @@ import ( ) type options struct { - ollamaServerURL *url.URL - httpClient *http.Client - apiKey string - model string - ollamaOptions api.Options - pullProgressFunc api.PullProgressFunc - customModelTemplate string - system string - format string - keepAlive *time.Duration - pullModel bool - pullTimeout time.Duration + ollamaServerURL *url.URL + httpClient *http.Client + apiKey string + model string + ollamaOptions api.Options + pullProgressFunc api.PullProgressFunc + customModelTemplate string + system string + format string + cloudStructuredOutputFallback bool + keepAlive *time.Duration + pullModel bool + pullTimeout time.Duration } type Option func(*options) @@ -45,6 +46,25 @@ func WithFormat(format string) Option { } } +// WithCloudStructuredOutputFallback lets a llms.WithStructuredOutput call reach a +// model served by Ollama Cloud (ollama.com or *.ollama.com, or a model tagged +// "cloud" / "-cloud" on a local server), which ignores the format field. Instead +// of failing with [llms.ErrStructuredOutputUnsupported], the call appends the JSON +// Schema to the last user message (or adds a user message when there is none), +// sends an empty format and reports an [llms.WarningSubstitute]. The final answer +// is validated locally. A single Markdown code fence around the whole answer +// (```json or ```) is removed first, so the content holds the bare JSON; while +// streaming, the chunks still carry the fence. Any other answer that is not +// exactly one JSON value matching the schema, such as prose around it, comes back +// together with [llms.ErrStructuredOutputValidation]. A tool-call turn and a +// truncated answer are not validated (see [llms.WithFailOnTruncation]). Local +// models keep the native schema, and JSON mode alone is still dropped on the cloud. +func WithCloudStructuredOutputFallback() Option { + return func(opts *options) { + opts.cloudStructuredOutputFallback = true + } +} + // WithKeepAlive controls how long the model will stay loaded into memory following the request (default: 5m) // only supported by ollama v0.1.23 and later // diff --git a/llms/ollama/partial_stream_test.go b/llms/ollama/partial_stream_test.go index b959012f2..bcd81bbc7 100644 --- a/llms/ollama/partial_stream_test.go +++ b/llms/ollama/partial_stream_test.go @@ -2,10 +2,12 @@ package ollama import ( "context" + "encoding/json" "errors" "io" "net/http" "net/http/httptest" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -91,3 +93,88 @@ func TestABrokenStreamStillCarriesTheThinkingItDelivered(t *testing.T) { require.NotNil(t, resp.Choices[0].Reasoning) assert.Equal(t, "counting the free rooms", resp.Choices[0].Reasoning.Content) } + +// cutServer writes the given NDJSON lines and closes the response cleanly, +// without the final frame (done: true) that normally ends an answer. Ollama up +// to 0.34.0 ends a stream this way when it stops a model repeating itself. +func cutServer(t *testing.T, lines ...string) *LLM { + t.Helper() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = io.Copy(io.Discard, r.Body) + w.Header().Set("Content-Type", "application/x-ndjson") + for _, line := range lines { + _, _ = io.WriteString(w, line+"\n") + } + })) + t.Cleanup(srv.Close) + + llm, err := New(WithServerURL(srv.URL), WithModel("llama3")) + require.NoError(t, err) + return llm +} + +func cutFrame(content string) string { + frame, _ := json.Marshal(map[string]any{ + "model": "llama3", "message": map[string]any{"role": "assistant", "content": content}, "done": false, + }) + return string(frame) +} + +func TestAStreamThatEndsBeforeItsFinalFrameKeepsItsText(t *testing.T) { + t.Parallel() + + human := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")} + schema := llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "answer", Schema: json.RawMessage(ollamaSOSchema)}) + ignore := llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil }) + + t.Run("streaming keeps the text instead of an empty answer", func(t *testing.T) { + t.Parallel() + + var streamed strings.Builder + resp, err := cutServer(t, cutFrame("Paris is "), cutFrame("the capital.")).GenerateContent(t.Context(), human, + llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + streamed.WriteString(chunk.Content) + } + return nil + })) + require.NoError(t, err) + assert.Equal(t, "Paris is the capital.", resp.Choices[0].Content) + assert.Equal(t, "Paris is the capital.", streamed.String()) + }) + + t.Run("a schema is judged on the text that arrived", func(t *testing.T) { + t.Parallel() + + resp, err := cutServer(t, cutFrame(`{"answer":`), cutFrame(`"42"}`)).GenerateContent(t.Context(), human, schema, ignore) + require.NoError(t, err) + assert.Equal(t, `{"answer":"42"}`, resp.Choices[0].Content) + + resp, err = cutServer(t, cutFrame(`{"answer":`), cutFrame(`"4`)).GenerateContent(t.Context(), human, schema, ignore) + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + assert.Equal(t, `{"answer":"4`, resp.Choices[0].Content) + }) + + t.Run("a non-streaming answer without its final frame stays a success", func(t *testing.T) { + t.Parallel() + + resp, err := cutServer(t, cutFrame("Paris")).GenerateContent(t.Context(), human) + require.NoError(t, err) + assert.Equal(t, "Paris", resp.Choices[0].Content) + + out, err := llms.GenerateFromSinglePrompt(t.Context(), cutServer(t, cutFrame("Paris")), "question") + require.NoError(t, err) + assert.Equal(t, "Paris", out) + }) + + t.Run("nothing at all is still an empty answer", func(t *testing.T) { + t.Parallel() + + resp, err := cutServer(t).GenerateContent(t.Context(), human, ignore) + require.NoError(t, err) + require.NotNil(t, resp) + assert.Empty(t, resp.Choices[0].Content) + }) +} diff --git a/llms/ollama/structured_output_fallback_test.go b/llms/ollama/structured_output_fallback_test.go new file mode 100644 index 000000000..069f890a7 --- /dev/null +++ b/llms/ollama/structured_output_fallback_test.go @@ -0,0 +1,562 @@ +package ollama + +import ( + "context" + "encoding/json" + "errors" + "io" + "net/http" + "net/http/httptest" + "net/url" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/callbacks" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" +) + +// fallbackServer answers every chat request with the same NDJSON lines and +// keeps the request bodies it received for the test goroutine to decode. +type fallbackServer struct { + *httptest.Server + + mu sync.Mutex + bodies [][]byte +} + +func newFallbackServer(t *testing.T, lines ...string) *fallbackServer { + t.Helper() + + fs := &fallbackServer{} + fs.Server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ := io.ReadAll(r.Body) + fs.mu.Lock() + fs.bodies = append(fs.bodies, body) + fs.mu.Unlock() + + w.Header().Set("Content-Type", "application/x-ndjson") + for _, line := range lines { + _, _ = io.WriteString(w, line+"\n") + } + })) + t.Cleanup(fs.Close) + return fs +} + +// wireRequest is the part of a chat request these tests read. +type wireRequest struct { + Format json.RawMessage `json:"format"` + Messages []wireMessage `json:"messages"` + Tools []any `json:"tools"` +} + +type wireMessage struct { + Role string `json:"role"` + Content string `json:"content"` + Images []string `json:"images"` +} + +func (fs *fallbackServer) requests() int { + fs.mu.Lock() + defer fs.mu.Unlock() + return len(fs.bodies) +} + +func (fs *fallbackServer) request(t *testing.T, i int) wireRequest { + t.Helper() + + fs.mu.Lock() + defer fs.mu.Unlock() + require.Greater(t, len(fs.bodies), i, "the server got fewer requests than expected") + var req wireRequest + require.NoError(t, json.Unmarshal(fs.bodies[i], &req)) + return req +} + +// chatLine is one NDJSON line of an Ollama chat response. +func chatLine(content string, done bool, doneReason string) string { + line, _ := json.Marshal(map[string]any{ + "model": "m", + "message": map[string]any{"role": "assistant", "content": content}, + "done": done, + "done_reason": doneReason, + }) + return string(line) +} + +func answerLine(content string) string { return chatLine(content, true, "stop") } + +func newFallbackLLM(t *testing.T, serverURL, model string, extra ...Option) *LLM { + t.Helper() + + opts := append([]Option{WithServerURL(serverURL), WithModel(model), WithCloudStructuredOutputFallback()}, extra...) + llm, err := New(opts...) + require.NoError(t, err) + return llm +} + +func answerSchema() llms.CallOption { + return llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "answer", Schema: json.RawMessage(ollamaSOSchema)}) +} + +// instructed reports whether a wire message carries the injected instruction. +func instructed(content string) bool { + return strings.Contains(content, structuredOutputInstruction) && strings.Contains(content, ollamaSOSchema) +} + +// placementCase is a conversation and where the fallback must put the schema. +type placementCase struct { + name string + messages []llms.MessageContent + opts []llms.CallOption + roles []string + instructed int + prefix string + toolsNote bool +} + +func placementCases() []placementCase { + weatherTool := llms.Tool{Type: "function", Function: &llms.FunctionDefinition{ + Name: "get_weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{"city": map[string]any{"type": "string"}}}, + }} + toolCall := llms.ToolCall{ + ID: makeToolCallID(0, "get_weather"), Type: "function", + FunctionCall: &llms.FunctionCall{Name: "get_weather", Arguments: `{"city":"Paris"}`}, + } + + return []placementCase{ + { + name: "the only user turn", + messages: []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, + roles: []string{"user"}, instructed: 0, prefix: "question\n\n", + }, + { + name: "only the last of several user turns", + messages: []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeSystem, "sys"), + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + llms.TextParts(llms.ChatMessageTypeAI, "reply"), + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + }, + roles: []string{"system", "user", "assistant", "user"}, instructed: 3, prefix: "second\n\n", + }, + { + name: "the user turn before a tool round, telling the model it may still call tools", + messages: []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "weather in Paris?"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{toolCall}}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{llms.ToolCallResponse{ + ToolCallID: toolCall.ID, Name: "get_weather", Content: "sunny", + }}}, + }, + opts: []llms.CallOption{llms.WithTools([]llms.Tool{weatherTool})}, + roles: []string{"user", "assistant", "tool"}, instructed: 0, prefix: "weather in Paris?\n\n", toolsNote: true, + }, + { + name: "a user turn of its own when there is none, since the cloud answers no conversation without one", + messages: []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeSystem, "sys")}, + roles: []string{"system", "user"}, instructed: 1, prefix: structuredOutputInstruction, + }, + { + name: "an image-only user turn without a blank separator", + messages: []llms.MessageContent{{Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{ + llms.BinaryContent{MIMEType: "image/png", Data: []byte("png")}, + }}}, + roles: []string{"user"}, instructed: 0, prefix: structuredOutputInstruction, + }, + } +} + +func TestTheCloudFallbackCarriesTheSchemaInThePrompt(t *testing.T) { + t.Parallel() + + for _, tc := range placementCases() { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{"answer":"42"}`)) + llm := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud") + + before, err := json.Marshal(tc.messages) + require.NoError(t, err) + + opts := append([]llms.CallOption{answerSchema()}, tc.opts...) + for range 2 { + _, err = llm.GenerateContent(t.Context(), tc.messages, opts...) + require.NoError(t, err) + } + + after, err := json.Marshal(tc.messages) + require.NoError(t, err) + assert.JSONEq(t, string(before), string(after), "the caller's messages must stay as they were") + + for call := range 2 { + assertPlacement(t, srv.request(t, call), tc) + } + }) + } +} + +// assertPlacement checks that exactly the expected wire message carries the +// schema instruction, once, after the text the caller wrote there. +func assertPlacement(t *testing.T, req wireRequest, tc placementCase) { + t.Helper() + + assert.JSONEq(t, `""`, string(req.Format), "the cloud gets the empty format") + + roles := make([]string, len(req.Messages)) + for i, m := range req.Messages { + roles[i] = m.Role + if i != tc.instructed { + assert.False(t, instructed(m.Content), "message %d must not carry the schema", i) + } + } + require.Equal(t, tc.roles, roles) + + got := req.Messages[tc.instructed].Content + assert.True(t, instructed(got), "message %d must carry the schema: %q", tc.instructed, got) + assert.Equal(t, 1, strings.Count(got, ollamaSOSchema), "a repeated call must not stack the instruction") + assert.True(t, strings.HasPrefix(got, tc.prefix), "got %q", got) + assert.Equal(t, tc.toolsNote, strings.Contains(got, structuredOutputToolsNote)) + // The phrases that make a model drop a caller's Markdown or fences, measured + // against Ollama Cloud; a weaker wording loses to a conflicting system prompt. + assert.Contains(t, got, "overrides any earlier instruction about format or style") + assert.Contains(t, got, "no code fences") +} + +// redirectTransport sends every request to target, whatever host it named. +type redirectTransport struct{ target *url.URL } + +func (r redirectTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req = req.Clone(req.Context()) + req.URL.Scheme, req.URL.Host = r.target.Scheme, r.target.Host + return http.DefaultTransport.RoundTrip(req) +} + +func TestTheCloudFallbackReachesOnlyCloudServedModels(t *testing.T) { + t.Parallel() + + human := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")} + + t.Run("a local model keeps the native schema", func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{"answer":"42"}`)) + resp, err := newFallbackLLM(t, srv.URL, "gpt-oss:120b").GenerateContent(t.Context(), human, answerSchema()) + require.NoError(t, err) + + req := srv.request(t, 0) + assert.JSONEq(t, ollamaSOSchema, string(req.Format)) + assert.Equal(t, "question", req.Messages[0].Content) + assert.Empty(t, resp.Warnings) + }) + + t.Run("a per-call cloud model is emulated, and a per-call local model is not", func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{"answer":"42"}`)) + resp, err := newFallbackLLM(t, srv.URL, "gpt-oss:120b").GenerateContent(t.Context(), human, + answerSchema(), llms.WithModel("gpt-oss:120b-cloud")) + require.NoError(t, err) + assert.Equal(t, "gpt-oss:120b-cloud", ollamaWarningsByOption(resp.Warnings)["WithStructuredOutput"].Model, + "the warning names the model the call ran on") + _, err = newFallbackLLM(t, srv.URL, "glm-4.6:cloud").GenerateContent(t.Context(), human, + answerSchema(), llms.WithModel("llama3")) + require.NoError(t, err) + + cloud, local := srv.request(t, 0), srv.request(t, 1) + assert.JSONEq(t, `""`, string(cloud.Format)) + assert.True(t, instructed(cloud.Messages[0].Content)) + assert.JSONEq(t, ollamaSOSchema, string(local.Format)) + assert.Equal(t, "question", local.Messages[0].Content) + }) + + t.Run("a model on an ollama.com host is emulated whatever its tag", func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{"answer":"42"}`)) + target, err := url.Parse(srv.URL) + require.NoError(t, err) + llm := newFallbackLLM(t, "https://api.ollama.com", "gpt-oss:120b", + WithHTTPClient(&http.Client{Transport: redirectTransport{target: target}})) + + resp, err := llm.GenerateContent(t.Context(), human, answerSchema()) + require.NoError(t, err) + assert.JSONEq(t, `""`, string(srv.request(t, 0).Format)) + assert.True(t, instructed(srv.request(t, 0).Messages[0].Content)) + assert.Equal(t, llms.WarningSubstitute, ollamaWarningsByOption(resp.Warnings)["WithStructuredOutput"].Kind) + }) + + t.Run("JSON mode alone is still dropped and gets no instruction", func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{}`)) + resp, err := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud").GenerateContent(t.Context(), human, llms.WithJSONMode()) + require.NoError(t, err) + + req := srv.request(t, 0) + assert.JSONEq(t, `""`, string(req.Format)) + assert.Equal(t, "question", req.Messages[0].Content) + assert.Equal(t, llms.WarningDrop, ollamaWarningsByOption(resp.Warnings)["WithJSONMode"].Kind) + assert.NotContains(t, ollamaWarningsByOption(resp.Warnings), "WithStructuredOutput") + }) + + t.Run("without the option the cloud still refuses the schema before any request", func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{"answer":"42"}`)) + llm, err := New(WithServerURL(srv.URL), WithModel("gpt-oss:120b-cloud")) + require.NoError(t, err) + + _, err = llm.GenerateContent(t.Context(), human, answerSchema()) + var unsupported *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsupported) + assert.Zero(t, srv.requests()) + }) + + t.Run("an invalid schema config is refused before any request", func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine(`{"answer":"42"}`)) + _, err := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud").GenerateContent(t.Context(), human, + llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "answer", Schema: json.RawMessage(`{"type":`)})) + require.ErrorIs(t, err, llms.ErrStructuredOutputConfig) + assert.Zero(t, srv.requests()) + }) +} + +func TestATruncatedFencedAnswerIsNotUnwrapped(t *testing.T) { + t.Parallel() + + raw := "```json\n{\"answer\":\"```" + srv := newFallbackServer(t, chatLine(raw, true, "length")) + resp, err := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema()) + require.NoError(t, err) + assert.Equal(t, raw, resp.Choices[0].Content, "an answer that is not judged keeps its raw text") +} + +func TestALocalModelsFencedAnswerIsNotUnwrapped(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine("```json\n{\"answer\":\"42\"}\n```")) + resp, err := newFallbackLLM(t, srv.URL, "gpt-oss:120b").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema()) + + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation, "the native schema constrains the server; nothing is repaired locally") + assert.Equal(t, "```json\n{\"answer\":\"42\"}\n```", resp.Choices[0].Content) +} + +func TestTheCloudFallbackValidatesTheAnswerLocally(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + content string + doneReason string + opts []llms.CallOption + invalid bool + truncated bool + want string + }{ + {name: "a valid answer", content: `{"answer":"42"}`, want: `{"answer":"42"}`}, + {name: "surrounding whitespace", content: "\n {\"answer\":\"42\"} \n", want: `{"answer":"42"}`}, + {name: "thinking tags before the answer", content: `plan{"answer":"42"}`, want: `{"answer":"42"}`}, + {name: "an answer off the schema", content: `{"answer":42}`, invalid: true}, + {name: "a fenced answer is unwrapped", content: "```json\n{\"answer\":\"42\"}\n```", want: `{"answer":"42"}`}, + {name: "an untagged fence is unwrapped", content: "\n```\n{\"answer\":\"42\"}\n```\n", want: `{"answer":"42"}`}, + { + name: "an unwrapped answer off the schema", content: "```json\n{\"answer\":42}\n```", + invalid: true, want: `{"answer":42}`, + }, + {name: "prose around a fence", content: "Here it is:\n```json\n{\"answer\":\"42\"}\n```", invalid: true}, + {name: "two fences", content: "```json\n{\"answer\":\"a\"}\n```\n```json\n{\"answer\":\"b\"}\n```", invalid: true}, + {name: "a fence of another language", content: "```yaml\nanswer: \"42\"\n```", invalid: true}, + {name: "prose around the answer", content: `Here it is: {"answer":"42"}`, invalid: true}, + {name: "two values", content: `{"answer":"a"}{"answer":"b"}`, invalid: true}, + {name: "an empty answer", content: "", invalid: true}, + {name: "a truncated answer is left alone", content: `{"answer":"4`, doneReason: "length", truncated: true, want: `{"answer":"4`}, + { + name: "a truncated answer fails when the caller asks", content: `{"answer":"4`, doneReason: "length", + opts: []llms.CallOption{llms.WithFailOnTruncation()}, truncated: true, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + doneReason := tc.doneReason + if doneReason == "" { + doneReason = "stop" + } + srv := newFallbackServer(t, chatLine(tc.content, true, doneReason)) + llm := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud") + + opts := append([]llms.CallOption{answerSchema()}, tc.opts...) + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, opts...) + + require.NotNil(t, resp, "the answer comes back with any error") + warning := ollamaWarningsByOption(resp.Warnings)["WithStructuredOutput"] + assert.Equal(t, llms.WarningSubstitute, warning.Kind) + assert.Equal(t, "answer", warning.Asked) + assert.Equal(t, "a prompt instruction", warning.Sent) + assert.NotEmpty(t, warning.Reason) + + switch { + case tc.invalid: + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + assert.Equal(t, "gpt-oss:120b-cloud", validation.Model) + want := tc.content + if tc.want != "" { + want = tc.want + } + assert.Equal(t, want, resp.Choices[0].Content, "only a single whole fence is removed, nothing else is repaired") + case len(tc.opts) > 0: + assert.True(t, llms.IsTruncatedError(err), "got %v", err) + default: + require.NoError(t, err) + assert.Equal(t, tc.want, resp.Choices[0].Content) + } + assert.Equal(t, tc.truncated, resp.Choices[0].Truncated) + }) + } +} + +func TestTheCloudFallbackLetsAToolCallThrough(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, `{"model":"m","message":{"role":"assistant","content":"",`+ + `"tool_calls":[{"function":{"name":"get_weather","arguments":{"city":"Paris"}}}]},"done":true,"done_reason":"stop"}`) + llm := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud") + + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "weather in Paris?")}, + answerSchema(), llms.WithTools([]llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ + Name: "get_weather", + Parameters: map[string]any{"type": "object", "properties": map[string]any{"city": map[string]any{"type": "string"}}}, + }}})) + require.NoError(t, err, "a tool-call turn is not the final answer and is not validated") + require.Len(t, resp.Choices[0].ToolCalls, 1) + assert.Equal(t, "get_weather", resp.Choices[0].ToolCalls[0].FunctionCall.Name) + + req := srv.request(t, 0) + assert.Len(t, req.Tools, 1) + assert.Contains(t, req.Messages[0].Content, structuredOutputToolsNote) +} + +func TestTheCloudFallbackValidatesTheStreamedAnswer(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + chunks []string + content string + invalid bool + }{ + {name: "a valid answer in pieces", chunks: []string{`{"answer":`, `"42"}`}, content: `{"answer":"42"}`}, + { + name: "a fenced answer in pieces is unwrapped once complete", + chunks: []string{"```json\n", `{"answer":"42"}`, "\n```"}, + content: `{"answer":"42"}`, + }, + {name: "prose in pieces", chunks: []string{"The answer ", "is 42."}, content: "The answer is 42.", invalid: true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + lines := make([]string, 0, len(tc.chunks)+1) + for _, chunk := range tc.chunks { + lines = append(lines, chatLine(chunk, false, "")) + } + srv := newFallbackServer(t, append(lines, chatLine("", true, "stop"))...) + llm := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud") + + var streamed strings.Builder + resp, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, + answerSchema(), llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + streamed.WriteString(chunk.Content) + } + return nil + })) + + require.NotNil(t, resp) + assert.Equal(t, strings.Join(tc.chunks, ""), streamed.String(), "every chunk reaches the caller as sent") + assert.Equal(t, tc.content, resp.Choices[0].Content) + assert.JSONEq(t, `""`, string(srv.request(t, 0).Format)) + assert.Equal(t, llms.WarningSubstitute, ollamaWarningsByOption(resp.Warnings)["WithStructuredOutput"].Kind) + + var validation *llms.ErrStructuredOutputValidation + assert.Equal(t, tc.invalid, errors.As(err, &validation), "got %v", err) + if !tc.invalid { + require.NoError(t, err) + } + }) + } +} + +// countingHandler counts the closing callbacks of each call. +type countingHandler struct { + callbacks.SimpleHandler + + errs []error + ends int +} + +func (h *countingHandler) HandleLLMError(_ context.Context, err error) { h.errs = append(h.errs, err) } + +func (h *countingHandler) HandleLLMGenerateContentEnd(context.Context, *llms.ContentResponse) { + h.ends++ +} + +func TestAFailedCloudFallbackValidationClosesTheCallWithAnError(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, answerLine("not JSON")) + llm := newFallbackLLM(t, srv.URL, "gpt-oss:120b-cloud") + handler := &countingHandler{} + llm.CallbacksHandler = handler + + _, err := llm.GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema()) + + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + require.Len(t, handler.errs, 1) + assert.ErrorAs(t, handler.errs[0], &validation) + assert.Zero(t, handler.ends) +} + +func TestUnwrapFencedJSON(t *testing.T) { + t.Parallel() + + for text, want := range map[string]string{ + "```json\n{\"a\":1}\n```": `{"a":1}`, + "```JSON\n{\"a\":1}\n```": `{"a":1}`, + " ```\n[1, 2]\n``` ": "[1, 2]", + "```json\n{\n \"a\": 1\n}\n```": "{\n \"a\": 1\n}", + `{"a":1}`: `{"a":1}`, + "```json {\"a\":1}```": "```json {\"a\":1}```", + "```go\nfmt.Println()\n```": "```go\nfmt.Println()\n```", + "note\n```json\n{}\n```": "note\n```json\n{}\n```", + "```json\n{}\n```\n```json\n{}\n```": "```json\n{}\n```\n```json\n{}\n```", + "``````": "``````", + "```json\r\n{\"a\":1}\r\n```": `{"a":1}`, + "``` json\n{\"a\":1}\n```": `{"a":1}`, + "```json\n{\"a\":\"```\"}\n```": "{\"a\":\"```\"}", + "```json\n```": "", + "```json\n\n```": "", + "````json\n{\"a\":1}\n````": "````json\n{\"a\":1}\n````", + } { + assert.Equal(t, want, unwrapFencedJSON(text), "%q", text) + } +} diff --git a/llms/ollama/testdata/TestCloudStructuredOutputFallback-non-streaming.httprr b/llms/ollama/testdata/TestCloudStructuredOutputFallback-non-streaming.httprr new file mode 100644 index 000000000..2d2d1f8a1 --- /dev/null +++ b/llms/ollama/testdata/TestCloudStructuredOutputFallback-non-streaming.httprr @@ -0,0 +1,24 @@ +httprr trace v1 +1212 1762 +POST https://ollama.com/api/chat HTTP/1.1 +Host: ollama.com +User-Agent: langchaingo-httprr +Content-Length: 1034 +Accept: application/x-ndjson +Content-Type: application/json + +{"model":"gpt-oss:120b","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Describe Paris briefly.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"population_millions\":{\"type\":\"number\"},\"landmarks\":{\"type\":\"array\",\"minItems\":2,\"maxItems\":3,\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"population_millions\",\"landmarks\"],\"additionalProperties\":false}"}],"stream":false,"format":"","options":{"num_predict":16384}}HTTP/2.0 200 OK +Content-Length: 1256 +Alt-Svc: h3=":443"; ma=2592000 +Content-Type: application/json +Date: Thu, 24 Sep 2026 13:47:06 GMT +Server: Google Frontend +Traceparent: 00-ce3fbe642d885882042e906179d04f13-a68928b9f25d0ddb-00 +Via: 1.1 google +X-Build-Commit: 614f90b4fc81e84f478f88d324848f8028bf3d1f +X-Build-Time: 2026-09-23T16:54:33-07:00 +X-Cloud-Trace-Context: ce3fbe642d885882042e906179d04f13/12000167461205642715 +X-Frame-Options: DENY +X-Request-Id: 41ea435d-4794-424e-b715-8d8dd6cbf4f0 + +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:06.954340603Z","message":{"role":"assistant","content":"{\n \"city\": \"Paris\",\n \"population_millions\": 2.2,\n \"landmarks\": [\n {\n \"name\": \"Eiffel Tower\",\n \"kind\": \"monument\"\n },\n {\n \"name\": \"Louvre Museum\",\n \"kind\": \"museum\"\n },\n {\n \"name\": \"Notre-Dame Cathedral\",\n \"kind\": \"church\"\n }\n ]\n}","thinking":"The user wants a brief description of Paris but must output a JSON object conforming to the schema. No extra text, no markdown, no code fences, only JSON. Must include city, population_millions (number), landmarks array with 2-3 items, each having name and kind (enum). Let's provide 3 landmarks: Eiffel Tower (monument), Louvre Museum (museum), Notre-Dame Cathedral (church). Ensure kind matches enum: \"monument\", \"museum\", \"church\". Provide population maybe 2.2 million. Provide correct JSON.\n\nCheck schema: additionalProperties false for top level, so only city, population_millions, landmarks allowed. Provide no extra.\n\nReturn exactly JSON object.\n\n"},"done":true,"done_reason":"stop","total_duration":946439664,"prompt_eval_count":255,"prompt_eval_cached_count":48,"eval_count":244} diff --git a/llms/ollama/testdata/TestCloudStructuredOutputFallback-streaming.httprr b/llms/ollama/testdata/TestCloudStructuredOutputFallback-streaming.httprr new file mode 100644 index 000000000..2a7178fd2 --- /dev/null +++ b/llms/ollama/testdata/TestCloudStructuredOutputFallback-streaming.httprr @@ -0,0 +1,69 @@ +httprr trace v1 +1211 7476 +POST https://ollama.com/api/chat HTTP/1.1 +Host: ollama.com +User-Agent: langchaingo-httprr +Content-Length: 1033 +Accept: application/x-ndjson +Content-Type: application/json + +{"model":"gpt-oss:120b","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Describe Paris briefly.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"population_millions\":{\"type\":\"number\"},\"landmarks\":{\"type\":\"array\",\"minItems\":2,\"maxItems\":3,\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"population_millions\",\"landmarks\"],\"additionalProperties\":false}"}],"stream":true,"format":"","options":{"num_predict":16384}}HTTP/2.0 200 OK +Content-Length: 6971 +Alt-Svc: h3=":443"; ma=2592000 +Content-Type: application/json +Date: Thu, 24 Sep 2026 13:47:08 GMT +Server: Google Frontend +Traceparent: 00-ef720aeccc1992e6042e906179d04f3f-3f48a4296d044156-00 +Via: 1.1 google +X-Build-Commit: 614f90b4fc81e84f478f88d324848f8028bf3d1f +X-Build-Time: 2026-09-23T16:54:33-07:00 +X-Cloud-Trace-Context: ef720aeccc1992e6042e906179d04f3f/4560075120542237014 +X-Frame-Options: DENY +X-Request-Id: c044b894-3704-4af5-85d1-bd8945cae521 + +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.506579366Z","message":{"role":"assistant","content":"","thinking":"We need to reply"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.519337967Z","message":{"role":"assistant","content":"","thinking":" with exactly one JSON value"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.539361123Z","message":{"role":"assistant","content":"","thinking":" matching"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.554523506Z","message":{"role":"assistant","content":"","thinking":" schema"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.565909646Z","message":{"role":"assistant","content":"","thinking":". Provide"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.578305666Z","message":{"role":"assistant","content":"","thinking":" city"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.591404437Z","message":{"role":"assistant","content":"","thinking":": \"Paris\", population_m"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.604534478Z","message":{"role":"assistant","content":"","thinking":"illions:"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.618434879Z","message":{"role":"assistant","content":"","thinking":" maybe 2"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.634341453Z","message":{"role":"assistant","content":"","thinking":".2"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.658838624Z","message":{"role":"assistant","content":"","thinking":" (actual"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.674058066Z","message":{"role":"assistant","content":"","thinking":" ~"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.694005623Z","message":{"role":"assistant","content":"","thinking":"2.2)."},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.704178471Z","message":{"role":"assistant","content":"","thinking":" landmarks"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.718410633Z","message":{"role":"assistant","content":"","thinking":": array of "},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.735312797Z","message":{"role":"assistant","content":"","thinking":"2-3 items with"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.7501541Z","message":{"role":"assistant","content":"","thinking":" name and"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.766641154Z","message":{"role":"assistant","content":"","thinking":" kind.\n\n"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.782004727Z","message":{"role":"assistant","content":"","thinking":"Pick"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.79814671Z","message":{"role":"assistant","content":"","thinking":" e"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.812729372Z","message":{"role":"assistant","content":"","thinking":".g., Eiffel Tower ("},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.832209889Z","message":{"role":"assistant","content":"","thinking":"monument), Louvre"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.841758797Z","message":{"role":"assistant","content":"","thinking":" Museum (museum"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.858544361Z","message":{"role":"assistant","content":"","thinking":")."},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.872357722Z","message":{"role":"assistant","content":"","thinking":" That's two"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.890452657Z","message":{"role":"assistant","content":"","thinking":" items.\n\n"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.903415058Z","message":{"role":"assistant","content":"","thinking":"JSON"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.91805891Z","message":{"role":"assistant","content":"","thinking":" object"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.933359753Z","message":{"role":"assistant","content":"","thinking":" no"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.947185085Z","message":{"role":"assistant","content":"","thinking":" extra."},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.963089768Z","message":{"role":"assistant","content":"","thinking":" Provide"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:08.978298551Z","message":{"role":"assistant","content":"","thinking":" exact"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.00130028Z","message":{"role":"assistant","content":"","thinking":"."},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.009153057Z","message":{"role":"assistant","content":"","thinking":" No markdown"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.02554334Z","message":{"role":"assistant","content":"","thinking":"."},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.051253102Z","message":{"role":"assistant","content":"{\""},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.063976343Z","message":{"role":"assistant","content":"city\":\"Paris\",\"population_m"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.080402697Z","message":{"role":"assistant","content":"illions\":"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.088899273Z","message":{"role":"assistant","content":"2.2,\"landmarks"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.101238144Z","message":{"role":"assistant","content":"\":[{\"name"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.114134345Z","message":{"role":"assistant","content":"\":\"Eiffel Tower\",\"kind"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.130134408Z","message":{"role":"assistant","content":"\":\"monument\"},{\"name"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.139601186Z","message":{"role":"assistant","content":"\":\"Louvre Museum\",\""},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.151174996Z","message":{"role":"assistant","content":"kind\":\"museum\"}]}"},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.165509688Z","message":{"role":"assistant","content":""},"done":false} +{"model":"gpt-oss:120b","created_at":"2026-09-24T13:47:09.255492393Z","message":{"role":"assistant","content":""},"done":true,"done_reason":"stop","total_duration":1045714286,"prompt_eval_count":255,"prompt_eval_cached_count":224,"eval_count":129} diff --git a/llms/ollama/warnings.go b/llms/ollama/warnings.go index c01373921..acf2d0907 100644 --- a/llms/ollama/warnings.go +++ b/llms/ollama/warnings.go @@ -82,8 +82,23 @@ func reportOllamaThinking(warn *llms.Warnings, model string, opts llms.CallOptio const extraBodyUnread = "the door builds its request through a vendor SDK and has nowhere to merge them" -func reportOllamaCloudFormat(warn *llms.Warnings, model string, opts llms.CallOptions, clientFormat string) { +const ollamaCloudStructuredOutputFallbackReason = "Ollama Cloud does not support structured outputs, " + + "so the schema travels in the prompt and the answer is validated locally" + +// reportOllamaCloudFormat reports the format a cloud-served model cannot take. +// emulated marks a structured-output call that WithCloudStructuredOutputFallback +// turned into a prompt instruction. +func reportOllamaCloudFormat(warn *llms.Warnings, model string, opts llms.CallOptions, clientFormat string, emulated bool) { switch { + case emulated: + asked := opts.StructuredOutput.Name + if asked == "" { + asked = "a JSON Schema" + } + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithStructuredOutput", Model: model, + Asked: asked, Sent: "a prompt instruction", Reason: ollamaCloudStructuredOutputFallbackReason, + }) case opts.JSONMode: warn.Add(llms.Warning{ Kind: llms.WarningDrop, Option: "WithJSONMode", Model: model, diff --git a/llms/ollama/warnings_test.go b/llms/ollama/warnings_test.go index 16c99fa34..0e50ee228 100644 --- a/llms/ollama/warnings_test.go +++ b/llms/ollama/warnings_test.go @@ -1,6 +1,7 @@ package ollama import ( + "encoding/json" "net/http" "net/http/httptest" "testing" @@ -169,14 +170,29 @@ func TestTheCloudReportsTheFormatItCannotSend(t *testing.T) { name string opts llms.CallOptions clientFormat string + emulated bool option string + kind llms.WarningKind + asked, sent string }{ - {name: "per-call JSON mode", opts: llms.CallOptions{JSONMode: true}, option: "WithJSONMode"}, - {name: "client-level format", clientFormat: "json", option: "WithFormat"}, + {name: "per-call JSON mode", opts: llms.CallOptions{JSONMode: true}, option: "WithJSONMode", kind: llms.WarningDrop, asked: "true"}, + {name: "client-level format", clientFormat: "json", option: "WithFormat", kind: llms.WarningDrop, asked: "json"}, + { + name: "an emulated schema", emulated: true, clientFormat: "json", + opts: llms.CallOptions{JSONMode: true, StructuredOutput: &llms.StructuredOutputConfig{ + Name: "answer", Schema: json.RawMessage(ollamaSOSchema), + }}, + option: "WithStructuredOutput", kind: llms.WarningSubstitute, asked: "answer", sent: "a prompt instruction", + }, + { + name: "an emulated schema without a name", emulated: true, + opts: llms.CallOptions{JSONMode: true, StructuredOutput: &llms.StructuredOutputConfig{Schema: json.RawMessage(ollamaSOSchema)}}, + option: "WithStructuredOutput", kind: llms.WarningSubstitute, asked: "a JSON Schema", sent: "a prompt instruction", + }, {name: "nothing asked"}, } { warn := &llms.Warnings{} - reportOllamaCloudFormat(warn, "gpt-oss:120b", tc.opts, tc.clientFormat) + reportOllamaCloudFormat(warn, "gpt-oss:120b", tc.opts, tc.clientFormat, tc.emulated) got := warn.List() if tc.option == "" { if len(got) != 0 { @@ -184,8 +200,9 @@ func TestTheCloudReportsTheFormatItCannotSend(t *testing.T) { } continue } - if len(got) != 1 || got[0].Kind != llms.WarningDrop || got[0].Option != tc.option { - t.Errorf("%s: want one drop of %s, got %v", tc.name, tc.option, got) + if len(got) != 1 || got[0].Kind != tc.kind || got[0].Option != tc.option || + got[0].Asked != tc.asked || got[0].Sent != tc.sent { + t.Errorf("%s: want one %s of %s asked %q sent %q, got %v", tc.name, tc.kind, tc.option, tc.asked, tc.sent, got) } } } From 355dc7151e2fc4e4ea89e331fb8c82a4f3c7fd40 Mon Sep 17 00:00:00 2001 From: Dmitry Ng <19asdek91@gmail.com> Date: Fri, 25 Sep 2026 02:47:43 +0300 Subject: [PATCH 618/618] feat(openai): implement structured output fallback for DeepSeek and Z.ai models - Introduced `WithStructuredOutputFallback()` option to enable schema-constrained output for models that do not support json_schema. - Updated `GenerateContent` to handle schema instructions in user messages, ensuring compatibility with DeepSeek and MiniMax APIs. - Enhanced validation logic for responses to conform to provided schemas, with local validation for cloud responses. - Added comprehensive tests for structured output fallback scenarios, including both streaming and non-streaming cases. - Refactored existing tests to accommodate new structured output handling. --- llms/ollama/ollama_cloud_test.go | 3 +- llms/ollama/ollamallm.go | 44 +- .../ollama/structured_output_fallback_test.go | 36 +- .../deepseek_empty_reasoning_live_test.go | 53 ++ llms/openai/deepseek_empty_reasoning_test.go | 109 +++ llms/openai/internal/openaiclient/chat.go | 25 +- .../openaiclient/empty_reasoning_test.go | 79 +++ llms/openai/openaillm.go | 15 +- llms/openai/openaillm_option.go | 36 +- llms/openai/structured_output.go | 95 ++- .../structured_output_fallback_live_test.go | 211 ++++++ .../openai/structured_output_fallback_test.go | 643 ++++++++++++++++++ ...TurnWithoutReasoning-deepseek-flash.httprr | 25 + ...urnWithoutReasoning-deepseek-v4-pro.httprr | 25 + ...utputFallbackDeepSeek-non-streaming.httprr | 25 + ...redOutputFallbackDeepSeek-streaming.httprr | 103 +++ ...OutputFallbackMiniMax-non-streaming.httprr | 27 + ...uredOutputFallbackMiniMax-streaming.httprr | 54 ++ ...turedOutputFallbackMiniMaxToolRound.httprr | 52 ++ ...uredOutputFallbackZAI-non-streaming.httprr | 26 + ...ructuredOutputFallbackZAI-streaming.httprr | 87 +++ ...tructuredOutputFallbackZAIToolRound.httprr | 50 ++ llms/reasoning/effort_wire.go | 19 +- llms/reasoning/effort_wire_test.go | 47 ++ llms/structuredoutput/prompt.go | 59 ++ llms/structuredoutput/prompt_test.go | 44 ++ 26 files changed, 1908 insertions(+), 84 deletions(-) create mode 100644 llms/openai/deepseek_empty_reasoning_live_test.go create mode 100644 llms/openai/deepseek_empty_reasoning_test.go create mode 100644 llms/openai/internal/openaiclient/empty_reasoning_test.go create mode 100644 llms/openai/structured_output_fallback_live_test.go create mode 100644 llms/openai/structured_output_fallback_test.go create mode 100644 llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-flash.httprr create mode 100644 llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-v4-pro.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-non-streaming.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-streaming.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackMiniMax-non-streaming.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackMiniMax-streaming.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackMiniMaxToolRound.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackZAI-non-streaming.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackZAI-streaming.httprr create mode 100644 llms/openai/testdata/TestStructuredOutputFallbackZAIToolRound.httprr create mode 100644 llms/structuredoutput/prompt.go create mode 100644 llms/structuredoutput/prompt_test.go diff --git a/llms/ollama/ollama_cloud_test.go b/llms/ollama/ollama_cloud_test.go index a55536c81..ad56fbd03 100644 --- a/llms/ollama/ollama_cloud_test.go +++ b/llms/ollama/ollama_cloud_test.go @@ -15,6 +15,7 @@ import ( "github.com/vxcontrol/langchaingo/internal/httprr" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/streaming" + "github.com/vxcontrol/langchaingo/llms/structuredoutput" ) // removeTimestampTransport removes 'ts' query parameter before passing to httprr. @@ -369,7 +370,7 @@ func TestCloudStructuredOutputFallback(t *testing.T) { assert.Equal(t, "Paris", answer.City) assert.NotEmpty(t, answer.Landmarks) if stream { - assert.Equal(t, resp.Choices[0].Content, unwrapFencedJSON(strings.TrimSpace(streamed.String()))) + assert.Equal(t, resp.Choices[0].Content, structuredoutput.UnwrapFencedJSON(strings.TrimSpace(streamed.String()))) } require.Len(t, resp.Warnings, 1) diff --git a/llms/ollama/ollamallm.go b/llms/ollama/ollamallm.go index 9bcb926b2..3d3d529bd 100644 --- a/llms/ollama/ollamallm.go +++ b/llms/ollama/ollamallm.go @@ -242,40 +242,11 @@ func loadedOnly(doneReason string) bool { func unwrapFencedAnswers(resp *llms.ContentResponse) { for _, choice := range resp.Choices { if len(choice.ToolCalls) == 0 && (choice.StopReason == "" || choice.StopReason == "stop") { - choice.Content = unwrapFencedJSON(choice.Content) + choice.Content = structuredoutput.UnwrapFencedJSON(choice.Content) } } } -// unwrapFencedJSON returns the body of a text that is exactly one Markdown code -// fence, untagged or tagged json. Anything else, such as prose around the fence -// or a second fence, is returned unchanged for validation to judge. -func unwrapFencedJSON(text string) string { - trimmed := strings.TrimSpace(text) - if len(trimmed) < 6 || !strings.HasPrefix(trimmed, "```") || !strings.HasSuffix(trimmed, "```") { - return text - } - header, body, ok := strings.Cut(trimmed[3:len(trimmed)-3], "\n") - if !ok || containsFenceLine(body) { - return text - } - if tag := strings.TrimSpace(header); tag != "" && !strings.EqualFold(tag, "json") { - return text - } - return strings.TrimSpace(body) -} - -// containsFenceLine reports a line that opens or closes a code fence. A JSON -// string cannot hold a raw newline, so backticks inside one never start a line. -func containsFenceLine(body string) bool { - for line := range strings.Lines(body) { - if strings.HasPrefix(strings.TrimSpace(line), "```") { - return true - } - } - return false -} - // getModel determines which model to use based on options and defaults. func (o *LLM) getModel(opts llms.CallOptions) string { if model := opts.GetModel(); model != "" { @@ -483,22 +454,11 @@ func (o *LLM) emulatesStructuredOutput(model string, opts llms.CallOptions) bool return opts.StructuredOutput != nil && o.options.cloudStructuredOutputFallback && o.servesCloud(model) } -const ( - structuredOutputInstruction = "Reply with exactly one JSON value that validates against the JSON Schema below. " + - "This overrides any earlier instruction about format or style: no Markdown, no code fences, " + - "no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser." - structuredOutputToolsNote = "You may still call the tools you are offered; this applies to your final answer." -) - // injectStructuredOutputPrompt appends the schema instruction to the last user // message. Ollama Cloud does not answer a conversation without a user turn, so // when there is none the instruction becomes that turn. func injectStructuredOutputPrompt(messages []api.Message, schema json.RawMessage, withTools bool) []api.Message { - instruction := structuredOutputInstruction - if withTools { - instruction += " " + structuredOutputToolsNote - } - instruction += "\nJSON Schema:\n" + string(schema) + instruction := structuredoutput.PromptInstruction(schema, withTools) for i := len(messages) - 1; i >= 0; i-- { if messages[i].Role == "user" { if messages[i].Content != "" { diff --git a/llms/ollama/structured_output_fallback_test.go b/llms/ollama/structured_output_fallback_test.go index 069f890a7..04332bcbd 100644 --- a/llms/ollama/structured_output_fallback_test.go +++ b/llms/ollama/structured_output_fallback_test.go @@ -18,6 +18,7 @@ import ( "github.com/vxcontrol/langchaingo/callbacks" "github.com/vxcontrol/langchaingo/llms" "github.com/vxcontrol/langchaingo/llms/streaming" + "github.com/vxcontrol/langchaingo/llms/structuredoutput" ) // fallbackServer answers every chat request with the same NDJSON lines and @@ -106,7 +107,7 @@ func answerSchema() llms.CallOption { // instructed reports whether a wire message carries the injected instruction. func instructed(content string) bool { - return strings.Contains(content, structuredOutputInstruction) && strings.Contains(content, ollamaSOSchema) + return strings.Contains(content, structuredoutput.SchemaInstruction) && strings.Contains(content, ollamaSOSchema) } // placementCase is a conversation and where the fallback must put the schema. @@ -161,14 +162,14 @@ func placementCases() []placementCase { { name: "a user turn of its own when there is none, since the cloud answers no conversation without one", messages: []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeSystem, "sys")}, - roles: []string{"system", "user"}, instructed: 1, prefix: structuredOutputInstruction, + roles: []string{"system", "user"}, instructed: 1, prefix: structuredoutput.SchemaInstruction, }, { name: "an image-only user turn without a blank separator", messages: []llms.MessageContent{{Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{ llms.BinaryContent{MIMEType: "image/png", Data: []byte("png")}, }}}, - roles: []string{"user"}, instructed: 0, prefix: structuredOutputInstruction, + roles: []string{"user"}, instructed: 0, prefix: structuredoutput.SchemaInstruction, }, } } @@ -223,7 +224,7 @@ func assertPlacement(t *testing.T, req wireRequest, tc placementCase) { assert.True(t, instructed(got), "message %d must carry the schema: %q", tc.instructed, got) assert.Equal(t, 1, strings.Count(got, ollamaSOSchema), "a repeated call must not stack the instruction") assert.True(t, strings.HasPrefix(got, tc.prefix), "got %q", got) - assert.Equal(t, tc.toolsNote, strings.Contains(got, structuredOutputToolsNote)) + assert.Equal(t, tc.toolsNote, strings.Contains(got, structuredoutput.ToolsNote)) // The phrases that make a model drop a caller's Markdown or fences, measured // against Ollama Cloud; a weaker wording loses to a conflicting system prompt. assert.Contains(t, got, "overrides any earlier instruction about format or style") @@ -449,7 +450,7 @@ func TestTheCloudFallbackLetsAToolCallThrough(t *testing.T) { req := srv.request(t, 0) assert.Len(t, req.Tools, 1) - assert.Contains(t, req.Messages[0].Content, structuredOutputToolsNote) + assert.Contains(t, req.Messages[0].Content, structuredoutput.ToolsNote) } func TestTheCloudFallbackValidatesTheStreamedAnswer(t *testing.T) { @@ -535,28 +536,3 @@ func TestAFailedCloudFallbackValidationClosesTheCallWithAnError(t *testing.T) { assert.ErrorAs(t, handler.errs[0], &validation) assert.Zero(t, handler.ends) } - -func TestUnwrapFencedJSON(t *testing.T) { - t.Parallel() - - for text, want := range map[string]string{ - "```json\n{\"a\":1}\n```": `{"a":1}`, - "```JSON\n{\"a\":1}\n```": `{"a":1}`, - " ```\n[1, 2]\n``` ": "[1, 2]", - "```json\n{\n \"a\": 1\n}\n```": "{\n \"a\": 1\n}", - `{"a":1}`: `{"a":1}`, - "```json {\"a\":1}```": "```json {\"a\":1}```", - "```go\nfmt.Println()\n```": "```go\nfmt.Println()\n```", - "note\n```json\n{}\n```": "note\n```json\n{}\n```", - "```json\n{}\n```\n```json\n{}\n```": "```json\n{}\n```\n```json\n{}\n```", - "``````": "``````", - "```json\r\n{\"a\":1}\r\n```": `{"a":1}`, - "``` json\n{\"a\":1}\n```": `{"a":1}`, - "```json\n{\"a\":\"```\"}\n```": "{\"a\":\"```\"}", - "```json\n```": "", - "```json\n\n```": "", - "````json\n{\"a\":1}\n````": "````json\n{\"a\":1}\n````", - } { - assert.Equal(t, want, unwrapFencedJSON(text), "%q", text) - } -} diff --git a/llms/openai/deepseek_empty_reasoning_live_test.go b/llms/openai/deepseek_empty_reasoning_live_test.go new file mode 100644 index 000000000..416e43eac --- /dev/null +++ b/llms/openai/deepseek_empty_reasoning_live_test.go @@ -0,0 +1,53 @@ +package openai + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +// TestDeepSeekTakesBackAToolTurnWithoutReasoning replays, in thinking mode, a tool +// loop whose assistant turn holds no reasoning and a call ID DeepSeek did not issue: +// a caller rewrote it, or made the turn up. DeepSeek refuses such a turn with 400 +// unless reasoning_content comes back, so the adapter sends it empty. +func TestDeepSeekTakesBackAToolTurnWithoutReasoning(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-flash", "deepseek-v4-pro"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + llm := newTestDeepSeekClient(t, WithModel(model), WithPreserveReasoningContent()) + tools := []llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ + Name: "get_weather", + Description: "Get the current weather for one city.", + Parameters: map[string]any{ + "type": "object", + "properties": map[string]any{"city": map[string]any{"type": "string"}}, + "required": []string{"city"}, + }, + }}} + const callID = "call_07_Z9fjqXcYkT3bQ2wRmN8pLs4v" + history := []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "What is the weather in Paris? Use the tool."), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: callID, Type: "function", FunctionCall: &llms.FunctionCall{ + Name: "get_weather", Arguments: `{"city":"Paris"}`, + }}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: callID, Name: "get_weather", Content: "Sunny, 21C"}, + }}, + } + + resp, err := llm.GenerateContent(t.Context(), history, llms.WithTools(tools), llms.WithMaxTokens(400)) + require.NoError(t, err) + require.NotEmpty(t, resp.Choices) + assert.Contains(t, strings.ToLower(resp.Choices[0].Content), "21") + }) + } +} diff --git a/llms/openai/deepseek_empty_reasoning_test.go b/llms/openai/deepseek_empty_reasoning_test.go new file mode 100644 index 000000000..aeb5e42b5 --- /dev/null +++ b/llms/openai/deepseek_empty_reasoning_test.go @@ -0,0 +1,109 @@ +package openai + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" +) + +// loopWithoutReasoning is the history a caller replays after DeepSeek streamed an +// empty reasoning_content: no assistant turn holds any reasoning, and the tool turn +// holds nothing but its call. +func loopWithoutReasoning() []llms.MessageContent { + return []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + llms.TextParts(llms.ChatMessageTypeAI, "answered in text"), + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, + }}, + } +} + +func TestDeepSeekTurnWithoutReasoningGoesBackWithAnEmptyOne(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "deepseek-flash", "deepseek-v4-pro", "DeepSeek-V4-Pro", "deepseek/deepseek-v4-pro", + "deepseek-chat", "deepseek-reasoner", + } { + turns := assistantTurnsSentFor(t, model, loopWithoutReasoning()) + require.Len(t, turns, 2, model) + + for _, turn := range turns { + require.Contains(t, turn, "reasoning_content", model) + assert.Equal(t, "", turn["reasoning_content"], model) + } + assert.NotEmpty(t, turns[1]["tool_calls"], model) + } +} + +func TestDeepSeekTurnWithAnEmptyReasoningPartGoesBackWithAnEmptyOne(t *testing.T) { + t.Parallel() + + turns := assistantTurnsSentFor(t, "deepseek-flash", []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextPartWithReasoning("", &reasoning.ContentReasoning{}), + llms.ToolCall{ID: "c1", Type: "function", FunctionCall: &llms.FunctionCall{Name: "f", Arguments: "{}"}}, + }}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: "c1", Name: "f", Content: "done"}, + }}, + }) + require.Len(t, turns, 1) + + require.Contains(t, turns[0], "reasoning_content") + assert.Equal(t, "", turns[0]["reasoning_content"]) +} + +func TestOnlyDeepSeekGetsAnEmptyReasoningBack(t *testing.T) { + t.Parallel() + + for _, model := range []string{ + "kimi-k3", "moonshot/kimi-k2.6", "glm-5.3", "zai/glm-5.3", "qwen3.7-plus", "dashscope/qwen3.8-max", + "grok-4", "gpt-5.5", "mistralai/mistral-small-2603", "MiniMax-M2.7", "deepseekcoder", + } { + for _, turn := range assistantTurnsSentFor(t, model, loopWithoutReasoning()) { + assert.NotContains(t, turn, "reasoning_content", model) + } + } +} + +func TestDeepSeekWithoutPreservedReasoningSendsNoReasoningField(t *testing.T) { + t.Parallel() + + var raw string + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, err := io.ReadAll(r.Body) + if err != nil { + t.Errorf("read request: %v", err) + return + } + raw = string(body) + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"1","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}],`+ + `"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + })) + defer server.Close() + + llm, err := New(WithBaseURL(server.URL), WithToken("token"), WithModel("deepseek-flash")) + require.NoError(t, err) + _, err = llm.GenerateContent(context.Background(), loopWithoutReasoning()) + require.NoError(t, err) + + assert.False(t, strings.Contains(raw, "reasoning_content"), raw) +} diff --git a/llms/openai/internal/openaiclient/chat.go b/llms/openai/internal/openaiclient/chat.go index a63dca908..f3099b1b8 100644 --- a/llms/openai/internal/openaiclient/chat.go +++ b/llms/openai/internal/openaiclient/chat.go @@ -328,6 +328,10 @@ type ChatMessage struct { //nolint:musttag // Thinking goes out as a thinking chunk at the head of a content list // instead of reasoning_content. Requests only. Thinking string + + // KeepsEmptyReasoning sends reasoning_content even when it is empty, for a + // vendor that refuses an assistant turn without the field. Requests only. + KeepsEmptyReasoning bool } type contentChunk struct { @@ -415,11 +419,13 @@ func (m ChatMessage) MarshalJSON() ([]byte, error) { Refusal string `json:"-"` Thinking string `json:"-"` + + KeepsEmptyReasoning bool `json:"-"` }(m) if msg.ReasoningContent == "" && msg.Reasoning != "" { msg.ReasoningContent = msg.Reasoning } - return json.Marshal(msg) + return marshalRequestMessage(msg, msg.KeepsEmptyReasoning && msg.ReasoningContent == "") } msg := struct { Role string `json:"role"` @@ -442,11 +448,24 @@ func (m ChatMessage) MarshalJSON() ([]byte, error) { Refusal string `json:"-"` Thinking string `json:"-"` + + KeepsEmptyReasoning bool `json:"-"` }(m) if msg.ReasoningContent == "" && msg.Reasoning != "" { msg.ReasoningContent = msg.Reasoning } - return json.Marshal(msg) + return marshalRequestMessage(msg, msg.KeepsEmptyReasoning && msg.ReasoningContent == "") +} + +// marshalRequestMessage marshals an outgoing message and, when emptyReasoning is +// set, ends it with the empty reasoning_content that omitempty drops. The object +// always holds role, so the added field follows a comma. +func marshalRequestMessage(msg any, emptyReasoning bool) ([]byte, error) { + out, err := json.Marshal(msg) + if err != nil || !emptyReasoning { + return out, err + } + return append(out[:len(out)-1], `,"reasoning_content":""}`...), nil } func isSingleTextContent(parts []llms.ContentPart) (string, bool) { @@ -479,6 +498,8 @@ func (m *ChatMessage) UnmarshalJSON(data []byte) error { Refusal string `json:"refusal,omitempty"` Thinking string `json:"-"` + + KeepsEmptyReasoning bool `json:"-"` } var msg struct { fields diff --git a/llms/openai/internal/openaiclient/empty_reasoning_test.go b/llms/openai/internal/openaiclient/empty_reasoning_test.go new file mode 100644 index 000000000..e4d2f3bf5 --- /dev/null +++ b/llms/openai/internal/openaiclient/empty_reasoning_test.go @@ -0,0 +1,79 @@ +package openaiclient + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" +) + +func TestAKeptEmptyReasoningGoesOutAsAnEmptyString(t *testing.T) { + t.Parallel() + + toolCall := []ToolCall{{ID: "c1", Type: ToolTypeFunction, Function: ToolFunction{Name: "f", Arguments: "{}"}}} + for name, tc := range map[string]struct { + msg ChatMessage + want string + }{ + "text": { + ChatMessage{Role: "assistant", Content: "hi", KeepsEmptyReasoning: true}, + `{"role":"assistant","content":"hi","reasoning_content":""}`, + }, + "tool call": { + ChatMessage{Role: "assistant", ToolCalls: toolCall, KeepsEmptyReasoning: true}, + `{"role":"assistant","content":"","tool_calls":[{"id":"c1","type":"function",` + + `"function":{"name":"f","arguments":"{}"}}],"reasoning_content":""}`, + }, + "content parts": { + ChatMessage{Role: "assistant", MultiContent: []llms.ContentPart{ + llms.TextContent{Text: "a"}, llms.TextContent{Text: "b"}, + }, ToolCalls: toolCall, KeepsEmptyReasoning: true}, + `{"role":"assistant","content":[{"text":"a","type":"text"},{"text":"b","type":"text"}],` + + `"tool_calls":[{"id":"c1","type":"function","function":{"name":"f","arguments":"{}"}}],` + + `"reasoning_content":""}`, + }, + } { + raw, err := json.Marshal(tc.msg) + require.NoError(t, err, name) + assert.Equal(t, tc.want, string(raw), name) + } +} + +func TestAKeptReasoningThatHasTextGoesOutOnce(t *testing.T) { + t.Parallel() + + for name, tc := range map[string]struct { + msg ChatMessage + want string + }{ + "reasoning_content": { + ChatMessage{Role: "assistant", Content: "hi", ReasoningContent: "thought", KeepsEmptyReasoning: true}, + `{"role":"assistant","content":"hi","reasoning_content":"thought"}`, + }, + "reasoning": { + ChatMessage{Role: "assistant", Content: "hi", Reasoning: "thought", KeepsEmptyReasoning: true}, + `{"role":"assistant","content":"hi","reasoning_content":"thought","reasoning":"thought"}`, + }, + } { + raw, err := json.Marshal(tc.msg) + require.NoError(t, err, name) + assert.Equal(t, tc.want, string(raw), name) + } +} + +func TestAnEmptyReasoningStaysOffTheWireUnlessKept(t *testing.T) { + t.Parallel() + + for name, msg := range map[string]ChatMessage{ + "text": {Role: "assistant", Content: "hi"}, + "content parts": {Role: "assistant", MultiContent: []llms.ContentPart{llms.TextContent{Text: "a"}, llms.TextContent{Text: "b"}}}, + "user": {Role: "user", Content: "hi"}, + } { + raw, err := json.Marshal(msg) + require.NoError(t, err, name) + assert.NotContains(t, string(raw), "reasoning_content", name) + } +} diff --git a/llms/openai/openaillm.go b/llms/openai/openaillm.go index dfaac4e8f..6b5983e99 100644 --- a/llms/openai/openaillm.go +++ b/llms/openai/openaillm.go @@ -20,6 +20,8 @@ type LLM struct { CallbacksHandler callbacks.Handler client *openaiclient.Client host string + + structuredOutputFallback bool } const ( @@ -39,9 +41,10 @@ func New(opts ...Option) (*LLM, error) { return nil, err } return &LLM{ - client: c, - CallbacksHandler: opt.callbackHandler, - host: hostnameFromURL(opt.baseURL), + client: c, + CallbacksHandler: opt.callbackHandler, + host: hostnameFromURL(opt.baseURL), + structuredOutputFallback: opt.structuredOutputFallback, }, err } @@ -134,6 +137,9 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten if len(result.Choices) == 0 { return nil, ErrEmptyResponse } + if o.emulatesStructuredOutput(o.effectiveModel(opts), opts) { + unwrapEmulatedAnswers(result) + } response := o.processResponse(result, warn) @@ -187,6 +193,7 @@ func (o *LLM) convertMessages(messages []llms.MessageContent, model string) ([]* msg.MultiContent = withThinkTags(msg.MultiContent, extractReasoningContent(mc.Parts)) case len(toolCalls) > 0 || reasoning.ReplaysReasoningOnEveryTurn(model): msg.ReasoningContent = extractReasoningContent(mc.Parts) + msg.KeepsEmptyReasoning = reasoning.ReplaysEmptyReasoning(model) } } @@ -335,7 +342,7 @@ func (o *LLM) createChatRequest( // per-call schema-constrained structured output takes precedence over JSONMode // and conflicts with a client-level response format. - if err := o.setStructuredOutput(req, opts); err != nil { + if err := o.setStructuredOutput(req, opts, warn); err != nil { return nil, err } diff --git a/llms/openai/openaillm_option.go b/llms/openai/openaillm_option.go index 072e869ca..6fbf435c1 100644 --- a/llms/openai/openaillm_option.go +++ b/llms/openai/openaillm_option.go @@ -42,6 +42,9 @@ type options struct { // preserve reasoning content in multi-turn conversations with tool calls preserveReasoningContent bool + // carry a structured-output schema in the prompt for vendors without json_schema + structuredOutputFallback bool + // required when APIType is APITypeAzure or APITypeAzureAD apiVersion string embeddingModel string @@ -179,9 +182,40 @@ func WithModernReasoningFormat() Option { // every turn as a thinking chunk at the head of content instead, and one that // does not reason there takes none. A MiniMax M-series model on MiniMax's API // takes it on every turn inside tags at the head of content, unless the -// content already opens with a block. +// content already opens with a block. A DeepSeek ("deepseek-") assistant +// turn that holds no reasoning goes back with an empty reasoning_content, which +// DeepSeek's thinking mode requires after the last user message; keep the +// reasoning DeepSeek returned in the history, since the empty field also stops +// DeepSeek from restoring it by the turn's tool call ID. func WithPreserveReasoningContent() Option { return func(opts *options) { opts.preserveReasoningContent = true } } + +// WithStructuredOutputFallback lets a llms.WithStructuredOutput call reach a +// model whose vendor takes no json_schema response format: DeepSeek +// ("deepseek-" models) and Z.ai GLM ("glm-" models, not the ones Mistral serves), +// which take json_object, and MiniMax M-series models on MiniMax's API, which +// take no response_format at all. Instead of failing with +// [llms.ErrStructuredOutputUnsupported], the call appends the JSON Schema to the +// last user message (or adds a user message when there is none), sends +// response_format json_object where the vendor has it, and reports an +// [llms.WarningSubstitute]. The schema and its name are checked exactly as for +// the native path, so one schema serves both. +// +// Nothing on the server holds the answer to the schema, so it is validated +// locally: a single Markdown code fence around the whole answer and a thinking +// block at its head are removed first (streamed text chunks still carry them), +// and any other answer that is not exactly one JSON value matching the schema +// comes back together with [llms.ErrStructuredOutputValidation], which a caller +// should treat as retryable. +// A tool-call turn and a truncated answer are not validated; on these vendors +// max_tokens also covers the reasoning, so a tight budget can end on "length" +// with an empty answer (see [llms.WithFailOnTruncation]). Every other model keeps +// the native json_schema response format. +func WithStructuredOutputFallback() Option { + return func(opts *options) { + opts.structuredOutputFallback = true + } +} diff --git a/llms/openai/structured_output.go b/llms/openai/structured_output.go index 440f065d0..284421948 100644 --- a/llms/openai/structured_output.go +++ b/llms/openai/structured_output.go @@ -79,8 +79,11 @@ func setClientResponseFormat(req *openaiclient.ChatRequest, model string, rf *Re // setStructuredOutput translates a per-call llms.StructuredOutput into OpenAI's // json_schema response format with strict:true. It takes precedence over the // schema-less JSONMode json_object and returns a typed conflict against a -// client-level response format rather than silently overwriting one. -func (o *LLM) setStructuredOutput(req *openaiclient.ChatRequest, opts llms.CallOptions) error { +// client-level response format rather than silently overwriting one. Under +// WithStructuredOutputFallback a model without json_schema gets the schema in +// the prompt instead, with json_object where its vendor has it, after the same +// checks. +func (o *LLM) setStructuredOutput(req *openaiclient.ChatRequest, opts llms.CallOptions, warn *llms.Warnings) error { so := opts.StructuredOutput if so == nil { return nil @@ -98,7 +101,8 @@ func (o *LLM) setStructuredOutput(req *openaiclient.ChatRequest, opts llms.CallO } } model := o.effectiveModel(opts) - if reason := openAIStructuredOutputUnsupported(model); reason != "" { + emulated := o.emulatesStructuredOutput(model, opts) + if reason := openAIStructuredOutputUnsupported(model); reason != "" && !emulated { return &llms.ErrStructuredOutputUnsupported{ Provider: providerOpenAI, Model: model, @@ -108,10 +112,95 @@ func (o *LLM) setStructuredOutput(req *openaiclient.ChatRequest, opts llms.CallO if err := validateOpenAIStructuredSchema(so.Schema); err != nil { return err } + if emulated { + sent, reason := "a prompt instruction", takesNoResponseFormat + if noJSONObjectReason(model) == "" { + req.SetResponseFormat(ResponseFormatJSON) + sent, reason = "json_object and a prompt instruction", "the vendor's chat completions response_format takes only text and json_object" + } + // addToolsToRequest has already moved functions into req.Tools. + req.Messages = injectSchemaInstruction(req.Messages, so.Schema, len(req.Tools) > 0) + warn.Add(llms.Warning{ + Kind: llms.WarningSubstitute, Option: "WithStructuredOutput", Model: model, + Asked: so.Name, Sent: sent, + Reason: reason + ", so the schema travels in the prompt and the answer is validated locally", + }) + return nil + } req.SetStructuredOutputSchema(so.Name, so.Description, so.Schema) return nil } +// emulatesStructuredOutput reports whether a structured-output call travels as +// a prompt instruction: the client opted in with WithStructuredOutputFallback, +// and the model's vendor takes json_object but no json_schema, which then goes +// along, or takes no response_format at all. +func (o *LLM) emulatesStructuredOutput(model string, opts llms.CallOptions) bool { + if opts.StructuredOutput == nil || !o.structuredOutputFallback { + return false + } + return (reasoning.TakesNoJSONSchema(model) && noJSONObjectReason(model) == "") || + reasoning.TakesNoResponseFormat(model) +} + +// injectSchemaInstruction appends the schema instruction to the last user +// message of the request. The messages are the request's own copies, but their +// part slices are copied again before a part changes. Z.ai answers no +// conversation without a user turn, so when there is none the instruction +// becomes that turn. +func injectSchemaInstruction(msgs []*ChatMessage, schema json.RawMessage, withTools bool) []*ChatMessage { + instruction := structuredoutput.PromptInstruction(schema, withTools) + for i := len(msgs) - 1; i >= 0; i-- { + if msgs[i].Role != RoleUser { + continue + } + msg := *msgs[i] + switch { + case msg.Content != "": + msg.Content += "\n\n" + instruction + default: + parts := append([]llms.ContentPart(nil), msg.MultiContent...) + if last := len(parts) - 1; last >= 0 { + if text, ok := parts[last].(llms.TextContent); ok { + parts[last] = llms.TextContent{Text: text.Text + "\n\n" + instruction} + msg.MultiContent = parts + break + } + } + msg.MultiContent = append(parts, llms.TextContent{Text: instruction}) + } + msgs[i] = &msg + return msgs + } + return append(msgs, &ChatMessage{Role: RoleUser, MultiContent: []llms.ContentPart{llms.TextContent{Text: instruction}}}) +} + +// unwrapEmulatedAnswers readies each final answer of an emulated structured +// output call before it is read and validated: the whitespace around it goes, a +// thinking block at its head is taken out, and then the Markdown code fence a +// model put around its whole answer despite the prompt instruction is removed. +// The block becomes the reasoning only when there is none: MiniMax M2.7 and M3 +// stream their thinking both as reasoning and inside tags in the +// content, which the client then leaves whole. Only a normal-final choice +// without a tool call is touched. +func unwrapEmulatedAnswers(result *openaiclient.ChatCompletionResponse) { + for _, choice := range result.Choices { + if choice == nil || choice.FinishReason != openaiclient.FinishReasonStop || len(choice.Message.ToolCalls) != 0 { + continue + } + msg := &choice.Message + content := strings.TrimSpace(msg.Content) + if strings.HasPrefix(content, "") || strings.HasPrefix(content, "") { + var thought string + thought, content = reasoning.SplitContent(content) + if msg.ReasoningContent == "" { + msg.ReasoningContent = thought + } + } + msg.Content = structuredoutput.UnwrapFencedJSON(content) + } +} + // validateStructuredResponse checks each normal-final ("stop") choice against the // requested schema. A refusal is surfaced through GenerationInfo, not validated; // length, content_filter, tool_calls and function_call are not final JSON either. diff --git a/llms/openai/structured_output_fallback_live_test.go b/llms/openai/structured_output_fallback_live_test.go new file mode 100644 index 000000000..b4f3696ec --- /dev/null +++ b/llms/openai/structured_output_fallback_live_test.go @@ -0,0 +1,211 @@ +package openai + +import ( + "context" + "encoding/json" + "net/http" + "os" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/internal/httprr" + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/reasoning" + "github.com/vxcontrol/langchaingo/llms/streaming" + "github.com/vxcontrol/langchaingo/llms/structuredoutput" +) + +// The vendors' OpenAI-compatible endpoints are fixed rather than read from +// ZAI_API_BASE or MINIMAX_API_BASE because a replay matches the recorded URL +// byte for byte. +const ( + zaiBaseURL = "https://api.z.ai/api/paas/v4" + miniMaxBaseURL = "https://api.minimax.io/v1" +) + +func newTestZAIClient(t *testing.T, opts ...Option) *LLM { + t.Helper() + return newTestVendorClient(t, "ZAI_API_KEY", zaiBaseURL, opts...) +} + +func newTestMiniMaxClient(t *testing.T, opts ...Option) *LLM { + t.Helper() + return newTestVendorClient(t, "MINIMAX_API_KEY", miniMaxBaseURL, opts...) +} + +func newTestVendorClient(t *testing.T, keyEnv, baseURL string, opts ...Option) *LLM { + t.Helper() + + httprr.SkipIfNoCredentialsAndRecordingMissing(t, keyEnv) + rr := httprr.OpenForTest(t, http.DefaultTransport) + + clientOpts := []Option{WithBaseURL(baseURL), WithHTTPClient(rr.Client())} + if rr.Recording() { + clientOpts = append(clientOpts, WithToken(os.Getenv(keyEnv))) + } else { + clientOpts = append(clientOpts, WithToken("fake-api-key-for-testing")) + } + llm, err := New(append(clientOpts, opts...)...) + require.NoError(t, err) + return llm +} + +// cityGuideSchema is a nested schema inside OpenAI's strict subset, so the same +// schema would go to OpenAI as json_schema. +const cityGuideSchema = `{"type":"object","properties":{` + + `"city":{"type":"string"},` + + `"landmarks":{"type":"array","items":{"type":"object","properties":{` + + `"name":{"type":"string"},"kind":{"type":"string","enum":["museum","monument","park","church","other"]}},` + + `"required":["name","kind"],"additionalProperties":false}}},` + + `"required":["city","landmarks"],"additionalProperties":false}` + +type cityGuide struct { + City string `json:"city"` + Landmarks []struct { + Name string `json:"name"` + Kind string `json:"kind"` + } `json:"landmarks"` +} + +// askForACityGuide runs the fallback against a live vendor with a system prompt +// that demands Markdown, which the schema instruction has to override. +func askForACityGuide(t *testing.T, llm *LLM, stream bool, opts ...llms.CallOption) { + t.Helper() + + opts = append(opts, llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "city_guide", Schema: json.RawMessage(cityGuideSchema), + })) + var streamed strings.Builder + if stream { + opts = append(opts, llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + streamed.WriteString(chunk.Content) + } + return nil + })) + } + + resp, err := llm.GenerateContent(context.Background(), []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeSystem, "You are a travel guide. Answer in Markdown with headings."), + llms.TextParts(llms.ChatMessageTypeHuman, "Name two landmarks of Paris."), + }, opts...) + require.NoError(t, err, "the answer must validate against the schema") + + var guide cityGuide + require.NoError(t, json.Unmarshal([]byte(resp.Choices[0].Content), &guide)) + assert.Equal(t, "Paris", guide.City) + assert.NotEmpty(t, guide.Landmarks) + if stream { + // MiniMax streams its thinking inside tags in the text as well. + _, text := reasoning.SplitContent(streamed.String()) + assert.Equal(t, resp.Choices[0].Content, structuredoutput.UnwrapFencedJSON(text)) + } + + var substitutes int + for _, w := range resp.Warnings { + if w.Option == "WithStructuredOutput" && w.Kind == llms.WarningSubstitute { + substitutes++ + } + } + assert.Equal(t, 1, substitutes) +} + +func TestStructuredOutputFallbackDeepSeek(t *testing.T) { + for _, stream := range []bool{false, true} { + name := "non-streaming" + if stream { + name = "streaming" + } + t.Run(name, func(t *testing.T) { + llm := newTestDeepSeekClient(t, WithModel("deepseek-flash"), WithStructuredOutputFallback()) + askForACityGuide(t, llm, stream) + }) + } +} + +func TestStructuredOutputFallbackZAI(t *testing.T) { + for _, stream := range []bool{false, true} { + name := "non-streaming" + if stream { + name = "streaming" + } + t.Run(name, func(t *testing.T) { + llm := newTestZAIClient(t, WithModel("glm-5.3-flash"), WithStructuredOutputFallback()) + askForACityGuide(t, llm, stream, llms.WithReasoning(llms.ReasoningLow, 0)) + }) + } +} + +func TestStructuredOutputFallbackMiniMax(t *testing.T) { + for _, stream := range []bool{false, true} { + name := "non-streaming" + if stream { + name = "streaming" + } + t.Run(name, func(t *testing.T) { + llm := newTestMiniMaxClient(t, WithModel("MiniMax-M2.7"), WithStructuredOutputFallback()) + askForACityGuide(t, llm, stream) + }) + } +} + +// TestStructuredOutputFallbackZAIToolRound checks that the schema instruction +// leaves tool calls open: the model calls the tool first, then answers with JSON +// that matches the schema once the tool result is in. +func TestStructuredOutputFallbackZAIToolRound(t *testing.T) { + llm := newTestZAIClient(t, WithModel("glm-5.3-flash"), WithStructuredOutputFallback(), WithPreserveReasoningContent()) + askForTheWeatherWithATool(t, llm, llms.WithReasoning(llms.ReasoningLow, 0)) +} + +// TestStructuredOutputFallbackMiniMaxToolRound does the same on MiniMax, whose +// thinking goes back inside tags at the head of the tool-call turn. +func TestStructuredOutputFallbackMiniMaxToolRound(t *testing.T) { + llm := newTestMiniMaxClient(t, WithModel("MiniMax-M2.7"), WithStructuredOutputFallback(), WithPreserveReasoningContent()) + askForTheWeatherWithATool(t, llm) +} + +func askForTheWeatherWithATool(t *testing.T, llm *LLM, extra ...llms.CallOption) { + t.Helper() + + schema := llms.WithStructuredOutput(llms.StructuredOutputConfig{ + Name: "weather", + Schema: json.RawMessage(`{"type":"object","properties":{"city":{"type":"string"},` + + `"temperature_c":{"type":"integer"},"summary":{"type":"string"}},` + + `"required":["city","temperature_c","summary"],"additionalProperties":false}`), + }) + tools := llms.WithTools([]llms.Tool{{Type: "function", Function: &llms.FunctionDefinition{ + Name: "get_weather", Description: "Current weather for a city", + Parameters: map[string]any{ + "type": "object", "properties": map[string]any{"city": map[string]any{"type": "string"}}, + "required": []string{"city"}, + }, + }}}) + opts := append([]llms.CallOption{schema, tools}, extra...) + + messages := make([]llms.MessageContent, 0, 3) + messages = append(messages, llms.TextParts(llms.ChatMessageTypeHuman, "What is the weather in Paris? Use the tool.")) + first, err := llm.GenerateContent(context.Background(), messages, opts...) + require.NoError(t, err) + require.NotEmpty(t, first.Choices[0].ToolCalls, "the schema instruction must not keep the model from calling the tool") + call := first.Choices[0].ToolCalls[0] + + assistant := llms.MessageContent{Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{ + llms.TextContent{Text: first.Choices[0].Content, Reasoning: first.Choices[0].Reasoning}, call, + }} + messages = append(messages, assistant, llms.MessageContent{Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{ + llms.ToolCallResponse{ToolCallID: call.ID, Name: call.FunctionCall.Name, Content: `{"temperature_c":18,"conditions":"light rain"}`}, + }}) + + final, err := llm.GenerateContent(context.Background(), messages, opts...) + require.NoError(t, err, "the answer after the tool result must validate against the schema") + var weather struct { + City string `json:"city"` + TemperatureC int `json:"temperature_c"` + } + require.NoError(t, json.Unmarshal([]byte(final.Choices[0].Content), &weather)) + assert.Equal(t, "Paris", weather.City) + assert.Equal(t, 18, weather.TemperatureC) +} diff --git a/llms/openai/structured_output_fallback_test.go b/llms/openai/structured_output_fallback_test.go new file mode 100644 index 000000000..bd0edb400 --- /dev/null +++ b/llms/openai/structured_output_fallback_test.go @@ -0,0 +1,643 @@ +package openai + +import ( + "context" + "encoding/json" + "errors" + "io" + "net/http" + "net/http/httptest" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/vxcontrol/langchaingo/llms" + "github.com/vxcontrol/langchaingo/llms/streaming" + "github.com/vxcontrol/langchaingo/llms/structuredoutput" +) + +// fallbackReply is what the stub vendor answers: one choice, as a single +// completion or, for a streaming request, as SSE chunks of the given pieces. +// A streamed piece can carry a reasoning delta too, as MiniMax's do. +type fallbackReply struct { + pieces []string + reasonings []string + finishReason string + toolCall bool +} + +// fallbackServer answers every chat request with the same reply and keeps the +// request bodies for the test goroutine to decode. +type fallbackServer struct { + *httptest.Server + + mu sync.Mutex + bodies [][]byte +} + +func newFallbackServer(t *testing.T, reply fallbackReply) *fallbackServer { + t.Helper() + + if reply.finishReason == "" { + reply.finishReason = "stop" + } + fs := &fallbackServer{} + fs.Server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body, _ := io.ReadAll(r.Body) + fs.mu.Lock() + fs.bodies = append(fs.bodies, body) + fs.mu.Unlock() + + content, _ := json.Marshal(strings.Join(reply.pieces, "")) + toolCalls := "" + if reply.toolCall { + toolCalls = `,"tool_calls":[{"id":"call_1","type":"function",` + + `"function":{"name":"get_weather","arguments":"{\"city\":\"Paris\"}"}}]` + } + if !strings.Contains(string(body), `"stream":true`) { + w.Header().Set("Content-Type", "application/json") + _, _ = io.WriteString(w, `{"id":"x","object":"chat.completion","created":1,"model":"m",`+ + `"choices":[{"index":0,"message":{"role":"assistant","content":`+string(content)+toolCalls+`},`+ + `"finish_reason":"`+reply.finishReason+`"}],"usage":{"prompt_tokens":1,"completion_tokens":1,"total_tokens":2}}`) + return + } + w.Header().Set("Content-Type", "text/event-stream") + for i, piece := range reply.pieces { + delta, _ := json.Marshal(piece) + thought := "" + if i < len(reply.reasonings) && reply.reasonings[i] != "" { + raw, _ := json.Marshal(reply.reasonings[i]) + thought = `,"reasoning":` + string(raw) + } + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,"model":"m",`+ + `"choices":[{"index":0,"delta":{"role":"assistant","content":`+string(delta)+thought+`},"finish_reason":null}]}`+"\n\n") + } + _, _ = io.WriteString(w, `data: {"id":"x","object":"chat.completion.chunk","created":1,"model":"m",`+ + `"choices":[{"index":0,"delta":{},"finish_reason":"`+reply.finishReason+`"}]}`+"\n\ndata: [DONE]\n\n") + })) + t.Cleanup(fs.Close) + return fs +} + +func (fs *fallbackServer) requests() int { + fs.mu.Lock() + defer fs.mu.Unlock() + return len(fs.bodies) +} + +// wireRequest is the part of a chat request these tests read. +type wireRequest struct { + ResponseFormat json.RawMessage `json:"response_format"` + Messages []struct { + Role string `json:"role"` + Content json.RawMessage `json:"content"` + } `json:"messages"` + Tools []any `json:"tools"` +} + +func (fs *fallbackServer) request(t *testing.T, i int) wireRequest { + t.Helper() + + fs.mu.Lock() + defer fs.mu.Unlock() + require.Greater(t, len(fs.bodies), i, "the server got fewer requests than expected") + var req wireRequest + require.NoError(t, json.Unmarshal(fs.bodies[i], &req)) + return req +} + +// messageText returns a wire content as text: the string itself, or the text +// parts of a content array joined, and whether it was an array. +func messageText(t *testing.T, content json.RawMessage) (string, bool) { + t.Helper() + + var text string + if json.Unmarshal(content, &text) == nil { + return text, false + } + var parts []struct { + Type string `json:"type"` + Text string `json:"text"` + } + require.NoError(t, json.Unmarshal(content, &parts)) + var texts []string + for _, part := range parts { + if part.Type == "text" { + texts = append(texts, part.Text) + } + } + return strings.Join(texts, "|"), true +} + +func newFallbackLLM(t *testing.T, serverURL, model string, extra ...Option) *LLM { + t.Helper() + + opts := append([]Option{WithBaseURL(serverURL), WithToken("test"), WithModel(model), WithStructuredOutputFallback()}, extra...) + llm, err := New(opts...) + require.NoError(t, err) + return llm +} + +func answerSchema() llms.CallOption { + return llms.WithStructuredOutput(llms.StructuredOutputConfig{Name: "answer", Schema: objectSchema()}) +} + +func TestTheFallbackSendsJSONObjectAndTheSchemaInThePrompt(t *testing.T) { + t.Parallel() + + for _, model := range []string{"deepseek-flash", "deepseek-v4-pro", "deepseek/deepseek-v4-pro", "glm-5.3", "zai/glm-5.3"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: []string{`{"answer":"42"}`}}) + resp, err := newFallbackLLM(t, srv.URL, model).GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema()) + require.NoError(t, err) + assert.Equal(t, `{"answer":"42"}`, resp.Choices[0].Content) + + req := srv.request(t, 0) + assert.JSONEq(t, `{"type":"json_object"}`, string(req.ResponseFormat), "no json_schema reaches the vendor") + text, array := messageText(t, req.Messages[0].Content) + assert.False(t, array, "a text message stays a string") + assert.Equal(t, "question\n\n"+structuredoutput.PromptInstruction(objectSchema(), false), text) + + var substitute llms.Warning + for _, w := range resp.Warnings { + if w.Option == "WithStructuredOutput" { + substitute = w + } + } + assert.Equal(t, llms.WarningSubstitute, substitute.Kind) + assert.Equal(t, model, substitute.Model) + assert.Equal(t, "answer", substitute.Asked) + assert.Equal(t, "json_object and a prompt instruction", substitute.Sent) + assert.Equal(t, "the vendor's chat completions response_format takes only text and json_object, "+ + "so the schema travels in the prompt and the answer is validated locally", substitute.Reason) + }) + } +} + +func TestTheFallbackSendsMiniMaxOnlyTheSchemaInThePrompt(t *testing.T) { + t.Parallel() + + for _, model := range []string{"MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M3", "minimax/MiniMax-M3"} { + t.Run(model, func(t *testing.T) { + t.Parallel() + + // MiniMax puts its thinking at the head of content; the client splits it off. + srv := newFallbackServer(t, fallbackReply{pieces: []string{"\nThe user wants JSON.\n\n\n", `{"answer":"42"}`}}) + resp, err := newFallbackLLM(t, srv.URL, model).GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema(), llms.WithJSONMode()) + require.NoError(t, err) + assert.Equal(t, `{"answer":"42"}`, resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Equal(t, "The user wants JSON.", resp.Choices[0].Reasoning.Content) + + req := srv.request(t, 0) + assert.Empty(t, req.ResponseFormat, "MiniMax's API has no response_format, not even json_object") + text, _ := messageText(t, req.Messages[0].Content) + assert.Equal(t, "question\n\n"+structuredoutput.PromptInstruction(objectSchema(), false), text) + + var warnings []llms.Warning + for _, w := range resp.Warnings { + if w.Option == "WithStructuredOutput" || w.Option == "WithJSONMode" { + warnings = append(warnings, w) + } + } + require.Len(t, warnings, 1, "JSON mode under the schema is not reported on its own") + assert.Equal(t, llms.WarningSubstitute, warnings[0].Kind) + assert.Equal(t, "WithStructuredOutput", warnings[0].Option) + assert.Equal(t, "a prompt instruction", warnings[0].Sent) + assert.Equal(t, "the vendor's chat completions API takes no response_format for this model, "+ + "so the schema travels in the prompt and the answer is validated locally", warnings[0].Reason) + }) + } +} + +// placementCase is a conversation and where the fallback must put the schema. +type placementCase struct { + name string + messages []llms.MessageContent + opts []llms.CallOption + roles []string + instructed int + prefix string + array bool + toolsNote bool +} + +func placementCases() []placementCase { + toolCall := llms.ToolCall{ + ID: "call_1", Type: "function", + FunctionCall: &llms.FunctionCall{Name: "get_weather", Arguments: `{"city":"Paris"}`}, + } + return []placementCase{ + { + name: "only the last of several user turns", + messages: []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeSystem, "sys"), + llms.TextParts(llms.ChatMessageTypeHuman, "first"), + llms.TextParts(llms.ChatMessageTypeAI, "reply"), + llms.TextParts(llms.ChatMessageTypeHuman, "second"), + }, + roles: []string{"system", "user", "assistant", "user"}, instructed: 3, prefix: "second\n\n", + }, + { + name: "the user turn before a tool round, telling the model it may still call tools", + messages: []llms.MessageContent{ + llms.TextParts(llms.ChatMessageTypeHuman, "weather in Paris?"), + {Role: llms.ChatMessageTypeAI, Parts: []llms.ContentPart{toolCall}}, + {Role: llms.ChatMessageTypeTool, Parts: []llms.ContentPart{llms.ToolCallResponse{ + ToolCallID: toolCall.ID, Name: "get_weather", Content: "sunny", + }}}, + }, + opts: []llms.CallOption{llms.WithTools([]llms.Tool{weatherTool()})}, + roles: []string{"user", "assistant", "tool"}, instructed: 0, prefix: "weather in Paris?\n\n", toolsNote: true, + }, + { + name: "a user turn of its own when there is none, since Z.ai answers no conversation without one", + messages: []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeSystem, "sys")}, + roles: []string{"system", "user"}, instructed: 1, prefix: structuredoutput.SchemaInstruction, + }, + { + name: "a text part of its own after an image", + messages: []llms.MessageContent{{Role: llms.ChatMessageTypeHuman, Parts: []llms.ContentPart{ + llms.TextContent{Text: "what is this?"}, + llms.ImageURLContent{URL: "https://example.com/cat.png"}, + }}}, + roles: []string{"user"}, instructed: 0, prefix: "what is this?|" + structuredoutput.SchemaInstruction, array: true, + }, + } +} + +func TestTheFallbackCarriesTheSchemaInThePrompt(t *testing.T) { + t.Parallel() + + for _, tc := range placementCases() { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: []string{`{"answer":"42"}`}}) + llm := newFallbackLLM(t, srv.URL, "deepseek-flash") + + before, err := json.Marshal(tc.messages) + require.NoError(t, err) + opts := append([]llms.CallOption{answerSchema()}, tc.opts...) + for range 2 { + _, err = llm.GenerateContent(t.Context(), tc.messages, opts...) + require.NoError(t, err) + } + after, err := json.Marshal(tc.messages) + require.NoError(t, err) + assert.JSONEq(t, string(before), string(after), "the caller's messages must stay as they were") + + for call := range 2 { + assertPlacement(t, srv.request(t, call), tc) + } + }) + } +} + +// assertPlacement checks that exactly the expected wire message carries the +// schema instruction, once, after the text the caller wrote there. +func assertPlacement(t *testing.T, req wireRequest, tc placementCase) { + t.Helper() + + roles := make([]string, len(req.Messages)) + for i, m := range req.Messages { + roles[i] = m.Role + if i != tc.instructed { + assert.NotContains(t, string(m.Content), "JSON Schema", "message %d must not carry the schema", i) + } + } + require.Equal(t, tc.roles, roles) + + got, array := messageText(t, req.Messages[tc.instructed].Content) + assert.Equal(t, tc.array, array) + assert.True(t, strings.HasPrefix(got, tc.prefix), "got %q", got) + assert.Equal(t, 1, strings.Count(got, structuredoutput.SchemaInstruction), "a repeated call must not stack the instruction") + assert.Contains(t, got, `"answer"`, "the schema itself travels") + assert.Equal(t, tc.toolsNote, strings.Contains(got, structuredoutput.ToolsNote)) +} + +func TestTheFallbackReachesOnlyModelsWithoutJSONSchema(t *testing.T) { + t.Parallel() + + human := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")} + + t.Run("models with json_schema keep it", func(t *testing.T) { + t.Parallel() + for _, model := range []string{"gpt-4o", "glm-5-2", "mistral/zai-glm-5-2", "MiniMax-Text-01", "openrouter/minimax/minimax-m3"} { + srv := newFallbackServer(t, fallbackReply{pieces: []string{`{"answer":"42"}`}}) + resp, err := newFallbackLLM(t, srv.URL, model).GenerateContent(t.Context(), human, answerSchema()) + require.NoError(t, err, model) + + req := srv.request(t, 0) + assert.Contains(t, string(req.ResponseFormat), `"json_schema"`, model) + text, _ := messageText(t, req.Messages[0].Content) + assert.Equal(t, "question", text, model) + for _, w := range resp.Warnings { + assert.NotEqual(t, "WithStructuredOutput", w.Option, model) + } + } + }) + + t.Run("without the option the vendor is still refused before any request", func(t *testing.T) { + t.Parallel() + for _, model := range []string{"deepseek-flash", "MiniMax-M2.7"} { + srv := newFallbackServer(t, fallbackReply{pieces: []string{`{"answer":"42"}`}}) + llm, err := New(WithBaseURL(srv.URL), WithToken("test"), WithModel(model)) + require.NoError(t, err) + + _, err = llm.GenerateContent(t.Context(), human, answerSchema()) + var unsupported *llms.ErrStructuredOutputUnsupported + require.ErrorAs(t, err, &unsupported, model) + assert.Zero(t, srv.requests(), model) + } + }) + + t.Run("JSON mode alone is left as it was", func(t *testing.T) { + t.Parallel() + srv := newFallbackServer(t, fallbackReply{pieces: []string{`{"a":1}`}}) + resp, err := newFallbackLLM(t, srv.URL, "deepseek-flash").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "answer in json")}, llms.WithJSONMode()) + require.NoError(t, err) + + req := srv.request(t, 0) + assert.JSONEq(t, `{"type":"json_object"}`, string(req.ResponseFormat)) + text, _ := messageText(t, req.Messages[0].Content) + assert.Equal(t, "answer in json", text) + assert.Empty(t, resp.Warnings) + }) +} + +func TestTheFallbackChecksTheSchemaAsTheNativePathDoes(t *testing.T) { + t.Parallel() + + human := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")} + for _, tc := range []struct { + name string + config llms.StructuredOutputConfig + opts []Option + want error + }{ + {name: "a schema without a name", config: llms.StructuredOutputConfig{Schema: objectSchema()}, want: llms.ErrStructuredOutputConfig}, + { + name: "a schema outside the strict subset", + config: llms.StructuredOutputConfig{Name: "answer", Schema: json.RawMessage(`{"type":"array","items":{"type":"string"}}`)}, + want: llms.ErrStructuredOutputConfig, + }, + { + name: "a client-level response format", + config: llms.StructuredOutputConfig{Name: "answer", Schema: objectSchema()}, + opts: []Option{WithResponseFormat(ResponseFormatJSON)}, + }, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + var errs [2]error + for i, model := range []string{"gpt-4o", "deepseek-flash"} { + srv := newFallbackServer(t, fallbackReply{pieces: []string{`{"answer":"42"}`}}) + _, errs[i] = newFallbackLLM(t, srv.URL, model, tc.opts...).GenerateContent(t.Context(), human, + llms.WithStructuredOutput(tc.config)) + require.Error(t, errs[i], model) + assert.Zero(t, srv.requests(), "%s: refused before any request", model) + } + if tc.want != nil { + require.ErrorIs(t, errs[1], tc.want) + } else { + var conflict *llms.ErrStructuredOutputConflict + require.ErrorAs(t, errs[1], &conflict) + } + assert.Equal(t, errs[0].Error(), errs[1].Error(), "the vendor without json_schema gets the same verdict") + }) + } +} + +func TestTheFallbackValidatesTheAnswerLocally(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + reply fallbackReply + invalid bool + want string + }{ + {name: "a valid answer", reply: fallbackReply{pieces: []string{`{"answer":"42"}`}}, want: `{"answer":"42"}`}, + {name: "a fenced answer is unwrapped", reply: fallbackReply{pieces: []string{"```json\n{\"answer\":\"42\"}\n```"}}, want: `{"answer":"42"}`}, + {name: "an answer off the schema", reply: fallbackReply{pieces: []string{`{"answer":42}`}}, invalid: true, want: `{"answer":42}`}, + {name: "prose around the answer", reply: fallbackReply{pieces: []string{`Here: {"answer":"42"}`}}, invalid: true, want: `Here: {"answer":"42"}`}, + {name: "broken JSON", reply: fallbackReply{pieces: []string{`{"answer":["42"}`}}, invalid: true, want: `{"answer":["42"}`}, + {name: "an empty answer", reply: fallbackReply{pieces: []string{""}}, invalid: true}, + { + name: "a truncated answer is left alone", + reply: fallbackReply{pieces: []string{"```json\n{\"answer\":\"```"}, finishReason: "length"}, want: "```json\n{\"answer\":\"```", + }, + {name: "a tool-call turn is not the final answer", reply: fallbackReply{pieces: []string{" "}, finishReason: "tool_calls", toolCall: true}}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, tc.reply) + opts := []llms.CallOption{answerSchema()} + if tc.reply.toolCall { + opts = append(opts, llms.WithTools([]llms.Tool{weatherTool()})) + } + resp, err := newFallbackLLM(t, srv.URL, "glm-5.3").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, opts...) + require.NotNil(t, resp, "the answer comes back with any error") + + if tc.invalid { + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + assert.Equal(t, "glm-5.3", validation.Model) + } else { + require.NoError(t, err) + } + if !tc.reply.toolCall { + assert.Equal(t, tc.want, resp.Choices[0].Content) + } + }) + } +} + +func TestTheFallbackValidatesTheStreamedAnswer(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + name string + pieces []string + content string + invalid bool + }{ + {name: "a valid answer in pieces", pieces: []string{`{"answer":`, `"42"}`}, content: `{"answer":"42"}`}, + {name: "a fenced answer in pieces is unwrapped once complete", pieces: []string{"```json\n", `{"answer":"42"}`, "\n```"}, content: `{"answer":"42"}`}, + {name: "prose in pieces", pieces: []string{"The answer ", "is 42."}, content: "The answer is 42.", invalid: true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: tc.pieces}) + var streamed strings.Builder + resp, err := newFallbackLLM(t, srv.URL, "deepseek-flash").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, + answerSchema(), llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeText { + streamed.WriteString(chunk.Content) + } + return nil + })) + + require.NotNil(t, resp) + assert.Equal(t, strings.Join(tc.pieces, ""), streamed.String(), "every chunk reaches the caller as sent") + assert.Equal(t, tc.content, resp.Choices[0].Content) + var validation *llms.ErrStructuredOutputValidation + assert.Equal(t, tc.invalid, errors.As(err, &validation), "got %v", err) + if !tc.invalid { + require.NoError(t, err) + } + }) + } +} + +func TestTheFallbackValidatesMiniMaxStreamedAnswerAfterItsThinking(t *testing.T) { + t.Parallel() + + pieces := []string{"\nThe user", " wants JSON.", "\n\n\n", "```json\n", `{"answer":"42"}`, "\n```"} + for _, tc := range []struct { + name string + reasonings []string + }{ + {name: "thinking only inside the content"}, + // What MiniMax's API streams: every thinking piece twice, inside the + // content and as a reasoning delta, so the client leaves the content whole. + {name: "thinking in the content and as reasoning too", reasonings: []string{"The user", " wants JSON."}}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: pieces, reasonings: tc.reasonings}) + var thought strings.Builder + resp, err := newFallbackLLM(t, srv.URL, "MiniMax-M2.7").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, + answerSchema(), llms.WithStreamingFunc(func(_ context.Context, chunk streaming.Chunk) error { + if chunk.Type == streaming.ChunkTypeReasoning { + thought.WriteString(chunk.Reasoning.Content) + } + return nil + })) + + require.NoError(t, err) + assert.Equal(t, `{"answer":"42"}`, resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Contains(t, resp.Choices[0].Reasoning.Content, "The user wants JSON.") + assert.NotContains(t, resp.Choices[0].Reasoning.Content, "think>") + assert.Contains(t, thought.String(), "wants JSON") + assert.Empty(t, srv.request(t, 0).ResponseFormat) + }) + } +} + +func TestTheFallbackMovesOnlyTheThinkingAtTheHeadOfTheAnswer(t *testing.T) { + t.Parallel() + + // Every piece carries a reasoning delta, so the client leaves the content whole. + for name, pieces := range map[string][]string{ + "thinking after the answer": {`{"answer":"42"} `, "late"}, + "thinking never closed": {"never closed ", `{"answer":"42"}`}, + } { + t.Run(name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: pieces, reasonings: []string{"r", "r"}}) + resp, err := newFallbackLLM(t, srv.URL, "MiniMax-M2.7").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema(), + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + require.NotNil(t, resp) + assert.Equal(t, strings.Join(pieces, ""), resp.Choices[0].Content) + }) + } +} + +// A thinking block at the head of the answer is taken out in every shape a +// stream can leave it in, and never replaces the reasoning that was streamed. +func TestTheFallbackTakesOutTheThinkingAtTheHeadOfTheAnswer(t *testing.T) { + t.Parallel() + + const answer = `{"answer":"42"}` + for _, tc := range []struct { + name string + pieces []string + reasonings []string + want string + }{ + {name: "a thinking block", pieces: []string{"plan\n\n", answer}, reasonings: []string{"plan"}, want: "plan"}, + {name: "whitespace before the block", pieces: []string{"\nplan\n\n", answer}, reasonings: []string{"plan"}, want: "plan"}, + // The chunk splitter sees no tag in either piece, and no reasoning delta + // came, so the block reaches the unwrap whole with no reasoning beside it. + {name: "a tag split across chunks without reasoning deltas", pieces: []string{"plan\n\n", answer}, want: "plan"}, + {name: "streamed reasoning differing from the block", pieces: []string{"plan\n\n", answer}, reasonings: []string{"summary"}, want: "summary"}, + // As MiniMax-M2.5 streams: no reasoning deltas, so the chunk splitter + // takes the block and leaves the blank lines after it in the answer. + {name: "a block the client already split", pieces: []string{"plan", "\n\n", answer}, want: "plan"}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: tc.pieces, reasonings: tc.reasonings}) + resp, err := newFallbackLLM(t, srv.URL, "MiniMax-M2.7").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, answerSchema(), + llms.WithStreamingFunc(func(context.Context, streaming.Chunk) error { return nil })) + require.NoError(t, err) + assert.Equal(t, answer, resp.Choices[0].Content) + require.NotNil(t, resp.Choices[0].Reasoning) + assert.Equal(t, tc.want, strings.TrimSpace(resp.Choices[0].Reasoning.Content)) + }) + } +} + +// Only an emulated structured-output answer is unwrapped: every other answer, +// a native json_schema one included, comes back and is validated as sent. +func TestAnswersOutsideTheFallbackStayAsSent(t *testing.T) { + t.Parallel() + + const fenced = "```json\n{\"answer\":\"42\"}\n```" + human := []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")} + + t.Run("JSON mode alone on a fallback client", func(t *testing.T) { + t.Parallel() + srv := newFallbackServer(t, fallbackReply{pieces: []string{fenced}}) + resp, err := newFallbackLLM(t, srv.URL, "deepseek-flash").GenerateContent(t.Context(), human, llms.WithJSONMode()) + require.NoError(t, err) + assert.Equal(t, fenced, resp.Choices[0].Content) + }) + + t.Run("a native json_schema answer is validated as sent", func(t *testing.T) { + t.Parallel() + srv := newFallbackServer(t, fallbackReply{pieces: []string{fenced}}) + resp, err := newFallbackLLM(t, srv.URL, "gpt-4o").GenerateContent(t.Context(), human, answerSchema()) + var validation *llms.ErrStructuredOutputValidation + require.ErrorAs(t, err, &validation) + assert.Equal(t, fenced, resp.Choices[0].Content) + }) +} + +// The per-call model decides the unwrap, as it decides the request. +func TestThePerCallModelDecidesTheFallbackUnwrap(t *testing.T) { + t.Parallel() + + srv := newFallbackServer(t, fallbackReply{pieces: []string{"```json\n{\"answer\":\"42\"}\n```"}}) + resp, err := newFallbackLLM(t, srv.URL, "gpt-4o").GenerateContent(t.Context(), + []llms.MessageContent{llms.TextParts(llms.ChatMessageTypeHuman, "question")}, + answerSchema(), llms.WithModel("minimax/MiniMax-M2.7")) + require.NoError(t, err) + assert.Equal(t, `{"answer":"42"}`, resp.Choices[0].Content) + assert.Empty(t, srv.request(t, 0).ResponseFormat) +} diff --git a/llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-flash.httprr b/llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-flash.httprr new file mode 100644 index 000000000..4269a042e --- /dev/null +++ b/llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-flash.httprr @@ -0,0 +1,25 @@ +httprr trace v1 +851 1256 +POST https://api.deepseek.com/chat/completions HTTP/1.1 +Host: api.deepseek.com +User-Agent: langchaingo-httprr +Content-Length: 648 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"deepseek-flash","messages":[{"role":"user","content":"What is the weather in Paris? Use the tool."},{"role":"assistant","content":"","tool_calls":[{"id":"call_07_Z9fjqXcYkT3bQ2wRmN8pLs4v","type":"function","function":{"name":"get_weather","arguments":"{\"city\":\"Paris\"}"}}],"reasoning_content":""},{"role":"tool","content":"Sunny, 21C","name":"get_weather","tool_call_id":"call_07_Z9fjqXcYkT3bQ2wRmN8pLs4v"}],"max_tokens":400,"tools":[{"type":"function","function":{"name":"get_weather","description":"Get the current weather for one city.","parameters":{"properties":{"city":{"type":"string"}},"required":["city"],"type":"object"}}}]}HTTP/2.0 200 OK +Content-Length: 665 +Access-Control-Allow-Credentials: true +Content-Type: application/json +Date: Thu, 24 Sep 2026 19:53:00 GMT +Server: elb +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Vary: origin, access-control-request-method, access-control-request-headers +Via: 1.1 f96816b40dac23679364d0e0033bb9d8.cloudfront.net (CloudFront) +X-Amz-Cf-Id: MAxb7vvMy3-CxeUmC1h3iS44XMUNU-KojMILovGyx6dUiWxtcjKzAw== +X-Amz-Cf-Pop: AMS56-P1 +X-Cache: Miss from cloudfront +X-Content-Type-Options: nosniff +X-Ds-Trace-Id: 61a2b26d65a023d163ff8d5b1b2a5830 + +{"id":"eccca64d-9ffd-4312-a777-6d3924a1be46","object":"chat.completion","created":1790279580,"model":"deepseek-flash","choices":[{"index":0,"message":{"role":"assistant","content":"The weather in Paris is currently **sunny with a temperature of 21°C** (about 70°F).","reasoning_content":"The tool returned \"Sunny, 21C\". Report it."},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":358,"completion_tokens":40,"total_tokens":398,"prompt_tokens_details":{"cached_tokens":128},"completion_tokens_details":{"reasoning_tokens":14},"prompt_cache_hit_tokens":128,"prompt_cache_miss_tokens":230},"system_fingerprint":"aeb56401ca74e127821c4f9126dcb669"} \ No newline at end of file diff --git a/llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-v4-pro.httprr b/llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-v4-pro.httprr new file mode 100644 index 000000000..051805cad --- /dev/null +++ b/llms/openai/testdata/TestDeepSeekTakesBackAToolTurnWithoutReasoning-deepseek-v4-pro.httprr @@ -0,0 +1,25 @@ +httprr trace v1 +852 1321 +POST https://api.deepseek.com/chat/completions HTTP/1.1 +Host: api.deepseek.com +User-Agent: langchaingo-httprr +Content-Length: 649 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"deepseek-v4-pro","messages":[{"role":"user","content":"What is the weather in Paris? Use the tool."},{"role":"assistant","content":"","tool_calls":[{"id":"call_07_Z9fjqXcYkT3bQ2wRmN8pLs4v","type":"function","function":{"name":"get_weather","arguments":"{\"city\":\"Paris\"}"}}],"reasoning_content":""},{"role":"tool","content":"Sunny, 21C","name":"get_weather","tool_call_id":"call_07_Z9fjqXcYkT3bQ2wRmN8pLs4v"}],"max_tokens":400,"tools":[{"type":"function","function":{"name":"get_weather","description":"Get the current weather for one city.","parameters":{"properties":{"city":{"type":"string"}},"required":["city"],"type":"object"}}}]}HTTP/2.0 200 OK +Content-Length: 730 +Access-Control-Allow-Credentials: true +Content-Type: application/json +Date: Thu, 24 Sep 2026 19:53:00 GMT +Server: elb +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Vary: origin, access-control-request-method, access-control-request-headers +Via: 1.1 f96816b40dac23679364d0e0033bb9d8.cloudfront.net (CloudFront) +X-Amz-Cf-Id: CE_fKfCNGon61mTVFDuWIVXpMtx029Q9P_1VOl2RAnIrpFsvQLVS-w== +X-Amz-Cf-Pop: AMS56-P1 +X-Cache: Miss from cloudfront +X-Content-Type-Options: nosniff +X-Ds-Trace-Id: 703c642648a2a84d7864dffc5d6ad7d9 + +{"id":"7369edac-7103-483a-9c6b-aca82fa29b12","object":"chat.completion","created":1790279580,"model":"deepseek-v4-pro","choices":[{"index":0,"message":{"role":"assistant","content":"The weather in Paris is **Sunny, 21°C**.","reasoning_content":"The user asked for the weather in Paris and to use the tool. I called the tool and got \"Sunny, 21C\". Now I need to respond with the weather information."},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":427,"completion_tokens":53,"total_tokens":480,"prompt_tokens_details":{"cached_tokens":384},"completion_tokens_details":{"reasoning_tokens":38},"prompt_cache_hit_tokens":384,"prompt_cache_miss_tokens":43},"system_fingerprint":"a307abda487cd1b463329ccb945ce396"} \ No newline at end of file diff --git a/llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-non-streaming.httprr b/llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-non-streaming.httprr new file mode 100644 index 000000000..51dd5f821 --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-non-streaming.httprr @@ -0,0 +1,25 @@ +httprr trace v1 +1126 1605 +POST https://api.deepseek.com/chat/completions HTTP/1.1 +Host: api.deepseek.com +User-Agent: langchaingo-httprr +Content-Length: 923 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"deepseek-flash","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Name two landmarks of Paris.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"landmarks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"landmarks\"],\"additionalProperties\":false}"}],"response_format":{"type":"json_object"}}HTTP/2.0 200 OK +Content-Length: 1013 +Access-Control-Allow-Credentials: true +Content-Type: application/json +Date: Thu, 24 Sep 2026 19:37:07 GMT +Server: elb +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Vary: origin, access-control-request-method, access-control-request-headers +Via: 1.1 9adf50a068a92adaab58cf6a21118640.cloudfront.net (CloudFront) +X-Amz-Cf-Id: Gd2HYwd6gzQpRPm-ESp6vxQo4yT8vlKZXrrMXz2uCFw1JPFvvIg6pg== +X-Amz-Cf-Pop: AMS58-P5 +X-Cache: Miss from cloudfront +X-Content-Type-Options: nosniff +X-Ds-Trace-Id: 339b6bbbb0f54a92169100881d30f271 + +{"id":"d0cd7de7-1b09-4e0d-83ae-82e047402113","object":"chat.completion","created":1790278627,"model":"deepseek-flash","choices":[{"index":0,"message":{"role":"assistant","content":"{\"city\":\"Paris\",\"landmarks\":[{\"name\":\"Eiffel Tower\",\"kind\":\"monument\"},{\"name\":\"Louvre Museum\",\"kind\":\"museum\"}]}","reasoning_content":"The user asks for JSON output only. Provide city and landmarks array with exactly two items.\n\nBut system says \"You are a travel guide. Answer in Markdown with headings.\" and \"## Response Format: You MUST strictly adhere to the following schema to reply: {\"type\": \"json_object\"}\". The user instruction overrides format. I'll output JSON."},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":215,"completion_tokens":108,"total_tokens":323,"prompt_tokens_details":{"cached_tokens":0},"completion_tokens_details":{"reasoning_tokens":72},"prompt_cache_hit_tokens":0,"prompt_cache_miss_tokens":215},"system_fingerprint":"aeb56401ca74e127821c4f9126dcb669"} \ No newline at end of file diff --git a/llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-streaming.httprr b/llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-streaming.httprr new file mode 100644 index 000000000..f5e98c001 --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackDeepSeek-streaming.httprr @@ -0,0 +1,103 @@ +httprr trace v1 +1180 12797 +POST https://api.deepseek.com/chat/completions HTTP/1.1 +Host: api.deepseek.com +User-Agent: langchaingo-httprr +Content-Length: 977 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"deepseek-flash","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Name two landmarks of Paris.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"landmarks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"landmarks\"],\"additionalProperties\":false}"}],"stream":true,"response_format":{"type":"json_object"},"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +Content-Length: 12163 +Access-Control-Allow-Credentials: true +Cache-Control: no-cache +Content-Type: text/event-stream; charset=utf-8 +Date: Thu, 24 Sep 2026 19:37:09 GMT +Server: elb +Strict-Transport-Security: max-age=31536000; includeSubDomains; preload +Vary: origin, access-control-request-method, access-control-request-headers +Via: 1.1 9adf50a068a92adaab58cf6a21118640.cloudfront.net (CloudFront) +X-Amz-Cf-Id: g1n-Km4staVgFGK4WhBm1tqcRvjvROpWpJDduI5Zq9z9GYb_VjwikQ== +X-Amz-Cf-Pop: AMS58-P5 +X-Cache: Miss from cloudfront +X-Content-Type-Options: nosniff +X-Ds-Trace-Id: cfd130bba7c4c920096d65a7392cdf38 + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"role":"assistant","content":null,"reasoning_content":""},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"{","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"city","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\":\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"Paris","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\",\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"land","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"marks","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\":[","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"{\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"name","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\":\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"E","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"iff","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"el","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":" Tower","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\",\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"kind","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\":\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"mon","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"ument","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\"},","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"{\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"name","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\":\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"L","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"ouv","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"re","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":" Museum","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\",\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"kind","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\":\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"museum","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"}]","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"}","reasoning_content":null},"logprobs":null,"finish_reason":null}],"usage":null} + +data: {"id":"605e573f-daff-491e-8024-1956f17c1ba0","object":"chat.completion.chunk","created":1790278629,"model":"deepseek-flash","system_fingerprint":"aeb56401ca74e127821c4f9126dcb669","choices":[{"index":0,"delta":{"content":"","reasoning_content":null},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":215,"completion_tokens":36,"total_tokens":251,"prompt_tokens_details":{"cached_tokens":0},"completion_tokens_details":{"reasoning_tokens":0},"prompt_cache_hit_tokens":0,"prompt_cache_miss_tokens":215}} + +data: [DONE] + diff --git a/llms/openai/testdata/TestStructuredOutputFallbackMiniMax-non-streaming.httprr b/llms/openai/testdata/TestStructuredOutputFallbackMiniMax-non-streaming.httprr new file mode 100644 index 000000000..45d5c339e --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackMiniMax-non-streaming.httprr @@ -0,0 +1,27 @@ +httprr trace v1 +1082 3605 +POST https://api.minimax.io/v1/chat/completions HTTP/1.1 +Host: api.minimax.io +User-Agent: langchaingo-httprr +Content-Length: 880 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"MiniMax-M2.7","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Name two landmarks of Paris.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"landmarks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"landmarks\"],\"additionalProperties\":false}"}]}HTTP/2.0 200 OK +Content-Length: 3016 +Access-Control-Allow-Origin: * +Alb_receive_time: 1790286709.753 +Alb_request_id: c1d3be4f978908bd9793b9d64babf64222ddfb19 +Cache-Control: max-age=0, no-cache, no-store +Content-Type: application/json; charset=utf-8 +Date: Thu, 24 Sep 2026 21:51:57 GMT +Expires: Thu, 24 Sep 2026 21:51:57 GMT +Minimax-Request-Id: 6325dbcead7759f67b53e0ba0efd9518 +Pragma: no-cache +Trace-Id: 0704ce75a1d16b462b6ddbfec435628a +Vary: Accept-Encoding +X-From: ak +X-Mm-Request-Id: 2078484896493347777_1790286717a3jxth +X-Session-Id: e17187c5048bda17aa8387acb7d1492b + +{"id":"0704ce75a1d16b462b6ddbfec435628a","choices":[{"finish_reason":"stop","index":0,"message":{"content":"\nThe user asks: \"Name two landmarks of Paris.\" They also ask: \"Reply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\"\n\nThus we need to produce a JSON object that conforms to the schema. Schema:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"city\": {\"type\": \"string\"},\n \"landmarks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\"type\": \"string\"},\n \"kind\": {\"type\": \"string\", \"enum\": [\"museum\",\"monument\",\"park\",\"church\",\"other\"]}\n },\n \"required\": [\"name\",\"kind\"],\n \"additionalProperties\": false\n }\n }\n },\n \"required\": [\"city\",\"landmarks\"],\n \"additionalProperties\": false\n}\n\nThus we need an object with city: \"Paris\" and landmarks array of two objects, each with name and kind (one of the enum values). Provide two landmarks of Paris: e.g., \"Eiffel Tower\" (monument), \"Louvre\" (museum). Or \"Notre-Dame\" (church), \"Jardin du Luxembourg\" (park). The user wants two landmarks. Provide them as name strings, correct kind. Ensure no extra keys. Ensure JSON is valid. Also ensure no extra whitespace? Probably fine. Provide exactly one JSON object.\n\nWe must ensure that no extra keys. No \"additionalProperties\": false means we can't have any extra properties beyond city and landmarks. Provide exactly:\n\n{\n \"city\": \"Paris\",\n \"landmarks\": [\n {\n \"name\": \"Eiffel Tower\",\n \"kind\": \"monument\"\n },\n {\n \"name\": \"Louvre\",\n \"kind\": \"museum\"\n }\n ]\n}\n\nMake sure to include quotes properly. No extra fields. Output exactly this JSON, no markdown fences. Should be fine.\n\nPotential pitfalls: The JSON must be exactly one value; in this case it's an object. So the output must be exactly that JSON. Ensure no trailing newline? Probably okay. Ensure no extra whitespace outside? The user says no text before or after. So just output the JSON.\n\nThus final answer: JSON as above.\n\n\n{\"city\":\"Paris\",\"landmarks\":[{\"name\":\"Eiffel Tower\",\"kind\":\"monument\"},{\"name\":\"Louvre\",\"kind\":\"museum\"}]}","role":"assistant","name":"MiniMax AI","audio_content":""}}],"created":1790286709,"model":"MiniMax-M2.7","object":"chat.completion","usage":{"total_tokens":702,"total_characters":0,"prompt_tokens":167,"completion_tokens":535,"completion_tokens_details":{"reasoning_tokens":505},"prompt_tokens_details":{"cached_tokens":0}},"input_sensitive":false,"output_sensitive":false,"input_sensitive_type":0,"output_sensitive_type":0,"output_sensitive_int":0,"base_resp":{"status_code":0,"status_msg":""}} diff --git a/llms/openai/testdata/TestStructuredOutputFallbackMiniMax-streaming.httprr b/llms/openai/testdata/TestStructuredOutputFallbackMiniMax-streaming.httprr new file mode 100644 index 000000000..edc74c1e6 --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackMiniMax-streaming.httprr @@ -0,0 +1,54 @@ +httprr trace v1 +1136 6824 +POST https://api.minimax.io/v1/chat/completions HTTP/1.1 +Host: api.minimax.io +User-Agent: langchaingo-httprr +Content-Length: 934 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"MiniMax-M2.7","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Name two landmarks of Paris.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"landmarks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"landmarks\"],\"additionalProperties\":false}"}],"stream":true,"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +Content-Length: 6235 +Access-Control-Allow-Origin: * +Alb_receive_time: 1790286718.35 +Alb_request_id: ce1d93a59e85685e2c8b91444c1efe568d7388da +Cache-Control: max-age=0, no-cache, no-store +Content-Type: text/event-stream; charset=utf-8 +Date: Thu, 24 Sep 2026 21:51:59 GMT +Expires: Thu, 24 Sep 2026 21:51:59 GMT +Minimax-Request-Id: e04e376ae86591177b7d5ade75f8166c +Pragma: no-cache +Trace-Id: 0704ce7e5c25aec8c6789c745c1afe8d +Vary: Accept-Encoding +X-From: ak +X-Mm-Request-Id: 2078484896493347777_1790286719s06zto +X-Session-Id: e17187c5048bda17aa8387acb7d1492b + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":"\nThe user","role":"assistant","reasoning":"The user"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":" says: \"Name two landmarks of Paris. Reply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings,","role":"assistant","reasoning":" says: \"Name two landmarks of Paris. Reply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings,"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":" and no text before or after the JSON. The whole reply is parsed by a JSON parser.\"\n\nWe need to produce JSON with fields: \"city\": string, \"land","role":"assistant","reasoning":" and no text before or after the JSON. The whole reply is parsed by a JSON parser.\"\n\nWe need to produce JSON with fields: \"city\": string, \"land"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":"marks\": array of objects each with name and kind (enum). So output something like:\n\n{\n \"city\": \"Paris\",\n \"","role":"assistant","reasoning":"marks\": array of objects each with name and kind (enum). So output something like:\n\n{\n \"city\": \"Paris\",\n \""}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":"landmarks\": [\n {\"name\": \"Eiffel Tower\", \"kind\": \"monument\"},\n {\"name\": \"Louvre Museum\", \"kind\": \"museum\"}\n ]\n}\n\nNo extra text before or after, no","role":"assistant","reasoning":"landmarks\": [\n {\"name\": \"Eiffel Tower\", \"kind\": \"monument\"},\n {\"name\": \"Louvre Museum\", \"kind\": \"museum\"}\n ]\n}\n\nNo extra text before or after, no"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":" code fences. The response must be exactly that JSON.\n\nCheck for validity: The schema requires \"city\" and \"landmarks\" as","role":"assistant","reasoning":" code fences. The response must be exactly that JSON.\n\nCheck for validity: The schema requires \"city\" and \"landmarks\" as"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":" required fields. Landmarks items must have name and kind; kind must be one of \"museum\",\"monument\",\"park\",\"church\",\"other\". Use \"mon","role":"assistant","reasoning":" required fields. Landmarks items must have name and kind; kind must be one of \"museum\",\"monument\",\"park\",\"church\",\"other\". Use \"mon"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":"ument\" and \"museum\". Both are allowed.\n\nThus produce JSON exactly. Ensure no extra spaces maybe okay. It must be a JSON","role":"assistant","reasoning":"ument\" and \"museum\". Both are allowed.\n\nThus produce JSON exactly. Ensure no extra spaces maybe okay. It must be a JSON"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":" value. Provide a JSON object. Use proper quoting, no trailing commas.\n\nThus final answer:\n\n{\n \"city\": \"Paris\",\n \"land","role":"assistant","reasoning":" value. Provide a JSON object. Use proper quoting, no trailing commas.\n\nThus final answer:\n\n{\n \"city\": \"Paris\",\n \"land"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":"marks\": [\n {\n \"name\": \"Eiffel Tower\",\n \"kind\": \"monument\"\n },\n {\n \"name\": \"Louvre Museum\",\n \"kind\": \"museum\"\n }\n ]\n}\n\nNo extra text","role":"assistant","reasoning":"marks\": [\n {\n \"name\": \"Eiffel Tower\",\n \"kind\": \"monument\"\n },\n {\n \"name\": \"Louvre Museum\",\n \"kind\": \"museum\"\n }\n ]\n}\n\nNo extra text"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":". Ensure no Markdown.","role":"assistant","reasoning":". Ensure no Markdown."}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"index":0,"delta":{"content":"\n\n\n{\"city\":\"Paris\",\"landmarks\":[{\"name\":\"Eiffel Tower\",\"kind\":\"monument\"},{\"name\":\"Louvre Museum\",\"kind\":\"museum\"}]}","role":"assistant"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"finish_reason":"stop","index":0,"delta":{"content":"","role":"assistant"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":null} + +data: {"id":"0704ce7e5c25aec8c6789c745c1afe8d","choices":[{"finish_reason":"stop","index":0,"delta":{"content":"","role":"assistant"}}],"created":1790286718,"model":"MiniMax-M2.7","object":"chat.completion.chunk","usage":{"total_tokens":525,"total_characters":0,"prompt_tokens":167,"completion_tokens":358,"completion_tokens_details":{"reasoning_tokens":327},"prompt_tokens_details":{"cached_tokens":0}}} + diff --git a/llms/openai/testdata/TestStructuredOutputFallbackMiniMaxToolRound.httprr b/llms/openai/testdata/TestStructuredOutputFallbackMiniMaxToolRound.httprr new file mode 100644 index 000000000..58d30cea5 --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackMiniMaxToolRound.httprr @@ -0,0 +1,52 @@ +httprr trace v1 +1104 1623 +POST https://api.minimax.io/v1/chat/completions HTTP/1.1 +Host: api.minimax.io +User-Agent: langchaingo-httprr +Content-Length: 902 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"MiniMax-M2.7","messages":[{"role":"user","content":"What is the weather in Paris? Use the tool.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser. You may still call the tools you are offered; this applies to your final answer.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"temperature_c\":{\"type\":\"integer\"},\"summary\":{\"type\":\"string\"}},\"required\":[\"city\",\"temperature_c\",\"summary\"],\"additionalProperties\":false}"}],"tools":[{"type":"function","function":{"name":"get_weather","description":"Current weather for a city","parameters":{"properties":{"city":{"type":"string"}},"required":["city"],"type":"object"}}}]}HTTP/2.0 200 OK +Content-Length: 1034 +Access-Control-Allow-Origin: * +Alb_receive_time: 1790286723.291 +Alb_request_id: 68f8356d50187b26951c43eca9d33e1baffdf80b +Cache-Control: max-age=0, no-cache, no-store +Content-Type: application/json; charset=utf-8 +Date: Thu, 24 Sep 2026 21:52:06 GMT +Expires: Thu, 24 Sep 2026 21:52:06 GMT +Minimax-Request-Id: 6db92a294d911d78038f5556d72202c6 +Pragma: no-cache +Trace-Id: 0704ce836f74ef19b93afb38896ab79a +Vary: Accept-Encoding +X-From: ak +X-Mm-Request-Id: 2078484896493347777_1790286725czyonf +X-Session-Id: 670ac27f785ca13ca1c8e037e963e762 + +{"id":"0704ce836f74ef19b93afb38896ab79a","choices":[{"finish_reason":"tool_calls","index":0,"message":{"content":"\nThe user wants me to get the weather in Paris and return it as JSON in a specific format. I need to:\n1. First call the get_weather tool for Paris\n2. Then return the result as JSON with the exact schema provided\n\nLet me call the weather tool first.\n\n\n","role":"assistant","name":"MiniMax AI","tool_calls":[{"id":"call_function_ny00syozhhsb_1","type":"function","function":{"name":"get_weather","arguments":"{\"city\": \"Paris\"}"},"index":0}],"audio_content":""}}],"created":1790286723,"model":"MiniMax-M2.7","object":"chat.completion","usage":{"total_tokens":400,"total_characters":0,"prompt_tokens":314,"completion_tokens":86,"completion_tokens_details":{"reasoning_tokens":61},"prompt_tokens_details":{"cached_tokens":0}},"input_sensitive":false,"output_sensitive":false,"input_sensitive_type":0,"output_sensitive_type":0,"output_sensitive_int":0,"base_resp":{"status_code":0,"status_msg":""}} +1714 1534 +POST https://api.minimax.io/v1/chat/completions HTTP/1.1 +Host: api.minimax.io +User-Agent: langchaingo-httprr +Content-Length: 1511 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"MiniMax-M2.7","messages":[{"role":"user","content":"What is the weather in Paris? Use the tool.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser. You may still call the tools you are offered; this applies to your final answer.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"temperature_c\":{\"type\":\"integer\"},\"summary\":{\"type\":\"string\"}},\"required\":[\"city\",\"temperature_c\",\"summary\"],\"additionalProperties\":false}"},{"role":"assistant","content":"\u003cthink\u003eThe user wants me to get the weather in Paris and return it as JSON in a specific format. I need to:\n1. First call the get_weather tool for Paris\n2. Then return the result as JSON with the exact schema provided\n\nLet me call the weather tool first.\u003c/think\u003e","tool_calls":[{"id":"call_function_ny00syozhhsb_1","type":"function","function":{"name":"get_weather","arguments":"{\"city\": \"Paris\"}"}}]},{"role":"tool","content":"{\"temperature_c\":18,\"conditions\":\"light rain\"}","name":"get_weather","tool_call_id":"call_function_ny00syozhhsb_1"}],"tools":[{"type":"function","function":{"name":"get_weather","description":"Current weather for a city","parameters":{"properties":{"city":{"type":"string"}},"required":["city"],"type":"object"}}}]}HTTP/2.0 200 OK +Content-Length: 969 +Access-Control-Allow-Origin: * +Alb_receive_time: 1790286727.157 +Alb_request_id: f234ac707f559a7ad654b10e4365befba124fcfe +Cache-Control: max-age=0, no-cache, no-store +Content-Type: application/json; charset=utf-8 +Date: Thu, 24 Sep 2026 21:52:08 GMT +Expires: Thu, 24 Sep 2026 21:52:08 GMT +Minimax-Request-Id: 51f10fbdb01f12b5838f23bd74fd60d7 +Pragma: no-cache +Trace-Id: 0704ce87bfafdb112d9bbc9c661b6f97 +X-From: ak +X-Mm-Request-Id: 2078484896493347777_1790286728hvj1e2 +X-Session-Id: 670ac27f785ca13ca1c8e037e963e762 + +{"id":"0704ce87bfafdb112d9bbc9c661b6f97","choices":[{"finish_reason":"stop","index":0,"message":{"content":"\nI got the weather data for Paris. Now I need to format it according to the JSON schema:\n- city: \"Paris\" (string)\n- temperature_c: 18 (integer)\n- summary: \"light rain\" (string)\n\nI need to return exactly this JSON, no markdown, no code fences, no text before or after.\n\n\n{\"city\":\"Paris\",\"temperature_c\":18,\"summary\":\"light rain\"}","role":"assistant","name":"MiniMax AI","audio_content":""}}],"created":1790286727,"model":"MiniMax-M2.7","object":"chat.completion","usage":{"total_tokens":515,"total_characters":0,"prompt_tokens":427,"completion_tokens":88,"completion_tokens_details":{"reasoning_tokens":72},"prompt_tokens_details":{"cached_tokens":0}},"input_sensitive":false,"output_sensitive":false,"input_sensitive_type":0,"output_sensitive_type":0,"output_sensitive_int":0,"base_resp":{"status_code":0,"status_msg":""}} diff --git a/llms/openai/testdata/TestStructuredOutputFallbackZAI-non-streaming.httprr b/llms/openai/testdata/TestStructuredOutputFallbackZAI-non-streaming.httprr new file mode 100644 index 000000000..ffbc1c6a0 --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackZAI-non-streaming.httprr @@ -0,0 +1,26 @@ +httprr trace v1 +1146 1035 +POST https://api.z.ai/api/paas/v4/chat/completions HTTP/1.1 +Host: api.z.ai +User-Agent: langchaingo-httprr +Content-Length: 947 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"glm-5.3-flash","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Name two landmarks of Paris.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"landmarks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"landmarks\"],\"additionalProperties\":false}"}],"reasoning_effort":"low","response_format":{"type":"json_object"}}HTTP/2.0 200 OK +Content-Length: 550 +Alt-Svc: h3=":443"; ma=3600 +Content-Type: application/json; charset=UTF-8 +Date: Thu, 24 Sep 2026 19:37:12 GMT +Ga-Traceid: b1fc9c6ad8479c699a8ba41e7130c591 +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +X-Log-Id: 202609250337119b18877e0db84743 +X-Request-Id: a00274d3-f687-44c2-9b63-00af1e01b3b8 + +{"choices":[{"finish_reason":"stop","index":0,"message":{"content":"{\"city\":\"Paris\",\"landmarks\":[{\"name\":\"Eiffel Tower\",\"kind\":\"monument\"},{\"name\":\"Louvre Museum\",\"kind\":\"museum\"}]}","role":"assistant"}}],"created":1790278632,"id":"202609250337119b18877e0db84743","model":"glm-5.3-flash","object":"chat.completion","request_id":"202609250337119b18877e0db84743","usage":{"completion_tokens":34,"completion_tokens_details":{"reasoning_tokens":0},"prompt_tokens":228,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":262}} \ No newline at end of file diff --git a/llms/openai/testdata/TestStructuredOutputFallbackZAI-streaming.httprr b/llms/openai/testdata/TestStructuredOutputFallbackZAI-streaming.httprr new file mode 100644 index 000000000..9e98f820b --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackZAI-streaming.httprr @@ -0,0 +1,87 @@ +httprr trace v1 +1201 6556 +POST https://api.z.ai/api/paas/v4/chat/completions HTTP/1.1 +Host: api.z.ai +User-Agent: langchaingo-httprr +Content-Length: 1001 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"glm-5.3-flash","messages":[{"role":"system","content":"You are a travel guide. Answer in Markdown with headings."},{"role":"user","content":"Name two landmarks of Paris.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"landmarks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"museum\",\"monument\",\"park\",\"church\",\"other\"]}},\"required\":[\"name\",\"kind\"],\"additionalProperties\":false}}},\"required\":[\"city\",\"landmarks\"],\"additionalProperties\":false}"}],"stream":true,"reasoning_effort":"low","response_format":{"type":"json_object"},"stream_options":{"include_usage":true}}HTTP/2.0 200 OK +Content-Length: 6070 +Alt-Svc: h3=":443"; ma=3600 +Content-Type: text/event-stream;charset=UTF-8 +Date: Thu, 24 Sep 2026 19:37:15 GMT +Ga-Traceid: a7f36d04885d475f0999acdbff546ef4 +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +X-Log-Id: 20260925033713aac8b6560bef4705 +X-Request-Id: c480a857-f9a2-4207-ac53-a3988a76bd9e + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"{\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"city"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\":\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"Paris"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\",\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"land"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"marks"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\":[{\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"name"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\":\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"E"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"iff"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"el"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":" Tower"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\",\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"kind"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\":\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"mon"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"ument"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\"},{\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"name"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\":\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"Lou"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"vre"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":" Museum"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\",\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"kind"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"\":\""}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"museum\"}]}"}}]} + +data: {"id":"20260925033713aac8b6560bef4705","created":1790278634,"object":"chat.completion.chunk","model":"glm-5.3-flash","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":228,"completion_tokens":34,"total_tokens":262,"prompt_tokens_details":{"cached_tokens":64},"completion_tokens_details":{"reasoning_tokens":0}}} + +data: [DONE] + diff --git a/llms/openai/testdata/TestStructuredOutputFallbackZAIToolRound.httprr b/llms/openai/testdata/TestStructuredOutputFallbackZAIToolRound.httprr new file mode 100644 index 000000000..39b6a5adf --- /dev/null +++ b/llms/openai/testdata/TestStructuredOutputFallbackZAIToolRound.httprr @@ -0,0 +1,50 @@ +httprr trace v1 +1168 1053 +POST https://api.z.ai/api/paas/v4/chat/completions HTTP/1.1 +Host: api.z.ai +User-Agent: langchaingo-httprr +Content-Length: 969 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"glm-5.3-flash","messages":[{"role":"user","content":"What is the weather in Paris? Use the tool.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser. You may still call the tools you are offered; this applies to your final answer.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"temperature_c\":{\"type\":\"integer\"},\"summary\":{\"type\":\"string\"}},\"required\":[\"city\",\"temperature_c\",\"summary\"],\"additionalProperties\":false}"}],"reasoning_effort":"low","response_format":{"type":"json_object"},"tools":[{"type":"function","function":{"name":"get_weather","description":"Current weather for a city","parameters":{"properties":{"city":{"type":"string"}},"required":["city"],"type":"object"}}}]}HTTP/2.0 200 OK +Content-Length: 568 +Alt-Svc: h3=":443"; ma=3600 +Content-Type: application/json; charset=UTF-8 +Date: Thu, 24 Sep 2026 19:37:20 GMT +Ga-Traceid: 7081e2b6ce1204393e87ace6ad893edd +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +X-Log-Id: 20260925033716de571718e0ac464f +X-Request-Id: 4a05cf30-a6bc-448e-8c52-3816e441ead0 + +{"choices":[{"finish_reason":"tool_calls","index":0,"message":{"content":"","role":"assistant","tool_calls":[{"function":{"arguments":"{\"city\":\"Paris\"}","name":"get_weather"},"id":"call_-7231574699862385813","index":0,"type":"function"}]}}],"created":1790278640,"id":"20260925033716de571718e0ac464f","model":"glm-5.3-flash","object":"chat.completion","request_id":"20260925033716de571718e0ac464f","usage":{"completion_tokens":12,"completion_tokens_details":{"reasoning_tokens":0},"prompt_tokens":339,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":351}}1485 968 +POST https://api.z.ai/api/paas/v4/chat/completions HTTP/1.1 +Host: api.z.ai +User-Agent: langchaingo-httprr +Content-Length: 1285 +Authorization: Bearer test-api-key +Content-Type: application/json + +{"model":"glm-5.3-flash","messages":[{"role":"user","content":"What is the weather in Paris? Use the tool.\n\nReply with exactly one JSON value that validates against the JSON Schema below. This overrides any earlier instruction about format or style: no Markdown, no code fences, no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser. You may still call the tools you are offered; this applies to your final answer.\nJSON Schema:\n{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"},\"temperature_c\":{\"type\":\"integer\"},\"summary\":{\"type\":\"string\"}},\"required\":[\"city\",\"temperature_c\",\"summary\"],\"additionalProperties\":false}"},{"role":"assistant","content":"","tool_calls":[{"id":"call_-7231574699862385813","type":"function","function":{"name":"get_weather","arguments":"{\"city\":\"Paris\"}"}}]},{"role":"tool","content":"{\"temperature_c\":18,\"conditions\":\"light rain\"}","name":"get_weather","tool_call_id":"call_-7231574699862385813"}],"reasoning_effort":"low","response_format":{"type":"json_object"},"tools":[{"type":"function","function":{"name":"get_weather","description":"Current weather for a city","parameters":{"properties":{"city":{"type":"string"}},"required":["city"],"type":"object"}}}]}HTTP/2.0 200 OK +Content-Length: 483 +Alt-Svc: h3=":443"; ma=3600 +Content-Type: application/json; charset=UTF-8 +Date: Thu, 24 Sep 2026 19:37:22 GMT +Ga-Traceid: 54a70412d42c3597e45830243c0df245 +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +Vary: Access-Control-Request-Method +Vary: Access-Control-Request-Headers +Vary: Origin +X-Log-Id: 20260925033721aafcd578cb4a4f2e +X-Request-Id: 26b907d2-914f-4a06-ac10-e9a9528dd21b + +{"choices":[{"finish_reason":"stop","index":0,"message":{"content":"{\"city\":\"Paris\",\"temperature_c\":18,\"summary\":\"light rain\"}","role":"assistant"}}],"created":1790278642,"id":"20260925033721aafcd578cb4a4f2e","model":"glm-5.3-flash","object":"chat.completion","request_id":"20260925033721aafcd578cb4a4f2e","usage":{"completion_tokens":20,"completion_tokens_details":{"reasoning_tokens":0},"prompt_tokens":366,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":386}} \ No newline at end of file diff --git a/llms/reasoning/effort_wire.go b/llms/reasoning/effort_wire.go index f643efb6c..4e58ccf9d 100644 --- a/llms/reasoning/effort_wire.go +++ b/llms/reasoning/effort_wire.go @@ -95,7 +95,7 @@ func TakesNoJSONSchema(model string) bool { return false } for _, form := range modelSpellings(model) { - if strings.HasPrefix(form, "deepseek") || strings.HasPrefix(form, "glm-") { + if strings.HasPrefix(form, "deepseek-") || strings.HasPrefix(form, "glm-") { return true } } @@ -123,6 +123,23 @@ func ReplaysReasoningOnEveryTurn(model string) bool { return false } +// ReplaysEmptyReasoning reports whether an earlier assistant turn with no reasoning +// to give back still carries reasoning_content, as an empty string. In thinking +// mode DeepSeek refuses (400) an assistant turn after the last user message that +// lacks the field, unless the turn's tool call ID is one DeepSeek issued, whose +// reasoning it then restores on its side. Its own thinking turns can come back +// with an empty reasoning, and a caller may rewrite the IDs or build the turn. +// The empty string stops that restore, so a caller that drops the reasoning of +// such a turn loses it; before the last user message DeepSeek restores nothing. +func ReplaysEmptyReasoning(model string) bool { + for _, form := range modelSpellings(model) { + if strings.HasPrefix(form, "deepseek-") { + return true + } + } + return false +} + // ReplaysThinkingInContent reports, for a model Mistral serves, whether its // earlier assistant turns take their reasoning back, which they take only as a // thinking chunk at the head of content, on every turn. diff --git a/llms/reasoning/effort_wire_test.go b/llms/reasoning/effort_wire_test.go index ade540088..ec1293ec9 100644 --- a/llms/reasoning/effort_wire_test.go +++ b/llms/reasoning/effort_wire_test.go @@ -230,3 +230,50 @@ func TestEffortWithTools(t *testing.T) { } } } + +func TestTakesNoJSONSchema(t *testing.T) { + t.Parallel() + + for model, want := range map[string]bool{ + "deepseek-flash": true, + "deepseek-v4-pro": true, + "deepseek-chat": true, + "deepseek/deepseek-v4-pro": true, + "DeepSeek-V4-Pro": true, + "glm-5.3": true, + "zai/glm-5.3": true, + "glm-5-2": false, // served by Mistral, which documents json_schema for it + "deepseekcoder": false, // not a current DeepSeek name: every one reads "deepseek-..." + "gpt-4o": false, + } { + if got := TakesNoJSONSchema(model); got != want { + t.Errorf("TakesNoJSONSchema(%q) = %v, want %v", model, got, want) + } + } +} + +func TestReplaysEmptyReasoning(t *testing.T) { + t.Parallel() + + for model, want := range map[string]bool{ + "deepseek-flash": true, + "deepseek-v4-pro": true, + "DeepSeek-V4-Pro": true, + "deepseek-chat": true, + "deepseek-reasoner": true, + "deepseek/deepseek-v4-pro": true, + "openrouter/deepseek/deepseek-v4-pro": true, + "deepseekcoder": false, // not a current DeepSeek name: every one reads "deepseek-..." + "kimi-k3": false, + "glm-5.3": false, + "qwen3.7-plus": false, + "MiniMax-M3": false, + "mistral-small-2603": false, + "grok-4.6": false, + "gpt-5.5": false, + } { + if got := ReplaysEmptyReasoning(model); got != want { + t.Errorf("ReplaysEmptyReasoning(%q) = %v, want %v", model, got, want) + } + } +} diff --git a/llms/structuredoutput/prompt.go b/llms/structuredoutput/prompt.go new file mode 100644 index 000000000..51bfaefd4 --- /dev/null +++ b/llms/structuredoutput/prompt.go @@ -0,0 +1,59 @@ +package structuredoutput + +import ( + "encoding/json" + "strings" +) + +// A door whose vendor cannot constrain its output to a JSON Schema carries the +// schema in the prompt instead. These texts are what the model reads; recorded +// requests hold them byte for byte, so a change means re-recording those tests. +const ( + // SchemaInstruction asks for exactly one JSON value matching the schema that + // follows it, and overrides any earlier instruction about format or style. + SchemaInstruction = "Reply with exactly one JSON value that validates against the JSON Schema below. " + + "This overrides any earlier instruction about format or style: no Markdown, no code fences, " + + "no headings, and no text before or after the JSON. The whole reply is parsed by a JSON parser." + // ToolsNote keeps tool calls open when tools are offered alongside the schema. + ToolsNote = "You may still call the tools you are offered; this applies to your final answer." +) + +// PromptInstruction returns the instruction that carries schema in the prompt, +// with ToolsNote when the request also offers tools. +func PromptInstruction(schema json.RawMessage, withTools bool) string { + instruction := SchemaInstruction + if withTools { + instruction += " " + ToolsNote + } + return instruction + "\nJSON Schema:\n" + string(schema) +} + +// UnwrapFencedJSON returns the body of a text that is exactly one Markdown code +// fence, untagged or tagged json, which a model often adds despite the prompt +// instruction. Anything else, such as prose around the fence or a second fence, +// is returned unchanged for validation to judge. +func UnwrapFencedJSON(text string) string { + trimmed := strings.TrimSpace(text) + if len(trimmed) < 6 || !strings.HasPrefix(trimmed, "```") || !strings.HasSuffix(trimmed, "```") { + return text + } + header, body, ok := strings.Cut(trimmed[3:len(trimmed)-3], "\n") + if !ok || containsFenceLine(body) { + return text + } + if tag := strings.TrimSpace(header); tag != "" && !strings.EqualFold(tag, "json") { + return text + } + return strings.TrimSpace(body) +} + +// containsFenceLine reports a line that opens or closes a code fence. A JSON +// string cannot hold a raw newline, so backticks inside one never start a line. +func containsFenceLine(body string) bool { + for line := range strings.Lines(body) { + if strings.HasPrefix(strings.TrimSpace(line), "```") { + return true + } + } + return false +} diff --git a/llms/structuredoutput/prompt_test.go b/llms/structuredoutput/prompt_test.go new file mode 100644 index 000000000..f8af64fcd --- /dev/null +++ b/llms/structuredoutput/prompt_test.go @@ -0,0 +1,44 @@ +package structuredoutput + +import ( + "encoding/json" + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestPromptInstruction(t *testing.T) { + t.Parallel() + + schema := json.RawMessage(`{"type":"object"}`) + assert.Equal(t, SchemaInstruction+"\nJSON Schema:\n"+`{"type":"object"}`, PromptInstruction(schema, false)) + assert.Equal(t, SchemaInstruction+" "+ToolsNote+"\nJSON Schema:\n"+`{"type":"object"}`, PromptInstruction(schema, true)) + // DeepSeek refuses json_object unless a message mentions JSON; the instruction does. + assert.Contains(t, strings.ToLower(PromptInstruction(schema, false)), "json") +} + +func TestUnwrapFencedJSON(t *testing.T) { + t.Parallel() + + for text, want := range map[string]string{ + "```json\n{\"a\":1}\n```": `{"a":1}`, + "```JSON\n{\"a\":1}\n```": `{"a":1}`, + " ```\n[1, 2]\n``` ": "[1, 2]", + "```json\n{\n \"a\": 1\n}\n```": "{\n \"a\": 1\n}", + `{"a":1}`: `{"a":1}`, + "```json {\"a\":1}```": "```json {\"a\":1}```", + "```go\nfmt.Println()\n```": "```go\nfmt.Println()\n```", + "note\n```json\n{}\n```": "note\n```json\n{}\n```", + "```json\n{}\n```\n```json\n{}\n```": "```json\n{}\n```\n```json\n{}\n```", + "``````": "``````", + "```json\r\n{\"a\":1}\r\n```": `{"a":1}`, + "``` json\n{\"a\":1}\n```": `{"a":1}`, + "```json\n{\"a\":\"```\"}\n```": "{\"a\":\"```\"}", + "```json\n```": "", + "```json\n\n```": "", + "````json\n{\"a\":1}\n````": "````json\n{\"a\":1}\n````", + } { + assert.Equal(t, want, UnwrapFencedJSON(text), "%q", text) + } +}